Browse Source

Initial commit

Axel Nordh 3 years ago
parent
commit
bee95c04ef
100 changed files with 5700 additions and 0 deletions
  1. 100 0
      .vscode/launch.json
  2. 55 0
      .vscode/settings.json
  3. 41 0
      .vscode/tasks.json
  4. 8 0
      Assets/Editor Default Resources.meta
  5. 8 0
      Assets/Editor Default Resources/Firebase.meta
  6. BIN
      Assets/Editor Default Resources/Firebase/fb_analytics.png
  7. 68 0
      Assets/Editor Default Resources/Firebase/fb_analytics.png.meta
  8. BIN
      Assets/Editor Default Resources/Firebase/fb_analytics_dark.png
  9. 68 0
      Assets/Editor Default Resources/Firebase/fb_analytics_dark.png.meta
  10. BIN
      Assets/Editor Default Resources/Firebase/fb_auth.png
  11. 68 0
      Assets/Editor Default Resources/Firebase/fb_auth.png.meta
  12. BIN
      Assets/Editor Default Resources/Firebase/fb_auth_dark.png
  13. 68 0
      Assets/Editor Default Resources/Firebase/fb_auth_dark.png.meta
  14. BIN
      Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png
  15. 68 0
      Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png.meta
  16. BIN
      Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png
  17. 68 0
      Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png.meta
  18. BIN
      Assets/Editor Default Resources/Firebase/fb_config.png
  19. 68 0
      Assets/Editor Default Resources/Firebase/fb_config.png.meta
  20. BIN
      Assets/Editor Default Resources/Firebase/fb_config_dark.png
  21. 68 0
      Assets/Editor Default Resources/Firebase/fb_config_dark.png.meta
  22. BIN
      Assets/Editor Default Resources/Firebase/fb_crashlytics.png
  23. 68 0
      Assets/Editor Default Resources/Firebase/fb_crashlytics.png.meta
  24. BIN
      Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png
  25. 68 0
      Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png.meta
  26. BIN
      Assets/Editor Default Resources/Firebase/fb_database.png
  27. 69 0
      Assets/Editor Default Resources/Firebase/fb_database.png.meta
  28. BIN
      Assets/Editor Default Resources/Firebase/fb_database_dark.png
  29. 69 0
      Assets/Editor Default Resources/Firebase/fb_database_dark.png.meta
  30. BIN
      Assets/Editor Default Resources/Firebase/fb_dynamic_links.png
  31. 68 0
      Assets/Editor Default Resources/Firebase/fb_dynamic_links.png.meta
  32. BIN
      Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png
  33. 68 0
      Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png.meta
  34. BIN
      Assets/Editor Default Resources/Firebase/fb_functions.png
  35. 68 0
      Assets/Editor Default Resources/Firebase/fb_functions.png.meta
  36. BIN
      Assets/Editor Default Resources/Firebase/fb_functions_dark.png
  37. 68 0
      Assets/Editor Default Resources/Firebase/fb_functions_dark.png.meta
  38. BIN
      Assets/Editor Default Resources/Firebase/fb_invites.png
  39. 68 0
      Assets/Editor Default Resources/Firebase/fb_invites.png.meta
  40. BIN
      Assets/Editor Default Resources/Firebase/fb_invites_dark.png
  41. 68 0
      Assets/Editor Default Resources/Firebase/fb_invites_dark.png.meta
  42. BIN
      Assets/Editor Default Resources/Firebase/fb_storage.png
  43. 78 0
      Assets/Editor Default Resources/Firebase/fb_storage.png.meta
  44. BIN
      Assets/Editor Default Resources/Firebase/fb_storage_dark.png
  45. 78 0
      Assets/Editor Default Resources/Firebase/fb_storage_dark.png.meta
  46. BIN
      Assets/Editor Default Resources/Firebase/firebase_lockup.png
  47. 68 0
      Assets/Editor Default Resources/Firebase/firebase_lockup.png.meta
  48. BIN
      Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png
  49. 68 0
      Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png.meta
  50. 8 0
      Assets/ExternalDependencyManager.meta
  51. 8 0
      Assets/ExternalDependencyManager/Editor.meta
  52. 8 0
      Assets/ExternalDependencyManager/Editor/1.2.175.meta
  53. BIN
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll
  54. BIN
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll.mdb
  55. 11 0
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll.mdb.meta
  56. 38 0
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll.meta
  57. BIN
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll
  58. BIN
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll.mdb
  59. 11 0
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll.mdb.meta
  60. 38 0
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll.meta
  61. BIN
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll
  62. BIN
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll.mdb
  63. 11 0
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll.mdb.meta
  64. 38 0
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll.meta
  65. BIN
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll
  66. BIN
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll.mdb
  67. 11 0
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll.mdb.meta
  68. 38 0
      Assets/ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll.meta
  69. 1374 0
      Assets/ExternalDependencyManager/Editor/CHANGELOG.md
  70. 11 0
      Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta
  71. BIN
      Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll
  72. BIN
      Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb
  73. 11 0
      Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb.meta
  74. 38 0
      Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta
  75. 245 0
      Assets/ExternalDependencyManager/Editor/LICENSE
  76. 11 0
      Assets/ExternalDependencyManager/Editor/LICENSE.meta
  77. 768 0
      Assets/ExternalDependencyManager/Editor/README.md
  78. 11 0
      Assets/ExternalDependencyManager/Editor/README.md.meta
  79. 13 0
      Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.175_manifest.txt
  80. 14 0
      Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.175_manifest.txt.meta
  81. 8 0
      Assets/Firebase.meta
  82. 8 0
      Assets/Firebase/Editor.meta
  83. 24 0
      Assets/Firebase/Editor/AppDependencies.xml
  84. 11 0
      Assets/Firebase/Editor/AppDependencies.xml.meta
  85. 22 0
      Assets/Firebase/Editor/AuthDependencies.xml
  86. 11 0
      Assets/Firebase/Editor/AuthDependencies.xml.meta
  87. BIN
      Assets/Firebase/Editor/Firebase.Editor.dll
  88. 118 0
      Assets/Firebase/Editor/Firebase.Editor.dll.meta
  89. BIN
      Assets/Firebase/Editor/Firebase.Editor.pdb
  90. 13 0
      Assets/Firebase/Editor/Firebase.Editor.pdb.meta
  91. 73 0
      Assets/Firebase/Editor/FirebaseAuth_version-10.4.0_manifest.txt
  92. 10 0
      Assets/Firebase/Editor/FirebaseAuth_version-10.4.0_manifest.txt.meta
  93. BIN
      Assets/Firebase/Editor/generate_xml_from_google_services_json.exe
  94. 11 0
      Assets/Firebase/Editor/generate_xml_from_google_services_json.exe.meta
  95. 496 0
      Assets/Firebase/Editor/generate_xml_from_google_services_json.py
  96. 11 0
      Assets/Firebase/Editor/generate_xml_from_google_services_json.py.meta
  97. BIN
      Assets/Firebase/Editor/network_request.exe
  98. 11 0
      Assets/Firebase/Editor/network_request.exe.meta
  99. 416 0
      Assets/Firebase/Editor/network_request.py
  100. 11 0
      Assets/Firebase/Editor/network_request.py.meta

+ 100 - 0
.vscode/launch.json

@@ -0,0 +1,100 @@
+{
+    // Use IntelliSense to learn about possible 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": "Unity Editor",
+            "type": "unity",
+            "path": "/F:/Unity/Projects/NarKampenTake2/Library/EditorInstance.json",
+            "request": "launch"
+        },
+        {
+            "name": "Windows Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "OSX Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "Linux Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "iOS Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "Android Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "Xbox One Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "PS4 Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "SwitchPlayer",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "Unity Editor",
+            "type": "unity",
+            "path": "/F:/Unity/Projects/NarKampenTake2/Library/EditorInstance.json",
+            "request": "launch"
+        },
+        {
+            "name": "Windows Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "OSX Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "Linux Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "iOS Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "Android Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "Xbox One Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "PS4 Player",
+            "type": "unity",
+            "request": "launch"
+        },
+        {
+            "name": "SwitchPlayer",
+            "type": "unity",
+            "request": "launch"
+        }
+    ]
+}

+ 55 - 0
.vscode/settings.json

@@ -0,0 +1,55 @@
+{
+  "files.exclude": {
+    "**/.DS_Store": true,
+    "**/.git": true,
+    "**/.gitmodules": true,
+    "**/*.booproj": true,
+    "**/*.pidb": true,
+    "**/*.suo": true,
+    "**/*.user": true,
+    "**/*.userprefs": true,
+    "**/*.unityproj": true,
+    "**/*.dll": true,
+    "**/*.exe": true,
+    "**/*.pdf": true,
+    "**/*.mid": true,
+    "**/*.midi": true,
+    "**/*.wav": true,
+    "**/*.gif": true,
+    "**/*.ico": true,
+    "**/*.jpg": true,
+    "**/*.jpeg": true,
+    "**/*.png": true,
+    "**/*.psd": true,
+    "**/*.tga": true,
+    "**/*.tif": true,
+    "**/*.tiff": true,
+    "**/*.3ds": true,
+    "**/*.3DS": true,
+    "**/*.fbx": true,
+    "**/*.FBX": true,
+    "**/*.lxo": true,
+    "**/*.LXO": true,
+    "**/*.ma": true,
+    "**/*.MA": true,
+    "**/*.obj": true,
+    "**/*.OBJ": true,
+    "**/*.asset": true,
+    "**/*.cubemap": true,
+    "**/*.flare": true,
+    "**/*.mat": true,
+    "**/*.meta": true,
+    "**/*.prefab": true,
+    "**/*.unity": true,
+    "build/": true,
+    "Build/": true,
+    "Library/": true,
+    "library/": true,
+    "obj/": true,
+    "Obj/": true,
+    "ProjectSettings/": true,
+    "temp/": true,
+    "Temp/": true
+  },
+  "java.configuration.updateBuildConfiguration": "interactive",
+}

+ 41 - 0
.vscode/tasks.json

@@ -0,0 +1,41 @@
+{
+    "version": "2.0.0",
+    "tasks": [
+        {
+            "label": "build",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "build",
+                "${workspaceFolder}/Assembly-CSharp.csproj",
+                "/property:GenerateFullPaths=true",
+                "/consoleloggerparameters:NoSummary"
+            ],
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "publish",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "publish",
+                "${workspaceFolder}/Assembly-CSharp.csproj",
+                "/property:GenerateFullPaths=true",
+                "/consoleloggerparameters:NoSummary"
+            ],
+            "problemMatcher": "$msCompile"
+        },
+        {
+            "label": "watch",
+            "command": "dotnet",
+            "type": "process",
+            "args": [
+                "watch",
+                "run",
+                "--project",
+                "${workspaceFolder}/Assembly-CSharp.csproj"
+            ],
+            "problemMatcher": "$msCompile"
+        }
+    ]
+}

+ 8 - 0
Assets/Editor Default Resources.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9e055191453e7534fa6c8fa10eb5ba40
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/Editor Default Resources/Firebase.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2a40815b0d7ccca48ab38905bfc8804d
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/Editor Default Resources/Firebase/fb_analytics.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_analytics.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: dc218b335b1d14cd5ae532f65042d829
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_analytics.png
+timeCreated: 1473376337
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_analytics_dark.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_analytics_dark.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 9fe4b3bd3b7d2477dac92fb7429d1d1b
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_analytics_dark.png
+timeCreated: 1472679008
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_auth.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_auth.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 394b3ec4d60c24476a12e4ba696d9e5d
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_auth.png
+timeCreated: 1473376335
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_auth_dark.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_auth_dark.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 3a9e1ef6287664c389bb09e2ac1b23b7
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_auth_dark.png
+timeCreated: 1472679008
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 837e8e1f35e334e81931d0857680cebf
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_cloud_messaging.png
+timeCreated: 1473376336
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 20c5b8a1f82cb4aadb77ca20683d2a6e
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_cloud_messaging_dark.png
+timeCreated: 1472679008
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_config.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_config.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 415eaec414af14d11955222a282aca08
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_config.png
+timeCreated: 1473376335
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_config_dark.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_config_dark.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 0ad9ef5fff5524355a9670c90a99cbba
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_config_dark.png
+timeCreated: 1472679008
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_crashlytics.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_crashlytics.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 008a5e76206e49f9b06d8ba144aabb38
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_crashlytics.png
+timeCreated: 1473376335
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 214009068900439da4a9cded17d58090
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_crashlytics_dark.png
+timeCreated: 1472679008
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_database.png


+ 69 - 0
Assets/Editor Default Resources/Firebase/fb_database.png.meta

@@ -0,0 +1,69 @@
+fileFormatVersion: 2
+guid: 3eea7b558c67b48e18acf3c278392e3d
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_database.png
+timeCreated: 1476203961
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    linearTexture: 0
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: -1
+  nPOTScale: 1
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 0
+  spriteTessellationDetail: -1
+  textureType: -1
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_database_dark.png


+ 69 - 0
Assets/Editor Default Resources/Firebase/fb_database_dark.png.meta

@@ -0,0 +1,69 @@
+fileFormatVersion: 2
+guid: 9f6bfa9d8aefb40dc92461c372c73b0f
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_database_dark.png
+timeCreated: 1476203949
+licenseType: Free
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    linearTexture: 0
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: -1
+  nPOTScale: 1
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 0
+  spriteTessellationDetail: -1
+  textureType: -1
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_dynamic_links.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_dynamic_links.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: df6f219c396f4ad9b5048bae6944cb8e
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_dynamic_links.png
+timeCreated: 1473376335
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 9355a4671cfe4eef90879863318d1a4b
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_dynamic_links_dark.png
+timeCreated: 1472679009
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_functions.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_functions.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 953367231f9e3e22e70e5d1c91a40fe5
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_functions.png
+timeCreated: 1473376335
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_functions_dark.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_functions_dark.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: b5aa3e4f7432e1c5698417cc13f85271
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_functions_dark.png
+timeCreated: 1472679008
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_invites.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_invites.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 741b269777f30488482ef4937b456b28
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_invites.png
+timeCreated: 1473376335
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_invites_dark.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/fb_invites_dark.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: a734ad7414926404e90f8b5be37b7e23
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_invites_dark.png
+timeCreated: 1472679009
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_storage.png


+ 78 - 0
Assets/Editor Default Resources/Firebase/fb_storage.png.meta

@@ -0,0 +1,78 @@
+fileFormatVersion: 2
+guid: 573eb851c99f948f4bf2de49322bfd53
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_storage.png
+timeCreated: 1481243899
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: -1
+  nPOTScale: 1
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 0
+  spriteTessellationDetail: -1
+  textureType: 0
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/fb_storage_dark.png


+ 78 - 0
Assets/Editor Default Resources/Firebase/fb_storage_dark.png.meta

@@ -0,0 +1,78 @@
+fileFormatVersion: 2
+guid: 2955864b938094f579ea9902b65ac10c
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/fb_storage_dark.png
+timeCreated: 1481243898
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: -1
+  nPOTScale: 1
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 0
+  spriteTessellationDetail: -1
+  textureType: 0
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/firebase_lockup.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/firebase_lockup.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 9f058f25e8e2d47cfb894951d4d7e48a
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/firebase_lockup.png
+timeCreated: 1473376336
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png


+ 68 - 0
Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: b93330fc8ea08407dbc514b5101afa14
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Editor Default Resources/Firebase/firebase_lockup_dark.png
+timeCreated: 1472601251
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 2
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    linearTexture: 1
+    correctGamma: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 0
+  cubemapConvolution: 0
+  cubemapConvolutionSteps: 7
+  cubemapConvolutionExponent: 1.5
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: 1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  rGBM: 0
+  compressionQuality: 50
+  allowsAlphaSplitting: 0
+  spriteMode: 0
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot:
+    x: 0.5
+    y: 0.5
+  spriteBorder:
+    x: 0
+    y: 0
+    z: 0
+    w: 0
+  spritePixelsToUnits: 100
+  alphaIsTransparency: 1
+  textureType: 2
+  buildTargetSettings: []
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

+ 8 - 0
Assets/ExternalDependencyManager.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b7b47fc84556819448cd16b4acffa1db
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/ExternalDependencyManager/Editor.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b7a3b9700d49a1c4498c959dd0790371
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/ExternalDependencyManager/Editor/1.2.175.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7ffeecc04fc4d4e49afd215f1b8192d1
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll


BIN
Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll.mdb


+ 11 - 0
Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll.mdb.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 40c95e810ae744be90cd10e34487fb0b
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll.mdb
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 38 - 0
Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll.meta

@@ -0,0 +1,38 @@
+fileFormatVersion: 2
+guid: 8b333f9c2c3c4d5c94788fa0722edc5c
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll
+- gvhp_targets-editor
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll


BIN
Assets/ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll.mdb


+ 11 - 0
Assets/ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll.mdb.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1a83ae0712954d449d6b500769245b70
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll.mdb
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 38 - 0
Assets/ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll.meta

@@ -0,0 +1,38 @@
+fileFormatVersion: 2
+guid: af3ced639768447f9ece45f038c5ee35
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll
+- gvhp_targets-editor
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll


BIN
Assets/ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll.mdb


+ 11 - 0
Assets/ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll.mdb.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 05f38fc976de49d0a8bac11b0591b35c
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll.mdb
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 38 - 0
Assets/ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll.meta

@@ -0,0 +1,38 @@
+fileFormatVersion: 2
+guid: 64763f5d36d84f789a31f8dbcc26cac9
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll
+- gvhp_targets-editor
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll


BIN
Assets/ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll.mdb


+ 11 - 0
Assets/ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll.mdb.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 87e3f1c0087b4dcb96128c54eeba905c
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll.mdb
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 38 - 0
Assets/ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll.meta

@@ -0,0 +1,38 @@
+fileFormatVersion: 2
+guid: 9e005ad5be4449918b55dae042a3b4b0
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll
+- gvhp_targets-editor
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1374 - 0
Assets/ExternalDependencyManager/Editor/CHANGELOG.md

@@ -0,0 +1,1374 @@
+# Version 1.2.175 - Nov 16, 2022
+* General - Added tvOS podfile support to the iOS resolver.
+
+# Version 1.2.174 - Oct 06, 2022
+* General - Added tvOS support to the iOS resolver.
+* General - Fixed #484 - Changed `EditorMeasurement` to use secure connection.
+* Android Resolver - Fixed Android Resolver unable to resolve
+  `mainTemplate.gradle` in Unity `2022.2+` or `2023.1+`.
+
+# Version 1.2.173 - Sep 28, 2022
+* General - Added tvOS library support to the export unity package scripts.
+
+# Version 1.2.172 - Jun 23, 2022
+* iOS Resolver - Stop forcing `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` to `YES`,
+  which seems to cause problem for some when submitting apps. See #526 for more
+  information.
+
+# Version 1.2.171 - May 11, 2022
+* iOS Resolver - Change `Enable Swift Framework Support Workaround` setting to
+  be `ON` by default since more pods are using Swift Framework now.
+
+# Version 1.2.170 - Apr 4, 2022
+* Android Resolver - Fixes #498 - Fix the path separator of the Maven repo
+  injected to `mainTemplate.gradle`.
+* iOS Resolver - Fixes #470 - Switch default Cocoapods master repo from Github
+  to CDN.
+* iOS Resolver - `Link Framework Statically` setting is now default to `true`.
+  That is, `use_frameworks! :linkage => static` will be added to `Podfile` by
+  default instead of `use_frameworks!`. This can be changed in iOS Resolver
+  settings. This fixes odd behaviors when pods include static libraries, ex.
+  Firebase Analytics.
+* iOS Resolver - Added a workaround when app crashes on launch due to
+  `Library not loaded: @rpath/libswiftCore.dylib` when some pods includes Swift
+  framework. This is turned `OFF` by default and can be changed in iOS Resolver
+  settings.
+
+# Version 1.2.169 - Jan 20, 2022
+* General - Fixes #425 - Change to save `GvhProjectSettings.xml` without
+  Unicode byte order mark (BoM).
+* Android Resolver - Remove reference to `jcenter()`
+* iOS Resolver - Force setting `LANG` when executing Cocoapods in shell mode on
+  Mac.
+
+# Version 1.2.168 - Dec 9, 2021
+* All - Fixes #472 by removing the use of `System.Diagnostics.Debug.Assert`
+* All - Fixed #477 by properly enabling EDM4U libraries for Unity 2021.2+ when
+  the package is installed through `.tgz`
+
+# Version 1.2.167 - Oct 6, 2021
+* All - Moved versioned `.dll` in EDM4U to a versioned folder and remove their
+  version postfix in their filename. For instance, `IOSResolver.dll` will be
+  placed at `ExternalDependencyManager/Editor/1.2.167/Google.IOSResolver.dll`.
+* Android Resolver - Fixed #243 by only using the highest version in
+  `mainTemplate.gradle` when duplicated dependencies are presented.
+* Android Resolver - Added supports to x86_64 to ABI list for Android apps on
+  Chrome OS.
+
+# Version 1.2.166 - Jun 30, 2021
+* All - Fixed #440 and fixed #447 by specifying the parameter type while calling
+  `GetApplicationIdentifier()` Unity API using reflection, due to a new
+  overloaded method introduced in Unity 2021.2.
+* Android Resolver - Fixed #442 by patching `Dependency.IsGreater()` when the
+  version strings end '+'.
+
+# Version 1.2.165 - Apr 28, 2021
+## Bug Fixes
+* Version Handler - Fixed #431 by replacing the use of `HttpUtility.UrlEncode()`
+  which causes NullReferenceException in certain version of Unity.
+* Android Resolver - Check that androidSdkRootPath directory exists before using
+  as sdkPath.
+* Android Resolver - Fixed Android Resolver integration tests with Unity
+  2019.3+.
+
+# Version 1.2.164 - Feb 4, 2021
+## New Features
+* Android Resolver - Added support for Android packages with classifier in their
+  namespaces.
+* iOS Resolver - Added new settings in iOS Resolver to configure generated
+  Podfile.
+* iOS Resolver - Added a new attribute `addToAllTargets` in Dependencies.xml.
+
+## Bug Fixes
+* iOS Resolver - Fixed XML parsing for `bitcodeEnabled` attribute in
+  Dependencies.xml.
+
+# Version 1.2.163 - Dec 15, 2020
+## Bug Fixes
+* Version Handler - Fixed measurement reporting
+
+# Version 1.2.162 - Nov 19, 2020
+## Bug Fixes
+* Version Handler - Improved #413 by preventing Version Handler from running
+  from static constructor when it is disabled.
+* Package Manager Resolver - Remove GPR
+
+# Version 1.2.161 - Oct 12, 2020
+## Bug Fixes
+* Android Resolver - Fixed the issue that Android Resolver does not resolve
+  again before build in Unity 2020 if it failed to resolve previously.
+
+# Version 1.2.160 - Sep 30, 2020
+## Bug Fixes
+* Android Resolver - Fixed a regression that gradleResolver can be null until
+  Initialize() is called.
+* Android Resolver - Fixed a regression that Android Resolver failed in Unity
+  2019.3+ due to `gradleTemplate.properties` not enabled when
+  `mainTemplate.gradle` is not enabled at all.
+
+# Version 1.2.159 - Sep 11, 2020
+## Bug Fixes
+* Android Resolver - Fixed #322 where the Unity editor will lose its target SDK
+  setting between Unity restarts if `>28` is selected in 2019.  This is due to
+  Unity AndroidSdkVersions enum does not contain values above 28.
+* Android Resolver - Fixed #360 where building Android app with Untiy 2019.3+
+  may fail due to Jetifier and AndroidX not enabled properly in generated
+  Gradle project. This fix requires the user to enable
+  `Custom Gradle Properties Template` found under
+  `Player Settings > Settings for Android > Publishing Settings`.
+
+# Version 1.2.158 - Sep 3, 2020
+## Bug Fixes
+* Version Handler: Fixed editor freeze when `-executeMethod` is used in
+  non-batch mode.
+* Android Resolver: Normalized file paths when generating local Maven repo
+  since the path may contains a mix of forward and backward slash on Windows.
+* Export Unity Package: Fixed generation of .unitypackage with tarfile on
+  Windows.
+
+# Version 1.2.157 - Aug 6, 2020
+## Bug Fixes
+* Android Resolver: Delay initialization until active build target is Android
+  and the editor is not in play mode.
+* iOS Resolver: Delay initialization until active build target is iOS
+  and the editor is not in play mode.
+* Export Unity Package: Workaround directory creation racy if multiple export
+  operations are spawned at the same time.
+
+# Version 1.2.156 - June 10, 2020
+## Bug Fixes
+* Android Resolver: Fixed that the generated local repo assets contains
+  redundent labels which are causing Version Handler to failed while
+  uninstalling packages.
+* Android Resolver: Fixed that the repo url injected into mainTemplate.gradle
+  is incorrect when Unity is configured to export gradle project.
+* Android Resolver: Limited to only create local Maven repo when the source
+  repo contains ".srcaar" file.
+
+## Changes
+* All: Described EDM4U analytics data usage in readme.
+
+# Version 1.2.155 - May 14, 2020
+## Bug Fixes
+* All: Fixed compiler error when build with Unity 5.4 or below due to the
+  usage of Rect.zero.
+* All: Ignore cases when checking command line arguments.
+
+# Version 1.2.154 - May 14, 2020
+## Bug Fixes
+* All: Make each MultiSelectWindow for different purposes to have its own
+  unique window.
+
+## Changes
+* All: Replace all dialog with DialogWindow which is implemented from
+  EditorWindow.
+* Package Manager Resolver: Clarify how manifest.json will be changed in Package
+  Manager Resolver window.
+
+# Version 1.2.153 - Apr 24, 2020
+## Bug Fixes
+* Android Resolver: Fixed an exception when repainting the Android resolution
+  window in Unity 2019.3.x.
+
+# Version 1.2.152 - Apr 17, 2020
+## Bug Fixes
+* Version Handler: Fixed exception when waiting for enabled editor DLLs to
+  load.
+* Android Resolver: Fixed regression when using a Custom Gradle Template
+  on Windows.
+
+# Version 1.2.151 - Apr 16, 2020
+## Bug Fixes
+* Version Handler: When waiting for newly enabled editor DLLs to load, ignore
+  all DLLs that do not have a file-system location.
+* Android Resolver: Fixed resolution when using a Custom Gradle Template with
+  libraries stored in a local maven repository distributed with a plugin
+  installed with the Unity Package Manager.
+
+# Version 1.2.150 - Apr 9, 2020
+## Bug Fixes
+* All: The new packaging script when run on MacOS was generating a
+  .unitypackage archive that could not be read by Unity on Windows.
+  This release simply repackages the plugin with tar/gzip to fix the problem.
+
+# Version 1.2.149 - Apr 8, 2020
+## Bug Fixes
+* Package Manager Resolver: Fixed spurious error message when resuming
+  migration after installing a UPM package.
+
+# Version 1.2.148 - Apr 8, 2020
+## Bug Fixes
+* Package Manager Resolver: Fixed an exception when resuming migration
+  after installing a UPM package.
+
+# Version 1.2.147 - Apr 8, 2020
+## Bug Fixes
+* Version Handler: Fixed alias traversal bug which caused problems when
+  migrating from installed .unitypackage files to UPM packages.
+
+# Version 1.2.146 - Apr 8, 2020
+## Bug Fixes
+* Version Handler: Fixed exception in manifest parsing when a manifest is
+  detected with no aliases.
+
+# Version 1.2.145 - Apr 2, 2020
+## New Features
+* Package Manager Resolver: Added a method to migrate Version Handler
+  managed packages installed via `.unitypackage` to Unity Package Manager
+  packages. This is initially used to migrate the External Dependency Manager
+  to UPM.
+
+## Changes
+* All: Verbose logging is now no longer automatically enabled in batch mode
+  across all components. Instead logging can be configured using each
+  component's verbose logging setting or by using the `-gvh_log_debug` command
+  line flag when starting Unity.
+* Version Handler: Sped up version handler updates when the app domain isn't
+  reloaded.
+
+## Bug Fixes
+* Version Handler: Fixed the display of the obsolete files clean up dialog
+  when the asset database refreshes.
+* Version Handler: Improved reliability of callback from
+  the VersionHandler.UpdateCompleteMethods event when an asset database
+  refresh occurs.
+* Version Handler: Fixed duplicate exportPath labels when 'Assets/' is the
+  root of paths assigned to files.
+* Version Handler: Handle empty lines in manifest files.
+
+# Version 1.2.144 - Mar 23, 2020
+## Changed
+* iOS Resolver: Removed the ability to configure the Xcode target a Cocoapod
+  is added to.
+
+## Bug Fixes
+* iOS Resolver: Reverted support for adding Cocoapods to multiple targets as
+  it caused a regression (exception thrown during post-build step) in some
+  versions of Unity.
+
+# Version 1.2.143 - Mar 20, 2020
+## Bug Fixes
+* Android Resolver: Fixed caching of resolution state which was causing
+  the resolver to always run when no dependencies had changed.
+
+# Version 1.2.142 - Mar 19, 2020
+## Changes
+* Package Manager Resolver: Enabled auto-add by default.
+
+# Version 1.2.141 - Mar 19, 2020
+## Bug Fixes
+* Fixed a bug when retrieving project settings. If a plugin was configured
+  to fetch project settings, if a setting was fetched (e.g "foo") and this
+  setting existed in the system settings but not the project settings the
+  system value would override the default value leading to unexpected
+  behavior.
+* Fixed a warning when caching web request classes in Unity 5.6.
+
+# Version 1.2.140 - Mar 19, 2020
+## Bug Fixes
+* Fixed measurement reporting in Unity 5.x.
+* Version Handler: Fixed NullReferenceException when an asset doesn't have
+  an AssetImporter.
+
+# Version 1.2.139 - Mar 18, 2020
+## Changed
+* Added documentation to the built plugin.
+
+# Version 1.2.138 - Mar 17, 2020
+## New Features
+* Package Manager Resolver: Added the Package Manager Resolver
+  component that allows developers to easily boostrap Unity Package Manager
+  (UPM) registry addition using unitypackage plugins.
+* Version Handler: Added a window that allows plugins to managed by the
+  Version Handler to be uninstalled.
+* Version Handler: Added support for displaying installed plugins.
+* Version Handler: Added support for moving files in plugins to their install
+  locations (if the plugin has been configured to support this).
+* iOS Resolver: Added the ability to configure the Xcode target a Cocoapod is
+  added to.
+
+## Bug Fixes
+* Fixed upgrade from version 1.2.137 and below after the plugin rename to
+  EDM4U broke the upgrade process.
+* Android Resolver: Worked around PlayerSettings.Android.targetSdkVersion
+  returning empty names for some values in 2019.x.
+* Version Handler: Fixed the display of the obsolete files clean up window.
+* Version Handler: Fixed managed file check when assets are modified in the
+  project after plugin import.
+
+# Version 1.2.137 - Mar 6, 2020
+## Changed
+* Renamed package to External Package Manager for Unity (EDM4U).
+  We changed this to reflect what this plugin is doing today which is far more
+  than the original scope which just consisted of importing jar files from the
+  Android SDK maven repository.
+  Scripts that used to pull `play-services-resolver*.unitypackage` will now have
+  to request `external-dependency-manager*.unitypackage` instead.
+  We'll still be shipping a `play-services-resolver*_manifest.txt` file to
+  handle upgrading from older versions of the plugin.
+
+## New Features
+* All Components: Added reporting of usage so that we can remotely detect
+  errors and target improvements.
+* Android Resolver: Added support for *Dependencies.xml files in Unity Package
+  Manager packages.
+* iOS Resolver: Added support for *Dependencies.xml files in Unity Package
+  Manager packages.
+
+## Bug Fixes
+* Version Handler: Disabled attempts to disable asset metadata modification
+  when assets are in a Unity Package Manager managed package.
+
+# Version 1.2.136 - Feb 19, 2019
+## Bug Fixes
+* Android Resolver: Fixed OpenJDK path discovery in Unity 2019.3.1.
+
+# Version 1.2.135 - Dec 5, 2019
+## Bug Fixes
+* All Components: Fixed stack overflow when loading project settings.
+
+# Version 1.2.134 - Dec 4, 2019
+## Bug Fixes
+* All Components: Fixed an issue which caused project settings to be cleared
+  when running in batch mode.
+
+# Version 1.2.133 - Nov 18, 2019
+## Bug Fixes
+* All Components: Failure to save project settings will now report an error
+  to the log rather than throwing an exception.
+
+# Version 1.2.132 - Nov 11, 2019
+## Bug Fixes
+* Android Resolver: Worked around expansion of DIR_UNITYPROJECT on Windows
+  breaking Gradle builds when used as part of a file URI.
+* Android Resolver: mainTemplate.gradle is only written if it needs to be
+  modified.
+
+# Version 1.2.131 - Oct 29, 2019
+## Bug Fixes
+* Version Handler: Improved execution of events on the main thread in batch
+  mode.
+* Version Handler: Improved log level configuration at startup.
+* Version Handler: Improved performance of class lookup in deferred method
+  calls.
+* Version Handler: Fixed rename to enable / disable for editor assets.
+* iOS Resolver: Improved log level configuration at startup.
+* Android Resolver: Improved local maven repo path reference in
+  mainTemplate.gradle using DIR_UNITYPROJECT.  DIR_UNITYPROJECT by Unity
+  to point to the local filesystem path of the Unity project when Unity
+  generates the Gradle project.
+
+# Version 1.2.130 - Oct 23, 2019
+## New Features
+* iOS Resolver: Added support for modifying the Podfile before `pod install`
+  is executed.
+
+## Bug Fixes
+* Version Handler: Fixed invalid classname error when calling
+  `VersionHandler.UpdateVersionedAssets()`.
+
+# Version 1.2.129 - Oct 2, 2019
+## Bug Fixes
+* iOS Resolver: Changed Cocoapod integration in Unity 2019.3+ to
+  only add Pods to the UnityFramework target.
+
+# Version 1.2.128 - Oct 1, 2019
+## Bug Fixes
+* iOS Resolver: Fixed Cocoapod project integration mode with Unity
+  2019.3+.
+
+# Version 1.2.127 - Sep 30, 2019
+## Changes
+* Android Resolver: All Android Resolver settings File paths are now
+  serialized with POSIX directory separators.
+
+# Version 1.2.126 - Sep 27, 2019
+## Changes
+* Android Resolver: File paths are now serialized with POSIX directory
+  separators.
+## Bug Fixes
+* Android Resolver: Fixed resolution when the parent directory of a Unity
+  project contains a Gradle project (i.e `settings.gradle` file).
+
+# Version 1.2.125 - Sep 23, 2019
+## Bug Fixes
+* All components: Silenced a warning about not being able to set the console
+  encoding to UTF8.
+* Android Resolver: Worked around broken AndroidSDKTools class in some
+  versions of Unity.
+* iOS Resolver: Fixed iOS target SDK version check
+* Version Handler: Changed clean up obsolete files window so that it doesn't
+  exceed the screen size.
+
+# Version 1.2.124 - Jul 28, 2019
+## Bug Fixes
+* All components: Fixed regression with source control integration when using
+  Unity 2019.1+.
+
+# Version 1.2.123 - Jul 23, 2019
+## New Features
+* All components: Source control integration for project settings.
+## Changes
+* Android Resolver: Removed AAR cache as it now makes little difference to
+  incremental resolution performance.
+* Android Resolver: Improved embedded resource management so that embedded
+  resources should upgrade when the plugin is updated without restarting
+  the Unity editor.
+## Bug Fixes
+* Version Handler: Fixed InvokeMethod() and InvokeStaticMethod() when calling
+  methods that have interface typed arguments.
+
+# Version 1.2.122 - Jul 2, 2019
+## Bug Fixes
+* iOS Resolver: Worked around Unity not loading the iOS Resolver DLL as it
+  referenced the Xcode extension in a public interface.  The iOS Resolver
+  DLL still references the Xcode extension internally and just handles
+  missing type exceptions dynamically.
+
+# Version 1.2.121 - Jun 27, 2019
+## Bug Fixes
+* Android Resolver: Fixed warning about missing Packages folder when loading
+  XML dependencies files in versions of Unity without the package manager.
+* Android Resolver: Fixed resolution window progress bar exceeding 100%.
+* Android Resolver: If AndroidX is detected in the set of resolved libraries,
+  the user will be prompted to enable the Jetifier.
+* Android Resolver: Improved text splitting in text area windows.
+* iOS Resolver: Added support for Unity's breaking changes to the Xcode API
+  in 2019.3.+. Cocoapods are now added to build targets, Unity-iPhone and
+  UnityFramework in Unity 2019.3+.
+
+# Version 1.2.120 - Jun 26, 2019
+## New Features
+* Android Resolver: Added support for loading *Dependencies.xml files from
+  Unity Package Manager packages.
+* Android Resolver: Resolution window is now closed if resolution runs as
+  a pre-build step.
+* iOS Resolver: Added support for loading *Dependencies.xml files from
+  Unity Package Manager packages.
+## Bug Fixes
+* Android Resolver: Fixed generation of relative repo paths when using
+  mainTemplate.gradle resolver.
+* Android Resolver: Fixed copy of .srcaar to .aar files in repos embedded in a
+  project when a project path has characters (e.g whitespace) that are escaped
+  during conversion to URIs.
+* Android Resolver: Fixed auto-resolution always running if the Android SDK
+  is managed by Unity Hub.
+
+# Version 1.2.119 - Jun 19, 2019
+## Bug Fixes
+* Android Resolver: Fixed error reported when using Jetifier integration
+  in Unity 2018+ if the target SDK is set to "highest installed".
+
+# Version 1.2.118 - Jun 18, 2019
+## New Features
+* Android Resolver: Added initial
+  [Jetifier](https://developer.android.com/studio/command-line/jetifier)
+  integration which simplifies
+  [migration](ttps://developer.android.com/jetpack/androidx/migrate)
+  to Jetpack ([AndroidX](https://developer.android.com/jetpack/androidx))
+  libraries in cases where all dependencies are managed by the Android
+  Resolver.
+  This can be enabled via the `Use Jetifier` option in the
+  `Assets > Play Services Resolver > Android Resolver > Settings` menu.
+  Caveats:
+  - If your project contains legacy Android Support Library .jar and .aar
+    files, these files will need to be removed and replaced with references to
+    artifacts on Maven via `*Dependencies.xml` files so that the Jetifier
+    can map them to Jetpack (AndroidX) libraries.
+    For example, remove the file `support-v4-27.0.2.jar` and replace it with
+    `<androidPackage spec="com.android.support:support-v4:27.0.2"/>` in a
+    `*Dependencies.xml` file.
+  - If your project contains .jar or .aar files that use the legacy Android
+    Support Libraries, these will need to be moved into a local Maven repo
+    [See this guide](https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html)
+    and then these files should be removed from your Unity project and instead
+    referenced via `*Dependencies.xml` files so that the Jetifier can
+    patch them to reference the Jetpack lirbaries.
+
+## Bug Fixes
+* Android Resolver: Disabled version locking of com.android.support:multidex
+  does not use the same versioning scheme as other legacy Android support
+  libraries.
+* Version Handler: Made Google.VersionHandler.dll's asset GUID stable across
+  releases.  This faciliates error-free import into projects where
+  Google.VersionHandler.dll is moved from the default install location.
+
+# Version 1.2.117 - Jun 12, 2019
+## Bug Fixes
+* Android Resolver: Fix copying of .srcaar to .aar files for
+  mainTemplate.gradle resolution.  PluginImporter configuration was previously
+  not being applied to .aar files unless the Unity project was saved.
+
+# Version 1.2.116 - Jun 7, 2019
+## Bug Fixes
+* Android Resolver: Fixed resolution of Android dependencies without version
+  specifiers.
+* Android Resolver: Fixed Maven repo not found warning in Android Resolver.
+* Android Resolver: Fixed Android Player directory not found exception in
+  Unity 2019.x when the Android Player isn't installed.
+
+# Version 1.2.115 - May 28, 2019
+## Bug Fixes
+* Android Resolver: Fixed exception due to Unity 2019.3.0a4 removing
+  x86 from the set of supported ABIs.
+
+# Version 1.2.114 - May 27, 2019
+## New Features
+* Android Resolver: Added support for ABI stripping when using
+  mainTemplate.gradle. This only works with AARs stored in repos
+  on the local filesystem.
+
+# Version 1.2.113 - May 24, 2019
+## New Features
+* Android Resolver: If local repos are moved, the plugin will search the
+  project for matching directories in an attempt to correct the error.
+* Version Handler: Files can be now targeted to multiple build targets
+  using multiple "gvh_" asset labels.
+## Bug Fixes
+* Android Resolver: "implementation" or "compile" are now added correctly
+  to mainTemplate.gradle in Unity versions prior to 2019.
+
+# Version 1.2.112 - May 22, 2019
+## New Features
+* Android Resolver: Added option to disable addition of dependencies to
+  mainTemplate.gradle.
+  See `Assets > Play Services Resolver > Android Resolver > Settings`.
+* Android Resolver: Made paths to local maven repositories in
+  mainTemplate.gradle relative to the Unity project when a project is not
+  being exported.
+## Bug Fixes
+* Android Resolver: Fixed builds with mainTemplate.gradle integration in
+  Unity 2019.
+* Android Resolver: Changed dependency inclusion in mainTemplate.gradle to
+  use "implementation" or "compile" depending upon the version of Gradle
+  included with Unity.
+* Android Resolver: Gracefully handled exceptions if the console encoding
+  can't be modified.
+* Android Resolver: Now gracefully fails if the AndroidPlayer directory
+  can't be found.
+
+# Version 1.2.111 - May 9, 2019
+## Bug Fixes
+* Version Handler: Fixed invocation of methods with named arguments.
+* Version Handler: Fixed occasional hang when the editor is compiling
+  while activating plugins.
+
+# Version 1.2.110 - May 7, 2019
+## Bug Fixes
+* Android Resolver: Fixed inclusion of some srcaar artifacts in builds with
+  Gradle builds when using mainTemplate.gradle.
+
+# Version 1.2.109 - May 6, 2019
+## New Features:
+* Added links to documentation from menu.
+* Android Resolver: Added option to auto-resolve Android libraries on build.
+* Android Resolver: Added support for packaging specs of Android libraries.
+* Android Resolver: Pop up a window when displaying Android dependencies.
+
+## Bug Fixes
+* Android Resolver: Support for Unity 2019 Android SDK and JDK install locations
+* Android Resolver: e-enable AAR explosion if internal builds are enabled.
+* Android Resolver: Gracefully handle exceptions on file deletion.
+* Android Resolver: Fixed Android Resolver log spam on load.
+* Android Resolver: Fixed save of Android Resolver PromptBeforeAutoResolution
+  setting.
+* Android Resolver: Fixed AAR processing failure when an AAR without
+  classes.jar is found.
+* Android Resolver: Removed use of EditorUtility.DisplayProgressBar which
+  was occasionally left displayed when resolution had completed.
+* Version Handler: Fixed asset rename to disable when a disabled file exists.
+
+# Version 1.2.108 - May 3, 2019
+## Bug Fixes:
+* Version Handler: Fixed occasional hang on startup.
+
+# Version 1.2.107 - May 3, 2019
+## New Features:
+* Version Handler: Added support for enabling / disabling assets that do not
+  support the PluginImporter, based upon build target selection.
+* Android Resolver: Added support for the global specification of maven repos.
+* iOS Resolver: Added support for the global specification of Cocoapod sources.
+
+# Version 1.2.106 - May 1, 2019
+## New Features
+* iOS Resolver: Added support for development pods in Xcode project integration
+  mode.
+* iOS Resolver: Added support for source pods with resources in Xcode project
+  integration mode.
+
+# Version 1.2.105 - Apr 30, 2019
+## Bug fixes
+* Android Resolver: Fixed reference to Java tool path in logs.
+* Android and iOS Resolvers: Changed command line execution to emit a warning
+  rather than throwing an exception and failing, when it is not possible to
+  change the console input and output encoding to UTF-8.
+* Android Resolver: Added menu option and API to delete resolved libraries.
+* Android Resolver: Added menu option and API to log the repos and libraries
+  currently included in the project.
+* Android Resolver: If Plugins/Android/mainTemplate.gradle file is present and
+  Gradle is selected as the build type, resolution will simply patch the file
+  with Android dependencies specified by plugins in the project.
+
+# Version 1.2.104 - Apr 10, 2019
+## Bug Fixes
+* Android Resolver: Changed Android ABI selection method from using whitelisted
+  Unity versions to type availability.  This fixes an exception on resolution
+  in some versions of Unity 2017.4.
+
+# Version 1.2.103 - Apr 2, 2019
+## Bug Fixes
+* Android Resolver: Whitelisted Unity 2017.4 and above with ARM64 support.
+* Android Resolver: Fixed Java version check to work with Java SE 12 and above.
+
+# Version 1.2.102 - Feb 13, 2019
+## Bug Fixes
+* Android Resolver: Fixed the text overflow on the Android Resolver
+  prompt before initial run to fit inside the buttons for
+  smaller screens.
+
+# Version 1.2.101 - Feb 12, 2019
+## New Features
+* Android Resolver: Prompt the user before the resolver runs for the
+  first time and allow the user to elect to disable from the prompt.
+* Android Resolver: Change popup warning when resolver is disabled
+  to be a console warning.
+
+# Version 1.2.100 - Jan 25, 2019
+## Bug Fixes
+* Android Resolver: Fixed AAR processing sometimes failing on Windows
+  due to file permissions.
+
+# Version 1.2.99 - Jan 23, 2019
+## Bug Fixes
+* Android Resolver: Improved performance of project property polling.
+* Version Handler: Fixed callback of VersionHandler.UpdateCompleteMethods
+  when the update process is complete.
+
+# Version 1.2.98 - Jan 9, 2019
+## New Features
+* iOS Resolver: Pod declaration properties can now be set via XML pod
+  references.  For example, this can enable pods for a subset of build
+  configurations.
+## Bug Fixes
+* iOS Resolver: Fixed incremental builds after local pods support caused
+  regression in 1.2.96.
+
+# Version 1.2.97 - Dec 17, 2018
+## Bug Fixes
+* Android Resolver: Reduced memory allocation for logic that monitors build
+  settings when auto-resolution is enabled.  If auto-resolution is disabled,
+  almost all build settings are no longer polled for changes.
+
+# Version 1.2.96 - Dec 17, 2018
+## Bug Fixes
+* Android Resolver: Fixed repacking of AARs to exclude .meta files.
+* Android Resolver: Only perform auto-resolution on the first scene while
+  building.
+* Android Resolver: Fixed parsing of version ranges that include whitespace.
+* iOS Resolver: Added support for local development pods.
+* Version Handler: Fixed Version Handler failing to rename some files.
+
+# Version 1.2.95 - Oct 23, 2018
+## Bug Fixes:
+* Android Resolver: Fixed auto-resolution running in a loop in some scenarios.
+
+# Version 1.2.94 - Oct 22, 2018
+## Bug Fixes
+* iOS Resolver: Added support for PODS_TARGET_SRCROOT in source Cocoapods.
+
+# Version 1.2.93 - Oct 22, 2018
+## Bug Fixes
+* Android Resolver: Fixed removal of Android libraries on auto-resolution when
+  `*Dependencies.xml` files are deleted.
+
+# Version 1.2.92 - Oct 2, 2018
+## Bug Fixes
+* Android Resolver: Worked around auto-resolution hang on Windows if
+  resolution starts before compilation is finished.
+
+# Version 1.2.91 - Sep 27, 2018
+## Bug Fixes
+* Android Resolver: Fixed Android Resolution when the selected build target
+  isn't Android.
+* Added C# assembly symbols the plugin to simplify debugging bug reports.
+
+# Version 1.2.90 - Sep 21, 2018
+## Bug Fixes
+* Android Resolver: Fixed transitive dependency selection of version locked
+  packages.
+
+# Version 1.2.89 - Aug 31, 2018
+## Bug Fixes
+* Fixed FileLoadException in ResolveUnityEditoriOSXcodeExtension an assembly
+  can't be loaded.
+
+# Version 1.2.88 - Aug 29, 2018
+## Changed
+* Improved reporting of resolution attempts and conflicts found in the Android
+  Resolver.
+## Bug Fixes
+* iOS Resolver now correctly handles sample code in CocoaPods.  Previously it
+  would add all sample code to the project when using project level
+  integration.
+* Android Resolver now correctly handles Gradle conflict resolution when the
+  resolution results in a package that is compatible with all requested
+  dependencies.
+
+# Version 1.2.87 - Aug 23, 2018
+## Bug Fixes
+* Fixed Android Resolver "Processing AARs" dialog getting stuck in Unity 5.6.
+
+# Version 1.2.86 - Aug 22, 2018
+## Bug Fixes
+* Fixed Android Resolver exception in OnPostProcessScene() when the Android
+  platform isn't selected.
+
+# Version 1.2.85 - Aug 17, 2018
+## Changes
+* Added support for synchronous resolution in the Android Resolver.
+  PlayServicesResolver.ResolveSync() now performs resolution synchronously.
+* Auto-resolution in the Android Resolver now results in synchronous resolution
+  of Android dependencies before the Android application build starts via
+  UnityEditor.Callbacks.PostProcessSceneAttribute.
+
+# Version 1.2.84 - Aug 16, 2018
+## Bug Fixes
+* Fixed Android Resolver crash when the AndroidResolverDependencies.xml
+  file can't be written.
+* Reduced log spam when a conflicting Android library is pinned to a
+  specific version.
+
+# Version 1.2.83 - Aug 15, 2018
+## Bug Fixes
+* Fixed Android Resolver failures due to an in-accessible AAR / JAR explode
+  cache file.  If the cache can't be read / written the resolver now continues
+  with reduced performance following recompilation / DLL reloads.
+* Fixed incorrect version number in plugin manifest on install.
+  This was a minor issue since the version handler rewrote the metadata
+  after installation.
+
+# Version 1.2.82 - Aug 14, 2018
+## Changed
+* Added support for alphanumeric versions in the Android Resolver.
+
+## Bug Fixes
+* Fixed Android Resolver selection of latest duplicated library.
+* Fixed Android Resolver conflict resolution when version locked and non-version
+  locked dependencies are specified.
+* Fixed Android Resolver conflict resolution when non-existent artifacts are
+  referenced.
+
+# Version 1.2.81 - Aug 9, 2018
+## Bug Fixes
+* Fixed editor error that would occur when when
+  `PlayerSettings.Android.targetArchitectures` was set to
+  `AndroidArchitecture.All`.
+
+# Version 1.2.80 - Jul 24, 2018
+## Bug Fixes
+* Fixed project level settings incorrectly falling back to system wide settings
+  when default property values were set.
+
+# Version 1.2.79 - Jul 23, 2018
+## Bug Fixes
+* Fixed AndroidManifest.xml patching on Android Resolver load in Unity 2018.x.
+
+# Version 1.2.78 - Jul 19, 2018
+## Changed
+* Added support for overriding conflicting dependencies.
+
+# Version 1.2.77 - Jul 19, 2018
+## Changed
+* Android Resolver now supports Unity's 2018 ABI filter (i.e arm64-v8a).
+* Reduced Android Resolver build option polling frequency.
+* Disabled Android Resolver auto-resolution in batch mode.  Users now need
+  to explicitly kick off resolution through the API.
+* All Android Resolver and Version Handler dialogs are now disabled in batch
+  mode.
+* Verbose logging for all plugins is now enabled by default in batch mode.
+* Version Handler bootstrapper has been improved to no longer call
+  UpdateComplete multiple times.  However, since Unity can still reload the
+  app domain after plugins have been enabled, users still need to store their
+  plugin state to persistent storage to handle reloads.
+
+## Bug Fixes
+* Android Resolver no longer incorrectly adds MANIFEST.MF files to AARs.
+* Android Resolver auto-resolution jobs are now unscheduled when an explicit
+  resolve job is started.
+
+# Version 1.2.76 - Jul 16, 2018
+## Bug Fixes
+* Fixed variable replacement in AndroidManifest.xml files in the Android
+  Resolver.
+  Version 1.2.75 introduced a regression which caused all variable replacement
+  to replace the *entire* property value rather than the component of the
+  property that referenced a variable.  For example,
+  given "applicationId = com.my.app", "${applicationId}.foo" would be
+  incorrectly expanded as "com.my.app" rather than "com.my.app.foo".  This
+  resulted in numerous issues for Android builds where content provider
+  initialization would fail and services may not start.
+
+## Changed
+* Gradle prebuild experimental feature has been removed from the Android
+  Resolver.  The feature has been broken for some time and added around 8MB
+  to the plugin size.
+* Added better support for execution of plugin components in batch mode.
+  In batch mode UnityEditor.update is sometimes never called - like when a
+  single method is executed - so the new job scheduler will execute all jobs
+  synchronously from the main thread.
+
+# Version 1.2.75 - Jun 20, 2018
+## New Features
+* Android Resolver now monitors the Android SDK path when
+  auto-resolution is enabled and triggers resolution when the path is
+  modified.
+
+## Changed
+* Android auto-resolution is now delayed by 3 seconds when the following build
+  settings are changed:
+  - Target ABI.
+  - Gradle build vs. internal build.
+  - Project export.
+* Added a progress bar display when AARs are being processed during Android
+  resolution.
+
+## Bug Fixes
+* Fixed incorrect Android package version selection when a mix of
+  version-locked and non-version-locked packages are specified.
+* Fixed non-deterministic Android package version selection to select
+  the highest version of a specified package rather than the last
+  package specification passed to the Gradle resolution script.
+
+# Version 1.2.74 - Jun 19, 2018
+## New Features
+* Added workaround for broken AndroidManifest.xml variable replacement in
+  Unity 2018.x.  By default ${applicationId} variables will be replaced by
+  the bundle ID in the Plugins/Android/AndroidManifest.xml file.  The
+  behavior can be disabled via the Android Resolver settings menu.
+
+# Version 1.2.73 - May 30, 2018
+## Bug Fixes
+* Fixed spurious warning message about missing Android plugins directory on
+  Windows.
+
+# Version 1.2.72 - May 23, 2018
+## Bug Fixes
+* Fixed spurious warning message about missing Android plugins directory.
+
+# Version 1.2.71 - May 10, 2018
+## Bug Fixes
+* Fixed resolution of Android dependencies when the `Assets/Plugins/Android`
+  directory is named in a different case e.g `Assets/plugins/Android`.
+
+# Version 1.2.70 - May 7, 2018
+## Bug Fixes
+* Fixed bitcode flag being ignored for iOS pods.
+
+# Version 1.2.69 - May 7, 2018
+## Bug Fixes
+* Fixed escaping of local repository paths in Android Resolver.
+
+# Version 1.2.68 - May 3, 2018
+## Changes
+* Added support for granular builds of Google Play Services.
+
+# Version 1.2.67 - May 1, 2018
+## Changes
+* Improved support for iOS source-only pods in Unity 5.5 and below.
+
+# Version 1.2.66 - April 27, 2018
+## Bug Fixes
+* Fixed Version Handler renaming of Linux libraries with hyphens in filenames.
+  Previously, libraries named Foo-1.2.3.so were not being renamed to
+  libFoo-1.2.3.so on Linux which could break native library loading on some
+  versions of Unity.
+
+# Version 1.2.65 - April 26, 2018
+## Bug Fixes
+* Fix CocoaPods casing in logs and comments.
+
+# Version 1.2.64 - Mar 16, 2018
+## Bug Fixes
+* Fixed bug in download_artifacts.gradle (used by Android Resolver) which
+  reported a failure if required artifacts already exist.
+
+# Version 1.2.63 - Mar 15, 2018
+## Bug Fixes
+* Fixed iOS Resolver include search paths taking precedence over system headers
+  when using project level resolution.
+* Fixed iOS Resolver includes relative to library root, when using project level
+  resolution.
+
+# Version 1.2.62 - Mar 12, 2018
+## Changes
+* Improved error reporting when a file can't be moved to trash by the
+  Version Handler.
+## Bug Fixes
+* Fixed Android Resolver throwing NullReferenceException when the Android SDK
+  path isn't set.
+* Fixed Version Handler renaming files with underscores if the
+  "Rename to Canonical Filenames" setting is enabled.
+
+# Version 1.2.61 - Jan 22, 2018
+## Bug Fixes
+* Fixed Android Resolver reporting non-existent conflicting dependencies when
+  Gradle build system is enabled.
+
+# Version 1.2.60 - Jan 12, 2018
+## Changes
+* Added support for Maven / Ivy version specifications for Android packages.
+* Added support for Android SNAPSHOT packages.
+
+## Bug Fixes
+* Fixed Openjdk version check.
+* Fixed non-deterministic Android package resolution when two packages contain
+  an artifact with the same name.
+
+# Version 1.2.59 - Oct 19, 2017
+## Bug Fixes
+* Fixed execution of Android Gradle resolution script when it's located
+  in a path with whitespace.
+
+# Version 1.2.58 - Oct 19, 2017
+## Changes
+* Removed legacy resolution method from Android Resolver.
+  It is now only possible to use the Gradle or Gradle prebuild resolution
+  methods.
+
+# Version 1.2.57 - Oct 18, 2017
+## Bug Fixes
+* Updated Gradle wrapper to 4.2.1 to fix issues using Gradle with the
+  latest Openjdk.
+* Android Gradle resolution now also uses gradle.properties to pass
+  parameters to Gradle in an attempt to workaround problems with
+  command line argument parsing on Windows 10.
+
+# Version 1.2.56 - Oct 12, 2017
+## Bug Fixes
+* Fixed Gradle artifact download with non-version locked artifacts.
+* Changed iOS resolver to only load dependencies at build time.
+
+# Version 1.2.55 - Oct 4, 2017
+## Bug Fixes
+* Force Android Resolution when the "Install Android Packages" setting changes.
+
+# Version 1.2.54 - Oct 4, 2017
+## Bug Fixes
+* Fixed execution of command line tools on Windows when the path to the tool
+  contains a single quote (apostrophe).  In this case we fallback to executing
+  the tool via the system shell.
+
+# Version 1.2.53 - Oct 2, 2017
+## New Features
+* Changed Android Resolver "resolution complete" dialog so that it now displays
+  failures.
+* Android Resolver now detects conflicting libraries that it does not manage
+  warning the user if they're newer than the managed libraries and prompting
+  the user to clean them up if they're older or at the same version.
+
+## Bug Fixes
+* Improved Android Resolver auto-resolution speed.
+* Fixed bug in the Gradle Android Resolver which would result in resolution
+  succeeding when some dependencies are not found.
+
+# Version 1.2.52 - Sep 25, 2017
+## New Features
+* Changed Android Resolver's Gradle resolution to resolve conflicting
+  dependencies across Google Play services and Android Support library packages.
+
+# Version 1.2.51 - Sep 20, 2017
+## Changes
+* Changed iOS Resolver to execute the CocoaPods "pod" command via the shell
+  by default.  Some developers customize their shell environment to use
+  custom ssh certs to access internal git repositories that host pods so
+  executing "pod" via the shell will work for these scenarios.
+  The drawback of executing "pod" via the shell could potentially cause
+  users problems if they break their shell environment.  Though users who
+  customize their shell environments will be able to resolve these issues.
+
+# Version 1.2.50 - Sep 18, 2017
+## New Features
+* Added option to disable the Gradle daemon in the Android Resolver.
+  This daemon is now disabled by default as some users are getting into a state
+  where multiple daemon instances are being spawned when changing dependencies
+  which eventually results in Android resolution failing until all daemon
+  processes are manually killed.
+
+## Bug Fixes
+* Android resolution is now always executed if the user declines the update
+  of their Android SDK.  This ensure users can continue to use out of date
+  Android SDK packages if they desire.
+
+# Version 1.2.49 - Sep 18, 2017
+## Bug Fixes
+* Removed modulemap parsing in iOS Resolver.
+  The framework *.modulemap did not need to be parsed by the iOS Resolver
+  when injecting Cocoapods into a Xcode project.  Simply adding a modular
+  framework to a Xcode project results in Xcode's Clang parsing the associated
+  modulemap and injecting any compile and link flags into the build process.
+
+# Version 1.2.48 - Sep 12, 2017
+## New Features
+* Changed settings to be per-project by default.
+
+## Bug Fixes
+* Added Google maven repository to fix GradlePrebuild resolution with Google
+  components.
+* Fixed Android Resolution failure with spaces in paths.
+
+# Version 1.2.47 - Aug 29, 2017
+## New Features
+* Android and iOS dependencies can now be specified using *Dependencies.xml
+  files.  This is now the preferred method for registering dependencies,
+  we may remove the API for dependency addition in future.
+* Added "Reset to Defaults" button to each settings dialog to restore default
+  settings.
+* Android Resolver now validates the configured JDK is new enough to build
+  recently released Android libraries.
+## Bug Fixes
+* Fixed a bug that caused dependencies with the "LATEST" version specification
+  to be ignored when using the Gradle mode of the Android Resolver.
+* Fixed a race condition when running Android Resolution.
+* Fixed Android Resolver logging if a PlayServicesSupport instance is created
+  with no logging enabled before the Android Resolver is initialized.
+* Fixed iOS resolver dialog in Unity 4.
+* Fixed iOS Cocoapod Xcode project integration in Unity 4.
+
+# Version 1.2.46 - Aug 22, 2017
+## Bug Fixes
+* GradlePrebuild Android resolver on Windows now correctly locates dependent
+  data files.
+
+# Version 1.2.45 - Aug 22, 2017
+## Bug Fixes
+* Improved Android package auto-resolution and fixed clean up of stale
+  dependencies when using Gradle dependency resolution.
+
+# Version 1.2.44 - Aug 21, 2017
+## Bug Fixes
+* Enabled autoresolution for Gradle Prebuild.
+* Made the command line dialog windows have selectable text.
+* Fixed incorrect "Android Settings" dialog disabled groups.
+* Updated PlayServicesResolver android platform detection to use the package
+  manager instead of the 'android' tool.
+* UnityCompat reflection methods 'GetAndroidPlatform' and
+  'GetAndroidBuildToolsVersion' are now Obsolete due to dependence on the
+  obsolete 'android' build tool.
+
+# Version 1.2.43 - Aug 18, 2017
+## Bug Fixes
+* Fixed Gradle resolution in the Android Resolver when running
+  PlayServicesResolver.Resolve() in parallel or spawning multiple
+  resolutions before the previous resolve completed.
+
+# Version 1.2.42 - Aug 17, 2017
+## Bug Fixes
+* Fixed Xcode project level settings not being applied by IOS Resolver when
+  Xcode project pod integration is enabled.
+
+# Version 1.2.41 - Aug 15, 2017
+## Bug Fixes
+* IOS Resolver's Xcode workspace pod integration is now disabled when Unity
+  Cloud Build is detected.  Unity Cloud Build does not follow the same build
+  process as the Unity editor and fails to open the generated xcworkspace at
+  this time.
+
+# Version 1.2.40 - Aug 15, 2017
+## Bug Fixes
+* Moved Android Resolver Gradle Prebuild scripts into Google.JarResolver.dll.
+  They are now extracted from the DLL when required.
+* AARs / JARs are now cleaned up when switching the Android resolution
+  strategy.
+
+# Version 1.2.39 - Aug 10, 2017
+## New Features
+* Android Resolver now supports resolution with Gradle.  This enables support
+  for non-local artifacts.
+## Bug Fixes
+* Android Resolver's Gradle Prebuild now uses Android build tools to determine
+  the Android platform tools version rather than relying upon internal Unity
+  APIs.
+* Android Resolver's Gradle Prebuild now correctly strips binaries that are
+  not required for the target ABI.
+
+# Version 1.2.38 - Aug 7, 2017
+## Bug Fixes
+* Fixed an issue in VersionHandler where disabled targets are ignored if
+  the "Any Platform" flag is set on a plugin DLL.
+
+# Version 1.2.37 - Aug 3, 2017
+## New Features
+* Exposed GooglePlayServices.PlayServicesResolver.Resolve() so that it's
+  possible for a script to be notified when AAR / Jar resolution is complete.
+  This makes it easier to setup a project to build from the command line.
+
+# Version 1.2.36 - Aug 3, 2017
+## New Features
+* VersionHandler.UpdateCompleteMethods allows a user to provide a list of
+  methods to be called when VersionHandlerImpl has completed an update.
+  This makes it easier to import a plugin and wait for VersionHandler to
+  execute prior executing a build.
+
+# Version 1.2.35 - Jul 28, 2017
+## New Features
+* VersionHandler will now rename Linux libraries so they can target Unity
+  versions that require different file naming.  Libraries need to be labelled
+  gvh_linuxlibname-${basename} in order to be considered for renaming.
+  e.g gvh\_linuxlibname-MyLib will be named MyLib.so in Unity 5.5 and below and
+  libMyLib.so in Unity 5.6 and above.
+
+# Version 1.2.34 - Jul 28, 2017
+## Bug Fixes
+* Made VersionHandler bootstrap module more robust when calling static
+  methods before the implementation DLL is loaded.
+
+# Version 1.2.33 - Jul 27, 2017
+## New Features
+* Added a bootstrap module for VersionHandler so the implementation
+  of the VersionHandler module can be versioned without resulting in
+  a compile error when imported at different versions across multiple
+  plugins.
+
+# Version 1.2.32 - Jul 20, 2017
+## New Features
+* Added support for build target selection based upon .NET framework
+  version in the VersionHandler.
+  When applying either gvh\_dotnet-3.5 or gvh\_dotnet-4.5 labels to
+  assets, the VersionHandler will only enable the asset for the
+  specified set of build targets when the matching .NET framework version
+  is selected in Unity 2017's project settings.  This allows assets
+  to be provided in a plugin that need to differ based upon .NET version.
+
+# Version 1.2.31 - Jul 5, 2017
+## Bug Fixes
+* Force expansion of AARs with native components when using Unity 2017
+  with the internal build system.  In contrast to Unity 5.x, Unity 2017's
+  internal build system does not include native libraries included in AARs.
+  Forcing expansion of AARs with native components generates an
+  Ant / Eclipse project for each AAR which is correctly included by Unity
+  2017's internal build system.
+
+# Version 1.2.30 - Jul 5, 2017
+## Bug Fixes
+* Fixed Cocoapods being installed when the build target isn't iOS.
+* Added support for malformed AARs with missing classes.jar.
+
+# Version 1.2.29 - Jun 16, 2017
+## New Features
+* Added support for the Android sdkmanager tool.
+
+# Version 1.2.28 - Jun 8, 2017
+## Bug Fixes
+* Fixed non-shell command line execution (regression from
+  Cocoapod installation patch).
+
+# Version 1.2.27 - Jun 7, 2017
+## Bug Fixes
+* Added support for stdout / stderr redirection when executing
+  commands in shell mode.
+  This fixes CocoaPod tool installation when shell mode is
+  enabled.
+* Fixed incremental builds when additional sources are specified
+  in the Podfile.
+
+# Version 1.2.26 - Jun 7, 2017
+## Bug Fixes
+* Fixed a crash when importing Version Handler into Unity 4.7.x.
+
+# Version 1.2.25 - Jun 7, 2017
+## Bug Fixes
+* Fixed an issue in the Jar Resolver which incorrectly notified
+  event handlers of bundle ID changes when the currently selected
+  (not active) build target changed in Unity 5.6 and above.
+
+# Version 1.2.24 - Jun 6, 2017
+## New Features
+* Added option to control file renaming in Version Handler settings.
+  Disabling file renaming (default option) significantly increases
+  the speed of file version management operations with the downside
+  that any files that are referenced directly by canonical filename
+  rather than asset ID will no longer be valid.
+* Improved logging in the Version Handler.
+## Bug Fixes
+* Fixed an issue in the Version Handler which caused it to not
+  re-enable plugins when re-importing a custom package with disabled
+  version managed files.
+
+# Version 1.2.23 - May 26, 2017
+## Bug Fixes
+* Fixed a bug with gradle prebuild resolver on windows.
+
+# Version 1.2.22 - May 19, 2017
+## Bug Fixes
+* Fixed a bug in the iOS resolver with incremental builds.
+* Fixed misdetection of Cocoapods support with Unity beta 5.6.
+
+# Version 1.2.21 - May 8, 2017
+## Bug Fixes
+* Fix for https://github.com/googlesamples/unity-jar-resolver/issues/48
+  Android dependency version number parsing when "-alpha" (etc.) are
+  included in dependency (AAR / JAR) versions.
+
+# Version 1.2.20 - May 8, 2017
+## Bug Fixes
+* Attempted to fix
+  https://github.com/googlesamples/unity-jar-resolver/issues/48
+  where a NullReferenceException could occur if a target file does not
+  have a valid version string.
+
+# Version 1.2.19 - May 4, 2017
+## Bug Fixes
+* Fixed Jar Resolver exploding and deleting AAR files it isn't managing.
+
+# Version 1.2.18 - May 4, 2017
+## New Features
+* Added support for preserving Unity pods such as when GVR is enabled.
+
+# Version 1.2.17 - Apr 20, 2017
+## Bug Fixes
+* Fixed auto-resolution when an Android application ID is modified.
+
+# Version 1.2.16 - Apr 17, 2017
+## Bug Fixes
+* Fixed Unity version number parsing on machines with a locale that uses
+  "," for decimal points.
+* Fixed null reference exception if JDK path isn't set.
+
+# Version 1.2.15 - Mar 17, 2017
+## New Features
+* Added warning when the Jar Resolver's background resolution is disabled.
+## Bug Fixes
+* Fixed support of AARs with native libraries when using Gradle.
+* Fixed extra repository paths when resolving dependencies.
+
+# Version 1.2.14 - Mar 7, 2017
+## New Features
+* Added experimental Android resolution using Gradle.
+  This alternative resolver supports proguard stripping with Unity's
+  internal build system.
+* Added Android support for single ABI builds when using AARs include
+  native libraries.
+* Disabled Android resolution on changes to all .cs and .js files.
+  File patterns that are monitored for auto-resolution can be added
+  using PlayServicesResolver.AddAutoResolutionFilePatterns().
+* Added tracking of resolved AARs and JARs so they can be cleaned up
+  if they're no longer referenced by a project.
+* Added persistence of AAR / JAR version replacement for each Unity
+  session.
+* Added settings dialog to the iOS resolver.
+* Integrated Cocoapod tool installation in the iOS resolver.
+* Added option to run pod tool via the shell.
+## Bug Fixes
+* Fixed build of some source Cocoapods (e.g Protobuf).
+* VersionHandler no longer prompts to delete obsolete manifests.
+* iOS resolver handles Cocoapod installation when using Ruby < 2.2.2.
+* Added workaround for package version selection when including
+  Google Play Services on Android.
+* Fixed support for pods that reference static libraries.
+* Fixed support for resource-only pods.
+
+# Version 1.2.12 - Feb 14, 2017
+## Bug Fixes
+* Fixed re-explosion of AARs when the bundle ID is modified.
+
+# Version 1.2.11 - Jan 30, 2017
+## New Features
+* Added support for Android Studio builds.
+* Added support for native (C/C++) shared libraries in AARs.
+
+# Version 1.2.10 - Jan 11, 2017
+## Bug Fixes
+* Fixed SDK manager path retrieval.
+* Also, report stderr when it's not possible to run the "pod" tool.
+* Handle exceptions thrown by Unity.Cecil on asset rename
+* Fixed IOSResolver to handle PlayerSettings.iOS.targetOSVersionString
+
+# Version 1.2.9 - Dec 7, 2016
+## Bug Fixes
+* Improved error reporting when "pod repo update" fails.
+* Added detection of xml format xcode projects generated by old Cocoapods
+  installations.
+
+# Version 1.2.8 - Dec 6, 2016
+## Bug Fixes
+* Increased speed of JarResolver resolution.
+* Fixed JarResolver caches getting out of sync with requested dependencies
+  by removing the caches.
+* Fixed JarResolver explode cache always being rewritten even when no
+  dependencies change.
+
+# Version 1.2.7 - Dec 2, 2016
+## Bug Fixes
+* Fixed VersionHandler build errors with Unity 5.5, due to the constantly
+  changing BuildTarget enum.
+* Added support for Unity configured JDK Path rather than requiring
+  JAVA_HOME to be set in the Jar Resolver.
+
+# Version 1.2.6 - Nov 15, 2016
+## Bug Fixes
+* Fixed IOSResolver errors when iOS support is not installed.
+* Added fallback to "pod" executable search which queries the Ruby Gems
+  package manager for the binary install location.
+
+# Version 1.2.5 - Nov 3, 2016
+## Bug Fixes
+* Added crude support for source only Cocoapods to the IOSResolver.
+
+# Version 1.2.4 - Oct 27, 2016
+## Bug Fixes
+* Automated resolution of out of date pod repositories.
+
+# Version 1.2.3 - Oct 25, 2016
+## Bug Fixes
+* Fixed exception when reporting conflicting dependencies.
+
+# Version 1.2.2 - Oct 17, 2016
+## Bug Fixes
+* Fixed issue working with Unity 5.5
+* Fixed issue with PlayServicesResolver corrupting other iOS dependencies.
+* Updated build script to use Unity distributed tools for building.
+
+# Version 1.2.1 - Jul 25, 2016
+## Bug Fixes
+* Removed 1.2 Resolver and hardcoded whitelist of AARs to expand.
+* Improved error reporting when the "jar" executable can't be found.
+* Removed the need to set JAVA_HOME if "jar" is in the user's path.
+* Fixed spurious copying of partially matching AARs.
+* Changed resolver to only copy / expand when source AARs change.
+* Auto-resolution of dependencies is now performed when the Android
+  build target is selected.
+
+## New Features
+* Expand AARs that contain manifests with variable expansion like
+  ${applicationId}.
+* Added optional logging in the JarResolverLib module.
+* Integration with the Android SDK manager for dependencies that
+  declare required Android SDK packages.
+
+# Version 1.2.0 - May 11 2016
+## Bug Fixes
+* Handles resolving dependencies when the artifacts are split across 2 repos.
+* #4 Misdetecting version for versions like 1.2-alpha.  These are now string
+  compared if alphanumeric
+* Removed resolver creation via reflection since it did not work all the time.
+  Now a resolver needs to be loaded externally (which is existing behavior).
+
+## New Features
+* Expose PlayServicesResolver properties to allow for script access.
+* Explodes firebase-common and firebase-measurement aar files to support
+  ${applicationId} substitution.
+
+# Version 1.1.1 - 25 Feb 2016
+## Bug Fixes
+* #1 Spaces in project path not handled when exploding Aar file.
+* #2 Script compilation error: TypeLoadException.
+
+# Version 1.1.0 - 5 Feb 2016
+## New Features
+* Adds friendly alert when JAVA_HOME is not set on Windows platforms.
+* Adds flag for disabling background resolution.
+* Expands play-services-measurement and replaces ${applicationId} with the
+  bundle Id.
+
+ ## Bug Fixes
+* Fixes infinite loop of resolution triggered by resolution.

+ 11 - 0
Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d60ee14e02f540f394225c5ad5a4be80
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-ExternalDependencyManager/Editor/CHANGELOG.md
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll


BIN
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb


+ 11 - 0
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 678abf9fd45a41d182aea1542e83aebe
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 38 - 0
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta

@@ -0,0 +1,38 @@
+fileFormatVersion: 2
+guid: f35f43947d644fae9db50b3c13996c0c
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-ExternalDependencyManager/Editor/Google.VersionHandler.dll
+- gvhp_targets-editor
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 245 - 0
Assets/ExternalDependencyManager/Editor/LICENSE

@@ -0,0 +1,245 @@
+Copyright (C) 2014 Google Inc.
+
+    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.
+
+                                 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.
+
+====================================================================================================
+This package uses MiniJSON
+
+Copyright (c) 2013 Calvin Rien
+
+Based on the JSON parser by Patrick van Bergen
+http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html
+
+Simplified it so that it doesn't throw exceptions
+and can be used in Unity iPhone with maximum code stripping.
+
+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.

+ 11 - 0
Assets/ExternalDependencyManager/Editor/LICENSE.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ca5ff2d8150c4d2088af1a803844e5b2
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-ExternalDependencyManager/Editor/LICENSE
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 768 - 0
Assets/ExternalDependencyManager/Editor/README.md

@@ -0,0 +1,768 @@
+External Dependency Manager for Unity
+========
+
+# Overview
+
+The External Dependency Manager for Unity (EDM4U)
+(formerly Play Services Resolver / Jar Resolver) is intended to be used by any
+Unity plugin that requires:
+
+   * Android specific libraries (e.g
+     [AARs](https://developer.android.com/studio/projects/android-library.html)).
+   * iOS [CocoaPods](https://cocoapods.org/).
+   * Version management of transitive dependencies.
+   * Management of Package Manager (PM) Registries.
+
+Updated releases are available on
+[GitHub](https://github.com/googlesamples/unity-jar-resolver)
+
+# Background
+
+Many Unity plugins have dependencies upon Android specific libraries, iOS
+CocoaPods, and sometimes have transitive dependencies upon other Unity plugins.
+This causes the following problems:
+
+   * Integrating platform specific (e.g Android and iOS) libraries within a
+     Unity project can be complex and a burden on a Unity plugin maintainer.
+   * The process of resolving conflicting dependencies on platform specific
+     libraries is pushed to the developer attempting to use a Unity plugin.
+     The developer trying to use your plugin is very likely to give up when
+     faced with Android or iOS specific build errors.
+   * The process of resolving conflicting Unity plugins (due to shared Unity
+     plugin components) is pushed to the developer attempting to use your Unity
+     plugin. In an effort to resolve conflicts, the developer will very likely
+     attempt to resolve problems by deleting random files in your plugin,
+     report bugs when that doesn't work and finally give up.
+
+EDM provides solutions for each of these problems.
+
+## Android Dependency Management
+
+The *Android Resolver* component of this plugin will download and integrate
+Android library dependencies and handle any conflicts between plugins that share
+the same dependencies.
+
+Without the Android Resolver, typically Unity plugins bundle their AAR and
+JAR dependencies, e.g. a Unity plugin `SomePlugin` that requires the Google
+Play Games Android library would redistribute the library and its transitive
+dependencies in the folder `SomePlugin/Android/`.  When a user imports
+`SomeOtherPlugin` that includes the same libraries (potentially at different
+versions) in `SomeOtherPlugin/Android/`, the developer using `SomePlugin` and
+`SomeOtherPlugin` will see an error when building for Android that can be hard
+to interpret.
+
+Using the Android Resolver to manage Android library dependencies:
+
+   * Solves Android library conflicts between plugins.
+   * Handles all of the various processing steps required to use Android
+     libraries (AARs, JARs) in Unity 4.x and above projects.  Almost all
+     versions of Unity have - at best - partial support for AARs.
+   * (Experimental) Supports minification of included Java components without
+     exporting a project.
+
+## iOS Dependency Management
+
+The *iOS Resolver* component of this plugin integrates with
+[CocoaPods](https://cocoapods.org/) to download and integrate iOS libraries
+and frameworks into the Xcode project Unity generates when building for iOS.
+Using CocoaPods allows multiple plugins to utilize shared components without
+forcing developers to fix either duplicate or incompatible versions of
+libraries included through multiple Unity plugins in their project.
+
+## Package Manager Registry Setup
+
+The [Package Manager](https://docs.unity3d.com/Manual/Packages.html)
+(PM) makes use of [NPM](https://www.npmjs.com/) registry servers for package
+hosting and provides ways to discover, install, upgrade and uninstall packages.
+This makes it easier for developers to manage plugins within their projects.
+
+However, installing additional package registries requires a few manual steps
+that can potentially be error prone.  The *Package Manager Resolver*
+component of this plugin integrates with
+[PM](https://docs.unity3d.com/Manual/Packages.html) to provide a way to
+auto-install PM package registries when a `.unitypackage` is installed which
+allows plugin maintainers to ship a `.unitypackage` that can provide access
+to their own PM registry server to make it easier for developers to
+manage their plugins.
+
+## Unity Plugin Version Management
+
+Finally, the *Version Handler* component of this plugin simplifies the process
+of managing transitive dependencies of Unity plugins and each plugin's upgrade
+process.
+
+For example, without the Version Handler plugin, if:
+
+   * Unity plugin `SomePlugin` includes `EDM4U` plugin at
+     version 1.1.
+   * Unity plugin `SomeOtherPlugin` includes `EDM4U`
+     plugin  at version 1.2.
+
+The version of `EDM4U` included in the developer's project depends upon the
+order the developer imports `SomePlugin` or `SomeOtherPlugin`.
+
+This results in:
+
+   * `EDM4U` at version 1.2, if `SomePlugin` is imported then `SomeOtherPlugin`
+     is imported.
+   * `EDM4U` at version 1.1, if `SomeOtherPlugin` is imported then
+     `SomePlugin` is imported.
+
+The Version Handler solves the problem of managing transitive dependencies by:
+
+   * Specifying a set of packaging requirements that enable a plugin at
+     different versions to be imported into a Unity project.
+   * Providing activation logic that selects the latest version of a plugin
+     within a project.
+
+When using the Version Handler to manage `EDM4U` included in `SomePlugin` and
+`SomeOtherPlugin`, from the prior example, version 1.2 will always be the
+version activated in a developer's Unity project.
+
+Plugin creators are encouraged to adopt this library to ease integration for
+their customers.  For more information about integrating EDM4U
+into your own plugin, see the [Plugin Redistribution](#plugin-redistribution)
+section of this document.
+
+# Analytics
+
+The External Dependency Manager for Unity plugin by default logs usage to Google
+Analytics. The purpose of the logging is to quantitatively measure the usage of
+functionality, to gather reports on integration failures and to inform future
+improvements to the developer experience of the External Dependency Manager
+plugin. Note that the analytics collected are limited to the scope of the EDM4U
+plugin’s usage.
+
+For details of what is logged, please refer to the usage of
+`EditorMeasurement.Report()` in the source code.
+
+# Requirements
+
+The *Android Resolver* and *iOS Resolver* components of the plugin only work
+with Unity version 4.6.8 or higher.
+
+The *Version Handler* component only works with Unity 5.x or higher as it
+depends upon the `PluginImporter` UnityEditor API.
+
+The *Package Manager Resolver* component only works with
+Unity 2018.4 or above, when
+[scoped registry](https://docs.unity3d.com/Manual/upm-scoped.html)
+support was added to the Package Manager.
+
+# Getting Started
+
+Before you import EDM4U into your plugin project, you first
+need to consider whether you intend to *redistribute* `EDM4U`
+along with your own plugin.
+
+## Plugin Redistribution
+
+If you're a plugin maintainer, redistributing `EDM4U` inside your own plugin
+will ease the integration process for your users, by resolving dependency
+conflicts between your plugin and other plugins in a user's project.
+
+If you wish to redistribute `EDM4U` inside your plugin,
+you **must** follow these steps when importing the
+`external-dependency-manager-*.unitypackage`, and when exporting your own plugin
+package:
+
+   1. Import the `external-dependency-manager-*.unitypackage` into your plugin
+      project by
+      [running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html), ensuring that
+      you add the `-gvh_disable` option.
+   1. Export your plugin by [running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html), ensuring that
+      you:
+      - Include the contents of the `Assets/PlayServicesResolver` and
+        `Assets/ExternalDependencyManager` directory.
+      - Add the `-gvh_disable` option.
+
+You **must** specify the `-gvh_disable` option in order for the Version
+Handler to work correctly!
+
+For example, the following command will import the
+`external-dependency-manager-1.2.46.0.unitypackage` into the project
+`MyPluginProject` and export the entire Assets folder to
+`MyPlugin.unitypackage`:
+
+```
+Unity -gvh_disable \
+      -batchmode \
+      -importPackage external-dependency-manager-1.2.46.0.unitypackage \
+      -projectPath MyPluginProject \
+      -exportPackage Assets MyPlugin.unitypackage \
+      -quit
+```
+
+### Background
+
+The *Version Handler* component relies upon deferring the load of editor DLLs
+so that it can run first and determine the latest version of a plugin component
+to activate.  The build of `EDM4U` plugin has Unity asset metadata that is
+configured so that the editor components are not initially enabled when it's
+imported into a Unity project.  To maintain this configuration when importing
+the `external-dependency-manager.unitypackage` into a Unity plugin project, you
+*must* specify the command line option `-gvh_disable` which will prevent the
+Version Handler component from running and changing the Unity asset metadata.
+
+# Android Resolver Usage
+
+The Android Resolver copies specified dependencies from local or remote Maven
+repositories into the Unity project when a user selects Android as the build
+target in the Unity editor.
+
+   1. Add the `external-dependency-manager-*.unitypackage` to your plugin
+      project (assuming you are developing a plugin). If you are redistributing
+      EDM4U with your plugin, you **must** follow the
+      import steps in the [Getting Started](#getting-started) section!
+
+   2. Copy and rename the
+      [SampleDependencies.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/SampleDependencies.xml)
+      file into your plugin and add the dependencies your plugin requires.
+
+      The XML file just needs to be under an `Editor` directory and match the
+      name `*Dependencies.xml`. For example,
+      `MyPlugin/Editor/MyPluginDependencies.xml`.
+
+   3. Follow the steps in the [Getting Started](#getting-started)
+      section when you are exporting your plugin package.
+
+For example, to add the Google Play Games library
+(`com.google.android.gms:play-services-games` package) at version `9.8.0` to
+the set of a plugin's Android dependencies:
+
+```
+<dependencies>
+  <androidPackages>
+    <androidPackage spec="com.google.android.gms:play-services-games:9.8.0">
+      <androidSdkPackageIds>
+        <androidSdkPackageId>extra-google-m2repository</androidSdkPackageId>
+      </androidSdkPackageIds>
+    </androidPackage>
+  </androidPackages>
+</dependencies>
+```
+
+The version specification (last component) supports:
+
+   * Specific versions e.g `9.8.0`
+   * Partial matches e.g `9.8.+` would match 9.8.0, 9.8.1 etc. choosing the most
+     recent version.
+   * Latest version using `LATEST` or `+`.  We do *not* recommend using this
+     unless you're 100% sure the library you depend upon will not break your
+     Unity plugin in future.
+
+The above example specifies the dependency as a component of the Android SDK
+manager such that the Android SDK manager will be executed to install the
+package if it's not found.  If your Android dependency is located on Maven
+central it's possible to specify the package simply using the `androidPackage`
+element:
+
+```
+<dependencies>
+  <androidPackages>
+    <androidPackage spec="com.google.api-client:google-api-client-android:1.22.0" />
+  </androidPackages>
+</dependencies>
+```
+
+## Auto-resolution
+
+By default the Android Resolver automatically monitors the dependencies you have
+specified and the `Plugins/Android` folder of your Unity project.  The
+resolution process runs when the specified dependencies are not present in your
+project.
+
+The *auto-resolution* process can be disabled via the
+`Assets > External Dependency Manager > Android Resolver > Settings` menu.
+
+Manual resolution can be performed using the following menu options:
+
+   * `Assets > External Dependency Manager > Android Resolver > Resolve`
+   * `Assets > External Dependency Manager > Android Resolver > Force Resolve`
+
+## Deleting libraries
+
+Resolved packages are tracked via asset labels by the Android Resolver.
+They can easily be deleted using the
+`Assets > External Dependency Manager > Android Resolver > Delete Resolved Libraries`
+menu item.
+
+## Android Manifest Variable Processing
+
+Some AAR files (for example play-services-measurement) contain variables that
+are processed by the Android Gradle plugin.  Unfortunately, Unity does not
+perform the same processing when using Unity's Internal Build System, so the
+Android Resolver plugin handles known cases of this variable substitution
+by exploding the AAR into a folder and replacing `${applicationId}` with the
+`bundleID`.
+
+Disabling AAR explosion and therefore Android manifest processing can be done
+via the `Assets > External Dependency Manager > Android Resolver > Settings`
+menu. You may want to disable explosion of AARs if you're exporting a project
+to be built with Gradle / Android Studio.
+
+## ABI Stripping
+
+Some AAR files contain native libraries (.so files) for each ABI supported
+by Android.  Unfortunately, when targeting a single ABI (e.g x86), Unity does
+not strip native libraries for unused ABIs.  To strip unused ABIs, the Android
+Resolver plugin explodes an AAR into a folder and removes unused ABIs to
+reduce the built APK size.  Furthermore, if native libraries are not stripped
+from an APK (e.g you have a mix of Unity's x86 library and some armeabi-v7a
+libraries) Android may attempt to load the wrong library for the current
+runtime ABI completely breaking your plugin when targeting some architectures.
+
+AAR explosion and therefore ABI stripping can be disabled via the
+`Assets > External Dependency Manager > Android Resolver > Settings` menu.
+You may want to disable explosion of AARs if you're exporting a project to be
+built with Gradle / Android Studio.
+
+## Resolution Strategies
+
+By default the Android Resolver will use Gradle to download dependencies prior
+to integrating them into a Unity project.  This works with Unity's internal
+build system and Gradle / Android Studio project export.
+
+It's possible to change the resolution strategy via the
+`Assets > External Dependency Manager > Android Resolver > Settings` menu.
+
+### Download Artifacts with Gradle
+
+Using the default resolution strategy, the Android resolver executes the
+following operations:
+
+   - Remove the result of previous Android resolutions.
+     e.g Delete all files and directories labeled with "gpsr" under
+     `Plugins/Android` from the project.
+   - Collect the set of Android dependencies (libraries) specified by a
+     project's `*Dependencies.xml` files.
+   - Run `download_artifacts.gradle` with Gradle to resolve conflicts and,
+     if successful, download the set of resolved Android libraries (AARs, JARs).
+   - Process each AAR / JAR so that it can be used with the currently selected
+     Unity build system (e.g Internal vs. Gradle, Export vs. No Export).
+     This involves patching each reference to `applicationId` in the
+     AndroidManifest.xml with the project's bundle ID.  This means resolution
+     must be run if the bundle ID is changed again.
+   - Move the processed AARs to `Plugins/Android` so they will be included when
+     Unity invokes the Android build.
+
+### Integrate into mainTemplate.gradle
+
+Unity 5.6 introduced support for customizing the `build.gradle` used to build
+Unity projects with Gradle. When the *Patch mainTemplate.gradle* setting is
+enabled, rather than downloading artifacts before the build, Android resolution
+results in the execution of the following operations:
+
+   - Remove the result of previous Android resolutions.
+     e.g Delete all files and directories labeled with "gpsr" under
+     `Plugins/Android` from the project and remove sections delimited with
+     `// Android Resolver * Start` and `// Android Resolver * End` lines.
+   - Collect the set of Android dependencies (libraries) specified by a
+     project's `*Dependencies.xml` files.
+   - Rename any `.srcaar` files in the build to `.aar` and exclude them from
+     being included directly by Unity in the Android build as
+     `mainTemplate.gradle` will be patched to include them instead from their
+     local maven repositories.
+   - Inject the required Gradle repositories into `mainTemplate.gradle` at the
+     line matching the pattern
+     `.*apply plugin: 'com\.android\.(application|library)'.*` or the section
+     starting at the line `// Android Resolver Repos Start`.
+     If you want to control the injection point in the file, the section
+     delimited by the lines `// Android Resolver Repos Start` and
+     `// Android Resolver Repos End` should be placed in the global scope
+     before the `dependencies` section.
+   - Inject the required Android dependencies (libraries) into
+     `mainTemplate.gradle` at the line matching the pattern `***DEPS***` or
+     the section starting at the line `// Android Resolver Dependencies Start`.
+     If you want to control the injection point in the file, the section
+     delimited by the lines `// Android Resolver Dependencies Start` and
+     `// Android Resolver Dependencies End` should be placed in the
+     `dependencies` section.
+   - Inject the packaging options logic, which excludes architecture specific
+     libraries based upon the selected build target, into `mainTemplate.gradle`
+     at the line matching the pattern `android +{` or the section starting at
+     the line `// Android Resolver Exclusions Start`.
+     If you want to control the injection point in the file, the section
+     delimited by the lines `// Android Resolver Exclusions Start` and
+     `// Android Resolver Exclusions End` should be placed in the global
+     scope before the `android` section.
+
+## Dependency Tracking
+
+The Android Resolver creates the
+`ProjectSettings/AndroidResolverDependencies.xml` to quickly determine the set
+of resolved dependencies in a project.  This is used by the auto-resolution
+process to only run the expensive resolution process when necessary.
+
+## Displaying Dependencies
+
+It's possible to display the set of dependencies the Android Resolver
+would download and process in your project via the
+`Assets > External Dependency Manager > Android Resolver > Display Libraries`
+menu item.
+
+# iOS Resolver Usage
+
+The iOS resolver component of this plugin manages
+[CocoaPods](https://cocoapods.org/).  A CocoaPods `Podfile` is generated and
+the `pod` tool is executed as a post build process step to add dependencies
+to the Xcode project exported by Unity.
+
+Dependencies for iOS are added by referring to CocoaPods.
+
+   1. Add the `external-dependency-manager-*.unitypackage` to your plugin
+      project (assuming you are developing a plugin). If you are redistributing
+      EDM4U with your plugin, you **must** follow the
+      import steps in the [Getting Started](#getting-started) section!
+
+   2. Copy and rename the
+      [SampleDependencies.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/SampleDependencies.xml)
+      file into your plugin and add the dependencies your plugin requires.
+
+      The XML file just needs to be under an `Editor` directory and match the
+      name `*Dependencies.xml`. For example,
+      `MyPlugin/Editor/MyPluginDependencies.xml`.
+
+   3. Follow the steps in the [Getting Started](#getting-started)
+      section when you are exporting your plugin package.
+
+For example, to add the AdMob pod, version 7.0 or greater with bitcode enabled:
+
+```
+<dependencies>
+  <iosPods>
+    <iosPod name="Google-Mobile-Ads-SDK" version="~> 7.0" bitcodeEnabled="true"
+            minTargetSdk="6.0" addToAllTargets="false" />
+  </iosPods>
+</dependencies>
+```
+
+## Integration Strategies
+
+The `CocoaPods` are either:
+   * Downloaded and injected into the Xcode project file directly, rather than
+     creating a separate xcworkspace.  We call this `Xcode project` integration.
+   * If the Unity version supports opening a xcworkspace file, the `pod` tool
+     is used as intended to generate a xcworkspace which references the
+     CocoaPods.  We call this `Xcode workspace` integration.
+
+The resolution strategy can be changed via the
+`Assets > External Dependency Manager > iOS Resolver > Settings` menu.
+
+### Appending text to generated Podfile
+In order to modify the generated Podfile you can create a script like this:
+```
+using System.IO;
+public class PostProcessIOS : MonoBehaviour {
+[PostProcessBuildAttribute(45)]//must be between 40 and 50 to ensure that it's not overriden by Podfile generation (40) and that it's added before "pod install" (50)
+private static void PostProcessBuild_iOS(BuildTarget target, string buildPath)
+{
+    if (target == BuildTarget.iOS)
+    {
+
+        using (StreamWriter sw = File.AppendText(buildPath + "/Podfile"))
+        {
+            //in this example I'm adding an app extension
+            sw.WriteLine("\ntarget 'NSExtension' do\n  pod 'Firebase/Messaging', '6.6.0'\nend");
+        }
+    }
+}
+```
+
+# Package Manager Resolver Usage
+
+Adding registries to the
+[Package Manager](https://docs.unity3d.com/Manual/Packages.html)
+(PM) is a manual process. The Package Manager Resolver (PMR) component
+of this plugin makes it easy for plugin maintainers to distribute new PM
+registry servers and easy for plugin users to manage PM registry servers.
+
+## Adding Registries
+
+   1. Add the `external-dependency-manager-*.unitypackage` to your plugin
+      project (assuming you are developing a plugin). If you are redistributing
+      EDM4U with your plugin, you **must** follow the
+      import steps in the [Getting Started](#getting-started) section!
+
+   2. Copy and rename the
+      [SampleRegistries.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/sample/Assets/ExternalDependencyManager/Editor/SampleRegistries.xml)
+      file into your plugin and add the registries your plugin requires.
+
+      The XML file just needs to be under an `Editor` directory and match the
+      name `*Registries.xml` or labeled with `gumpr_registries`. For example,
+      `MyPlugin/Editor/MyPluginRegistries.xml`.
+
+   3. Follow the steps in the [Getting Started](#getting-started)
+      section when you are exporting your plugin package.
+
+For example, to add a registry for plugins in the scope `com.coolstuff`:
+
+```
+<registries>
+  <registry name="Cool Stuff"
+            url="https://unityregistry.coolstuff.com"
+            termsOfService="https://coolstuff.com/unityregistry/terms"
+            privacyPolicy="https://coolstuff.com/unityregistry/privacy">
+    <scopes>
+      <scope>com.coolstuff</scope>
+    </scopes>
+  </registry>
+</registries>
+```
+
+When PMR is loaded it will prompt the developer to add the registry to their
+project if it isn't already present in the `Packages/manifest.json` file.
+
+For more information, see Unity's documentation on
+[scoped package registries](https://docs.unity3d.com/Manual/upm-scoped.html).
+
+## Managing Registries
+
+It's possible to add and remove registries that are specified via PMR
+XML configuration files via the following menu options:
+
+* `Assets > External Dependency Manager > Package Manager Resolver >
+  Add Registries` will prompt the user with a window which allows them to
+  add registries discovered in the project to the Package Manager.
+* `Assets > External Dependency Manager > Package Manager Resolver >
+  Remove Registries` will prompt the user with a window which allows them to
+  remove registries discovered in the project from the Package Manager.
+* `Assets > External Dependency Manager > Package Manager Resolver >
+  Modify Registries` will prompt the user with a window which allows them to
+  add or remove registries discovered in the project.
+
+## Migration
+
+PMR can migrate Version Handler packages installed in the `Assets` folder
+to PM packages. This requires the plugins to implement the following:
+
+* `.unitypackage` must include a Version Handler manifests that describes
+   the components of the plugin. If the plugin has no dependencies
+   the manifest would just include the files in the plugin.
+* The PM package JSON provided by the registry must include a keyword
+  (in the `versions.VERSION.keyword` list) that maps the PM package
+  to a Version Handler package using the format
+  `vh-name:VERSION_HANDLER_MANIFEST_NAME` where `VERSION_HANDLER_MANIFEST_NAME`
+  is the name of the manifest defined in the `.unitypackage`.  For
+  more information see the description of the `gvhp_manifestname` asset label
+  in the *Version Handler Usage* section.
+
+When using the `Assets > External Dependency Manager >
+Package Manager Resolver > Migrate Packages` menu option, PMR then
+will:
+
+* List all Version Handler manager packages in the project.
+* Search all available packages in the PM registries and fetch keywords
+  associated with each package parsing the Version Handler manifest names
+  for each package.
+* Map each installed Version Handler package to a PM package.
+* Prompt the user to migrate the discovered packages.
+* Perform package migration for all selected packages if the user clicks
+  the `Apply` button.
+
+## Configuration
+
+PMR can be configured via the `Assets > External Dependency Manager >
+Package Manager Resolver > Settings` menu option:
+
+* `Add package registries` when enabled, when the plugin loads or registry
+  configuration files change, this will prompt the user to add registries
+  that are not present in the Package Manager.
+* `Prompt to add package registries` will cause a developer to be prompted
+  with a window that will ask for confirmation before adding registries.
+  When this is disabled registries are added silently to the project.
+* `Prompt to migrate packages` will cause a developer to be prompted
+  with a window that will ask for confirmation before migrating packages
+  installed in the `Assets` directory to PM packages.
+* `Enable Analytics Reporting` when enabled, reports the use of the plugin
+  to the developers so they can make imrpovements.
+* `Verbose logging` when enabled prints debug information to the console
+  which can be useful when filing bug reports.
+
+# Version Handler Usage
+
+The Version Handler component of this plugin manages:
+
+* Shared Unity plugin dependencies.
+* Upgrading Unity plugins by cleaning up old files from previous versions.
+* Uninstallation of plugins that are distributed with manifest files.
+* Restoration of plugin assets to their original install locations if assets
+  are tagged with the `exportpath` label.
+
+Since the Version Handler needs to modify Unity asset metadata (`.meta` files),
+to enable / disable components, rename and delete asset files it does not
+work with Package Manager installed packages. It's still possible to
+include EDM4U in Package Manager packages, the Version Handler component
+simply won't do anything to PM plugins in this case.
+
+## Using Version Handler Managed Plugins
+
+If a plugin is imported at multiple different versions into a project, if
+the Version Handler is enabled, it will automatically check all managed
+assets to determine the set of assets that are out of date and assets that
+should be removed. To disable automatic checking managed assets disable
+the `Enable version management` option in the
+`Assets > External Dependency Manager > Version Handler > Settings` menu.
+
+If version management is disabled, it's possible to check managed assets
+manually using the
+`Assets > External Dependency Manager > Version Handler > Update` menu option.
+
+### Listing Managed Plugins
+
+Plugins managed by the Version Handler, those that ship with manifest files,
+can displayed using the `Assets > External Dependency Manager >
+Version Handler > Display Managed Packages` menu option. The list of plugins
+are written to the console window along with the set of files used by each
+plugin.
+
+### Uninstalling Managed Plugins
+
+Plugins managed by the Version Handler, those that ship with manifest files,
+can be removed using the `Assets > External Dependency Manager >
+Version Handler > Uninstall Managed Packages` menu option. This operation
+will display a window that allows a developer to select a set of plugins to
+remove which will remove all files owned by each plugin excluding those that
+are in use by other installed plugins.
+
+Files managed by the Version Handler, those labeled with the `gvh` asset label,
+can be checked to see whether anything needs to be upgraded, disabled or
+removed using the `Assets > External Dependency Manager >
+Version Handler > Update` menu option.
+
+### Restore Install Paths
+
+Some developers move assets around in their project which can make it
+harder for plugin maintainers to debug issues if this breaks Unity's
+[special folders](https://docs.unity3d.com/Manual/SpecialFolders.html) rules.
+If assets are labeled with their original install / export path
+(see `gvhp_exportpath` below), Version Handler can restore assets to their
+original locations when using the `Assets > External Dependency Manager >
+Version Handler > Move Files To Install Locations` menu option.
+
+### Settings
+
+Some behavior of the Version Handler can be configured via the
+`Assets > External Dependency Manager > Version Handler > Settings` menu
+option.
+
+* `Enable version management` controls whether the plugin should automatically
+  check asset versions and apply changes. If this is disabled the process
+  should be run manually when installing or upgrading managed plugins using
+  `Assets > External Dependency Manager > Version Handler > Update`.
+* `Rename to canonical filenames` is a legacy option that will rename files to
+  remove version numbers and other labels from filenames.
+* `Prompt for obsolete file deletion` enables the display of a window when
+  obsolete files are deleted allowing the developer to select which files to
+  delete and those to keep.
+* `Allow disabling files via renaming` controls whether obsolete or disabled
+  files should be disabled by renaming them to `myfilename_DISABLED`.
+  Renaming to disable files is required in some scenarios where Unity doesn't
+  support removing files from the build via the PluginImporter.
+* `Enable Analytics Reporting` enables / disables usage reporting to plugin
+  developers to improve the product.
+* `Verbose logging` enables _very_ noisy log output that is useful for
+  debugging while filing a bug report or building a new managed plugin.
+* `Use project settings` saves settings for the plugin in the project rather
+  than system-wide.
+
+## Redistributing a Managed Plugin
+
+The Version Handler employs a couple of methods for managing version
+selection, upgrade and removal of plugins.
+
+* Each plugin can ship with a manifest file that lists the files it includes.
+  This makes it possible for Version Handler to calculate the difference
+  in assets between the most recent release of a plugin and the previous
+  release installed in a project. If a files are removed the Version Handler
+  will prompt the user to clean up obsolete files.
+* Plugins can ship using assets with unique names, unique GUIDs and version
+  number labels. Version numbers can be attached to assets using labels or
+  added to the filename (e.g `myfile.txt` would be `myfile_version-x.y.z.txt).
+  This allows the Version Handler to determine which set of files are the
+  same file at different versions, select the most recent version and prompt
+  the developer to clean up old versions.
+
+Unity plugins can be managed by the Version Handler using the following steps:
+
+   1. Add the `gvh` asset label to each asset (file) you want Version Handler
+      to manage.
+   1. Add the `gvh_version-VERSION` label to each asset where `VERSION` is the
+      version of the plugin you're releasing (e.g 1.2.3).
+   1. Add the `gvhp_exportpath-PATH` label to each asset where `PATH` is the
+      export path of the file when the `.unitypackage` is created.  This is
+      used to track files if they're moved around in a project by developers.
+   1. Optional: Add `gvh_targets-editor` label to each editor DLL in your
+      plugin and disable `editor` as a target platform for the DLL.
+      The Version Handler will enable the most recent version of this DLL when
+      the plugin is imported.
+   1. Optional: If your plugin is included in other Unity plugins, you should
+      add the version number to each filename and change the GUID of each asset.
+      This allows multiple versions of your plugin to be imported into a Unity
+      project, with the Version Handler component activating only the most
+      recent version.
+   1. Create a manifest text file named `MY_UNIQUE_PLUGIN_NAME_VERSION.txt`
+      that lists all the files in your plugin relative to the project root.
+      Then add the `gvh_manifest` label to the asset to indicate this file is
+      a plugin manifest.
+   1. Optional: Add a `gvhp_manifestname-NAME` label to your manifest file
+      to provide a human readable name for your package.  If this isn't provided
+      the name of the manifest file will be used as the package name.
+      NAME can match the pattern `[0-9]+[a-zA-Z -]' where a leading integer
+      will set the priority of the name where `0` is the highest priority
+      and preferably used as the display name. The lowest value (i.e highest
+      priority name) will be used as the display name and all other specified
+      names will be aliases of the display name. Aliases can refer to previous
+      names of the package allowing renaming across published versions.
+   1. Redistribute EDM4U Unity plugin with your plugin.
+      See the [Plugin Redistribution](#plugin-redistribution) for the details.
+
+If you follow these steps:
+
+   * When users import a newer version of your plugin, files referenced by the
+     older version's manifest are cleaned up.
+   * The latest version of the plugin will be selected when users import
+     multiple packages that include your plugin, assuming the steps in
+     [Plugin Redistribution](#plugin-redistribution) are followed.
+
+# Building from Source
+
+To build this plugin from source you need the following tools installed:
+   * Unity (with iOS and Android modules installed)
+
+You can build the plugin by running the following from your shell
+(Linux / OSX):
+
+```
+./gradlew build
+```
+
+or Windows:
+
+```
+./gradlew.bat build
+```
+
+# Releasing
+
+Each time a new build of this plugin is checked into the source tree you
+need to do the following:
+
+   * Bump the plugin version variable `pluginVersion` in `build.gradle`
+   * Update `CHANGELOG.md` with the new version number and changes included in
+     the release.
+   * Build the release using `./gradlew release` which performs the following:
+      * Updates `external-dependency-manager-*.unitypackage`
+      * Copies the unpacked plugin to the `exploded` directory.
+      * Updates template metadata files in the `plugin` directory.
+        The GUIDs of all asset metadata is modified due to the version number
+        change. Each file within the plugin is versioned to allow multiple
+        versions of the plugin to be imported into a Unity project which allows
+        the most recent version to be activated by the Version Handler
+        component.
+   * Create release commit using `./gradlew gitCreateReleaseCommit` which
+     performs `git commit -a -m "description from CHANGELOG.md"`
+   * Once the release commit is merge, tag the release using
+     `./gradlew gitTagRelease` which performs the following:
+     * `git tag -a pluginVersion -m "version RELEASE"` to tag the release.
+   * Update tags on remote branch using `git push --tag REMOTE HEAD:master`

+ 11 - 0
Assets/ExternalDependencyManager/Editor/README.md.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2939a2ca8cd341c48efc9816e6aa2c65
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-ExternalDependencyManager/Editor/README.md
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 13 - 0
Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.175_manifest.txt

@@ -0,0 +1,13 @@
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll.mdb
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll.mdb
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll.mdb
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll.mdb
+Assets/ExternalDependencyManager/Editor/CHANGELOG.md
+Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll
+Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb
+Assets/ExternalDependencyManager/Editor/LICENSE
+Assets/ExternalDependencyManager/Editor/README.md

+ 14 - 0
Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.175_manifest.txt.meta

@@ -0,0 +1,14 @@
+fileFormatVersion: 2
+guid: 3e27eb74b8d448cd9aa7688085c8ad76
+labels:
+- gvh
+- gvh_manifest
+- gvh_version-1.2.175
+- gvhp_exportpath-ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.175_manifest.txt
+- gvhp_manifestname-0External Dependency Manager
+- gvhp_manifestname-play-services-resolver
+TextScriptImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/Firebase.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 038fe1104ddadd54dbc54b8a74649c74
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/Firebase/Editor.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c2ac970f415464145a77033defa296fd
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 24 - 0
Assets/Firebase/Editor/AppDependencies.xml

@@ -0,0 +1,24 @@
+<!-- Copyright (C) 2019 Google Inc. All Rights Reserved.
+
+FirebaseApp iOS and Android Dependencies.
+-->
+
+<dependencies>
+  <iosPods>
+    <iosPod name="Firebase/Core" version="10.4.0" minTargetSdk="8.0">
+    </iosPod>
+  </iosPods>
+  <androidPackages>
+    <androidPackage spec="com.google.firebase:firebase-common:20.3.0">
+    </androidPackage>
+    <androidPackage spec="com.google.firebase:firebase-analytics:21.2.0">
+    </androidPackage>
+    <androidPackage spec="com.google.android.gms:play-services-base:18.1.0">
+    </androidPackage>
+    <androidPackage spec="com.google.firebase:firebase-app-unity:10.4.0">
+      <repositories>
+        <repository>Assets/Firebase/m2repository</repository>
+      </repositories>
+    </androidPackage>
+  </androidPackages>
+</dependencies>

+ 11 - 0
Assets/Firebase/Editor/AppDependencies.xml.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9b63af95d9364af4a3d8ce58738b6223
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Firebase/Editor/AppDependencies.xml
+timeCreated: 1480838400
+DefaultImporter:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

+ 22 - 0
Assets/Firebase/Editor/AuthDependencies.xml

@@ -0,0 +1,22 @@
+<!-- Copyright (C) 2019 Google Inc. All Rights Reserved.
+
+FirebaseAuth iOS and Android Dependencies.
+-->
+
+<dependencies>
+  <iosPods>
+    <iosPod name="Firebase/Auth" version="10.4.0" minTargetSdk="8.0">
+    </iosPod>
+  </iosPods>
+  <androidPackages>
+    <androidPackage spec="com.google.firebase:firebase-auth:21.1.0">
+    </androidPackage>
+    <androidPackage spec="com.google.firebase:firebase-analytics:21.2.0">
+    </androidPackage>
+    <androidPackage spec="com.google.firebase:firebase-auth-unity:10.4.0">
+      <repositories>
+        <repository>Assets/Firebase/m2repository</repository>
+      </repositories>
+    </androidPackage>
+  </androidPackages>
+</dependencies>

+ 11 - 0
Assets/Firebase/Editor/AuthDependencies.xml.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2bec2bf8d84d4997ba2dd66263781f3d
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Firebase/Editor/AuthDependencies.xml
+timeCreated: 1480838400
+DefaultImporter:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Firebase/Editor/Firebase.Editor.dll


+ 118 - 0
Assets/Firebase/Editor/Firebase.Editor.dll.meta

@@ -0,0 +1,118 @@
+fileFormatVersion: 2
+guid: 9f2edbf81053418f879076c05f816dc2
+labels:
+- gvh
+- gvh_targets-editor
+- gvh_version-10.4.0
+- gvhp_exportpath-Firebase/Editor/Firebase.Editor.dll
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      : Linux
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      : LinuxUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      : OSXIntel
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      : OSXIntel64
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      : Web
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      : WebStreamed
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Android: Android
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        CPU: AnyCPU
+        DefaultValueInitialized: true
+        OS: AnyOS
+  - first:
+      Standalone: Linux64
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: OSXUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      iPhone: iOS
+    second:
+      enabled: 0
+      settings:
+        CompileFlags: 
+        FrameworkDependencies: 
+  - first:
+      tvOS: tvOS
+    second:
+      enabled: 0
+      settings:
+        CompileFlags: 
+        FrameworkDependencies: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/Firebase/Editor/Firebase.Editor.pdb


+ 13 - 0
Assets/Firebase/Editor/Firebase.Editor.pdb.meta

@@ -0,0 +1,13 @@
+fileFormatVersion: 2
+guid: f2ceb9c446ee4196b6476d4978a416b6
+labels:
+- gvh
+- gvh_rename_to_disable
+- gvh_targets-editor
+- gvh_version-10.4.0
+- gvhp_exportpath-Firebase/Editor/Firebase.Editor.pdb
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 73 - 0
Assets/Firebase/Editor/FirebaseAuth_version-10.4.0_manifest.txt

@@ -0,0 +1,73 @@
+Assets/Editor Default Resources/Firebase/fb_analytics.png
+Assets/Editor Default Resources/Firebase/fb_analytics_dark.png
+Assets/Editor Default Resources/Firebase/fb_auth.png
+Assets/Editor Default Resources/Firebase/fb_auth_dark.png
+Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png
+Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png
+Assets/Editor Default Resources/Firebase/fb_config.png
+Assets/Editor Default Resources/Firebase/fb_config_dark.png
+Assets/Editor Default Resources/Firebase/fb_crashlytics.png
+Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png
+Assets/Editor Default Resources/Firebase/fb_database.png
+Assets/Editor Default Resources/Firebase/fb_database_dark.png
+Assets/Editor Default Resources/Firebase/fb_dynamic_links.png
+Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png
+Assets/Editor Default Resources/Firebase/fb_functions.png
+Assets/Editor Default Resources/Firebase/fb_functions_dark.png
+Assets/Editor Default Resources/Firebase/fb_invites.png
+Assets/Editor Default Resources/Firebase/fb_invites_dark.png
+Assets/Editor Default Resources/Firebase/fb_storage.png
+Assets/Editor Default Resources/Firebase/fb_storage_dark.png
+Assets/Editor Default Resources/Firebase/firebase_lockup.png
+Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.IOSResolver.dll.mdb
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.JarResolver.dll.mdb
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.PackageManagerResolver.dll.mdb
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll
+Assets/ExternalDependencyManager/Editor/1.2.175/Google.VersionHandlerImpl.dll.mdb
+Assets/ExternalDependencyManager/Editor/CHANGELOG.md
+Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll
+Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.mdb
+Assets/ExternalDependencyManager/Editor/LICENSE
+Assets/ExternalDependencyManager/Editor/README.md
+Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.175_manifest.txt
+Assets/Firebase/Editor/AppDependencies.xml
+Assets/Firebase/Editor/AuthDependencies.xml
+Assets/Firebase/Editor/Firebase.Editor.dll
+Assets/Firebase/Editor/Firebase.Editor.pdb
+Assets/Firebase/Editor/generate_xml_from_google_services_json.exe
+Assets/Firebase/Editor/generate_xml_from_google_services_json.py
+Assets/Firebase/Editor/network_request.exe
+Assets/Firebase/Editor/network_request.py
+Assets/Firebase/Plugins/Firebase.App.dll
+Assets/Firebase/Plugins/Firebase.App.pdb
+Assets/Firebase/Plugins/Firebase.Auth.dll
+Assets/Firebase/Plugins/Firebase.Auth.pdb
+Assets/Firebase/Plugins/Firebase.Platform.dll
+Assets/Firebase/Plugins/Firebase.Platform.pdb
+Assets/Firebase/Plugins/Firebase.TaskExtension.dll
+Assets/Firebase/Plugins/Firebase.TaskExtension.pdb
+Assets/Firebase/Plugins/Google.MiniJson.dll
+Assets/Firebase/Plugins/iOS/Firebase.App.dll
+Assets/Firebase/Plugins/iOS/Firebase.App.pdb
+Assets/Firebase/Plugins/iOS/Firebase.Auth.dll
+Assets/Firebase/Plugins/iOS/Firebase.Auth.pdb
+Assets/Firebase/Plugins/x86_64/FirebaseCppApp-10_4_0.bundle
+Assets/Firebase/Plugins/x86_64/FirebaseCppApp-10_4_0.dll
+Assets/Firebase/Plugins/x86_64/FirebaseCppApp-10_4_0.so
+Assets/Firebase/Plugins/x86_64/FirebaseCppAuth.bundle
+Assets/Firebase/Plugins/x86_64/FirebaseCppAuth.dll
+Assets/Firebase/Plugins/x86_64/FirebaseCppAuth.so
+Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/10.4.0/firebase-app-unity-10.4.0.pom
+Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/10.4.0/firebase-app-unity-10.4.0.srcaar
+Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml
+Assets/Firebase/m2repository/com/google/firebase/firebase-auth-unity/10.4.0/firebase-auth-unity-10.4.0.pom
+Assets/Firebase/m2repository/com/google/firebase/firebase-auth-unity/10.4.0/firebase-auth-unity-10.4.0.srcaar
+Assets/Firebase/m2repository/com/google/firebase/firebase-auth-unity/maven-metadata.xml
+Assets/Plugins/iOS/Firebase/libFirebaseCppApp.a
+Assets/Plugins/iOS/Firebase/libFirebaseCppAuth.a
+Assets/Plugins/tvOS/Firebase/libFirebaseCppApp.a
+Assets/Plugins/tvOS/Firebase/libFirebaseCppAuth.a

+ 10 - 0
Assets/Firebase/Editor/FirebaseAuth_version-10.4.0_manifest.txt.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: cbfce20988ff498095daf9e89fba1b2b
+labels:
+- gvh
+- gvh_manifest
+- gvh_version-10.4.0
+- gvhp_exportpath-Firebase/Editor/FirebaseAuth_version-10.4.0_manifest.txt
+- gvhp_manifestname-0Firebase Authentication
+- gvhp_manifestname-1FirebaseAuth
+timeCreated: 0

BIN
Assets/Firebase/Editor/generate_xml_from_google_services_json.exe


+ 11 - 0
Assets/Firebase/Editor/generate_xml_from_google_services_json.exe.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ae88c0972b7448b5b36def1716f1d711
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Firebase/Editor/generate_xml_from_google_services_json.exe
+timeCreated: 1480838400
+DefaultImporter:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

+ 496 - 0
Assets/Firebase/Editor/generate_xml_from_google_services_json.py

@@ -0,0 +1,496 @@
+#!/usr/bin/python
+
+# Copyright 2016 Google LLC
+#
+# 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.
+
+"""Stand-alone implementation of the Gradle Firebase plugin.
+
+Converts the services json file to xml:
+https://googleplex-android.googlesource.com/platform/tools/base/+/studio-master-dev/build-system/google-services/src/main/groovy/com/google/gms/googleservices
+"""
+
+__author__ = 'Wouter van Oortmerssen'
+
+import argparse
+import ctypes
+import json
+import os
+import platform
+import sys
+from xml.etree import ElementTree
+
+if platform.system().lower() == 'windows':
+  import ctypes.wintypes  # pylint: disable=g-import-not-at-top
+
+# Map Python 2's unicode method to encode a string as bytes in python 3.
+try:
+  unicode('')  # See whether unicode class is available (Python < 3)
+except NameError:
+  unicode = str  # pylint: disable=redefined-builtin,invalid-name
+
+# Input filename if it isn't set.
+DEFAULT_INPUT_FILENAME = 'app/google-services.json'
+# Output filename if it isn't set.
+DEFAULT_OUTPUT_FILENAME = 'res/values/googleservices.xml'
+# Input filename for .plist files, if it isn't set.
+DEFAULT_PLIST_INPUT_FILENAME = 'GoogleService-Info.plist'
+# Output filename for .json files, if it isn't set.
+DEFAULT_JSON_OUTPUT_FILENAME = 'google-services-desktop.json'
+
+OAUTH_CLIENT_TYPE_ANDROID_APP = 1
+OAUTH_CLIENT_TYPE_WEB = 3
+
+
+def read_xml_value(xml_node):
+  """Utility method for reading values from the plist XML.
+
+  Args:
+    xml_node: An ElementTree node, that contains a value.
+
+  Returns:
+    The value of the node, or None, if it could not be read.
+  """
+  if xml_node.tag == 'string':
+    return xml_node.text
+  elif xml_node.tag == 'integer':
+    return int(xml_node.text)
+  elif xml_node.tag == 'real':
+    return float(xml_node.text)
+  elif xml_node.tag == 'false':
+    return 0
+  elif xml_node.tag == 'true':
+    return 1
+  else:
+    # other types of input are ignored.  (data, dates, arrays, etc.)
+    return None
+
+
+def construct_plist_dictionary(xml_root):
+  """Constructs a dictionary of values based on the contents of a plist file.
+
+  Args:
+    xml_root: An ElementTree node, that represents the root of the xml file
+              that is to be parsed.  (Which should be a dictionary containing
+              key-value pairs of the properties that need to be extracted.)
+
+  Returns:
+    A dictionary, containing key-value pairs for all (supported) entries in the
+    node.
+  """
+  xml_dict = xml_root.find('dict')
+
+  if xml_dict is None:
+    return None
+
+  plist_dict = {}
+  i = 0
+  while i < len(xml_dict):
+    if xml_dict[i].tag == 'key':
+      key = xml_dict[i].text
+      i += 1
+      if i < len(xml_dict):
+        value = read_xml_value(xml_dict[i])
+        if value is not None:
+          plist_dict[key] = value
+    i += 1
+
+  return plist_dict
+
+
+def update_dict_keys(key_map, input_dict):
+  """Creates a dict from input_dict with the same values but new keys.
+
+  Two dictionaries are passed to this function: the key_map that represents a
+  mapping of source keys to destination keys, and the input_dict that is the
+  dictionary that is to be duplicated, replacing any key that matches a source
+  key with a destination key. Source keys that are not present in the
+  input_dict will not have their destination key represented in the result.
+
+  In other words, if key_map is `{'old': 'new', 'foo': 'bar'}`, and input_dict
+  is `{'old': 10}`, the result will be `{'new': 10}`.
+
+  Args:
+    key_map (dict): A dictionary of strings to strings that maps source keys to
+      destination keys.
+    input_dict (dict): The dictionary of string keys to any value type, which
+      is to be duplicated, replacing source keys with the corresponding
+      destination keys from key_map.
+
+  Returns:
+    dict: A new dictionary with updated keys.
+  """
+  return {
+      new_key: input_dict[old_key]
+      for (old_key, new_key) in key_map.items()
+      if old_key in input_dict
+  }
+
+
+def construct_google_services_json(xml_dict):
+  """Constructs a google services json file from a dictionary.
+
+  Args:
+    xml_dict: A dictionary of all the key/value pairs that are needed for the
+              output json file.
+  Returns:
+    A string representing the output json file.
+  """
+
+  try:
+    json_struct = {
+        'project_info':
+            update_dict_keys(
+                {
+                    'GCM_SENDER_ID': 'project_number',
+                    'DATABASE_URL': 'firebase_url',
+                    'PROJECT_ID': 'project_id',
+                    'STORAGE_BUCKET': 'storage_bucket'
+                }, xml_dict),
+        'client': [{
+            'client_info': {
+                'mobilesdk_app_id': xml_dict['GOOGLE_APP_ID'],
+                'android_client_info': {
+                    'package_name': xml_dict['BUNDLE_ID']
+                }
+            },
+            'oauth_client': [{
+                'client_id': xml_dict['CLIENT_ID'],
+            }],
+            'api_key': [{
+                'current_key': xml_dict['API_KEY']
+            }],
+            'services': {
+                'analytics_service': {
+                    'status': xml_dict['IS_ANALYTICS_ENABLED']
+                },
+                'appinvite_service': {
+                    'status': xml_dict['IS_APPINVITE_ENABLED']
+                }
+            }
+        },],
+        'configuration_version':
+            '1'
+    }
+    return json.dumps(json_struct, indent=2)
+  except KeyError as e:
+    sys.stderr.write('Could not find key in plist file: [%s]\n' % (e.args[0]))
+    return None
+
+
+def convert_plist_to_json(plist_string, input_filename):
+  """Converts an input plist string into a .json file and saves it.
+
+  Args:
+    plist_string:    The contents of the loaded plist file.
+
+    input_filename:  The file name that the plist data was read from.
+  Returns:
+    the converted string, or None if there were errors.
+  """
+
+  try:
+    root = ElementTree.fromstring(plist_string)
+  except ElementTree.ParseError:
+    sys.stderr.write('Error parsing file %s.\n'
+                     'It does not appear to be valid XML.\n' % (input_filename))
+    return None
+
+  plist_dict = construct_plist_dictionary(root)
+  if plist_dict is None:
+    sys.stderr.write('In file %s, could not locate a top-level \'dict\' '
+                     'element.\n'
+                     'File format should be plist XML, with a top-level '
+                     'dictionary containing project settings as key-value '
+                     'pairs.\n' % (input_filename))
+    return None
+
+  json_string = construct_google_services_json(plist_dict)
+  return json_string
+
+
+def gen_string(parent, name, text):
+  """Generate one <string /> element and put into the list of keeps.
+
+  Args:
+    parent:  The object that will hold the string.
+    name:    The name to store the string under.
+    text:    The text of the string.
+  """
+  if text:
+    prev = parent.get('tools:keep', '')
+    if prev:
+      prev += ','
+    parent.set('tools:keep', prev + '@string/' + name)
+    child = ElementTree.SubElement(parent, 'string', {
+        'name': name,
+        'translatable': 'false'
+    })
+    child.text = text
+
+
+def indent(elem, level=0):
+  """Recurse through XML tree and add indentation.
+
+  Args:
+    elem:  The element to recurse over
+    level: The current indentation level.
+  """
+  i = '\n' + level*'  '
+  if elem is not None:
+    if not elem.text or not elem.text.strip():
+      elem.text = i + '  '
+    if not elem.tail or not elem.tail.strip():
+      elem.tail = i
+    for elem in elem:
+      indent(elem, level+1)
+    if not elem.tail or not elem.tail.strip():
+      elem.tail = i
+  else:
+    if level and (not elem.tail or not elem.tail.strip()):
+      elem.tail = i
+
+
+def argv_as_unicode_win32():
+  """Returns unicode command line arguments on windows.
+  """
+
+  get_command_line_w = ctypes.cdll.kernel32.GetCommandLineW
+  get_command_line_w.restype = ctypes.wintypes.LPCWSTR
+
+  # CommandLineToArgvW parses the Unicode command line
+  command_line_to_argv_w = ctypes.windll.shell32.CommandLineToArgvW
+  command_line_to_argv_w.argtypes = [
+      ctypes.wintypes.LPCWSTR,
+      ctypes.POINTER(ctypes.c_int)
+  ]
+  command_line_to_argv_w.restype = ctypes.POINTER(
+      ctypes.wintypes.LPWSTR)
+
+  argc = ctypes.c_int(0)
+  argv = command_line_to_argv_w(get_command_line_w(), argc)
+
+  # Strip the python executable from the arguments if it exists
+  # (It would be listed as the first argument on the windows command line, but
+  # not in the arguments to the python script)
+  sys_argv_len = len(sys.argv)
+  return [unicode(argv[i]) for i in
+          range(argc.value - sys_argv_len, argc.value)]
+
+
+def main():
+  parser = argparse.ArgumentParser(
+      description=((
+          'Converts a Firebase %s into %s similar to the Gradle plugin, or '
+          'converts a Firebase %s into a %s suitible for use on desktop apps.' %
+          (DEFAULT_INPUT_FILENAME, DEFAULT_OUTPUT_FILENAME,
+           DEFAULT_PLIST_INPUT_FILENAME, DEFAULT_JSON_OUTPUT_FILENAME))))
+  parser.add_argument('-i', help='Override input file name',
+                      metavar='FILE', required=False)
+  parser.add_argument('-o', help='Override destination file name',
+                      metavar='FILE', required=False)
+  parser.add_argument('-p', help=('Package ID to select within the set of '
+                                  'packages in the input file.  If this is '
+                                  'not specified, the first package in the '
+                                  'input file is selected.'))
+  parser.add_argument('-l', help=('List all package IDs referenced by the '
+                                  'input file.  If this is specified, '
+                                  'the output file is not created.'),
+                      action='store_true', default=False, required=False)
+  parser.add_argument('-f', help=('Print project fields from the input file '
+                                  'in the form \'name=value\\n\' for each '
+                                  'field.  If this is specified, the output '
+                                  'is not created.'),
+                      action='store_true', default=False, required=False)
+  parser.add_argument(
+      '--plist',
+      help=(
+          'Specifies a plist file to convert to a JSON configuration file. '
+          'If this is enabled, the script will expect a .plist file as input, '
+          'which it will convert into %s file.  The output file is '
+          '*not* suitable for use with Firebase on Android.' %
+          (DEFAULT_JSON_OUTPUT_FILENAME)),
+      action='store_true',
+      default=False,
+      required=False)
+
+  # python 2 on Windows doesn't handle unicode arguments well, so we need to
+  # pre-process the command line arguments before trying to parse them.
+  if platform.system() == 'Windows':
+    sys.argv = argv_as_unicode_win32()
+
+  args = parser.parse_args()
+
+  if args.plist:
+    input_filename = DEFAULT_PLIST_INPUT_FILENAME
+    output_filename = DEFAULT_JSON_OUTPUT_FILENAME
+  else:
+    input_filename = DEFAULT_INPUT_FILENAME
+    output_filename = DEFAULT_OUTPUT_FILENAME
+
+  if args.i:
+    # Encode the input string (type unicode) as a normal string (type str)
+    # using the 'utf-8' encoding so that it can be worked with the same as
+    # input names from other sources (like the defaults).
+    input_filename_raw = args.i.encode('utf-8')
+    # Decode the filename to a unicode string using the 'utf-8' encoding to
+    # properly handle filepaths with unicode characters in them.
+    input_filename = input_filename_raw.decode('utf-8')
+
+  if args.o:
+    output_filename = args.o
+
+  with open(input_filename, 'r') as ifile:
+    file_string = ifile.read()
+
+  json_string = None
+  if args.plist:
+    json_string = convert_plist_to_json(file_string, input_filename)
+    if json_string is None:
+      return 1
+    jsobj = json.loads(json_string)
+  else:
+    jsobj = json.loads(file_string)
+
+  root = ElementTree.Element('resources')
+  root.set('xmlns:tools', 'http://schemas.android.com/tools')
+
+  project_info = jsobj.get('project_info')
+  if project_info:
+    gen_string(root, 'firebase_database_url', project_info.get('firebase_url'))
+    gen_string(root, 'gcm_defaultSenderId', project_info.get('project_number'))
+    gen_string(root, 'google_storage_bucket',
+               project_info.get('storage_bucket'))
+    gen_string(root, 'project_id', project_info.get('project_id'))
+
+  if args.f:
+    if not project_info:
+      sys.stderr.write('No project info found in %s.' % input_filename)
+      return 1
+    for field, value in sorted(project_info.items()):
+      sys.stdout.write('%s=%s\n' % (field, value))
+    return 0
+
+  packages = set()
+  client_list = jsobj.get('client')
+  if client_list:
+    # Search for the user specified package in the file.
+    selected_package_name = ''
+    selected_client = client_list[0]
+    find_package_name = args.p
+    for client in client_list:
+      package_name = client.get('client_info', {}).get(
+          'android_client_info', {}).get('package_name', '')
+      if not package_name:
+        package_name = client.get('oauth_client', {}).get(
+            'android_info', {}).get('package_name', '')
+      if package_name:
+        if not selected_package_name:
+          selected_package_name = package_name
+          selected_client = client
+        if package_name == find_package_name:
+          selected_package_name = package_name
+          selected_client = client
+        packages.add(package_name)
+
+    if args.p and selected_package_name != find_package_name:
+      sys.stderr.write('No packages found in %s which match the package '
+                       'name %s\n'
+                       '\n'
+                       'Found the following:\n'
+                       '%s\n' % (input_filename, find_package_name,
+                                 '\n'.join(packages)))
+      return 1
+
+    client_api_key = selected_client.get('api_key')
+    if client_api_key:
+      client_api_key0 = client_api_key[0]
+      gen_string(root, 'google_api_key', client_api_key0.get('current_key'))
+      gen_string(root, 'google_crash_reporting_api_key',
+                 client_api_key0.get('current_key'))
+
+    client_info = selected_client.get('client_info')
+    if client_info:
+      gen_string(root, 'google_app_id', client_info.get('mobilesdk_app_id'))
+
+    # Only include the first matching OAuth client ID per type.
+    client_id_web_parsed = False
+    client_id_android_parsed = False
+
+    oauth_client_list = selected_client.get('oauth_client')
+    if oauth_client_list:
+      for oauth_client in oauth_client_list:
+        client_type = oauth_client.get('client_type')
+        client_id = oauth_client.get('client_id')
+        if not (client_type and client_id): continue
+        if (client_type == OAUTH_CLIENT_TYPE_WEB and
+            not client_id_web_parsed):
+          gen_string(root, 'default_web_client_id', client_id)
+          client_id_web_parsed = True
+        if (client_type == OAUTH_CLIENT_TYPE_ANDROID_APP and
+            not client_id_android_parsed):
+          gen_string(root, 'default_android_client_id', client_id)
+          client_id_android_parsed = True
+
+    services = selected_client.get('services')
+    if services:
+      ads_service = services.get('ads_service')
+      if ads_service:
+        gen_string(root, 'test_banner_ad_unit_id',
+                   ads_service.get('test_banner_ad_unit_id'))
+        gen_string(root, 'test_interstitial_ad_unit_id',
+                   ads_service.get('test_interstitial_ad_unit_id'))
+      analytics_service = services.get('analytics_service')
+      if analytics_service:
+        analytics_property = analytics_service.get('analytics_property')
+        if analytics_property:
+          gen_string(root, 'ga_trackingId',
+                     analytics_property.get('tracking_id'))
+      # enable this once we have an example if this service being present
+      # in the json data:
+      maps_service_enabled = False
+      if maps_service_enabled:
+        maps_service = services.get('maps_service')
+        if maps_service:
+          maps_api_key = maps_service.get('api_key')
+          if maps_api_key:
+            for k in range(0, len(maps_api_key)):
+              # generates potentially multiple of these keys, which is
+              # the same behavior as the java plugin.
+              gen_string(root, 'google_maps_key',
+                         maps_api_key[k].get('maps_api_key'))
+
+  tree = ElementTree.ElementTree(root)
+
+  indent(root)
+
+  if args.l:
+    for package in sorted(packages):
+      if package:
+        sys.stdout.write(package + '\n')
+  else:
+    path = os.path.dirname(output_filename)
+
+    if path and not os.path.exists(path):
+      os.makedirs(path)
+
+    if not args.plist:
+      tree.write(output_filename, 'utf-8', True)
+    else:
+      with open(output_filename, 'w') as ofile:
+        ofile.write(json_string)
+
+  return 0
+
+if __name__ == '__main__':
+  sys.exit(main())

+ 11 - 0
Assets/Firebase/Editor/generate_xml_from_google_services_json.py.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8f18ed76c0f04ce0a65736104f913ef8
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Firebase/Editor/generate_xml_from_google_services_json.py
+timeCreated: 1480838400
+DefaultImporter:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

BIN
Assets/Firebase/Editor/network_request.exe


+ 11 - 0
Assets/Firebase/Editor/network_request.exe.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d3cd5d0a941c4cdc8ab4b1b684b05191
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Firebase/Editor/network_request.exe
+timeCreated: 1480838400
+DefaultImporter:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

+ 416 - 0
Assets/Firebase/Editor/network_request.py

@@ -0,0 +1,416 @@
+# Copyright 2019 Google LLC
+#
+# 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.
+"""Wrapper script which makes a network request.
+
+Basic Usage: network_request.py post
+                                --url <url>
+                                --header <header>  (optional, support multiple)
+                                --body <body>       (optional)
+                                --timeout <secs>    (optional)
+                                --verbose           (optional)
+"""
+
+import argparse
+import inspect
+import logging
+import socket
+import sys
+
+# pylint: disable=g-import-not-at-top
+# pylint: disable=g-importing-member
+try:
+  from six.moves.http_client import HTTPSConnection
+  from six.moves.http_client import HTTPConnection
+  from six.moves.http_client import HTTPException
+except ImportError:
+  from http.client import HTTPSConnection
+  from http.client import HTTPConnection
+  from http.client import HTTPException
+
+try:
+  from six.moves.urllib.parse import urlparse
+except ImportError:
+  from urllib.parse import urlparse
+# pylint: enable=g-import-not-at-top
+# pylint: enable=g-importing-member
+
+# Set up logger as soon as possible
+formatter = logging.Formatter('[%(levelname)s] %(message)s')
+
+handler = logging.StreamHandler(stream=sys.stdout)
+handler.setFormatter(formatter)
+handler.setLevel(logging.INFO)
+
+logger = logging.getLogger(__name__)
+logger.addHandler(handler)
+logger.setLevel(logging.INFO)
+
+# Custom exit codes for known issues.
+# System exit codes in python are valid from 0 - 256, so we will map some common
+# ones here to understand successes and failures.
+# Uses lower ints to not collide w/ HTTP status codes that the script may return
+EXIT_CODE_SUCCESS = 0
+EXIT_CODE_SYS_ERROR = 1
+EXIT_CODE_INVALID_REQUEST_VALUES = 2
+EXIT_CODE_GENERIC_HTTPLIB_ERROR = 3
+EXIT_CODE_HTTP_TIMEOUT = 4
+EXIT_CODE_HTTP_REDIRECT_ERROR = 5
+EXIT_CODE_HTTP_NOT_FOUND_ERROR = 6
+EXIT_CODE_HTTP_SERVER_ERROR = 7
+EXIT_CODE_HTTP_UNKNOWN_ERROR = 8
+
+MAX_EXIT_CODE = 8
+
+# All used http verbs
+POST = 'POST'
+
+
+def unwrap_kwarg_namespace(func):
+  """Transform a Namespace object from argparse into proper args and kwargs.
+
+  For a function that will be delegated to from argparse, inspect all of the
+  argments and extract them from the Namespace object.
+
+  Args:
+    func: the function that we are wrapping to modify behavior
+
+  Returns:
+    a new function that unwraps all of the arguments in a namespace and then
+    delegates to the passed function with those args.
+  """
+  # When we move to python 3, getfullargspec so that we can tell the
+  # difference between args and kwargs -- then this could be used for functions
+  # that have both args and kwargs
+  if 'getfullargspec' in dir(inspect):
+    argspec = inspect.getfullargspec(func)
+  else:
+    argspec = inspect.getargspec(func)  # Python 2 compatibility.
+
+  def wrapped(argparse_namespace=None, **kwargs):
+    """Take a Namespace object and map it to kwargs.
+
+    Inspect the argspec of the passed function. Loop over all the args that
+    are present in the function and try to map them by name to arguments in the
+    namespace. For keyword arguments, we do not require that they be present
+    in the Namespace.
+
+    Args:
+      argparse_namespace: an arparse.Namespace object, the result of calling
+        argparse.ArgumentParser().parse_args()
+      **kwargs: keyword arguments that may be passed to the original function
+    Returns:
+      The return of the wrapped function from the parent.
+
+    Raises:
+      ValueError in the event that an argument is passed to the cli that is not
+      in the set of named kwargs
+    """
+    if not argparse_namespace:
+      return func(**kwargs)
+
+    reserved_namespace_keywords = ['func']
+    new_kwargs = {}
+
+    args = argspec.args or []
+    for arg_name in args:
+      passed_value = getattr(argparse_namespace, arg_name, None)
+      if passed_value is not None:
+        new_kwargs[arg_name] = passed_value
+
+    for namespace_key in vars(argparse_namespace).keys():
+      # ignore namespace keywords that have been set not passed in via cli
+      if namespace_key in reserved_namespace_keywords:
+        continue
+
+      # make sure that we haven't passed something we should be processing
+      if namespace_key not in args:
+        raise ValueError('CLI argument "{}" does not match any argument in '
+                         'function {}'.format(namespace_key, func.__name__))
+
+    return func(**new_kwargs)
+
+  wrapped.__name__ = func.__name__
+  return wrapped
+
+
+class NetworkRequest(object):
+  """A container for an network request object.
+
+  This class holds on to all of the attributes necessary for making a
+  network request via httplib.
+  """
+
+  def __init__(self, url, method, headers, body, timeout):
+    self.url = url.lower()
+    self.parsed_url = urlparse(self.url)
+    self.method = method
+    self.headers = headers
+    self.body = body
+    self.timeout = timeout
+    self.is_secure_connection = self.is_secure_connection()
+
+  def execute_request(self):
+    """"Execute the request, and get a response.
+
+    Returns:
+      an HttpResponse object from httplib
+    """
+    if self.is_secure_connection:
+      conn = HTTPSConnection(self.get_hostname(), timeout=self.timeout)
+    else:
+      conn = HTTPConnection(self.get_hostname(), timeout=self.timeout)
+
+    conn.request(self.method, self.url, self.body, self.headers)
+    response = conn.getresponse()
+    return response
+
+  def get_hostname(self):
+    """Return the hostname for the url."""
+    return self.parsed_url.netloc
+
+  def is_secure_connection(self):
+    """Checks for a secure connection of https.
+
+    Returns:
+      True if the scheme is "https"; False if "http"
+
+    Raises:
+      ValueError when the scheme does not match http or https
+    """
+    scheme = self.parsed_url.scheme
+
+    if scheme == 'http':
+      return False
+    elif scheme == 'https':
+      return True
+    else:
+      raise ValueError('The url scheme is not "http" nor "https"'
+                       ': {}'.format(scheme))
+
+
+def parse_colon_delimited_options(option_args):
+  """Parses a key value from a string.
+
+  Args:
+      option_args: Key value string delimited by a color, ex: ("key:value")
+
+  Returns:
+      Return an array with the key as the first element and value as the second
+
+  Raises:
+      ValueError: If the key value option is not formatted correctly
+  """
+  options = {}
+
+  if not option_args:
+    return options
+
+  for single_arg in option_args:
+    values = single_arg.split(':')
+    if len(values) != 2:
+      raise ValueError('An option arg must be a single key/value pair '
+                       'delimited by a colon - ex: "thing_key:thing_value"')
+
+    key = values[0].strip()
+    value = values[1].strip()
+    options[key] = value
+
+  return options
+
+
+def make_request(request):
+  """Makes a synchronous network request and return the HTTP status code.
+
+  Args:
+    request: a well formulated request object
+
+  Returns:
+    The HTTP status code of the network request.
+    '1' maps to invalid request headers.
+  """
+
+  logger.info('Sending network request -')
+  logger.info('\tUrl: %s', request.url)
+  logger.debug('\tMethod: %s', request.method)
+  logger.debug('\tHeaders: %s', request.headers)
+  logger.debug('\tBody: %s', request.body)
+
+  try:
+    response = request.execute_request()
+  except socket.timeout:
+    logger.exception(
+        'Timed out post request to %s in %d seconds for request body: %s',
+        request.url, request.timeout, request.body)
+    return EXIT_CODE_HTTP_TIMEOUT
+  except (HTTPException, socket.error):
+    logger.exception(
+        'Encountered generic exception in posting to %s with request body %s',
+        request.url, request.body)
+    return EXIT_CODE_GENERIC_HTTPLIB_ERROR
+
+  status = response.status
+  headers = response.getheaders()
+  logger.info('Received Network response -')
+  logger.info('\tStatus code: %d', status)
+  logger.debug('\tResponse headers: %s', headers)
+
+  if status < 200 or status > 299:
+    logger.error('Request (%s) failed with status code %d\n', request.url,
+                 status)
+
+  # If we wanted this script to support get, we need to
+  # figure out what mechanism we intend for capturing the response
+  return status
+
+
+@unwrap_kwarg_namespace
+def post(url=None, header=None, body=None, timeout=5, verbose=False):
+  """Sends a post request.
+
+  Args:
+      url: The url of the request
+      header: A list of headers for the request
+      body: The body for the request
+      timeout: Timeout in seconds for the request
+      verbose: Should debug logs be displayed
+
+  Returns:
+      Return an array with the key as the first element and value as the second
+  """
+
+  if verbose:
+    handler.setLevel(logging.DEBUG)
+    logger.setLevel(logging.DEBUG)
+
+  try:
+    logger.info('Parsing headers: %s', header)
+    headers = parse_colon_delimited_options(header)
+  except ValueError:
+    logging.exception('Could not parse the parameters with "--header": %s',
+                      header)
+    return EXIT_CODE_INVALID_REQUEST_VALUES
+
+  try:
+    request = NetworkRequest(url, POST, headers, body, float(timeout))
+  except ValueError:
+    logger.exception('Invalid request values passed into the script.')
+    return EXIT_CODE_INVALID_REQUEST_VALUES
+
+  status = make_request(request)
+
+  # View exit code after running to get the http status code: 'echo $?'
+  return status
+
+
+def get_argsparser():
+  """Returns the argument parser.
+
+  Returns:
+    Argument parser for the script.
+  """
+
+  parser = argparse.ArgumentParser(
+      description='The script takes in the arguments of a network request. '
+      'The network request is sent and the http status code will be'
+      'returned as the exit code.')
+  subparsers = parser.add_subparsers(help='Commands:')
+  post_parser = subparsers.add_parser(
+      post.__name__, help='{} help'.format(post.__name__))
+  post_parser.add_argument(
+      '--url',
+      help='Request url. Ex: https://www.google.com/somePath/',
+      required=True,
+      dest='url')
+  post_parser.add_argument(
+      '--header',
+      help='Request headers as a space delimited list of key '
+      'value pairs. Ex: "key1:value1 key2:value2"',
+      action='append',
+      required=False,
+      dest='header')
+  post_parser.add_argument(
+      '--body',
+      help='The body of the network request',
+      required=True,
+      dest='body')
+  post_parser.add_argument(
+      '--timeout',
+      help='The timeout in seconds',
+      default=10.0,
+      required=False,
+      dest='timeout')
+  post_parser.add_argument(
+      '--verbose',
+      help='Should verbose logging be outputted',
+      action='store_true',
+      default=False,
+      required=False,
+      dest='verbose')
+  post_parser.set_defaults(func=post)
+  return parser
+
+
+def map_http_status_to_exit_code(status_code):
+  """Map an http status code to the appropriate exit code.
+
+  Exit codes in python are valid from 0-256, so we want to map these to
+  predictable exit codes within range.
+
+  Args:
+    status_code: the input status code that was output from the network call
+                 function
+
+  Returns:
+    One of our valid exit codes declared at the top of the file or a generic
+    unknown error code
+  """
+  if status_code <= MAX_EXIT_CODE:
+    return status_code
+
+  if status_code > 199 and status_code < 300:
+    return EXIT_CODE_SUCCESS
+
+  if status_code == 302:
+    return EXIT_CODE_HTTP_REDIRECT_ERROR
+
+  if status_code == 404:
+    return EXIT_CODE_HTTP_NOT_FOUND_ERROR
+
+  if status_code > 499:
+    return EXIT_CODE_HTTP_SERVER_ERROR
+
+  return EXIT_CODE_HTTP_UNKNOWN_ERROR
+
+
+def main():
+  """Main function to run the program.
+
+  Parse system arguments and delegate to the appropriate function.
+
+  Returns:
+    A status code - either an http status code or a custom error code
+  """
+  parser = get_argsparser()
+  subparser_action = parser.parse_args()
+  try:
+    return subparser_action.func(subparser_action)
+  except ValueError:
+    logger.exception('Invalid arguments passed.')
+    parser.print_help(sys.stderr)
+    return EXIT_CODE_INVALID_REQUEST_VALUES
+  return EXIT_CODE_GENERIC_HTTPLIB_ERROR
+
+if __name__ == '__main__':
+  exit_code = map_http_status_to_exit_code(main())
+  sys.exit(exit_code)

+ 11 - 0
Assets/Firebase/Editor/network_request.py.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e6e32fecbfd44fab946fa160e4861924
+labels:
+- gvh
+- gvh_version-10.4.0
+- gvhp_exportpath-Firebase/Editor/network_request.py
+timeCreated: 1480838400
+DefaultImporter:
+  userData:
+  assetBundleName:
+  assetBundleVariant:

Some files were not shown because too many files changed in this diff