diff --git a/views/ngXosLib/xosHelpers/src/services/rest/Networkstemplates.js b/views/ngXosLib/xosHelpers/src/services/rest/Networkstemplates.js
new file mode 100644
index 0000000..961d5d8
--- /dev/null
+++ b/views/ngXosLib/xosHelpers/src/services/rest/Networkstemplates.js
@@ -0,0 +1,15 @@
+(function() {
+  'use strict';
+
+  angular.module('xos.helpers')
+  /**
+  * @ngdoc service
+  * @name xos.helpers.Networkstemplates
+  * @description Angular resource to fetch /api/core/networktemplates/:id/
+  **/
+  .service('Networkstemplates', function($resource){
+    return $resource('/api/core/networktemplates/:id/', { id: '@id' }, {
+      update: { method: 'PUT' }
+    });
+  })
+})();
diff --git a/views/ngXosViews/serviceGrid/bower.json b/views/ngXosViews/serviceGrid/bower.json
index bae4e4d..18bd401 100644
--- a/views/ngXosViews/serviceGrid/bower.json
+++ b/views/ngXosViews/serviceGrid/bower.json
@@ -15,6 +15,9 @@
     "tests"
   ],
   "dependencies": {
+    "js-yaml": "~3.6.1",
+    "jszip": "Stuk/jszip#~3.0.0",
+    "file-saver": "eligrey/FileSaver.js#~1.3.2"
   },
   "devDependencies": {
     "jquery": "2.1.4",
@@ -27,6 +30,7 @@
     "lodash": "~4.11.1",
     "bootstrap-css": "3.3.6",
     "angular-chart.js": "~0.10.2",
-    "d3": "~3.5.17"
+    "d3": "~3.5.17",
+    "angular-recursion": "~1.0.5"
   }
 }
diff --git a/views/ngXosViews/serviceGrid/karma.conf.js b/views/ngXosViews/serviceGrid/karma.conf.js
index 4123be9..44283c8 100644
--- a/views/ngXosViews/serviceGrid/karma.conf.js
+++ b/views/ngXosViews/serviceGrid/karma.conf.js
@@ -28,6 +28,7 @@
     files: bowerComponents.concat([
       '../../../xos/core/xoslib/static/js/vendor/ngXosVendor.js',
       '../../../xos/core/xoslib/static/js/vendor/ngXosHelpers.js',
+      'src/js/main.js',
       'src/js/**/*.js',
       'spec/**/*.mock.js',
       'spec/**/*.test.js',
diff --git a/views/ngXosViews/serviceGrid/mocks/data/flavors.json b/views/ngXosViews/serviceGrid/mocks/data/flavors.json
new file mode 100644
index 0000000..251ccb6
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/mocks/data/flavors.json
@@ -0,0 +1,216 @@
+[
+  {
+    "humanReadableName": "m1.large",
+    "validators": {
+      "default": [],
+      "updated": [
+        "notBlank"
+      ],
+      "policed": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "deleted": [],
+      "description": [],
+      "no_policy": [],
+      "lazy_blocked": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "write_protect": [],
+      "flavor": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "order": [
+        "notBlank"
+      ],
+      "id": [],
+      "no_sync": [],
+      "enacted": []
+    },
+    "id": 3,
+    "created": "2016-06-20T21:33:32.126894Z",
+    "updated": "2016-06-20T21:33:36.066908Z",
+    "enacted": null,
+    "policed": null,
+    "backend_register": "{}",
+    "backend_status": "0 - Provisioning in progress",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": true,
+    "no_policy": false,
+    "name": "m1.large",
+    "description": null,
+    "flavor": "m1.large",
+    "order": 0,
+    "default": false,
+    "deployments": [
+      1
+    ]
+  },
+  {
+    "humanReadableName": "m1.medium",
+    "validators": {
+      "default": [],
+      "updated": [
+        "notBlank"
+      ],
+      "policed": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "deleted": [],
+      "description": [],
+      "no_policy": [],
+      "lazy_blocked": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "write_protect": [],
+      "flavor": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "order": [
+        "notBlank"
+      ],
+      "id": [],
+      "no_sync": [],
+      "enacted": []
+    },
+    "id": 2,
+    "created": "2016-06-20T21:33:32.035528Z",
+    "updated": "2016-06-20T21:33:36.089834Z",
+    "enacted": null,
+    "policed": null,
+    "backend_register": "{}",
+    "backend_status": "0 - Provisioning in progress",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": true,
+    "no_policy": false,
+    "name": "m1.medium",
+    "description": null,
+    "flavor": "m1.medium",
+    "order": 0,
+    "default": false,
+    "deployments": [
+      1
+    ]
+  },
+  {
+    "humanReadableName": "m1.small",
+    "validators": {
+      "default": [],
+      "updated": [
+        "notBlank"
+      ],
+      "policed": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "deleted": [],
+      "description": [],
+      "no_policy": [],
+      "lazy_blocked": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "write_protect": [],
+      "flavor": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "order": [
+        "notBlank"
+      ],
+      "id": [],
+      "no_sync": [],
+      "enacted": []
+    },
+    "id": 1,
+    "created": "2016-06-20T21:33:31.974383Z",
+    "updated": "2016-06-20T21:33:36.106941Z",
+    "enacted": null,
+    "policed": null,
+    "backend_register": "{}",
+    "backend_status": "0 - Provisioning in progress",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": true,
+    "no_policy": false,
+    "name": "m1.small",
+    "description": null,
+    "flavor": "m1.small",
+    "order": 0,
+    "default": false,
+    "deployments": [
+      1
+    ]
+  },
+  {
+    "humanReadableName": "m1.xlarge",
+    "validators": {
+      "default": [],
+      "updated": [
+        "notBlank"
+      ],
+      "policed": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "deleted": [],
+      "description": [],
+      "no_policy": [],
+      "lazy_blocked": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "write_protect": [],
+      "flavor": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "order": [
+        "notBlank"
+      ],
+      "id": [],
+      "no_sync": [],
+      "enacted": []
+    },
+    "id": 4,
+    "created": "2016-06-20T21:33:36.234266Z",
+    "updated": "2016-06-20T21:33:36.234121Z",
+    "enacted": null,
+    "policed": null,
+    "backend_register": "{}",
+    "backend_status": "0 - Provisioning in progress",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": true,
+    "no_policy": false,
+    "name": "m1.xlarge",
+    "description": null,
+    "flavor": "m1.xlarge",
+    "order": 0,
+    "default": false,
+    "deployments": []
+  }
+]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/images.json b/views/ngXosViews/serviceGrid/mocks/data/images.json
new file mode 100644
index 0000000..8a4fd83
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/mocks/data/images.json
@@ -0,0 +1,114 @@
+[
+  {
+    "humanReadableName": "trusty-server-multi-nic",
+    "validators": {
+      "updated": [
+        "notBlank"
+      ],
+      "policed": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "deleted": [],
+      "container_format": [
+        "notBlank"
+      ],
+      "no_policy": [],
+      "disk_format": [
+        "notBlank"
+      ],
+      "kind": [
+        "notBlank"
+      ],
+      "lazy_blocked": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "write_protect": [],
+      "tag": [],
+      "path": [],
+      "backend_status": [
+        "notBlank"
+      ],
+      "id": [],
+      "no_sync": [],
+      "enacted": []
+    },
+    "id": 2,
+    "created": "2016-06-20T21:29:37.969117Z",
+    "updated": "2016-06-20T21:29:37.968740Z",
+    "enacted": "2016-06-20T21:29:38.057186Z",
+    "policed": "2016-06-20T21:29:39.144781Z",
+    "backend_register": "{\"next_run\": 0, \"last_success\": 1466458178.081831, \"exponent\": 0}",
+    "backend_status": "1 - OK",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": false,
+    "no_policy": false,
+    "name": "trusty-server-multi-nic",
+    "kind": "vm",
+    "disk_format": "raw",
+    "container_format": "bare",
+    "path": "/opt/xos/images/trusty-server-multi-nic.img",
+    "tag": null,
+    "deployments": []
+  },
+  {
+    "humanReadableName": "vsg-1.0",
+    "validators": {
+      "updated": [
+        "notBlank"
+      ],
+      "policed": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "deleted": [],
+      "container_format": [
+        "notBlank"
+      ],
+      "no_policy": [],
+      "disk_format": [
+        "notBlank"
+      ],
+      "kind": [
+        "notBlank"
+      ],
+      "lazy_blocked": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "write_protect": [],
+      "tag": [],
+      "path": [],
+      "backend_status": [
+        "notBlank"
+      ],
+      "id": [],
+      "no_sync": [],
+      "enacted": []
+    },
+    "id": 1,
+    "created": "2016-06-20T21:29:37.949039Z",
+    "updated": "2016-06-20T21:36:36.196635Z",
+    "enacted": "2016-06-20T21:36:56.463927Z",
+    "policed": "2016-06-20T21:36:37.125141Z",
+    "backend_register": "{\"next_run\": 0, \"last_success\": 1466458616.491853, \"exponent\": 0}",
+    "backend_status": "1 - OK",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": false,
+    "no_policy": false,
+    "name": "vsg-1.0",
+    "kind": "vm",
+    "disk_format": "raw",
+    "container_format": "bare",
+    "path": "/opt/xos/images/vsg-1.0.img",
+    "tag": null,
+    "deployments": []
+  }
+]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/instances.json b/views/ngXosViews/serviceGrid/mocks/data/instances.json
new file mode 100644
index 0000000..68a9620
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/mocks/data/instances.json
@@ -0,0 +1,89 @@
+[
+    {
+        "humanReadableName": "mysite_vsg-1",
+        "validators": {
+            "policed": [],
+            "creator": [],
+            "ip": [],
+            "image": [
+                "notBlank"
+            ],
+            "backend_register": [
+                "notBlank"
+            ],
+            "flavor": [
+                "notBlank"
+            ],
+            "backend_status": [
+                "notBlank"
+            ],
+            "id": [],
+            "instance_name": [],
+            "slice": [
+                "notBlank"
+            ],
+            "no_sync": [],
+            "node": [
+                "notBlank"
+            ],
+            "userData": [],
+            "updated": [
+                "notBlank"
+            ],
+            "parent": [],
+            "deleted": [],
+            "lazy_blocked": [],
+            "deployment": [
+                "notBlank"
+            ],
+            "enacted": [],
+            "instance_uuid": [],
+            "numberCores": [
+                "notBlank"
+            ],
+            "name": [
+                "notBlank"
+            ],
+            "created": [],
+            "write_protect": [],
+            "isolation": [
+                "notBlank"
+            ],
+            "no_policy": [],
+            "instance_id": [],
+            "volumes": []
+        },
+        "id": 1,
+        "created": "2016-06-20T21:36:36.599139Z",
+        "updated": "2016-06-20T21:36:38.654961Z",
+        "enacted": "2016-06-20T21:37:09.416303Z",
+        "policed": "2016-06-20T21:36:40.179041Z",
+        "backend_register": "{\"next_run\": 0, \"last_success\": 1466458656.696624, \"exponent\": 0}",
+        "backend_status": "1 - OK",
+        "deleted": false,
+        "write_protect": false,
+        "lazy_blocked": false,
+        "no_sync": false,
+        "no_policy": false,
+        "instance_id": "instance-00000001",
+        "instance_uuid": "6cdf8d0b-0468-4ce2-af07-b8d35e0e14cf",
+        "name": "mysite_vsg",
+        "instance_name": "mysite_vsg-1",
+        "ip": "192.168.122.140",
+        "image": 1,
+        "creator": 1,
+        "slice": 2,
+        "deployment": 1,
+        "node": 1,
+        "numberCores": 0,
+        "flavor": 1,
+        "userData": null,
+        "isolation": "vm",
+        "volumes": "/etc/dnsmasq.d,/etc/ufw",
+        "parent": null,
+        "networks": [
+            1,
+            2
+        ]
+    }
+]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/networks.json b/views/ngXosViews/serviceGrid/mocks/data/networks.json
new file mode 100644
index 0000000..e581298
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/mocks/data/networks.json
@@ -0,0 +1,166 @@
+[
+  {
+    "humanReadableName": "management",
+    "validators": {
+      "router_id": [],
+      "policed": [],
+      "labels": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "start_ip": [],
+      "owner": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "id": [],
+      "subnet": [],
+      "subnet_id": [],
+      "end_ip": [],
+      "template": [
+        "notBlank"
+      ],
+      "no_sync": [],
+      "permit_all_slices": [],
+      "updated": [
+        "notBlank"
+      ],
+      "controller_url": [],
+      "controller_parameters": [],
+      "deleted": [],
+      "lazy_blocked": [],
+      "guaranteed_bandwidth": [
+        "notBlank"
+      ],
+      "enacted": [],
+      "autoconnect": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "write_protect": [],
+      "no_policy": [],
+      "network_id": [],
+      "topology_parameters": [],
+      "ports": []
+    },
+    "id": 1,
+    "created": "2016-06-20T21:36:32.006043Z",
+    "updated": "2016-06-20T21:36:32.039571Z",
+    "enacted": null,
+    "policed": "2016-06-20T21:36:32.389397Z",
+    "backend_register": "{}",
+    "backend_status": "0 - Provisioning in progress",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": false,
+    "no_policy": false,
+    "name": "management",
+    "template": 4,
+    "subnet": "172.27.0.0/24",
+    "ports": null,
+    "labels": null,
+    "owner": 1,
+    "guaranteed_bandwidth": 0,
+    "permit_all_slices": true,
+    "topology_parameters": null,
+    "controller_url": null,
+    "controller_parameters": null,
+    "network_id": null,
+    "router_id": null,
+    "subnet_id": null,
+    "autoconnect": false,
+    "slices": [
+      2
+    ],
+    "instances": [
+      1
+    ],
+    "routers": []
+  },
+  {
+    "humanReadableName": "mysite_vsg-access",
+    "validators": {
+      "router_id": [],
+      "policed": [],
+      "labels": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "start_ip": [],
+      "owner": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "id": [],
+      "subnet": [],
+      "subnet_id": [],
+      "end_ip": [],
+      "template": [
+        "notBlank"
+      ],
+      "no_sync": [],
+      "permit_all_slices": [],
+      "updated": [
+        "notBlank"
+      ],
+      "controller_url": [],
+      "controller_parameters": [],
+      "deleted": [],
+      "lazy_blocked": [],
+      "guaranteed_bandwidth": [
+        "notBlank"
+      ],
+      "enacted": [],
+      "autoconnect": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "write_protect": [],
+      "no_policy": [],
+      "network_id": [],
+      "topology_parameters": [],
+      "ports": []
+    },
+    "id": 2,
+    "created": "2016-06-20T21:36:36.439706Z",
+    "updated": "2016-06-20T21:36:36.456977Z",
+    "enacted": null,
+    "policed": "2016-06-20T21:36:37.419444Z",
+    "backend_register": "{}",
+    "backend_status": "0 - Provisioning in progress",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": false,
+    "no_policy": false,
+    "name": "mysite_vsg-access",
+    "template": 2,
+    "subnet": "",
+    "ports": null,
+    "labels": null,
+    "owner": 2,
+    "guaranteed_bandwidth": 0,
+    "permit_all_slices": true,
+    "topology_parameters": null,
+    "controller_url": null,
+    "controller_parameters": null,
+    "network_id": null,
+    "router_id": null,
+    "subnet_id": null,
+    "autoconnect": false,
+    "slices": [
+      2
+    ],
+    "instances": [
+      1
+    ],
+    "routers": []
+  }
+]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/networktemplates.json b/views/ngXosViews/serviceGrid/mocks/data/networktemplates.json
new file mode 100644
index 0000000..c36a401
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/mocks/data/networktemplates.json
@@ -0,0 +1,262 @@
+[
+  {
+    "humanReadableName": "Public shared IPv4",
+    "validators": {
+      "policed": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "id": [],
+      "access": [],
+      "shared_network_name": [],
+      "controller_kind": [],
+      "updated": [
+        "notBlank"
+      ],
+      "description": [],
+      "deleted": [],
+      "visibility": [
+        "notBlank"
+      ],
+      "lazy_blocked": [],
+      "guaranteed_bandwidth": [
+        "notBlank"
+      ],
+      "translation": [
+        "notBlank"
+      ],
+      "topology_kind": [
+        "notBlank"
+      ],
+      "enacted": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "write_protect": [],
+      "no_policy": [],
+      "no_sync": [],
+      "shared_network_id": []
+    },
+    "id": 1,
+    "created": "2016-06-23T20:14:16.126918Z",
+    "updated": "2016-06-23T20:14:16.126754Z",
+    "enacted": null,
+    "policed": null,
+    "backend_register": "{}",
+    "backend_status": "0 - Provisioning in progress",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": false,
+    "no_policy": false,
+    "name": "Public shared IPv4",
+    "description": null,
+    "guaranteed_bandwidth": 0,
+    "visibility": "private",
+    "translation": "NAT",
+    "access": null,
+    "shared_network_name": "nat-net",
+    "shared_network_id": null,
+    "topology_kind": "bigswitch",
+    "controller_kind": null
+  },
+  {
+    "humanReadableName": "Public dedicated IPv4",
+    "validators": {
+      "policed": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "id": [],
+      "access": [],
+      "shared_network_name": [],
+      "controller_kind": [],
+      "updated": [
+        "notBlank"
+      ],
+      "description": [],
+      "deleted": [],
+      "visibility": [
+        "notBlank"
+      ],
+      "lazy_blocked": [],
+      "guaranteed_bandwidth": [
+        "notBlank"
+      ],
+      "translation": [
+        "notBlank"
+      ],
+      "topology_kind": [
+        "notBlank"
+      ],
+      "enacted": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "write_protect": [],
+      "no_policy": [],
+      "no_sync": [],
+      "shared_network_id": []
+    },
+    "id": 3,
+    "created": "2016-06-23T20:14:16.202765Z",
+    "updated": "2016-06-23T20:14:16.202562Z",
+    "enacted": null,
+    "policed": null,
+    "backend_register": "{}",
+    "backend_status": "0 - Provisioning in progress",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": false,
+    "no_policy": false,
+    "name": "Public dedicated IPv4",
+    "description": null,
+    "guaranteed_bandwidth": 0,
+    "visibility": "public",
+    "translation": "none",
+    "access": null,
+    "shared_network_name": "ext-net",
+    "shared_network_id": null,
+    "topology_kind": "bigswitch",
+    "controller_kind": null
+  },
+  {
+    "humanReadableName": "management_template",
+    "validators": {
+      "policed": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "id": [],
+      "access": [],
+      "shared_network_name": [],
+      "controller_kind": [],
+      "updated": [
+        "notBlank"
+      ],
+      "description": [],
+      "deleted": [],
+      "visibility": [
+        "notBlank"
+      ],
+      "lazy_blocked": [],
+      "guaranteed_bandwidth": [
+        "notBlank"
+      ],
+      "translation": [
+        "notBlank"
+      ],
+      "topology_kind": [
+        "notBlank"
+      ],
+      "enacted": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "write_protect": [],
+      "no_policy": [],
+      "no_sync": [],
+      "shared_network_id": []
+    },
+    "id": 4,
+    "created": "2016-06-23T20:18:19.778090Z",
+    "updated": "2016-06-23T20:18:19.777887Z",
+    "enacted": null,
+    "policed": null,
+    "backend_register": "{}",
+    "backend_status": "0 - Provisioning in progress",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": false,
+    "no_policy": false,
+    "name": "management_template",
+    "description": null,
+    "guaranteed_bandwidth": 0,
+    "visibility": "private",
+    "translation": "none",
+    "access": null,
+    "shared_network_name": null,
+    "shared_network_id": null,
+    "topology_kind": "bigswitch",
+    "controller_kind": null
+  },
+  {
+    "humanReadableName": "Private",
+    "validators": {
+      "policed": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "id": [],
+      "access": [],
+      "shared_network_name": [],
+      "controller_kind": [],
+      "updated": [
+        "notBlank"
+      ],
+      "description": [],
+      "deleted": [],
+      "visibility": [
+        "notBlank"
+      ],
+      "lazy_blocked": [],
+      "guaranteed_bandwidth": [
+        "notBlank"
+      ],
+      "translation": [
+        "notBlank"
+      ],
+      "topology_kind": [
+        "notBlank"
+      ],
+      "enacted": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "write_protect": [],
+      "no_policy": [],
+      "no_sync": [],
+      "shared_network_id": []
+    },
+    "id": 2,
+    "created": "2016-06-23T20:14:16.178408Z",
+    "updated": "2016-06-23T20:18:24.072523Z",
+    "enacted": null,
+    "policed": null,
+    "backend_register": "{}",
+    "backend_status": "0 - Provisioning in progress",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": false,
+    "no_policy": false,
+    "name": "Private",
+    "description": null,
+    "guaranteed_bandwidth": 0,
+    "visibility": "private",
+    "translation": "none",
+    "access": null,
+    "shared_network_name": null,
+    "shared_network_id": null,
+    "topology_kind": "bigswitch",
+    "controller_kind": null
+  }
+]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/node.json b/views/ngXosViews/serviceGrid/mocks/data/node.json
new file mode 100644
index 0000000..b92923f
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/mocks/data/node.json
@@ -0,0 +1,48 @@
+[
+  {
+    "humanReadableName": "nova-compute-1",
+    "validators": {
+      "updated": [
+        "notBlank"
+      ],
+      "policed": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "deleted": [],
+      "no_policy": [],
+      "site": [],
+      "lazy_blocked": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "write_protect": [],
+      "site_deployment": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "id": [],
+      "no_sync": [],
+      "enacted": []
+    },
+    "id": 1,
+    "created": "2016-06-20T21:33:43.532833Z",
+    "updated": "2016-06-20T21:37:46.435545Z",
+    "enacted": null,
+    "policed": null,
+    "backend_register": "{}",
+    "backend_status": "0 - Provisioning in progress",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": true,
+    "no_policy": false,
+    "name": "nova-compute-1",
+    "site_deployment": 1,
+    "site": 1,
+    "nodelabels": []
+  }
+]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/services.json b/views/ngXosViews/serviceGrid/mocks/data/services.json
new file mode 100644
index 0000000..f961a3c
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/mocks/data/services.json
@@ -0,0 +1,514 @@
+[
+   {
+      "humanReadableName": "fabric",
+      "validators": {
+         "service_specific_attribute": [],
+         "policed": [],
+         "view_url": [],
+         "backend_register": [
+            "notBlank"
+         ],
+         "backend_status": [
+            "notBlank"
+         ],
+         "id": [],
+         "private_key_fn": [],
+         "icon_url": [],
+         "no_sync": [],
+         "updated": [
+            "notBlank"
+         ],
+         "description": [],
+         "deleted": [],
+         "lazy_blocked": [],
+         "versionNumber": [],
+         "service_specific_id": [],
+         "enacted": [],
+         "public_key": [],
+         "kind": [
+            "notBlank"
+         ],
+         "name": [
+            "notBlank"
+         ],
+         "created": [],
+         "write_protect": [],
+         "no_policy": [],
+         "enabled": [],
+         "controller": [],
+         "published": []
+      },
+      "id": 3,
+      "created": "2016-06-20T21:35:56.788935Z",
+      "updated": "2016-06-20T21:35:56.788499Z",
+      "enacted": null,
+      "policed": null,
+      "backend_register": "{}",
+      "backend_status": "0 - Provisioning in progress",
+      "deleted": false,
+      "write_protect": false,
+      "lazy_blocked": false,
+      "no_sync": false,
+      "no_policy": false,
+      "description": null,
+      "enabled": true,
+      "kind": "fabric",
+      "name": "fabric",
+      "versionNumber": null,
+      "published": true,
+      "view_url": "/admin/fabric/fabricservice/$id$/",
+      "icon_url": null,
+      "public_key": null,
+      "private_key_fn": null,
+      "service_specific_id": null,
+      "service_specific_attribute": null
+   },
+   {
+      "humanReadableName": "ONOS_Fabric",
+      "validators": {
+         "service_specific_attribute": [],
+         "policed": [],
+         "view_url": [],
+         "backend_register": [
+            "notBlank"
+         ],
+         "backend_status": [
+            "notBlank"
+         ],
+         "id": [],
+         "private_key_fn": [],
+         "icon_url": [],
+         "no_sync": [],
+         "updated": [
+            "notBlank"
+         ],
+         "description": [],
+         "deleted": [],
+         "lazy_blocked": [],
+         "versionNumber": [],
+         "service_specific_id": [],
+         "enacted": [],
+         "public_key": [],
+         "kind": [
+            "notBlank"
+         ],
+         "name": [
+            "notBlank"
+         ],
+         "created": [],
+         "write_protect": [],
+         "no_policy": [],
+         "enabled": [],
+         "controller": [],
+         "published": []
+      },
+      "id": 4,
+      "created": "2016-06-20T21:35:56.810806Z",
+      "updated": "2016-06-20T21:35:56.810649Z",
+      "enacted": "2016-06-20T21:36:04.658726Z",
+      "policed": null,
+      "backend_register": "{\"next_run\": 0, \"last_success\": 1466458564.69207, \"exponent\": 0}",
+      "backend_status": "1 - OK",
+      "deleted": false,
+      "write_protect": false,
+      "lazy_blocked": false,
+      "no_sync": false,
+      "no_policy": false,
+      "description": null,
+      "enabled": true,
+      "kind": "onos",
+      "name": "ONOS_Fabric",
+      "versionNumber": null,
+      "published": true,
+      "view_url": "/admin/onos/onosservice/$id$/",
+      "icon_url": null,
+      "public_key": null,
+      "private_key_fn": null,
+      "service_specific_id": null,
+      "service_specific_attribute": "{\"no_container\": true, \"rest_hostname\": \"onos-fabric\"}"
+   },
+   {
+      "humanReadableName": "vrouter",
+      "validators": {
+         "service_specific_attribute": [],
+         "policed": [],
+         "view_url": [],
+         "backend_register": [
+            "notBlank"
+         ],
+         "backend_status": [
+            "notBlank"
+         ],
+         "id": [],
+         "private_key_fn": [],
+         "icon_url": [],
+         "no_sync": [],
+         "updated": [
+            "notBlank"
+         ],
+         "description": [],
+         "deleted": [],
+         "lazy_blocked": [],
+         "versionNumber": [],
+         "service_specific_id": [],
+         "enacted": [],
+         "public_key": [],
+         "kind": [
+            "notBlank"
+         ],
+         "name": [
+            "notBlank"
+         ],
+         "created": [],
+         "write_protect": [],
+         "no_policy": [],
+         "enabled": [],
+         "controller": [],
+         "published": []
+      },
+      "id": 5,
+      "created": "2016-06-20T21:36:36.240269Z",
+      "updated": "2016-06-20T21:36:36.240062Z",
+      "enacted": null,
+      "policed": null,
+      "backend_register": "{}",
+      "backend_status": "0 - Provisioning in progress",
+      "deleted": false,
+      "write_protect": false,
+      "lazy_blocked": false,
+      "no_sync": false,
+      "no_policy": false,
+      "description": null,
+      "enabled": true,
+      "kind": "vROUTER",
+      "name": "vrouter",
+      "versionNumber": null,
+      "published": true,
+      "view_url": "/admin/vrouter/vrouterservice/$id$/",
+      "icon_url": null,
+      "public_key": null,
+      "private_key_fn": null,
+      "service_specific_id": null,
+      "service_specific_attribute": null
+   },
+   {
+      "humanReadableName": "vsg",
+      "validators": {
+         "service_specific_attribute": [],
+         "policed": [],
+         "view_url": [],
+         "backend_register": [
+            "notBlank"
+         ],
+         "backend_status": [
+            "notBlank"
+         ],
+         "id": [],
+         "private_key_fn": [],
+         "icon_url": [],
+         "no_sync": [],
+         "updated": [
+            "notBlank"
+         ],
+         "description": [],
+         "deleted": [],
+         "lazy_blocked": [],
+         "versionNumber": [],
+         "service_specific_id": [],
+         "enacted": [],
+         "public_key": [],
+         "kind": [
+            "notBlank"
+         ],
+         "name": [
+            "notBlank"
+         ],
+         "created": [],
+         "write_protect": [],
+         "no_policy": [],
+         "enabled": [],
+         "controller": [],
+         "published": []
+      },
+      "id": 6,
+      "created": "2016-06-20T21:36:36.262734Z",
+      "updated": "2016-06-20T21:36:36.262503Z",
+      "enacted": null,
+      "policed": null,
+      "backend_register": "{}",
+      "backend_status": "0 - Provisioning in progress",
+      "deleted": false,
+      "write_protect": false,
+      "lazy_blocked": false,
+      "no_sync": false,
+      "no_policy": false,
+      "description": null,
+      "enabled": true,
+      "kind": "vCPE",
+      "name": "vsg",
+      "versionNumber": null,
+      "published": true,
+      "view_url": "/admin/cord/vsgservice/$id$/",
+      "icon_url": null,
+      "public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCl1k9r1G491+ClISp6JOKlNmgBSV5YAvw2Ulh5Mj7XUgLatjHIBID2Ue54kAbCP48LVIAhqVFClPC7PtfVQY9+3mKi+LUJCgkkjR+6IlK/8eVzr1i3BvhLbtifrhKCvdL+d/5Tzxl8C8qCWfnJhVTqGRmVGBDFf4SukCjxF5CMG1naSlkgrINlMNc34IfQ2UAxRSscsEaMiijDQFBwGhJLQzef0r9vfIycnv3Ua/xQ5Pjqtcy/Go6K849wsNNUQ4yMgaUWZ8tmwFuqu4nFC2lI/H8EZN4NBejjMnJs3F6IMb0xe45/r7TXvWEpZ1c/nNwrvOPi/U44VkwMgp/EcRgV smbaker@node.smbaker-xos-test.xos-pg0.wisc.cloudlab.us\n",
+      "private_key_fn": "/opt/xos/services/vsg/keys/vsg_rsa",
+      "service_specific_id": null,
+      "service_specific_attribute": "{\"backend_network_label\": \"hpc_client\"}"
+   },
+   {
+      "humanReadableName": "volt",
+      "validators": {
+         "service_specific_attribute": [],
+         "policed": [],
+         "view_url": [],
+         "backend_register": [
+            "notBlank"
+         ],
+         "backend_status": [
+            "notBlank"
+         ],
+         "id": [],
+         "private_key_fn": [],
+         "icon_url": [],
+         "no_sync": [],
+         "updated": [
+            "notBlank"
+         ],
+         "description": [],
+         "deleted": [],
+         "lazy_blocked": [],
+         "versionNumber": [],
+         "service_specific_id": [],
+         "enacted": [],
+         "public_key": [],
+         "kind": [
+            "notBlank"
+         ],
+         "name": [
+            "notBlank"
+         ],
+         "created": [],
+         "write_protect": [],
+         "no_policy": [],
+         "enabled": [],
+         "controller": [],
+         "published": []
+      },
+      "id": 7,
+      "created": "2016-06-20T21:36:36.468811Z",
+      "updated": "2016-06-20T21:36:36.468645Z",
+      "enacted": null,
+      "policed": null,
+      "backend_register": "{}",
+      "backend_status": "0 - Provisioning in progress",
+      "deleted": false,
+      "write_protect": false,
+      "lazy_blocked": false,
+      "no_sync": false,
+      "no_policy": false,
+      "description": null,
+      "enabled": true,
+      "kind": "vOLT",
+      "name": "volt",
+      "versionNumber": null,
+      "published": true,
+      "view_url": "/admin/cord/voltservice/$id$/",
+      "icon_url": null,
+      "public_key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCl1k9r1G491+ClISp6JOKlNmgBSV5YAvw2Ulh5Mj7XUgLatjHIBID2Ue54kAbCP48LVIAhqVFClPC7PtfVQY9+3mKi+LUJCgkkjR+6IlK/8eVzr1i3BvhLbtifrhKCvdL+d/5Tzxl8C8qCWfnJhVTqGRmVGBDFf4SukCjxF5CMG1naSlkgrINlMNc34IfQ2UAxRSscsEaMiijDQFBwGhJLQzef0r9vfIycnv3Ua/xQ5Pjqtcy/Go6K849wsNNUQ4yMgaUWZ8tmwFuqu4nFC2lI/H8EZN4NBejjMnJs3F6IMb0xe45/r7TXvWEpZ1c/nNwrvOPi/U44VkwMgp/EcRgV smbaker@node.smbaker-xos-test.xos-pg0.wisc.cloudlab.us\n",
+      "private_key_fn": "/opt/xos/services/volt/keys/volt_rsa",
+      "service_specific_id": null,
+      "service_specific_attribute": null
+   },
+   {
+      "humanReadableName": "vtr",
+      "validators": {
+         "service_specific_attribute": [],
+         "policed": [],
+         "view_url": [],
+         "backend_register": [
+            "notBlank"
+         ],
+         "backend_status": [
+            "notBlank"
+         ],
+         "id": [],
+         "private_key_fn": [],
+         "icon_url": [],
+         "no_sync": [],
+         "updated": [
+            "notBlank"
+         ],
+         "description": [],
+         "deleted": [],
+         "lazy_blocked": [],
+         "versionNumber": [],
+         "service_specific_id": [],
+         "enacted": [],
+         "public_key": [],
+         "kind": [
+            "notBlank"
+         ],
+         "name": [
+            "notBlank"
+         ],
+         "created": [],
+         "write_protect": [],
+         "no_policy": [],
+         "enabled": [],
+         "controller": [],
+         "published": []
+      },
+      "id": 8,
+      "created": "2016-06-20T21:36:37.129713Z",
+      "updated": "2016-06-20T21:36:37.129433Z",
+      "enacted": null,
+      "policed": null,
+      "backend_register": "{}",
+      "backend_status": "0 - Provisioning in progress",
+      "deleted": false,
+      "write_protect": false,
+      "lazy_blocked": false,
+      "no_sync": false,
+      "no_policy": false,
+      "description": null,
+      "enabled": true,
+      "kind": "vTR",
+      "name": "vtr",
+      "versionNumber": null,
+      "published": true,
+      "view_url": "/admin/vtr/vtrservice/$id$/",
+      "icon_url": null,
+      "public_key": null,
+      "private_key_fn": null,
+      "service_specific_id": null,
+      "service_specific_attribute": null
+   },
+   {
+      "humanReadableName": "vtn",
+      "validators": {
+         "service_specific_attribute": [],
+         "policed": [],
+         "view_url": [],
+         "backend_register": [
+            "notBlank"
+         ],
+         "backend_status": [
+            "notBlank"
+         ],
+         "id": [],
+         "private_key_fn": [],
+         "icon_url": [],
+         "no_sync": [],
+         "updated": [
+            "notBlank"
+         ],
+         "description": [],
+         "deleted": [],
+         "lazy_blocked": [],
+         "versionNumber": [],
+         "service_specific_id": [],
+         "enacted": [],
+         "public_key": [],
+         "kind": [
+            "notBlank"
+         ],
+         "name": [
+            "notBlank"
+         ],
+         "created": [],
+         "write_protect": [],
+         "no_policy": [],
+         "enabled": [],
+         "controller": [],
+         "published": []
+      },
+      "id": 2,
+      "created": "2016-06-20T21:35:51.964599Z",
+      "updated": "2016-06-20T21:37:46.469766Z",
+      "enacted": null,
+      "policed": null,
+      "backend_register": "{}",
+      "backend_status": "0 - Provisioning in progress",
+      "deleted": false,
+      "write_protect": false,
+      "lazy_blocked": false,
+      "no_sync": false,
+      "no_policy": false,
+      "description": null,
+      "enabled": true,
+      "kind": "VTN",
+      "name": "vtn",
+      "versionNumber": null,
+      "published": true,
+      "view_url": "/admin/vtn/vtnservice/$id$/",
+      "icon_url": null,
+      "public_key": null,
+      "private_key_fn": null,
+      "service_specific_id": null,
+      "service_specific_attribute": "{\"sshUser\": \"root\", \"xosEndpoint\": \"http://xos/\", \"xosPassword\": \"letmein\", \"sshKeyFile\": \"/root/node_key\", \"xosUser\": \"padmin@vicci.org\", \"ovsdbPort\": \"6641\", \"sshPort\": \"22\", \"localManagementIp\": \"172.27.0.1/24\", \"privateGatewayMac\": \"00:00:00:00:00:01\"}"
+   },
+   {
+      "humanReadableName": "ONOS_CORD",
+      "validators": {
+         "service_specific_attribute": [],
+         "policed": [],
+         "view_url": [],
+         "backend_register": [
+            "notBlank"
+         ],
+         "backend_status": [
+            "notBlank"
+         ],
+         "id": [],
+         "private_key_fn": [],
+         "icon_url": [],
+         "no_sync": [],
+         "updated": [
+            "notBlank"
+         ],
+         "description": [],
+         "deleted": [],
+         "lazy_blocked": [],
+         "versionNumber": [],
+         "service_specific_id": [],
+         "enacted": [],
+         "public_key": [],
+         "kind": [
+            "notBlank"
+         ],
+         "name": [
+            "notBlank"
+         ],
+         "created": [],
+         "write_protect": [],
+         "no_policy": [],
+         "enabled": [],
+         "controller": [],
+         "published": []
+      },
+      "id": 1,
+      "created": "2016-06-20T21:35:51.892027Z",
+      "updated": "2016-06-20T21:37:46.417265Z",
+      "enacted": "2016-06-20T21:37:54.037851Z",
+      "policed": null,
+      "backend_register": "{\"next_run\": 0, \"last_success\": 1466458674.061194, \"exponent\": 0}",
+      "backend_status": "1 - OK",
+      "deleted": false,
+      "write_protect": false,
+      "lazy_blocked": false,
+      "no_sync": false,
+      "no_policy": false,
+      "description": null,
+      "enabled": true,
+      "kind": "onos",
+      "name": "ONOS_CORD",
+      "versionNumber": null,
+      "published": true,
+      "view_url": "/admin/onos/onosservice/$id$/",
+      "icon_url": null,
+      "public_key": null,
+      "private_key_fn": null,
+      "service_specific_id": null,
+      "service_specific_attribute": "{\"no_container\": true, \"rest_hostname\": \"onos-cord\"}"
+   }
+]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/sites.json b/views/ngXosViews/serviceGrid/mocks/data/sites.json
new file mode 100644
index 0000000..bd0ba95
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/mocks/data/sites.json
@@ -0,0 +1,72 @@
+[
+  {
+    "humanReadableName": "mysite",
+    "validators": {
+      "policed": [],
+      "backend_register": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "id": [],
+      "site_url": [
+        "url"
+      ],
+      "location": [
+        "notBlank"
+      ],
+      "hosts_nodes": [],
+      "no_sync": [],
+      "abbreviated_name": [
+        "notBlank"
+      ],
+      "updated": [
+        "notBlank"
+      ],
+      "deleted": [],
+      "lazy_blocked": [],
+      "latitude": [],
+      "is_public": [],
+      "enacted": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "write_protect": [],
+      "no_policy": [],
+      "enabled": [],
+      "longitude": [],
+      "hosts_users": [],
+      "login_base": [
+        "notBlank"
+      ]
+    },
+    "id": 1,
+    "created": "2016-06-20T21:33:36.116579Z",
+    "updated": "2016-06-20T21:36:36.210629Z",
+    "enacted": null,
+    "policed": "2016-06-20T21:36:37.091400Z",
+    "backend_register": "{}",
+    "backend_status": "1 - OK",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": false,
+    "no_policy": false,
+    "name": "mysite",
+    "site_url": "http://xosproject.org/",
+    "enabled": true,
+    "hosts_nodes": true,
+    "hosts_users": true,
+    "location": null,
+    "longitude": null,
+    "latitude": null,
+    "login_base": "mysite",
+    "is_public": true,
+    "abbreviated_name": "",
+    "deployments": [
+      1
+    ]
+  }
+]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/slices.json b/views/ngXosViews/serviceGrid/mocks/data/slices.json
new file mode 100644
index 0000000..2f4d00c
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/mocks/data/slices.json
@@ -0,0 +1,163 @@
+[
+  {
+    "humanReadableName": "mysite_management",
+    "validators": {
+      "default_flavor": [],
+      "policed": [],
+      "creator": [],
+      "site": [
+        "notBlank"
+      ],
+      "max_instances": [
+        "notBlank"
+      ],
+      "backend_register": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "id": [],
+      "network": [],
+      "service": [],
+      "default_isolation": [
+        "notBlank"
+      ],
+      "no_sync": [],
+      "exposed_ports": [],
+      "updated": [
+        "notBlank"
+      ],
+      "description": [],
+      "deleted": [],
+      "slice_url": [
+        "url"
+      ],
+      "serviceClass": [],
+      "lazy_blocked": [],
+      "omf_friendly": [],
+      "mount_data_sets": [],
+      "default_node": [],
+      "enacted": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "write_protect": [],
+      "no_policy": [],
+      "enabled": [],
+      "default_image": []
+    },
+    "id": 1,
+    "created": "2016-06-20T21:36:31.979507Z",
+    "updated": "2016-06-20T21:36:38.635976Z",
+    "enacted": null,
+    "policed": "2016-06-20T21:36:38.787528Z",
+    "backend_register": "{}",
+    "backend_status": "0 - Provisioning in progress",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": false,
+    "no_policy": false,
+    "name": "mysite_management",
+    "enabled": true,
+    "omf_friendly": false,
+    "description": "",
+    "slice_url": "",
+    "site": 1,
+    "max_instances": 10,
+    "service": null,
+    "network": "noauto",
+    "exposed_ports": null,
+    "serviceClass": null,
+    "creator": 1,
+    "default_flavor": null,
+    "default_image": null,
+    "mount_data_sets": "GenBank",
+    "default_isolation": "vm",
+    "networks": []
+  },
+  {
+    "humanReadableName": "mysite_vsg",
+    "validators": {
+      "default_flavor": [],
+      "policed": [],
+      "creator": [],
+      "site": [
+        "notBlank"
+      ],
+      "max_instances": [
+        "notBlank"
+      ],
+      "backend_register": [
+        "notBlank"
+      ],
+      "backend_status": [
+        "notBlank"
+      ],
+      "id": [],
+      "network": [],
+      "service": [],
+      "default_isolation": [
+        "notBlank"
+      ],
+      "no_sync": [],
+      "exposed_ports": [],
+      "updated": [
+        "notBlank"
+      ],
+      "description": [],
+      "deleted": [],
+      "slice_url": [
+        "url"
+      ],
+      "serviceClass": [],
+      "lazy_blocked": [],
+      "omf_friendly": [],
+      "mount_data_sets": [],
+      "default_node": [],
+      "enacted": [],
+      "name": [
+        "notBlank"
+      ],
+      "created": [],
+      "write_protect": [],
+      "no_policy": [],
+      "enabled": [],
+      "default_image": []
+    },
+    "id": 2,
+    "created": "2016-06-20T21:36:36.290539Z",
+    "updated": "2016-06-20T21:36:38.625760Z",
+    "enacted": null,
+    "policed": "2016-06-20T21:36:40.119502Z",
+    "backend_register": "{}",
+    "backend_status": "0 - Provisioning in progress",
+    "deleted": false,
+    "write_protect": false,
+    "lazy_blocked": false,
+    "no_sync": false,
+    "no_policy": false,
+    "name": "mysite_vsg",
+    "enabled": true,
+    "omf_friendly": false,
+    "description": "",
+    "slice_url": "",
+    "site": 1,
+    "max_instances": 10,
+    "service": 6,
+    "network": "noauto",
+    "exposed_ports": null,
+    "serviceClass": null,
+    "creator": 1,
+    "default_flavor": null,
+    "default_image": 1,
+    "mount_data_sets": "GenBank",
+    "default_isolation": "vm",
+    "networks": [
+      2,
+      1
+    ]
+  }
+]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/data/tenants.json b/views/ngXosViews/serviceGrid/mocks/data/tenants.json
new file mode 100644
index 0000000..2739c9a
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/mocks/data/tenants.json
@@ -0,0 +1,612 @@
+[
+    {
+        "humanReadableName": "coarse-tenant-3",
+        "validators": {
+            "service_specific_attribute": [],
+            "policed": [],
+            "backend_register": [
+                "notBlank"
+            ],
+            "backend_status": [
+                "notBlank"
+            ],
+            "id": [],
+            "no_policy": [],
+            "subscriber_service": [],
+            "subscriber_tenant": [],
+            "no_sync": [],
+            "connect_method": [
+                "notBlank"
+            ],
+            "updated": [
+                "notBlank"
+            ],
+            "deleted": [],
+            "lazy_blocked": [],
+            "service_specific_id": [],
+            "subscriber_root": [],
+            "subscriber_user": [],
+            "enacted": [],
+            "kind": [
+                "notBlank"
+            ],
+            "created": [],
+            "write_protect": [],
+            "subscriber_network": [],
+            "provider_service": [
+                "notBlank"
+            ]
+        },
+        "id": 3,
+        "created": "2016-06-20T21:36:36.274049Z",
+        "updated": "2016-06-20T21:36:36.273883Z",
+        "enacted": null,
+        "policed": null,
+        "backend_register": "{}",
+        "backend_status": "0 - Provisioning in progress",
+        "deleted": false,
+        "write_protect": false,
+        "lazy_blocked": false,
+        "no_sync": false,
+        "no_policy": false,
+        "kind": "coarse",
+        "provider_service": 5,
+        "subscriber_service": 6,
+        "subscriber_tenant": null,
+        "subscriber_user": null,
+        "subscriber_root": null,
+        "subscriber_network": null,
+        "service_specific_id": null,
+        "service_specific_attribute": null,
+        "connect_method": "na"
+    },
+    {
+        "humanReadableName": "coarse-tenant-4",
+        "validators": {
+            "service_specific_attribute": [],
+            "policed": [],
+            "backend_register": [
+                "notBlank"
+            ],
+            "backend_status": [
+                "notBlank"
+            ],
+            "id": [],
+            "no_policy": [],
+            "subscriber_service": [],
+            "subscriber_tenant": [],
+            "no_sync": [],
+            "connect_method": [
+                "notBlank"
+            ],
+            "updated": [
+                "notBlank"
+            ],
+            "deleted": [],
+            "lazy_blocked": [],
+            "service_specific_id": [],
+            "subscriber_root": [],
+            "subscriber_user": [],
+            "enacted": [],
+            "kind": [
+                "notBlank"
+            ],
+            "created": [],
+            "write_protect": [],
+            "subscriber_network": [],
+            "provider_service": [
+                "notBlank"
+            ]
+        },
+        "id": 4,
+        "created": "2016-06-20T21:36:36.477159Z",
+        "updated": "2016-06-20T21:36:36.477018Z",
+        "enacted": null,
+        "policed": null,
+        "backend_register": "{}",
+        "backend_status": "0 - Provisioning in progress",
+        "deleted": false,
+        "write_protect": false,
+        "lazy_blocked": false,
+        "no_sync": false,
+        "no_policy": false,
+        "kind": "coarse",
+        "provider_service": 6,
+        "subscriber_service": 7,
+        "subscriber_tenant": null,
+        "subscriber_user": null,
+        "subscriber_root": null,
+        "subscriber_network": null,
+        "service_specific_id": null,
+        "service_specific_attribute": null,
+        "connect_method": "na"
+    },
+    {
+        "humanReadableName": "vOLT-tenant-6",
+        "validators": {
+            "service_specific_attribute": [],
+            "policed": [],
+            "backend_register": [
+                "notBlank"
+            ],
+            "backend_status": [
+                "notBlank"
+            ],
+            "id": [],
+            "no_policy": [],
+            "subscriber_service": [],
+            "subscriber_tenant": [],
+            "no_sync": [],
+            "connect_method": [
+                "notBlank"
+            ],
+            "updated": [
+                "notBlank"
+            ],
+            "deleted": [],
+            "lazy_blocked": [],
+            "service_specific_id": [],
+            "subscriber_root": [],
+            "subscriber_user": [],
+            "enacted": [],
+            "kind": [
+                "notBlank"
+            ],
+            "created": [],
+            "write_protect": [],
+            "subscriber_network": [],
+            "provider_service": [
+                "notBlank"
+            ]
+        },
+        "id": 6,
+        "created": "2016-06-20T21:36:36.533209Z",
+        "updated": "2016-06-20T21:36:36.533060Z",
+        "enacted": null,
+        "policed": null,
+        "backend_register": "{}",
+        "backend_status": "0 - Provisioning in progress",
+        "deleted": false,
+        "write_protect": false,
+        "lazy_blocked": false,
+        "no_sync": false,
+        "no_policy": false,
+        "kind": "vOLT",
+        "provider_service": 7,
+        "subscriber_service": null,
+        "subscriber_tenant": null,
+        "subscriber_user": null,
+        "subscriber_root": 1,
+        "subscriber_network": null,
+        "service_specific_id": "123",
+        "service_specific_attribute": null,
+        "connect_method": "na"
+    },
+    {
+        "humanReadableName": "vCPE-tenant-7",
+        "validators": {
+            "service_specific_attribute": [],
+            "policed": [],
+            "backend_register": [
+                "notBlank"
+            ],
+            "backend_status": [
+                "notBlank"
+            ],
+            "id": [],
+            "no_policy": [],
+            "subscriber_service": [],
+            "subscriber_tenant": [],
+            "no_sync": [],
+            "connect_method": [
+                "notBlank"
+            ],
+            "updated": [
+                "notBlank"
+            ],
+            "deleted": [],
+            "lazy_blocked": [],
+            "service_specific_id": [],
+            "subscriber_root": [],
+            "subscriber_user": [],
+            "enacted": [],
+            "kind": [
+                "notBlank"
+            ],
+            "created": [],
+            "write_protect": [],
+            "subscriber_network": [],
+            "provider_service": [
+                "notBlank"
+            ]
+        },
+        "id": 7,
+        "created": "2016-06-20T21:36:36.556180Z",
+        "updated": "2016-06-20T21:36:37.277167Z",
+        "enacted": "2016-06-20T21:43:30.075930Z",
+        "policed": null,
+        "backend_register": "{\"next_run\": 0, \"last_success\": 1466459040.216983, \"exponent\": 0}",
+        "backend_status": "1 - OK",
+        "deleted": false,
+        "write_protect": false,
+        "lazy_blocked": false,
+        "no_sync": false,
+        "no_policy": false,
+        "kind": "vCPE",
+        "provider_service": 6,
+        "subscriber_service": null,
+        "subscriber_tenant": 6,
+        "subscriber_user": null,
+        "subscriber_root": null,
+        "subscriber_network": null,
+        "service_specific_id": null,
+        "service_specific_attribute": "{\"instance_id\": 1, \"creator_id\": 1, \"last_ansible_hash\": \"30d35de441b1e87e7e6a4fc79834ac56\"}",
+        "connect_method": "na"
+    },
+    {
+        "humanReadableName": "vROUTER-tenant-9",
+        "validators": {
+            "service_specific_attribute": [],
+            "policed": [],
+            "backend_register": [
+                "notBlank"
+            ],
+            "backend_status": [
+                "notBlank"
+            ],
+            "id": [],
+            "no_policy": [],
+            "subscriber_service": [],
+            "subscriber_tenant": [],
+            "no_sync": [],
+            "connect_method": [
+                "notBlank"
+            ],
+            "updated": [
+                "notBlank"
+            ],
+            "deleted": [],
+            "lazy_blocked": [],
+            "service_specific_id": [],
+            "subscriber_root": [],
+            "subscriber_user": [],
+            "enacted": [],
+            "kind": [
+                "notBlank"
+            ],
+            "created": [],
+            "write_protect": [],
+            "subscriber_network": [],
+            "provider_service": [
+                "notBlank"
+            ]
+        },
+        "id": 9,
+        "created": "2016-06-20T21:36:36.677067Z",
+        "updated": "2016-06-20T21:36:36.677678Z",
+        "enacted": null,
+        "policed": null,
+        "backend_register": "{\"next_run\": 1466494205.83568, \"last_failure\": 1466465405.835683, \"last_success\": 1466458621.14023, \"exponent\": 209, \"failures\": 209}",
+        "backend_status": "2 - Exception('Expecting object: line 1 column 1 (char 0) // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/network/configuration/hosts',)",
+        "deleted": false,
+        "write_protect": false,
+        "lazy_blocked": false,
+        "no_sync": false,
+        "no_policy": false,
+        "kind": "vROUTER",
+        "provider_service": 5,
+        "subscriber_service": null,
+        "subscriber_tenant": 7,
+        "subscriber_user": null,
+        "subscriber_root": null,
+        "subscriber_network": null,
+        "service_specific_id": null,
+        "service_specific_attribute": "{\"public_ip\": \"10.168.0.3\", \"address_pool_id\": 2, \"public_mac\": \"02:42:0a:a8:00:03\"}",
+        "connect_method": "na"
+    },
+    {
+        "humanReadableName": "vROUTER-tenant-8",
+        "validators": {
+            "service_specific_attribute": [],
+            "policed": [],
+            "backend_register": [
+                "notBlank"
+            ],
+            "backend_status": [
+                "notBlank"
+            ],
+            "id": [],
+            "no_policy": [],
+            "subscriber_service": [],
+            "subscriber_tenant": [],
+            "no_sync": [],
+            "connect_method": [
+                "notBlank"
+            ],
+            "updated": [
+                "notBlank"
+            ],
+            "deleted": [],
+            "lazy_blocked": [],
+            "service_specific_id": [],
+            "subscriber_root": [],
+            "subscriber_user": [],
+            "enacted": [],
+            "kind": [
+                "notBlank"
+            ],
+            "created": [],
+            "write_protect": [],
+            "subscriber_network": [],
+            "provider_service": [
+                "notBlank"
+            ]
+        },
+        "id": 8,
+        "created": "2016-06-20T21:36:36.664628Z",
+        "updated": "2016-06-20T21:36:36.665255Z",
+        "enacted": null,
+        "policed": null,
+        "backend_register": "{\"next_run\": 1466494206.981866, \"last_failure\": 1466465406.981868, \"last_success\": 1466458619.671976, \"exponent\": 209, \"failures\": 209}",
+        "backend_status": "2 - Exception('Expecting object: line 1 column 1 (char 0) // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/network/configuration/hosts',)",
+        "deleted": false,
+        "write_protect": false,
+        "lazy_blocked": false,
+        "no_sync": false,
+        "no_policy": false,
+        "kind": "vROUTER",
+        "provider_service": 5,
+        "subscriber_service": 6,
+        "subscriber_tenant": null,
+        "subscriber_user": null,
+        "subscriber_root": null,
+        "subscriber_network": null,
+        "service_specific_id": null,
+        "service_specific_attribute": "{\"public_ip\": \"10.168.0.2\", \"tenant_for_instance_id\": 1, \"address_pool_id\": 2, \"public_mac\": \"02:42:0a:a8:00:02\"}",
+        "connect_method": "na"
+    },
+    {
+        "humanReadableName": "onos-tenant-1",
+        "validators": {
+            "service_specific_attribute": [],
+            "policed": [],
+            "backend_register": [
+                "notBlank"
+            ],
+            "backend_status": [
+                "notBlank"
+            ],
+            "id": [],
+            "no_policy": [],
+            "subscriber_service": [],
+            "subscriber_tenant": [],
+            "no_sync": [],
+            "connect_method": [
+                "notBlank"
+            ],
+            "updated": [
+                "notBlank"
+            ],
+            "deleted": [],
+            "lazy_blocked": [],
+            "service_specific_id": [],
+            "subscriber_root": [],
+            "subscriber_user": [],
+            "enacted": [],
+            "kind": [
+                "notBlank"
+            ],
+            "created": [],
+            "write_protect": [],
+            "subscriber_network": [],
+            "provider_service": [
+                "notBlank"
+            ]
+        },
+        "id": 1,
+        "created": "2016-06-20T21:35:52.080746Z",
+        "updated": "2016-06-20T21:37:46.517157Z",
+        "enacted": "2016-06-20T21:37:55.377495Z",
+        "policed": null,
+        "backend_register": "{\"next_run\": 0, \"last_success\": 1466458677.529692, \"exponent\": 0}",
+        "backend_status": "1 - OK",
+        "deleted": false,
+        "write_protect": false,
+        "lazy_blocked": false,
+        "no_sync": false,
+        "no_policy": false,
+        "kind": "onos",
+        "provider_service": 1,
+        "subscriber_service": 2,
+        "subscriber_tenant": null,
+        "subscriber_user": null,
+        "subscriber_root": null,
+        "subscriber_network": null,
+        "service_specific_id": null,
+        "service_specific_attribute": "{\"creator_id\": 1, \"dependencies\": \"org.onosproject.drivers, org.onosproject.drivers.ovsdb, org.onosproject.openflow-base, org.onosproject.ovsdb-base, org.onosproject.dhcp, org.onosproject.cordvtn, org.onosproject.olt, org.onosproject.igmp, org.onosproject.cordmcast\", \"name\": \"VTN_ONOS_app\"}",
+        "connect_method": "na"
+    },
+    {
+        "humanReadableName": "onos-tenant-5",
+        "validators": {
+            "service_specific_attribute": [],
+            "policed": [],
+            "backend_register": [
+                "notBlank"
+            ],
+            "backend_status": [
+                "notBlank"
+            ],
+            "id": [],
+            "no_policy": [],
+            "subscriber_service": [],
+            "subscriber_tenant": [],
+            "no_sync": [],
+            "connect_method": [
+                "notBlank"
+            ],
+            "updated": [
+                "notBlank"
+            ],
+            "deleted": [],
+            "lazy_blocked": [],
+            "service_specific_id": [],
+            "subscriber_root": [],
+            "subscriber_user": [],
+            "enacted": [],
+            "kind": [
+                "notBlank"
+            ],
+            "created": [],
+            "write_protect": [],
+            "subscriber_network": [],
+            "provider_service": [
+                "notBlank"
+            ]
+        },
+        "id": 5,
+        "created": "2016-06-20T21:36:36.499094Z",
+        "updated": "2016-06-20T21:36:36.498928Z",
+        "enacted": null,
+        "policed": null,
+        "backend_register": "{\"next_run\": 1466494235.874574, \"failures\": 732, \"last_success\": 1466458599.686363, \"exponent\": 732, \"last_failure\": 1466465435.874577}",
+        "backend_status": "2 - Exception('Ansible playbook failed. // Status code was not [200] // Status code was not [200]',)",
+        "deleted": false,
+        "write_protect": false,
+        "lazy_blocked": false,
+        "no_sync": false,
+        "no_policy": false,
+        "kind": "onos",
+        "provider_service": 1,
+        "subscriber_service": 7,
+        "subscriber_tenant": null,
+        "subscriber_user": null,
+        "subscriber_root": null,
+        "subscriber_network": null,
+        "service_specific_id": null,
+        "service_specific_attribute": "{\"creator_id\": 1, \"dependencies\": \"org.onosproject.openflow-base, org.onosproject.olt, org.ciena.onos.ext_notifier, org.ciena.onos.volt_event_publisher\", \"name\": \"vOLT_ONOS_app\", \"install_dependencies\": \"onos-ext-notifier-1.0-SNAPSHOT.oar, onos-ext-volt-event-publisher-1.0-SNAPSHOT.oar\"}",
+        "connect_method": "na"
+    },
+    {
+        "humanReadableName": "onos-tenant-10",
+        "validators": {
+            "service_specific_attribute": [],
+            "policed": [],
+            "backend_register": [
+                "notBlank"
+            ],
+            "backend_status": [
+                "notBlank"
+            ],
+            "id": [],
+            "no_policy": [],
+            "subscriber_service": [],
+            "subscriber_tenant": [],
+            "no_sync": [],
+            "connect_method": [
+                "notBlank"
+            ],
+            "updated": [
+                "notBlank"
+            ],
+            "deleted": [],
+            "lazy_blocked": [],
+            "service_specific_id": [],
+            "subscriber_root": [],
+            "subscriber_user": [],
+            "enacted": [],
+            "kind": [
+                "notBlank"
+            ],
+            "created": [],
+            "write_protect": [],
+            "subscriber_network": [],
+            "provider_service": [
+                "notBlank"
+            ]
+        },
+        "id": 10,
+        "created": "2016-06-20T21:36:37.094935Z",
+        "updated": "2016-06-20T21:36:37.094764Z",
+        "enacted": null,
+        "policed": null,
+        "backend_register": "{\"next_run\": 1466494237.018397, \"failures\": 732, \"last_success\": 1466458602.833531, \"exponent\": 732, \"last_failure\": 1466465437.0184}",
+        "backend_status": "2 - Exception('Ansible playbook failed. // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.vrouter/active',)",
+        "deleted": false,
+        "write_protect": false,
+        "lazy_blocked": false,
+        "no_sync": false,
+        "no_policy": false,
+        "kind": "onos",
+        "provider_service": 4,
+        "subscriber_service": 5,
+        "subscriber_tenant": null,
+        "subscriber_user": null,
+        "subscriber_root": null,
+        "subscriber_network": null,
+        "service_specific_id": null,
+        "service_specific_attribute": "{\"creator_id\": 1, \"dependencies\": \"org.onosproject.vrouter\", \"name\": \"vRouter_ONOS_app\"}",
+        "connect_method": "na"
+    },
+    {
+        "humanReadableName": "onos-tenant-2",
+        "validators": {
+            "service_specific_attribute": [],
+            "policed": [],
+            "backend_register": [
+                "notBlank"
+            ],
+            "backend_status": [
+                "notBlank"
+            ],
+            "id": [],
+            "no_policy": [],
+            "subscriber_service": [],
+            "subscriber_tenant": [],
+            "no_sync": [],
+            "connect_method": [
+                "notBlank"
+            ],
+            "updated": [
+                "notBlank"
+            ],
+            "deleted": [],
+            "lazy_blocked": [],
+            "service_specific_id": [],
+            "subscriber_root": [],
+            "subscriber_user": [],
+            "enacted": [],
+            "kind": [
+                "notBlank"
+            ],
+            "created": [],
+            "write_protect": [],
+            "subscriber_network": [],
+            "provider_service": [
+                "notBlank"
+            ]
+        },
+        "id": 2,
+        "created": "2016-06-20T21:35:56.835440Z",
+        "updated": "2016-06-20T21:35:56.835274Z",
+        "enacted": null,
+        "policed": null,
+        "backend_register": "{\"next_run\": 1466494229.282132, \"failures\": 736, \"last_success\": 1466458566.347982, \"exponent\": 736, \"last_failure\": 1466465429.282135}",
+        "backend_status": "2 - Exception('Ansible playbook failed. // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.lldpprovider/active // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.hostprovider/active // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.openflow-base/active // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.openflow/active // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.drivers/active // Socket error: [Errno 111] Connection refused to http://onos-fabric:8181/onos/v1/applications/org.onosproject.segmentrouting/active',)",
+        "deleted": false,
+        "write_protect": false,
+        "lazy_blocked": false,
+        "no_sync": false,
+        "no_policy": false,
+        "kind": "onos",
+        "provider_service": 4,
+        "subscriber_service": 3,
+        "subscriber_tenant": null,
+        "subscriber_user": null,
+        "subscriber_root": null,
+        "subscriber_network": null,
+        "service_specific_id": null,
+        "service_specific_attribute": "{\"creator_id\": 1, \"dependencies\": \"org.onosproject.lldpprovider, org.onosproject.hostprovider, org.onosproject.openflow-base, org.onosproject.openflow, org.onosproject.drivers, org.onosproject.segmentrouting\", \"name\": \"Fabric_ONOS_app\"}",
+        "connect_method": "na"
+    }
+]
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/mocks/diagnostic.conf.json b/views/ngXosViews/serviceGrid/mocks/diagnostic.conf.json
new file mode 100644
index 0000000..70c3337
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/mocks/diagnostic.conf.json
@@ -0,0 +1,52 @@
+{
+  "endpoints": [
+    {
+      "url": "images",
+      "base": "api/core/",
+      "methods": ["GET"],
+      "param": "id"
+    },
+    {
+      "url": "instances",
+      "base": "api/core/",
+      "methods": ["GET"],
+      "param": "id"
+    },
+    {
+      "url": "networks",
+      "base": "api/core/",
+      "methods": ["GET"],
+      "param": "id"
+    },
+    {
+      "url": "networktemplates",
+      "base": "api/core/",
+      "methods": ["GET"],
+      "param": "id"
+    },
+    {
+      "url": "services",
+      "base": "api/core/",
+      "methods": ["GET"],
+      "param": "id"
+    },
+    {
+      "url": "sites",
+      "base": "api/core/",
+      "methods": ["GET"],
+      "param": "id"
+    },
+    {
+      "url": "slices",
+      "base": "api/core/",
+      "methods": ["GET"],
+      "param": "id"
+    },
+    {
+      "url": "tenants",
+      "base": "api/core/",
+      "methods": ["GET"],
+      "param": "id"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/package.json b/views/ngXosViews/serviceGrid/package.json
index c33c615..130737b 100644
--- a/views/ngXosViews/serviceGrid/package.json
+++ b/views/ngXosViews/serviceGrid/package.json
@@ -9,7 +9,8 @@
     "build": "gulp",
     "test": "karma start",
     "test:ci": "karma start --single-run",
-    "lint": "eslint src/js/"
+    "lint": "eslint src/js/",
+    "server": "easy-mocker -c ./mocks/diagnostic.conf.json -d ./mocks/data"
   },
   "keywords": [
     "XOS",
diff --git a/views/ngXosViews/serviceGrid/spec/sample.test.js b/views/ngXosViews/serviceGrid/spec/sample.test.js
deleted file mode 100644
index c026149..0000000
--- a/views/ngXosViews/serviceGrid/spec/sample.test.js
+++ /dev/null
@@ -1,37 +0,0 @@
-'use strict';
-
-describe('The User List', () => {
-  
-  var scope, element, isolatedScope, httpBackend;
-
-  beforeEach(module('xos.serviceGrid'));
-  beforeEach(module('templates'));
-
-  beforeEach(inject(function($httpBackend, $compile, $rootScope){
-    
-    httpBackend = $httpBackend;
-    // Setting up mock request
-    $httpBackend.expectGET('/api/core/users/?no_hyperlinks=1').respond([
-      {
-        email: 'teo@onlab.us',
-        firstname: 'Matteo',
-        lastname: 'Scandolo' 
-      }
-    ]);
-  
-    scope = $rootScope.$new();
-    element = angular.element('<users-list></users-list>');
-    $compile(element)(scope);
-    scope.$digest();
-    isolatedScope = element.isolateScope().vm;
-  }));
-
-  xit('should load 1 users', () => {
-    httpBackend.flush();
-    expect(isolatedScope.users.length).toBe(1);
-    expect(isolatedScope.users[0].email).toEqual('teo@onlab.us');
-    expect(isolatedScope.users[0].firstname).toEqual('Matteo');
-    expect(isolatedScope.users[0].lastname).toEqual('Scandolo');
-  });
-
-});
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/spec/services_encoder.test.js b/views/ngXosViews/serviceGrid/spec/services_encoder.test.js
new file mode 100644
index 0000000..3107b7f
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/spec/services_encoder.test.js
@@ -0,0 +1,223 @@
+/**
+ * © OpenCORD
+ *
+ * Visit http://guide.xosproject.org/devguide/addview/ for more information
+ *
+ * Created by teone on 6/22/16.
+ */
+
+(function () {
+  'use strict';
+  describe('The Services Encoder Service', () => {
+
+    var service, rootScope, ArchiveManagerSpy, toscaBase;
+
+    const toscaBaseDefault = {
+      topology_template: {
+        node_templates: {}
+      }
+    };
+
+    beforeEach(module('xos.serviceGrid'));
+    beforeEach(module('templates'));
+
+    beforeEach(inject(($rootScope, ArchiveManager, ServiceEncoder) => {
+      rootScope = $rootScope;
+      toscaBase = angular.copy(toscaBaseDefault);
+
+      ArchiveManagerSpy = ArchiveManager;
+      spyOn(ArchiveManagerSpy, 'createArchive');
+      spyOn(ArchiveManagerSpy, 'addFile');
+      service = ServiceEncoder;
+    }));
+
+    describe('the formatServiceProperties method', () => {
+
+      it('should return only the existing properties', (done) => {
+        service.formatServiceProperties({name: 'test', kind: 'vCPE'}, toscaBase)
+        .then(res => {
+          expect(res).toEqual({
+            topology_template:{
+              node_templates: {
+                'service#test': {
+                  type: 'tosca.nodes.VSGService',
+                  properties: {kind: 'vCPE'}
+                }
+              }
+            }
+          });
+          done();
+        });
+        rootScope.$apply();
+      });
+
+      it('should return all properties', (done) => {
+        service.formatServiceProperties({
+            name: 'test',
+            kind: 'vCPE',
+            view_url: 'view_url',
+            icon_url: 'icon_url',
+            private_key_fn: 'private_key_fn'
+          }, toscaBase)
+          .then(res => {
+            expect(res).toEqual({
+              topology_template:{
+                node_templates: {
+                  'service#test': {
+                    type: 'tosca.nodes.VSGService',
+                    properties: {
+                      kind: 'vCPE',
+                      view_url: 'view_url',
+                      icon_url: 'icon_url',
+                      private_key_fn: 'private_key_fn'
+                    }
+                  }
+                }
+              }
+            });
+            done();
+          });
+        rootScope.$apply();
+      });
+
+      describe('when a public key is provided', () => {
+        it('should add public_key and artifacts properties', (done) => {
+
+          let expected = {
+            topology_template:{
+              node_templates: {
+                'service#test': {
+                  type: 'tosca.nodes.VSGService',
+                  properties: {
+                    kind: 'vCPE',
+                    public_key: '{ get_artifact: [ SELF, pubkey, LOCAL_FILE] }'
+                  },
+                  artifacts: {
+                    pubkey: '/opt/xos/tosca/test/test_rsa.pub'
+                  }
+                }
+              }
+            }
+          };
+
+          service.formatServiceProperties({
+              kind: 'vCPE',
+              public_key: 'pkey',
+              name: 'test'
+            }, toscaBase)
+            .then(res => {
+              expect(res).toEqual(expected);
+              done();
+            });
+          rootScope.$apply();
+        });
+
+        it('should add public_key file to the archive', (done) => {
+          service.formatServiceProperties({
+              kind: 'vCPE',
+              public_key: 'pkey',
+              name: 'test'
+            }, toscaBase)
+            .then(res => {
+              expect(ArchiveManagerSpy.addFile).toHaveBeenCalledWith('test_rsa.pub', 'pkey');
+              done();
+            });
+          rootScope.$apply();
+        });
+      });
+    });
+
+    describe('the getServiceRequirements method', () => {
+      let TenantSpy, ServiceSpy, tenantQueryPromise;
+      beforeEach(inject(function(Tenants, Services, $q){
+
+        tenantQueryPromise= $q.defer();
+
+        TenantSpy = Tenants;
+        spyOn(TenantSpy, 'query').and.callFake(function(){
+          return {$promise: tenantQueryPromise.promise};
+        });
+
+        ServiceSpy = Services;
+        spyOn(ServiceSpy, 'get').and.callFake(function(p){
+          let d = $q.defer();
+          d.resolve({name: `deps_${p.id}`});
+          return {$promise: d.promise};
+        });
+      }));
+
+      it('should call the tenants service with correct params', () => {
+        service.getServiceRequirements({id: 1});
+        expect(TenantSpy.query).toHaveBeenCalledWith({subscriber_service: 1});
+      });
+
+      it('should not add requirements if the current service has no dependency', (done) => {
+        service.getServiceRequirements({id: 1}, {})
+          .then(res => {
+            expect(res).toEqual({});
+            done();
+          });
+        tenantQueryPromise.resolve();
+        rootScope.$apply();
+      });
+
+      it('should return a list of required service', () => {
+        service.getServiceRequirements({id: 1, name: 'test'}, {topology_template: {node_templates: {'service#test': {}}}})
+          .then(res => {
+            expect(res.topology_template.node_templates['service#test'].requirements).toEqual([
+              {
+                deps_3_tenant: {
+                  node: 'service#deps_3',
+                  relationship: 'tosca.relationships.TenantOfService'
+                }
+              },
+              {
+                deps_4_tenant: {
+                  node: 'service#deps_4',
+                  relationship: 'tosca.relationships.TenantOfService'
+                }
+              }
+            ]);
+          });
+        tenantQueryPromise.resolve([
+          {
+            subscriber_service: 1,
+            provider_service: 3
+          },
+          {
+            subscriber_service: 1,
+            provider_service: 4
+          }
+        ]);
+        rootScope.$apply();
+      });
+
+      it('should return a list of unique required service', () => {
+        service.getServiceRequirements({id: 1, name: 'test'}, {topology_template: {node_templates: {'service#test': {}}}})
+          .then(res => {
+            expect(res.topology_template.node_templates['service#test'].requirements).toEqual([
+              {
+                deps_3_tenant: {
+                  node: 'service#deps_3',
+                  relationship: 'tosca.relationships.TenantOfService'
+                }
+              }
+            ]);
+          });
+        tenantQueryPromise.resolve([
+          {
+            subscriber_service: 1,
+            provider_service: 3
+          },
+          {
+            subscriber_service: 1,
+            provider_service: 3
+          }
+        ]);
+        rootScope.$apply();
+      });
+    });
+  });
+
+})();
+
diff --git a/views/ngXosViews/serviceGrid/spec/site_encoder.test.js b/views/ngXosViews/serviceGrid/spec/site_encoder.test.js
new file mode 100644
index 0000000..fdc6d50
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/spec/site_encoder.test.js
@@ -0,0 +1,62 @@
+/**
+ * © OpenCORD
+ *
+ * Visit http://guide.xosproject.org/devguide/addview/ for more information
+ *
+ * Created by teone on 6/22/16.
+ */
+
+(function () {
+  'use strict';
+  describe('The Site Encoder service', () => {
+    let service, toscaBase, siteGetPromise, SiteSpy, rootScope;
+
+    const toscaBaseDefault = {
+      topology_template: {
+        node_templates: {}
+      }
+    };
+
+    const siteResponse = {
+      name: 'MySite'
+    };
+
+    const expected = [{
+      topology_template: {
+        node_templates: {
+          'MySite': {
+            type: 'tosca.nodes.Site',
+          }
+        }
+      }
+    }, siteResponse];
+
+    beforeEach(module('xos.serviceGrid'));
+    beforeEach(module('templates'));
+
+    beforeEach(inject((SiteEncoder, Sites, $q, $rootScope) => {
+      toscaBase = angular.copy(toscaBaseDefault);
+      service = SiteEncoder;
+      rootScope = $rootScope;
+
+      siteGetPromise= $q.defer();
+      SiteSpy = Sites;
+      spyOn(SiteSpy, 'get').and.callFake(function(){
+        return {$promise: siteGetPromise.promise};
+      });
+    }));
+
+    describe('given a Site Id', () => {
+      it('should return the correct JSON structure', (done) => {
+        service.buildTosca({id: 1}, toscaBase)
+          .then(res => {
+            expect(res).toEqual(expected);
+            done();
+          });
+        siteGetPromise.resolve(siteResponse);
+        rootScope.$apply();
+      });
+    });
+  });
+})();
+
diff --git a/views/ngXosViews/serviceGrid/spec/slices_encoder.test.js b/views/ngXosViews/serviceGrid/spec/slices_encoder.test.js
new file mode 100644
index 0000000..f32bc9a
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/spec/slices_encoder.test.js
@@ -0,0 +1,103 @@
+/**
+ * © OpenCORD
+ *
+ * Visit http://guide.xosproject.org/devguide/addview/ for more information
+ *
+ * Created by teone on 6/22/16.
+ */
+
+(function () {
+  'use strict';
+
+  describe('The Slices Encoder service', () => {
+
+    let service, toscaBase, sliceQueryPromise, SliceSpy, rootScope;
+
+    const toscaBaseDefault = {
+      topology_template: {
+        node_templates: {}
+      }
+    };
+
+    const slicesArray = [
+      {
+        name: 'Slice1',
+        description: 'Description1',
+        network: 'noauto'
+      },
+      {
+        name: 'Slice2',
+        description: 'Description2',
+        network: 'noauto'
+      }
+    ];
+
+    const expected = {
+      topology_template: {
+        node_templates: {
+          Slice1: {
+            description: 'Description1',
+            type: 'tosca.nodes.Slice',
+            properties: {
+              network: 'noauto'
+            },
+            requirements: [
+              {management: {node: 'management', relationship: 'tosca.relationships.ConnectsToNetwork'}},
+              {test_service: {node: 'service#test', relationship: 'tosca.relationships.MemberOfService'}}
+            ]
+          },
+          Slice2: {
+            description: 'Description2',
+            type: 'tosca.nodes.Slice',
+            properties: {
+              network: 'noauto'
+            },
+            requirements: [
+              {management: {node: 'management', relationship: 'tosca.relationships.ConnectsToNetwork'}},
+              {test_service: {node: 'service#test', relationship: 'tosca.relationships.MemberOfService'}}
+            ]
+          }
+        }
+      }
+    };
+
+    beforeEach(module('xos.serviceGrid'));
+    beforeEach(module('templates'));
+
+    beforeEach(inject((SlicesEncoder, Slices, $q, $rootScope) => {
+      toscaBase = angular.copy(toscaBaseDefault);
+      service = SlicesEncoder;
+      rootScope = $rootScope;
+
+      sliceQueryPromise= $q.defer();
+      SliceSpy = Slices;
+      spyOn(SliceSpy, 'query').and.callFake(function(){
+        return {$promise: sliceQueryPromise.promise};
+      });
+    }));
+    
+    describe('given a Slices array ', () => {
+      it('should return the correct JSON structure', (done) => {
+        service.buildTosca(slicesArray, toscaBase, 'test')
+        .then(res => {
+          expect(res).toEqual(expected);
+          done();
+        });
+        rootScope.$apply();
+      });
+    });
+
+    describe('given a service', () => {
+      it('should return the JSON structure for all related slices', (done) => {
+        service.getServiceSlices({id : 1, name: 'test'}, toscaBase)
+        .then(res => {
+          expect(res).toEqual(expected);
+          done();
+        });
+        sliceQueryPromise.resolve(slicesArray);
+        rootScope.$apply();
+      });
+    });
+  });
+})();
+
diff --git a/views/ngXosViews/serviceGrid/spec/tosca_encoder.test.js b/views/ngXosViews/serviceGrid/spec/tosca_encoder.test.js
new file mode 100644
index 0000000..d968419
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/spec/tosca_encoder.test.js
@@ -0,0 +1,234 @@
+(function () {
+  'use strict';
+  describe('The Tosca Encoder Service', () => {
+
+    var service, httpBackend, rootScope, ArchiveManagerSpy, toscaBase;
+
+    const serviceData = {
+      id: 1,
+      name: 'vsg',
+      kind: 'vCPE'
+    };
+
+    const toscaBaseDefault = {
+      topology_template: {
+        node_templates: {}
+      }
+    };
+
+    beforeEach(module('xos.serviceGrid'));
+    beforeEach(module('templates'));
+
+    beforeEach(inject(function($httpBackend, $rootScope, ToscaEncoder, ArchiveManager){
+
+      httpBackend = $httpBackend;
+      rootScope = $rootScope;
+      toscaBase = angular.copy(toscaBaseDefault);
+      service = ToscaEncoder;
+      ArchiveManagerSpy = ArchiveManager;
+      spyOn(ArchiveManagerSpy, 'createArchive');
+      spyOn(ArchiveManagerSpy, 'addFile');
+      spyOn(ArchiveManagerSpy, 'download');
+    }));
+
+    describe('the serviceToTosca method', () => {
+
+      const fakePropertiesDefault = {
+        tosca_definitions_version: 'tosca_simple_yaml_1_0',
+        description: 'Just enough Tosca to get the vSG slice running on the CORD POD',
+        imports: [
+          'custom_types/xos.yaml'
+        ],
+        topology_template:{
+          node_templates: {
+            'service#vsg': {
+              type: 'tosca.nodes.VSGService',
+              properties: {
+                view_url: 'viewUrl',
+                icon_url: 'iconUrl',
+                kind: 'vCPE'
+              }
+            }
+          }
+        }
+      };
+
+      const fakeRequirements = {
+        tosca_definitions_version: 'tosca_simple_yaml_1_0',
+        description: 'Just enough Tosca to get the vSG slice running on the CORD POD',
+        imports: [
+          'custom_types/xos.yaml'
+        ],
+        topology_template:{
+          node_templates: {
+            'service#vsg': {
+              type: 'tosca.nodes.VSGService',
+              properties: {
+                view_url: 'viewUrl',
+                icon_url: 'iconUrl',
+                kind: 'vCPE'
+              },
+              requirements: [
+                {
+                  node: 'service#vrouter',
+                  relationship: 'tosca.relationships.TenantOfService'
+                },
+                {
+                  node: 'service#volt',
+                  relationship: 'tosca.relationships.TenantOfService'
+                }
+              ]
+            }
+          }
+        }
+      };
+
+      const expectedWithoutRequirements = `tosca_definitions_version: tosca_simple_yaml_1_0
+description: Just enough Tosca to get the vSG slice running on the CORD POD
+imports:
+  - custom_types/xos.yaml
+topology_template:
+  node_templates:
+    service#vsg:
+      type: tosca.nodes.VSGService
+      properties:
+        view_url: viewUrl
+        icon_url: iconUrl
+        kind: vCPE
+`;
+
+      const expectedWithRequirements = `tosca_definitions_version: tosca_simple_yaml_1_0
+description: Just enough Tosca to get the vSG slice running on the CORD POD
+imports:
+  - custom_types/xos.yaml
+topology_template:
+  node_templates:
+    service#vsg:
+      type: tosca.nodes.VSGService
+      properties:
+        view_url: viewUrl
+        icon_url: iconUrl
+        kind: vCPE
+      requirements:
+        - node: service#vrouter
+          relationship: tosca.relationships.TenantOfService
+        - node: service#volt
+          relationship: tosca.relationships.TenantOfService
+`;
+
+      const expectedWithSlices = `tosca_definitions_version: tosca_simple_yaml_1_0
+description: Just enough Tosca to get the vSG slice running on the CORD POD
+imports:
+  - custom_types/xos.yaml
+topology_template:
+  node_templates:
+    service#vsg:
+      type: tosca.nodes.VSGService
+      properties:
+        view_url: viewUrl
+        icon_url: iconUrl
+        kind: vCPE
+    service_slice:
+      description: A service slice
+      type: tosca.nodes.Slice
+      properties:
+        network: noauto
+`;
+
+      let formatPromise, requirementPromise, slicesPromise, fakeProperties, serviceEncoderSpy, slicesEncoderSpy;
+
+      beforeEach(inject(($q, ServiceEncoder, SlicesEncoder) => {
+
+        serviceEncoderSpy = ServiceEncoder;
+        slicesEncoderSpy = SlicesEncoder;
+
+        // clone the base property for mock
+        fakeProperties = angular.copy(fakePropertiesDefault);
+
+        // create the promises
+        // this will be resolved in the single IT block,
+        // to allow different resolutions
+        formatPromise = $q.defer();
+        requirementPromise = $q.defer();
+        slicesPromise = $q.defer();
+
+        // mock functions and return promises
+        spyOn(serviceEncoderSpy, 'formatServiceProperties').and.callFake(function(){
+          return formatPromise.promise;
+        });
+        spyOn(serviceEncoderSpy, 'getServiceRequirements').and.callFake(function(){
+          return requirementPromise.promise;
+        });
+        spyOn(slicesEncoderSpy, 'getServiceSlices').and.callFake(function(){
+          return slicesPromise.promise;
+        });
+      }));
+
+      it('should create a new archive', () => {
+        service.serviceToTosca(serviceData);
+        expect(ArchiveManagerSpy.createArchive).toHaveBeenCalled();
+      });
+
+      it('should add the service file to the archive', (done) => {
+        service.serviceToTosca(serviceData)
+        .then(() => {
+          expect(ArchiveManagerSpy.addFile).toHaveBeenCalledWith('vsg_service.yaml', expectedWithoutRequirements);
+          expect(ArchiveManagerSpy.download).toHaveBeenCalledWith('vsg');
+          done();
+        });
+        formatPromise.resolve(fakeProperties);
+        requirementPromise.resolve(fakeProperties);
+        slicesPromise.resolve(fakeProperties);
+        rootScope.$apply();
+      });
+
+      // IS IT REALLY USEFULL TO TEST THE CONVERTION TO YAML?
+      xit('should create a tosca spec with no requirements', (done) => {
+        service.serviceToTosca(serviceData)
+          .then(res => {
+            expect(res).toEqual(expectedWithoutRequirements);
+            done();
+          });
+        formatPromise.resolve(fakeProperties);
+        requirementPromise.resolve(fakeProperties);
+        slicesPromise.resolve(fakeProperties);
+        rootScope.$apply();
+      });
+
+      xit('should create a tosca spec with requirements', (done) => {
+        service.serviceToTosca(serviceData)
+          .then(res => {
+            expect(res).toEqual(expectedWithRequirements);
+            done();
+          });
+        formatPromise.resolve(fakeProperties);
+        requirementPromise.resolve(fakeRequirements);
+        slicesPromise.resolve(fakeProperties);
+        rootScope.$apply();
+      });
+
+      xit('should create a tosca spec with additional slices', (done) => {
+
+        // this is dirty, we are changing an object and shouldn't be done in tests
+        angular.extend(
+          fakeProperties.topology_template.node_templates, {service_slice: {
+            description: 'A service slice',
+            type: 'tosca.nodes.Slice',
+            properties: {
+              network: 'noauto'
+            }
+          }});
+
+        service.serviceToTosca(serviceData)
+          .then(res => {
+            expect(res).toEqual(expectedWithSlices);
+            done();
+          });
+        formatPromise.resolve(fakeProperties);
+        requirementPromise.resolve(fakeProperties);
+        slicesPromise.resolve(fakeProperties);
+        rootScope.$apply();
+      });
+    });
+  });
+}());
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/src/index.html b/views/ngXosViews/serviceGrid/src/index.html
index d9e7fec..8f95e59 100644
--- a/views/ngXosViews/serviceGrid/src/index.html
+++ b/views/ngXosViews/serviceGrid/src/index.html
@@ -14,6 +14,9 @@
 </div>
 
 <!-- bower:js -->
+<script src="vendor/js-yaml/dist/js-yaml.js"></script>
+<script src="vendor/jszip/dist/jszip.js"></script>
+<script src="vendor/file-saver/FileSaver.js"></script>
 <script src="vendor/jquery/dist/jquery.js"></script>
 <script src="vendor/angular/angular.js"></script>
 <script src="vendor/angular-mocks/angular-mocks.js"></script>
@@ -26,10 +29,19 @@
 <script src="vendor/Chart.js/Chart.js"></script>
 <script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
 <script src="vendor/d3/d3.js"></script>
+<script src="vendor/angular-recursion/angular-recursion.js"></script>
 <!-- endbower -->
 <!-- endjs -->
 <!-- inject:js -->
 <script src="/../../../xos/core/xoslib/static/js/vendor/ngXosHelpers.js"></script>
 <script src="/.tmp/main.js"></script>
+<script src="/.tmp/tosca_encoder.service.js"></script>
+<script src="/.tmp/slices_encorder.service.js"></script>
+<script src="/.tmp/site_encode.service.js"></script>
+<script src="/.tmp/service_encorder.service.js"></script>
 <script src="/.tmp/service-graph.js"></script>
+<script src="/.tmp/networks_encoder.service.js"></script>
+<script src="/.tmp/network_template_encoder.service.js"></script>
+<script src="/.tmp/image_encoder.service.js"></script>
+<script src="/.tmp/archive_manager.service.js"></script>
 <!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/src/js/archive_manager.service.js b/views/ngXosViews/serviceGrid/src/js/archive_manager.service.js
new file mode 100644
index 0000000..92681ee
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/src/js/archive_manager.service.js
@@ -0,0 +1,39 @@
+/**
+ * © OpenCORD
+ *
+ * Visit http://guide.xosproject.org/devguide/addview/ for more information
+ *
+ * Created by teone on 6/22/16.
+ */
+
+(function () {
+  'use strict';
+
+  /**
+   * @ngdoc service
+   * @name xos.ArchiveManager.serviceGrid
+   **/
+
+  angular.module('xos.serviceGrid')
+  .service('ArchiveManager', function(){
+    this.createArchive = () => {
+      this.archive = new JSZip();
+    };
+
+    this.addFile = (fileName, content) => {
+      this.archive.file(fileName, content);
+    };
+
+    this.download = (name) => {
+      console.log(this.archive);
+      this.archive.generateAsync({type: 'blob'})
+        .then(function(content) {
+          saveAs(content, `${name}.zip`);
+        })
+        .catch(e => {
+          console.log(e);
+        });
+    };
+  });
+})();
+
diff --git a/views/ngXosViews/serviceGrid/src/js/image_encoder.service.js b/views/ngXosViews/serviceGrid/src/js/image_encoder.service.js
new file mode 100644
index 0000000..972023c
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/src/js/image_encoder.service.js
@@ -0,0 +1,40 @@
+/**
+ * © OpenCORD
+ *
+ * Visit http://guide.xosproject.org/devguide/addview/ for more information
+ *
+ * Created by teone on 6/22/16.
+ */
+
+(function () {
+  'use strict';
+
+  /**
+   * @ngdoc service
+   * @name xos.ImageEncoder.serviceGrid
+   **/
+
+  // TODO write tests
+  angular.module('xos.serviceGrid')
+    .service('ImageEncoder', function($q, Images){
+
+      this.buildTosca = (imageId, toscaSpec) => {
+        const d = $q.defer();
+
+        Images.get({id: imageId}).$promise
+          .then(image => {
+            const toscaObj = {};
+            toscaObj[`image#${image.name}`] = {
+              type: 'tosca.nodes.Image'
+            };
+            angular.extend(toscaSpec.topology_template.node_templates, toscaObj);
+            d.resolve([toscaSpec, image]);
+          })
+          .catch(d.reject);
+
+
+        return d.promise;
+      };
+    });
+})();
+
diff --git a/views/ngXosViews/serviceGrid/src/js/main.js b/views/ngXosViews/serviceGrid/src/js/main.js
index 88a0f95..fc75b2f 100644
--- a/views/ngXosViews/serviceGrid/src/js/main.js
+++ b/views/ngXosViews/serviceGrid/src/js/main.js
@@ -27,7 +27,7 @@
     bindToController: true,
     controllerAs: 'vm',
     templateUrl: 'templates/service-grid.tpl.html',
-    controller: function(Services, _){
+    controller: function(Services, ToscaEncoder, _){
 
       this.tableConfig = {
         columns: [
@@ -65,7 +65,21 @@
         filter: 'field',
         order: {
           field: 'name'
-        }
+        },
+        actions: [
+          {
+            label: 'export',
+            icon: 'export',
+            cb: service => {
+              this.tosca = '';
+              ToscaEncoder.serviceToTosca(service)
+                .then(tosca => {
+                  this.showFeedback = true;
+                  this.tosca = tosca;
+                });
+            }
+          }
+        ]
       };
       
       // retrieving user list
diff --git a/views/ngXosViews/serviceGrid/src/js/network_template_encoder.service.js b/views/ngXosViews/serviceGrid/src/js/network_template_encoder.service.js
new file mode 100644
index 0000000..1784d90
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/src/js/network_template_encoder.service.js
@@ -0,0 +1,40 @@
+/**
+ * © OpenCORD
+ *
+ * Visit http://guide.xosproject.org/devguide/addview/ for more information
+ *
+ * Created by teone on 6/22/16.
+ */
+
+(function () {
+  'use strict';
+
+  /**
+   * @ngdoc service
+   * @name xos.NetworkTemplateEncoder.serviceGrid
+   **/
+
+  // TODO write tests
+  angular.module('xos.serviceGrid')
+    .service('NetworkTemplateEncoder', function($q, Networkstemplates){
+
+      this.buildTosca = (templateId, toscaSpec) => {
+        const d = $q.defer();
+        Networkstemplates.get({id: templateId}).$promise
+        .then(template => {
+          const toscaObj = {};
+          toscaObj[`network_template#${template.name}`] = {
+            type: 'tosca.nodes.NetworkTemplate'
+          };
+          angular.extend(toscaSpec.topology_template.node_templates, toscaObj);
+          d.resolve([toscaSpec, template]);
+        })
+        .catch(e => {
+          d.reject(e);
+        });
+
+        return d.promise;
+      };
+    });
+})();
+
diff --git a/views/ngXosViews/serviceGrid/src/js/networks_encoder.service.js b/views/ngXosViews/serviceGrid/src/js/networks_encoder.service.js
new file mode 100644
index 0000000..1e6adee
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/src/js/networks_encoder.service.js
@@ -0,0 +1,132 @@
+/**
+ * © OpenCORD
+ *
+ * Visit http://guide.xosproject.org/devguide/addview/ for more information
+ *
+ * Created by teone on 6/22/16.
+ */
+
+(function () {
+  'use strict';
+
+  /**
+   * @ngdoc service
+   * @name xos.NetworkEncoder.serviceGrid
+   **/
+
+  // TODO write tests
+  angular.module('xos.serviceGrid')
+    .service('NetworkEncoder', function($q, Networks, NetworkTemplateEncoder){
+
+      this.buildTosca = (networks, toscaSpec) => {
+
+        const apiNetworks = angular.copy(networks);
+
+        // store here the promise that will build the dependency structure
+        let dependency = {
+        };
+
+        const d = $q.defer();
+
+        try {
+          networks = _.reduce(networks, (obj, n) => {
+            obj[`network#${n.name}`] = {
+              type: 'tosca.nodes.network.Network.XOS',
+              requirements: []
+            };
+
+            // for each network slice, add requirement
+            if(angular.isDefined(n.slices)) {
+              _.forEach(n.slices, s => {
+                let owner = {
+                  owner: {
+                    node: s.name,
+                    relationship: 'tosca.relationships.MemberOfSlice'
+                  }
+                };
+
+                let conn =  {
+                  connection: {
+                    node: s.name,
+                    relationship: 'tosca.relationships.ConnectsToSlice'
+                  }
+                };
+                obj[`network#${n.name}`].requirements.push(owner, conn);
+              });
+
+              if(angular.isDefined(n.template)){
+                dependency[n.name] = NetworkTemplateEncoder.buildTosca(n.template, toscaSpec);
+              }
+            }
+
+            return obj;
+
+          }, {});
+
+          // if we have dependency wait for them
+          if(Object.keys(dependency).length > 0){
+            $q.all(dependency)
+            .then(deps => {
+              // NOTE how to make this readable??
+              if(deps){
+
+                // for each property in deps
+                for(let k of Object.keys(deps)){
+                  let [tosca, template] = deps[k];
+                  networks[`network#${k}`].requirements.push({
+                    network_template: {
+                      node: `network_template#${template.name}`,
+                      relationship: 'tosca.relationships.UsesNetworkTemplate'
+                    }
+                  });
+                  angular.extend(toscaSpec, tosca);
+                }
+              }
+              angular.extend(toscaSpec.topology_template.node_templates, networks);
+              d.resolve([toscaSpec, apiNetworks]);
+            })
+            .catch(e => {
+              throw new Error(e);
+            });
+          }
+          //else resolve directly
+          else {
+            angular.extend(toscaSpec.topology_template.node_templates, networks);
+            d.resolve([toscaSpec, apiNetworks]);
+          }
+        }
+        catch(e){
+          d.reject(e);
+        }
+
+        return d.promise;
+      };
+
+      this.getSliceNetworks = (slice, toscaSpec) => {
+        const d = $q.defer();
+        Networks.query({owner: slice.id}).$promise
+        .then((networks) => {
+          // check that all the network this slice own are listed in the slice
+          // does this make sense?
+          networks = _.filter(networks, n => {
+            return slice.networks.indexOf(n.id) !== -1;
+          });
+
+          // denormalize slice inside network
+          networks = networks.map(n => {
+            let idx = n.slices.indexOf(slice.id);
+            n.slices[idx] = slice;
+            return n;
+          });
+
+          this.buildTosca(networks, toscaSpec)
+          .then(d.resolve)
+          .catch(d.reject);
+
+        });
+
+        return d.promise;
+      }
+    });
+})();
+
diff --git a/views/ngXosViews/serviceGrid/src/js/service_encorder.service.js b/views/ngXosViews/serviceGrid/src/js/service_encorder.service.js
new file mode 100644
index 0000000..485d46a
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/src/js/service_encorder.service.js
@@ -0,0 +1,125 @@
+/**
+ * © OpenCORD
+ *
+ * Visit http://guide.xosproject.org/devguide/addview/ for more information
+ *
+ * Created by teone on 6/22/16.
+ */
+
+(function () {
+  'use strict';
+
+  /**
+   * @ngdoc service
+   * @name xos.toscaExporter.serviceGrid
+   **/
+
+  angular.module('xos.serviceGrid')
+    .service('ServiceEncoder', function($q, ArchiveManager, Tenants, Services){
+
+      const serviceTypes = {
+        fabric: 'tosca.nodes.FabricService',
+        onos: 'tosca.nodes.ONOSService',
+        vCPE: 'tosca.nodes.VSGService',
+        vOLT: 'tosca.nodes.VOLTService',
+        vROUTER: 'tosca.nodes.VRouterService',
+        VTN: 'tosca.nodes.VTNService',
+        vTR: 'tosca.nodes.Service'
+      };
+
+      this.formatServiceProperties = (service, toscaSpec) => {
+        const d = $q.defer();
+        const serviceName = `service#${service.name}`;
+        // create the structure to hold the service
+        toscaSpec.topology_template.node_templates[serviceName] = {};
+        toscaSpec.topology_template.node_templates[serviceName].type = serviceTypes[service.kind] || 'tosca.nodes.Service';
+
+        const res = {
+          properties: {
+            kind: service.kind
+          }
+        };
+
+        if(angular.isDefined(service.view_url)){
+          res.properties.view_url = service.view_url;
+        }
+
+        if(angular.isDefined(service.icon_url)){
+          res.properties.icon_url = service.icon_url;
+        }
+
+        if(angular.isDefined(service.private_key_fn)){
+          res.properties.private_key_fn = service.private_key_fn;
+        }
+
+        if(angular.isDefined(service.public_key)){
+          ArchiveManager.addFile(`${service.name}_rsa.pub`, service.public_key);
+          res.properties.public_key = '{ get_artifact: [ SELF, pubkey, LOCAL_FILE] }'
+          res['artifacts'] = {
+            pubkey: `/opt/xos/tosca/${service.name}/${service.name}_rsa.pub`
+          };
+          toscaSpec.topology_template.node_templates[serviceName].artifacts = res.artifacts;
+        }
+
+        toscaSpec.topology_template.node_templates[serviceName].properties = res.properties;
+        d.resolve(toscaSpec);
+        return d.promise;
+      };
+
+      this.getServiceRequirements = (service, toscaSpec) => {
+        const d = $q.defer();
+
+        Tenants.query({subscriber_service: service.id}).$promise
+          .then(tenants => {
+            const services = [];
+            // avoid multiple request for the same service
+            tenants = _.uniqBy(tenants, 'provider_service');
+
+            _.forEach(tenants, t => {
+              services.push(Services.get({id: t.provider_service}).$promise);
+            });
+
+            return $q.all(services)
+          })
+          .then((deps) => {
+            // Get the provider service and create an array of unique names
+            let requirements = _.reduce(deps, (list, d) => list.concat(d.name), []);
+
+            // create a object for requirements, later will parsed in Yaml
+            requirements = _.reduce(requirements, (list, r) => {
+              let name = `${r}_tenant`;
+              let obj = {};
+              obj[name] = {
+                node: `service#${r}`,
+                relationship: 'tosca.relationships.TenantOfService'
+              };
+              return list.concat(obj);
+            }, []);
+
+            if(requirements.length > 0){
+
+              // NOTE set a reference to the requirements in tosca
+              _.forEach(requirements, r => {
+                let reqName = r[Object.keys(r)[0]].node;
+                toscaSpec.topology_template.node_templates[reqName] = {
+                  type: 'tosca.nodes.Service',
+                  properties: {
+                    'no-create': true,
+                    'no-delete': true,
+                    'no-update': true
+                  }
+                };
+              });
+
+              const serviceName = `service#${service.name}`;
+              toscaSpec.topology_template.node_templates[serviceName].requirements = requirements;
+            }
+
+            d.resolve(toscaSpec);
+          });
+
+        return d.promise;
+      };
+    });
+})();
+
diff --git a/views/ngXosViews/serviceGrid/src/js/site_encode.service.js b/views/ngXosViews/serviceGrid/src/js/site_encode.service.js
new file mode 100644
index 0000000..6bb1d99
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/src/js/site_encode.service.js
@@ -0,0 +1,39 @@
+/**
+ * © OpenCORD
+ *
+ * Visit http://guide.xosproject.org/devguide/addview/ for more information
+ *
+ * Created by teone on 6/22/16.
+ */
+
+(function () {
+  'use strict';
+
+  /**
+   * @ngdoc service
+   * @name xos.SiteEncoder.serviceGrid
+   **/
+
+  angular.module('xos.serviceGrid')
+    .service('SiteEncoder', function($q, Sites){
+
+      this.buildTosca = (siteId, toscaSpec) => {
+        const d = $q.defer();
+
+        Sites.get({id: siteId}).$promise
+        .then(site => {
+          const toscaObj = {};
+          toscaObj[`${site.name}`] = {
+            type: 'tosca.nodes.Site'
+          };
+          angular.extend(toscaSpec.topology_template.node_templates, toscaObj);
+          d.resolve([toscaSpec, site]);
+        })
+        .catch(d.reject);
+
+
+        return d.promise;
+      };
+    });
+})();
+
diff --git a/views/ngXosViews/serviceGrid/src/js/slices_encorder.service.js b/views/ngXosViews/serviceGrid/src/js/slices_encorder.service.js
new file mode 100644
index 0000000..f900d98
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/src/js/slices_encorder.service.js
@@ -0,0 +1,159 @@
+/**
+ * © OpenCORD
+ *
+ * Visit http://guide.xosproject.org/devguide/addview/ for more information
+ *
+ * Created by teone on 6/22/16.
+ */
+
+(function () {
+  'use strict';
+
+  /**
+   * @ngdoc service
+   * @name xos.SlicesEncoder.serviceGrid
+   **/
+
+  angular.module('xos.serviceGrid')
+  .service('SlicesEncoder', function($q, _, Slices, SiteEncoder, ImageEncoder, NetworkEncoder){
+
+    this.buildTosca = (slices, toscaSpec, serviceName) => {
+      // store here the promise that will build the dependency structure
+      let dependency = {};
+
+      const d = $q.defer();
+      slices = _.reduce(slices, (obj, s) => {
+        obj[s.name] = {
+          type: 'tosca.nodes.Slice',
+          properties: {
+            network: s.network
+          },
+          requirements: [
+            // by default slices are connected to management network
+            {
+              management: {
+                node: 'management',
+                relationship: 'tosca.relationships.ConnectsToNetwork'
+              }
+            },
+          ]
+        };
+
+        if(angular.isDefined(serviceName)){
+          let service = {};
+          service[`${serviceName}_service`] = {
+            node: `service#${serviceName}`,
+            relationship: 'tosca.relationships.MemberOfService'
+          };
+          obj[s.name].requirements.push(service);
+        }
+
+        if(angular.isDefined(s.description)){
+          obj[s.name].description = s.description;
+        }
+        
+        if(angular.isDefined(s.site)){
+          dependency[`${s.name}#site`] = SiteEncoder.buildTosca(s.site, toscaSpec);
+        }
+        if(angular.isDefined(s.default_image)){
+          dependency[`${s.name}#image`] = ImageEncoder.buildTosca(s.default_image, toscaSpec);
+        }
+        if(angular.isDefined(s.networks) && s.networks.length > 0){
+          dependency[`${s.name}#management`] = NetworkEncoder.getSliceNetworks(s, toscaSpec);
+        }
+
+        return obj;
+      }, {});
+
+      // if we have dependency wait for them
+      if(Object.keys(dependency).length > 0){
+
+        let relationMap = {
+          site: 'tosca.relationships.MemberOfSite',
+          image: 'tosca.relationships.DefaultImage'
+        };
+
+        // NOTE create a reference to the management network
+        toscaSpec.topology_template.node_templates['management'] = {
+          type: 'tosca.nodes.network.Network.XOS',
+          properties: {
+            'no-create': true,
+            'no-delete': true,
+            'no-update': true
+          }
+        };
+
+        $q.all(dependency)
+        .then(deps => {
+
+          for(let k of Object.keys(deps)){
+
+            // this is UGLY!!!
+            // we are passing the requirement type inside the object key
+            // in which the promise is stored.
+            // This let us build the requirements array
+            let [sliceName, requirementType] = k.split('#');
+
+            if(angular.isDefined(relationMap[requirementType])){
+
+              if(!slices[sliceName].requirements){
+                slices[sliceName].requirements = [];
+              }
+
+              let [tosca, resource] = deps[k];
+
+              let requirementObj = {};
+
+              let reqName;
+
+              // NOTE site have problem with prefixing
+              if(requirementType === 'site'){
+                reqName = resource.name;
+              }
+              else{
+                reqName = `${requirementType}#${resource.name}`;
+              }
+
+              requirementObj[requirementType] = {
+                node: reqName,
+                relationship: relationMap[requirementType]
+              };
+
+              slices[sliceName].requirements.push(requirementObj);
+
+              angular.extend(toscaSpec, tosca);
+            }
+
+          }
+          // here we add slices to tosca
+          angular.extend(toscaSpec.topology_template.node_templates, slices);
+          d.resolve(toscaSpec);
+        })
+        .catch(e => {
+          throw new Error(e);
+        });
+      }
+      //else resolve directly
+      else {
+        angular.extend(toscaSpec.topology_template.node_templates, slices);
+        d.resolve(toscaSpec);
+      }
+
+      return d.promise;
+    };
+
+    this.getServiceSlices = (service, toscaSpec) => {
+      const d = $q.defer();
+      Slices.query({service: service.id}).$promise
+      .then(slices => {
+        return this.buildTosca(slices, toscaSpec, service.name)
+      })
+      .then(slicesTosca => {
+        d.resolve(slicesTosca);
+      });
+
+      return d.promise;
+    };
+  });
+})();
+
diff --git a/views/ngXosViews/serviceGrid/src/js/tosca_encoder.service.js b/views/ngXosViews/serviceGrid/src/js/tosca_encoder.service.js
new file mode 100644
index 0000000..5798aca
--- /dev/null
+++ b/views/ngXosViews/serviceGrid/src/js/tosca_encoder.service.js
@@ -0,0 +1,79 @@
+(function () {
+  'use strict';
+
+  /**
+   * @ngdoc service
+   * @name xos.toscaExporter.serviceGrid
+   **/
+
+  angular.module('xos.serviceGrid')
+  .service('ToscaEncoder', function($q, _, ArchiveManager, ServiceEncoder, SlicesEncoder){
+
+    let toscaSpec = {
+      tosca_definitions_version: 'tosca_simple_yaml_1_0',
+      description: '',
+      imports: [
+        'custom_types/xos.yaml'
+      ],
+      topology_template:{
+        node_templates: {}
+      }
+    };
+
+    /**
+     * @ngdoc method
+     * @name xos.serviceGrid.ToscaEncoder#$toYml
+     * @methodOf xos.serviceGrid.ToscaEncoder
+     * @description
+     * Convert a Json data structure to Yaml, use https://github.com/nodeca/js-yaml
+     * @param {Object} item A Json object to be converted
+     * @returns {string} The Yaml representation of the Json input
+     **/
+
+    this.toYml = (item) => {
+      return jsyaml.dump(item).replace(/'/g, '');
+    };
+
+    this.export = (service) => {
+      ArchiveManager.download(service.name);
+      const file = this.toYml(toscaSpec);
+      return file;
+    };
+
+    this.serviceToTosca = service => {
+
+      ArchiveManager.createArchive();
+      //clean
+      toscaSpec.topology_template.node_templates = {};
+
+      toscaSpec.description = `Just enough Tosca to get the ${service.humanReadableName} service up and running`;
+
+      const d = $q.defer();
+
+      // build service properties
+      ServiceEncoder.formatServiceProperties(service, toscaSpec)
+      .then(spec => {
+        return SlicesEncoder.getServiceSlices(service, spec);
+      })
+      // add required slices (and it will all the slice requirements)
+      .then((spec) => {
+        return ServiceEncoder.getServiceRequirements(service, spec);
+      })
+      // add required services (provider services)
+      .then((spec) => {
+        ArchiveManager.addFile(`${service.name}_service.yaml`, this.toYml(spec));
+
+        this.export(service);
+
+        d.resolve(this.toYml(spec));
+      })
+      .catch(e => {
+        d.reject(e);
+      });
+      return d.promise;
+
+    }
+
+  });
+
+}());
\ No newline at end of file
diff --git a/views/ngXosViews/serviceGrid/src/templates/service-grid.tpl.html b/views/ngXosViews/serviceGrid/src/templates/service-grid.tpl.html
index fa324b4..8e88e38 100644
--- a/views/ngXosViews/serviceGrid/src/templates/service-grid.tpl.html
+++ b/views/ngXosViews/serviceGrid/src/templates/service-grid.tpl.html
@@ -11,4 +11,16 @@
       Tenancy Graph
     </a> -->
   </div>
-</div>
\ No newline at end of file
+</div>
+
+<div class="row">
+  <div class="col-xs-12">
+    <div class="alert alert-info" ng-show="vm.showFeedback">
+      Remember that you should copy any key artifact inside the container in <pre>/opt/xos/tosca</pre>!
+    </div>
+  </div>
+</div>
+
+<pre ng-show="vm.tosca">
+{{vm.tosca}}
+</pre>
\ No newline at end of file
diff --git a/xos/configurations/frontend/Vagrantfile b/xos/configurations/frontend/Vagrantfile
index 747c209..4c772d8 100644
--- a/xos/configurations/frontend/Vagrantfile
+++ b/xos/configurations/frontend/Vagrantfile
@@ -10,7 +10,7 @@
 
   # increase RAM
   config.vm.provider :virtualbox do |vb|
-      vb.customize ['modifyvm', :id,'--memory', '2048']
+      vb.customize ['modifyvm', :id,'--memory', '4096']
   end
 
   # make the frontend config
diff --git a/xos/configurations/frontend/xos.yaml b/xos/configurations/frontend/xos.yaml
index 021eb49..763f31a 100644
--- a/xos/configurations/frontend/xos.yaml
+++ b/xos/configurations/frontend/xos.yaml
@@ -70,6 +70,17 @@
               node: xos
               relationship: tosca.relationships.UsedByXOS
 
+    # TOSCA Folder
+    /opt/xos/tosca:
+      type: tosca.nodes.XOSVolume
+      properties:
+          host_path: { path_join: [ SELF, CONFIG_DIR, ../../tosca/, ENV_VAR ] }
+          read_only: false
+      requirements:
+          - xos:
+              node: xos
+              relationship: tosca.relationships.UsedByXOS
+
     # View Folder
     /opt/xos/core/xoslib/static:
       type: tosca.nodes.XOSVolume
diff --git a/xos/core/migrations/0001_initial.py b/xos/core/migrations/0001_initial.py
deleted file mode 100644
index c55a8bf..0000000
--- a/xos/core/migrations/0001_initial.py
+++ /dev/null
@@ -1,1953 +0,0 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
-import core.models.instance
-import core.models.network
-import core.models.serviceclass
-import django.utils.timezone
-import encrypted_fields.fields
-import geoposition.fields
-import timezones.fields
-from django.conf import settings
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('contenttypes', '0001_initial'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            name='User',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('password', models.CharField(
-                    max_length=128, verbose_name='password')),
-                ('last_login', models.DateTimeField(
-                    default=django.utils.timezone.now, verbose_name='last login')),
-                ('email', models.EmailField(unique=True, max_length=255,
-                                            verbose_name=b'email address', db_index=True)),
-                ('username', models.CharField(default=b'Something', max_length=255)),
-                ('firstname', models.CharField(
-                    help_text=b"person's given name", max_length=200)),
-                ('lastname', models.CharField(
-                    help_text=b"person's surname", max_length=200)),
-                ('phone', models.CharField(help_text=b'phone number contact',
-                                           max_length=100, null=True, blank=True)),
-                ('user_url', models.URLField(null=True, blank=True)),
-                ('public_key', models.TextField(
-                    help_text=b'Public key string', max_length=1024, null=True, blank=True)),
-                ('is_active', models.BooleanField(default=True)),
-                ('is_admin', models.BooleanField(default=True)),
-                ('is_staff', models.BooleanField(default=True)),
-                ('is_readonly', models.BooleanField(default=False)),
-                ('created', models.DateTimeField(auto_now_add=True)),
-                ('updated', models.DateTimeField(auto_now=True)),
-                ('enacted', models.DateTimeField(default=None, null=True)),
-                ('policed', models.DateTimeField(default=None, null=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('timezone', timezones.fields.TimeZoneField(default=b'America/New_York', max_length=100, choices=[(b'Pacific/Midway', b'(GMT-1100) Pacific/Midway'), (b'Pacific/Niue', b'(GMT-1100) Pacific/Niue'), (b'Pacific/Pago_Pago', b'(GMT-1100) Pacific/Pago_Pago'), (b'America/Adak', b'(GMT-1000) America/Adak'), (b'Pacific/Honolulu', b'(GMT-1000) Pacific/Honolulu'), (b'Pacific/Johnston', b'(GMT-1000) Pacific/Johnston'), (b'Pacific/Rarotonga', b'(GMT-1000) Pacific/Rarotonga'), (b'Pacific/Tahiti', b'(GMT-1000) Pacific/Tahiti'), (b'US/Hawaii', b'(GMT-1000) US/Hawaii'), (b'Pacific/Marquesas', b'(GMT-0930) Pacific/Marquesas'), (b'America/Anchorage', b'(GMT-0900) America/Anchorage'), (b'America/Juneau', b'(GMT-0900) America/Juneau'), (b'America/Nome', b'(GMT-0900) America/Nome'), (b'America/Sitka', b'(GMT-0900) America/Sitka'), (b'America/Yakutat', b'(GMT-0900) America/Yakutat'), (b'Pacific/Gambier', b'(GMT-0900) Pacific/Gambier'), (b'US/Alaska', b'(GMT-0900) US/Alaska'), (b'America/Dawson', b'(GMT-0800) America/Dawson'), (b'America/Los_Angeles', b'(GMT-0800) America/Los_Angeles'), (b'America/Metlakatla', b'(GMT-0800) America/Metlakatla'), (b'America/Santa_Isabel', b'(GMT-0800) America/Santa_Isabel'), (b'America/Tijuana', b'(GMT-0800) America/Tijuana'), (b'America/Vancouver', b'(GMT-0800) America/Vancouver'), (b'America/Whitehorse', b'(GMT-0800) America/Whitehorse'), (b'Canada/Pacific', b'(GMT-0800) Canada/Pacific'), (b'Pacific/Pitcairn', b'(GMT-0800) Pacific/Pitcairn'), (b'US/Pacific', b'(GMT-0800) US/Pacific'), (b'America/Boise', b'(GMT-0700) America/Boise'), (b'America/Cambridge_Bay', b'(GMT-0700) America/Cambridge_Bay'), (b'America/Chihuahua', b'(GMT-0700) America/Chihuahua'), (b'America/Creston', b'(GMT-0700) America/Creston'), (b'America/Dawson_Creek', b'(GMT-0700) America/Dawson_Creek'), (b'America/Denver', b'(GMT-0700) America/Denver'), (b'America/Edmonton', b'(GMT-0700) America/Edmonton'), (b'America/Hermosillo', b'(GMT-0700) America/Hermosillo'), (b'America/Inuvik', b'(GMT-0700) America/Inuvik'), (b'America/Mazatlan', b'(GMT-0700) America/Mazatlan'), (b'America/Ojinaga', b'(GMT-0700) America/Ojinaga'), (b'America/Phoenix', b'(GMT-0700) America/Phoenix'), (b'America/Shiprock', b'(GMT-0700) America/Shiprock'), (b'America/Yellowknife', b'(GMT-0700) America/Yellowknife'), (b'Canada/Mountain', b'(GMT-0700) Canada/Mountain'), (b'US/Arizona', b'(GMT-0700) US/Arizona'), (b'US/Mountain', b'(GMT-0700) US/Mountain'), (b'America/Bahia_Banderas', b'(GMT-0600) America/Bahia_Banderas'), (b'America/Belize', b'(GMT-0600) America/Belize'), (b'America/Cancun', b'(GMT-0600) America/Cancun'), (b'America/Chicago', b'(GMT-0600) America/Chicago'), (b'America/Costa_Rica', b'(GMT-0600) America/Costa_Rica'), (b'America/El_Salvador', b'(GMT-0600) America/El_Salvador'), (b'America/Guatemala', b'(GMT-0600) America/Guatemala'), (b'America/Indiana/Knox', b'(GMT-0600) America/Indiana/Knox'), (b'America/Indiana/Tell_City', b'(GMT-0600) America/Indiana/Tell_City'), (b'America/Managua', b'(GMT-0600) America/Managua'), (b'America/Matamoros', b'(GMT-0600) America/Matamoros'), (b'America/Menominee', b'(GMT-0600) America/Menominee'), (b'America/Merida', b'(GMT-0600) America/Merida'), (b'America/Mexico_City', b'(GMT-0600) America/Mexico_City'), (b'America/Monterrey', b'(GMT-0600) America/Monterrey'), (b'America/North_Dakota/Beulah', b'(GMT-0600) America/North_Dakota/Beulah'), (b'America/North_Dakota/Center', b'(GMT-0600) America/North_Dakota/Center'), (b'America/North_Dakota/New_Salem', b'(GMT-0600) America/North_Dakota/New_Salem'), (b'America/Rainy_River', b'(GMT-0600) America/Rainy_River'), (b'America/Rankin_Inlet', b'(GMT-0600) America/Rankin_Inlet'), (b'America/Regina', b'(GMT-0600) America/Regina'), (b'America/Resolute', b'(GMT-0600) America/Resolute'), (b'America/Swift_Current', b'(GMT-0600) America/Swift_Current'), (b'America/Tegucigalpa', b'(GMT-0600) America/Tegucigalpa'), (b'America/Winnipeg', b'(GMT-0600) America/Winnipeg'), (b'Canada/Central', b'(GMT-0600) Canada/Central'), (b'Pacific/Galapagos', b'(GMT-0600) Pacific/Galapagos'), (b'US/Central', b'(GMT-0600) US/Central'), (b'America/Atikokan', b'(GMT-0500) America/Atikokan'), (b'America/Bogota', b'(GMT-0500) America/Bogota'), (b'America/Cayman', b'(GMT-0500) America/Cayman'), (b'America/Detroit', b'(GMT-0500) America/Detroit'), (b'America/Eirunepe', b'(GMT-0500) America/Eirunepe'), (b'America/Grand_Turk', b'(GMT-0500) America/Grand_Turk'), (b'America/Guayaquil', b'(GMT-0500) America/Guayaquil'), (b'America/Havana', b'(GMT-0500) America/Havana'), (b'America/Indiana/Indianapolis', b'(GMT-0500) America/Indiana/Indianapolis'), (b'America/Indiana/Marengo', b'(GMT-0500) America/Indiana/Marengo'), (b'America/Indiana/Petersburg', b'(GMT-0500) America/Indiana/Petersburg'), (b'America/Indiana/Vevay', b'(GMT-0500) America/Indiana/Vevay'), (b'America/Indiana/Vincennes', b'(GMT-0500) America/Indiana/Vincennes'), (b'America/Indiana/Winamac', b'(GMT-0500) America/Indiana/Winamac'), (b'America/Iqaluit', b'(GMT-0500) America/Iqaluit'), (b'America/Jamaica', b'(GMT-0500) America/Jamaica'), (b'America/Kentucky/Louisville', b'(GMT-0500) America/Kentucky/Louisville'), (b'America/Kentucky/Monticello', b'(GMT-0500) America/Kentucky/Monticello'), (b'America/Lima', b'(GMT-0500) America/Lima'), (b'America/Montreal', b'(GMT-0500) America/Montreal'), (b'America/Nassau', b'(GMT-0500) America/Nassau'), (b'America/New_York', b'(GMT-0500) America/New_York'), (b'America/Nipigon', b'(GMT-0500) America/Nipigon'), (b'America/Panama', b'(GMT-0500) America/Panama'), (b'America/Pangnirtung', b'(GMT-0500) America/Pangnirtung'), (b'America/Port-au-Prince', b'(GMT-0500) America/Port-au-Prince'), (b'America/Rio_Branco', b'(GMT-0500) America/Rio_Branco'), (b'America/Thunder_Bay', b'(GMT-0500) America/Thunder_Bay'), (b'America/Toronto', b'(GMT-0500) America/Toronto'), (b'Canada/Eastern', b'(GMT-0500) Canada/Eastern'), (b'Pacific/Easter', b'(GMT-0500) Pacific/Easter'), (b'US/Eastern', b'(GMT-0500) US/Eastern'), (b'America/Caracas', b'(GMT-0430) America/Caracas'), (b'America/Anguilla', b'(GMT-0400) America/Anguilla'), (b'America/Antigua', b'(GMT-0400) America/Antigua'), (b'America/Aruba', b'(GMT-0400) America/Aruba'), (b'America/Barbados', b'(GMT-0400) America/Barbados'), (b'America/Blanc-Sablon', b'(GMT-0400) America/Blanc-Sablon'), (b'America/Boa_Vista', b'(GMT-0400) America/Boa_Vista'), (b'America/Curacao', b'(GMT-0400) America/Curacao'), (b'America/Dominica', b'(GMT-0400) America/Dominica'), (b'America/Glace_Bay', b'(GMT-0400) America/Glace_Bay'), (b'America/Goose_Bay', b'(GMT-0400) America/Goose_Bay'), (b'America/Grenada', b'(GMT-0400) America/Grenada'), (b'America/Guadeloupe', b'(GMT-0400) America/Guadeloupe'), (b'America/Guyana', b'(GMT-0400) America/Guyana'), (b'America/Halifax', b'(GMT-0400) America/Halifax'), (b'America/Kralendijk', b'(GMT-0400) America/Kralendijk'), (b'America/La_Paz', b'(GMT-0400) America/La_Paz'), (b'America/Lower_Princes', b'(GMT-0400) America/Lower_Princes'), (b'America/Manaus', b'(GMT-0400) America/Manaus'), (b'America/Marigot', b'(GMT-0400) America/Marigot'), (b'America/Martinique', b'(GMT-0400) America/Martinique'), (b'America/Moncton', b'(GMT-0400) America/Moncton'), (b'America/Montserrat', b'(GMT-0400) America/Montserrat'), (b'America/Port_of_Spain', b'(GMT-0400) America/Port_of_Spain'), (b'America/Porto_Velho', b'(GMT-0400) America/Porto_Velho'), (b'America/Puerto_Rico', b'(GMT-0400) America/Puerto_Rico'), (b'America/Santo_Domingo', b'(GMT-0400) America/Santo_Domingo'), (b'America/St_Barthelemy', b'(GMT-0400) America/St_Barthelemy'), (b'America/St_Kitts', b'(GMT-0400) America/St_Kitts'), (b'America/St_Lucia', b'(GMT-0400) America/St_Lucia'), (b'America/St_Thomas', b'(GMT-0400) America/St_Thomas'), (b'America/St_Vincent', b'(GMT-0400) America/St_Vincent'), (b'America/Thule', b'(GMT-0400) America/Thule'), (b'America/Tortola', b'(GMT-0400) America/Tortola'), (b'Atlantic/Bermuda', b'(GMT-0400) Atlantic/Bermuda'), (b'Canada/Atlantic', b'(GMT-0400) Canada/Atlantic'), (b'America/St_Johns', b'(GMT-0330) America/St_Johns'), (b'Canada/Newfoundland', b'(GMT-0330) Canada/Newfoundland'), (b'America/Araguaina', b'(GMT-0300) America/Araguaina'), (b'America/Argentina/Buenos_Aires', b'(GMT-0300) America/Argentina/Buenos_Aires'), (b'America/Argentina/Catamarca', b'(GMT-0300) America/Argentina/Catamarca'), (b'America/Argentina/Cordoba', b'(GMT-0300) America/Argentina/Cordoba'), (b'America/Argentina/Jujuy', b'(GMT-0300) America/Argentina/Jujuy'), (b'America/Argentina/La_Rioja', b'(GMT-0300) America/Argentina/La_Rioja'), (b'America/Argentina/Mendoza', b'(GMT-0300) America/Argentina/Mendoza'), (b'America/Argentina/Rio_Gallegos', b'(GMT-0300) America/Argentina/Rio_Gallegos'), (b'America/Argentina/Salta', b'(GMT-0300) America/Argentina/Salta'), (b'America/Argentina/San_Juan', b'(GMT-0300) America/Argentina/San_Juan'), (b'America/Argentina/San_Luis', b'(GMT-0300) America/Argentina/San_Luis'), (b'America/Argentina/Tucuman', b'(GMT-0300) America/Argentina/Tucuman'), (b'America/Argentina/Ushuaia', b'(GMT-0300) America/Argentina/Ushuaia'), (b'America/Asuncion', b'(GMT-0300) America/Asuncion'), (b'America/Bahia', b'(GMT-0300) America/Bahia'), (b'America/Belem', b'(GMT-0300) America/Belem'), (b'America/Campo_Grande', b'(GMT-0300) America/Campo_Grande'), (b'America/Cayenne', b'(GMT-0300) America/Cayenne'), (b'America/Cuiaba', b'(GMT-0300) America/Cuiaba'), (b'America/Fortaleza', b'(GMT-0300) America/Fortaleza'), (b'America/Godthab', b'(GMT-0300) America/Godthab'), (b'America/Maceio', b'(GMT-0300) America/Maceio'), (b'America/Miquelon', b'(GMT-0300) America/Miquelon'), (b'America/Paramaribo', b'(GMT-0300) America/Paramaribo'), (b'America/Recife', b'(GMT-0300) America/Recife'), (b'America/Santarem', b'(GMT-0300) America/Santarem'), (b'America/Santiago', b'(GMT-0300) America/Santiago'), (b'Antarctica/Palmer', b'(GMT-0300) Antarctica/Palmer'), (b'Antarctica/Rothera', b'(GMT-0300) Antarctica/Rothera'), (b'Atlantic/Stanley', b'(GMT-0300) Atlantic/Stanley'), (b'America/Montevideo', b'(GMT-0200) America/Montevideo'), (b'America/Noronha', b'(GMT-0200) America/Noronha'), (b'America/Sao_Paulo', b'(GMT-0200) America/Sao_Paulo'), (b'Atlantic/South_Georgia', b'(GMT-0200) Atlantic/South_Georgia'), (b'America/Scoresbysund', b'(GMT-0100) America/Scoresbysund'), (b'Atlantic/Azores', b'(GMT-0100) Atlantic/Azores'), (b'Atlantic/Cape_Verde', b'(GMT-0100) Atlantic/Cape_Verde'), (b'Africa/Abidjan', b'(GMT+0000) Africa/Abidjan'), (b'Africa/Accra', b'(GMT+0000) Africa/Accra'), (b'Africa/Bamako', b'(GMT+0000) Africa/Bamako'), (b'Africa/Banjul', b'(GMT+0000) Africa/Banjul'), (b'Africa/Bissau', b'(GMT+0000) Africa/Bissau'), (b'Africa/Casablanca', b'(GMT+0000) Africa/Casablanca'), (b'Africa/Conakry', b'(GMT+0000) Africa/Conakry'), (b'Africa/Dakar', b'(GMT+0000) Africa/Dakar'), (b'Africa/El_Aaiun', b'(GMT+0000) Africa/El_Aaiun'), (b'Africa/Freetown', b'(GMT+0000) Africa/Freetown'), (b'Africa/Lome', b'(GMT+0000) Africa/Lome'), (b'Africa/Monrovia', b'(GMT+0000) Africa/Monrovia'), (b'Africa/Nouakchott', b'(GMT+0000) Africa/Nouakchott'), (b'Africa/Ouagadougou', b'(GMT+0000) Africa/Ouagadougou'), (b'Africa/Sao_Tome', b'(GMT+0000) Africa/Sao_Tome'), (b'America/Danmarkshavn', b'(GMT+0000) America/Danmarkshavn'), (b'Atlantic/Canary', b'(GMT+0000) Atlantic/Canary'), (b'Atlantic/Faroe', b'(GMT+0000) Atlantic/Faroe'), (b'Atlantic/Madeira', b'(GMT+0000) Atlantic/Madeira'), (b'Atlantic/Reykjavik', b'(GMT+0000) Atlantic/Reykjavik'), (b'Atlantic/St_Helena', b'(GMT+0000) Atlantic/St_Helena'), (b'Europe/Dublin', b'(GMT+0000) Europe/Dublin'), (b'Europe/Guernsey', b'(GMT+0000) Europe/Guernsey'), (
-                    b'Europe/Isle_of_Man', b'(GMT+0000) Europe/Isle_of_Man'), (b'Europe/Jersey', b'(GMT+0000) Europe/Jersey'), (b'Europe/Lisbon', b'(GMT+0000) Europe/Lisbon'), (b'Europe/London', b'(GMT+0000) Europe/London'), (b'GMT', b'(GMT+0000) GMT'), (b'UTC', b'(GMT+0000) UTC'), (b'Africa/Algiers', b'(GMT+0100) Africa/Algiers'), (b'Africa/Bangui', b'(GMT+0100) Africa/Bangui'), (b'Africa/Brazzaville', b'(GMT+0100) Africa/Brazzaville'), (b'Africa/Ceuta', b'(GMT+0100) Africa/Ceuta'), (b'Africa/Douala', b'(GMT+0100) Africa/Douala'), (b'Africa/Kinshasa', b'(GMT+0100) Africa/Kinshasa'), (b'Africa/Lagos', b'(GMT+0100) Africa/Lagos'), (b'Africa/Libreville', b'(GMT+0100) Africa/Libreville'), (b'Africa/Luanda', b'(GMT+0100) Africa/Luanda'), (b'Africa/Malabo', b'(GMT+0100) Africa/Malabo'), (b'Africa/Ndjamena', b'(GMT+0100) Africa/Ndjamena'), (b'Africa/Niamey', b'(GMT+0100) Africa/Niamey'), (b'Africa/Porto-Novo', b'(GMT+0100) Africa/Porto-Novo'), (b'Africa/Tunis', b'(GMT+0100) Africa/Tunis'), (b'Arctic/Longyearbyen', b'(GMT+0100) Arctic/Longyearbyen'), (b'Europe/Amsterdam', b'(GMT+0100) Europe/Amsterdam'), (b'Europe/Andorra', b'(GMT+0100) Europe/Andorra'), (b'Europe/Belgrade', b'(GMT+0100) Europe/Belgrade'), (b'Europe/Berlin', b'(GMT+0100) Europe/Berlin'), (b'Europe/Bratislava', b'(GMT+0100) Europe/Bratislava'), (b'Europe/Brussels', b'(GMT+0100) Europe/Brussels'), (b'Europe/Budapest', b'(GMT+0100) Europe/Budapest'), (b'Europe/Copenhagen', b'(GMT+0100) Europe/Copenhagen'), (b'Europe/Gibraltar', b'(GMT+0100) Europe/Gibraltar'), (b'Europe/Ljubljana', b'(GMT+0100) Europe/Ljubljana'), (b'Europe/Luxembourg', b'(GMT+0100) Europe/Luxembourg'), (b'Europe/Madrid', b'(GMT+0100) Europe/Madrid'), (b'Europe/Malta', b'(GMT+0100) Europe/Malta'), (b'Europe/Monaco', b'(GMT+0100) Europe/Monaco'), (b'Europe/Oslo', b'(GMT+0100) Europe/Oslo'), (b'Europe/Paris', b'(GMT+0100) Europe/Paris'), (b'Europe/Podgorica', b'(GMT+0100) Europe/Podgorica'), (b'Europe/Prague', b'(GMT+0100) Europe/Prague'), (b'Europe/Rome', b'(GMT+0100) Europe/Rome'), (b'Europe/San_Marino', b'(GMT+0100) Europe/San_Marino'), (b'Europe/Sarajevo', b'(GMT+0100) Europe/Sarajevo'), (b'Europe/Skopje', b'(GMT+0100) Europe/Skopje'), (b'Europe/Stockholm', b'(GMT+0100) Europe/Stockholm'), (b'Europe/Tirane', b'(GMT+0100) Europe/Tirane'), (b'Europe/Vaduz', b'(GMT+0100) Europe/Vaduz'), (b'Europe/Vatican', b'(GMT+0100) Europe/Vatican'), (b'Europe/Vienna', b'(GMT+0100) Europe/Vienna'), (b'Europe/Warsaw', b'(GMT+0100) Europe/Warsaw'), (b'Europe/Zagreb', b'(GMT+0100) Europe/Zagreb'), (b'Europe/Zurich', b'(GMT+0100) Europe/Zurich'), (b'Africa/Blantyre', b'(GMT+0200) Africa/Blantyre'), (b'Africa/Bujumbura', b'(GMT+0200) Africa/Bujumbura'), (b'Africa/Cairo', b'(GMT+0200) Africa/Cairo'), (b'Africa/Gaborone', b'(GMT+0200) Africa/Gaborone'), (b'Africa/Harare', b'(GMT+0200) Africa/Harare'), (b'Africa/Johannesburg', b'(GMT+0200) Africa/Johannesburg'), (b'Africa/Kigali', b'(GMT+0200) Africa/Kigali'), (b'Africa/Lubumbashi', b'(GMT+0200) Africa/Lubumbashi'), (b'Africa/Lusaka', b'(GMT+0200) Africa/Lusaka'), (b'Africa/Maputo', b'(GMT+0200) Africa/Maputo'), (b'Africa/Maseru', b'(GMT+0200) Africa/Maseru'), (b'Africa/Mbabane', b'(GMT+0200) Africa/Mbabane'), (b'Africa/Tripoli', b'(GMT+0200) Africa/Tripoli'), (b'Africa/Windhoek', b'(GMT+0200) Africa/Windhoek'), (b'Asia/Amman', b'(GMT+0200) Asia/Amman'), (b'Asia/Beirut', b'(GMT+0200) Asia/Beirut'), (b'Asia/Damascus', b'(GMT+0200) Asia/Damascus'), (b'Asia/Gaza', b'(GMT+0200) Asia/Gaza'), (b'Asia/Hebron', b'(GMT+0200) Asia/Hebron'), (b'Asia/Jerusalem', b'(GMT+0200) Asia/Jerusalem'), (b'Asia/Nicosia', b'(GMT+0200) Asia/Nicosia'), (b'Europe/Athens', b'(GMT+0200) Europe/Athens'), (b'Europe/Bucharest', b'(GMT+0200) Europe/Bucharest'), (b'Europe/Chisinau', b'(GMT+0200) Europe/Chisinau'), (b'Europe/Helsinki', b'(GMT+0200) Europe/Helsinki'), (b'Europe/Istanbul', b'(GMT+0200) Europe/Istanbul'), (b'Europe/Kiev', b'(GMT+0200) Europe/Kiev'), (b'Europe/Mariehamn', b'(GMT+0200) Europe/Mariehamn'), (b'Europe/Riga', b'(GMT+0200) Europe/Riga'), (b'Europe/Sofia', b'(GMT+0200) Europe/Sofia'), (b'Europe/Tallinn', b'(GMT+0200) Europe/Tallinn'), (b'Europe/Uzhgorod', b'(GMT+0200) Europe/Uzhgorod'), (b'Europe/Vilnius', b'(GMT+0200) Europe/Vilnius'), (b'Europe/Zaporozhye', b'(GMT+0200) Europe/Zaporozhye'), (b'Africa/Addis_Ababa', b'(GMT+0300) Africa/Addis_Ababa'), (b'Africa/Asmara', b'(GMT+0300) Africa/Asmara'), (b'Africa/Dar_es_Salaam', b'(GMT+0300) Africa/Dar_es_Salaam'), (b'Africa/Djibouti', b'(GMT+0300) Africa/Djibouti'), (b'Africa/Juba', b'(GMT+0300) Africa/Juba'), (b'Africa/Kampala', b'(GMT+0300) Africa/Kampala'), (b'Africa/Khartoum', b'(GMT+0300) Africa/Khartoum'), (b'Africa/Mogadishu', b'(GMT+0300) Africa/Mogadishu'), (b'Africa/Nairobi', b'(GMT+0300) Africa/Nairobi'), (b'Antarctica/Syowa', b'(GMT+0300) Antarctica/Syowa'), (b'Asia/Aden', b'(GMT+0300) Asia/Aden'), (b'Asia/Baghdad', b'(GMT+0300) Asia/Baghdad'), (b'Asia/Bahrain', b'(GMT+0300) Asia/Bahrain'), (b'Asia/Kuwait', b'(GMT+0300) Asia/Kuwait'), (b'Asia/Qatar', b'(GMT+0300) Asia/Qatar'), (b'Asia/Riyadh', b'(GMT+0300) Asia/Riyadh'), (b'Europe/Kaliningrad', b'(GMT+0300) Europe/Kaliningrad'), (b'Europe/Minsk', b'(GMT+0300) Europe/Minsk'), (b'Indian/Antananarivo', b'(GMT+0300) Indian/Antananarivo'), (b'Indian/Comoro', b'(GMT+0300) Indian/Comoro'), (b'Indian/Mayotte', b'(GMT+0300) Indian/Mayotte'), (b'Asia/Tehran', b'(GMT+0330) Asia/Tehran'), (b'Asia/Baku', b'(GMT+0400) Asia/Baku'), (b'Asia/Dubai', b'(GMT+0400) Asia/Dubai'), (b'Asia/Muscat', b'(GMT+0400) Asia/Muscat'), (b'Asia/Tbilisi', b'(GMT+0400) Asia/Tbilisi'), (b'Asia/Yerevan', b'(GMT+0400) Asia/Yerevan'), (b'Europe/Moscow', b'(GMT+0400) Europe/Moscow'), (b'Europe/Samara', b'(GMT+0400) Europe/Samara'), (b'Europe/Simferopol', b'(GMT+0400) Europe/Simferopol'), (b'Europe/Volgograd', b'(GMT+0400) Europe/Volgograd'), (b'Indian/Mahe', b'(GMT+0400) Indian/Mahe'), (b'Indian/Mauritius', b'(GMT+0400) Indian/Mauritius'), (b'Indian/Reunion', b'(GMT+0400) Indian/Reunion'), (b'Asia/Kabul', b'(GMT+0430) Asia/Kabul'), (b'Antarctica/Mawson', b'(GMT+0500) Antarctica/Mawson'), (b'Asia/Aqtau', b'(GMT+0500) Asia/Aqtau'), (b'Asia/Aqtobe', b'(GMT+0500) Asia/Aqtobe'), (b'Asia/Ashgabat', b'(GMT+0500) Asia/Ashgabat'), (b'Asia/Dushanbe', b'(GMT+0500) Asia/Dushanbe'), (b'Asia/Karachi', b'(GMT+0500) Asia/Karachi'), (b'Asia/Oral', b'(GMT+0500) Asia/Oral'), (b'Asia/Samarkand', b'(GMT+0500) Asia/Samarkand'), (b'Asia/Tashkent', b'(GMT+0500) Asia/Tashkent'), (b'Indian/Kerguelen', b'(GMT+0500) Indian/Kerguelen'), (b'Indian/Maldives', b'(GMT+0500) Indian/Maldives'), (b'Asia/Colombo', b'(GMT+0530) Asia/Colombo'), (b'Asia/Kolkata', b'(GMT+0530) Asia/Kolkata'), (b'Asia/Kathmandu', b'(GMT+0545) Asia/Kathmandu'), (b'Antarctica/Vostok', b'(GMT+0600) Antarctica/Vostok'), (b'Asia/Almaty', b'(GMT+0600) Asia/Almaty'), (b'Asia/Bishkek', b'(GMT+0600) Asia/Bishkek'), (b'Asia/Dhaka', b'(GMT+0600) Asia/Dhaka'), (b'Asia/Qyzylorda', b'(GMT+0600) Asia/Qyzylorda'), (b'Asia/Thimphu', b'(GMT+0600) Asia/Thimphu'), (b'Asia/Yekaterinburg', b'(GMT+0600) Asia/Yekaterinburg'), (b'Indian/Chagos', b'(GMT+0600) Indian/Chagos'), (b'Asia/Rangoon', b'(GMT+0630) Asia/Rangoon'), (b'Indian/Cocos', b'(GMT+0630) Indian/Cocos'), (b'Antarctica/Davis', b'(GMT+0700) Antarctica/Davis'), (b'Asia/Bangkok', b'(GMT+0700) Asia/Bangkok'), (b'Asia/Ho_Chi_Minh', b'(GMT+0700) Asia/Ho_Chi_Minh'), (b'Asia/Hovd', b'(GMT+0700) Asia/Hovd'), (b'Asia/Jakarta', b'(GMT+0700) Asia/Jakarta'), (b'Asia/Novokuznetsk', b'(GMT+0700) Asia/Novokuznetsk'), (b'Asia/Novosibirsk', b'(GMT+0700) Asia/Novosibirsk'), (b'Asia/Omsk', b'(GMT+0700) Asia/Omsk'), (b'Asia/Phnom_Penh', b'(GMT+0700) Asia/Phnom_Penh'), (b'Asia/Pontianak', b'(GMT+0700) Asia/Pontianak'), (b'Asia/Vientiane', b'(GMT+0700) Asia/Vientiane'), (b'Indian/Christmas', b'(GMT+0700) Indian/Christmas'), (b'Antarctica/Casey', b'(GMT+0800) Antarctica/Casey'), (b'Asia/Brunei', b'(GMT+0800) Asia/Brunei'), (b'Asia/Choibalsan', b'(GMT+0800) Asia/Choibalsan'), (b'Asia/Chongqing', b'(GMT+0800) Asia/Chongqing'), (b'Asia/Harbin', b'(GMT+0800) Asia/Harbin'), (b'Asia/Hong_Kong', b'(GMT+0800) Asia/Hong_Kong'), (b'Asia/Kashgar', b'(GMT+0800) Asia/Kashgar'), (b'Asia/Krasnoyarsk', b'(GMT+0800) Asia/Krasnoyarsk'), (b'Asia/Kuala_Lumpur', b'(GMT+0800) Asia/Kuala_Lumpur'), (b'Asia/Kuching', b'(GMT+0800) Asia/Kuching'), (b'Asia/Macau', b'(GMT+0800) Asia/Macau'), (b'Asia/Makassar', b'(GMT+0800) Asia/Makassar'), (b'Asia/Manila', b'(GMT+0800) Asia/Manila'), (b'Asia/Shanghai', b'(GMT+0800) Asia/Shanghai'), (b'Asia/Singapore', b'(GMT+0800) Asia/Singapore'), (b'Asia/Taipei', b'(GMT+0800) Asia/Taipei'), (b'Asia/Ulaanbaatar', b'(GMT+0800) Asia/Ulaanbaatar'), (b'Asia/Urumqi', b'(GMT+0800) Asia/Urumqi'), (b'Australia/Perth', b'(GMT+0800) Australia/Perth'), (b'Australia/Eucla', b'(GMT+0845) Australia/Eucla'), (b'Asia/Dili', b'(GMT+0900) Asia/Dili'), (b'Asia/Irkutsk', b'(GMT+0900) Asia/Irkutsk'), (b'Asia/Jayapura', b'(GMT+0900) Asia/Jayapura'), (b'Asia/Pyongyang', b'(GMT+0900) Asia/Pyongyang'), (b'Asia/Seoul', b'(GMT+0900) Asia/Seoul'), (b'Asia/Tokyo', b'(GMT+0900) Asia/Tokyo'), (b'Pacific/Palau', b'(GMT+0900) Pacific/Palau'), (b'Australia/Darwin', b'(GMT+0930) Australia/Darwin'), (b'Antarctica/DumontDUrville', b'(GMT+1000) Antarctica/DumontDUrville'), (b'Asia/Yakutsk', b'(GMT+1000) Asia/Yakutsk'), (b'Australia/Brisbane', b'(GMT+1000) Australia/Brisbane'), (b'Australia/Lindeman', b'(GMT+1000) Australia/Lindeman'), (b'Pacific/Chuuk', b'(GMT+1000) Pacific/Chuuk'), (b'Pacific/Guam', b'(GMT+1000) Pacific/Guam'), (b'Pacific/Port_Moresby', b'(GMT+1000) Pacific/Port_Moresby'), (b'Pacific/Saipan', b'(GMT+1000) Pacific/Saipan'), (b'Australia/Adelaide', b'(GMT+1030) Australia/Adelaide'), (b'Australia/Broken_Hill', b'(GMT+1030) Australia/Broken_Hill'), (b'Antarctica/Macquarie', b'(GMT+1100) Antarctica/Macquarie'), (b'Asia/Sakhalin', b'(GMT+1100) Asia/Sakhalin'), (b'Asia/Vladivostok', b'(GMT+1100) Asia/Vladivostok'), (b'Australia/Currie', b'(GMT+1100) Australia/Currie'), (b'Australia/Hobart', b'(GMT+1100) Australia/Hobart'), (b'Australia/Lord_Howe', b'(GMT+1100) Australia/Lord_Howe'), (b'Australia/Melbourne', b'(GMT+1100) Australia/Melbourne'), (b'Australia/Sydney', b'(GMT+1100) Australia/Sydney'), (b'Pacific/Efate', b'(GMT+1100) Pacific/Efate'), (b'Pacific/Guadalcanal', b'(GMT+1100) Pacific/Guadalcanal'), (b'Pacific/Kosrae', b'(GMT+1100) Pacific/Kosrae'), (b'Pacific/Noumea', b'(GMT+1100) Pacific/Noumea'), (b'Pacific/Pohnpei', b'(GMT+1100) Pacific/Pohnpei'), (b'Pacific/Norfolk', b'(GMT+1130) Pacific/Norfolk'), (b'Asia/Anadyr', b'(GMT+1200) Asia/Anadyr'), (b'Asia/Kamchatka', b'(GMT+1200) Asia/Kamchatka'), (b'Asia/Magadan', b'(GMT+1200) Asia/Magadan'), (b'Pacific/Fiji', b'(GMT+1200) Pacific/Fiji'), (b'Pacific/Funafuti', b'(GMT+1200) Pacific/Funafuti'), (b'Pacific/Kwajalein', b'(GMT+1200) Pacific/Kwajalein'), (b'Pacific/Majuro', b'(GMT+1200) Pacific/Majuro'), (b'Pacific/Nauru', b'(GMT+1200) Pacific/Nauru'), (b'Pacific/Tarawa', b'(GMT+1200) Pacific/Tarawa'), (b'Pacific/Wake', b'(GMT+1200) Pacific/Wake'), (b'Pacific/Wallis', b'(GMT+1200) Pacific/Wallis'), (b'Antarctica/McMurdo', b'(GMT+1300) Antarctica/McMurdo'), (b'Antarctica/South_Pole', b'(GMT+1300) Antarctica/South_Pole'), (b'Pacific/Auckland', b'(GMT+1300) Pacific/Auckland'), (b'Pacific/Enderbury', b'(GMT+1300) Pacific/Enderbury'), (b'Pacific/Fakaofo', b'(GMT+1300) Pacific/Fakaofo'), (b'Pacific/Tongatapu', b'(GMT+1300) Pacific/Tongatapu'), (b'Pacific/Chatham', b'(GMT+1345) Pacific/Chatham'), (b'Pacific/Apia', b'(GMT+1400) Pacific/Apia'), (b'Pacific/Kiritimati', b'(GMT+1400) Pacific/Kiritimati')])),
-            ],
-            options={
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Account',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Charge',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('kind', models.CharField(default=b'besteffort', max_length=30, choices=[
-                 (b'besteffort', b'besteffort'), (b'reservation', b'reservation'), (b'monthlyfee', b'monthlyfee')])),
-                ('state', models.CharField(default=b'pending', max_length=30, choices=[
-                 (b'pending', b'pending'), (b'invoiced', b'invoiced')])),
-                ('date', models.DateTimeField()),
-                ('amount', models.FloatField(default=0.0)),
-                ('coreHours', models.FloatField(default=0.0)),
-                ('account', models.ForeignKey(
-                    related_name=b'charges', to='core.Account')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Controller',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(
-                    help_text=b'Name of the Controller', unique=True, max_length=200)),
-                ('backend_type', models.CharField(
-                    help_text=b'Type of compute controller, e.g. EC2, OpenStack, or OpenStack version', max_length=200)),
-                ('version', models.CharField(
-                    help_text=b'Controller version', max_length=200)),
-                ('auth_url', models.CharField(
-                    help_text=b'Auth url for the compute controller', max_length=200, null=True, blank=True)),
-                ('admin_user', models.CharField(
-                    help_text=b'Username of an admin user at this controller', max_length=200, null=True, blank=True)),
-                ('admin_password', models.CharField(
-                    help_text=b'Password of theadmin user at this controller', max_length=200, null=True, blank=True)),
-                ('admin_tenant', models.CharField(
-                    help_text=b'Name of the tenant the admin user belongs to', max_length=200, null=True, blank=True)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ControllerCredential',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.SlugField(
-                    help_text=b'The credential type, e.g. ec2', max_length=128)),
-                ('key_id', models.CharField(
-                    help_text=b'The backend id of this credential', max_length=1024)),
-                ('enc_value', encrypted_fields.fields.EncryptedCharField(
-                    help_text=b'The key value of this credential', max_length=1024)),
-                ('controller', models.ForeignKey(related_name=b'controllercredentials',
-                                                 to='core.Controller', help_text=b'The User this credential is associated with')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ControllerDashboardView',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('enabled', models.BooleanField(default=True)),
-                ('url', models.CharField(help_text=b'URL of Dashboard', max_length=1024)),
-                ('controller', models.ForeignKey(
-                    related_name=b'controllerdashboardviews', to='core.Controller')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ControllerImages',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('glance_image_id', models.CharField(
-                    help_text=b'Glance image id', max_length=200, null=True, blank=True)),
-                ('controller', models.ForeignKey(
-                    related_name=b'controllerimages', to='core.Controller')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ControllerNetwork',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('net_id', models.CharField(help_text=b'Quantum network',
-                                            max_length=256, null=True, blank=True)),
-                ('router_id', models.CharField(help_text=b'Quantum router id',
-                                               max_length=256, null=True, blank=True)),
-                ('subnet_id', models.CharField(help_text=b'Quantum subnet id',
-                                               max_length=256, null=True, blank=True)),
-                ('subnet', models.CharField(max_length=32, blank=True)),
-                ('controller', models.ForeignKey(
-                    related_name=b'controllernetworks', to='core.Controller')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ControllerRole',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('role', models.CharField(unique=True,
-                                          max_length=30, choices=[(b'admin', b'Admin')])),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ControllerSite',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('tenant_id', models.CharField(help_text=b'Keystone tenant id',
-                                               max_length=200, null=True, db_index=True, blank=True)),
-                ('controller', models.ForeignKey(related_name=b'controllersite',
-                                                 blank=True, to='core.Controller', null=True)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ControllerSitePrivilege',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('role_id', models.CharField(help_text=b'Keystone id',
-                                             max_length=200, null=True, db_index=True, blank=True)),
-                ('controller', models.ForeignKey(
-                    related_name=b'controllersiteprivileges', to='core.Controller')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ControllerSlice',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('tenant_id', models.CharField(
-                    help_text=b'Keystone tenant id', max_length=200, null=True, blank=True)),
-                ('controller', models.ForeignKey(
-                    related_name=b'controllerslices', to='core.Controller')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ControllerSlicePrivilege',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('role_id', models.CharField(help_text=b'Keystone id',
-                                             max_length=200, null=True, db_index=True, blank=True)),
-                ('controller', models.ForeignKey(
-                    related_name=b'controllersliceprivileges', to='core.Controller')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ControllerUser',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('kuser_id', models.CharField(help_text=b'Keystone user id',
-                                              max_length=200, null=True, blank=True)),
-                ('controller', models.ForeignKey(
-                    related_name=b'controllersusers', to='core.Controller')),
-                ('user', models.ForeignKey(
-                    related_name=b'controllerusers', to=settings.AUTH_USER_MODEL)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='DashboardView',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(
-                    help_text=b'Name of the View', unique=True, max_length=200)),
-                ('url', models.CharField(help_text=b'URL of Dashboard', max_length=1024)),
-                ('enabled', models.BooleanField(default=True)),
-                ('controllers', models.ManyToManyField(related_name=b'dashboardviews',
-                                                       through='core.ControllerDashboardView', to='core.Controller', blank=True)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Deployment',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(
-                    help_text=b'Name of the Deployment', unique=True, max_length=200)),
-                ('accessControl', models.TextField(default=b'allow all',
-                                                   help_text=b'Access control list that specifies which sites/users may use nodes in this deployment', max_length=200)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='DeploymentPrivilege',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('deployment', models.ForeignKey(
-                    related_name=b'deploymentprivileges', to='core.Deployment')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='DeploymentRole',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('role', models.CharField(unique=True,
-                                          max_length=30, choices=[(b'admin', b'Admin')])),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Flavor',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(
-                    help_text=b'name of this flavor, as displayed to users', max_length=32)),
-                ('description', models.CharField(
-                    max_length=1024, null=True, blank=True)),
-                ('flavor', models.CharField(
-                    help_text=b'flavor string used to configure deployments', max_length=32)),
-                ('order', models.IntegerField(default=0,
-                                              help_text=b'used to order flavors when displayed in a list')),
-                ('default', models.BooleanField(default=False,
-                                                help_text=b'make this a default flavor to use when creating new instances')),
-                ('deployments', models.ManyToManyField(
-                    related_name=b'flavors', to='core.Deployment', blank=True)),
-            ],
-            options={
-                'ordering': ('order', 'name'),
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Image',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(unique=True, max_length=256)),
-                ('disk_format', models.CharField(max_length=256)),
-                ('container_format', models.CharField(max_length=256)),
-                ('path', models.CharField(help_text=b'Path to image on local disk',
-                                          max_length=256, null=True, blank=True)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ImageDeployments',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('deployment', models.ForeignKey(
-                    related_name=b'imagedeployments', to='core.Deployment')),
-                ('image', models.ForeignKey(
-                    related_name=b'imagedeployments', to='core.Image')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Invoice',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('date', models.DateTimeField()),
-                ('account', models.ForeignKey(
-                    related_name=b'invoices', to='core.Account')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Network',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(max_length=32)),
-                ('subnet', models.CharField(max_length=32, blank=True)),
-                ('ports', models.CharField(blank=True, max_length=1024,
-                                           null=True, validators=[core.models.network.ValidateNatList])),
-                ('labels', models.CharField(max_length=1024, null=True, blank=True)),
-                ('guaranteed_bandwidth', models.IntegerField(default=0)),
-                ('permit_all_slices', models.BooleanField(default=False)),
-                ('topology_parameters', models.TextField(null=True, blank=True)),
-                ('controller_url', models.CharField(
-                    max_length=1024, null=True, blank=True)),
-                ('controller_parameters', models.TextField(null=True, blank=True)),
-                ('network_id', models.CharField(help_text=b'Quantum network',
-                                                max_length=256, null=True, blank=True)),
-                ('router_id', models.CharField(help_text=b'Quantum router id',
-                                               max_length=256, null=True, blank=True)),
-                ('subnet_id', models.CharField(help_text=b'Quantum subnet id',
-                                               max_length=256, null=True, blank=True)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='NetworkParameter',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('value', models.CharField(
-                    help_text=b'The value of this parameter', max_length=1024)),
-                ('object_id', models.PositiveIntegerField()),
-                ('content_type', models.ForeignKey(to='contenttypes.ContentType')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='NetworkParameterType',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.SlugField(
-                    help_text=b'The name of this parameter', max_length=128)),
-                ('description', models.CharField(max_length=1024)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='NetworkSlice',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('network', models.ForeignKey(
-                    related_name=b'networkslices', to='core.Network')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='NetworkInstance',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('ip', models.GenericIPAddressField(
-                    help_text=b'Instance ip address', null=True, blank=True)),
-                ('port_id', models.CharField(help_text=b'Quantum port id',
-                                             max_length=256, null=True, blank=True)),
-                ('network', models.ForeignKey(
-                    related_name=b'networkinstances', to='core.Network')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='NetworkTemplate',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(max_length=32)),
-                ('description', models.CharField(
-                    max_length=1024, null=True, blank=True)),
-                ('guaranteed_bandwidth', models.IntegerField(default=0)),
-                ('visibility', models.CharField(default=b'private', max_length=30,
-                                                choices=[(b'public', b'public'), (b'private', b'private')])),
-                ('translation', models.CharField(default=b'none', max_length=30,
-                                                 choices=[(b'none', b'none'), (b'NAT', b'NAT')])),
-                ('shared_network_name', models.CharField(
-                    max_length=30, null=True, blank=True)),
-                ('shared_network_id', models.CharField(
-                    help_text=b'Quantum network', max_length=256, null=True, blank=True)),
-                ('topology_kind', models.CharField(default=b'BigSwitch', max_length=30, choices=[
-                 (b'bigswitch', b'BigSwitch'), (b'physical', b'Physical'), (b'custom', b'Custom')])),
-                ('controller_kind', models.CharField(default=None, max_length=30, null=True,
-                                                     blank=True, choices=[(None, b'None'), (b'onos', b'ONOS'), (b'custom', b'Custom')])),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Node',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(
-                    help_text=b'Name of the Node', unique=True, max_length=200)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Payment',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('amount', models.FloatField(default=0.0)),
-                ('date', models.DateTimeField(default=django.utils.timezone.now)),
-                ('account', models.ForeignKey(
-                    related_name=b'payments', to='core.Account')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='PlanetStack',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('description', models.CharField(default=b'PlanetStack',
-                                                 help_text=b'Used for scoping of roles at the PlanetStack Application level', unique=True, max_length=200)),
-            ],
-            options={
-                'verbose_name_plural': 'PlanetStack',
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='PlanetStackPrivilege',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('planetstack', models.ForeignKey(
-                    related_name=b'planetstackprivileges', default=1, to='core.PlanetStack')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='PlanetStackRole',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('role', models.CharField(unique=True,
-                                          max_length=30, choices=[(b'admin', b'Admin')])),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Project',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(
-                    help_text=b'Name of Project', unique=True, max_length=200)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Reservation',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('startTime', models.DateTimeField()),
-                ('duration', models.IntegerField(default=1)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ReservedResource',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('quantity', models.IntegerField(default=1)),
-                ('reservationSet', models.ForeignKey(
-                    related_name=b'reservedresources', to='core.Reservation')),
-            ],
-            options={
-                'abstract': False,
-                'verbose_name_plural': 'Reserved Resources',
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Role',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('role_type', models.CharField(max_length=80, verbose_name=b'Name')),
-                ('role', models.CharField(max_length=80, null=True,
-                                          verbose_name=b'Keystone role id', blank=True)),
-                ('description', models.CharField(
-                    max_length=120, verbose_name=b'Description')),
-                ('content_type', models.ForeignKey(
-                    verbose_name=b'Role Scope', to='contenttypes.ContentType')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Router',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(max_length=32)),
-                ('networks', models.ManyToManyField(
-                    related_name=b'routers', to='core.Network', blank=True)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Service',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('description', models.TextField(
-                    help_text=b'Description of Service', max_length=254, null=True, blank=True)),
-                ('enabled', models.BooleanField(default=True)),
-                ('name', models.CharField(help_text=b'Service Name', max_length=30)),
-                ('versionNumber', models.CharField(
-                    help_text=b'Version of Service Definition', max_length=30)),
-                ('published', models.BooleanField(default=True)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ServiceAttribute',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.SlugField(help_text=b'Attribute Name', max_length=128)),
-                ('value', models.CharField(
-                    help_text=b'Attribute Value', max_length=1024)),
-                ('service', models.ForeignKey(related_name=b'serviceattributes',
-                                              to='core.Service', help_text=b'The Service this attribute is associated with')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ServiceClass',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(max_length=32)),
-                ('description', models.CharField(max_length=255)),
-                ('commitment', models.IntegerField(default=365)),
-                ('membershipFee', models.IntegerField(default=0)),
-                ('membershipFeeMonths', models.IntegerField(default=12)),
-                ('upgradeRequiresApproval', models.BooleanField(default=False)),
-                ('upgradeFrom', models.ManyToManyField(
-                    related_name='upgradeFrom_rel_+', null=True, to='core.ServiceClass', blank=True)),
-            ],
-            options={
-                'abstract': False,
-                'verbose_name_plural': 'Service classes',
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='ServiceResource',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(max_length=32)),
-                ('maxUnitsDeployment', models.IntegerField(default=1)),
-                ('maxUnitsNode', models.IntegerField(default=1)),
-                ('maxDuration', models.IntegerField(default=1)),
-                ('bucketInRate', models.IntegerField(default=0)),
-                ('bucketMaxSize', models.IntegerField(default=0)),
-                ('cost', models.IntegerField(default=0)),
-                ('calendarReservable', models.BooleanField(default=True)),
-                ('serviceClass', models.ForeignKey(
-                    related_name=b'serviceresources', to='core.ServiceClass')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Site',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(
-                    help_text=b'Name for this Site', max_length=200)),
-                ('site_url', models.URLField(help_text=b"Site's Home URL Page",
-                                             max_length=512, null=True, blank=True)),
-                ('enabled', models.BooleanField(
-                    default=True, help_text=b'Status for this Site')),
-                ('location', geoposition.fields.GeopositionField(max_length=42)),
-                ('longitude', models.FloatField(null=True, blank=True)),
-                ('latitude', models.FloatField(null=True, blank=True)),
-                ('login_base', models.CharField(
-                    help_text=b'Prefix for Slices associated with this Site', unique=True, max_length=50)),
-                ('is_public', models.BooleanField(
-                    default=True, help_text=b'Indicates the visibility of this site to other members')),
-                ('abbreviated_name', models.CharField(max_length=80)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='SiteCredential',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.SlugField(
-                    help_text=b'The credential type, e.g. ec2', max_length=128)),
-                ('key_id', models.CharField(
-                    help_text=b'The backend id of this credential', max_length=1024)),
-                ('enc_value', encrypted_fields.fields.EncryptedCharField(
-                    help_text=b'The key value of this credential', max_length=1024)),
-                ('site', models.ForeignKey(related_name=b'sitecredentials', to='core.Site',
-                                           help_text=b'The User this credential is associated with')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='SiteDeployment',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('availability_zone', models.CharField(
-                    help_text=b'OpenStack availability zone', max_length=200, null=True, blank=True)),
-                ('controller', models.ForeignKey(
-                    related_name=b'sitedeployments', blank=True, to='core.Controller', null=True)),
-                ('deployment', models.ForeignKey(
-                    related_name=b'sitedeployments', to='core.Deployment')),
-                ('site', models.ForeignKey(
-                    related_name=b'sitedeployments', to='core.Site')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='SitePrivilege',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='SiteRole',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('role', models.CharField(unique=True, max_length=30, choices=[
-                 (b'admin', b'Admin'), (b'pi', b'PI'), (b'tech', b'Tech'), (b'billing', b'Billing')])),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Slice',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(
-                    help_text=b'The Name of the Slice', unique=True, max_length=80)),
-                ('enabled', models.BooleanField(
-                    default=True, help_text=b'Status for this Slice')),
-                ('omf_friendly', models.BooleanField(default=False)),
-                ('description', models.TextField(
-                    help_text=b'High level description of the slice and expected activities', max_length=1024, blank=True)),
-                ('slice_url', models.URLField(max_length=512, blank=True)),
-                ('max_instances', models.IntegerField(default=10)),
-                ('network', models.CharField(default=b'Private Only',
-                                             max_length=256, null=True, blank=True)),
-                ('mount_data_sets', models.CharField(
-                    default=b'GenBank', max_length=256, null=True, blank=True)),
-                ('creator', models.ForeignKey(related_name=b'slices',
-                                              blank=True, to=settings.AUTH_USER_MODEL, null=True)),
-                ('default_flavor', models.ForeignKey(
-                    related_name=b'slices', blank=True, to='core.Flavor', null=True)),
-                ('default_image', models.ForeignKey(
-                    related_name=b'slices', blank=True, to='core.Image', null=True)),
-                ('service', models.ForeignKey(related_name=b'service',
-                                              blank=True, to='core.Service', null=True)),
-                ('serviceClass', models.ForeignKey(related_name=b'slices',
-                                                   default=core.models.serviceclass.get_default_serviceclass, to='core.ServiceClass', null=True)),
-                ('site', models.ForeignKey(related_name=b'slices',
-                                           to='core.Site', help_text=b'The Site this Slice belongs to')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='SliceCredential',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.SlugField(
-                    help_text=b'The credential type, e.g. ec2', max_length=128)),
-                ('key_id', models.CharField(
-                    help_text=b'The backend id of this credential', max_length=1024)),
-                ('enc_value', encrypted_fields.fields.EncryptedCharField(
-                    help_text=b'The key value of this credential', max_length=1024)),
-                ('slice', models.ForeignKey(related_name=b'slicecredentials',
-                                            to='core.Slice', help_text=b'The User this credential is associated with')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='SlicePrivilege',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='SliceRole',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('role', models.CharField(unique=True, max_length=30,
-                                          choices=[(b'admin', b'Admin'), (b'default', b'Default')])),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='SliceTag',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(help_text=b'The name of this tag', max_length=30, choices=[
-                 (b'privatekey', b'Private Key'), (b'publickey', b'Public Key')])),
-                ('value', models.CharField(
-                    help_text=b'The value of this tag', max_length=1024)),
-                ('slice', models.ForeignKey(
-                    related_name=b'slicetags', to='core.Slice')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Instance',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('instance_id', models.CharField(
-                    help_text=b'Nova instance id', max_length=200, null=True, blank=True)),
-                ('instance_uuid', models.CharField(
-                    help_text=b'Nova instance uuid', max_length=200, null=True, blank=True)),
-                ('name', models.CharField(help_text=b'Instance name', max_length=200)),
-                ('instance_name', models.CharField(
-                    help_text=b'OpenStack generated name', max_length=200, null=True, blank=True)),
-                ('ip', models.GenericIPAddressField(
-                    help_text=b'Instance ip address', null=True, blank=True)),
-                ('numberCores', models.IntegerField(
-                    default=0, help_text=b'Number of cores for instance', verbose_name=b'Number of Cores')),
-                ('userData', models.TextField(
-                    help_text=b'user_data passed to instance during creation', null=True, blank=True)),
-                ('creator', models.ForeignKey(related_name=b'instances',
-                                              blank=True, to=settings.AUTH_USER_MODEL, null=True)),
-                ('deployment', models.ForeignKey(related_name=b'instance_deployment',
-                                                 verbose_name=b'deployment', to='core.Deployment')),
-                ('flavor', models.ForeignKey(default=core.models.instance.get_default_flavor,
-                                             to='core.Flavor', help_text=b'Flavor of this instance')),
-                ('image', models.ForeignKey(
-                    related_name=b'instances', to='core.Image')),
-                ('node', models.ForeignKey(related_name=b'instances', to='core.Node')),
-                ('slice', models.ForeignKey(
-                    related_name=b'instances', to='core.Slice')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='Tag',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.SlugField(
-                    help_text=b'The name of this tag', max_length=128)),
-                ('value', models.CharField(
-                    help_text=b'The value of this tag', max_length=1024)),
-                ('object_id', models.PositiveIntegerField()),
-                ('content_type', models.ForeignKey(to='contenttypes.ContentType')),
-                ('service', models.ForeignKey(related_name=b'tags', to='core.Service',
-                                              help_text=b'The Service this Tag is associated with')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='UsableObject',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.CharField(max_length=1024)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='UserCredential',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('name', models.SlugField(
-                    help_text=b'The credential type, e.g. ec2', max_length=128)),
-                ('key_id', models.CharField(
-                    help_text=b'The backend id of this credential', max_length=1024)),
-                ('enc_value', encrypted_fields.fields.EncryptedCharField(
-                    help_text=b'The key value of this credential', max_length=1024)),
-                ('user', models.ForeignKey(related_name=b'usercredentials', to=settings.AUTH_USER_MODEL,
-                                           help_text=b'The User this credential is associated with')),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='UserDashboardView',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('order', models.IntegerField(default=0)),
-                ('dashboardView', models.ForeignKey(
-                    related_name=b'userdashboardviews', to='core.DashboardView')),
-                ('user', models.ForeignKey(
-                    related_name=b'userdashboardviews', to=settings.AUTH_USER_MODEL)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='TenantPrivilege',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.CreateModel(
-            name='TenantRole',
-            fields=[
-                ('id', models.AutoField(verbose_name='ID',
-                                        serialize=False, auto_created=True, primary_key=True)),
-                ('created', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now_add=True)),
-                ('updated', models.DateTimeField(
-                    default=django.utils.timezone.now, auto_now=True)),
-                ('enacted', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('policed', models.DateTimeField(
-                    default=None, null=True, blank=True)),
-                ('backend_status', models.CharField(
-                    default=b'Provisioning in progress', max_length=140)),
-                ('deleted', models.BooleanField(default=False)),
-                ('role', models.CharField(unique=True, max_length=30,
-                                          choices=[(b'admin', b'Admin'), (b'access', b'Access')])),
-            ],
-            options={
-                'abstract': False,
-            },
-            bases=(models.Model,),
-        ),
-        migrations.AddField(
-            model_name='sliceprivilege',
-            name='role',
-            field=models.ForeignKey(
-                related_name=b'sliceprivileges', to='core.SliceRole'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='sliceprivilege',
-            name='slice',
-            field=models.ForeignKey(
-                related_name=b'sliceprivileges', to='core.Slice'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='sliceprivilege',
-            name='user',
-            field=models.ForeignKey(
-                related_name=b'sliceprivileges', to=settings.AUTH_USER_MODEL),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='siteprivilege',
-            name='role',
-            field=models.ForeignKey(
-                related_name=b'siteprivileges', to='core.SiteRole'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='siteprivilege',
-            name='site',
-            field=models.ForeignKey(
-                related_name=b'siteprivileges', to='core.Site'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='siteprivilege',
-            name='user',
-            field=models.ForeignKey(
-                related_name=b'siteprivileges', to=settings.AUTH_USER_MODEL),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='site',
-            name='deployments',
-            field=models.ManyToManyField(help_text=b'Select which sites are allowed to host nodes in this deployment',
-                                         related_name=b'sites', through='core.SiteDeployment', to='core.Deployment', blank=True),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='router',
-            name='owner',
-            field=models.ForeignKey(related_name=b'routers', to='core.Slice'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='router',
-            name='permittedNetworks',
-            field=models.ManyToManyField(
-                related_name=b'availableRouters', to='core.Network', blank=True),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='reservedresource',
-            name='resource',
-            field=models.ForeignKey(
-                related_name=b'reservedresources', to='core.ServiceResource'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='reservedresource',
-            name='instance',
-            field=models.ForeignKey(
-                related_name=b'reservedresources', to='core.Instance'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='reservation',
-            name='slice',
-            field=models.ForeignKey(
-                related_name=b'reservations', to='core.Slice'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='planetstackprivilege',
-            name='role',
-            field=models.ForeignKey(to='core.PlanetStackRole'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='planetstackprivilege',
-            name='user',
-            field=models.ForeignKey(
-                related_name=b'planetstackprivileges', to=settings.AUTH_USER_MODEL),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='node',
-            name='site',
-            field=models.ForeignKey(
-                related_name=b'nodes', blank=True, to='core.Site', null=True),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='node',
-            name='site_deployment',
-            field=models.ForeignKey(
-                related_name=b'nodes', to='core.SiteDeployment'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='networkinstance',
-            name='instance',
-            field=models.ForeignKey(
-                related_name=b'networkinstances', to='core.Instance'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='networkslice',
-            name='slice',
-            field=models.ForeignKey(
-                related_name=b'networkslices', to='core.Slice'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='networkparameter',
-            name='parameter',
-            field=models.ForeignKey(related_name=b'networkparameters',
-                                    to='core.NetworkParameterType', help_text=b'The type of the parameter'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='network',
-            name='owner',
-            field=models.ForeignKey(related_name=b'ownedNetworks', to='core.Slice',
-                                    help_text=b'Slice that owns control of this Network'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='network',
-            name='permitted_slices',
-            field=models.ManyToManyField(
-                related_name=b'availableNetworks', to='core.Slice', blank=True),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='network',
-            name='slices',
-            field=models.ManyToManyField(
-                related_name=b'networks', through='core.NetworkSlice', to='core.Slice', blank=True),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='network',
-            name='instances',
-            field=models.ManyToManyField(
-                related_name=b'networks', through='core.NetworkInstance', to='core.Instance', blank=True),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='network',
-            name='template',
-            field=models.ForeignKey(to='core.NetworkTemplate'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='image',
-            name='deployments',
-            field=models.ManyToManyField(help_text=b'Select which images should be instantiated on this deployment',
-                                         related_name=b'images', through='core.ImageDeployments', to='core.Deployment', blank=True),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='deploymentprivilege',
-            name='role',
-            field=models.ForeignKey(
-                related_name=b'deploymentprivileges', to='core.DeploymentRole'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='deploymentprivilege',
-            name='user',
-            field=models.ForeignKey(
-                related_name=b'deploymentprivileges', to=settings.AUTH_USER_MODEL),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='controllersliceprivilege',
-            name='slice_privilege',
-            field=models.ForeignKey(
-                related_name=b'controllersliceprivileges', to='core.SlicePrivilege'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='controllerslice',
-            name='slice',
-            field=models.ForeignKey(
-                related_name=b'controllerslices', to='core.Slice'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='controllersiteprivilege',
-            name='site_privilege',
-            field=models.ForeignKey(
-                related_name=b'controllersiteprivileges', to='core.SitePrivilege'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='controllersite',
-            name='site',
-            field=models.ForeignKey(
-                related_name=b'controllersite', to='core.Site'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='controllernetwork',
-            name='network',
-            field=models.ForeignKey(
-                related_name=b'controllernetworks', to='core.Network'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='controllerimages',
-            name='image',
-            field=models.ForeignKey(
-                related_name=b'controllerimages', to='core.Image'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='controllerdashboardview',
-            name='dashboardView',
-            field=models.ForeignKey(
-                related_name=b'controllerdashboardviews', to='core.DashboardView'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='charge',
-            name='invoice',
-            field=models.ForeignKey(
-                related_name=b'charges', blank=True, to='core.Invoice', null=True),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='charge',
-            name='object',
-            field=models.ForeignKey(to='core.UsableObject'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='charge',
-            name='slice',
-            field=models.ForeignKey(
-                related_name=b'charges', blank=True, to='core.Slice', null=True),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='account',
-            name='site',
-            field=models.ForeignKey(
-                related_name=b'accounts', to='core.Site', help_text=b'Site for this account'),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='user',
-            name='dashboards',
-            field=models.ManyToManyField(
-                to='core.DashboardView', through='core.UserDashboardView', blank=True),
-            preserve_default=True,
-        ),
-        migrations.AddField(
-            model_name='user',
-            name='site',
-            field=models.ForeignKey(related_name=b'users', to='core.Site',
-                                    help_text=b'Site this user will be homed too', null=True),
-            preserve_default=True,
-        ),
-    ]
diff --git a/xos/core/migrations/0011_sliver_instance_uuid.py b/xos/core/migrations/0011_sliver_instance_uuid.py
deleted file mode 100644
index 3320158..0000000
--- a/xos/core/migrations/0011_sliver_instance_uuid.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
-from django.db import models, migrations
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('core', '0010_auto_20150118_1926'),
-    ]
-
-    operations = [
-        migrations.AddField(
-            model_name='instance',
-            name='instance_uuid',
-            field=models.CharField(help_text=b'Nova instance uuid', max_length=200, null=True, blank=True),
-            preserve_default=True,
-        ),
-    ]
diff --git a/xos/core/migrations/__init__.py b/xos/core/migrations/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/xos/core/migrations/__init__.py
+++ /dev/null
diff --git a/xos/core/xoslib/dashboards/xosServiceGrid.html b/xos/core/xoslib/dashboards/xosServiceGrid.html
index c0d58dc..ea89ca8 100644
--- a/xos/core/xoslib/dashboards/xosServiceGrid.html
+++ b/xos/core/xoslib/dashboards/xosServiceGrid.html
@@ -1,8 +1,5 @@
 <!-- browserSync -->
-<!-- bower:css -->
-<link rel="stylesheet" href="vendor/bootstrap-css/css/bootstrap.min.css" />
-<link rel="stylesheet" href="vendor/angular-chart.js/dist/angular-chart.css" />
-<!-- endbower -->
+
 <!-- endcss -->
 <!-- inject:css -->
 <link rel="stylesheet" href="/static/css/xosServiceGrid.css">
@@ -12,21 +9,9 @@
   <div ui-view></div>
 </div>
 
-<!-- bower:js -->
-<script src="vendor/jquery/dist/jquery.js"></script>
-<script src="vendor/angular/angular.js"></script>
-<script src="vendor/angular-mocks/angular-mocks.js"></script>
-<script src="vendor/angular-ui-router/release/angular-ui-router.js"></script>
-<script src="vendor/angular-cookies/angular-cookies.js"></script>
-<script src="vendor/angular-animate/angular-animate.js"></script>
-<script src="vendor/angular-resource/angular-resource.js"></script>
-<script src="vendor/lodash/lodash.js"></script>
-<script src="vendor/bootstrap-css/js/bootstrap.min.js"></script>
-<script src="vendor/Chart.js/Chart.js"></script>
-<script src="vendor/angular-chart.js/dist/angular-chart.js"></script>
-<script src="vendor/d3/d3.js"></script>
-<!-- endbower -->
+
 <!-- endjs -->
 <!-- inject:js -->
+<script src="/static/js/vendor/xosServiceGridVendor.js"></script>
 <script src="/static/js/xosServiceGrid.js"></script>
 <!-- endinject -->
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/vendor/ngXosHelpers.js b/xos/core/xoslib/static/js/vendor/ngXosHelpers.js
index 0c7a22a..7ddde03 100644
--- a/xos/core/xoslib/static/js/vendor/ngXosHelpers.js
+++ b/xos/core/xoslib/static/js/vendor/ngXosHelpers.js
@@ -1,2 +1,2 @@
-"use strict";function _toConsumableArray(e){if(Array.isArray(e)){for(var n=0,o=Array(e.length);n<e.length;n++)o[n]=e[n];return o}return Array.from(e)}!function(){angular.module("xos.uiComponents",["chart.js","RecursionHelper"])}(),function(){angular.module("xos.uiComponents").directive("xosForm",function(){return{restrict:"E",scope:{config:"=",ngModel:"="},template:'\n        <form name="vm.{{vm.config.formName || \'form\'}}" novalidate>\n          <div class="form-group" ng-repeat="(name, field) in vm.formField">\n            <xos-field name="name" field="field" ng-model="vm.ngModel[name]"></xos-field>\n            <xos-validation field="vm[vm.config.formName || \'form\'][name]" form = "vm[vm.config.formName || \'form\']"></xos-validation>\n            <div class="alert alert-info" ng-show="(field.hint).length >0" role="alert">{{field.hint}}</div>\n          </div>\n          <div class="form-group" ng-if="vm.config.actions">\n          <xos-alert config="vm.config.feedback" show="vm.config.feedback.show">{{vm.config.feedback.message}}</xos-alert>\n\n            <button role="button" href=""\n              ng-repeat="action in vm.config.actions"\n              ng-click="action.cb(vm.ngModel, vm[vm.config.formName || \'form\'])"\n              class="btn btn-{{action.class}}"\n              title="{{action.label}}">\n              <i class="glyphicon glyphicon-{{action.icon}}"></i>\n              {{action.label}}\n            </button>\n          </div>\n        </form>\n      ',bindToController:!0,controllerAs:"vm",controller:["$scope","$log","_","XosFormHelpers",function(e,n,o,i){var t=this;if(!this.config)throw new Error('[xosForm] Please provide a configuration via the "config" attribute');if(!this.config.actions)throw new Error("[xosForm] Please provide an action list in the configuration");this.config.feedback||(this.config.feedback={show:!1,message:"Form submitted successfully !!!",type:"success"}),this.excludedField=["id","validators","created","updated","deleted","backend_status"],this.config&&this.config.exclude&&(this.excludedField=this.excludedField.concat(this.config.exclude)),this.formField=[],e.$watch(function(){return t.config},function(){if(t.ngModel){var e=o.difference(Object.keys(t.ngModel),t.excludedField),n=i.parseModelField(e);t.formField=i.buildFormStructure(n,t.config.fields,t.ngModel)}},!0),e.$watch(function(){return t.ngModel},function(e){if(t.formField={},e){var n=o.difference(Object.keys(e),t.excludedField),r=i.parseModelField(n);t.formField=i.buildFormStructure(r,t.config.fields,e)}})}]}})}();var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e};!function(){angular.module("xos.uiComponents").directive("xosSmartTable",function(){return{restrict:"E",scope:{config:"="},template:'\n        <div class="row" ng-show="vm.data.length > 0">\n          <div class="col-xs-12 text-right">\n            <a href="" class="btn btn-success" ng-click="vm.createItem()">\n              Add\n            </a>\n          </div>\n        </div>\n        <div class="row">\n          <div class="col-xs-12 table-responsive">\n            <xos-table config="vm.tableConfig" data="vm.data"></xos-table>\n          </div>\n        </div>\n        <div class="panel panel-default" ng-show="vm.detailedItem">\n          <div class="panel-heading">\n            <div class="row">\n              <div class="col-xs-11">\n                <h3 class="panel-title" ng-show="vm.detailedItem.id">Update {{vm.config.resource}} {{vm.detailedItem.id}}</h3>\n                <h3 class="panel-title" ng-show="!vm.detailedItem.id">Create {{vm.config.resource}} item</h3>\n              </div>\n              <div class="col-xs-1">\n                <a href="" ng-click="vm.cleanForm()">\n                  <i class="glyphicon glyphicon-remove pull-right"></i>\n                </a>\n              </div>\n            </div>\n          </div>\n          <div class="panel-body">\n            <xos-form config="vm.formConfig" ng-model="vm.detailedItem"></xos-form>\n          </div>\n        </div>\n        <xos-alert config="{type: \'success\', closeBtn: true}" show="vm.responseMsg">{{vm.responseMsg}}</xos-alert>\n        <xos-alert config="{type: \'danger\', closeBtn: true}" show="vm.responseErr">{{vm.responseErr}}</xos-alert>\n      ',bindToController:!0,controllerAs:"vm",controller:["$injector","LabelFormatter","_","XosFormHelpers",function(e,n,o,i){var t=this;this.responseMsg=!1,this.responseErr=!1,this.tableConfig={columns:[],actions:[{label:"delete",icon:"remove",cb:function(e){t.Resource["delete"]({id:e.id}).$promise.then(function(){o.remove(t.data,function(n){return n.id===e.id}),t.responseMsg=t.config.resource+" with id "+e.id+" successfully deleted"})["catch"](function(n){t.responseErr=n.data.detail||"Error while deleting "+t.config.resource+" with id "+e.id})},color:"red"},{label:"details",icon:"search",cb:function(e){t.detailedItem=e}}],classes:"table table-striped table-bordered table-responsive",filter:"field",order:!0,pagination:{pageSize:10}},this.formConfig={exclude:this.config.hiddenFields,fields:{},formName:this.config.resource+"Form",actions:[{label:"Save",icon:"ok",cb:function(e){var n=void 0,o=!0;e.id?(n=e.$update(),o=!1):n=e.$save(),n.then(function(n){o&&t.data.push(angular.copy(n)),delete t.detailedItem,t.responseMsg=t.config.resource+" with id "+e.id+" successfully saved"})["catch"](function(n){t.responseErr=n.data.detail||"Error while saving "+t.config.resource+" with id "+e.id})},"class":"success"}]},this.cleanForm=function(){delete t.detailedItem},this.createItem=function(){t.detailedItem=new t.Resource},this.Resource=e.get(this.config.resource);var r=function(){t.Resource.query().$promise.then(function(e){if(!e[0])return void(t.data=e);var r=e[0],a=Object.keys(r);o.remove(a,function(e){return"id"===e||"validators"===e}),angular.isArray(t.config.hiddenFields)&&(a=o.difference(a,t.config.hiddenFields));var s=a.map(function(e){return n.format(e)});a.forEach(function(e,n){var o={label:s[n],prop:e};angular.isString(r[e])&&"undefined"!=typeof r[e]&&(o.type=_typeof(r[e])),t.tableConfig.columns.push(o)}),a.forEach(function(e,o){t.formConfig.fields[e]={label:n.format(s[o]).replace(":",""),type:i._getFieldFormat(r[e])}}),t.data=e})};r()}]}})}(),function(){angular.module("xos.uiComponents").directive("xosValidation",function(){return{restrict:"E",scope:{field:"=",form:"="},template:'\n        <div ng-cloak>\n          <xos-alert config="vm.config" show="vm.field.$error.required !== undefined && vm.field.$error.required !== false  && (vm.field.$touched || vm.form.$submitted)">\n            Field required\n          </xos-alert>\n          <xos-alert config="vm.config" show="vm.field.$error.email !== undefined && vm.field.$error.email !== false && (vm.field.$touched || vm.form.$submitted)">\n            This is not a valid email\n          </xos-alert>\n          <xos-alert config="vm.config" show="vm.field.$error.minlength !== undefined && vm.field.$error.minlength !== false && (vm.field.$touched || vm.form.$submitted)">\n            Too short\n          </xos-alert>\n          <xos-alert config="vm.config" show="vm.field.$error.maxlength !== undefined && vm.field.$error.maxlength !== false && (vm.field.$touched || vm.form.$submitted)">\n            Too long\n          </xos-alert>\n          <xos-alert config="vm.config" show="vm.field.$error.custom !== undefined && vm.field.$error.custom !== false && (vm.field.$touched || vm.form.$submitted)">\n            Field invalid\n          </xos-alert>\n        </div>\n      ',transclude:!0,bindToController:!0,controllerAs:"vm",controller:function(){this.config={type:"danger"}}}})}(),function(){angular.module("xos.uiComponents").directive("xosSmartPie",function(){return{restrict:"E",scope:{config:"="},template:'\n        <canvas\n          class="chart chart-pie {{vm.config.classes}}"\n          chart-data="vm.data" chart-labels="vm.labels"\n          chart-legend="{{vm.config.legend}}">\n        </canvas>\n      ',bindToController:!0,controllerAs:"vm",controller:["$injector","$interval","$scope","$timeout","_",function(e,n,o,i,t){var r=this;if(!this.config.resource&&!this.config.data)throw new Error("[xosSmartPie] Please provide a resource or an array of data in the configuration");var a=function(e){return t.groupBy(e,r.config.groupBy)},s=function(e){return t.reduce(Object.keys(e),function(n,o){return n.concat(e[o].length)},[])},l=function(e){return angular.isFunction(r.config.labelFormatter)?r.config.labelFormatter(Object.keys(e)):Object.keys(e)},c=function(e){var n=a(e);r.data=s(n),r.labels=l(n)};this.config.resource?!function(){r.Resource=e.get(r.config.resource);var o=function(){r.Resource.query().$promise.then(function(e){e[0]&&c(e)})};o(),r.config.poll&&n(function(){o()},1e3*r.config.poll)}():o.$watch(function(){return r.config.data},function(e){e&&c(r.config.data)},!0),o.$on("create",function(e,n){console.log("create: "+n.id)}),o.$on("destroy",function(e,n){console.log("destroy: "+n.id)})}]}})}(),function(){angular.module("xos.uiComponents").directive("xosTable",function(){return{restrict:"E",scope:{data:"=",config:"="},template:'\n          <div ng-show="vm.data.length > 0 && vm.loader == false">\n            <div class="row" ng-if="vm.config.filter == \'fulltext\'">\n              <div class="col-xs-12">\n                <input\n                  class="form-control"\n                  placeholder="Type to search.."\n                  type="text"\n                  ng-model="vm.query"/>\n              </div>\n            </div>\n            <table ng-class="vm.classes" ng-hide="vm.data.length == 0">\n              <thead>\n                <tr>\n                  <th ng-repeat="col in vm.columns">\n                    {{col.label}}\n                    <span ng-if="vm.config.order">\n                      <a href="" ng-click="vm.orderBy = col.prop; vm.reverse = false">\n                        <i class="glyphicon glyphicon-chevron-up"></i>\n                      </a>\n                      <a href="" ng-click="vm.orderBy = col.prop; vm.reverse = true">\n                        <i class="glyphicon glyphicon-chevron-down"></i>\n                      </a>\n                    </span>\n                  </th>\n                  <th ng-if="vm.config.actions">Actions:</th>\n                </tr>\n              </thead>\n              <tbody ng-if="vm.config.filter == \'field\'">\n                <tr>\n                  <td ng-repeat="col in vm.columns">\n                    <input\n                      ng-if="col.type !== \'boolean\' && col.type !== \'array\' && col.type !== \'object\' && col.type !== \'custom\'"\n                      class="form-control"\n                      placeholder="Type to search by {{col.label}}"\n                      type="text"\n                      ng-model="vm.query[col.prop]"/>\n                    <select\n                      ng-if="col.type === \'boolean\'"\n                      class="form-control"\n                      ng-model="vm.query[col.prop]">\n                      <option value="">-</option>\n                      <option value="true">True</option>\n                      <option value="false">False</option>\n                    </select>\n                  </td>\n                  <td ng-if="vm.config.actions"></td>\n                </tr>\n              </tbody>\n              <tbody>\n                <tr ng-repeat="item in vm.data | filter:vm.query:vm.comparator | orderBy:vm.orderBy:vm.reverse | pagination:vm.currentPage * vm.config.pagination.pageSize | limitTo: (vm.config.pagination.pageSize || vm.data.length) track by $index">\n                  <td ng-repeat="col in vm.columns" xos-link-wrapper>\n                    <span ng-if="!col.type">{{item[col.prop]}}</span>\n                    <span ng-if="col.type === \'boolean\'">\n                      <i class="glyphicon"\n                        ng-class="{\'glyphicon-ok\': item[col.prop], \'glyphicon-remove\': !item[col.prop]}">\n                      </i>\n                    </span>\n                    <span ng-if="col.type === \'date\'">\n                      {{item[col.prop] | date:\'H:mm MMM d, yyyy\'}}\n                    </span>\n                    <span ng-if="col.type === \'array\'">\n                      {{item[col.prop] | arrayToList}}\n                    </span>\n                    <span ng-if="col.type === \'object\'">\n                      <dl class="dl-horizontal">\n                        <span ng-repeat="(k,v) in item[col.prop]">\n                          <dt>{{k}}</dt>\n                          <dd>{{v}}</dd>\n                        </span>\n                      </dl>\n                    </span>\n                    <span ng-if="col.type === \'custom\'">\n                      {{col.formatter(item)}}\n                    </span>\n                    <span ng-if="col.type === \'icon\'">\n                      <i class="glyphicon glyphicon-{{col.formatter(item)}}">\n                      </i>\n                    </span>\n                  </td>\n                  <td ng-if="vm.config.actions">\n                    <a href=""\n                      ng-repeat="action in vm.config.actions"\n                      ng-click="action.cb(item)"\n                      title="{{action.label}}">\n                      <i\n                        class="glyphicon glyphicon-{{action.icon}}"\n                        style="color: {{action.color}};"></i>\n                    </a>\n                  </td>\n                </tr>\n              </tbody>\n            </table>\n            <xos-pagination\n              ng-if="vm.config.pagination"\n              page-size="vm.config.pagination.pageSize"\n              total-elements="vm.data.length"\n              change="vm.goToPage">\n              </xos-pagination>\n          </div>\n          <div ng-show="(vm.data.length == 0 || !vm.data) && vm.loader == false">\n             <xos-alert config="{type: \'info\'}">\n              No data to show.\n            </xos-alert>\n          </div>\n          <div ng-show="vm.loader == true">\n            <div class="loader"></div>\n          </div>\n        ',bindToController:!0,controllerAs:"vm",controller:["_","$scope","Comparator",function(e,n,o){var i=this;if(this.comparator=o,this.loader=!0,n.$watch(function(){return i.data},function(e){angular.isDefined(e)&&(i.loader=!1)}),!this.config)throw new Error('[xosTable] Please provide a configuration via the "config" attribute');if(!this.config.columns)throw new Error("[xosTable] Please provide a columns list in the configuration");this.config.order&&angular.isObject(this.config.order)&&(this.reverse=this.config.order.reverse||!1,this.orderBy=this.config.order.field||"id");var t=e.filter(this.config.columns,{type:"custom"});angular.isArray(t)&&t.length>0&&e.forEach(t,function(e){if(!e.formatter||!angular.isFunction(e.formatter))throw new Error("[xosTable] You have provided a custom field type, a formatter function should provided too.")});var r=e.filter(this.config.columns,{type:"icon"});angular.isArray(r)&&r.length>0&&e.forEach(r,function(e){if(!e.formatter||!angular.isFunction(e.formatter))throw new Error("[xosTable] You have provided an icon field type, a formatter function should provided too.")});var a=e.filter(this.config.columns,function(e){return angular.isDefined(e.link)});angular.isArray(a)&&a.length>0&&e.forEach(a,function(e){if(!angular.isFunction(e.link))throw new Error("[xosTable] The link property should be a function.")}),this.columns=this.config.columns,this.classes=this.config.classes||"table table-striped table-bordered",this.config.actions,this.config.pagination&&(this.currentPage=0,this.goToPage=function(e){i.currentPage=e})}]}}).filter("arrayToList",function(){return function(e){return angular.isArray(e)?e.join(", "):e}}).directive("xosLinkWrapper",function(){return{restrict:"A",transclude:!0,template:'\n          <a ng-if="col.link" href="{{col.link(item)}}">\n            <div ng-transclude></div>\n          </a>\n          <div ng-transclude ng-if="!col.link"></div>\n        '}})}(),function(){angular.module("xos.uiComponents").directive("xosPagination",function(){return{restrict:"E",scope:{pageSize:"=",totalElements:"=",change:"="},template:'\n        <div class="row" ng-if="vm.pageList.length > 1">\n          <div class="col-xs-12 text-center">\n            <ul class="pagination">\n              <li\n                ng-click="vm.goToPage(vm.currentPage - 1)"\n                ng-class="{disabled: vm.currentPage == 0}">\n                <a href="" aria-label="Previous">\n                    <span aria-hidden="true">&laquo;</span>\n                </a>\n              </li>\n              <li ng-repeat="i in vm.pageList" ng-class="{active: i === vm.currentPage}">\n                <a href="" ng-click="vm.goToPage(i)">{{i + 1}}</a>\n              </li>\n              <li\n                ng-click="vm.goToPage(vm.currentPage + 1)"\n                ng-class="{disabled: vm.currentPage == vm.pages - 1}">\n                <a href="" aria-label="Next">\n                    <span aria-hidden="true">&raquo;</span>\n                </a>\n              </li>\n            </ul>\n          </div>\n        </div>\n      ',bindToController:!0,controllerAs:"vm",controller:["$scope",function(e){var n=this;this.currentPage=0,this.goToPage=function(e){0>e||e===n.pages||(n.currentPage=e,n.change(e))},this.createPages=function(e){for(var n=[],o=0;e>o;o++)n.push(o);return n},e.$watch(function(){return n.totalElements},function(){n.totalElements&&(n.pages=Math.ceil(n.totalElements/n.pageSize),n.pageList=n.createPages(n.pages))})}]}}).filter("pagination",function(){return function(e,n){return e&&angular.isArray(e)?(n=parseInt(n,10),e.slice(n)):e}})}(),function(){angular.module("xos.uiComponents").directive("xosField",["RecursionHelper",function(e){return{restrict:"E",scope:{name:"=",field:"=",ngModel:"="},template:'\n        <label ng-if="vm.field.type !== \'object\'">{{vm.field.label}}</label>\n            <input\n              xos-custom-validator custom-validator="vm.field.validators.custom || null"\n              ng-if="vm.field.type !== \'boolean\' && vm.field.type !== \'object\' && vm.field.type !== \'select\'"\n              type="{{vm.field.type}}"\n              name="{{vm.name}}"\n              class="form-control"\n              ng-model="vm.ngModel"\n              ng-minlength="vm.field.validators.minlength || 0"\n              ng-maxlength="vm.field.validators.maxlength || 2000"\n              ng-required="vm.field.validators.required || false" />\n              <select class="form-control" ng-if ="vm.field.type === \'select\'"\n                name = "{{vm.name}}"\n                ng-options="item.id as item.label for item in vm.field.options"\n                ng-model="vm.ngModel"\n                ng-required="vm.field.validators.required || false">\n                </select>\n            <span class="boolean-field" ng-if="vm.field.type === \'boolean\'">\n              <a href="#"\n                class="btn btn-success"\n                ng-show="vm.ngModel"\n                ng-click="vm.ngModel = false">\n                <i class="glyphicon glyphicon-ok"></i>\n              </a>\n              <a href="#"\n                class="btn btn-danger"\n                ng-show="!vm.ngModel"\n                ng-click="vm.ngModel = true">\n                <i class="glyphicon glyphicon-remove"></i>\n              </a>\n            </span>\n            <div\n              class="panel panel-default object-field"\n              ng-if="vm.field.type == \'object\' && (!vm.isEmptyObject(vm.ngModel) || !vm.isEmptyObject(vm.field.properties))"\n              >\n              <div class="panel-heading">{{vm.field.label}}</div>\n              <div class="panel-body">\n                <div ng-if="!vm.field.properties" ng-repeat="(k, v) in vm.ngModel">\n                  <xos-field\n                    name="k"\n                    field="{label: vm.formatLabel(k), type: vm.getType(v)}"\n                    ng-model="v">\n                  </xos-field>\n                </div>\n                <div ng-if="vm.field.properties" ng-repeat="(k, v) in vm.field.properties">\n                  <xos-field\n                    name="k"\n                    field="{\n                      label: v.label || vm.formatLabel(k),\n                      type: v.type,\n                      validators: v.validators\n                    }"\n                    ng-model="vm.ngModel[k]">\n                  </xos-field>\n                </div>\n              </div>\n            </div>\n      ',bindToController:!0,controllerAs:"vm",compile:function(n){return e.compile(n)},controller:["$attrs","XosFormHelpers","LabelFormatter",function(e,n,o){if(!this.name)throw new Error("[xosField] Please provide a field name");if(!this.field)throw new Error("[xosField] Please provide a field definition");if(!this.field.type)throw new Error("[xosField] Please provide a type in the field definition");if(!e.ngModel)throw new Error("[xosField] Please provide an ng-model");this.getType=n._getFieldFormat,this.formatLabel=o.format,this.isEmptyObject=function(e){return e?0===Object.keys(e).length:!0}}]}}]).directive("xosCustomValidator",function(){return{restrict:"A",scope:{fn:"=customValidator"},require:"ngModel",link:function(e,n,o,i){function t(n){var o=e.fn(n);return angular.isArray(o)?i.$setValidity.apply(i,_toConsumableArray(o)):i.$setValidity("customValidation",o),n}angular.isFunction(e.fn)&&i.$parsers.push(t)}}})}(),function(){angular.module("xos.uiComponents").directive("xosAlert",function(){return{restrict:"E",scope:{config:"=",show:"=?"},template:'\n        <div ng-cloak class="alert alert-{{vm.config.type}}" ng-hide="!vm.show">\n          <button type="button" class="close" ng-if="vm.config.closeBtn" ng-click="vm.dismiss()">\n            <span aria-hidden="true">&times;</span>\n          </button>\n          <p ng-transclude></p>\n        </div>\n      ',transclude:!0,bindToController:!0,controllerAs:"vm",controller:["$timeout",function(e){var n=this;if(!this.config)throw new Error('[xosAlert] Please provide a configuration via the "config" attribute');this.show=this.show!==!1,this.dismiss=function(){n.show=!1},this.config.autoHide&&!function(){var o=e(function(){n.dismiss(),e.cancel(o)},n.config.autoHide)}()}]}})}(),function(){function e(){var e=function(e){return e.split("_").join(" ").trim()},n=function(e){return e.split(/(?=[A-Z])/).map(function(e){return e.toLowerCase()}).join(" ")},o=function(e){return e.slice(0,1).toUpperCase()+e.slice(1)},i=function(i){return i=e(i),i=n(i),i=o(i).replace(/\s\s+/g," ")+":",i.replace("::",":")};return{_formatByUnderscore:e,_formatByUppercase:n,_capitalize:o,format:i}}angular.module("xos.uiComponents").factory("LabelFormatter",e)}();var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e};!function(){angular.module("xos.uiComponents").service("XosFormHelpers",["_","LabelFormatter",function(e,n){var o=this;this._isEmail=function(e){var n=/(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/;return n.test(e)},this._getFieldFormat=function(n){return angular.isArray(n)?"array":e.isDate(n)||!Number.isNaN(Date.parse(n))&&new Date(n).getTime()>6311808e5?"date":"boolean"==typeof n?"boolean":o._isEmail(n)?"email":angular.isString(n)||null===n?"text":"undefined"==typeof n?"undefined":_typeof(n)},this.buildFormStructure=function(i,t,r){return i=angular.extend(i,t),t=t||{},e.reduce(Object.keys(i),function(e,i){return e[i]={label:t[i]&&t[i].label?t[i].label+":":n.format(i),type:t[i]&&t[i].type?t[i].type:o._getFieldFormat(r[i]),validators:t[i]&&t[i].validators?t[i].validators:{},hint:t[i]&&t[i].hint?t[i].hint:""},t[i]&&t[i].options&&(e[i].options=t[i].options),t[i]&&t[i].properties&&(e[i].properties=t[i].properties),"date"===e[i].type&&(r[i]=new Date(r[i])),"number"===e[i].type&&(r[i]=parseInt(r[i],10)),e},{})},this.parseModelField=function(n){return e.reduce(n,function(e,n){return e[n]={},e},{})}}])}(),function(){function e(){return function(e,n){if(angular.isUndefined(e))return!1;if(null===e||null===n)return e===n;if(angular.isObject(n)||angular.isObject(e))return angular.equals(n,e);if(_.isBoolean(e)||_.isBoolean(n))return 0!==e&&1!==e||(e=!!e),angular.equals(n,e);if(!angular.isString(e)||!angular.isString(n)){if(!angular.isDefined(e.toString)||!angular.isDefined(n.toString))return e===n;e=e.toString(),n=n.toString()}return e=e.toLowerCase()+"",n=n.toLowerCase()+"",-1!==e.indexOf(n)}}angular.module("xos.uiComponents").factory("Comparator",e)}(),function(){function e(e,n,o){e.interceptors.push("SetCSRFToken"),n.startSymbol("{$"),n.endSymbol("$}"),o.defaults.stripTrailingSlashes=!1}e.$inject=["$httpProvider","$interpolateProvider","$resourceProvider"],angular.module("xos.helpers",["ngCookies","ngResource","ngAnimate","xos.uiComponents"]).config(e).factory("_",["$window",function(e){return e._}])}(),function(){angular.module("xos.helpers").service("vSG-Collection",["$resource",function(e){return e("/api/service/vsg/")}])}(),function(){angular.module("xos.helpers").service("vOLT-Collection",["$resource",function(e){return e("/api/tenant/cord/volt/:volt_id/",{volt_id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Login",["$resource",function(e){return e("/api/utility/login/")}]).service("Logout",["$resource",function(e){return e("/api/utility/logout/")}])}(),function(){angular.module("xos.helpers").service("Users",["$resource",function(e){return e("/api/core/users/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Truckroll",["$resource",function(e){return e("/api/tenant/truckroll/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Tenants",["$resource",function(e){return e("/api/core/tenants/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Subscribers",["$resource",function(e){return e("/api/tenant/cord/subscriber/:id/",{id:"@id"},{update:{method:"PUT"},"View-a-Subscriber-Features-Detail":{method:"GET",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/"},"Read-Subscriber-uplink_speed":{method:"GET",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/uplink_speed/"},"Update-Subscriber-uplink_speed":{method:"PUT",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/uplink_speed/"},"Read-Subscriber-downlink_speed":{method:"GET",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/downlink_speed/"},"Update-Subscriber-downlink_speed":{method:"PUT",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/downlink_speed/"},"Read-Subscriber-cdn":{method:"GET",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/cdn/"},"Update-Subscriber-cdn":{method:"PUT",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/cdn/"},"Read-Subscriber-uverse":{method:"GET",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/uverse/"},"Update-Subscriber-uverse":{method:"PUT",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/uverse/"},"Read-Subscriber-status":{method:"GET",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/status/"},"Update-Subscriber-status":{method:"PUT",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/status/"}})}])}(),function(){angular.module("xos.helpers").service("SlicesPlus",["$http","$q",function(e,n){this.query=function(o){var i=n.defer();return e.get("/api/utility/slicesplus/",{params:o}).then(function(e){i.resolve(e.data)})["catch"](function(e){i.reject(e.data)}),{$promise:i.promise}},this.get=function(o,i){var t=n.defer();return e.get("/api/utility/slicesplus/"+o,{params:i}).then(function(e){t.resolve(e.data)})["catch"](function(e){t.reject(e.data)}),{$promise:t.promise}}}])}(),function(){angular.module("xos.helpers").service("Slices",["$resource",function(e){return e("/api/core/slices/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Sites",["$resource",function(e){return e("/api/core/sites/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Services",["$resource",function(e){return e("/api/core/services/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("ONOS-Services-Collection",["$resource",function(e){return e("/api/service/onos/")}])}(),function(){angular.module("xos.helpers").service("ONOS-App-Collection",["$resource",function(e){return e("/api/tenant/onos/app/")}])}(),function(){angular.module("xos.helpers").service("Nodes",["$resource",function(e){return e("/api/core/nodes/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Networkstemplates",["$resource",function(e){return e("/api/core/networktemplates/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Networks",["$resource",function(e){return e("/api/core/networks/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Instances",["$resource",function(e){return e("/api/core/instances/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Images",["$resource",function(e){return e("/api/core/images/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Flavors",["$resource",function(e){return e("/api/core/flavors/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Example-Services-Collection",["$resource",function(e){return e("/api/service/exampleservice/")}])}(),function(){angular.module("xos.helpers").service("Deployments",["$resource",function(e){return e("/api/core/deployments/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("XosUserPrefs",["$cookies",function(e){var n=this,o=e.get("xosUserPrefs")?angular.fromJson(e.get("xosUserPrefs")):{};this.getAll=function(){return o=e.get("xosUserPrefs")?angular.fromJson(e.get("xosUserPrefs")):{}},this.setAll=function(n){e.put("xosUserPrefs",angular.toJson(n))},this.getSynchronizerNotificationStatus=function(){var e=arguments.length<=0||void 0===arguments[0]?!1:arguments[0];return e?n.getAll().synchronizers.notification[e]:n.getAll().synchronizers.notification},this.setSynchronizerNotificationStatus=function(){var e=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],o=arguments[1];if(!e)throw new Error("[XosUserPrefs] When updating a synchronizer is mandatory to provide a name.");var i=n.getAll();i.synchronizers||(i.synchronizers={notification:{}}),i.synchronizers.notification[e]=o,n.setAll(i)}}])}(),function(){angular.module("xos.helpers").service("GraphService",["$q","Tenants","Services",function(e,n,o){var i=this;this.loadCoarseData=function(){var i=void 0,t=e.defer();return o.query().$promise.then(function(e){return i=e,n.query({kind:"coarse"}).$promise}).then(function(e){t.resolve({tenants:e,services:i})}),t.promise},this.getCoarseGraph=function(){return i.loadCoarseData().then(function(e){console.log(e)}),"ciao"}}])}(),function(){angular.module("xos.helpers").factory("Notification",function(){return window.Notification}).service("xosNotification",["$q","$log","Notification",function(e,n,o){var i=this;this.checkPermission=function(){var n=e.defer();return o.requestPermission().then(function(e){"granted"===e?n.resolve(e):n.reject(e)}),n.promise},this.sendNotification=function(e,i){var t=new o(e,i);t.onerror=function(e){n.error(e)}},this.notify=function(e,t){
+"use strict";function _toConsumableArray(e){if(Array.isArray(e)){for(var n=0,o=Array(e.length);n<e.length;n++)o[n]=e[n];return o}return Array.from(e)}!function(){angular.module("xos.uiComponents",["chart.js","RecursionHelper"])}(),function(){function e(){var e=function(e){return e.split("_").join(" ").trim()},n=function(e){return e.split(/(?=[A-Z])/).map(function(e){return e.toLowerCase()}).join(" ")},o=function(e){return e.slice(0,1).toUpperCase()+e.slice(1)},i=function(i){return i=e(i),i=n(i),i=o(i).replace(/\s\s+/g," ")+":",i.replace("::",":")};return{_formatByUnderscore:e,_formatByUppercase:n,_capitalize:o,format:i}}angular.module("xos.uiComponents").factory("LabelFormatter",e)}();var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e};!function(){angular.module("xos.uiComponents").service("XosFormHelpers",["_","LabelFormatter",function(e,n){var o=this;this._isEmail=function(e){var n=/(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/;return n.test(e)},this._getFieldFormat=function(n){return angular.isArray(n)?"array":e.isDate(n)||!Number.isNaN(Date.parse(n))&&new Date(n).getTime()>6311808e5?"date":"boolean"==typeof n?"boolean":o._isEmail(n)?"email":angular.isString(n)||null===n?"text":"undefined"==typeof n?"undefined":_typeof(n)},this.buildFormStructure=function(i,t,r){return i=angular.extend(i,t),t=t||{},e.reduce(Object.keys(i),function(e,i){return e[i]={label:t[i]&&t[i].label?t[i].label+":":n.format(i),type:t[i]&&t[i].type?t[i].type:o._getFieldFormat(r[i]),validators:t[i]&&t[i].validators?t[i].validators:{},hint:t[i]&&t[i].hint?t[i].hint:""},t[i]&&t[i].options&&(e[i].options=t[i].options),t[i]&&t[i].properties&&(e[i].properties=t[i].properties),"date"===e[i].type&&(r[i]=new Date(r[i])),"number"===e[i].type&&(r[i]=parseInt(r[i],10)),e},{})},this.parseModelField=function(n){return e.reduce(n,function(e,n){return e[n]={},e},{})}}])}(),function(){function e(){return function(e,n){if(angular.isUndefined(e))return!1;if(null===e||null===n)return e===n;if(angular.isObject(n)||angular.isObject(e))return angular.equals(n,e);if(_.isBoolean(e)||_.isBoolean(n))return 0!==e&&1!==e||(e=!!e),angular.equals(n,e);if(!angular.isString(e)||!angular.isString(n)){if(!angular.isDefined(e.toString)||!angular.isDefined(n.toString))return e===n;e=e.toString(),n=n.toString()}return e=e.toLowerCase()+"",n=n.toLowerCase()+"",-1!==e.indexOf(n)}}angular.module("xos.uiComponents").factory("Comparator",e)}();var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e};!function(){angular.module("xos.uiComponents").directive("xosSmartTable",function(){return{restrict:"E",scope:{config:"="},template:'\n        <div class="row" ng-show="vm.data.length > 0">\n          <div class="col-xs-12 text-right">\n            <a href="" class="btn btn-success" ng-click="vm.createItem()">\n              Add\n            </a>\n          </div>\n        </div>\n        <div class="row">\n          <div class="col-xs-12 table-responsive">\n            <xos-table config="vm.tableConfig" data="vm.data"></xos-table>\n          </div>\n        </div>\n        <div class="panel panel-default" ng-show="vm.detailedItem">\n          <div class="panel-heading">\n            <div class="row">\n              <div class="col-xs-11">\n                <h3 class="panel-title" ng-show="vm.detailedItem.id">Update {{vm.config.resource}} {{vm.detailedItem.id}}</h3>\n                <h3 class="panel-title" ng-show="!vm.detailedItem.id">Create {{vm.config.resource}} item</h3>\n              </div>\n              <div class="col-xs-1">\n                <a href="" ng-click="vm.cleanForm()">\n                  <i class="glyphicon glyphicon-remove pull-right"></i>\n                </a>\n              </div>\n            </div>\n          </div>\n          <div class="panel-body">\n            <xos-form config="vm.formConfig" ng-model="vm.detailedItem"></xos-form>\n          </div>\n        </div>\n        <xos-alert config="{type: \'success\', closeBtn: true}" show="vm.responseMsg">{{vm.responseMsg}}</xos-alert>\n        <xos-alert config="{type: \'danger\', closeBtn: true}" show="vm.responseErr">{{vm.responseErr}}</xos-alert>\n      ',bindToController:!0,controllerAs:"vm",controller:["$injector","LabelFormatter","_","XosFormHelpers",function(e,n,o,i){var t=this;this.responseMsg=!1,this.responseErr=!1,this.tableConfig={columns:[],actions:[{label:"delete",icon:"remove",cb:function(e){t.Resource["delete"]({id:e.id}).$promise.then(function(){o.remove(t.data,function(n){return n.id===e.id}),t.responseMsg=t.config.resource+" with id "+e.id+" successfully deleted"})["catch"](function(n){t.responseErr=n.data.detail||"Error while deleting "+t.config.resource+" with id "+e.id})},color:"red"},{label:"details",icon:"search",cb:function(e){t.detailedItem=e}}],classes:"table table-striped table-bordered table-responsive",filter:"field",order:!0,pagination:{pageSize:10}},this.formConfig={exclude:this.config.hiddenFields,fields:{},formName:this.config.resource+"Form",actions:[{label:"Save",icon:"ok",cb:function(e){var n=void 0,o=!0;e.id?(n=e.$update(),o=!1):n=e.$save(),n.then(function(n){o&&t.data.push(angular.copy(n)),delete t.detailedItem,t.responseMsg=t.config.resource+" with id "+e.id+" successfully saved"})["catch"](function(n){t.responseErr=n.data.detail||"Error while saving "+t.config.resource+" with id "+e.id})},"class":"success"}]},this.cleanForm=function(){delete t.detailedItem},this.createItem=function(){t.detailedItem=new t.Resource},this.Resource=e.get(this.config.resource);var r=function(){t.Resource.query().$promise.then(function(e){if(!e[0])return void(t.data=e);var r=e[0],a=Object.keys(r);o.remove(a,function(e){return"id"===e||"validators"===e}),angular.isArray(t.config.hiddenFields)&&(a=o.difference(a,t.config.hiddenFields));var s=a.map(function(e){return n.format(e)});a.forEach(function(e,n){var o={label:s[n],prop:e};angular.isString(r[e])&&"undefined"!=typeof r[e]&&(o.type=_typeof(r[e])),t.tableConfig.columns.push(o)}),a.forEach(function(e,o){t.formConfig.fields[e]={label:n.format(s[o]).replace(":",""),type:i._getFieldFormat(r[e])}}),t.data=e})};r()}]}})}(),function(){angular.module("xos.uiComponents").directive("xosSmartPie",function(){return{restrict:"E",scope:{config:"="},template:'\n        <canvas\n          class="chart chart-pie {{vm.config.classes}}"\n          chart-data="vm.data" chart-labels="vm.labels"\n          chart-legend="{{vm.config.legend}}">\n        </canvas>\n      ',bindToController:!0,controllerAs:"vm",controller:["$injector","$interval","$scope","$timeout","_",function(e,n,o,i,t){var r=this;if(!this.config.resource&&!this.config.data)throw new Error("[xosSmartPie] Please provide a resource or an array of data in the configuration");var a=function(e){return t.groupBy(e,r.config.groupBy)},s=function(e){return t.reduce(Object.keys(e),function(n,o){return n.concat(e[o].length)},[])},l=function(e){return angular.isFunction(r.config.labelFormatter)?r.config.labelFormatter(Object.keys(e)):Object.keys(e)},c=function(e){var n=a(e);r.data=s(n),r.labels=l(n)};this.config.resource?!function(){r.Resource=e.get(r.config.resource);var o=function(){r.Resource.query().$promise.then(function(e){e[0]&&c(e)})};o(),r.config.poll&&n(function(){o()},1e3*r.config.poll)}():o.$watch(function(){return r.config.data},function(e){e&&c(r.config.data)},!0),o.$on("create",function(e,n){console.log("create: "+n.id)}),o.$on("destroy",function(e,n){console.log("destroy: "+n.id)})}]}})}(),function(){angular.module("xos.uiComponents").directive("xosValidation",function(){return{restrict:"E",scope:{field:"=",form:"="},template:'\n        <div ng-cloak>\n          <xos-alert config="vm.config" show="vm.field.$error.required !== undefined && vm.field.$error.required !== false  && (vm.field.$touched || vm.form.$submitted)">\n            Field required\n          </xos-alert>\n          <xos-alert config="vm.config" show="vm.field.$error.email !== undefined && vm.field.$error.email !== false && (vm.field.$touched || vm.form.$submitted)">\n            This is not a valid email\n          </xos-alert>\n          <xos-alert config="vm.config" show="vm.field.$error.minlength !== undefined && vm.field.$error.minlength !== false && (vm.field.$touched || vm.form.$submitted)">\n            Too short\n          </xos-alert>\n          <xos-alert config="vm.config" show="vm.field.$error.maxlength !== undefined && vm.field.$error.maxlength !== false && (vm.field.$touched || vm.form.$submitted)">\n            Too long\n          </xos-alert>\n          <xos-alert config="vm.config" show="vm.field.$error.custom !== undefined && vm.field.$error.custom !== false && (vm.field.$touched || vm.form.$submitted)">\n            Field invalid\n          </xos-alert>\n        </div>\n      ',transclude:!0,bindToController:!0,controllerAs:"vm",controller:function(){this.config={type:"danger"}}}})}(),function(){angular.module("xos.uiComponents").directive("xosTable",function(){return{restrict:"E",scope:{data:"=",config:"="},template:'\n          <div ng-show="vm.data.length > 0 && vm.loader == false">\n            <div class="row" ng-if="vm.config.filter == \'fulltext\'">\n              <div class="col-xs-12">\n                <input\n                  class="form-control"\n                  placeholder="Type to search.."\n                  type="text"\n                  ng-model="vm.query"/>\n              </div>\n            </div>\n            <table ng-class="vm.classes" ng-hide="vm.data.length == 0">\n              <thead>\n                <tr>\n                  <th ng-repeat="col in vm.columns">\n                    {{col.label}}\n                    <span ng-if="vm.config.order">\n                      <a href="" ng-click="vm.orderBy = col.prop; vm.reverse = false">\n                        <i class="glyphicon glyphicon-chevron-up"></i>\n                      </a>\n                      <a href="" ng-click="vm.orderBy = col.prop; vm.reverse = true">\n                        <i class="glyphicon glyphicon-chevron-down"></i>\n                      </a>\n                    </span>\n                  </th>\n                  <th ng-if="vm.config.actions">Actions:</th>\n                </tr>\n              </thead>\n              <tbody ng-if="vm.config.filter == \'field\'">\n                <tr>\n                  <td ng-repeat="col in vm.columns">\n                    <input\n                      ng-if="col.type !== \'boolean\' && col.type !== \'array\' && col.type !== \'object\' && col.type !== \'custom\'"\n                      class="form-control"\n                      placeholder="Type to search by {{col.label}}"\n                      type="text"\n                      ng-model="vm.query[col.prop]"/>\n                    <select\n                      ng-if="col.type === \'boolean\'"\n                      class="form-control"\n                      ng-model="vm.query[col.prop]">\n                      <option value="">-</option>\n                      <option value="true">True</option>\n                      <option value="false">False</option>\n                    </select>\n                  </td>\n                  <td ng-if="vm.config.actions"></td>\n                </tr>\n              </tbody>\n              <tbody>\n                <tr ng-repeat="item in vm.data | filter:vm.query:vm.comparator | orderBy:vm.orderBy:vm.reverse | pagination:vm.currentPage * vm.config.pagination.pageSize | limitTo: (vm.config.pagination.pageSize || vm.data.length) track by $index">\n                  <td ng-repeat="col in vm.columns" xos-link-wrapper>\n                    <span ng-if="!col.type">{{item[col.prop]}}</span>\n                    <span ng-if="col.type === \'boolean\'">\n                      <i class="glyphicon"\n                        ng-class="{\'glyphicon-ok\': item[col.prop], \'glyphicon-remove\': !item[col.prop]}">\n                      </i>\n                    </span>\n                    <span ng-if="col.type === \'date\'">\n                      {{item[col.prop] | date:\'H:mm MMM d, yyyy\'}}\n                    </span>\n                    <span ng-if="col.type === \'array\'">\n                      {{item[col.prop] | arrayToList}}\n                    </span>\n                    <span ng-if="col.type === \'object\'">\n                      <dl class="dl-horizontal">\n                        <span ng-repeat="(k,v) in item[col.prop]">\n                          <dt>{{k}}</dt>\n                          <dd>{{v}}</dd>\n                        </span>\n                      </dl>\n                    </span>\n                    <span ng-if="col.type === \'custom\'">\n                      {{col.formatter(item)}}\n                    </span>\n                    <span ng-if="col.type === \'icon\'">\n                      <i class="glyphicon glyphicon-{{col.formatter(item)}}">\n                      </i>\n                    </span>\n                  </td>\n                  <td ng-if="vm.config.actions">\n                    <a href=""\n                      ng-repeat="action in vm.config.actions"\n                      ng-click="action.cb(item)"\n                      title="{{action.label}}">\n                      <i\n                        class="glyphicon glyphicon-{{action.icon}}"\n                        style="color: {{action.color}};"></i>\n                    </a>\n                  </td>\n                </tr>\n              </tbody>\n            </table>\n            <xos-pagination\n              ng-if="vm.config.pagination"\n              page-size="vm.config.pagination.pageSize"\n              total-elements="vm.data.length"\n              change="vm.goToPage">\n              </xos-pagination>\n          </div>\n          <div ng-show="(vm.data.length == 0 || !vm.data) && vm.loader == false">\n             <xos-alert config="{type: \'info\'}">\n              No data to show.\n            </xos-alert>\n          </div>\n          <div ng-show="vm.loader == true">\n            <div class="loader"></div>\n          </div>\n        ',bindToController:!0,controllerAs:"vm",controller:["_","$scope","Comparator",function(e,n,o){var i=this;if(this.comparator=o,this.loader=!0,n.$watch(function(){return i.data},function(e){angular.isDefined(e)&&(i.loader=!1)}),!this.config)throw new Error('[xosTable] Please provide a configuration via the "config" attribute');if(!this.config.columns)throw new Error("[xosTable] Please provide a columns list in the configuration");this.config.order&&angular.isObject(this.config.order)&&(this.reverse=this.config.order.reverse||!1,this.orderBy=this.config.order.field||"id");var t=e.filter(this.config.columns,{type:"custom"});angular.isArray(t)&&t.length>0&&e.forEach(t,function(e){if(!e.formatter||!angular.isFunction(e.formatter))throw new Error("[xosTable] You have provided a custom field type, a formatter function should provided too.")});var r=e.filter(this.config.columns,{type:"icon"});angular.isArray(r)&&r.length>0&&e.forEach(r,function(e){if(!e.formatter||!angular.isFunction(e.formatter))throw new Error("[xosTable] You have provided an icon field type, a formatter function should provided too.")});var a=e.filter(this.config.columns,function(e){return angular.isDefined(e.link)});angular.isArray(a)&&a.length>0&&e.forEach(a,function(e){if(!angular.isFunction(e.link))throw new Error("[xosTable] The link property should be a function.")}),this.columns=this.config.columns,this.classes=this.config.classes||"table table-striped table-bordered",this.config.actions,this.config.pagination&&(this.currentPage=0,this.goToPage=function(e){i.currentPage=e})}]}}).filter("arrayToList",function(){return function(e){return angular.isArray(e)?e.join(", "):e}}).directive("xosLinkWrapper",function(){return{restrict:"A",transclude:!0,template:'\n          <a ng-if="col.link" href="{{col.link(item)}}">\n            <div ng-transclude></div>\n          </a>\n          <div ng-transclude ng-if="!col.link"></div>\n        '}})}(),function(){angular.module("xos.uiComponents").directive("xosPagination",function(){return{restrict:"E",scope:{pageSize:"=",totalElements:"=",change:"="},template:'\n        <div class="row" ng-if="vm.pageList.length > 1">\n          <div class="col-xs-12 text-center">\n            <ul class="pagination">\n              <li\n                ng-click="vm.goToPage(vm.currentPage - 1)"\n                ng-class="{disabled: vm.currentPage == 0}">\n                <a href="" aria-label="Previous">\n                    <span aria-hidden="true">&laquo;</span>\n                </a>\n              </li>\n              <li ng-repeat="i in vm.pageList" ng-class="{active: i === vm.currentPage}">\n                <a href="" ng-click="vm.goToPage(i)">{{i + 1}}</a>\n              </li>\n              <li\n                ng-click="vm.goToPage(vm.currentPage + 1)"\n                ng-class="{disabled: vm.currentPage == vm.pages - 1}">\n                <a href="" aria-label="Next">\n                    <span aria-hidden="true">&raquo;</span>\n                </a>\n              </li>\n            </ul>\n          </div>\n        </div>\n      ',bindToController:!0,controllerAs:"vm",controller:["$scope",function(e){var n=this;this.currentPage=0,this.goToPage=function(e){0>e||e===n.pages||(n.currentPage=e,n.change(e))},this.createPages=function(e){for(var n=[],o=0;e>o;o++)n.push(o);return n},e.$watch(function(){return n.totalElements},function(){n.totalElements&&(n.pages=Math.ceil(n.totalElements/n.pageSize),n.pageList=n.createPages(n.pages))})}]}}).filter("pagination",function(){return function(e,n){return e&&angular.isArray(e)?(n=parseInt(n,10),e.slice(n)):e}})}(),function(){angular.module("xos.uiComponents").directive("xosForm",function(){return{restrict:"E",scope:{config:"=",ngModel:"="},template:'\n        <form name="vm.{{vm.config.formName || \'form\'}}" novalidate>\n          <div class="form-group" ng-repeat="(name, field) in vm.formField">\n            <xos-field name="name" field="field" ng-model="vm.ngModel[name]"></xos-field>\n            <xos-validation field="vm[vm.config.formName || \'form\'][name]" form = "vm[vm.config.formName || \'form\']"></xos-validation>\n            <div class="alert alert-info" ng-show="(field.hint).length >0" role="alert">{{field.hint}}</div>\n          </div>\n          <div class="form-group" ng-if="vm.config.actions">\n          <xos-alert config="vm.config.feedback" show="vm.config.feedback.show">{{vm.config.feedback.message}}</xos-alert>\n\n            <button role="button" href=""\n              ng-repeat="action in vm.config.actions"\n              ng-click="action.cb(vm.ngModel, vm[vm.config.formName || \'form\'])"\n              class="btn btn-{{action.class}}"\n              title="{{action.label}}">\n              <i class="glyphicon glyphicon-{{action.icon}}"></i>\n              {{action.label}}\n            </button>\n          </div>\n        </form>\n      ',bindToController:!0,controllerAs:"vm",controller:["$scope","$log","_","XosFormHelpers",function(e,n,o,i){var t=this;if(!this.config)throw new Error('[xosForm] Please provide a configuration via the "config" attribute');if(!this.config.actions)throw new Error("[xosForm] Please provide an action list in the configuration");this.config.feedback||(this.config.feedback={show:!1,message:"Form submitted successfully !!!",type:"success"}),this.excludedField=["id","validators","created","updated","deleted","backend_status"],this.config&&this.config.exclude&&(this.excludedField=this.excludedField.concat(this.config.exclude)),this.formField=[],e.$watch(function(){return t.config},function(){if(t.ngModel){var e=o.difference(Object.keys(t.ngModel),t.excludedField),n=i.parseModelField(e);t.formField=i.buildFormStructure(n,t.config.fields,t.ngModel)}},!0),e.$watch(function(){return t.ngModel},function(e){if(t.formField={},e){var n=o.difference(Object.keys(e),t.excludedField),r=i.parseModelField(n);t.formField=i.buildFormStructure(r,t.config.fields,e)}})}]}})}(),function(){angular.module("xos.uiComponents").directive("xosField",["RecursionHelper",function(e){return{restrict:"E",scope:{name:"=",field:"=",ngModel:"="},template:'\n        <label ng-if="vm.field.type !== \'object\'">{{vm.field.label}}</label>\n            <input\n              xos-custom-validator custom-validator="vm.field.validators.custom || null"\n              ng-if="vm.field.type !== \'boolean\' && vm.field.type !== \'object\' && vm.field.type !== \'select\'"\n              type="{{vm.field.type}}"\n              name="{{vm.name}}"\n              class="form-control"\n              ng-model="vm.ngModel"\n              ng-minlength="vm.field.validators.minlength || 0"\n              ng-maxlength="vm.field.validators.maxlength || 2000"\n              ng-required="vm.field.validators.required || false" />\n              <select class="form-control" ng-if ="vm.field.type === \'select\'"\n                name = "{{vm.name}}"\n                ng-options="item.id as item.label for item in vm.field.options"\n                ng-model="vm.ngModel"\n                ng-required="vm.field.validators.required || false">\n                </select>\n            <span class="boolean-field" ng-if="vm.field.type === \'boolean\'">\n              <a href="#"\n                class="btn btn-success"\n                ng-show="vm.ngModel"\n                ng-click="vm.ngModel = false">\n                <i class="glyphicon glyphicon-ok"></i>\n              </a>\n              <a href="#"\n                class="btn btn-danger"\n                ng-show="!vm.ngModel"\n                ng-click="vm.ngModel = true">\n                <i class="glyphicon glyphicon-remove"></i>\n              </a>\n            </span>\n            <div\n              class="panel panel-default object-field"\n              ng-if="vm.field.type == \'object\' && (!vm.isEmptyObject(vm.ngModel) || !vm.isEmptyObject(vm.field.properties))"\n              >\n              <div class="panel-heading">{{vm.field.label}}</div>\n              <div class="panel-body">\n                <div ng-if="!vm.field.properties" ng-repeat="(k, v) in vm.ngModel">\n                  <xos-field\n                    name="k"\n                    field="{label: vm.formatLabel(k), type: vm.getType(v)}"\n                    ng-model="v">\n                  </xos-field>\n                </div>\n                <div ng-if="vm.field.properties" ng-repeat="(k, v) in vm.field.properties">\n                  <xos-field\n                    name="k"\n                    field="{\n                      label: v.label || vm.formatLabel(k),\n                      type: v.type,\n                      validators: v.validators\n                    }"\n                    ng-model="vm.ngModel[k]">\n                  </xos-field>\n                </div>\n              </div>\n            </div>\n      ',bindToController:!0,controllerAs:"vm",compile:function(n){return e.compile(n)},controller:["$attrs","XosFormHelpers","LabelFormatter",function(e,n,o){if(!this.name)throw new Error("[xosField] Please provide a field name");if(!this.field)throw new Error("[xosField] Please provide a field definition");if(!this.field.type)throw new Error("[xosField] Please provide a type in the field definition");if(!e.ngModel)throw new Error("[xosField] Please provide an ng-model");this.getType=n._getFieldFormat,this.formatLabel=o.format,this.isEmptyObject=function(e){return e?0===Object.keys(e).length:!0}}]}}]).directive("xosCustomValidator",function(){return{restrict:"A",scope:{fn:"=customValidator"},require:"ngModel",link:function(e,n,o,i){function t(n){var o=e.fn(n);return angular.isArray(o)?i.$setValidity.apply(i,_toConsumableArray(o)):i.$setValidity("customValidation",o),n}angular.isFunction(e.fn)&&i.$parsers.push(t)}}})}(),function(){angular.module("xos.uiComponents").directive("xosAlert",function(){return{restrict:"E",scope:{config:"=",show:"=?"},template:'\n        <div ng-cloak class="alert alert-{{vm.config.type}}" ng-hide="!vm.show">\n          <button type="button" class="close" ng-if="vm.config.closeBtn" ng-click="vm.dismiss()">\n            <span aria-hidden="true">&times;</span>\n          </button>\n          <p ng-transclude></p>\n        </div>\n      ',transclude:!0,bindToController:!0,controllerAs:"vm",controller:["$timeout",function(e){var n=this;if(!this.config)throw new Error('[xosAlert] Please provide a configuration via the "config" attribute');this.show=this.show!==!1,this.dismiss=function(){n.show=!1},this.config.autoHide&&!function(){var o=e(function(){n.dismiss(),e.cancel(o)},n.config.autoHide)}()}]}})}(),function(){function e(e,n,o){e.interceptors.push("SetCSRFToken"),n.startSymbol("{$"),n.endSymbol("$}"),o.defaults.stripTrailingSlashes=!1}e.$inject=["$httpProvider","$interpolateProvider","$resourceProvider"],angular.module("xos.helpers",["ngCookies","ngResource","ngAnimate","xos.uiComponents"]).config(e).factory("_",["$window",function(e){return e._}])}(),function(){angular.module("xos.helpers").service("vSG-Collection",["$resource",function(e){return e("/api/service/vsg/")}])}(),function(){angular.module("xos.helpers").service("vOLT-Collection",["$resource",function(e){return e("/api/tenant/cord/volt/:volt_id/",{volt_id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Login",["$resource",function(e){return e("/api/utility/login/")}]).service("Logout",["$resource",function(e){return e("/api/utility/logout/")}])}(),function(){angular.module("xos.helpers").service("Users",["$resource",function(e){return e("/api/core/users/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Truckroll",["$resource",function(e){return e("/api/tenant/truckroll/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Tenants",["$resource",function(e){return e("/api/core/tenants/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Subscribers",["$resource",function(e){return e("/api/tenant/cord/subscriber/:id/",{id:"@id"},{update:{method:"PUT"},"View-a-Subscriber-Features-Detail":{method:"GET",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/"},"Read-Subscriber-uplink_speed":{method:"GET",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/uplink_speed/"},"Update-Subscriber-uplink_speed":{method:"PUT",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/uplink_speed/"},"Read-Subscriber-downlink_speed":{method:"GET",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/downlink_speed/"},"Update-Subscriber-downlink_speed":{method:"PUT",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/downlink_speed/"},"Read-Subscriber-cdn":{method:"GET",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/cdn/"},"Update-Subscriber-cdn":{method:"PUT",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/cdn/"},"Read-Subscriber-uverse":{method:"GET",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/uverse/"},"Update-Subscriber-uverse":{method:"PUT",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/uverse/"},"Read-Subscriber-status":{method:"GET",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/status/"},"Update-Subscriber-status":{method:"PUT",isArray:!1,url:"/api/tenant/cord/subscriber/:id/features/status/"}})}])}(),function(){angular.module("xos.helpers").service("SlicesPlus",["$http","$q",function(e,n){this.query=function(o){var i=n.defer();return e.get("/api/utility/slicesplus/",{params:o}).then(function(e){i.resolve(e.data)})["catch"](function(e){i.reject(e.data)}),{$promise:i.promise}},this.get=function(o,i){var t=n.defer();return e.get("/api/utility/slicesplus/"+o,{params:i}).then(function(e){t.resolve(e.data)})["catch"](function(e){t.reject(e.data)}),{$promise:t.promise}}}])}(),function(){angular.module("xos.helpers").service("Slices",["$resource",function(e){return e("/api/core/slices/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Sites",["$resource",function(e){return e("/api/core/sites/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Services",["$resource",function(e){return e("/api/core/services/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("ONOS-Services-Collection",["$resource",function(e){return e("/api/service/onos/")}])}(),function(){angular.module("xos.helpers").service("ONOS-App-Collection",["$resource",function(e){return e("/api/tenant/onos/app/")}])}(),function(){angular.module("xos.helpers").service("Nodes",["$resource",function(e){return e("/api/core/nodes/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Networkstemplates",["$resource",function(e){return e("/api/core/networktemplates/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Networks",["$resource",function(e){return e("/api/core/networks/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Instances",["$resource",function(e){return e("/api/core/instances/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Images",["$resource",function(e){return e("/api/core/images/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Flavors",["$resource",function(e){return e("/api/core/flavors/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("Example-Services-Collection",["$resource",function(e){return e("/api/service/exampleservice/")}])}(),function(){angular.module("xos.helpers").service("Deployments",["$resource",function(e){return e("/api/core/deployments/:id/",{id:"@id"},{update:{method:"PUT"}})}])}(),function(){angular.module("xos.helpers").service("XosUserPrefs",["$cookies",function(e){var n=this,o=e.get("xosUserPrefs")?angular.fromJson(e.get("xosUserPrefs")):{};this.getAll=function(){return o=e.get("xosUserPrefs")?angular.fromJson(e.get("xosUserPrefs")):{}},this.setAll=function(n){e.put("xosUserPrefs",angular.toJson(n))},this.getSynchronizerNotificationStatus=function(){var e=arguments.length<=0||void 0===arguments[0]?!1:arguments[0];return e?n.getAll().synchronizers.notification[e]:n.getAll().synchronizers.notification},this.setSynchronizerNotificationStatus=function(){var e=arguments.length<=0||void 0===arguments[0]?!1:arguments[0],o=arguments[1];if(!e)throw new Error("[XosUserPrefs] When updating a synchronizer is mandatory to provide a name.");var i=n.getAll();i.synchronizers||(i.synchronizers={notification:{}}),i.synchronizers.notification[e]=o,n.setAll(i)}}])}(),function(){angular.module("xos.helpers").service("GraphService",["$q","Tenants","Services",function(e,n,o){var i=this;this.loadCoarseData=function(){var i=void 0,t=e.defer();return o.query().$promise.then(function(e){return i=e,n.query({kind:"coarse"}).$promise}).then(function(e){t.resolve({tenants:e,services:i})}),t.promise},this.getCoarseGraph=function(){return i.loadCoarseData().then(function(e){console.log(e)}),"ciao"}}])}(),function(){angular.module("xos.helpers").factory("Notification",function(){return window.Notification}).service("xosNotification",["$q","$log","Notification",function(e,n,o){var i=this;this.checkPermission=function(){var n=e.defer();return o.requestPermission().then(function(e){"granted"===e?n.resolve(e):n.reject(e)}),n.promise},this.sendNotification=function(e,i){var t=new o(e,i);t.onerror=function(e){n.error(e)}},this.notify=function(e,t){
 "Notification"in window?"granted"!==o.permission?i.checkPermission().then(function(){return i.sendNotification(e,t)}):"granted"===o.permission&&i.sendNotification(e,t):n.info("This browser does not support desktop notification")}}])}(),function(){function e(){return{request:function(e){return-1===e.url.indexOf(".html")&&(e.url+="?no_hyperlinks=1"),e}}}angular.module("xos.helpers").factory("NoHyperlinks",e)}(),angular.module("xos.helpers").config(["$provide",function(e){e.decorator("$log",["$delegate",function(e){var n=function(){return window.location.href.indexOf("debug=true")>=0},o=e.log,i=e.info,t=e.warn,r=e.debug,a=function(o){return function(){if(n()){var i=[].slice.call(arguments),t=new Date;return i[0]="["+t.getHours()+":"+t.getMinutes()+":"+t.getSeconds()+"] "+i[0],!angular.isFunction(e.reset)||e.debug.logs instanceof Array||e.reset(),o.apply(null,i)}}};return e.info=a(i),e.log=a(o),e.warn=a(t),e.debug=a(r),e}])}]),function(){function e(){var e=function(e){return e.split("_").join(" ").trim()},n=function(e){return e.split(/(?=[A-Z])/).map(function(e){return e.toLowerCase()}).join(" ")},o=function(e){return e.slice(0,1).toUpperCase()+e.slice(1)},i=function(i){return i=e(i),i=n(i),i=o(i).replace(/\s\s+/g," ")+":",i.replace("::",":")};return{_formatByUnderscore:e,_formatByUppercase:n,_capitalize:o,format:i}}angular.module("xos.uiComponents").factory("LabelFormatter",e)}(),function(){function e(e){return{request:function(n){return"GET"!==n.method&&(n.headers["X-CSRFToken"]=e.get("xoscsrftoken")),n}}}e.$inject=["$cookies"],angular.module("xos.helpers").factory("SetCSRFToken",e)}();
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/vendor/xosServiceGridVendor.js b/xos/core/xoslib/static/js/vendor/xosServiceGridVendor.js
new file mode 100644
index 0000000..14009a2
--- /dev/null
+++ b/xos/core/xoslib/static/js/vendor/xosServiceGridVendor.js
@@ -0,0 +1,5 @@
+!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.jsyaml=t()}}(function(){return function t(e,r,n){function i(s,o){if(!r[s]){if(!e[s]){var u="function"==typeof require&&require;if(!o&&u)return u(s,!0);if(a)return a(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var c=r[s]={exports:{}};e[s][0].call(c.exports,function(t){var r=e[s][1][t];return i(r?r:t)},c,c.exports,t,e,r,n)}return r[s].exports}for(var a="function"==typeof require&&require,s=0;s<n.length;s++)i(n[s]);return i}({1:[function(t,e,r){"use strict";function n(t){return function(){throw new Error("Function "+t+" is deprecated and cannot be used.")}}var i=t("./js-yaml/loader"),a=t("./js-yaml/dumper");e.exports.Type=t("./js-yaml/type"),e.exports.Schema=t("./js-yaml/schema"),e.exports.FAILSAFE_SCHEMA=t("./js-yaml/schema/failsafe"),e.exports.JSON_SCHEMA=t("./js-yaml/schema/json"),e.exports.CORE_SCHEMA=t("./js-yaml/schema/core"),e.exports.DEFAULT_SAFE_SCHEMA=t("./js-yaml/schema/default_safe"),e.exports.DEFAULT_FULL_SCHEMA=t("./js-yaml/schema/default_full"),e.exports.load=i.load,e.exports.loadAll=i.loadAll,e.exports.safeLoad=i.safeLoad,e.exports.safeLoadAll=i.safeLoadAll,e.exports.dump=a.dump,e.exports.safeDump=a.safeDump,e.exports.YAMLException=t("./js-yaml/exception"),e.exports.MINIMAL_SCHEMA=t("./js-yaml/schema/failsafe"),e.exports.SAFE_SCHEMA=t("./js-yaml/schema/default_safe"),e.exports.DEFAULT_SCHEMA=t("./js-yaml/schema/default_full"),e.exports.scan=n("scan"),e.exports.parse=n("parse"),e.exports.compose=n("compose"),e.exports.addConstructor=n("addConstructor")},{"./js-yaml/dumper":3,"./js-yaml/exception":4,"./js-yaml/loader":5,"./js-yaml/schema":7,"./js-yaml/schema/core":8,"./js-yaml/schema/default_full":9,"./js-yaml/schema/default_safe":10,"./js-yaml/schema/failsafe":11,"./js-yaml/schema/json":12,"./js-yaml/type":13}],2:[function(t,e,r){"use strict";function n(t){return"undefined"==typeof t||null===t}function i(t){return"object"==typeof t&&null!==t}function a(t){return Array.isArray(t)?t:n(t)?[]:[t]}function s(t,e){var r,n,i,a;if(e)for(a=Object.keys(e),r=0,n=a.length;n>r;r+=1)i=a[r],t[i]=e[i];return t}function o(t,e){var r,n="";for(r=0;e>r;r+=1)n+=t;return n}function u(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t}e.exports.isNothing=n,e.exports.isObject=i,e.exports.toArray=a,e.exports.repeat=o,e.exports.isNegativeZero=u,e.exports.extend=s},{}],3:[function(t,e,r){"use strict";function n(t,e){var r,n,i,a,s,o,u;if(null===e)return{};for(r={},n=Object.keys(e),i=0,a=n.length;a>i;i+=1)s=n[i],o=String(e[s]),"!!"===s.slice(0,2)&&(s="tag:yaml.org,2002:"+s.slice(2)),u=t.compiledTypeMap[s],u&&D.call(u.styleAliases,o)&&(o=u.styleAliases[o]),r[s]=o;return r}function i(t){var e,r,n;if(e=t.toString(16).toUpperCase(),255>=t)r="x",n=2;else if(65535>=t)r="u",n=4;else{if(!(4294967295>=t))throw new T("code point within a string may not be greater than 0xFFFFFFFF");r="U",n=8}return"\\"+r+z.repeat("0",n-e.length)+e}function a(t){this.schema=t.schema||F,this.indent=Math.max(1,t.indent||2),this.skipInvalid=t.skipInvalid||!1,this.flowLevel=z.isNothing(t.flowLevel)?-1:t.flowLevel,this.styleMap=n(this.schema,t.styles||null),this.sortKeys=t.sortKeys||!1,this.lineWidth=t.lineWidth||80,this.noRefs=t.noRefs||!1,this.noCompatMode=t.noCompatMode||!1,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function s(t,e){for(var r,n=z.repeat(" ",e),i=0,a=-1,s="",o=t.length;o>i;)a=t.indexOf("\n",i),-1===a?(r=t.slice(i),i=o):(r=t.slice(i,a+1),i=a+1),r.length&&"\n"!==r&&(s+=n),s+=r;return s}function o(t,e){return"\n"+z.repeat(" ",t.indent*e)}function u(t,e){var r,n,i;for(r=0,n=t.implicitTypes.length;n>r;r+=1)if(i=t.implicitTypes[r],i.resolve(e))return!0;return!1}function l(t){return t===L||t===j}function c(t){return t>=32&&126>=t||t>=161&&55295>=t&&8232!==t&&8233!==t||t>=57344&&65533>=t&&65279!==t||t>=65536&&1114111>=t}function f(t){return c(t)&&65279!==t&&t!==G&&t!==$&&t!==Q&&t!==et&&t!==nt&&t!==q&&t!==M}function h(t){return c(t)&&65279!==t&&!l(t)&&t!==K&&t!==X&&t!==q&&t!==G&&t!==$&&t!==Q&&t!==et&&t!==nt&&t!==M&&t!==Z&&t!==Y&&t!==U&&t!==rt&&t!==V&&t!==H&&t!==P&&t!==W&&t!==J&&t!==tt}function d(t,e,r,n,i){var a,s,o=!1,u=!1,d=-1!==n,p=-1,m=h(t.charCodeAt(0))&&!l(t.charCodeAt(t.length-1));if(e)for(a=0;a<t.length;a++){if(s=t.charCodeAt(a),!c(s))return ct;m=m&&f(s)}else{for(a=0;a<t.length;a++){if(s=t.charCodeAt(a),s===R)o=!0,d&&(u=u||a-p-1>n&&" "!==t[p+1],p=a);else if(!c(s))return ct;m=m&&f(s)}u=u||d&&a-p-1>n&&" "!==t[p+1]}return o||u?" "===t[0]&&r>9?ct:u?lt:ut:m&&!i(t)?st:ot}function p(t,e,r,n){t.dump=function(){function i(e){return u(t,e)}if(0===e.length)return"''";if(!t.noCompatMode&&-1!==at.indexOf(e))return"'"+e+"'";var a=t.indent*Math.max(1,r),o=-1===t.lineWidth?-1:Math.max(Math.min(t.lineWidth,40),t.lineWidth-a),l=n||t.flowLevel>-1&&r>=t.flowLevel;switch(d(e,l,t.indent,o,i)){case st:return e;case ot:return"'"+e.replace(/'/g,"''")+"'";case ut:return"|"+m(e,t.indent)+g(s(e,a));case lt:return">"+m(e,t.indent)+g(s(_(e,o),a));case ct:return'"'+v(e,o)+'"';default:throw new T("impossible error: invalid scalar style")}}()}function m(t,e){var r=" "===t[0]?String(e):"",n="\n"===t[t.length-1],i=n&&("\n"===t[t.length-2]||"\n"===t),a=i?"+":n?"":"-";return r+a+"\n"}function g(t){return"\n"===t[t.length-1]?t.slice(0,-1):t}function _(t,e){for(var r,n,i=/(\n+)([^\n]*)/g,a=function(){var r=t.indexOf("\n");return r=-1!==r?r:t.length,i.lastIndex=r,y(t.slice(0,r),e)}(),s="\n"===t[0]||" "===t[0];n=i.exec(t);){var o=n[1],u=n[2];r=" "===u[0],a+=o+(s||r||""===u?"":"\n")+y(u,e),s=r}return a}function y(t,e){if(""===t||" "===t[0])return t;for(var r,n,i=/ [^ ]/g,a=0,s=0,o=0,u="";r=i.exec(t);)o=r.index,o-a>e&&(n=s>a?s:o,u+="\n"+t.slice(a,n),a=n+1),s=o;return u+="\n",u+=t.length-a>e&&s>a?t.slice(a,s)+"\n"+t.slice(s+1):t.slice(a),u.slice(1)}function v(t){for(var e,r,n="",a=0;a<t.length;a++)e=t.charCodeAt(a),r=it[e],n+=!r&&c(e)?t[a]:r||i(e);return n}function w(t,e,r){var n,i,a="",s=t.tag;for(n=0,i=r.length;i>n;n+=1)S(t,e,r[n],!1,!1)&&(0!==n&&(a+=", "),a+=t.dump);t.tag=s,t.dump="["+a+"]"}function b(t,e,r,n){var i,a,s="",u=t.tag;for(i=0,a=r.length;a>i;i+=1)S(t,e+1,r[i],!0,!0)&&(n&&0===i||(s+=o(t,e)),s+="- "+t.dump);t.tag=u,t.dump=s||"[]"}function k(t,e,r){var n,i,a,s,o,u="",l=t.tag,c=Object.keys(r);for(n=0,i=c.length;i>n;n+=1)o="",0!==n&&(o+=", "),a=c[n],s=r[a],S(t,e,a,!1,!1)&&(t.dump.length>1024&&(o+="? "),o+=t.dump+": ",S(t,e,s,!1,!1)&&(o+=t.dump,u+=o));t.tag=l,t.dump="{"+u+"}"}function x(t,e,r,n){var i,a,s,u,l,c,f="",h=t.tag,d=Object.keys(r);if(t.sortKeys===!0)d.sort();else if("function"==typeof t.sortKeys)d.sort(t.sortKeys);else if(t.sortKeys)throw new T("sortKeys must be a boolean or a function");for(i=0,a=d.length;a>i;i+=1)c="",n&&0===i||(c+=o(t,e)),s=d[i],u=r[s],S(t,e+1,s,!0,!0,!0)&&(l=null!==t.tag&&"?"!==t.tag||t.dump&&t.dump.length>1024,l&&(c+=t.dump&&R===t.dump.charCodeAt(0)?"?":"? "),c+=t.dump,l&&(c+=o(t,e)),S(t,e+1,u,!0,l)&&(c+=t.dump&&R===t.dump.charCodeAt(0)?":":": ",c+=t.dump,f+=c));t.tag=h,t.dump=f||"{}"}function A(t,e,r){var n,i,a,s,o,u;for(i=r?t.explicitTypes:t.implicitTypes,a=0,s=i.length;s>a;a+=1)if(o=i[a],(o.instanceOf||o.predicate)&&(!o.instanceOf||"object"==typeof e&&e instanceof o.instanceOf)&&(!o.predicate||o.predicate(e))){if(t.tag=r?o.tag:"?",o.represent){if(u=t.styleMap[o.tag]||o.defaultStyle,"[object Function]"===N.call(o.represent))n=o.represent(e,u);else{if(!D.call(o.represent,u))throw new T("!<"+o.tag+'> tag resolver accepts not "'+u+'" style');n=o.represent[u](e,u)}t.dump=n}return!0}return!1}function S(t,e,r,n,i,a){t.tag=null,t.dump=r,A(t,r,!1)||A(t,r,!0);var s=N.call(t.dump);n&&(n=t.flowLevel<0||t.flowLevel>e);var o,u,l="[object Object]"===s||"[object Array]"===s;if(l&&(o=t.duplicates.indexOf(r),u=-1!==o),(null!==t.tag&&"?"!==t.tag||u||2!==t.indent&&e>0)&&(i=!1),u&&t.usedDuplicates[o])t.dump="*ref_"+o;else{if(l&&u&&!t.usedDuplicates[o]&&(t.usedDuplicates[o]=!0),"[object Object]"===s)n&&0!==Object.keys(t.dump).length?(x(t,e,t.dump,i),u&&(t.dump="&ref_"+o+t.dump)):(k(t,e,t.dump),u&&(t.dump="&ref_"+o+" "+t.dump));else if("[object Array]"===s)n&&0!==t.dump.length?(b(t,e,t.dump,i),u&&(t.dump="&ref_"+o+t.dump)):(w(t,e,t.dump),u&&(t.dump="&ref_"+o+" "+t.dump));else{if("[object String]"!==s){if(t.skipInvalid)return!1;throw new T("unacceptable kind of an object to dump "+s)}"?"!==t.tag&&p(t,t.dump,e,a)}null!==t.tag&&"?"!==t.tag&&(t.dump="!<"+t.tag+"> "+t.dump)}return!0}function C(t,e){var r,n,i=[],a=[];for(E(t,i,a),r=0,n=a.length;n>r;r+=1)e.duplicates.push(i[a[r]]);e.usedDuplicates=new Array(n)}function E(t,e,r){var n,i,a;if(null!==t&&"object"==typeof t)if(i=e.indexOf(t),-1!==i)-1===r.indexOf(i)&&r.push(i);else if(e.push(t),Array.isArray(t))for(i=0,a=t.length;a>i;i+=1)E(t[i],e,r);else for(n=Object.keys(t),i=0,a=n.length;a>i;i+=1)E(t[n[i]],e,r)}function I(t,e){e=e||{};var r=new a(e);return r.noRefs||C(t,r),S(r,0,t,!0,!0)?r.dump+"\n":""}function O(t,e){return I(t,z.extend({schema:B},e))}var z=t("./common"),T=t("./exception"),F=t("./schema/default_full"),B=t("./schema/default_safe"),N=Object.prototype.toString,D=Object.prototype.hasOwnProperty,j=9,R=10,L=32,U=33,P=34,M=35,W=37,Z=38,H=39,Y=42,G=44,K=45,q=58,V=62,X=63,J=64,$=91,Q=93,tt=96,et=123,rt=124,nt=125,it={};it[0]="\\0",it[7]="\\a",it[8]="\\b",it[9]="\\t",it[10]="\\n",it[11]="\\v",it[12]="\\f",it[13]="\\r",it[27]="\\e",it[34]='\\"',it[92]="\\\\",it[133]="\\N",it[160]="\\_",it[8232]="\\L",it[8233]="\\P";var at=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],st=1,ot=2,ut=3,lt=4,ct=5;e.exports.dump=I,e.exports.safeDump=O},{"./common":2,"./exception":4,"./schema/default_full":9,"./schema/default_safe":10}],4:[function(t,e,r){"use strict";function n(t,e){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||"",this.name="YAMLException",this.reason=t,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():"")}n.prototype=Object.create(Error.prototype),n.prototype.constructor=n,n.prototype.toString=function(t){var e=this.name+": ";return e+=this.reason||"(unknown reason)",!t&&this.mark&&(e+=" "+this.mark.toString()),e},e.exports=n},{}],5:[function(t,e,r){"use strict";function n(t){return 10===t||13===t}function i(t){return 9===t||32===t}function a(t){return 9===t||32===t||10===t||13===t}function s(t){return 44===t||91===t||93===t||123===t||125===t}function o(t){var e;return t>=48&&57>=t?t-48:(e=32|t,e>=97&&102>=e?e-97+10:-1)}function u(t){return 120===t?2:117===t?4:85===t?8:0}function l(t){return t>=48&&57>=t?t-48:-1}function c(t){return 48===t?"\x00":97===t?"":98===t?"\b":116===t?"	":9===t?"	":110===t?"\n":118===t?"\x0B":102===t?"\f":114===t?"\r":101===t?"":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"":95===t?" ":76===t?"\u2028":80===t?"\u2029":""}function f(t){return 65535>=t?String.fromCharCode(t):String.fromCharCode((t-65536>>10)+55296,(t-65536&1023)+56320)}function h(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||H,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function d(t,e){return new M(e,new W(t.filename,t.input,t.position,t.line,t.position-t.lineStart))}function p(t,e){throw d(t,e)}function m(t,e){t.onWarning&&t.onWarning.call(null,d(t,e))}function g(t,e,r,n){var i,a,s,o;if(r>e){if(o=t.input.slice(e,r),n)for(i=0,a=o.length;a>i;i+=1)s=o.charCodeAt(i),9===s||s>=32&&1114111>=s||p(t,"expected valid JSON character");else Q.test(o)&&p(t,"the stream contains non-printable characters");t.result+=o}}function _(t,e,r,n){var i,a,s,o;for(P.isObject(r)||p(t,"cannot merge mappings; the provided source object is unacceptable"),i=Object.keys(r),s=0,o=i.length;o>s;s+=1)a=i[s],Y.call(e,a)||(e[a]=r[a],n[a]=!0)}function y(t,e,r,n,i,a){var s,o;if(i=String(i),null===e&&(e={}),"tag:yaml.org,2002:merge"===n)if(Array.isArray(a))for(s=0,o=a.length;o>s;s+=1)_(t,e,a[s],r);else _(t,e,a,r);else t.json||Y.call(r,i)||!Y.call(e,i)||p(t,"duplicated mapping key"),e[i]=a,delete r[i];return e}function v(t){var e;e=t.input.charCodeAt(t.position),10===e?t.position++:13===e?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):p(t,"a line break is expected"),t.line+=1,t.lineStart=t.position}function w(t,e,r){for(var a=0,s=t.input.charCodeAt(t.position);0!==s;){for(;i(s);)s=t.input.charCodeAt(++t.position);if(e&&35===s)do s=t.input.charCodeAt(++t.position);while(10!==s&&13!==s&&0!==s);if(!n(s))break;for(v(t),s=t.input.charCodeAt(t.position),a++,t.lineIndent=0;32===s;)t.lineIndent++,s=t.input.charCodeAt(++t.position)}return-1!==r&&0!==a&&t.lineIndent<r&&m(t,"deficient indentation"),a}function b(t){var e,r=t.position;return e=t.input.charCodeAt(r),(45===e||46===e)&&e===t.input.charCodeAt(r+1)&&e===t.input.charCodeAt(r+2)&&(r+=3,e=t.input.charCodeAt(r),0===e||a(e))}function k(t,e){1===e?t.result+=" ":e>1&&(t.result+=P.repeat("\n",e-1))}function x(t,e,r){var o,u,l,c,f,h,d,p,m,_=t.kind,y=t.result;if(m=t.input.charCodeAt(t.position),a(m)||s(m)||35===m||38===m||42===m||33===m||124===m||62===m||39===m||34===m||37===m||64===m||96===m)return!1;if((63===m||45===m)&&(u=t.input.charCodeAt(t.position+1),a(u)||r&&s(u)))return!1;for(t.kind="scalar",t.result="",l=c=t.position,f=!1;0!==m;){if(58===m){if(u=t.input.charCodeAt(t.position+1),a(u)||r&&s(u))break}else if(35===m){if(o=t.input.charCodeAt(t.position-1),a(o))break}else{if(t.position===t.lineStart&&b(t)||r&&s(m))break;if(n(m)){if(h=t.line,d=t.lineStart,p=t.lineIndent,w(t,!1,-1),t.lineIndent>=e){f=!0,m=t.input.charCodeAt(t.position);continue}t.position=c,t.line=h,t.lineStart=d,t.lineIndent=p;break}}f&&(g(t,l,c,!1),k(t,t.line-h),l=c=t.position,f=!1),i(m)||(c=t.position+1),m=t.input.charCodeAt(++t.position)}return g(t,l,c,!1),t.result?!0:(t.kind=_,t.result=y,!1)}function A(t,e){var r,i,a;if(r=t.input.charCodeAt(t.position),39!==r)return!1;for(t.kind="scalar",t.result="",t.position++,i=a=t.position;0!==(r=t.input.charCodeAt(t.position));)if(39===r){if(g(t,i,t.position,!0),r=t.input.charCodeAt(++t.position),39!==r)return!0;i=a=t.position,t.position++}else n(r)?(g(t,i,a,!0),k(t,w(t,!1,e)),i=a=t.position):t.position===t.lineStart&&b(t)?p(t,"unexpected end of the document within a single quoted scalar"):(t.position++,a=t.position);p(t,"unexpected end of the stream within a single quoted scalar")}function S(t,e){var r,i,a,s,l,c;if(c=t.input.charCodeAt(t.position),34!==c)return!1;for(t.kind="scalar",t.result="",t.position++,r=i=t.position;0!==(c=t.input.charCodeAt(t.position));){if(34===c)return g(t,r,t.position,!0),t.position++,!0;if(92===c){if(g(t,r,t.position,!0),c=t.input.charCodeAt(++t.position),n(c))w(t,!1,e);else if(256>c&&it[c])t.result+=at[c],t.position++;else if((l=u(c))>0){for(a=l,s=0;a>0;a--)c=t.input.charCodeAt(++t.position),(l=o(c))>=0?s=(s<<4)+l:p(t,"expected hexadecimal character");t.result+=f(s),t.position++}else p(t,"unknown escape sequence");r=i=t.position}else n(c)?(g(t,r,i,!0),k(t,w(t,!1,e)),r=i=t.position):t.position===t.lineStart&&b(t)?p(t,"unexpected end of the document within a double quoted scalar"):(t.position++,i=t.position)}p(t,"unexpected end of the stream within a double quoted scalar")}function C(t,e){var r,n,i,s,o,u,l,c,f,h,d,m=!0,g=t.tag,_=t.anchor,v={};if(d=t.input.charCodeAt(t.position),91===d)s=93,l=!1,n=[];else{if(123!==d)return!1;s=125,l=!0,n={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=n),d=t.input.charCodeAt(++t.position);0!==d;){if(w(t,!0,e),d=t.input.charCodeAt(t.position),d===s)return t.position++,t.tag=g,t.anchor=_,t.kind=l?"mapping":"sequence",t.result=n,!0;m||p(t,"missed comma between flow collection entries"),f=c=h=null,o=u=!1,63===d&&(i=t.input.charCodeAt(t.position+1),a(i)&&(o=u=!0,t.position++,w(t,!0,e))),r=t.line,B(t,e,G,!1,!0),f=t.tag,c=t.result,w(t,!0,e),d=t.input.charCodeAt(t.position),!u&&t.line!==r||58!==d||(o=!0,d=t.input.charCodeAt(++t.position),w(t,!0,e),B(t,e,G,!1,!0),h=t.result),l?y(t,n,v,f,c,h):o?n.push(y(t,null,v,f,c,h)):n.push(c),w(t,!0,e),d=t.input.charCodeAt(t.position),44===d?(m=!0,d=t.input.charCodeAt(++t.position)):m=!1}p(t,"unexpected end of the stream within a flow collection")}function E(t,e){var r,a,s,o,u=X,c=!1,f=!1,h=e,d=0,m=!1;if(o=t.input.charCodeAt(t.position),124===o)a=!1;else{if(62!==o)return!1;a=!0}for(t.kind="scalar",t.result="";0!==o;)if(o=t.input.charCodeAt(++t.position),43===o||45===o)X===u?u=43===o?$:J:p(t,"repeat of a chomping mode identifier");else{if(!((s=l(o))>=0))break;0===s?p(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):f?p(t,"repeat of an indentation width identifier"):(h=e+s-1,f=!0)}if(i(o)){do o=t.input.charCodeAt(++t.position);while(i(o));if(35===o)do o=t.input.charCodeAt(++t.position);while(!n(o)&&0!==o)}for(;0!==o;){for(v(t),t.lineIndent=0,o=t.input.charCodeAt(t.position);(!f||t.lineIndent<h)&&32===o;)t.lineIndent++,o=t.input.charCodeAt(++t.position);if(!f&&t.lineIndent>h&&(h=t.lineIndent),n(o))d++;else{if(t.lineIndent<h){u===$?t.result+=P.repeat("\n",c?1+d:d):u===X&&c&&(t.result+="\n");break}for(a?i(o)?(m=!0,t.result+=P.repeat("\n",c?1+d:d)):m?(m=!1,t.result+=P.repeat("\n",d+1)):0===d?c&&(t.result+=" "):t.result+=P.repeat("\n",d):t.result+=P.repeat("\n",c?1+d:d),c=!0,f=!0,d=0,r=t.position;!n(o)&&0!==o;)o=t.input.charCodeAt(++t.position);g(t,r,t.position,!1)}}return!0}function I(t,e){var r,n,i,s=t.tag,o=t.anchor,u=[],l=!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=u),i=t.input.charCodeAt(t.position);0!==i&&45===i&&(n=t.input.charCodeAt(t.position+1),a(n));)if(l=!0,t.position++,w(t,!0,-1)&&t.lineIndent<=e)u.push(null),i=t.input.charCodeAt(t.position);else if(r=t.line,B(t,e,q,!1,!0),u.push(t.result),w(t,!0,-1),i=t.input.charCodeAt(t.position),(t.line===r||t.lineIndent>e)&&0!==i)p(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break;return l?(t.tag=s,t.anchor=o,t.kind="sequence",t.result=u,!0):!1}function O(t,e,r){var n,s,o,u,l=t.tag,c=t.anchor,f={},h={},d=null,m=null,g=null,_=!1,v=!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=f),u=t.input.charCodeAt(t.position);0!==u;){if(n=t.input.charCodeAt(t.position+1),o=t.line,63!==u&&58!==u||!a(n)){if(!B(t,r,K,!1,!0))break;if(t.line===o){for(u=t.input.charCodeAt(t.position);i(u);)u=t.input.charCodeAt(++t.position);if(58===u)u=t.input.charCodeAt(++t.position),a(u)||p(t,"a whitespace character is expected after the key-value separator within a block mapping"),_&&(y(t,f,h,d,m,null),d=m=g=null),v=!0,_=!1,s=!1,d=t.tag,m=t.result;else{if(!v)return t.tag=l,t.anchor=c,!0;p(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!v)return t.tag=l,t.anchor=c,!0;p(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===u?(_&&(y(t,f,h,d,m,null),d=m=g=null),v=!0,_=!0,s=!0):_?(_=!1,s=!0):p(t,"incomplete explicit mapping pair; a key node is missed"),t.position+=1,u=n;if((t.line===o||t.lineIndent>e)&&(B(t,e,V,!0,s)&&(_?m=t.result:g=t.result),_||(y(t,f,h,d,m,g),d=m=g=null),w(t,!0,-1),u=t.input.charCodeAt(t.position)),t.lineIndent>e&&0!==u)p(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return _&&y(t,f,h,d,m,null),v&&(t.tag=l,t.anchor=c,t.kind="mapping",t.result=f),v}function z(t){var e,r,n,i,s=!1,o=!1;if(i=t.input.charCodeAt(t.position),33!==i)return!1;if(null!==t.tag&&p(t,"duplication of a tag property"),i=t.input.charCodeAt(++t.position),60===i?(s=!0,i=t.input.charCodeAt(++t.position)):33===i?(o=!0,r="!!",i=t.input.charCodeAt(++t.position)):r="!",e=t.position,s){do i=t.input.charCodeAt(++t.position);while(0!==i&&62!==i);t.position<t.length?(n=t.input.slice(e,t.position),i=t.input.charCodeAt(++t.position)):p(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==i&&!a(i);)33===i&&(o?p(t,"tag suffix cannot contain exclamation marks"):(r=t.input.slice(e-1,t.position+1),rt.test(r)||p(t,"named tag handle cannot contain such characters"),o=!0,e=t.position+1)),i=t.input.charCodeAt(++t.position);n=t.input.slice(e,t.position),et.test(n)&&p(t,"tag suffix cannot contain flow indicator characters")}return n&&!nt.test(n)&&p(t,"tag name cannot contain such characters: "+n),s?t.tag=n:Y.call(t.tagMap,r)?t.tag=t.tagMap[r]+n:"!"===r?t.tag="!"+n:"!!"===r?t.tag="tag:yaml.org,2002:"+n:p(t,'undeclared tag handle "'+r+'"'),!0}function T(t){var e,r;if(r=t.input.charCodeAt(t.position),38!==r)return!1;for(null!==t.anchor&&p(t,"duplication of an anchor property"),r=t.input.charCodeAt(++t.position),e=t.position;0!==r&&!a(r)&&!s(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&p(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function F(t){var e,r,n;if(n=t.input.charCodeAt(t.position),42!==n)return!1;for(n=t.input.charCodeAt(++t.position),e=t.position;0!==n&&!a(n)&&!s(n);)n=t.input.charCodeAt(++t.position);return t.position===e&&p(t,"name of an alias node must contain at least one character"),r=t.input.slice(e,t.position),t.anchorMap.hasOwnProperty(r)||p(t,'unidentified alias "'+r+'"'),t.result=t.anchorMap[r],w(t,!0,-1),!0}function B(t,e,r,n,i){var a,s,o,u,l,c,f,h,d=1,m=!1,g=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,a=s=o=V===r||q===r,n&&w(t,!0,-1)&&(m=!0,t.lineIndent>e?d=1:t.lineIndent===e?d=0:t.lineIndent<e&&(d=-1)),1===d)for(;z(t)||T(t);)w(t,!0,-1)?(m=!0,o=a,t.lineIndent>e?d=1:t.lineIndent===e?d=0:t.lineIndent<e&&(d=-1)):o=!1;if(o&&(o=m||i),1!==d&&V!==r||(f=G===r||K===r?e:e+1,h=t.position-t.lineStart,1===d?o&&(I(t,h)||O(t,h,f))||C(t,f)?g=!0:(s&&E(t,f)||A(t,f)||S(t,f)?g=!0:F(t)?(g=!0,null===t.tag&&null===t.anchor||p(t,"alias node should not have any properties")):x(t,f,G===r)&&(g=!0,null===t.tag&&(t.tag="?")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===d&&(g=o&&I(t,h))),null!==t.tag&&"!"!==t.tag)if("?"===t.tag){for(u=0,l=t.implicitTypes.length;l>u;u+=1)if(c=t.implicitTypes[u],c.resolve(t.result)){t.result=c.construct(t.result),t.tag=c.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else Y.call(t.typeMap,t.tag)?(c=t.typeMap[t.tag],null!==t.result&&c.kind!==t.kind&&p(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+c.kind+'", not "'+t.kind+'"'),c.resolve(t.result)?(t.result=c.construct(t.result),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):p(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")):p(t,"unknown tag !<"+t.tag+">");return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||g}function N(t){var e,r,s,o,u=t.position,l=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap={},t.anchorMap={};0!==(o=t.input.charCodeAt(t.position))&&(w(t,!0,-1),o=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==o));){for(l=!0,o=t.input.charCodeAt(++t.position),e=t.position;0!==o&&!a(o);)o=t.input.charCodeAt(++t.position);for(r=t.input.slice(e,t.position),s=[],r.length<1&&p(t,"directive name must not be less than one character in length");0!==o;){for(;i(o);)o=t.input.charCodeAt(++t.position);if(35===o){do o=t.input.charCodeAt(++t.position);while(0!==o&&!n(o));break}if(n(o))break;for(e=t.position;0!==o&&!a(o);)o=t.input.charCodeAt(++t.position);s.push(t.input.slice(e,t.position))}0!==o&&v(t),Y.call(ot,r)?ot[r](t,r,s):m(t,'unknown document directive "'+r+'"')}return w(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,w(t,!0,-1)):l&&p(t,"directives end mark is expected"),B(t,t.lineIndent-1,V,!1,!0),w(t,!0,-1),t.checkLineBreaks&&tt.test(t.input.slice(u,t.position))&&m(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&b(t)?void(46===t.input.charCodeAt(t.position)&&(t.position+=3,w(t,!0,-1))):void(t.position<t.length-1&&p(t,"end of the stream or a document separator is expected"))}function D(t,e){t=String(t),e=e||{},0!==t.length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var r=new h(t,e);for(r.input+="\x00";32===r.input.charCodeAt(r.position);)r.lineIndent+=1,r.position+=1;for(;r.position<r.length-1;)N(r);return r.documents}function j(t,e,r){var n,i,a=D(t,r);for(n=0,i=a.length;i>n;n+=1)e(a[n])}function R(t,e){var r=D(t,e);if(0!==r.length){if(1===r.length)return r[0];throw new M("expected a single document in the stream, but found more")}}function L(t,e,r){j(t,e,P.extend({schema:Z},r))}function U(t,e){return R(t,P.extend({schema:Z},e))}for(var P=t("./common"),M=t("./exception"),W=t("./mark"),Z=t("./schema/default_safe"),H=t("./schema/default_full"),Y=Object.prototype.hasOwnProperty,G=1,K=2,q=3,V=4,X=1,J=2,$=3,Q=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,tt=/[\x85\u2028\u2029]/,et=/[,\[\]\{\}]/,rt=/^(?:!|!!|![a-z\-]+!)$/i,nt=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i,it=new Array(256),at=new Array(256),st=0;256>st;st++)it[st]=c(st)?1:0,at[st]=c(st);var ot={YAML:function(t,e,r){var n,i,a;null!==t.version&&p(t,"duplication of %YAML directive"),1!==r.length&&p(t,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(r[0]),null===n&&p(t,"ill-formed argument of the YAML directive"),i=parseInt(n[1],10),a=parseInt(n[2],10),1!==i&&p(t,"unacceptable YAML version of the document"),t.version=r[0],t.checkLineBreaks=2>a,1!==a&&2!==a&&m(t,"unsupported YAML version of the document")},TAG:function(t,e,r){var n,i;2!==r.length&&p(t,"TAG directive accepts exactly two arguments"),n=r[0],i=r[1],rt.test(n)||p(t,"ill-formed tag handle (first argument) of the TAG directive"),Y.call(t.tagMap,n)&&p(t,'there is a previously declared suffix for "'+n+'" tag handle'),nt.test(i)||p(t,"ill-formed tag prefix (second argument) of the TAG directive"),t.tagMap[n]=i}};e.exports.loadAll=j,e.exports.load=R,e.exports.safeLoadAll=L,e.exports.safeLoad=U},{"./common":2,"./exception":4,"./mark":6,"./schema/default_full":9,"./schema/default_safe":10}],6:[function(t,e,r){"use strict";function n(t,e,r,n,i){this.name=t,this.buffer=e,this.position=r,this.line=n,this.column=i}var i=t("./common");n.prototype.getSnippet=function(t,e){var r,n,a,s,o;if(!this.buffer)return null;for(t=t||4,e=e||75,r="",n=this.position;n>0&&-1==="\x00\r\n\u2028\u2029".indexOf(this.buffer.charAt(n-1));)if(n-=1,this.position-n>e/2-1){r=" ... ",n+=5;break}for(a="",s=this.position;s<this.buffer.length&&-1==="\x00\r\n\u2028\u2029".indexOf(this.buffer.charAt(s));)if(s+=1,s-this.position>e/2-1){a=" ... ",s-=5;break}return o=this.buffer.slice(n,s),i.repeat(" ",t)+r+o+a+"\n"+i.repeat(" ",t+this.position-n+r.length)+"^"},n.prototype.toString=function(t){var e,r="";return this.name&&(r+='in "'+this.name+'" '),r+="at line "+(this.line+1)+", column "+(this.column+1),t||(e=this.getSnippet(),e&&(r+=":\n"+e)),r},e.exports=n},{"./common":2}],7:[function(t,e,r){"use strict";function n(t,e,r){var i=[];return t.include.forEach(function(t){r=n(t,e,r)}),t[e].forEach(function(t){r.forEach(function(e,r){e.tag===t.tag&&i.push(r)}),r.push(t)}),r.filter(function(t,e){return-1===i.indexOf(e)})}function i(){function t(t){n[t.tag]=t}var e,r,n={};for(e=0,r=arguments.length;r>e;e+=1)arguments[e].forEach(t);return n}function a(t){this.include=t.include||[],this.implicit=t.implicit||[],this.explicit=t.explicit||[],this.implicit.forEach(function(t){if(t.loadKind&&"scalar"!==t.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.")}),this.compiledImplicit=n(this,"implicit",[]),this.compiledExplicit=n(this,"explicit",[]),this.compiledTypeMap=i(this.compiledImplicit,this.compiledExplicit)}var s=t("./common"),o=t("./exception"),u=t("./type");a.DEFAULT=null,a.create=function(){var t,e;switch(arguments.length){case 1:t=a.DEFAULT,e=arguments[0];break;case 2:t=arguments[0],e=arguments[1];break;default:throw new o("Wrong number of arguments for Schema.create function")}if(t=s.toArray(t),e=s.toArray(e),!t.every(function(t){return t instanceof a}))throw new o("Specified list of super schemas (or a single Schema object) contains a non-Schema object.");if(!e.every(function(t){return t instanceof u}))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.");return new a({include:t,explicit:e})},e.exports=a},{"./common":2,"./exception":4,"./type":13}],8:[function(t,e,r){"use strict";var n=t("../schema");e.exports=new n({include:[t("./json")]})},{"../schema":7,"./json":12}],9:[function(t,e,r){"use strict";var n=t("../schema");e.exports=n.DEFAULT=new n({include:[t("./default_safe")],explicit:[t("../type/js/undefined"),t("../type/js/regexp"),t("../type/js/function")]})},{"../schema":7,"../type/js/function":18,"../type/js/regexp":19,"../type/js/undefined":20,"./default_safe":10}],10:[function(t,e,r){"use strict";var n=t("../schema");e.exports=new n({include:[t("./core")],implicit:[t("../type/timestamp"),t("../type/merge")],explicit:[t("../type/binary"),t("../type/omap"),t("../type/pairs"),t("../type/set")]})},{"../schema":7,"../type/binary":14,"../type/merge":22,"../type/omap":24,"../type/pairs":25,"../type/set":27,"../type/timestamp":29,"./core":8}],11:[function(t,e,r){"use strict";var n=t("../schema");e.exports=new n({explicit:[t("../type/str"),t("../type/seq"),t("../type/map")]})},{"../schema":7,"../type/map":21,"../type/seq":26,"../type/str":28}],12:[function(t,e,r){"use strict";var n=t("../schema");e.exports=new n({include:[t("./failsafe")],implicit:[t("../type/null"),t("../type/bool"),t("../type/int"),t("../type/float")]})},{"../schema":7,"../type/bool":15,"../type/float":16,"../type/int":17,"../type/null":23,"./failsafe":11}],13:[function(t,e,r){"use strict";function n(t){var e={};return null!==t&&Object.keys(t).forEach(function(r){t[r].forEach(function(t){e[String(t)]=r})}),e}function i(t,e){if(e=e||{},Object.keys(e).forEach(function(e){if(-1===s.indexOf(e))throw new a('Unknown option "'+e+'" is met in definition of "'+t+'" YAML type.')}),this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=n(e.styleAliases||null),-1===o.indexOf(this.kind))throw new a('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')}var a=t("./exception"),s=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],o=["scalar","sequence","mapping"];e.exports=i},{"./exception":4}],14:[function(t,e,r){"use strict";function n(t){if(null===t)return!1;var e,r,n=0,i=t.length,a=f;for(r=0;i>r;r++)if(e=a.indexOf(t.charAt(r)),!(e>64)){if(0>e)return!1;n+=6}return n%8===0}function i(t){var e,r,n=t.replace(/[\r\n=]/g,""),i=n.length,a=f,s=0,u=[];for(e=0;i>e;e++)e%4===0&&e&&(u.push(s>>16&255),u.push(s>>8&255),u.push(255&s)),s=s<<6|a.indexOf(n.charAt(e));return r=i%4*6,0===r?(u.push(s>>16&255),u.push(s>>8&255),u.push(255&s)):18===r?(u.push(s>>10&255),u.push(s>>2&255)):12===r&&u.push(s>>4&255),o?new o(u):u}function a(t){var e,r,n="",i=0,a=t.length,s=f;for(e=0;a>e;e++)e%3===0&&e&&(n+=s[i>>18&63],n+=s[i>>12&63],n+=s[i>>6&63],n+=s[63&i]),i=(i<<8)+t[e];return r=a%3,0===r?(n+=s[i>>18&63],n+=s[i>>12&63],n+=s[i>>6&63],n+=s[63&i]):2===r?(n+=s[i>>10&63],n+=s[i>>4&63],n+=s[i<<2&63],n+=s[64]):1===r&&(n+=s[i>>2&63],n+=s[i<<4&63],n+=s[64],n+=s[64]),n}function s(t){return o&&o.isBuffer(t)}var o;try{var u=t;o=u("buffer").Buffer;
+}catch(l){}var c=t("../type"),f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";e.exports=new c("tag:yaml.org,2002:binary",{kind:"scalar",resolve:n,construct:i,predicate:s,represent:a})},{"../type":13}],15:[function(t,e,r){"use strict";function n(t){if(null===t)return!1;var e=t.length;return 4===e&&("true"===t||"True"===t||"TRUE"===t)||5===e&&("false"===t||"False"===t||"FALSE"===t)}function i(t){return"true"===t||"True"===t||"TRUE"===t}function a(t){return"[object Boolean]"===Object.prototype.toString.call(t)}var s=t("../type");e.exports=new s("tag:yaml.org,2002:bool",{kind:"scalar",resolve:n,construct:i,predicate:a,represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"})},{"../type":13}],16:[function(t,e,r){"use strict";function n(t){return null===t?!1:!!l.test(t)}function i(t){var e,r,n,i;return e=t.replace(/_/g,"").toLowerCase(),r="-"===e[0]?-1:1,i=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===r?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(t){i.unshift(parseFloat(t,10))}),e=0,n=1,i.forEach(function(t){e+=t*n,n*=60}),r*e):r*parseFloat(e,10)}function a(t,e){var r;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(o.isNegativeZero(t))return"-0.0";return r=t.toString(10),c.test(r)?r.replace("e",".e"):r}function s(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!==0||o.isNegativeZero(t))}var o=t("../common"),u=t("../type"),l=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?|\\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),c=/^[-+]?[0-9]+e/;e.exports=new u("tag:yaml.org,2002:float",{kind:"scalar",resolve:n,construct:i,predicate:s,represent:a,defaultStyle:"lowercase"})},{"../common":2,"../type":13}],17:[function(t,e,r){"use strict";function n(t){return t>=48&&57>=t||t>=65&&70>=t||t>=97&&102>=t}function i(t){return t>=48&&55>=t}function a(t){return t>=48&&57>=t}function s(t){if(null===t)return!1;var e,r=t.length,s=0,o=!1;if(!r)return!1;if(e=t[s],"-"!==e&&"+"!==e||(e=t[++s]),"0"===e){if(s+1===r)return!0;if(e=t[++s],"b"===e){for(s++;r>s;s++)if(e=t[s],"_"!==e){if("0"!==e&&"1"!==e)return!1;o=!0}return o}if("x"===e){for(s++;r>s;s++)if(e=t[s],"_"!==e){if(!n(t.charCodeAt(s)))return!1;o=!0}return o}for(;r>s;s++)if(e=t[s],"_"!==e){if(!i(t.charCodeAt(s)))return!1;o=!0}return o}for(;r>s;s++)if(e=t[s],"_"!==e){if(":"===e)break;if(!a(t.charCodeAt(s)))return!1;o=!0}return o?":"!==e?!0:/^(:[0-5]?[0-9])+$/.test(t.slice(s)):!1}function o(t){var e,r,n=t,i=1,a=[];return-1!==n.indexOf("_")&&(n=n.replace(/_/g,"")),e=n[0],"-"!==e&&"+"!==e||("-"===e&&(i=-1),n=n.slice(1),e=n[0]),"0"===n?0:"0"===e?"b"===n[1]?i*parseInt(n.slice(2),2):"x"===n[1]?i*parseInt(n,16):i*parseInt(n,8):-1!==n.indexOf(":")?(n.split(":").forEach(function(t){a.unshift(parseInt(t,10))}),n=0,r=1,a.forEach(function(t){n+=t*r,r*=60}),i*n):i*parseInt(n,10)}function u(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1===0&&!l.isNegativeZero(t)}var l=t("../common"),c=t("../type");e.exports=new c("tag:yaml.org,2002:int",{kind:"scalar",resolve:s,construct:o,predicate:u,represent:{binary:function(t){return"0b"+t.toString(2)},octal:function(t){return"0"+t.toString(8)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return"0x"+t.toString(16).toUpperCase()}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})},{"../common":2,"../type":13}],18:[function(t,e,r){"use strict";function n(t){if(null===t)return!1;try{var e="("+t+")",r=o.parse(e,{range:!0});return"Program"===r.type&&1===r.body.length&&"ExpressionStatement"===r.body[0].type&&"FunctionExpression"===r.body[0].expression.type}catch(n){return!1}}function i(t){var e,r="("+t+")",n=o.parse(r,{range:!0}),i=[];if("Program"!==n.type||1!==n.body.length||"ExpressionStatement"!==n.body[0].type||"FunctionExpression"!==n.body[0].expression.type)throw new Error("Failed to resolve function");return n.body[0].expression.params.forEach(function(t){i.push(t.name)}),e=n.body[0].expression.body.range,new Function(i,r.slice(e[0]+1,e[1]-1))}function a(t){return t.toString()}function s(t){return"[object Function]"===Object.prototype.toString.call(t)}var o;try{var u=t;o=u("esprima")}catch(l){"undefined"!=typeof window&&(o=window.esprima)}var c=t("../../type");e.exports=new c("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:n,construct:i,predicate:s,represent:a})},{"../../type":13}],19:[function(t,e,r){"use strict";function n(t){if(null===t)return!1;if(0===t.length)return!1;var e=t,r=/\/([gim]*)$/.exec(t),n="";if("/"===e[0]){if(r&&(n=r[1]),n.length>3)return!1;if("/"!==e[e.length-n.length-1])return!1}return!0}function i(t){var e=t,r=/\/([gim]*)$/.exec(t),n="";return"/"===e[0]&&(r&&(n=r[1]),e=e.slice(1,e.length-n.length-1)),new RegExp(e,n)}function a(t){var e="/"+t.source+"/";return t.global&&(e+="g"),t.multiline&&(e+="m"),t.ignoreCase&&(e+="i"),e}function s(t){return"[object RegExp]"===Object.prototype.toString.call(t)}var o=t("../../type");e.exports=new o("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:n,construct:i,predicate:s,represent:a})},{"../../type":13}],20:[function(t,e,r){"use strict";function n(){return!0}function i(){}function a(){return""}function s(t){return"undefined"==typeof t}var o=t("../../type");e.exports=new o("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:n,construct:i,predicate:s,represent:a})},{"../../type":13}],21:[function(t,e,r){"use strict";var n=t("../type");e.exports=new n("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})},{"../type":13}],22:[function(t,e,r){"use strict";function n(t){return"<<"===t||null===t}var i=t("../type");e.exports=new i("tag:yaml.org,2002:merge",{kind:"scalar",resolve:n})},{"../type":13}],23:[function(t,e,r){"use strict";function n(t){if(null===t)return!0;var e=t.length;return 1===e&&"~"===t||4===e&&("null"===t||"Null"===t||"NULL"===t)}function i(){return null}function a(t){return null===t}var s=t("../type");e.exports=new s("tag:yaml.org,2002:null",{kind:"scalar",resolve:n,construct:i,predicate:a,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})},{"../type":13}],24:[function(t,e,r){"use strict";function n(t){if(null===t)return!0;var e,r,n,i,a,u=[],l=t;for(e=0,r=l.length;r>e;e+=1){if(n=l[e],a=!1,"[object Object]"!==o.call(n))return!1;for(i in n)if(s.call(n,i)){if(a)return!1;a=!0}if(!a)return!1;if(-1!==u.indexOf(i))return!1;u.push(i)}return!0}function i(t){return null!==t?t:[]}var a=t("../type"),s=Object.prototype.hasOwnProperty,o=Object.prototype.toString;e.exports=new a("tag:yaml.org,2002:omap",{kind:"sequence",resolve:n,construct:i})},{"../type":13}],25:[function(t,e,r){"use strict";function n(t){if(null===t)return!0;var e,r,n,i,a,o=t;for(a=new Array(o.length),e=0,r=o.length;r>e;e+=1){if(n=o[e],"[object Object]"!==s.call(n))return!1;if(i=Object.keys(n),1!==i.length)return!1;a[e]=[i[0],n[i[0]]]}return!0}function i(t){if(null===t)return[];var e,r,n,i,a,s=t;for(a=new Array(s.length),e=0,r=s.length;r>e;e+=1)n=s[e],i=Object.keys(n),a[e]=[i[0],n[i[0]]];return a}var a=t("../type"),s=Object.prototype.toString;e.exports=new a("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:n,construct:i})},{"../type":13}],26:[function(t,e,r){"use strict";var n=t("../type");e.exports=new n("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}})},{"../type":13}],27:[function(t,e,r){"use strict";function n(t){if(null===t)return!0;var e,r=t;for(e in r)if(s.call(r,e)&&null!==r[e])return!1;return!0}function i(t){return null!==t?t:{}}var a=t("../type"),s=Object.prototype.hasOwnProperty;e.exports=new a("tag:yaml.org,2002:set",{kind:"mapping",resolve:n,construct:i})},{"../type":13}],28:[function(t,e,r){"use strict";var n=t("../type");e.exports=new n("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}})},{"../type":13}],29:[function(t,e,r){"use strict";function n(t){return null===t?!1:null!==o.exec(t)?!0:null!==u.exec(t)}function i(t){var e,r,n,i,a,s,l,c,f,h,d=0,p=null;if(e=o.exec(t),null===e&&(e=u.exec(t)),null===e)throw new Error("Date resolve error");if(r=+e[1],n=+e[2]-1,i=+e[3],!e[4])return new Date(Date.UTC(r,n,i));if(a=+e[4],s=+e[5],l=+e[6],e[7]){for(d=e[7].slice(0,3);d.length<3;)d+="0";d=+d}return e[9]&&(c=+e[10],f=+(e[11]||0),p=6e4*(60*c+f),"-"===e[9]&&(p=-p)),h=new Date(Date.UTC(r,n,i,a,s,l,d)),p&&h.setTime(h.getTime()-p),h}function a(t){return t.toISOString()}var s=t("../type"),o=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),u=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");e.exports=new s("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:n,construct:i,instanceOf:Date,represent:a})},{"../type":13}],"/":[function(t,e,r){"use strict";var n=t("./lib/js-yaml.js");e.exports=n},{"./lib/js-yaml.js":1}]},{},[])("/")}),function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.JSZip=t()}}(function(){var t;return function e(t,r,n){function i(s,o){if(!r[s]){if(!t[s]){var u="function"==typeof require&&require;if(!o&&u)return u(s,!0);if(a)return a(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var c=r[s]={exports:{}};t[s][0].call(c.exports,function(e){var r=t[s][1][e];return i(r?r:e)},c,c.exports,e,t,r,n)}return r[s].exports}for(var a="function"==typeof require&&require,s=0;s<n.length;s++)i(n[s]);return i}({1:[function(t,e,r){"use strict";var n=t("./utils"),i=t("./support"),a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";r.encode=function(t){for(var e,r,i,s,o,u,l,c=[],f=0,h=t.length,d=h,p="string"!==n.getTypeOf(t);f<t.length;)d=h-f,p?(e=t[f++],r=h>f?t[f++]:0,i=h>f?t[f++]:0):(e=t.charCodeAt(f++),r=h>f?t.charCodeAt(f++):0,i=h>f?t.charCodeAt(f++):0),s=e>>2,o=(3&e)<<4|r>>4,u=d>1?(15&r)<<2|i>>6:64,l=d>2?63&i:64,c.push(a.charAt(s)+a.charAt(o)+a.charAt(u)+a.charAt(l));return c.join("")},r.decode=function(t){var e,r,n,s,o,u,l,c=0,f=0;t=t.replace(/[^A-Za-z0-9\+\/\=]/g,"");var h=3*t.length/4;t.charAt(t.length-1)===a.charAt(64)&&h--,t.charAt(t.length-2)===a.charAt(64)&&h--;var d;for(d=i.uint8array?new Uint8Array(h):new Array(h);c<t.length;)s=a.indexOf(t.charAt(c++)),o=a.indexOf(t.charAt(c++)),u=a.indexOf(t.charAt(c++)),l=a.indexOf(t.charAt(c++)),e=s<<2|o>>4,r=(15&o)<<4|u>>2,n=(3&u)<<6|l,d[f++]=e,64!==u&&(d[f++]=r),64!==l&&(d[f++]=n);return d}},{"./support":27,"./utils":29}],2:[function(t,e,r){"use strict";function n(t,e,r,n,i){this.compressedSize=t,this.uncompressedSize=e,this.crc32=r,this.compression=n,this.compressedContent=i}var i=t("./external"),a=t("./stream/DataWorker"),s=t("./stream/DataLengthProbe"),o=t("./stream/Crc32Probe"),s=t("./stream/DataLengthProbe");n.prototype={getContentWorker:function(){var t=new a(i.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new s("data_length")),e=this;return t.on("end",function(){if(this.streamInfo.data_length!==e.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),t},getCompressedWorker:function(){return new a(i.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},n.createWorkerFrom=function(t,e,r){return t.pipe(new o).pipe(new s("uncompressedSize")).pipe(e.compressWorker(r)).pipe(new s("compressedSize")).withStreamInfo("compression",e)},e.exports=n},{"./external":6,"./stream/Crc32Probe":22,"./stream/DataLengthProbe":23,"./stream/DataWorker":24}],3:[function(t,e,r){"use strict";var n=t("./stream/GenericWorker");r.STORE={magic:"\x00\x00",compressWorker:function(t){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},r.DEFLATE=t("./flate")},{"./flate":7,"./stream/GenericWorker":25}],4:[function(t,e,r){"use strict";function n(){for(var t,e=[],r=0;256>r;r++){t=r;for(var n=0;8>n;n++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t}return e}function i(t,e,r,n){var i=o,a=n+r;t=-1^t;for(var s=n;a>s;s++)t=t>>>8^i[255&(t^e[s])];return-1^t}function a(t,e,r,n){var i=o,a=n+r;t=-1^t;for(var s=n;a>s;s++)t=t>>>8^i[255&(t^e.charCodeAt(s))];return-1^t}var s=t("./utils"),o=n();e.exports=function(t,e){if("undefined"==typeof t||!t.length)return 0;var r="string"!==s.getTypeOf(t);return r?i(0|e,t,t.length,0):a(0|e,t,t.length,0)}},{"./utils":29}],5:[function(t,e,r){"use strict";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(t,e,r){"use strict";var n=t("es6-promise").Promise;e.exports={Promise:n}},{"es6-promise":37}],7:[function(t,e,r){"use strict";function n(t,e){o.call(this,"FlateWorker/"+t),this._pako=new a[t]({raw:!0,level:e.level||-1}),this.meta={};var r=this;this._pako.onData=function(t){r.push({data:t,meta:r.meta})}}var i="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,a=t("pako"),s=t("./utils"),o=t("./stream/GenericWorker"),u=i?"uint8array":"array";r.magic="\b\x00",s.inherits(n,o),n.prototype.processChunk=function(t){this.meta=t.meta,this._pako.push(s.transformTo(u,t.data),!1)},n.prototype.flush=function(){o.prototype.flush.call(this),this._pako.push([],!0)},n.prototype.cleanUp=function(){o.prototype.cleanUp.call(this),this._pako=null},r.compressWorker=function(t){return new n("Deflate",t)},r.uncompressWorker=function(){return new n("Inflate",{})}},{"./stream/GenericWorker":25,"./utils":29,pako:38}],8:[function(t,e,r){"use strict";function n(t,e,r,n){a.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=e,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=t,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}var i=t("../utils"),a=t("../stream/GenericWorker"),s=t("../utf8"),o=t("../crc32"),u=t("../signature"),l=function(t,e){var r,n="";for(r=0;e>r;r++)n+=String.fromCharCode(255&t),t>>>=8;return n},c=function(t,e){var r=t;return t||(r=e?16893:33204),(65535&r)<<16},f=function(t,e){return 63&(t||0)},h=function(t,e,r,n,a,h){var d,p,m=t.file,g=t.compression,_=h!==s.utf8encode,y=i.transformTo("string",h(m.name)),v=i.transformTo("string",s.utf8encode(m.name)),w=m.comment,b=i.transformTo("string",h(w)),k=i.transformTo("string",s.utf8encode(w)),x=v.length!==m.name.length,A=k.length!==w.length,S="",C="",E="",I=m.dir,O=m.date,z={crc32:0,compressedSize:0,uncompressedSize:0};e&&!r||(z.crc32=t.crc32,z.compressedSize=t.compressedSize,z.uncompressedSize=t.uncompressedSize);var T=0;e&&(T|=8),_||!x&&!A||(T|=2048);var F=0,B=0;I&&(F|=16),"UNIX"===a?(B=798,F|=c(m.unixPermissions,I)):(B=20,F|=f(m.dosPermissions,I)),d=O.getUTCHours(),d<<=6,d|=O.getUTCMinutes(),d<<=5,d|=O.getUTCSeconds()/2,p=O.getUTCFullYear()-1980,p<<=4,p|=O.getUTCMonth()+1,p<<=5,p|=O.getUTCDate(),x&&(C=l(1,1)+l(o(y),4)+v,S+="up"+l(C.length,2)+C),A&&(E=l(1,1)+l(o(b),4)+k,S+="uc"+l(E.length,2)+E);var N="";N+="\n\x00",N+=l(T,2),N+=g.magic,N+=l(d,2),N+=l(p,2),N+=l(z.crc32,4),N+=l(z.compressedSize,4),N+=l(z.uncompressedSize,4),N+=l(y.length,2),N+=l(S.length,2);var D=u.LOCAL_FILE_HEADER+N+y+S,j=u.CENTRAL_FILE_HEADER+l(B,2)+N+l(b.length,2)+"\x00\x00\x00\x00"+l(F,4)+l(n,4)+y+S+b;return{fileRecord:D,dirRecord:j}},d=function(t,e,r,n,a){var s="",o=i.transformTo("string",a(n));return s=u.CENTRAL_DIRECTORY_END+"\x00\x00\x00\x00"+l(t,2)+l(t,2)+l(e,4)+l(r,4)+l(o.length,2)+o},p=function(t){var e="";return e=u.DATA_DESCRIPTOR+l(t.crc32,4)+l(t.compressedSize,4)+l(t.uncompressedSize,4)};i.inherits(n,a),n.prototype.push=function(t){var e=t.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(t):(this.bytesWritten+=t.data.length,a.prototype.push.call(this,{data:t.data,meta:{currentFile:this.currentFile,percent:r?(e+100*(r-n-1))/r:100}}))},n.prototype.openedSource=function(t){if(this.currentSourceOffset=this.bytesWritten,this.currentFile=t.file.name,this.streamFiles&&!t.file.dir){var e=h(t,this.streamFiles,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:e.fileRecord,meta:{percent:0}})}else this.accumulate=!0},n.prototype.closedSource=function(t){this.accumulate=!1;var e=h(t,this.streamFiles,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(e.dirRecord),this.streamFiles&&!t.file.dir)this.push({data:p(t),meta:{percent:100}});else for(this.push({data:e.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},n.prototype.flush=function(){for(var t=this.bytesWritten,e=0;e<this.dirRecords.length;e++)this.push({data:this.dirRecords[e],meta:{percent:100}});var r=this.bytesWritten-t,n=d(this.dirRecords.length,r,t,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},n.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},n.prototype.registerPrevious=function(t){this._sources.push(t);var e=this;return t.on("data",function(t){e.processChunk(t)}),t.on("end",function(){e.closedSource(e.previous.streamInfo),e._sources.length?e.prepareNextSource():e.end()}),t.on("error",function(t){e.error(t)}),this},n.prototype.resume=function(){return a.prototype.resume.call(this)?!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0):!1},n.prototype.error=function(t){var e=this._sources;if(!a.prototype.error.call(this,t))return!1;for(var r=0;r<e.length;r++)try{e[r].error(t)}catch(t){}return!0},n.prototype.lock=function(){a.prototype.lock.call(this);for(var t=this._sources,e=0;e<t.length;e++)t[e].lock()},e.exports=n},{"../crc32":4,"../signature":20,"../stream/GenericWorker":25,"../utf8":28,"../utils":29}],9:[function(t,e,r){"use strict";var n=t("../compressions"),i=t("./ZipFileWorker"),a=function(t,e){var r=t||e,i=n[r];if(!i)throw new Error(r+" is not a valid compression method !");return i};r.generateWorker=function(t,e,r){var n=new i(e.streamFiles,r,e.platform,e.encodeFileName),s=0;try{t.forEach(function(t,r){s++;var i=a(r.options.compression,e.compression),o=r.options.compressionOptions||e.compressionOptions||{},u=r.dir,l=r.date;r._compressWorker(i,o).withStreamInfo("file",{name:t,dir:u,date:l,comment:r.comment||"",unixPermissions:r.unixPermissions,dosPermissions:r.dosPermissions}).pipe(n)}),n.entriesCount=s}catch(o){n.error(o)}return n}},{"../compressions":3,"./ZipFileWorker":8}],10:[function(t,e,r){"use strict";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files={},this.comment=null,this.root="",this.clone=function(){var t=new n;for(var e in this)"function"!=typeof this[e]&&(t[e]=this[e]);return t}}n.prototype=t("./object"),n.prototype.loadAsync=t("./load"),n.support=t("./support"),n.defaults=t("./defaults"),n.loadAsync=function(t,e){return(new n).loadAsync(t,e)},n.external=t("./external"),e.exports=n},{"./defaults":5,"./external":6,"./load":11,"./object":13,"./support":27}],11:[function(t,e,r){"use strict";function n(t){return new a.Promise(function(e,r){var n=t.decompressed.getContentWorker().pipe(new u);n.on("error",function(t){r(t)}).on("end",function(){n.streamInfo.crc32!==t.decompressed.crc32?r(new Error("Corrupted zip : CRC32 mismatch")):e()}).resume()})}var i=t("./utils"),a=t("./external"),s=t("./utf8"),i=t("./utils"),o=t("./zipEntries"),u=t("./stream/Crc32Probe"),l=t("./nodejsUtils");e.exports=function(t,e){var r=this;return e=i.extend(e||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:s.utf8decode}),l.isNode&&l.isStream(t)?a.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):i.prepareContent("the loaded zip file",t,!0,e.optimizedBinaryString,e.base64).then(function(t){var r=new o(e);return r.load(t),r}).then(function(t){var r=[a.Promise.resolve(t)],i=t.files;if(e.checkCRC32)for(var s=0;s<i.length;s++)r.push(n(i[s]));return a.Promise.all(r)}).then(function(t){for(var n=t.shift(),i=n.files,a=0;a<i.length;a++){var s=i[a];r.file(s.fileNameStr,s.decompressed,{binary:!0,optimizedBinaryString:!0,date:s.date,dir:s.dir,comment:s.fileCommentStr.length?s.fileCommentStr:null,unixPermissions:s.unixPermissions,dosPermissions:s.dosPermissions,createFolders:e.createFolders})}return n.zipComment.length&&(r.comment=n.zipComment),r})}},{"./external":6,"./nodejsUtils":12,"./stream/Crc32Probe":22,"./utf8":28,"./utils":29,"./zipEntries":30}],12:[function(t,e,r){(function(t){"use strict";e.exports={isNode:"undefined"!=typeof t,newBuffer:function(e,r){return new t(e,r)},isBuffer:function(e){return t.isBuffer(e)},isStream:function(t){return t&&"function"==typeof t.on&&"function"==typeof t.pause&&"function"==typeof t.resume}}}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{}],13:[function(t,e,r){"use strict";function n(t){return"[object RegExp]"===Object.prototype.toString.call(t)}var i=t("./utf8"),a=t("./utils"),s=t("./stream/GenericWorker"),o=t("./stream/StreamHelper"),u=t("./defaults"),l=t("./compressedObject"),c=t("./zipObject"),f=t("./generate"),h=t("./nodejsUtils"),d=t("./nodejs/NodejsStreamInputAdapter"),p=function(t,e,r){var n,i=a.getTypeOf(e);r=a.extend(r||{},u),r.date=r.date||new Date,null!==r.compression&&(r.compression=r.compression.toUpperCase()),"string"==typeof r.unixPermissions&&(r.unixPermissions=parseInt(r.unixPermissions,8)),r.unixPermissions&&16384&r.unixPermissions&&(r.dir=!0),r.dosPermissions&&16&r.dosPermissions&&(r.dir=!0),r.dir&&(t=g(t)),r.createFolders&&(n=m(t))&&_.call(this,n,!0);var o="string"===i&&r.binary===!1&&r.base64===!1;r.binary=!o;var f=e instanceof l&&0===e.uncompressedSize;(f||r.dir||!e||0===e.length)&&(r.base64=!1,r.binary=!0,e="",r.compression="STORE",i="string");var p=null;p=e instanceof l||e instanceof s?e:h.isNode&&h.isStream(e)?new d(t,e):a.prepareContent(t,e,r.binary,r.optimizedBinaryString,r.base64);var y=new c(t,p,r);this.files[t]=y},m=function(t){"/"===t.slice(-1)&&(t=t.substring(0,t.length-1));var e=t.lastIndexOf("/");return e>0?t.substring(0,e):""},g=function(t){return"/"!==t.slice(-1)&&(t+="/"),t},_=function(t,e){return e="undefined"!=typeof e?e:u.createFolders,t=g(t),this.files[t]||p.call(this,t,null,{dir:!0,createFolders:e}),this.files[t]},y={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(t){var e,r,n;for(e in this.files)this.files.hasOwnProperty(e)&&(n=this.files[e],r=e.slice(this.root.length,e.length),r&&e.slice(0,this.root.length)===this.root&&t(r,n))},filter:function(t){var e=[];return this.forEach(function(r,n){t(r,n)&&e.push(n)}),e},file:function(t,e,r){if(1===arguments.length){if(n(t)){var i=t;return this.filter(function(t,e){return!e.dir&&i.test(t)})}var a=this.files[this.root+t];return a&&!a.dir?a:null}return t=this.root+t,p.call(this,t,e,r),this},folder:function(t){if(!t)return this;if(n(t))return this.filter(function(e,r){return r.dir&&t.test(e)});var e=this.root+t,r=_.call(this,e),i=this.clone();return i.root=r.name,i},remove:function(t){t=this.root+t;var e=this.files[t];if(e||("/"!==t.slice(-1)&&(t+="/"),e=this.files[t]),e&&!e.dir)delete this.files[t];else for(var r=this.filter(function(e,r){return r.name.slice(0,t.length)===t}),n=0;n<r.length;n++)delete this.files[r[n].name];return this},generate:function(t){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(t){var e,r={};try{if(r=a.extend(t||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:i.utf8encode}),r.type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),"binarystring"===r.type&&(r.type="string"),!r.type)throw new Error("No output type specified.");a.checkSupport(r.type),"darwin"!==t.platform&&"freebsd"!==t.platform&&"linux"!==t.platform&&"sunos"!==t.platform||(t.platform="UNIX"),"win32"===t.platform&&(t.platform="DOS");var n=r.comment||this.comment||"";e=f.generateWorker(this,r,n)}catch(u){e=new s("error"),e.error(u)}return new o(e,r.type||"string",r.mimeType)},generateAsync:function(t,e){return this.generateInternalStream(t).accumulate(e)},generateNodeStream:function(t,e){return t=t||{},t.type||(t.type="nodebuffer"),this.generateInternalStream(t).toNodejsStream(e)}};e.exports=y},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":35,"./nodejsUtils":12,"./stream/GenericWorker":25,"./stream/StreamHelper":26,"./utf8":28,"./utils":29,"./zipObject":32}],14:[function(t,e,r){"use strict";function n(t){i.call(this,t);for(var e=0;e<this.data.length;e++)t[e]=255&t[e]}var i=t("./DataReader"),a=t("../utils");a.inherits(n,i),n.prototype.byteAt=function(t){return this.data[this.zero+t]},n.prototype.lastIndexOfSignature=function(t){for(var e=t.charCodeAt(0),r=t.charCodeAt(1),n=t.charCodeAt(2),i=t.charCodeAt(3),a=this.length-4;a>=0;--a)if(this.data[a]===e&&this.data[a+1]===r&&this.data[a+2]===n&&this.data[a+3]===i)return a-this.zero;return-1},n.prototype.readAndCheckSignature=function(t){var e=t.charCodeAt(0),r=t.charCodeAt(1),n=t.charCodeAt(2),i=t.charCodeAt(3),a=this.readData(4);return e===a[0]&&r===a[1]&&n===a[2]&&i===a[3]},n.prototype.readData=function(t){if(this.checkOffset(t),0===t)return[];var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{"../utils":29,"./DataReader":15}],15:[function(t,e,r){"use strict";function n(t){this.data=t,this.length=t.length,this.index=0,this.zero=0}var i=t("../utils");n.prototype={checkOffset:function(t){this.checkIndex(this.index+t)},checkIndex:function(t){if(this.length<this.zero+t||0>t)throw new Error("End of data reached (data length = "+this.length+", asked index = "+t+"). Corrupted zip ?")},setIndex:function(t){this.checkIndex(t),this.index=t},skip:function(t){this.setIndex(this.index+t)},byteAt:function(t){},readInt:function(t){var e,r=0;for(this.checkOffset(t),e=this.index+t-1;e>=this.index;e--)r=(r<<8)+this.byteAt(e);return this.index+=t,r},readString:function(t){return i.transformTo("string",this.readData(t))},readData:function(t){},lastIndexOfSignature:function(t){},readAndCheckSignature:function(t){},readDate:function(){var t=this.readInt(4);return new Date(Date.UTC((t>>25&127)+1980,(t>>21&15)-1,t>>16&31,t>>11&31,t>>5&63,(31&t)<<1))}},e.exports=n},{"../utils":29}],16:[function(t,e,r){"use strict";function n(t){i.call(this,t)}var i=t("./Uint8ArrayReader"),a=t("../utils");a.inherits(n,i),n.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{"../utils":29,"./Uint8ArrayReader":18}],17:[function(t,e,r){"use strict";function n(t){i.call(this,t)}var i=t("./DataReader"),a=t("../utils");a.inherits(n,i),n.prototype.byteAt=function(t){return this.data.charCodeAt(this.zero+t)},n.prototype.lastIndexOfSignature=function(t){return this.data.lastIndexOf(t)-this.zero},n.prototype.readAndCheckSignature=function(t){var e=this.readData(4);return t===e},n.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{"../utils":29,"./DataReader":15}],18:[function(t,e,r){"use strict";function n(t){i.call(this,t)}var i=t("./ArrayReader"),a=t("../utils");a.inherits(n,i),n.prototype.readData=function(t){if(this.checkOffset(t),0===t)return new Uint8Array(0);var e=this.data.subarray(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=n},{"../utils":29,"./ArrayReader":14}],19:[function(t,e,r){"use strict";var n=t("../utils"),i=t("../support"),a=t("./ArrayReader"),s=t("./StringReader"),o=t("./NodeBufferReader"),u=t("./Uint8ArrayReader");e.exports=function(t){var e=n.getTypeOf(t);return n.checkSupport(e),"string"!==e||i.uint8array?"nodebuffer"===e?new o(t):i.uint8array?new u(n.transformTo("uint8array",t)):new a(n.transformTo("array",t)):new s(t)}},{"../support":27,"../utils":29,"./ArrayReader":14,"./NodeBufferReader":16,"./StringReader":17,"./Uint8ArrayReader":18}],20:[function(t,e,r){"use strict";r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],21:[function(t,e,r){"use strict";function n(t){i.call(this,"ConvertWorker to "+t),this.destType=t}var i=t("./GenericWorker"),a=t("../utils");a.inherits(n,i),n.prototype.processChunk=function(t){this.push({data:a.transformTo(this.destType,t.data),meta:t.meta})},e.exports=n},{"../utils":29,"./GenericWorker":25}],22:[function(t,e,r){"use strict";function n(){i.call(this,"Crc32Probe")}var i=t("./GenericWorker"),a=t("../crc32"),s=t("../utils");s.inherits(n,i),n.prototype.processChunk=function(t){this.streamInfo.crc32=a(t.data,this.streamInfo.crc32||0),this.push(t)},e.exports=n},{"../crc32":4,"../utils":29,"./GenericWorker":25}],23:[function(t,e,r){"use strict";function n(t){a.call(this,"DataLengthProbe for "+t),this.propName=t,this.withStreamInfo(t,0)}var i=t("../utils"),a=t("./GenericWorker");i.inherits(n,a),n.prototype.processChunk=function(t){if(t){var e=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=e+t.data.length}a.prototype.processChunk.call(this,t)},e.exports=n},{"../utils":29,"./GenericWorker":25}],24:[function(t,e,r){"use strict";function n(t){a.call(this,"DataWorker");var e=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,t.then(function(t){e.dataIsReady=!0,e.data=t,e.max=t&&t.length||0,e.type=i.getTypeOf(t),e.isPaused||e._tickAndRepeat()},function(t){e.error(t)})}var i=t("../utils"),a=t("./GenericWorker"),s=16384;i.inherits(n,a),n.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this.data=null},n.prototype.resume=function(){return a.prototype.resume.call(this)?(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,i.delay(this._tickAndRepeat,[],this)),!0):!1},n.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(i.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},n.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var t=s,e=null,r=Math.min(this.max,this.index+t);if(this.index>=this.max)return this.end();switch(this.type){case"string":e=this.data.substring(this.index,r);break;case"uint8array":e=this.data.subarray(this.index,r);break;case"array":case"nodebuffer":e=this.data.slice(this.index,r)}return this.index=r,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},e.exports=n},{"../utils":29,"./GenericWorker":25
+}],25:[function(t,e,r){"use strict";function n(t){this.name=t||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(t){this.emit("data",t)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(t){this.emit("error",t)}return!0},error:function(t){return this.isFinished?!1:(this.isPaused?this.generatedError=t:(this.isFinished=!0,this.emit("error",t),this.previous&&this.previous.error(t),this.cleanUp()),!0)},on:function(t,e){return this._listeners[t].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(t,e){if(this._listeners[t])for(var r=0;r<this._listeners[t].length;r++)this._listeners[t][r].call(this,e)},pipe:function(t){return t.registerPrevious(this)},registerPrevious:function(t){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=t.streamInfo,this.mergeStreamInfo(),this.previous=t;var e=this;return t.on("data",function(t){e.processChunk(t)}),t.on("end",function(){e.end()}),t.on("error",function(t){e.error(t)}),this},pause:function(){return this.isPaused||this.isFinished?!1:(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;this.isPaused=!1;var t=!1;return this.generatedError&&(this.error(this.generatedError),t=!0),this.previous&&this.previous.resume(),!t},flush:function(){},processChunk:function(t){this.push(t)},withStreamInfo:function(t,e){return this.extraStreamInfo[t]=e,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var t in this.extraStreamInfo)this.extraStreamInfo.hasOwnProperty(t)&&(this.streamInfo[t]=this.extraStreamInfo[t])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var t="Worker "+this.name;return this.previous?this.previous+" -> "+t:t}},e.exports=n},{}],26:[function(t,e,r){(function(r){"use strict";function n(t,e,r){switch(t){case"blob":return o.newBlob(o.transformTo("arraybuffer",e),r);case"base64":return c.encode(e);default:return o.transformTo(t,e)}}function i(t,e){var n,i=0,a=null,s=0;for(n=0;n<e.length;n++)s+=e[n].length;switch(t){case"string":return e.join("");case"array":return Array.prototype.concat.apply([],e);case"uint8array":for(a=new Uint8Array(s),n=0;n<e.length;n++)a.set(e[n],i),i+=e[n].length;return a;case"nodebuffer":return r.concat(e);default:throw new Error("concat : unsupported type '"+t+"'")}}function a(t,e){return new h.Promise(function(r,a){var s=[],o=t._internalType,u=t._outputType,l=t._mimeType;t.on("data",function(t,r){s.push(t),e&&e(r)}).on("error",function(t){s=[],a(t)}).on("end",function(){try{var t=n(u,i(o,s),l);r(t)}catch(e){a(e)}s=[]}).resume()})}function s(t,e,r){var n=e;switch(e){case"blob":case"arraybuffer":n="uint8array";break;case"base64":n="string"}try{this._internalType=n,this._outputType=e,this._mimeType=r,o.checkSupport(n),this._worker=t.pipe(new u(n)),t.lock()}catch(i){this._worker=new l("error"),this._worker.error(i)}}var o=t("../utils"),u=t("./ConvertWorker"),l=t("./GenericWorker"),c=t("../base64"),f=t("../nodejs/NodejsStreamOutputAdapter"),h=t("../external");s.prototype={accumulate:function(t){return a(this,t)},on:function(t,e){var r=this;return"data"===t?this._worker.on(t,function(t){e.call(r,t.data,t.meta)}):this._worker.on(t,function(){o.delay(e,arguments,r)}),this},resume:function(){return o.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(t){if(o.checkSupport("nodestream"),"nodebuffer"!==this._outputType)throw new Error(this._outputType+" is not supported by this method");return new f(this,{objectMode:"nodebuffer"!==this._outputType},t)}},e.exports=s}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":35,"../utils":29,"./ConvertWorker":21,"./GenericWorker":25}],27:[function(t,e,r){(function(e){"use strict";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof Uint8Array,r.nodebuffer="undefined"!=typeof e,r.uint8array="undefined"!=typeof Uint8Array,"undefined"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:"application/zip"}).size}catch(i){try{var a=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,s=new a;s.append(n),r.blob=0===s.getBlob("application/zip").size}catch(i){r.blob=!1}}}r.nodestream=!!t("./nodejs/NodejsStreamOutputAdapter").prototype}).call(this,"undefined"!=typeof Buffer?Buffer:void 0)},{"./nodejs/NodejsStreamOutputAdapter":35}],28:[function(t,e,r){"use strict";function n(){u.call(this,"utf-8 decode"),this.leftOver=null}function i(){u.call(this,"utf-8 encode")}for(var a=t("./utils"),s=t("./support"),o=t("./nodejsUtils"),u=t("./stream/GenericWorker"),l=new Array(256),c=0;256>c;c++)l[c]=c>=252?6:c>=248?5:c>=240?4:c>=224?3:c>=192?2:1;l[254]=l[254]=1;var f=function(t){var e,r,n,i,a,o=t.length,u=0;for(i=0;o>i;i++)r=t.charCodeAt(i),55296===(64512&r)&&o>i+1&&(n=t.charCodeAt(i+1),56320===(64512&n)&&(r=65536+(r-55296<<10)+(n-56320),i++)),u+=128>r?1:2048>r?2:65536>r?3:4;for(e=s.uint8array?new Uint8Array(u):new Array(u),a=0,i=0;u>a;i++)r=t.charCodeAt(i),55296===(64512&r)&&o>i+1&&(n=t.charCodeAt(i+1),56320===(64512&n)&&(r=65536+(r-55296<<10)+(n-56320),i++)),128>r?e[a++]=r:2048>r?(e[a++]=192|r>>>6,e[a++]=128|63&r):65536>r?(e[a++]=224|r>>>12,e[a++]=128|r>>>6&63,e[a++]=128|63&r):(e[a++]=240|r>>>18,e[a++]=128|r>>>12&63,e[a++]=128|r>>>6&63,e[a++]=128|63&r);return e},h=function(t,e){var r;for(e=e||t.length,e>t.length&&(e=t.length),r=e-1;r>=0&&128===(192&t[r]);)r--;return 0>r?e:0===r?e:r+l[t[r]]>e?r:e},d=function(t){var e,r,n,i,s=t.length,o=new Array(2*s);for(r=0,e=0;s>e;)if(n=t[e++],128>n)o[r++]=n;else if(i=l[n],i>4)o[r++]=65533,e+=i-1;else{for(n&=2===i?31:3===i?15:7;i>1&&s>e;)n=n<<6|63&t[e++],i--;i>1?o[r++]=65533:65536>n?o[r++]=n:(n-=65536,o[r++]=55296|n>>10&1023,o[r++]=56320|1023&n)}return o.length!==r&&(o.subarray?o=o.subarray(0,r):o.length=r),a.applyFromCharCode(o)};r.utf8encode=function(t){return s.nodebuffer?o.newBuffer(t,"utf-8"):f(t)},r.utf8decode=function(t){return s.nodebuffer?a.transformTo("nodebuffer",t).toString("utf-8"):(t=a.transformTo(s.uint8array?"uint8array":"array",t),d(t))},a.inherits(n,u),n.prototype.processChunk=function(t){var e=a.transformTo(s.uint8array?"uint8array":"array",t.data);if(this.leftOver&&this.leftOver.length){if(s.uint8array){var n=e;e=new Uint8Array(n.length+this.leftOver.length),e.set(this.leftOver,0),e.set(n,this.leftOver.length)}else e=this.leftOver.concat(e);this.leftOver=null}var i=h(e),o=e;i!==e.length&&(s.uint8array?(o=e.subarray(0,i),this.leftOver=e.subarray(i,e.length)):(o=e.slice(0,i),this.leftOver=e.slice(i,e.length))),this.push({data:r.utf8decode(o),meta:t.meta})},n.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:r.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},r.Utf8DecodeWorker=n,a.inherits(i,u),i.prototype.processChunk=function(t){this.push({data:r.utf8encode(t.data),meta:t.meta})},r.Utf8EncodeWorker=i},{"./nodejsUtils":12,"./stream/GenericWorker":25,"./support":27,"./utils":29}],29:[function(t,e,r){"use strict";function n(t){var e=null;return e=u.uint8array?new Uint8Array(t.length):new Array(t.length),a(t,e)}function i(t){return t}function a(t,e){for(var r=0;r<t.length;++r)e[r]=255&t.charCodeAt(r);return e}function s(t){var e=65536,n=r.getTypeOf(t),i=!0;if("uint8array"===n?i=d.applyCanBeUsed.uint8array:"nodebuffer"===n&&(i=d.applyCanBeUsed.nodebuffer),i)for(;e>1;)try{return d.stringifyByChunk(t,n,e)}catch(a){e=Math.floor(e/2)}return d.stringifyByChar(t)}function o(t,e){for(var r=0;r<t.length;r++)e[r]=t[r];return e}var u=t("./support"),l=t("./base64"),c=t("./nodejsUtils"),f=t("asap"),h=t("./external");r.newBlob=function(t,e){r.checkSupport("blob");try{return new Blob([t],{type:e})}catch(n){try{var i=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,a=new i;return a.append(t),a.getBlob(e)}catch(n){throw new Error("Bug : can't construct the Blob.")}}};var d={stringifyByChunk:function(t,e,r){var n=[],i=0,a=t.length;if(r>=a)return String.fromCharCode.apply(null,t);for(;a>i;)"array"===e||"nodebuffer"===e?n.push(String.fromCharCode.apply(null,t.slice(i,Math.min(i+r,a)))):n.push(String.fromCharCode.apply(null,t.subarray(i,Math.min(i+r,a)))),i+=r;return n.join("")},stringifyByChar:function(t){for(var e="",r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return e},applyCanBeUsed:{uint8array:function(){try{return u.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(t){return!1}}(),nodebuffer:function(){try{return u.nodebuffer&&1===String.fromCharCode.apply(null,c.newBuffer(1)).length}catch(t){return!1}}()}};r.applyFromCharCode=s;var p={};p.string={string:i,array:function(t){return a(t,new Array(t.length))},arraybuffer:function(t){return p.string.uint8array(t).buffer},uint8array:function(t){return a(t,new Uint8Array(t.length))},nodebuffer:function(t){return a(t,c.newBuffer(t.length))}},p.array={string:s,array:i,arraybuffer:function(t){return new Uint8Array(t).buffer},uint8array:function(t){return new Uint8Array(t)},nodebuffer:function(t){return c.newBuffer(t)}},p.arraybuffer={string:function(t){return s(new Uint8Array(t))},array:function(t){return o(new Uint8Array(t),new Array(t.byteLength))},arraybuffer:i,uint8array:function(t){return new Uint8Array(t)},nodebuffer:function(t){return c.newBuffer(new Uint8Array(t))}},p.uint8array={string:s,array:function(t){return o(t,new Array(t.length))},arraybuffer:function(t){return t.buffer},uint8array:i,nodebuffer:function(t){return c.newBuffer(t)}},p.nodebuffer={string:s,array:function(t){return o(t,new Array(t.length))},arraybuffer:function(t){return p.nodebuffer.uint8array(t).buffer},uint8array:function(t){return o(t,new Uint8Array(t.length))},nodebuffer:i},r.transformTo=function(t,e){if(e||(e=""),!t)return e;r.checkSupport(t);var n=r.getTypeOf(e),i=p[n][t](e);return i},r.getTypeOf=function(t){return"string"==typeof t?"string":"[object Array]"===Object.prototype.toString.call(t)?"array":u.nodebuffer&&c.isBuffer(t)?"nodebuffer":u.uint8array&&t instanceof Uint8Array?"uint8array":u.arraybuffer&&t instanceof ArrayBuffer?"arraybuffer":void 0},r.checkSupport=function(t){var e=u[t.toLowerCase()];if(!e)throw new Error(t+" is not supported by this platform")},r.MAX_VALUE_16BITS=65535,r.MAX_VALUE_32BITS=-1,r.pretty=function(t){var e,r,n="";for(r=0;r<(t||"").length;r++)e=t.charCodeAt(r),n+="\\x"+(16>e?"0":"")+e.toString(16).toUpperCase();return n},r.delay=function(t,e,r){f(function(){t.apply(r||null,e||[])})},r.inherits=function(t,e){var r=function(){};r.prototype=e.prototype,t.prototype=new r},r.extend=function(){var t,e,r={};for(t=0;t<arguments.length;t++)for(e in arguments[t])arguments[t].hasOwnProperty(e)&&"undefined"==typeof r[e]&&(r[e]=arguments[t][e]);return r},r.prepareContent=function(t,e,i,a,s){var o=null;return o=u.blob&&e instanceof Blob&&"undefined"!=typeof FileReader?new h.Promise(function(t,r){var n=new FileReader;n.onload=function(e){t(e.target.result)},n.onerror=function(t){r(t.target.error)},n.readAsArrayBuffer(e)}):h.Promise.resolve(e),o.then(function(e){var o=r.getTypeOf(e);return o?("arraybuffer"===o?e=r.transformTo("uint8array",e):"string"===o&&(s?e=l.decode(e):i&&a!==!0&&(e=n(e))),e):h.Promise.reject(new Error("The data of '"+t+"' is in an unsupported format !"))})}},{"./base64":1,"./external":6,"./nodejsUtils":12,"./support":27,asap:33}],30:[function(t,e,r){"use strict";function n(t){this.files=[],this.loadOptions=t}var i=t("./reader/readerFor"),a=t("./utils"),s=t("./signature"),o=t("./zipEntry"),u=(t("./utf8"),t("./support"));n.prototype={checkSignature:function(t){if(!this.reader.readAndCheckSignature(t)){this.reader.index-=4;var e=this.reader.readString(4);throw new Error("Corrupted zip or bug : unexpected signature ("+a.pretty(e)+", expected "+a.pretty(t)+")")}},isSignature:function(t,e){var r=this.reader.index;this.reader.setIndex(t);var n=this.reader.readString(4),i=n===e;return this.reader.setIndex(r),i},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var t=this.reader.readData(this.zipCommentLength),e=u.uint8array?"uint8array":"array",r=a.transformTo(e,t);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var t,e,r,n=this.zip64EndOfCentralSize-44,i=0;n>i;)t=this.reader.readInt(2),e=this.reader.readInt(4),r=this.reader.readData(e),this.zip64ExtensibleData[t]={id:t,length:e,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var t,e;for(t=0;t<this.files.length;t++)e=this.files[t],this.reader.setIndex(e.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),e.readLocalPart(this.reader),e.handleUTF8(),e.processAttributes()},readCentralDir:function(){var t;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)t=new o({zip64:this.zip64},this.loadOptions),t.readCentralPart(this.reader),this.files.push(t);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var t=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(0>t){var e=!this.isSignature(0,s.LOCAL_FILE_HEADER);throw e?new Error("Can't find end of central directory : is this a zip file ? If it is, see http://stuk.github.io/jszip/documentation/howto/read_zip.html"):new Error("Corrupted zip : can't find end of central directory")}this.reader.setIndex(t);var r=t;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===a.MAX_VALUE_16BITS||this.diskWithCentralDirStart===a.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===a.MAX_VALUE_16BITS||this.centralDirRecords===a.MAX_VALUE_16BITS||this.centralDirSize===a.MAX_VALUE_32BITS||this.centralDirOffset===a.MAX_VALUE_32BITS){if(this.zip64=!0,t=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),0>t)throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(t),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip : can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var n=this.centralDirOffset+this.centralDirSize;this.zip64&&(n+=20,n+=12+this.zip64EndOfCentralSize);var i=r-n;if(i>0)this.isSignature(r,s.CENTRAL_FILE_HEADER)||(this.reader.zero=i);else if(0>i)throw new Error("Corrupted zip: missing "+Math.abs(i)+" bytes.")},prepareReader:function(t){this.reader=i(t)},load:function(t){this.prepareReader(t),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},e.exports=n},{"./reader/readerFor":19,"./signature":20,"./support":27,"./utf8":28,"./utils":29,"./zipEntry":31}],31:[function(t,e,r){"use strict";function n(t,e){this.options=t,this.loadOptions=e}var i=t("./reader/readerFor"),a=t("./utils"),s=t("./compressedObject"),o=t("./crc32"),u=t("./utf8"),l=t("./compressions"),c=t("./support"),f=0,h=3,d=function(t){for(var e in l)if(l.hasOwnProperty(e)&&l[e].magic===t)return l[e];return null};n.prototype={isEncrypted:function(){return 1===(1&this.bitFlag)},useUTF8:function(){return 2048===(2048&this.bitFlag)},readLocalPart:function(t){var e,r;if(t.skip(22),this.fileNameLength=t.readInt(2),r=t.readInt(2),this.fileName=t.readData(this.fileNameLength),t.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(e=d(this.compressionMethod),null===e)throw new Error("Corrupted zip : compression "+a.pretty(this.compressionMethod)+" unknown (inner file : "+a.transformTo("string",this.fileName)+")");this.decompressed=new s(this.compressedSize,this.uncompressedSize,this.crc32,e,t.readData(this.compressedSize))},readCentralPart:function(t){this.versionMadeBy=t.readInt(2),t.skip(2),this.bitFlag=t.readInt(2),this.compressionMethod=t.readString(2),this.date=t.readDate(),this.crc32=t.readInt(4),this.compressedSize=t.readInt(4),this.uncompressedSize=t.readInt(4);var e=t.readInt(2);if(this.extraFieldsLength=t.readInt(2),this.fileCommentLength=t.readInt(2),this.diskNumberStart=t.readInt(2),this.internalFileAttributes=t.readInt(2),this.externalFileAttributes=t.readInt(4),this.localHeaderOffset=t.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");t.skip(e),this.readExtraFields(t),this.parseZIP64ExtraField(t),this.fileComment=t.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var t=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),t===f&&(this.dosPermissions=63&this.externalFileAttributes),t===h&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(t){if(this.extraFields[1]){var e=i(this.extraFields[1].value);this.uncompressedSize===a.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===a.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===a.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===a.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(t){var e,r,n,i=t.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});t.index<i;)e=t.readInt(2),r=t.readInt(2),n=t.readData(r),this.extraFields[e]={id:e,length:r,value:n}},handleUTF8:function(){var t=c.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=u.utf8decode(this.fileName),this.fileCommentStr=u.utf8decode(this.fileComment);else{var e=this.findExtraFieldUnicodePath();if(null!==e)this.fileNameStr=e;else{var r=a.transformTo(t,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=a.transformTo(t,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var t=this.extraFields[28789];if(t){var e=i(t.value);return 1!==e.readInt(1)?null:o(this.fileName)!==e.readInt(4)?null:u.utf8decode(e.readData(t.length-5))}return null},findExtraFieldUnicodeComment:function(){var t=this.extraFields[25461];if(t){var e=i(t.value);return 1!==e.readInt(1)?null:o(this.fileComment)!==e.readInt(4)?null:u.utf8decode(e.readData(t.length-5))}return null}},e.exports=n},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":19,"./support":27,"./utf8":28,"./utils":29}],32:[function(t,e,r){"use strict";var n=t("./stream/StreamHelper"),i=t("./stream/DataWorker"),a=t("./utf8"),s=t("./compressedObject"),o=t("./stream/GenericWorker"),u=function(t,e,r){this.name=t,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=e,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}};u.prototype={internalStream:function(t){var e=t.toLowerCase(),r="string"===e||"text"===e;"binarystring"!==e&&"text"!==e||(e="string");var i=this._decompressWorker(),s=!this._dataBinary;return s&&!r&&(i=i.pipe(new a.Utf8EncodeWorker)),!s&&r&&(i=i.pipe(new a.Utf8DecodeWorker)),new n(i,e,"")},async:function(t,e){return this.internalStream(t).accumulate(e)},nodeStream:function(t,e){return this.internalStream(t||"nodebuffer").toNodejsStream(e)},_compressWorker:function(t,e){if(this._data instanceof s&&this._data.compression.magic===t.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),s.createWorkerFrom(r,t,e)},_decompressWorker:function(){return this._data instanceof s?this._data.getContentWorker():this._data instanceof o?this._data:new i(this._data)}};for(var l=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],c=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},f=0;f<l.length;f++)u.prototype[l[f]]=c;e.exports=u},{"./compressedObject":2,"./stream/DataWorker":24,"./stream/GenericWorker":25,"./stream/StreamHelper":26,"./utf8":28}],33:[function(t,e,r){"use strict";function n(){if(u.length)throw u.shift()}function i(t){var e;e=o.length?o.pop():new a,e.task=t,s(e)}function a(){this.task=null}var s=t("./raw"),o=[],u=[],l=s.makeRequestCallFromTimer(n);e.exports=i,a.prototype.call=function(){try{this.task.call()}catch(t){i.onerror?i.onerror(t):(u.push(t),l())}finally{this.task=null,o[o.length]=this}}},{"./raw":34}],34:[function(t,e,r){(function(t){"use strict";function r(t){o.length||(s(),u=!0),o[o.length]=t}function n(){for(;l<o.length;){var t=l;if(l+=1,o[t].call(),l>c){for(var e=0,r=o.length-l;r>e;e++)o[e]=o[e+l];o.length-=l,l=0}}o.length=0,l=0,u=!1}function i(t){var e=1,r=new f(t),n=document.createTextNode("");return r.observe(n,{characterData:!0}),function(){e=-e,n.data=e}}function a(t){return function(){function e(){clearTimeout(r),clearInterval(n),t()}var r=setTimeout(e,0),n=setInterval(e,50)}}e.exports=r;var s,o=[],u=!1,l=0,c=1024,f=t.MutationObserver||t.WebKitMutationObserver;s="function"==typeof f?i(n):a(n),r.requestFlush=s,r.makeRequestCallFromTimer=a}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],35:[function(t,e,r){},{}],36:[function(t,e,r){function n(){c=!1,o.length?l=o.concat(l):f=-1,l.length&&i()}function i(){if(!c){var t=setTimeout(n);c=!0;for(var e=l.length;e;){for(o=l,l=[];++f<e;)o&&o[f].run();f=-1,e=l.length}o=null,c=!1,clearTimeout(t)}}function a(t,e){this.fun=t,this.array=e}function s(){}var o,u=e.exports={},l=[],c=!1,f=-1;u.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];l.push(new a(t,e)),1!==l.length||c||setTimeout(i,0)},a.prototype.run=function(){this.fun.apply(null,this.array)},u.title="browser",u.browser=!0,u.env={},u.argv=[],u.version="",u.versions={},u.on=s,u.addListener=s,u.once=s,u.off=s,u.removeListener=s,u.removeAllListeners=s,u.emit=s,u.binding=function(t){throw new Error("process.binding is not supported")},u.cwd=function(){return"/"},u.chdir=function(t){throw new Error("process.chdir is not supported")},u.umask=function(){return 0}},{}],37:[function(e,r,n){(function(n,i){(function(){"use strict";function a(t){return"function"==typeof t||"object"==typeof t&&null!==t}function s(t){return"function"==typeof t}function o(t){return"object"==typeof t&&null!==t}function u(t){G=t}function l(t){X=t}function c(){return function(){n.nextTick(m)}}function f(){return function(){Y(m)}}function h(){var t=0,e=new Q(m),r=document.createTextNode("");return e.observe(r,{characterData:!0}),function(){r.data=t=++t%2}}function d(){var t=new MessageChannel;return t.port1.onmessage=m,function(){t.port2.postMessage(0)}}function p(){return function(){setTimeout(m,1)}}function m(){for(var t=0;V>t;t+=2){var e=rt[t],r=rt[t+1];e(r),rt[t]=void 0,rt[t+1]=void 0}V=0}function g(){try{var t=e,r=t("vertx");return Y=r.runOnLoop||r.runOnContext,f()}catch(n){return p()}}function _(){}function y(){return new TypeError("You cannot resolve a promise with itself")}function v(){return new TypeError("A promises callback cannot return that same promise.")}function w(t){try{return t.then}catch(e){return st.error=e,st}}function b(t,e,r,n){try{t.call(e,r,n)}catch(i){return i}}function k(t,e,r){X(function(t){var n=!1,i=b(r,e,function(r){n||(n=!0,e!==r?S(t,r):E(t,r))},function(e){n||(n=!0,I(t,e))},"Settle: "+(t._label||" unknown promise"));!n&&i&&(n=!0,I(t,i))},t)}function x(t,e){e._state===it?E(t,e._result):e._state===at?I(t,e._result):O(e,void 0,function(e){S(t,e)},function(e){I(t,e)})}function A(t,e){if(e.constructor===t.constructor)x(t,e);else{var r=w(e);r===st?I(t,st.error):void 0===r?E(t,e):s(r)?k(t,e,r):E(t,e)}}function S(t,e){t===e?I(t,y()):a(e)?A(t,e):E(t,e)}function C(t){t._onerror&&t._onerror(t._result),z(t)}function E(t,e){t._state===nt&&(t._result=e,t._state=it,0!==t._subscribers.length&&X(z,t))}function I(t,e){t._state===nt&&(t._state=at,t._result=e,X(C,t))}function O(t,e,r,n){var i=t._subscribers,a=i.length;t._onerror=null,i[a]=e,i[a+it]=r,i[a+at]=n,0===a&&t._state&&X(z,t)}function z(t){var e=t._subscribers,r=t._state;if(0!==e.length){for(var n,i,a=t._result,s=0;s<e.length;s+=3)n=e[s],i=e[s+r],n?B(r,n,i,a):i(a);t._subscribers.length=0}}function T(){this.error=null}function F(t,e){try{return t(e)}catch(r){return ot.error=r,ot}}function B(t,e,r,n){var i,a,o,u,l=s(r);if(l){if(i=F(r,n),i===ot?(u=!0,a=i.error,i=null):o=!0,e===i)return void I(e,v())}else i=n,o=!0;e._state!==nt||(l&&o?S(e,i):u?I(e,a):t===it?E(e,i):t===at&&I(e,i))}function N(t,e){try{e(function(e){S(t,e)},function(e){I(t,e)})}catch(r){I(t,r)}}function D(t,e){var r=this;r._instanceConstructor=t,r.promise=new t(_),r._validateInput(e)?(r._input=e,r.length=e.length,r._remaining=e.length,r._init(),0===r.length?E(r.promise,r._result):(r.length=r.length||0,r._enumerate(),0===r._remaining&&E(r.promise,r._result))):I(r.promise,r._validationError())}function j(t){return new ut(this,t).promise}function R(t){function e(t){S(i,t)}function r(t){I(i,t)}var n=this,i=new n(_);if(!q(t))return I(i,new TypeError("You must pass an array to race.")),i;for(var a=t.length,s=0;i._state===nt&&a>s;s++)O(n.resolve(t[s]),void 0,e,r);return i}function L(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var r=new e(_);return S(r,t),r}function U(t){var e=this,r=new e(_);return I(r,t),r}function P(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function M(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function W(t){this._id=dt++,this._state=void 0,this._result=void 0,this._subscribers=[],_!==t&&(s(t)||P(),this instanceof W||M(),N(this,t))}function Z(){var t;if("undefined"!=typeof i)t=i;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(e){throw new Error("polyfill failed because global object is unavailable in this environment")}var r=t.Promise;r&&"[object Promise]"===Object.prototype.toString.call(r.resolve())&&!r.cast||(t.Promise=pt)}var H;H=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var Y,G,K,q=H,V=0,X=({}.toString,function(t,e){rt[V]=t,rt[V+1]=e,V+=2,2===V&&(G?G(m):K())}),J="undefined"!=typeof window?window:void 0,$=J||{},Q=$.MutationObserver||$.WebKitMutationObserver,tt="undefined"!=typeof n&&"[object process]"==={}.toString.call(n),et="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,rt=new Array(1e3);K=tt?c():Q?h():et?d():void 0===J&&"function"==typeof e?g():p();var nt=void 0,it=1,at=2,st=new T,ot=new T;D.prototype._validateInput=function(t){return q(t)},D.prototype._validationError=function(){return new Error("Array Methods must be provided an Array")},D.prototype._init=function(){this._result=new Array(this.length)};var ut=D;D.prototype._enumerate=function(){for(var t=this,e=t.length,r=t.promise,n=t._input,i=0;r._state===nt&&e>i;i++)t._eachEntry(n[i],i)},D.prototype._eachEntry=function(t,e){var r=this,n=r._instanceConstructor;o(t)?t.constructor===n&&t._state!==nt?(t._onerror=null,r._settledAt(t._state,e,t._result)):r._willSettleAt(n.resolve(t),e):(r._remaining--,r._result[e]=t)},D.prototype._settledAt=function(t,e,r){var n=this,i=n.promise;i._state===nt&&(n._remaining--,t===at?I(i,r):n._result[e]=r),0===n._remaining&&E(i,n._result)},D.prototype._willSettleAt=function(t,e){var r=this;O(t,void 0,function(t){r._settledAt(it,e,t)},function(t){r._settledAt(at,e,t)})};var lt=j,ct=R,ft=L,ht=U,dt=0,pt=W;W.all=lt,W.race=ct,W.resolve=ft,W.reject=ht,W._setScheduler=u,W._setAsap=l,W._asap=X,W.prototype={constructor:W,then:function(t,e){var r=this,n=r._state;if(n===it&&!t||n===at&&!e)return this;var i=new this.constructor(_),a=r._result;if(n){var s=arguments[n-1];X(function(){B(n,i,s,a)})}else O(r,i,t,e);return i},"catch":function(t){return this.then(null,t)}};var mt=Z,gt={Promise:pt,polyfill:mt};"function"==typeof t&&t.amd?t(function(){return gt}):"undefined"!=typeof r&&r.exports?r.exports=gt:"undefined"!=typeof this&&(this.ES6Promise=gt),mt()}).call(this)}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:36}],38:[function(t,e,r){"use strict";var n=t("./lib/utils/common").assign,i=t("./lib/deflate"),a=t("./lib/inflate"),s=t("./lib/zlib/constants"),o={};n(o,i,a,s),e.exports=o},{"./lib/deflate":39,"./lib/inflate":40,"./lib/utils/common":41,"./lib/zlib/constants":44}],39:[function(t,e,r){"use strict";function n(t){if(!(this instanceof n))return new n(t);this.options=u.assign({level:y,method:w,chunkSize:16384,windowBits:15,memLevel:8,strategy:v,to:""},t||{});var e=this.options;e.raw&&e.windowBits>0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new f,this.strm.avail_out=0;var r=o.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(r!==m)throw new Error(c[r]);if(e.header&&o.deflateSetHeader(this.strm,e.header),e.dictionary){var i;if(i="string"==typeof e.dictionary?l.string2buf(e.dictionary):"[object ArrayBuffer]"===h.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,r=o.deflateSetDictionary(this.strm,i),r!==m)throw new Error(c[r]);this._dict_set=!0}}function i(t,e){var r=new n(e);if(r.push(t,!0),r.err)throw r.msg;return r.result}function a(t,e){return e=e||{},e.raw=!0,i(t,e)}function s(t,e){return e=e||{},e.gzip=!0,i(t,e)}var o=t("./zlib/deflate"),u=t("./utils/common"),l=t("./utils/strings"),c=t("./zlib/messages"),f=t("./zlib/zstream"),h=Object.prototype.toString,d=0,p=4,m=0,g=1,_=2,y=-1,v=0,w=8;n.prototype.push=function(t,e){var r,n,i=this.strm,a=this.options.chunkSize;if(this.ended)return!1;n=e===~~e?e:e===!0?p:d,"string"==typeof t?i.input=l.string2buf(t):"[object ArrayBuffer]"===h.call(t)?i.input=new Uint8Array(t):i.input=t,
+i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new u.Buf8(a),i.next_out=0,i.avail_out=a),r=o.deflate(i,n),r!==g&&r!==m)return this.onEnd(r),this.ended=!0,!1;0!==i.avail_out&&(0!==i.avail_in||n!==p&&n!==_)||("string"===this.options.to?this.onData(l.buf2binstring(u.shrinkBuf(i.output,i.next_out))):this.onData(u.shrinkBuf(i.output,i.next_out)))}while((i.avail_in>0||0===i.avail_out)&&r!==g);return n===p?(r=o.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m):n===_?(this.onEnd(m),i.avail_out=0,!0):!0},n.prototype.onData=function(t){this.chunks.push(t)},n.prototype.onEnd=function(t){t===m&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=u.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},r.Deflate=n,r.deflate=i,r.deflateRaw=a,r.gzip=s},{"./utils/common":41,"./utils/strings":42,"./zlib/deflate":46,"./zlib/messages":51,"./zlib/zstream":53}],40:[function(t,e,r){"use strict";function n(t){if(!(this instanceof n))return new n(t);this.options=o.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0===(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new f,this.strm.avail_out=0;var r=s.inflateInit2(this.strm,e.windowBits);if(r!==l.Z_OK)throw new Error(c[r]);this.header=new h,s.inflateGetHeader(this.strm,this.header)}function i(t,e){var r=new n(e);if(r.push(t,!0),r.err)throw r.msg;return r.result}function a(t,e){return e=e||{},e.raw=!0,i(t,e)}var s=t("./zlib/inflate"),o=t("./utils/common"),u=t("./utils/strings"),l=t("./zlib/constants"),c=t("./zlib/messages"),f=t("./zlib/zstream"),h=t("./zlib/gzheader"),d=Object.prototype.toString;n.prototype.push=function(t,e){var r,n,i,a,c,f,h=this.strm,p=this.options.chunkSize,m=this.options.dictionary,g=!1;if(this.ended)return!1;n=e===~~e?e:e===!0?l.Z_FINISH:l.Z_NO_FLUSH,"string"==typeof t?h.input=u.binstring2buf(t):"[object ArrayBuffer]"===d.call(t)?h.input=new Uint8Array(t):h.input=t,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new o.Buf8(p),h.next_out=0,h.avail_out=p),r=s.inflate(h,l.Z_NO_FLUSH),r===l.Z_NEED_DICT&&m&&(f="string"==typeof m?u.string2buf(m):"[object ArrayBuffer]"===d.call(m)?new Uint8Array(m):m,r=s.inflateSetDictionary(this.strm,f)),r===l.Z_BUF_ERROR&&g===!0&&(r=l.Z_OK,g=!1),r!==l.Z_STREAM_END&&r!==l.Z_OK)return this.onEnd(r),this.ended=!0,!1;h.next_out&&(0!==h.avail_out&&r!==l.Z_STREAM_END&&(0!==h.avail_in||n!==l.Z_FINISH&&n!==l.Z_SYNC_FLUSH)||("string"===this.options.to?(i=u.utf8border(h.output,h.next_out),a=h.next_out-i,c=u.buf2string(h.output,i),h.next_out=a,h.avail_out=p-a,a&&o.arraySet(h.output,h.output,i,a,0),this.onData(c)):this.onData(o.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(g=!0)}while((h.avail_in>0||0===h.avail_out)&&r!==l.Z_STREAM_END);return r===l.Z_STREAM_END&&(n=l.Z_FINISH),n===l.Z_FINISH?(r=s.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l.Z_OK):n===l.Z_SYNC_FLUSH?(this.onEnd(l.Z_OK),h.avail_out=0,!0):!0},n.prototype.onData=function(t){this.chunks.push(t)},n.prototype.onEnd=function(t){t===l.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},r.Inflate=n,r.inflate=i,r.inflateRaw=a,r.ungzip=i},{"./utils/common":41,"./utils/strings":42,"./zlib/constants":44,"./zlib/gzheader":47,"./zlib/inflate":49,"./zlib/messages":51,"./zlib/zstream":53}],41:[function(t,e,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;r.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var r=e.shift();if(r){if("object"!=typeof r)throw new TypeError(r+"must be non-object");for(var n in r)r.hasOwnProperty(n)&&(t[n]=r[n])}}return t},r.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)};var i={arraySet:function(t,e,r,n,i){if(e.subarray&&t.subarray)return void t.set(e.subarray(r,r+n),i);for(var a=0;n>a;a++)t[i+a]=e[r+a]},flattenChunks:function(t){var e,r,n,i,a,s;for(n=0,e=0,r=t.length;r>e;e++)n+=t[e].length;for(s=new Uint8Array(n),i=0,e=0,r=t.length;r>e;e++)a=t[e],s.set(a,i),i+=a.length;return s}},a={arraySet:function(t,e,r,n,i){for(var a=0;n>a;a++)t[i+a]=e[r+a]},flattenChunks:function(t){return[].concat.apply([],t)}};r.setTyped=function(t){t?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,a))},r.setTyped(n)},{}],42:[function(t,e,r){"use strict";function n(t,e){if(65537>e&&(t.subarray&&s||!t.subarray&&a))return String.fromCharCode.apply(null,i.shrinkBuf(t,e));for(var r="",n=0;e>n;n++)r+=String.fromCharCode(t[n]);return r}var i=t("./common"),a=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(o){a=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(o){s=!1}for(var u=new i.Buf8(256),l=0;256>l;l++)u[l]=l>=252?6:l>=248?5:l>=240?4:l>=224?3:l>=192?2:1;u[254]=u[254]=1,r.string2buf=function(t){var e,r,n,a,s,o=t.length,u=0;for(a=0;o>a;a++)r=t.charCodeAt(a),55296===(64512&r)&&o>a+1&&(n=t.charCodeAt(a+1),56320===(64512&n)&&(r=65536+(r-55296<<10)+(n-56320),a++)),u+=128>r?1:2048>r?2:65536>r?3:4;for(e=new i.Buf8(u),s=0,a=0;u>s;a++)r=t.charCodeAt(a),55296===(64512&r)&&o>a+1&&(n=t.charCodeAt(a+1),56320===(64512&n)&&(r=65536+(r-55296<<10)+(n-56320),a++)),128>r?e[s++]=r:2048>r?(e[s++]=192|r>>>6,e[s++]=128|63&r):65536>r?(e[s++]=224|r>>>12,e[s++]=128|r>>>6&63,e[s++]=128|63&r):(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63,e[s++]=128|r>>>6&63,e[s++]=128|63&r);return e},r.buf2binstring=function(t){return n(t,t.length)},r.binstring2buf=function(t){for(var e=new i.Buf8(t.length),r=0,n=e.length;n>r;r++)e[r]=t.charCodeAt(r);return e},r.buf2string=function(t,e){var r,i,a,s,o=e||t.length,l=new Array(2*o);for(i=0,r=0;o>r;)if(a=t[r++],128>a)l[i++]=a;else if(s=u[a],s>4)l[i++]=65533,r+=s-1;else{for(a&=2===s?31:3===s?15:7;s>1&&o>r;)a=a<<6|63&t[r++],s--;s>1?l[i++]=65533:65536>a?l[i++]=a:(a-=65536,l[i++]=55296|a>>10&1023,l[i++]=56320|1023&a)}return n(l,i)},r.utf8border=function(t,e){var r;for(e=e||t.length,e>t.length&&(e=t.length),r=e-1;r>=0&&128===(192&t[r]);)r--;return 0>r?e:0===r?e:r+u[t[r]]>e?r:e}},{"./common":41}],43:[function(t,e,r){"use strict";function n(t,e,r,n){for(var i=65535&t|0,a=t>>>16&65535|0,s=0;0!==r;){s=r>2e3?2e3:r,r-=s;do i=i+e[n++]|0,a=a+i|0;while(--s);i%=65521,a%=65521}return i|a<<16|0}e.exports=n},{}],44:[function(t,e,r){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(t,e,r){"use strict";function n(){for(var t,e=[],r=0;256>r;r++){t=r;for(var n=0;8>n;n++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t}return e}function i(t,e,r,n){var i=a,s=n+r;t^=-1;for(var o=n;s>o;o++)t=t>>>8^i[255&(t^e[o])];return-1^t}var a=n();e.exports=i},{}],46:[function(t,e,r){"use strict";function n(t,e){return t.msg=N[e],e}function i(t){return(t<<1)-(t>4?9:0)}function a(t){for(var e=t.length;--e>=0;)t[e]=0}function s(t){var e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),0!==r&&(z.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,0===e.pending&&(e.pending_out=0))}function o(t,e){T._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,s(t.strm)}function u(t,e){t.pending_buf[t.pending++]=e}function l(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function c(t,e,r,n){var i=t.avail_in;return i>n&&(i=n),0===i?0:(t.avail_in-=i,z.arraySet(e,t.input,t.next_in,i,r),1===t.state.wrap?t.adler=F(t.adler,e,i,r):2===t.state.wrap&&(t.adler=B(t.adler,e,i,r)),t.next_in+=i,t.total_in+=i,i)}function f(t,e){var r,n,i=t.max_chain_length,a=t.strstart,s=t.prev_length,o=t.nice_match,u=t.strstart>t.w_size-ft?t.strstart-(t.w_size-ft):0,l=t.window,c=t.w_mask,f=t.prev,h=t.strstart+ct,d=l[a+s-1],p=l[a+s];t.prev_length>=t.good_match&&(i>>=2),o>t.lookahead&&(o=t.lookahead);do if(r=e,l[r+s]===p&&l[r+s-1]===d&&l[r]===l[a]&&l[++r]===l[a+1]){a+=2,r++;do;while(l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&h>a);if(n=ct-(h-a),a=h-ct,n>s){if(t.match_start=e,s=n,n>=o)break;d=l[a+s-1],p=l[a+s]}}while((e=f[e&c])>u&&0!==--i);return s<=t.lookahead?s:t.lookahead}function h(t){var e,r,n,i,a,s=t.w_size;do{if(i=t.window_size-t.lookahead-t.strstart,t.strstart>=s+(s-ft)){z.arraySet(t.window,t.window,s,s,0),t.match_start-=s,t.strstart-=s,t.block_start-=s,r=t.hash_size,e=r;do n=t.head[--e],t.head[e]=n>=s?n-s:0;while(--r);r=s,e=r;do n=t.prev[--e],t.prev[e]=n>=s?n-s:0;while(--r);i+=s}if(0===t.strm.avail_in)break;if(r=c(t.strm,t.window,t.strstart+t.lookahead,i),t.lookahead+=r,t.lookahead+t.insert>=lt)for(a=t.strstart-t.insert,t.ins_h=t.window[a],t.ins_h=(t.ins_h<<t.hash_shift^t.window[a+1])&t.hash_mask;t.insert&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[a+lt-1])&t.hash_mask,t.prev[a&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=a,a++,t.insert--,!(t.lookahead+t.insert<lt)););}while(t.lookahead<ft&&0!==t.strm.avail_in)}function d(t,e){var r=65535;for(r>t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(h(t),0===t.lookahead&&e===D)return wt;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var n=t.block_start+r;if((0===t.strstart||t.strstart>=n)&&(t.lookahead=t.strstart-n,t.strstart=n,o(t,!1),0===t.strm.avail_out))return wt;if(t.strstart-t.block_start>=t.w_size-ft&&(o(t,!1),0===t.strm.avail_out))return wt}return t.insert=0,e===L?(o(t,!0),0===t.strm.avail_out?kt:xt):t.strstart>t.block_start&&(o(t,!1),0===t.strm.avail_out)?wt:wt}function p(t,e){for(var r,n;;){if(t.lookahead<ft){if(h(t),t.lookahead<ft&&e===D)return wt;if(0===t.lookahead)break}if(r=0,t.lookahead>=lt&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+lt-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),0!==r&&t.strstart-r<=t.w_size-ft&&(t.match_length=f(t,r)),t.match_length>=lt)if(n=T._tr_tally(t,t.strstart-t.match_start,t.match_length-lt),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=lt){t.match_length--;do t.strstart++,t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+lt-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart;while(0!==--t.match_length);t.strstart++}else t.strstart+=t.match_length,t.match_length=0,t.ins_h=t.window[t.strstart],t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+1])&t.hash_mask;else n=T._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++;if(n&&(o(t,!1),0===t.strm.avail_out))return wt}return t.insert=t.strstart<lt-1?t.strstart:lt-1,e===L?(o(t,!0),0===t.strm.avail_out?kt:xt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?wt:bt}function m(t,e){for(var r,n,i;;){if(t.lookahead<ft){if(h(t),t.lookahead<ft&&e===D)return wt;if(0===t.lookahead)break}if(r=0,t.lookahead>=lt&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+lt-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart),t.prev_length=t.match_length,t.prev_match=t.match_start,t.match_length=lt-1,0!==r&&t.prev_length<t.max_lazy_match&&t.strstart-r<=t.w_size-ft&&(t.match_length=f(t,r),t.match_length<=5&&(t.strategy===G||t.match_length===lt&&t.strstart-t.match_start>4096)&&(t.match_length=lt-1)),t.prev_length>=lt&&t.match_length<=t.prev_length){i=t.strstart+t.lookahead-lt,n=T._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-lt),t.lookahead-=t.prev_length-1,t.prev_length-=2;do++t.strstart<=i&&(t.ins_h=(t.ins_h<<t.hash_shift^t.window[t.strstart+lt-1])&t.hash_mask,r=t.prev[t.strstart&t.w_mask]=t.head[t.ins_h],t.head[t.ins_h]=t.strstart);while(0!==--t.prev_length);if(t.match_available=0,t.match_length=lt-1,t.strstart++,n&&(o(t,!1),0===t.strm.avail_out))return wt}else if(t.match_available){if(n=T._tr_tally(t,0,t.window[t.strstart-1]),n&&o(t,!1),t.strstart++,t.lookahead--,0===t.strm.avail_out)return wt}else t.match_available=1,t.strstart++,t.lookahead--}return t.match_available&&(n=T._tr_tally(t,0,t.window[t.strstart-1]),t.match_available=0),t.insert=t.strstart<lt-1?t.strstart:lt-1,e===L?(o(t,!0),0===t.strm.avail_out?kt:xt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?wt:bt}function g(t,e){for(var r,n,i,a,s=t.window;;){if(t.lookahead<=ct){if(h(t),t.lookahead<=ct&&e===D)return wt;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=lt&&t.strstart>0&&(i=t.strstart-1,n=s[i],n===s[++i]&&n===s[++i]&&n===s[++i])){a=t.strstart+ct;do;while(n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&n===s[++i]&&a>i);t.match_length=ct-(a-i),t.match_length>t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=lt?(r=T._tr_tally(t,1,t.match_length-lt),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=T._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(o(t,!1),0===t.strm.avail_out))return wt}return t.insert=0,e===L?(o(t,!0),0===t.strm.avail_out?kt:xt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?wt:bt}function _(t,e){for(var r;;){if(0===t.lookahead&&(h(t),0===t.lookahead)){if(e===D)return wt;break}if(t.match_length=0,r=T._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(o(t,!1),0===t.strm.avail_out))return wt}return t.insert=0,e===L?(o(t,!0),0===t.strm.avail_out?kt:xt):t.last_lit&&(o(t,!1),0===t.strm.avail_out)?wt:bt}function y(t,e,r,n,i){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=n,this.func=i}function v(t){t.window_size=2*t.w_size,a(t.head),t.max_lazy_match=O[t.level].max_lazy,t.good_match=O[t.level].good_length,t.nice_match=O[t.level].nice_length,t.max_chain_length=O[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=lt-1,t.match_available=0,t.ins_h=0}function w(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=$,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new z.Buf16(2*ot),this.dyn_dtree=new z.Buf16(2*(2*at+1)),this.bl_tree=new z.Buf16(2*(2*st+1)),a(this.dyn_ltree),a(this.dyn_dtree),a(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new z.Buf16(ut+1),this.heap=new z.Buf16(2*it+1),a(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new z.Buf16(2*it+1),a(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function b(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=J,e=t.state,e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?dt:yt,t.adler=2===e.wrap?0:1,e.last_flush=D,T._tr_init(e),P):n(t,W)}function k(t){var e=b(t);return e===P&&v(t.state),e}function x(t,e){return t&&t.state?2!==t.state.wrap?W:(t.state.gzhead=e,P):W}function A(t,e,r,i,a,s){if(!t)return W;var o=1;if(e===Y&&(e=6),0>i?(o=0,i=-i):i>15&&(o=2,i-=16),1>a||a>Q||r!==$||8>i||i>15||0>e||e>9||0>s||s>V)return n(t,W);8===i&&(i=9);var u=new w;return t.state=u,u.strm=t,u.wrap=o,u.gzhead=null,u.w_bits=i,u.w_size=1<<u.w_bits,u.w_mask=u.w_size-1,u.hash_bits=a+7,u.hash_size=1<<u.hash_bits,u.hash_mask=u.hash_size-1,u.hash_shift=~~((u.hash_bits+lt-1)/lt),u.window=new z.Buf8(2*u.w_size),u.head=new z.Buf16(u.hash_size),u.prev=new z.Buf16(u.w_size),u.lit_bufsize=1<<a+6,u.pending_buf_size=4*u.lit_bufsize,u.pending_buf=new z.Buf8(u.pending_buf_size),u.d_buf=u.lit_bufsize>>1,u.l_buf=3*u.lit_bufsize,u.level=e,u.strategy=s,u.method=r,k(t)}function S(t,e){return A(t,e,$,tt,et,X)}function C(t,e){var r,o,c,f;if(!t||!t.state||e>U||0>e)return t?n(t,W):W;if(o=t.state,!t.output||!t.input&&0!==t.avail_in||o.status===vt&&e!==L)return n(t,0===t.avail_out?H:W);if(o.strm=t,r=o.last_flush,o.last_flush=e,o.status===dt)if(2===o.wrap)t.adler=0,u(o,31),u(o,139),u(o,8),o.gzhead?(u(o,(o.gzhead.text?1:0)+(o.gzhead.hcrc?2:0)+(o.gzhead.extra?4:0)+(o.gzhead.name?8:0)+(o.gzhead.comment?16:0)),u(o,255&o.gzhead.time),u(o,o.gzhead.time>>8&255),u(o,o.gzhead.time>>16&255),u(o,o.gzhead.time>>24&255),u(o,9===o.level?2:o.strategy>=K||o.level<2?4:0),u(o,255&o.gzhead.os),o.gzhead.extra&&o.gzhead.extra.length&&(u(o,255&o.gzhead.extra.length),u(o,o.gzhead.extra.length>>8&255)),o.gzhead.hcrc&&(t.adler=B(t.adler,o.pending_buf,o.pending,0)),o.gzindex=0,o.status=pt):(u(o,0),u(o,0),u(o,0),u(o,0),u(o,0),u(o,9===o.level?2:o.strategy>=K||o.level<2?4:0),u(o,At),o.status=yt);else{var h=$+(o.w_bits-8<<4)<<8,d=-1;d=o.strategy>=K||o.level<2?0:o.level<6?1:6===o.level?2:3,h|=d<<6,0!==o.strstart&&(h|=ht),h+=31-h%31,o.status=yt,l(o,h),0!==o.strstart&&(l(o,t.adler>>>16),l(o,65535&t.adler)),t.adler=1}if(o.status===pt)if(o.gzhead.extra){for(c=o.pending;o.gzindex<(65535&o.gzhead.extra.length)&&(o.pending!==o.pending_buf_size||(o.gzhead.hcrc&&o.pending>c&&(t.adler=B(t.adler,o.pending_buf,o.pending-c,c)),s(t),c=o.pending,o.pending!==o.pending_buf_size));)u(o,255&o.gzhead.extra[o.gzindex]),o.gzindex++;o.gzhead.hcrc&&o.pending>c&&(t.adler=B(t.adler,o.pending_buf,o.pending-c,c)),o.gzindex===o.gzhead.extra.length&&(o.gzindex=0,o.status=mt)}else o.status=mt;if(o.status===mt)if(o.gzhead.name){c=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>c&&(t.adler=B(t.adler,o.pending_buf,o.pending-c,c)),s(t),c=o.pending,o.pending===o.pending_buf_size)){f=1;break}f=o.gzindex<o.gzhead.name.length?255&o.gzhead.name.charCodeAt(o.gzindex++):0,u(o,f)}while(0!==f);o.gzhead.hcrc&&o.pending>c&&(t.adler=B(t.adler,o.pending_buf,o.pending-c,c)),0===f&&(o.gzindex=0,o.status=gt)}else o.status=gt;if(o.status===gt)if(o.gzhead.comment){c=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>c&&(t.adler=B(t.adler,o.pending_buf,o.pending-c,c)),s(t),c=o.pending,o.pending===o.pending_buf_size)){f=1;break}f=o.gzindex<o.gzhead.comment.length?255&o.gzhead.comment.charCodeAt(o.gzindex++):0,u(o,f)}while(0!==f);o.gzhead.hcrc&&o.pending>c&&(t.adler=B(t.adler,o.pending_buf,o.pending-c,c)),0===f&&(o.status=_t)}else o.status=_t;if(o.status===_t&&(o.gzhead.hcrc?(o.pending+2>o.pending_buf_size&&s(t),o.pending+2<=o.pending_buf_size&&(u(o,255&t.adler),u(o,t.adler>>8&255),t.adler=0,o.status=yt)):o.status=yt),0!==o.pending){if(s(t),0===t.avail_out)return o.last_flush=-1,P}else if(0===t.avail_in&&i(e)<=i(r)&&e!==L)return n(t,H);if(o.status===vt&&0!==t.avail_in)return n(t,H);if(0!==t.avail_in||0!==o.lookahead||e!==D&&o.status!==vt){var p=o.strategy===K?_(o,e):o.strategy===q?g(o,e):O[o.level].func(o,e);if(p!==kt&&p!==xt||(o.status=vt),p===wt||p===kt)return 0===t.avail_out&&(o.last_flush=-1),P;if(p===bt&&(e===j?T._tr_align(o):e!==U&&(T._tr_stored_block(o,0,0,!1),e===R&&(a(o.head),0===o.lookahead&&(o.strstart=0,o.block_start=0,o.insert=0))),s(t),0===t.avail_out))return o.last_flush=-1,P}return e!==L?P:o.wrap<=0?M:(2===o.wrap?(u(o,255&t.adler),u(o,t.adler>>8&255),u(o,t.adler>>16&255),u(o,t.adler>>24&255),u(o,255&t.total_in),u(o,t.total_in>>8&255),u(o,t.total_in>>16&255),u(o,t.total_in>>24&255)):(l(o,t.adler>>>16),l(o,65535&t.adler)),s(t),o.wrap>0&&(o.wrap=-o.wrap),0!==o.pending?P:M)}function E(t){var e;return t&&t.state?(e=t.state.status,e!==dt&&e!==pt&&e!==mt&&e!==gt&&e!==_t&&e!==yt&&e!==vt?n(t,W):(t.state=null,e===yt?n(t,Z):P)):W}function I(t,e){var r,n,i,s,o,u,l,c,f=e.length;if(!t||!t.state)return W;if(r=t.state,s=r.wrap,2===s||1===s&&r.status!==dt||r.lookahead)return W;for(1===s&&(t.adler=F(t.adler,e,f,0)),r.wrap=0,f>=r.w_size&&(0===s&&(a(r.head),r.strstart=0,r.block_start=0,r.insert=0),c=new z.Buf8(r.w_size),z.arraySet(c,e,f-r.w_size,r.w_size,0),e=c,f=r.w_size),o=t.avail_in,u=t.next_in,l=t.input,t.avail_in=f,t.next_in=0,t.input=e,h(r);r.lookahead>=lt;){n=r.strstart,i=r.lookahead-(lt-1);do r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+lt-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++;while(--i);r.strstart=n,r.lookahead=lt-1,h(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=lt-1,r.match_available=0,t.next_in=u,t.input=l,t.avail_in=o,r.wrap=s,P}var O,z=t("../utils/common"),T=t("./trees"),F=t("./adler32"),B=t("./crc32"),N=t("./messages"),D=0,j=1,R=3,L=4,U=5,P=0,M=1,W=-2,Z=-3,H=-5,Y=-1,G=1,K=2,q=3,V=4,X=0,J=2,$=8,Q=9,tt=15,et=8,rt=29,nt=256,it=nt+1+rt,at=30,st=19,ot=2*it+1,ut=15,lt=3,ct=258,ft=ct+lt+1,ht=32,dt=42,pt=69,mt=73,gt=91,_t=103,yt=113,vt=666,wt=1,bt=2,kt=3,xt=4,At=3;O=[new y(0,0,0,0,d),new y(4,4,8,4,p),new y(4,5,16,8,p),new y(4,6,32,32,p),new y(4,4,16,16,m),new y(8,16,32,32,m),new y(8,16,128,128,m),new y(8,32,128,256,m),new y(32,128,258,1024,m),new y(32,258,258,4096,m)],r.deflateInit=S,r.deflateInit2=A,r.deflateReset=k,r.deflateResetKeep=b,r.deflateSetHeader=x,r.deflate=C,r.deflateEnd=E,r.deflateSetDictionary=I,r.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./messages":51,"./trees":52}],47:[function(t,e,r){"use strict";function n(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}e.exports=n},{}],48:[function(t,e,r){"use strict";var n=30,i=12;e.exports=function(t,e){var r,a,s,o,u,l,c,f,h,d,p,m,g,_,y,v,w,b,k,x,A,S,C,E,I;r=t.state,a=t.next_in,E=t.input,s=a+(t.avail_in-5),o=t.next_out,I=t.output,u=o-(e-t.avail_out),l=o+(t.avail_out-257),c=r.dmax,f=r.wsize,h=r.whave,d=r.wnext,p=r.window,m=r.hold,g=r.bits,_=r.lencode,y=r.distcode,v=(1<<r.lenbits)-1,w=(1<<r.distbits)-1;t:do{15>g&&(m+=E[a++]<<g,g+=8,m+=E[a++]<<g,g+=8),b=_[m&v];e:for(;;){if(k=b>>>24,m>>>=k,g-=k,k=b>>>16&255,0===k)I[o++]=65535&b;else{if(!(16&k)){if(0===(64&k)){b=_[(65535&b)+(m&(1<<k)-1)];continue e}if(32&k){r.mode=i;break t}t.msg="invalid literal/length code",r.mode=n;break t}x=65535&b,k&=15,k&&(k>g&&(m+=E[a++]<<g,g+=8),x+=m&(1<<k)-1,m>>>=k,g-=k),15>g&&(m+=E[a++]<<g,g+=8,m+=E[a++]<<g,g+=8),b=y[m&w];r:for(;;){if(k=b>>>24,m>>>=k,g-=k,k=b>>>16&255,!(16&k)){if(0===(64&k)){b=y[(65535&b)+(m&(1<<k)-1)];continue r}t.msg="invalid distance code",r.mode=n;break t}if(A=65535&b,k&=15,k>g&&(m+=E[a++]<<g,g+=8,k>g&&(m+=E[a++]<<g,g+=8)),A+=m&(1<<k)-1,A>c){t.msg="invalid distance too far back",r.mode=n;break t}if(m>>>=k,g-=k,k=o-u,A>k){if(k=A-k,k>h&&r.sane){t.msg="invalid distance too far back",r.mode=n;break t}if(S=0,C=p,0===d){if(S+=f-k,x>k){x-=k;do I[o++]=p[S++];while(--k);S=o-A,C=I}}else if(k>d){if(S+=f+d-k,k-=d,x>k){x-=k;do I[o++]=p[S++];while(--k);if(S=0,x>d){k=d,x-=k;do I[o++]=p[S++];while(--k);S=o-A,C=I}}}else if(S+=d-k,x>k){x-=k;do I[o++]=p[S++];while(--k);S=o-A,C=I}for(;x>2;)I[o++]=C[S++],I[o++]=C[S++],I[o++]=C[S++],x-=3;x&&(I[o++]=C[S++],x>1&&(I[o++]=C[S++]))}else{S=o-A;do I[o++]=I[S++],I[o++]=I[S++],I[o++]=I[S++],x-=3;while(x>2);x&&(I[o++]=I[S++],x>1&&(I[o++]=I[S++]))}break}}break}}while(s>a&&l>o);x=g>>3,a-=x,g-=x<<3,m&=(1<<g)-1,t.next_in=a,t.next_out=o,t.avail_in=s>a?5+(s-a):5-(a-s),t.avail_out=l>o?257+(l-o):257-(o-l),r.hold=m,r.bits=g}},{}],49:[function(t,e,r){"use strict";function n(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function i(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new y.Buf16(320),this.work=new y.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=R,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new y.Buf32(mt),e.distcode=e.distdyn=new y.Buf32(gt),e.sane=1,e.back=-1,O):F}function s(t){var e;return t&&t.state?(e=t.state,e.wsize=0,e.whave=0,e.wnext=0,a(t)):F}function o(t,e){var r,n;return t&&t.state?(n=t.state,0>e?(r=0,e=-e):(r=(e>>4)+1,48>e&&(e&=15)),e&&(8>e||e>15)?F:(null!==n.window&&n.wbits!==e&&(n.window=null),n.wrap=r,n.wbits=e,s(t))):F}function u(t,e){var r,n;return t?(n=new i,t.state=n,n.window=null,r=o(t,e),r!==O&&(t.state=null),r):F}function l(t){return u(t,yt)}function c(t){if(vt){var e;for(g=new y.Buf32(512),_=new y.Buf32(32),e=0;144>e;)t.lens[e++]=8;for(;256>e;)t.lens[e++]=9;for(;280>e;)t.lens[e++]=7;for(;288>e;)t.lens[e++]=8;for(k(A,t.lens,0,288,g,0,t.work,{bits:9}),e=0;32>e;)t.lens[e++]=5;k(S,t.lens,0,32,_,0,t.work,{bits:5}),vt=!1}t.lencode=g,t.lenbits=9,t.distcode=_,t.distbits=5}function f(t,e,r,n){var i,a=t.state;return null===a.window&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new y.Buf8(a.wsize)),n>=a.wsize?(y.arraySet(a.window,e,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(i=a.wsize-a.wnext,i>n&&(i=n),y.arraySet(a.window,e,r-n,i,a.wnext),n-=i,n?(y.arraySet(a.window,e,r-n,n,0),a.wnext=n,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=i))),0}function h(t,e){var r,i,a,s,o,u,l,h,d,p,m,g,_,mt,gt,_t,yt,vt,wt,bt,kt,xt,At,St,Ct=0,Et=new y.Buf8(4),It=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return F;r=t.state,r.mode===q&&(r.mode=V),o=t.next_out,a=t.output,l=t.avail_out,s=t.next_in,i=t.input,u=t.avail_in,h=r.hold,d=r.bits,p=u,m=l,xt=O;t:for(;;)switch(r.mode){case R:if(0===r.wrap){r.mode=V;break}for(;16>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}if(2&r.wrap&&35615===h){r.check=0,Et[0]=255&h,Et[1]=h>>>8&255,r.check=w(r.check,Et,2,0),h=0,d=0,r.mode=L;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&h)<<8)+(h>>8))%31){t.msg="incorrect header check",r.mode=ht;break}if((15&h)!==j){t.msg="unknown compression method",r.mode=ht;break}if(h>>>=4,d-=4,kt=(15&h)+8,0===r.wbits)r.wbits=kt;else if(kt>r.wbits){t.msg="invalid window size",r.mode=ht;break}r.dmax=1<<kt,t.adler=r.check=1,r.mode=512&h?G:q,h=0,d=0;break;case L:for(;16>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}if(r.flags=h,(255&r.flags)!==j){t.msg="unknown compression method",r.mode=ht;break}if(57344&r.flags){t.msg="unknown header flags set",r.mode=ht;break}r.head&&(r.head.text=h>>8&1),512&r.flags&&(Et[0]=255&h,Et[1]=h>>>8&255,r.check=w(r.check,Et,2,0)),h=0,d=0,r.mode=U;case U:for(;32>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}r.head&&(r.head.time=h),512&r.flags&&(Et[0]=255&h,Et[1]=h>>>8&255,Et[2]=h>>>16&255,Et[3]=h>>>24&255,r.check=w(r.check,Et,4,0)),h=0,d=0,r.mode=P;case P:for(;16>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}r.head&&(r.head.xflags=255&h,r.head.os=h>>8),512&r.flags&&(Et[0]=255&h,Et[1]=h>>>8&255,r.check=w(r.check,Et,2,0)),h=0,d=0,r.mode=M;case M:if(1024&r.flags){for(;16>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}r.length=h,r.head&&(r.head.extra_len=h),512&r.flags&&(Et[0]=255&h,Et[1]=h>>>8&255,r.check=w(r.check,Et,2,0)),h=0,d=0}else r.head&&(r.head.extra=null);r.mode=W;case W:if(1024&r.flags&&(g=r.length,g>u&&(g=u),g&&(r.head&&(kt=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),y.arraySet(r.head.extra,i,s,g,kt)),512&r.flags&&(r.check=w(r.check,i,g,s)),u-=g,s+=g,r.length-=g),r.length))break t;r.length=0,r.mode=Z;case Z:if(2048&r.flags){if(0===u)break t;g=0;do kt=i[s+g++],r.head&&kt&&r.length<65536&&(r.head.name+=String.fromCharCode(kt));while(kt&&u>g);if(512&r.flags&&(r.check=w(r.check,i,g,s)),u-=g,s+=g,kt)break t}else r.head&&(r.head.name=null);r.length=0,r.mode=H;case H:if(4096&r.flags){if(0===u)break t;g=0;do kt=i[s+g++],r.head&&kt&&r.length<65536&&(r.head.comment+=String.fromCharCode(kt));while(kt&&u>g);if(512&r.flags&&(r.check=w(r.check,i,g,s)),u-=g,s+=g,kt)break t}else r.head&&(r.head.comment=null);r.mode=Y;case Y:if(512&r.flags){for(;16>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}if(h!==(65535&r.check)){t.msg="header crc mismatch",r.mode=ht;break}h=0,d=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=q;break;case G:for(;32>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}t.adler=r.check=n(h),h=0,d=0,r.mode=K;case K:if(0===r.havedict)return t.next_out=o,t.avail_out=l,t.next_in=s,t.avail_in=u,r.hold=h,r.bits=d,T;t.adler=r.check=1,r.mode=q;case q:if(e===E||e===I)break t;case V:if(r.last){h>>>=7&d,d-=7&d,r.mode=lt;break}for(;3>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}switch(r.last=1&h,h>>>=1,d-=1,3&h){case 0:r.mode=X;break;case 1:if(c(r),r.mode=rt,e===I){h>>>=2,d-=2;break t}break;case 2:r.mode=Q;break;case 3:t.msg="invalid block type",r.mode=ht}h>>>=2,d-=2;break;case X:for(h>>>=7&d,d-=7&d;32>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}if((65535&h)!==(h>>>16^65535)){t.msg="invalid stored block lengths",r.mode=ht;break}if(r.length=65535&h,h=0,d=0,r.mode=J,e===I)break t;case J:r.mode=$;case $:if(g=r.length){if(g>u&&(g=u),g>l&&(g=l),0===g)break t;y.arraySet(a,i,s,g,o),u-=g,s+=g,l-=g,o+=g,r.length-=g;break}r.mode=q;break;case Q:for(;14>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}if(r.nlen=(31&h)+257,h>>>=5,d-=5,r.ndist=(31&h)+1,h>>>=5,d-=5,r.ncode=(15&h)+4,h>>>=4,d-=4,r.nlen>286||r.ndist>30){t.msg="too many length or distance symbols",r.mode=ht;break}r.have=0,r.mode=tt;case tt:for(;r.have<r.ncode;){for(;3>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}r.lens[It[r.have++]]=7&h,h>>>=3,d-=3}for(;r.have<19;)r.lens[It[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,At={bits:r.lenbits},xt=k(x,r.lens,0,19,r.lencode,0,r.work,At),r.lenbits=At.bits,xt){t.msg="invalid code lengths set",r.mode=ht;break}r.have=0,r.mode=et;case et:for(;r.have<r.nlen+r.ndist;){for(;Ct=r.lencode[h&(1<<r.lenbits)-1],gt=Ct>>>24,_t=Ct>>>16&255,yt=65535&Ct,!(d>=gt);){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}if(16>yt)h>>>=gt,d-=gt,r.lens[r.have++]=yt;else{if(16===yt){for(St=gt+2;St>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}if(h>>>=gt,d-=gt,0===r.have){t.msg="invalid bit length repeat",r.mode=ht;break}kt=r.lens[r.have-1],g=3+(3&h),h>>>=2,d-=2}else if(17===yt){for(St=gt+3;St>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}h>>>=gt,d-=gt,kt=0,g=3+(7&h),h>>>=3,d-=3}else{for(St=gt+7;St>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}h>>>=gt,d-=gt,kt=0,g=11+(127&h),h>>>=7,d-=7}if(r.have+g>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=ht;break}for(;g--;)r.lens[r.have++]=kt}}if(r.mode===ht)break;if(0===r.lens[256]){t.msg="invalid code -- missing end-of-block",r.mode=ht;break}if(r.lenbits=9,At={bits:r.lenbits},xt=k(A,r.lens,0,r.nlen,r.lencode,0,r.work,At),r.lenbits=At.bits,xt){t.msg="invalid literal/lengths set",r.mode=ht;break}if(r.distbits=6,r.distcode=r.distdyn,At={bits:r.distbits},xt=k(S,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,At),r.distbits=At.bits,xt){t.msg="invalid distances set",r.mode=ht;break}if(r.mode=rt,e===I)break t;case rt:r.mode=nt;case nt:if(u>=6&&l>=258){t.next_out=o,t.avail_out=l,t.next_in=s,t.avail_in=u,r.hold=h,r.bits=d,b(t,m),o=t.next_out,a=t.output,l=t.avail_out,s=t.next_in,i=t.input,u=t.avail_in,h=r.hold,d=r.bits,r.mode===q&&(r.back=-1);break}for(r.back=0;Ct=r.lencode[h&(1<<r.lenbits)-1],gt=Ct>>>24,_t=Ct>>>16&255,yt=65535&Ct,!(d>=gt);){if(0===u)break t;u--,h+=i[s++]<<d,
+d+=8}if(_t&&0===(240&_t)){for(vt=gt,wt=_t,bt=yt;Ct=r.lencode[bt+((h&(1<<vt+wt)-1)>>vt)],gt=Ct>>>24,_t=Ct>>>16&255,yt=65535&Ct,!(d>=vt+gt);){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}h>>>=vt,d-=vt,r.back+=vt}if(h>>>=gt,d-=gt,r.back+=gt,r.length=yt,0===_t){r.mode=ut;break}if(32&_t){r.back=-1,r.mode=q;break}if(64&_t){t.msg="invalid literal/length code",r.mode=ht;break}r.extra=15&_t,r.mode=it;case it:if(r.extra){for(St=r.extra;St>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}r.length+=h&(1<<r.extra)-1,h>>>=r.extra,d-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=at;case at:for(;Ct=r.distcode[h&(1<<r.distbits)-1],gt=Ct>>>24,_t=Ct>>>16&255,yt=65535&Ct,!(d>=gt);){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}if(0===(240&_t)){for(vt=gt,wt=_t,bt=yt;Ct=r.distcode[bt+((h&(1<<vt+wt)-1)>>vt)],gt=Ct>>>24,_t=Ct>>>16&255,yt=65535&Ct,!(d>=vt+gt);){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}h>>>=vt,d-=vt,r.back+=vt}if(h>>>=gt,d-=gt,r.back+=gt,64&_t){t.msg="invalid distance code",r.mode=ht;break}r.offset=yt,r.extra=15&_t,r.mode=st;case st:if(r.extra){for(St=r.extra;St>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}r.offset+=h&(1<<r.extra)-1,h>>>=r.extra,d-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=ht;break}r.mode=ot;case ot:if(0===l)break t;if(g=m-l,r.offset>g){if(g=r.offset-g,g>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=ht;break}g>r.wnext?(g-=r.wnext,_=r.wsize-g):_=r.wnext-g,g>r.length&&(g=r.length),mt=r.window}else mt=a,_=o-r.offset,g=r.length;g>l&&(g=l),l-=g,r.length-=g;do a[o++]=mt[_++];while(--g);0===r.length&&(r.mode=nt);break;case ut:if(0===l)break t;a[o++]=r.length,l--,r.mode=nt;break;case lt:if(r.wrap){for(;32>d;){if(0===u)break t;u--,h|=i[s++]<<d,d+=8}if(m-=l,t.total_out+=m,r.total+=m,m&&(t.adler=r.check=r.flags?w(r.check,a,m,o-m):v(r.check,a,m,o-m)),m=l,(r.flags?h:n(h))!==r.check){t.msg="incorrect data check",r.mode=ht;break}h=0,d=0}r.mode=ct;case ct:if(r.wrap&&r.flags){for(;32>d;){if(0===u)break t;u--,h+=i[s++]<<d,d+=8}if(h!==(4294967295&r.total)){t.msg="incorrect length check",r.mode=ht;break}h=0,d=0}r.mode=ft;case ft:xt=z;break t;case ht:xt=B;break t;case dt:return N;case pt:default:return F}return t.next_out=o,t.avail_out=l,t.next_in=s,t.avail_in=u,r.hold=h,r.bits=d,(r.wsize||m!==t.avail_out&&r.mode<ht&&(r.mode<lt||e!==C))&&f(t,t.output,t.next_out,m-t.avail_out)?(r.mode=dt,N):(p-=t.avail_in,m-=t.avail_out,t.total_in+=p,t.total_out+=m,r.total+=m,r.wrap&&m&&(t.adler=r.check=r.flags?w(r.check,a,m,t.next_out-m):v(r.check,a,m,t.next_out-m)),t.data_type=r.bits+(r.last?64:0)+(r.mode===q?128:0)+(r.mode===rt||r.mode===J?256:0),(0===p&&0===m||e===C)&&xt===O&&(xt=D),xt)}function d(t){if(!t||!t.state)return F;var e=t.state;return e.window&&(e.window=null),t.state=null,O}function p(t,e){var r;return t&&t.state?(r=t.state,0===(2&r.wrap)?F:(r.head=e,e.done=!1,O)):F}function m(t,e){var r,n,i,a=e.length;return t&&t.state?(r=t.state,0!==r.wrap&&r.mode!==K?F:r.mode===K&&(n=1,n=v(n,e,a,0),n!==r.check)?B:(i=f(t,e,a,a))?(r.mode=dt,N):(r.havedict=1,O)):F}var g,_,y=t("../utils/common"),v=t("./adler32"),w=t("./crc32"),b=t("./inffast"),k=t("./inftrees"),x=0,A=1,S=2,C=4,E=5,I=6,O=0,z=1,T=2,F=-2,B=-3,N=-4,D=-5,j=8,R=1,L=2,U=3,P=4,M=5,W=6,Z=7,H=8,Y=9,G=10,K=11,q=12,V=13,X=14,J=15,$=16,Q=17,tt=18,et=19,rt=20,nt=21,it=22,at=23,st=24,ot=25,ut=26,lt=27,ct=28,ft=29,ht=30,dt=31,pt=32,mt=852,gt=592,_t=15,yt=_t,vt=!0;r.inflateReset=s,r.inflateReset2=o,r.inflateResetKeep=a,r.inflateInit=l,r.inflateInit2=u,r.inflate=h,r.inflateEnd=d,r.inflateGetHeader=p,r.inflateSetDictionary=m,r.inflateInfo="pako inflate (from Nodeca project)"},{"../utils/common":41,"./adler32":43,"./crc32":45,"./inffast":48,"./inftrees":50}],50:[function(t,e,r){"use strict";var n=t("../utils/common"),i=15,a=852,s=592,o=0,u=1,l=2,c=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],f=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],h=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],d=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];e.exports=function(t,e,r,p,m,g,_,y){var v,w,b,k,x,A,S,C,E,I=y.bits,O=0,z=0,T=0,F=0,B=0,N=0,D=0,j=0,R=0,L=0,U=null,P=0,M=new n.Buf16(i+1),W=new n.Buf16(i+1),Z=null,H=0;for(O=0;i>=O;O++)M[O]=0;for(z=0;p>z;z++)M[e[r+z]]++;for(B=I,F=i;F>=1&&0===M[F];F--);if(B>F&&(B=F),0===F)return m[g++]=20971520,m[g++]=20971520,y.bits=1,0;for(T=1;F>T&&0===M[T];T++);for(T>B&&(B=T),j=1,O=1;i>=O;O++)if(j<<=1,j-=M[O],0>j)return-1;if(j>0&&(t===o||1!==F))return-1;for(W[1]=0,O=1;i>O;O++)W[O+1]=W[O]+M[O];for(z=0;p>z;z++)0!==e[r+z]&&(_[W[e[r+z]]++]=z);if(t===o?(U=Z=_,A=19):t===u?(U=c,P-=257,Z=f,H-=257,A=256):(U=h,Z=d,A=-1),L=0,z=0,O=T,x=g,N=B,D=0,b=-1,R=1<<B,k=R-1,t===u&&R>a||t===l&&R>s)return 1;for(var Y=0;;){Y++,S=O-D,_[z]<A?(C=0,E=_[z]):_[z]>A?(C=Z[H+_[z]],E=U[P+_[z]]):(C=96,E=0),v=1<<O-D,w=1<<N,T=w;do w-=v,m[x+(L>>D)+w]=S<<24|C<<16|E|0;while(0!==w);for(v=1<<O-1;L&v;)v>>=1;if(0!==v?(L&=v-1,L+=v):L=0,z++,0===--M[O]){if(O===F)break;O=e[r+_[z]]}if(O>B&&(L&k)!==b){for(0===D&&(D=B),x+=T,N=O-D,j=1<<N;F>N+D&&(j-=M[N+D],!(0>=j));)N++,j<<=1;if(R+=1<<N,t===u&&R>a||t===l&&R>s)return 1;b=L&k,m[b]=B<<24|N<<16|x-g|0}}return 0!==L&&(m[x+L]=O-D<<24|64<<16|0),y.bits=B,0}},{"../utils/common":41}],51:[function(t,e,r){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],52:[function(t,e,r){"use strict";function n(t){for(var e=t.length;--e>=0;)t[e]=0}function i(t,e,r,n,i){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=t&&t.length}function a(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e}function s(t){return 256>t?ut[t]:ut[256+(t>>>7)]}function o(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function u(t,e,r){t.bi_valid>V-r?(t.bi_buf|=e<<t.bi_valid&65535,o(t,t.bi_buf),t.bi_buf=e>>V-t.bi_valid,t.bi_valid+=r-V):(t.bi_buf|=e<<t.bi_valid&65535,t.bi_valid+=r)}function l(t,e,r){u(t,r[2*e],r[2*e+1])}function c(t,e){var r=0;do r|=1&t,t>>>=1,r<<=1;while(--e>0);return r>>>1}function f(t){16===t.bi_valid?(o(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}function h(t,e){var r,n,i,a,s,o,u=e.dyn_tree,l=e.max_code,c=e.stat_desc.static_tree,f=e.stat_desc.has_stree,h=e.stat_desc.extra_bits,d=e.stat_desc.extra_base,p=e.stat_desc.max_length,m=0;for(a=0;q>=a;a++)t.bl_count[a]=0;for(u[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;K>r;r++)n=t.heap[r],a=u[2*u[2*n+1]+1]+1,a>p&&(a=p,m++),u[2*n+1]=a,n>l||(t.bl_count[a]++,s=0,n>=d&&(s=h[n-d]),o=u[2*n],t.opt_len+=o*(a+s),f&&(t.static_len+=o*(c[2*n+1]+s)));if(0!==m){do{for(a=p-1;0===t.bl_count[a];)a--;t.bl_count[a]--,t.bl_count[a+1]+=2,t.bl_count[p]--,m-=2}while(m>0);for(a=p;0!==a;a--)for(n=t.bl_count[a];0!==n;)i=t.heap[--r],i>l||(u[2*i+1]!==a&&(t.opt_len+=(a-u[2*i+1])*u[2*i],u[2*i+1]=a),n--)}}function d(t,e,r){var n,i,a=new Array(q+1),s=0;for(n=1;q>=n;n++)a[n]=s=s+r[n-1]<<1;for(i=0;e>=i;i++){var o=t[2*i+1];0!==o&&(t[2*i]=c(a[o]++,o))}}function p(){var t,e,r,n,a,s=new Array(q+1);for(r=0,n=0;W-1>n;n++)for(ct[n]=r,t=0;t<1<<et[n];t++)lt[r++]=n;for(lt[r-1]=n,a=0,n=0;16>n;n++)for(ft[n]=a,t=0;t<1<<rt[n];t++)ut[a++]=n;for(a>>=7;Y>n;n++)for(ft[n]=a<<7,t=0;t<1<<rt[n]-7;t++)ut[256+a++]=n;for(e=0;q>=e;e++)s[e]=0;for(t=0;143>=t;)st[2*t+1]=8,t++,s[8]++;for(;255>=t;)st[2*t+1]=9,t++,s[9]++;for(;279>=t;)st[2*t+1]=7,t++,s[7]++;for(;287>=t;)st[2*t+1]=8,t++,s[8]++;for(d(st,H+1,s),t=0;Y>t;t++)ot[2*t+1]=5,ot[2*t]=c(t,5);ht=new i(st,et,Z+1,H,q),dt=new i(ot,rt,0,Y,q),pt=new i(new Array(0),nt,0,G,X)}function m(t){var e;for(e=0;H>e;e++)t.dyn_ltree[2*e]=0;for(e=0;Y>e;e++)t.dyn_dtree[2*e]=0;for(e=0;G>e;e++)t.bl_tree[2*e]=0;t.dyn_ltree[2*J]=1,t.opt_len=t.static_len=0,t.last_lit=t.matches=0}function g(t){t.bi_valid>8?o(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0}function _(t,e,r,n){g(t),n&&(o(t,r),o(t,~r)),F.arraySet(t.pending_buf,t.window,e,r,t.pending),t.pending+=r}function y(t,e,r,n){var i=2*e,a=2*r;return t[i]<t[a]||t[i]===t[a]&&n[e]<=n[r]}function v(t,e,r){for(var n=t.heap[r],i=r<<1;i<=t.heap_len&&(i<t.heap_len&&y(e,t.heap[i+1],t.heap[i],t.depth)&&i++,!y(e,n,t.heap[i],t.depth));)t.heap[r]=t.heap[i],r=i,i<<=1;t.heap[r]=n}function w(t,e,r){var n,i,a,o,c=0;if(0!==t.last_lit)do n=t.pending_buf[t.d_buf+2*c]<<8|t.pending_buf[t.d_buf+2*c+1],i=t.pending_buf[t.l_buf+c],c++,0===n?l(t,i,e):(a=lt[i],l(t,a+Z+1,e),o=et[a],0!==o&&(i-=ct[a],u(t,i,o)),n--,a=s(n),l(t,a,r),o=rt[a],0!==o&&(n-=ft[a],u(t,n,o)));while(c<t.last_lit);l(t,J,e)}function b(t,e){var r,n,i,a=e.dyn_tree,s=e.stat_desc.static_tree,o=e.stat_desc.has_stree,u=e.stat_desc.elems,l=-1;for(t.heap_len=0,t.heap_max=K,r=0;u>r;r++)0!==a[2*r]?(t.heap[++t.heap_len]=l=r,t.depth[r]=0):a[2*r+1]=0;for(;t.heap_len<2;)i=t.heap[++t.heap_len]=2>l?++l:0,a[2*i]=1,t.depth[i]=0,t.opt_len--,o&&(t.static_len-=s[2*i+1]);for(e.max_code=l,r=t.heap_len>>1;r>=1;r--)v(t,a,r);i=u;do r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],v(t,a,1),n=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=n,a[2*i]=a[2*r]+a[2*n],t.depth[i]=(t.depth[r]>=t.depth[n]?t.depth[r]:t.depth[n])+1,a[2*r+1]=a[2*n+1]=i,t.heap[1]=i++,v(t,a,1);while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],h(t,e),d(a,l,t.bl_count)}function k(t,e,r){var n,i,a=-1,s=e[1],o=0,u=7,l=4;for(0===s&&(u=138,l=3),e[2*(r+1)+1]=65535,n=0;r>=n;n++)i=s,s=e[2*(n+1)+1],++o<u&&i===s||(l>o?t.bl_tree[2*i]+=o:0!==i?(i!==a&&t.bl_tree[2*i]++,t.bl_tree[2*$]++):10>=o?t.bl_tree[2*Q]++:t.bl_tree[2*tt]++,o=0,a=i,0===s?(u=138,l=3):i===s?(u=6,l=3):(u=7,l=4))}function x(t,e,r){var n,i,a=-1,s=e[1],o=0,c=7,f=4;for(0===s&&(c=138,f=3),n=0;r>=n;n++)if(i=s,s=e[2*(n+1)+1],!(++o<c&&i===s)){if(f>o){do l(t,i,t.bl_tree);while(0!==--o)}else 0!==i?(i!==a&&(l(t,i,t.bl_tree),o--),l(t,$,t.bl_tree),u(t,o-3,2)):10>=o?(l(t,Q,t.bl_tree),u(t,o-3,3)):(l(t,tt,t.bl_tree),u(t,o-11,7));o=0,a=i,0===s?(c=138,f=3):i===s?(c=6,f=3):(c=7,f=4)}}function A(t){var e;for(k(t,t.dyn_ltree,t.l_desc.max_code),k(t,t.dyn_dtree,t.d_desc.max_code),b(t,t.bl_desc),e=G-1;e>=3&&0===t.bl_tree[2*it[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e}function S(t,e,r,n){var i;for(u(t,e-257,5),u(t,r-1,5),u(t,n-4,4),i=0;n>i;i++)u(t,t.bl_tree[2*it[i]+1],3);x(t,t.dyn_ltree,e-1),x(t,t.dyn_dtree,r-1)}function C(t){var e,r=4093624447;for(e=0;31>=e;e++,r>>>=1)if(1&r&&0!==t.dyn_ltree[2*e])return N;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return D;for(e=32;Z>e;e++)if(0!==t.dyn_ltree[2*e])return D;return N}function E(t){mt||(p(),mt=!0),t.l_desc=new a(t.dyn_ltree,ht),t.d_desc=new a(t.dyn_dtree,dt),t.bl_desc=new a(t.bl_tree,pt),t.bi_buf=0,t.bi_valid=0,m(t)}function I(t,e,r,n){u(t,(R<<1)+(n?1:0),3),_(t,e,r,!0)}function O(t){u(t,L<<1,3),l(t,J,st),f(t)}function z(t,e,r,n){var i,a,s=0;t.level>0?(t.strm.data_type===j&&(t.strm.data_type=C(t)),b(t,t.l_desc),b(t,t.d_desc),s=A(t),i=t.opt_len+3+7>>>3,a=t.static_len+3+7>>>3,i>=a&&(i=a)):i=a=r+5,i>=r+4&&-1!==e?I(t,e,r,n):t.strategy===B||a===i?(u(t,(L<<1)+(n?1:0),3),w(t,st,ot)):(u(t,(U<<1)+(n?1:0),3),S(t,t.l_desc.max_code+1,t.d_desc.max_code+1,s+1),w(t,t.dyn_ltree,t.dyn_dtree)),m(t),n&&g(t)}function T(t,e,r){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(lt[r]+Z+1)]++,t.dyn_dtree[2*s(e)]++),t.last_lit===t.lit_bufsize-1}var F=t("../utils/common"),B=4,N=0,D=1,j=2,R=0,L=1,U=2,P=3,M=258,W=29,Z=256,H=Z+1+W,Y=30,G=19,K=2*H+1,q=15,V=16,X=7,J=256,$=16,Q=17,tt=18,et=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],rt=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],nt=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],it=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],at=512,st=new Array(2*(H+2));n(st);var ot=new Array(2*Y);n(ot);var ut=new Array(at);n(ut);var lt=new Array(M-P+1);n(lt);var ct=new Array(W);n(ct);var ft=new Array(Y);n(ft);var ht,dt,pt,mt=!1;r._tr_init=E,r._tr_stored_block=I,r._tr_flush_block=z,r._tr_tally=T,r._tr_align=O},{"../utils/common":41}],53:[function(t,e,r){"use strict";function n(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}e.exports=n},{}]},{},[10])(10)});var saveAs=saveAs||function(t){"use strict";if(!("undefined"==typeof t||"undefined"!=typeof navigator&&/MSIE [1-9]\./.test(navigator.userAgent))){var e=t.document,r=function(){return t.URL||t.webkitURL||t},n=e.createElementNS("http://www.w3.org/1999/xhtml","a"),i="download"in n,a=function(t){var e=new MouseEvent("click");t.dispatchEvent(e)},s=/constructor/i.test(t.HTMLElement),o=/CriOS\/[\d]+/.test(navigator.userAgent),u=function(e){(t.setImmediate||t.setTimeout)(function(){throw e},0)},l="application/octet-stream",c=4e4,f=function(t){var e=function(){"string"==typeof t?r().revokeObjectURL(t):t.remove()};setTimeout(e,c)},h=function(t,e,r){e=[].concat(e);for(var n=e.length;n--;){var i=t["on"+e[n]];if("function"==typeof i)try{i.call(t,r||t)}catch(a){u(a)}}},d=function(t){return/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob([String.fromCharCode(65279),t],{type:t.type}):t},p=function(e,u,c){c||(e=d(e));var p,m=this,g=e.type,_=g===l,y=function(){h(m,"writestart progress write writeend".split(" "))},v=function(){if((o||_&&s)&&t.FileReader){var n=new FileReader;return n.onloadend=function(){var e=o?n.result:n.result.replace(/^data:[^;]*;/,"data:attachment/file;"),r=t.open(e,"_blank");r||(t.location.href=e),e=void 0,m.readyState=m.DONE,y()},n.readAsDataURL(e),void(m.readyState=m.INIT)}if(p||(p=r().createObjectURL(e)),_)t.location.href=p;else{var i=t.open(p,"_blank");i||(t.location.href=p)}m.readyState=m.DONE,y(),f(p)};return m.readyState=m.INIT,i?(p=r().createObjectURL(e),void setTimeout(function(){n.href=p,n.download=u,a(n),y(),f(p),m.readyState=m.DONE})):void v()},m=p.prototype,g=function(t,e,r){return new p(t,e||t.name||"download",r)};return"undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob?function(t,e,r){return e=e||t.name||"download",r||(t=d(t)),navigator.msSaveOrOpenBlob(t,e)}:(m.abort=function(){},m.readyState=m.INIT=0,m.WRITING=1,m.DONE=2,m.error=m.onwritestart=m.onprogress=m.onwrite=m.onabort=m.onerror=m.onwriteend=null,g)}}("undefined"!=typeof self&&self||"undefined"!=typeof window&&window||this.content);"undefined"!=typeof module&&module.exports?module.exports.saveAs=saveAs:"undefined"!=typeof define&&null!==define&&null!==define.amd&&define([],function(){return saveAs});
\ No newline at end of file
diff --git a/xos/core/xoslib/static/js/xosServiceGrid.js b/xos/core/xoslib/static/js/xosServiceGrid.js
index 698d8ef..6c6acb1 100644
--- a/xos/core/xoslib/static/js/xosServiceGrid.js
+++ b/xos/core/xoslib/static/js/xosServiceGrid.js
@@ -1 +1 @@
-"use strict";angular.module("xos.serviceGrid",["ngResource","ngCookies","ui.router","xos.helpers"]).config(["$stateProvider",function(e){e.state("serviceGrid",{url:"/",template:"<service-grid></service-grid>"}).state("serviceGraph",{url:"/graph",template:"<service-graph></service-graph>"})}]).config(["$httpProvider",function(e){e.interceptors.push("NoHyperlinks")}]).directive("serviceGrid",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/service-grid.tpl.html",controller:["Services","_",function(e,t){var n=this;this.tableConfig={columns:[{label:"Status",prop:"status",type:"icon",formatter:function(e){var t=parseInt(e.backend_status.match(/^[0-9]/)[0]);switch(t){case 0:return"time";case 1:return"ok";case 2:return"remove"}}},{label:"Name",prop:"name",link:function(e){return""+e.view_url.replace(/\$[a-z]+\$/,e.id)}},{label:"Kind",prop:"kind"},{label:"Enabled",prop:"enabled",type:"boolean"}],filter:"field",order:{field:"name"}},e.query().$promise.then(function(e){n.services=t.map(e,function(e){return e.status=0!==parseInt(e.backend_status.match(/^[0-9]/)[0]),e})})["catch"](function(e){throw new Error(e)})}]}}),angular.module("xos.serviceGrid").run(["$templateCache",function(e){e.put("templates/service-graph.tpl.html",'<div class="row">\n  <div class="col-sm-10">\n    <h1>Graph</h1>\n    <ul>\n      <li>Use D3 to create a service chart based on coarse services?</li>\n    </ul>\n  </div>\n  <div class="col-sm-2">\n    <a href="/admin/core/service/add" class="btn btn-success btn-block">\n      <i class="glyphicon glyphicon-plus"></i>\n      Add Service\n    </a>\n    <a href="#/" class="btn btn-default btn-block">\n      Service List\n    </a>\n  </div>\n</div>'),e.put("templates/service-grid.tpl.html",'<div class="row">\n  <div class="col-md-10 table-responsive">\n    <xos-table config="vm.tableConfig" data="vm.services"></xos-table>\n  </div>\n  <div class="col-md-2">\n    <a href="/admin/core/service/add" class="btn btn-success btn-block">\n      <i class="glyphicon glyphicon-plus"></i>\n      Add Service\n    </a>\n    <!-- <a href="#/graph" class="btn btn-default btn-block">\n      Tenancy Graph\n    </a> -->\n  </div>\n</div>')}]),function(){angular.module("xos.serviceGrid").directive("serviceGraph",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/service-graph.tpl.html",controller:["$element","GraphService",function(e,t){var n=void 0,r=e[0],i=void 0,s=void 0,a=function(e){i.attr({transform:function(e){return"translate("+e.x+", "+e.y+")"}}),s.attr("x1",function(e){return e.source.x}).attr("y1",function(e){return e.source.y}).attr("x2",function(e){return e.target.x}).attr("y2",function(e){return e.target.y})};t.loadCoarseData().then(function(e){e.tenants=e.tenants.map(function(e){return{source:e.provider_service,target:e.subscriber_service}}),e.services.push({name:"XOS","class":"xos",x:r.clientWidth/2,y:r.clientHeight/2,fixed:!0}),c(r);var t=d3.layout.force().nodes(e.services).links(e.tenants).charge(-1060).gravity(.1).linkDistance(200).size([r.clientWidth,r.clientHeight]).on("tick",a).start();s=n.selectAll(".link").data(e.tenants).enter().insert("line").attr("class","link"),i=n.selectAll(".node").data(e.services).enter().append("g").call(t.drag).on("mousedown",function(){d3.event.stopPropagation()}),i.append("circle").attr({"class":function(e){return"node "+(e["class"]||"")},r:10}),i.append("text").attr({"text-anchor":"middle"}).text(function(e){return e.name}),i.select("circle").attr({r:function(e){var t=d3.select(this).node().parentNode,n=d3.select(t).select("text").node().getBBox();return n.width/2+10}})});var c=function(e){d3.select(e).select("svg").remove(),n=d3.select(e).append("svg").style("width",e.clientWidth+"px").style("height",e.clientHeight+"px")}}]}})}(),angular.module("xos.serviceGrid").run(["$location",function(e){e.path("/")}]);
\ No newline at end of file
+"use strict";angular.module("xos.serviceGrid",["ngResource","ngCookies","ui.router","xos.helpers"]).config(["$stateProvider",function(e){e.state("serviceGrid",{url:"/",template:"<service-grid></service-grid>"}).state("serviceGraph",{url:"/graph",template:"<service-graph></service-graph>"})}]).config(["$httpProvider",function(e){e.interceptors.push("NoHyperlinks")}]).directive("serviceGrid",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/service-grid.tpl.html",controller:["Services","ToscaEncoder","_",function(e,t,r){var n=this;this.tableConfig={columns:[{label:"Status",prop:"status",type:"icon",formatter:function(e){var t=parseInt(e.backend_status.match(/^[0-9]/)[0]);switch(t){case 0:return"time";case 1:return"ok";case 2:return"remove"}}},{label:"Name",prop:"name",link:function(e){return""+e.view_url.replace(/\$[a-z]+\$/,e.id)}},{label:"Kind",prop:"kind"},{label:"Enabled",prop:"enabled",type:"boolean"}],filter:"field",order:{field:"name"},actions:[{label:"export",icon:"export",cb:function(e){n.tosca="",t.serviceToTosca(e).then(function(e){n.showFeedback=!0,n.tosca=e})}}]},e.query().$promise.then(function(e){n.services=r.map(e,function(e){return e.status=0!==parseInt(e.backend_status.match(/^[0-9]/)[0]),e})})["catch"](function(e){throw new Error(e)})}]}}),function(){angular.module("xos.serviceGrid").service("ToscaEncoder",["$q","_","ArchiveManager","ServiceEncoder","SlicesEncoder",function(e,t,r,n,i){var o=this,a={tosca_definitions_version:"tosca_simple_yaml_1_0",description:"",imports:["custom_types/xos.yaml"],topology_template:{node_templates:{}}};this.toYml=function(e){return jsyaml.dump(e).replace(/'/g,"")},this["export"]=function(e){r.download(e.name);var t=o.toYml(a);return t},this.serviceToTosca=function(t){r.createArchive(),a.topology_template.node_templates={},a.description="Just enough Tosca to get the "+t.humanReadableName+" service up and running";var s=e.defer();return n.formatServiceProperties(t,a).then(function(e){return i.getServiceSlices(t,e)}).then(function(e){return n.getServiceRequirements(t,e)}).then(function(e){r.addFile(t.name+"_service.yaml",o.toYml(e)),o["export"](t),s.resolve(o.toYml(e))})["catch"](function(e){s.reject(e)}),s.promise}}])}(),angular.module("xos.serviceGrid").run(["$templateCache",function(e){e.put("templates/service-graph.tpl.html",'<div class="row">\n  <div class="col-sm-10">\n    <h1>Graph</h1>\n    <ul>\n      <li>Use D3 to create a service chart based on coarse services?</li>\n    </ul>\n  </div>\n  <div class="col-sm-2">\n    <a href="/admin/core/service/add" class="btn btn-success btn-block">\n      <i class="glyphicon glyphicon-plus"></i>\n      Add Service\n    </a>\n    <a href="#/" class="btn btn-default btn-block">\n      Service List\n    </a>\n  </div>\n</div>'),e.put("templates/service-grid.tpl.html",'<div class="row">\n  <div class="col-md-10 table-responsive">\n    <xos-table config="vm.tableConfig" data="vm.services"></xos-table>\n  </div>\n  <div class="col-md-2">\n    <a href="/admin/core/service/add" class="btn btn-success btn-block">\n      <i class="glyphicon glyphicon-plus"></i>\n      Add Service\n    </a>\n    <!-- <a href="#/graph" class="btn btn-default btn-block">\n      Tenancy Graph\n    </a> -->\n  </div>\n</div>\n\n<div class="row">\n  <div class="col-xs-12">\n    <div class="alert alert-info" ng-show="vm.showFeedback">\n      Remember that you should copy any key artifact inside the container in <pre>/opt/xos/tosca</pre>!\n    </div>\n  </div>\n</div>\n\n<pre ng-show="vm.tosca">\n{{vm.tosca}}\n</pre>')}]);var _slicedToArray=function(){function e(e,t){var r=[],n=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(c){i=!0,o=c}finally{try{!n&&s["return"]&&s["return"]()}finally{if(i)throw o}}return r}return function(t,r){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,r);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();!function(){angular.module("xos.serviceGrid").service("SlicesEncoder",["$q","_","Slices","SiteEncoder","ImageEncoder","NetworkEncoder",function(e,t,r,n,i,o){var a=this;this.buildTosca=function(r,a,s){var c={},l=e.defer();return r=t.reduce(r,function(e,t){if(e[t.name]={type:"tosca.nodes.Slice",properties:{network:t.network},requirements:[{management:{node:"management",relationship:"tosca.relationships.ConnectsToNetwork"}}]},angular.isDefined(s)){var r={};r[s+"_service"]={node:"service#"+s,relationship:"tosca.relationships.MemberOfService"},e[t.name].requirements.push(r)}return angular.isDefined(t.description)&&(e[t.name].description=t.description),angular.isDefined(t.site)&&(c[t.name+"#site"]=n.buildTosca(t.site,a)),angular.isDefined(t.default_image)&&(c[t.name+"#image"]=i.buildTosca(t.default_image,a)),angular.isDefined(t.networks)&&t.networks.length>0&&(c[t.name+"#management"]=o.getSliceNetworks(t,a)),e},{}),Object.keys(c).length>0?!function(){var t={site:"tosca.relationships.MemberOfSite",image:"tosca.relationships.DefaultImage"};a.topology_template.node_templates.management={type:"tosca.nodes.network.Network.XOS",properties:{"no-create":!0,"no-delete":!0,"no-update":!0}},e.all(c).then(function(e){var n=!0,i=!1,o=void 0;try{for(var s,c=Object.keys(e)[Symbol.iterator]();!(n=(s=c.next()).done);n=!0){var u=s.value,d=u.split("#"),p=_slicedToArray(d,2),v=p[0],m=p[1];if(angular.isDefined(t[m])){r[v].requirements||(r[v].requirements=[]);var f=_slicedToArray(e[u],2),h=f[0],g=f[1],y={},_=void 0;_="site"===m?g.name:m+"#"+g.name,y[m]={node:_,relationship:t[m]},r[v].requirements.push(y),angular.extend(a,h)}}}catch(b){i=!0,o=b}finally{try{!n&&c["return"]&&c["return"]()}finally{if(i)throw o}}angular.extend(a.topology_template.node_templates,r),l.resolve(a)})["catch"](function(e){throw new Error(e)})}():(angular.extend(a.topology_template.node_templates,r),l.resolve(a)),l.promise},this.getServiceSlices=function(t,n){var i=e.defer();return r.query({service:t.id}).$promise.then(function(e){return a.buildTosca(e,n,t.name)}).then(function(e){i.resolve(e)}),i.promise}}])}(),function(){angular.module("xos.serviceGrid").service("SiteEncoder",["$q","Sites",function(e,t){this.buildTosca=function(r,n){var i=e.defer();return t.get({id:r}).$promise.then(function(e){var t={};t[""+e.name]={type:"tosca.nodes.Site"},angular.extend(n.topology_template.node_templates,t),i.resolve([n,e])})["catch"](i.reject),i.promise}}])}(),function(){angular.module("xos.serviceGrid").service("ServiceEncoder",["$q","ArchiveManager","Tenants","Services",function(e,t,r,n){var i={fabric:"tosca.nodes.FabricService",onos:"tosca.nodes.ONOSService",vCPE:"tosca.nodes.VSGService",vOLT:"tosca.nodes.VOLTService",vROUTER:"tosca.nodes.VRouterService",VTN:"tosca.nodes.VTNService",vTR:"tosca.nodes.Service"};this.formatServiceProperties=function(r,n){var o=e.defer(),a="service#"+r.name;n.topology_template.node_templates[a]={},n.topology_template.node_templates[a].type=i[r.kind]||"tosca.nodes.Service";var s={properties:{kind:r.kind}};return angular.isDefined(r.view_url)&&(s.properties.view_url=r.view_url),angular.isDefined(r.icon_url)&&(s.properties.icon_url=r.icon_url),angular.isDefined(r.private_key_fn)&&(s.properties.private_key_fn=r.private_key_fn),angular.isDefined(r.public_key)&&(t.addFile(r.name+"_rsa.pub",r.public_key),s.properties.public_key="{ get_artifact: [ SELF, pubkey, LOCAL_FILE] }",s.artifacts={pubkey:"/opt/xos/tosca/"+r.name+"/"+r.name+"_rsa.pub"},n.topology_template.node_templates[a].artifacts=s.artifacts),n.topology_template.node_templates[a].properties=s.properties,o.resolve(n),o.promise},this.getServiceRequirements=function(t,i){var o=e.defer();return r.query({subscriber_service:t.id}).$promise.then(function(t){var r=[];return t=_.uniqBy(t,"provider_service"),_.forEach(t,function(e){r.push(n.get({id:e.provider_service}).$promise)}),e.all(r)}).then(function(e){var r=_.reduce(e,function(e,t){return e.concat(t.name)},[]);if(r=_.reduce(r,function(e,t){var r=t+"_tenant",n={};return n[r]={node:"service#"+t,relationship:"tosca.relationships.TenantOfService"},e.concat(n)},[]),r.length>0){_.forEach(r,function(e){var t=e[Object.keys(e)[0]].node;i.topology_template.node_templates[t]={type:"tosca.nodes.Service",properties:{"no-create":!0,"no-delete":!0,"no-update":!0}}});var n="service#"+t.name;i.topology_template.node_templates[n].requirements=r}o.resolve(i)}),o.promise}}])}(),function(){angular.module("xos.serviceGrid").directive("serviceGraph",function(){return{restrict:"E",scope:{},bindToController:!0,controllerAs:"vm",templateUrl:"templates/service-graph.tpl.html",controller:["$element","GraphService",function(e,t){var r=void 0,n=e[0],i=void 0,o=void 0,a=function(e){i.attr({transform:function(e){return"translate("+e.x+", "+e.y+")"}}),o.attr("x1",function(e){return e.source.x}).attr("y1",function(e){return e.source.y}).attr("x2",function(e){return e.target.x}).attr("y2",function(e){return e.target.y})};t.loadCoarseData().then(function(e){e.tenants=e.tenants.map(function(e){return{source:e.provider_service,target:e.subscriber_service}}),e.services.push({name:"XOS","class":"xos",x:n.clientWidth/2,y:n.clientHeight/2,fixed:!0}),s(n);var t=d3.layout.force().nodes(e.services).links(e.tenants).charge(-1060).gravity(.1).linkDistance(200).size([n.clientWidth,n.clientHeight]).on("tick",a).start();o=r.selectAll(".link").data(e.tenants).enter().insert("line").attr("class","link"),i=r.selectAll(".node").data(e.services).enter().append("g").call(t.drag).on("mousedown",function(){d3.event.stopPropagation()}),i.append("circle").attr({"class":function(e){return"node "+(e["class"]||"")},r:10}),i.append("text").attr({"text-anchor":"middle"}).text(function(e){return e.name}),i.select("circle").attr({r:function(e){var t=d3.select(this).node().parentNode,r=d3.select(t).select("text").node().getBBox();return r.width/2+10}})});var s=function(e){d3.select(e).select("svg").remove(),r=d3.select(e).append("svg").style("width",e.clientWidth+"px").style("height",e.clientHeight+"px")}}]}})}();var _slicedToArray=function(){function e(e,t){var r=[],n=!0,i=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(n=(a=s.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(c){i=!0,o=c}finally{try{!n&&s["return"]&&s["return"]()}finally{if(i)throw o}}return r}return function(t,r){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,r);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();!function(){angular.module("xos.serviceGrid").service("NetworkEncoder",["$q","Networks","NetworkTemplateEncoder",function(e,t,r){var n=this;this.buildTosca=function(t,n){var i=angular.copy(t),o={},a=e.defer();try{t=_.reduce(t,function(e,t){return e["network#"+t.name]={type:"tosca.nodes.network.Network.XOS",requirements:[]},angular.isDefined(t.slices)&&(_.forEach(t.slices,function(r){var n={owner:{node:r.name,relationship:"tosca.relationships.MemberOfSlice"}},i={connection:{node:r.name,relationship:"tosca.relationships.ConnectsToSlice"}};e["network#"+t.name].requirements.push(n,i)}),angular.isDefined(t.template)&&(o[t.name]=r.buildTosca(t.template,n))),e},{}),Object.keys(o).length>0?e.all(o).then(function(e){if(e){var r=!0,o=!1,s=void 0;try{for(var c,l=Object.keys(e)[Symbol.iterator]();!(r=(c=l.next()).done);r=!0){var u=c.value,d=_slicedToArray(e[u],2),p=d[0],v=d[1];t["network#"+u].requirements.push({network_template:{node:"network_template#"+v.name,relationship:"tosca.relationships.UsesNetworkTemplate"}}),angular.extend(n,p)}}catch(m){o=!0,s=m}finally{try{!r&&l["return"]&&l["return"]()}finally{if(o)throw s}}}angular.extend(n.topology_template.node_templates,t),a.resolve([n,i])})["catch"](function(e){throw new Error(e)}):(angular.extend(n.topology_template.node_templates,t),a.resolve([n,i]))}catch(s){a.reject(s)}return a.promise},this.getSliceNetworks=function(r,i){var o=e.defer();return t.query({owner:r.id}).$promise.then(function(e){e=_.filter(e,function(e){return-1!==r.networks.indexOf(e.id)}),e=e.map(function(e){var t=e.slices.indexOf(r.id);return e.slices[t]=r,e}),n.buildTosca(e,i).then(o.resolve)["catch"](o.reject)}),o.promise}}])}(),function(){angular.module("xos.serviceGrid").service("NetworkTemplateEncoder",["$q","Networkstemplates",function(e,t){this.buildTosca=function(r,n){var i=e.defer();return t.get({id:r}).$promise.then(function(e){var t={};t["network_template#"+e.name]={type:"tosca.nodes.NetworkTemplate"},angular.extend(n.topology_template.node_templates,t),i.resolve([n,e])})["catch"](function(e){i.reject(e)}),i.promise}}])}(),function(){angular.module("xos.serviceGrid").service("ImageEncoder",["$q","Images",function(e,t){this.buildTosca=function(r,n){var i=e.defer();return t.get({id:r}).$promise.then(function(e){var t={};t["image#"+e.name]={type:"tosca.nodes.Image"},angular.extend(n.topology_template.node_templates,t),i.resolve([n,e])})["catch"](i.reject),i.promise}}])}(),function(){angular.module("xos.serviceGrid").service("ArchiveManager",function(){var e=this;this.createArchive=function(){e.archive=new JSZip},this.addFile=function(t,r){e.archive.file(t,r)},this.download=function(t){console.log(e.archive),e.archive.generateAsync({type:"blob"}).then(function(e){saveAs(e,t+".zip")})["catch"](function(e){console.log(e)})}})}(),angular.module("xos.serviceGrid").run(["$location",function(e){e.path("/")}]);
\ No newline at end of file
