diff --git a/.gitignore b/.gitignore
index 0286574..9431136 100644
--- a/.gitignore
+++ b/.gitignore
@@ -28,7 +28,7 @@ plugins/
 plugins/android.json
 plugins/ios.json
 $RECYCLE.BIN/
-
+package-lock.json
 .DS_Store
 Thumbs.db
 UserInterfaceState.xcuserstate
diff --git a/config.xml b/config.xml
index 10d3978..cf8c14f 100644
--- a/config.xml
+++ b/config.xml
@@ -103,5 +103,4 @@
     </plugin>
     <plugin name="cordova-plugin-nativegeocoder" spec="3.2.2" />
     <plugin name="cordova-plugin-statusbar" spec="^2.4.2" />
-    <engine name="android" spec="7.1.4" />
 </widget>
diff --git a/package-lock.json b/package-lock.json
index bf2bf6c..245cf23 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -604,7 +604,8 @@
             "minimist": {
               "version": "0.0.8",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "minipass": {
               "version": "2.3.5",
@@ -629,6 +630,7 @@
               "version": "0.5.1",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "minimist": "0.0.8"
               }
@@ -808,7 +810,8 @@
             "safe-buffer": {
               "version": "5.1.2",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "safer-buffer": {
               "version": "2.1.2",
@@ -914,7 +917,8 @@
             "yallist": {
               "version": "3.0.3",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             }
           }
         },
@@ -1043,6 +1047,11 @@
         "tslib": "^1.9.0"
       }
     },
+    "@angular/fire": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/@angular/fire/-/fire-5.2.1.tgz",
+      "integrity": "sha512-pS4zWhLLANzMbYVIKNtebDQKhm9+KANUDvDV6DwKP24XHzkZdvazKe1HC6uXWlf7QmDxSPFleCSBkn0tnQQzdQ=="
+    },
     "@angular/forms": {
       "version": "8.1.3",
       "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-8.1.3.tgz",
@@ -1241,6 +1250,211 @@
         }
       }
     },
+    "@firebase/app": {
+      "version": "0.4.14",
+      "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.4.14.tgz",
+      "integrity": "sha512-2awiJkYz/SMOAEGg5Qvq/596RywoefRckhjUS42kZC7C1HZ06EcQHr26ejAMFk9qeXWYLs4eumSw/V4SDYR3Kw==",
+      "requires": {
+        "@firebase/app-types": "0.4.3",
+        "@firebase/logger": "0.1.22",
+        "@firebase/util": "0.2.25",
+        "dom-storage": "2.1.0",
+        "tslib": "1.10.0",
+        "xmlhttprequest": "1.8.0"
+      }
+    },
+    "@firebase/app-types": {
+      "version": "0.4.3",
+      "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.4.3.tgz",
+      "integrity": "sha512-VU5c+ZjejvefLVH4cjiX3Hy1w9HYMv7TtZ1tF9ZmOqT4DSIU1a3VISWoo8///cGGffr5IirMO+Q/WZLI4p8VcA=="
+    },
+    "@firebase/auth": {
+      "version": "0.11.8",
+      "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-0.11.8.tgz",
+      "integrity": "sha512-aMSWaOCQmQtLKb1j96O7tErRx+kgq2OV3tMV/sKLkXp1J7SP03ejQfi+wOGDYnTWD6mNv+7b8ra1po+IHkydtg==",
+      "requires": {
+        "@firebase/auth-types": "0.7.2"
+      }
+    },
+    "@firebase/auth-types": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/@firebase/auth-types/-/auth-types-0.7.2.tgz",
+      "integrity": "sha512-xm3evp6671LoI+6M8Om3OhikabLf88Ivz1e7aR8uZjVBYptEYbF3seDIyHn/3wWdVYbp20WK4aWixKlRnHl+6Q=="
+    },
+    "@firebase/database": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.5.0.tgz",
+      "integrity": "sha512-7XLy33bdVRpc+Z46SAk2XzbNuGD/jgOilYRuY+HlPt5qbhzhWHe4lnBLS6toMU299Vcvk6vLRup73qLui8FQpQ==",
+      "requires": {
+        "@firebase/database-types": "0.4.2",
+        "@firebase/logger": "0.1.22",
+        "@firebase/util": "0.2.25",
+        "faye-websocket": "0.11.3",
+        "tslib": "1.10.0"
+      },
+      "dependencies": {
+        "faye-websocket": {
+          "version": "0.11.3",
+          "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz",
+          "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==",
+          "requires": {
+            "websocket-driver": ">=0.5.1"
+          }
+        }
+      }
+    },
+    "@firebase/database-types": {
+      "version": "0.4.2",
+      "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.4.2.tgz",
+      "integrity": "sha512-rBF/Sp4S4zzVg+a6h0iEiXR2GdNRrvx2BR6IcvGHnSPF7XVpj9UuUWtZMJyO+vWP3zlIGDvlNRJ4qF01Y6KxGg=="
+    },
+    "@firebase/firestore": {
+      "version": "1.4.10",
+      "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-1.4.10.tgz",
+      "integrity": "sha512-TyPwuWdY64G0cWm4H/7x6XJESHINIQIOK0gmjw1BYA+kPudzNaoyeJ6nxZRzZ7lcNol78FLCU7eb/ChDKVAo9g==",
+      "requires": {
+        "@firebase/firestore-types": "1.4.4",
+        "@firebase/logger": "0.1.22",
+        "@firebase/util": "0.2.25",
+        "@firebase/webchannel-wrapper": "0.2.24",
+        "@grpc/proto-loader": "^0.5.0",
+        "grpc": "1.22.2",
+        "tslib": "1.10.0"
+      }
+    },
+    "@firebase/firestore-types": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-1.4.4.tgz",
+      "integrity": "sha512-kFpmzkUKfzrXkcMad+TQlMs55dWNY0q1UxGICW82EneX3Yg6HN3Nx36kYfqH+SLBFUN1ZTikN07alMp0MA9p9g=="
+    },
+    "@firebase/functions": {
+      "version": "0.4.15",
+      "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.4.15.tgz",
+      "integrity": "sha512-mAOOHKaHqGRP2+5jlKesGUPQFiiy/sgjW5iURvzv0OJUdhERGlfCj9JM5w/1zosXG0oAiiu9Q+K/84dXyeaw4A==",
+      "requires": {
+        "@firebase/functions-types": "0.3.8",
+        "@firebase/messaging-types": "0.3.2",
+        "isomorphic-fetch": "2.2.1",
+        "tslib": "1.10.0"
+      }
+    },
+    "@firebase/functions-types": {
+      "version": "0.3.8",
+      "resolved": "https://registry.npmjs.org/@firebase/functions-types/-/functions-types-0.3.8.tgz",
+      "integrity": "sha512-9hajHxA4UWVCGFmoL8PBYHpamE3JTNjObieMmnvZw3cMRTP2EwipMpzZi+GPbMlA/9swF9yHCY/XFAEkwbvdgQ=="
+    },
+    "@firebase/installations": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/@firebase/installations/-/installations-0.2.4.tgz",
+      "integrity": "sha512-lJlqVa7r/HuI9/d+oSr0CxyN/A1nMMgqDJJr0geDLqfDokrmFhkRxbtb28saGaGnfLzc1KhvIB/TdhzDJ/fDJA==",
+      "requires": {
+        "@firebase/installations-types": "0.1.2",
+        "@firebase/util": "0.2.25",
+        "idb": "3.0.2",
+        "tslib": "1.10.0"
+      }
+    },
+    "@firebase/installations-types": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/@firebase/installations-types/-/installations-types-0.1.2.tgz",
+      "integrity": "sha512-fQaWIW8hyX1XUN7+FCSPjvM1agFjGidVuF4Sxi7aFwfyh5t+4fD2VpM4wCQbWmodnx4fZLvsuQd9mkxxU+lGYQ=="
+    },
+    "@firebase/logger": {
+      "version": "0.1.22",
+      "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.1.22.tgz",
+      "integrity": "sha512-os1vG5FohEF9gl27duZeTtEphOP7oHQ+YjnT+sT2dGprkTIAyaEkzH6G8AgLPUqmASSsoa6BqY5kFXHQi9+xGw=="
+    },
+    "@firebase/messaging": {
+      "version": "0.4.8",
+      "resolved": "https://registry.npmjs.org/@firebase/messaging/-/messaging-0.4.8.tgz",
+      "integrity": "sha512-+NPRHQt4v2V07vmw98/ybOTwIspA3EaRc5Ni6D05d7N0U6RQaiqJae6T3VBMvQovXWzLRqA244KO1Z9OVTQdKg==",
+      "requires": {
+        "@firebase/messaging-types": "0.3.2",
+        "@firebase/util": "0.2.25",
+        "tslib": "1.10.0"
+      }
+    },
+    "@firebase/messaging-types": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/@firebase/messaging-types/-/messaging-types-0.3.2.tgz",
+      "integrity": "sha512-2qa2qNKqpalmtwaUV3+wQqfCm5myP/dViIBv+pXF8HinemIfO1IPQtr9pCNfsSYyus78qEhtfldnPWXxUH5v0w=="
+    },
+    "@firebase/performance": {
+      "version": "0.2.15",
+      "resolved": "https://registry.npmjs.org/@firebase/performance/-/performance-0.2.15.tgz",
+      "integrity": "sha512-I0DYGx59n7r+U0xRi3ee3pidjQF/lp865pHdd+x+lxSLHE3u0XxS3tiSr2xePqm4C7v+syW+wEQRowd9z7UzoA==",
+      "requires": {
+        "@firebase/installations": "0.2.4",
+        "@firebase/logger": "0.1.22",
+        "@firebase/performance-types": "0.0.3",
+        "@firebase/util": "0.2.25",
+        "tslib": "1.10.0"
+      }
+    },
+    "@firebase/performance-types": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/@firebase/performance-types/-/performance-types-0.0.3.tgz",
+      "integrity": "sha512-RuC63nYJPJU65AsrNMc3fTRcRgHiyNcQLh9ufeKUT1mEsFgpxr167gMb+tpzNU4jsbvM6+c6nQAFdHpqcGkRlQ=="
+    },
+    "@firebase/polyfill": {
+      "version": "0.3.19",
+      "resolved": "https://registry.npmjs.org/@firebase/polyfill/-/polyfill-0.3.19.tgz",
+      "integrity": "sha512-70gNPxxHCaSKcNw1g9XfBe15LWrvzvgzUGBVgAdv7zkpgtHMu/uEuklb+A0H1GJtNn6ijyHEAJGXR3KHJ92HEg==",
+      "requires": {
+        "core-js": "3.1.4",
+        "promise-polyfill": "8.1.3",
+        "whatwg-fetch": "2.0.4"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "3.1.4",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.4.tgz",
+          "integrity": "sha512-YNZN8lt82XIMLnLirj9MhKDFZHalwzzrL9YLt6eb0T5D0EDl4IQ90IGkua8mHbnxNrkj1d8hbdizMc0Qmg1WnQ=="
+        },
+        "whatwg-fetch": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz",
+          "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng=="
+        }
+      }
+    },
+    "@firebase/storage": {
+      "version": "0.3.9",
+      "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.3.9.tgz",
+      "integrity": "sha512-Fxku8HVilac2zx1hnxshcnh4WhbY5DWT10dQwrFYNUFW1RuRfTB0zm3SNOVy4NAt7xpVIjqSjFs8mWDXGe7qaQ==",
+      "requires": {
+        "@firebase/storage-types": "0.3.3",
+        "@firebase/util": "0.2.25",
+        "tslib": "1.10.0"
+      }
+    },
+    "@firebase/storage-types": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@firebase/storage-types/-/storage-types-0.3.3.tgz",
+      "integrity": "sha512-fUp4kpbxwDiWs/aIBJqBvXgFHZvgoND2JA0gJYSEsXtWtVwfgzY/710plErgZDeQKopX5eOR1sHskZkQUy0U6w=="
+    },
+    "@firebase/util": {
+      "version": "0.2.25",
+      "resolved": "https://registry.npmjs.org/@firebase/util/-/util-0.2.25.tgz",
+      "integrity": "sha512-J/JgYhvFLCpejzfzjzNDZGFZD3kNtTlMu+2EjiQ3tCII6w0N/uEza5GtFiYTKCjGBa51Lmi2j/OPLz+yhlQCWg==",
+      "requires": {
+        "tslib": "1.10.0"
+      }
+    },
+    "@firebase/webchannel-wrapper": {
+      "version": "0.2.24",
+      "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.24.tgz",
+      "integrity": "sha512-/wt/p0GrYp1cKTGMx1Ak8LpMH6PAJI7rMTYeROXi6+bZ30mhdIjpmLs11Bx26fzcZEH0jWlHXLfVdVDS5WXi2Q=="
+    },
+    "@grpc/proto-loader": {
+      "version": "0.5.1",
+      "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.5.1.tgz",
+      "integrity": "sha512-3y0FhacYAwWvyXshH18eDkUI40wT/uGio7MAegzY8lO5+wVsc19+1A7T0pPptae4kl7bdITL+0cHpnAPmryBjQ==",
+      "requires": {
+        "lodash.camelcase": "^4.3.0",
+        "protobufjs": "^6.8.6"
+      }
+    },
     "@ionic-native/core": {
       "version": "5.11.0",
       "resolved": "https://registry.npmjs.org/@ionic-native/core/-/core-5.11.0.tgz",
@@ -1319,6 +1533,16 @@
         "tslib": "^1.10.0"
       }
     },
+    "@ionic/storage": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/@ionic/storage/-/storage-2.2.0.tgz",
+      "integrity": "sha512-2pszrzmI+fAar2Rx0WmJDVpc15D1k5tvLkB49NLYWJ2pOMaO/3/vp7mg/mEbg3rdsPE9FRbYI6vdKjQ2pP1EWA==",
+      "requires": {
+        "localforage": "1.7.1",
+        "localforage-cordovasqlitedriver": "1.7.0",
+        "tslib": "^1.7.1"
+      }
+    },
     "@ngtools/webpack": {
       "version": "8.1.3",
       "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-8.1.3.tgz",
@@ -1343,6 +1567,60 @@
         }
       }
     },
+    "@protobufjs/aspromise": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
+      "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
+    },
+    "@protobufjs/base64": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
+      "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
+    },
+    "@protobufjs/codegen": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
+      "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
+    },
+    "@protobufjs/eventemitter": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
+      "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
+    },
+    "@protobufjs/fetch": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
+      "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
+      "requires": {
+        "@protobufjs/aspromise": "^1.1.1",
+        "@protobufjs/inquire": "^1.1.0"
+      }
+    },
+    "@protobufjs/float": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
+      "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
+    },
+    "@protobufjs/inquire": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
+      "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
+    },
+    "@protobufjs/path": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
+      "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
+    },
+    "@protobufjs/pool": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
+      "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
+    },
+    "@protobufjs/utf8": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
+      "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
+    },
     "@schematics/angular": {
       "version": "8.1.3",
       "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-8.1.3.tgz",
@@ -1417,6 +1695,11 @@
         "@types/jasmine": "*"
       }
     },
+    "@types/long": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz",
+      "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q=="
+    },
     "@types/minimatch": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@@ -1670,6 +1953,11 @@
         "through": ">=2.2.7 <3"
       }
     },
+    "abbrev": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
+    },
     "accepts": {
       "version": "1.3.7",
       "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
@@ -1757,6 +2045,26 @@
       "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
       "dev": true
     },
+    "android-versions": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/android-versions/-/android-versions-1.4.0.tgz",
+      "integrity": "sha512-GnomfYsBq+nZh3c3UH/4r9Jt6FuTxdhUJbeHIdYOH5xBhQ8I0ZzC2/RM5IFFIjrzuNWSHb8JWP1lPK0/a26jrg==",
+      "requires": {
+        "semver": "^5.4.1"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "5.7.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+        }
+      }
+    },
+    "ansi": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
+      "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE="
+    },
     "ansi-colors": {
       "version": "3.2.4",
       "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
@@ -1778,8 +2086,7 @@
     "ansi-regex": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
-      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-      "dev": true
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
     },
     "ansi-styles": {
       "version": "3.2.1",
@@ -1903,6 +2210,15 @@
       "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
       "dev": true
     },
+    "ascli": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
+      "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
+      "requires": {
+        "colour": "~0.7.1",
+        "optjs": "~3.2.2"
+      }
+    },
     "asn1": {
       "version": "0.2.4",
       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
@@ -2175,8 +2491,7 @@
     "balanced-match": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
-      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-      "dev": true
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
     },
     "base": {
       "version": "0.11.2",
@@ -2242,8 +2557,7 @@
     "base64-js": {
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
-      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
-      "dev": true
+      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
     },
     "base64id": {
       "version": "1.0.0",
@@ -2275,6 +2589,11 @@
         "callsite": "1.0.0"
       }
     },
+    "big-integer": {
+      "version": "1.6.44",
+      "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.44.tgz",
+      "integrity": "sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ=="
+    },
     "big.js": {
       "version": "5.2.2",
       "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
@@ -2360,11 +2679,18 @@
         "multicast-dns-service-types": "^1.1.0"
       }
     },
+    "bplist-parser": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
+      "integrity": "sha1-1g1dzCDLptx+HymbNdPh+V2vuuY=",
+      "requires": {
+        "big-integer": "^1.6.7"
+      }
+    },
     "brace-expansion": {
       "version": "1.1.11",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dev": true,
       "requires": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
@@ -2545,6 +2871,21 @@
       "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=",
       "dev": true
     },
+    "bytebuffer": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
+      "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=",
+      "requires": {
+        "long": "~3"
+      },
+      "dependencies": {
+        "long": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
+          "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
+        }
+      }
+    },
     "bytes": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@@ -2829,8 +3170,7 @@
     "code-point-at": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
-      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
-      "dev": true
+      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
     },
     "codelyzer": {
       "version": "5.1.0",
@@ -2894,6 +3234,11 @@
       "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=",
       "dev": true
     },
+    "colour": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
+      "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g="
+    },
     "combined-stream": {
       "version": "1.0.8",
       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -2966,8 +3311,7 @@
     "concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
     },
     "concat-stream": {
       "version": "1.6.2",
@@ -3091,212 +3435,48 @@
       }
     },
     "cordova-android": {
-      "version": "7.1.4",
-      "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-7.1.4.tgz",
-      "integrity": "sha512-Rtvu002I83uzfVyCsE6p2krFKVHt9TSAqZUATes+zH+o9cdxYGrLHY+PKCQo4SLCdSMdrkIHCDnQPTYTp/d7+g==",
-      "requires": {
-        "abbrev": "*",
-        "android-versions": "1.4.0",
-        "ansi": "*",
-        "balanced-match": "*",
-        "base64-js": "1.2.0",
-        "big-integer": "1.6.32",
-        "bplist-parser": "*",
-        "brace-expansion": "*",
-        "concat-map": "*",
-        "cordova-common": "2.2.5",
-        "cordova-registry-mapper": "*",
-        "elementtree": "0.1.6",
-        "glob": "5.0.15",
-        "inflight": "*",
-        "inherits": "*",
-        "minimatch": "*",
-        "nopt": "3.0.1",
-        "once": "*",
-        "path-is-absolute": "1.0.1",
-        "plist": "2.1.0",
-        "properties-parser": "0.2.3",
-        "q": "1.4.1",
-        "sax": "0.3.5",
-        "semver": "5.5.0",
-        "shelljs": "0.5.3",
-        "underscore": "*",
-        "unorm": "*",
-        "wrappy": "*",
-        "xmlbuilder": "8.2.2",
-        "xmldom": "*"
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-8.0.0.tgz",
+      "integrity": "sha512-Ipv8HbVJpxEyYFSFLTEOaLRp0yxBtJVNbgSuDEB4naa34FzQaRWSNiiMcPJnO+x3hRXNt7pcwa46hARNzhn7+w==",
+      "requires": {
+        "android-versions": "^1.3.0",
+        "cordova-common": "^3.1.0",
+        "elementtree": "^0.1.7",
+        "nopt": "^4.0.1",
+        "properties-parser": "^0.3.1",
+        "q": "^1.4.1",
+        "shelljs": "^0.5.3"
+      }
+    },
+    "cordova-common": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-3.2.0.tgz",
+      "integrity": "sha512-EvlQ6PirfR65hGDoQvsluW00uSS2MTVIRKQ3c1Xvsddx7D5T5JgF3fHWkGik/Y/8yNcpI0zI2NcJyie2z/ak2A==",
+      "requires": {
+        "ansi": "^0.3.1",
+        "bplist-parser": "^0.1.0",
+        "cross-spawn": "^6.0.5",
+        "elementtree": "0.1.7",
+        "endent": "^1.1.1",
+        "fs-extra": "^8.0.0",
+        "glob": "^7.1.2",
+        "minimatch": "^3.0.0",
+        "plist": "^3.0.1",
+        "q": "^1.4.1",
+        "strip-bom": "^3.0.0",
+        "underscore": "^1.8.3",
+        "which": "^1.3.0"
       },
       "dependencies": {
-        "abbrev": {
-          "version": "1.1.1",
-          "bundled": true
-        },
-        "android-versions": {
-          "version": "1.4.0",
-          "bundled": true,
-          "requires": {
-            "semver": "^5.4.1"
-          }
-        },
-        "ansi": {
-          "version": "0.3.1",
-          "bundled": true
-        },
-        "balanced-match": {
-          "version": "1.0.0",
-          "bundled": true
-        },
-        "base64-js": {
-          "version": "1.2.0",
-          "bundled": true
-        },
-        "big-integer": {
-          "version": "1.6.32",
-          "bundled": true
-        },
-        "bplist-parser": {
-          "version": "0.1.1",
-          "bundled": true,
-          "requires": {
-            "big-integer": "^1.6.7"
-          }
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "bundled": true,
-          "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "bundled": true
-        },
-        "cordova-common": {
-          "version": "2.2.5",
-          "bundled": true,
-          "requires": {
-            "ansi": "^0.3.1",
-            "bplist-parser": "^0.1.0",
-            "cordova-registry-mapper": "^1.1.8",
-            "elementtree": "0.1.6",
-            "glob": "^5.0.13",
-            "minimatch": "^3.0.0",
-            "plist": "^2.1.0",
-            "q": "^1.4.1",
-            "shelljs": "^0.5.3",
-            "underscore": "^1.8.3",
-            "unorm": "^1.3.3"
-          }
-        },
-        "cordova-registry-mapper": {
-          "version": "1.1.15",
-          "bundled": true
-        },
-        "elementtree": {
-          "version": "0.1.6",
-          "bundled": true,
-          "requires": {
-            "sax": "0.3.5"
-          }
-        },
-        "glob": {
-          "version": "5.0.15",
-          "bundled": true,
-          "requires": {
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "2 || 3",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "bundled": true,
-          "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "bundled": true
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "bundled": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
-        "nopt": {
-          "version": "3.0.1",
-          "bundled": true,
-          "requires": {
-            "abbrev": "1"
-          }
-        },
-        "once": {
-          "version": "1.4.0",
-          "bundled": true,
+        "fs-extra": {
+          "version": "8.1.0",
+          "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+          "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
           "requires": {
-            "wrappy": "1"
-          }
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "bundled": true
-        },
-        "plist": {
-          "version": "2.1.0",
-          "bundled": true,
-          "requires": {
-            "base64-js": "1.2.0",
-            "xmlbuilder": "8.2.2",
-            "xmldom": "0.1.x"
+            "graceful-fs": "^4.2.0",
+            "jsonfile": "^4.0.0",
+            "universalify": "^0.1.0"
           }
-        },
-        "properties-parser": {
-          "version": "0.2.3",
-          "bundled": true
-        },
-        "q": {
-          "version": "1.4.1",
-          "bundled": true
-        },
-        "sax": {
-          "version": "0.3.5",
-          "bundled": true
-        },
-        "semver": {
-          "version": "5.5.0",
-          "bundled": true
-        },
-        "shelljs": {
-          "version": "0.5.3",
-          "bundled": true
-        },
-        "underscore": {
-          "version": "1.9.1",
-          "bundled": true
-        },
-        "unorm": {
-          "version": "1.4.1",
-          "bundled": true
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "bundled": true
-        },
-        "xmlbuilder": {
-          "version": "8.2.2",
-          "bundled": true
-        },
-        "xmldom": {
-          "version": "0.1.27",
-          "bundled": true
         }
       }
     },
@@ -3340,6 +3520,19 @@
       "resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.3.tgz",
       "integrity": "sha1-tehezbv+Wu3tQKG/TuI3LmfZb7Q="
     },
+    "cordova-sqlite-storage": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/cordova-sqlite-storage/-/cordova-sqlite-storage-3.3.0.tgz",
+      "integrity": "sha512-RBgGAe8rf/k54JC12xtt/14PxJrh42C4ISd+P8fqZq5Kw6JfQGh/55/VTsjI29rInl5jO5fwpYee/InGYlmI9w==",
+      "requires": {
+        "cordova-sqlite-storage-dependencies": "2.1.0"
+      }
+    },
+    "cordova-sqlite-storage-dependencies": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cordova-sqlite-storage-dependencies/-/cordova-sqlite-storage-dependencies-2.1.0.tgz",
+      "integrity": "sha512-m0cPOWPzckAqS0/e7v+xtcM+FrHrw63qgh5T91JdkXMKCK8sN9bDoqVNJHZ5E9y7sRO7liMUIDm6Dz439RYqGA=="
+    },
     "core-js": {
       "version": "2.6.9",
       "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
@@ -3404,7 +3597,6 @@
       "version": "6.0.5",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
       "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
-      "dev": true,
       "requires": {
         "nice-try": "^1.0.4",
         "path-key": "^2.0.1",
@@ -3416,8 +3608,7 @@
         "semver": {
           "version": "5.7.0",
           "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
-          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
-          "dev": true
+          "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
         }
       }
     },
@@ -3529,8 +3720,7 @@
     "decamelize": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
-      "dev": true
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
     },
     "decode-uri-component": {
       "version": "0.2.0",
@@ -3538,11 +3728,15 @@
       "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
       "dev": true
     },
+    "dedent": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+      "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw="
+    },
     "deep-equal": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
-      "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=",
-      "dev": true
+      "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
     },
     "default-gateway": {
       "version": "4.2.0",
@@ -3567,7 +3761,6 @@
       "version": "1.1.3",
       "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
       "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
-      "dev": true,
       "requires": {
         "object-keys": "^1.0.12"
       }
@@ -3613,6 +3806,11 @@
         }
       }
     },
+    "defined": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz",
+      "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM="
+    },
     "del": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
@@ -3779,6 +3977,11 @@
         "void-elements": "^2.0.0"
       }
     },
+    "dom-storage": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/dom-storage/-/dom-storage-2.1.0.tgz",
+      "integrity": "sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q=="
+    },
     "domain-browser": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
@@ -3819,6 +4022,21 @@
       "integrity": "sha512-ZsaFWi+9J9Nsm4OmGM/BvZF3HEeZL4bte1+CcN9vHUcqdkOOVAXP4SeacPZ/W5uCQZEKPYBXg6yUjZx8/jpD0Q==",
       "dev": true
     },
+    "elementtree": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz",
+      "integrity": "sha1-mskb5uUvtuYkTE5UpKw+2K6OKcA=",
+      "requires": {
+        "sax": "1.1.4"
+      },
+      "dependencies": {
+        "sax": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
+          "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk="
+        }
+      }
+    },
     "elliptic": {
       "version": "6.5.0",
       "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz",
@@ -3856,7 +4074,6 @@
       "version": "0.1.12",
       "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
       "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
-      "dev": true,
       "requires": {
         "iconv-lite": "~0.4.13"
       }
@@ -3870,6 +4087,16 @@
         "once": "^1.4.0"
       }
     },
+    "endent": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/endent/-/endent-1.3.0.tgz",
+      "integrity": "sha512-C8AryqPPwtydqcpO5AF6k9Bd1EpFkQtvsefJqS3y3n8TG13Jy63MascDxTOULZYqrUde+dK6BjNc6LIMr3iI2A==",
+      "requires": {
+        "dedent": "^0.7.0",
+        "fast-json-parse": "^1.0.3",
+        "objectorarray": "^1.0.3"
+      }
+    },
     "engine.io": {
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz",
@@ -4017,7 +4244,6 @@
       "version": "1.13.0",
       "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz",
       "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==",
-      "dev": true,
       "requires": {
         "es-to-primitive": "^1.2.0",
         "function-bind": "^1.1.1",
@@ -4031,7 +4257,6 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
       "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
-      "dev": true,
       "requires": {
         "is-callable": "^1.1.4",
         "is-date-object": "^1.0.1",
@@ -4362,6 +4587,11 @@
       "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
       "dev": true
     },
+    "fast-json-parse": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz",
+      "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw=="
+    },
     "fast-json-stable-stringify": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
@@ -4462,6 +4692,25 @@
         "locate-path": "^3.0.0"
       }
     },
+    "firebase": {
+      "version": "6.4.0",
+      "resolved": "https://registry.npmjs.org/firebase/-/firebase-6.4.0.tgz",
+      "integrity": "sha512-9ZzowmeBEGaHIiuJMVZL3oLkOvbNwRFAystAZi2ADqv0Kpo1cg3Anp5l1O+5ZILfG8a7/phr3nfsw/nGvf5gcQ==",
+      "requires": {
+        "@firebase/app": "0.4.14",
+        "@firebase/app-types": "0.4.3",
+        "@firebase/auth": "0.11.8",
+        "@firebase/database": "0.5.0",
+        "@firebase/firestore": "1.4.10",
+        "@firebase/functions": "0.4.15",
+        "@firebase/installations": "0.2.4",
+        "@firebase/messaging": "0.4.8",
+        "@firebase/performance": "0.2.15",
+        "@firebase/polyfill": "0.3.19",
+        "@firebase/storage": "0.3.9",
+        "@firebase/util": "0.2.25"
+      }
+    },
     "flatted": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz",
@@ -4504,6 +4753,14 @@
         }
       }
     },
+    "for-each": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+      "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+      "requires": {
+        "is-callable": "^1.1.3"
+      }
+    },
     "for-in": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -4611,8 +4868,7 @@
     "fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
-      "dev": true
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
     },
     "fsevents": {
       "version": "2.0.7",
@@ -4624,8 +4880,7 @@
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
-      "dev": true
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
     },
     "genfun": {
       "version": "5.0.0",
@@ -4667,7 +4922,6 @@
       "version": "7.1.4",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
       "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
-      "dev": true,
       "requires": {
         "fs.realpath": "^1.0.0",
         "inflight": "^1.0.4",
@@ -4693,45 +4947,531 @@
           "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
           "dev": true,
           "requires": {
-            "is-extglob": "^2.1.0"
+            "is-extglob": "^2.1.0"
+          }
+        }
+      }
+    },
+    "globals": {
+      "version": "9.18.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+      "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+      "dev": true
+    },
+    "globby": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
+      "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
+      "dev": true,
+      "requires": {
+        "array-union": "^1.0.1",
+        "dir-glob": "^2.0.0",
+        "glob": "^7.1.2",
+        "ignore": "^3.3.5",
+        "pify": "^3.0.0",
+        "slash": "^1.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        }
+      }
+    },
+    "graceful-fs": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz",
+      "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw=="
+    },
+    "grpc": {
+      "version": "1.22.2",
+      "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.22.2.tgz",
+      "integrity": "sha512-gaK59oAA5/mlOIn+hQO5JROPoAzsaGRpEMcrAayW5WGETS8QScpBoQ+XBxEWAAF0kbeGIELuGRCVEObKS1SLmw==",
+      "requires": {
+        "lodash.camelcase": "^4.3.0",
+        "lodash.clone": "^4.5.0",
+        "nan": "^2.13.2",
+        "node-pre-gyp": "^0.13.0",
+        "protobufjs": "^5.0.3"
+      },
+      "dependencies": {
+        "abbrev": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "ansi-regex": {
+          "version": "2.1.1",
+          "bundled": true
+        },
+        "aproba": {
+          "version": "1.2.0",
+          "bundled": true
+        },
+        "are-we-there-yet": {
+          "version": "1.1.5",
+          "bundled": true,
+          "requires": {
+            "delegates": "^1.0.0",
+            "readable-stream": "^2.0.6"
+          }
+        },
+        "balanced-match": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "brace-expansion": {
+          "version": "1.1.11",
+          "bundled": true,
+          "requires": {
+            "balanced-match": "^1.0.0",
+            "concat-map": "0.0.1"
+          }
+        },
+        "camelcase": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
+        },
+        "chownr": {
+          "version": "1.1.1",
+          "bundled": true
+        },
+        "cliui": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+          "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+          "requires": {
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wrap-ansi": "^2.0.0"
+          }
+        },
+        "code-point-at": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "concat-map": {
+          "version": "0.0.1",
+          "bundled": true
+        },
+        "console-control-strings": {
+          "version": "1.1.0",
+          "bundled": true
+        },
+        "core-util-is": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "deep-extend": {
+          "version": "0.6.0",
+          "bundled": true
+        },
+        "delegates": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "detect-libc": {
+          "version": "1.0.3",
+          "bundled": true
+        },
+        "fs-minipass": {
+          "version": "1.2.6",
+          "bundled": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "fs.realpath": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "gauge": {
+          "version": "2.7.4",
+          "bundled": true,
+          "requires": {
+            "aproba": "^1.0.3",
+            "console-control-strings": "^1.0.0",
+            "has-unicode": "^2.0.0",
+            "object-assign": "^4.1.0",
+            "signal-exit": "^3.0.0",
+            "string-width": "^1.0.1",
+            "strip-ansi": "^3.0.1",
+            "wide-align": "^1.1.0"
+          }
+        },
+        "has-unicode": {
+          "version": "2.0.1",
+          "bundled": true
+        },
+        "iconv-lite": {
+          "version": "0.4.23",
+          "bundled": true,
+          "requires": {
+            "safer-buffer": ">= 2.1.2 < 3"
+          }
+        },
+        "ignore-walk": {
+          "version": "3.0.1",
+          "bundled": true,
+          "requires": {
+            "minimatch": "^3.0.4"
+          }
+        },
+        "inflight": {
+          "version": "1.0.6",
+          "bundled": true,
+          "requires": {
+            "once": "^1.3.0",
+            "wrappy": "1"
+          }
+        },
+        "inherits": {
+          "version": "2.0.3",
+          "bundled": true
+        },
+        "ini": {
+          "version": "1.3.5",
+          "bundled": true
+        },
+        "invert-kv": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+          "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+        },
+        "is-fullwidth-code-point": {
+          "version": "1.0.0",
+          "bundled": true,
+          "requires": {
+            "number-is-nan": "^1.0.0"
+          }
+        },
+        "isarray": {
+          "version": "1.0.0",
+          "bundled": true
+        },
+        "lcid": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+          "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+          "requires": {
+            "invert-kv": "^1.0.0"
+          }
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "bundled": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "minimist": {
+          "version": "1.2.0",
+          "bundled": true
+        },
+        "minipass": {
+          "version": "2.3.5",
+          "bundled": true,
+          "requires": {
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.0"
+          }
+        },
+        "minizlib": {
+          "version": "1.2.1",
+          "bundled": true,
+          "requires": {
+            "minipass": "^2.2.1"
+          }
+        },
+        "mkdirp": {
+          "version": "0.5.1",
+          "bundled": true,
+          "requires": {
+            "minimist": "0.0.8"
+          },
+          "dependencies": {
+            "minimist": {
+              "version": "0.0.8",
+              "bundled": true
+            }
+          }
+        },
+        "needle": {
+          "version": "2.4.0",
+          "bundled": true,
+          "requires": {
+            "debug": "^3.2.6",
+            "iconv-lite": "^0.4.4",
+            "sax": "^1.2.4"
+          },
+          "dependencies": {
+            "debug": {
+              "version": "3.2.6",
+              "bundled": true,
+              "requires": {
+                "ms": "^2.1.1"
+              }
+            },
+            "ms": {
+              "version": "2.1.2",
+              "bundled": true
+            }
+          }
+        },
+        "node-pre-gyp": {
+          "version": "0.13.0",
+          "bundled": true,
+          "requires": {
+            "detect-libc": "^1.0.2",
+            "mkdirp": "^0.5.1",
+            "needle": "^2.2.1",
+            "nopt": "^4.0.1",
+            "npm-packlist": "^1.1.6",
+            "npmlog": "^4.0.2",
+            "rc": "^1.2.7",
+            "rimraf": "^2.6.1",
+            "semver": "^5.3.0",
+            "tar": "^4"
+          }
+        },
+        "nopt": {
+          "version": "4.0.1",
+          "bundled": true,
+          "requires": {
+            "abbrev": "1",
+            "osenv": "^0.1.4"
+          }
+        },
+        "npm-bundled": {
+          "version": "1.0.6",
+          "bundled": true
+        },
+        "npm-packlist": {
+          "version": "1.4.1",
+          "bundled": true,
+          "requires": {
+            "ignore-walk": "^3.0.1",
+            "npm-bundled": "^1.0.1"
+          }
+        },
+        "npmlog": {
+          "version": "4.1.2",
+          "bundled": true,
+          "requires": {
+            "are-we-there-yet": "~1.1.2",
+            "console-control-strings": "~1.1.0",
+            "gauge": "~2.7.3",
+            "set-blocking": "~2.0.0"
+          }
+        },
+        "number-is-nan": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "object-assign": {
+          "version": "4.1.1",
+          "bundled": true
+        },
+        "once": {
+          "version": "1.4.0",
+          "bundled": true,
+          "requires": {
+            "wrappy": "1"
+          }
+        },
+        "os-homedir": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "os-locale": {
+          "version": "1.4.0",
+          "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+          "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+          "requires": {
+            "lcid": "^1.0.0"
+          }
+        },
+        "os-tmpdir": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "osenv": {
+          "version": "0.1.5",
+          "bundled": true,
+          "requires": {
+            "os-homedir": "^1.0.0",
+            "os-tmpdir": "^1.0.0"
+          }
+        },
+        "path-is-absolute": {
+          "version": "1.0.1",
+          "bundled": true
+        },
+        "process-nextick-args": {
+          "version": "2.0.1",
+          "bundled": true
+        },
+        "protobufjs": {
+          "version": "5.0.3",
+          "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz",
+          "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==",
+          "requires": {
+            "ascli": "~1",
+            "bytebuffer": "~5",
+            "glob": "^7.0.5",
+            "yargs": "^3.10.0"
+          }
+        },
+        "rc": {
+          "version": "1.2.8",
+          "bundled": true,
+          "requires": {
+            "deep-extend": "^0.6.0",
+            "ini": "~1.3.0",
+            "minimist": "^1.2.0",
+            "strip-json-comments": "~2.0.1"
+          }
+        },
+        "readable-stream": {
+          "version": "2.3.6",
+          "bundled": true,
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          }
+        },
+        "rimraf": {
+          "version": "2.6.3",
+          "bundled": true,
+          "requires": {
+            "glob": "^7.1.3"
+          },
+          "dependencies": {
+            "glob": {
+              "version": "7.1.4",
+              "bundled": true,
+              "requires": {
+                "fs.realpath": "^1.0.0",
+                "inflight": "^1.0.4",
+                "inherits": "2",
+                "minimatch": "^3.0.4",
+                "once": "^1.3.0",
+                "path-is-absolute": "^1.0.0"
+              }
+            }
+          }
+        },
+        "safe-buffer": {
+          "version": "5.1.2",
+          "bundled": true
+        },
+        "safer-buffer": {
+          "version": "2.1.2",
+          "bundled": true
+        },
+        "sax": {
+          "version": "1.2.4",
+          "bundled": true
+        },
+        "semver": {
+          "version": "5.7.0",
+          "bundled": true
+        },
+        "set-blocking": {
+          "version": "2.0.0",
+          "bundled": true
+        },
+        "signal-exit": {
+          "version": "3.0.1",
+          "bundled": true
+        },
+        "string-width": {
+          "version": "1.0.2",
+          "bundled": true,
+          "requires": {
+            "code-point-at": "^1.0.0",
+            "is-fullwidth-code-point": "^1.0.0",
+            "strip-ansi": "^3.0.0"
+          }
+        },
+        "string_decoder": {
+          "version": "1.1.1",
+          "bundled": true,
+          "requires": {
+            "safe-buffer": "~5.1.0"
+          }
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "bundled": true,
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "strip-json-comments": {
+          "version": "2.0.1",
+          "bundled": true
+        },
+        "tar": {
+          "version": "4.4.10",
+          "bundled": true,
+          "requires": {
+            "chownr": "^1.1.1",
+            "fs-minipass": "^1.2.5",
+            "minipass": "^2.3.5",
+            "minizlib": "^1.2.1",
+            "mkdirp": "^0.5.0",
+            "safe-buffer": "^5.1.2",
+            "yallist": "^3.0.3"
+          }
+        },
+        "util-deprecate": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "wide-align": {
+          "version": "1.1.3",
+          "bundled": true,
+          "requires": {
+            "string-width": "^1.0.2 || 2"
+          }
+        },
+        "wrappy": {
+          "version": "1.0.2",
+          "bundled": true
+        },
+        "y18n": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+          "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+        },
+        "yallist": {
+          "version": "3.0.3",
+          "bundled": true
+        },
+        "yargs": {
+          "version": "3.32.0",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+          "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+          "requires": {
+            "camelcase": "^2.0.1",
+            "cliui": "^3.0.3",
+            "decamelize": "^1.1.1",
+            "os-locale": "^1.4.0",
+            "string-width": "^1.0.1",
+            "window-size": "^0.1.4",
+            "y18n": "^3.2.0"
           }
         }
       }
     },
-    "globals": {
-      "version": "9.18.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
-      "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
-      "dev": true
-    },
-    "globby": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
-      "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
-      "dev": true,
-      "requires": {
-        "array-union": "^1.0.1",
-        "dir-glob": "^2.0.0",
-        "glob": "^7.1.2",
-        "ignore": "^3.3.5",
-        "pify": "^3.0.0",
-        "slash": "^1.0.0"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-          "dev": true
-        }
-      }
-    },
-    "graceful-fs": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz",
-      "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==",
-      "dev": true
-    },
     "handle-thing": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
@@ -4778,7 +5518,6 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
       "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
-      "dev": true,
       "requires": {
         "function-bind": "^1.1.1"
       }
@@ -4824,8 +5563,7 @@
     "has-symbols": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
-      "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=",
-      "dev": true
+      "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
     },
     "has-value": {
       "version": "1.0.0",
@@ -4973,8 +5711,7 @@
     "http-parser-js": {
       "version": "0.4.10",
       "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
-      "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
-      "dev": true
+      "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q="
     },
     "http-proxy": {
       "version": "1.17.0",
@@ -5077,11 +5814,15 @@
       "version": "0.4.24",
       "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
       "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
-      "dev": true,
       "requires": {
         "safer-buffer": ">= 2.1.2 < 3"
       }
     },
+    "idb": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/idb/-/idb-3.0.2.tgz",
+      "integrity": "sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw=="
+    },
     "ieee754": {
       "version": "1.1.13",
       "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
@@ -5119,8 +5860,7 @@
     "immediate": {
       "version": "3.0.6",
       "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
-      "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
-      "dev": true
+      "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
     },
     "import-cwd": {
       "version": "2.1.0",
@@ -5176,7 +5916,6 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
       "requires": {
         "once": "^1.3.0",
         "wrappy": "1"
@@ -5185,8 +5924,7 @@
     "inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
-      "dev": true
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
     },
     "ini": {
       "version": "1.3.5",
@@ -5324,8 +6062,7 @@
     "is-callable": {
       "version": "1.1.4",
       "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
-      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==",
-      "dev": true
+      "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA=="
     },
     "is-data-descriptor": {
       "version": "0.1.4",
@@ -5350,8 +6087,7 @@
     "is-date-object": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
-      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=",
-      "dev": true
+      "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
     },
     "is-descriptor": {
       "version": "0.1.6",
@@ -5469,7 +6205,6 @@
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
       "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
-      "dev": true,
       "requires": {
         "has": "^1.0.1"
       }
@@ -5477,14 +6212,12 @@
     "is-stream": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
-      "dev": true
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
     },
     "is-symbol": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
       "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
-      "dev": true,
       "requires": {
         "has-symbols": "^1.0.0"
       }
@@ -5525,8 +6258,7 @@
     "isexe": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
-      "dev": true
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
     },
     "isobject": {
       "version": "3.0.1",
@@ -5534,6 +6266,15 @@
       "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
       "dev": true
     },
+    "isomorphic-fetch": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
+      "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=",
+      "requires": {
+        "node-fetch": "^1.0.1",
+        "whatwg-fetch": ">=0.10.0"
+      }
+    },
     "isstream": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
@@ -5859,7 +6600,6 @@
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
       "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
-      "dev": true,
       "requires": {
         "graceful-fs": "^4.1.6"
       }
@@ -6035,7 +6775,8 @@
             "ansi-regex": {
               "version": "2.1.1",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "aproba": {
               "version": "1.2.0",
@@ -6078,7 +6819,8 @@
             "code-point-at": {
               "version": "1.1.0",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "concat-map": {
               "version": "0.0.1",
@@ -6089,7 +6831,8 @@
             "console-control-strings": {
               "version": "1.1.0",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "core-util-is": {
               "version": "1.0.2",
@@ -6206,7 +6949,8 @@
             "inherits": {
               "version": "2.0.3",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "ini": {
               "version": "1.3.5",
@@ -6218,6 +6962,7 @@
               "version": "1.0.0",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "number-is-nan": "^1.0.0"
               }
@@ -6247,6 +6992,7 @@
               "version": "2.3.5",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "safe-buffer": "^5.1.2",
                 "yallist": "^3.0.0"
@@ -6265,6 +7011,7 @@
               "version": "0.5.1",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "minimist": "0.0.8"
               }
@@ -6345,7 +7092,8 @@
             "number-is-nan": {
               "version": "1.0.1",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "object-assign": {
               "version": "4.1.1",
@@ -6357,6 +7105,7 @@
               "version": "1.4.0",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "wrappy": "1"
               }
@@ -6442,7 +7191,8 @@
             "safe-buffer": {
               "version": "5.1.2",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "safer-buffer": {
               "version": "2.1.2",
@@ -6478,6 +7228,7 @@
               "version": "1.0.2",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "code-point-at": "^1.0.0",
                 "is-fullwidth-code-point": "^1.0.0",
@@ -6497,6 +7248,7 @@
               "version": "3.0.1",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "ansi-regex": "^2.0.0"
               }
@@ -6540,12 +7292,14 @@
             "wrappy": {
               "version": "1.0.2",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "yallist": {
               "version": "3.0.3",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             }
           }
         },
@@ -6749,6 +7503,32 @@
         "json5": "^1.0.1"
       }
     },
+    "localforage": {
+      "version": "1.7.1",
+      "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.7.1.tgz",
+      "integrity": "sha1-5JJ+BCMCuGTbMPMhHxO1xvDell0=",
+      "requires": {
+        "lie": "3.1.1"
+      },
+      "dependencies": {
+        "lie": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
+          "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
+          "requires": {
+            "immediate": "~3.0.5"
+          }
+        }
+      }
+    },
+    "localforage-cordovasqlitedriver": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/localforage-cordovasqlitedriver/-/localforage-cordovasqlitedriver-1.7.0.tgz",
+      "integrity": "sha1-i5OVd1nuaI06WNW6fAR39sy1ODg=",
+      "requires": {
+        "localforage": ">=1.5.0"
+      }
+    },
     "locate-path": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
@@ -6765,6 +7545,16 @@
       "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
       "dev": true
     },
+    "lodash.camelcase": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+      "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
+    },
+    "lodash.clone": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
+      "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y="
+    },
     "lodash.clonedeep": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
@@ -6813,6 +7603,11 @@
       "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==",
       "dev": true
     },
+    "long": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
+      "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
+    },
     "loose-envify": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -7133,7 +7928,6 @@
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
       "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-      "dev": true,
       "requires": {
         "brace-expansion": "^1.1.7"
       }
@@ -7141,8 +7935,7 @@
     "minimist": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
-      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-      "dev": true
+      "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
     },
     "minipass": {
       "version": "2.3.5",
@@ -7282,9 +8075,7 @@
     "nan": {
       "version": "2.14.0",
       "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
-      "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
-      "dev": true,
-      "optional": true
+      "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
     },
     "nanomatch": {
       "version": "1.2.13",
@@ -7320,8 +8111,16 @@
     "nice-try": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
-      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
-      "dev": true
+      "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+    },
+    "node-fetch": {
+      "version": "1.7.3",
+      "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
+      "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
+      "requires": {
+        "encoding": "^0.1.11",
+        "is-stream": "^1.0.1"
+      }
     },
     "node-fetch-npm": {
       "version": "2.0.2",
@@ -7396,6 +8195,15 @@
         }
       }
     },
+    "nopt": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+      "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
+      "requires": {
+        "abbrev": "1",
+        "osenv": "^0.1.4"
+      }
+    },
     "normalize-package-data": {
       "version": "2.5.0",
       "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
@@ -7533,8 +8341,7 @@
     "number-is-nan": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
-      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
-      "dev": true
+      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
     },
     "oauth-sign": {
       "version": "0.9.0",
@@ -7585,11 +8392,15 @@
         }
       }
     },
+    "object-inspect": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
+      "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ=="
+    },
     "object-keys": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
-      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
-      "dev": true
+      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
     },
     "object-visit": {
       "version": "1.0.1",
@@ -7619,6 +8430,14 @@
         "isobject": "^3.0.1"
       }
     },
+    "objectorarray": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.3.tgz",
+      "integrity": "sha512-kPoflSYkAf/Onvjr4ZLaq37vDuOXjVzfwLCRuORRzYGdXkHa/vacPT0RgR+KmtkwOYFcxTMM62BRrZk8GGKHjw==",
+      "requires": {
+        "tape": "^4.8.0"
+      }
+    },
     "obuf": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
@@ -7644,7 +8463,6 @@
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
-      "dev": true,
       "requires": {
         "wrappy": "1"
       }
@@ -7702,6 +8520,11 @@
         }
       }
     },
+    "optjs": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
+      "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4="
+    },
     "original": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
@@ -7720,8 +8543,7 @@
     "os-homedir": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-      "dev": true
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
     },
     "os-locale": {
       "version": "3.1.0",
@@ -7737,14 +8559,12 @@
     "os-tmpdir": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
-      "dev": true
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
     },
     "osenv": {
       "version": "0.1.5",
       "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
       "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
-      "dev": true,
       "requires": {
         "os-homedir": "^1.0.0",
         "os-tmpdir": "^1.0.0"
@@ -7948,8 +8768,7 @@
     "path-is-absolute": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
-      "dev": true
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
     },
     "path-is-inside": {
       "version": "1.0.2",
@@ -7960,14 +8779,12 @@
     "path-key": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
-      "dev": true
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
     },
     "path-parse": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
-      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
-      "dev": true
+      "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
     },
     "path-to-regexp": {
       "version": "0.1.7",
@@ -8047,6 +8864,16 @@
         "find-up": "^3.0.0"
       }
     },
+    "plist": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
+      "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
+      "requires": {
+        "base64-js": "^1.2.3",
+        "xmlbuilder": "^9.0.7",
+        "xmldom": "0.1.x"
+      }
+    },
     "portfinder": {
       "version": "1.0.21",
       "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.21.tgz",
@@ -8174,6 +9001,11 @@
       "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
       "dev": true
     },
+    "promise-polyfill": {
+      "version": "8.1.3",
+      "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.1.3.tgz",
+      "integrity": "sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g=="
+    },
     "promise-retry": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz",
@@ -8192,6 +9024,41 @@
         }
       }
     },
+    "properties-parser": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz",
+      "integrity": "sha1-ExbpU5/7/ZOEXjabIRAiq9R4dxo=",
+      "requires": {
+        "string.prototype.codepointat": "^0.2.0"
+      }
+    },
+    "protobufjs": {
+      "version": "6.8.8",
+      "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz",
+      "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==",
+      "requires": {
+        "@protobufjs/aspromise": "^1.1.2",
+        "@protobufjs/base64": "^1.1.2",
+        "@protobufjs/codegen": "^2.0.4",
+        "@protobufjs/eventemitter": "^1.1.0",
+        "@protobufjs/fetch": "^1.1.0",
+        "@protobufjs/float": "^1.0.2",
+        "@protobufjs/inquire": "^1.1.0",
+        "@protobufjs/path": "^1.1.2",
+        "@protobufjs/pool": "^1.1.0",
+        "@protobufjs/utf8": "^1.1.0",
+        "@types/long": "^4.0.0",
+        "@types/node": "^10.1.0",
+        "long": "^4.0.0"
+      },
+      "dependencies": {
+        "@types/node": {
+          "version": "10.14.16",
+          "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.16.tgz",
+          "integrity": "sha512-/opXIbfn0P+VLt+N8DE4l8Mn8rbhiJgabU96ZJ0p9mxOkIks5gh6RUnpHak7Yh0SFkyjO/ODbxsQQPV2bpMmyA=="
+        }
+      }
+    },
     "protoduck": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz",
@@ -8434,8 +9301,7 @@
     "q": {
       "version": "1.4.1",
       "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
-      "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
-      "dev": true
+      "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4="
     },
     "qjobs": {
       "version": "1.2.0",
@@ -8784,6 +9650,14 @@
         "signal-exit": "^3.0.2"
       }
     },
+    "resumer": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
+      "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=",
+      "requires": {
+        "through": "~2.3.4"
+      }
+    },
     "ret": {
       "version": "0.1.15",
       "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
@@ -8850,8 +9724,7 @@
     "safe-buffer": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-      "dev": true
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
     },
     "safe-regex": {
       "version": "1.1.0",
@@ -8865,8 +9738,7 @@
     "safer-buffer": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-      "dev": true
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
     },
     "sass": {
       "version": "1.22.2",
@@ -9177,7 +10049,6 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
       "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
-      "dev": true,
       "requires": {
         "shebang-regex": "^1.0.0"
       }
@@ -9185,8 +10056,12 @@
     "shebang-regex": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
-      "dev": true
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+    },
+    "shelljs": {
+      "version": "0.5.3",
+      "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz",
+      "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM="
     },
     "signal-exit": {
       "version": "3.0.2",
@@ -9861,6 +10736,21 @@
         }
       }
     },
+    "string.prototype.codepointat": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz",
+      "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg=="
+    },
+    "string.prototype.trim": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz",
+      "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=",
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.5.0",
+        "function-bind": "^1.0.2"
+      }
+    },
     "string_decoder": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -9874,7 +10764,6 @@
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
       "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-      "dev": true,
       "requires": {
         "ansi-regex": "^2.0.0"
       }
@@ -9882,8 +10771,7 @@
     "strip-bom": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
-      "dev": true
+      "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
     },
     "strip-eof": {
       "version": "1.0.0",
@@ -9972,6 +10860,36 @@
       "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
       "dev": true
     },
+    "tape": {
+      "version": "4.11.0",
+      "resolved": "https://registry.npmjs.org/tape/-/tape-4.11.0.tgz",
+      "integrity": "sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA==",
+      "requires": {
+        "deep-equal": "~1.0.1",
+        "defined": "~1.0.0",
+        "for-each": "~0.3.3",
+        "function-bind": "~1.1.1",
+        "glob": "~7.1.4",
+        "has": "~1.0.3",
+        "inherits": "~2.0.4",
+        "minimist": "~1.2.0",
+        "object-inspect": "~1.6.0",
+        "resolve": "~1.11.1",
+        "resumer": "~0.0.0",
+        "string.prototype.trim": "~1.1.2",
+        "through": "~2.3.8"
+      },
+      "dependencies": {
+        "resolve": {
+          "version": "1.11.1",
+          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
+          "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
+          "requires": {
+            "path-parse": "^1.0.6"
+          }
+        }
+      }
+    },
     "tar": {
       "version": "4.4.10",
       "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz",
@@ -10035,8 +10953,7 @@
     "through": {
       "version": "2.3.8",
       "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
-      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
-      "dev": true
+      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
     },
     "through2": {
       "version": "2.0.5",
@@ -10295,6 +11212,11 @@
       "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
       "dev": true
     },
+    "underscore": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz",
+      "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg=="
+    },
     "union-value": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@@ -10356,8 +11278,7 @@
     "universalify": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
-      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
-      "dev": true
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
     },
     "unpipe": {
       "version": "1.0.0",
@@ -11527,7 +12448,8 @@
             "ansi-regex": {
               "version": "2.1.1",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "aproba": {
               "version": "1.2.0",
@@ -11555,6 +12477,7 @@
               "version": "1.1.11",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "balanced-match": "^1.0.0",
                 "concat-map": "0.0.1"
@@ -11569,7 +12492,8 @@
             "code-point-at": {
               "version": "1.1.0",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "concat-map": {
               "version": "0.0.1",
@@ -11580,7 +12504,8 @@
             "console-control-strings": {
               "version": "1.1.0",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "core-util-is": {
               "version": "1.0.2",
@@ -11697,7 +12622,8 @@
             "inherits": {
               "version": "2.0.3",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "ini": {
               "version": "1.3.5",
@@ -11709,6 +12635,7 @@
               "version": "1.0.0",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "number-is-nan": "^1.0.0"
               }
@@ -11723,6 +12650,7 @@
               "version": "3.0.4",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "brace-expansion": "^1.1.7"
               }
@@ -11730,12 +12658,14 @@
             "minimist": {
               "version": "0.0.8",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "minipass": {
               "version": "2.3.5",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "safe-buffer": "^5.1.2",
                 "yallist": "^3.0.0"
@@ -11754,6 +12684,7 @@
               "version": "0.5.1",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "minimist": "0.0.8"
               }
@@ -11834,7 +12765,8 @@
             "number-is-nan": {
               "version": "1.0.1",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "object-assign": {
               "version": "4.1.1",
@@ -11846,6 +12778,7 @@
               "version": "1.4.0",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "wrappy": "1"
               }
@@ -11931,7 +12864,8 @@
             "safe-buffer": {
               "version": "5.1.2",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "safer-buffer": {
               "version": "2.1.2",
@@ -11967,6 +12901,7 @@
               "version": "1.0.2",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "code-point-at": "^1.0.0",
                 "is-fullwidth-code-point": "^1.0.0",
@@ -11986,6 +12921,7 @@
               "version": "3.0.1",
               "bundled": true,
               "dev": true,
+              "optional": true,
               "requires": {
                 "ansi-regex": "^2.0.0"
               }
@@ -12029,12 +12965,14 @@
             "wrappy": {
               "version": "1.0.2",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             },
             "yallist": {
               "version": "3.0.3",
               "bundled": true,
-              "dev": true
+              "dev": true,
+              "optional": true
             }
           }
         },
@@ -12153,7 +13091,6 @@
       "version": "0.7.3",
       "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
       "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
-      "dev": true,
       "requires": {
         "http-parser-js": ">=0.4.0 <0.4.11",
         "safe-buffer": ">=5.1.0",
@@ -12163,8 +13100,12 @@
     "websocket-extensions": {
       "version": "0.1.3",
       "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
-      "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
-      "dev": true
+      "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg=="
+    },
+    "whatwg-fetch": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
+      "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
     },
     "when": {
       "version": "3.6.4",
@@ -12176,7 +13117,6 @@
       "version": "1.3.1",
       "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
       "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
-      "dev": true,
       "requires": {
         "isexe": "^2.0.0"
       }
@@ -12187,6 +13127,11 @@
       "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
       "dev": true
     },
+    "window-size": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+      "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY="
+    },
     "wordwrap": {
       "version": "0.0.3",
       "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
@@ -12215,7 +13160,6 @@
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
       "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
-      "dev": true,
       "requires": {
         "string-width": "^1.0.1",
         "strip-ansi": "^3.0.1"
@@ -12225,7 +13169,6 @@
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
           "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-          "dev": true,
           "requires": {
             "number-is-nan": "^1.0.0"
           }
@@ -12234,7 +13177,6 @@
           "version": "1.0.2",
           "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
           "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-          "dev": true,
           "requires": {
             "code-point-at": "^1.0.0",
             "is-fullwidth-code-point": "^1.0.0",
@@ -12246,8 +13188,7 @@
     "wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
-      "dev": true
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
     },
     "ws": {
       "version": "6.2.1",
@@ -12279,8 +13220,17 @@
     "xmlbuilder": {
       "version": "9.0.7",
       "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
-      "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
-      "dev": true
+      "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
+    },
+    "xmldom": {
+      "version": "0.1.27",
+      "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
+      "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk="
+    },
+    "xmlhttprequest": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz",
+      "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw="
     },
     "xmlhttprequest-ssl": {
       "version": "1.5.5",
diff --git a/package.json b/package.json
index 15e61f5..66c8e59 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
         "@angular/common": "~8.1.2",
         "@angular/compiler": "~8.1.2",
         "@angular/core": "~8.1.2",
+        "@angular/fire": "^5.2.1",
         "@angular/forms": "~8.1.2",
         "@angular/platform-browser": "~8.1.2",
         "@angular/platform-browser-dynamic": "~8.1.2",
@@ -28,8 +29,9 @@
         "@ionic-native/splash-screen": "^5.0.0",
         "@ionic-native/status-bar": "^5.12.0",
         "@ionic/angular": "^4.7.1",
+        "@ionic/storage": "^2.2.0",
         "agm-direction": "^0.7.8",
-        "cordova-android": "7.1.4",
+        "cordova-android": "^8.0.0",
         "cordova-plugin-device": "^2.0.2",
         "cordova-plugin-geolocation": "4.0.2",
         "cordova-plugin-ionic-keyboard": "^2.1.3",
@@ -38,7 +40,9 @@
         "cordova-plugin-splashscreen": "^5.0.2",
         "cordova-plugin-statusbar": "^2.4.2",
         "cordova-plugin-whitelist": "^1.3.3",
+        "cordova-sqlite-storage": "^3.3.0",
         "core-js": "^2.5.4",
+        "firebase": "^6.4.0",
         "rxjs": "~6.5.1",
         "tslib": "^1.9.0",
         "zone.js": "~0.9.1"
@@ -83,10 +87,11 @@
             "cordova-plugin-geolocation": {
                 "GEOLOCATION_USAGE_DESCRIPTION": "To locate you"
             },
-            "cordova-plugin-nativegeocoder": {}
+            "cordova-plugin-nativegeocoder": {},
+            "cordova-sqlite-storage": {}
         },
         "platforms": [
             "android"
         ]
     }
-}
+}
\ No newline at end of file
diff --git a/resources/README.md b/resources/README.md
deleted file mode 100644
index 46c696e..0000000
--- a/resources/README.md
+++ /dev/null
@@ -1,8 +0,0 @@
-These are Cordova resources. You can replace icon.png and splash.png and run
-`ionic cordova resources` to generate custom icons and splash screens for your
-app. See `ionic cordova resources --help` for details.
-
-Cordova reference documentation:
-
-- Icons: https://cordova.apache.org/docs/en/latest/config_ref/images.html
-- Splash Screens: https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-splashscreen/
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 46187b2..4c81842 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -15,10 +15,8 @@ export class AppComponent {
     private splashScreen: SplashScreen,
     private statusBar: StatusBar
   ) {
-    
     this.initializeApp();
   }
-  
 
 
   initializeApp() {
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index a59e868..da3c17d 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -6,10 +6,23 @@ import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
 import { SplashScreen } from '@ionic-native/splash-screen/ngx';
 import { StatusBar } from '@ionic-native/status-bar/ngx';
 import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { IonicStorageModule } from '@ionic/storage';
+
+
 
 import { AppRoutingModule } from './app-routing.module';
 import { AppComponent } from './app.component';
 
+import { AngularFireModule } from '@angular/fire';
+import { AngularFirestore } from '@angular/fire/firestore';
+import { AngularFirestoreModule } from '@angular/fire/firestore';
+import { AngularFireAuthModule } from '@angular/fire/auth';
+
+import { environment } from '../environments/environment';
+import { ServiceService } from './../config/service.service';
+import { AuthService } from './../config/auth.service';
+import { from } from 'rxjs';
+
 
 
 
@@ -19,14 +32,19 @@ import { AppComponent } from './app.component';
   entryComponents: [],
   imports: [BrowserModule,
      IonicModule.forRoot(),
+     IonicStorageModule.forRoot(),
       AppRoutingModule,
       BrowserAnimationsModule,
-    
+      AngularFireModule.initializeApp(environment.firebase),
+      AngularFireAuthModule,
+      AngularFirestoreModule
   ],
   providers: [
     StatusBar,
     SplashScreen,
-    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
+    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy },
+    ServiceService,
+    AuthService
   ],
   bootstrap: [AppComponent]
 })
diff --git a/src/app/cart/cart.page.html b/src/app/cart/cart.page.html
index 90eb42e..35a7e65 100644
--- a/src/app/cart/cart.page.html
+++ b/src/app/cart/cart.page.html
@@ -26,17 +26,17 @@
                 </ul>
             </div>
             <div class="cart_content">
-                <ion-slides pager="false" [options]="cart_wizard" (ionSlideDidChange)="slideChanged()">
+                <ion-slides pager="false" [options]="cartwizard" (ionSlideDidChange)="slideChanged()">
                     <ion-slide>
-                        <div class="cart_list">
-                            <ul>
-                                <li>
+                        <div class="cart_list" *ngIf="cartService.carts">
+                            <ul *ngIf="cartService.carts.length > 0">
+                                <li *ngFor="let carts of cartService.carts">
                                     <div class="close"></div>
-                                    <div class="cart_image"></div>
+                                    <div class="cart_image"><img [src]="carts.image" onerror="this.src=''" /></div>
                                     <div class="cart_detail">
-                                        <h4>European Style V neck</h4>
-                                        <h4>Green, Red</h4>
-                                        <h5>AU$99.00</h5>
+                                        <h4>{{carts.prodName}}</h4>
+                                        <h4>{{carts.size}}, {{carts.color}}</h4>
+                                        <h5>A$ {{carts.price}}</h5>
                                     </div>
                                     <div class="cart_count">
                                         <div class="add" (click)="addCount()">+</div>
@@ -44,45 +44,15 @@
                                         <div class="remove" (click)="removeCount()">-</div>
                                     </div>
                                     <div class="clear"></div>
-                                </li>
-                                <li>
-                                    <div class="close"></div>
-                                    <div class="cart_image"></div>
-                                    <div class="cart_detail">
-                                        <h4>European Style V neck</h4>
-                                        <h4>Green, Red</h4>
-                                        <h5>AU$99.00</h5>
-                                    </div>
-                                    <div class="cart_count">
-                                        <div class="add" (click)="addCount()">+</div>
-                                        <div class="count">{{count}}</div>
-                                        <div class="remove" (click)="removeCount()">-</div>
-                                    </div>
-                                    <div class="clear"></div>
-                                </li>
-                                <li>
-                                    <div class="close"></div>
-                                    <div class="cart_image"></div>
-                                    <div class="cart_detail">
-                                        <h4>European Style V neck</h4>
-                                        <h4>Green, Red</h4>
-                                        <h5>AU$99.00</h5>
-                                    </div>
-                                    <div class="cart_count">
-                                        <div class="add" (click)="addCount()">+</div>
-                                        <div class="count">{{count}}</div>
-                                        <div class="remove" (click)="removeCount()">-</div>
-                                    </div>
-                                    <div class="clear"></div>
-                                </li>
+                                </li>                                
                             </ul>
-                            <div class="total_div">
+                            <div class="total_div" *ngIf="cartService.cartTotal">
                                 <ion-row>
                                     <ion-col>
                                         <p class="textLeft">Total Price:</p>
                                     </ion-col>
                                     <ion-col>
-                                        <p class="textRight">AU$ 239.00</p>
+                                        <p class="textRight">A$ {{cartService.cartTotal}}</p>
                                     </ion-col>
                                 </ion-row>
                             </div>
@@ -92,43 +62,21 @@
                         <div class="checkout_list">
                             <h5>
                                 <span class="floatLeft">ITEMS</span>
-                                <span class="floatRight">AU$239.00</span>
+                                <span class="floatRight" *ngIf="cartService.cartTotal">A$ {{cartService.cartTotal}}</span>
                                 <div class="clear"></div>
                             </h5>
-                            <ion-grid class="p0">
-                                <ion-row>
+                            <ion-grid class="p0" *ngIf="cartService.carts && cartService.carts.length > 0">
+                                <ion-row *ngFor="let carts of cartService.carts">
                                     <ion-col size="6" class="p0">
-                                        <h6 class="textLeft">European Style V Neck</h6>
+                                        <h6 class="textLeft">{{carts.prodName}}</h6>
                                     </ion-col>
                                     <ion-col size="2" class="p0">
                                         <h6 class="textRight"><strong>1 X</strong></h6>
                                     </ion-col>
                                     <ion-col size="4" class="p0">
-                                        <h6 class="textRight"><strong>AU$99.00</strong></h6>
-                                    </ion-col>
-                                </ion-row>
-                                <ion-row>
-                                    <ion-col size="6" class="p0">
-                                        <h6 class="textLeft">Simple Night Wear black doted</h6>
-                                    </ion-col>
-                                    <ion-col size="2" class="p0">
-                                        <h6 class="textRight"><strong>3 X</strong></h6>
-                                    </ion-col>
-                                    <ion-col size="4" class="p0">
-                                        <h6 class="textRight"><strong>AU$60.00</strong></h6>
+                                        <h6 class="textRight"><strong>A$ {{carts.price}}</strong></h6>
                                     </ion-col>
-                                </ion-row>
-                                <ion-row>
-                                    <ion-col size="6" class="p0">
-                                        <h6 class="textLeft">European Style V Neck</h6>
-                                    </ion-col>
-                                    <ion-col size="2" class="p0">
-                                        <h6 class="textRight"><strong>3 X</strong></h6>
-                                    </ion-col>
-                                    <ion-col size="4" class="p0">
-                                        <h6 class="textRight"><strong>AU$90.00</strong></h6>
-                                    </ion-col>
-                                </ion-row>
+                                </ion-row>                                
                             </ion-grid>
                             <hr>
                             <h5>
@@ -192,7 +140,7 @@
                             <h4>Order Placed</h4>
                             <p>June 26th 2019, 03:00 PM</p>
                             <h3>The product will be delivered in</h3>
-                            <h1>10:00 Mins</h1>
+                            <h1>60:00 Mins</h1>
                             <button class="view_order" (click)="goToPage('myorder')">VIEW ORDERS</button><br>
                             <button class="home_btn" (click)="goToPage('home')">HOME</button>
                         </div>
@@ -200,14 +148,14 @@
                 </ion-slides>
             </div>
         </div>
-        <div class="footer_btn" [hidden]="currentIndex != 0" (click)="next()">
+        <div class="footer_btn" *ngIf="cartService.carts && cartService.carts.length > 0" [hidden]="currentIndex != 0" (click)="next(1)">
             CHECKOUT
         </div>
-        <div class="footer_btn" [hidden]="currentIndex != 1" (click)="next()">
+        <div class="footer_btn" *ngIf="cartService.carts && cartService.carts.length > 0" [hidden]="currentIndex != 1" (click)="next(2);">
             PAY
         </div>
-        <div class="footer_btn" [hidden]="currentIndex != 2" (click)="goToPage('orderplaced')">
+        <!-- <div class="footer_btn" [hidden]="currentIndex != 2" (click)="goToPage('orderplaced')">
             FINISH
-        </div>
+        </div> -->
     </div>
 </ion-content>
\ No newline at end of file
diff --git a/src/app/cart/cart.page.scss b/src/app/cart/cart.page.scss
index 5d01eeb..b7b2a6d 100644
--- a/src/app/cart/cart.page.scss
+++ b/src/app/cart/cart.page.scss
@@ -179,6 +179,8 @@
             }
             .cart_list {
                 width: 100%;
+                height: calc(100vh - 200px);
+                overflow: scroll;
                 ul {
                     margin: 0px;
                     padding: 10px;
diff --git a/src/app/cart/cart.page.ts b/src/app/cart/cart.page.ts
index 86d24b1..d863e64 100644
--- a/src/app/cart/cart.page.ts
+++ b/src/app/cart/cart.page.ts
@@ -2,6 +2,8 @@ import { Component, OnInit, ViewChild } from '@angular/core';
 import { IonSlides } from '@ionic/angular';
 import { Location } from '@angular/common';
 import { Router, ActivatedRoute } from '@angular/router';
+import { CartsService } from './../../config/cart.service';
+import { OrdersService } from './../../config/order.service';
 
 
 @Component({
@@ -13,22 +15,31 @@ export class CartPage implements OnInit {
 
   @ViewChild(IonSlides, { static: false }) slides: IonSlides;
   currentIndex: any;
-  count:any;
+  count: any;
+  cartwizard = {
+    initialSlide: 0,
+    speed: 1000,
+    allowTouchMove: false
+  };
 
   constructor(
     private router: Router,
     private route: ActivatedRoute,
-    private location: Location
-  ) { 
+    private location: Location,
+    public cartService: CartsService,
+    public orderService: OrdersService
+  ) {
 
     this.currentIndex = 0;
-    this.count = 0;
+    this.count = 1;
+    this.cartService.cartList();
   }
 
   ngOnInit() {
   }
 
- 
+
+
   goToPage(path, data = null) {
     this.router.navigateByUrl(path, { queryParams: data });
     document.body.scrollTop = document.documentElement.scrollTop = 0;
@@ -36,30 +47,33 @@ export class CartPage implements OnInit {
 
   goBack() {
     this.location.back();
-  }  
-  
-  cart_wizard = {
-    initialSlide: 0,
-    speed: 1000,
-    allowTouchMove: false
-  };
+  }
 
 
-  next() {
-    this.slides.slideNext();
+
+  next(index: number = null) {
+    console.log(index);
+    if (index === 2) {
+      const state = this.orderService.checkOut(this.cartService.carts).then((data) => {
+        console.log('ready for slide');
+        this.slides.slideNext();
+      });
+    } else {
+      this.slides.slideNext();
+    }
   }
 
   prev() {
     this.slides.slidePrev();
   }
 
-  addCount(){
-    this.count = this.count+1
+  addCount() {
+    // this.count = this.count+1
   }
 
   removeCount() {
-    this.count = this.count - 1;
-    if(this.count <0){
+    // this.count = this.count - 1;
+    if (this.count <0){
       this.count = 0;
     }
   }
@@ -69,8 +83,16 @@ export class CartPage implements OnInit {
     this.slides.getActiveIndex().then(index => {
       this.currentIndex = index;
       console.log(this.currentIndex);
-
     });
   } 
 
+  sliderChange() {
+    this.orderService.checkout.subscribe(state => {
+      if (state) {
+        this.next();
+        this.orderService.checkout.next(false);
+      }
+    });
+  }
+
 }
diff --git a/src/app/catagory/catagory.page.html b/src/app/catagory/catagory.page.html
index 767df45..c69271b 100644
--- a/src/app/catagory/catagory.page.html
+++ b/src/app/catagory/catagory.page.html
@@ -1,5 +1,5 @@
 <div class="nav_header">
-    <button class="nav_btn nav_back floatLeft">
+    <button class="nav_btn nav_back floatLeft" (click)="goBack()">
     <img src="../assets/Group22_2.png">
   </button>
     <div class="nav_title floatLeft">
diff --git a/src/app/catagory/catagory.page.ts b/src/app/catagory/catagory.page.ts
index 015d9d9..352f670 100644
--- a/src/app/catagory/catagory.page.ts
+++ b/src/app/catagory/catagory.page.ts
@@ -1,4 +1,6 @@
 import { Component, OnInit } from '@angular/core';
+import { Router, ActivatedRoute } from '@angular/router';
+import { Location } from '@angular/common';
 
 @Component({
   selector: 'app-catagory',
@@ -7,9 +9,21 @@ import { Component, OnInit } from '@angular/core';
 })
 export class CatagoryPage implements OnInit {
 
-  constructor() { }
+  constructor(
+    public router: Router,
+    public location: Location
+  ) { }
 
   ngOnInit() {
   }
 
+  goToPage(path, data = null) {
+    this.router.navigateByUrl(path, { queryParams: data });
+    document.body.scrollTop = document.documentElement.scrollTop = 0;
+  }
+
+  goBack() {
+    this.location.back();
+  }
+
 }
diff --git a/src/app/home/home.page.html b/src/app/home/home.page.html
index 11c50c1..7cec067 100644
--- a/src/app/home/home.page.html
+++ b/src/app/home/home.page.html
@@ -24,21 +24,21 @@
             </div>
             <ion-slides pager="true">
                 <ion-slide>
-                    <div class="banner_slide" (click)="goToPage('productlist')">
+                    <div class="banner_slide" (click)="goToPage('storelist')">
                         <h5>Lulu Fashion</h5>
                         <p>Women Fashion</p>
                     </div>
                     <img src="../assets/portrait-smiling-woman-with-shopping-bags-smartphone_1262-14313_2.png">
                 </ion-slide>
                 <ion-slide>
-                    <div class="banner_slide" (click)="goToPage('productlist')">
+                    <div class="banner_slide" (click)="goToPage('storelist')">
                         <h5>Lulu Fashion</h5>
                         <p>Women Fashion</p>
                     </div>
                     <img src="../assets/portrait-smiling-woman-with-shopping-bags-smartphone_1262-14313_2.png">
                 </ion-slide>
                 <ion-slide>
-                    <div class="banner_slide" (click)="goToPage('productlist')">
+                    <div class="banner_slide" (click)="goToPage('storelist')">
                         <h5>Lulu Fashion</h5>
                         <p>Women Fashion</p>
                     </div>
diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts
index a1eb3d3..be4307b 100644
--- a/src/app/home/home.page.ts
+++ b/src/app/home/home.page.ts
@@ -23,8 +23,9 @@ export class HomePage implements OnInit {
   isShow = false;
 
   slideOpts = {
-    slidesPerView:1.5
-  }
+    slidesPerView: 1.5
+  };
+
   constructor(
     private router: Router,
     private route: ActivatedRoute,
@@ -47,5 +48,4 @@ export class HomePage implements OnInit {
     this.isShow = !this.isShow;
   }
 
- 
 }
diff --git a/src/app/landing/landing.page.ts b/src/app/landing/landing.page.ts
index 07eaf24..c0811c6 100644
--- a/src/app/landing/landing.page.ts
+++ b/src/app/landing/landing.page.ts
@@ -1,6 +1,7 @@
 import { Component, OnInit, ViewChild, } from '@angular/core';
 import { IonSlides } from '@ionic/angular';
 import { Router, ActivatedRoute } from '@angular/router';
+import { ServiceService } from './../../config/service.service';
 
 @Component({
   selector: 'app-landing',
@@ -9,25 +10,35 @@ import { Router, ActivatedRoute } from '@angular/router';
 })
 export class LandingPage implements OnInit {
 
+  slideOpts = {
+    initialSlide: 0,
+    speed: 1000,
+    allowTouchMove: false
+  };
+
   @ViewChild(IonSlides, { static: false })slides: IonSlides;
   currentIndex: any;
-  constructor(private router: Router, private route: ActivatedRoute) { }
+  constructor(
+    private router: Router,
+    private route: ActivatedRoute,
+    private service: ServiceService
+    ) {
+      this.service.get('landing').then((data) => {
+        if (data === true) {
+          this.goToPage('login');
+        }
+      });
+    }
 
   ngOnInit() {
   }
 
   goToPage(path, data = null) {
+    this.service.set('landing', true);
     this.router.navigateByUrl(path, { queryParams: data });
     document.body.scrollTop = document.documentElement.scrollTop = 0;
   }
 
-  slideOpts = {
-    initialSlide: 0,
-    speed: 1000,
-    allowTouchMove: false
-  };
-
-
   next() {
     this.slides.slideNext();
   }
@@ -42,6 +53,6 @@ export class LandingPage implements OnInit {
       console.log(this.currentIndex);
 
     });
-  } 
+  }
 
 }
diff --git a/src/app/login/login.page.html b/src/app/login/login.page.html
index 15f0ef0..eaf6fac 100644
--- a/src/app/login/login.page.html
+++ b/src/app/login/login.page.html
@@ -15,13 +15,13 @@
         </div>
         <div class="form_div">
             <div class="row">
-                <input class="" type="text" placeholder="User Name/ Email">
+                <input class="" type="text" placeholder="User Name/ Email" #userName required>
             </div>
             <div class="row">
-                <input class="" type="password" placeholder="Password">
+                <input class="" type="password" placeholder="Password" #userPassword required>
             </div>
             <div class="row">
-                <button class="login_btn" (click)="goToPage('home')">LOGIN</button>
+                <button class="login_btn" (click)="authService.SignIn(userName.value, userPassword.value)">LOGIN</button>
             </div>
             <div class="row">
                 <hr>
diff --git a/src/app/login/login.page.ts b/src/app/login/login.page.ts
index 24aaaca..44530c1 100644
--- a/src/app/login/login.page.ts
+++ b/src/app/login/login.page.ts
@@ -1,6 +1,7 @@
 import { Component, OnInit } from '@angular/core';
 import { Router, ActivatedRoute } from '@angular/router';
-import { async } from "q";
+import { AuthService } from './../../config/auth.service';
+import { async } from 'q';
 
 @Component({
   selector: 'app-login',
@@ -9,7 +10,11 @@ import { async } from "q";
 })
 export class LoginPage implements OnInit {
 
-  constructor(private router: Router, private route: ActivatedRoute) { }
+  constructor(
+    private router: Router,
+    private route: ActivatedRoute,
+    public authService: AuthService
+    ) { }
 
   ngOnInit() {
   }
diff --git a/src/app/myorder/myorder.page.html b/src/app/myorder/myorder.page.html
index da70bbb..b98e59f 100644
--- a/src/app/myorder/myorder.page.html
+++ b/src/app/myorder/myorder.page.html
@@ -7,25 +7,25 @@
     <div class="clear"></div>
 </div>
 <ion-content>
-    <div class="myorder_wrapper">
-        <ul>
-            <li>
-                <div class="order_image"></div>
+    <div class="myorder_wrapper" *ngIf="myorder.orders">
+        <ul *ngIf="myorder.orders.length > 0">
+            <li *ngFor="let order of myorder.orders; let i = index">
+                <div class="order_image"><img [src]="order.image" onerror="" /></div>
                 <div class="order_detail">
-                    <h5 class="floatLeft">European Style V Neck</h5>
+                    <h5 class="floatLeft">{{order.prodName}}</h5>
                     <div class="clear"></div>
-                    <h5>Green, Small <span>3</span></h5>
-                    <p>AU$99.00</p>
+                    <h5>{{order.color}}, {{order.size}} <span>{{order.qty}}</span></h5>
+                    <p>{{order.amount}}</p>
                 </div>
                 <div class="order_other">
-                    <h6 class="floatRight">June 26th 2019</h6>
+                    <h6 class="floatRight">{{ order.bookDate.seconds * 1000 | date:'MMMM dd, y' }}</h6>
                     <div class="clear"></div>
-                    <button class="track_btn" (click)=" goToPage('trackorder')">TRACK</button>
+                    <button class="track_btn" *ngIf="order.orderStatus == 3" (click)="orderDetails(i)">TRACK</button>
                     <div class="clear"></div>
                 </div>
                 <div class="clear"></div>
             </li>
-            <li>
+            <!-- <li>
                 <div class="order_image"></div>
                 <div class="order_detail">
                     <h5 class="floatLeft">European Style V Neck</h5>
@@ -70,7 +70,7 @@
                     <div class="clear"></div>
                 </div>
                 <div class="clear"></div>
-            </li>
+            </li> -->
         </ul>
     </div>
 </ion-content>
\ No newline at end of file
diff --git a/src/app/myorder/myorder.page.ts b/src/app/myorder/myorder.page.ts
index 19e028e..3d899bf 100644
--- a/src/app/myorder/myorder.page.ts
+++ b/src/app/myorder/myorder.page.ts
@@ -1,6 +1,7 @@
 import { Component, OnInit } from '@angular/core';
 import { Location } from '@angular/common';
 import { Router, ActivatedRoute } from '@angular/router';
+import { MyordersService } from './../../config/myorder.service';
 
 @Component({
   selector: 'app-myorder',
@@ -12,7 +13,8 @@ export class MyorderPage implements OnInit {
   constructor(
     private router: Router,
     private route: ActivatedRoute,
-    private location: Location
+    private location: Location,
+    public myorder: MyordersService
   ) { }
 
   ngOnInit() {
@@ -25,6 +27,12 @@ export class MyorderPage implements OnInit {
 
   goBack() {
     this.location.back();
-  } 
+  }
+
+  orderDetails(index: number) {
+      this.myorder.trackOrder(this.myorder.orders[index]);
+      this.router.navigateByUrl('trackorder');
+      document.body.scrollTop = document.documentElement.scrollTop = 0;
+  }
 
 }
diff --git a/src/app/productdetail/productdetail.page.html b/src/app/productdetail/productdetail.page.html
index ec45df6..7abf637 100644
--- a/src/app/productdetail/productdetail.page.html
+++ b/src/app/productdetail/productdetail.page.html
@@ -9,75 +9,45 @@
     <div class="clear"></div>
 </div>
 <ion-content>
-    <div class="product_detail_wrapper">
+    <div class="product_detail_wrapper" *ngIf="product">
         <div class="product_banner">
             <div class="fav_icon"></div>
-            <div class="featured_badge">Featured</div>
-            <img src="../assets/model1@3x.jpg">
+            <div class="featured_badge" *ngIf="product.featured">Featured</div>
+            <img [src]="product.image" onerror="this.src='../assets/model1@3x.jpg'">
         </div>
         <div class="product_header">
             <ion-row>
                 <ion-col size="8">
-                    <h3>European style V Neck</h3>
-                    <p><strong><span><img src="../assets/Path61_2.png"></span>4</strong>Lulu Fashion, Women's Fashion
+                    <h3>{{product.prodName}}</h3>
+                    <p><strong><span><img src="../assets/Path61_2.png"></span>4</strong>Lulu Fashion, {{product.category}}
                     </p>
                 </ion-col>
                 <ion-col size="4">
-                    <h5>AU$99.00</h5>
+                    <h5>A$ {{product.price}}</h5>
+                    <p><span class="offer" *ngIf="product.discount > 0">-{{product.discount}}%</span></p>
                 </ion-col>
             </ion-row>
         </div>
         <div class="product_div_content">
             <h5>Size</h5>
             <div class="size_div">
-                <ul>
+                <ul *ngIf="product.size">
                     <ion-slides pager="false" [options]="slideOpts">
-                        <ion-slide>
-                            <li>
-                                <button id="custom_check_button">
-                              <label>
-                                <input id="1" type="radio" name="services" value="">
-                                <p>Small</p>
-                              </label>
-                            </button>
-                            </li>
-                        </ion-slide>
-                        <ion-slide>
-                            <li>
-                                <button id="custom_check_button">
-                              <label>
-                                <input id="2" type="radio" name="services" value="">
-                                <p>Medium</p>
-                              </label>
-                            </button>
-                            </li>
-                        </ion-slide>
-                        <ion-slide>
-                            <li>
-                                <button id="custom_check_button">
-                               <label>
-                                 <input id="3" type="radio" name="services" value="">
-                                 <p>Large</p>
-                               </label>
-                             </button>
-                            </li>
-                        </ion-slide>
-                        <ion-slide>
+                        <ion-slide *ngFor="let size of product.size; let i = index">
                             <li>
                                 <button id="custom_check_button">
                               <label>
-                                <input id="4" type="radio" name="services" value="">
-                                <p>Xtra Large</p>
+                                <input id="{{size.sizeId}}" type="radio" name="services" value="{{size.sizeId}}" (click)="cartService.choose_size(size.sizeName)" [checked]="i==0">
+                                <p>{{size.sizeName}}</p>
                               </label>
                             </button>
                             </li>
-                        </ion-slide>
+                        </ion-slide>                        
                     </ion-slides>
                 </ul>
             </div>
             <h5>Description</h5>
-            <p>Brand - SMART SHOP Fabric- Net Work - Embroidered Colour- White Occasion - Wedding,Festival Wash Care- Normal Wash Type- Anarkali Sleeve- Full Sleeve Dupatta- No Neck- Round This product make you more beautiful and pretty from other. This
-                product has good quality material. Buy only original that product with us for get satisfy. Buy only original Buy only that
+            <p>{{product.prodDesc}}
             </p>
             <h5>
                 <span class="floatLeft">Reviews</span><span class="floatRight" (click)="goToPage('reviewlist')">MORE</span>
@@ -206,6 +176,6 @@
             <button class="fav"></button>
             <button class="cart" (click)="goToPage('cart')"></button>
         </div>
-        <div class="footer_btn" (click)="goToPage('cart')">BUY NOW</div>
+        <div class="footer_btn" (click)="cartService.buyNow(product)">BUY NOW</div>
     </div>
 </ion-content>
\ No newline at end of file
diff --git a/src/app/productdetail/productdetail.page.ts b/src/app/productdetail/productdetail.page.ts
index d0bd968..022daaf 100644
--- a/src/app/productdetail/productdetail.page.ts
+++ b/src/app/productdetail/productdetail.page.ts
@@ -1,6 +1,11 @@
 import { Component, OnInit } from '@angular/core';
 import { Location } from '@angular/common';
 import { Router, ActivatedRoute } from '@angular/router';
+import { Products } from './../../config/services/product';
+import { Order } from './../../config/services/order';
+import { CartsService } from './../../config/cart.service';
+import { ProductsService } from './../../config/products.service';
+import { map } from 'rxjs/operators';
 
 @Component({
   selector: 'app-productdetail',
@@ -8,22 +13,63 @@ import { Router, ActivatedRoute } from '@angular/router';
   styleUrls: ['./productdetail.page.scss'],
 })
 export class ProductdetailPage implements OnInit {
+  product: Products;
+  order: Order;
 
   slideOpts = {
     slidesPerView: 3.5
-  }
+  };
 
   relatedProd = {
     slidesPerView: 2
-  }
+  };
 
   constructor(
     private router: Router,
     private route: ActivatedRoute,
-    private location: Location
-  ) { }
+    private location: Location,
+    private cartService: CartsService,
+    private prodService: ProductsService
+  ) {
+  }
 
   ngOnInit() {
+    console.log('here');
+    const params = this.prodService.selItem;
+    if (params) {
+      const prod: Products = {
+          prodId: params.prodId,
+          prodName: params.prodName,
+          prodCode: params.prodCode,
+          prodDesc: params.prodDesc,
+          prodStatus: params.prodStatus,
+          brand: params.brand,
+          category: params.category,
+          color: params.color,
+          discount: params.discount,
+          featured: params.featured,
+          image: params.image,
+          price: params.price,
+          qty: params.qty,
+          shopper: params.shopper,
+          skuCode: params.skuCode,
+          status: params.status,
+          size: params.size,
+          currency: params.currency
+      };
+      this.product = prod;
+    } else {
+      this.product = undefined;
+    }
+    console.log(this.product);
+  }
+
+  stringObject(items: any) {
+    items.forEach(element => {
+      console.log(element.sizeId);
+      element = JSON.parse(element);
+      console.log(element);
+    });
   }
 
   goToPage(path, data = null) {
diff --git a/src/app/productlist/productlist.page.html b/src/app/productlist/productlist.page.html
index 49fcb6e..d31db8b 100644
--- a/src/app/productlist/productlist.page.html
+++ b/src/app/productlist/productlist.page.html
@@ -27,44 +27,17 @@
         <div class="product_title">
             Lulu Fashion
         </div>
-        <ul [class.grid_view]="onGrid">
-            <li (click)="goToPage('productdetail')">
+        <ul [class.grid_view]="onGrid" *ngIf="prodService.product && prodService.product.length > 0">
+            <li *ngFor="let product of prodService.product; let i = index" (click)="prodDetails(i)">
                 <div class="product_image">
-                    <img src="../assets/model1@3x.png">
+                    <img [src]="product.image" onerror="this.src='../assets/model1@3x.png'">
                     <div class="fav_icon">
                     </div>
+                    <div class="featured_badge" *ngIf="product.featured">Featured</div>
                 </div>
-                <h5>European Style V Neck</h5>
-                <p>AU$99.00</p>
-            </li>
-            <li (click)="goToPage('productdetail')">
-                <div class="product_image">
-                    <img src="../assets/Recommended-Ball-Gown-Floor-Length-V-Neck-Lace-Organza-Prom-Dress-OD850662@3x.png">
-                    <div class="fav_icon">
-                    </div>
-                </div>
-                <h5>European Style V Neck</h5>
-                <p>AU$99.00</p>
-            </li>
-            <li (click)="goToPage('productdetail')">
-                <div class="product_image">
-                    <img src="../assets/51oNoK8JdCL._UY550_@3x.png">
-                    <div class="fav_icon">
-                    </div>
-                </div>
-                <h5>European Style V Neck</h5>
-                <p>AU$99.00 <span class="offer">-8%</span></p>
-            </li>
-            <li (click)="goToPage('productdetail')">
-                <div class="product_image">
-                    <img src="../assets/DOGTS033-111-495x660@3x.png">
-                    <div class="fav_icon">
-                    </div>
-                    <div class="featured_badge">Featured</div>
-                </div>
-                <h5>European Style V Neck</h5>
-                <p>AU$99.00<span>AU$110.00</span></p>
-            </li>
+                <h5>{{product.prodName}}</h5>
+                <p>A$ {{product.price}}<span class="offer" *ngIf="product.discount > 0">-{{product.discount}}%</span></p>
+            </li> 
         </ul>
     </div>
     <div class="sort_wrappper" *ngIf="isShow" [@slideInOut]>
diff --git a/src/app/productlist/productlist.page.ts b/src/app/productlist/productlist.page.ts
index 227ac84..3c40dd6 100644
--- a/src/app/productlist/productlist.page.ts
+++ b/src/app/productlist/productlist.page.ts
@@ -1,7 +1,8 @@
 import { Component, OnInit } from '@angular/core';
 import { Location } from '@angular/common';
 import { trigger, transition, animate, style } from '@angular/animations';
-import { Router, ActivatedRoute } from '@angular/router';
+import { Router, ActivatedRoute, NavigationExtras } from '@angular/router';
+import { ProductsService } from './../../config/products.service';
 
 
 @Component({
@@ -28,10 +29,12 @@ export class ProductlistPage implements OnInit {
   constructor(
     private router: Router,
     private route: ActivatedRoute,
-    private location: Location
+    private location: Location,
+    public prodService: ProductsService
   ) { }
 
   ngOnInit() {
+    this.prodService.prodList();
   }
 
   goToPage(path, data = null) {
@@ -51,4 +54,10 @@ export class ProductlistPage implements OnInit {
   gridToggle(){
     this.onGrid = !this.onGrid;
   }
+
+  prodDetails(index: number) {
+    this.prodService.setProd(this.prodService.product[index]);
+    this.router.navigateByUrl('productdetail');
+    document.body.scrollTop = document.documentElement.scrollTop = 0;
+  }
 }
diff --git a/src/app/storelist/storelist.page.html b/src/app/storelist/storelist.page.html
index 21e3935..99b8589 100644
--- a/src/app/storelist/storelist.page.html
+++ b/src/app/storelist/storelist.page.html
@@ -1,5 +1,5 @@
 <div class="nav_header">
-    <button class="nav_btn nav_back floatLeft">
+    <button class="nav_btn nav_back floatLeft" (click)="goBack()">
     </button>
     <div class="nav_title floatLeft">
         <input class="search_bar" placeholder="Search here.. eg:shirts, retailers etc..."> </div>
@@ -15,7 +15,7 @@
         <div class="featured_slider">
             <ion-slides pager="false" [options]="slideOpts">
                 <ion-slide>
-                    <div class="feature_product" (click)="goToPage('productlist')">
+                    <div class="feature_product" (click)="goToPage('catagory')">
                         <img src="../assets/videoblocks-woman-using-phone-purchase-in-cool-sunglasses-and-black-dress-holding-black-shopping-bag-isolated-on-dark-background-in-black-friday-holid@3x.png">
                         <div class="feature_overlay">
                             <h5>Flames Fashion</h5>
@@ -24,7 +24,7 @@
                     </div>
                 </ion-slide>
                 <ion-slide>
-                    <div class="feature_product" (click)="goToPage('productlist')">
+                    <div class="feature_product" (click)="goToPage('catagory')">
                         <img src="../assets/business-casual-sneakers-men-1-1024x1024@3x.png">
                         <div class="feature_overlay">
                             <h5>Flames Fashion</h5>
@@ -33,7 +33,7 @@
                     </div>
                 </ion-slide>
                 <ion-slide>
-                    <div class="feature_product" (click)="goToPage('productlist')">
+                    <div class="feature_product" (click)="goToPage('catagory')">
                         <img src="../assets/videoblocks-woman-using-phone-purchase-in-cool-sunglasses-and-black-dress-holding-black-shopping-bag-isolated-on-dark-background-in-black-friday-holid@3x.png">
                         <div class="feature_overlay">
                             <h5>Flames Fashion</h5>
@@ -48,7 +48,7 @@
         </div>
         <div class="nearby_shop_list">
             <ul>
-                <li (click)="goToPage('productlist')">
+                <li (click)="goToPage('catagory')">
                     <div class="nearby_image">
                         <img src="../assets/5bf42c4220000057060294f8@3x.png">
                     </div>
@@ -64,7 +64,7 @@
                     </div>
                     <div class="clear"></div>
                 </li>
-                <li (click)="goToPage('productlist')">
+                <li (click)="goToPage('catagory')">
                     <div class="nearby_image">
                         <img src="../assets/Gentleman-style-menswear-mens-fashion@3x.png">
                     </div>
@@ -80,7 +80,7 @@
                     </div>
                     <div class="clear"></div>
                 </li>
-                <li (click)="goToPage('productlist')">
+                <li (click)="goToPage('catagory')">
                     <div class="nearby_image">
                         <img src="../assets/f484ec0330d1a103ac58341c9184df2a@3x.png">
                     </div>
@@ -97,7 +97,7 @@
                     <div class="clear"></div>
                 </li>
 
-                <li (click)="goToPage('productlist')">
+                <li (click)="goToPage('catagory')">
                     <div class="nearby_image">
                         <img src="../assets/2193bb91-3be9-4de9-96f4-4ce7aab8547e1558436499234-RARE-Women-Black-Printed-A-Line-Dress-6731558436495088-1@3x.png">
                     </div>
diff --git a/src/app/storelist/storelist.page.ts b/src/app/storelist/storelist.page.ts
index 0d31169..58693d1 100644
--- a/src/app/storelist/storelist.page.ts
+++ b/src/app/storelist/storelist.page.ts
@@ -1,4 +1,6 @@
 import { Component, OnInit } from '@angular/core';
+import { Router, ActivatedRoute } from '@angular/router';
+import { Location } from '@angular/common';
 
 @Component({
   selector: 'app-storelist',
@@ -9,11 +11,23 @@ export class StorelistPage implements OnInit {
 
   slideOpts = {
     slidesPerView: 1.5
-  }
+  };
 
-  constructor() { }
+  constructor(
+    public router: Router,
+    public location: Location
+  ) { }
 
   ngOnInit() {
   }
 
+  goToPage(path, data = null) {
+    this.router.navigateByUrl(path, { queryParams: data });
+    document.body.scrollTop = document.documentElement.scrollTop = 0;
+  }
+
+  goBack() {
+    this.location.back();
+  }
+
 }
diff --git a/src/app/trackorder/trackorder.page.html b/src/app/trackorder/trackorder.page.html
index 6ac6d14..3711104 100644
--- a/src/app/trackorder/trackorder.page.html
+++ b/src/app/trackorder/trackorder.page.html
@@ -17,14 +17,14 @@
 
         </div> -->
     </div>
-    <div class="rider_footer ">
+    <div class="rider_footer" *ngIf="order">
         <div class="rider_image "></div>
         <div class="rider_detail ">
-            <h5>John Doe</h5>
+            <h5>{{order.riderName}}</h5>
             <p>Rider</p>
         </div>
         <div class="rider_time ">
-            18<span>Mins</span>
+            {{order.time}}<span>Mins</span>
         </div>
         <div class="rider_call ">Call Rider</div>
         <div class="clear "></div>
diff --git a/src/app/trackorder/trackorder.page.ts b/src/app/trackorder/trackorder.page.ts
index aaaaf25..c1e2102 100644
--- a/src/app/trackorder/trackorder.page.ts
+++ b/src/app/trackorder/trackorder.page.ts
@@ -2,6 +2,8 @@
 import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
 import { Location } from '@angular/common';
 import { Router, ActivatedRoute } from '@angular/router';
+import { MyordersService } from './../../config/myorder.service';
+import { Myorder } from './../../config/services/myorder';
 
 declare var google;
 
@@ -13,7 +15,8 @@ declare var google;
 export class TrackorderPage implements OnInit {
 
   map: any;
-  address: string
+  address: string;
+  order: Myorder;
 
   public lat: number = 51.678418;
   public lng: number = 7.809007;
@@ -25,10 +28,11 @@ export class TrackorderPage implements OnInit {
   constructor(
     private router: Router,
     private route: ActivatedRoute,
-    private location: Location
+    private location: Location,
+    public myorder: MyordersService
   ) { }
 
-  
+
   ngOnInit() {
     this.getDirection();
   }
@@ -46,8 +50,9 @@ export class TrackorderPage implements OnInit {
 
 
   getDirection() {
-    this.origin = { lat: 51.678418, lng: 7.809007 };
-    this.destination = { lat: 51.678418, lng: 7.81900 };
+    this.order = this.myorder.selItem;
+    this.origin = { lat: this.order.pickupLocation._lat, lng: this.order.pickupLocation._long };
+    this.destination = { lat: this.order.deliveryLocation._lat, lng: this.order.deliveryLocation._long };
     this.renderOptions = { polylineOptions: { strokeColor: 'rgba(69, 67, 152,1)' }, suppressMarkers: true };
     this.markerOptions = {
       origin: {
diff --git a/src/config/auth.service.ts b/src/config/auth.service.ts
new file mode 100644
index 0000000..d92c927
--- /dev/null
+++ b/src/config/auth.service.ts
@@ -0,0 +1,76 @@
+import { Injectable } from '@angular/core';
+import { User } from './services/user';
+import { auth } from 'firebase/app';
+import { Router, ActivatedRoute } from '@angular/router';
+import { AngularFireAuth } from '@angular/fire/auth';
+import { AngularFirestore, AngularFirestoreDocument } from '@angular/fire/firestore';
+import { ServiceService } from './../config/service.service';
+import { from } from 'rxjs';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class AuthService {
+  userData: any;
+
+  constructor(
+    public afs: AngularFirestore,
+    public afAuth: AngularFireAuth,
+    private router: Router,
+    private service: ServiceService
+  ) {
+      this.afAuth.authState.subscribe(user => {
+        if (user) {
+          this.userData = user;
+          this.service.set('user', JSON.stringify(this.userData));
+        } else {
+          this.service.set('user', null);
+          JSON.parse(localStorage.getItem('user'));
+        }
+      });
+  }
+
+  public async SignIn(email: string, password: string) {
+    return this.afAuth.auth.signInWithEmailAndPassword(email, password).then((result) => {
+      console.log('success');
+      this.router.navigateByUrl('home');
+      document.body.scrollTop = document.documentElement.scrollTop = 0;
+      this.SetUserData(result.user);
+    }).catch((error) => {
+      window.alert(error.message);
+    });
+  }
+
+  get isLoggedIn(): boolean {
+    const user = JSON.parse(localStorage.getItem('user'));
+    return (user !== null && user.emailVerified !== false) ? true : false;
+  }
+
+  SetUserData(user: any) {
+
+    const userRef: AngularFirestoreDocument<any> = this.afs.doc(`customers/${user.uid}`);
+    userRef.valueChanges().subscribe((value) => {
+      const userData: User = {
+        uid: value.uid,
+        emailId: value.emailId,
+        name: value.name,
+        profilePhoto: value.profilePhoto,
+        emailVerified: value.emailVerified,
+        phone: value.phone,
+        phoneVerified: value.phoneVerified,
+        status: value.status,
+        currency: value.currency
+        };
+      console.log(userData);
+    });
+  }
+
+  public async SignOut() {
+    return this.afAuth.auth.signOut().then(() => {
+      this.service.remove('user');
+      console.log('logout');
+    });
+  }
+
+
+}
diff --git a/src/config/cart.service.ts b/src/config/cart.service.ts
new file mode 100644
index 0000000..5d0f25c
--- /dev/null
+++ b/src/config/cart.service.ts
@@ -0,0 +1,127 @@
+import { Injectable } from '@angular/core';
+import { AngularFirestore, AngularFirestoreDocument, AngularFirestoreCollection } from '@angular/fire/firestore';
+import { Router, ActivatedRoute } from '@angular/router';
+import { Products } from './services/product';
+import { Cart, CartItem } from './services/cart';
+import { ServiceService } from './service.service';
+import * as firebase from 'firebase';
+import { take } from 'rxjs/operators';
+import { User } from './services/user';
+import { from } from 'rxjs';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class CartsService {
+  size: string;
+  color: string;
+  custId: string;
+  prodId: string;
+  cart: Cart;
+  user: User;
+  carts: CartItem[] = [];
+  cartTotal: number;
+
+  constructor(
+    public afs: AngularFirestore,
+    public router: Router,
+    public service: ServiceService
+  ) {
+    this.size = 'Small';
+    this.custId = '';
+    const users = this.service.get('user').then((data) => {
+      if (data) {
+        data = JSON.parse(data);
+        this.custId = data.uid;
+        console.log(this.custId);
+      } else {
+        this.custId = 'WwHnLICVY2dvZGUHuKqasiTB91a2';
+      }
+    });
+  }
+
+  public async buyNow(product: Products) {
+    this.color = 'Blue';
+    this.prodId = product.prodId;
+    const prodRef = firebase.firestore().collection('products').doc(this.prodId);
+
+    const cartRef: AngularFirestoreCollection<any> = this.afs.collection('carts', ref => ref.where('size', '==', this.size)
+    .where('color', '==', this.color)
+    .where('custId', '==', this.custId)
+    .where('product', '==', prodRef)
+    );
+    cartRef.valueChanges().pipe(take(1)).subscribe((value: Cart[]) => {
+      console.log(value);
+      if (value.length === 0) {
+        const cart: Cart = {
+          color: this.color,
+          custId: this.custId,
+          product: firebase.firestore().doc(`products/${this.prodId}`),
+          image: product.image,
+          prodId: product.prodId,
+          price: product.price,
+          prodName: product.prodName,
+          shopper: product.shopper,
+          qty: 1,
+          size: this.size
+        };
+        this.afs.collection('carts').add(cart).then((docRef) => {
+          const neworderId = docRef.id;
+          this.afs.collection('carts').doc(neworderId).update({cartId: docRef.id}).then(() => {
+            console.log('Booking Successfully');
+            this.router.navigateByUrl('cart');
+            document.body.scrollTop = document.documentElement.scrollTop = 0;
+          });
+        }).catch((error) => {
+          console.error('Error adding document: ', error);
+        });
+      } else {
+        alert('Item already added in the cart');
+      }
+    });
+  }
+
+  public async cartList() {
+    const cartRef: AngularFirestoreCollection<any> = this.afs.collection('carts', ref => ref.where('custId', '==', this.custId));
+    cartRef.valueChanges().subscribe((value) => {
+      this.carts = [];
+      const res = value;
+      this.cartTotal = 0;
+      if (res.length > 0) {
+        res.forEach((item) => {
+          const cartItem: CartItem = {
+            cartId: item.cartId,
+            color: item.color,
+            shopperId: item.shopper,
+            prodId: item.prodId,
+            price: item.price,
+            prodName: item.prodName,
+            image: item.image,
+            qty: item.qty,
+            size: item.size,
+          };
+          this.cartTotal += item.price;
+          /*const prodItem = item.product.get().then((property) => {
+            const response = property.data();
+            cartItem.prodName = response.prodName;
+            cartItem.price = response.price;
+            cartItem.image = response.image;
+            cartItem.prodId = response.prodId;
+            cartItem.shopperId = response.shopper;
+            this.cartTotal += response.price;
+          });*/
+          this.carts.push(cartItem);
+        });
+      } else {
+       // alert('No Products Found');
+      }
+    });
+  }
+
+  choose_size(size: string) {
+    this.size = size;
+  }
+
+
+
+}
diff --git a/src/config/myorder.service.ts b/src/config/myorder.service.ts
new file mode 100644
index 0000000..b8701e1
--- /dev/null
+++ b/src/config/myorder.service.ts
@@ -0,0 +1,74 @@
+import { Injectable } from '@angular/core';
+import { AngularFirestore, AngularFirestoreDocument, AngularFirestoreCollection } from '@angular/fire/firestore';
+import { Myorder } from './services/myorder';
+import { ServiceService } from './../config/service.service';
+import * as firebase from 'firebase';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class MyordersService {
+  product: Myorder[] = [];
+  custId: string;
+  orders: Myorder[];
+  selItem: Myorder;
+
+  constructor(
+    public afs: AngularFirestore,
+    public service: ServiceService
+  ) {
+    const users = this.service.get('user').then((data) => {
+      if (data) {
+        data = JSON.parse(data);
+        this.custId = data.uid;
+        if (this.custId !== undefined) {
+          this.orderList(this.custId);
+        }
+      } else {
+        this.custId = 'WwHnLICVY2dvZGUHuKqasiTB91a2';
+      }
+    });
+  }
+
+  public async orderList(custId) {
+    console.log('called');
+    console.log(custId);
+    const This = this;
+    const orderRef: AngularFirestoreCollection<any> = this.afs.collection('orders', ref => ref.where('custId', '==', custId)
+    .orderBy('bookDate', 'desc'));
+    orderRef.valueChanges().subscribe((value) => {
+      console.log(value);
+      this.orders = [];
+      const res = value;
+      if (res.length > 0) {
+        res.forEach((item) => {
+          console.log(item);
+          const order: Myorder = {
+            prodName: item.prodName,
+            color: item.color,
+            image: item.image,
+            amount: item.amount,
+            qty: item.qty,
+            status: item.status,
+            orderStatus: item.orderStatus,
+            bookDate: item.bookDate,
+            deliveryLocation: item.deliveryLocation,
+            pickupLocation: item.pickupLocation,
+            riderName: 'John',
+            size: item.size,
+            time: '60'
+          };
+          this.orders.push(order);
+        });
+        console.log(this.orders);
+      } else {
+        alert('No Orders Found');
+      }
+    });
+  }
+
+  public async trackOrder(order) {
+      this.selItem = order;
+  }
+
+}
diff --git a/src/config/order.service.ts b/src/config/order.service.ts
new file mode 100644
index 0000000..2a08bc5
--- /dev/null
+++ b/src/config/order.service.ts
@@ -0,0 +1,122 @@
+import { Injectable } from '@angular/core';
+import { AngularFirestore, AngularFirestoreDocument, AngularFirestoreCollection } from '@angular/fire/firestore';
+import { Router, ActivatedRoute } from '@angular/router';
+import { Order } from './services/order';
+import { Products } from './services/product';
+import { ServiceService } from './service.service';
+import * as firebase from 'firebase';
+import { CartItem } from './services/cart';
+import { BehaviorSubject } from 'rxjs';
+
+
+@Injectable({
+  providedIn: 'root'
+})
+export class OrdersService {
+  order: Order;
+  size: string;
+  color: string;
+  custId: string;
+  shopperId: any;
+  checkout = new BehaviorSubject(false);
+
+  constructor(
+    public afs: AngularFirestore,
+    public router: Router,
+    public service: ServiceService
+  ) {
+    this.size = 'small';
+    this.color = 'Blue';
+    this.custId = '';
+    const users = this.service.get('user').then((data) => {
+      if (data) {
+        data = JSON.parse(data);
+        this.custId = data.uid;
+        console.log(this.custId);
+      } else {
+        this.custId = 'WwHnLICVY2dvZGUHuKqasiTB91a2';
+      }
+    });
+  }
+
+  public async checkOut(cart: CartItem[]) {
+    console.log(cart);
+    let currProcess = 0;
+    const cartCount = cart.length;
+    cart.forEach((product) => {
+      this.afs.collection('orders').add({
+        bookDate: firebase.firestore.FieldValue.serverTimestamp()
+      }).then((docRef) => {
+        const neworderId = docRef.id;
+        const delivery = new firebase.firestore.GeoPoint(10.0237, 76.3116);
+        const pickup = new firebase.firestore.GeoPoint(10.7231, 76.1234);
+        const orderItem: Order = {
+          amount: 'A$ 175',
+          customer: firebase.firestore().doc('/customer/' + this.custId),
+          shopper: product.shopperId,
+          deliveryAddress: 'Techware Software solution, Carnival Infopark, Kochi',
+          deliveryCharge: 'A$ 0.5',
+          deliveryLocation: delivery,
+          bookDate: firebase.firestore.FieldValue.serverTimestamp(),
+          discount: 'A$ 12.00',
+          orderCode: this.orderCode(),
+          orderId: neworderId,
+          orderStatus: 1,
+          pickupAddress: 'GetMi, Canberra, AUS',
+          pickupLocation: pickup,
+          price: 'A$ ' + product.price,
+          product: firebase.firestore().doc('/product/' + product.prodId),
+          promoId: null,
+          qty: product.qty,
+          rider: firebase.firestore().doc('/riders/qbTKza18mWVzYG9NLIbmjMbrYjG2'),
+          status: 1,
+          tax: 'A$ 7.5',
+          size: product.size,
+          color: product.color,
+          custId: this.custId,
+          image: product.image,
+          prodId: product.prodId,
+          prodName: product.prodName,
+          riderId: 'qbTKza18mWVzYG9NLIbmjMbrYjG2',
+          shopperId: 'qbTKza18mWVzYG9NLIbmjMbrYjG2'
+        };
+        this.afs.collection('orders').doc(neworderId).set(orderItem).then(() => {
+          currProcess += 1;
+          console.log('Booking Successfully');
+          this.afs.doc(`carts/${product.cartId}`).delete();
+          // this.router.navigateByUrl('cart');
+          console.log(currProcess, cartCount);
+          document.body.scrollTop = document.documentElement.scrollTop = 0;
+          if (currProcess === cartCount) {
+            // this.router.navigateByUrl('cart');
+            return true;
+          }
+        });
+      }).catch((error) => {
+        console.error('Error adding document: ', error);
+      });
+    });
+
+  }
+
+  public async buyNow(product: Products) {
+    //
+  }
+
+  orderCode() {
+    const newpin =  Math.round(Math.random() * 1000000);
+    const orderCode = 'GM' + this.pad(newpin, 6, null);
+    return orderCode;
+  }
+
+  pad(n, width, z) {
+    z = z || '0';
+    n = n + '';
+    return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
+  }
+
+  choose_size(size: string) {
+    this.size = size;
+  }
+
+}
diff --git a/src/config/products.service.ts b/src/config/products.service.ts
new file mode 100644
index 0000000..03fdc0e
--- /dev/null
+++ b/src/config/products.service.ts
@@ -0,0 +1,60 @@
+import { Injectable } from '@angular/core';
+import { AngularFirestore, AngularFirestoreDocument, AngularFirestoreCollection } from '@angular/fire/firestore';
+import { Products } from './services/product';
+import { ServiceService } from './../config/service.service';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class ProductsService {
+  product: Products[] = [];
+  selItem: Products;
+
+  constructor(
+    public afs: AngularFirestore,
+    public service: ServiceService
+  ) { }
+
+  public async prodList() {
+    const This = this;
+    const prodRef: AngularFirestoreCollection<any> = this.afs.collection(`products`);
+    prodRef.valueChanges().subscribe((value) => {
+      this.product = [];
+      const res = value;
+      if (res.length > 0) {
+        res.forEach((item) => {
+          console.log(item.size);
+          const prod: Products = {
+            prodId: item.prodId,
+            prodName: item.prodName,
+            prodCode: item.prodCode,
+            prodDesc: item.prodDesc,
+            prodStatus: item.prodStatus,
+            brand: item.brand.brandName,
+            category: item.category.catName,
+            color: item.color,
+            discount: item.discount,
+            featured: item.featured,
+            image: item.image,
+            price: item.price,
+            qty: item.qty,
+            shopper: item.shopper,
+            skuCode: item.skuCode,
+            status: item.status,
+            size: this.service.key2Array(item.size),
+            currency: item.currency
+          };
+          this.product.push(prod);
+        });
+        console.log(this.product);
+      } else {
+        alert('No Products Found');
+      }
+    });
+  }
+
+  public async setProd(item: Products) {
+    this.selItem = item;
+  }
+
+}
diff --git a/src/config/service.service.ts b/src/config/service.service.ts
new file mode 100644
index 0000000..f32ef6e
--- /dev/null
+++ b/src/config/service.service.ts
@@ -0,0 +1,40 @@
+import { Injectable } from '@angular/core';
+import { Storage } from '@ionic/storage';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class ServiceService {
+
+  constructor(public storage: Storage) { }
+
+  public set(settingName: string, value: any) {
+    return this.storage.set(`setting:${ settingName }`, value);
+  }
+
+  public async get(settingName: string) {
+    return await this.storage.get(`setting:${ settingName }`);
+  }
+
+  public async remove(settingName: string) {
+    return await this.storage.remove(`setting:${ settingName }`);
+  }
+
+  public clear() {
+    this.storage.clear().then(() => {
+      console.log('all keys cleared');
+    });
+  }
+
+  public key2Array(item: object) {
+    const response = [];
+    for (const key in item) {
+      if (item.hasOwnProperty(key)) {
+          response.push(item[key]);
+      }
+    }
+    return response;
+  }
+
+
+}
diff --git a/src/config/services/cart.ts b/src/config/services/cart.ts
new file mode 100644
index 0000000..ce03b00
--- /dev/null
+++ b/src/config/services/cart.ts
@@ -0,0 +1,25 @@
+export interface Cart {
+    custId: string;
+    shopper: any;
+    product: any;
+    prodName: any;
+    prodId: string;
+    image: string;
+    size: string;
+    color: string;
+    qty: number;
+    price: number;
+}
+
+export interface CartItem {
+    cartId: string;
+    prodId: string;
+    shopperId: any;
+    prodName: any;
+    image: string;
+    size: string;
+    color: string;
+    qty: number;
+    price: number;
+}
+
diff --git a/src/config/services/myorder.ts b/src/config/services/myorder.ts
new file mode 100644
index 0000000..2629ee8
--- /dev/null
+++ b/src/config/services/myorder.ts
@@ -0,0 +1,16 @@
+export interface Myorder {
+    amount: string;
+    prodName: any;
+    image: string;
+    size: string;
+    color: string;
+    qty: number;
+    bookDate: any;
+    pickupLocation: any;
+    deliveryLocation: any;
+    status: number;
+    orderStatus: number;
+    riderName: string;
+    time: string;
+}
+
diff --git a/src/config/services/order.ts b/src/config/services/order.ts
new file mode 100644
index 0000000..8fe3528
--- /dev/null
+++ b/src/config/services/order.ts
@@ -0,0 +1,34 @@
+import { AngularFirestoreDocument } from '@angular/fire/firestore';
+import { GeoJsonOptions } from '@agm/core/services/google-maps-types';
+
+export interface Order {
+    amount: string;
+    customer: any;
+    deliveryAddress: string;
+    deliveryCharge: string;
+    deliveryLocation: object;
+    discount: string;
+    orderCode: string;
+    orderId: string;
+    orderStatus: number;
+    pickupAddress: string;
+    pickupLocation: object;
+    price: string;
+    bookDate: any;
+    prodId: string;
+    custId: string;
+    product: any;
+    prodName: any;
+    image: string;
+    size: string;
+    color: string;
+    promoId: any;
+    qty: number;
+    rider: any;
+    riderId: string;
+    shopper: any;
+    shopperId: string;
+    status: number;
+    tax: string;
+}
+
diff --git a/src/config/services/product.ts b/src/config/services/product.ts
new file mode 100644
index 0000000..1f0aee7
--- /dev/null
+++ b/src/config/services/product.ts
@@ -0,0 +1,29 @@
+export interface Products {
+    brand: string;
+    category: string;
+    color: string;
+    discount: number;
+    featured: boolean;
+    image: string;
+    price: number;
+    prodCode: string;
+    prodDesc: string;
+    prodId: string;
+    prodName: string;
+    prodStatus: boolean;
+    qty: number;
+    shopper: string;
+    size: Size[];
+    skuCode: string;
+    status: boolean;
+    currency: {
+        currId: string;
+        currName: string;
+        symbol: string
+    };
+}
+
+export interface Size {
+    sizeId: string;
+    sizeName: string;
+}
diff --git a/src/config/services/user.ts b/src/config/services/user.ts
new file mode 100644
index 0000000..77eb24a
--- /dev/null
+++ b/src/config/services/user.ts
@@ -0,0 +1,15 @@
+export interface User {
+    uid: string;
+    emailId: string;
+    name: string;
+    phone: string;
+    phoneVerified: boolean;
+    profilePhoto: string;
+    emailVerified: boolean;
+    status: boolean;
+    currency: {
+        currId: string;
+        currName: string;
+        symbol: string
+    };
+}
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index 7b4f817..7ed1339 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -3,7 +3,16 @@
 // The list of file replacements can be found in `angular.json`.
 
 export const environment = {
-  production: false
+  production: false,
+  firebase: {
+    apiKey: 'AIzaSyDzc8lCO4NAfc3PbXPQjvmSWDbsw-yTqXw',
+    authDomain: 'getmi-4fd26.firebaseapp.com',
+    databaseURL: 'https://getmi-4fd26.firebaseio.com',
+    projectId: 'getmi-4fd26',
+    storageBucket: 'getmi-4fd26.appspot.com',
+    messagingSenderId: '949385251610',
+    appId: '1:949385251610:web:cec06e05a0b1aa58'
+  }
 };
 
 /*