Nikolay Suslov 7 years ago
parent
commit
9e2a8a0643
100 changed files with 22 additions and 25868 deletions
  1. 1 1
      public/aframe/index.vwf.config.yaml
  2. BIN
      public/plane/images/planeDiffuse.png
  3. 0 48
      public/plane/index.vwf.yaml
  4. 0 47
      public/plane/plane.vwf.yaml
  5. 0 225
      public/plane/seymourplane_triangulate.dae
  6. 0 26
      public/vr/assets.json
  7. BIN
      public/vr/assets/bg.jpg
  8. BIN
      public/vr/assets/checker.jpg
  9. BIN
      public/vr/assets/cloud10.png
  10. BIN
      public/vr/assets/floor.jpg
  11. BIN
      public/vr/assets/ico/pause.png
  12. BIN
      public/vr/assets/ico/play.png
  13. BIN
      public/vr/assets/ico/sound-off.png
  14. BIN
      public/vr/assets/ico/sound-on.png
  15. BIN
      public/vr/assets/mon/concrete1.png
  16. BIN
      public/vr/assets/mon/concrete_ground_fin1.png
  17. BIN
      public/vr/assets/mon/grass1_fin.png
  18. BIN
      public/vr/assets/mon/grass2_fin.png
  19. BIN
      public/vr/assets/mon/house_fin.png
  20. BIN
      public/vr/assets/mon/model.bin
  21. 0 1379
      public/vr/assets/mon/model.gltf
  22. 0 1379
      public/vr/assets/mon/model.gltf 2
  23. BIN
      public/vr/assets/mon/new_metal2.png
  24. BIN
      public/vr/assets/mon/new_metal_NRM1.png
  25. BIN
      public/vr/assets/mon/uv_bridge3.png
  26. BIN
      public/vr/assets/mon/wall_ground_fin.png
  27. BIN
      public/vr/assets/skyes/sky1.jpg
  28. BIN
      public/vr/assets/skyes/sky2.jpg
  29. BIN
      public/vr/assets/skyes/sky3.jpg
  30. BIN
      public/vr/assets/sounds/footsteps.mp3
  31. BIN
      public/vr/assets/sounds/golos.mp3
  32. BIN
      public/vr/assets/textures/cube/nx.jpg
  33. BIN
      public/vr/assets/textures/cube/ny.jpg
  34. BIN
      public/vr/assets/textures/cube/nz.jpg
  35. BIN
      public/vr/assets/textures/cube/px.jpg
  36. BIN
      public/vr/assets/textures/cube/py.jpg
  37. BIN
      public/vr/assets/textures/cube/pz.jpg
  38. BIN
      public/vr/assets/textures/skybox/nx.jpg
  39. BIN
      public/vr/assets/textures/skybox/ny.jpg
  40. BIN
      public/vr/assets/textures/skybox/nz.jpg
  41. BIN
      public/vr/assets/textures/skybox/px.jpg
  42. BIN
      public/vr/assets/textures/skybox/py.jpg
  43. BIN
      public/vr/assets/textures/skybox/pz.jpg
  44. BIN
      public/vr/assets/textures/skybox2/nx.jpg
  45. BIN
      public/vr/assets/textures/skybox2/ny.jpg
  46. BIN
      public/vr/assets/textures/skybox2/nz.jpg
  47. BIN
      public/vr/assets/textures/skybox2/px.jpg
  48. BIN
      public/vr/assets/textures/skybox2/py.jpg
  49. BIN
      public/vr/assets/textures/skybox2/pz.jpg
  50. 0 143
      public/vr/assets/walk.bvh
  51. 0 8
      public/vr/index.vwf.config.yaml
  52. 0 39
      public/vr/index.vwf.yaml
  53. BIN
      public/vr/webimg.jpg
  54. 0 6
      public/webapps.json
  55. 0 1
      support/client/doc/.gitignore
  56. 0 5
      support/client/lib/index.html
  57. 0 5163
      support/client/lib/mil-sym/cws.js
  58. 0 1879
      support/client/lib/socket.io-0.6.js
  59. 0 57
      support/client/lib/socket.io-sessionid-patch.js
  60. 21 145
      support/client/lib/vwf.js
  61. 0 226
      support/client/lib/vwf/model/aframe/addon/SkyShader.js
  62. 0 472
      support/client/lib/vwf/model/aframe/addon/aframe-gamepad-controls.js
  63. 0 0
      support/client/lib/vwf/model/aframe/addon/aframe-gamepad-controls.min.js
  64. 0 190
      support/client/lib/vwf/model/aframe/addon/aframe-interpolation 2.js
  65. 0 237
      support/client/lib/vwf/model/aframe/addon/aframe-lerp-component.js
  66. 0 0
      support/client/lib/vwf/model/aframe/addon/aframe-lerp-component.min.js
  67. 0 3115
      support/client/lib/vwf/model/aframe/v0.5.0/aframe-v0.5.0.js
  68. 0 8
      support/client/lib/vwf/model/aframe/v0.5.0/aframe-v0.5.0.min.js
  69. 0 3309
      support/client/lib/vwf/model/aframe/v0.6.1/aframe-master.js
  70. 0 213
      support/client/lib/vwf/model/aframe/v0.6.1/aframe-master.js.map
  71. 0 2
      support/client/lib/vwf/model/aframe/v0.6.1/aframe-master.min.js
  72. 0 0
      support/client/lib/vwf/model/aframe/v0.6.1/aframe-master.min.js.map
  73. 0 543
      support/client/lib/vwf/model/blockly.js
  74. 0 420
      support/client/lib/vwf/model/blockly/JS-Interpreter/acorn.js
  75. 0 35
      support/client/lib/vwf/model/blockly/JS-Interpreter/acorn_interpreter.js
  76. 0 2057
      support/client/lib/vwf/model/blockly/JS-Interpreter/interpreter.js
  77. 0 1175
      support/client/lib/vwf/model/blockly/blockly_compressed.js
  78. 0 145
      support/client/lib/vwf/model/blockly/blocks_compressed.js
  79. 0 5
      support/client/lib/vwf/model/blockly/javascript_compressed.js
  80. 0 382
      support/client/lib/vwf/model/blockly/msg/js/en.js
  81. 0 2775
      support/client/lib/vwf/model/cesium.js
  82. 0 8
      support/client/lib/vwf/model/cesium/Assets/Assets.profile.js
  83. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json
  84. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json
  85. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json
  86. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json
  87. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json
  88. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json
  89. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json
  90. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json
  91. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json
  92. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json
  93. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json
  94. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json
  95. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json
  96. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json
  97. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json
  98. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json
  99. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json
  100. 0 0
      support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json

+ 1 - 1
public/aframe/index.vwf.config.yaml

@@ -5,4 +5,4 @@ model:
   vwf/model/aframe:
 view:
   vwf/view/aframe:
-  vwf/view/editor-live:
+  vwf/view/editor-new:

BIN
public/plane/images/planeDiffuse.png


+ 0 - 48
public/plane/index.vwf.yaml

@@ -1,48 +0,0 @@
-# Copyright 2012 United States Government, as represented by the Secretary of Defense, Under
-# Secretary of Defense (Personnel & Readiness).
-# 
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
-# in compliance with the License. You may obtain a copy of the License at
-# 
-#   http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software distributed under the License
-# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-# or implied. See the License for the specific language governing permissions and limitations under
-# the License.
-
---- 
-extends: http://vwf.example.com/scene.vwf
-children:
-  plane:
-    extends: plane.vwf
-    scripts:
-    - |
-      this.initialize = function() {
-        var initNode = function( nd ) { 
-          if ( Object.getPrototypeOf( nd ).children ) { 
-            Object.getPrototypeOf( nd ).children.forEach( function( child ) { 
-              this.children.create( child.name, { extends: child.id }, function( newNode ) {
-                initNode( newNode );
-              } );
-            }, nd );
-          }
-        }; 
-        initNode( this );
-      } //@ sourceURL=plane.initialize.vwf
-  sceneCenter:
-    extends: http://vwf.example.com/node3.vwf  
-  dir1:
-    extends: http://vwf.example.com/directionallight.vwf
-    properties:
-      distance: 2000
-      intensity: 0.9
-      color: [ 255, 255, 255 ]
-      position: [ 0, -1, 0 ]
-      rotation: [ 0, 0, 1, 90 ]
-scripts:
-- |
-    this.initialize = function(){
-      this.camera.translation = [ 0, -30, 0 ];
-      this.dir1.translation = [ 0, -100, 0 ];
-    }

+ 0 - 47
public/plane/plane.vwf.yaml

@@ -1,47 +0,0 @@
-# Copyright 2012 United States Government, as represented by the Secretary of Defense, Under
-# Secretary of Defense (Personnel & Readiness).
-# 
-# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
-# in compliance with the License. You may obtain a copy of the License at
-# 
-#   http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software distributed under the License
-# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-# or implied. See the License for the specific language governing permissions and limitations under
-# the License.
-
---- 
-extends: http://vwf.example.com/node3.vwf
-implements:
-- http://vwf.example.com/sway-on-click.vwf
-source: seymourplane_triangulate.dae
-type: model/vnd.collada+xml
-properties:
-  rotation: [ 0, 0, 1, -90 ]
-  # sway-on-click configuration parameters
-  sway-axis: [ 1, 0, 0 ]
-children:
-  plane: 
-    extends: http://vwf.example.com/node3.vwf 
-    children: 
-      prop:
-        extends: http://vwf.example.com/node3.vwf
-        # # 1: Uncomment to apply the spin-on-click behavior to the prop
-        # # ... located in public/types/spin-on-click.vwf.yaml
-        properties:
-          spin-rate: 23
-        implements:
-        - http://vwf.example.com/spin-on-click.vwf
-        # # 2: Uncomment to enable/disable sway and rotate the prop on click
-scripts:
-- |
-  this.pointerClick = function() {
-    if ( this["sway-swaying"] ) {
-      this["sway-swaying"] = false;
-      this.plane.prop["spin-spinning"] = false;
-    } else {
-      this["sway-swaying"] = true;
-      this.plane.prop["spin-spinning"] = true;
-    }
-  }

File diff suppressed because it is too large
+ 0 - 225
public/plane/seymourplane_triangulate.dae


+ 0 - 26
public/vr/assets.json

@@ -1,26 +0,0 @@
-{
-    "bg":{
-        "tag": "img",
-        "src": "./assets/bg.jpg"
-    },
-    "sky":{
-        "tag": "img",
-        "src": "./assets/skyes/sky3.jpg"
-    },
-    "mon":{
-        "tag": "a-asset-item",
-        "src": "./assets/mon/model.gltf"
-    },
-    "av":{
-        "tag": "a-asset-item",
-        "src": "./assets/av/avatar1.gltf"
-    },
-     "bg2":{
-        "tag": "img",
-        "src": "./assets/checker.jpg"
-    },
-    "maleAvatar":{
-        "tag": "a-asset-item",
-        "src": "/../assets/avatars/male/avatar1.gltf"
-    }
-}

BIN
public/vr/assets/bg.jpg


BIN
public/vr/assets/checker.jpg


BIN
public/vr/assets/cloud10.png


BIN
public/vr/assets/floor.jpg


BIN
public/vr/assets/ico/pause.png


BIN
public/vr/assets/ico/play.png


BIN
public/vr/assets/ico/sound-off.png


BIN
public/vr/assets/ico/sound-on.png


BIN
public/vr/assets/mon/concrete1.png


BIN
public/vr/assets/mon/concrete_ground_fin1.png


BIN
public/vr/assets/mon/grass1_fin.png


BIN
public/vr/assets/mon/grass2_fin.png


BIN
public/vr/assets/mon/house_fin.png


BIN
public/vr/assets/mon/model.bin


+ 0 - 1379
public/vr/assets/mon/model.gltf

@@ -1,1379 +0,0 @@
-{
-    "accessors" : [
-        {
-            "bufferView" : 0, 
-            "componentType" : 5123, 
-            "count" : 3048, 
-            "max" : [
-                3047
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 1, 
-            "componentType" : 5126, 
-            "count" : 3048, 
-            "max" : [
-                2154.953125, 
-                179.5430450439453, 
-                561.7412109375
-            ], 
-            "min" : [
-                -1400.214111328125, 
-                -160.822509765625, 
-                361.06622314453125
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 2, 
-            "componentType" : 5126, 
-            "count" : 3048, 
-            "max" : [
-                0.9981797933578491, 
-                0.9999483227729797, 
-                0.9999634027481079
-            ], 
-            "min" : [
-                -0.9938223361968994, 
-                -0.999948263168335, 
-                -0.9999465942382812
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 3, 
-            "componentType" : 5126, 
-            "count" : 3048, 
-            "max" : [
-                0.9999992847442627, 
-                0.9997701644897461, 
-                0.9859136343002319, 
-                1.0
-            ], 
-            "min" : [
-                -0.9999990463256836, 
-                -0.9999999403953552, 
-                -0.9404096007347107, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 4, 
-            "componentType" : 5126, 
-            "count" : 3048, 
-            "max" : [
-                0.9662460088729858, 
-                0.9568333253264427
-            ], 
-            "min" : [
-                0.020078659057617188, 
-                0.5387802720069885
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 5, 
-            "componentType" : 5126, 
-            "count" : 3048, 
-            "max" : [
-                0.9995005130767822, 
-                0.9974959492683411
-            ], 
-            "min" : [
-                0.0004994869232177734, 
-                0.0025040507316589355
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 6, 
-            "componentType" : 5121, 
-            "count" : 36, 
-            "max" : [
-                23
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 7, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                2409.689208984375, 
-                1394.183349609375, 
-                557.0067138671875
-            ], 
-            "min" : [
-                -1570.933349609375, 
-                -4428.9580078125, 
-                553.3555297851562
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 8, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.999969482421875, 
-                0.999969482421875, 
-                1.0
-            ], 
-            "min" : [
-                -0.9998779296875, 
-                -0.999969482421875, 
-                -1.0
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 9, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.9999991059303284, 
-                0.9999901652336121, 
-                1.428983580770149e-11, 
-                1.0
-            ], 
-            "min" : [
-                -1.0, 
-                -0.9998976588249207, 
-                -3.360277744945961e-08, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 10, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.9143322706222534, 
-                2.674062967300415
-            ], 
-            "min" : [
-                -1.7761019468307495, 
-                0.03826010227203369
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 11, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.9995005130767822, 
-                0.9995004832744598
-            ], 
-            "min" : [
-                0.0004994869232177734, 
-                0.0004978179931640625
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 12, 
-            "componentType" : 5123, 
-            "count" : 408, 
-            "max" : [
-                319
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 13, 
-            "componentType" : 5126, 
-            "count" : 320, 
-            "max" : [
-                2076.62646484375, 
-                -2002.6561279296875, 
-                551.3213500976562
-            ], 
-            "min" : [
-                -51.38232421875, 
-                -4062.756591796875, 
-                407.06842041015625
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 14, 
-            "componentType" : 5126, 
-            "count" : 320, 
-            "max" : [
-                0.968828558921814, 
-                0.7209082245826721, 
-                0.9999973773956299
-            ], 
-            "min" : [
-                -0.9686529636383057, 
-                -0.24771618843078613, 
-                -0.9999973773956299
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 15, 
-            "componentType" : 5126, 
-            "count" : 320, 
-            "max" : [
-                0.6921502351760864, 
-                0.763036847114563, 
-                0.999813973903656, 
-                1.0
-            ], 
-            "min" : [
-                -1.0, 
-                -0.012638268060982227, 
-                -0.9999926090240479, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 16, 
-            "componentType" : 5126, 
-            "count" : 320, 
-            "max" : [
-                0.9519938230514526, 
-                0.9484422206878662
-            ], 
-            "min" : [
-                0.05574312433600426, 
-                0.04845726490020752
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 17, 
-            "componentType" : 5126, 
-            "count" : 320, 
-            "max" : [
-                0.9995004534721375, 
-                0.9995004534721375
-            ], 
-            "min" : [
-                0.0004995465278625488, 
-                0.0004995465278625488
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 18, 
-            "componentType" : 5123, 
-            "count" : 732, 
-            "max" : [
-                265
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 19, 
-            "componentType" : 5126, 
-            "count" : 266, 
-            "max" : [
-                2215.679931640625, 
-                1222.02392578125, 
-                553.511474609375
-            ], 
-            "min" : [
-                -1361.7548828125, 
-                -4034.57666015625, 
-                551.511474609375
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 20, 
-            "componentType" : 5126, 
-            "count" : 266, 
-            "max" : [
-                0.9969481229782104, 
-                0.999786376953125, 
-                1.0
-            ], 
-            "min" : [
-                -0.999969482421875, 
-                -0.999969482421875, 
-                -1.0
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 21, 
-            "componentType" : 5126, 
-            "count" : 266, 
-            "max" : [
-                1.0, 
-                0.0002075237425742671, 
-                2.1911339409541597e-09, 
-                1.0
-            ], 
-            "min" : [
-                -1.0, 
-                -0.0005310780834406614, 
-                -3.980125740099538e-08, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 22, 
-            "componentType" : 5126, 
-            "count" : 266, 
-            "max" : [
-                0.8864582777023315, 
-                1.8106380105018616
-            ], 
-            "min" : [
-                -1.5086511373519897, 
-                0.08066481351852417
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 23, 
-            "componentType" : 5126, 
-            "count" : 266, 
-            "max" : [
-                0.999500572681427, 
-                0.9995005130767822
-            ], 
-            "min" : [
-                0.000499427318572998, 
-                0.0004994869232177734
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 24, 
-            "componentType" : 5121, 
-            "count" : 312, 
-            "max" : [
-                123
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 25, 
-            "componentType" : 5126, 
-            "count" : 124, 
-            "max" : [
-                2409.689208984375, 
-                -2030.7833251953125, 
-                551.3213500976562
-            ], 
-            "min" : [
-                -44.1905517578125, 
-                -4430.484375, 
-                407.13446044921875
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 26, 
-            "componentType" : 5126, 
-            "count" : 124, 
-            "max" : [
-                0.999969482421875, 
-                0.9998779296875, 
-                1.0
-            ], 
-            "min" : [
-                -0.922635555267334, 
-                -0.999969482421875, 
-                -0.999847412109375
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 27, 
-            "componentType" : 5126, 
-            "count" : 124, 
-            "max" : [
-                0.9999973773956299, 
-                0.9733167886734009, 
-                1.0, 
-                1.0
-            ], 
-            "min" : [
-                -1.0, 
-                -0.4053860902786255, 
-                -1.0, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 28, 
-            "componentType" : 5126, 
-            "count" : 124, 
-            "max" : [
-                0.7948529124259949, 
-                0.9636451974511147
-            ], 
-            "min" : [
-                -1.7105169296264648, 
-                -1.123105525970459
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 29, 
-            "componentType" : 5126, 
-            "count" : 124, 
-            "max" : [
-                0.9995005130767822, 
-                0.9995005130767822
-            ], 
-            "min" : [
-                0.0004994869232177734, 
-                0.0004994869232177734
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 30, 
-            "componentType" : 5123, 
-            "count" : 30936, 
-            "max" : [
-                14280
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 31, 
-            "componentType" : 5126, 
-            "count" : 14281, 
-            "max" : [
-                527.2625122070312, 
-                541.1228637695312, 
-                554.564453125
-            ], 
-            "min" : [
-                -525.8133544921875, 
-                -521.7718505859375, 
-                -531.3485107421875
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 32, 
-            "componentType" : 5126, 
-            "count" : 14281, 
-            "max" : [
-                0.9959105253219604, 
-                0.9999738335609436, 
-                0.9956053495407104
-            ], 
-            "min" : [
-                -0.9963377714157104, 
-                -0.9999738335609436, 
-                -0.999664306640625
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 33, 
-            "componentType" : 5126, 
-            "count" : 14281, 
-            "max" : [
-                1.0, 
-                0.9996733665466309, 
-                0.9983628392219543, 
-                1.0
-            ], 
-            "min" : [
-                -1.0, 
-                -0.9996741414070129, 
-                -0.9933067560195923, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 34, 
-            "componentType" : 5126, 
-            "count" : 14281, 
-            "max" : [
-                0.9338573217391968, 
-                0.9446605741977692
-            ], 
-            "min" : [
-                0.05475935339927673, 
-                0.0547562837600708
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 35, 
-            "componentType" : 5126, 
-            "count" : 14281, 
-            "max" : [
-                0.9994744062423706, 
-                0.9994777739048004
-            ], 
-            "min" : [
-                0.0005277395248413086, 
-                0.000586390495300293
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 36, 
-            "componentType" : 5123, 
-            "count" : 42096, 
-            "max" : [
-                15553
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 37, 
-            "componentType" : 5126, 
-            "count" : 15554, 
-            "max" : [
-                488.2200012207031, 
-                481.24658203125, 
-                503.6288146972656
-            ], 
-            "min" : [
-                -487.360595703125, 
-                -461.8955383300781, 
-                -503.7215881347656
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 38, 
-            "componentType" : 5126, 
-            "count" : 15554, 
-            "max" : [
-                0.9928891658782959, 
-                1.0, 
-                0.9984435439109802
-            ], 
-            "min" : [
-                -0.9972838759422302, 
-                -1.0, 
-                -0.9952391386032104
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 39, 
-            "componentType" : 5126, 
-            "count" : 15554, 
-            "max" : [
-                1.0, 
-                0.9978805184364319, 
-                0.037844639271497726, 
-                1.0
-            ], 
-            "min" : [
-                -0.9999996423721313, 
-                -0.9978803992271423, 
-                -0.03920215740799904, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 40, 
-            "componentType" : 5126, 
-            "count" : 15554, 
-            "max" : [
-                0.8215230703353882, 
-                0.9740166366100311
-            ], 
-            "min" : [
-                0.055350661277770996, 
-                0.03179192543029785
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 41, 
-            "componentType" : 5126, 
-            "count" : 15554, 
-            "max" : [
-                0.9995005130767822, 
-                0.9995005130767822
-            ], 
-            "min" : [
-                0.0004994869232177734, 
-                0.0004994869232177734
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 42, 
-            "componentType" : 5121, 
-            "count" : 36, 
-            "max" : [
-                23
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 43, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                2408.0615234375, 
-                -1685.9091796875, 
-                557.59228515625
-            ], 
-            "min" : [
-                1913.132568359375, 
-                -4062.47412109375, 
-                194.59228515625
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 44, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.999969482421875, 
-                0.9505600333213806, 
-                1.0
-            ], 
-            "min" : [
-                -0.9963072538375854, 
-                -0.9701834321022034, 
-                -1.0
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 45, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.970140814781189, 
-                0.9999142289161682, 
-                0.01233687438070774, 
-                1.0
-            ], 
-            "min" : [
-                -1.0, 
-                -0.9962922930717468, 
-                -0.012096376158297062, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 46, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.9310998916625977, 
-                3.179044723510742
-            ], 
-            "min" : [
-                -2.4045889377593994, 
-                0.26415449380874634
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 47, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.9995004534721375, 
-                0.9995005428791046
-            ], 
-            "min" : [
-                0.0004994571208953857, 
-                0.0004994869232177734
-            ], 
-            "type" : "VEC2"
-        }
-    ], 
-    "asset" : {
-        "generator" : "Khronos Blender glTF 2.0 exporter", 
-        "version" : "2.0"
-    }, 
-    "bufferViews" : [
-        {
-            "buffer" : 0, 
-            "byteLength" : 6096, 
-            "byteOffset" : 0, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 36576, 
-            "byteOffset" : 6096, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 36576, 
-            "byteOffset" : 42672, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 48768, 
-            "byteOffset" : 79248, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 24384, 
-            "byteOffset" : 128016, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 24384, 
-            "byteOffset" : 152400, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 36, 
-            "byteOffset" : 176784, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 288, 
-            "byteOffset" : 176820, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 288, 
-            "byteOffset" : 177108, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 384, 
-            "byteOffset" : 177396, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 192, 
-            "byteOffset" : 177780, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 192, 
-            "byteOffset" : 177972, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 816, 
-            "byteOffset" : 178164, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 3840, 
-            "byteOffset" : 178980, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 3840, 
-            "byteOffset" : 182820, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 5120, 
-            "byteOffset" : 186660, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 2560, 
-            "byteOffset" : 191780, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 2560, 
-            "byteOffset" : 194340, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 1464, 
-            "byteOffset" : 196900, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 3192, 
-            "byteOffset" : 198364, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 3192, 
-            "byteOffset" : 201556, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 4256, 
-            "byteOffset" : 204748, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 2128, 
-            "byteOffset" : 209004, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 2128, 
-            "byteOffset" : 211132, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 312, 
-            "byteOffset" : 213260, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 1488, 
-            "byteOffset" : 213572, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 1488, 
-            "byteOffset" : 215060, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 1984, 
-            "byteOffset" : 216548, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 992, 
-            "byteOffset" : 218532, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 992, 
-            "byteOffset" : 219524, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 61872, 
-            "byteOffset" : 220516, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 171372, 
-            "byteOffset" : 282388, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 171372, 
-            "byteOffset" : 453760, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 228496, 
-            "byteOffset" : 625132, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 114248, 
-            "byteOffset" : 853628, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 114248, 
-            "byteOffset" : 967876, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 84192, 
-            "byteOffset" : 1082124, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 186648, 
-            "byteOffset" : 1166316, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 186648, 
-            "byteOffset" : 1352964, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 248864, 
-            "byteOffset" : 1539612, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 124432, 
-            "byteOffset" : 1788476, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 124432, 
-            "byteOffset" : 1912908, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 36, 
-            "byteOffset" : 2037340, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 288, 
-            "byteOffset" : 2037376, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 288, 
-            "byteOffset" : 2037664, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 384, 
-            "byteOffset" : 2037952, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 192, 
-            "byteOffset" : 2038336, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 192, 
-            "byteOffset" : 2038528, 
-            "target" : 34962
-        }
-    ], 
-    "buffers" : [
-        {
-            "byteLength" : 2038720, 
-            "uri" : "model.bin"
-        }
-    ], 
-    "cameras" : [
-        {
-            "name" : "Camera", 
-            "perspective" : {
-                "aspectRatio" : 1.7777777777777777, 
-                "yfov" : 0.5033799372418416, 
-                "zfar" : 100.0, 
-                "znear" : 0.10000000149011612
-            }, 
-            "type" : "perspective"
-        }
-    ], 
-    "images" : [
-        {
-            "uri" : "uv_bridge3.png"
-        }, 
-        {
-            "uri" : "wall_ground_fin.png"
-        }, 
-        {
-            "uri" : "house_fin.png"
-        }, 
-        {
-            "uri" : "grass1_fin.png"
-        }, 
-        {
-            "uri" : "grass2_fin.png"
-        }, 
-        {
-            "uri" : "concrete_ground_fin1.png"
-        }, 
-        {
-            "uri" : "concrete1.png"
-        }, 
-        {
-            "uri" : "new_metal2.png"
-        }, 
-        {
-            "uri" : "new_metal_NRM1.png"
-        }
-    ], 
-    "materials" : [
-        {
-            "name" : "bridge.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 0
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "Concrete_Smooth95.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 1
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "dom.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 2
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "grass1.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 3
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "grass2.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 4
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "podosnova.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 5
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "tarelka_concrete.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 6
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "tarelka_metall.001", 
-            "normalTexture" : {
-                "index" : 8
-            }, 
-            "pbrMetallicRoughness" : {
-                "baseColorTexture" : {
-                    "index" : 7
-                }, 
-                "roughnessFactor" : 0.418181836605072
-            }
-        }
-    ], 
-    "meshes" : [
-        {
-            "name" : "Untitled.001", 
-            "primitives" : [
-                {
-                    "attributes" : {
-                        "NORMAL" : 2, 
-                        "POSITION" : 1, 
-                        "TANGENT" : 3, 
-                        "TEXCOORD_0" : 4, 
-                        "TEXCOORD_1" : 5
-                    }, 
-                    "indices" : 0, 
-                    "material" : 0
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 8, 
-                        "POSITION" : 7, 
-                        "TANGENT" : 9, 
-                        "TEXCOORD_0" : 10, 
-                        "TEXCOORD_1" : 11
-                    }, 
-                    "indices" : 6, 
-                    "material" : 5
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 14, 
-                        "POSITION" : 13, 
-                        "TANGENT" : 15, 
-                        "TEXCOORD_0" : 16, 
-                        "TEXCOORD_1" : 17
-                    }, 
-                    "indices" : 12, 
-                    "material" : 1
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 20, 
-                        "POSITION" : 19, 
-                        "TANGENT" : 21, 
-                        "TEXCOORD_0" : 22, 
-                        "TEXCOORD_1" : 23
-                    }, 
-                    "indices" : 18, 
-                    "material" : 3
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 26, 
-                        "POSITION" : 25, 
-                        "TANGENT" : 27, 
-                        "TEXCOORD_0" : 28, 
-                        "TEXCOORD_1" : 29
-                    }, 
-                    "indices" : 24, 
-                    "material" : 4
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 32, 
-                        "POSITION" : 31, 
-                        "TANGENT" : 33, 
-                        "TEXCOORD_0" : 34, 
-                        "TEXCOORD_1" : 35
-                    }, 
-                    "indices" : 30, 
-                    "material" : 6
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 38, 
-                        "POSITION" : 37, 
-                        "TANGENT" : 39, 
-                        "TEXCOORD_0" : 40, 
-                        "TEXCOORD_1" : 41
-                    }, 
-                    "indices" : 36, 
-                    "material" : 7
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 44, 
-                        "POSITION" : 43, 
-                        "TANGENT" : 45, 
-                        "TEXCOORD_0" : 46, 
-                        "TEXCOORD_1" : 47
-                    }, 
-                    "indices" : 42, 
-                    "material" : 2
-                }
-            ]
-        }
-    ], 
-    "nodes" : [
-        {
-            "camera" : 0, 
-            "name" : "Correction_Camera", 
-            "rotation" : [
-                -0.7071067690849304, 
-                -0.0, 
-                0.0, 
-                0.7071067690849304
-            ]
-        }, 
-        {
-            "children" : [
-                0
-            ], 
-            "name" : "Camera", 
-            "rotation" : [
-                0.483536034822464, 
-                0.33687159419059753, 
-                -0.20870360732078552, 
-                0.7804827094078064
-            ], 
-            "translation" : [
-                7.481131553649902, 
-                5.34366512298584, 
-                6.5076398849487305
-            ]
-        }, 
-        {
-            "mesh" : 0, 
-            "name" : "Sphere003", 
-            "rotation" : [
-                -0.7071068286895752, 
-                1.0677015183091498e-07, 
-                1.0677017314719706e-07, 
-                0.7071067094802856
-            ], 
-            "scale" : [
-                -0.009999999776482582, 
-                -0.005826558452099562, 
-                -0.009999999776482582
-            ], 
-            "translation" : [
-                6.082563400268555, 
-                -0.5265352725982666, 
-                -17.64678382873535
-            ]
-        }
-    ], 
-    "samplers" : [
-        {}
-    ], 
-    "scene" : 0, 
-    "scenes" : [
-        {
-            "name" : "Scene", 
-            "nodes" : [
-                2, 
-                1
-            ]
-        }
-    ], 
-    "textures" : [
-        {
-            "sampler" : 0, 
-            "source" : 0
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 1
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 2
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 3
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 4
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 5
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 6
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 7
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 8
-        }
-    ]
-}

+ 0 - 1379
public/vr/assets/mon/model.gltf 2

@@ -1,1379 +0,0 @@
-{
-    "accessors" : [
-        {
-            "bufferView" : 0, 
-            "componentType" : 5123, 
-            "count" : 3048, 
-            "max" : [
-                3047
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 1, 
-            "componentType" : 5126, 
-            "count" : 3048, 
-            "max" : [
-                2154.953125, 
-                179.5430450439453, 
-                561.7412109375
-            ], 
-            "min" : [
-                -1400.214111328125, 
-                -160.822509765625, 
-                361.06622314453125
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 2, 
-            "componentType" : 5126, 
-            "count" : 3048, 
-            "max" : [
-                0.9981797933578491, 
-                0.9999483227729797, 
-                0.9999634027481079
-            ], 
-            "min" : [
-                -0.9938223361968994, 
-                -0.999948263168335, 
-                -0.9999465942382812
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 3, 
-            "componentType" : 5126, 
-            "count" : 3048, 
-            "max" : [
-                0.9999992847442627, 
-                0.9997701644897461, 
-                0.9859136343002319, 
-                1.0
-            ], 
-            "min" : [
-                -0.9999990463256836, 
-                -0.9999999403953552, 
-                -0.9404096007347107, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 4, 
-            "componentType" : 5126, 
-            "count" : 3048, 
-            "max" : [
-                0.9662460088729858, 
-                0.9568333253264427
-            ], 
-            "min" : [
-                0.020078659057617188, 
-                0.5387802720069885
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 5, 
-            "componentType" : 5126, 
-            "count" : 3048, 
-            "max" : [
-                0.9995005130767822, 
-                0.9974959492683411
-            ], 
-            "min" : [
-                0.0004994869232177734, 
-                0.0025040507316589355
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 6, 
-            "componentType" : 5121, 
-            "count" : 36, 
-            "max" : [
-                23
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 7, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                2409.689208984375, 
-                1394.183349609375, 
-                557.0067138671875
-            ], 
-            "min" : [
-                -1570.933349609375, 
-                -4428.9580078125, 
-                553.3555297851562
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 8, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.999969482421875, 
-                0.999969482421875, 
-                1.0
-            ], 
-            "min" : [
-                -0.9998779296875, 
-                -0.999969482421875, 
-                -1.0
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 9, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.9999991059303284, 
-                0.9999901652336121, 
-                1.428983580770149e-11, 
-                1.0
-            ], 
-            "min" : [
-                -1.0, 
-                -0.9998976588249207, 
-                -3.360277744945961e-08, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 10, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.9143322706222534, 
-                2.674062967300415
-            ], 
-            "min" : [
-                -1.7761019468307495, 
-                0.03826010227203369
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 11, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.9995005130767822, 
-                0.9995004832744598
-            ], 
-            "min" : [
-                0.0004994869232177734, 
-                0.0004978179931640625
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 12, 
-            "componentType" : 5123, 
-            "count" : 408, 
-            "max" : [
-                319
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 13, 
-            "componentType" : 5126, 
-            "count" : 320, 
-            "max" : [
-                2076.62646484375, 
-                -2002.6561279296875, 
-                551.3213500976562
-            ], 
-            "min" : [
-                -51.38232421875, 
-                -4062.756591796875, 
-                407.06842041015625
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 14, 
-            "componentType" : 5126, 
-            "count" : 320, 
-            "max" : [
-                0.968828558921814, 
-                0.7209082245826721, 
-                0.9999973773956299
-            ], 
-            "min" : [
-                -0.9686529636383057, 
-                -0.24771618843078613, 
-                -0.9999973773956299
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 15, 
-            "componentType" : 5126, 
-            "count" : 320, 
-            "max" : [
-                0.6921502351760864, 
-                0.763036847114563, 
-                0.999813973903656, 
-                1.0
-            ], 
-            "min" : [
-                -1.0, 
-                -0.012638268060982227, 
-                -0.9999926090240479, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 16, 
-            "componentType" : 5126, 
-            "count" : 320, 
-            "max" : [
-                0.9519938230514526, 
-                0.9484422206878662
-            ], 
-            "min" : [
-                0.05574312433600426, 
-                0.04845726490020752
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 17, 
-            "componentType" : 5126, 
-            "count" : 320, 
-            "max" : [
-                0.9995004534721375, 
-                0.9995004534721375
-            ], 
-            "min" : [
-                0.0004995465278625488, 
-                0.0004995465278625488
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 18, 
-            "componentType" : 5123, 
-            "count" : 732, 
-            "max" : [
-                265
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 19, 
-            "componentType" : 5126, 
-            "count" : 266, 
-            "max" : [
-                2215.679931640625, 
-                1222.02392578125, 
-                553.511474609375
-            ], 
-            "min" : [
-                -1361.7548828125, 
-                -4034.57666015625, 
-                551.511474609375
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 20, 
-            "componentType" : 5126, 
-            "count" : 266, 
-            "max" : [
-                0.9969481229782104, 
-                0.999786376953125, 
-                1.0
-            ], 
-            "min" : [
-                -0.999969482421875, 
-                -0.999969482421875, 
-                -1.0
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 21, 
-            "componentType" : 5126, 
-            "count" : 266, 
-            "max" : [
-                1.0, 
-                0.0002075237425742671, 
-                2.1911339409541597e-09, 
-                1.0
-            ], 
-            "min" : [
-                -1.0, 
-                -0.0005310780834406614, 
-                -3.980125740099538e-08, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 22, 
-            "componentType" : 5126, 
-            "count" : 266, 
-            "max" : [
-                0.8864582777023315, 
-                1.8106380105018616
-            ], 
-            "min" : [
-                -1.5086511373519897, 
-                0.08066481351852417
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 23, 
-            "componentType" : 5126, 
-            "count" : 266, 
-            "max" : [
-                0.999500572681427, 
-                0.9995005130767822
-            ], 
-            "min" : [
-                0.000499427318572998, 
-                0.0004994869232177734
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 24, 
-            "componentType" : 5121, 
-            "count" : 312, 
-            "max" : [
-                123
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 25, 
-            "componentType" : 5126, 
-            "count" : 124, 
-            "max" : [
-                2409.689208984375, 
-                -2030.7833251953125, 
-                551.3213500976562
-            ], 
-            "min" : [
-                -44.1905517578125, 
-                -4430.484375, 
-                407.13446044921875
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 26, 
-            "componentType" : 5126, 
-            "count" : 124, 
-            "max" : [
-                0.999969482421875, 
-                0.9998779296875, 
-                1.0
-            ], 
-            "min" : [
-                -0.922635555267334, 
-                -0.999969482421875, 
-                -0.999847412109375
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 27, 
-            "componentType" : 5126, 
-            "count" : 124, 
-            "max" : [
-                0.9999973773956299, 
-                0.9733167886734009, 
-                1.0, 
-                1.0
-            ], 
-            "min" : [
-                -1.0, 
-                -0.4053860902786255, 
-                -1.0, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 28, 
-            "componentType" : 5126, 
-            "count" : 124, 
-            "max" : [
-                0.7948529124259949, 
-                0.9636451974511147
-            ], 
-            "min" : [
-                -1.7105169296264648, 
-                -1.123105525970459
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 29, 
-            "componentType" : 5126, 
-            "count" : 124, 
-            "max" : [
-                0.9995005130767822, 
-                0.9995005130767822
-            ], 
-            "min" : [
-                0.0004994869232177734, 
-                0.0004994869232177734
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 30, 
-            "componentType" : 5123, 
-            "count" : 30936, 
-            "max" : [
-                14280
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 31, 
-            "componentType" : 5126, 
-            "count" : 14281, 
-            "max" : [
-                527.2625122070312, 
-                541.1228637695312, 
-                554.564453125
-            ], 
-            "min" : [
-                -525.8133544921875, 
-                -521.7718505859375, 
-                -531.3485107421875
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 32, 
-            "componentType" : 5126, 
-            "count" : 14281, 
-            "max" : [
-                0.9959105253219604, 
-                0.9999738335609436, 
-                0.9956053495407104
-            ], 
-            "min" : [
-                -0.9963377714157104, 
-                -0.9999738335609436, 
-                -0.999664306640625
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 33, 
-            "componentType" : 5126, 
-            "count" : 14281, 
-            "max" : [
-                1.0, 
-                0.9996733665466309, 
-                0.9983628392219543, 
-                1.0
-            ], 
-            "min" : [
-                -1.0, 
-                -0.9996741414070129, 
-                -0.9933067560195923, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 34, 
-            "componentType" : 5126, 
-            "count" : 14281, 
-            "max" : [
-                0.9338573217391968, 
-                0.9446605741977692
-            ], 
-            "min" : [
-                0.05475935339927673, 
-                0.0547562837600708
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 35, 
-            "componentType" : 5126, 
-            "count" : 14281, 
-            "max" : [
-                0.9994744062423706, 
-                0.9994777739048004
-            ], 
-            "min" : [
-                0.0005277395248413086, 
-                0.000586390495300293
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 36, 
-            "componentType" : 5123, 
-            "count" : 42096, 
-            "max" : [
-                15553
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 37, 
-            "componentType" : 5126, 
-            "count" : 15554, 
-            "max" : [
-                488.2200012207031, 
-                481.24658203125, 
-                503.6288146972656
-            ], 
-            "min" : [
-                -487.360595703125, 
-                -461.8955383300781, 
-                -503.7215881347656
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 38, 
-            "componentType" : 5126, 
-            "count" : 15554, 
-            "max" : [
-                0.9928891658782959, 
-                1.0, 
-                0.9984435439109802
-            ], 
-            "min" : [
-                -0.9972838759422302, 
-                -1.0, 
-                -0.9952391386032104
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 39, 
-            "componentType" : 5126, 
-            "count" : 15554, 
-            "max" : [
-                1.0, 
-                0.9978805184364319, 
-                0.037844639271497726, 
-                1.0
-            ], 
-            "min" : [
-                -0.9999996423721313, 
-                -0.9978803992271423, 
-                -0.03920215740799904, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 40, 
-            "componentType" : 5126, 
-            "count" : 15554, 
-            "max" : [
-                0.8215230703353882, 
-                0.9740166366100311
-            ], 
-            "min" : [
-                0.055350661277770996, 
-                0.03179192543029785
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 41, 
-            "componentType" : 5126, 
-            "count" : 15554, 
-            "max" : [
-                0.9995005130767822, 
-                0.9995005130767822
-            ], 
-            "min" : [
-                0.0004994869232177734, 
-                0.0004994869232177734
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 42, 
-            "componentType" : 5121, 
-            "count" : 36, 
-            "max" : [
-                23
-            ], 
-            "min" : [
-                0
-            ], 
-            "type" : "SCALAR"
-        }, 
-        {
-            "bufferView" : 43, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                2408.0615234375, 
-                -1685.9091796875, 
-                557.59228515625
-            ], 
-            "min" : [
-                1913.132568359375, 
-                -4062.47412109375, 
-                194.59228515625
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 44, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.999969482421875, 
-                0.9505600333213806, 
-                1.0
-            ], 
-            "min" : [
-                -0.9963072538375854, 
-                -0.9701834321022034, 
-                -1.0
-            ], 
-            "type" : "VEC3"
-        }, 
-        {
-            "bufferView" : 45, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.970140814781189, 
-                0.9999142289161682, 
-                0.01233687438070774, 
-                1.0
-            ], 
-            "min" : [
-                -1.0, 
-                -0.9962922930717468, 
-                -0.012096376158297062, 
-                1.0
-            ], 
-            "type" : "VEC4"
-        }, 
-        {
-            "bufferView" : 46, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.9310998916625977, 
-                3.179044723510742
-            ], 
-            "min" : [
-                -2.4045889377593994, 
-                0.26415449380874634
-            ], 
-            "type" : "VEC2"
-        }, 
-        {
-            "bufferView" : 47, 
-            "componentType" : 5126, 
-            "count" : 24, 
-            "max" : [
-                0.9995004534721375, 
-                0.9995005428791046
-            ], 
-            "min" : [
-                0.0004994571208953857, 
-                0.0004994869232177734
-            ], 
-            "type" : "VEC2"
-        }
-    ], 
-    "asset" : {
-        "generator" : "Khronos Blender glTF 2.0 exporter", 
-        "version" : "2.0"
-    }, 
-    "bufferViews" : [
-        {
-            "buffer" : 0, 
-            "byteLength" : 6096, 
-            "byteOffset" : 0, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 36576, 
-            "byteOffset" : 6096, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 36576, 
-            "byteOffset" : 42672, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 48768, 
-            "byteOffset" : 79248, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 24384, 
-            "byteOffset" : 128016, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 24384, 
-            "byteOffset" : 152400, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 36, 
-            "byteOffset" : 176784, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 288, 
-            "byteOffset" : 176820, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 288, 
-            "byteOffset" : 177108, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 384, 
-            "byteOffset" : 177396, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 192, 
-            "byteOffset" : 177780, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 192, 
-            "byteOffset" : 177972, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 816, 
-            "byteOffset" : 178164, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 3840, 
-            "byteOffset" : 178980, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 3840, 
-            "byteOffset" : 182820, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 5120, 
-            "byteOffset" : 186660, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 2560, 
-            "byteOffset" : 191780, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 2560, 
-            "byteOffset" : 194340, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 1464, 
-            "byteOffset" : 196900, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 3192, 
-            "byteOffset" : 198364, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 3192, 
-            "byteOffset" : 201556, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 4256, 
-            "byteOffset" : 204748, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 2128, 
-            "byteOffset" : 209004, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 2128, 
-            "byteOffset" : 211132, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 312, 
-            "byteOffset" : 213260, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 1488, 
-            "byteOffset" : 213572, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 1488, 
-            "byteOffset" : 215060, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 1984, 
-            "byteOffset" : 216548, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 992, 
-            "byteOffset" : 218532, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 992, 
-            "byteOffset" : 219524, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 61872, 
-            "byteOffset" : 220516, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 171372, 
-            "byteOffset" : 282388, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 171372, 
-            "byteOffset" : 453760, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 228496, 
-            "byteOffset" : 625132, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 114248, 
-            "byteOffset" : 853628, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 114248, 
-            "byteOffset" : 967876, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 84192, 
-            "byteOffset" : 1082124, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 186648, 
-            "byteOffset" : 1166316, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 186648, 
-            "byteOffset" : 1352964, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 248864, 
-            "byteOffset" : 1539612, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 124432, 
-            "byteOffset" : 1788476, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 124432, 
-            "byteOffset" : 1912908, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 36, 
-            "byteOffset" : 2037340, 
-            "target" : 34963
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 288, 
-            "byteOffset" : 2037376, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 288, 
-            "byteOffset" : 2037664, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 384, 
-            "byteOffset" : 2037952, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 192, 
-            "byteOffset" : 2038336, 
-            "target" : 34962
-        }, 
-        {
-            "buffer" : 0, 
-            "byteLength" : 192, 
-            "byteOffset" : 2038528, 
-            "target" : 34962
-        }
-    ], 
-    "buffers" : [
-        {
-            "byteLength" : 2038720, 
-            "uri" : "model.bin"
-        }
-    ], 
-    "cameras" : [
-        {
-            "name" : "Camera", 
-            "perspective" : {
-                "aspectRatio" : 1.7777777777777777, 
-                "yfov" : 0.5033799372418416, 
-                "zfar" : 100.0, 
-                "znear" : 0.10000000149011612
-            }, 
-            "type" : "perspective"
-        }
-    ], 
-    "images" : [
-        {
-            "uri" : "uv_bridge3.png"
-        }, 
-        {
-            "uri" : "wall_ground_fin.png"
-        }, 
-        {
-            "uri" : "house_fin.png"
-        }, 
-        {
-            "uri" : "grass1_fin.png"
-        }, 
-        {
-            "uri" : "grass2_fin.png"
-        }, 
-        {
-            "uri" : "concrete_ground_fin1.png"
-        }, 
-        {
-            "uri" : "concrete1.png"
-        }, 
-        {
-            "uri" : "new_metal (2).png"
-        }, 
-        {
-            "uri" : "new_metal_NRM1.png"
-        }
-    ], 
-    "materials" : [
-        {
-            "name" : "bridge.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 0
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "Concrete_Smooth95.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 1
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "dom.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 2
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "grass1.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 3
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "grass2.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 4
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "podosnova.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 5
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "tarelka_concrete.001", 
-            "pbrMetallicRoughness" : {
-                "baseColorFactor" : [
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    0.4704000066280365, 
-                    1.0
-                ], 
-                "baseColorTexture" : {
-                    "index" : 6
-                }, 
-                "metallicFactor" : 0.0
-            }
-        }, 
-        {
-            "name" : "tarelka_metall.001", 
-            "normalTexture" : {
-                "index" : 8
-            }, 
-            "pbrMetallicRoughness" : {
-                "baseColorTexture" : {
-                    "index" : 7
-                }, 
-                "roughnessFactor" : 0.418181836605072
-            }
-        }
-    ], 
-    "meshes" : [
-        {
-            "name" : "Untitled.001", 
-            "primitives" : [
-                {
-                    "attributes" : {
-                        "NORMAL" : 2, 
-                        "POSITION" : 1, 
-                        "TANGENT" : 3, 
-                        "TEXCOORD_0" : 4, 
-                        "TEXCOORD_1" : 5
-                    }, 
-                    "indices" : 0, 
-                    "material" : 0
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 8, 
-                        "POSITION" : 7, 
-                        "TANGENT" : 9, 
-                        "TEXCOORD_0" : 10, 
-                        "TEXCOORD_1" : 11
-                    }, 
-                    "indices" : 6, 
-                    "material" : 5
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 14, 
-                        "POSITION" : 13, 
-                        "TANGENT" : 15, 
-                        "TEXCOORD_0" : 16, 
-                        "TEXCOORD_1" : 17
-                    }, 
-                    "indices" : 12, 
-                    "material" : 1
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 20, 
-                        "POSITION" : 19, 
-                        "TANGENT" : 21, 
-                        "TEXCOORD_0" : 22, 
-                        "TEXCOORD_1" : 23
-                    }, 
-                    "indices" : 18, 
-                    "material" : 3
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 26, 
-                        "POSITION" : 25, 
-                        "TANGENT" : 27, 
-                        "TEXCOORD_0" : 28, 
-                        "TEXCOORD_1" : 29
-                    }, 
-                    "indices" : 24, 
-                    "material" : 4
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 32, 
-                        "POSITION" : 31, 
-                        "TANGENT" : 33, 
-                        "TEXCOORD_0" : 34, 
-                        "TEXCOORD_1" : 35
-                    }, 
-                    "indices" : 30, 
-                    "material" : 6
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 38, 
-                        "POSITION" : 37, 
-                        "TANGENT" : 39, 
-                        "TEXCOORD_0" : 40, 
-                        "TEXCOORD_1" : 41
-                    }, 
-                    "indices" : 36, 
-                    "material" : 7
-                }, 
-                {
-                    "attributes" : {
-                        "NORMAL" : 44, 
-                        "POSITION" : 43, 
-                        "TANGENT" : 45, 
-                        "TEXCOORD_0" : 46, 
-                        "TEXCOORD_1" : 47
-                    }, 
-                    "indices" : 42, 
-                    "material" : 2
-                }
-            ]
-        }
-    ], 
-    "nodes" : [
-        {
-            "camera" : 0, 
-            "name" : "Correction_Camera", 
-            "rotation" : [
-                -0.7071067690849304, 
-                -0.0, 
-                0.0, 
-                0.7071067690849304
-            ]
-        }, 
-        {
-            "children" : [
-                0
-            ], 
-            "name" : "Camera", 
-            "rotation" : [
-                0.483536034822464, 
-                0.33687159419059753, 
-                -0.20870360732078552, 
-                0.7804827094078064
-            ], 
-            "translation" : [
-                7.481131553649902, 
-                5.34366512298584, 
-                6.5076398849487305
-            ]
-        }, 
-        {
-            "mesh" : 0, 
-            "name" : "Sphere003", 
-            "rotation" : [
-                -0.7071068286895752, 
-                1.0677015183091498e-07, 
-                1.0677017314719706e-07, 
-                0.7071067094802856
-            ], 
-            "scale" : [
-                -0.009999999776482582, 
-                -0.005826558452099562, 
-                -0.009999999776482582
-            ], 
-            "translation" : [
-                6.082563400268555, 
-                -0.5265352725982666, 
-                -17.64678382873535
-            ]
-        }
-    ], 
-    "samplers" : [
-        {}
-    ], 
-    "scene" : 0, 
-    "scenes" : [
-        {
-            "name" : "Scene", 
-            "nodes" : [
-                2, 
-                1
-            ]
-        }
-    ], 
-    "textures" : [
-        {
-            "sampler" : 0, 
-            "source" : 0
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 1
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 2
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 3
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 4
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 5
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 6
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 7
-        }, 
-        {
-            "sampler" : 0, 
-            "source" : 8
-        }
-    ]
-}

BIN
public/vr/assets/mon/new_metal2.png


BIN
public/vr/assets/mon/new_metal_NRM1.png


BIN
public/vr/assets/mon/uv_bridge3.png


BIN
public/vr/assets/mon/wall_ground_fin.png


BIN
public/vr/assets/skyes/sky1.jpg


BIN
public/vr/assets/skyes/sky2.jpg


BIN
public/vr/assets/skyes/sky3.jpg


BIN
public/vr/assets/sounds/footsteps.mp3


BIN
public/vr/assets/sounds/golos.mp3


BIN
public/vr/assets/textures/cube/nx.jpg


BIN
public/vr/assets/textures/cube/ny.jpg


BIN
public/vr/assets/textures/cube/nz.jpg


BIN
public/vr/assets/textures/cube/px.jpg


BIN
public/vr/assets/textures/cube/py.jpg


BIN
public/vr/assets/textures/cube/pz.jpg


BIN
public/vr/assets/textures/skybox/nx.jpg


BIN
public/vr/assets/textures/skybox/ny.jpg


BIN
public/vr/assets/textures/skybox/nz.jpg


BIN
public/vr/assets/textures/skybox/px.jpg


BIN
public/vr/assets/textures/skybox/py.jpg


BIN
public/vr/assets/textures/skybox/pz.jpg


BIN
public/vr/assets/textures/skybox2/nx.jpg


BIN
public/vr/assets/textures/skybox2/ny.jpg


BIN
public/vr/assets/textures/skybox2/nz.jpg


BIN
public/vr/assets/textures/skybox2/px.jpg


BIN
public/vr/assets/textures/skybox2/py.jpg


BIN
public/vr/assets/textures/skybox2/pz.jpg


+ 0 - 143
public/vr/assets/walk.bvh

@@ -1,143 +0,0 @@
-HIERARCHY
-ROOT hip
-{
-	OFFSET	0.00  0.00  0.00 
-	CHANNELS 6 Xposition Yposition Zposition Xrotation Zrotation Yrotation
-	JOINT abdomen
-	{
-		OFFSET	0.000000 0.000000 0.000000
-		CHANNELS 3 Xrotation Zrotation Yrotation
-		JOINT chest
-		{
-			OFFSET	0.000000 5.018152 -1.882228
-			CHANNELS 3 Xrotation Zrotation Yrotation
-			JOINT neckDummy
-			{
-				OFFSET	0.000000 8.316447 0.784897
-				CHANNELS 3 Xrotation Yrotation Zrotation
-				JOINT neck
-				{
-					OFFSET	0.000000 2.280413 -0.392801
-					CHANNELS 3 Xrotation Zrotation Yrotation
-					JOINT head
-					{
-						OFFSET	0.000000 3.496879 0.529469
-						CHANNELS 3 Xrotation Zrotation Yrotation
-						JOINT figureHair
-						{
-							OFFSET	0.000000 4.699570 0.720622
-							CHANNELS 3 Zrotation Yrotation Xrotation
-							End Site
-							{
-								OFFSET 0.000000 -6.419331 0.000000
-							}
-						}
-					}
-				}
-			}
-			JOINT lCollar
-			{
-				OFFSET	0.599237 8.316447 0.784897
-				CHANNELS 3 Yrotation Zrotation Xrotation
-				JOINT lShldr
-				{
-					OFFSET	6.421198 0.010146 -0.332128
-					CHANNELS 3 Zrotation Yrotation Xrotation
-					JOINT lForeArm
-					{
-						OFFSET	10.552783 0.025574 0.125508
-						CHANNELS 3 Yrotation Zrotation Xrotation
-						JOINT lHand
-						{
-							OFFSET	11.035963 0.319619 0.041520
-							CHANNELS 3 Zrotation Yrotation Xrotation
-							End Site
-							{
-								OFFSET 10.353753 0.000000 0.000000
-							}
-						}
-					}
-				}
-			}
-			JOINT rCollar
-			{
-				OFFSET	-0.599237 8.316447 0.784897
-				CHANNELS 3 Yrotation Zrotation Xrotation
-				JOINT rShldr
-				{
-					OFFSET	-6.421198 0.010146 -0.332128
-					CHANNELS 3 Zrotation Yrotation Xrotation
-					JOINT rForeArm
-					{
-						OFFSET	-10.552783 0.025574 0.125508
-						CHANNELS 3 Yrotation Zrotation Xrotation
-						JOINT rHand
-						{
-							OFFSET	-11.035963 0.319619 0.041520
-							CHANNELS 3 Zrotation Yrotation Xrotation
-							End Site
-							{
-								OFFSET -10.353753 0.000000 0.000000
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-	JOINT lThigh
-	{
-		OFFSET	4.500466 -6.400484 -1.832696
-		CHANNELS 3 Xrotation Zrotation Yrotation
-		JOINT lShin
-		{
-			OFFSET	-1.359117 -18.918689 1.179887
-			CHANNELS 3 Xrotation Zrotation Yrotation
-			JOINT lFoot
-			{
-				OFFSET	-0.652380 -17.215186 -0.312137
-				CHANNELS 3 Xrotation Yrotation Zrotation
-				End Site
-				{
-					OFFSET 0.000000 0.000000 10.353752
-				}
-			}
-		}
-	}
-	JOINT rThigh
-	{
-		OFFSET	-4.500466 -6.400484 -1.832696
-		CHANNELS 3 Xrotation Zrotation Yrotation
-		JOINT rShin
-		{
-			OFFSET	1.359117 -18.918689 1.179887
-			CHANNELS 3 Xrotation Zrotation Yrotation
-			JOINT rFoot
-			{
-				OFFSET	0.652380 -17.215186 -0.312137
-				CHANNELS 3 Xrotation Yrotation Zrotation
-				End Site
-				{
-					OFFSET 0.000000 0.000000 10.353752
-				}
-			}
-		}
-	}
-}
-MOTION
-Frames:     14
-Frame Time: 0.066667
--0.025751 40.586620 2.968130 5.556919 0.000000 2.015870 -0.679723 1.014860 -1.052490 2.752000 0.638850 -7.299640 0.000000 0.000000 0.000000 0.407942 0.012259 -0.125621 5.754920 -1.457380 3.998490 0.000000 0.000000 0.000000 -9.241052 -2.655120 -8.994716 -71.740334 -11.761992 4.746030 -31.604246 0.001165 34.045898 -13.209469 -13.282380 0.089536 -5.574724 0.471018 -0.003654 73.497147 -23.637768 -7.243340 8.720032 0.116349 30.201418 6.934624 -2.351367 0.271411 19.708641 0.263537 -1.303549 16.376945 -5.436259 -0.534536 4.496281 1.015851 1.747118 -34.913624 -1.222353 -5.287092 -2.923005 1.339154 -2.612716 22.631870 -2.693362 0.441635 
--0.042716 39.998322 2.968130 5.983611 0.195238 2.305610 -0.907500 1.659612 -0.825557 3.170562 0.413939 -6.538830 0.000000 0.000000 0.000000 0.042751 0.359102 -0.204164 4.601790 -1.017530 3.147050 0.000000 0.000000 0.000000 -7.220732 -6.809920 -7.805324 -69.911514 -16.292000 9.884584 -30.286831 0.001165 34.526901 -12.666131 -12.662926 0.331903 -3.823218 3.579455 -1.197800 71.229912 -22.176136 -9.132231 8.934833 0.116349 27.588573 6.341005 -1.810122 0.088928 31.804970 -0.657304 -1.730517 2.618905 -2.443246 2.231949 21.055721 1.594669 -3.021200 -29.232765 -0.871606 -4.452437 -1.019926 1.464713 -1.719640 24.820795 -1.952116 -4.257692 
--0.049000 40.603870 2.968130 6.780290 0.351810 1.598240 -2.588980 1.606370 -0.606371 4.232220 0.109319 -4.063770 0.000000 0.000000 0.000000 -0.004632 0.082528 -0.092734 3.695360 -0.754448 1.973470 0.000000 0.000000 0.000000 -3.744470 -8.700970 -4.904962 -70.886101 -17.357700 9.929008 -27.660284 0.001165 35.161800 -11.806924 -10.875732 0.285265 2.176580 6.577632 -4.384020 70.634499 -18.152660 -9.667048 10.032651 0.116349 26.305099 7.008678 -1.223352 0.074780 -0.730503 0.428468 1.743937 54.347294 -4.835621 -1.074371 9.137504 5.289661 -3.020902 -30.705618 -0.868734 -4.818579 21.605469 1.171606 -0.034239 -1.272151 -1.886707 -7.032578 
--0.037075 41.810562 2.968130 7.296476 0.438710 -0.384793 -4.810570 0.717793 -0.479063 6.622445 -0.720518 0.217079 0.000000 0.000000 0.000000 -0.107271 -0.166920 0.020543 3.943000 -0.396601 0.249927 0.000000 0.000000 0.000000 0.513674 -7.977970 -1.134083 -74.425400 -13.281600 5.881170 -21.836599 0.001165 35.306301 -10.841126 -7.695415 0.267681 9.603888 7.048002 -9.243760 73.807510 -11.406500 -7.985020 13.655500 0.116349 26.980301 7.962735 -0.329182 -0.250100 -25.456684 1.331627 2.501022 73.946716 -3.461740 -1.227959 6.551764 9.393176 -2.179612 -21.037874 -0.078504 -4.612796 18.826389 1.075741 0.301105 -8.326876 -0.739504 -7.905264 
--0.049278 42.520454 2.968130 8.028471 0.438727 -2.183500 -5.438199 0.207261 -0.484243 7.701901 -0.949968 3.168510 0.000000 0.000000 0.000000 -0.088913 -0.029736 0.069249 4.540220 -0.260280 -2.275510 0.000000 0.000000 0.000000 2.874230 -2.376980 2.091650 -76.070900 -2.581600 0.745457 -16.126499 0.001165 34.865601 -9.942211 -3.643180 0.247649 14.103100 1.174088 -11.539000 76.153893 -2.965070 -5.198220 20.489672 0.116349 29.013399 9.230290 0.745239 0.228837 -38.033737 1.956252 2.239554 62.350563 -2.866381 -0.239753 8.452842 4.334472 0.655780 -7.289600 0.366645 -3.843508 1.867966 1.000802 -0.741712 -5.670934 1.476608 -7.036381 
--0.114791 42.307247 2.968130 7.389349 0.351858 -2.723740 -4.885140 -0.152601 -0.086374 6.676330 -0.990823 5.642550 0.000000 0.000000 0.000000 -0.081509 0.384691 0.167481 4.107840 0.611224 -3.806190 0.000000 0.000000 0.000000 4.723633 0.303047 3.157360 -76.516335 9.078669 -2.237584 -11.194500 0.001165 33.690437 -8.229190 -0.264951 0.350273 13.708600 -2.341550 -11.484700 76.444801 4.952410 -2.805780 23.664574 0.116349 31.163200 11.073913 3.243204 0.139668 -39.737446 0.943351 2.634595 37.038799 -0.007947 0.242163 3.952889 0.500314 0.637011 -2.884728 0.294582 -4.572917 14.900056 0.339312 0.546077 -12.464971 2.812716 -5.142097 
--0.113669 41.299294 2.968130 7.077470 0.195307 -3.103870 -2.569706 -0.587081 0.746072 4.264240 -0.920307 6.794440 0.000000 0.000000 0.000000 -0.065579 0.873253 0.332926 4.152214 1.027240 -4.007210 0.000000 0.000000 0.000000 6.108605 0.940097 2.701448 -74.593803 19.522924 -4.328449 -8.674590 0.001165 31.673500 -6.320746 1.746516 0.413022 11.237500 -2.078610 -9.506420 73.197998 10.552875 3.473820 25.370012 0.116349 33.112099 12.832194 7.515890 0.455804 -33.109238 0.672845 2.248022 -2.150151 -1.284785 1.135497 8.195504 0.781460 0.930233 6.604897 -0.429543 -3.435708 18.946196 0.458062 0.790267 -11.644512 2.760721 -2.794761 
--0.025751 40.586620 2.968130 5.315712 0.000000 -2.980694 -0.920928 -1.497272 1.052490 3.234412 -0.638850 7.299640 0.000000 0.000000 0.000000 0.407942 -0.012259 0.125621 4.790095 1.457380 -3.998490 0.000000 0.000000 0.000000 5.549260 -3.365490 1.062321 -70.361504 22.981373 -6.453584 -9.202444 -0.116349 29.477793 -4.281356 2.351367 0.271411 9.001228 2.655120 -4.562235 69.810707 14.498660 7.158091 26.056526 -0.001165 34.045898 13.209469 13.282380 0.089536 -34.634613 1.663542 5.230479 -2.874681 -1.354475 2.571830 22.279716 3.499624 -0.699431 20.209835 -0.809652 1.118457 16.397682 5.239849 0.531933 4.287104 -0.005791 -1.855253 
--0.042716 39.998322 2.968130 5.501198 -0.195238 -2.305610 -0.907500 -2.142024 1.066763 3.411768 -0.413939 6.538830 0.000000 0.000000 0.000000 0.042751 -0.359102 0.204164 4.601790 1.017530 -3.147050 0.000000 0.000000 0.000000 3.099600 -8.162370 -1.197800 -69.300285 21.187300 -7.691476 -10.382070 -0.116349 27.829779 -2.964121 2.533740 0.088928 5.930410 6.809920 -1.510628 68.946701 16.533205 9.626520 25.462721 -0.001165 34.768108 12.183719 15.557400 0.331903 -28.754253 0.755188 4.375766 -1.009826 -1.458228 1.758046 24.688309 2.019926 4.264540 32.704803 0.557644 1.612639 2.529472 2.394109 -2.208158 20.776360 -1.529196 3.034380 
--0.049000 40.603870 2.968130 6.780290 -0.351810 -1.598240 -2.588980 -1.606370 0.847577 4.232220 -0.109319 4.063770 0.000000 0.000000 0.000000 -0.004632 -0.082528 0.092734 3.695360 0.754448 -1.973470 0.000000 0.000000 0.000000 -3.382610 -9.230900 -4.384020 -70.634499 16.457001 -8.214620 -11.962300 -0.116349 26.305099 -4.355410 1.223352 0.074780 2.220852 8.700970 0.705023 70.886101 16.121653 10.703200 23.801001 -0.001165 35.403008 10.842098 13.529000 0.285265 -30.703316 1.151009 4.769948 21.616037 -1.309091 -0.028890 -1.231163 1.831893 6.845827 -0.739149 -0.525025 -1.818685 54.363552 4.687464 1.070386 9.172863 -5.207838 3.084680 
--0.037075 41.810562 2.968130 7.055270 -0.438710 0.384793 -4.569364 -0.717793 0.479063 5.657620 0.720518 -0.458285 0.000000 0.000000 0.000000 -0.107271 0.166920 -0.020543 3.943000 0.396601 -0.249927 0.000000 0.000000 0.000000 -10.086300 -6.565590 -9.243760 -73.083900 11.406500 -7.985020 -17.755999 -0.116349 26.980301 -8.686354 -1.359260 -0.250100 -1.313670 7.736764 2.069029 74.425400 9.326259 7.569613 21.112984 -0.001165 35.306301 9.635085 8.660240 0.267681 -20.897928 0.020024 4.532423 18.853041 -1.135874 -0.291826 -8.274943 0.771707 7.956114 -25.128605 -1.376650 -2.522182 73.947456 3.378500 1.186994 6.482924 -9.345399 2.210355 
--0.049278 42.520454 2.968130 6.822440 -0.438727 2.183500 -4.714581 0.033945 0.001831 6.978283 0.949968 -3.168510 0.000000 0.000000 0.000000 -0.088913 0.029736 -0.069249 4.540220 0.260280 2.275510 0.000000 0.000000 0.000000 -14.103100 0.031943 -11.539000 -76.636299 2.965070 -5.714349 -27.725838 -0.116349 29.013399 -11.883558 -5.810566 0.228837 -2.874230 2.376980 2.574062 76.070900 -4.814778 2.675105 15.644087 -0.001165 34.865601 8.494974 2.678356 0.247649 -5.750584 -0.068204 3.706347 1.838004 -0.992450 0.704012 -6.252903 -1.350606 6.723120 -36.764957 -1.611116 -2.217723 62.390575 2.803816 0.225822 8.343335 -4.624382 -0.687400 
--0.114791 42.307247 2.968130 5.942111 -0.351858 2.723740 -3.437904 0.393807 -0.396038 5.711505 0.990823 -5.642550 0.000000 0.000000 0.000000 -0.081509 -0.384691 -0.167481 4.107840 -0.611224 3.806190 0.000000 0.000000 0.000000 -13.708600 2.341550 -11.484700 -76.444801 -4.952410 -2.547715 -31.865551 -0.116349 31.645611 -12.762356 -9.514564 0.139668 -3.949440 -0.303047 2.674948 75.069115 -17.845882 -1.945802 10.712088 -0.001165 33.449230 7.987984 -0.941079 0.350273 -1.522238 0.247741 4.483660 14.987247 -0.352648 -0.560945 -12.466013 -2.716281 4.674154 -37.941704 -0.523537 -2.521068 37.077835 -0.004409 -0.244420 3.539016 -0.820705 -0.794870 
--0.113669 41.299294 2.968130 5.389027 -0.195307 3.103870 -1.363676 0.587081 -0.746072 3.540622 0.920307 -6.794440 0.000000 0.000000 0.000000 -0.065579 -0.149635 -0.332926 4.875833 -1.027240 4.007210 0.000000 0.000000 0.000000 -9.904170 0.530223 -9.506420 -73.197998 -10.068400 3.473820 -32.364998 -0.116349 32.629684 -13.555813 -12.098807 0.455804 -4.560220 -0.457685 1.669190 73.628990 -22.593725 -6.134900 8.915796 -0.001165 31.673500 7.526777 -1.987722 0.413022 8.712742 0.925539 3.315778 18.955389 -0.467139 -0.801753 -12.081754 -2.643082 2.386326 -31.304344 -0.205673 -2.097641 -2.062192 1.296254 -1.151119 7.956662 -0.989662 -1.269012 

+ 0 - 8
public/vr/index.vwf.config.yaml

@@ -1,8 +0,0 @@
----
-info:
-  title: "VWF & AFrame Example App"
-model:
-  vwf/model/aframe:
-view:
-  vwf/view/aframe:
-  vwf/view/editor-new:

+ 0 - 39
public/vr/index.vwf.yaml

@@ -1,39 +0,0 @@
-# A-Frame & VWF simple scene
-# Copyright 2017 Krestianstvo.org project
----
-extends: http://vwf.example.com/aframe/ascene.vwf
-properties:
-  assets: "assets.json"
-children:
-  skySun:
-    extends: http://vwf.example.com/aframe/aentity.vwf
-    children:
-      sun:
-        extends: http://vwf.example.com/aframe/app-sun-component.vwf
-  newSky:
-    extends: http://vwf.example.com/aframe/aentity.vwf
-    children:
-      skyshader:
-        extends: http://vwf.example.com/aframe/app-skyshader-component.vwf
-  lightAmbient:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "ambient"
-      color: "#CCC"
-  myLight:
-    extends: http://vwf.example.com/aframe/alight.vwf
-    properties:
-      type: "directional"
-      position: "0 20 0"
-  model:
-    extends: http://vwf.example.com/aframe/agltfmodel.vwf
-    properties:
-      src: "#av"
-      position: "0 0 -4"
-    children:
-      animation-mixer:
-        extends: http://vwf.example.com/aframe/anim-mixer-component.vwf
-        properties:
-          clip: "*"
-          duration: 3
-          crossFadeDuration: 0.5

BIN
public/vr/webimg.jpg


+ 0 - 6
public/webapps.json

@@ -31,11 +31,5 @@
         "title":"GearVR controller",
         "imgUrl": "",
         "text": "Example app with GearVR"
-    },
-
-    "vr":{
-        "title":"Live monument",
-        "imgUrl": "./vr/webimg.jpg",
-        "text": "App"
     }
 }

+ 0 - 1
support/client/doc/.gitignore

@@ -1 +0,0 @@
-/jsdoc

+ 0 - 5
support/client/lib/index.html

@@ -146,16 +146,11 @@
 
         });
     </script>
-    <script type="text/javascript">
-        googleEarth && google.load("earth", "1")
-    </script>
-
 
     <!-- This is the common view implementation and an example view that summarizes the          -->
     <!-- simulation state in HTML on the main page.                                              -->
 
     <link rel="stylesheet" type="text/css" href="index.css" />
-    <link rel="stylesheet" type="text/css" href="vwf/view/editor/editor.css" />
 
     <!-- Global Site Tag (gtag.js) - Google Analytics -->
     <script async src="https://www.googletagmanager.com/gtag/js?id=UA-11815598-9"></script>

+ 0 - 5163
support/client/lib/mil-sym/cws.js

@@ -1,5163 +0,0 @@
-"use strict";
-
-define( function(){
-
-    var cws = {
-        "def": {
-            "1WTRFF": "ONE-WAY TRAFFIC",
-            "2WTRFF": "TWO-WAY TRAFFIC",
-            "AA/C": "ANTI-AIRCRAFT",
-            "AAFF": "AXIS OF ADVANCE FOR FEINT",
-            "AAM": "AIR TO AIR MISSILE (AAM)",
-            "AARM": "ANTI ARMOR",
-            "AAST": "AIR ASSAULT",
-            "AB": "AIRPORT/AIRBASE",
-            "ABN": "AIRBORNE",
-            "ABNCP": "AIRBORNE COMMAND POST",
-            "ABNEW": "AIRBORNE EARLY WARNING (AEW)",
-            "ABNINC": "AIRBORNE INTERCEPT",
-            "ABNSB": "AIRBORNE SEARCH & BOMBING",        
-            "ABP": "EXPLOSIVES, STATE OF READINESS 2 (ARMED-BUT PASSABLE)", 
-            "ABS": "ABATIS", 
-            "ABYARA": "ASSEMBLY AREA", 
-            "ACA": "AIRSPACE COORDINATION AREA (ACA)", 
-            "ACDR": "AIR CORRIDOR", 
-            "ACP": "AIR CONTROL POINT (ACP)", 
-            "ACTL": "AIR CONTROL", 
-            "ACTPNT": "ACTION POINTS (GENERAL)", 
-            "ACU": "ACOUSTIC", 
-            "ACYC": "ANTICYCLONE CENTER", 
-            "ADF": "AIR DEFENSE", 
-            "ADFAD": "AIR DEFENSE (AD)", 
-            "ADFG": "AIR DEFENSE GUN", 
-            "ADMIN": "ADMINISTRATIVE (ADMIN)", 
-            "AEP": "AMBULANCE EXCHANGE POINT", 
-            "AEREXP": "AERIAL EXPLOITATION", 
-            "AFP": "ATTACK BY FIRE POSITION", 
-            "AHD": "AIRHEAD", 
-            "AIMPNT": "AIM POINT", 
-            "AIR": "AIR", 
-            "AIRFZ": "AIRFIELD ZONE", 
-            "AIRTRK": "AIR TRACK", 
-            "ALM": "AIR LAUNCHED MISSILE", 
-            "ALTUSP": "ALTERNATE DECON SITE/POINT (UNSPECIFIED)", 
-            "AMB": "AMBUSH", 
-            "AMBLNC": "AMBULANCE", 
-            "AMEP": "AMMUNITION AND EXPLOSIVES PRODUCTION", 
-            "AMP": "AMPHIBIOUS", 
-            "AMPHC": "ATMOSPHERIC", 
-            "AMPWS": "AMPHIBIOUS WARFARE SHIP", 
-            "AMTP": "ARMAMENT PRODUCTION", 
-            "ANCRG1": "ANCHORAGE", 
-            "ANCRG2": "ANCHORAGE", 
-            "ANCRG3": "ANCHORAGE", 
-            "ANG": "ANGLICO", 
-            "ANM": "ANM", 
-            "AOO": "AREA OF OPERATIONS (AO)", 
-            "AP": "AMMUNITION POINTS", 
-            "APA": "AIRCRAFT PRODUCTION & ASSEMBLY", 
-            "APL": "HIJACKING (AIRPLANE)", 
-            "APMNE": "ANTIPERSONNEL (AP) MINES", 
-            "APOD": "APOD/APOE", 
-            "ARA": "AREA", 
-            "ARATGT": "AREA TARGET", 
-            "ARC": "ARCTIC", 
-            "ARM": "ARMOR", 
-            "ARMCV": "ARMORED CARRIER WITH VOLCANO", 
-            "ARMD": "ARMORED", 
-            "ARMERV": "ARMORED ENGINEER RECON VEHICLE (AERV)", 
-            "ARMINF": "ARMORED INFANTRY", 
-            "ARMPC": "ARMORED PERSONNEL CARRIER", 
-            "ARMVM": "ARMORED VEHICLE MOUNTED", 
-            "ARMWVH": "ARMORED WHEELED VEHICLE", 
-            "ARR": "ARREST", 
-            "ARS": "AREAS", 
-            "ARTSVY": "ARTILLERY SURVEY", 
-            "ASBW": "ANTI-SUBMARINE WARFARE (ASW)", 
-            //"ASBW": "ANTISUBMARINE WARFARE/MPA", 
-            "ASBWCB": "ANTISUBMARINE WARFARE (ASW) CARRIER BASED", 
-            "ASBWF": "ANTISUBMARINE WARFARE, FIXED WING", 
-            "ASBWR": "ANTISUBMARINE WARFARE, ROTARY WING", 
-            "ASM": "AIR TO SURFACE MISSILE (ASM)", 
-            "ASN": "ARSON/FIRE", 
-            "ASP": "AMMUNITION SUPPLY POINT (ASP)", 
-            "ASRUT": "ALTERNATE SUPPLY ROUTE", 
-            "ASS": "ASSASSINATION/MURDER/EXECUTION", 
-            "AST": "ARMORED ASSAULT", 
-            "ASTCA": "ASSAULT CROSSING AREA", 
-            "ASTPSN": "ASSAULT POSITION", 
-            "ASTVES": "ASSAULT VESSEL", 
-            "ASUW": "ANTI-SURFACE WARFACE (ASUW)", 
-            "ASWSHP": "ASW SHIP", 
-            "ASWSUB": "ASW SUBMARINE", 
-            "AT": "ANTITANK (AT)", 
-            "ATAC": "ATAC", 
-            "ATCTL": "AIR TRAFFIC CONTROL", 
-            "ATD": "ANTITANK DITCH", 
-            "ATDATM": "ANTITANK DITCH REINFORCED WITH ANTITANK MINES TDC COMPLETE", 
-            "ATDUC": "UNDER CONSTRUCTION", 
-            "ATG": "ANTI-TANK GUN", 
-            "ATIZ": "ARTILLERY TARGET INTELLIGENCE (ATI) ZONE", 
-            "ATK": "ATTACK", 
-            "ATKPSN": "ATTACK POSITION", 
-            "ATMAHD": "ANTITANK MINE WITH ANTIHANDLING DEVICE", 
-            "ATMDIR": "ANTITANK MINE (DIRECTIONAL)", 
-            "ATMER": "ATOMIC ENERGY REACTOR", 
-            "ATMNE": "ANTITANK MINE (AT)", 
-            "ATN": "AIDS TO NAVIGATION", 
-            "ATO": "ANTITANK OBSTACLES", 
-            "ATP": "AMMUNITION TRANSFER POINT (ATP)", 
-            "ATRFF": "ALTERNATING TRAFFIC", 
-            "ATRL": "ANTITANK ROCKET LAUNCHER", 
-            "ATW": "ANTITANK WALL", 
-            "AVN": "AVIATION", 
-            "AXSADV": "AXIS OF ADVANCE", 
-            "BAS": "BELTS AND STRIPS", 
-            "BB": "BERGY BIT", 
-            "BBS": "BATTLESHIP", 
-            "BBY": "BOOBY TRAP", 
-            "BCN": "BEACON", 
-            "BCON": "BRIEF CONTACT", 
-            "BDAWTH": "BOUNDED AREAS OF WEATHER", 
-            "BEH": "BEACH", 
-            "BEHSPE": "BEACH SLOPE", 
-            "BERBOX": "BEARING BOX", 
-            "BERLNE": "BEARING LINE", 
-            "BH": "BACKHOE", 
-            "BIO": "BIOLOGICAL", 
-            "BIOCA": "BIOLOGICALLY CONTAMINATED AREA", 
-            "BIOLUM": "BIOLUMINESCENCE", 
-            "BKN": "BROKEN COVERAGE", 
-            "BLDS": "BOULDERS", 
-            "BLDTSD": "BLOWING DUST OR SAND", 
-            "BLK": "BLOCK", 
-            "BLSNHY": "BLOWING SNOW - HEAVY", 
-            "BLSNLM": "BLOWING SNOW - LIGHT/MODERATE", 
-            "BLST": "BALLISTIC MISSILE", 
-            //"BLST": "BLACK LIST LOCATION", 
-            "BLT": "BELT", 
-            "BM": "BOMB/BOMBING", 
-            "BMARA": "BOMB AREA", 
-            "BMB": "BOMBER", 
-            "BNDS": "BOUNDARIES", 
-            "BOAT": "HIJACKING (BOAT)", 
-            "BRCT": "BROADCAST", 
-            "BRG": "BRIDGE", 
-            "BRGH": "BRIDGEHEAD", 
-            "BRH": "BREACH", 
-            "BRHSA": "BERTHS (ANCHOR)", 
-            "BRHSO": "BERTHS (ONSHORE)", 
-            "BRKS": "BREAKERS", 
-            "BSA": "BRIGADE (BSA)", 
-            "BT": "BATHYTHERMOGRAPH TRANSMITTING (BT)", 
-            "BTFSVL": "BATTLEFIELD SURVEILLANCE", 
-            "BTLPSN": "BATTLE POSITION", 
-            "BTMCHR": "BOTTOM CHARACTERISTICS", 
-            "BTMFAT": "BOTTOM FEATURES", 
-            "BTMRGN": "BOTTOM ROUGHNESS", 
-            "BTMRTN": "BOTTOM RETURN/NOMBO", 
-            "BUOY": "BUOY DEFAULT", 
-            "BUS": "BUS", 
-            "BW": "BERGY WATER", 
-            "BWGJAW": "BREAKWATER/GROIN/JETTY (ABOVE WATER)", 
-            "BWGJBW": "BREAKWATER/GROIN/JETTY (BELOW WATER)", 
-            "BYS": "BYPASS", 
-            "C2ARS": "COMMAND & CONTROL AREAS", 
-            "C2GM": "COMMAND AND CONTROL AND GENERAL MANEUVER", 
-            "C2HQ": "SPECIAL C2 HEADQUARTERS COMPONENT", 
-            "C2LNE": "COMMAND & CONTROL LINES", 
-            "C2PNT": "COMMAND & CONTROL POINTS", 
-            "C2V": "C2V/ACV", 
-            "CALM": "CALM WINDS", 
-            "CAP": "COMBAT AIR PATROL (CAP)", 
-            "CASS": "COMMAND ACTIVE SONOBUOY SYSTEM (CASS)", 
-            "CATK": "COUNTERATTACK (CATK)", 
-            "CATKF": "COUNTERATTACK BY FIRE", 
-            "CBNP": "CANNIBALIZATION POINT", 
-            "CBT": "COMBAT", 
-            "CBTPST": "COMBAT OUTPOST", 
-            "CBTT": "COMBATANT", 
-            "CBWP": "CHEMICAL & BIOLOGICAL WARFARE PRODUCTION", 
-            "CCP": "CASUALTY COLLECTION POINT", 
-            "CCTA": "CONCERTINA", 
-            "CCTRK": "CROSS-COUNTRY TRUCK", 
-            "CELL": "CELLULAR/MOBILE", 
-            "CFCSG": "CABLE FERRY CROSSING", 
-            "CFFZ": "CALL FOR FIRE ZONE (CFFZ)", 
-            "CFL": "COORDINATED FIRE LINE (CFL)", 
-            "CFZ": "CRITICAL FRIENDLY ZONE (CFZ)", 
-            "CGO": "CARGO", 
-            "CGOALT": "CARGO AIRLIFT (TRANSPORT)", 
-            "CHKPNT": "CHECK POINT", 
-            "CID": "CENTRAL INTELLIGENCE DIVISION (CID)", 
-            "CINT": "COUNTER INTELLIGENCE", 
-            "CIP": "CALL IN POINT", 
-            "CIR": "CIRCLE", 
-            "CIRCLR": "CIRCULAR", 
-            "CIRTGT": "CIRCULAR TARGET", 
-            "CLAY": "CLAY", 
-            "CLDFRN": "COLD FRONT", 
-            "CLE": "CIVILIAN LAW ENFORCEMENT", 
-            "CLM": "CLAYMORE", 
-            "CLR": "CLEAR", 
-            "CLS1": "CLASS I", 
-            "CLS10": "CLASS X", 
-            "CLS2": "CLASS II", 
-            "CLS3": "CLASS III", 
-            "CLS4": "CLASS IV", 
-            "CLS5": "CLASS V", 
-            "CLS6": "CLASS VI", 
-            "CLS7": "CLASS VII", 
-            "CLS8": "CLASS VIII", 
-            "CLS9": "CLASS IX", 
-            "CLT": "COLT/FIST", 
-            "CM": "CRUISE MISSILE", 
-            "CMDOPN": "COMMAND OPERATIONS", 
-            "CML": "CHEMICAL", 
-            "CMLCA": "CHEMICALLY CONTAMINATED AREA", 
-            "CMPS": "COMPOSITE", 
-            "CNG": "CONVERGENCE", 
-            "CNGLNE": "CONVERGANCE LINE", 
-            "CNL": "CANAL", 
-            "CNS": "CENSOR ZONE", 
-            "CNT": "CONTAIN", 
-            "CNVPRN": "CONVENTIONAL PROPULSION", 
-            "CNY": "CONVOY", 
-            "CNZ": "CANALIZE", 
-            "COBL": "COBBLES", 
-            "COBLOS": "COBBLES, OYSTER SHELLS", 
-            "COMCP": "COMMUNICATION CONFIGURED PACKAGE", 
-            "COMM": "COMMUNICATIONS", 
-            "COMMCP": "COMMUNICATIONS CHECKPOINT (CCP)", 
-            "CONPNT": "CONTACT POINT", 
-            "COV": "COVER", 
-            "CPL": "CHAPARRAL", 
-            "CRCD": "RECRUITMENT (COERCED/IMPRESSED)", 
-            "CRDPNT": "COORDINATION POINT", 
-            "CRDRTB": "CORRIDOR TAB", 
-            "CRK": "CRACKS", 
-            "CRKASL": "CRACKS AT A SPECIFIC LOCATION", 
-            "CRL": "CORAL", 
-            "CRP": "CORPS", 
-            "CRR": "CARRIER", 
-            "CRU": "CRUISER", 
-            "CRV": "DEPTH CURVE", 
-            "CS": "COMBAT SUPPORT", 
-            "CSAR": "COMBAT SEARCH AND RESCUE (CSAR)", 
-            "CSE": "COARSE", 
-            "CSESD": "COARSE SAND", 
-            "CSESLT": "COARSE SILT", 
-            "CSGSTE": "CROSSING SITE/WATER CROSSING", 
-            "CSN": "CONSTRUCTION", 
-            "CSNALH": "COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING AT LEAST ONE-HALF GROUND, BUT GROUND NOT COMPLETELY COVERED", 
-            "CSNVEH": "CONSTRUCTION VEHICLE", 
-            "CSS": "COMBAT SERVICE SUPPORT", 
-            "CSSVEH": "COMBAT SERVICE SUPPORT VEHICLE", 
-            "CSTHYD": "COASTAL HYDROGRAPHY", 
-            "CSTLN": "COASTLINE", 
-            "CSTSVL": "COASTAL SURVEILLANCE", 
-            "CSV": "CREWED SPACE VEHICLE", 
-            "CTDAPP": "CONTROLLED APPROACH", 
-            "CTDINC": "CONTROLLED INTERCEPT", 
-            "CTR": "SEARCH CENTER", 
-            "CTRB": "CLUTTER (BOTTOM)", 
-            "CTSHVY": "CONTINUOUS HEAVY", 
-            "CTSLIT": "CONTINUOUS LIGHT", 
-            "CTSMOD": "CONTINUOUS MODERATE", 
-            "CTUR": "CONTOUR", 
-            "CUDCOV": "CLOUD COVERAGE", 
-            "CVL": "CIVIL", 
-            "CVLAFF": "CIVIL AFFAIRS", 
-            "CVLVEH": "CIVILIAN VEHICLE", 
-            "CVP": "CIVILIAN COLLECTION POINT", 
-            "CVY": "CAVALRY", 
-            "CWSNLH": "COMPACT OR WET SNOW (WITH OR WITHOUT ICE) COVERING LESS THAN ONE-HALF OF GROUND", 
-            "CYC": "CYCLONE CENTER", 
-            "DA": "DEAD SPACE AREA (DA)", 
-            "DAFF": "DIRECTION OF ATTACK FOR FEINT", 
-            "DAFNC": "DOUBLE APRON FENCE", 
-            "DAM": "DAM", 
-            "DANHAZ": "DANGERS/HAZARDS", 
-            "DAPP": "DOWNED AIRCREW PICKUP POINT", 
-            "DATTMN": "DATA TRANSMISSION", 
-            "DBLFNC": "DOUBLE FENCE", 
-            "DBLSTD": "DOUBLE STRAND CONCERTINA", 
-            "DBS": "DRIVE-BY SHOOTING", 
-            "DBT": "MINE-NAVAL (DOUBTFUL)", 
-            "DCDH2O": "DISCOLORED WATER", 
-            "DCNPNT": "DECISION POINT", 
-            "DCP": "DETAINEE COLLECTION POINT", 
-            "DCPN": "DECEPTION", 
-            "DCY": "DECOY", 
-            "DD": "DESTROYER", 
-            "DDCK": "DRYDOCK", 
-            "DECON": "DECONTAMINATION", 
-            "DECONP": "DECONTAMINATION (DECON) POINTS", 
-            "DEF": "DEFENSE", 
-            "DEFN": "MINE-NAVAL (DEFINITE)", 
-            "DEMO": "DEMONSTRATION", 
-            "DEN": "DENTAL", 
-            "DFG": "DIRECT FIRE GUN", 
-            "DFN": "DIRECTION FINDING", 
-            "DFT": "BYPASS DIFFICULT", 
-            "DFTY": "OBSTACLE BYPASS DIFFICULTY", 
-            "DGOPN": "DRUG OPERATION", 
-            "DGVEH": "DRUG VEHICLE", 
-            "DHA": "DETAINEE HOLDING AREA", 
-            "DICASS": "DIRECTIONAL COMMAND ACTIVE SONOBUOY SYSTEM(DICASS)", 
-            "DIFAR": "DIRECTIONAL FREQUENCY ANALYZING AND RECORDING(DIFAR)", 
-            "DIPPSN": "DIP POSITION", 
-            "DIRATK": "DIRECTION OF ATTACK", 
-            "DIV": "DIVISION", 
-            "DLRP": "DLRP", 
-            "DLT": "DEALT", 
-            "DLY": "DELAY", 
-            "DMA": "DECOY MINED AREA", 
-            "DMAF": "DECOY MINED AREA, FENCED", 
-            "DMD": "DISMOUNTED", 
-            "DMY": "DUMMY (DECEPTION/DECOY)", 
-            "DMYMD": "DUMMY MINEFIELD (DYNAMIC)", 
-            "DMYMS": "DUMMY MINEFIELD (STATIC)", 
-            "DOPN": "DOLPHIN", 
-            "DPH": "DEPTH", 
-            "DRCL": "DOSE RATE CONTOUR LINES", 
-            "DRFT": "DRIFTER", 
-            "DRG": "DREDGE", 
-            "DRN": "DRONE (RPV/UAV)", 
-            "DRPPNT": "DROP POINT", 
-            "DRPZ": "DROP ZONE", 
-            "DRT": "DISRUPT", 
-            "DSA": "DIVISION (DSA)", 
-            "DSTVES": "DISTRESSED VESSEL", 
-            "DSTY": "DESTROY", 
-            "DT/SD": "DUST OR SAND", 
-            "DTDVL": "DUST DEVIL", 
-            "DTHAC": "DITCHED AIRCRAFT", 
-            "DTM": "DATUM", 
-            "DVG": "DIVERGENCE", 
-            "DVR": "DIVER (HARDTOP DIVER, SCUBA DIVER)", 
-            "DVSN": "DIVERSIONS", 
-            "DYN": "DYNAMIC DEPICTION", 
-            "DYNPRO": "DYNAMIC PROCESSES", 
-            "DZ": "DRIZZLE", 
-            "DZR": "DOZER", 
-            "EBB": "CURRENT FLOW - EBB", 
-            "ECM": "ELECTRONIC COUNTERMEASURES (ECM/JAMMER)", 
-            "ECRG": "ELECTRONIC RANGING", 
-            "ECW": "ELECTRONIC WARFARE", 
-            "EIEOB": "ESTIMATED ICE EDGE OR BOUNDARY", 
-            "ELC": "ELECTRONIC", 
-            "ELCSCG": "EVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND COMPLETELY", 
-            "ELDSCG": "EVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY", 
-            "ELP": "ELLIPSE", 
-            "EM": "ELECTRO-MAGNETIC", 
-            "EMP": "EMPLACED", 
-            "EMTARA": "ENGAGEMENT AREA", 
-            "ENCMT": "ENCIRCLEMENT", 
-            "ENG": "ENGINEER", 
-            "ENGEP": "ENGINEERING EQUIPMENT PRODUCTION", 
-            "ENGVEH": "ENGINEER VEHICLE", 
-            "ENTPNT": "ENTRY POINT", 
-            "EOD": "EXPLOSIVE ORDINANCE DISPOSAL", 
-            "EOP": "ELECTRO-OPTICAL", 
-            "EOPI": "ELECTRO-OPTICAL INTERCEPT", 
-            "EOTR": "EDDIES/OVERFALLS/TIDE RIPS", 
-            "EPF": "ELECTRIC POWER FACILITY", 
-            "EPWCP": "ENEMY PRISONER OF WAR (EPW) COLLECTION POINT", 
-            "EPWHA": "ENEMY PRISONER OF WAR (EPW) HOLDING AREA", 
-            "EQT": "EQUIPMENT", 
-            "EQTMNF": "EQUIPMENT MANUFACTURE", 
-            "EQTTRP": "DECON SITE/POINT (EQUIPMENT AND TROOPS)", 
-            "ER": "EMERGENCY", 
-            "ERHMR": "EARTHMOVER", 
-            "ERHSVL": "EARTH SURVEILLANCE", 
-            "ERP": "ENGINEER REGULATING POINT", 
-            "ESM": "ELECTRONIC SURVEILLANCE MEASURES", 
-            "ESTOF": "EARTHWORK, SMALL TRENCH OR FORTIFICATION", 
-            "ESY": "BYPASS EASY", 
-            "EW": "EARLY WARNING", 
-            "EXCD": "ROADBLOCK COMPLETE (EXECUTED)", 
-            "EXT": "TURBULENCE - EXTREME", 
-            "EXTDWC": "EXTREMELY DRY WITH CRACKS", 
-            "EXTN": "EXTORTION", 
-            "EZ": "EXTRACTION ZONE (EZ)", 
-            "FAADEZ": "FORWARD AREA AIR DEFENSE ZONE (FAADEZ)", 
-            "FAC": "FACILITIES", 
-            "FAOTP": "FALLOUT PRODUCING", 
-            "FARP": "FORWARD ARMING AND REFUELING AREA (FARP)", 
-            "FBG": "FLOEBERG", 
-            "FC": "FUNNEL CLOUD (TORNADO/WATERSPOUT)", 
-            "FCL": "FINAL COORDINATION LINE", 
-            "FDDIST": "FOOD DISTRIBUTION", 
-            "FEBA": "FORWARD EDGE OF BATTLE AREA (FEBA)", 
-            "FEW": "FEW COVERAGE", 
-            "FEWS": "FOXHOLE, EMPLACEMENT OR WEAPON SITE", 
-            "FFA": "FIRE FREE AREA (FFA)", 
-            "FFR": "FRIGATE/CORVETTE", 
-            "FG": "FOG", 
-            "FIN": "FINANCE", 
-            "FIRCTL": "FIRE CONTROL", 
-            "FIX": "FIX", 
-            "FIXAVN": "FIXED WING AVIATION", 
-            "FIXD": "FIXED WING", 
-            "FIXPFD": "FIXED AND PREFABRICATED", 
-            "FLDART": "FIELD ARTILLERY", 
-            "FLGRD1": "FOUL GROUND", 
-            "FLGRD2": "FOUL GROUND", 
-            "FLGRD3": "FOUL GROUND", 
-            "FLH": "FLASH (OPTICAL)", 
-            "FLMTHR": "FLAME THROWER", 
-            "FLOOD": "CURRENT FLOW - FLOOD", 
-            "FLOT": "FORWARD LINE OF OWN TROOPS (FLOT)", 
-            "FLT": "FLAT", 
-            "FLTBD": "FLATBED TRUCK", 
-            "FLTSUP": "FLEET SUPPORT (TENDER/TUG)", 
-            "FLWASS": "FOLLOW AND ASSUME", 
-            "FLWSUP": "FOLLOW AND SUPPORT", 
-            "FNE": "FINE", 
-            "FNESD": "FINE SAND", 
-            "FNESLT": "FINE SILT", 
-            "FOR": "FORCE", 
-            "FOSF": "FOSSIL FUEL", 
-            "FP": "FIRING POINT", 
-            "FPF": "FINAL PROTECTIVE FIRE (FPF)", 
-            "FRD": "FORD", 
-            "FRDDFT": "FORD DIFFICULT", 
-            "FRDESY": "FORD EASY", 
-            "FRGS": "FRONTOGENESIS", 
-            "FRGSRH": "FORAGING/SEARCHING", 
-            "FRLS": "FRONTOLYSIS", 
-            "FRMN": "FORMATION", 
-            "FRNSYS": "FRONTAL SYSTEMS", 
-            "FRT": "FORT", 
-            "FRY": "FERRY", 
-            "FRYCSG": "FERRY CROSSING", 
-            "FRYTSP": "FERRY TRANSPORTER", 
-            "FSA": "FIRE SUPPORT AREA (FSA)", 
-            "FSCL": "FIRE SUPPORT COORDINATION LINE (FSCL)", 
-            "FSG": "FISHING", 
-            "FSGHBR": "FISHING HARBOR", 
-            "FSH1": "FORESHORE", 
-            "FSH2": "FORESHORE", 
-            "FSH3": "FORESHORE", 
-            "FSS": "FIRE SUPPORT STATION", 
-            "FSTK1": "FISH STAKES/TRAPS/WEIRS", 
-            "FSTK2": "FISH STAKES", 
-            "FSTK3": "FISH STAKES/TRAPS/WEIRS", 
-            "FSUPP": "FIRE SUPPORT", 
-            "FTFDAR": "FORTIFIED AREA", 
-            "FTFDLN": "FORTIFIED LINE", 
-            "FTR": "FIGHTER", 
-            "FU": "SMOKE", 
-            "FWDCOM": "FORWARD COMMUNICATIONS", 
-            "FWDOP": "FORWARD OBSERVER POSITION", 
-            "FZDZ": "FREEZING DRIZZLE", 
-            "FZLED": "FROZEN LEAD", 
-            "FZLVL": "FREEZING LEVEL", 
-            "FZPPN": "FREEZING/FROZEN PRECIPITATION", 
-            "FZRA": "FREEZING RAIN", 
-            "FZSNV": "FOG - FREEZING, SKY NOT VISIBLE", 
-            "FZSV": "FOG - FREEZING, SKY VISIBLE", 
-            "GAP": "GAP", 
-            "GDD": "GUIDED MISSILE", 
-            "GENARA": "GENERAL AREA", 
-            "GLST": "GRAY LIST LOCATION", 
-            "GLZGRD": "GLAZE (THIN ICE) ON GROUND", 
-            "GNL": "GENERAL", 
-            "GOVLDR": "GOVERNMENT LEADERSHIP", 
-            "GPHY": "GEOPHYSICS/ACOUSTICS", 
-            "GRD": "GROUND", 
-            "GRDSM": "GROUND STATION MODULE", 
-            "GRDSR": "GROUND SURVEILLANCE RADAR", 
-            "GRDTRK": "GROUND TRACK", 
-            "GRDVEH": "GROUND VEHICLE", 
-            "GRDZRO": "GROUND ZERO", 
-            "GREL": "GRENADE LAUNCHER", 
-            "GRF": "GRAFITTI", 
-            "GTL": "GENTLE", 
-            "GUD": "GUARD", 
-            "GUNUNT": "GUN UNIT", 
-            "GVL": "GRAVEL", 
-            "GWL": "GROWLER", 
-            "H2O": "WATER", 
-            "H2OCRT": "WATER CRAFT", 
-            "H2OTRB": "WATER TURBULENCE", 
-            "HAMEZ": "HIGH ALTITUDE MEZ", 
-            "HAZ": "HAZARD", 
-            "HAZMAT": "HAZARDOUS MATERIALS (HAZMAT)", 
-            "HBR": "HARBOR (GENERAL)", 
-            "HC": "HURRICANE/TYPHOON", 
-            "HCNY": "HALTED CONVOY", 
-            "HGH": "HIGH", 
-            "HGHCTR": "HIGH PRESSURE CENTER", 
-            "HGL": "HOLDING LINE", 
-            "HGTFDG": "HEIGHT FINDING", 
-            "HIDACZ": "HIGH DENSITY AIRSPACE CONTROL ZONE (HIDACZ)", 
-            "HJKG": "HIJACKING", 
-            "HL": "HAIL", 
-            "HMAD": "H/MAD", 
-            "HMG": "HEAVY MACHINE GUN", 
-            "HOV": "HOVERCRAFT", 
-            "HOW": "HOWITZER/GUN", 
-            "HP": "HIDE POINT", 
-            "HRE": "HORSE", 
-            "HSP": "HOSPITAL", 
-            "HSPSHP": "HOSPITAL SHIP", 
-            "HTHP": "HOUSE-TO-HOUSE PROPAGANDA", 
-            "HUM": "RIDGES OR HUMMOCKS", 
-            "HVY": "HEAVY", 
-            "HWFNC": "HIGH WIRE FENCE", 
-            "HWK": "HAWK", 
-            "HYDGRY": "HYDROGRAPHY", 
-            "HZ": "HAZE", 
-            "IB": "ICEBERG", 
-            "IC": "ICE CRYSTALS (DIAMOND DUST)", 
-            "ICG": "ICING", 
-            "ICN": "ICE CONCENTRATION", 
-            "ID": "ICE DRIFT (DIRECTION)", 
-            "IDFF": "IDENTIFICATION FRIEND/FOE (INTERROGATOR)", 
-            "IEOBFR": "ICE EDGE OR BOUNDARY FROM RADAR", 
-            "IF": "ICE FREE", 
-            "IFF": "IFF (TRANSPONDER)", 
-            "IFR": "INSTRUMENT FLIGHT RULE (IFR)", 
-            "II": "ICE ISLAND", 
-            "IMP": "BYPASS IMPOSSIBLE", 
-            "IMTBUR": "IMPACT BURIAL", 
-            "IMTPNT": "IMPACT POINT", 
-            "INC": "INTERCEPT", 
-            "INCR": "INTERCEPTOR", 
-            "INF": "INFANTRY", 
-            "INFFV": "INFANTRY FIGHTING VEHICLE", 
-            "INFNLE": "INFILTRATION LANE", 
-            "INMHVY": "INTERMITTENT HEAVY", 
-            "INMLIT": "INTERMITTENT LIGHT", 
-            "INMMOD": "INTERMITTENT MODERATE", 
-            "INS": "INSTALLATION", 
-            "INT": "INTELLIGENCE (OCEANOGRAPHIC, AGI)", 
-            "INTGN": "INTERROGATION", 
-            "INTMR": "INTERMEDIATE RANGE", 
-            "IRR": "IRREGULAR", 
-            "ISB": "ISOBAR - SURFACE", 
-            "ISD": "ISODROSOTHERM", 
-            "ISF": "INTERNAL SECURITY FORCES", 
-            "ISH": "ISOTACH", 
-            "ISL": "ISOLATE", 
-            "ISND": "ISLAND", 
-            "ISP": "ISOPLETHS", 
-            "IST": "ISOTHERM", 
-            "ISTB": "INSTABILITY LINE", 
-            "ISYS": "ICE SYSTEMS", 
-            "ITCZ": "INTER-TROPICAL CONVERGANCE ZONE", 
-            "ITD": "INTER-TROPICAL DISCONTINUITY", 
-            "ITDT": "INTERDICT", 
-            "ITEST": "ICE THICKNESS (ESTIMATED)", 
-            "ITM": "ITEMS", 
-            "ITOBS": "ICE THICKNESS (OBSERVED)", 
-            "IWU": "INFORMATION WARFARE UNIT", 
-            "JAG": "JUDGE ADVOCATE GENERAL (JAG)", 
-            "JBB": "JAMMED BRASH BARRIER", 
-            "JIB": "JOINT INFORMATION BUREAU (JIB)", 
-            "JINTCT": "JOINT INTELLIGENCE CENTER", 
-            "JMG": "JAMMING", 
-            "JTSM": "JET STREAM", 
-            "KDNG": "KIDNAPPING", 
-            "KGP": "KINGPIN", 
-            "KLP1": "KELP/SEAWEED", 
-            "KLP2": "KELP/SEAWEED", 
-            "KLP3": "KELP/SEAWEED", 
-            "KNIVEH": "KNOWN INSURGENT VEHICLE", 
-            "LAARA": "LIMITED ACCESS AREA", 
-            "LAMEZ": "LOW ALTITUDE MEZ", 
-            "LANE": "LANE", 
-            "LAR": "LIGHT ARMORED RECONNAISSNACE (LAR)", 
-            "LARMVH": "LIGHT ARMORED VEHICLE", 
-            "LAWENU": "LAW ENFORCEMENT UNIT", 
-            "LAWENV": "LAW ENFORCEMENT VESSEL", 
-            "LBR": "LABOR", 
-            "LCCP": "LARGE COMMUNICATION CONFIGURED PACKAGE (LCCP)", 
-            "LCCTRK": "LIMITED CROSS-COUNTRY TRUCK", 
-            "LCK": "LOCK", 
-            "LCON": "LOST CONTACT", 
-            "LD": "LINE OF DEPARTURE", 
-            "LDGLNE": "LEADING LINE", 
-            "LDLC": "LINE OF DEPARTURE/LINE OF CONTACT (LD/LC)", 
-            "LDNCGC": "LOOSE DRY DUST OR SAND NOT COVERING GROUND COMPLETELY", 
-            "LDSALH": "LOOSE DRY SNOW COVERING AT LEAST ONE-HALF GROUND, BUT GROUND NOT COMPLETELY COVERED", 
-            "LDSNLH": "LOOSE DRY SNOW COVERING LESS THAN ONE-HALF OF GROUND", 
-            "LDY": "LAUNDRY/BATH", 
-            "LED": "LEAD", 
-            "LEN": "LARGE EXTENSION NODE", 
-            "LESCRT": "LEISURE CRAFT", 
-            "LIT": "LIGHT", 
-            "LITHSE": "LIGHTHOUSE", 
-            "LITLNE": "LIGHT LINE", 
-            "LITMOD": "DUST/SAND STORM - LIGHT TO MODERATE", 
-            "LITVES": "LIGHT VESSEL/LIGHTSHIP", 
-            "LLTR": "LOW LEVEL TRANSIT ROUTE (LLTR)", 
-            "LMG": "LIGHT MACHINE GUN", 
-            "LMT": "LIMITS", 
-            "LMTADV": "LIMIT OF ADVANCE", 
-            "LND": "LAND", 
-            "LNDCRT": "LANDING CRAFT", 
-            "LNDMNE": "LAND MINES", 
-            "LNDPLC": "LANDING PLACE", 
-            "LNDRNG": "LANDING RING", 
-            "LNDSHP": "LANDING SHIP", 
-            "LNDSUP": "LANDING SUPPORT", 
-            "LNE": "LINE", 
-            "LNGR": "LONG RANGE", 
-            "LNKUPT": "LINKUP POINT", 
-            "LNRTGT": "LINEAR TARGET", 
-            "LOC": "LINE OF CONTACT", 
-            "LOCAT": "LOCATIONS", 
-            "LOFAR": "LOW FREQUENCY ANALYZING AND RECORDING (LOFAR)", 
-            "LORO": "LIMIT OF RADAR OBSERVATION", 
-            "LOU": "LIMIT OF UNDERCAST", 
-            "LOVO": "LIMIT OF VISUAL OBSERVATION", 
-            "LOWCTR": "LOW PRESSURE CENTER", 
-            "LP": "LAUNCH POINT", 
-            "LPC": "LIQUID PRECIPITATION - CONVECTIVE", 
-            "LPNCI": "LIQUID PRECIPITATION - NON-CONVECTIVE CONTINUOUS OR INTERMITTENT", 
-            "LRP": "LOGISTICS RELEASE POINT (LRP)", 
-            "LRS": "LONG RANGE SURVEILLANCE (LRS)", 
-            "LSR": "LASER", 
-            "LSTGT": "LINEAR SMOKE TARGET", 
-            "LTA": "LIGHTER THAN AIR", 
-            "LTG": "LIGHTNING", 
-            "LTL": "LESS THAN LETHAL", 
-            "LW": "LOW", 
-            "LWFNC": "LOW WIRE FENCE", 
-            "LZ": "LANDING ZONE (LZ)", 
-            "MAINT": "MAINTENANCE", 
-            "MANATK": "MAIN ATTACK", 
-            "MAR": "MARINE", 
-            "MARLFE": "MARINE LIFE", 
-            "MARTAR": "MARITIME AREA", 
-            "MARTLB": "MARITIME LIMIT BOUNDARY", 
-            "MCC": "MOVEMENT CONTROL CENTER(MCC)", 
-            "MCLST": "MINE CLUSTER", 
-            "MCMDRN": "MCM DRONE", 
-            "MCMSUP": "MCM SUPPORT", 
-            "MCNY": "MOVING CONVOY", 
-            "MCP": "MAINTENANCE COLLECTION POINT", 
-            "MCT": "MERCHANT", 
-            "MCVEH": "MINE CLEARING VEHICLE", 
-            "MDM": "MEDIUM", 
-            "MDMSD": "MEDIUM SAND", 
-            "MDMSLT": "MEDIUM SILT", 
-            "MECH": "MECHANIZED", 
-            "MED": "MEDICAL", 
-            "MEDF": "MEDICAL FACILITY", 
-            "MEDTF": "MEDICAL TREATMENT FACILITY", 
-            "MEDV": "MEDEVAC", 
-            "METO": "METEOROLOGICAL", 
-            "MEZ": "MISSILE ENGAGEMENT ZONE (MEZ)", 
-            "MFN": "MULTI-FUNCTION", 
-            "MIL": "MILITARY", 
-            "MILBF": "MILITARY BASE/FACILITY", 
-            "MILINT": "MILITARY INTELLIGENCE", 
-            "MILP": "MILITARY POLICE", 
-            "MILVP": "MILITARY VEHICLE PRODUCTION", 
-            "MIST": "MIST", 
-            "MIWBC": "MIW BOTTOM CATEGORY", 
-            "MIWBS": "MIW-BOTTOM SEDIMENTS", 
-            "MIWBT": "MIW BOTTOM TYPE", 
-            "MIX": "MIXED ICING", 
-            "ML": "MINE LAYING", 
-            "MLDCGC": "MODERATE/THICK LOOSE DRY DUST OR SAND COVERING GROUND COMPLETELY", 
-            "MLVEH": "MINE LAYING VEHICLE", 
-            "MMD": "MAN-MADE STRUCTURES", 
-            "MMF": "MILITARY MATERIEL FACILITY", 
-            "MNDARA": "MINED AREA", 
-            "MNE": "MINE", 
-            "MNECM": "MINE COUNTERMEASURES", 
-            "MNEFLD": "MINEFIELDS", 
-            "MNEHNT": "MINEHUNTER", 
-            "MNELYR": "MINELAYER", 
-            "MNENAV": "MINE-NAVAL", 
-            "MNESWE": "MINESWEEPER", 
-            "MNEWBD": "MINE WARFARE BOTTOM DESCRIPTORS", 
-            "MNEWV": "MINE WARFARE VESSEL", 
-            "MNT": "MOUNTAIN", 
-            "MNTWAV": "MOUNTAIN WAVES", 
-            "MNY": "MANY ICEBERGS", 
-            "MNYBB": "MANY BERGY BITS", 
-            "MNYGNL": "MANY ICEBERGS - GENERAL", 
-            "MNYGWL": "MANY GROWLERS", 
-            "MOBSU": "MOBILITY/SURVIVABILITY", 
-            "MOD": "MODERATE", 
-            //"MODHVY": "FREEZING DRIZZLE - MODERATE/HEAVY", 
-            //"MODHVY": "FREEZING RAIN - MODERATE/HEAVY", 
-            //"MODHVY": "HAIL - MODERATE/HEAVY NOT ASSOCIATED WITH THUNDER", 
-            "MODHVY": "RAIN SHOWERS - MODERATE/HEAVY", 
-            //"MODHVY": "SNOW SHOWERS - MODERATE/HEAVY", 
-            "MOOTW": "MILITARY OPERATIONS OTHER THAN WAR (MOOTW)", 
-            "MORT": "MORTAR", 
-            "MOT": "MOTORIZED", 
-            "MPOFI": "MELT PUDDLES OR FLOODED ICE", 
-            "MRK": "MARKER", 
-            "MRL": "MULTIPLE ROCKET LAUNCHER", 
-            "MRR": "MINIMUM RISK ROUTE (MRR)", 
-            "MRSH": "MARSHALL", 
-            "MRSPD": "MULTI ROCKET SELF-PROPELLED", 
-            "MRTOW": "MULTI ROCKET TOWED", 
-            "MRTRK": "MULTI ROCKET TRUCK", 
-            "MSDZ": "MINIMUM SAFE DISTANCE ZONES", 
-            "MSE": "MULTIPLE SUBSCRIBER ELEMENT", 
-            "MSL": "MISSILE", 
-            "MSLAQ": "MISSILE ACQUISITION", 
-            "MSLDL": "MISSILE DOWNLINK", 
-            "MSLGDN": "MISSILE GUIDANCE", 
-            "MSLIF": "MISSILE IN FLIGHT", 
-            "MSLL": "MISSILE LAUNCHER", 
-            "MSLPNT": "MSL DETECT POINT", 
-            "MSLTRK": "MISSILE TRACKING", 
-            "MSRUT": "MAIN SUPPLY ROUTE", 
-            "MSSP": "MISSILE & SPACE SYSTEM PRODUCTION", 
-            "MTRY": "MORTUARY/GRAVES REGISTRY", 
-            "MUD": "MUD", 
-            "MVB": "MOVEABLE", 
-            "MVBPFD": "MOVEABLE AND PREFABRICATED", 
-            "MVFR": "MARGINAL VISUAL FLIGHT RULE (MVFR)", 
-            "MWR": "MORALE, WELFARE, RECREATION (MWR)", 
-            "NAI": "NAMED AREA OF INTEREST (NAI)", 
-            "NAV": "NAVAL", 
-            "NAVGRP": "NAVY GROUP", 
-            "NAVREF": "NAV REFERENCE", 
-            "NAVTF": "NAVY TASK FORCE", 
-            "NAVTG": "NAVY TASK GROUP", 
-            "NAVTU": "NAVY TASK UNIT", 
-            "NBC": "NUCLEAR, BIOLOGICAL AND CHEMICAL", 
-            "NBCEQT": "NBC EQUIPMENT", 
-            "NBCOP": "NBC OBSERVATION POST (DISMOUNTED)", 
-            "NCBTT": "NONCOMBATANT", 
-            "NDGZ": "NUCLEAR DETINATIONS GROUND ZERO", 
-            "NENY": "NUCLEAR ENERGY", 
-            "NEUT": "NEUTRALIZE", 
-            "NFA": "NO-FIRE AREA (NFA)", 
-            "NFL": "NO-FIRE LINE (NFL)", 
-            "NMIL": "NON-MILITARY", 
-            "NMP": "NUCLEAR MATERIAL PRODUCTION", 
-            "NMS": "NUCLEAR MATERIAL STORAGE", 
-            "NODAT": "NO DATA", 
-            "NODCTR": "NODE CENTER", 
-            "NPRN": "NUCLEAR PROPULSION", 
-            "NPT": "NUCLEAR PLANT", 
-            "NSUB": "NON-SUBMARINE", 
-            "NUC": "NUCLEAR", 
-            "NUCTGT": "NUCLEAR TARGET", 
-            "NVGL": "NAVIGATIONAL", 
-            "OBJ": "OBJECTIVE", 
-            "OBSEFT": "OBSTACLE EFFECT", 
-            "OBSPST": "OBSERVATION POST/OUTPOST", 
-            "OBST": "OBSTACLES", 
-            "OBSTBP": "OBSTACLE BYPASS", 
-            "OCA": "OCEANIC", 
-            "OCC": "OCCUPY", 
-            "OCD": "OCCLUDED FRONT", 
-            "OCNGRY": "OCEANOGRAPHY", 
-            "OD": "OPERATOR-DEFINED", 
-            "ODFF": "OPERATOR-DEFINED FREEFORM", 
-            "OFA": "OBSTACLE FREE AREA", 
-            "OFF": "OFFENSE", 
-            "OIEOB": "OBSERVED ICE EDGE OR BOUNDARY", 
-            "OITI": "OPENINGS IN THE ICE", 
-            "OLOS": "OMNI-LINE-OF-SIGHT (LOS)", 
-            "OLR": "OILER/TANKER", 
-            "OLRG": "OIL/GAS RIG", 
-            "OLRGFD": "OIL/GAS RIG FIELD", 
-            "OPDECN": "DECON SITE/POINT (OPERATIONAL DECONTAMINATION)", 
-            "OPN": "OPERATIONS", 
-            "ORA": "OBSTACLE RESTRICTED AREA", 
-            "ORD": "ORDNANCE", 
-            "OSLF1": "OFFSHORE LOADING FACILITY", 
-            "OSLF2": "OFFSHORE LOADING FACILITY", 
-            "OSLF3": "OFFSHORE LOADING FACILITY", 
-            "OTH": "OTHER", 
-            "OVC": "OVERCAST COVERAGE", 
-            "OWN": "OWN TRACK", 
-            "PAA": "POSITION AREA FOR ARTILLERY (PAA)", 
-            "PAT": "PATROL", 
-            "PATG": "PATROLLING", 
-            "PATT": "PATRIOT", 
-            "PBL": "PEBBLES", 
-            "PBLSHE": "PEBBLES, SHELLS", 
-            "PBNO": "PREPARED BUT NOT OCCUPIED", 
-            "PBX": "PENETRATION BOX", 
-            "PDF": "PRINCIPAL DIRECTION OF FIRE (PDF)", 
-            "PDMIC": "PREDOMINATELY ICE COVERED", 
-            "PE": "ICE PELLETS (SLEET)", 
-            "PERSVC": "PERSONNEL SERVICES", 
-            "PF": "PROCESSING FACILITY", 
-            "PGO": "PETROLEUM/GAS/OIL", 
-            "PHELNE": "PHASE LINE", 
-            "PHG": "PHOTOGRAPHIC", 
-            "PHOSWT": "TELEPHONE SWITCH", 
-            "PIM": "PIM", 
-            "PIPNT": "PREDICTED IMPACT POINT", 
-            "PIW": "PERSON IN WATER", 
-            "PKAN": "PACK ANIMAL(S)", 
-            "PKT": "PICKET", 
-            "PLD": "PROBABLE LINE OF DEPLOYMENT (PLD)", 
-            "PLE": "PILE/PILING/POST", 
-            "PLND": "PLANNED", 
-            "PLT": "WIND PLOT", 
-            "PNE": "PENETRATE", 
-            "PNT": "POINT", 
-            "PNTA": "POINT A", 
-            "PNTD": "POINT OF DEPARTURE", 
-            "PNTINR": "POINT OF INTEREST", 
-            "PNTQ": "POINT Q", 
-            "PNTR": "POINT R", 
-            "PNTX": "POINT X", 
-            "PNTY": "POINT Y", 
-            "POUTAI": "PRECIPITATION OF UNKNOWN TYPE AND INTENSITY", 
-            "PPELNE": "PIPELINES/PIPE", 
-            "PRH1": "PERCHES/STAKES", 
-            "PRH2": "PERCHES/STAKES", 
-            "PRH3": "PERCHES/STAKES", 
-            "PRS": "PRESSURE SYSTEMS", 
-            "PRT": "PORTS", 
-            "PRTHBR": "PORTS AND HARBORS", 
-            "PSG": "PASSENGER", 
-            "PSNG": "POISONING", 
-            "PSSPNT": "PASSAGE POINT", 
-            "PST": "POSTAL", 
-            "PSY": "PSYCHOLOGICAL", 
-            "PSYOP": "PSYCHOLOGICAL OPERATIONS (PSYOP)", 
-            "PTGT": "POINT/SINGLE TARGET", 
-            "PTHY": "FOG - PATCHY", 
-            "PTNCTR": "PATTERN CENTER", 
-            "PTPLOS": "POINT-TO-POINT LINE-OF-SIGHT (LOS)", 
-            "PUBAFF": "PUBLIC AFFAIRS", 
-            "PUP": "PULL-UP POINT (PUP)", 
-            "PUR": "PURIFICATION", 
-            "PWQ": "PIER/WHARF/QUAY", 
-            "PWS": "PUBLIC WATER SERVICES", 
-            "PZ": "PICKUP ZONE (PZ)", 
-            "QLFYTM": "QUALIFYING TERMS", 
-            "RA": "RAIN", 
-            "RAD": "RADAR", 
-            "RADA": "RADIOACTIVE AREA", 
-            "RALRD": "RAILROAD", 
-            "RAMPAW": "RAMP (ABOVE WATER)", 
-            "RAMPBW": "RAMP (BELOW WATER)", 
-            "RASN": "RAIN AND SNOW MIXED", 
-            "RASWR": "RAIN SHOWERS", 
-            "RAYPNT": "RALLY POINT", 
-            "RCBB": "ROADBLOCKS, CRATERS, AND BLOWN BRIDGES", 
-            "RCK": "ROCK", 
-            "RCKAWD": "ROCK AWASHED", 
-            "RCKSBM": "ROCK SUBMERGERED", 
-            "RCMT": "RECRUITMENT", 
-            "RCY": "RECOVERY", 
-            "RDGAXS": "RIDGE AXIS", 
-            "RDOUNT": "RADIO UNIT", 
-            "RDSLIT": "RAIN OR DRIZZLE AND SNOW - LIGHT", 
-            "RDSMH": "RAIN OR DRIZZLE AND SNOW - MODERATE/HEAVY", 
-            "RDV": "RENDEZVOUS", 
-            "RECEQP": "RECON EQUIPPED", 
-            "RECL": "RECOILLESS", 
-            "RECON": "RECONNAISSANCE", 
-            "REEF": "REEF", 
-            "REEVNT": "RELEASE EVENTS", 
-            "REFPNT": "REFERENCE POINT", 
-            "REL": "RELEASE LINE", 
-            "RELG": "RELIGIOUS/CHAPLAIN", 
-            "RELPNT": "RELEASE POINT", 
-            "RFA": "RESTRICTIVE FIRE AREA (RFA)", 
-            "RFE": "REFUEL", 
-            "RFG": "REFUGEES", 
-            "RFL": "RESTRICTIVE FIRE LINE (RFL)", 
-            "RFT": "RAFT SITE", 
-            "RFTG": "RAFTING", 
-            "RGH": "ROUGH", 
-            "RGR": "RANGER", 
-            "RHA": "REFUGEE HOLDING AREA", 
-            "RHD": "RAILHEAD", 
-            "RHU": "REPLACEMENT HOLDING UNIT (RHU)", 
-            "RIF": "RIFLE", 
-            "RIFWPN": "RIFLE/AUTOMATIC WEAPON", 
-            "RIME": "RIME ICING", 
-            "RIP": "RELIEF IN PLACE (RIP)", 
-            "RIV": "RIVERINE", 
-            "RLY": "RELAY", 
-            "RMP": "RAW MATERIAL PRODUCTION/STORAGE", 
-            "RO": "RANGE ONLY (RO)", 
-            "ROC": "ROCKET", 
-            "ROM": "REFUEL ON THE MOVE (ROM) POINT", 
-            "RORO": "ROLL ON/ROLL OFF", 
-            "ROT": "ROTARY WING", 
-            "ROZ": "RESTRICTED OPERATIONS ZONE (ROZ)", 
-            "RP": "RELOAD POINT", 
-            "RPH": "REPLENISH", 
-            "RRRP": "REARM, REFUEL AND RESUPPLY POINT", 
-            "RSA": "REGIMENTAL (RSA)", 
-            "RSC": "RESCUE", 
-            "RSDARA": "RESTRICTED AREA", 
-            "RTE": "ROUTE", 
-            "RTG": "RECTANGULAR", 
-            "RTGTGT": "RECTANGULAR TARGET", 
-            "RTM": "RETIREMENT", 
-            "RTN": "RETAIN", 
-            "SA": "SEA ANOMALY (WAKE, CURRENT, KNUCKLE)", 
-            "SAAFR": "STANDARD-USE ARMY AIRCRAFT FLIGHT ROUTE (SAAFR)", 
-            "SAFE": "EXPLOSIVES, STATE OF READINESS 1 (SAFE)", 
-            "SAFHSE": "SAFE HOUSE", 
-            "SAM": "SURFACE TO AIR MISSILE (SAM)", 
-            "SAR": "SEARCH AND RESCUE", 
-            "SAT": "SATELLITE", 
-            "SATDL": "SATELLITE DOWN-LINK", 
-            "SATUL": "SATELLITE UP-LINK", 
-            "SBM": "WRECK (SUBMERGED)", 
-            "SBMCRB": "SUBMERGED CRIB", 
-            "SBRSOO": "SEABED ROCK/STONE, OBSTACLE, OTHER", 
-            "SBSM": "SUBSURFACE TO SURFACE MISSILE (S/SSM)", 
-            "SBSUF": "SUBSURFACE TRACK", 
-            "SBT": "SPECIAL BOAT", 
-            "SC": "SNOW COVER", 
-            "SCE": "SECURE", 
-            "SCGC": "SNOW COVERING GROUND COMPLETELY; DEEP DRIFTS", 
-            "SCM": "SCM", 
-            "SCN": "SCREEN", 
-            "SCP": "SURVEY CONTROL POINT", 
-            "SCR": "SECTOR", 
-            "SCT": "SCATTERED COVERAGE", 
-            "SCUT": "SCOUT", 
-            "SD": "SAND", 
-            "SD&SHE": "SAND AND SHELLS", 
-            "SEAL": "SEAL", 
-            "SEC": "SECURITY", 
-            "SECPOL": "SECURITY POLICE (AIR)", 
-            "SEMI": "SEMI", 
-            "SEN": "SMALL EXTENSION NODE", 
-            "SFP": "SUPPORT BY FIRE POSITION", 
-            "SG": "SNOW GRAINS", 
-            "SGTGT": "SERIES OR GROUP OF TARGETS", 
-            "SHA": "SHEAR LINE", 
-            "SHAZ": "SHEARING OR SHEAR ZONE", 
-            "SHE": "SHELL", 
-            "SHETKG": "SHELL TRACKING", 
-            "SHPCSN": "SHIP CONSTRUCTION", 
-            "SHRLNE": "SHORELINE PROTECTION", 
-            "SHRPAT": "SHORE PATROL", 
-            "SHTR": "SHORT RANGE", 
-            "SHWCTS": "FOG - SHALLOW CONTINUOUS", 
-            "SHWPTH": "FOG - SHALLOW PATCHES", 
-            "SI": "SEA ICE", 
-            "SIGINC": "SIGNAL INTERCEPT", 
-            "SIGINT": "SIGNALS INTELLIGENCE", 
-            "SIGSUP": "SIGNAL SUPPORT", 
-            "SIGUNT": "SIGNAL UNIT", 
-            "SKC": "CLEAR SKY", 
-            "SKEIP": "STRIKE IP", 
-            "SKYOBD": "FOG - SKY OBSCURED", 
-            "SKYVSB": "FOG - SKY VISIBLE", 
-            "SLDRCK": "SOLID ROCK", 
-            "SLM": "SURFACE LAUNCHED MISSILE", 
-            "SLP": "SUPPLY", 
-            "SLPRUT": "SUPPLY ROUTES", 
-            "SLT": "SILT", 
-            "SMDCY": "SEA MINE DECOY", 
-            "SMF": "SEA MINE (FLOATING)", 
-            "SMG": "SEA MINE (GROUND)", 
-            "SMH": "SMOOTH", 
-            "SMK": "SMOKE", 
-            "SMKDEC": "SMOKE/DECON", 
-            "SML": "SEA MINE-LIKE", 
-            "SMLNE": "STREAM LINE", 
-            "SMM": "SEA MINE (MOORED)", 
-            "SMNE": "SEA MINE", 
-            "SMOP": "SEA MINE (OTHER POSITION)", 
-            "SN": "SNOW", 
-            "SNAG": "SNAGS/STUMPS", 
-            "SNBY": "SONOBUOY", 
-            "SND": "SOUND", 
-            "SNDG": "SOUNDINGS", 
-            "SNG": "SINGLE CONCERTINA", 
-            "SNGFNC": "SINGLE FENCE", 
-            "SNK": "SINKER", 
-            "SNS": "SENSOR", 
-            "SNSZ": "SENSOR ZONE", 
-            "SOF": "SPECIAL OPERATIONS FORCES (SOF)", 
-            "SOFUNT": "SPECIAL OPERATIONS FORCES (SOF) UNIT", 
-            "SOP": "SENSOR OUTPOST/LISTENING POST (OP/LP)", 
-            "SP": "SEAPORT/NAVAL BASE", 
-            "SPC": "SPACE", 
-            "SPD": "SELF-PROPELLED", 
-            "SPDTRK": "SELF-PROPELLED TRACKED", 
-            "SPDWHD": "SELF-PROPELLED WHEELED", 
-            "SPG": "SNIPING", 
-            "SPL": "SPECIAL", 
-            "SPLPNT": "SPECIAL POINT", 
-            "SPOD": "SPOD/SPOE", 
-            "SPT": "SUPPLY POINTS", 
-            "SPY": "SPY", 
-            "SQL": "SQUALL", 
-            "SRH": "SEARCH", 
-            "SRHARA": "SEARCH AREA/RECONNAISSANCE AREA", 
-            "SRL": "SINGLE ROCKET LAUNCHER", 
-            "SRSPD": "SINGLE ROCKET SELF-PROPELLED", 
-            "SRTOW": "SINGLE ROCKET TOWED", 
-            "SRTRK": "SINGLE ROCKET TRUCK", 
-            "SRUF": "SERVICE, RESEARCH, UTILITY FACILITY", 
-            "SSH": "SERVICE & SUPPORT HARBOR (YARDCRAFT, BARGE, HARBOR, TUG)", 
-            "SSL": "SEVERE SQUALL LINE", 
-            "SSM": "SURFACE TO SURFACE MISSILE (SSM)", 
-            "SSSNR": "SPECIAL SSNR", 
-            "SST": "SPACE STATION", 
-            "SSUBSR": "SEA SUBSURFACE RETURNS", 
-            "SSUF": "SEA SURFACE TRACK", 
-            "SSWR": "SNOW SHOWERS", 
-            "STAT": "STATIONARY FRONT", 
-            "STC": "STATIC DEPICTION", 
-            "STG": "STINGER", 
-            "STGC": "STRATEGIC", 
-            "STMS": "STORMS", 
-            "STN": "STATION", 
-            "STNE": "STONES", 
-            "STOG": "STATE OF THE GROUND", 
-            "STOPO": "SKY TOTALLY OR PARTIALLY OBSCURED", 
-            "STP": "STEEP", 
-            "STRGPT": "STRONG POINT", 
-            "STRPNT": "START POINT", 
-            "SU": "SURVIVABILITY", 
-            "SUB": "SUBMARINE", 
-            "SUBCBL": "SUBMARINE CABLE", 
-            "SUF": "SURF-SURF (SS)", 
-            "SUFDRY": "SURFACE DRY WITHOUT CRACKS OR APPRECIABLE DUST OR LOOSE SAND", 
-            "SUFFLD": "SURFACE FLOODED", 
-            "SUFFZN": "SURFACE FROZEN", 
-            "SUFMST": "SURFACE MOIST", 
-            "SUFSHL": "SURFACE SHELTER", 
-            "SUFSRH": "SURFACE SEARCH", 
-            "SUFWET": "SURFACE WET, STANDING WATER IN SMALL OR LARGE POOLS", 
-            "SUP": "SUPPORT", 
-            "SUPARS": "SUPPORT AREAS", 
-            "SUPATK": "SUPPORTING ATTACK", 
-            "SUPPLY": "QUARTERMASTER (SUPPLY)", 
-            "SUV": "SPORT UTILITY VEHICLE (SUV)", 
-            "SVL": "SURVEILLANCE", 
-            "SVR": "SEVERE", 
-            "SW": "SEAWALL", 
-            "SWO": "SASTRUGI (WITH ORIENTATION)", 
-            "SWPARA": "SWEPT AREA", 
-            "SWRLIT": "RAIN AND SNOW SHOWERS - LIGHT", 
-            "SWRMOD": "RAIN AND SNOW SHOWERS - MODERATE/HEAVY", 
-            "SYM": "CLOUD COVERAGE SYMBOLS", 
-            "SZE": "SEIZE", 
-            "TAC": "TACTICAL", 
-            "TACEXP": "TACTICAL EXPLOIT", 
-            "TACGRP": "TACTICAL GRAPHICS", 
-            "TACSAT": "TACTICAL SATELLITE", 
-            "TAI": "TARGETED AREA OF INTEREST (TAI)", 
-            "TAK": "TANKING", 
-            "TANK": "TANK", 
-            "TARP": "PSYOP (TV AND RADIO PROPAGANDA)", 
-            "TBA": "TARGET BUILD-UP AREA (TBA)", 
-            "TCF": "TELECOMMUNICATIONS FACILITY", 
-            "TCN": "TACAN", 
-            "TCP": "TRAFFIC CONTROL POST (TCP)", 
-            "TDECUR": "TIDE AND CURRENT", 
-            "TDEDP": "TIDE DATA POINT", 
-            "TDEG": "TIDE GAUGE", 
-            "TDTSM": "ANTITANK OBSTACLES: TETRAHEDRONS, DRAGONS TEETH, AND OTHER SIMILAR OBSTACLES", 
-            "TELAR": "TELAR", 
-            "TGT": "TARGET", 
-            "TGTAQ": "TARGET ACQUISITION", 
-            "TGTAQZ": "TARGET ACQUISTION ZONES", 
-            "TGTGUT": "TARGETING UNIT", 
-            "TGTILL": "TARGET ILLUMINATOR", 
-            "TGTREF": "TARGET REFERENCE", 
-            "TGTTRK": "TARGET TRACKING", 
-            "THK": "THICKNESS", 
-            "THT": "THEATER", 
-            "TKD": "TRACKED", 
-            "TLAR": "TLAR", 
-            "TLDCGC": "THIN LOOSE DRY DUST OR SAND COVERING GROUND COMPLETELY", 
-            "TM": "TRAILER MOUNTED", 
-            "TMC": "TOMCAT", 
-            "TMDU": "THEATER MISSILE DEFENSE UNIT", 
-            "TNE": "TRAINER", 
-            "TNK": "TANKER", 
-            "TOPFTR": "TOPOGRAPHICAL FEATURES", 
-            "TOR": "RAIN SHOWERS - TORRENTIAL", 
-            "TOW": "TOWED", 
-            "TOWTRK": "TOW TRUCK", 
-            "TOWVES": "TOWING VESSEL", 
-            "TPD": "TORPEDO", 
-            "TPLSYS": "TROPICAL STORM SYSTEMS", 
-            "TPSSCT": "TROPOSPHERIC SCATTER", 
-            "TPT": "TRANSPORTATION", 
-            "TRB": "TURBULENCE", 
-            "TRF": "TECHNOLOGICAL RESEARCH FACILITY", 
-            "TRGARA": "TRAINING AREA", 
-            "TRGH": "DECON SITE/POINT (THOROUGH DECONTAMINATION)", 
-            "TRIPWR": "TRIP WIRE", 
-            "TRISTD": "TRIPLE STRAND CONCERTINA", 
-            "TRK": "TRACK", 
-            "TRKMV": "TRUCK MOUNTED WITH VOLCANO", 
-            "TRNLCO": "TRAIN LOCOMOTIVE", 
-            "TROPDN": "TROPICAL DEPRESSION", 
-            "TROPHG": "TROPOPAUSE HIGH", 
-            "TROPLV": "TROPOPAUSE LEVEL", 
-            "TROPLW": "TROPOPAUSE LOW", 
-            "TROPSM": "TROPICAL STORM", 
-            "TRP": "DECON SITE/POINT (TROOPS)", 
-            "TRUAXS": "TROUGH AXIS", 
-            "TRW": "TRAWLER", 
-            //"TS": "THUNDERSTORM - NO PRECIPITATION", 
-            "TS": "THUNDERSTORMS", 
-            "TSHVNH": "THUNDERSTORM HEAVY WITH RAIN/SNOW - NO HAIL", 
-            //"TSHVWH": "THUNDERSTORM HEAVY - WITH HAIL", 
-            "TSK": "TASKS", 
-            "TSLMNH": "THUNDERSTORM LIGHT TO MODERATE WITH RAIN/SNOW - NO HAIL", 
-            "TSLMWH": "THUNDERSTORM LIGHT TO MODERATE - WITH HAIL", 
-            "TSPF": "TRANSPORT FACILITY", 
-            "TSWADL": "TROPICAL STORM WIND AREAS AND DATE/TIME LABELS", 
-            "TTP": "TRAILER TRANSFER POINT", 
-            "TTYCTR": "TELETYPE CENTER", 
-            "TUG": "TUG", 
-            "TUR": "TURN", 
-            "TVAR": "TARGET VALUE AREA (TVAR)", 
-            "UAV": "UNMANNED AERIAL VEHICLE", 
-            "UAVR": "UNMANNED AERIAL VEHICLE (UAV) ROUTE", 
-            "UCOV": "WRECK (UNCOVERS)", 
-            "UGDSHL": "UNDERGROUND SHELTER", 
-            "UH2": "UNDERWATER", 
-            "UH2DAN": "UNDERWATER DANGER/HAZARD", 
-            "UH2DCY": "UNDERWATER DECOY", 
-            "UH2DML": "UNDERWATER DEMOLITION TEAM", 
-            "UH2WPN": "UNDERWATER WEAPON", 
-            "ULCSCG": "UNEVEN LAYER OF COMPACT OR WET SNOW COVERING GROUND COMPLETELY", 
-            "ULDSCG": "UNEVEN LAYER OF LOOSE DRY SNOW COVERING GROUND COMPLETELY", 
-            "UMC": "UNIT MAINTENANCE COLLECTION POINT", 
-            "UNK": "UNKNOWN", 
-            "UNT": "UNIT", 
-            "UPP": "UPPER", 
-            "USP": "UNSPECIFIED", 
-            "USPMNE": "UNSPECIFIED MINE", 
-            "USW": "UNDER SEA WARFARE", 
-            "UTY": "UTILITY", 
-            "UTYVEH": "UTILITY VEHICLE", 
-            "UUV": "UNMANNED UNDERWATER VEHICLE (UUV)", 
-            "UWRPM": "UNDERWAY REPLENISHMENT (OILER/TANKER, STORES, AMMUNITION, TROOP TRANSPORT)", 
-            "UXO": "UNEXPLODED ORDINANCE AREA (UXO)", 
-            "VCSESD": "VERY COARSE SAND", 
-            "VDR1-2": "VDR LEVEL 1-2", 
-            "VDR2-3": "VDR LEVEL 2-3", 
-            "VDR3-4": "VDR LEVEL 3-4", 
-            "VDR4-5": "VDR LEVEL 4-5", 
-            "VDR5-6": "VDR LEVEL 5-6", 
-            "VDR6-7": "VDR LEVEL 6-7", 
-            "VDR7-8": "VDR LEVEL 7-8", 
-            "VDR8-9": "VDR LEVEL 8-9", 
-            "VDR9-0": "VDR LEVEL 9-10", 
-            "VEH": "HIJACKING (VEHICLE)", 
-            "VFNESD": "VERY FINE SAND", 
-            "VFNSLT": "VERY FINE SILT", 
-            "VIOATY": "VIOLENT ACTIVITIES (DEATH CAUSING)", 
-            "VLAD": "VERTICAL LINE ARRAY DIFAR (VLAD)", 
-            "VNY": "VETERINARY", 
-            "VOLASH": "VOLCANIC ASH", 
-            "VOLERN": "VOLCANIC ERUPTION", 
-            "VRLRPS": "VANDALISM/RAPE/LOOT/RANSACK/PLUNDER/SACK", 
-            "VSTOL": "VERTICAL/SHORT TAKEOFF AND LANDING (V/STOL)", 
-            "VUL": "VULCAN", 
-            "WAMNE": "WIDE AREA MINES", 
-            "WAP": "WAYPOINT", 
-            "WAR": "WARFIGHTING SYMBOLS", 
-            "WARMVH": "WHEELED ARMORED VEHICLE", 
-            "WAVS": "WHEELED ARMORED VEHICLE SURVEILLANCE", 
-            "WDR": "WITHDRAW", 
-            "WDRUP": "WITHDRAW UNDER PRESSURE", 
-            "WFZ": "WEAPONS FREE ZONE", 
-            "WHD": "WHEELED", 
-            "WHMECH": "WHEELED MECHANIZED", 
-            "WLG": "RECRUITMENT (WILLING)", 
-            "WLST": "WHITE LIST LOCATION", 
-            "WND": "WINDS", 
-            "WOSMIC": "WITHOUT SNOW OR MEASURABLE ICE COVER", 
-            "WP": "PSYOP (WRITTEN PROPAGANDA)", 
-            "WPN": "WEAPON", 
-            "WPNGR": "WEAPONS GRADE", 
-            "WPNRF": "WEAPONS/RADAR RANGE FANS", 
-            "WREOBS": "WIRE OBSTACLE", 
-            "WRK": "WRECK", 
-            "WRKD": "WRECK, DANGEROUS", 
-            "WRKND": "WRECK, NON DANGEROUS", 
-            "WRMFRN": "WARM FRONT", 
-            "WSMIC": "WITH SNOW OR MEASURABLE ICE COVER", 
-            "WTH": "WEATHER SYMBOLS", 
-            "WWRT": "WATER WITH RADAR TARGETS", 
-            "Z": "ZONE", 
-            "ZOR": "ZONE OF RESPONSIBILITY (ZOR)"
-        },
-
-        "unk": {
-
-            "WAR.UNK": {
-                "symbolID": "SUZP------*****", 
-                "tag": "UNK"   
-            }
-        },
-
-        "space": {
-
-            "WAR.SPC": {
-                "symbolID": "SUPP------*****", 
-                "tag": "WAR"   
-            },
-            "WAR.SPC.SAT": {
-                "symbolID": "SUPPS-----*****",
-                "tag": "WAR"  
-            },
-            "WAR.SPC.CSV": {
-                "symbolID": "SUPPV-----*****",
-                "tag": "WAR"    
-            },
-            "WAR.SPC.SST": {
-                "symbolID": "SUPPT-----*****",
-                "tag": "WAR"    
-            }
-        },
-
-        "air": {
-            "WAR.AIRTRK": {
-                "symbolID": "SUAP------*****",
-                "tag": "WAR"    
-            },
-            "WAR.AIRTRK.MIL": {
-                "symbolID": "SUAPM-----*****", 
-                "tag": "WAR"   
-            },
-            "WAR.AIRTRK.MIL.FIXD": {
-                "symbolID": "SUAPMF----*****",
-                "tag": "AIRTRK"    
-            },
-            "WAR.AIRTRK.MIL.FIXD.BMB": {
-                "symbolID": "SUAPMFB---*****", 
-                "tag": "MIL"    
-            },        
-            "WAR.AIRTRK.MIL.FIXD.FTR": {
-                "symbolID": "SUAPMFF---*****", 
-                "tag": "MIL"    
-            },
-            "WAR.AIRTRK.MIL.FIXD.FTR.INCR": {
-                "symbolID": "SUAPMFFI--*****",
-                "tag": "FIXD"    
-            },
-            "WAR.AIRTRK.MIL.FIXD.TNE": {
-                "symbolID": "SUAPMFT---*****", 
-                "tag": "MIL"    
-            },
-            "WAR.AIRTRK.MIL.FIXD.ATK": {
-                "symbolID": "SUAPMFA---*****", 
-                "tag": "MIL"    
-            },
-            "WAR.AIRTRK.MIL.FIXD.VSTOL": {
-                "symbolID": "SUAPMFL---*****",   
-                "tag": "MIL"  
-            },
-            "WAR.AIRTRK.MIL.FIXD.TNK": {
-                "symbolID": "SUAPMFK---*****", 
-                "tag": "MIL"    
-            },        
-            "WAR.AIRTRK.MIL.FIXD.CGOALT": {
-                "symbolID": "SUAPMFC---*****", 
-                "tag": "MIL"    
-            },
-            "WAR.AIRTRK.MIL.FIXD.CGOALT.LIT": {
-                "symbolID": "SUAPMFCL--*****", 
-                "tag": "FIXD"    
-            },
-            "WAR.AIRTRK.MIL.FIXD.CGOALT.MDM": {
-                "symbolID": "SUAPMFCM--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.CGOALT.HVY": {
-                "symbolID": "SUAPMFCH--*****", 
-                "tag": "FIXD"    
-            },
-            "WAR.AIRTRK.MIL.FIXD.ECM": {
-                "symbolID": "SUAPMFJ---*****",
-                "tag": "MIL"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.MEDV": {
-                "symbolID": "SUAPMFO---*****", 
-                "tag": "MIL"    
-            },        
-            "WAR.AIRTRK.MIL.FIXD.RECON": {
-                "symbolID": "SUAPMFR---*****",  
-                "tag": "MIL"   
-            },
-            "WAR.AIRTRK.MIL.FIXD.RECON.ABNEW": {
-                "symbolID": "SUAPMFRW--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.RECON.ESM": {
-                "symbolID": "SUAPMFRZ--*****", 
-                "tag": "FIXD"    
-            },
-            "WAR.AIRTRK.MIL.FIXD.RECON.PHG": {
-                "symbolID": "SUAPMFRX--*****",  
-                "tag": "FIXD"   
-            },
-            "WAR.AIRTRK.MIL.FIXD.PAT": {
-                "symbolID": "SUAPMFP---*****",
-                "tag": "MIL"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.PAT.ASUW": {
-                "symbolID": "SUAPMFPN--*****", 
-                "tag": "FIXD"    
-            },        
-            "WAR.AIRTRK.MIL.FIXD.PAT.MNECM": {
-                "symbolID": "SUAPMFPM--*****",  
-                "tag": "FIXD"   
-            },
-            "WAR.AIRTRK.MIL.FIXD.UTY": {
-                "symbolID": "SUAPMFU---*****",
-                "tag": "MIL"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.UTY.LIT": {
-                "symbolID": "SUAPMFUL--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.UTY.MDM": {
-                "symbolID": "SUAPMFUM--*****", 
-                "tag": "FIXD"    
-            },        
-            "WAR.AIRTRK.MIL.FIXD.UTY.HVY": {
-                "symbolID": "SUAPMFUH--*****",  
-                "tag": "FIXD"   
-            },
-            "WAR.AIRTRK.MIL.FIXD.COMM": {
-                "symbolID": "SUAPMFY---*****",
-                "tag": "MIL"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.CSAR": {
-                "symbolID": "SUAPMFH---*****",
-                "tag": "MIL"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.ABNCP": {
-                "symbolID": "SUAPMFD---*****", 
-                "tag": "MIL"    
-            },        
-            "WAR.AIRTRK.MIL.FIXD.DRN": {
-                "symbolID": "SUAPMFQ---*****",  
-                "tag": "MIL"   
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.ATK": {
-                "symbolID": "SUAPMFQA--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.BMB": {
-                "symbolID": "SUAPMFQB--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.CGO": {
-                "symbolID": "SUAPMFQC--*****", 
-                "tag": "FIXD"    
-            },        
-            "WAR.AIRTRK.MIL.FIXD.DRN.ABNCP": {
-                "symbolID": "SUAPMFQD--*****",  
-                "tag": "FIXD"   
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.FTR": {
-                "symbolID": "SUAPMFQF--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.CSAR": {
-                "symbolID": "SUAPMFQH--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.ECM": {
-                "symbolID": "SUAPMFQJ--*****", 
-                "tag": "FIXD"    
-            },        
-            "WAR.AIRTRK.MIL.FIXD.DRN.TNK": {
-                "symbolID": "SUAPMFQK--*****",  
-                "tag": "FIXD"   
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.VSTOL": {
-                "symbolID": "SUAPMFQL--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.SOF": {
-                "symbolID": "SUAPMFQM--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.MNECM": {
-                "symbolID": "SUAPMFQI--*****", 
-                "tag": "FIXD"    
-            },        
-            "WAR.AIRTRK.MIL.FIXD.DRN.ASUW": {
-                "symbolID": "SUAPMFQN--*****",  
-                "tag": "FIXD"   
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.PAT": {
-                "symbolID": "SUAPMFQP--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.RECON": {
-                "symbolID": "SUAPMFQR--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.RECON.ABNEW": {
-                "symbolID": "SUAPMFQRW-*****", 
-                "tag": "DRN"    
-            },        
-            "WAR.AIRTRK.MIL.FIXD.DRN.RECON.ESM": {
-                "symbolID": "SUAPMFQRZ-*****",  
-                "tag": "DRN"   
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.RECON.PHG": {
-                "symbolID": "SUAPMFQRX-*****",
-                "tag": "DRN"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.ASBW": {
-                "symbolID": "SUAPMFQS--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.TNE": {
-                "symbolID": "SUAPMFQT--*****", 
-                "tag": "FIXD"    
-            },        
-            "WAR.AIRTRK.MIL.FIXD.DRN.UTY": {
-                "symbolID": "SUAPMFQU--*****",  
-                "tag": "FIXD"   
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.COMM": {
-                "symbolID": "SUAPMFQY--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.DRN.MEDV": {
-                "symbolID": "SUAPMFQO--*****",  
-                "tag": "FIXD"   
-            },
-            "WAR.AIRTRK.MIL.FIXD.ASBWCB": {
-                "symbolID": "SUAPMFS---*****",
-                "tag": "MIL"     
-            },
-            "WAR.AIRTRK.MIL.FIXD.SOF": {
-                "symbolID": "SUAPMFM---*****",  
-                "tag": "MIL"   
-            },
-            "WAR.AIRTRK.MIL.ROT": {
-                "symbolID": "SUAPMH----*****",
-                "tag": "AIRTRK"     
-            },
-            "WAR.AIRTRK.MIL.ROT.ATK": {
-                "symbolID": "SUAPMHA---*****",  
-                "tag": "MIL"   
-            },
-            "WAR.AIRTRK.MIL.ROT.ASBW": {
-                "symbolID": "SUAPMHS---*****",
-                "tag": "MIL"     
-            },
-            "WAR.AIRTRK.MIL.ROT.UTY": {
-                "symbolID": "SUAPMHU---*****",  
-                "tag": "MIL"   
-            },
-            "WAR.AIRTRK.MIL.ROT.UTY.LIT": {
-                "symbolID": "SUAPMHUL--*****",
-                "tag": "ROT"     
-            },
-            "WAR.AIRTRK.MIL.ROT.UTY.MDM": {
-                "symbolID": "SUAPMHUM--*****",  
-                "tag": "ROT"   
-            },
-            "WAR.AIRTRK.MIL.ROT.UTY.HVY": {
-                "symbolID": "SUAPMHUH--*****",
-                "tag": "ROT"     
-            },
-            "WAR.AIRTRK.MIL.ROT.MNECM": {
-                "symbolID": "SUAPMHI---*****",  
-                "tag": "MIL"   
-            },
-            "WAR.AIRTRK.MIL.ROT.CSAR": {
-                "symbolID": "SUAPMHH---*****",
-                "tag": "MIL"     
-            },
-            "WAR.AIRTRK.MIL.ROT.RECON": {
-                "symbolID": "SUAPMHR---*****",  
-                "tag": "MIL"   
-            },
-            "WAR.AIRTRK.MIL.ROT.DRN": {
-                "symbolID": "SUAPMHQ---*****",
-                "tag": "MIL"     
-            },
-            "WAR.AIRTRK.MIL.ROT.CGOALT": {
-                "symbolID": "SUAPMHC---*****",  
-                "tag": "MIL"   
-            },
-            "WAR.AIRTRK.MIL.ROT.CGOALT.LIT": {
-                "symbolID": "SUAPMHCL--*****",
-                "tag": "ROT"     
-            },
-            "WAR.AIRTRK.MIL.ROT.CGOALT.MDM": {
-                "symbolID": "SUAPMHCM--*****",  
-                "tag": "ROT"   
-            },
-            "WAR.AIRTRK.MIL.ROT.CGOALT.HVY": {
-                "symbolID": "SUAPMHCH--*****",
-                "tag": "ROT"     
-            },
-            "WAR.AIRTRK.MIL.ROT.TNE": {
-                "symbolID": "SUAPMHT---*****",  
-                "tag": "MIL"   
-            },
-            "WAR.AIRTRK.MIL.ROT.MEDV": {
-                "symbolID": "SUAPMHO---*****",
-                "tag": "MIL"     
-            },
-            "WAR.AIRTRK.MIL.ROT.SOF": {
-                "symbolID": "SUAPMHM---*****",  
-                "tag": "MIL"   
-            },
-            "WAR.AIRTRK.MIL.ROT.ABNCP": {
-                "symbolID": "SUAPMHD---*****",
-                "tag": "MIL"     
-            },
-            "WAR.AIRTRK.MIL.ROT.TNK": {
-                "symbolID": "SUAPMHK---*****",  
-                "tag": "MIL"   
-            },
-            "WAR.AIRTRK.MIL.ROT.ECM": {
-                "symbolID": "SUAPMHJ---*****",
-                "tag": "MIL"     
-            },
-            "WAR.AIRTRK.MIL.LTA": {
-                "symbolID": "SUAPML----*****",  
-                "tag": "AIRTRK"   
-            },
-            "WAR.AIRTRK.WPN": {
-                "symbolID": "SUAPW-----*****",
-                "tag": "WAR"     
-            },
-            "WAR.AIRTRK.WPN.MSLIF": {
-                "symbolID": "SUAPWM----*****",  
-                "tag": "AIRTRK"   
-            },
-            "WAR.AIRTRK.WPN.MSLIF.SLM": {
-                "symbolID": "SUAPWMS---*****",
-                "tag": "WPN"     
-            },
-            "WAR.AIRTRK.WPN.MSLIF.SLM.SSM": {
-                "symbolID": "SUAPWMSS--*****",  
-                "tag": "MSLIF"   
-            },
-            "WAR.AIRTRK.WPN.MSLIF.SLM.SAM": {
-                "symbolID": "SUAPWMSA--*****",
-                "tag": "MSLIF"     
-            },
-            "WAR.AIRTRK.WPN.MSLIF.ALM": {
-                "symbolID": "SUAPWMA---*****",  
-                "tag": "WPN"   
-            },
-            "WAR.AIRTRK.WPN.MSLIF.ALM.ASM": {
-                "symbolID": "SUAPWMAS--*****",
-                "tag": "MSLIF"     
-            },
-            "WAR.AIRTRK.WPN.MSLIF.ALM.AAM": {
-                "symbolID": "SUAPWMAA--*****",  
-                "tag": "MSLIF"   
-            },
-            "WAR.AIRTRK.WPN.MSLIF.SBSM": {
-                "symbolID": "SUAPWMU---*****",
-                "tag": "WPN"     
-            },
-            "WAR.AIRTRK.WPN.MSLIF.CM": {
-                "symbolID": "SUAPWMCM--*****",  
-                "tag": "WPN"   
-            },
-            "WAR.AIRTRK.WPN.DCY": {
-                "symbolID": "SUAPWD----*****",
-                "tag": "AIRTRK"     
-            },
-            "WAR.AIRTRK.CVL": {
-                "symbolID": "SUAPC-----*****",  
-                "tag": "WAR"   
-            },
-            "WAR.AIRTRK.CVL.FIXD": {
-                "symbolID": "SUAPCF----*****",
-                "tag": "AIRTRK"     
-            },
-            "WAR.AIRTRK.CVL.ROT": {
-                "symbolID": "SUAPCH----*****",  
-                "tag": "AIRTRK"   
-            },
-            "WAR.AIRTRK.CVL.LTA": {
-                "symbolID": "SUAPCL----*****",
-                "tag": "AIRTRK"     
-            }
-        },
-
-        "ground": {
-            "WAR.GRDTRK": {
-                "symbolID": "SUGP------*****",  
-                "tag": "WAR"   
-            },
-            "WAR.GRDTRK.UNT": {
-                "symbolID": "SUGPU-----*****",
-                "tag": "WAR"     
-            },
-            "WAR.GRDTRK.UNT.CBT": {
-                "symbolID": "SUGPUC----*****",  
-                "tag": "GRDTRK"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF": {
-                "symbolID": "SUGPUCD---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.SHTR": {
-                "symbolID": "SUGPUCDS--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.SHTR.CPL": {
-                "symbolID": "SUGPUCDSC-*****",
-                "tag": "ADF"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.SHTR.STG": {
-                "symbolID": "SUGPUCDSS-*****",  
-                "tag": "ADF"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.SHTR.VUL": {
-                "symbolID": "SUGPUCDSV-*****",
-                "tag": "ADF"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.MSL": {
-                "symbolID": "SUGPUCDM--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.MSL.LIT": {
-                "symbolID": "SUGPUCDML-*****",
-                "tag": "ADF"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.MSL.LIT.MOT": {
-                "symbolID": "SUGPUCDMLA*****",  
-                "tag": "MSL"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.MSL.MDM": {
-                "symbolID": "SUGPUCDMM-*****",
-                "tag": "ADF"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.MSL.HVY": {
-                "symbolID": "SUGPUCDMH-*****",  
-                "tag": "ADF"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.MSL.HMAD": {
-                "symbolID": "SUGPUCDH--*****",
-                "tag": "ADF"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.MSL.HMAD.HWK": {
-                "symbolID": "SUGPUCDHH-*****",  
-                "tag": "MSL"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.MSL.HMAD.PATT": {
-                "symbolID": "SUGPUCDHP-*****",
-                "tag": "MSL"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.GUNUNT": {
-                "symbolID": "SUGPUCDG--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.CMPS": {
-                "symbolID": "SUGPUCDC--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.TGTGUT": {
-                "symbolID": "SUGPUCDT--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ADF.TMDU": {
-                "symbolID": "SUGPUCDO--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM": {
-                "symbolID": "SUGPUCA---*****",  
-                "tag": "UNT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.TRK": {
-                "symbolID": "SUGPUCAT--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.TRK.ABN": {
-                "symbolID": "SUGPUCATA-*****",  
-                "tag": "ARM"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.TRK.AMP": {
-                "symbolID": "SUGPUCATW-*****",
-                "tag": "ARM"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.TRK.AMP.RCY": {
-                "symbolID": "SUGPUCATWR*****",  
-                "tag": "TRK"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.TRK.LIT": {
-                "symbolID": "SUGPUCATL-*****",
-                "tag": "ARM"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.TRK.MDM": {
-                "symbolID": "SUGPUCATM-*****",  
-                "tag": "ARM"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.TRK.HVY": {
-                "symbolID": "SUGPUCATH-*****",
-                "tag": "ARM"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.TRK.RCY": {
-                "symbolID": "SUGPUCATR-*****",  
-                "tag": "ARM"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.WHD": {
-                "symbolID": "SUGPUCAW--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.WHD.AAST": {
-                "symbolID": "SUGPUCAWS-*****",  
-                "tag": "ARM"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.WHD.ABN": {
-                "symbolID": "SUGPUCAWA-*****",
-                "tag": "ARM"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.WHD.AMP": {
-                "symbolID": "SUGPUCAWW-*****",  
-                "tag": "ARM"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.WHD.AMP.RCY": {
-                "symbolID": "SUGPUCAWWR*****",
-                "tag": "WHD"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.WHD.LIT": {
-                "symbolID": "SUGPUCAWL-*****",  
-                "tag": "ARM"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.WHD.MDM": {
-                "symbolID": "SUGPUCAWM-*****",
-                "tag": "ARM"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.WHD.HVY": {
-                "symbolID": "SUGPUCAWH-*****",  
-                "tag": "ARM"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ARM.WHD.RCY": {
-                "symbolID": "SUGPUCAWR-*****",
-                "tag": "ARM"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AARM": {
-                "symbolID": "SUGPUCAA--*****",  
-                "tag": "UNT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AARM.DMD": {
-                "symbolID": "SUGPUCAAD-*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AARM.LIT": {
-                "symbolID": "SUGPUCAAL-*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AARM.ABN": {
-                "symbolID": "SUGPUCAAM-*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AARM.AAST": {
-                "symbolID": "SUGPUCAAS-*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AARM.MNT": {
-                "symbolID": "SUGPUCAAU-*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AARM.ARC": {
-                "symbolID": "SUGPUCAAC-*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AARM.ARMD": {
-                "symbolID": "SUGPUCAAA-*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AARM.ARMD.TKD": {
-                "symbolID": "SUGPUCAAAT*****",  
-                "tag": "AARM"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AARM.ARMD.WHD": {
-                "symbolID": "SUGPUCAAAW*****",
-                "tag": "AARM"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AARM.ARMD.AAST": {
-                "symbolID": "SUGPUCAAAS*****",  
-                "tag": "AARM"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AARM.MOT": {
-                "symbolID": "SUGPUCAAO-*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AARM.MOT.AAST": {
-                "symbolID": "SUGPUCAAOS*****",  
-                "tag": "AARM"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN": {
-                "symbolID": "SUGPUCV---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.FIXD": {
-                "symbolID": "SUGPUCVF--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.FIXD.UTY": {
-                "symbolID": "SUGPUCVFU-*****",  
-                "tag": "AVN"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.FIXD.ATK": {
-                "symbolID": "SUGPUCVFA-*****",
-                "tag": "AVN"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.FIXD.RECON": {
-                "symbolID": "SUGPUCVFR-*****",  
-                "tag": "AVN"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.ROT": {
-                "symbolID": "SUGPUCVR--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.ROT.ATK": {
-                "symbolID": "SUGPUCVRA-*****",  
-                "tag": "AVN"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.ROT.SCUT": {
-                "symbolID": "SUGPUCVRS-*****",
-                "tag": "AVN"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.ROT.ASBW": {
-                "symbolID": "SUGPUCVRW-*****",  
-                "tag": "AVN"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.ROT.UTY": {
-                "symbolID": "SUGPUCVRU-*****",
-                "tag": "AVN"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.ROT.UTY.LIT": {
-                "symbolID": "SUGPUCVRUL*****",  
-                "tag": "ROT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.ROT.UTY.MDM": {
-                "symbolID": "SUGPUCVRUM*****",
-                "tag": "ROT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.ROT.UTY.HVY": {
-                "symbolID": "SUGPUCVRUH*****",  
-                "tag": "ROT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.ROT.C2": {
-                "symbolID": "SUGPUCVRUC*****",
-                "tag": "AVN"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.ROT.MEDV": {
-                "symbolID": "SUGPUCVRUE*****",  
-                "tag": "AVN"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.ROT.MNECM": {
-                "symbolID": "SUGPUCVRM-*****",
-                "tag": "AVN"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.SAR": {
-                "symbolID": "SUGPUCVS--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.CMPS": {
-                "symbolID": "SUGPUCVC--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.VSTOL": {
-                "symbolID": "SUGPUCVV--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.UAV": {
-                "symbolID": "SUGPUCVU--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.UAV.FIXD": {
-                "symbolID": "SUGPUCVUF-*****",  
-                "tag": "AVN"   
-            },
-            "WAR.GRDTRK.UNT.CBT.AVN.UAV.ROT": {
-                "symbolID": "SUGPUCVUR-*****",
-                "tag": "AVN"     
-            },
-            "WAR.GRDTRK.UNT.CBT.INF": {
-                "symbolID": "SUGPUCI---*****",  
-                "tag": "UNT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.INF.LIT": {
-                "symbolID": "SUGPUCIL--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.INF.MOT": {
-                "symbolID": "SUGPUCIM--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.INF.MNT": {
-                "symbolID": "SUGPUCIO--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.INF.ABN": {
-                "symbolID": "SUGPUCIA--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.INF.AAST": {
-                "symbolID": "SUGPUCIS--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.INF.MECH": {
-                "symbolID": "SUGPUCIZ--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.INF.NAV": {
-                "symbolID": "SUGPUCIN--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.INF.INFFV": {
-                "symbolID": "SUGPUCII--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.INF.ARC": {
-                "symbolID": "SUGPUCIC--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG": {
-                "symbolID": "SUGPUCE---*****",  
-                "tag": "UNT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG.CBT": {
-                "symbolID": "SUGPUCEC--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG.CBT.AAST": {
-                "symbolID": "SUGPUCECS-*****",  
-                "tag": "ENG"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG.CBT.ABN": {
-                "symbolID": "SUGPUCECA-*****",
-                "tag": "ENG"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG.CBT.ARC": {
-                "symbolID": "SUGPUCECC-*****",
-                "tag": "ENG"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG.CBT.LIT": {
-                "symbolID": "SUGPUCECL-*****",  
-                "tag": "ENG"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG.CBT.MDM": {
-                "symbolID": "SUGPUCECM-*****",
-                "tag": "ENG"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG.CBT.HVY": {
-                "symbolID": "SUGPUCECH-*****",  
-                "tag": "ENG"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG.CBT.MECH": {
-                "symbolID": "SUGPUCECT-*****",
-                "tag": "ENG"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG.CBT.MOT": {
-                "symbolID": "SUGPUCECW-*****",  
-                "tag": "ENG"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG.CBT.MNT": {
-                "symbolID": "SUGPUCECO-*****",
-                "tag": "ENG"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG.CBT.RECON": {
-                "symbolID": "SUGPUCECR-*****",  
-                "tag": "ENG"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG.CSN": {
-                "symbolID": "SUGPUCEN--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ENG.CSN.NAV": {
-                "symbolID": "SUGPUCENN-*****",  
-                "tag": "ENG"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART": {
-                "symbolID": "SUGPUCF---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.HOW": {
-                "symbolID": "SUGPUCFH--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.HOW.SPD": {
-                "symbolID": "SUGPUCFHE-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.HOW.AAST": {
-                "symbolID": "SUGPUCFHS-*****",  
-                "tag": "FLDART"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.HOW.ABN": {
-                "symbolID": "SUGPUCFHA-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.HOW.ARC": {
-                "symbolID": "SUGPUCFHC-*****",  
-                "tag": "FLDART"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.HOW.MNT": {
-                "symbolID": "SUGPUCFHO-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.HOW.LIT": {
-                "symbolID": "SUGPUCFHL-*****",  
-                "tag": "FLDART"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.HOW.MDM": {
-                "symbolID": "SUGPUCFHM-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.HOW.HVY": {
-                "symbolID": "SUGPUCFHH-*****",  
-                "tag": "FLDART"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.HOW.AMP": {
-                "symbolID": "SUGPUCFHX-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ROC": {
-                "symbolID": "SUGPUCFR--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ROC.SRL": {
-                "symbolID": "SUGPUCFRS-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ROC.SRL.SRSPD": {
-                "symbolID": "SUGPUCFRSS*****",  
-                "tag": "ROC"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ROC.SRL.SRTRK": {
-                "symbolID": "SUGPUCFRSR*****",
-                "tag": "ROC"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ROC.SRL.SRTOW": {
-                "symbolID": "SUGPUCFRST*****",  
-                "tag": "ROC"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ROC.MRL": {
-                "symbolID": "SUGPUCFRM-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ROC.MRL.MRSPD": {
-                "symbolID": "SUGPUCFRMS*****",  
-                "tag": "ROC"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ROC.MRL.MRTRK": {
-                "symbolID": "SUGPUCFRMR*****",
-                "tag": "ROC"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ROC.MRL.MRTOW": {
-                "symbolID": "SUGPUCFRMT*****",  
-                "tag": "ROC"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.TGTAQ": {
-                "symbolID": "SUGPUCFT--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.TGTAQ.RAD": {
-                "symbolID": "SUGPUCFTR-*****",  
-                "tag": "FLDART"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.TGTAQ.SND": {
-                "symbolID": "SUGPUCFTS-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.TGTAQ.FLH": {
-                "symbolID": "SUGPUCFTF-*****",  
-                "tag": "FLDART"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.TGTAQ.CLT": {
-                "symbolID": "SUGPUCFTC-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.TGTAQ.CLT.DMD": {
-                "symbolID": "SUGPUCFTCD*****",
-                "tag": "TGTAQ"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.TGTAQ.CLT.TKD": {
-                "symbolID": "SUGPUCFTCM*****",  
-                "tag": "TGTAQ"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.TGTAQ.ANG": {
-                "symbolID": "SUGPUCFTA-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.MORT": {
-                "symbolID": "SUGPUCFM--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.MORT.SPDTRK": {
-                "symbolID": "SUGPUCFMS-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.MORT.SPDWHD": {
-                "symbolID": "SUGPUCFMW-*****",  
-                "tag": "FLDART"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.MORT.TOW": {
-                "symbolID": "SUGPUCFMT-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.MORT.TOW.ABN": {
-                "symbolID": "SUGPUCFMTA*****",  
-                "tag": "MORT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.MORT.TOW.AAST": {
-                "symbolID": "SUGPUCFMTS*****",
-                "tag": "MORT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.MORT.TOW.ARC": {
-                "symbolID": "",  
-                "tag": "MORT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.MORT.TOW.MNT": {
-                "symbolID": "SUGPUCFMTO*****",
-                "tag": "MORT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.MORT.AMP": {
-                "symbolID": "SUGPUCFML-*****",  
-                "tag": "FLDART"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ARTSVY": {
-                "symbolID": "SUGPUCFS--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ARTSVY.AAST": {
-                "symbolID": "SUGPUCFSS-*****",  
-                "tag": "FLDART"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ARTSVY.ABN": {
-                "symbolID": "SUGPUCFSA-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ARTSVY.LIT": {
-                "symbolID": "SUGPUCFSL-*****",  
-                "tag": "FLDART"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.ARTSVY.MNT": {
-                "symbolID": "SUGPUCFSO-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.METO": {
-                "symbolID": "SUGPUCFO--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.METO.AAST": {
-                "symbolID": "SUGPUCFOS-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.METO.ABN": {
-                "symbolID": "SUGPUCFOA-*****",  
-                "tag": "FLDART"   
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.METO.LIT": {
-                "symbolID": "SUGPUCFOL-*****",
-                "tag": "FLDART"     
-            },
-            "WAR.GRDTRK.UNT.CBT.FLDART.METO.MNT": {
-                "symbolID": "SUGPUCFOO-*****",  
-                "tag": "FLDART"   
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON": {
-                "symbolID": "SUGPUCR---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.HRE": {
-                "symbolID": "SUGPUCRH--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.CVY": {
-                "symbolID": "SUGPUCRV--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.CVY.ARMD": {
-                "symbolID": "SUGPUCRVA-*****",  
-                "tag": "RECON"   
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.CVY.MOT": {
-                "symbolID": "SUGPUCRVM-*****",
-                "tag": "RECON"     
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.CVY.GRD": {
-                "symbolID": "SUGPUCRVG-*****",  
-                "tag": "RECON"   
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.CVY.AIR": {
-                "symbolID": "SUGPUCRVO-*****",
-                "tag": "RECON"     
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.ARC": {
-                "symbolID": "SUGPUCRC--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.AAST": {
-                "symbolID": "SUGPUCRS--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.ABN": {
-                "symbolID": "SUGPUCRA--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.MNT": {
-                "symbolID": "SUGPUCRO--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.LIT": {
-                "symbolID": "SUGPUCRL--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.MAR": {
-                "symbolID": "SUGPUCRR--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.MAR.DIV": {
-                "symbolID": "SUGPUCRRD-*****",
-                "tag": "RECON"     
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.MAR.FOR": {
-                "symbolID": "SUGPUCRRF-*****",  
-                "tag": "RECON"   
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.MAR.LAR": {
-                "symbolID": "SUGPUCRRL-*****",
-                "tag": "RECON"     
-            },
-            "WAR.GRDTRK.UNT.CBT.RECON.LRS": {
-                "symbolID": "SUGPUCRX--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.MSL": {
-                "symbolID": "SUGPUCM---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.MSL.TAC": {
-                "symbolID": "SUGPUCMT--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.MSL.STGC": {
-                "symbolID": "SUGPUCMS--*****",  
-                "tag": "CBT"   
-            },
-            // "WAR.GRDTRK.UNT.CBT.MSL": {
-            //     "symbolID": "SUGPUCM---*****",
-            //     "tag": "UNT"     
-            // },
-            // "WAR.GRDTRK.UNT.CBT.MSL.TAC": {
-            //     "symbolID": "SUGPUCMT--*****",  
-            //     "tag": "CBT"   
-            // },
-            // "WAR.GRDTRK.UNT.CBT.MSL.STGC": {
-            //     "symbolID": "SUGPUCMS--*****",
-            //     "tag": "CBT"     
-            // },
-            "WAR.GRDTRK.UNT.CBT.ISF": {
-                "symbolID": "SUGPUCS---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ISF.RIV": {
-                "symbolID": "SUGPUCSW--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ISF.GRD": {
-                "symbolID": "SUGPUCSG--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ISF.GRD.DMD": {
-                "symbolID": "SUGPUCSGD-*****",  
-                "tag": "ISF"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ISF.GRD.MOT": {
-                "symbolID": "SUGPUCSGM-*****",
-                "tag": "ISF"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ISF.GRD.MECH": {
-                "symbolID": "SUGPUCSGA-*****",
-                "tag": "ISF"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ISF.WHMECH": {
-                "symbolID": "SUGPUCSM--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CBT.ISF.RALRD": {
-                "symbolID": "SUGPUCSR--*****",
-                "tag": "CBT"     
-            },
-            "WAR.GRDTRK.UNT.CBT.ISF.AVN": {
-                "symbolID": "SUGPUCSA--*****",  
-                "tag": "CBT"   
-            },
-            "WAR.GRDTRK.UNT.CS": {
-                "symbolID": "SUGPUU----*****",
-                "tag": "GRDTRK"     
-            },
-            "WAR.GRDTRK.UNT.CS.NBC": {
-                "symbolID": "SUGPUUA---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.CML": {
-                "symbolID": "SUGPUUAC--*****",  
-                "tag": "CS"   
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.CML.SMKDEC": {
-                "symbolID": "SUGPUUACC-*****",
-                "tag": "NBC"     
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.CML.SMKDEC.MECH": {
-                "symbolID": "SUGPUUACCK*****",  
-                "tag": "CML"   
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.CML.SMKDEC.MOT": {
-                "symbolID": "SUGPUUACCM*****",
-                "tag": "CML"     
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.CML.SMK": {
-                "symbolID": "SUGPUUACS-*****",
-                "tag": "NBC"     
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.CML.SMK.MOT": {
-                "symbolID": "SUGPUUACSM*****",  
-                "tag": "CML"   
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.CML.SMK.ARM": {
-                "symbolID": "SUGPUUACSA*****",
-                "tag": "CML"     
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.CML.RECON": {
-                "symbolID": "SUGPUUACR-*****",  
-                "tag": "NBC"   
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.CML.RECON.WARMVH": {
-                "symbolID": "SUGPUUACRW*****",
-                "tag": "CML"     
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.CML.RECON.WAVS": {
-                "symbolID": "SUGPUUACRS*****",
-                "tag": "CML"     
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.NUC": {
-                "symbolID": "SUGPUUAN--*****",  
-                "tag": "CS"   
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.BIO": {
-                "symbolID": "SUGPUUAB--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.BIO.RECEQP": {
-                "symbolID": "SUGPUUABR-*****",  
-                "tag": "NBC"   
-            },
-            "WAR.GRDTRK.UNT.CS.NBC.DECON": {
-                "symbolID": "SUGPUUAD--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT": {
-                "symbolID": "SUGPUUM---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.AEREXP": {
-                "symbolID": "SUGPUUMA--*****",  
-                "tag": "CS"   
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SIGINT": {
-                "symbolID": "SUGPUUMS--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SIGINT.ECW": {
-                "symbolID": "SUGPUUMSE-*****",  
-                "tag": "MILINT"   
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SIGINT.ECW.ARMWVH": {
-                "symbolID": "SUGPUUMSEA*****",
-                "tag": "SIGINT"     
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SIGINT.ECW.DFN": {
-                "symbolID": "SUGPUUMSED*****",
-                "tag": "SIGINT"     
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SIGINT.ECW.INC": {
-                "symbolID": "SUGPUUMSEI*****",  
-                "tag": "SIGINT"   
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SIGINT.ECW.JMG": {
-                "symbolID": "SUGPUUMSEJ*****",
-                "tag": "SIGINT"     
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SIGINT.ECW.THT": {
-                "symbolID": "SUGPUUMSET*****",  
-                "tag": "SIGINT"   
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SIGINT.ECW.CRP": {
-                "symbolID": "SUGPUUMSEC*****",
-                "tag": "SIGINT"     
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.CINT": {
-                "symbolID": "SUGPUUMC--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SVL": {
-                "symbolID": "SUGPUUMR--*****",  
-                "tag": "CS"   
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SVL.GRDSR": {
-                "symbolID": "SUGPUUMRG-*****",
-                "tag": "MILINT"     
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SVL.SNS": {
-                "symbolID": "SUGPUUMRS-*****",  
-                "tag": "MILINT"   
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SVL.SNS.SCM": {
-                "symbolID": "SUGPUUMRSS*****",
-                "tag": "SVL"     
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SVL.GRDSM": {
-                "symbolID": "SUGPUUMRX-*****",
-                "tag": "MILINT"     
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.SVL.METO": {
-                "symbolID": "SUGPUUMMO-*****",  
-                "tag": "MILINT"   
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.OPN": {
-                "symbolID": "SUGPUUMO--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.TACEXP": {
-                "symbolID": "SUGPUUMT--*****",  
-                "tag": "CS"   
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.INTGN": {
-                "symbolID": "SUGPUUMQ--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.MILINT.JINTCT": {
-                "symbolID": "SUGPUUMJ--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.LAWENU": {
-                "symbolID": "SUGPUUL---*****",  
-                "tag": "UNT"   
-            },
-            "WAR.GRDTRK.UNT.CS.LAWENU.SHRPAT": {
-                "symbolID": "SUGPUULS--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.LAWENU.MILP": {
-                "symbolID": "SUGPUULM--*****",  
-                "tag": "CS"   
-            },
-            "WAR.GRDTRK.UNT.CS.LAWENU.CLE": {
-                "symbolID": "SUGPUULC--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.LAWENU.SECPOL": {
-                "symbolID": "SUGPUULF--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.LAWENU.CID": {
-                "symbolID": "SUGPUULD--*****",  
-                "tag": "CS"   
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT": {
-                "symbolID": "SUGPUUS---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.ARA": {
-                "symbolID": "SUGPUUSA--*****",  
-                "tag": "CS"   
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.COMCP": {
-                "symbolID": "SUGPUUSC--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.COMCP.LCCP": {
-                "symbolID": "SUGPUUSCL-*****",
-                "tag": "SIGUNT"     
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.CMDOPN": {
-                "symbolID": "SUGPUUSO--*****",  
-                "tag": "CS"   
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.FWDCOM": {
-                "symbolID": "SUGPUUSF--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.MSE": {
-                "symbolID": "SUGPUUSM--*****",  
-                "tag": "CS"   
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.MSE.SEN": {
-                "symbolID": "SUGPUUSMS-*****",
-                "tag": "SIGUNT"     
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.MSE.LEN": {
-                "symbolID": "SUGPUUSML-*****",
-                "tag": "SIGUNT"     
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.MSE.NODCTR": {
-                "symbolID": "SUGPUUSMN-*****",  
-                "tag": "SIGUNT"   
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.RDOUNT": {
-                "symbolID": "SUGPUUSR--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.RDOUNT.TACSAT": {
-                "symbolID": "SUGPUUSRS-*****",  
-                "tag": "SIGUNT"   
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.RDOUNT.TTYCTR": {
-                "symbolID": "SUGPUUSRT-*****",
-                "tag": "SIGUNT"     
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.RDOUNT.RLY": {
-                "symbolID": "SUGPUUSRW-*****",
-                "tag": "SIGUNT"     
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.SIGSUP": {
-                "symbolID": "SUGPUUSS--*****",  
-                "tag": "CS"   
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.PHOSWT": {
-                "symbolID": "SUGPUUSW--*****",
-                "tag": "CS"     
-            },
-            "WAR.GRDTRK.UNT.CS.SIGUNT.ECRG": {
-                "symbolID": "SUGPUUSX--*****",  
-                "tag": "CS"   
-            },
-            "WAR.GRDTRK.UNT.CS.IWU": {
-                "symbolID": "SUGPUUI---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CS.LNDSUP": {
-                "symbolID": "SUGPUUP---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CS.EOD": {
-                "symbolID": "SUGPUUE---*****",  
-                "tag": "UNT"   
-            },
-            "WAR.GRDTRK.UNT.CSS": {
-                "symbolID": "SUGPUS----*****",
-                "tag": "GRDTRK"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN": {
-                "symbolID": "SUGPUSA---*****",  
-                "tag": "UNT"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.THT": {
-                "symbolID": "SUGPUSAT--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.CRP": {
-                "symbolID": "SUGPUSAC--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.JAG": {
-                "symbolID": "SUGPUSAJ--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.JAG.THT": {
-                "symbolID": "SUGPUSAJT-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.JAG.CRP": {
-                "symbolID": "SUGPUSAJC-*****",  
-                "tag": "ADMIN"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PST": {
-                "symbolID": "SUGPUSAO--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PST.THT": {
-                "symbolID": "SUGPUSAOT-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PST.CRP": {
-                "symbolID": "SUGPUSAOC-*****",  
-                "tag": "ADMIN"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.FIN": {
-                "symbolID": "SUGPUSAF--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.FIN.THT": {
-                "symbolID": "SUGPUSAFT-*****",  
-                "tag": "ADMIN"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.FIN.CRP": {
-                "symbolID": "SUGPUSAFC-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PERSVC": {
-                "symbolID": "SUGPUSAS--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PERSVC.THT": {
-                "symbolID": "SUGPUSAST-*****",  
-                "tag": "ADMIN"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PERSVC.CRP": {
-                "symbolID": "SUGPUSASC-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.MTRY": {
-                "symbolID": "SUGPUSAM--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.MTRY.THT": {
-                "symbolID": "SUGPUSAMT-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.MTRY.CRP": {
-                "symbolID": "SUGPUSAMC-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.RELG": {
-                "symbolID": "SUGPUSAR--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.RELG.THT": {
-                "symbolID": "SUGPUSART-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.RELG.CRP": {
-                "symbolID": "SUGPUSARC-*****",  
-                "tag": "ADMIN"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PUBAFF": {
-                "symbolID": "SUGPUSAP--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PUBAFF.THT": {
-                "symbolID": "SUGPUSAPT-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PUBAFF.CRP": {
-                "symbolID": "SUGPUSAPC-*****",  
-                "tag": "ADMIN"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PUBAFF.BRCT": {
-                "symbolID": "SUGPUSAPB-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PUBAFF.BRCT.THT": {
-                "symbolID": "SUGPUSAPBT*****",  
-                "tag": "PUBAFF"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PUBAFF.BRCT.CRP": {
-                "symbolID": "SUGPUSAPBC*****",
-                "tag": "PUBAFF"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PUBAFF.JIB": {
-                "symbolID": "SUGPUSAPM-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PUBAFF.JIB.THT": {
-                "symbolID": "SUGPUSAPMT*****",  
-                "tag": "PUBAFF"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.PUBAFF.JIB.CRP": {
-                "symbolID": "SUGPUSAPMC*****",
-                "tag": "PUBAFF"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.RHU": {
-                "symbolID": "SUGPUSAX--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.RHU.THT": {
-                "symbolID": "SUGPUSAXT-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.RHU.CRP": {
-                "symbolID": "SUGPUSAXC-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.LBR": {
-                "symbolID": "SUGPUSAL--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.LBR.THT": {
-                "symbolID": "SUGPUSALT-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.LBR.CRP": {
-                "symbolID": "SUGPUSALC-*****",  
-                "tag": "ADMIN"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.MWR": {
-                "symbolID": "SUGPUSAW--*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.MWR.THT": {
-                "symbolID": "SUGPUSAWT-*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.MWR.CRP": {
-                "symbolID": "SUGPUSAWC-*****",  
-                "tag": "ADMIN"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.SUPPLY": {
-                "symbolID": "SUGPUSAQ--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.SUPPLY.THT": {
-                "symbolID": "SUGPUSAQT-*****",  
-                "tag": "ADMIN"   
-            },
-            "WAR.GRDTRK.UNT.CSS.ADMIN.SUPPLY.CRP": {
-                "symbolID": "SUGPUSAQC-*****",
-                "tag": "ADMIN"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MED": {
-                "symbolID": "SUGPUSM---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.THT": {
-                "symbolID": "SUGPUSMT--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.CRP": {
-                "symbolID": "SUGPUSMC--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.MEDTF": {
-                "symbolID": "SUGPUSMM--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.MEDTF.THT": {
-                "symbolID": "SUGPUSMMT-*****",
-                "tag": "MED"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.MEDTF.CRP": {
-                "symbolID": "SUGPUSMMC-*****",
-                "tag": "MED"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.VNY": {
-                "symbolID": "SUGPUSMV--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.VNY.THT": {
-                "symbolID": "SUGPUSMVT-*****",
-                "tag": "MED"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.VNY.CRP": {
-                "symbolID": "SUGPUSMVC-*****",  
-                "tag": "MED"   
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.DEN": {
-                "symbolID": "SUGPUSMD--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.DEN.THT": {
-                "symbolID": "SUGPUSMDT-*****",
-                "tag": "MED"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.DEN.CRP": {
-                "symbolID": "SUGPUSMDC-*****",  
-                "tag": "MED"   
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.PSY": {
-                "symbolID": "SUGPUSMP--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.PSY.THT": {
-                "symbolID": "SUGPUSMPT-*****",  
-                "tag": "MED"   
-            },
-            "WAR.GRDTRK.UNT.CSS.MED.PSY.CRP": {
-                "symbolID": "SUGPUSMPC-*****",
-                "tag": "MED"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP": {
-                "symbolID": "SUGPUSS---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.THT": {
-                "symbolID": "SUGPUSST--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CRP": {
-                "symbolID": "SUGPUSSC--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS1": {
-                "symbolID": "SUGPUSS1--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS1.THT": {
-                "symbolID": "SUGPUSS1T-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS1.CRP": {
-                "symbolID": "SUGPUSS1C-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS2": {
-                "symbolID": "SUGPUSS2--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS2.THT": {
-                "symbolID": "SUGPUSS2T-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS2.CRP": {
-                "symbolID": "SUGPUSS2C-*****",  
-                "tag": "SLP"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS3": {
-                "symbolID": "SUGPUSS3--*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS3.THT": {
-                "symbolID": "SUGPUSS3T-*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS3.CRP": {
-                "symbolID": "SUGPUSS3C-*****",  
-                "tag": "SLP"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS3.AVN": {
-                "symbolID": "SUGPUSS3A-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS3.AVN.THT": {
-                "symbolID": "SUGPUSS3AT*****",  
-                "tag": "CLS3"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS3.AVN.CRP": {
-                "symbolID": "SUGPUSS3AC*****",
-                "tag": "CLS3"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS4": {
-                "symbolID": "SUGPUSS4--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS4.THT": {
-                "symbolID": "SUGPUSS4T-*****",  
-                "tag": "SLP"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS4.CRP": {
-                "symbolID": "SUGPUSS4C-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS5": {
-                "symbolID": "SUGPUSS5--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS5.THT": {
-                "symbolID": "SUGPUSS5T-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS5.CRP": {
-                "symbolID": "SUGPUSS5C-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS6": {
-                "symbolID": "SUGPUSS6--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS6.THT": {
-                "symbolID": "SUGPUSS6T-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS6.CRP": {
-                "symbolID": "SUGPUSS6C-*****",  
-                "tag": "SLP"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS7": {
-                "symbolID": "SUGPUSS7--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS7.THT": {
-                "symbolID": "SUGPUSS7T-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS7.CRP": {
-                "symbolID": "SUGPUSS7C-*****",  
-                "tag": "SLP"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS8": {
-                "symbolID": "SUGPUSS8--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS8.THT": {
-                "symbolID": "SUGPUSS8T-*****",  
-                "tag": "SLP"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS8.CRP": {
-                "symbolID": "SUGPUSS8C-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS9": {
-                "symbolID": "SUGPUSS9--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS9.THT": {
-                "symbolID": "SUGPUSS9T-*****",  
-                "tag": "SLP"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS9.CRP": {
-                "symbolID": "SUGPUSS9C-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS10": {
-                "symbolID": "SUGPUSSX--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS10.THT": {
-                "symbolID": "SUGPUSSXT-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.CLS10.CRP": {
-                "symbolID": "SUGPUSSXC-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.LDY": {
-                "symbolID": "SUGPUSSL--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.LDY.THT": {
-                "symbolID": "SUGPUSSLT-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.LDY.CRP": {
-                "symbolID": "SUGPUSSLC-*****",  
-                "tag": "SLP"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.H2O": {
-                "symbolID": "SUGPUSSW--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.H2O.THT": {
-                "symbolID": "SUGPUSSWT-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.H2O.CRP": {
-                "symbolID": "SUGPUSSWC-*****",  
-                "tag": "SLP"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.H2O.PUR": {
-                "symbolID": "SUGPUSSWP-*****",
-                "tag": "SLP"     
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.H2O.PUR.THT": {
-                "symbolID": "SUGPUSSWPT*****",  
-                "tag": "H2O"   
-            },
-            "WAR.GRDTRK.UNT.CSS.SLP.H2O.PUR.CRP": {
-                "symbolID": "SUGPUSSWPC*****",
-                "tag": "H2O"     
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT": {
-                "symbolID": "SUGPUST---*****",
-                "tag": "UNT"     
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.THT": {
-                "symbolID": "SUGPUSTT--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.CRP": {
-                "symbolID": "SUGPUSTC--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.MCC": {
-                "symbolID": "SUGPUSTM--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.MCC.THT": {
-                "symbolID": "SUGPUSTMT-*****",
-                "tag": "TPT"     
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.MCC.CRP": {
-                "symbolID": "SUGPUSTMC-*****",
-                "tag": "TPT"     
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.RHD": {
-                "symbolID": "SUGPUSTR--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.RHD.THT": {
-                "symbolID": "SUGPUSTRT-*****",
-                "tag": "TPT"     
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.RHD.CRP": {
-                "symbolID": "SUGPUSTRC-*****",  
-                "tag": "TPT"   
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.SPOD": {
-                "symbolID": "SUGPUSTS--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.SPOD.THT": {
-                "symbolID": "SUGPUSTST-*****",
-                "tag": "TPT"     
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.SPOD.CRP": {
-                "symbolID": "SUGPUSTSC-*****",  
-                "tag": "TPT"   
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.APOD": {
-                "symbolID": "SUGPUSTA--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.APOD.THT": {
-                "symbolID": "SUGPUSTAT-*****",  
-                "tag": "TPT"   
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.APOD.CRP": {
-                "symbolID": "SUGPUSTAC-*****",
-                "tag": "TPT"   
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.MSL": {
-                "symbolID": "SUGPUSTI--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.MSL.THT": {
-                "symbolID": "SUGPUSTIT-*****",  
-                "tag": "TPT"   
-            },
-            "WAR.GRDTRK.UNT.CSS.TPT.MSL.CRP": {
-                "symbolID": "SUGPUSTIC-*****",
-                "tag": "TPT"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT": {
-                "symbolID": "SUGPUSX---*****",  
-                "tag": "UNT"   
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.THT": {
-                "symbolID": "SUGPUSXT--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.CRP": {
-                "symbolID": "SUGPUSXC--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.HVY": {
-                "symbolID": "SUGPUSXH--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.HVY.THT": {
-                "symbolID": "SUGPUSXHT-*****",
-                "tag": "MAINT"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.HVY.CRP": {
-                "symbolID": "SUGPUSXHC-*****",  
-                "tag": "MAINT"   
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.RCY": {
-                "symbolID": "SUGPUSXR--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.RCY.THT": {
-                "symbolID": "SUGPUSXRT-*****",
-                "tag": "MAINT"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.RCY.CRP": {
-                "symbolID": "SUGPUSXRC-*****",  
-                "tag": "MAINT"   
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.ORD": {
-                "symbolID": "SUGPUSXO--*****",
-                "tag": "CSS"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.ORD.THT": {
-                "symbolID": "SUGPUSXOT-*****",  
-                "tag": "MAINT"   
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.ORD.CRP": {
-                "symbolID": "SUGPUSXOC-*****",
-                "tag": "MAINT"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.ORD.MSL": {
-                "symbolID": "SUGPUSXOM-*****",
-                "tag": "MAINT"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.ORD.MSL.THT": {
-                "symbolID": "SUGPUSXOMT*****",  
-                "tag": "ORD"   
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.ORD.MSL.CRP": {
-                "symbolID": "SUGPUSXOMC*****",
-                "tag": "ORD"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.EOP": {
-                "symbolID": "SUGPUSXE--*****",  
-                "tag": "CSS"   
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.EOP.THT": {
-                "symbolID": "SUGPUSXET-*****",
-                "tag": "MAINT"     
-            },
-            "WAR.GRDTRK.UNT.CSS.MAINT.EOP.CRP": {
-                "symbolID": "SUGPUSXEC-*****",
-                "tag": "MAINT"     
-            },
-            "WAR.GRDTRK.UNT.C2HQ": {
-                "symbolID": "SUGPUH----*****",  
-                "tag": "GRDTRK"   
-            },
-            "WAR.GRDTRK.EQT": {
-                "symbolID": "SUGPE-----*****",
-                "tag": "WAR"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL": {
-                "symbolID": "SUGPEWM---*****",  
-                "tag": "EQT"   
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.ADFAD": {
-                "symbolID": "SUGPEWMA--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.ADFAD.SHTR": {
-                "symbolID": "SUGPEWMAS-*****",
-                "tag": "MSLL"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.ADFAD.SHTR.TLAR": {
-                "symbolID": "SUGPEWMASR*****",  
-                "tag": "ADFAD"   
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.ADFAD.SHTR.TELAR": {
-                "symbolID": "SUGPEWMASE*****",
-                "tag": "ADFAD"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.ADFAD.INTMR": {
-                "symbolID": "SUGPEWMAI-*****",  
-                "tag": "MSLL"   
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.ADFAD.INTMR.TLAR": {
-                "symbolID": "SUGPEWMAIR*****",
-                "tag": "ADFAD"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.ADFAD.INTMR.TELAR": {
-                "symbolID": "SUGPEWMAIE*****",
-                "tag": "ADFAD"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.ADFAD.LNGR": {
-                "symbolID": "SUGPEWMAL-*****",  
-                "tag": "MSLL"   
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.ADFAD.LNGR.TLAR": {
-                "symbolID": "SUGPEWMALR*****",
-                "tag": "ADFAD"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.ADFAD.LNGR.TELAR": {
-                "symbolID": "SUGPEWMALE*****",  
-                "tag": "ADFAD"   
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.ADFAD.THT": {
-                "symbolID": "SUGPEWMAT-*****",
-                "tag": "MSLL"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.ADFAD.THT.TLAR": {
-                "symbolID": "",
-                "tag": "ADFAD"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.ADFAD.THT.TELAR": {
-                "symbolID": "SUGPEWMATE*****",  
-                "tag": "ADFAD"   
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.SUF": {
-                "symbolID": "SUGPEWMS--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.SUF.SHTR": {
-                "symbolID": "SUGPEWMSS-*****",
-                "tag": "MSLL"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.SUF.INTMR": {
-                "symbolID": "SUGPEWMSI-*****",  
-                "tag": "MSLL"   
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.SUF.LNGR": {
-                "symbolID": "SUGPEWMSL-*****",
-                "tag": "MSLL"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.AT": {
-                "symbolID": "SUGPEWMT--*****",  
-                "tag": "WPN"   
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.AT.LIT": {
-                "symbolID": "SUGPEWMTL-*****",
-                "tag": "MSLL"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.AT.MDM": {
-                "symbolID": "SUGPEWMTM-*****",
-                "tag": "MSLL"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MSLL.AT.HVY": {
-                "symbolID": "SUGPEWMTH-*****",  
-                "tag": "MSLL"   
-            },
-            "WAR.GRDTRK.EQT.WPN.SRL": {
-                "symbolID": "SUGPEWS---*****",
-                "tag": "EQT"     
-            },
-            "WAR.GRDTRK.EQT.WPN.SRL.LIT": {
-                "symbolID": "SUGPEWSL--*****",  
-                "tag": "WPN"   
-            },
-            "WAR.GRDTRK.EQT.WPN.SRL.MDM": {
-                "symbolID": "SUGPEWSM--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.SRL.HVY": {
-                "symbolID": "SUGPEWSH--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MRL": {
-                "symbolID": "SUGPEWX---*****",  
-                "tag": "EQT"   
-            },
-            "WAR.GRDTRK.EQT.WPN.MRL.LIT": {
-                "symbolID": "SUGPEWXL--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MRL.MDM": {
-                "symbolID": "SUGPEWXM--*****",  
-                "tag": "WPN"   
-            },
-            "WAR.GRDTRK.EQT.WPN.MRL.HVY": {
-                "symbolID": "SUGPEWXH--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.ATRL": {
-                "symbolID": "SUGPEWT---*****",
-                "tag": "EQT"     
-            },
-            "WAR.GRDTRK.EQT.WPN.ATRL.LIT": {
-                "symbolID": "SUGPEWTL--*****",  
-                "tag": "WPN"   
-            },
-            "WAR.GRDTRK.EQT.WPN.ATRL.MDM": {
-                "symbolID": "SUGPEWTM--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.ATRL.HVY": {
-                "symbolID": "SUGPEWTH--*****",  
-                "tag": "WPN"   
-            },
-            "WAR.GRDTRK.EQT.WPN.RIFWPN": {
-                "symbolID": "SUGPEWR---*****",
-                "tag": "EQT"     
-            },
-            "WAR.GRDTRK.EQT.WPN.RIFWPN.RIF": {
-                "symbolID": "SUGPEWRR--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.RIFWPN.LMG": {
-                "symbolID": "SUGPEWRL--*****",  
-                "tag": "WPN"   
-            },
-            "WAR.GRDTRK.EQT.WPN.RIFWPN.HMG": {
-                "symbolID": "SUGPEWRH--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.GREL": {
-                "symbolID": "SUGPEWZ---*****",  
-                "tag": "EQT"   
-            },
-            "WAR.GRDTRK.EQT.WPN.GREL.LIT": {
-                "symbolID": "SUGPEWZL--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.GREL.MDM": {
-                "symbolID": "SUGPEWZM--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.GREL.HVY": {
-                "symbolID": "SUGPEWZH--*****",  
-                "tag": "WPN"   
-            },
-            "WAR.GRDTRK.EQT.WPN.MORT": {
-                "symbolID": "SUGPEWO---*****",
-                "tag": "EQT"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MORT.LIT": {
-                "symbolID": "SUGPEWOL--*****",  
-                "tag": "WPN"   
-            },
-            "WAR.GRDTRK.EQT.WPN.MORT.MDM": {
-                "symbolID": "SUGPEWOM--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.MORT.HVY": {
-                "symbolID": "SUGPEWOH--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.HOW": {
-                "symbolID": "SUGPEWH---*****",  
-                "tag": "EQT"   
-            },
-            "WAR.GRDTRK.EQT.WPN.HOW.LIT": {
-                "symbolID": "SUGPEWHL--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.HOW.LIT.SPD": {
-                "symbolID": "SUGPEWHLS-*****",  
-                "tag": "HOW"   
-            },
-            "WAR.GRDTRK.EQT.WPN.HOW.MDM": {
-                "symbolID": "SUGPEWHM--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.HOW.MDM.SPD": {
-                "symbolID": "SUGPEWHMS-*****",
-                "tag": "HOW"     
-            },
-            "WAR.GRDTRK.EQT.WPN.HOW.HVY": {
-                "symbolID": "SUGPEWHH--*****",  
-                "tag": "WPN"   
-            },
-            // "WAR.GRDTRK.EQT.WPN.HOW.HVY": {
-            //     "symbolID": "SUGPEWHHS-*****",
-            //     "tag": "HOW"     
-            // },
-            "WAR.GRDTRK.EQT.WPN.ATG": {
-                "symbolID": "SUGPEWG---*****",  
-                "tag": "EQT"   
-            },
-            "WAR.GRDTRK.EQT.WPN.ATG.LIT": {
-                "symbolID": "SUGPEWGL--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.ATG.MDM": {
-                "symbolID": "SUGPEWGM--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.ATG.HVY": {
-                "symbolID": "SUGPEWGH--*****",  
-                "tag": "WPN"   
-            },
-            "WAR.GRDTRK.EQT.WPN.ATG.RECL": {
-                "symbolID": "SUGPEWGR--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.DFG": {
-                "symbolID": "SUGPEWD---*****",  
-                "tag": "EQT"   
-            },
-            "WAR.GRDTRK.EQT.WPN.DFG.LIT": {
-                "symbolID": "SUGPEWDL--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.DFG.LIT.SPD": {
-                "symbolID": "SUGPEWDLS-*****",
-                "tag": "DFG"     
-            },
-            "WAR.GRDTRK.EQT.WPN.DFG.MDM": {
-                "symbolID": "SUGPEWDM--*****",  
-                "tag": "WPN"   
-            },
-            "WAR.GRDTRK.EQT.WPN.DFG.MDM.SPD": {
-                "symbolID": "SUGPEWDMS-*****",
-                "tag": "DFG"     
-            },
-            "WAR.GRDTRK.EQT.WPN.DFG.HVY": {
-                "symbolID": "SUGPEWDH--*****",  
-                "tag": "WPN"   
-            },
-            "WAR.GRDTRK.EQT.WPN.DFG.HVY.SPD": {
-                "symbolID": "SUGPEWDHS-*****",
-                "tag": "DFG"     
-            },
-            "WAR.GRDTRK.EQT.WPN.ADFG": {
-                "symbolID": "SUGPEWA---*****",
-                "tag": "EQT"     
-            },
-            "WAR.GRDTRK.EQT.WPN.ADFG.LIT": {
-                "symbolID": "SUGPEWAL--*****",  
-                "tag": "WPN"   
-            },
-            "WAR.GRDTRK.EQT.WPN.ADFG.MDM": {
-                "symbolID": "SUGPEWAM--*****",
-                "tag": "WPN"     
-            },
-            "WAR.GRDTRK.EQT.WPN.ADFG.HVY": {
-                "symbolID": "SUGPEWAH--*****",  
-                "tag": "EQT"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH": {
-                "symbolID": "SUGPEV----*****",
-                "tag": "GRDTRK"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD": {
-                "symbolID": "SUGPEVA---*****",
-                "tag": "EQT"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD.TANK": {
-                "symbolID": "SUGPEVAT--*****",  
-                "tag": "GRDVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD.TANK.LIT": {
-                "symbolID": "SUGPEVATL-*****",
-                "tag": "ARMD"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD.TANK.LIT.RCY": {
-                "symbolID": "SUGPEVATLR*****",  
-                "tag": "TANK"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD.TANK.MDM": {
-                "symbolID": "SUGPEVATM-*****",
-                "tag": "ARMD"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD.TANK.MDM.RCY": {
-                "symbolID": "SUGPEVATMR*****",
-                "tag": "TANK"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD.TANK.HVY": {
-                "symbolID": "SUGPEVATH-*****",  
-                "tag": "ARMD"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD.TANK.HVY.RCY": {
-                "symbolID": "SUGPEVATHR*****",
-                "tag": "TANK"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD.ARMPC": {
-                "symbolID": "SUGPEVAA--*****",  
-                "tag": "GRDVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD.ARMPC.RCY": {
-                "symbolID": "SUGPEVAAR-*****",
-                "tag": "ARMD"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD.ARMINF": {
-                "symbolID": "SUGPEVAI--*****",
-                "tag": "GRDVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD.C2V": {
-                "symbolID": "SUGPEVAC--*****",  
-                "tag": "GRDVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD.CSSVEH": {
-                "symbolID": "SUGPEVAS--*****",
-                "tag": "GRDVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ARMD.LARMVH": {
-                "symbolID": "SUGPEVAL--*****",  
-                "tag": "GRDVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH": {
-                "symbolID": "SUGPEVU---*****",
-                "tag": "EQT"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH.BUS": {
-                "symbolID": "SUGPEVUB--*****",
-                "tag": "GRDVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH.SEMI": {
-                "symbolID": "SUGPEVUS--*****",  
-                "tag": "GRDVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH.SEMI.LIT": {
-                "symbolID": "SUGPEVUSL-*****",
-                "tag": "UTYVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH.SEMI.MDM": {
-                "symbolID": "SUGPEVUS--*****",  
-                "tag": "UTYVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH.SEMI.HVY": {
-                "symbolID": "SUGPEVUS--*****",
-                "tag": "UTYVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH.LCCTRK": {
-                "symbolID": "SUGPEVUL--*****",
-                "tag": "GRDVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH.CCTRK": {
-                "symbolID": "SUGPEVUX--*****",  
-                "tag": "GRDVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH.H2OCRT": {
-                "symbolID": "SUGPEVUR--*****",
-                "tag": "GRDVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH.TOWTRK": {
-                "symbolID": "SUGPEVUT--*****",  
-                "tag": "GRDVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH.TOWTRK.LIT": {
-                "symbolID": "SUGPEVUTL-*****",
-                "tag": "UTYVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH.TOWTRK.HVY": {
-                "symbolID": "SUGPEVUTH-*****",
-                "tag": "UTYVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH.AMBLNC": {
-                "symbolID": "SUGPEVUA--*****",  
-                "tag": "GRDVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.UTYVEH.AMBLNC.ARMD": {
-                "symbolID": "SUGPEVUAA-*****",
-                "tag": "UTYVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH": {
-                "symbolID": "EQT",  
-                "tag": "SUGPEVE---*****"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.BRG": {
-                "symbolID": "SUGPEVEB--*****",
-                "tag": "GRDVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.ERHMR": {
-                "symbolID": "SUGPEVEE--*****",
-                "tag": "GRDVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.CSNVEH": {
-                "symbolID": "SUGPEVEC--*****",  
-                "tag": "GRDVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.MLVEH": {
-                "symbolID": "SUGPEVEM--*****",
-                "tag": "GRDVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.MLVEH.ARMCV": {
-                "symbolID": "SUGPEVEMV-*****",  
-                "tag": "ENGVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.MLVEH.TRKMV": {
-                "symbolID": "SUGPEVEML-*****",
-                "tag": "ENGVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.MCVEH": {
-                "symbolID": "SUGPEVEA--*****",
-                "tag": "GRDVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.MCVEH.ARMVM": {
-                "symbolID": "SUGPEVEAA-*****",  
-                "tag": "ENGVEH"   
-            },
-            // "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.MLVEH.TRKMV": {
-            //     "symbolID": "SUGPEVEML-*****",
-            //     "tag": "ENGVEH"     
-            // },
-            // "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.MCVEH": {
-            //     "symbolID": "SUGPEVEA--*****",  
-            //     "tag": "GRDVEH"   
-            // },
-            // "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.MCVEH.ARMVM": {
-            //     "symbolID": "SUGPEVEAA-*****",
-            //     "tag": "ENGVEH"     
-            // },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.MCVEH.TM": {
-                "symbolID": "SUGPEVEAT-*****",
-                "tag": "ENGVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.DZR": {
-                "symbolID": "SUGPEVED--*****",  
-                "tag": "GRDVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.DZR.ARMD": {
-                "symbolID": "SUGPEVEDA-*****",
-                "tag": "ENGVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.AST": {
-                "symbolID": "SUGPEVES--*****",  
-                "tag": "GRDVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.ARMERV": {
-                "symbolID": "SUGPEVER--*****",
-                "tag": "GRDVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.BH": {
-                "symbolID": "SUGPEVEH--*****",
-                "tag": "GRDVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.ENGVEH.FRYTSP": {
-                "symbolID": "SUGPEVEF--*****",  
-                "tag": "GRDVEH"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.TRNLCO": {
-                "symbolID": "SUGPEVT---*****",
-                "tag": "GRDVEH"     
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.CVLVEH": {
-                "symbolID": "SUGPEVC---*****",  
-                "tag": "EQT"   
-            },
-            "WAR.GRDTRK.EQT.GRDVEH.PKAN": {
-                "symbolID": "SUGPEVM---*****",
-                "tag": "EQT"     
-            },
-            "WAR.GRDTRK.EQT.SNS": {
-                "symbolID": "SUGPES----*****",  
-                "tag": "GRDTRK"   
-            },
-            "WAR.GRDTRK.EQT.SNS.RAD": {
-                "symbolID": "SUGPESR---*****",
-                "tag": "EQT"     
-            },
-            "WAR.GRDTRK.EQT.SNS.EMP": {
-                "symbolID": "SUGPESE---*****",  
-                "tag": "EQT"   
-            },
-            "WAR.GRDTRK.EQT.SPL.LSR": {
-                "symbolID": "SUGPEXL---*****",
-                "tag": "EQT"     
-            },
-            "WAR.GRDTRK.EQT.SPL.NBCEQT": {
-                "symbolID": "SUGPEXN---*****",  
-                "tag": "EQT"   
-            },
-            "WAR.GRDTRK.EQT.SPL.FLMTHR": {
-                "symbolID": "SUGPEXF---*****",
-                "tag": "EQT"     
-            },
-            "WAR.GRDTRK.EQT.SPL.LNDMNE": {
-                "symbolID": "SUGPEXM---*****",  
-                "tag": "EQT"   
-            },
-            "WAR.GRDTRK.EQT.SPL.LNDMNE.CLM": {
-                "symbolID": "SUGPEXMC--*****",
-                "tag": "SPL"     
-            },
-            "WAR.GRDTRK.EQT.SPL.LNDMNE.LTL": {
-                "symbolID": "SUGPEXML--*****",  
-                "tag": "SPL"   
-            },
-            "WAR.GRDTRK.INS": {
-                "symbolID": "SUGPI-----H****",
-                "tag": "WAR"     
-            },
-            "WAR.GRDTRK.INS.RMP": {
-                "symbolID": "SUGPIR----H****",  
-                "tag": "GRDTRK"   
-            },
-            "WAR.GRDTRK.INS.RMP.MNE": {
-                "symbolID": "SUGPIRM---H****",
-                "tag": "INS"     
-            },
-            "WAR.GRDTRK.INS.RMP.PGO": {
-                "symbolID": "SUGPIRP---H****",  
-                "tag": "INS"   
-            },
-            "WAR.GRDTRK.INS.RMP.NBC": {
-                "symbolID": "SUGPIRN---H****",
-                "tag": "INS"     
-            },
-            "WAR.GRDTRK.INS.RMP.NBC.BIO": {
-                "symbolID": "SUGPIRNB--H****",  
-                "tag": "RMP"   
-            },
-            "WAR.GRDTRK.INS.RMP.NBC.CML": {
-                "symbolID": "SUGPIRNC--H****",
-                "tag": "RMP"     
-            },
-            "WAR.GRDTRK.INS.RMP.NBC.NUC": {
-                "symbolID": "SUGPIRNN--H****",  
-                "tag": "RMP"   
-            },
-            "WAR.GRDTRK.INS.PF": {
-                "symbolID": "SUGPIP----H****",
-                "tag": "GRDTRK"     
-            },
-            "WAR.GRDTRK.INS.PF.DECON": {
-                "symbolID": "SUGPIPD---H****",  
-                "tag": "INS"   
-            },
-            "WAR.GRDTRK.INS.EQTMNF": {
-                "symbolID": "SUGPIE----H****",
-                "tag": "GRDTRK"     
-            },
-            "WAR.GRDTRK.INS.SRUF": {
-                "symbolID": "SUGPIU----H****",  
-                "tag": "GRDTRK"   
-            },
-            "WAR.GRDTRK.INS.SRUF.TRF": {
-                "symbolID": "SUGPIUR---H****",
-                "tag": "INS"     
-            },
-            "WAR.GRDTRK.INS.SRUF.TCF": {
-                "symbolID": "SUGPIUT---H****",  
-                "tag": "INS"   
-            },
-            "WAR.GRDTRK.INS.SRUF.EPF": {
-                "symbolID": "SUGPIUE---H****",
-                "tag": "INS"     
-            },
-            "WAR.GRDTRK.INS.SRUF.EPF.NPT": {
-                "symbolID": "SUGPIUEN--H****",  
-                "tag": "SRUF"   
-            },
-            "WAR.GRDTRK.INS.SRUF.EPF.DAM": {
-                "symbolID": "SUGPIUED--H****",
-                "tag": "SRUF"     
-            },
-            "WAR.GRDTRK.INS.SRUF.EPF.FOSF": {
-                "symbolID": "SUGPIUEF--H****",  
-                "tag": "SRUF"   
-            },
-            "WAR.GRDTRK.INS.SRUF.PWS": {
-                "symbolID": "SUGPIUP---H****",
-                "tag": "INS"     
-            },
-            "WAR.GRDTRK.INS.MMF.NENY": {
-                "symbolID": "SUGPIMF---H****",  
-                "tag": "INS"   
-            },
-            "WAR.GRDTRK.INS.MMF.NENY.ATMER": {
-                "symbolID": "SUGPIMFA--H****",
-                "tag": "MMF"     
-            },
-            "WAR.GRDTRK.INS.MMF.NENY.NMP": {
-                "symbolID": "SUGPIMFP--H****",  
-                "tag": "MMF"   
-            },
-            "WAR.GRDTRK.INS.MMF.NENY.NMP.WPNGR": {
-                "symbolID": "SUGPIMFPWH****",
-                "tag": "NENY"     
-            },
-            "WAR.GRDTRK.INS.MMF.NENY.NMS": {
-                "symbolID": "SUGPIMFS--H****",  
-                "tag": "MMF"   
-            },
-            "WAR.GRDTRK.INS.MMF.APA": {
-                "symbolID": "SUGPIMA---H****",
-                "tag": "INS"     
-            },
-            "WAR.GRDTRK.INS.MMF.AMEP": {
-                "symbolID": "SUGPIME---H****",  
-                "tag": "INS"   
-            },
-            "WAR.GRDTRK.INS.MMF.AMTP": {
-                "symbolID": "SUGPIMG---H****",
-                "tag": "INS"     
-            },
-            "WAR.GRDTRK.INS.MMF.MILVP": {
-                "symbolID": "SUGPIMV---H****",  
-                "tag": "INS"   
-            },
-            "WAR.GRDTRK.INS.MMF.ENGEP": {
-                "symbolID": "SUGPIMN---H****",
-                "tag": "INS"     
-            },
-            "WAR.GRDTRK.INS.MMF.ENGEP.BRG": {
-                "symbolID": "SUGPIMNB--H****",  
-                "tag": "MMF"   
-            },
-            "WAR.GRDTRK.INS.MMF.CBWP": {
-                "symbolID": "SUGPIMC---H****",
-                "tag": "INS"     
-            },
-            "WAR.GRDTRK.INS.MMF.SHPCSN": {
-                "symbolID": "SUGPIMS---H****",  
-                "tag": "INS"   
-            },
-            "WAR.GRDTRK.INS.MMF.MSSP": {
-                "symbolID": "SUGPIMM---H****",
-                "tag": "INS"     
-            },
-            "WAR.GRDTRK.INS.GOVLDR": {
-                "symbolID": "SUGPIG----H****",  
-                "tag": "GRDTRK"   
-            },
-            "WAR.GRDTRK.INS.MILBF": {
-                "symbolID": "SUGPIB----H****",
-                "tag": "GRDTRK"     
-            },
-            "WAR.GRDTRK.INS.MILBF.AB": {
-                "symbolID": "SUGPIBA---H****",  
-                "tag": "INS"   
-            },
-            "WAR.GRDTRK.INS.MILBF.SP": {
-                "symbolID": "SUGPIBN---H****",
-                "tag": "INS"     
-            },
-            "WAR.GRDTRK.INS.TSPF": {
-                "symbolID": "SUGPIT----H****",  
-                "tag": "GRDTRK"   
-            },
-            "WAR.GRDTRK.INS.MEDF": {
-                "symbolID": "SUGPIX----H****",
-                "tag": "GRDTRK"     
-            },
-            "WAR.GRDTRK.INS.MEDF.HSP": {
-                "symbolID": "SUGPIXH---H****",  
-                "tag": "INS"   
-            }
-        },
-
-        "sea": {
-            "WAR.SSUF": {
-                "symbolID": "SUSP------*****",
-                "tag": "WAR"     
-            },
-            "WAR.SSUF.CBTT": {
-                "symbolID": "SUSPC-----*****",  
-                "tag": "WAR"   
-            },
-            "WAR.SSUF.CBTT.LNE": {
-                "symbolID": "SUSPCL----*****",
-                "tag": "SSUF"     
-            },
-            "WAR.SSUF.CBTT.LNE.CRR": {
-                "symbolID": "SUSPCLCV--*****",  
-                "tag": "CBTT"   
-            },
-            "WAR.SSUF.CBTT.LNE.BBS": {
-                "symbolID": "SUSPCLBB--*****",
-                "tag": "CBTT"     
-            },
-            "WAR.SSUF.CBTT.LNE.CRU": {
-                "symbolID": "SUSPCLCC--*****",  
-                "tag": "CBTT"   
-            },
-            "WAR.SSUF.CBTT.LNE.DD": {
-                "symbolID": "SUSPCLDD--*****",
-                "tag": "CBTT"     
-            },
-            "WAR.SSUF.CBTT.LNE.FFR": {
-                "symbolID": "SUSPCLFF--*****",  
-                "tag": "CBTT"   
-            },
-            "WAR.SSUF.CBTT.AMPWS": {
-                "symbolID": "SUSPCA----*****",
-                "tag": "SSUF"     
-            },
-            "WAR.SSUF.CBTT.AMPWS.ASTVES": {
-                "symbolID": "SUSPCALA--*****",  
-                "tag": "CBTT"   
-            },
-            "WAR.SSUF.CBTT.AMPWS.LNDSHP": {
-                "symbolID": "SUSPCALS--*****",
-                "tag": "CBTT"     
-            },
-            "WAR.SSUF.CBTT.AMPWS.LNDSHP.MDM": {
-                "symbolID": "SUSPCALSM-*****",  
-                "tag": "AMPWS"   
-            },
-            "WAR.SSUF.CBTT.AMPWS.LNDSHP.TANK": {
-                "symbolID": "SUSPCALST-*****",
-                "tag": "AMPWS"     
-            },
-            "WAR.SSUF.CBTT.AMPWS.LNDCRT": {
-                "symbolID": "SUSPCALC--*****",  
-                "tag": "CBTT"   
-            },
-            "WAR.SSUF.CBTT.MNEWV": {
-                "symbolID": "SUSPCM----*****",
-                "tag": "SSUF"     
-            },
-            "WAR.SSUF.CBTT.MNEWV.MNELYR": {
-                "symbolID": "SUSPCMML--*****",  
-                "tag": "CBTT"   
-            },
-            "WAR.SSUF.CBTT.MNEWV.MNESWE": {
-                "symbolID": "SUSPCMMS--*****",
-                "tag": "CBTT"     
-            },
-            "WAR.SSUF.CBTT.MNEWV.MNEHNT": {
-                "symbolID": "SUSPCMMH--*****",  
-                "tag": "CBTT"   
-            },
-            "WAR.SSUF.CBTT.MNEWV.MCMSUP": {
-                "symbolID": "SUSPCMMA--*****",
-                "tag": "CBTT"     
-            },
-            "WAR.SSUF.CBTT.MNEWV.MCMDRN": {
-                "symbolID": "SUSPCMMD--*****",  
-                "tag": "CBTT"   
-            },
-            "WAR.SSUF.CBTT.PAT": {
-                "symbolID": "SUSPCP----*****",
-                "tag": "SSUF"     
-            },
-            "WAR.SSUF.CBTT.PAT.ASBW": {
-                "symbolID": "SUSPCPSB--*****",  
-                "tag": "CBTT"   
-            },
-            "WAR.SSUF.CBTT.PAT.ASUW": {
-                "symbolID": "SUSPCPSU--*****",
-                "tag": "CBTT"     
-            },
-            "WAR.SSUF.CBTT.HOV": {
-                "symbolID": "SUSPCH----*****",  
-                "tag": "SSUF"   
-            },
-            "WAR.SSUF.CBTT.STN": {
-                "symbolID": "SUSPS-----*****",
-                "tag": "SSUF"     
-            },
-            "WAR.SSUF.CBTT.STN.PKT": {
-                "symbolID": "SUSPSP----*****",  
-                "tag": "CBTT"   
-            },
-            "WAR.SSUF.CBTT.STN.ASWSHP": {
-                "symbolID": "SUSPSA----*****",
-                "tag": "CBTT"     
-            },
-            "WAR.SSUF.CBTT.NAVGRP": {
-                "symbolID": "SUSPG-----*****",  
-                "tag": "SSUF"   
-            },
-            "WAR.SSUF.CBTT.NAVGRP.NAVTF": {
-                "symbolID": "SUSPGT----*****",
-                "tag": "CBTT"     
-            },
-            "WAR.SSUF.CBTT.NAVGRP.NAVTG": {
-                "symbolID": "SUSPGG----*****",  
-                "tag": "CBTT"   
-            },
-            "WAR.SSUF.CBTT.NAVGRP.NAVTU": {
-                "symbolID": "SUSPGU----*****",
-                "tag": "CBTT"     
-            },
-            "WAR.SSUF.CBTT.NAVGRP.CNY": {
-                "symbolID": "SUSPGC----*****",  
-                "tag": "CBTT"   
-            },
-            "WAR.SSUF.NCBTT": {
-                "symbolID": "SUSPN-----*****",
-                "tag": "WAR"     
-            },
-            "WAR.SSUF.NCBTT.UWRPM": {
-                "symbolID": "SUSPNR----*****",  
-                "tag": "SSUF"   
-            },
-            "WAR.SSUF.NCBTT.FLTSUP": {
-                "symbolID": "SUSPNF----*****",
-                "tag": "SSUF"     
-            },
-            "WAR.SSUF.NCBTT.INT": {
-                "symbolID": "SUSPNI----*****",  
-                "tag": "SSUF"   
-            },
-            "WAR.SSUF.NCBTT.SSH": {
-                "symbolID": "SUSPNS----*****",
-                "tag": "SSUF"     
-            },
-            "WAR.SSUF.NCBTT.HSPSHP": {
-                "symbolID": "SUSPNM----*****",  
-                "tag": "SSUF"   
-            },
-            "WAR.SSUF.NCBTT.HOV": {
-                "symbolID": "SUSPNH----*****",
-                "tag": "SSUF"     
-            },
-            "WAR.SSUF.NCBTT.STN": {
-                "symbolID": "SUSPNN----*****",  
-                "tag": "SSUF"   
-            },
-            "WAR.SSUF.NCBTT.STN.RSC": {
-                "symbolID": "SUSPNNR---*****",
-                "tag": "NCBTT"     
-            },
-            "WAR.SSUF.NMIL": {
-                "symbolID": "N/A",  
-                "tag": "WAR"   
-            },
-            "WAR.SSUF.NMIL.MCT": {
-                "symbolID": "SUSPXM----*****",
-                "tag": "SSUF"     
-            },
-            "WAR.SSUF.NMIL.MCT.CGO": {
-                "symbolID": "SUSPXMC---*****",  
-                "tag": "NMIL"   
-            },
-            "WAR.SSUF.NMIL.MCT.RORO": {
-                "symbolID": "SUSPXMR---*****",
-                "tag": "NMIL"     
-            },
-            "WAR.SSUF.NMIL.MCT.OLR": {
-                "symbolID": "SUSPXMO---*****",  
-                "tag": "NMIL"   
-            },
-            "WAR.SSUF.NMIL.MCT.TUG": {
-                "symbolID": "SUSPXMTU--*****",
-                "tag": "NMIL"     
-            },
-            "WAR.SSUF.NMIL.MCT.FRY": {
-                "symbolID": "SUSPXMF---*****",  
-                "tag": "NMIL"   
-            },
-            "WAR.SSUF.NMIL.MCT.PSG": {
-                "symbolID": "SUSPXMP---*****",
-                "tag": "NMIL"     
-            },
-            "WAR.SSUF.NMIL.MCT.HAZMAT": {
-                "symbolID": "SUSPXMH---*****",  
-                "tag": "NMIL"   
-            },
-            "WAR.SSUF.NMIL.MCT.TOWVES": {
-                "symbolID": "SUSPXMTO--*****",
-                "tag": "NMIL"     
-            },
-            "WAR.SSUF.NMIL.FSG": {
-                "symbolID": "SUSPXF----*****",  
-                "tag": "SSUF"   
-            },
-            "WAR.SSUF.NMIL.FSG.DRFT": {
-                "symbolID": "SUSPXFDF--*****",
-                "tag": "NMIL"     
-            },
-            "WAR.SSUF.NMIL.FSG.DRG": {
-                "symbolID": "SUSPXFDR--*****",  
-                "tag": "NMIL"   
-            },
-            "WAR.SSUF.NMIL.FSG.TRW": {
-                "symbolID": "SUSPXFTR--*****",
-                "tag": "NMIL"     
-            },
-            "WAR.SSUF.NMIL.LESCRT": {
-                "symbolID": "SUSPXR----*****",  
-                "tag": "SSUF"   
-            },
-            "WAR.SSUF.NMIL.LAWENV": {
-                "symbolID": "SUSPXL----*****",
-                "tag": "SSUF"     
-            },
-            "WAR.SSUF.NMIL.HOV": {
-                "symbolID": "SUSPXH----*****",  
-                "tag": "SSUF"   
-            },
-            "WAR.SSUF.OWN": {
-                "symbolID": "SUSPO-----*****",
-                "tag": "WAR"     
-            },
-        },
-
-        "subsurface": {
-            "WAR.SBSUF": {
-                "symbolID": "SUUP------*****",  
-                "tag": "WAR"   
-            },
-            "WAR.SBSUF.SUB": {
-                "symbolID": "SUUPS-----*****",
-                "tag": "WAR"     
-            },
-            "WAR.SBSUF.SUB.NPRN": {
-                "symbolID": "SUUPSN----*****",  
-                "tag": "SBSUF"   
-            },
-            "WAR.SBSUF.SUB.NPRN.ATK": {
-                "symbolID": "SUUPSNA---*****",
-                "tag": "SUB"     
-            },
-            "WAR.SBSUF.SUB.NPRN.MSL": {
-                "symbolID": "SUUPSNM---*****",  
-                "tag": "SUB"   
-            },
-            "WAR.SBSUF.SUB.NPRN.GDD": {
-                "symbolID": "SUUPSNG---*****",
-                "tag": "SUB"     
-            },
-            "WAR.SBSUF.SUB.CNVPRN.BLST": {
-                "symbolID": "SUUPSCB---*****",  
-                "tag": "SUB"   
-            },
-            "WAR.SBSUF.SUB.OTH": {
-                "symbolID": "SUUPSO----*****",
-                "tag": "SBSUF"     
-            },
-            "WAR.SBSUF.SUB.OTH.UUV": {
-                "symbolID": "SUUPSU----*****",  
-                "tag": "SUB"   
-            },
-            "WAR.SBSUF.SUB.STN": {
-                "symbolID": "SUUPSS----*****",
-                "tag": "SBSUF"     
-            },
-            "WAR.SBSUF.SUB.STN.ASWSUB": {
-                "symbolID": "SUUPSSA---*****",  
-                "tag": "SUB"   
-            },
-            "WAR.SBSUF.UH2WPN": {
-                "symbolID": "SUUPW-----*****",
-                "tag": "WAR"     
-            },
-            "WAR.SBSUF.UH2WPN.TPD": {
-                "symbolID": "SUUPWT----*****",  
-                "tag": "SBSUF"   
-            },
-            "WAR.SBSUF.UH2WPN.SMNE": {
-                "symbolID": "SUUPWM----*****",
-                "tag": "SBSUF"     
-            },
-            "WAR.SBSUF.UH2WPN.SMNE.DLT": {
-                "symbolID": "SUUPWMD---*****",  
-                "tag": "UH2WPN"   
-            },
-            "WAR.SBSUF.UH2WPN.SMNE.SMG": {
-                "symbolID": "SUUPWMG---*****",
-                "tag": "UH2WPN"     
-            },
-            "WAR.SBSUF.UH2WPN.SMNE.SMG.DLT": {
-                "symbolID": "SUUPWMGD--*****",  
-                "tag": "SMNE"   
-            },
-            "WAR.SBSUF.UH2WPN.SMNE.SMM": {
-                "symbolID": "SUUPWMM---*****",
-                "tag": "UH2WPN"     
-            },
-            "WAR.SBSUF.UH2WPN.SMNE.SMM.DLT": {
-                "symbolID": "SUUPWMMD--*****",  
-                "tag": "SMNE"   
-            },
-            "WAR.SBSUF.UH2WPN.SMNE.SMF": {
-                "symbolID": "SUUPWMF---*****",
-                "tag": "UH2WPN"     
-            },
-            "WAR.SBSUF.UH2WPN.SMNE.SMF.DLT": {
-                "symbolID": "SUUPWMFD--*****",  
-                "tag": "SMNE"   
-            },
-            "WAR.SBSUF.UH2WPN.SMNE.SMOP": {
-                "symbolID": "SUUPWMO---*****",
-                "tag": "UH2WPN"     
-            },
-            "WAR.SBSUF.UH2WPN.SMNE.SMOP.DLT": {
-                "symbolID": "SUUPWMOD--*****",  
-                "tag": "SMNE"   
-            },
-            "WAR.SBSUF.UH2DCY": {
-                "symbolID": "SUUPWD----*****",
-                "tag": "WAR"     
-            },
-            "WAR.SBSUF.UH2DCY.SMDCY": {
-                "symbolID": "SUUPWDM---*****",  
-                "tag": "SBSUF"   
-            },
-            "WAR.SBSUF.NSUB": {
-                "symbolID": "N/A",
-                "tag": "WAR"     
-            },
-            "WAR.SBSUF.NSUB.DVR": {
-                "symbolID": "SUUPND----*****",  
-                "tag": "SBSUF"   
-            },
-        },
-
-        "sof": {
-            "WAR.SOFUNT": {
-                "symbolID": "SUFP------*****",
-                "tag": "WAR"     
-            },
-            "WAR.SOFUNT.AVN": {
-                "symbolID": "SUFPA-----*****",  
-                "tag": "WAR"   
-            },
-            "WAR.SOFUNT.AVN.FIXD": {
-                "symbolID": "SUFPAF----*****",
-                "tag": "SOFUNT"     
-            },
-            "WAR.SOFUNT.AVN.FIXD.ATK": {
-                "symbolID": "SUFPAFA---*****",  
-                "tag": "AVN"   
-            },
-            "WAR.SOFUNT.AVN.FIXD.RFE": {
-                "symbolID": "SUFPAFK---*****",
-                "tag": "AVN"     
-            },
-            "WAR.SOFUNT.AVN.FIXD.UTY": {
-                "symbolID": "SUFPAFU---*****",  
-                "tag": "AVN"   
-            },
-            "WAR.SOFUNT.AVN.FIXD.UTY.LIT": {
-                "symbolID": "SUFPAFUL--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.SOFUNT.AVN.FIXD.UTY.MDM": {
-                "symbolID": "SUFPAFUM--*****",  
-                "tag": "FIXD"   
-            },
-            "WAR.SOFUNT.AVN.FIXD.UTY.HVY": {
-                "symbolID": "SUFPAFUH--*****",
-                "tag": "FIXD"     
-            },
-            "WAR.SOFUNT.AVN.VSTOL": {
-                "symbolID": "SUFPAV----*****",  
-                "tag": "SOFUNT"   
-            },
-            "WAR.SOFUNT.AVN.ROT": {
-                "symbolID": "SUFPAH----*****",
-                "tag": "SOFUNT"     
-            },
-            "WAR.SOFUNT.AVN.ROT.CSAR": {
-                "symbolID": "SUFPAHH---*****",  
-                "tag": "AVN"   
-            },
-            "WAR.SOFUNT.AVN.ROT.ATK": {
-                "symbolID": "SUFPAHA---*****",
-                "tag": "AVN"     
-            },
-            "WAR.SOFUNT.AVN.ROT.UTY": {
-                "symbolID": "SUFPAHU---*****",  
-                "tag": "AVN"   
-            },
-            "WAR.SOFUNT.AVN.ROT.UTY.LIT": {
-                "symbolID": "SUFPAHUL--*****",
-                "tag": "ROT"     
-            },
-            "WAR.SOFUNT.AVN.ROT.UTY.MDM": {
-                "symbolID": "SUFPAHUM--*****",  
-                "tag": "ROT"   
-            },
-            "WAR.SOFUNT.AVN.ROT.UTY.HVY": {
-                "symbolID": "SUFPAHUH--*****",
-                "tag": "ROT"     
-            },
-            "WAR.SOFUNT.NAV": {
-                "symbolID": "SUFPN-----*****",  
-                "tag": "WAR"   
-            },
-            "WAR.SOFUNT.NAV.SEAL": {
-                "symbolID": "SUFPNS----*****",
-                "tag": "SOFUNT"     
-            },
-            "WAR.SOFUNT.NAV.UH2DML": {
-                "symbolID": "SUFPNU----*****",  
-                "tag": "SOFUNT"   
-            },
-            "WAR.SOFUNT.NAV.SBT": {
-                "symbolID": "SUFPNB----*****",
-                "tag": "SOFUNT"     
-            }, 
-            "WAR.SOFUNT.NAV.SSSNR": {
-                "symbolID": "SUFPNN----*****",  
-                "tag": "SOFUNT"   
-            },
-            "WAR.SOFUNT.GRD": {
-                "symbolID": "SUFPG-----*****",
-                "tag": "WAR"     
-            },
-            "WAR.SOFUNT.GRD.SOF": {
-                "symbolID": "SUFPGS----*****",  
-                "tag": "SOFUNT"   
-            },
-            "WAR.SOFUNT.GRD.RGR": {
-                "symbolID": "SUFPGR----*****",
-                "tag": "SOFUNT"     
-            }, 
-            "WAR.SOFUNT.GRD.PSYOP": {
-                "symbolID": "SUFPGP----*****",  
-                "tag": "SOFUNT"   
-            },
-            "WAR.SOFUNT.GRD.PSYOP.FIXAVN": {
-                "symbolID": "SUFPGPA---*****",
-                "tag": "GRD"     
-            },
-            "WAR.SOFUNT.GRD.CVLAFF": {
-                "symbolID": "SUFPGC----*****",  
-                "tag": "SOFUNT"   
-            },
-            "WAR.SOFUNT.SUP": {
-                "symbolID": "SUFPB-----*****",
-                "tag": "WAR"     
-            }
-        },
-
-        // Task point Tactical Graphics
-        "task": {
-            "TACGRP.TSK.DSTY": {
-                "symbolID": "GUTPD-----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.TSK.ITDT": {
-                "symbolID": "GUTPI-----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.TSK.NEUT": {
-                "symbolID": "GUTPN-----****X",
-                "tag": "TACGRP"
-            }
-        },
-        
-        // Command Control General Maneuver point Tactical Graphics
-        "c2gm": {
-            "TACGRP.C2GM.GNL.PNT.REFPNT": {
-                "symbolID": "GUGPGPR---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.REFPNT.NAVREF": {
-                "symbolID": "GUGPGPRN--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.REFPNT.SPLPNT": {
-                "symbolID": "GUGPGPRS--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.REFPNT.DLRP": {
-                "symbolID": "GUGPGPRD--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.REFPNT.PIM": {
-                "symbolID": "GUGPGPRP--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.REFPNT.MRSH": {
-                "symbolID": "GUGPGPRM--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.REFPNT.WAP": {
-                "symbolID": "GUGPGPRW--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.REFPNT.CRDRTB": {
-                "symbolID": "GUGPGPRC--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.REFPNT.PNTINR": {
-                "symbolID": "GUGPGPRI--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.WPN.AIMPNT": {
-                "symbolID": "GUGPGPWA--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.WPN.DRPPNT": {
-                "symbolID": "GUGPGPWD--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.WPN.ENTPNT": {
-                "symbolID": "GUGPGPWE--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.WPN.GRDZRO": {
-                "symbolID": "GUGPGPWG--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.WPN.MSLPNT": {
-                "symbolID": "GUGPGPWM--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.WPN.IMTPNT": {
-                "symbolID": "GUGPGPWI--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.WPN.PIPNT": {
-                "symbolID": "GUGPGPWP--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.FRMN": {
-                "symbolID": "GUGPGPF---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.HBR": {
-                "symbolID": "GUGPGPH---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.HBR.PNTQ": {
-                "symbolID": "GUGPGPHQ--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.HBR.PNTA": {
-                "symbolID": "GUGPGPHA--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.HBR.PNTX": {
-                "symbolID": "GUGPGPHX--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.RTE": {
-                "symbolID": "GUGPGPO---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.RTE.RDV": {
-                "symbolID": "GUGPGPOZ--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.RTE.DVSN": {
-                "symbolID": "GUGPGPOD--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.RTE.WAP": {
-                "symbolID": "GUGPGPOW--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.RTE.PIM": {
-                "symbolID": "GUGPGPOP--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.RTE.PNTR": {
-                "symbolID": "GUGPGPOR--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.ACTPNT": {
-                "symbolID": "GUGPGPP---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.ACTPNT.CHKPNT": {
-                "symbolID": "GUGPGPPK--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.ACTPNT.CONPNT": {
-                "symbolID": "GUGPGPPC--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.ACTPNT.CRDPNT": {
-                "symbolID": "GUGPGPPO--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.ACTPNT.DCNPNT": {
-                "symbolID": "GUGPGPPD--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.ACTPNT.LNKUPT": {
-                "symbolID": "GUGPGPPL--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.ACTPNT.PSSPNT": {
-                "symbolID": "GUGPGPPP--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.ACTPNT.RAYPNT": {
-                "symbolID": "GUGPGPPR--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.ACTPNT.RELPNT": {
-                "symbolID": "GUGPGPPE--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.ACTPNT.STRPNT": {
-                "symbolID": "GUGPGPPS--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.ACTPNT.AMNPNT": {
-                "symbolID": "GUGPGPPA--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.GNL.PNT.ACTPNT.WAP": {
-                "symbolID": "GUGPGPPW--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.DEF.PNT.TGTREF": {
-                "symbolID": "GUGPDPT---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.DEF.PNT.OBSPST": {
-                "symbolID": "GUGPDPO---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.DEF.PNT.OBSPST.CBTPST": {
-                "symbolID": "GUGPDPOC--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.DEF.PNT.OBSPST.RECON": {
-                "symbolID": "GUGPDPOR--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.DEF.PNT.OBSPST.FWDOP": {
-                "symbolID": "GUGPDPOF--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.DEF.PNT.OBSPST.SOP": {
-                "symbolID": "GUGPDPOS--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.DEF.PNT.OBSPST.CBRN": {
-                "symbolID": "GUGPDPON--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.C2GM.OFF.PNT.PNTD": {
-                "symbolID": "GUGPOPP---****X",
-                "tag": "TACGRP"
-            }
-        },
-        
-        // Mobility/Survivability point Tactical Graphics
-        "mobsu": {
-            "TACGRP.MOBSU.OBST.ATO.TDTSM.FIXPFD": {
-                "symbolID": "GUMPOAOF--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.OBST.ATO.TDTSM.MVB": {
-                "symbolID": "GUMPOAOM--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.OBST.ATO.TDTSM.MVBPFD": {
-                "symbolID": "GUMPOAOP--****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.OBST.BBY": {
-                "symbolID": "GUMPOB----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.OBST.MNE.USPMNE": {
-                "symbolID": "GUMPOMU---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.OBST.MNE.ATMNE": {
-                "symbolID": "GUMPOMT---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.OBST.MNE.ATMAHD": {
-                "symbolID": "GUMPOMD---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.OBST.MNE.ATMDIR": {
-                "symbolID": "GUMPOME---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.OBST.MNE.APMNE": {
-                "symbolID": "GUMPOMP---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.OBST.MNE.WAMNE": {
-                "symbolID": "GUMPOMW---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.OBSTBP.CSGSTE.ERP": {
-                "symbolID": "GUMPBCP---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.SU.ESTOF": {
-                "symbolID": "GUMPSE----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.SU.FRT": {
-                "symbolID": "GUMPSF----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.SU.SUFSHL": {
-                "symbolID": "GUMPSS----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.MOBSU.SU.UGDSHL": {
-                "symbolID": "GUMPSU----****X",
-                "tag": "TACGRP"
-            }
-        },
-
-        // Fire Support point Tactical Graphics        
-        "fsupp": {
-            "TACGRP.FSUPP.PNT.TGT.PTGT": {
-                "symbolID": "GUFPPTS---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.FSUPP.PNT.TGT.NUCTGT": {
-                "symbolID": "GUFPPTN---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.FSUPP.PNT.C2PNT.FSS": {
-                "symbolID": "GUFPPCF---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.FSUPP.PNT.C2PNT.SCP": {
-                "symbolID": "GUFPPCS---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.FSUPP.PNT.C2PNT.FP": {
-                "symbolID": "GUFPPCB---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.FSUPP.PNT.C2PNT.RP": {
-                "symbolID": "GUFPPCR---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.FSUPP.PNT.C2PNT.HP": {
-                "symbolID": "GUFPPCH---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.FSUPP.PNT.C2PNT.LP": {
-                "symbolID": "GUFPPCL---****X",
-                "tag": "TACGRP"
-            }
-        },
-        
-        // Combat Service Support point Tactical Graphics
-        "css": {
-            "TACGRP.CSS.PNT.AEP": {
-                "symbolID": "GUSPPX----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.CBNP": {
-                "symbolID": "GUSPPC----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.CCP": {
-                "symbolID": "GUSPPY----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.CVP": {
-                "symbolID": "GUSPPT----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.DCP": {
-                "symbolID": "GUSPPD----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.EPWCP": {
-                "symbolID": "GUSPPE----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.LRP": {
-                "symbolID": "GUSPPL----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.MCP": {
-                "symbolID": "GUSPPM----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.RRRP": {
-                "symbolID": "GUSPPR----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.ROM": {
-                "symbolID": "GUSPPU----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.TCP": {
-                "symbolID": "GUSPPO----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.TTP": {
-                "symbolID": "GUSPPI----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.UMC": {
-                "symbolID": "GUSPPN----****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.SPT.GNL": {
-                "symbolID": "GUSPPSZ---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.SPT.CLS1": {
-                "symbolID": "GUSPPSA---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.SPT.CLS2": {
-                "symbolID": "GUSPPSB---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.SPT.CLS3": {
-                "symbolID": "GUSPPSC---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.SPT.CLS4": {
-                "symbolID": "GUSPPSD---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.SPT.CLS5": {
-                "symbolID": "GUSPPSE---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.SPT.CLS6": {
-                "symbolID": "GUSPPSF---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.SPT.CLS7": {
-                "symbolID": "GUSPPSG---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.SPT.CLS8": {
-                "symbolID": "GUSPPSH---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.SPT.CLS9": {
-                "symbolID": "GUSPPSI---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.SPT.CLS10": {
-                "symbolID": "GUSPPSJ---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.AP.ASP": {
-                "symbolID": "GUSPPAS---****X",
-                "tag": "TACGRP"
-            },
-            "TACGRP.CSS.PNT.AP.ATP": {
-                "symbolID": "GUSPPAT---****X",
-                "tag": "TACGRP"
-            }
-        },
-                
-        // Stabilizing Operations point graphics
-        "stbops": {
-            "STBOPS.VIOATY.ASN": {
-                "symbolID": "OUVPA-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.VIOATY.KILL": {
-                "symbolID": "OUVPM-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.VIOATY.KILL.MDR": {
-                "symbolID": "OUVPMA----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.VIOATY.KILL.EX": {
-                "symbolID": "OUVPMB----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.VIOATY.KILL.ASS": {
-                "symbolID": "OUVPMC----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.VIOATY.BM": {
-                "symbolID": "OUVPB-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.VIOATY.BBY": {
-                "symbolID": "OUVPY-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.VIOATY.DBS": {
-                "symbolID": "OUVPD-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.VIOATY.SPG": {
-                "symbolID": "OUVPS-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.VIOATY.PSNG": {
-                "symbolID": "OUVPP-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.VIOATY.EXPLSN": {
-                "symbolID": "OUVPE-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.VIOATY.EXPLSN.EXPLSN": {
-                "symbolID": "OUVPEI----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.LOCAT.BLST": {
-                "symbolID": "OULPB-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.LOCAT.GLST": {
-                "symbolID": "OULPG-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.LOCAT.WLST": {
-                "symbolID": "OULPW-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.LOCAT.MASS": {
-                "symbolID": "OULPM-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.PATG": {
-                "symbolID": "OUOPP-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.DEMO": {
-                "symbolID": "OUOPD-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.ML": {
-                "symbolID": "OUOPM-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.FRGSRH": {
-                "symbolID": "OUOPF-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.SPY": {
-                "symbolID": "OUOPS-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.FDDIST": {
-                "symbolID": "OUOPO-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.EXTN": {
-                "symbolID": "OUOPE-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.HJKG.VEH": {
-                "symbolID": "OUOPHT----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.HJKG.APL": {
-                "symbolID": "OUOPHA----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.HJKG.BOAT": {
-                "symbolID": "OUOPHV----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.KDNG": {
-                "symbolID": "OUOPK-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.KDNG.ATEMPT": {
-                "symbolID": "OUOPK-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.ARR": {
-                "symbolID": "OUOPA-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.OPN.DGOPN": {
-                "symbolID": "OUOPU-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.ITM.RFG": {
-                "symbolID": "OUIPR-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.ITM.SAFHSE": {
-                "symbolID": "OUIPS-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.ITM.GRF": {
-                "symbolID": "OUIPG-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.ITM.VRLRPS": {
-                "symbolID": "OUIPV-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.ITM.KNIVEH": {
-                "symbolID": "OUIPI-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.ITM.DGVEH": {
-                "symbolID": "OUIPD-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.ITM.ISF": {
-                "symbolID": "OUIPF-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.INDIV": {
-                "symbolID": "OUPP------*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.INDIV.LEADER": {
-                "symbolID": "OUPPA-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.INDIV.TRGTD": {
-                "symbolID": "OUPPB-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.INDIV.TERRST": {
-                "symbolID": "OUPPC-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.GRPORG": {
-                "symbolID": "OUGP------*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.GRPORG.DPRE": {
-                "symbolID": "OUGPA-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.GRPORG.NGO": {
-                "symbolID": "OUGPB-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.GRPORG.TERRST": {
-                "symbolID": "OUGPC-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.GRPORG.RELIGS": {
-                "symbolID": "OUGPD-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.GRPORG.FNFGHT": {
-                "symbolID": "OUGPE-----*****",
-                "tag": "STBOPS"     
-            },
-            "STBOPS.GRPORG.GANG": {
-                "symbolID": "OUGPF-----*****",
-                "tag": "STBOPS"     
-            }
-        },
-        
-        "aliasModifiers": { 
-            "quantity":            { modifier:  "C_QUANTITY",
-                                     type:      "ModifiersUnits",
-                                     valueType: "Number" },
-            "additionalInfo1":     { modifier:  "H_ADDITIONAL_INFO_1",
-                                     type:      "ModifiersUnits",
-                                     valueType: "Text" },
-            "additionalInfo2":      { modifier:  "H1_ADDITIONAL_INFO_2",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "additionalInfo3":      { modifier:  "H2_ADDITIONAL_INFO_3",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "altitudeDepth":        { modifier:  "X_ALTITUDE_DEPTH",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "combatEffectiveness":  { modifier:  "K_COMBAT_EFFECTIVENESS",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "directionOfMovement":  { modifier:  "Q_DIRECTION_OF_MOVEMENT",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "evaluationRating":     { modifier:  "J_EVALUATION_RATING",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "higherFormation":      { modifier:  "M_HIGHER_FORMATION",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "hostile":              { modifier:  "N_HOSTILE",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "iffSif":               { modifier:  "P_IFF_SIF",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "location":             { modifier:  "Y_LOCATION",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Array" },
-            "reinforcedReduced":    { modifier:  "F_REINFORCED_REDUCED",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "signatureEquip":       { modifier:  "L_SIGNATURE_EQUIP",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "staffComments":        { modifier:  "G_STAFF_COMMENTS",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "equipType":            { modifier:  "V_EQUIP_TYPE",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "uniqueDesignation1":   { modifier:  "T_UNIQUE_DESIGNATION_1",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "uniqueDesignation2":   { modifier:  "T1_UNIQUE_DESIGNATION_2",
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "speed":                { modifier:  "Z_SPEED",                            
-                                      type:      "ModifiersUnits",
-                                      valueType: "Text" },
-            "pixelSize":            { modifier:  "PixelSize",                            
-                                      type:      "MilStdAttributes",
-                                      valueType: "Number" },
-            "icon":                 { modifier:  "Icon",                            
-                                      type:      "MilStdAttributes",
-                                      valueType: "Boolean" },
-            "keepUnitRatio":        { modifier:  "KeepUnitRatio",                            
-                                      type:      "MilStdAttributes",
-                                      valueType: "Boolean" },
-            "symbologyStandard":    { modifier:  "SymbologyStandard",                            
-                                      type:      "MilStdAttributes",
-                                      valueType: "Number" }
-         },
-        "find": function( section, tag ) {
-            var units = {};
-            var sec = undefined;
-            if ( this[ section ] !== undefined ) {
-                for ( var fullname in this[ section ] ) {
-                    if ( this[ section ][ fullname ][ tag ] === tag ){
-                        units[ fullname ] = this[ section ][ fullname ];    
-                    }
-                }
-            }
-            return units;
-        },
-        "findAll": function( section, tag ) {
-            var units = {};
-            var sec = undefined;
-            if ( this[ section ] !== undefined ) {
-                for ( var fullname in this[ section ] ) {
-                    if (  fullname.indexOf( tag ) !== -1 ){
-                        units[ fullname ] = this[ section ][ fullname ];    
-                    }
-                }
-            }
-            return units;
-        },
-        "decode": function( name ){
-            var parts = name.split( '.' );
-            for ( var i = 0; i < parts.length; i++ ) {
-                parts[ i ] = ( this.def[ parts[ i ] ] !== undefined ) ? this.def[ parts[ i ] ] : parts[ i ];    
-            }
-            return parts.join( '.' );   
-        },
-        "description": function( name, unit ){
-            var foundTag = false;
-            var parts = name.split( '.' );
-            var retStr = "";
-            var prefix = "";
-            for ( var i = 0; i < parts.length; i++ ){
-                if ( foundTag ) {
-                    prefix = prefix + "  ";
-                } else if ( parts[ i ] === unit.tag ) {
-                    foundTag = true;
-                }
-                if ( this.def[ parts[ i ] ] ) {
-                    retStr = retStr + prefix + this.def[ parts[ i ] ] + "\n";
-                } else {
-                    retStr = retStr + prefix + parts[ i ] + "\n";
-                }
-            }
-
-            return retStr;
-        },
-        "preTag": function( name, tag ) {
-            var retStr = "";
-            var index = name.indexOf( tag );
-            if ( index !== -1 ) {
-                retStr = name.substr( 0, index - 1 );
-            } 
-            return retStr;
-        },
-        "postTag": function( name, tag ) {
-            var tagLen = tag.length;
-            var retStr = "";
-            var index = name.indexOf( tag );
-            if ( index !== -1 ) {
-                retStr = name.substr( index + tagLen + 1 );
-            } 
-            return retStr;            
-        },
-        "addEchelonToSymbolId": function( symbolID, value ) {
-            var retStr = symbolID;
-            switch( value ) {
-                
-                case "team":
-                case "crew":
-                    retStr = this.team_crew( symbolID );
-                    break;
-                case "squad":
-                    retStr = this.squad( symbolID );
-                    break;
-                case "section":
-                    retStr = this.section( symbolID );
-                    break;                
-                case "platoon":
-                case "detachment":
-                    retStr = this.platoon_detachment( symbolID );
-                    break;
-                case "company":
-                case "battery":
-                case "troop":
-                    retStr = this.company_battery_troop( symbolID );
-                    break;                
-                case "battalion":
-                case "squadron":
-                    retStr = this.battalion_squadron( symbolID );
-                    break;                
-                case "regiment":
-                case "group":
-                    retStr = this.regiment_group( symbolID );
-                    break;  
-                case "brigade":
-                    retStr = this.brigade( symbolID );
-                    break;  
-                case "division":
-                    retStr = this.division( symbolID );
-                    break;  
-                case "corps":
-                case "mef":
-                    retStr = this.corps_mef( symbolID );
-                    break;                  
-                case "army":
-                    retStr = this.army( symbolID );
-                    break; 
-                case "armyGroup":
-                case "army group":
-                case "front":
-                    retStr = this.armyGroup_front( symbolID );
-                    break; 
-                case "region":
-                    retStr = this.region( symbolID );
-                    break; 
-                case "null":
-                case "none":
-                default:
-                    retStr = this._null( symbolID );
-                    break; 
-
-            }  
-            return retStr;          
-        },
-        "team_crew": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "-A" + symbolID.substr( 12 );
-        }, 
-        "squad": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "-B" + symbolID.substr( 12 );
-        }, 
-        "section": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "-C" + symbolID.substr( 12 );
-        }, 
-        "platoon_detachment": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "-D" + symbolID.substr( 12 );
-        }, 
-        "company_battery_troop": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "-E" + symbolID.substr( 12 );
-        }, 
-        "battalion_squadron": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "-F" + symbolID.substr( 12 );
-        }, 
-        "regiment_group": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "-G" + symbolID.substr( 12 );
-        }, 
-        "brigade": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "-H" + symbolID.substr( 12 );
-        }, 
-        "division": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "-I" + symbolID.substr( 12 );
-        }, 
-        "corps_mef": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "-J" + symbolID.substr( 12 );
-        },
-        "army": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "-K" + symbolID.substr( 12 );
-        },
-        "armyGroup_front": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "-L" + symbolID.substr( 12 );
-        },
-        "region": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "-M" + symbolID.substr( 12 );
-        },
-        "_null": function( symbolID ) {
-            return symbolID.substr( 0, 10 ) + "**" + symbolID.substr( 12 );
-        },
-        "addAffiliationToSymbolId": function( symbolID, value ) {
-            var retStr = symbolID;
-            switch ( value ) {
-                case "unknown":
-                    retStr = this.unknown( symbolID );
-                    break;
-                case "friendly":
-                    retStr = this.friendly( symbolID );
-                    break;
-                case "neutral":
-                    retStr = this.neutral( symbolID );
-                    break;
-                case "hostile":
-                    retStr = this.hostile( symbolID );
-                    break;
-            }
-            return retStr;
-        },    
-        "unknown": function( symbolID ) {
-            return symbolID.substr( 0, 1 ) + "U" + symbolID.substr( 2 );
-        },
-        "friendly": function( symbolID ) {
-            return symbolID.substr( 0, 1 ) + "F" + symbolID.substr( 2 );
-        },
-        "neutral": function( symbolID ) {
-            return symbolID.substr( 0, 1 ) + "N" + symbolID.substr( 2 );
-        },
-        "hostile": function( symbolID ) {
-            return symbolID.substr( 0, 1 ) + "H" + symbolID.substr( 2 );
-        },  
-        "modifierByAlias": function( alias ) {
-            var modifierObj = undefined;
-                                
-            if ( this.aliasModifiers[ alias ] ) {
-                modifierObj = this.aliasModifiers[ alias ];
-            }
-            
-            return modifierObj;
-        }
-    };
-
-    return cws;
-    
-});
-
-

File diff suppressed because it is too large
+ 0 - 1879
support/client/lib/socket.io-0.6.js


+ 0 - 57
support/client/lib/socket.io-sessionid-patch.js

@@ -1,57 +0,0 @@
-// Copyright 2013 United States Government, as represented by the Secretary of Defense, Under
-// Secretary of Defense (Personnel & Readiness).
-// 
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
-// in compliance with the License. You may obtain a copy of the License at
-// 
-//   http://www.apache.org/licenses/LICENSE-2.0
-// 
-// Unless required by applicable law or agreed to in writing, software distributed under the License
-// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-// or implied. See the License for the specific language governing permissions and limitations under
-// the License.
-
-( function () { 
-
-    // Only patch if running older Socket.io version i.e. 0.6.3, Ruby server
-
-	if ( parseFloat( io.version ) >= 0.7 ) {
-	    return;
-    }
-
-
-	var transport = io.Transport;
-	var transports = [ transport, transport.websocket, transport.flashsocket ];
-
-	// This overrides socket.io's Transport.onDisconnect that resets the sessionid on disconnect
-	// We would like to keep it around so it can be reused on reconnect so the application understands that this 
-	// is an existing client reconnecting, instead of a new client
-	transports.map( function( trans ) {
-		if ( !trans ) {
-			return;
-		}
-		trans.prototype.onDisconnect = function( message ){
-			this.connecting = false;
-			this.connected = false;
-			this.base.onDisconnect();
-		}
-	} );
-
-	// This overrides socket.io's onMessage functions to have it register that a connection has been made, even 
-	// when the sessionid is not null
-	var xhrTransports = [ transport.XHR, transport.htmlfile, transport['xhr-multipart'], 
-	                      transport['xhr-polling'], transport['jsonp-polling'] ];
-	transports = transports.concat( xhrTransports );
-	transports.map( function( trans ) {
-		if ( !trans ) {
-			return;
-		}
-	  	var oldOnMessage = trans.prototype.onMessage;
-		trans.prototype.onMessage = function( message ){
-			oldOnMessage.call( this, message );
-			if ( !this.connected ) {
-				this.onConnect();
-			}
-		}
-	} );
-} )();

+ 21 - 145
support/client/lib/vwf.js

@@ -282,47 +282,7 @@
 
             var requireConfig = {
                 shim: {
-                    "vwf/model/threejs/three": {
-                        exports: "THREE",
-                    },
-                    "vwf/model/threejs/js/loaders/ColladaLoader": {
-                        deps: [ "vwf/model/threejs/three" ],
-                        exports: "THREE.ColladaLoader",
-                    },
-                    "vwf/model/threejs/js/loaders/gltf/glTFLoader": {
-                        deps: [ "vwf/model/threejs/three" ],
-                        exports: "THREE.glTFLoader",
-                    },
-                    "vwf/model/threejs/js/loaders/gltf/glTF-parser": {
-                        deps: [ "vwf/model/threejs/three" ],
-                    },
-                    "vwf/model/threejs/js/loaders/gltf/glTFLoaderUtils": {
-                        deps: [ "vwf/model/threejs/three" ],
-                    },
-                    "vwf/model/threejs/js/loaders/gltf/glTFAnimation": {
-                        deps: [ "vwf/model/threejs/three" ],
-                    },
-                    "vwf/model/threejs/js/stereo/DeviceOrientationControls": {
-                        deps: [ "vwf/model/threejs/three" ],
-                    },
-                    "vwf/model/threejs/js/stereo/OrbitControls": {
-                        deps: [ "vwf/model/threejs/three" ],
-                    },
-                    "vwf/model/threejs/js/stereo/StereoEffect": {
-                        deps: [ "vwf/model/threejs/three" ],
-                    },
-                    "vwf/model/blockly/blockly_compressed": {
-                        exports: "Blockly"
-                    },
-                    "vwf/model/blockly/blocks_compressed": {
-                        deps: [ "vwf/model/blockly/blockly_compressed" ]
-                    },
-                    "vwf/model/blockly/javascript_compressed": {
-                        deps: [ "vwf/model/blockly/blockly_compressed" ]
-                    },
-                    "vwf/model/blockly/msg/js/en": {
-                        deps: [ "vwf/model/blockly/blockly_compressed" ]
-                    },
+                   
                      "vwf/model/aframe/addon/aframe-interpolation": {
                         deps: [ "vwf/model/aframe/aframe-master" ]
                     },
@@ -362,36 +322,9 @@
                 { library: "vwf/configuration", active: true },
                 { library: "vwf/kernel/model", active: true },
                 { library: "vwf/model/javascript", active: true },
-                { library: "vwf/model/jiglib", 
-                    linkedLibraries: ["vwf/model/jiglib/jiglib"], 
-                    active: false 
-                },
-                { library: "vwf/model/glge", 
-                    linkedLibraries: ["vwf/model/glge/glge-compiled"], 
-                    disabledBy: ["vwf/model/threejs", "vwf/view/threejs"], 
-                    active: false 
-                },
-                { library: "vwf/model/threejs", linkedLibraries: [
-                    "vwf/model/threejs/three",
-                    "vwf/model/threejs/js/loaders/ColladaLoader",
-                    "vwf/model/threejs/js/loaders/gltf/glTF-parser",
-                    "vwf/model/threejs/js/loaders/gltf/glTFLoader",
-                    "vwf/model/threejs/js/loaders/gltf/glTFAnimation",
-                    "vwf/model/threejs/js/loaders/gltf/glTFLoaderUtils",
-                    "vwf/model/threejs/js/stereo/DeviceOrientationControls",
-                    "vwf/model/threejs/js/stereo/OrbitControls",
-                    "vwf/model/threejs/js/stereo/StereoEffect"
-                ], disabledBy: ["vwf/model/glge", "vwf/view/glge"], active: false },
-                { library: "vwf/model/cesium", 
-                    linkedLibraries: ["vwf/model/cesium/Cesium"], 
-                    active: false 
-                },
+
                 { library: "vwf/model/scenejs", active: false },
-                { library: "vwf/model/blockly", 
-                    linkedLibraries: [ "vwf/model/blockly/JS-Interpreter/interpreter.js" ],  
-                    active: false 
-                },
-                { library: "vwf/model/graphtool", active: false },
+
                 { library: "vwf/model/sound", active: false },
                 { library: "vwf/model/object", active: true },
                 { library: "vwf/model/stage/log", active: true },
@@ -413,20 +346,7 @@
                     active: false 
                 },
 
-                
-
                 { library: "vwf/model/aframeComponent", active: true },
-
-
-                { library: "vwf/model/kineticjs", 
-                    linkedLibraries: [ "vwf/model/kinetic/kinetic.min" ], 
-                    active: false 
-                },
-                { library: "vwf/model/mil-sym", 
-                    linkedLibraries: [ "vwf/model/mil-sym/sm-bc.min" ], 
-                    active: false 
-                },
-                { library: "vwf/model/heightmap", active: false },
                 { library: "vwf/model/buzz", 
                     linkedLibraries: ["vwf/model/buzz/buzz.min"], 
                     active: false 
@@ -440,24 +360,14 @@
                 { library: "vwf/view/editor", active: false },
                 { library: "vwf/view/editor-live", active: false },
                 { library: "vwf/view/editor-new", active: false },
-                { library: "vwf/view/glge", 
-                    disabledBy: ["vwf/model/threejs", "vwf/view/threejs"], 
-                    active: false 
-                },
-                { library: "vwf/view/lesson", active: false},
-                { library: "vwf/view/threejs", 
-                    disabledBy: ["vwf/model/glge", "vwf/view/glge"], 
-                    active: false 
-                },
+
                 { library: "vwf/view/webrtc", 
                     linkedLibraries: ["vwf/view/webrtc/adapter"],  
                     active: false 
                 },
-                
-                { library: "vwf/view/blockly", active: false },
+
                 { library: "vwf/view/sound", active: false },
                 { library: "vwf/view/touch", active: false },
-                { library: "vwf/view/cesium", active: false },
 
                 { library: "vwf/view/ohm", active: true },
                 { library: "vwf/view/osc", active: true },
@@ -478,28 +388,11 @@
 
                 { library: "vwf/view/aframeComponent", active: true },
 
-                { library: "vwf/view/kineticjs", active: false },
-                { library: "vwf/view/mil-sym", active: false },
                 { library: "vwf/view/audio", active: false },
                 { library: "vwf/kernel/utility", active: true },
                 { library: "vwf/utility", active: true },
-                { library: "vwf/model/glge/glge-compiled", active: false },
-                { library: "vwf/model/threejs/three", active: false },
-                { library: "vwf/model/threejs/js/loaders/ColladaLoader", active: false },
-                { library: "vwf/model/threejs/js/loaders/gltf/glTF-parser", active: false },
-                { library: "vwf/model/threejs/js/loaders/gltf/glTFLoader", active: false },
-                { library: "vwf/model/threejs/js/loaders/gltf/glTFAnimation", active: false },
-                { library: "vwf/model/threejs/js/loaders/gltf/glTFLoaderUtils", active: false },
-                { library: "vwf/model/threejs/js/stereo/DeviceOrientationControls", active: false },
-                { library: "vwf/model/threejs/js/stereo/OrbitControls", active: false },
-                { library: "vwf/model/threejs/js/stereo/StereoEffect", active: false },
-                { library: "vwf/model/jiglib/jiglib", active: false },
                 { library: "vwf/view/webrtc/adapter", active: false },
-                { library: "vwf/view/google-earth", active: false },
-                { library: "vwf/model/cesium/Cesium", active: false },
-                { library: "vwf/model/blockly/JS-Interpreter/interpreter.js", active: false },
-                { library: "vwf/model/kinetic/kinetic.min", active: false },                
-                { library: "vwf/model/mil-sym/sm-bc.min", active: false }, 
+
                 { library: "vwf/model/buzz/buzz.min", active: false }, 
                 { library: "vwf/model/jPlayer.2.7.1/jquery.jplayer.min", active: false },
                 { library: "vwf/admin", active: true }
@@ -510,12 +403,7 @@
             var initializers = {
                 model: [
                     { library: "vwf/model/javascript", active: true },
-                    { library: "vwf/model/jiglib", active: false },
-                    { library: "vwf/model/glge", active: false },
-                    { library: "vwf/model/threejs", active: false },
-                    { library: "vwf/model/cesium", active: false },
-                    { library: "vwf/model/blockly", active: false },
-                    { library: "vwf/model/graphtool", active: false },
+
                     { library: "vwf/model/sound", active: false },
 
                      { library: "vwf/model/ohm", active: true },
@@ -524,27 +412,17 @@
                      { library: "vwf/model/aframe", active: false },
                      { library: "vwf/model/aframeComponent", active: true },
 
-                    { library: "vwf/model/kineticjs", active: false },
-                    { library: "vwf/model/mil-sym", active: false },
-                    { library: "vwf/model/heightmap", active: false },
                     { library: "vwf/model/buzz", active: false },
                     { library: "vwf/model/jPlayer", active: false },
 
-                   
-
                     { library: "vwf/model/object", active: true }
                 ],
                 view: [
-                    { library: "vwf/view/glge", parameters: {"application-root":"#vwf-root"}, active: false },
-                    { library: "vwf/view/threejs", parameters: {"application-root":"#vwf-root"}, active: false },
                     { library: "vwf/view/document", active: true },
                     { library: "vwf/view/editor", active: false },
                     { library: "vwf/view/editor-live", active: false },
                     { library: "vwf/view/editor-new", active: false },
-                    { library: "vwf/view/lesson", active: false},
-                    { library: "vwf/view/google-earth", active: false },
-                    { library: "vwf/view/cesium", active: false },
-                    { library: "vwf/view/blockly", active: false },
+
                     { library: "vwf/view/sound", active: false },
                     { library: "vwf/view/touch", active: false },
 
@@ -554,8 +432,6 @@
                       { library: "vwf/view/aframe", active: false },
                       { library: "vwf/view/aframeComponent", active: true },
 
-                    { library: "vwf/view/kineticjs", active: false },
-                    { library: "vwf/view/mil-sym", active: false },
                     { library: "vwf/view/audio", active: false },
                     { library: "vwf/view/webrtc", active: false}
 
@@ -657,19 +533,19 @@
 
                 // Load default renderer if no other librarys specified
                 if(Object.keys(userLibraries["model"]).length == 0 && Object.keys(userLibraries["view"]).length == 0) {
-                    requireArray["vwf/model/threejs"].active = true;
-                    requireArray["vwf/view/threejs"].active = true;
-                    requireArray["vwf/model/threejs/three"].active = true;
-                    requireArray["vwf/model/threejs/js/loaders/ColladaLoader"].active = true;
-                    requireArray["vwf/model/threejs/js/loaders/gltf/glTF-parser"].active = true;
-                    requireArray["vwf/model/threejs/js/loaders/gltf/glTFLoader"].active = true;
-                    requireArray["vwf/model/threejs/js/loaders/gltf/glTFAnimation"].active = true;
-                    requireArray["vwf/model/threejs/js/loaders/gltf/glTFLoaderUtils"].active = true;
-                    requireArray["vwf/model/threejs/js/stereo/DeviceOrientationControls"].active = true;
-                    requireArray["vwf/model/threejs/js/stereo/OrbitControls"].active = true;
-                    requireArray["vwf/model/threejs/js/stereo/StereoEffect"].active = true;
-                    initializers["model"]["vwf/model/threejs"].active = true;
-                    initializers["view"]["vwf/view/threejs"].active = true;
+                    // requireArray["vwf/model/threejs"].active = true;
+                    // requireArray["vwf/view/threejs"].active = true;
+                    // requireArray["vwf/model/threejs/three"].active = true;
+                    // requireArray["vwf/model/threejs/js/loaders/ColladaLoader"].active = true;
+                    // requireArray["vwf/model/threejs/js/loaders/gltf/glTF-parser"].active = true;
+                    // requireArray["vwf/model/threejs/js/loaders/gltf/glTFLoader"].active = true;
+                    // requireArray["vwf/model/threejs/js/loaders/gltf/glTFAnimation"].active = true;
+                    // requireArray["vwf/model/threejs/js/loaders/gltf/glTFLoaderUtils"].active = true;
+                    // requireArray["vwf/model/threejs/js/stereo/DeviceOrientationControls"].active = true;
+                    // requireArray["vwf/model/threejs/js/stereo/OrbitControls"].active = true;
+                    // requireArray["vwf/model/threejs/js/stereo/StereoEffect"].active = true;
+                    // initializers["model"]["vwf/model/threejs"].active = true;
+                    // initializers["view"]["vwf/view/threejs"].active = true;
                 }
 
                 require( requireConfig, getActiveLibraries(requireArray, false), function( ready ) {

+ 0 - 226
support/client/lib/vwf/model/aframe/addon/SkyShader.js

@@ -1,226 +0,0 @@
-/**
- * @author zz85 / https://github.com/zz85
- *
- * Based on "A Practical Analytic Model for Daylight"
- * aka The Preetham Model, the de facto standard analytic skydome model
- * http://www.cs.utah.edu/~shirley/papers/sunsky/sunsky.pdf
- *
- * First implemented by Simon Wallner
- * http://www.simonwallner.at/projects/atmospheric-scattering
- *
- * Improved by Martin Upitis
- * http://blenderartists.org/forum/showthread.php?245954-preethams-sky-impementation-HDR
- *
- * Three.js integration by zz85 http://twitter.com/blurspline
-*/
-
-THREE.Sky = function () {
-
-	var skyShader = THREE.Sky.SkyShader;
-
-	var skyUniforms = THREE.UniformsUtils.clone( skyShader.uniforms );
-
-	var skyMat = new THREE.ShaderMaterial( {
-		fragmentShader: skyShader.fragmentShader,
-		vertexShader: skyShader.vertexShader,
-		uniforms: skyUniforms,
-		side: THREE.BackSide
-	} );
-
-	var skyGeo = new THREE.SphereBufferGeometry( 5000, 32, 15 );
-	var skyMesh = new THREE.Mesh( skyGeo, skyMat );
-
-	// Expose variables
-	this.mesh = skyMesh;
-	this.uniforms = skyUniforms;
-
-};
-
-THREE.Sky.SkyShader = {
-
-	uniforms: {
-		luminance: { value: 1 },
-		turbidity: { value: 2 },
-		rayleigh: { value: 1 },
-		mieCoefficient: { value: 0.005 },
-		mieDirectionalG: { value: 0.8 },
-		sunPosition: { value: new THREE.Vector3() }
-	},
-
-	vertexShader: [
-		'uniform vec3 sunPosition;',
-		'uniform float rayleigh;',
-		'uniform float turbidity;',
-		'uniform float mieCoefficient;',
-
-		'varying vec3 vWorldPosition;',
-		'varying vec3 vSunDirection;',
-		'varying float vSunfade;',
-		'varying vec3 vBetaR;',
-		'varying vec3 vBetaM;',
-		'varying float vSunE;',
-
-		'const vec3 up = vec3( 0.0, 1.0, 0.0 );',
-
-		// constants for atmospheric scattering
-		'const float e = 2.71828182845904523536028747135266249775724709369995957;',
-		'const float pi = 3.141592653589793238462643383279502884197169;',
-
-		// wavelength of used primaries, according to preetham
-		'const vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );',
-		// this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:
-		// (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))
-		'const vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );',
-
-		// mie stuff
-		// K coefficient for the primaries
-		'const float v = 4.0;',
-		'const vec3 K = vec3( 0.686, 0.678, 0.666 );',
-		// MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K
-		'const vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );',
-
-		// earth shadow hack
-		// cutoffAngle = pi / 1.95;
-		'const float cutoffAngle = 1.6110731556870734;',
-		'const float steepness = 1.5;',
-		'const float EE = 1000.0;',
-
-		'float sunIntensity( float zenithAngleCos ) {',
-		'	zenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );',
-		'	return EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );',
-		'}',
-
-		'vec3 totalMie( float T ) {',
-		'	float c = ( 0.2 * T ) * 10E-18;',
-		'	return 0.434 * c * MieConst;',
-		'}',
-
-		'void main() {',
-
-		'	vec4 worldPosition = modelMatrix * vec4( position, 1.0 );',
-		'	vWorldPosition = worldPosition.xyz;',
-
-		'	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',
-
-		'	vSunDirection = normalize( sunPosition );',
-
-		'	vSunE = sunIntensity( dot( vSunDirection, up ) );',
-
-		'	vSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );',
-
-		'	float rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );',
-
-		// extinction (absorbtion + out scattering)
-		// rayleigh coefficients
-		'	vBetaR = totalRayleigh * rayleighCoefficient;',
-
-		// mie coefficients
-		'	vBetaM = totalMie( turbidity ) * mieCoefficient;',
-
-		'}'
-	].join( '\n' ),
-
-	fragmentShader: [
-		'varying vec3 vWorldPosition;',
-		'varying vec3 vSunDirection;',
-		'varying float vSunfade;',
-		'varying vec3 vBetaR;',
-		'varying vec3 vBetaM;',
-		'varying float vSunE;',
-
-		'uniform float luminance;',
-		'uniform float mieDirectionalG;',
-
-		'const vec3 cameraPos = vec3( 0.0, 0.0, 0.0 );',
-
-		// constants for atmospheric scattering
-		'const float pi = 3.141592653589793238462643383279502884197169;',
-
-		'const float n = 1.0003;', // refractive index of air
-		'const float N = 2.545E25;', // number of molecules per unit volume for air at
-									// 288.15K and 1013mb (sea level -45 celsius)
-
-		// optical length at zenith for molecules
-		'const float rayleighZenithLength = 8.4E3;',
-		'const float mieZenithLength = 1.25E3;',
-		'const vec3 up = vec3( 0.0, 1.0, 0.0 );',
-		// 66 arc seconds -> degrees, and the cosine of that
-		'const float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;',
-
-		// 3.0 / ( 16.0 * pi )
-		'const float THREE_OVER_SIXTEENPI = 0.05968310365946075;',
-		// 1.0 / ( 4.0 * pi )
-		'const float ONE_OVER_FOURPI = 0.07957747154594767;',
-
-		'float rayleighPhase( float cosTheta ) {',
-		'	return THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );',
-		'}',
-
-		'float hgPhase( float cosTheta, float g ) {',
-		'	float g2 = pow( g, 2.0 );',
-		'	float inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );',
-		'	return ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );',
-		'}',
-
-		// Filmic ToneMapping http://filmicgames.com/archives/75
-		'const float A = 0.15;',
-		'const float B = 0.50;',
-		'const float C = 0.10;',
-		'const float D = 0.20;',
-		'const float E = 0.02;',
-		'const float F = 0.30;',
-
-		'const float whiteScale = 1.0748724675633854;', // 1.0 / Uncharted2Tonemap(1000.0)
-
-		'vec3 Uncharted2Tonemap( vec3 x ) {',
-		'	return ( ( x * ( A * x + C * B ) + D * E ) / ( x * ( A * x + B ) + D * F ) ) - E / F;',
-		'}',
-
-
-		'void main() {',
-		// optical length
-		// cutoff angle at 90 to avoid singularity in next formula.
-		'	float zenithAngle = acos( max( 0.0, dot( up, normalize( vWorldPosition - cameraPos ) ) ) );',
-		'	float inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );',
-		'	float sR = rayleighZenithLength * inverse;',
-		'	float sM = mieZenithLength * inverse;',
-
-		// combined extinction factor
-		'	vec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );',
-
-		// in scattering
-		'	float cosTheta = dot( normalize( vWorldPosition - cameraPos ), vSunDirection );',
-
-		'	float rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );',
-		'	vec3 betaRTheta = vBetaR * rPhase;',
-
-		'	float mPhase = hgPhase( cosTheta, mieDirectionalG );',
-		'	vec3 betaMTheta = vBetaM * mPhase;',
-
-		'	vec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );',
-		'	Lin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );',
-
-		// nightsky
-		'	vec3 direction = normalize( vWorldPosition - cameraPos );',
-		'	float theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2]',
-		'	float phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2]',
-		'	vec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );',
-		'	vec3 L0 = vec3( 0.1 ) * Fex;',
-
-		// composition + solar disc
-		'	float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );',
-		'	L0 += ( vSunE * 19000.0 * Fex ) * sundisk;',
-
-		'	vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );',
-
-		'	vec3 curr = Uncharted2Tonemap( ( log2( 2.0 / pow( luminance, 4.0 ) ) ) * texColor );',
-		'	vec3 color = curr * whiteScale;',
-
-		'	vec3 retColor = pow( color, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );',
-
-		'	gl_FragColor = vec4( retColor, 1.0 );',
-
-		'}'
-	].join( '\n' )
-
-};

+ 0 - 472
support/client/lib/vwf/model/aframe/addon/aframe-gamepad-controls.js

@@ -1,472 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-
-
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ function(module, exports, __webpack_require__) {
-
-	
-	// Browser distrubution of the A-Frame component.
-	(function (AFRAME) {
-	  if (!AFRAME) {
-	    console.error('Component attempted to register before AFRAME was available.');
-	    return;
-	  }
-
-	  (AFRAME.aframeCore || AFRAME).registerComponent('gamepad-controls', __webpack_require__(1));
-
-	}(window.AFRAME));
-
-
-/***/ },
-/* 1 */
-/***/ function(module, exports, __webpack_require__) {
-
-	/**
-	 * Gamepad controls for A-Frame.
-	 *
-	 * For more information about the Gamepad API, see:
-	 * https://developer.mozilla.org/en-US/docs/Web/API/Gamepad_API/Using_the_Gamepad_API
-	 */
-
-	var GamepadButton = __webpack_require__(2),
-	    GamepadButtonEvent = __webpack_require__(3);
-
-	var MAX_DELTA = 200, // ms
-	    PI_2 = Math.PI / 2;
-
-	var JOYSTICK_EPS = 0.2;
-
-	module.exports = {
-
-	  /*******************************************************************
-	   * Statics
-	   */
-
-	  GamepadButton: GamepadButton,
-
-	  /*******************************************************************
-	   * Schema
-	   */
-
-	  schema: {
-	    // Controller 0-3
-	    controller:        { default: 0, oneOf: [0, 1, 2, 3] },
-
-	    // Enable/disable features
-	    enabled:           { default: true },
-	    movementEnabled:   { default: true },
-	    lookEnabled:       { default: true },
-	    flyEnabled:        { default: false },
-	    invertAxisY:       { default: false },
-
-	    // Constants
-	    easing:            { default: 20 },
-	    acceleration:      { default: 65 },
-	    sensitivity:       { default: 0.04 },
-
-	    // Control axes
-	    pitchAxis:         { default: 'x', oneOf: [ 'x', 'y', 'z' ] },
-	    yawAxis:           { default: 'y', oneOf: [ 'x', 'y', 'z' ] },
-	    rollAxis:          { default: 'z', oneOf: [ 'x', 'y', 'z' ] },
-
-	    // Debugging
-	    debug:             { default: false }
-	  },
-
-	  /*******************************************************************
-	   * Core
-	   */
-
-	  /**
-	   * Called once when component is attached. Generally for initial setup.
-	   */
-	  init: function () {
-	    // Movement
-	    this.velocity = new THREE.Vector3(0, 0, 0);
-	    this.direction = new THREE.Vector3(0, 0, 0);
-
-	    // Rotation
-	    this.pitch = new THREE.Object3D();
-	    this.yaw = new THREE.Object3D();
-	    this.yaw.position.y = 10;
-	    this.yaw.add(this.pitch);
-
-	    // Button state
-	    this.buttons = {};
-
-	    if (!this.getGamepad()) {
-	      console.warn(
-	        'Gamepad #%d not found. Connect controller and press any button to continue.',
-	        this.data.controller
-	      );
-	    }
-	  },
-
-	  /**
-	   * Called on each iteration of main render loop.
-	   */
-	  tick: function (t, dt) {
-	    this.updateRotation(dt);
-	    this.updatePosition(dt);
-	    this.updateButtonState();
-	  },
-
-	  /*******************************************************************
-	   * Movement
-	   */
-
-	  updatePosition: function (dt) {
-	    var data = this.data;
-	    var acceleration = data.acceleration;
-	    var easing = data.easing;
-	    var velocity = this.velocity;
-	    var rollAxis = data.rollAxis;
-	    var pitchAxis = data.pitchAxis;
-	    var el = this.el;
-	    var gamepad = this.getGamepad();
-
-	    // If data has changed or FPS is too low
-	    // we reset the velocity
-	    if (dt > MAX_DELTA) {
-	      velocity[rollAxis] = 0;
-	      velocity[pitchAxis] = 0;
-	      return;
-	    }
-
-	    velocity[rollAxis] -= velocity[rollAxis] * easing * dt / 1000;
-	    velocity[pitchAxis] -= velocity[pitchAxis] * easing * dt / 1000;
-
-	    var position = el.getAttribute('position');
-
-	    if (data.enabled && data.movementEnabled && gamepad) {
-	      var dpad = this.getDpad(),
-	          inputX = dpad.x || this.getJoystick(0).x,
-	          inputY = dpad.y || this.getJoystick(0).y;
-	      if (Math.abs(inputX) > JOYSTICK_EPS) {
-	        velocity[pitchAxis] += inputX * acceleration * dt / 1000;
-	      }
-	      if (Math.abs(inputY) > JOYSTICK_EPS) {
-	        velocity[rollAxis] += inputY * acceleration * dt / 1000;
-	      }
-	    }
-
-	    var movementVector = this.getMovementVector(dt);
-
-	    el.object3D.translateX(movementVector.x);
-	    el.object3D.translateY(movementVector.y);
-	    el.object3D.translateZ(movementVector.z);
-
-	    el.setAttribute('position', {
-	      x: position.x + movementVector.x,
-	      y: position.y + movementVector.y,
-	      z: position.z + movementVector.z
-	    });
-	  },
-
-	  getMovementVector: function (dt) {
-	    if (this._getMovementVector) {
-	      return this._getMovementVector(dt);
-	    }
-
-	    var euler = new THREE.Euler(0, 0, 0, 'YXZ'),
-	        rotation = new THREE.Vector3();
-
-	    this._getMovementVector = function (dt) {
-	      rotation.copy(this.el.getAttribute('rotation'));
-	      this.direction.copy(this.velocity);
-	      this.direction.multiplyScalar(dt / 1000);
-	      if (!rotation) { return this.direction; }
-	      if (!this.data.flyEnabled) { rotation.x = 0; }
-	      euler.set(
-	        THREE.Math.degToRad(rotation.x),
-	        THREE.Math.degToRad(rotation.y),
-	        0
-	      );
-	      this.direction.applyEuler(euler);
-	      return this.direction;
-	    };
-
-	    return this._getMovementVector(dt);
-	  },
-
-	  /*******************************************************************
-	   * Rotation
-	   */
-
-	  updateRotation: function () {
-	    if (this._updateRotation) {
-	      return this._updateRotation();
-	    }
-
-	    var initialRotation = new THREE.Vector3(),
-	        prevInitialRotation = new THREE.Vector3(),
-	        prevFinalRotation = new THREE.Vector3();
-
-	    var tCurrent,
-	        tLastLocalActivity = 0,
-	        tLastExternalActivity = 0;
-
-	    var ROTATION_EPS = 0.0001,
-	        DEBOUNCE = 500;
-
-	    this._updateRotation = function () {
-	      if (!this.data.lookEnabled || !this.getGamepad()) {
-	        return;
-	      }
-
-	      tCurrent = Date.now();
-	      initialRotation.copy(this.el.getAttribute('rotation') || initialRotation);
-
-	      // If initial rotation for this frame is different from last frame, and
-	      // doesn't match last gamepad state, assume an external component is
-	      // active on this element.
-	      if (initialRotation.distanceToSquared(prevInitialRotation) > ROTATION_EPS
-	          && initialRotation.distanceToSquared(prevFinalRotation) > ROTATION_EPS) {
-	        prevInitialRotation.copy(initialRotation);
-	        tLastExternalActivity = tCurrent;
-	        return;
-	      }
-
-	      prevInitialRotation.copy(initialRotation);
-
-	      // If external controls have been active in last 500ms, wait.
-	      if (tCurrent - tLastExternalActivity < DEBOUNCE) {
-	        return;
-	      }
-
-	      var lookVector = this.getJoystick(1);
-	      if (Math.abs(lookVector.x) <= JOYSTICK_EPS) lookVector.x = 0;
-	      if (Math.abs(lookVector.y) <= JOYSTICK_EPS) lookVector.y = 0;
-	      if (this.data.invertAxisY) lookVector.y = -lookVector.y;
-
-	      // If external controls have been active more recently than gamepad,
-	      // and gamepad hasn't moved, don't overwrite the existing rotation.
-	      if (tLastExternalActivity > tLastLocalActivity && !lookVector.lengthSq()) {
-	        return;
-	      }
-
-	      lookVector.multiplyScalar(this.data.sensitivity);
-	      this.yaw.rotation.y -= lookVector.x;
-	      this.pitch.rotation.x -= lookVector.y;
-	      this.pitch.rotation.x = Math.max(-PI_2, Math.min(PI_2, this.pitch.rotation.x));
-
-	      this.el.setAttribute('rotation', {
-	        x: THREE.Math.radToDeg(this.pitch.rotation.x),
-	        y: THREE.Math.radToDeg(this.yaw.rotation.y),
-	        z: 0
-	      });
-	      prevFinalRotation.copy(this.el.getAttribute('rotation'));
-	      tLastLocalActivity = tCurrent;
-	    };
-
-	    return this._updateRotation();
-	  },
-
-	  /*******************************************************************
-	   * Button events
-	   */
-
-	  updateButtonState: function () {
-	    var gamepad = this.getGamepad();
-	    if (this.data.enabled && gamepad) {
-
-	      // Fire DOM events for button state changes.
-	      for (var i = 0; i < gamepad.buttons.length; i++) {
-	        if (gamepad.buttons[i].pressed && !this.buttons[i]) {
-	          this.emit(new GamepadButtonEvent('gamepadbuttondown', i, gamepad.buttons[i]));
-	        } else if (!gamepad.buttons[i].pressed && this.buttons[i]) {
-	          this.emit(new GamepadButtonEvent('gamepadbuttonup', i, gamepad.buttons[i]));
-	        }
-	        this.buttons[i] = gamepad.buttons[i].pressed;
-	      }
-
-	    } else if (Object.keys(this.buttons)) {
-	      // Reset state if controls are disabled or controller is lost.
-	      this.buttons = {};
-	    }
-	  },
-
-	  emit: function (event) {
-	    // Emit original event.
-	    this.el.emit(event.type, event);
-
-	    // Emit convenience event, identifying button index.
-	    this.el.emit(
-	      event.type + ':' + event.index,
-	      new GamepadButtonEvent(event.type, event.index, event)
-	    );
-	  },
-
-	  /*******************************************************************
-	   * Gamepad state
-	   */
-
-	  /**
-	   * Returns the Gamepad instance attached to the component. If connected,
-	   * a proxy-controls component may provide access to Gamepad input from a
-	   * remote device.
-	   *
-	   * @return {Gamepad}
-	   */
-	  getGamepad: function () {
-	    var localGamepad = navigator.getGamepads
-	          && navigator.getGamepads()[this.data.controller],
-	        proxyControls = this.el.sceneEl.components['proxy-controls'],
-	        proxyGamepad = proxyControls && proxyControls.isConnected()
-	          && proxyControls.getGamepad(this.data.controller);
-	    return proxyGamepad || localGamepad;
-	  },
-
-	  /**
-	   * Returns the state of the given button.
-	   * @param  {number} index The button (0-N) for which to find state.
-	   * @return {GamepadButton}
-	   */
-	  getButton: function (index) {
-	    return this.getGamepad().buttons[index];
-	  },
-
-	  /**
-	   * Returns state of the given axis. Axes are labelled 0-N, where 0-1 will
-	   * represent X/Y on the first joystick, and 2-3 X/Y on the second.
-	   * @param  {number} index The axis (0-N) for which to find state.
-	   * @return {number} On the interval [-1,1].
-	   */
-	  getAxis: function (index) {
-	    return this.getGamepad().axes[index];
-	  },
-
-	  /**
-	   * Returns the state of the given joystick (0 or 1) as a THREE.Vector2.
-	   * @param  {number} id The joystick (0, 1) for which to find state.
-	   * @return {THREE.Vector2}
-	   */
-	  getJoystick: function (index) {
-	    var gamepad = this.getGamepad();
-	    switch (index) {
-	      case 0: return new THREE.Vector2(gamepad.axes[0], gamepad.axes[1]);
-	      case 1: return new THREE.Vector2(gamepad.axes[2], gamepad.axes[3]);
-	      default: throw new Error('Unexpected joystick index "%d".', index);
-	    }
-	  },
-
-	  /**
-	   * Returns the state of the dpad as a THREE.Vector2.
-	   * @return {THREE.Vector2}
-	   */
-	  getDpad: function () {
-	    var gamepad = this.getGamepad();
-	    if (!gamepad.buttons[GamepadButton.DPAD_RIGHT]) {
-	      return new THREE.Vector2();
-	    }
-	    return new THREE.Vector2(
-	      (gamepad.buttons[GamepadButton.DPAD_RIGHT].pressed ? 1 : 0)
-	      + (gamepad.buttons[GamepadButton.DPAD_LEFT].pressed ? -1 : 0),
-	      (gamepad.buttons[GamepadButton.DPAD_UP].pressed ? -1 : 0)
-	      + (gamepad.buttons[GamepadButton.DPAD_DOWN].pressed ? 1 : 0)
-	    );
-	  },
-
-	  /**
-	   * Returns true if the gamepad is currently connected to the system.
-	   * @return {boolean}
-	   */
-	  isConnected: function () {
-	    var gamepad = this.getGamepad();
-	    return !!(gamepad && gamepad.connected);
-	  },
-
-	  /**
-	   * Returns a string containing some information about the controller. Result
-	   * may vary across browsers, for a given controller.
-	   * @return {string}
-	   */
-	  getID: function () {
-	    return this.getGamepad().id;
-	  }
-	};
-
-
-/***/ },
-/* 2 */
-/***/ function(module, exports) {
-
-	module.exports = Object.assign(function GamepadButton () {}, {
-		FACE_1: 0,
-		FACE_2: 1,
-		FACE_3: 2,
-		FACE_4: 3,
-
-		L_SHOULDER_1: 4,
-		R_SHOULDER_1: 5,
-		L_SHOULDER_2: 6,
-		R_SHOULDER_2: 7,
-
-		SELECT: 8,
-		START: 9,
-
-		DPAD_UP: 12,
-		DPAD_DOWN: 13,
-		DPAD_LEFT: 14,
-		DPAD_RIGHT: 15,
-
-		VENDOR: 16,
-	});
-
-
-/***/ },
-/* 3 */
-/***/ function(module, exports) {
-
-	function GamepadButtonEvent (type, index, details) {
-	  this.type = type;
-	  this.index = index;
-	  this.pressed = details.pressed;
-	  this.value = details.value;
-	}
-
-	module.exports = GamepadButtonEvent;
-
-
-/***/ }
-/******/ ]);

File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/aframe/addon/aframe-gamepad-controls.min.js


+ 0 - 190
support/client/lib/vwf/model/aframe/addon/aframe-interpolation 2.js

@@ -1,190 +0,0 @@
-/* Interpolate component for A-Frame VR. https://github.com/scenevr/aframe-interpolate-component.git
-
-The MIT License (MIT)
-
-Copyright (c) 2015 Kevin Ngo
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-
-/* globals AFRAME, performance, THREE */
-
-if (typeof AFRAME === 'undefined') {
-  throw new Error('Component attempted to register before AFRAME was available.');
-}
-
-function getMillis () {
-  return new Date().getTime();
-}
-
-function PositionInterpolator (timestep, entity) {
-  var time = getMillis();
-  var previous;
-  var next;
-
-  entity.el.addEventListener('componentchanged', function (event) {
-    if (getTime() < 0.5) {
-      // fixme - ignore multiple calls
-      return;
-    }
-
-    if (event.detail.name === 'position') {
-      if (!previous) {
-        previous = new THREE.Vector3();
-        next = new THREE.Vector3();
-      }
-
-      time = getMillis();
-      previous.copy(next);
-      next.copy(event.detail.newData);
-    }
-  });
-
-  function getTime () {
-    return (getMillis() - time) / timestep;
-  }
-
-  this.active = function () {
-    return previous && next && (getTime() < 1);
-  };
-
-  var v = new THREE.Vector3();
-
-  this.get = function () {
-    return v.lerpVectors(previous, next, getTime());
-  };
-}
-
-function radians(degrees) {
- // return degrees * Math.PI / 180.0;
- return THREE.Math.degToRad(degrees)
-}
-
-function RotationInterpolator (timestep, entity) {
-  var time = getMillis();
-  var previous;
-  var next;
-
-  entity.el.addEventListener('componentchanged', function (event) {
-    if (getTime() < 0.5) {
-      // fixme - ignore multiple calls
-      return;
-    }
-
-    if (event.detail.name === 'rotation') {
-      if (!previous) {
-        previous = new THREE.Quaternion();
-        next = new THREE.Quaternion();
-      }
-
-      time = getMillis();
-      previous.copy(next);
-      next.setFromEuler(new THREE.Euler(
-        radians(event.detail.newData.x),
-        radians(event.detail.newData.y),
-        radians(event.detail.newData.z),'YXZ'
-      ));
-    }
-  });
-
-  // var data = this.data;
-  // var object3D = this.el.object3D;
-  // object3D.rotation.set(degToRad(data.x), degToRad(data.y), degToRad(data.z));
-  // object3D.rotation.order = 'YXZ';
-
-
-
-  function getTime () {
-    return (getMillis() - time) / timestep;
-  }
-
-  this.active = function () {
-    return previous && next && (getTime() < 1);
-  };
-
-  var e = new THREE.Euler();
-  var q = new THREE.Quaternion();
-  this.get = function () {
-    THREE.Quaternion.slerp(previous, next, q, getTime());
-    return e.setFromQuaternion(q);
-  };
-}
-
-/**
- * Interpolate component for A-Frame.
- */
-AFRAME.registerComponent('interpolation-old', {
-  schema: {
-    duration: { default: 50 }
-  },
-
-  /**
-   * Called once when component is attached. Generally for initial setup.
-   */
-  init: function () {
-
-       // Set up the tick throttling.
-       this.tick = AFRAME.utils.throttleTick(this.throttledTick, 10, this);
-
-  },
-
-  /**
-   * Called when component is attached and when component data changes.
-   * Generally modifies the entity based on the data.
-   */
-  update: function (oldData) {
-    if (!this.interpolation) {
-      var timestep = parseInt(this.data.duration, 10);
-
-      this.positionInterpolator = new PositionInterpolator(timestep, this);
-      this.rotationInterpolator = new RotationInterpolator(timestep, this);
-    }
-  },
-
-  /**
-   * Called when a component is removed (e.g., via removeAttribute).
-   * Generally undoes all modifications to the entity.
-   */
-  remove: function () { },
-
-  /**
-   * Called on each scene tick.
-   */
-  throttledTick: function (t, dt) {
-    if (this.positionInterpolator && this.positionInterpolator.active()) {
-      this.el.object3D.position.copy(this.positionInterpolator.get());
-    }
-
-    if (this.rotationInterpolator && this.rotationInterpolator.active()) {
-      this.el.object3D.rotation.copy(this.rotationInterpolator.get());
-    }
-  },
-
-  /**
-   * Called when entity pauses.
-   * Use to stop or remove any dynamic or background behavior such as events.
-   */
-  pause: function () { },
-
-  /**
-   * Called when entity resumes.
-   * Use to continue or add any dynamic or background behavior such as events.
-   */
-  play: function () { },
-});

+ 0 - 237
support/client/lib/vwf/model/aframe/addon/aframe-lerp-component.js

@@ -1,237 +0,0 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ 	// The module cache
-/******/ 	var installedModules = {};
-
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-
-/******/ 		// Check if module is in cache
-/******/ 		if(installedModules[moduleId])
-/******/ 			return installedModules[moduleId].exports;
-
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = installedModules[moduleId] = {
-/******/ 			exports: {},
-/******/ 			id: moduleId,
-/******/ 			loaded: false
-/******/ 		};
-
-/******/ 		// Execute the module function
-/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-
-
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = modules;
-
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = installedModules;
-
-/******/ 	// __webpack_public_path__
-/******/ 	__webpack_require__.p = "";
-
-/******/ 	// Load entry module and return exports
-/******/ 	return __webpack_require__(0);
-/******/ })
-/************************************************************************/
-/******/ ([
-/* 0 */
-/***/ (function(module, exports, __webpack_require__) {
-
-	/* global AFRAME THREE */
-
-	if (typeof AFRAME === 'undefined') {
-	  throw new Error('Component attempted to register before AFRAME was available.');
-	}
-
-	var degToRad = THREE.Math.degToRad;
-	var almostEqual = __webpack_require__(1);
-	/**
-	 * Linear Interpolation component for A-Frame.
-	 */
-	AFRAME.registerComponent('lerp', {
-	  schema: {
-	    properties: { default: ['position', 'rotation', 'scale']},
-	  },
-
-	  /**
-	   * Called once when component is attached. Generally for initial setup.
-	   */
-	  init: function () {
-	    var el = this.el;
-	    this.lastPosition = el.getAttribute('position');
-	    this.lastRotation = el.getAttribute('rotation');
-	    this.lastScale = el.getAttribute('scale');
-
-	    this.lerpingPosition = false;
-	    this.lerpingRotation = false;
-	    this.lerpingScale = false;
-
-	    this.timeOfLastUpdate = 0;
-	  },
-
-	  /**
-	   * Called on each scene tick.
-	   */
-	  tick: function (time, deltaTime) {
-	    var progress;
-	    var now = this.now();
-	    var obj3d = this.el.object3D;
-
-	    this.checkForComponentChanged();
-
-	    // Lerp position
-	    if (this.lerpingPosition) {
-	      progress = (now - this.startLerpTimePosition) / this.duration;
-	      obj3d.position.lerpVectors(this.startPosition, this.targetPosition, progress);
-	      // console.log("new position", obj3d.position);
-	      if (progress >= 1) {
-	        this.lerpingPosition = false;
-	      }
-	    }
-
-	    // Slerp rotation
-	    if (this.lerpingRotation) {
-	      progress = (now - this.startLerpTimeRotation) / this.duration;
-	      THREE.Quaternion.slerp(this.startRotation, this.targetRotation, obj3d.quaternion, progress);
-	      if (progress >= 1) {
-	        this.lerpingRotation = false;
-	      }
-	    }
-
-	    // Lerp scale
-	    if (this.lerpingScale) {
-	      progress = (now - this.startLerpTimeScale) / this.duration;
-	      obj3d.scale.lerpVectors(this.startScale, this.targetScale, progress);
-	      if (progress >= 1) {
-	        this.lerpingScale = false;
-	      }
-	    }
-	  },
-
-	  checkForComponentChanged: function() {
-	    var el = this.el;
-
-	    var hasChanged = false;
-
-	    var newPosition = el.getAttribute('position');
-	    if (this.isLerpable('position') && !this.almostEqualVec3(this.lastPosition, newPosition)) {
-	      this.toPosition(this.lastPosition, newPosition);
-	      this.lastPosition = newPosition;
-	      hasChanged = true;
-	    }
-
-	    var newRotation = el.getAttribute('rotation');
-	    if (this.isLerpable('rotation') && !this.almostEqualVec3(this.lastRotation, newRotation)) {
-	      this.toRotation(this.lastRotation, newRotation);
-	      this.lastRotation = newRotation;
-	      hasChanged = true;
-	    }
-
-	    var newScale = el.getAttribute('scale');
-	    if (this.isLerpable('scale') && !this.almostEqualVec3(this.lastScale, newScale)) {
-	      this.toScale(this.lastScale, newScale);
-	      this.lastScale = newScale;
-	      hasChanged = true;
-	    }
-
-	    if (hasChanged) {
-	      this.updateDuration();
-	    }
-	  },
-
-	  isLerpable: function(name) {
-	    return this.data.properties.indexOf(name) != -1
-	  },
-
-	  updateDuration: function() {
-	    var now = this.now();
-	    this.duration = now - this.timeOfLastUpdate;
-	    this.timeOfLastUpdate = now;
-	  },
-
-	  /**
-	   * Start lerp to position (vec3)
-	   */
-	  toPosition: function (from, to) {
-	    this.lerpingPosition = true;
-	    this.startLerpTimePosition = this.now();
-	    this.startPosition = new THREE.Vector3(from.x, from.y, from.z);
-	    this.targetPosition = new THREE.Vector3(to.x, to.y, to.z);
-	  },
-
-	  /**
-	   * Start lerp to euler rotation (vec3,'YXZ')
-	   */
-	  toRotation: function (from, to) {
-	    this.lerpingRotation = true;
-	    this.startLerpTimeRotation = this.now();
-	    this.startRotation = new THREE.Quaternion();
-	    this.startRotation.setFromEuler(
-	        new THREE.Euler(degToRad(from.x), degToRad(from.y), degToRad(from.z), 'YXZ'));
-	    this.targetRotation = new THREE.Quaternion();
-	    this.targetRotation.setFromEuler(
-	        new THREE.Euler(degToRad(to.x), degToRad(to.y), degToRad(to.z), 'YXZ'));
-	  },
-
-	  /**
-	   * Start lerp to scale (vec3)
-	   */
-	  toScale: function (from, to) {
-	    this.lerpingScale = true;
-	    this.startLerpTimeScale = this.now();
-	    this.startScale = new THREE.Vector3(from.x, from.y, from.z);
-	    this.targetScale = new THREE.Vector3(to.x, to.y, to.z);
-	  },
-
-	  almostEqualVec3: function(a, b) {
-	    return almostEqual(a.x, b.x) && almostEqual(a.y, b.y) && almostEqual(a.z, b.z);
-	  },
-
-	  /**
-	   * Returns the current time in milliseconds (ms)
-	   */
-	  now: function() {
-	    return Date.now();
-	  }
-	});
-
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports) {
-
-	"use strict"
-
-	var abs = Math.abs
-	  , min = Math.min
-
-	function almostEqual(a, b, absoluteError, relativeError) {
-	  var d = abs(a - b)
-	  
-	  if (absoluteError == null) absoluteError = almostEqual.DBL_EPSILON;
-	  if (relativeError == null) relativeError = absoluteError;
-	  
-	  if(d <= absoluteError) {
-	    return true
-	  }
-	  if(d <= relativeError * min(abs(a), abs(b))) {
-	    return true
-	  }
-	  return a === b
-	}
-
-	almostEqual.FLT_EPSILON = 1.19209290e-7
-	almostEqual.DBL_EPSILON = 2.2204460492503131e-16
-
-	module.exports = almostEqual
-
-
-/***/ })
-/******/ ]);

File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/aframe/addon/aframe-lerp-component.min.js


File diff suppressed because it is too large
+ 0 - 3115
support/client/lib/vwf/model/aframe/v0.5.0/aframe-v0.5.0.js


File diff suppressed because it is too large
+ 0 - 8
support/client/lib/vwf/model/aframe/v0.5.0/aframe-v0.5.0.min.js


File diff suppressed because it is too large
+ 0 - 3309
support/client/lib/vwf/model/aframe/v0.6.1/aframe-master.js


File diff suppressed because it is too large
+ 0 - 213
support/client/lib/vwf/model/aframe/v0.6.1/aframe-master.js.map


File diff suppressed because it is too large
+ 0 - 2
support/client/lib/vwf/model/aframe/v0.6.1/aframe-master.min.js


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/aframe/v0.6.1/aframe-master.min.js.map


+ 0 - 543
support/client/lib/vwf/model/blockly.js

@@ -1,543 +0,0 @@
-// Copyright 2012 United States Government, as represented by the Secretary of Defense, Under
-// Secretary of Defense (Personnel & Readiness).
-// 
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
-// in compliance with the License. You may obtain a copy of the License at
-// 
-//   http://www.apache.org/licenses/LICENSE-2.0
-// 
-// Unless required by applicable law or agreed to in writing, software distributed under the License
-// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-// or implied. See the License for the specific language governing permissions and limitations under
-// the License.
-
-/// vwf/model/blockly.js is the driver for the Google blockly visual programming language.
-/// 
-/// @module vwf/model/blockly
-/// @requires vwf/model ... and others
-
-define( [ "module", "vwf/model", "vwf/utility",
-          "vwf/model/blockly/JS-Interpreter/acorn", 
-          "vwf/model/blockly/blockly_compressed", "vwf/model/blockly/blocks_compressed", 
-          "vwf/model/blockly/javascript_compressed", "vwf/model/blockly/msg/js/en"
-        ], 
-        function( module, model, utility, acorn, Blockly ) {
-
-    var self;
-
-    return model.load( module, {
-
-        // == Module Definition ====================================================================
-
-        // -- initialize ---------------------------------------------------------------------------
-
-        initialize: function( options ) {
-
-            self = this;
-
-            this.arguments = Array.prototype.slice.call( arguments );
-
-            if ( options === undefined ) { 
-                options = {}; 
-            }
-
-            this.state = {
-                "nodes": {},
-                "scenes": {},
-                "prototypes": {},
-                "blockly": { "node": undefined },
-                "executingBlocks": {},
-                "executionHalted": false,
-                "createNode": function( nodeID, childID, childExtendsID, childImplementsIDs,
-                                childSource, childType, childIndex, childName, callback ) {
-                    return {
-                        "parentID": nodeID,
-                        "ID": childID,
-                        "extendsID": childExtendsID,
-                        "implementsIDs": childImplementsIDs,
-                        "source": childSource,
-                        "type": childType,
-                        "name": childName,
-                        "blocks": "<xml></xml>",
-                        "toolbox": undefined,
-                        "defaultXml": undefined,
-                        "code": undefined,
-                        "lastLineExeTime": undefined,
-                        "timeBetweenLines": 1,
-                        "interpreter": undefined,
-                        "interpreterStatus": ""
-                    };
-                }
-            };
-
-            // turns on logger debugger console messages 
-            this.debug = {
-                "creation": false,
-                "initializing": false,
-                "parenting": false,
-                "deleting": false,
-                "properties": false,
-                "setting": false,
-                "getting": false,
-                "methods": false,
-                "prototypes": false
-            };
-
-            // interpreter documentation
-            // https://neil.fraser.name/software/JS-Interpreter/docs.html
-
-        },
-
-        creatingNode: function( nodeID, childID, childExtendsID, childImplementsIDs,
-                                childSource, childType, childIndex, childName, callback ) {
-
-            // If the parent nodeID is 0, this node is attached directly to the root and is therefore either 
-            // the scene or a prototype.  In either of those cases, save the uri of the new node
-            var childURI = ( nodeID === 0 ? childIndex : undefined );
-            var appID = this.kernel.application();
-
-            if ( this.debug.creation ) {
-                this.logger.infox( "creatingNode", nodeID, childID, childExtendsID, childImplementsIDs, childSource, childType, childName );
-            }
-
-            // If the node being created is a prototype, construct it and add it to the array of prototypes,
-            // and then return
-            var prototypeID = utility.ifPrototypeGetId( appID, this.state.prototypes, nodeID, childID );
-            if ( prototypeID !== undefined ) {
-                
-                if ( this.debug.prototypes ) {
-                    this.logger.infox( "prototype: ", prototypeID );
-                }
-
-                this.state.prototypes[ prototypeID ] = {
-                    parentID: nodeID,
-                    ID: childID,
-                    extendsID: childExtendsID,
-                    implementsID: childImplementsIDs,
-                    source: childSource, 
-                    type: childType,
-                    uri: childURI,
-                    name: childName
-                };
-                return;                
-            }
-
-            var node = this.state.nodes[ childID ];
-            if ( node === undefined && isBlockly3Node( childID ) ) {
-                this.state.nodes[ childID ] = node = this.state.createNode( nodeID, childID, childExtendsID, childImplementsIDs,
-                                childSource, childType, childIndex, childName, callback );
-            }
-
-
-        },
-
-        initializingNode: function( nodeID, childID, childExtendsID, childImplementsIDs,
-            childSource, childType, childIndex, childName ) {
-
-            if ( this.debug.initializing ) {
-                this.logger.infox( "initializingNode", nodeID, childID, childExtendsID, childImplementsIDs, childSource, childType, childName );
-            } 
-
-
-        },
-
-        deletingNode: function( nodeID ) {
-            
-            if ( this.debug.deleting ) {
-                this.logger.infox( "deletingNode", nodeID );
-            }
-
-            if ( this.state.nodes[ nodeID ] !== undefined ) {
-                delete this.state.nodes[ nodeID ];
-            }
-            
-        },
-
-        addingChild: function( nodeID, childID, childName ) {
-            if ( this.debug.parenting ) {
-                this.logger.infox( "addingChild", nodeID, childID, childName );
-            }
-        },
-
-        movingChild: function( nodeID, childID, childName ) {
-            if ( this.debug.parenting ) {
-                this.logger.infox( "movingChild", nodeID, childID, childName );
-            }
-        },
-
-        removingChild: function( nodeID, childID, childName ) {
-            if ( this.debug.parenting ) {
-                this.logger.infox( "removingChild", nodeID, childID, childName );
-            }
-        },
-
-        // -- creatingProperty ---------------------------------------------------------------------
-
-        creatingProperty: function( nodeID, propertyName, propertyValue ) {
-
-            var value = undefined;
-
-            if ( this.debug.properties ) {
-                this.logger.infox( "C === creatingProperty ", nodeID, propertyName, propertyValue );
-            }
-
-            var node = this.state.nodes[ nodeID ];
-            if ( node !== undefined ) {
-                value = this.settingProperty( nodeID, propertyName, propertyValue );                  
-            }
-
-            return value;
-        },
-
-        // -- initializingProperty -----------------------------------------------------------------
-
-        initializingProperty: function( nodeID, propertyName, propertyValue ) {
-
-            var value = undefined;
-
-            if ( this.debug.properties ) {
-                this.logger.infox( "  I === initializingProperty ", nodeID, propertyName, propertyValue );
-            }
-
-            var node = this.state.nodes[ nodeID ];
-            if ( node !== undefined ) {
-                value = this.settingProperty( nodeID, propertyName, propertyValue );                  
-            }
-
-            return value;
-            
-        },
-
-        // -- settingProperty ----------------------------------------------------------------------
-
-        settingProperty: function( nodeID, propertyName, propertyValue ) {
-
-            if ( this.debug.properties || this.debug.setting ) {
-                this.logger.infox( "    S === settingProperty ", nodeID, propertyName, propertyValue );
-            }
-
-            var node = this.state.nodes[ nodeID ]; // { name: childName, glgeObject: undefined }
-            var value = undefined;
-
-            if ( ( node !== undefined ) && ( utility.validObject( propertyValue ) ) ) {
-
-                switch ( propertyName ) {
-                    
-                    case  "blockly_code":
-                        value = node.code = propertyValue;
-                        break;
-                    
-                    case "blockly_xml":
-                        value = node.blocks = propertyValue;
-                        break;
-
-                    case "blockly_executing":
-                        var exe = Boolean( propertyValue );
-                        if ( exe ) {
-                            if ( this.state.executingBlocks === undefined ) {
-                                this.state.executingBlocks = {};
-                            }
-                            if ( this.state.executingBlocks[ nodeID ] === undefined ) {
-                                getJavaScript( node );
-                                this.state.executingBlocks[ nodeID ] = node;
-                            }
-                            setToolboxBlockEnable( false );
-                        } else {
-                            if ( this.state.executingBlocks && this.state.executingBlocks[ nodeID ] !== undefined ) {
-                                delete this.state.executingBlocks[ nodeID ];
-                                var count = Object.keys( this.state.executingBlocks ).length;
-                                if ( count === 0 ) {
-                                    this.state.executingBlocks = {};
-                                    setToolboxBlockEnable( true );    
-                                }
-                            }
-                        }
-                        break;
-
-                    case "blockly_toolbox":
-                        node.toolbox = propertyValue;
-                        break;
-
-                    case "blockly_defaultXml":
-                        node.defaultXml = propertyValue;
-                        break;
-
-                    default:
-                        break;
-                }
-            }
-
-            return value;
-        },
-
-        // -- gettingProperty ----------------------------------------------------------------------
-
-        gettingProperty: function( nodeID, propertyName ) {
-
-            if ( this.debug.properties || this.debug.getting ) {
-                this.logger.infox( "   G === gettingProperty ", nodeID, propertyName );
-            }
-
-            var node = this.state.nodes[ nodeID ];
-            var value = undefined;
-
-            if ( node !== undefined ) {
-                switch ( propertyName ) {
-                    
-                    case "blockly_executing":
-                        value = ( this.state.executingBlocks && this.state.executingBlocks[ nodeID ] !== undefined );
-                        break;
-                    
-                    case "blockly_code":
-                        value = node.code;
-                        break;
-                    
-                    case "blockly_xml":
-                        value = node.blocks;
-                        break;
-
-                }
-            }               
-
-            return value;
-        },
-
-
-        // TODO: deletingMethod
-
-        // -- callingMethod --------------------------------------------------------------------------
-
-        callingMethod: function( nodeID, methodName /* [, parameter1, parameter2, ... ] */ ) { // TODO: parameters
-            var node = this.state.nodes[ nodeID ];
-
-            if ( this.debug.methods ) {
-                this.logger.infox( "   M === callingMethod ", nodeID, methodName );
-            }
-
-            if ( nodeID == this.kernel.application() ) {
-                
-                switch ( methodName ) {
-                    
-                    case "stopAllExecution":
-                        for ( var id in this.state.executingBlocks ) {
-                            this.state.executingBlocks[ id ].interpreterStatus = "completed";
-                            this.kernel.setProperty( id, 'blockly_executing', false );
-                            this.kernel.fireEvent( id, "blocklyStopped", [ true ] );
-                        }
-                        break;
-
-                    case "startAllExecution":
-                        for ( var id in this.state.nodes ) {
-                            this.kernel.setProperty( id, 'blockly_executing', true );
-                            this.kernel.fireEvent( id, "blocklyStarted", [ true ] );
-                        }  
-                        break;
-
-
-                }
-            } else if ( node !== undefined ) {
-                switch ( methodName ) {
-                    case "blocklyClear":
-                        if ( Blockly.mainWorkspace ) {
-                            
-                            Blockly.mainWorkspace.clear();
-                            this.kernel.setProperty( nodeID, "blockly_xml", '<xml></xml>' );
-                        }
-                        break;
-                }
-            }
-        },
-
-
-        // TODO: creatingEvent, deltetingEvent, firingEvent
-
-        // -- executing ------------------------------------------------------------------------------
-
-        //executing: function( nodeID, scriptText, scriptType ) {
-        //    return undefined;
-        //},
-
-        // == ticking =============================================================================
-
-        ticking: function( vwfTime ) {
-            
-            if ( this.state.executingBlocks !== undefined ) {
-                var blocklyNode = undefined;
-
-                for ( var nodeID in this.state.executingBlocks ) {
-
-                    blocklyNode = this.state.executingBlocks[ nodeID ];
-                    var executeNextLine = false;
-
-                    if ( blocklyNode.interpreter === undefined ||
-                         blocklyNode.interpreterStatus === "completed" ) {
-                        blocklyNode.interpreter = createInterpreter( acorn, blocklyNode.code );
-                        blocklyNode.interpreterStatus = "created";
-                        blocklyNode.lastLineExeTime = vwfTime;
-                        executeNextLine = true;
-                    } else {
-                        var elaspedTime = vwfTime - blocklyNode.lastLineExeTime;
-                        if ( elaspedTime >= blocklyNode.timeBetweenLines ) {
-                            executeNextLine = true;
-                            blocklyNode.lastLineExeTime = vwfTime;
-                        } 
-                    }
-
-                    if ( executeNextLine ) {
-
-                        self.state.executionHalted = false;
-                        
-                        nextStep( blocklyNode );
-
-                        this.kernel.fireEvent( nodeID, "blocklyExecuted", [ blocklyNode.interpreter.value ] ); 
-                    }
-                } 
-            }
-
-        }        
-
-    } );
-
-    function getPrototypes( extendsID ) {
-        var prototypes = [];
-        var id = extendsID;
-
-        while ( id !== undefined ) {
-            prototypes.push( id );
-            id = self.kernel.prototype( id );
-        }
-                
-        return prototypes;
-    }
-
-    function isBlockly3Node( nodeID ) {
-        return self.kernel.test( nodeID,
-            "self::element(*,'http://vwf.example.com/blockly/controller.vwf')",
-            nodeID );
-    }
-
-    function isBlocklyNode( implementsIDs ) {
-        var found = false;
-        if ( implementsIDs ) {
-            for ( var i = 0; i < implementsIDs.length && !found; i++ ) {
-                found = ( implementsIDs[i] == "http://vwf.example.com/blockly/controller.vwf" );
-            }
-        }
-       return found;
-    }
-
-    function getJavaScript( node ) {
-        var xml = Blockly.Xml.workspaceToDom( Blockly.getMainWorkspace() );
-        
-        Blockly.JavaScript.vwfID = node.ID;
-
-        if ( xml ) { 
-            node.blocks = Blockly.Xml.domToText( xml );
-        }
-        node.code = Blockly.JavaScript.workspaceToCode();
-    }
-
-    function setToolboxBlockEnable( enable ) {
-        if ( Blockly.Toolbox.flyout_ !== undefined && Blockly.Toolbox.flyout_.workspace_ !== undefined ) { 
-            var blocks = Blockly.Toolbox.flyout_.workspace_.getTopBlocks( false );
-            if ( blocks ) {
-                for ( var i = 0; i < blocks.length; i++ ) {
-                    blocks[ i ].setDisabled( !enable );
-                }    
-            }
-        } else if ( Blockly.mainWorkspace && Blockly.mainWorkspace.flyout_ && Blockly.mainWorkspace.flyout_.workspace_ ){
-            var blocks = Blockly.mainWorkspace.flyout_.workspace_.getTopBlocks( false );
-            if ( blocks ) {
-                for ( var i = 0; i < blocks.length; i++ ) {
-                    blocks[ i ].setDisabled( !enable );
-                }    
-            }
-        }
-    }
-
-    function nextStep( node ) {
-
-        if ( node.interpreter !== undefined ) {
-            var stepType = node.interpreter.step();
-            while ( stepType && !self.state.executionHalted ) {
-                if ( stepType === "stepProgram" ) {
-                    if ( node.interpreterStatus === "created" ) {
-                        self.kernel.fireEvent( node.ID, "blocklyStarted", [ true ] );
-                        node.interpreterStatus = "started";                        
-                    }
-                }
-                stepType = node.interpreter.step();
-            }
-            if ( stepType === false ) {
-                if ( node.interpreterStatus === "started" ) {
-                    self.kernel.setProperty( node.ID, "blockly_executing", false );
-                    self.kernel.fireEvent( node.ID, "blocklyStopped", [ true ] );
-                    node.interpreterStatus = "completed"; 
-                }
-            }
-        }
-    }
-
-    function createInterpreter( acorn, code ) {
-        
-        var initFunc = function( interpreter, scope ) {
-            
-            var vwfKernelFunctions, i;
-            var myVwf = interpreter.createObject( interpreter.OBJECT );
-            interpreter.setProperty( scope, 'vwf', myVwf );
-
-
-            vwfKernelFunctions = [ 'setProperty', 'getProperty' ];
-            for ( i = 0; i < vwfKernelFunctions.length; i++ ) {
-                var wrapper = ( function( nativeFunc ) {
-                    return function() {
-                        var parms = [];
-                        for ( var j = 0; j < arguments.length; j++) {
-                            parms.push( arguments[ j ].toString() );
-                        }
-                        self.state.executionHalted = true;
-                        return interpreter.createPrimitive( nativeFunc.apply( vwf, parms ) );
-                    };
-                } )( vwf[ vwfKernelFunctions[ i ] ] );
-                interpreter.setProperty( myVwf, vwfKernelFunctions[ i ], interpreter.createNativeFunction( wrapper ) );
-            }
-
-            vwfKernelFunctions = [ 'callMethod', 'fireEvent' ];
-            for ( i = 0; i < vwfKernelFunctions.length; i++ ) {
-                var wrapper = ( function( nativeFunc ) {
-                    return function() {
-                        var parms = [];
-                        for ( var j = 0; j < arguments.length; j++) {
-                            if ( j >= 2 ) {
-                                if ( arguments[ j ].type === "object" ) {
-                                    parms.push( setArgsFromObj( arguments[ j ] ) );
-                                }
-                            } else {
-                                parms.push( arguments[ j ].toString() );
-                            }
-                        }
-                        self.state.executionHalted = true;
-                        return interpreter.createPrimitive( nativeFunc.apply( vwf, parms ) );
-                    };
-                } )( vwf[ vwfKernelFunctions[ i ] ] );
-                interpreter.setProperty( myVwf, vwfKernelFunctions[ i ], interpreter.createNativeFunction( wrapper ) );
-            }
-
-        };
-        return new Interpreter( acorn, code, initFunc );
-    }
-
-    function setArgsFromObj( object ) {
-        var args = [];
-        for ( var i in object.properties ) {
-            if ( object.properties[ i ].type === "object" ) {
-                args.push( setArgsFromObj( object.properties[ i ] ) );
-            } else {
-                args.push( object.properties[ i ].data );
-            }
-        }
-        return args;
-    }
-
-
-} );

File diff suppressed because it is too large
+ 0 - 420
support/client/lib/vwf/model/blockly/JS-Interpreter/acorn.js


File diff suppressed because it is too large
+ 0 - 35
support/client/lib/vwf/model/blockly/JS-Interpreter/acorn_interpreter.js


+ 0 - 2057
support/client/lib/vwf/model/blockly/JS-Interpreter/interpreter.js

@@ -1,2057 +0,0 @@
-/**
- * @license
- * JavaScript Interpreter
- *
- * Copyright 2013 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @fileoverview Interpreting JavaScript in JavaScript.
- * @author fraser@google.com (Neil Fraser)
- */
-'use strict';
-
-/**
- * Create a new interpreter.
- * @param {string} code Raw JavaScript text.
- * @param {Function} opt_initFunc Optional initialization function.  Used to
- *     define APIs.  When called it is passed the interpreter object and the
- *     global scope object.
- * @constructor
- */
-var acorn;
-var Interpreter = function( parser, code, opt_initFunc ) {
-  acorn = parser;
-  this.initFunc_ = opt_initFunc;
-  this.UNDEFINED = this.createPrimitive(undefined);
-  this.ast = acorn.parse(code);
-  var scope = this.createScope(this.ast, null);
-  this.stateStack = [{node: this.ast, scope: scope, thisExpression: scope}];
-};
-
-/**
- * Execute one step of the interpreter.
- * @return {boolean} True if a step was executed, false if no more instructions.
- */
-Interpreter.prototype.step = function() {
-  if (this.stateStack.length == 0) {
-    return false;
-  }
-  var state = this.stateStack[ 0 ];
-  var nodeStepType = "step"+state.node.type;
-  
-  //console.info( nodeStepType );
-  
-  this[ nodeStepType ]();
-  return nodeStepType;
-};
-
-/**
- * Execute the interpreter to program completion.
- */
-Interpreter.prototype.run = function() {
-  while(this.step()) {};
-};
-
-/**
- * Initialize the global scope with buitin properties and functions.
- * @param {!Object} scope Global scope.
- */
-Interpreter.prototype.initGlobalScope = function(scope) {
-  // Initialize uneditable global properties.
-  this.setProperty(scope, 'Infinity',
-                   this.createPrimitive(Infinity), true);
-  this.setProperty(scope, 'NaN',
-                   this.createPrimitive(NaN), true);
-  this.setProperty(scope, 'undefined',
-                   this.UNDEFINED, true);
-  this.setProperty(scope, 'window',
-                   scope, true);
-  this.setProperty(scope, 'self',
-                   scope, false); // Editable.
-
-  // Initialize global objects.
-  this.initFunction(scope);
-  this.initObject(scope);
-  // Unable to set scope's parent prior (this.OBJECT did not exist).
-  scope.parent = this.OBJECT;
-  this.initArray(scope);
-  this.initNumber(scope);
-  this.initString(scope);
-  this.initBoolean(scope);
-  this.initDate(scope);
-  this.initMath(scope);
-
-  // Initialize global functions.
-  var thisInterpreter = this;
-  var wrapper;
-  wrapper = function(num) {
-    num = num || thisInterpreter.UNDEFINED;
-    return thisInterpreter.createPrimitive(isNaN(num.toNumber()));
-  };
-  this.setProperty(scope, 'isNaN',
-                   this.createNativeFunction(wrapper));
-  wrapper = function(num) {
-    num = num || thisInterpreter.UNDEFINED;
-    return thisInterpreter.createPrimitive(isFinite(num.toNumber()));
-  };
-  this.setProperty(scope, 'isFinite',
-                   this.createNativeFunction(wrapper));
-  wrapper = function(str) {
-    str = str || thisInterpreter.UNDEFINED;
-    return thisInterpreter.createPrimitive(parseFloat(str.toNumber()));
-  };
-  this.setProperty(scope, 'parseFloat',
-                   this.createNativeFunction(wrapper));
-  wrapper = function(str, radix) {
-    str = str || thisInterpreter.UNDEFINED;
-    radix = radix || thisInterpreter.UNDEFINED;
-    return thisInterpreter.createPrimitive(
-        parseInt(str.toString(), radix.toNumber()));
-  };
-  this.setProperty(scope, 'parseInt',
-                   this.createNativeFunction(wrapper));
-
-  var func = this.createObject(this.FUNCTION);
-  func.eval = true;
-  this.setProperty(func, 'length', this.createPrimitive(1), true);
-  this.setProperty(scope, 'eval', func);
-
-  var strFunctions = ['escape', 'unescape',
-                      'decodeURI', 'decodeURIComponent',
-                      'encodeURI', 'encodeURIComponent'];
-  for (var i = 0; i < strFunctions.length; i++) {
-    wrapper = (function(nativeFunc) {
-      return function(str) {
-        str = str || thisInterpreter.UNDEFINED;
-        return thisInterpreter.createPrimitive(nativeFunc(str.toString()));
-      };
-    })(window[strFunctions[i]]);
-    this.setProperty(scope, strFunctions[i],
-                     this.createNativeFunction(wrapper));
-  }
-
-  // Run any user-provided initialization.
-  if (this.initFunc_) {
-    this.initFunc_(this, scope);
-  }
-};
-
-/**
- * Initialize the Function class.
- * @param {!Object} scope Global scope.
- */
-Interpreter.prototype.initFunction = function(scope) {
-  var thisInterpreter = this;
-  var wrapper;
-  // Function constructor.
-  wrapper = function(var_args) {
-    if (this.parent == thisInterpreter.FUNCTION) {
-      // Called with new.
-      var newFunc = this;
-    } else {
-      var newFunc = thisInterpreter.createObject(thisInterpreter.FUNCTION);
-    }
-    if (arguments.length) {
-      var code = arguments[arguments.length - 1].toString();
-    } else {
-      var code = '';
-    }
-    var args = [];
-    for (var i = 0; i < arguments.length - 1; i++) {
-      args.push(arguments[i].toString());
-    }
-    args = args.join(', ');
-    if (args.indexOf(')') != -1) {
-      throw new SyntaxError('Function arg string contains parenthesis');
-    }
-    // Interestingly, the scope for constructed functions is the global scope,
-    // even if they were constructed in some other scope.
-    newFunc.parentScope =
-        thisInterpreter.stateStack[thisInterpreter.stateStack.length - 1].scope;
-    var ast = acorn.parse('$ = function(' + args + ') {' + code + '};');
-    newFunc.node = ast.body[0].expression.right;
-    thisInterpreter.setProperty(newFunc, 'length',
-        thisInterpreter.createPrimitive(newFunc.node.length), true);
-    return newFunc;
-  };
-  this.FUNCTION = this.createObject(null);
-  this.setProperty(scope, 'Function', this.FUNCTION);
-  // Manually setup type and prototype becuase createObj doesn't recognize
-  // this object as a function (this.FUNCTION did not exist).
-  this.FUNCTION.type = 'function';
-  this.setProperty(this.FUNCTION, 'prototype', this.createObject(null));
-  this.FUNCTION.nativeFunc = wrapper;
-
-  // Create stub functions for apply and call.
-  // These are processed as special cases in stepCallExpression.
-  var node = {
-    type: 'FunctionApply_',
-    params: [],
-    id: null,
-    body: null,
-    start: 0,
-    end: 0
-  };
-  this.setProperty(this.FUNCTION.properties.prototype, 'apply',
-                   this.createFunction(node, {}), false, true);
-  var node = {
-    type: 'FunctionCall_',
-    params: [],
-    id: null,
-    body: null,
-    start: 0,
-    end: 0
-  };
-  this.setProperty(this.FUNCTION.properties.prototype, 'call',
-                   this.createFunction(node, {}), false, true);
-
-  // Function has no parent to inherit from, so it needs its own mandatory
-  // toString and valueOf functions.
-  wrapper = function() {
-    return thisInterpreter.createPrimitive(this.toString());
-  };
-  this.setProperty(this.FUNCTION.properties.prototype, 'toString',
-                   this.createNativeFunction(wrapper), false, true);
-  this.setProperty(this.FUNCTION, 'toString',
-                   this.createNativeFunction(wrapper), false, true);
-  wrapper = function() {
-    return thisInterpreter.createPrimitive(this.valueOf());
-  };
-  this.setProperty(this.FUNCTION.properties.prototype, 'valueOf',
-                   this.createNativeFunction(wrapper), false, true);
-  this.setProperty(this.FUNCTION, 'valueOf',
-                   this.createNativeFunction(wrapper), false, true);
-};
-
-/**
- * Initialize the Object class.
- * @param {!Object} scope Global scope.
- */
-Interpreter.prototype.initObject = function(scope) {
-  var thisInterpreter = this;
-  var wrapper;
-  // Object constructor.
-  wrapper = function(var_args) {
-    if (this.parent == thisInterpreter.OBJECT) {
-      // Called with new.
-      var newObj = this;
-    } else {
-      var newObj = thisInterpreter.createObject(thisInterpreter.OBJECT);
-    }
-    return newObj;
-  };
-  this.OBJECT = this.createNativeFunction(wrapper);
-  this.setProperty(scope, 'Object', this.OBJECT);
-
-  wrapper = function() {
-    return thisInterpreter.createPrimitive(this.toString());
-  };
-  this.setProperty(this.OBJECT.properties.prototype, 'toString',
-                   this.createNativeFunction(wrapper), false, true);
-  wrapper = function() {
-    return thisInterpreter.createPrimitive(this.valueOf());
-  };
-  this.setProperty(this.OBJECT.properties.prototype, 'valueOf',
-                   this.createNativeFunction(wrapper), false, true);
-};
-
-/**
- * Initialize the Array class.
- * @param {!Object} scope Global scope.
- */
-Interpreter.prototype.initArray = function(scope) {
-  var thisInterpreter = this;
-  var getInt = function(obj, def) {
-    // Return an integer, or the default.
-    var n = obj ? Math.floor(obj.toNumber()) : def;
-    if (isNaN(n)) {
-      n = def;
-    }
-    return n;
-  };
-  var wrapper;
-  // Array constructor.
-  wrapper = function(var_args) {
-    if (this.parent == thisInterpreter.ARRAY) {
-      // Called with new.
-      var newArray = this;
-    } else {
-      var newArray = thisInterpreter.createObject(thisInterpreter.ARRAY);
-    }
-    var first = arguments[0];
-    if (first && first.type == 'number') {
-      if (isNaN(thisInterpreter.arrayIndex(first))) {
-        throw new RangeError('Invalid array length');
-      }
-      newArray.length = first.data;
-    } else {
-      for (var i = 0; i < arguments.length; i++) {
-        newArray.properties[i] = arguments[i];
-      }
-      newArray.length = i;
-    }
-    return newArray;
-  };
-  this.ARRAY = this.createNativeFunction(wrapper);
-  this.setProperty(scope, 'Array', this.ARRAY);
-
-  wrapper = function() {
-    if (this.length) {
-      var value = this.properties[this.length - 1];
-      delete this.properties[this.length - 1];
-      this.length--;
-    } else {
-      var value = thisInterpreter.UNDEFINED;
-    }
-    return value;
-  };
-  this.setProperty(this.ARRAY.properties.prototype, 'pop',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(var_args) {
-    for (var i = 0; i < arguments.length; i++) {
-      this.properties[this.length] = arguments[i];
-      this.length++;
-    }
-    return thisInterpreter.createPrimitive(this.length);
-  };
-  this.setProperty(this.ARRAY.properties.prototype, 'push',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function() {
-    if (this.length) {
-      var value = this.properties[0];
-      for (var i = 1; i < this.length; i++) {
-        this.properties[i - 1] = this.properties[i];
-      }
-      this.length--;
-      delete this.properties[this.length];
-    } else {
-      var value = thisInterpreter.UNDEFINED;
-    }
-    return value;
-  };
-  this.setProperty(this.ARRAY.properties.prototype, 'shift',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(var_args) {
-    for (var i = this.length - 1; i >= 0; i--) {
-      this.properties[i + arguments.length] = this.properties[i];
-    }
-    this.length += arguments.length;
-    for (var i = 0; i < arguments.length; i++) {
-      this.properties[i] = arguments[i];
-    }
-    return thisInterpreter.createPrimitive(this.length);
-  };
-  this.setProperty(this.ARRAY.properties.prototype, 'unshift',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function() {
-    for (var i = 0; i < this.length / 2; i++) {
-      var tmp = this.properties[this.length - i - 1]
-      this.properties[this.length - i - 1] = this.properties[i];
-      this.properties[i] = tmp;
-    }
-    return thisInterpreter.UNDEFINED;
-  };
-  this.setProperty(this.ARRAY.properties.prototype, 'reverse',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(index, howmany, var_args) {
-    index = getInt(index, 0);
-    if (index < 0) {
-      index = Math.max(this.length + index, 0);
-    } else {
-      index = Math.min(index, this.length);
-    }
-    howmany = getInt(howmany, Infinity);
-    howmany = Math.min(howmany, this.length - index);
-    var removed = thisInterpreter.createObject(thisInterpreter.ARRAY);
-    // Remove specified elements.
-    for (var i = index; i < index + howmany; i++) {
-      removed.properties[removed.length++] = this.properties[i];
-      this.properties[i] = this.properties[i + howmany];
-    }
-    for (var i = index + howmany; i < this.length; i++) {
-      delete this.properties[i];
-    }
-    this.length -= howmany;
-    // Insert specified items.
-    for (var i = this.length - 1; i >= index; i--) {
-      this.properties[i + arguments.length - 2] = this.properties[i];
-    }
-    this.length += arguments.length - 2;
-    for (var i = 2; i < arguments.length; i++) {
-      this.properties[index + i - 2] = arguments[i];
-    }
-    return removed;
-  };
-  this.setProperty(this.ARRAY.properties.prototype, 'splice',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(opt_begin, opt_end) {
-    var list = thisInterpreter.createObject(thisInterpreter.ARRAY);
-    var begin = getInt(opt_begin, 0);
-    if (begin < 0) {
-      begin = this.length + begin;
-    }
-    begin = Math.max(0, Math.min(begin, this.length));
-    var end = getInt(opt_end, this.length);
-    if (end < 0) {
-      end = this.length + end;
-    }
-    end = Math.max(0, Math.min(end, this.length));
-    var length = 0;
-    for (var i = begin; i < end; i++) {
-      var element = thisInterpreter.getProperty(this, i);
-      thisInterpreter.setProperty(list, length++, element);
-    }
-    return list;
-  };
-  this.setProperty(this.ARRAY.properties.prototype, 'slice',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(opt_separator) {
-    if (!opt_separator || opt_separator.data === undefined) {
-      var sep = undefined;
-    } else {
-      var sep = opt_separator.toString();
-    }
-    var text = [];
-    for (var i = 0; i < this.length; i++) {
-      text[i] = this.properties[i];
-    }
-    return thisInterpreter.createPrimitive(text.join(sep));
-  };
-  this.setProperty(this.ARRAY.properties.prototype, 'join',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(var_args) {
-    var list = thisInterpreter.createObject(thisInterpreter.ARRAY);
-    var length = 0;
-    // Start by copying the current array.
-    for (var i = 0; i < this.length; i++) {
-      var element = thisInterpreter.getProperty(this, i);
-      thisInterpreter.setProperty(list, length++, element);
-    }
-    // Loop through all arguments and copy them in.
-    for (var i = 0; i < arguments.length; i++) {
-      var value = arguments[i];
-      if (thisInterpreter.isa(value, thisInterpreter.ARRAY)) {
-        for (var j = 0; j < value.length; j++) {
-          var element = thisInterpreter.getProperty(value, j);
-          thisInterpreter.setProperty(list, length++, element);
-        }
-      } else {
-        thisInterpreter.setProperty(list, length++, value);
-      }
-    }
-    return list;
-  };
-  this.setProperty(this.ARRAY.properties.prototype, 'concat',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(searchElement, opt_fromIndex) {
-    searchElement = searchElement || thisInterpreter.UNDEFINED;
-    var fromIndex = getInt(opt_fromIndex, 0);
-    if (fromIndex < 0) {
-      fromIndex = this.length + fromIndex;
-    }
-    fromIndex = Math.max(0, Math.min(fromIndex, this.length));
-    for (var i = fromIndex; i < this.length; i++) {
-      var element = thisInterpreter.getProperty(this, i);
-      if (thisInterpreter.comp(element, searchElement) == 0) {
-        return thisInterpreter.createPrimitive(i);
-      }
-    }
-    return thisInterpreter.createPrimitive(-1);
-  };
-  this.setProperty(this.ARRAY.properties.prototype, 'indexOf',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(searchElement, opt_fromIndex) {
-    searchElement = searchElement || thisInterpreter.UNDEFINED;
-    var fromIndex = getInt(opt_fromIndex, this.length);
-    if (fromIndex < 0) {
-      fromIndex = this.length + fromIndex;
-    }
-    fromIndex = Math.max(0, Math.min(fromIndex, this.length));
-    for (var i = fromIndex; i >= 0; i--) {
-      var element = thisInterpreter.getProperty(this, i);
-      if (thisInterpreter.comp(element, searchElement) == 0) {
-        return thisInterpreter.createPrimitive(i);
-      }
-    }
-    return thisInterpreter.createPrimitive(-1);
-  };
-  this.setProperty(this.ARRAY.properties.prototype, 'lastIndexOf',
-                   this.createNativeFunction(wrapper), false, true);
-};
-
-/**
- * Initialize the Number class.
- * @param {!Object} scope Global scope.
- */
-Interpreter.prototype.initNumber = function(scope) {
-  var thisInterpreter = this;
-  var wrapper;
-  // Number constructor.
-  wrapper = function(value) {
-    value = value ? value.toNumber() : 0;
-    if (this.parent == thisInterpreter.NUMBER) {
-      this.toBoolean = function() {return !!value;};
-      this.toNumber = function() {return value;};
-      this.toString = function() {return String(value);};
-      return undefined;
-    } else {
-      return thisInterpreter.createPrimitive(value);
-    }
-  };
-  this.NUMBER = this.createNativeFunction(wrapper);
-  this.setProperty(scope, 'Number', this.NUMBER);
-
-  var numConsts = ['MAX_VALUE', 'MIN_VALUE', 'NaN', 'NEGATIVE_INFINITY',
-                   'POSITIVE_INFINITY'];
-  for (var i = 0; i < numConsts.length; i++) {
-    this.setProperty(this.NUMBER, numConsts[i],
-                     this.createPrimitive(Number[numConsts[i]]));
-  }
-
-  wrapper = function(fractionDigits) {
-    fractionDigits = fractionDigits ? fractionDigits.toNumber() : undefined;
-    var n = this.toNumber();
-    return thisInterpreter.createPrimitive(n.toExponential(fractionDigits));
-  };
-  this.setProperty(this.NUMBER.properties.prototype, 'toExponential',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(digits) {
-    digits = digits ? digits.toNumber() : undefined;
-    var n = this.toNumber();
-    return thisInterpreter.createPrimitive(n.toFixed(digits));
-  };
-  this.setProperty(this.NUMBER.properties.prototype, 'toFixed',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(precision) {
-    precision = precision ? precision.toNumber() : undefined;
-    var n = this.toNumber();
-    return thisInterpreter.createPrimitive(n.toPrecision(precision));
-  };
-  this.setProperty(this.NUMBER.properties.prototype, 'toPrecision',
-                   this.createNativeFunction(wrapper), false, true);
-};
-
-/**
- * Initialize the String class.
- * @param {!Object} scope Global scope.
- */
-Interpreter.prototype.initString = function(scope) {
-  var thisInterpreter = this;
-  var wrapper;
-  // String constructor.
-  wrapper = function(value) {
-    value = (value || thisInterpreter.UNDEFINED).toString();
-    if (this.parent == thisInterpreter.STRING) {
-      this.toBoolean = function() {return !!value;};
-      this.toNumber = function() {return Number(value);};
-      this.toString = function() {return value;};
-      this.valueOf = function() {return value;};
-      this.data = value;
-      return undefined;
-    } else {
-      return thisInterpreter.createPrimitive(value);
-    }
-  };
-  this.STRING = this.createNativeFunction(wrapper);
-  this.setProperty(scope, 'String', this.STRING);
-
-  var functions = ['toLowerCase', 'toUpperCase',
-                   'toLocaleLowerCase', 'toLocaleUpperCase'];
-  for (var i = 0; i < functions.length; i++) {
-    var wrapper = (function(nativeFunc) {
-      return function() {
-        return thisInterpreter.createPrimitive(nativeFunc.apply(this));
-      };
-    })(String.prototype[functions[i]]);
-    this.setProperty(this.STRING.properties.prototype, functions[i],
-                     this.createNativeFunction(wrapper), false, true);
-  }
-
-  // Trim function may not exist in host browser.  Write them from scratch.
-  wrapper = function() {
-    var str = this.toString();
-    return thisInterpreter.createPrimitive(str.replace(/^\s+|\s+$/g, ''));
-  };
-  this.setProperty(this.STRING.properties.prototype, 'trim',
-                   this.createNativeFunction(wrapper), false, true);
-  wrapper = function() {
-    var str = this.toString();
-    return thisInterpreter.createPrimitive(str.replace(/^\s+/g, ''));
-  };
-  this.setProperty(this.STRING.properties.prototype, 'trimLeft',
-                   this.createNativeFunction(wrapper), false, true);
-  wrapper = function() {
-    var str = this.toString();
-    return thisInterpreter.createPrimitive(str.replace(/\s+$/g, ''));
-  };
-  this.setProperty(this.STRING.properties.prototype, 'trimRight',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(num) {
-    var str = this.toString();
-    num = (num || thisInterpreter.UNDEFINED).toNumber();
-    return thisInterpreter.createPrimitive(str.charAt(num));
-  };
-  this.setProperty(this.STRING.properties.prototype, 'charAt',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(num) {
-    var str = this.toString();
-    num = (num || thisInterpreter.UNDEFINED).toNumber();
-    return thisInterpreter.createPrimitive(str.charCodeAt(num));
-  };
-  this.setProperty(this.STRING.properties.prototype, 'charCodeAt',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(searchValue, fromIndex) {
-    var str = this.toString();
-    searchValue = (searchValue || thisInterpreter.UNDEFINED).toString();
-    fromIndex = fromIndex ? fromIndex.toNumber() : undefined;
-    return thisInterpreter.createPrimitive(
-        str.indexOf(searchValue, fromIndex));
-  };
-  this.setProperty(this.STRING.properties.prototype, 'indexOf',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(searchValue, fromIndex) {
-    var str = this.toString();
-    searchValue = (searchValue || thisInterpreter.UNDEFINED).toString();
-    fromIndex = fromIndex ? fromIndex.toNumber() : undefined;
-    return thisInterpreter.createPrimitive(
-        str.lastIndexOf(searchValue, fromIndex));
-  };
-  this.setProperty(this.STRING.properties.prototype, 'lastIndexOf',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(separator, limit) {
-    var str = this.toString();
-    separator = separator ? separator.toString() : undefined;
-    limit = limit ? limit.toNumber() : undefined;
-    var jsList = str.split(separator, limit);
-    var pseudoList = thisInterpreter.createObject(thisInterpreter.ARRAY);
-    for (var i = 0; i < jsList.length; i++) {
-      thisInterpreter.setProperty(pseudoList, i,
-          thisInterpreter.createPrimitive(jsList[i]));
-    }
-    return pseudoList;
-  };
-  this.setProperty(this.STRING.properties.prototype, 'split',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(indexA, indexB) {
-    var str = this.toString();
-    indexA = indexA ? indexA.toNumber() : undefined;
-    indexB = indexB ? indexB.toNumber() : undefined;
-    return thisInterpreter.createPrimitive(str.substring(indexA, indexB));
-  };
-  this.setProperty(this.STRING.properties.prototype, 'substring',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(start, length) {
-    var str = this.toString();
-    start = start ? start.toNumber() : undefined;
-    length = length ? length.toNumber() : undefined;
-    return thisInterpreter.createPrimitive(str.substr(start, length));
-  };
-  this.setProperty(this.STRING.properties.prototype, 'substr',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(var_args) {
-    var str = this.toString();
-    for (var i = 0; i < arguments.length; i++) {
-      str += arguments[i].toString();
-    }
-    return thisInterpreter.createPrimitive(str);
-  };
-  this.setProperty(this.STRING.properties.prototype, 'concat',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(beginSlice, endSlice) {
-    var str = this.toString();
-    beginSlice = beginSlice ? beginSlice.toNumber() : undefined;
-    endSlice = endSlice ? endSlice.toNumber() : undefined;
-    return thisInterpreter.createPrimitive(str.slice(beginSlice, endSlice));
-  };
-  this.setProperty(this.STRING.properties.prototype, 'slice',
-                   this.createNativeFunction(wrapper), false, true);
-};
-
-/**
- * Initialize the Boolean class.
- * @param {!Object} scope Global scope.
- */
-Interpreter.prototype.initBoolean = function(scope) {
-  var thisInterpreter = this;
-  var wrapper;
-  // Boolean constructor.
-  wrapper = function(value) {
-    value = value ? value.toBoolean() : false;
-    if (this.parent == thisInterpreter.STRING) {
-      this.toBoolean = function() {return value;};
-      this.toNumber = function() {return Number(value);};
-      this.toString = function() {return String(value);};
-      this.valueOf = function() {return value;};
-      return undefined;
-    } else {
-      return thisInterpreter.createPrimitive(value);
-    }
-  };
-  this.BOOLEAN = this.createNativeFunction(wrapper);
-  this.setProperty(scope, 'Boolean', this.BOOLEAN);
-};
-
-/**
- * Initialize the Date class.
- * @param {!Object} scope Global scope.
- */
-Interpreter.prototype.initDate = function(scope) {
-  var thisInterpreter = this;
-  var wrapper;
-  // Date constructor.
-  wrapper = function(a, b, c, d, e, f, h) {
-    if (this.parent == thisInterpreter.DATE) {
-      var newDate = this;
-    } else {
-      var newDate = thisInterpreter.createObject(thisInterpreter.DATE);
-    }
-    var dateString = a;
-    if (!arguments.length) {
-      newDate.date = new Date();
-    } else if (arguments.length == 1 && (dateString.type == 'string' ||
-        thisInterpreter.isa(dateString, thisInterpreter.STRING))) {
-      newDate.date = new Date(dateString.toString());
-    } else {
-      var args = [];
-      for (var i = 0; i < arguments.length; i++) {
-        args[i] = arguments[i] ? arguments[i].toNumber() : undefined
-      }
-      // Sadly there is no way to use 'apply' on a constructor.
-      if (args.length == 1) {
-        newDate.date = new Date(args[0]);
-      } else if (args.length == 2) {
-        newDate.date = new Date(args[0], args[1]);
-      } else if (args.length == 3) {
-        newDate.date = new Date(args[0], args[1], args[2]);
-      } else if (args.length == 4) {
-        newDate.date = new Date(args[0], args[1], args[2], args[3]);
-      } else if (args.length == 5) {
-        newDate.date = new Date(args[0], args[1], args[2], args[3], args[4]);
-      } else if (args.length == 7) {
-        newDate.date = new Date(args[0], args[1], args[2], args[3], args[4],
-                                args[5]);
-      } else {
-        newDate.date = new Date(args[0], args[1], args[2], args[3], args[4],
-                                args[5], args[6]);
-      }
-    }
-    newDate.toString = function() {return String(this.date);};
-    newDate.toNumber = function() {return Number(this.date);};
-    newDate.valueOf = function() {return this.date.valueOf();};
-    return newDate;
-  };
-  this.DATE = this.createNativeFunction(wrapper);
-  this.setProperty(scope, 'Date', this.DATE);
-
-  // Static methods on Date.
-  wrapper = function() {
-    return thisInterpreter.createPrimitive(new Date().getTime());
-  };
-  this.setProperty(this.DATE, 'now',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(dateString) {
-    dateString = dateString ? dateString.toString() : undefined;
-    return thisInterpreter.createPrimitive(Date.parse(dateString));
-  };
-  this.setProperty(this.DATE, 'parse',
-                   this.createNativeFunction(wrapper), false, true);
-
-  wrapper = function(a, b, c, d, e, f, h) {
-    var args = [];
-    for (var i = 0; i < arguments.length; i++) {
-      args[i] = arguments[i] ? arguments[i].toNumber() : undefined;
-    }
-    return thisInterpreter.createPrimitive(Date.UTC.apply(Date, args));
-  };
-  this.setProperty(this.DATE, 'UTC',
-                   this.createNativeFunction(wrapper), false, true);
-
-  // Getter methods.
-  var getFunctions = ['getDate', 'getDay', 'getFullYear', 'getHours',
-      'getMilliseconds', 'getMinutes', 'getMonth', 'getSeconds', 'getTime',
-      'getTimezoneOffset', 'getUTCDate', 'getUTCDay', 'getUTCFullYear',
-      'getUTCHours', 'getUTCMilliseconds', 'getUTCMinutes', 'getUTCMonth',
-      'getUTCSeconds', 'getYear'];
-  for (var i = 0; i < getFunctions.length; i++) {
-    wrapper = (function(nativeFunc) {
-      return function() {
-        return thisInterpreter.createPrimitive(this.date[nativeFunc]());
-      };
-    })(getFunctions[i]);
-    this.setProperty(this.DATE.properties.prototype, getFunctions[i],
-                     this.createNativeFunction(wrapper), false, true);
-  }
-
-  // Setter methods.
-  var setFunctions = ['setDate', 'setFullYear', 'setHours', 'setMilliseconds',
-      'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate',
-      'setUTCFullYear', 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes',
-      'setUTCMonth', 'setUTCSeconds', 'setYear'];
-  for (var i = 0; i < setFunctions.length; i++) {
-    wrapper = (function(nativeFunc) {
-      return function(var_args) {
-        var args = [];
-        for (var i = 0; i < arguments.length; i++) {
-          args[i] = arguments[i] ? arguments[i].toNumber() : undefined;
-        }
-        return thisInterpreter.createPrimitive(
-            this.date[nativeFunc].apply(this.date, args));
-      };
-    })(setFunctions[i]);
-    this.setProperty(this.DATE.properties.prototype, setFunctions[i],
-                     this.createNativeFunction(wrapper), false, true);
-  }
-
-  // Conversion getter methods.
-  var getFunctions = ['toDateString', 'toISOString', 'toGMTString',
-      'toLocaleDateString', 'toLocaleString', 'toLocaleTimeString',
-      'toTimeString', 'toUTCString'];
-  for (var i = 0; i < getFunctions.length; i++) {
-    wrapper = (function(nativeFunc) {
-      return function() {
-        return thisInterpreter.createPrimitive(this.date[nativeFunc]());
-      };
-    })(getFunctions[i]);
-    this.setProperty(this.DATE.properties.prototype, getFunctions[i],
-                     this.createNativeFunction(wrapper), false, true);
-  }
-};
-
-/**
- * Initialize Math object.
- * @param {!Object} scope Global scope.
- */
-Interpreter.prototype.initMath = function(scope) {
-  var thisInterpreter = this;
-  var myMath = this.createObject(this.OBJECT);
-  this.setProperty(scope, 'Math', myMath);
-  var mathConsts = ['E', 'LN2', 'LN10', 'LOG2E', 'LOG10E', 'PI',
-                    'SQRT1_2', 'SQRT2'];
-  for (var i = 0; i < mathConsts.length; i++) {
-    this.setProperty(myMath, mathConsts[i],
-                     this.createPrimitive(Math[mathConsts[i]]));
-  }
-  var numFunctions = ['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos',
-                      'exp', 'floor', 'log', 'max', 'min', 'pow', 'random',
-                      'round', 'sin', 'sqrt', 'tan'];
-  for (var i = 0; i < numFunctions.length; i++) {
-    var wrapper = (function(nativeFunc) {
-      return function() {
-        for (var j = 0; j < arguments.length; j++) {
-          arguments[j] = arguments[j].toNumber();
-        }
-        return thisInterpreter.createPrimitive(
-            nativeFunc.apply(Math, arguments));
-      };
-    })(Math[numFunctions[i]]);
-    this.setProperty(myMath, numFunctions[i],
-                     this.createNativeFunction(wrapper));
-  }
-};
-
-/**
- * Is an object of a certain class?
- * @param {Object} child Object to check.
- * @param {!Object} parent Class of object.
- * @return {boolean} True if object is the class or inherits from it.
- *     False otherwise.
- */
-Interpreter.prototype.isa = function(child, parent) {
-  if (!child || !parent) {
-    return false;
-  } else if (child.parent == parent) {
-    return true;
-  } else if (!child.parent || !child.parent.prototype) {
-    return false;
-  }
-  return this.isa(child.parent.prototype, parent);
-};
-
-/**
- * Compares two objects against each other.
- * @param {!Object} a First object.
- * @param {!Object} b Second object.
- * @return {number} -1 if a is smaller, 0 if a == b, 1 if a is bigger,
- *     NaN if they are not comparible.
- */
-Interpreter.prototype.comp = function(a, b) {
-  if (a.isPrimitive && typeof a == 'number' && isNaN(a.data) ||
-      b.isPrimitive && typeof b == 'number' && isNaN(b.data)) {
-    return NaN;
-  }
-  if (a.isPrimitive && b.isPrimitive) {
-    a = a.data;
-    b = b.data;
-  } else {
-    // TODO: Handle other types.
-    return NaN;
-  }
-  if (a < b) {
-    return -1;
-  } else if (a > b) {
-    return 1;
-  }
-  return 0;
-};
-
-/**
- * Is a value a legal integer for an array?
- * @param {*} n Value to check.
- * @return {number} Zero, or a positive integer if the value can be
- *     converted to such.  NaN otherwise.
- */
-Interpreter.prototype.arrayIndex = function(n) {
-  n = Number(n);
-  if (!isFinite(n) || n != Math.floor(n) || n < 0) {
-    return NaN;
-  }
-  return n;
-};
-
-/**
- * Create a new data object for a primitive.
- * @param {undefined|null|boolean|number|string} data Data to encapsulate.
- * @return {!Object} New data object.
- */
-Interpreter.prototype.createPrimitive = function(data) {
-  var type = typeof data;
-  var obj = {
-    data: data,
-    isPrimitive: true,
-    type: type,
-    toBoolean: function() {return Boolean(this.data);},
-    toNumber: function() {return Number(this.data);},
-    toString: function() {return String(this.data);},
-    valueOf: function() {return this.data;}
-  };
-  if (type == 'number') {
-    obj.parent = this.NUMBER;
-  } else if (type == 'string') {
-    obj.parent = this.STRING;
-  } else if (type == 'boolean') {
-    obj.parent = this.BOOLEAN;
-  }
-  return obj;
-};
-
-/**
- * Create a new data object.
- * @param {Object} parent Parent constructor function.
- * @return {!Object} New data object.
- */
-Interpreter.prototype.createObject = function(parent) {
-  var obj = {
-    isPrimitive: false,
-    type: 'object',
-    parent: parent,
-    fixed: Object.create(null),
-    nonenumerable: Object.create(null),
-    properties: Object.create(null),
-    toBoolean: function() {return true;},
-    toNumber: function() {return 0;},
-    toString: function() {return '[' + this.type + ']';},
-    valueOf: function() {return this;}
-  };
-  // Functions have prototype objects.
-  if (this.isa(obj, this.FUNCTION)) {
-    obj.type = 'function';
-    this.setProperty(obj, 'prototype', this.createObject(this.OBJECT || null));
-  };
-  // Arrays have length.
-  if (this.isa(obj, this.ARRAY)) {
-    obj.length = 0;
-    obj.toString = function() {
-      var strs = [];
-      for (var i = 0; i < this.length; i++) {
-        strs[i] = this.properties[i].toString();
-      }
-      return strs.join(',');
-    };
-  };
-
-  return obj;
-};
-
-/**
- * Create a new function.
- * @param {Object} node AST node defining the function.
- * @param {Object} opt_scope Optional parent scope.
- * @return {!Object} New function.
- */
-Interpreter.prototype.createFunction = function(node, opt_scope) {
-  var func = this.createObject(this.FUNCTION);
-  func.parentScope = opt_scope || this.getScope();
-  func.node = node;
-  this.setProperty(func, 'length',
-                   this.createPrimitive(func.node.params.length), true);
-  return func;
-};
-
-/**
- * Create a new native function.
- * @param {!Function} nativeFunc JavaScript function.
- * @return {!Object} New function.
- */
-Interpreter.prototype.createNativeFunction = function(nativeFunc) {
-  var func = this.createObject(this.FUNCTION);
-  func.nativeFunc = nativeFunc;
-  this.setProperty(func, 'length',
-                   this.createPrimitive(nativeFunc.length), true);
-  return func;
-};
-
-/**
- * Fetch a property value from a data object.
- * @param {!Object} obj Data object.
- * @param {*} name Name of property.
- * @return {!Object} Property value (may be UNDEFINED).
- */
-Interpreter.prototype.getProperty = function(obj, name) {
-  name = name.toString();
-  // Special cases for magic length property.
-  if (this.isa(obj, this.STRING)) {
-    if (name == 'length') {
-      return this.createPrimitive(obj.data.length);
-    }
-    var n = this.arrayIndex(name);
-    if (!isNaN(n) && n < obj.data.length) {
-      return this.createPrimitive(obj.data[n]);
-    }
-  } else if (this.isa(obj, this.ARRAY) && name == 'length') {
-    return this.createPrimitive(obj.length);
-  }
-  while (true) {
-    if (obj.properties && name in obj.properties) {
-      return obj.properties[name];
-    }
-    if (obj.parent && obj.parent.properties &&
-        obj.parent.properties.prototype) {
-      obj = obj.parent.properties.prototype;
-    } else {
-      // No parent, reached the top.
-      break;
-    }
-  }
-  return this.UNDEFINED;
-};
-
-/**
- * Does the named property exist on a data object.
- * @param {!Object} obj Data object.
- * @param {*} name Name of property.
- * @return {boolean} True if property exists.
- */
-Interpreter.prototype.hasProperty = function(obj, name) {
-  name = name.toString();
-  if (obj.isPrimitive) {
-    throw new TypeError('Primitive data type has no properties');
-  }
-  if (name == 'length' &&
-      (this.isa(obj, this.STRING) || this.isa(obj, this.ARRAY))) {
-    return true;
-  }
-  if (this.isa(obj, this.STRING)) {
-    var n = this.arrayIndex(name);
-    if (!isNaN(n) && n < obj.data.length) {
-      return true;
-    }
-  }
-  while (true) {
-    if (obj.properties && name in obj.properties) {
-      return true;
-    }
-    if (obj.parent && obj.parent.properties &&
-        obj.parent.properties.prototype) {
-      obj = obj.parent.properties.prototype;
-    } else {
-      // No parent, reached the top.
-      break;
-    }
-  }
-  return false;
-};
-
-/**
- * Set a property value on a data object.
- * @param {!Object} obj Data object.
- * @param {*} name Name of property.
- * @param {*} value New property value.
- * @param {boolean} opt_fixed Unchangable property if true.
- * @param {boolean} opt_nonenum Non-enumerable property if true.
- */
-Interpreter.prototype.setProperty = function(obj, name, value,
-                                             opt_fixed, opt_nonenum) {
-  name = name.toString();
-  if (obj.isPrimitive || obj.fixed[name]) {
-    return;
-  }
-  if (this.isa(obj, this.STRING)) {
-    var n = this.arrayIndex(name);
-    if (name == 'length' || (!isNaN(n) && n < obj.data.length)) {
-      // Can't set length or letters on Strings.
-      return;
-    }
-  }
-  if (this.isa(obj, this.ARRAY)) {
-    // Arrays have a magic length variable that is bound to the elements.
-    var i;
-    if (name == 'length') {
-      // Delete elements if length is smaller.
-      var newLength = this.arrayIndex(value.toNumber());
-      if (isNaN(newLength)) {
-        throw new RangeError('Invalid array length');
-      }
-      if (newLength < obj.length) {
-        for (i in obj.properties) {
-          i = this.arrayIndex(i);
-          if (!isNaN(i) && newLength <= i) {
-            delete obj.properties[i];
-          }
-        }
-      }
-      obj.length = newLength;
-      return;  // Don't set a real length property.
-    } else if (!isNaN(i = this.arrayIndex(name))) {
-      // Increase length if this index is larger.
-      obj.length = Math.max(obj.length, i + 1);
-    }
-  }
-  // Set the property.
-  obj.properties[name] = value;
-  if (opt_fixed) {
-    obj.fixed[name] = true;
-  }
-  if (opt_nonenum) {
-    obj.nonenumerable[name] = true;
-  }
-};
-
-/**
- * Delete a property value on a data object.
- * @param {!Object} obj Data object.
- * @param {*} name Name of property.
- */
-Interpreter.prototype.deleteProperty = function(obj, name) {
-  name = name.toString();
-  if (obj.isPrimitive || obj.fixed[name]) {
-    return false;
-  }
-  if (name == 'length' && this.isa(obj, this.ARRAY)) {
-    return false;
-  }
-  return delete obj.properties[name];
-};
-
-/**
- * Returns the current scope from the stateStack.
- * @return {!Object} Current scope dictionary.
- */
-Interpreter.prototype.getScope = function() {
-  for (var i = 0; i < this.stateStack.length; i++) {
-    if (this.stateStack[i].scope) {
-      return this.stateStack[i].scope;
-    }
-  }
-  throw 'No scope found.';
-};
-
-/**
- * Create a new scope dictionary.
- * @param {!Object} node AST node defining the scope container
- *     (e.g. a function).
- * @param {Object} parentScope Scope to link to.
- * @return {!Object} New scope.
- */
-Interpreter.prototype.createScope = function(node, parentScope) {
-  var scope = this.createObject(null);
-  scope.parentScope = parentScope;
-  if (!parentScope) {
-    this.initGlobalScope(scope);
-  }
-  this.populateScope_(node, scope);
-  return scope;
-};
-
-/**
- * Retrieves a value from the scope chain.
- * @param {!Object} name Name of variable.
- * @throws {string} Error if identifier does not exist.
- */
-Interpreter.prototype.getValueFromScope = function(name) {
-  var scope = this.getScope();
-  var nameStr = name.toString();
-  while (scope) {
-    if (this.hasProperty(scope, nameStr)) {
-      return this.getProperty(scope, nameStr);
-    }
-    scope = scope.parentScope;
-  }
-  throw 'Unknown identifier: ' + nameStr;
-};
-
-/**
- * Sets a value to the current scope.
- * @param {!Object} name Name of variable.
- * @param {*} value Value.
- */
-Interpreter.prototype.setValueToScope = function(name, value) {
-  var scope = this.getScope();
-  var nameStr = name.toString();
-  while (scope) {
-    if (this.hasProperty(scope, nameStr)) {
-      return this.setProperty(scope, nameStr, value);
-    }
-    scope = scope.parentScope;
-  }
-  throw 'Unknown identifier: ' + nameStr;
-};
-
-/**
- * Create a new scope for the given node.
- * @param {!Object} node AST node (program or function).
- * @param {!Object} scope Scope dictionary to populate.
- * @private
- */
-Interpreter.prototype.populateScope_ = function(node, scope) {
-  if (node.type == 'VariableDeclaration') {
-    for (var i = 0; i < node.declarations.length; i++) {
-      this.setProperty(scope, node.declarations[i].id.name, this.UNDEFINED);
-    }
-  } else if (node.type == 'FunctionDeclaration') {
-    this.setProperty(scope, node.id.name,
-        this.createFunction(node, scope));
-    return;  // Do not recurse into function.
-  } else if (node.type == 'FunctionExpression') {
-    return;  // Do not recurse into function.
-  }
-  var thisIterpreter = this;
-  function recurse(child) {
-    if (child.constructor == thisIterpreter.ast.constructor) {
-      thisIterpreter.populateScope_(child, scope);
-    }
-  }
-  for (var name in node) {
-    var prop = node[name];
-    if (prop && typeof prop == 'object') {
-      if (typeof prop.length == 'number' && prop.splice) {
-        // Prop is an array.
-        for (var i = 0; i < prop.length; i++) {
-          recurse(prop[i]);
-        }
-      } else {
-        recurse(prop);
-      }
-    }
-  }
-};
-
-/**
- * Gets a value from the scope chain or from an object property.
- * @param {!Object|!Array} left Name of variable or object/propname tuple.
- * @return {!Object} Value.
- */
-Interpreter.prototype.getValue = function(left) {
-  if (left.length) {
-    var obj = left[0];
-    var prop = left[1];
-    return this.getProperty(obj, prop);
-  } else {
-    return this.getValueFromScope(left);
-  }
-};
-
-/**
- * Sets a value to the scope chain or to an object property.
- * @param {!Object|!Array} left Name of variable or object/propname tuple.
- * @param {!Object} value Value.
- */
-Interpreter.prototype.setValue = function(left, value) {
-  if (left.length) {
-    var obj = left[0];
-    var prop = left[1];
-    this.setProperty(obj, prop, value);
-  } else {
-    this.setValueToScope(left, value);
-  }
-};
-
-// Functions to handle each node type.
-
-Interpreter.prototype['stepArrayExpression'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  var n = state.n || 0;
-  if (!state.array) {
-    state.array = this.createObject(this.ARRAY);
-  } else {
-    this.setProperty(state.array, n - 1, state.value);
-  }
-  if (node.elements[n]) {
-    state.n = n + 1;
-    this.stateStack.unshift({node: node.elements[n]});
-  } else {
-    state.array.length = state.n || 0;
-    this.stateStack.shift();
-    this.stateStack[0].value = state.array;
-  }
-};
-
-Interpreter.prototype['stepAssignmentExpression'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  if (!state.doneLeft) {
-    state.doneLeft = true;
-    this.stateStack.unshift({node: node.left, components: true});
-  } else if (!state.doneRight) {
-    state.doneRight = true;
-    state.leftSide = state.value;
-    this.stateStack.unshift({node: node.right});
-  } else {
-    this.stateStack.shift();
-    var leftSide = state.leftSide;
-    var rightSide = state.value;
-    var value;
-    if (node.operator == '=') {
-      value = rightSide;
-    } else {
-      var leftValue = this.getValue(leftSide);
-      var rightValue = rightSide;
-      var leftNumber = leftValue.toNumber();
-      var rightNumber = rightValue.toNumber();
-      if (node.operator == '+=') {
-        var left, right;
-        if (leftValue.type == 'string' || rightValue.type == 'string') {
-          left = leftValue.toString();
-          right = rightValue.toString();
-        } else {
-          left = leftNumber;
-          right = rightNumber;
-        }
-        value = left + right;
-      } else if (node.operator == '-=') {
-        value = leftNumber - rightNumber;
-      } else if (node.operator == '*=') {
-        value = leftNumber * rightNumber;
-      } else if (node.operator == '/=') {
-        value = leftNumber / rightNumber;
-      } else if (node.operator == '%=') {
-        value = leftNumber % rightNumber;
-      } else if (node.operator == '<<=') {
-        value = leftNumber << rightNumber;
-      } else if (node.operator == '>>=') {
-        value = leftNumber >> rightNumber;
-      } else if (node.operator == '>>>=') {
-        value = leftNumber >>> rightNumber;
-      } else if (node.operator == '&=') {
-        value = leftNumber & rightNumber;
-      } else if (node.operator == '^=') {
-        value = leftNumber ^ rightNumber;
-      } else if (node.operator == '|=') {
-        value = leftNumber | rightNumber;
-      } else {
-        throw 'Unknown assignment expression: ' + node.operator;
-      }
-      value = this.createPrimitive(value);
-    }
-    this.setValue(leftSide, value);
-    this.stateStack[0].value = value;
-  }
-};
-
-Interpreter.prototype['stepBinaryExpression'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  if (!state.doneLeft) {
-    state.doneLeft = true;
-    this.stateStack.unshift({node: node.left});
-  } else if (!state.doneRight) {
-    state.doneRight = true;
-    state.leftValue = state.value;
-    this.stateStack.unshift({node: node.right});
-  } else {
-    this.stateStack.shift();
-    var leftSide = state.leftValue;
-    var rightSide = state.value;
-    var value;
-    var comp = this.comp(leftSide, rightSide);
-    if (node.operator == '==' || node.operator == '!=') {
-      value = comp === 0;
-      if (node.operator == '!=') {
-        value = !value;
-      }
-    } else if (node.operator == '===' || node.operator == '!==') {
-      if (leftSide.isPrimitive && rightSide.isPrimitive) {
-        value = leftSide.data === rightSide.data;
-      } else {
-        value = leftSide === rightSide;
-      }
-      if (node.operator == '!==') {
-        value = !value;
-      }
-    } else if (node.operator == '>') {
-      value = comp == 1;
-    } else if (node.operator == '>=') {
-      value = comp == 1 || comp === 0;
-    } else if (node.operator == '<') {
-      value = comp == -1;
-    } else if (node.operator == '<=') {
-      value = comp == -1 || comp === 0;
-    } else if (node.operator == '+') {
-      if (leftSide.type == 'string' || rightSide.type == 'string') {
-        var leftValue = leftSide.toString();
-        var rightValue = rightSide.toString();
-      } else {
-        var leftValue = leftSide.toNumber();
-        var rightValue = rightSide.toNumber();
-      }
-      value = leftValue + rightValue;
-    } else if (node.operator == 'in') {
-      value = this.hasProperty(rightSide, leftSide);
-    } else {
-      var leftValue = leftSide.toNumber();
-      var rightValue = rightSide.toNumber();
-      if (node.operator == '-') {
-        value = leftValue - rightValue;
-      } else if (node.operator == '*') {
-        value = leftValue * rightValue;
-      } else if (node.operator == '/') {
-        value = leftValue / rightValue;
-      } else if (node.operator == '%') {
-        value = leftValue % rightValue;
-      } else if (node.operator == '&') {
-        value = leftValue & rightValue;
-      } else if (node.operator == '|') {
-        value = leftValue | rightValue;
-      } else if (node.operator == '^') {
-        value = leftValue ^ rightValue;
-      } else if (node.operator == '<<') {
-        value = leftValue << rightValue;
-      } else if (node.operator == '>>') {
-        value = leftValue >> rightValue;
-      } else if (node.operator == '>>>') {
-        value = leftValue >>> rightValue;
-      } else {
-        throw 'Unknown binary operator: ' + node.operator;
-      }
-    }
-    this.stateStack[0].value = this.createPrimitive(value);
-  }
-};
-
-Interpreter.prototype['stepBreakStatement'] = function() {
-  var state = this.stateStack.shift();
-  var node = state.node;
-  var label = null;
-  if (node.label) {
-    label = node.label.name;
-  }
-  state = this.stateStack.shift();
-  while (state && state.node.type != 'callExpression') {
-    if (label ? label == state.label : state.isLoop) {
-      return;
-    }
-    state = this.stateStack.shift();
-  }
-  throw new SyntaxError('Illegal break statement');
-};
-
-Interpreter.prototype['stepBlockStatement'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  var n = state.n_ || 0;
-  if (node.body[n]) {
-    state.n_ = n + 1;
-    this.stateStack.unshift({node: node.body[n]});
-  } else {
-    this.stateStack.shift();
-  }
-};
-
-Interpreter.prototype['stepCallExpression'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  if (!state.doneCallee_) {
-    state.doneCallee_ = true;
-    this.stateStack.unshift({node: node.callee, components: true});
-  } else {
-    if (!state.func_) {
-      // Determine value of the function.
-      if (state.value.type == 'function') {
-        state.func_ = state.value;
-      } else {
-        state.member_ = state.value[0];
-        state.func_ = this.getValue(state.value);
-        if (!state.func_ || state.func_.type != 'function') {
-          throw new TypeError((state.func_ && state.func_.type) +
-                              ' is not a function');
-        }
-      }
-      // Determine value of 'this' in function.
-      if (state.node.type == 'NewExpression') {
-        state.funcThis_ = this.createObject(state.func_);
-        state.isConstructor_ = true;
-      } else if (state.value.length) {
-        state.funcThis_ = state.value[0];
-      } else {
-        state.funcThis_ =
-            this.stateStack[this.stateStack.length - 1].thisExpression;
-      }
-      state.arguments = [];
-      var n = 0;
-    } else {
-      var n = state.n_;
-      if (state.arguments.length != node.arguments.length) {
-        state.arguments[n - 1] = state.value;
-      }
-    }
-    if (node.arguments[n]) {
-      state.n_ = n + 1;
-      this.stateStack.unshift({node: node.arguments[n]});
-    } else if (!state.doneExec) {
-      state.doneExec = true;
-      if (state.func_.node &&
-          (state.func_.node.type == 'FunctionApply_' ||
-           state.func_.node.type == 'FunctionCall_')) {
-        state.funcThis_ = state.arguments.shift();
-        if (state.func_.node.type == 'FunctionApply_') {
-          // Unpack all the arguments from the provided array.
-          var argsList = state.arguments.shift();
-          if (argsList && this.isa(argsList, this.ARRAY)) {
-            state.arguments = [];
-            for (var i = 0; i < argsList.length; i++) {
-              state.arguments[i] = this.getProperty(argsList, i);
-            }
-          } else {
-            state.arguments = [];
-          }
-        }
-        state.func_ = state.member_;
-      }
-      if (state.func_.node) {
-        var scope =
-            this.createScope(state.func_.node.body, state.func_.parentScope);
-        // Add all arguments.
-        for (var i = 0; i < state.func_.node.params.length; i++) {
-          var paramName = this.createPrimitive(state.func_.node.params[i].name);
-          var paramValue = state.arguments.length > i ? state.arguments[i] :
-              this.UNDEFINED;
-          this.setProperty(scope, paramName, paramValue);
-        }
-        // Build arguments variable.
-        var argsList = this.createObject(this.ARRAY);
-        for (var i = 0; i < state.arguments.length; i++) {
-          this.setProperty(argsList, this.createPrimitive(i),
-                           state.arguments[i]);
-        }
-        this.setProperty(scope, 'arguments', argsList);
-        var funcState = {
-          node: state.func_.node.body,
-          scope: scope,
-          thisExpression: state.funcThis_
-        };
-        this.stateStack.unshift(funcState);
-        state.value = this.UNDEFINED;  // Default value if no explicit return.
-      } else if (state.func_.nativeFunc) {
-        state.value = state.func_.nativeFunc.apply(state.funcThis_,
-                                                   state.arguments);
-      } else if (state.func_.eval) {
-        var code = state.arguments[0];
-        if (!code) {
-          state.value = this.UNDEFINED;
-        } else if (!code.isPrimitive) {
-          // JS does not parse String objects:
-          // eval(new String('1 + 1')) -> '1 + 1'
-          state.value = code;
-        } else {
-          var evalInterpreter = new Interpreter(code.toString());
-          evalInterpreter.stateStack[0].scope.parentScope =
-              this.getScope();
-          var state = {
-            node: {type: 'Eval_'},
-            interpreter: evalInterpreter
-          };
-          this.stateStack.unshift(state);
-        }
-      } else {
-        throw new TypeError('function not a function (huh?)');
-      }
-    } else {
-      this.stateStack.shift();
-      this.stateStack[0].value = state.isConstructor_ ?
-          state.funcThis_ : state.value;
-    }
-  }
-};
-
-Interpreter.prototype['stepConditionalExpression'] = function() {
-  var state = this.stateStack[0];
-  if (!state.done) {
-    if (!state.test) {
-      state.test = true;
-      this.stateStack.unshift({node: state.node.test});
-    } else {
-      state.done = true;
-      if (state.value.toBoolean() && state.node.consequent) {
-        this.stateStack.unshift({node: state.node.consequent});
-      } else if (!state.value.toBoolean() && state.node.alternate) {
-        this.stateStack.unshift({node: state.node.alternate});
-      }
-    }
-  } else {
-    this.stateStack.shift();
-    if (state.node.type == 'ConditionalExpression') {
-      this.stateStack[0].value = state.value;
-    }
-  }
-};
-
-Interpreter.prototype['stepContinueStatement'] = function() {
-  var node = this.stateStack[0].node;
-  var label = null;
-  if (node.label) {
-    label = node.label.name;
-  }
-  var state = this.stateStack[0];
-  while (state && state.node.type != 'callExpression') {
-    if (state.isLoop) {
-      if (!label || (label == state.label)) {
-        return;
-      }
-    }
-    this.stateStack.shift();
-    state = this.stateStack[0];
-  }
-  throw new SyntaxError('Illegal continue statement');
-};
-
-Interpreter.prototype['stepDoWhileStatement'] = function() {
-  var state = this.stateStack[0];
-  state.isLoop = true;
-  if (state.node.type == 'DoWhileStatement' && state.test === undefined) {
-    // First iteration of do/while executes without checking test.
-    state.value = this.createPrimitive(true);
-    state.test = true;
-  }
-  if (!state.test) {
-    state.test = true;
-    this.stateStack.unshift({node: state.node.test});
-  } else {
-    state.test = false;
-    if (!state.value.toBoolean()) {
-      this.stateStack.shift();
-    } else if (state.node.body) {
-      this.stateStack.unshift({node: state.node.body});
-    }
-  }
-};
-
-Interpreter.prototype['stepEmptyStatement'] = function() {
-  this.stateStack.shift();
-};
-
-Interpreter.prototype['stepEval_'] = function() {
-  var state = this.stateStack[0];
-  if (!state.interpreter.step()) {
-    this.stateStack.shift();
-    this.stateStack[0].value = state.interpreter.value || this.UNDEFINED;
-  }
-};
-
-Interpreter.prototype['stepExpressionStatement'] = function() {
-  var state = this.stateStack[0];
-  if (!state.done) {
-    state.done = true;
-    this.stateStack.unshift({node: state.node.expression});
-  } else {
-    this.stateStack.shift();
-    // Save this value to the interpreter for use as a return value if
-    // this code is inside an eval function.
-    this.value = state.value;
-  }
-};
-
-Interpreter.prototype['stepForInStatement'] = function() {
-  var state = this.stateStack[0];
-  state.isLoop = true;
-  var node = state.node;
-  if (!state.doneVariable_) {
-    state.doneVariable_ = true;
-    var left = node.left;
-    if (left.type == 'VariableDeclaration') {
-      // Inline variable declaration: for (var x in y)
-      left = left.declarations[0].id;
-    }
-    this.stateStack.unshift({node: left, components: true});
-  } else if (!state.doneObject_) {
-    state.doneObject_ = true;
-    state.variable = state.value;
-    this.stateStack.unshift({node: node.right});
-  } else {
-    if (typeof state.iterator == 'undefined') {
-      // First iteration.
-      state.object = state.value;
-      state.iterator = 0;
-    }
-    var name = null;
-    done: do {
-      var i = state.iterator;
-      for (var prop in state.object.properties) {
-        if (prop in state.object.nonenumerable) {
-          continue;
-        }
-        if (i == 0) {
-          name = prop;
-          break done;
-        }
-        i--;
-      }
-      state.object = state.object.parent &&
-          state.object.parent.properties.prototype;
-      state.iterator = 0;
-    } while (state.object);
-    state.iterator++;
-    if (name === null) {
-      this.stateStack.shift();
-    } else {
-      this.setValueToScope(state.variable, this.createPrimitive(name));
-      if (node.body) {
-        this.stateStack.unshift({node: node.body});
-      }
-    }
-  }
-};
-
-Interpreter.prototype['stepForStatement'] = function() {
-  var state = this.stateStack[0];
-  state.isLoop = true;
-  var node = state.node;
-  var mode = state.mode || 0;
-  if (mode == 0) {
-    state.mode = 1;
-    if (node.init) {
-      this.stateStack.unshift({node: node.init});
-    }
-  } else if (mode == 1) {
-    state.mode = 2;
-    if (node.test) {
-      this.stateStack.unshift({node: node.test});
-    }
-  } else if (mode == 2) {
-    state.mode = 3;
-    if (state.value && !state.value.toBoolean()) {
-      // Loop complete.  Bail out.
-      this.stateStack.shift();
-    } else if (node.body) {
-      this.stateStack.unshift({node: node.body});
-    }
-  } else if (mode == 3) {
-    state.mode = 1;
-    if (node.update) {
-      this.stateStack.unshift({node: node.update});
-    }
-  }
-};
-
-Interpreter.prototype['stepFunctionDeclaration'] = function() {
-  this.stateStack.shift();
-};
-
-Interpreter.prototype['stepFunctionExpression'] = function() {
-  var state = this.stateStack[0];
-  this.stateStack.shift();
-  this.stateStack[0].value = this.createFunction(state.node);
-};
-
-Interpreter.prototype['stepIdentifier'] = function() {
-  var state = this.stateStack[0];
-  this.stateStack.shift();
-  var name = this.createPrimitive(state.node.name);
-  this.stateStack[0].value =
-      state.components ? name : this.getValueFromScope(name);
-};
-
-Interpreter.prototype['stepIfStatement'] =
-    Interpreter.prototype['stepConditionalExpression'];
-
-Interpreter.prototype['stepLabeledStatement'] = function() {
-  // No need to hit this node again on the way back up the stack.
-  var state = this.stateStack.shift();
-  this.stateStack.unshift({node: state.node.body,
-                          label: state.node.label.name});
-};
-
-Interpreter.prototype['stepLiteral'] = function() {
-  var state = this.stateStack[0];
-  this.stateStack.shift();
-  this.stateStack[0].value = this.createPrimitive(state.node.value);
-};
-
-Interpreter.prototype['stepLogicalExpression'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  if (node.operator != '&&' && node.operator != '||') {
-    throw 'Unknown logical operator: ' + node.operator;
-  }
-  if (!state.doneLeft_) {
-    state.doneLeft_ = true;
-    this.stateStack.unshift({node: node.left});
-  } else if (!state.doneRight_) {
-    if ((node.operator == '&&' && !state.value.toBoolean()) ||
-        (node.operator == '||' && state.value.toBoolean())) {
-      // Shortcut evaluation.
-      this.stateStack.shift();
-      this.stateStack[0].value = state.value;
-    } else {
-      state.doneRight_ = true;
-      this.stateStack.unshift({node: node.right});
-    }
-  } else {
-    this.stateStack.shift();
-    this.stateStack[0].value = state.value;
-  }
-};
-
-Interpreter.prototype['stepMemberExpression'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  if (!state.doneObject_) {
-    state.doneObject_ = true;
-    this.stateStack.unshift({node: node.object});
-  } else if (!state.doneProperty_) {
-    state.doneProperty_ = true;
-    state.object = state.value;
-    this.stateStack.unshift({
-      node: node.property,
-      components: !node.computed
-    });
-  } else {
-    this.stateStack.shift();
-    if (state.components) {
-      this.stateStack[0].value = [state.object, state.value];
-    } else {
-      this.stateStack[0].value = this.getProperty(state.object, state.value);
-    }
-  }
-};
-
-Interpreter.prototype['stepNewExpression'] =
-    Interpreter.prototype['stepCallExpression'];
-
-Interpreter.prototype['stepObjectExpression'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  var valueToggle = state.valueToggle;
-  var n = state.n || 0;
-  if (!state.object) {
-    state.object = this.createObject(this.OBJECT);
-  } else {
-    if (valueToggle) {
-      state.key = state.value;
-    } else {
-      this.setProperty(state.object, state.key, state.value);
-    }
-  }
-  if (node.properties[n]) {
-    if (valueToggle) {
-      state.n = n + 1;
-      this.stateStack.unshift({node: node.properties[n].value});
-    } else {
-      this.stateStack.unshift({node: node.properties[n].key, components: true});
-    }
-    state.valueToggle = !valueToggle;
-  } else {
-    this.stateStack.shift();
-    this.stateStack[0].value = state.object;
-  }
-};
-
-Interpreter.prototype['stepProgram'] =
-    Interpreter.prototype['stepBlockStatement'];
-
-Interpreter.prototype['stepReturnStatement'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  if (node.argument && !state.done) {
-    state.done = true;
-    this.stateStack.unshift({node: node.argument});
-  } else {
-    var value = state.value || this.UNDEFINED;
-    do {
-      this.stateStack.shift();
-      if (this.stateStack.length == 0) {
-        throw new SyntaxError('Illegal return statement');
-      }
-      state = this.stateStack[0];
-    } while (state.node.type != 'CallExpression');
-    state.value = value;
-  }
-};
-
-Interpreter.prototype['stepSequenceExpression'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  var n = state.n || 0;
-  if (node.expressions[n]) {
-    state.n = n + 1;
-    this.stateStack.unshift({node: node.expressions[n]});
-  } else {
-    this.stateStack.shift();
-    this.stateStack[0].value = state.value;
-  }
-};
-
-Interpreter.prototype['stepThisExpression'] = function() {
-  this.stateStack.shift();
-  for (var i = 0; i < this.stateStack.length; i++) {
-    if (this.stateStack[i].thisExpression) {
-      this.stateStack[0].value = this.stateStack[i].thisExpression;
-      return;
-    }
-  }
-  throw 'No this expression found.';
-};
-
-Interpreter.prototype['stepThrowStatement'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  if (!state.argument) {
-    state.argument = true;
-    this.stateStack.unshift({node: node.argument});
-  } else {
-    throw state.value.toString();
-  }
-};
-
-Interpreter.prototype['stepUnaryExpression'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  if (!state.done) {
-    state.done = true;
-    var nextState = {node: node.argument};
-    if (node.operator == 'delete') {
-      nextState.components = true;
-    }
-    this.stateStack.unshift(nextState);
-  } else {
-    this.stateStack.shift();
-    var value;
-    if (node.operator == '-') {
-      value = -state.value.toNumber();
-    } else if (node.operator == '!') {
-      value = !state.value.toNumber();
-    } else if (node.operator == '~') {
-      value = ~state.value.toNumber();
-    } else if (node.operator == 'typeof') {
-      value = state.value.type;
-    } else if (node.operator == 'delete') {
-      if (state.value.length) {
-        var obj = state.value[0];
-        var name = state.value[1];
-      } else {
-        var obj = this.getScope();
-        var name = state.value;
-      }
-      value = this.deleteProperty(obj, name);
-    } else if (node.operator == 'void') {
-      value = undefined;
-    } else {
-      throw 'Unknown unary operator: ' + node.operator;
-    }
-    this.stateStack[0].value = this.createPrimitive(value);
-  }
-};
-
-Interpreter.prototype['stepUpdateExpression'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  if (!state.done) {
-    state.done = true;
-    this.stateStack.unshift({node: node.argument, components: true});
-  } else {
-    this.stateStack.shift();
-    var leftSide = state.value;
-    var leftValue = this.getValue(leftSide).toNumber();
-    var changeValue;
-    if (node.operator == '++') {
-      changeValue = this.createPrimitive(leftValue + 1);
-    } else if (node.operator == '--') {
-      changeValue = this.createPrimitive(leftValue - 1);
-    } else {
-      throw 'Unknown update expression: ' + node.operator;
-    }
-    this.setValue(leftSide, changeValue);
-    var returnValue = node.prefix ? returnValue : leftValue;
-    this.stateStack[0].value = this.createPrimitive(returnValue);
-  }
-};
-
-Interpreter.prototype['stepVariableDeclaration'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  var n = state.n || 0;
-  if (node.declarations[n]) {
-    state.n = n + 1;
-    this.stateStack.unshift({node: node.declarations[n]});
-  } else {
-    this.stateStack.shift();
-  }
-};
-
-Interpreter.prototype['stepVariableDeclarator'] = function() {
-  var state = this.stateStack[0];
-  var node = state.node;
-  if (node.init && !state.done) {
-    state.done = true;
-    this.stateStack.unshift({node: node.init});
-  } else {
-    if (!this.hasProperty(this, node.id.name) || node.init) {
-      var value = node.init ? state.value : this.UNDEFINED;
-      this.setValue(this.createPrimitive(node.id.name), value);
-    }
-    this.stateStack.shift();
-  }
-};
-
-Interpreter.prototype['stepWhileStatement'] =
-    Interpreter.prototype['stepDoWhileStatement'];
-
-// Preserve top-level API functions from being pruned by JS compilers.
-// Add others as needed.
-window['Interpreter'] = Interpreter;
-Interpreter.prototype['step'] = Interpreter.prototype.step;
-Interpreter.prototype['run'] = Interpreter.prototype.run;

+ 0 - 1175
support/client/lib/vwf/model/blockly/blockly_compressed.js

@@ -1,1175 +0,0 @@
-// Do not edit this file; automatically generated by build.py.
-"use strict";
-
-var COMPILED=!0,goog=goog||{};goog.global=this;goog.exportPath_=function(a,b,c){a=a.split(".");c=c||goog.global;a[0]in c||!c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c=c[d]?c[d]:c[d]={}:c[d]=b};goog.define=function(a,b){var c=b;COMPILED||goog.global.CLOSURE_DEFINES&&Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_DEFINES,a)&&(c=goog.global.CLOSURE_DEFINES[a]);goog.exportPath_(a,c)};goog.DEBUG=!0;goog.LOCALE="en";goog.TRUSTED_SITE=!0;
-goog.provide=function(a){if(!COMPILED){if(goog.isProvided_(a))throw Error('Namespace "'+a+'" already declared.');delete goog.implicitNamespaces_[a];for(var b=a;(b=b.substring(0,b.lastIndexOf(".")))&&!goog.getObjectByName(b);)goog.implicitNamespaces_[b]=!0}goog.exportPath_(a)};goog.setTestOnly=function(a){if(COMPILED&&!goog.DEBUG)throw a=a||"",Error("Importing test-only code into non-debug environment"+a?": "+a:".");};
-COMPILED||(goog.isProvided_=function(a){return!goog.implicitNamespaces_[a]&&!!goog.getObjectByName(a)},goog.implicitNamespaces_={});goog.getObjectByName=function(a,b){for(var c=a.split("."),d=b||goog.global,e;e=c.shift();)if(goog.isDefAndNotNull(d[e]))d=d[e];else return null;return d};goog.globalize=function(a,b){var c=b||goog.global,d;for(d in a)c[d]=a[d]};
-goog.addDependency=function(a,b,c){if(goog.DEPENDENCIES_ENABLED){var d;a=a.replace(/\\/g,"/");for(var e=goog.dependencies_,f=0;d=b[f];f++)e.nameToPath[d]=a,a in e.pathToNames||(e.pathToNames[a]={}),e.pathToNames[a][d]=!0;for(d=0;b=c[d];d++)a in e.requires||(e.requires[a]={}),e.requires[a][b]=!0}};goog.ENABLE_DEBUG_LOADER=!0;
-goog.require=function(a){if(!COMPILED&&!goog.isProvided_(a)){if(goog.ENABLE_DEBUG_LOADER){var b=goog.getPathFromDeps_(a);if(b){goog.included_[b]=!0;goog.writeScripts_();return}}a="goog.require could not find: "+a;goog.global.console&&goog.global.console.error(a);throw Error(a);}};goog.basePath="";goog.nullFunction=function(){};goog.identityFunction=function(a,b){return a};goog.abstractMethod=function(){throw Error("unimplemented abstract method");};
-goog.addSingletonGetter=function(a){a.getInstance=function(){if(a.instance_)return a.instance_;goog.DEBUG&&(goog.instantiatedSingletons_[goog.instantiatedSingletons_.length]=a);return a.instance_=new a}};goog.instantiatedSingletons_=[];goog.DEPENDENCIES_ENABLED=!COMPILED&&goog.ENABLE_DEBUG_LOADER;
-goog.DEPENDENCIES_ENABLED&&(goog.included_={},goog.dependencies_={pathToNames:{},nameToPath:{},requires:{},visited:{},written:{}},goog.inHtmlDocument_=function(){var a=goog.global.document;return"undefined"!=typeof a&&"write"in a},goog.findBasePath_=function(){if(goog.global.CLOSURE_BASE_PATH)goog.basePath=goog.global.CLOSURE_BASE_PATH;else if(goog.inHtmlDocument_())for(var a=goog.global.document.getElementsByTagName("script"),b=a.length-1;0<=b;--b){var c=a[b].src,d=c.lastIndexOf("?"),d=-1==d?c.length:
-d;if("base.js"==c.substr(d-7,7)){goog.basePath=c.substr(0,d-7);break}}},goog.importScript_=function(a){var b=goog.global.CLOSURE_IMPORT_SCRIPT||goog.writeScriptTag_;!goog.dependencies_.written[a]&&b(a)&&(goog.dependencies_.written[a]=!0)},goog.writeScriptTag_=function(a){if(goog.inHtmlDocument_()){var b=goog.global.document;if("complete"==b.readyState){if(/\bdeps.js$/.test(a))return!1;throw Error('Cannot write "'+a+'" after document load');}b.write('<script type="text/javascript" src="'+a+'">\x3c/script>');
-return!0}return!1},goog.writeScripts_=function(){function a(e){if(!(e in d.written)){if(!(e in d.visited)&&(d.visited[e]=!0,e in d.requires))for(var g in d.requires[e])if(!goog.isProvided_(g))if(g in d.nameToPath)a(d.nameToPath[g]);else throw Error("Undefined nameToPath for "+g);e in c||(c[e]=!0,b.push(e))}}var b=[],c={},d=goog.dependencies_,e;for(e in goog.included_)d.written[e]||a(e);for(e=0;e<b.length;e++)if(b[e])goog.importScript_(goog.basePath+b[e]);else throw Error("Undefined script input");
-},goog.getPathFromDeps_=function(a){return a in goog.dependencies_.nameToPath?goog.dependencies_.nameToPath[a]:null},goog.findBasePath_(),goog.global.CLOSURE_NO_DEPS||goog.importScript_(goog.basePath+"deps.js"));
-goog.typeOf=function(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null";
-else if("function"==b&&"undefined"==typeof a.call)return"object";return b};goog.isDef=function(a){return void 0!==a};goog.isNull=function(a){return null===a};goog.isDefAndNotNull=function(a){return null!=a};goog.isArray=function(a){return"array"==goog.typeOf(a)};goog.isArrayLike=function(a){var b=goog.typeOf(a);return"array"==b||"object"==b&&"number"==typeof a.length};goog.isDateLike=function(a){return goog.isObject(a)&&"function"==typeof a.getFullYear};goog.isString=function(a){return"string"==typeof a};
-goog.isBoolean=function(a){return"boolean"==typeof a};goog.isNumber=function(a){return"number"==typeof a};goog.isFunction=function(a){return"function"==goog.typeOf(a)};goog.isObject=function(a){var b=typeof a;return"object"==b&&null!=a||"function"==b};goog.getUid=function(a){return a[goog.UID_PROPERTY_]||(a[goog.UID_PROPERTY_]=++goog.uidCounter_)};goog.hasUid=function(a){return!!a[goog.UID_PROPERTY_]};goog.removeUid=function(a){"removeAttribute"in a&&a.removeAttribute(goog.UID_PROPERTY_);try{delete a[goog.UID_PROPERTY_]}catch(b){}};
-goog.UID_PROPERTY_="closure_uid_"+(1E9*Math.random()>>>0);goog.uidCounter_=0;goog.getHashCode=goog.getUid;goog.removeHashCode=goog.removeUid;goog.cloneObject=function(a){var b=goog.typeOf(a);if("object"==b||"array"==b){if(a.clone)return a.clone();var b="array"==b?[]:{},c;for(c in a)b[c]=goog.cloneObject(a[c]);return b}return a};goog.bindNative_=function(a,b,c){return a.call.apply(a.bind,arguments)};
-goog.bindJs_=function(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}};goog.bind=function(a,b,c){Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?goog.bind=goog.bindNative_:goog.bind=goog.bindJs_;return goog.bind.apply(null,arguments)};
-goog.partial=function(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var b=c.slice();b.push.apply(b,arguments);return a.apply(this,b)}};goog.mixin=function(a,b){for(var c in b)a[c]=b[c]};goog.now=goog.TRUSTED_SITE&&Date.now||function(){return+new Date};
-goog.globalEval=function(a){if(goog.global.execScript)goog.global.execScript(a,"JavaScript");else if(goog.global.eval)if(null==goog.evalWorksForGlobals_&&(goog.global.eval("var _et_ = 1;"),"undefined"!=typeof goog.global._et_?(delete goog.global._et_,goog.evalWorksForGlobals_=!0):goog.evalWorksForGlobals_=!1),goog.evalWorksForGlobals_)goog.global.eval(a);else{var b=goog.global.document,c=b.createElement("script");c.type="text/javascript";c.defer=!1;c.appendChild(b.createTextNode(a));b.body.appendChild(c);
-b.body.removeChild(c)}else throw Error("goog.globalEval not available");};goog.evalWorksForGlobals_=null;goog.getCssName=function(a,b){var c=function(a){return goog.cssNameMapping_[a]||a},d=function(a){a=a.split("-");for(var b=[],d=0;d<a.length;d++)b.push(c(a[d]));return b.join("-")},d=goog.cssNameMapping_?"BY_WHOLE"==goog.cssNameMappingStyle_?c:d:function(a){return a};return b?a+"-"+d(b):d(a)};goog.setCssNameMapping=function(a,b){goog.cssNameMapping_=a;goog.cssNameMappingStyle_=b};
-!COMPILED&&goog.global.CLOSURE_CSS_NAME_MAPPING&&(goog.cssNameMapping_=goog.global.CLOSURE_CSS_NAME_MAPPING);goog.getMsg=function(a,b){var c=b||{},d;for(d in c){var e=(""+c[d]).replace(/\$/g,"$$$$");a=a.replace(RegExp("\\{\\$"+d+"\\}","gi"),e)}return a};goog.getMsgWithFallback=function(a,b){return a};goog.exportSymbol=function(a,b,c){goog.exportPath_(a,b,c)};goog.exportProperty=function(a,b,c){a[b]=c};
-goog.inherits=function(a,b){function c(){}c.prototype=b.prototype;a.superClass_=b.prototype;a.prototype=new c;a.prototype.constructor=a};
-goog.base=function(a,b,c){var d=arguments.callee.caller;if(goog.DEBUG&&!d)throw Error("arguments.caller not defined.  goog.base() expects not to be running in strict mode. See http://www.ecma-international.org/ecma-262/5.1/#sec-C");if(d.superClass_)return d.superClass_.constructor.apply(a,Array.prototype.slice.call(arguments,1));for(var e=Array.prototype.slice.call(arguments,2),f=!1,g=a.constructor;g;g=g.superClass_&&g.superClass_.constructor)if(g.prototype[b]===d)f=!0;else if(f)return g.prototype[b].apply(a,
-e);if(a[b]===d)return a.constructor.prototype[b].apply(a,e);throw Error("goog.base called from a method of one name to a method of a different name");};goog.scope=function(a){a.call(goog.global)};goog.string={};goog.string.Unicode={NBSP:"\u00a0"};goog.string.startsWith=function(a,b){return 0==a.lastIndexOf(b,0)};goog.string.endsWith=function(a,b){var c=a.length-b.length;return 0<=c&&a.indexOf(b,c)==c};goog.string.caseInsensitiveStartsWith=function(a,b){return 0==goog.string.caseInsensitiveCompare(b,a.substr(0,b.length))};goog.string.caseInsensitiveEndsWith=function(a,b){return 0==goog.string.caseInsensitiveCompare(b,a.substr(a.length-b.length,b.length))};
-goog.string.caseInsensitiveEquals=function(a,b){return a.toLowerCase()==b.toLowerCase()};goog.string.subs=function(a,b){for(var c=a.split("%s"),d="",e=Array.prototype.slice.call(arguments,1);e.length&&1<c.length;)d+=c.shift()+e.shift();return d+c.join("%s")};goog.string.collapseWhitespace=function(a){return a.replace(/[\s\xa0]+/g," ").replace(/^\s+|\s+$/g,"")};goog.string.isEmpty=function(a){return/^[\s\xa0]*$/.test(a)};goog.string.isEmptySafe=function(a){return goog.string.isEmpty(goog.string.makeSafe(a))};
-goog.string.isBreakingWhitespace=function(a){return!/[^\t\n\r ]/.test(a)};goog.string.isAlpha=function(a){return!/[^a-zA-Z]/.test(a)};goog.string.isNumeric=function(a){return!/[^0-9]/.test(a)};goog.string.isAlphaNumeric=function(a){return!/[^a-zA-Z0-9]/.test(a)};goog.string.isSpace=function(a){return" "==a};goog.string.isUnicodeChar=function(a){return 1==a.length&&" "<=a&&"~">=a||"\u0080"<=a&&"\ufffd">=a};goog.string.stripNewlines=function(a){return a.replace(/(\r\n|\r|\n)+/g," ")};
-goog.string.canonicalizeNewlines=function(a){return a.replace(/(\r\n|\r|\n)/g,"\n")};goog.string.normalizeWhitespace=function(a){return a.replace(/\xa0|\s/g," ")};goog.string.normalizeSpaces=function(a){return a.replace(/\xa0|[ \t]+/g," ")};goog.string.collapseBreakingSpaces=function(a){return a.replace(/[\t\r\n ]+/g," ").replace(/^[\t\r\n ]+|[\t\r\n ]+$/g,"")};goog.string.trim=function(a){return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")};
-goog.string.trimLeft=function(a){return a.replace(/^[\s\xa0]+/,"")};goog.string.trimRight=function(a){return a.replace(/[\s\xa0]+$/,"")};goog.string.caseInsensitiveCompare=function(a,b){var c=String(a).toLowerCase(),d=String(b).toLowerCase();return c<d?-1:c==d?0:1};goog.string.numerateCompareRegExp_=/(\.\d+)|(\d+)|(\D+)/g;
-goog.string.numerateCompare=function(a,b){if(a==b)return 0;if(!a)return-1;if(!b)return 1;for(var c=a.toLowerCase().match(goog.string.numerateCompareRegExp_),d=b.toLowerCase().match(goog.string.numerateCompareRegExp_),e=Math.min(c.length,d.length),f=0;f<e;f++){var g=c[f],h=d[f];if(g!=h)return c=parseInt(g,10),!isNaN(c)&&(d=parseInt(h,10),!isNaN(d)&&c-d)?c-d:g<h?-1:1}return c.length!=d.length?c.length-d.length:a<b?-1:1};goog.string.urlEncode=function(a){return encodeURIComponent(String(a))};
-goog.string.urlDecode=function(a){return decodeURIComponent(a.replace(/\+/g," "))};goog.string.newLineToBr=function(a,b){return a.replace(/(\r\n|\r|\n)/g,b?"<br />":"<br>")};
-goog.string.htmlEscape=function(a,b){if(b)return a.replace(goog.string.amperRe_,"&amp;").replace(goog.string.ltRe_,"&lt;").replace(goog.string.gtRe_,"&gt;").replace(goog.string.quotRe_,"&quot;");if(!goog.string.allRe_.test(a))return a;-1!=a.indexOf("&")&&(a=a.replace(goog.string.amperRe_,"&amp;"));-1!=a.indexOf("<")&&(a=a.replace(goog.string.ltRe_,"&lt;"));-1!=a.indexOf(">")&&(a=a.replace(goog.string.gtRe_,"&gt;"));-1!=a.indexOf('"')&&(a=a.replace(goog.string.quotRe_,"&quot;"));return a};
-goog.string.amperRe_=/&/g;goog.string.ltRe_=/</g;goog.string.gtRe_=/>/g;goog.string.quotRe_=/\"/g;goog.string.allRe_=/[&<>\"]/;goog.string.unescapeEntities=function(a){return goog.string.contains(a,"&")?"document"in goog.global?goog.string.unescapeEntitiesUsingDom_(a):goog.string.unescapePureXmlEntities_(a):a};
-goog.string.unescapeEntitiesUsingDom_=function(a){var b={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"'},c=document.createElement("div");return a.replace(goog.string.HTML_ENTITY_PATTERN_,function(a,e){var f=b[a];if(f)return f;if("#"==e.charAt(0)){var g=Number("0"+e.substr(1));isNaN(g)||(f=String.fromCharCode(g))}f||(c.innerHTML=a+" ",f=c.firstChild.nodeValue.slice(0,-1));return b[a]=f})};
-goog.string.unescapePureXmlEntities_=function(a){return a.replace(/&([^;]+);/g,function(a,c){switch(c){case "amp":return"&";case "lt":return"<";case "gt":return">";case "quot":return'"';default:if("#"==c.charAt(0)){var d=Number("0"+c.substr(1));if(!isNaN(d))return String.fromCharCode(d)}return a}})};goog.string.HTML_ENTITY_PATTERN_=/&([^;\s<&]+);?/g;goog.string.whitespaceEscape=function(a,b){return goog.string.newLineToBr(a.replace(/  /g," &#160;"),b)};
-goog.string.stripQuotes=function(a,b){for(var c=b.length,d=0;d<c;d++){var e=1==c?b:b.charAt(d);if(a.charAt(0)==e&&a.charAt(a.length-1)==e)return a.substring(1,a.length-1)}return a};goog.string.truncate=function(a,b,c){c&&(a=goog.string.unescapeEntities(a));a.length>b&&(a=a.substring(0,b-3)+"...");c&&(a=goog.string.htmlEscape(a));return a};
-goog.string.truncateMiddle=function(a,b,c,d){c&&(a=goog.string.unescapeEntities(a));if(d&&a.length>b){d>b&&(d=b);var e=a.length-d;a=a.substring(0,b-d)+"..."+a.substring(e)}else a.length>b&&(d=Math.floor(b/2),e=a.length-d,a=a.substring(0,d+b%2)+"..."+a.substring(e));c&&(a=goog.string.htmlEscape(a));return a};goog.string.specialEscapeChars_={"\x00":"\\0","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\x0B":"\\x0B",'"':'\\"',"\\":"\\\\"};goog.string.jsEscapeCache_={"'":"\\'"};
-goog.string.quote=function(a){a=String(a);if(a.quote)return a.quote();for(var b=['"'],c=0;c<a.length;c++){var d=a.charAt(c),e=d.charCodeAt(0);b[c+1]=goog.string.specialEscapeChars_[d]||(31<e&&127>e?d:goog.string.escapeChar(d))}b.push('"');return b.join("")};goog.string.escapeString=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=goog.string.escapeChar(a.charAt(c));return b.join("")};
-goog.string.escapeChar=function(a){if(a in goog.string.jsEscapeCache_)return goog.string.jsEscapeCache_[a];if(a in goog.string.specialEscapeChars_)return goog.string.jsEscapeCache_[a]=goog.string.specialEscapeChars_[a];var b=a,c=a.charCodeAt(0);if(31<c&&127>c)b=a;else{if(256>c){if(b="\\x",16>c||256<c)b+="0"}else b="\\u",4096>c&&(b+="0");b+=c.toString(16).toUpperCase()}return goog.string.jsEscapeCache_[a]=b};goog.string.toMap=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=!0;return b};
-goog.string.contains=function(a,b){return-1!=a.indexOf(b)};goog.string.countOf=function(a,b){return a&&b?a.split(b).length-1:0};goog.string.removeAt=function(a,b,c){var d=a;0<=b&&b<a.length&&0<c&&(d=a.substr(0,b)+a.substr(b+c,a.length-b-c));return d};goog.string.remove=function(a,b){var c=RegExp(goog.string.regExpEscape(b),"");return a.replace(c,"")};goog.string.removeAll=function(a,b){var c=RegExp(goog.string.regExpEscape(b),"g");return a.replace(c,"")};
-goog.string.regExpEscape=function(a){return String(a).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")};goog.string.repeat=function(a,b){return Array(b+1).join(a)};goog.string.padNumber=function(a,b,c){a=goog.isDef(c)?a.toFixed(c):String(a);c=a.indexOf(".");-1==c&&(c=a.length);return goog.string.repeat("0",Math.max(0,b-c))+a};goog.string.makeSafe=function(a){return null==a?"":String(a)};goog.string.buildString=function(a){return Array.prototype.join.call(arguments,"")};
-goog.string.getRandomString=function(){return Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^goog.now()).toString(36)};
-goog.string.compareVersions=function(a,b){for(var c=0,d=goog.string.trim(String(a)).split("."),e=goog.string.trim(String(b)).split("."),f=Math.max(d.length,e.length),g=0;0==c&&g<f;g++){var h=d[g]||"",k=e[g]||"",l=RegExp("(\\d*)(\\D*)","g"),p=RegExp("(\\d*)(\\D*)","g");do{var m=l.exec(h)||["","",""],q=p.exec(k)||["","",""];if(0==m[0].length&&0==q[0].length)break;var c=0==m[1].length?0:parseInt(m[1],10),n=0==q[1].length?0:parseInt(q[1],10),c=goog.string.compareElements_(c,n)||goog.string.compareElements_(0==
-m[2].length,0==q[2].length)||goog.string.compareElements_(m[2],q[2])}while(0==c)}return c};goog.string.compareElements_=function(a,b){return a<b?-1:a>b?1:0};goog.string.HASHCODE_MAX_=4294967296;goog.string.hashCode=function(a){for(var b=0,c=0;c<a.length;++c)b=31*b+a.charCodeAt(c),b%=goog.string.HASHCODE_MAX_;return b};goog.string.uniqueStringCounter_=2147483648*Math.random()|0;goog.string.createUniqueString=function(){return"goog_"+goog.string.uniqueStringCounter_++};
-goog.string.toNumber=function(a){var b=Number(a);return 0==b&&goog.string.isEmpty(a)?NaN:b};goog.string.isLowerCamelCase=function(a){return/^[a-z]+([A-Z][a-z]*)*$/.test(a)};goog.string.isUpperCamelCase=function(a){return/^([A-Z][a-z]*)+$/.test(a)};goog.string.toCamelCase=function(a){return String(a).replace(/\-([a-z])/g,function(a,c){return c.toUpperCase()})};goog.string.toSelectorCase=function(a){return String(a).replace(/([A-Z])/g,"-$1").toLowerCase()};
-goog.string.toTitleCase=function(a,b){var c=goog.isString(b)?goog.string.regExpEscape(b):"\\s";return a.replace(RegExp("(^"+(c?"|["+c+"]+":"")+")([a-z])","g"),function(a,b,c){return b+c.toUpperCase()})};goog.string.parseInt=function(a){isFinite(a)&&(a=String(a));return goog.isString(a)?/^\s*-?0x/i.test(a)?parseInt(a,16):parseInt(a,10):NaN};goog.string.splitLimit=function(a,b,c){a=a.split(b);for(var d=[];0<c&&a.length;)d.push(a.shift()),c--;a.length&&d.push(a.join(b));return d};goog.userAgent={};goog.userAgent.ASSUME_IE=!1;goog.userAgent.ASSUME_GECKO=!1;goog.userAgent.ASSUME_WEBKIT=!1;goog.userAgent.ASSUME_MOBILE_WEBKIT=!1;goog.userAgent.ASSUME_OPERA=!1;goog.userAgent.ASSUME_ANY_VERSION=!1;goog.userAgent.BROWSER_KNOWN_=goog.userAgent.ASSUME_IE||goog.userAgent.ASSUME_GECKO||goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_OPERA;
-goog.userAgent.getUserAgentString=function(){return goog.global.navigator?goog.global.navigator.userAgent:null};goog.userAgent.getNavigator=function(){return goog.global.navigator};
-goog.userAgent.init_=function(){goog.userAgent.detectedOpera_=!1;goog.userAgent.detectedIe_=!1;goog.userAgent.detectedWebkit_=!1;goog.userAgent.detectedMobile_=!1;goog.userAgent.detectedGecko_=!1;var a;if(!goog.userAgent.BROWSER_KNOWN_&&(a=goog.userAgent.getUserAgentString())){var b=goog.userAgent.getNavigator();goog.userAgent.detectedOpera_=goog.string.startsWith(a,"Opera");goog.userAgent.detectedIe_=!goog.userAgent.detectedOpera_&&(goog.string.contains(a,"MSIE")||goog.string.contains(a,"Trident"));
-goog.userAgent.detectedWebkit_=!goog.userAgent.detectedOpera_&&goog.string.contains(a,"WebKit");goog.userAgent.detectedMobile_=goog.userAgent.detectedWebkit_&&goog.string.contains(a,"Mobile");goog.userAgent.detectedGecko_=!goog.userAgent.detectedOpera_&&!goog.userAgent.detectedWebkit_&&!goog.userAgent.detectedIe_&&"Gecko"==b.product}};goog.userAgent.BROWSER_KNOWN_||goog.userAgent.init_();goog.userAgent.OPERA=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_OPERA:goog.userAgent.detectedOpera_;
-goog.userAgent.IE=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_IE:goog.userAgent.detectedIe_;goog.userAgent.GECKO=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_GECKO:goog.userAgent.detectedGecko_;goog.userAgent.WEBKIT=goog.userAgent.BROWSER_KNOWN_?goog.userAgent.ASSUME_WEBKIT||goog.userAgent.ASSUME_MOBILE_WEBKIT:goog.userAgent.detectedWebkit_;goog.userAgent.MOBILE=goog.userAgent.ASSUME_MOBILE_WEBKIT||goog.userAgent.detectedMobile_;goog.userAgent.SAFARI=goog.userAgent.WEBKIT;
-goog.userAgent.determinePlatform_=function(){var a=goog.userAgent.getNavigator();return a&&a.platform||""};goog.userAgent.PLATFORM=goog.userAgent.determinePlatform_();goog.userAgent.ASSUME_MAC=!1;goog.userAgent.ASSUME_WINDOWS=!1;goog.userAgent.ASSUME_LINUX=!1;goog.userAgent.ASSUME_X11=!1;goog.userAgent.ASSUME_ANDROID=!1;goog.userAgent.ASSUME_IPHONE=!1;goog.userAgent.ASSUME_IPAD=!1;
-goog.userAgent.PLATFORM_KNOWN_=goog.userAgent.ASSUME_MAC||goog.userAgent.ASSUME_WINDOWS||goog.userAgent.ASSUME_LINUX||goog.userAgent.ASSUME_X11||goog.userAgent.ASSUME_ANDROID||goog.userAgent.ASSUME_IPHONE||goog.userAgent.ASSUME_IPAD;
-goog.userAgent.initPlatform_=function(){goog.userAgent.detectedMac_=goog.string.contains(goog.userAgent.PLATFORM,"Mac");goog.userAgent.detectedWindows_=goog.string.contains(goog.userAgent.PLATFORM,"Win");goog.userAgent.detectedLinux_=goog.string.contains(goog.userAgent.PLATFORM,"Linux");goog.userAgent.detectedX11_=!!goog.userAgent.getNavigator()&&goog.string.contains(goog.userAgent.getNavigator().appVersion||"","X11");var a=goog.userAgent.getUserAgentString();goog.userAgent.detectedAndroid_=!!a&&
-goog.string.contains(a,"Android");goog.userAgent.detectedIPhone_=!!a&&goog.string.contains(a,"iPhone");goog.userAgent.detectedIPad_=!!a&&goog.string.contains(a,"iPad")};goog.userAgent.PLATFORM_KNOWN_||goog.userAgent.initPlatform_();goog.userAgent.MAC=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_MAC:goog.userAgent.detectedMac_;goog.userAgent.WINDOWS=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_WINDOWS:goog.userAgent.detectedWindows_;
-goog.userAgent.LINUX=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_LINUX:goog.userAgent.detectedLinux_;goog.userAgent.X11=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_X11:goog.userAgent.detectedX11_;goog.userAgent.ANDROID=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_ANDROID:goog.userAgent.detectedAndroid_;goog.userAgent.IPHONE=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPHONE:goog.userAgent.detectedIPhone_;
-goog.userAgent.IPAD=goog.userAgent.PLATFORM_KNOWN_?goog.userAgent.ASSUME_IPAD:goog.userAgent.detectedIPad_;
-goog.userAgent.determineVersion_=function(){var a="",b;goog.userAgent.OPERA&&goog.global.opera?(a=goog.global.opera.version,a="function"==typeof a?a():a):(goog.userAgent.GECKO?b=/rv\:([^\);]+)(\)|;)/:goog.userAgent.IE?b=/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/:goog.userAgent.WEBKIT&&(b=/WebKit\/(\S+)/),b&&(a=(a=b.exec(goog.userAgent.getUserAgentString()))?a[1]:""));return goog.userAgent.IE&&(b=goog.userAgent.getDocumentMode_(),b>parseFloat(a))?String(b):a};
-goog.userAgent.getDocumentMode_=function(){var a=goog.global.document;return a?a.documentMode:void 0};goog.userAgent.VERSION=goog.userAgent.determineVersion_();goog.userAgent.compare=function(a,b){return goog.string.compareVersions(a,b)};goog.userAgent.isVersionOrHigherCache_={};
-goog.userAgent.isVersionOrHigher=function(a){return goog.userAgent.ASSUME_ANY_VERSION||goog.userAgent.isVersionOrHigherCache_[a]||(goog.userAgent.isVersionOrHigherCache_[a]=0<=goog.string.compareVersions(goog.userAgent.VERSION,a))};goog.userAgent.isVersion=goog.userAgent.isVersionOrHigher;goog.userAgent.isDocumentModeOrHigher=function(a){return goog.userAgent.IE&&goog.userAgent.DOCUMENT_MODE>=a};goog.userAgent.isDocumentMode=goog.userAgent.isDocumentModeOrHigher;
-goog.userAgent.DOCUMENT_MODE=function(){var a=goog.global.document;return a&&goog.userAgent.IE?goog.userAgent.getDocumentMode_()||("CSS1Compat"==a.compatMode?parseInt(goog.userAgent.VERSION,10):5):void 0}();goog.debug={};goog.debug.Error=function(a){Error.captureStackTrace?Error.captureStackTrace(this,goog.debug.Error):this.stack=Error().stack||"";a&&(this.message=String(a))};goog.inherits(goog.debug.Error,Error);goog.debug.Error.prototype.name="CustomError";goog.dom={};goog.dom.NodeType={ELEMENT:1,ATTRIBUTE:2,TEXT:3,CDATA_SECTION:4,ENTITY_REFERENCE:5,ENTITY:6,PROCESSING_INSTRUCTION:7,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,NOTATION:12};goog.asserts={};goog.asserts.ENABLE_ASSERTS=goog.DEBUG;goog.asserts.AssertionError=function(a,b){b.unshift(a);goog.debug.Error.call(this,goog.string.subs.apply(null,b));b.shift();this.messagePattern=a};goog.inherits(goog.asserts.AssertionError,goog.debug.Error);goog.asserts.AssertionError.prototype.name="AssertionError";goog.asserts.doAssertFailure_=function(a,b,c,d){var e="Assertion failed";if(c)var e=e+(": "+c),f=d;else a&&(e+=": "+a,f=b);throw new goog.asserts.AssertionError(""+e,f||[]);};
-goog.asserts.assert=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!a&&goog.asserts.doAssertFailure_("",null,b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.fail=function(a,b){if(goog.asserts.ENABLE_ASSERTS)throw new goog.asserts.AssertionError("Failure"+(a?": "+a:""),Array.prototype.slice.call(arguments,1));};
-goog.asserts.assertNumber=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isNumber(a)&&goog.asserts.doAssertFailure_("Expected number but got %s: %s.",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertString=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isString(a)&&goog.asserts.doAssertFailure_("Expected string but got %s: %s.",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};
-goog.asserts.assertFunction=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isFunction(a)&&goog.asserts.doAssertFailure_("Expected function but got %s: %s.",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertObject=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isObject(a)&&goog.asserts.doAssertFailure_("Expected object but got %s: %s.",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};
-goog.asserts.assertArray=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isArray(a)&&goog.asserts.doAssertFailure_("Expected array but got %s: %s.",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertBoolean=function(a,b,c){goog.asserts.ENABLE_ASSERTS&&!goog.isBoolean(a)&&goog.asserts.doAssertFailure_("Expected boolean but got %s: %s.",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};
-goog.asserts.assertElement=function(a,b,c){!goog.asserts.ENABLE_ASSERTS||goog.isObject(a)&&a.nodeType==goog.dom.NodeType.ELEMENT||goog.asserts.doAssertFailure_("Expected Element but got %s: %s.",[goog.typeOf(a),a],b,Array.prototype.slice.call(arguments,2));return a};goog.asserts.assertInstanceof=function(a,b,c,d){!goog.asserts.ENABLE_ASSERTS||a instanceof b||goog.asserts.doAssertFailure_("instanceof check failed.",null,c,Array.prototype.slice.call(arguments,3));return a};
-goog.asserts.assertObjectPrototypeIsIntact=function(){for(var a in Object.prototype)goog.asserts.fail(a+" should not be enumerable in Object.prototype.")};goog.disposable={};goog.disposable.IDisposable=function(){};goog.Disposable=function(){goog.Disposable.MONITORING_MODE!=goog.Disposable.MonitoringMode.OFF&&(goog.Disposable.INCLUDE_STACK_ON_CREATION&&(this.creationStack=Error().stack),goog.Disposable.instances_[goog.getUid(this)]=this)};goog.Disposable.MonitoringMode={OFF:0,PERMANENT:1,INTERACTIVE:2};goog.Disposable.MONITORING_MODE=0;goog.Disposable.INCLUDE_STACK_ON_CREATION=!0;goog.Disposable.instances_={};
-goog.Disposable.getUndisposedObjects=function(){var a=[],b;for(b in goog.Disposable.instances_)goog.Disposable.instances_.hasOwnProperty(b)&&a.push(goog.Disposable.instances_[Number(b)]);return a};goog.Disposable.clearUndisposedObjects=function(){goog.Disposable.instances_={}};goog.Disposable.prototype.disposed_=!1;goog.Disposable.prototype.isDisposed=function(){return this.disposed_};goog.Disposable.prototype.getDisposed=goog.Disposable.prototype.isDisposed;
-goog.Disposable.prototype.dispose=function(){if(!this.disposed_&&(this.disposed_=!0,this.disposeInternal(),goog.Disposable.MONITORING_MODE!=goog.Disposable.MonitoringMode.OFF)){var a=goog.getUid(this);if(goog.Disposable.MONITORING_MODE==goog.Disposable.MonitoringMode.PERMANENT&&!goog.Disposable.instances_.hasOwnProperty(a))throw Error(this+" did not call the goog.Disposable base constructor or was disposed of after a clearUndisposedObjects call");delete goog.Disposable.instances_[a]}};
-goog.Disposable.prototype.registerDisposable=function(a){this.addOnDisposeCallback(goog.partial(goog.dispose,a))};goog.Disposable.prototype.addOnDisposeCallback=function(a,b){this.onDisposeCallbacks_||(this.onDisposeCallbacks_=[]);this.onDisposeCallbacks_.push(goog.bind(a,b))};goog.Disposable.prototype.disposeInternal=function(){if(this.onDisposeCallbacks_)for(;this.onDisposeCallbacks_.length;)this.onDisposeCallbacks_.shift()()};
-goog.Disposable.isDisposed=function(a){return a&&"function"==typeof a.isDisposed?a.isDisposed():!1};goog.dispose=function(a){a&&"function"==typeof a.dispose&&a.dispose()};goog.disposeAll=function(a){for(var b=0,c=arguments.length;b<c;++b){var d=arguments[b];goog.isArrayLike(d)?goog.disposeAll.apply(null,d):goog.dispose(d)}};goog.array={};goog.NATIVE_ARRAY_PROTOTYPES=goog.TRUSTED_SITE;goog.array.peek=function(a){return a[a.length-1]};goog.array.ARRAY_PROTOTYPE_=Array.prototype;
-goog.array.indexOf=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.indexOf?function(a,b,c){goog.asserts.assert(null!=a.length);return goog.array.ARRAY_PROTOTYPE_.indexOf.call(a,b,c)}:function(a,b,c){c=null==c?0:0>c?Math.max(0,a.length+c):c;if(goog.isString(a))return goog.isString(b)&&1==b.length?a.indexOf(b,c):-1;for(;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};
-goog.array.lastIndexOf=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.lastIndexOf?function(a,b,c){goog.asserts.assert(null!=a.length);return goog.array.ARRAY_PROTOTYPE_.lastIndexOf.call(a,b,null==c?a.length-1:c)}:function(a,b,c){c=null==c?a.length-1:c;0>c&&(c=Math.max(0,a.length+c));if(goog.isString(a))return goog.isString(b)&&1==b.length?a.lastIndexOf(b,c):-1;for(;0<=c;c--)if(c in a&&a[c]===b)return c;return-1};
-goog.array.forEach=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.forEach?function(a,b,c){goog.asserts.assert(null!=a.length);goog.array.ARRAY_PROTOTYPE_.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(""):a,f=0;f<d;f++)f in e&&b.call(c,e[f],f,a)};goog.array.forEachRight=function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(""):a,d=d-1;0<=d;--d)d in e&&b.call(c,e[d],d,a)};
-goog.array.filter=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.filter?function(a,b,c){goog.asserts.assert(null!=a.length);return goog.array.ARRAY_PROTOTYPE_.filter.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=[],f=0,g=goog.isString(a)?a.split(""):a,h=0;h<d;h++)if(h in g){var k=g[h];b.call(c,k,h,a)&&(e[f++]=k)}return e};
-goog.array.map=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.map?function(a,b,c){goog.asserts.assert(null!=a.length);return goog.array.ARRAY_PROTOTYPE_.map.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=Array(d),f=goog.isString(a)?a.split(""):a,g=0;g<d;g++)g in f&&(e[g]=b.call(c,f[g],g,a));return e};
-goog.array.reduce=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.reduce?function(a,b,c,d){goog.asserts.assert(null!=a.length);d&&(b=goog.bind(b,d));return goog.array.ARRAY_PROTOTYPE_.reduce.call(a,b,c)}:function(a,b,c,d){var e=c;goog.array.forEach(a,function(c,g){e=b.call(d,e,c,g,a)});return e};
-goog.array.reduceRight=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.reduceRight?function(a,b,c,d){goog.asserts.assert(null!=a.length);d&&(b=goog.bind(b,d));return goog.array.ARRAY_PROTOTYPE_.reduceRight.call(a,b,c)}:function(a,b,c,d){var e=c;goog.array.forEachRight(a,function(c,g){e=b.call(d,e,c,g,a)});return e};
-goog.array.some=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.some?function(a,b,c){goog.asserts.assert(null!=a.length);return goog.array.ARRAY_PROTOTYPE_.some.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(""):a,f=0;f<d;f++)if(f in e&&b.call(c,e[f],f,a))return!0;return!1};
-goog.array.every=goog.NATIVE_ARRAY_PROTOTYPES&&goog.array.ARRAY_PROTOTYPE_.every?function(a,b,c){goog.asserts.assert(null!=a.length);return goog.array.ARRAY_PROTOTYPE_.every.call(a,b,c)}:function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(""):a,f=0;f<d;f++)if(f in e&&!b.call(c,e[f],f,a))return!1;return!0};goog.array.count=function(a,b,c){var d=0;goog.array.forEach(a,function(a,f,g){b.call(c,a,f,g)&&++d},c);return d};
-goog.array.find=function(a,b,c){b=goog.array.findIndex(a,b,c);return 0>b?null:goog.isString(a)?a.charAt(b):a[b]};goog.array.findIndex=function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(""):a,f=0;f<d;f++)if(f in e&&b.call(c,e[f],f,a))return f;return-1};goog.array.findRight=function(a,b,c){b=goog.array.findIndexRight(a,b,c);return 0>b?null:goog.isString(a)?a.charAt(b):a[b]};
-goog.array.findIndexRight=function(a,b,c){for(var d=a.length,e=goog.isString(a)?a.split(""):a,d=d-1;0<=d;d--)if(d in e&&b.call(c,e[d],d,a))return d;return-1};goog.array.contains=function(a,b){return 0<=goog.array.indexOf(a,b)};goog.array.isEmpty=function(a){return 0==a.length};goog.array.clear=function(a){if(!goog.isArray(a))for(var b=a.length-1;0<=b;b--)delete a[b];a.length=0};goog.array.insert=function(a,b){goog.array.contains(a,b)||a.push(b)};
-goog.array.insertAt=function(a,b,c){goog.array.splice(a,c,0,b)};goog.array.insertArrayAt=function(a,b,c){goog.partial(goog.array.splice,a,c,0).apply(null,b)};goog.array.insertBefore=function(a,b,c){var d;2==arguments.length||0>(d=goog.array.indexOf(a,c))?a.push(b):goog.array.insertAt(a,b,d)};goog.array.remove=function(a,b){var c=goog.array.indexOf(a,b),d;(d=0<=c)&&goog.array.removeAt(a,c);return d};
-goog.array.removeAt=function(a,b){goog.asserts.assert(null!=a.length);return 1==goog.array.ARRAY_PROTOTYPE_.splice.call(a,b,1).length};goog.array.removeIf=function(a,b,c){b=goog.array.findIndex(a,b,c);return 0<=b?(goog.array.removeAt(a,b),!0):!1};goog.array.concat=function(a){return goog.array.ARRAY_PROTOTYPE_.concat.apply(goog.array.ARRAY_PROTOTYPE_,arguments)};goog.array.toArray=function(a){var b=a.length;if(0<b){for(var c=Array(b),d=0;d<b;d++)c[d]=a[d];return c}return[]};goog.array.clone=goog.array.toArray;
-goog.array.extend=function(a,b){for(var c=1;c<arguments.length;c++){var d=arguments[c],e;if(goog.isArray(d)||(e=goog.isArrayLike(d))&&Object.prototype.hasOwnProperty.call(d,"callee"))a.push.apply(a,d);else if(e)for(var f=a.length,g=d.length,h=0;h<g;h++)a[f+h]=d[h];else a.push(d)}};goog.array.splice=function(a,b,c,d){goog.asserts.assert(null!=a.length);return goog.array.ARRAY_PROTOTYPE_.splice.apply(a,goog.array.slice(arguments,1))};
-goog.array.slice=function(a,b,c){goog.asserts.assert(null!=a.length);return 2>=arguments.length?goog.array.ARRAY_PROTOTYPE_.slice.call(a,b):goog.array.ARRAY_PROTOTYPE_.slice.call(a,b,c)};goog.array.removeDuplicates=function(a,b,c){b=b||a;var d=function(a){return goog.isObject(g)?"o"+goog.getUid(g):(typeof g).charAt(0)+g};c=c||d;for(var d={},e=0,f=0;f<a.length;){var g=a[f++],h=c(g);Object.prototype.hasOwnProperty.call(d,h)||(d[h]=!0,b[e++]=g)}b.length=e};
-goog.array.binarySearch=function(a,b,c){return goog.array.binarySearch_(a,c||goog.array.defaultCompare,!1,b)};goog.array.binarySelect=function(a,b,c){return goog.array.binarySearch_(a,b,!0,void 0,c)};goog.array.binarySearch_=function(a,b,c,d,e){for(var f=0,g=a.length,h;f<g;){var k=f+g>>1,l;l=c?b.call(e,a[k],k,a):b(d,a[k]);0<l?f=k+1:(g=k,h=!l)}return h?f:~f};goog.array.sort=function(a,b){goog.asserts.assert(null!=a.length);goog.array.ARRAY_PROTOTYPE_.sort.call(a,b||goog.array.defaultCompare)};
-goog.array.stableSort=function(a,b){for(var c=0;c<a.length;c++)a[c]={index:c,value:a[c]};var d=b||goog.array.defaultCompare;goog.array.sort(a,function(a,b){return d(a.value,b.value)||a.index-b.index});for(c=0;c<a.length;c++)a[c]=a[c].value};goog.array.sortObjectsByKey=function(a,b,c){var d=c||goog.array.defaultCompare;goog.array.sort(a,function(a,c){return d(a[b],c[b])})};
-goog.array.isSorted=function(a,b,c){b=b||goog.array.defaultCompare;for(var d=1;d<a.length;d++){var e=b(a[d-1],a[d]);if(0<e||0==e&&c)return!1}return!0};goog.array.equals=function(a,b,c){if(!goog.isArrayLike(a)||!goog.isArrayLike(b)||a.length!=b.length)return!1;var d=a.length;c=c||goog.array.defaultCompareEquality;for(var e=0;e<d;e++)if(!c(a[e],b[e]))return!1;return!0};goog.array.compare=function(a,b,c){return goog.array.equals(a,b,c)};
-goog.array.compare3=function(a,b,c){c=c||goog.array.defaultCompare;for(var d=Math.min(a.length,b.length),e=0;e<d;e++){var f=c(a[e],b[e]);if(0!=f)return f}return goog.array.defaultCompare(a.length,b.length)};goog.array.defaultCompare=function(a,b){return a>b?1:a<b?-1:0};goog.array.defaultCompareEquality=function(a,b){return a===b};goog.array.binaryInsert=function(a,b,c){c=goog.array.binarySearch(a,b,c);return 0>c?(goog.array.insertAt(a,b,-(c+1)),!0):!1};
-goog.array.binaryRemove=function(a,b,c){b=goog.array.binarySearch(a,b,c);return 0<=b?goog.array.removeAt(a,b):!1};goog.array.bucket=function(a,b,c){for(var d={},e=0;e<a.length;e++){var f=a[e],g=b.call(c,f,e,a);goog.isDef(g)&&(d[g]||(d[g]=[])).push(f)}return d};goog.array.toObject=function(a,b,c){var d={};goog.array.forEach(a,function(e,f){d[b.call(c,e,f,a)]=e});return d};
-goog.array.range=function(a,b,c){var d=[],e=0,f=a;c=c||1;void 0!==b&&(e=a,f=b);if(0>c*(f-e))return[];if(0<c)for(a=e;a<f;a+=c)d.push(a);else for(a=e;a>f;a+=c)d.push(a);return d};goog.array.repeat=function(a,b){for(var c=[],d=0;d<b;d++)c[d]=a;return c};goog.array.flatten=function(a){for(var b=[],c=0;c<arguments.length;c++){var d=arguments[c];goog.isArray(d)?b.push.apply(b,goog.array.flatten.apply(null,d)):b.push(d)}return b};
-goog.array.rotate=function(a,b){goog.asserts.assert(null!=a.length);a.length&&(b%=a.length,0<b?goog.array.ARRAY_PROTOTYPE_.unshift.apply(a,a.splice(-b,b)):0>b&&goog.array.ARRAY_PROTOTYPE_.push.apply(a,a.splice(0,-b)));return a};goog.array.moveItem=function(a,b,c){goog.asserts.assert(0<=b&&b<a.length);goog.asserts.assert(0<=c&&c<a.length);b=goog.array.ARRAY_PROTOTYPE_.splice.call(a,b,1);goog.array.ARRAY_PROTOTYPE_.splice.call(a,c,0,b[0])};
-goog.array.zip=function(a){if(!arguments.length)return[];for(var b=[],c=0;;c++){for(var d=[],e=0;e<arguments.length;e++){var f=arguments[e];if(c>=f.length)return b;d.push(f[c])}b.push(d)}};goog.array.shuffle=function(a,b){for(var c=b||Math.random,d=a.length-1;0<d;d--){var e=Math.floor(c()*(d+1)),f=a[d];a[d]=a[e];a[e]=f}};goog.debug.entryPointRegistry={};goog.debug.EntryPointMonitor=function(){};goog.debug.entryPointRegistry.refList_=[];goog.debug.entryPointRegistry.monitors_=[];goog.debug.entryPointRegistry.monitorsMayExist_=!1;goog.debug.entryPointRegistry.register=function(a){goog.debug.entryPointRegistry.refList_[goog.debug.entryPointRegistry.refList_.length]=a;if(goog.debug.entryPointRegistry.monitorsMayExist_)for(var b=goog.debug.entryPointRegistry.monitors_,c=0;c<b.length;c++)a(goog.bind(b[c].wrap,b[c]))};
-goog.debug.entryPointRegistry.monitorAll=function(a){goog.debug.entryPointRegistry.monitorsMayExist_=!0;for(var b=goog.bind(a.wrap,a),c=0;c<goog.debug.entryPointRegistry.refList_.length;c++)goog.debug.entryPointRegistry.refList_[c](b);goog.debug.entryPointRegistry.monitors_.push(a)};
-goog.debug.entryPointRegistry.unmonitorAllIfPossible=function(a){var b=goog.debug.entryPointRegistry.monitors_;goog.asserts.assert(a==b[b.length-1],"Only the most recent monitor can be unwrapped.");a=goog.bind(a.unwrap,a);for(var c=0;c<goog.debug.entryPointRegistry.refList_.length;c++)goog.debug.entryPointRegistry.refList_[c](a);b.length--};goog.events={};
-goog.events.BrowserFeature={HAS_W3C_BUTTON:!goog.userAgent.IE||goog.userAgent.isDocumentModeOrHigher(9),HAS_W3C_EVENT_SUPPORT:!goog.userAgent.IE||goog.userAgent.isDocumentModeOrHigher(9),SET_KEY_CODE_TO_PREVENT_DEFAULT:goog.userAgent.IE&&!goog.userAgent.isVersionOrHigher("9"),HAS_NAVIGATOR_ONLINE_PROPERTY:!goog.userAgent.WEBKIT||goog.userAgent.isVersionOrHigher("528"),HAS_HTML5_NETWORK_EVENT_SUPPORT:goog.userAgent.GECKO&&goog.userAgent.isVersionOrHigher("1.9b")||goog.userAgent.IE&&goog.userAgent.isVersionOrHigher("8")||
-goog.userAgent.OPERA&&goog.userAgent.isVersionOrHigher("9.5")||goog.userAgent.WEBKIT&&goog.userAgent.isVersionOrHigher("528"),HTML5_NETWORK_EVENTS_FIRE_ON_BODY:goog.userAgent.GECKO&&!goog.userAgent.isVersionOrHigher("8")||goog.userAgent.IE&&!goog.userAgent.isVersionOrHigher("9"),TOUCH_ENABLED:"ontouchstart"in goog.global||!!(goog.global.document&&document.documentElement&&"ontouchstart"in document.documentElement)||!(!goog.global.navigator||!goog.global.navigator.msMaxTouchPoints)};goog.events.EventId=function(a){this.id=a};goog.events.EventId.prototype.toString=function(){return this.id};goog.events.Event=function(a,b){this.type=a instanceof goog.events.EventId?String(a):a;this.currentTarget=this.target=b};goog.events.Event.prototype.disposeInternal=function(){};goog.events.Event.prototype.dispose=function(){};goog.events.Event.prototype.propagationStopped_=!1;goog.events.Event.prototype.defaultPrevented=!1;goog.events.Event.prototype.returnValue_=!0;goog.events.Event.prototype.stopPropagation=function(){this.propagationStopped_=!0};
-goog.events.Event.prototype.preventDefault=function(){this.defaultPrevented=!0;this.returnValue_=!1};goog.events.Event.stopPropagation=function(a){a.stopPropagation()};goog.events.Event.preventDefault=function(a){a.preventDefault()};goog.events.getVendorPrefixedName_=function(a){return goog.userAgent.WEBKIT?"webkit"+a:goog.userAgent.OPERA?"o"+a.toLowerCase():a.toLowerCase()};
-goog.events.EventType={CLICK:"click",DBLCLICK:"dblclick",MOUSEDOWN:"mousedown",MOUSEUP:"mouseup",MOUSEOVER:"mouseover",MOUSEOUT:"mouseout",MOUSEMOVE:"mousemove",MOUSEENTER:"mouseenter",MOUSELEAVE:"mouseleave",SELECTSTART:"selectstart",KEYPRESS:"keypress",KEYDOWN:"keydown",KEYUP:"keyup",BLUR:"blur",FOCUS:"focus",DEACTIVATE:"deactivate",FOCUSIN:goog.userAgent.IE?"focusin":"DOMFocusIn",FOCUSOUT:goog.userAgent.IE?"focusout":"DOMFocusOut",CHANGE:"change",SELECT:"select",SUBMIT:"submit",INPUT:"input",PROPERTYCHANGE:"propertychange",
-DRAGSTART:"dragstart",DRAG:"drag",DRAGENTER:"dragenter",DRAGOVER:"dragover",DRAGLEAVE:"dragleave",DROP:"drop",DRAGEND:"dragend",TOUCHSTART:"touchstart",TOUCHMOVE:"touchmove",TOUCHEND:"touchend",TOUCHCANCEL:"touchcancel",BEFOREUNLOAD:"beforeunload",CONSOLEMESSAGE:"consolemessage",CONTEXTMENU:"contextmenu",DOMCONTENTLOADED:"DOMContentLoaded",ERROR:"error",HELP:"help",LOAD:"load",LOSECAPTURE:"losecapture",ORIENTATIONCHANGE:"orientationchange",READYSTATECHANGE:"readystatechange",RESIZE:"resize",SCROLL:"scroll",
-UNLOAD:"unload",HASHCHANGE:"hashchange",PAGEHIDE:"pagehide",PAGESHOW:"pageshow",POPSTATE:"popstate",COPY:"copy",PASTE:"paste",CUT:"cut",BEFORECOPY:"beforecopy",BEFORECUT:"beforecut",BEFOREPASTE:"beforepaste",ONLINE:"online",OFFLINE:"offline",MESSAGE:"message",CONNECT:"connect",ANIMATIONSTART:goog.events.getVendorPrefixedName_("AnimationStart"),ANIMATIONEND:goog.events.getVendorPrefixedName_("AnimationEnd"),ANIMATIONITERATION:goog.events.getVendorPrefixedName_("AnimationIteration"),TRANSITIONEND:goog.events.getVendorPrefixedName_("TransitionEnd"),
-POINTERDOWN:"pointerdown",POINTERUP:"pointerup",POINTERCANCEL:"pointercancel",POINTERMOVE:"pointermove",POINTEROVER:"pointerover",POINTEROUT:"pointerout",POINTERENTER:"pointerenter",POINTERLEAVE:"pointerleave",GOTPOINTERCAPTURE:"gotpointercapture",LOSTPOINTERCAPTURE:"lostpointercapture",MSGESTURECHANGE:"MSGestureChange",MSGESTUREEND:"MSGestureEnd",MSGESTUREHOLD:"MSGestureHold",MSGESTURESTART:"MSGestureStart",MSGESTURETAP:"MSGestureTap",MSGOTPOINTERCAPTURE:"MSGotPointerCapture",MSINERTIASTART:"MSInertiaStart",
-MSLOSTPOINTERCAPTURE:"MSLostPointerCapture",MSPOINTERCANCEL:"MSPointerCancel",MSPOINTERDOWN:"MSPointerDown",MSPOINTERENTER:"MSPointerEnter",MSPOINTERHOVER:"MSPointerHover",MSPOINTERLEAVE:"MSPointerLeave",MSPOINTERMOVE:"MSPointerMove",MSPOINTEROUT:"MSPointerOut",MSPOINTEROVER:"MSPointerOver",MSPOINTERUP:"MSPointerUp",TEXTINPUT:"textinput",COMPOSITIONSTART:"compositionstart",COMPOSITIONUPDATE:"compositionupdate",COMPOSITIONEND:"compositionend",EXIT:"exit",LOADABORT:"loadabort",LOADCOMMIT:"loadcommit",
-LOADREDIRECT:"loadredirect",LOADSTART:"loadstart",LOADSTOP:"loadstop",RESPONSIVE:"responsive",SIZECHANGED:"sizechanged",UNRESPONSIVE:"unresponsive",VISIBILITYCHANGE:"visibilitychange"};goog.reflect={};goog.reflect.object=function(a,b){return b};goog.reflect.sinkValue=function(a){goog.reflect.sinkValue[" "](a);return a};goog.reflect.sinkValue[" "]=goog.nullFunction;goog.reflect.canAccessProperty=function(a,b){try{return goog.reflect.sinkValue(a[b]),!0}catch(c){}return!1};goog.events.BrowserEvent=function(a,b){a&&this.init(a,b)};goog.inherits(goog.events.BrowserEvent,goog.events.Event);goog.events.BrowserEvent.MouseButton={LEFT:0,MIDDLE:1,RIGHT:2};goog.events.BrowserEvent.IEButtonMap=[1,4,2];goog.events.BrowserEvent.prototype.target=null;goog.events.BrowserEvent.prototype.relatedTarget=null;goog.events.BrowserEvent.prototype.offsetX=0;goog.events.BrowserEvent.prototype.offsetY=0;goog.events.BrowserEvent.prototype.clientX=0;
-goog.events.BrowserEvent.prototype.clientY=0;goog.events.BrowserEvent.prototype.screenX=0;goog.events.BrowserEvent.prototype.screenY=0;goog.events.BrowserEvent.prototype.button=0;goog.events.BrowserEvent.prototype.keyCode=0;goog.events.BrowserEvent.prototype.charCode=0;goog.events.BrowserEvent.prototype.ctrlKey=!1;goog.events.BrowserEvent.prototype.altKey=!1;goog.events.BrowserEvent.prototype.shiftKey=!1;goog.events.BrowserEvent.prototype.metaKey=!1;
-goog.events.BrowserEvent.prototype.platformModifierKey=!1;goog.events.BrowserEvent.prototype.event_=null;
-goog.events.BrowserEvent.prototype.init=function(a,b){var c=this.type=a.type;goog.events.Event.call(this,c);this.target=a.target||a.srcElement;this.currentTarget=b;var d=a.relatedTarget;d?goog.userAgent.GECKO&&(goog.reflect.canAccessProperty(d,"nodeName")||(d=null)):c==goog.events.EventType.MOUSEOVER?d=a.fromElement:c==goog.events.EventType.MOUSEOUT&&(d=a.toElement);this.relatedTarget=d;this.offsetX=goog.userAgent.WEBKIT||void 0!==a.offsetX?a.offsetX:a.layerX;this.offsetY=goog.userAgent.WEBKIT||void 0!==
-a.offsetY?a.offsetY:a.layerY;this.clientX=void 0!==a.clientX?a.clientX:a.pageX;this.clientY=void 0!==a.clientY?a.clientY:a.pageY;this.screenX=a.screenX||0;this.screenY=a.screenY||0;this.button=a.button;this.keyCode=a.keyCode||0;this.charCode=a.charCode||("keypress"==c?a.keyCode:0);this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.platformModifierKey=goog.userAgent.MAC?a.metaKey:a.ctrlKey;this.state=a.state;this.event_=a;a.defaultPrevented&&this.preventDefault();
-delete this.propagationStopped_};goog.events.BrowserEvent.prototype.isButton=function(a){return goog.events.BrowserFeature.HAS_W3C_BUTTON?this.event_.button==a:"click"==this.type?a==goog.events.BrowserEvent.MouseButton.LEFT:!!(this.event_.button&goog.events.BrowserEvent.IEButtonMap[a])};goog.events.BrowserEvent.prototype.isMouseActionButton=function(){return this.isButton(goog.events.BrowserEvent.MouseButton.LEFT)&&!(goog.userAgent.WEBKIT&&goog.userAgent.MAC&&this.ctrlKey)};
-goog.events.BrowserEvent.prototype.stopPropagation=function(){goog.events.BrowserEvent.superClass_.stopPropagation.call(this);this.event_.stopPropagation?this.event_.stopPropagation():this.event_.cancelBubble=!0};
-goog.events.BrowserEvent.prototype.preventDefault=function(){goog.events.BrowserEvent.superClass_.preventDefault.call(this);var a=this.event_;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,goog.events.BrowserFeature.SET_KEY_CODE_TO_PREVENT_DEFAULT)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};goog.events.BrowserEvent.prototype.getBrowserEvent=function(){return this.event_};goog.events.BrowserEvent.prototype.disposeInternal=function(){};goog.events.Listenable=function(){};goog.events.Listenable.IMPLEMENTED_BY_PROP="closure_listenable_"+(1E6*Math.random()|0);goog.events.Listenable.addImplementation=function(a){a.prototype[goog.events.Listenable.IMPLEMENTED_BY_PROP]=!0};goog.events.Listenable.isImplementedBy=function(a){try{return!(!a||!a[goog.events.Listenable.IMPLEMENTED_BY_PROP])}catch(b){return!1}};goog.events.ListenableKey=function(){};goog.events.ListenableKey.counter_=0;goog.events.ListenableKey.reserveKey=function(){return++goog.events.ListenableKey.counter_};goog.events.Listener=function(a,b,c,d,e,f){goog.events.Listener.ENABLE_MONITORING&&(this.creationStack=Error().stack);this.listener=a;this.proxy=b;this.src=c;this.type=d;this.capture=!!e;this.handler=f;this.key=goog.events.ListenableKey.reserveKey();this.removed=this.callOnce=!1};goog.events.Listener.ENABLE_MONITORING=!1;goog.events.Listener.prototype.markAsRemoved=function(){this.removed=!0;this.handler=this.src=this.proxy=this.listener=null};goog.object={};goog.object.forEach=function(a,b,c){for(var d in a)b.call(c,a[d],d,a)};goog.object.filter=function(a,b,c){var d={},e;for(e in a)b.call(c,a[e],e,a)&&(d[e]=a[e]);return d};goog.object.map=function(a,b,c){var d={},e;for(e in a)d[e]=b.call(c,a[e],e,a);return d};goog.object.some=function(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return!0;return!1};goog.object.every=function(a,b,c){for(var d in a)if(!b.call(c,a[d],d,a))return!1;return!0};
-goog.object.getCount=function(a){var b=0,c;for(c in a)b++;return b};goog.object.getAnyKey=function(a){for(var b in a)return b};goog.object.getAnyValue=function(a){for(var b in a)return a[b]};goog.object.contains=function(a,b){return goog.object.containsValue(a,b)};goog.object.getValues=function(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b};goog.object.getKeys=function(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b};
-goog.object.getValueByKeys=function(a,b){for(var c=goog.isArrayLike(b),d=c?b:arguments,c=c?0:1;c<d.length&&(a=a[d[c]],goog.isDef(a));c++);return a};goog.object.containsKey=function(a,b){return b in a};goog.object.containsValue=function(a,b){for(var c in a)if(a[c]==b)return!0;return!1};goog.object.findKey=function(a,b,c){for(var d in a)if(b.call(c,a[d],d,a))return d};goog.object.findValue=function(a,b,c){return(b=goog.object.findKey(a,b,c))&&a[b]};
-goog.object.isEmpty=function(a){for(var b in a)return!1;return!0};goog.object.clear=function(a){for(var b in a)delete a[b]};goog.object.remove=function(a,b){var c;(c=b in a)&&delete a[b];return c};goog.object.add=function(a,b,c){if(b in a)throw Error('The object already contains the key "'+b+'"');goog.object.set(a,b,c)};goog.object.get=function(a,b,c){return b in a?a[b]:c};goog.object.set=function(a,b,c){a[b]=c};goog.object.setIfUndefined=function(a,b,c){return b in a?a[b]:a[b]=c};
-goog.object.clone=function(a){var b={},c;for(c in a)b[c]=a[c];return b};goog.object.unsafeClone=function(a){var b=goog.typeOf(a);if("object"==b||"array"==b){if(a.clone)return a.clone();var b="array"==b?[]:{},c;for(c in a)b[c]=goog.object.unsafeClone(a[c]);return b}return a};goog.object.transpose=function(a){var b={},c;for(c in a)b[a[c]]=c;return b};goog.object.PROTOTYPE_FIELDS_="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");
-goog.object.extend=function(a,b){for(var c,d,e=1;e<arguments.length;e++){d=arguments[e];for(c in d)a[c]=d[c];for(var f=0;f<goog.object.PROTOTYPE_FIELDS_.length;f++)c=goog.object.PROTOTYPE_FIELDS_[f],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c])}};
-goog.object.create=function(a){var b=arguments.length;if(1==b&&goog.isArray(arguments[0]))return goog.object.create.apply(null,arguments[0]);if(b%2)throw Error("Uneven number of arguments");for(var c={},d=0;d<b;d+=2)c[arguments[d]]=arguments[d+1];return c};goog.object.createSet=function(a){var b=arguments.length;if(1==b&&goog.isArray(arguments[0]))return goog.object.createSet.apply(null,arguments[0]);for(var c={},d=0;d<b;d++)c[arguments[d]]=!0;return c};
-goog.object.createImmutableView=function(a){var b=a;Object.isFrozen&&!Object.isFrozen(a)&&(b=Object.create(a),Object.freeze(b));return b};goog.object.isImmutableView=function(a){return!!Object.isFrozen&&Object.isFrozen(a)};goog.events.ListenerMap=function(a){this.src=a;this.listeners={};this.typeCount_=0};goog.events.ListenerMap.prototype.getTypeCount=function(){return this.typeCount_};goog.events.ListenerMap.prototype.getListenerCount=function(){var a=0,b;for(b in this.listeners)a+=this.listeners[b].length;return a};
-goog.events.ListenerMap.prototype.add=function(a,b,c,d,e){var f=this.listeners[a];f||(f=this.listeners[a]=[],this.typeCount_++);var g=goog.events.ListenerMap.findListenerIndex_(f,b,d,e);-1<g?(a=f[g],c||(a.callOnce=!1)):(a=new goog.events.Listener(b,null,this.src,a,!!d,e),a.callOnce=c,f.push(a));return a};
-goog.events.ListenerMap.prototype.remove=function(a,b,c,d){if(!(a in this.listeners))return!1;var e=this.listeners[a];b=goog.events.ListenerMap.findListenerIndex_(e,b,c,d);return-1<b?(e[b].markAsRemoved(),goog.array.removeAt(e,b),0==e.length&&(delete this.listeners[a],this.typeCount_--),!0):!1};
-goog.events.ListenerMap.prototype.removeByKey=function(a){var b=a.type;if(!(b in this.listeners))return!1;var c=goog.array.remove(this.listeners[b],a);c&&(a.markAsRemoved(),0==this.listeners[b].length&&(delete this.listeners[b],this.typeCount_--));return c};goog.events.ListenerMap.prototype.removeAll=function(a){var b=0,c;for(c in this.listeners)if(!a||c==a){for(var d=this.listeners[c],e=0;e<d.length;e++)++b,d[e].markAsRemoved();delete this.listeners[c];this.typeCount_--}return b};
-goog.events.ListenerMap.prototype.getListeners=function(a,b){var c=this.listeners[a],d=[];if(c)for(var e=0;e<c.length;++e){var f=c[e];f.capture==b&&d.push(f)}return d};goog.events.ListenerMap.prototype.getListener=function(a,b,c,d){a=this.listeners[a];var e=-1;a&&(e=goog.events.ListenerMap.findListenerIndex_(a,b,c,d));return-1<e?a[e]:null};
-goog.events.ListenerMap.prototype.hasListener=function(a,b){var c=goog.isDef(a),d=goog.isDef(b);return goog.object.some(this.listeners,function(e,f){for(var g=0;g<e.length;++g)if(!(c&&e[g].type!=a||d&&e[g].capture!=b))return!0;return!1})};goog.events.ListenerMap.findListenerIndex_=function(a,b,c,d){for(var e=0;e<a.length;++e){var f=a[e];if(!f.removed&&f.listener==b&&f.capture==!!c&&f.handler==d)return e}return-1};goog.events.listeners_={};goog.events.LISTENER_MAP_PROP_="closure_lm_"+(1E6*Math.random()|0);goog.events.onString_="on";goog.events.onStringMap_={};goog.events.CaptureSimulationMode={OFF_AND_FAIL:0,OFF_AND_SILENT:1,ON:2};goog.events.CAPTURE_SIMULATION_MODE=2;goog.events.listenerCountEstimate_=0;
-goog.events.listen=function(a,b,c,d,e){if(goog.isArray(b)){for(var f=0;f<b.length;f++)goog.events.listen(a,b[f],c,d,e);return null}c=goog.events.wrapListener_(c);return goog.events.Listenable.isImplementedBy(a)?a.listen(b,c,d,e):goog.events.listen_(a,b,c,!1,d,e)};
-goog.events.listen_=function(a,b,c,d,e,f){if(!b)throw Error("Invalid event type");var g=!!e;if(g&&!goog.events.BrowserFeature.HAS_W3C_EVENT_SUPPORT){if(goog.events.CAPTURE_SIMULATION_MODE==goog.events.CaptureSimulationMode.OFF_AND_FAIL)return goog.asserts.fail("Can not register capture listener in IE8-."),null;if(goog.events.CAPTURE_SIMULATION_MODE==goog.events.CaptureSimulationMode.OFF_AND_SILENT)return null}var h=goog.events.getListenerMap_(a);h||(a[goog.events.LISTENER_MAP_PROP_]=h=new goog.events.ListenerMap(a));
-c=h.add(b,c,d,e,f);if(c.proxy)return c;d=goog.events.getProxy();c.proxy=d;d.src=a;d.listener=c;a.addEventListener?a.addEventListener(b,d,g):a.attachEvent(goog.events.getOnString_(b),d);goog.events.listenerCountEstimate_++;return c};goog.events.getProxy=function(){var a=goog.events.handleBrowserEvent_,b=goog.events.BrowserFeature.HAS_W3C_EVENT_SUPPORT?function(c){return a.call(b.src,b.listener,c)}:function(c){c=a.call(b.src,b.listener,c);if(!c)return c};return b};
-goog.events.listenOnce=function(a,b,c,d,e){if(goog.isArray(b)){for(var f=0;f<b.length;f++)goog.events.listenOnce(a,b[f],c,d,e);return null}c=goog.events.wrapListener_(c);return goog.events.Listenable.isImplementedBy(a)?a.listenOnce(b,c,d,e):goog.events.listen_(a,b,c,!0,d,e)};goog.events.listenWithWrapper=function(a,b,c,d,e){b.listen(a,c,d,e)};
-goog.events.unlisten=function(a,b,c,d,e){if(goog.isArray(b)){for(var f=0;f<b.length;f++)goog.events.unlisten(a,b[f],c,d,e);return null}c=goog.events.wrapListener_(c);if(goog.events.Listenable.isImplementedBy(a))return a.unlisten(b,c,d,e);if(!a)return!1;d=!!d;if(a=goog.events.getListenerMap_(a))if(b=a.getListener(b,c,d,e))return goog.events.unlistenByKey(b);return!1};
-goog.events.unlistenByKey=function(a){if(goog.isNumber(a)||!a||a.removed)return!1;var b=a.src;if(goog.events.Listenable.isImplementedBy(b))return b.unlistenByKey(a);var c=a.type,d=a.proxy;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent&&b.detachEvent(goog.events.getOnString_(c),d);goog.events.listenerCountEstimate_--;(c=goog.events.getListenerMap_(b))?(c.removeByKey(a),0==c.getTypeCount()&&(c.src=null,b[goog.events.LISTENER_MAP_PROP_]=null)):a.markAsRemoved();return!0};
-goog.events.unlistenWithWrapper=function(a,b,c,d,e){b.unlisten(a,c,d,e)};goog.events.removeAll=function(a,b){if(!a)return 0;if(goog.events.Listenable.isImplementedBy(a))return a.removeAllListeners(b);var c=goog.events.getListenerMap_(a);if(!c)return 0;var d=0,e;for(e in c.listeners)if(!b||e==b)for(var f=goog.array.clone(c.listeners[e]),g=0;g<f.length;++g)goog.events.unlistenByKey(f[g])&&++d;return d};goog.events.removeAllNativeListeners=function(){return goog.events.listenerCountEstimate_=0};
-goog.events.getListeners=function(a,b,c){return goog.events.Listenable.isImplementedBy(a)?a.getListeners(b,c):a?(a=goog.events.getListenerMap_(a))?a.getListeners(b,c):[]:[]};goog.events.getListener=function(a,b,c,d,e){c=goog.events.wrapListener_(c);d=!!d;return goog.events.Listenable.isImplementedBy(a)?a.getListener(b,c,d,e):a?(a=goog.events.getListenerMap_(a))?a.getListener(b,c,d,e):null:null};
-goog.events.hasListener=function(a,b,c){if(goog.events.Listenable.isImplementedBy(a))return a.hasListener(b,c);a=goog.events.getListenerMap_(a);return!!a&&a.hasListener(b,c)};goog.events.expose=function(a){var b=[],c;for(c in a)a[c]&&a[c].id?b.push(c+" = "+a[c]+" ("+a[c].id+")"):b.push(c+" = "+a[c]);return b.join("\n")};goog.events.getOnString_=function(a){return a in goog.events.onStringMap_?goog.events.onStringMap_[a]:goog.events.onStringMap_[a]=goog.events.onString_+a};
-goog.events.fireListeners=function(a,b,c,d){return goog.events.Listenable.isImplementedBy(a)?a.fireListeners(b,c,d):goog.events.fireListeners_(a,b,c,d)};goog.events.fireListeners_=function(a,b,c,d){var e=1;if(a=goog.events.getListenerMap_(a))if(b=a.listeners[b])for(b=goog.array.clone(b),a=0;a<b.length;a++){var f=b[a];f&&f.capture==c&&!f.removed&&(e&=!1!==goog.events.fireListener(f,d))}return Boolean(e)};
-goog.events.fireListener=function(a,b){var c=a.listener,d=a.handler||a.src;a.callOnce&&goog.events.unlistenByKey(a);return c.call(d,b)};goog.events.getTotalListenerCount=function(){return goog.events.listenerCountEstimate_};goog.events.dispatchEvent=function(a,b){goog.asserts.assert(goog.events.Listenable.isImplementedBy(a),"Can not use goog.events.dispatchEvent with non-goog.events.Listenable instance.");return a.dispatchEvent(b)};
-goog.events.protectBrowserEventEntryPoint=function(a){goog.events.handleBrowserEvent_=a.protectEntryPoint(goog.events.handleBrowserEvent_)};
-goog.events.handleBrowserEvent_=function(a,b){if(a.removed)return!0;if(!goog.events.BrowserFeature.HAS_W3C_EVENT_SUPPORT){var c=b||goog.getObjectByName("window.event"),d=new goog.events.BrowserEvent(c,this),e=!0;if(goog.events.CAPTURE_SIMULATION_MODE==goog.events.CaptureSimulationMode.ON){if(!goog.events.isMarkedIeEvent_(c)){goog.events.markIeEvent_(c);for(var c=[],f=d.currentTarget;f;f=f.parentNode)c.push(f);for(var f=a.type,g=c.length-1;!d.propagationStopped_&&0<=g;g--)d.currentTarget=c[g],e&=goog.events.fireListeners_(c[g],
-f,!0,d);for(g=0;!d.propagationStopped_&&g<c.length;g++)d.currentTarget=c[g],e&=goog.events.fireListeners_(c[g],f,!1,d)}}else e=goog.events.fireListener(a,d);return e}return goog.events.fireListener(a,new goog.events.BrowserEvent(b,this))};goog.events.markIeEvent_=function(a){var b=!1;if(0==a.keyCode)try{a.keyCode=-1;return}catch(c){b=!0}if(b||void 0==a.returnValue)a.returnValue=!0};goog.events.isMarkedIeEvent_=function(a){return 0>a.keyCode||void 0!=a.returnValue};goog.events.uniqueIdCounter_=0;
-goog.events.getUniqueId=function(a){return a+"_"+goog.events.uniqueIdCounter_++};goog.events.getListenerMap_=function(a){a=a[goog.events.LISTENER_MAP_PROP_];return a instanceof goog.events.ListenerMap?a:null};goog.events.LISTENER_WRAPPER_PROP_="__closure_events_fn_"+(1E9*Math.random()>>>0);
-goog.events.wrapListener_=function(a){goog.asserts.assert(a,"Listener can not be null.");if(goog.isFunction(a))return a;goog.asserts.assert(a.handleEvent,"An object listener must have handleEvent method.");return a[goog.events.LISTENER_WRAPPER_PROP_]||(a[goog.events.LISTENER_WRAPPER_PROP_]=function(b){return a.handleEvent(b)})};goog.debug.entryPointRegistry.register(function(a){goog.events.handleBrowserEvent_=a(goog.events.handleBrowserEvent_)});goog.events.EventTarget=function(){goog.Disposable.call(this);this.eventTargetListeners_=new goog.events.ListenerMap(this);this.actualEventTarget_=this};goog.inherits(goog.events.EventTarget,goog.Disposable);goog.events.Listenable.addImplementation(goog.events.EventTarget);goog.events.EventTarget.MAX_ANCESTORS_=1E3;goog.events.EventTarget.prototype.parentEventTarget_=null;goog.events.EventTarget.prototype.getParentEventTarget=function(){return this.parentEventTarget_};
-goog.events.EventTarget.prototype.setParentEventTarget=function(a){this.parentEventTarget_=a};goog.events.EventTarget.prototype.addEventListener=function(a,b,c,d){goog.events.listen(this,a,b,c,d)};goog.events.EventTarget.prototype.removeEventListener=function(a,b,c,d){goog.events.unlisten(this,a,b,c,d)};
-goog.events.EventTarget.prototype.dispatchEvent=function(a){this.assertInitialized_();var b,c=this.getParentEventTarget();if(c){b=[];for(var d=1;c;c=c.getParentEventTarget())b.push(c),goog.asserts.assert(++d<goog.events.EventTarget.MAX_ANCESTORS_,"infinite loop")}return goog.events.EventTarget.dispatchEventInternal_(this.actualEventTarget_,a,b)};
-goog.events.EventTarget.prototype.disposeInternal=function(){goog.events.EventTarget.superClass_.disposeInternal.call(this);this.removeAllListeners();this.parentEventTarget_=null};goog.events.EventTarget.prototype.listen=function(a,b,c,d){this.assertInitialized_();return this.eventTargetListeners_.add(String(a),b,!1,c,d)};goog.events.EventTarget.prototype.listenOnce=function(a,b,c,d){return this.eventTargetListeners_.add(String(a),b,!0,c,d)};
-goog.events.EventTarget.prototype.unlisten=function(a,b,c,d){return this.eventTargetListeners_.remove(String(a),b,c,d)};goog.events.EventTarget.prototype.unlistenByKey=function(a){return this.eventTargetListeners_.removeByKey(a)};goog.events.EventTarget.prototype.removeAllListeners=function(a){return this.eventTargetListeners_?this.eventTargetListeners_.removeAll(a):0};
-goog.events.EventTarget.prototype.fireListeners=function(a,b,c){a=this.eventTargetListeners_.listeners[String(a)];if(!a)return!0;a=goog.array.clone(a);for(var d=!0,e=0;e<a.length;++e){var f=a[e];if(f&&!f.removed&&f.capture==b){var g=f.listener,h=f.handler||f.src;f.callOnce&&this.unlistenByKey(f);d=!1!==g.call(h,c)&&d}}return d&&!1!=c.returnValue_};goog.events.EventTarget.prototype.getListeners=function(a,b){return this.eventTargetListeners_.getListeners(String(a),b)};
-goog.events.EventTarget.prototype.getListener=function(a,b,c,d){return this.eventTargetListeners_.getListener(String(a),b,c,d)};goog.events.EventTarget.prototype.hasListener=function(a,b){var c=goog.isDef(a)?String(a):void 0;return this.eventTargetListeners_.hasListener(c,b)};goog.events.EventTarget.prototype.setTargetForTesting=function(a){this.actualEventTarget_=a};goog.events.EventTarget.prototype.assertInitialized_=function(){goog.asserts.assert(this.eventTargetListeners_,"Event target is not initialized. Did you call the superclass (goog.events.EventTarget) constructor?")};
-goog.events.EventTarget.dispatchEventInternal_=function(a,b,c){var d=b.type||b;if(goog.isString(b))b=new goog.events.Event(b,a);else if(b instanceof goog.events.Event)b.target=b.target||a;else{var e=b;b=new goog.events.Event(d,a);goog.object.extend(b,e)}var e=!0,f;if(c)for(var g=c.length-1;!b.propagationStopped_&&0<=g;g--)f=b.currentTarget=c[g],e=f.fireListeners(d,!0,b)&&e;b.propagationStopped_||(f=b.currentTarget=a,e=f.fireListeners(d,!0,b)&&e,b.propagationStopped_||(e=f.fireListeners(d,!1,b)&&e));
-if(c)for(g=0;!b.propagationStopped_&&g<c.length;g++)f=b.currentTarget=c[g],e=f.fireListeners(d,!1,b)&&e;return e};goog.Timer=function(a,b){goog.events.EventTarget.call(this);this.interval_=a||1;this.timerObject_=b||goog.Timer.defaultTimerObject;this.boundTick_=goog.bind(this.tick_,this);this.last_=goog.now()};goog.inherits(goog.Timer,goog.events.EventTarget);goog.Timer.MAX_TIMEOUT_=2147483647;goog.Timer.prototype.enabled=!1;goog.Timer.defaultTimerObject=goog.global;goog.Timer.intervalScale=0.8;goog.Timer.prototype.timer_=null;goog.Timer.prototype.getInterval=function(){return this.interval_};
-goog.Timer.prototype.setInterval=function(a){this.interval_=a;this.timer_&&this.enabled?(this.stop(),this.start()):this.timer_&&this.stop()};
-goog.Timer.prototype.tick_=function(){if(this.enabled){var a=goog.now()-this.last_;0<a&&a<this.interval_*goog.Timer.intervalScale?this.timer_=this.timerObject_.setTimeout(this.boundTick_,this.interval_-a):(this.timer_&&(this.timerObject_.clearTimeout(this.timer_),this.timer_=null),this.dispatchTick(),this.enabled&&(this.timer_=this.timerObject_.setTimeout(this.boundTick_,this.interval_),this.last_=goog.now()))}};goog.Timer.prototype.dispatchTick=function(){this.dispatchEvent(goog.Timer.TICK)};
-goog.Timer.prototype.start=function(){this.enabled=!0;this.timer_||(this.timer_=this.timerObject_.setTimeout(this.boundTick_,this.interval_),this.last_=goog.now())};goog.Timer.prototype.stop=function(){this.enabled=!1;this.timer_&&(this.timerObject_.clearTimeout(this.timer_),this.timer_=null)};goog.Timer.prototype.disposeInternal=function(){goog.Timer.superClass_.disposeInternal.call(this);this.stop();delete this.timerObject_};goog.Timer.TICK="tick";
-goog.Timer.callOnce=function(a,b,c){if(goog.isFunction(a))c&&(a=goog.bind(a,c));else if(a&&"function"==typeof a.handleEvent)a=goog.bind(a.handleEvent,a);else throw Error("Invalid listener argument");return b>goog.Timer.MAX_TIMEOUT_?-1:goog.Timer.defaultTimerObject.setTimeout(a,b||0)};goog.Timer.clear=function(a){goog.Timer.defaultTimerObject.clearTimeout(a)};goog.dom.BrowserFeature={CAN_ADD_NAME_OR_TYPE_ATTRIBUTES:!goog.userAgent.IE||goog.userAgent.isDocumentModeOrHigher(9),CAN_USE_CHILDREN_ATTRIBUTE:!goog.userAgent.GECKO&&!goog.userAgent.IE||goog.userAgent.IE&&goog.userAgent.isDocumentModeOrHigher(9)||goog.userAgent.GECKO&&goog.userAgent.isVersionOrHigher("1.9.1"),CAN_USE_INNER_TEXT:goog.userAgent.IE&&!goog.userAgent.isVersionOrHigher("9"),CAN_USE_PARENT_ELEMENT_PROPERTY:goog.userAgent.IE||goog.userAgent.OPERA||goog.userAgent.WEBKIT,INNER_HTML_NEEDS_SCOPED_ELEMENT:goog.userAgent.IE};goog.dom.TagName={A:"A",ABBR:"ABBR",ACRONYM:"ACRONYM",ADDRESS:"ADDRESS",APPLET:"APPLET",AREA:"AREA",ARTICLE:"ARTICLE",ASIDE:"ASIDE",AUDIO:"AUDIO",B:"B",BASE:"BASE",BASEFONT:"BASEFONT",BDI:"BDI",BDO:"BDO",BIG:"BIG",BLOCKQUOTE:"BLOCKQUOTE",BODY:"BODY",BR:"BR",BUTTON:"BUTTON",CANVAS:"CANVAS",CAPTION:"CAPTION",CENTER:"CENTER",CITE:"CITE",CODE:"CODE",COL:"COL",COLGROUP:"COLGROUP",COMMAND:"COMMAND",DATA:"DATA",DATALIST:"DATALIST",DD:"DD",DEL:"DEL",DETAILS:"DETAILS",DFN:"DFN",DIALOG:"DIALOG",DIR:"DIR",DIV:"DIV",
-DL:"DL",DT:"DT",EM:"EM",EMBED:"EMBED",FIELDSET:"FIELDSET",FIGCAPTION:"FIGCAPTION",FIGURE:"FIGURE",FONT:"FONT",FOOTER:"FOOTER",FORM:"FORM",FRAME:"FRAME",FRAMESET:"FRAMESET",H1:"H1",H2:"H2",H3:"H3",H4:"H4",H5:"H5",H6:"H6",HEAD:"HEAD",HEADER:"HEADER",HGROUP:"HGROUP",HR:"HR",HTML:"HTML",I:"I",IFRAME:"IFRAME",IMG:"IMG",INPUT:"INPUT",INS:"INS",ISINDEX:"ISINDEX",KBD:"KBD",KEYGEN:"KEYGEN",LABEL:"LABEL",LEGEND:"LEGEND",LI:"LI",LINK:"LINK",MAP:"MAP",MARK:"MARK",MATH:"MATH",MENU:"MENU",META:"META",METER:"METER",
-NAV:"NAV",NOFRAMES:"NOFRAMES",NOSCRIPT:"NOSCRIPT",OBJECT:"OBJECT",OL:"OL",OPTGROUP:"OPTGROUP",OPTION:"OPTION",OUTPUT:"OUTPUT",P:"P",PARAM:"PARAM",PRE:"PRE",PROGRESS:"PROGRESS",Q:"Q",RP:"RP",RT:"RT",RUBY:"RUBY",S:"S",SAMP:"SAMP",SCRIPT:"SCRIPT",SECTION:"SECTION",SELECT:"SELECT",SMALL:"SMALL",SOURCE:"SOURCE",SPAN:"SPAN",STRIKE:"STRIKE",STRONG:"STRONG",STYLE:"STYLE",SUB:"SUB",SUMMARY:"SUMMARY",SUP:"SUP",SVG:"SVG",TABLE:"TABLE",TBODY:"TBODY",TD:"TD",TEXTAREA:"TEXTAREA",TFOOT:"TFOOT",TH:"TH",THEAD:"THEAD",
-TIME:"TIME",TITLE:"TITLE",TR:"TR",TRACK:"TRACK",TT:"TT",U:"U",UL:"UL",VAR:"VAR",VIDEO:"VIDEO",WBR:"WBR"};goog.dom.classes={};goog.dom.classes.set=function(a,b){a.className=b};goog.dom.classes.get=function(a){a=a.className;return goog.isString(a)&&a.match(/\S+/g)||[]};goog.dom.classes.add=function(a,b){var c=goog.dom.classes.get(a),d=goog.array.slice(arguments,1),e=c.length+d.length;goog.dom.classes.add_(c,d);goog.dom.classes.set(a,c.join(" "));return c.length==e};
-goog.dom.classes.remove=function(a,b){var c=goog.dom.classes.get(a),d=goog.array.slice(arguments,1),e=goog.dom.classes.getDifference_(c,d);goog.dom.classes.set(a,e.join(" "));return e.length==c.length-d.length};goog.dom.classes.add_=function(a,b){for(var c=0;c<b.length;c++)goog.array.contains(a,b[c])||a.push(b[c])};goog.dom.classes.getDifference_=function(a,b){return goog.array.filter(a,function(a){return!goog.array.contains(b,a)})};
-goog.dom.classes.swap=function(a,b,c){for(var d=goog.dom.classes.get(a),e=!1,f=0;f<d.length;f++)d[f]==b&&(goog.array.splice(d,f--,1),e=!0);e&&(d.push(c),goog.dom.classes.set(a,d.join(" ")));return e};goog.dom.classes.addRemove=function(a,b,c){var d=goog.dom.classes.get(a);goog.isString(b)?goog.array.remove(d,b):goog.isArray(b)&&(d=goog.dom.classes.getDifference_(d,b));goog.isString(c)&&!goog.array.contains(d,c)?d.push(c):goog.isArray(c)&&goog.dom.classes.add_(d,c);goog.dom.classes.set(a,d.join(" "))};
-goog.dom.classes.has=function(a,b){return goog.array.contains(goog.dom.classes.get(a),b)};goog.dom.classes.enable=function(a,b,c){c?goog.dom.classes.add(a,b):goog.dom.classes.remove(a,b)};goog.dom.classes.toggle=function(a,b){var c=!goog.dom.classes.has(a,b);goog.dom.classes.enable(a,b,c);return c};goog.functions={};goog.functions.constant=function(a){return function(){return a}};goog.functions.FALSE=goog.functions.constant(!1);goog.functions.TRUE=goog.functions.constant(!0);goog.functions.NULL=goog.functions.constant(null);goog.functions.identity=function(a,b){return a};goog.functions.error=function(a){return function(){throw Error(a);}};goog.functions.fail=function(a){return function(){throw a;}};
-goog.functions.lock=function(a,b){b=b||0;return function(){return a.apply(this,Array.prototype.slice.call(arguments,0,b))}};goog.functions.nth=function(a){return function(){return arguments[a]}};goog.functions.withReturnValue=function(a,b){return goog.functions.sequence(a,goog.functions.constant(b))};goog.functions.compose=function(a,b){var c=arguments,d=c.length;return function(){var a;d&&(a=c[d-1].apply(this,arguments));for(var b=d-2;0<=b;b--)a=c[b].call(this,a);return a}};
-goog.functions.sequence=function(a){var b=arguments,c=b.length;return function(){for(var a,e=0;e<c;e++)a=b[e].apply(this,arguments);return a}};goog.functions.and=function(a){var b=arguments,c=b.length;return function(){for(var a=0;a<c;a++)if(!b[a].apply(this,arguments))return!1;return!0}};goog.functions.or=function(a){var b=arguments,c=b.length;return function(){for(var a=0;a<c;a++)if(b[a].apply(this,arguments))return!0;return!1}};
-goog.functions.not=function(a){return function(){return!a.apply(this,arguments)}};goog.functions.create=function(a,b){var c=function(){};c.prototype=a.prototype;c=new c;a.apply(c,Array.prototype.slice.call(arguments,1));return c};goog.functions.CACHE_RETURN_VALUE=!0;goog.functions.cacheReturnValue=function(a){var b=!1,c;return function(){if(!goog.functions.CACHE_RETURN_VALUE)return a();b||(c=a(),b=!0);return c}};goog.math={};goog.math.randomInt=function(a){return Math.floor(Math.random()*a)};goog.math.uniformRandom=function(a,b){return a+Math.random()*(b-a)};goog.math.clamp=function(a,b,c){return Math.min(Math.max(a,b),c)};goog.math.modulo=function(a,b){var c=a%b;return 0>c*b?c+b:c};goog.math.lerp=function(a,b,c){return a+c*(b-a)};goog.math.nearlyEquals=function(a,b,c){return Math.abs(a-b)<=(c||1E-6)};goog.math.standardAngle=function(a){return goog.math.modulo(a,360)};
-goog.math.toRadians=function(a){return a*Math.PI/180};goog.math.toDegrees=function(a){return 180*a/Math.PI};goog.math.angleDx=function(a,b){return b*Math.cos(goog.math.toRadians(a))};goog.math.angleDy=function(a,b){return b*Math.sin(goog.math.toRadians(a))};goog.math.angle=function(a,b,c,d){return goog.math.standardAngle(goog.math.toDegrees(Math.atan2(d-b,c-a)))};goog.math.angleDifference=function(a,b){var c=goog.math.standardAngle(b)-goog.math.standardAngle(a);180<c?c-=360:-180>=c&&(c=360+c);return c};
-goog.math.sign=function(a){return 0==a?0:0>a?-1:1};goog.math.longestCommonSubsequence=function(a,b,c,d){c=c||function(a,b){return a==b};d=d||function(b,c){return a[b]};for(var e=a.length,f=b.length,g=[],h=0;h<e+1;h++)g[h]=[],g[h][0]=0;for(var k=0;k<f+1;k++)g[0][k]=0;for(h=1;h<=e;h++)for(k=1;k<=f;k++)c(a[h-1],b[k-1])?g[h][k]=g[h-1][k-1]+1:g[h][k]=Math.max(g[h-1][k],g[h][k-1]);for(var l=[],h=e,k=f;0<h&&0<k;)c(a[h-1],b[k-1])?(l.unshift(d(h-1,k-1)),h--,k--):g[h-1][k]>g[h][k-1]?h--:k--;return l};
-goog.math.sum=function(a){return goog.array.reduce(arguments,function(a,c){return a+c},0)};goog.math.average=function(a){return goog.math.sum.apply(null,arguments)/arguments.length};goog.math.sampleVariance=function(a){var b=arguments.length;if(2>b)return 0;var c=goog.math.average.apply(null,arguments);return goog.math.sum.apply(null,goog.array.map(arguments,function(a){return Math.pow(a-c,2)}))/(b-1)};goog.math.standardDeviation=function(a){return Math.sqrt(goog.math.sampleVariance.apply(null,arguments))};
-goog.math.isInt=function(a){return isFinite(a)&&0==a%1};goog.math.isFiniteNumber=function(a){return isFinite(a)&&!isNaN(a)};goog.math.safeFloor=function(a,b){goog.asserts.assert(!goog.isDef(b)||0<b);return Math.floor(a+(b||2E-15))};goog.math.safeCeil=function(a,b){goog.asserts.assert(!goog.isDef(b)||0<b);return Math.ceil(a-(b||2E-15))};goog.math.Coordinate=function(a,b){this.x=goog.isDef(a)?a:0;this.y=goog.isDef(b)?b:0};goog.math.Coordinate.prototype.clone=function(){return new goog.math.Coordinate(this.x,this.y)};goog.DEBUG&&(goog.math.Coordinate.prototype.toString=function(){return"("+this.x+", "+this.y+")"});goog.math.Coordinate.equals=function(a,b){return a==b?!0:a&&b?a.x==b.x&&a.y==b.y:!1};goog.math.Coordinate.distance=function(a,b){var c=a.x-b.x,d=a.y-b.y;return Math.sqrt(c*c+d*d)};
-goog.math.Coordinate.magnitude=function(a){return Math.sqrt(a.x*a.x+a.y*a.y)};goog.math.Coordinate.azimuth=function(a){return goog.math.angle(0,0,a.x,a.y)};goog.math.Coordinate.squaredDistance=function(a,b){var c=a.x-b.x,d=a.y-b.y;return c*c+d*d};goog.math.Coordinate.difference=function(a,b){return new goog.math.Coordinate(a.x-b.x,a.y-b.y)};goog.math.Coordinate.sum=function(a,b){return new goog.math.Coordinate(a.x+b.x,a.y+b.y)};
-goog.math.Coordinate.prototype.ceil=function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this};goog.math.Coordinate.prototype.floor=function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this};goog.math.Coordinate.prototype.round=function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this};goog.math.Coordinate.prototype.translate=function(a,b){a instanceof goog.math.Coordinate?(this.x+=a.x,this.y+=a.y):(this.x+=a,goog.isNumber(b)&&(this.y+=b));return this};
-goog.math.Coordinate.prototype.scale=function(a,b){var c=goog.isNumber(b)?b:a;this.x*=a;this.y*=c;return this};goog.math.Size=function(a,b){this.width=a;this.height=b};goog.math.Size.equals=function(a,b){return a==b?!0:a&&b?a.width==b.width&&a.height==b.height:!1};goog.math.Size.prototype.clone=function(){return new goog.math.Size(this.width,this.height)};goog.DEBUG&&(goog.math.Size.prototype.toString=function(){return"("+this.width+" x "+this.height+")"});goog.math.Size.prototype.getLongest=function(){return Math.max(this.width,this.height)};
-goog.math.Size.prototype.getShortest=function(){return Math.min(this.width,this.height)};goog.math.Size.prototype.area=function(){return this.width*this.height};goog.math.Size.prototype.perimeter=function(){return 2*(this.width+this.height)};goog.math.Size.prototype.aspectRatio=function(){return this.width/this.height};goog.math.Size.prototype.isEmpty=function(){return!this.area()};goog.math.Size.prototype.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};
-goog.math.Size.prototype.fitsInside=function(a){return this.width<=a.width&&this.height<=a.height};goog.math.Size.prototype.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};goog.math.Size.prototype.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};goog.math.Size.prototype.scale=function(a,b){var c=goog.isNumber(b)?b:a;this.width*=a;this.height*=c;return this};
-goog.math.Size.prototype.scaleToFit=function(a){a=this.aspectRatio()>a.aspectRatio()?a.width/this.width:a.height/this.height;return this.scale(a)};goog.dom.ASSUME_QUIRKS_MODE=!1;goog.dom.ASSUME_STANDARDS_MODE=!1;goog.dom.COMPAT_MODE_KNOWN_=goog.dom.ASSUME_QUIRKS_MODE||goog.dom.ASSUME_STANDARDS_MODE;goog.dom.getDomHelper=function(a){return a?new goog.dom.DomHelper(goog.dom.getOwnerDocument(a)):goog.dom.defaultDomHelper_||(goog.dom.defaultDomHelper_=new goog.dom.DomHelper)};goog.dom.getDocument=function(){return document};goog.dom.getElement=function(a){return goog.dom.getElementHelper_(document,a)};
-goog.dom.getElementHelper_=function(a,b){return goog.isString(b)?a.getElementById(b):b};goog.dom.getRequiredElement=function(a){return goog.dom.getRequiredElementHelper_(document,a)};goog.dom.getRequiredElementHelper_=function(a,b){goog.asserts.assertString(b);var c=goog.dom.getElementHelper_(a,b);return c=goog.asserts.assertElement(c,"No element found with id: "+b)};goog.dom.$=goog.dom.getElement;
-goog.dom.getElementsByTagNameAndClass=function(a,b,c){return goog.dom.getElementsByTagNameAndClass_(document,a,b,c)};goog.dom.getElementsByClass=function(a,b){var c=b||document;return goog.dom.canUseQuerySelector_(c)?c.querySelectorAll("."+a):c.getElementsByClassName?c.getElementsByClassName(a):goog.dom.getElementsByTagNameAndClass_(document,"*",a,b)};
-goog.dom.getElementByClass=function(a,b){var c=b||document,d=null;return(d=goog.dom.canUseQuerySelector_(c)?c.querySelector("."+a):goog.dom.getElementsByClass(a,b)[0])||null};goog.dom.getRequiredElementByClass=function(a,b){var c=goog.dom.getElementByClass(a,b);return goog.asserts.assert(c,"No element found with className: "+a)};goog.dom.canUseQuerySelector_=function(a){return!(!a.querySelectorAll||!a.querySelector)};
-goog.dom.getElementsByTagNameAndClass_=function(a,b,c,d){a=d||a;b=b&&"*"!=b?b.toUpperCase():"";if(goog.dom.canUseQuerySelector_(a)&&(b||c))return a.querySelectorAll(b+(c?"."+c:""));if(c&&a.getElementsByClassName){a=a.getElementsByClassName(c);if(b){d={};for(var e=0,f=0,g;g=a[f];f++)b==g.nodeName&&(d[e++]=g);d.length=e;return d}return a}a=a.getElementsByTagName(b||"*");if(c){d={};for(f=e=0;g=a[f];f++)b=g.className,"function"==typeof b.split&&goog.array.contains(b.split(/\s+/),c)&&(d[e++]=g);d.length=
-e;return d}return a};goog.dom.$$=goog.dom.getElementsByTagNameAndClass;goog.dom.setProperties=function(a,b){goog.object.forEach(b,function(b,d){"style"==d?a.style.cssText=b:"class"==d?a.className=b:"for"==d?a.htmlFor=b:d in goog.dom.DIRECT_ATTRIBUTE_MAP_?a.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[d],b):goog.string.startsWith(d,"aria-")||goog.string.startsWith(d,"data-")?a.setAttribute(d,b):a[d]=b})};
-goog.dom.DIRECT_ATTRIBUTE_MAP_={cellpadding:"cellPadding",cellspacing:"cellSpacing",colspan:"colSpan",frameborder:"frameBorder",height:"height",maxlength:"maxLength",role:"role",rowspan:"rowSpan",type:"type",usemap:"useMap",valign:"vAlign",width:"width"};goog.dom.getViewportSize=function(a){return goog.dom.getViewportSize_(a||window)};goog.dom.getViewportSize_=function(a){a=a.document;a=goog.dom.isCss1CompatMode_(a)?a.documentElement:a.body;return new goog.math.Size(a.clientWidth,a.clientHeight)};
-goog.dom.getDocumentHeight=function(){return goog.dom.getDocumentHeight_(window)};goog.dom.getDocumentHeight_=function(a){var b=a.document,c=0;if(b){a=goog.dom.getViewportSize_(a).height;var c=b.body,d=b.documentElement;if(goog.dom.isCss1CompatMode_(b)&&d.scrollHeight)c=d.scrollHeight!=a?d.scrollHeight:d.offsetHeight;else{var b=d.scrollHeight,e=d.offsetHeight;d.clientHeight!=e&&(b=c.scrollHeight,e=c.offsetHeight);c=b>a?b>e?b:e:b<e?b:e}}return c};
-goog.dom.getPageScroll=function(a){return goog.dom.getDomHelper((a||goog.global||window).document).getDocumentScroll()};goog.dom.getDocumentScroll=function(){return goog.dom.getDocumentScroll_(document)};
-goog.dom.getDocumentScroll_=function(a){var b=goog.dom.getDocumentScrollElement_(a);a=goog.dom.getWindow_(a);return goog.userAgent.IE&&goog.userAgent.isVersionOrHigher("10")&&a.pageYOffset!=b.scrollTop?new goog.math.Coordinate(b.scrollLeft,b.scrollTop):new goog.math.Coordinate(a.pageXOffset||b.scrollLeft,a.pageYOffset||b.scrollTop)};goog.dom.getDocumentScrollElement=function(){return goog.dom.getDocumentScrollElement_(document)};
-goog.dom.getDocumentScrollElement_=function(a){return!goog.userAgent.WEBKIT&&goog.dom.isCss1CompatMode_(a)?a.documentElement:a.body||a.documentElement};goog.dom.getWindow=function(a){return a?goog.dom.getWindow_(a):window};goog.dom.getWindow_=function(a){return a.parentWindow||a.defaultView};goog.dom.createDom=function(a,b,c){return goog.dom.createDom_(document,arguments)};
-goog.dom.createDom_=function(a,b){var c=b[0],d=b[1];if(!goog.dom.BrowserFeature.CAN_ADD_NAME_OR_TYPE_ATTRIBUTES&&d&&(d.name||d.type)){c=["<",c];d.name&&c.push(' name="',goog.string.htmlEscape(d.name),'"');if(d.type){c.push(' type="',goog.string.htmlEscape(d.type),'"');var e={};goog.object.extend(e,d);delete e.type;d=e}c.push(">");c=c.join("")}c=a.createElement(c);d&&(goog.isString(d)?c.className=d:goog.isArray(d)?goog.dom.classes.add.apply(null,[c].concat(d)):goog.dom.setProperties(c,d));2<b.length&&
-goog.dom.append_(a,c,b,2);return c};goog.dom.append_=function(a,b,c,d){function e(c){c&&b.appendChild(goog.isString(c)?a.createTextNode(c):c)}for(;d<c.length;d++){var f=c[d];goog.isArrayLike(f)&&!goog.dom.isNodeLike(f)?goog.array.forEach(goog.dom.isNodeList(f)?goog.array.toArray(f):f,e):e(f)}};goog.dom.$dom=goog.dom.createDom;goog.dom.createElement=function(a){return document.createElement(a)};goog.dom.createTextNode=function(a){return document.createTextNode(String(a))};
-goog.dom.createTable=function(a,b,c){return goog.dom.createTable_(document,a,b,!!c)};goog.dom.createTable_=function(a,b,c,d){for(var e=["<tr>"],f=0;f<c;f++)e.push(d?"<td>&nbsp;</td>":"<td></td>");e.push("</tr>");e=e.join("");c=["<table>"];for(f=0;f<b;f++)c.push(e);c.push("</table>");a=a.createElement(goog.dom.TagName.DIV);a.innerHTML=c.join("");return a.removeChild(a.firstChild)};goog.dom.htmlToDocumentFragment=function(a){return goog.dom.htmlToDocumentFragment_(document,a)};
-goog.dom.htmlToDocumentFragment_=function(a,b){var c=a.createElement("div");goog.dom.BrowserFeature.INNER_HTML_NEEDS_SCOPED_ELEMENT?(c.innerHTML="<br>"+b,c.removeChild(c.firstChild)):c.innerHTML=b;if(1==c.childNodes.length)return c.removeChild(c.firstChild);for(var d=a.createDocumentFragment();c.firstChild;)d.appendChild(c.firstChild);return d};goog.dom.isCss1CompatMode=function(){return goog.dom.isCss1CompatMode_(document)};
-goog.dom.isCss1CompatMode_=function(a){return goog.dom.COMPAT_MODE_KNOWN_?goog.dom.ASSUME_STANDARDS_MODE:"CSS1Compat"==a.compatMode};goog.dom.canHaveChildren=function(a){if(a.nodeType!=goog.dom.NodeType.ELEMENT)return!1;switch(a.tagName){case goog.dom.TagName.APPLET:case goog.dom.TagName.AREA:case goog.dom.TagName.BASE:case goog.dom.TagName.BR:case goog.dom.TagName.COL:case goog.dom.TagName.COMMAND:case goog.dom.TagName.EMBED:case goog.dom.TagName.FRAME:case goog.dom.TagName.HR:case goog.dom.TagName.IMG:case goog.dom.TagName.INPUT:case goog.dom.TagName.IFRAME:case goog.dom.TagName.ISINDEX:case goog.dom.TagName.KEYGEN:case goog.dom.TagName.LINK:case goog.dom.TagName.NOFRAMES:case goog.dom.TagName.NOSCRIPT:case goog.dom.TagName.META:case goog.dom.TagName.OBJECT:case goog.dom.TagName.PARAM:case goog.dom.TagName.SCRIPT:case goog.dom.TagName.SOURCE:case goog.dom.TagName.STYLE:case goog.dom.TagName.TRACK:case goog.dom.TagName.WBR:return!1}return!0};
-goog.dom.appendChild=function(a,b){a.appendChild(b)};goog.dom.append=function(a,b){goog.dom.append_(goog.dom.getOwnerDocument(a),a,arguments,1)};goog.dom.removeChildren=function(a){for(var b;b=a.firstChild;)a.removeChild(b)};goog.dom.insertSiblingBefore=function(a,b){b.parentNode&&b.parentNode.insertBefore(a,b)};goog.dom.insertSiblingAfter=function(a,b){b.parentNode&&b.parentNode.insertBefore(a,b.nextSibling)};goog.dom.insertChildAt=function(a,b,c){a.insertBefore(b,a.childNodes[c]||null)};
-goog.dom.removeNode=function(a){return a&&a.parentNode?a.parentNode.removeChild(a):null};goog.dom.replaceNode=function(a,b){var c=b.parentNode;c&&c.replaceChild(a,b)};goog.dom.flattenElement=function(a){var b,c=a.parentNode;if(c&&c.nodeType!=goog.dom.NodeType.DOCUMENT_FRAGMENT){if(a.removeNode)return a.removeNode(!1);for(;b=a.firstChild;)c.insertBefore(b,a);return goog.dom.removeNode(a)}};
-goog.dom.getChildren=function(a){return goog.dom.BrowserFeature.CAN_USE_CHILDREN_ATTRIBUTE&&void 0!=a.children?a.children:goog.array.filter(a.childNodes,function(a){return a.nodeType==goog.dom.NodeType.ELEMENT})};goog.dom.getFirstElementChild=function(a){return void 0!=a.firstElementChild?a.firstElementChild:goog.dom.getNextElementNode_(a.firstChild,!0)};goog.dom.getLastElementChild=function(a){return void 0!=a.lastElementChild?a.lastElementChild:goog.dom.getNextElementNode_(a.lastChild,!1)};
-goog.dom.getNextElementSibling=function(a){return void 0!=a.nextElementSibling?a.nextElementSibling:goog.dom.getNextElementNode_(a.nextSibling,!0)};goog.dom.getPreviousElementSibling=function(a){return void 0!=a.previousElementSibling?a.previousElementSibling:goog.dom.getNextElementNode_(a.previousSibling,!1)};goog.dom.getNextElementNode_=function(a,b){for(;a&&a.nodeType!=goog.dom.NodeType.ELEMENT;)a=b?a.nextSibling:a.previousSibling;return a};
-goog.dom.getNextNode=function(a){if(!a)return null;if(a.firstChild)return a.firstChild;for(;a&&!a.nextSibling;)a=a.parentNode;return a?a.nextSibling:null};goog.dom.getPreviousNode=function(a){if(!a)return null;if(!a.previousSibling)return a.parentNode;for(a=a.previousSibling;a&&a.lastChild;)a=a.lastChild;return a};goog.dom.isNodeLike=function(a){return goog.isObject(a)&&0<a.nodeType};goog.dom.isElement=function(a){return goog.isObject(a)&&a.nodeType==goog.dom.NodeType.ELEMENT};
-goog.dom.isWindow=function(a){return goog.isObject(a)&&a.window==a};goog.dom.getParentElement=function(a){if(goog.dom.BrowserFeature.CAN_USE_PARENT_ELEMENT_PROPERTY&&!(goog.userAgent.IE&&goog.userAgent.isVersionOrHigher("9")&&!goog.userAgent.isVersionOrHigher("10")&&goog.global.SVGElement&&a instanceof goog.global.SVGElement))return a.parentElement;a=a.parentNode;return goog.dom.isElement(a)?a:null};
-goog.dom.contains=function(a,b){if(a.contains&&b.nodeType==goog.dom.NodeType.ELEMENT)return a==b||a.contains(b);if("undefined"!=typeof a.compareDocumentPosition)return a==b||Boolean(a.compareDocumentPosition(b)&16);for(;b&&a!=b;)b=b.parentNode;return b==a};
-goog.dom.compareNodeOrder=function(a,b){if(a==b)return 0;if(a.compareDocumentPosition)return a.compareDocumentPosition(b)&2?1:-1;if(goog.userAgent.IE&&!goog.userAgent.isDocumentModeOrHigher(9)){if(a.nodeType==goog.dom.NodeType.DOCUMENT)return-1;if(b.nodeType==goog.dom.NodeType.DOCUMENT)return 1}if("sourceIndex"in a||a.parentNode&&"sourceIndex"in a.parentNode){var c=a.nodeType==goog.dom.NodeType.ELEMENT,d=b.nodeType==goog.dom.NodeType.ELEMENT;if(c&&d)return a.sourceIndex-b.sourceIndex;var e=a.parentNode,
-f=b.parentNode;return e==f?goog.dom.compareSiblingOrder_(a,b):!c&&goog.dom.contains(e,b)?-1*goog.dom.compareParentsDescendantNodeIe_(a,b):!d&&goog.dom.contains(f,a)?goog.dom.compareParentsDescendantNodeIe_(b,a):(c?a.sourceIndex:e.sourceIndex)-(d?b.sourceIndex:f.sourceIndex)}d=goog.dom.getOwnerDocument(a);c=d.createRange();c.selectNode(a);c.collapse(!0);d=d.createRange();d.selectNode(b);d.collapse(!0);return c.compareBoundaryPoints(goog.global.Range.START_TO_END,d)};
-goog.dom.compareParentsDescendantNodeIe_=function(a,b){var c=a.parentNode;if(c==b)return-1;for(var d=b;d.parentNode!=c;)d=d.parentNode;return goog.dom.compareSiblingOrder_(d,a)};goog.dom.compareSiblingOrder_=function(a,b){for(var c=b;c=c.previousSibling;)if(c==a)return-1;return 1};
-goog.dom.findCommonAncestor=function(a){var b,c=arguments.length;if(!c)return null;if(1==c)return arguments[0];var d=[],e=Infinity;for(b=0;b<c;b++){for(var f=[],g=arguments[b];g;)f.unshift(g),g=g.parentNode;d.push(f);e=Math.min(e,f.length)}f=null;for(b=0;b<e;b++){for(var g=d[0][b],h=1;h<c;h++)if(g!=d[h][b])return f;f=g}return f};goog.dom.getOwnerDocument=function(a){return a.nodeType==goog.dom.NodeType.DOCUMENT?a:a.ownerDocument||a.document};
-goog.dom.getFrameContentDocument=function(a){return a.contentDocument||a.contentWindow.document};goog.dom.getFrameContentWindow=function(a){return a.contentWindow||goog.dom.getWindow(goog.dom.getFrameContentDocument(a))};
-goog.dom.setTextContent=function(a,b){goog.asserts.assert(null!=a,"goog.dom.setTextContent expects a non-null value for node");if("textContent"in a)a.textContent=b;else if(a.nodeType==goog.dom.NodeType.TEXT)a.data=b;else if(a.firstChild&&a.firstChild.nodeType==goog.dom.NodeType.TEXT){for(;a.lastChild!=a.firstChild;)a.removeChild(a.lastChild);a.firstChild.data=b}else{goog.dom.removeChildren(a);var c=goog.dom.getOwnerDocument(a);a.appendChild(c.createTextNode(String(b)))}};
-goog.dom.getOuterHtml=function(a){if("outerHTML"in a)return a.outerHTML;var b=goog.dom.getOwnerDocument(a).createElement("div");b.appendChild(a.cloneNode(!0));return b.innerHTML};goog.dom.findNode=function(a,b){var c=[];return goog.dom.findNodes_(a,b,c,!0)?c[0]:void 0};goog.dom.findNodes=function(a,b){var c=[];goog.dom.findNodes_(a,b,c,!1);return c};goog.dom.findNodes_=function(a,b,c,d){if(null!=a)for(a=a.firstChild;a;){if(b(a)&&(c.push(a),d)||goog.dom.findNodes_(a,b,c,d))return!0;a=a.nextSibling}return!1};
-goog.dom.TAGS_TO_IGNORE_={SCRIPT:1,STYLE:1,HEAD:1,IFRAME:1,OBJECT:1};goog.dom.PREDEFINED_TAG_VALUES_={IMG:" ",BR:"\n"};goog.dom.isFocusableTabIndex=function(a){return goog.dom.hasSpecifiedTabIndex_(a)&&goog.dom.isTabIndexFocusable_(a)};goog.dom.setFocusableTabIndex=function(a,b){b?a.tabIndex=0:(a.tabIndex=-1,a.removeAttribute("tabIndex"))};
-goog.dom.isFocusable=function(a){var b;return(b=goog.dom.nativelySupportsFocus_(a)?!a.disabled&&(!goog.dom.hasSpecifiedTabIndex_(a)||goog.dom.isTabIndexFocusable_(a)):goog.dom.isFocusableTabIndex(a))&&goog.userAgent.IE?goog.dom.hasNonZeroBoundingRect_(a):b};goog.dom.hasSpecifiedTabIndex_=function(a){a=a.getAttributeNode("tabindex");return goog.isDefAndNotNull(a)&&a.specified};goog.dom.isTabIndexFocusable_=function(a){a=a.tabIndex;return goog.isNumber(a)&&0<=a&&32768>a};
-goog.dom.nativelySupportsFocus_=function(a){return a.tagName==goog.dom.TagName.A||a.tagName==goog.dom.TagName.INPUT||a.tagName==goog.dom.TagName.TEXTAREA||a.tagName==goog.dom.TagName.SELECT||a.tagName==goog.dom.TagName.BUTTON};goog.dom.hasNonZeroBoundingRect_=function(a){a=goog.isFunction(a.getBoundingClientRect)?a.getBoundingClientRect():{height:a.offsetHeight,width:a.offsetWidth};return goog.isDefAndNotNull(a)&&0<a.height&&0<a.width};
-goog.dom.getTextContent=function(a){if(goog.dom.BrowserFeature.CAN_USE_INNER_TEXT&&"innerText"in a)a=goog.string.canonicalizeNewlines(a.innerText);else{var b=[];goog.dom.getTextContent_(a,b,!0);a=b.join("")}a=a.replace(/ \xAD /g," ").replace(/\xAD/g,"");a=a.replace(/\u200B/g,"");goog.dom.BrowserFeature.CAN_USE_INNER_TEXT||(a=a.replace(/ +/g," "));" "!=a&&(a=a.replace(/^\s*/,""));return a};goog.dom.getRawTextContent=function(a){var b=[];goog.dom.getTextContent_(a,b,!1);return b.join("")};
-goog.dom.getTextContent_=function(a,b,c){if(!(a.nodeName in goog.dom.TAGS_TO_IGNORE_))if(a.nodeType==goog.dom.NodeType.TEXT)c?b.push(String(a.nodeValue).replace(/(\r\n|\r|\n)/g,"")):b.push(a.nodeValue);else if(a.nodeName in goog.dom.PREDEFINED_TAG_VALUES_)b.push(goog.dom.PREDEFINED_TAG_VALUES_[a.nodeName]);else for(a=a.firstChild;a;)goog.dom.getTextContent_(a,b,c),a=a.nextSibling};goog.dom.getNodeTextLength=function(a){return goog.dom.getTextContent(a).length};
-goog.dom.getNodeTextOffset=function(a,b){for(var c=b||goog.dom.getOwnerDocument(a).body,d=[];a&&a!=c;){for(var e=a;e=e.previousSibling;)d.unshift(goog.dom.getTextContent(e));a=a.parentNode}return goog.string.trimLeft(d.join("")).replace(/ +/g," ").length};
-goog.dom.getNodeAtOffset=function(a,b,c){a=[a];for(var d=0,e=null;0<a.length&&d<b;)if(e=a.pop(),!(e.nodeName in goog.dom.TAGS_TO_IGNORE_))if(e.nodeType==goog.dom.NodeType.TEXT)var f=e.nodeValue.replace(/(\r\n|\r|\n)/g,"").replace(/ +/g," "),d=d+f.length;else if(e.nodeName in goog.dom.PREDEFINED_TAG_VALUES_)d+=goog.dom.PREDEFINED_TAG_VALUES_[e.nodeName].length;else for(f=e.childNodes.length-1;0<=f;f--)a.push(e.childNodes[f]);goog.isObject(c)&&(c.remainder=e?e.nodeValue.length+b-d-1:0,c.node=e);return e};
-goog.dom.isNodeList=function(a){if(a&&"number"==typeof a.length){if(goog.isObject(a))return"function"==typeof a.item||"string"==typeof a.item;if(goog.isFunction(a))return"function"==typeof a.item}return!1};goog.dom.getAncestorByTagNameAndClass=function(a,b,c){if(!b&&!c)return null;var d=b?b.toUpperCase():null;return goog.dom.getAncestor(a,function(a){return(!d||a.nodeName==d)&&(!c||goog.dom.classes.has(a,c))},!0)};
-goog.dom.getAncestorByClass=function(a,b){return goog.dom.getAncestorByTagNameAndClass(a,null,b)};goog.dom.getAncestor=function(a,b,c,d){c||(a=a.parentNode);c=null==d;for(var e=0;a&&(c||e<=d);){if(b(a))return a;a=a.parentNode;e++}return null};goog.dom.getActiveElement=function(a){try{return a&&a.activeElement}catch(b){}return null};
-goog.dom.getPixelRatio=goog.functions.cacheReturnValue(function(){var a=goog.dom.getWindow(),b=goog.userAgent.GECKO&&goog.userAgent.MOBILE;return goog.isDef(a.devicePixelRatio)&&!b?a.devicePixelRatio:a.matchMedia?goog.dom.matchesPixelRatio_(0.75)||goog.dom.matchesPixelRatio_(1.5)||goog.dom.matchesPixelRatio_(2)||goog.dom.matchesPixelRatio_(3)||1:1});
-goog.dom.matchesPixelRatio_=function(a){return goog.dom.getWindow().matchMedia("(-webkit-min-device-pixel-ratio: "+a+"),(min--moz-device-pixel-ratio: "+a+"),(min-resolution: "+a+"dppx)").matches?a:0};goog.dom.DomHelper=function(a){this.document_=a||goog.global.document||document};goog.dom.DomHelper.prototype.getDomHelper=goog.dom.getDomHelper;goog.dom.DomHelper.prototype.setDocument=function(a){this.document_=a};goog.dom.DomHelper.prototype.getDocument=function(){return this.document_};
-goog.dom.DomHelper.prototype.getElement=function(a){return goog.dom.getElementHelper_(this.document_,a)};goog.dom.DomHelper.prototype.getRequiredElement=function(a){return goog.dom.getRequiredElementHelper_(this.document_,a)};goog.dom.DomHelper.prototype.$=goog.dom.DomHelper.prototype.getElement;goog.dom.DomHelper.prototype.getElementsByTagNameAndClass=function(a,b,c){return goog.dom.getElementsByTagNameAndClass_(this.document_,a,b,c)};
-goog.dom.DomHelper.prototype.getElementsByClass=function(a,b){return goog.dom.getElementsByClass(a,b||this.document_)};goog.dom.DomHelper.prototype.getElementByClass=function(a,b){return goog.dom.getElementByClass(a,b||this.document_)};goog.dom.DomHelper.prototype.getRequiredElementByClass=function(a,b){return goog.dom.getRequiredElementByClass(a,b||this.document_)};goog.dom.DomHelper.prototype.$$=goog.dom.DomHelper.prototype.getElementsByTagNameAndClass;
-goog.dom.DomHelper.prototype.setProperties=goog.dom.setProperties;goog.dom.DomHelper.prototype.getViewportSize=function(a){return goog.dom.getViewportSize(a||this.getWindow())};goog.dom.DomHelper.prototype.getDocumentHeight=function(){return goog.dom.getDocumentHeight_(this.getWindow())};goog.dom.DomHelper.prototype.createDom=function(a,b,c){return goog.dom.createDom_(this.document_,arguments)};goog.dom.DomHelper.prototype.$dom=goog.dom.DomHelper.prototype.createDom;
-goog.dom.DomHelper.prototype.createElement=function(a){return this.document_.createElement(a)};goog.dom.DomHelper.prototype.createTextNode=function(a){return this.document_.createTextNode(String(a))};goog.dom.DomHelper.prototype.createTable=function(a,b,c){return goog.dom.createTable_(this.document_,a,b,!!c)};goog.dom.DomHelper.prototype.htmlToDocumentFragment=function(a){return goog.dom.htmlToDocumentFragment_(this.document_,a)};goog.dom.DomHelper.prototype.isCss1CompatMode=function(){return goog.dom.isCss1CompatMode_(this.document_)};
-goog.dom.DomHelper.prototype.getWindow=function(){return goog.dom.getWindow_(this.document_)};goog.dom.DomHelper.prototype.getDocumentScrollElement=function(){return goog.dom.getDocumentScrollElement_(this.document_)};goog.dom.DomHelper.prototype.getDocumentScroll=function(){return goog.dom.getDocumentScroll_(this.document_)};goog.dom.DomHelper.prototype.getActiveElement=function(a){return goog.dom.getActiveElement(a||this.document_)};goog.dom.DomHelper.prototype.appendChild=goog.dom.appendChild;
-goog.dom.DomHelper.prototype.append=goog.dom.append;goog.dom.DomHelper.prototype.canHaveChildren=goog.dom.canHaveChildren;goog.dom.DomHelper.prototype.removeChildren=goog.dom.removeChildren;goog.dom.DomHelper.prototype.insertSiblingBefore=goog.dom.insertSiblingBefore;goog.dom.DomHelper.prototype.insertSiblingAfter=goog.dom.insertSiblingAfter;goog.dom.DomHelper.prototype.insertChildAt=goog.dom.insertChildAt;goog.dom.DomHelper.prototype.removeNode=goog.dom.removeNode;
-goog.dom.DomHelper.prototype.replaceNode=goog.dom.replaceNode;goog.dom.DomHelper.prototype.flattenElement=goog.dom.flattenElement;goog.dom.DomHelper.prototype.getChildren=goog.dom.getChildren;goog.dom.DomHelper.prototype.getFirstElementChild=goog.dom.getFirstElementChild;goog.dom.DomHelper.prototype.getLastElementChild=goog.dom.getLastElementChild;goog.dom.DomHelper.prototype.getNextElementSibling=goog.dom.getNextElementSibling;goog.dom.DomHelper.prototype.getPreviousElementSibling=goog.dom.getPreviousElementSibling;
-goog.dom.DomHelper.prototype.getNextNode=goog.dom.getNextNode;goog.dom.DomHelper.prototype.getPreviousNode=goog.dom.getPreviousNode;goog.dom.DomHelper.prototype.isNodeLike=goog.dom.isNodeLike;goog.dom.DomHelper.prototype.isElement=goog.dom.isElement;goog.dom.DomHelper.prototype.isWindow=goog.dom.isWindow;goog.dom.DomHelper.prototype.getParentElement=goog.dom.getParentElement;goog.dom.DomHelper.prototype.contains=goog.dom.contains;goog.dom.DomHelper.prototype.compareNodeOrder=goog.dom.compareNodeOrder;
-goog.dom.DomHelper.prototype.findCommonAncestor=goog.dom.findCommonAncestor;goog.dom.DomHelper.prototype.getOwnerDocument=goog.dom.getOwnerDocument;goog.dom.DomHelper.prototype.getFrameContentDocument=goog.dom.getFrameContentDocument;goog.dom.DomHelper.prototype.getFrameContentWindow=goog.dom.getFrameContentWindow;goog.dom.DomHelper.prototype.setTextContent=goog.dom.setTextContent;goog.dom.DomHelper.prototype.getOuterHtml=goog.dom.getOuterHtml;goog.dom.DomHelper.prototype.findNode=goog.dom.findNode;
-goog.dom.DomHelper.prototype.findNodes=goog.dom.findNodes;goog.dom.DomHelper.prototype.isFocusableTabIndex=goog.dom.isFocusableTabIndex;goog.dom.DomHelper.prototype.setFocusableTabIndex=goog.dom.setFocusableTabIndex;goog.dom.DomHelper.prototype.isFocusable=goog.dom.isFocusable;goog.dom.DomHelper.prototype.getTextContent=goog.dom.getTextContent;goog.dom.DomHelper.prototype.getNodeTextLength=goog.dom.getNodeTextLength;goog.dom.DomHelper.prototype.getNodeTextOffset=goog.dom.getNodeTextOffset;
-goog.dom.DomHelper.prototype.getNodeAtOffset=goog.dom.getNodeAtOffset;goog.dom.DomHelper.prototype.isNodeList=goog.dom.isNodeList;goog.dom.DomHelper.prototype.getAncestorByTagNameAndClass=goog.dom.getAncestorByTagNameAndClass;goog.dom.DomHelper.prototype.getAncestorByClass=goog.dom.getAncestorByClass;goog.dom.DomHelper.prototype.getAncestor=goog.dom.getAncestor;goog.dom.vendor={};goog.dom.vendor.getVendorJsPrefix=function(){return goog.userAgent.WEBKIT?"Webkit":goog.userAgent.GECKO?"Moz":goog.userAgent.IE?"ms":goog.userAgent.OPERA?"O":null};goog.dom.vendor.getVendorPrefix=function(){return goog.userAgent.WEBKIT?"-webkit":goog.userAgent.GECKO?"-moz":goog.userAgent.IE?"-ms":goog.userAgent.OPERA?"-o":null};
-goog.dom.vendor.getPrefixedPropertyName=function(a,b){if(b&&a in b)return a;var c=goog.dom.vendor.getVendorJsPrefix();return c?(c=c.toLowerCase(),c+=goog.string.toTitleCase(a),!goog.isDef(b)||c in b?c:null):null};goog.dom.vendor.getPrefixedEventType=function(a){return((goog.dom.vendor.getVendorJsPrefix()||"")+a).toLowerCase()};goog.math.Box=function(a,b,c,d){this.top=a;this.right=b;this.bottom=c;this.left=d};goog.math.Box.boundingBox=function(a){for(var b=new goog.math.Box(arguments[0].y,arguments[0].x,arguments[0].y,arguments[0].x),c=1;c<arguments.length;c++){var d=arguments[c];b.top=Math.min(b.top,d.y);b.right=Math.max(b.right,d.x);b.bottom=Math.max(b.bottom,d.y);b.left=Math.min(b.left,d.x)}return b};goog.math.Box.prototype.clone=function(){return new goog.math.Box(this.top,this.right,this.bottom,this.left)};
-goog.DEBUG&&(goog.math.Box.prototype.toString=function(){return"("+this.top+"t, "+this.right+"r, "+this.bottom+"b, "+this.left+"l)"});goog.math.Box.prototype.contains=function(a){return goog.math.Box.contains(this,a)};goog.math.Box.prototype.expand=function(a,b,c,d){goog.isObject(a)?(this.top-=a.top,this.right+=a.right,this.bottom+=a.bottom,this.left-=a.left):(this.top-=a,this.right+=b,this.bottom+=c,this.left-=d);return this};
-goog.math.Box.prototype.expandToInclude=function(a){this.left=Math.min(this.left,a.left);this.top=Math.min(this.top,a.top);this.right=Math.max(this.right,a.right);this.bottom=Math.max(this.bottom,a.bottom)};goog.math.Box.equals=function(a,b){return a==b?!0:a&&b?a.top==b.top&&a.right==b.right&&a.bottom==b.bottom&&a.left==b.left:!1};
-goog.math.Box.contains=function(a,b){return a&&b?b instanceof goog.math.Box?b.left>=a.left&&b.right<=a.right&&b.top>=a.top&&b.bottom<=a.bottom:b.x>=a.left&&b.x<=a.right&&b.y>=a.top&&b.y<=a.bottom:!1};goog.math.Box.relativePositionX=function(a,b){return b.x<a.left?b.x-a.left:b.x>a.right?b.x-a.right:0};goog.math.Box.relativePositionY=function(a,b){return b.y<a.top?b.y-a.top:b.y>a.bottom?b.y-a.bottom:0};
-goog.math.Box.distance=function(a,b){var c=goog.math.Box.relativePositionX(a,b),d=goog.math.Box.relativePositionY(a,b);return Math.sqrt(c*c+d*d)};goog.math.Box.intersects=function(a,b){return a.left<=b.right&&b.left<=a.right&&a.top<=b.bottom&&b.top<=a.bottom};goog.math.Box.intersectsWithPadding=function(a,b,c){return a.left<=b.right+c&&b.left<=a.right+c&&a.top<=b.bottom+c&&b.top<=a.bottom+c};
-goog.math.Box.prototype.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};goog.math.Box.prototype.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};
-goog.math.Box.prototype.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this};goog.math.Box.prototype.translate=function(a,b){a instanceof goog.math.Coordinate?(this.left+=a.x,this.right+=a.x,this.top+=a.y,this.bottom+=a.y):(this.left+=a,this.right+=a,goog.isNumber(b)&&(this.top+=b,this.bottom+=b));return this};
-goog.math.Box.prototype.scale=function(a,b){var c=goog.isNumber(b)?b:a;this.left*=a;this.right*=a;this.top*=c;this.bottom*=c;return this};goog.math.Rect=function(a,b,c,d){this.left=a;this.top=b;this.width=c;this.height=d};goog.math.Rect.prototype.clone=function(){return new goog.math.Rect(this.left,this.top,this.width,this.height)};goog.math.Rect.prototype.toBox=function(){return new goog.math.Box(this.top,this.left+this.width,this.top+this.height,this.left)};goog.math.Rect.createFromBox=function(a){return new goog.math.Rect(a.left,a.top,a.right-a.left,a.bottom-a.top)};
-goog.DEBUG&&(goog.math.Rect.prototype.toString=function(){return"("+this.left+", "+this.top+" - "+this.width+"w x "+this.height+"h)"});goog.math.Rect.equals=function(a,b){return a==b?!0:a&&b?a.left==b.left&&a.width==b.width&&a.top==b.top&&a.height==b.height:!1};
-goog.math.Rect.prototype.intersection=function(a){var b=Math.max(this.left,a.left),c=Math.min(this.left+this.width,a.left+a.width);if(b<=c){var d=Math.max(this.top,a.top);a=Math.min(this.top+this.height,a.top+a.height);if(d<=a)return this.left=b,this.top=d,this.width=c-b,this.height=a-d,!0}return!1};
-goog.math.Rect.intersection=function(a,b){var c=Math.max(a.left,b.left),d=Math.min(a.left+a.width,b.left+b.width);if(c<=d){var e=Math.max(a.top,b.top),f=Math.min(a.top+a.height,b.top+b.height);if(e<=f)return new goog.math.Rect(c,e,d-c,f-e)}return null};goog.math.Rect.intersects=function(a,b){return a.left<=b.left+b.width&&b.left<=a.left+a.width&&a.top<=b.top+b.height&&b.top<=a.top+a.height};goog.math.Rect.prototype.intersects=function(a){return goog.math.Rect.intersects(this,a)};
-goog.math.Rect.difference=function(a,b){var c=goog.math.Rect.intersection(a,b);if(!c||!c.height||!c.width)return[a.clone()];var c=[],d=a.top,e=a.height,f=a.left+a.width,g=a.top+a.height,h=b.left+b.width,k=b.top+b.height;b.top>a.top&&(c.push(new goog.math.Rect(a.left,a.top,a.width,b.top-a.top)),d=b.top,e-=b.top-a.top);k<g&&(c.push(new goog.math.Rect(a.left,k,a.width,g-k)),e=k-d);b.left>a.left&&c.push(new goog.math.Rect(a.left,d,b.left-a.left,e));h<f&&c.push(new goog.math.Rect(h,d,f-h,e));return c};
-goog.math.Rect.prototype.difference=function(a){return goog.math.Rect.difference(this,a)};goog.math.Rect.prototype.boundingRect=function(a){var b=Math.max(this.left+this.width,a.left+a.width),c=Math.max(this.top+this.height,a.top+a.height);this.left=Math.min(this.left,a.left);this.top=Math.min(this.top,a.top);this.width=b-this.left;this.height=c-this.top};goog.math.Rect.boundingRect=function(a,b){if(!a||!b)return null;var c=a.clone();c.boundingRect(b);return c};
-goog.math.Rect.prototype.contains=function(a){return a instanceof goog.math.Rect?this.left<=a.left&&this.left+this.width>=a.left+a.width&&this.top<=a.top&&this.top+this.height>=a.top+a.height:a.x>=this.left&&a.x<=this.left+this.width&&a.y>=this.top&&a.y<=this.top+this.height};goog.math.Rect.prototype.squaredDistance=function(a){var b=a.x<this.left?this.left-a.x:Math.max(a.x-(this.left+this.width),0);a=a.y<this.top?this.top-a.y:Math.max(a.y-(this.top+this.height),0);return b*b+a*a};
-goog.math.Rect.prototype.distance=function(a){return Math.sqrt(this.squaredDistance(a))};goog.math.Rect.prototype.getSize=function(){return new goog.math.Size(this.width,this.height)};goog.math.Rect.prototype.getTopLeft=function(){return new goog.math.Coordinate(this.left,this.top)};goog.math.Rect.prototype.getCenter=function(){return new goog.math.Coordinate(this.left+this.width/2,this.top+this.height/2)};
-goog.math.Rect.prototype.getBottomRight=function(){return new goog.math.Coordinate(this.left+this.width,this.top+this.height)};goog.math.Rect.prototype.ceil=function(){this.left=Math.ceil(this.left);this.top=Math.ceil(this.top);this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};goog.math.Rect.prototype.floor=function(){this.left=Math.floor(this.left);this.top=Math.floor(this.top);this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};
-goog.math.Rect.prototype.round=function(){this.left=Math.round(this.left);this.top=Math.round(this.top);this.width=Math.round(this.width);this.height=Math.round(this.height);return this};goog.math.Rect.prototype.translate=function(a,b){a instanceof goog.math.Coordinate?(this.left+=a.x,this.top+=a.y):(this.left+=a,goog.isNumber(b)&&(this.top+=b));return this};goog.math.Rect.prototype.scale=function(a,b){var c=goog.isNumber(b)?b:a;this.left*=a;this.width*=a;this.top*=c;this.height*=c;return this};goog.style={};goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS=!1;goog.style.setStyle=function(a,b,c){goog.isString(b)?goog.style.setStyle_(a,c,b):goog.object.forEach(b,goog.partial(goog.style.setStyle_,a))};goog.style.setStyle_=function(a,b,c){(c=goog.style.getVendorJsStyleName_(a,c))&&(a.style[c]=b)};goog.style.getVendorJsStyleName_=function(a,b){var c=goog.string.toCamelCase(b);if(void 0===a.style[c]){var d=goog.dom.vendor.getVendorJsPrefix()+goog.string.toTitleCase(b);if(void 0!==a.style[d])return d}return c};
-goog.style.getVendorStyleName_=function(a,b){var c=goog.string.toCamelCase(b);return void 0===a.style[c]&&(c=goog.dom.vendor.getVendorJsPrefix()+goog.string.toTitleCase(b),void 0!==a.style[c])?goog.dom.vendor.getVendorPrefix()+"-"+b:b};goog.style.getStyle=function(a,b){var c=a.style[goog.string.toCamelCase(b)];return"undefined"!==typeof c?c:a.style[goog.style.getVendorJsStyleName_(a,b)]||""};
-goog.style.getComputedStyle=function(a,b){var c=goog.dom.getOwnerDocument(a);return c.defaultView&&c.defaultView.getComputedStyle&&(c=c.defaultView.getComputedStyle(a,null))?c[b]||c.getPropertyValue(b)||"":""};goog.style.getCascadedStyle=function(a,b){return a.currentStyle?a.currentStyle[b]:null};goog.style.getStyle_=function(a,b){return goog.style.getComputedStyle(a,b)||goog.style.getCascadedStyle(a,b)||a.style&&a.style[b]};
-goog.style.getComputedBoxSizing=function(a){return goog.style.getStyle_(a,"boxSizing")||goog.style.getStyle_(a,"MozBoxSizing")||goog.style.getStyle_(a,"WebkitBoxSizing")||null};goog.style.getComputedPosition=function(a){return goog.style.getStyle_(a,"position")};goog.style.getBackgroundColor=function(a){return goog.style.getStyle_(a,"backgroundColor")};goog.style.getComputedOverflowX=function(a){return goog.style.getStyle_(a,"overflowX")};
-goog.style.getComputedOverflowY=function(a){return goog.style.getStyle_(a,"overflowY")};goog.style.getComputedZIndex=function(a){return goog.style.getStyle_(a,"zIndex")};goog.style.getComputedTextAlign=function(a){return goog.style.getStyle_(a,"textAlign")};goog.style.getComputedCursor=function(a){return goog.style.getStyle_(a,"cursor")};
-goog.style.setPosition=function(a,b,c){var d,e=goog.userAgent.GECKO&&(goog.userAgent.MAC||goog.userAgent.X11)&&goog.userAgent.isVersionOrHigher("1.9");b instanceof goog.math.Coordinate?(d=b.x,b=b.y):(d=b,b=c);a.style.left=goog.style.getPixelStyleValue_(d,e);a.style.top=goog.style.getPixelStyleValue_(b,e)};goog.style.getPosition=function(a){return new goog.math.Coordinate(a.offsetLeft,a.offsetTop)};
-goog.style.getClientViewportElement=function(a){a=a?goog.dom.getOwnerDocument(a):goog.dom.getDocument();return!goog.userAgent.IE||goog.userAgent.isDocumentModeOrHigher(9)||goog.dom.getDomHelper(a).isCss1CompatMode()?a.documentElement:a.body};goog.style.getViewportPageOffset=function(a){var b=a.body;a=a.documentElement;return new goog.math.Coordinate(b.scrollLeft||a.scrollLeft,b.scrollTop||a.scrollTop)};
-goog.style.getBoundingClientRect_=function(a){var b;try{b=a.getBoundingClientRect()}catch(c){return{left:0,top:0,right:0,bottom:0}}goog.userAgent.IE&&a.ownerDocument.body&&(a=a.ownerDocument,b.left-=a.documentElement.clientLeft+a.body.clientLeft,b.top-=a.documentElement.clientTop+a.body.clientTop);return b};
-goog.style.getOffsetParent=function(a){if(goog.userAgent.IE&&!goog.userAgent.isDocumentModeOrHigher(8))return a.offsetParent;var b=goog.dom.getOwnerDocument(a),c=goog.style.getStyle_(a,"position"),d="fixed"==c||"absolute"==c;for(a=a.parentNode;a&&a!=b;a=a.parentNode)if(c=goog.style.getStyle_(a,"position"),d=d&&"static"==c&&a!=b.documentElement&&a!=b.body,!d&&(a.scrollWidth>a.clientWidth||a.scrollHeight>a.clientHeight||"fixed"==c||"absolute"==c||"relative"==c))return a;return null};
-goog.style.getVisibleRectForElement=function(a){for(var b=new goog.math.Box(0,Infinity,Infinity,0),c=goog.dom.getDomHelper(a),d=c.getDocument().body,e=c.getDocument().documentElement,f=c.getDocumentScrollElement();a=goog.style.getOffsetParent(a);)if(!(goog.userAgent.IE&&0==a.clientWidth||goog.userAgent.WEBKIT&&0==a.clientHeight&&a==d||a==d||a==e||"visible"==goog.style.getStyle_(a,"overflow"))){var g=goog.style.getPageOffset(a),h=goog.style.getClientLeftTop(a);g.x+=h.x;g.y+=h.y;b.top=Math.max(b.top,
-g.y);b.right=Math.min(b.right,g.x+a.clientWidth);b.bottom=Math.min(b.bottom,g.y+a.clientHeight);b.left=Math.max(b.left,g.x)}d=f.scrollLeft;f=f.scrollTop;b.left=Math.max(b.left,d);b.top=Math.max(b.top,f);c=c.getViewportSize();b.right=Math.min(b.right,d+c.width);b.bottom=Math.min(b.bottom,f+c.height);return 0<=b.top&&0<=b.left&&b.bottom>b.top&&b.right>b.left?b:null};
-goog.style.getContainerOffsetToScrollInto=function(a,b,c){var d=goog.style.getPageOffset(a),e=goog.style.getPageOffset(b),f=goog.style.getBorderBox(b),g=d.x-e.x-f.left,d=d.y-e.y-f.top,e=b.clientWidth-a.offsetWidth;a=b.clientHeight-a.offsetHeight;f=b.scrollLeft;b=b.scrollTop;c?(f+=g-e/2,b+=d-a/2):(f+=Math.min(g,Math.max(g-e,0)),b+=Math.min(d,Math.max(d-a,0)));return new goog.math.Coordinate(f,b)};
-goog.style.scrollIntoContainerView=function(a,b,c){a=goog.style.getContainerOffsetToScrollInto(a,b,c);b.scrollLeft=a.x;b.scrollTop=a.y};
-goog.style.getClientLeftTop=function(a){if(goog.userAgent.GECKO&&!goog.userAgent.isVersionOrHigher("1.9")){var b=parseFloat(goog.style.getComputedStyle(a,"borderLeftWidth"));if(goog.style.isRightToLeft(a))var c=a.offsetWidth-a.clientWidth-b-parseFloat(goog.style.getComputedStyle(a,"borderRightWidth")),b=b+c;return new goog.math.Coordinate(b,parseFloat(goog.style.getComputedStyle(a,"borderTopWidth")))}return new goog.math.Coordinate(a.clientLeft,a.clientTop)};
-goog.style.getPageOffset=function(a){var b,c=goog.dom.getOwnerDocument(a),d=goog.style.getStyle_(a,"position");goog.asserts.assertObject(a,"Parameter is required");var e=!goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS&&goog.userAgent.GECKO&&c.getBoxObjectFor&&!a.getBoundingClientRect&&"absolute"==d&&(b=c.getBoxObjectFor(a))&&(0>b.screenX||0>b.screenY),f=new goog.math.Coordinate(0,0),g=goog.style.getClientViewportElement(c);if(a==g)return f;if(goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS||
-a.getBoundingClientRect)b=goog.style.getBoundingClientRect_(a),a=goog.dom.getDomHelper(c).getDocumentScroll(),f.x=b.left+a.x,f.y=b.top+a.y;else if(c.getBoxObjectFor&&!e)b=c.getBoxObjectFor(a),a=c.getBoxObjectFor(g),f.x=b.screenX-a.screenX,f.y=b.screenY-a.screenY;else{b=a;do{f.x+=b.offsetLeft;f.y+=b.offsetTop;b!=a&&(f.x+=b.clientLeft||0,f.y+=b.clientTop||0);if(goog.userAgent.WEBKIT&&"fixed"==goog.style.getComputedPosition(b)){f.x+=c.body.scrollLeft;f.y+=c.body.scrollTop;break}b=b.offsetParent}while(b&&
-b!=a);if(goog.userAgent.OPERA||goog.userAgent.WEBKIT&&"absolute"==d)f.y-=c.body.offsetTop;for(b=a;(b=goog.style.getOffsetParent(b))&&b!=c.body&&b!=g;)f.x-=b.scrollLeft,goog.userAgent.OPERA&&"TR"==b.tagName||(f.y-=b.scrollTop)}return f};goog.style.getPageOffsetLeft=function(a){return goog.style.getPageOffset(a).x};goog.style.getPageOffsetTop=function(a){return goog.style.getPageOffset(a).y};
-goog.style.getFramedPageOffset=function(a,b){var c=new goog.math.Coordinate(0,0),d=goog.dom.getWindow(goog.dom.getOwnerDocument(a)),e=a;do{var f=d==b?goog.style.getPageOffset(e):goog.style.getClientPositionForElement_(goog.asserts.assert(e));c.x+=f.x;c.y+=f.y}while(d&&d!=b&&(e=d.frameElement)&&(d=d.parent));return c};
-goog.style.translateRectForAnotherFrame=function(a,b,c){if(b.getDocument()!=c.getDocument()){var d=b.getDocument().body;c=goog.style.getFramedPageOffset(d,c.getWindow());c=goog.math.Coordinate.difference(c,goog.style.getPageOffset(d));goog.userAgent.IE&&!b.isCss1CompatMode()&&(c=goog.math.Coordinate.difference(c,b.getDocumentScroll()));a.left+=c.x;a.top+=c.y}};
-goog.style.getRelativePosition=function(a,b){var c=goog.style.getClientPosition(a),d=goog.style.getClientPosition(b);return new goog.math.Coordinate(c.x-d.x,c.y-d.y)};
-goog.style.getClientPositionForElement_=function(a){var b;if(goog.style.GET_BOUNDING_CLIENT_RECT_ALWAYS_EXISTS||a.getBoundingClientRect)b=goog.style.getBoundingClientRect_(a),b=new goog.math.Coordinate(b.left,b.top);else{b=goog.dom.getDomHelper(a).getDocumentScroll();var c=goog.style.getPageOffset(a);b=new goog.math.Coordinate(c.x-b.x,c.y-b.y)}return goog.userAgent.GECKO&&!goog.userAgent.isVersionOrHigher(12)?goog.math.Coordinate.sum(b,goog.style.getCssTranslation(a)):b};
-goog.style.getClientPosition=function(a){goog.asserts.assert(a);if(a.nodeType==goog.dom.NodeType.ELEMENT)return goog.style.getClientPositionForElement_(a);var b=goog.isFunction(a.getBrowserEvent),c=a;a.targetTouches?c=a.targetTouches[0]:b&&a.getBrowserEvent().targetTouches&&(c=a.getBrowserEvent().targetTouches[0]);return new goog.math.Coordinate(c.clientX,c.clientY)};
-goog.style.setPageOffset=function(a,b,c){var d=goog.style.getPageOffset(a);b instanceof goog.math.Coordinate&&(c=b.y,b=b.x);goog.style.setPosition(a,a.offsetLeft+(b-d.x),a.offsetTop+(c-d.y))};goog.style.setSize=function(a,b,c){if(b instanceof goog.math.Size)c=b.height,b=b.width;else if(void 0==c)throw Error("missing height argument");goog.style.setWidth(a,b);goog.style.setHeight(a,c)};goog.style.getPixelStyleValue_=function(a,b){"number"==typeof a&&(a=(b?Math.round(a):a)+"px");return a};
-goog.style.setHeight=function(a,b){a.style.height=goog.style.getPixelStyleValue_(b,!0)};goog.style.setWidth=function(a,b){a.style.width=goog.style.getPixelStyleValue_(b,!0)};goog.style.getSize=function(a){return goog.style.evaluateWithTemporaryDisplay_(goog.style.getSizeWithDisplay_,a)};
-goog.style.evaluateWithTemporaryDisplay_=function(a,b){if("none"!=goog.style.getStyle_(b,"display"))return a(b);var c=b.style,d=c.display,e=c.visibility,f=c.position;c.visibility="hidden";c.position="absolute";c.display="inline";var g=a(b);c.display=d;c.position=f;c.visibility=e;return g};
-goog.style.getSizeWithDisplay_=function(a){var b=a.offsetWidth,c=a.offsetHeight,d=goog.userAgent.WEBKIT&&!b&&!c;return goog.isDef(b)&&!d||!a.getBoundingClientRect?new goog.math.Size(b,c):(a=goog.style.getBoundingClientRect_(a),new goog.math.Size(a.right-a.left,a.bottom-a.top))};goog.style.getTransformedSize=function(a){if(!a.getBoundingClientRect)return null;a=goog.style.evaluateWithTemporaryDisplay_(goog.style.getBoundingClientRect_,a);return new goog.math.Size(a.right-a.left,a.bottom-a.top)};
-goog.style.getBounds=function(a){var b=goog.style.getPageOffset(a);a=goog.style.getSize(a);return new goog.math.Rect(b.x,b.y,a.width,a.height)};goog.style.toCamelCase=function(a){return goog.string.toCamelCase(String(a))};goog.style.toSelectorCase=function(a){return goog.string.toSelectorCase(a)};
-goog.style.getOpacity=function(a){var b=a.style;a="";"opacity"in b?a=b.opacity:"MozOpacity"in b?a=b.MozOpacity:"filter"in b&&(b=b.filter.match(/alpha\(opacity=([\d.]+)\)/))&&(a=String(b[1]/100));return""==a?a:Number(a)};goog.style.setOpacity=function(a,b){var c=a.style;"opacity"in c?c.opacity=b:"MozOpacity"in c?c.MozOpacity=b:"filter"in c&&(c.filter=""===b?"":"alpha(opacity="+100*b+")")};
-goog.style.setTransparentBackgroundImage=function(a,b){var c=a.style;goog.userAgent.IE&&!goog.userAgent.isVersionOrHigher("8")?c.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+b+'", sizingMethod="crop")':(c.backgroundImage="url("+b+")",c.backgroundPosition="top left",c.backgroundRepeat="no-repeat")};goog.style.clearTransparentBackgroundImage=function(a){a=a.style;"filter"in a?a.filter="":a.backgroundImage="none"};
-goog.style.showElement=function(a,b){goog.style.setElementShown(a,b)};goog.style.setElementShown=function(a,b){a.style.display=b?"":"none"};goog.style.isElementShown=function(a){return"none"!=a.style.display};
-goog.style.installStyles=function(a,b){var c=goog.dom.getDomHelper(b),d=null,e=c.getDocument();goog.userAgent.IE&&e.createStyleSheet?(d=e.createStyleSheet(),goog.style.setStyles(d,a)):(e=c.getElementsByTagNameAndClass("head")[0],e||(d=c.getElementsByTagNameAndClass("body")[0],e=c.createDom("head"),d.parentNode.insertBefore(e,d)),d=c.createDom("style"),goog.style.setStyles(d,a),c.appendChild(e,d));return d};goog.style.uninstallStyles=function(a){goog.dom.removeNode(a.ownerNode||a.owningElement||a)};
-goog.style.setStyles=function(a,b){goog.userAgent.IE&&goog.isDef(a.cssText)?a.cssText=b:a.innerHTML=b};goog.style.setPreWrap=function(a){a=a.style;goog.userAgent.IE&&!goog.userAgent.isVersionOrHigher("8")?(a.whiteSpace="pre",a.wordWrap="break-word"):a.whiteSpace=goog.userAgent.GECKO?"-moz-pre-wrap":"pre-wrap"};
-goog.style.setInlineBlock=function(a){a=a.style;a.position="relative";goog.userAgent.IE&&!goog.userAgent.isVersionOrHigher("8")?(a.zoom="1",a.display="inline"):a.display=goog.userAgent.GECKO?goog.userAgent.isVersionOrHigher("1.9a")?"inline-block":"-moz-inline-box":"inline-block"};goog.style.isRightToLeft=function(a){return"rtl"==goog.style.getStyle_(a,"direction")};goog.style.unselectableStyle_=goog.userAgent.GECKO?"MozUserSelect":goog.userAgent.WEBKIT?"WebkitUserSelect":null;
-goog.style.isUnselectable=function(a){return goog.style.unselectableStyle_?"none"==a.style[goog.style.unselectableStyle_].toLowerCase():goog.userAgent.IE||goog.userAgent.OPERA?"on"==a.getAttribute("unselectable"):!1};
-goog.style.setUnselectable=function(a,b,c){c=c?null:a.getElementsByTagName("*");var d=goog.style.unselectableStyle_;if(d){if(b=b?"none":"",a.style[d]=b,c){a=0;for(var e;e=c[a];a++)e.style[d]=b}}else if(goog.userAgent.IE||goog.userAgent.OPERA)if(b=b?"on":"",a.setAttribute("unselectable",b),c)for(a=0;e=c[a];a++)e.setAttribute("unselectable",b)};goog.style.getBorderBoxSize=function(a){return new goog.math.Size(a.offsetWidth,a.offsetHeight)};
-goog.style.setBorderBoxSize=function(a,b){var c=goog.dom.getOwnerDocument(a),d=goog.dom.getDomHelper(c).isCss1CompatMode();if(!goog.userAgent.IE||d&&goog.userAgent.isVersionOrHigher("8"))goog.style.setBoxSizingSize_(a,b,"border-box");else if(c=a.style,d){var d=goog.style.getPaddingBox(a),e=goog.style.getBorderBox(a);c.pixelWidth=b.width-e.left-d.left-d.right-e.right;c.pixelHeight=b.height-e.top-d.top-d.bottom-e.bottom}else c.pixelWidth=b.width,c.pixelHeight=b.height};
-goog.style.getContentBoxSize=function(a){var b=goog.dom.getOwnerDocument(a),c=goog.userAgent.IE&&a.currentStyle;if(c&&goog.dom.getDomHelper(b).isCss1CompatMode()&&"auto"!=c.width&&"auto"!=c.height&&!c.boxSizing)return b=goog.style.getIePixelValue_(a,c.width,"width","pixelWidth"),a=goog.style.getIePixelValue_(a,c.height,"height","pixelHeight"),new goog.math.Size(b,a);c=goog.style.getBorderBoxSize(a);b=goog.style.getPaddingBox(a);a=goog.style.getBorderBox(a);return new goog.math.Size(c.width-a.left-
-b.left-b.right-a.right,c.height-a.top-b.top-b.bottom-a.bottom)};
-goog.style.setContentBoxSize=function(a,b){var c=goog.dom.getOwnerDocument(a),d=goog.dom.getDomHelper(c).isCss1CompatMode();if(!goog.userAgent.IE||d&&goog.userAgent.isVersionOrHigher("8"))goog.style.setBoxSizingSize_(a,b,"content-box");else if(c=a.style,d)c.pixelWidth=b.width,c.pixelHeight=b.height;else{var d=goog.style.getPaddingBox(a),e=goog.style.getBorderBox(a);c.pixelWidth=b.width+e.left+d.left+d.right+e.right;c.pixelHeight=b.height+e.top+d.top+d.bottom+e.bottom}};
-goog.style.setBoxSizingSize_=function(a,b,c){a=a.style;goog.userAgent.GECKO?a.MozBoxSizing=c:goog.userAgent.WEBKIT?a.WebkitBoxSizing=c:a.boxSizing=c;a.width=Math.max(b.width,0)+"px";a.height=Math.max(b.height,0)+"px"};goog.style.getIePixelValue_=function(a,b,c,d){if(/^\d+px?$/.test(b))return parseInt(b,10);var e=a.style[c],f=a.runtimeStyle[c];a.runtimeStyle[c]=a.currentStyle[c];a.style[c]=b;b=a.style[d];a.style[c]=e;a.runtimeStyle[c]=f;return b};
-goog.style.getIePixelDistance_=function(a,b){var c=goog.style.getCascadedStyle(a,b);return c?goog.style.getIePixelValue_(a,c,"left","pixelLeft"):0};
-goog.style.getBox_=function(a,b){if(goog.userAgent.IE){var c=goog.style.getIePixelDistance_(a,b+"Left"),d=goog.style.getIePixelDistance_(a,b+"Right"),e=goog.style.getIePixelDistance_(a,b+"Top"),f=goog.style.getIePixelDistance_(a,b+"Bottom");return new goog.math.Box(e,d,f,c)}c=goog.style.getComputedStyle(a,b+"Left");d=goog.style.getComputedStyle(a,b+"Right");e=goog.style.getComputedStyle(a,b+"Top");f=goog.style.getComputedStyle(a,b+"Bottom");return new goog.math.Box(parseFloat(e),parseFloat(d),parseFloat(f),
-parseFloat(c))};goog.style.getPaddingBox=function(a){return goog.style.getBox_(a,"padding")};goog.style.getMarginBox=function(a){return goog.style.getBox_(a,"margin")};goog.style.ieBorderWidthKeywords_={thin:2,medium:4,thick:6};
-goog.style.getIePixelBorder_=function(a,b){if("none"==goog.style.getCascadedStyle(a,b+"Style"))return 0;var c=goog.style.getCascadedStyle(a,b+"Width");return c in goog.style.ieBorderWidthKeywords_?goog.style.ieBorderWidthKeywords_[c]:goog.style.getIePixelValue_(a,c,"left","pixelLeft")};
-goog.style.getBorderBox=function(a){if(goog.userAgent.IE&&!goog.userAgent.isDocumentModeOrHigher(9)){var b=goog.style.getIePixelBorder_(a,"borderLeft"),c=goog.style.getIePixelBorder_(a,"borderRight"),d=goog.style.getIePixelBorder_(a,"borderTop");a=goog.style.getIePixelBorder_(a,"borderBottom");return new goog.math.Box(d,c,a,b)}b=goog.style.getComputedStyle(a,"borderLeftWidth");c=goog.style.getComputedStyle(a,"borderRightWidth");d=goog.style.getComputedStyle(a,"borderTopWidth");a=goog.style.getComputedStyle(a,
-"borderBottomWidth");return new goog.math.Box(parseFloat(d),parseFloat(c),parseFloat(a),parseFloat(b))};goog.style.getFontFamily=function(a){var b=goog.dom.getOwnerDocument(a),c="";if(b.body.createTextRange){b=b.body.createTextRange();b.moveToElementText(a);try{c=b.queryCommandValue("FontName")}catch(d){c=""}}c||(c=goog.style.getStyle_(a,"fontFamily"));a=c.split(",");1<a.length&&(c=a[0]);return goog.string.stripQuotes(c,"\"'")};goog.style.lengthUnitRegex_=/[^\d]+$/;
-goog.style.getLengthUnits=function(a){return(a=a.match(goog.style.lengthUnitRegex_))&&a[0]||null};goog.style.ABSOLUTE_CSS_LENGTH_UNITS_={cm:1,"in":1,mm:1,pc:1,pt:1};goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_={em:1,ex:1};
-goog.style.getFontSize=function(a){var b=goog.style.getStyle_(a,"fontSize"),c=goog.style.getLengthUnits(b);if(b&&"px"==c)return parseInt(b,10);if(goog.userAgent.IE){if(c in goog.style.ABSOLUTE_CSS_LENGTH_UNITS_)return goog.style.getIePixelValue_(a,b,"left","pixelLeft");if(a.parentNode&&a.parentNode.nodeType==goog.dom.NodeType.ELEMENT&&c in goog.style.CONVERTIBLE_RELATIVE_CSS_UNITS_)return a=a.parentNode,c=goog.style.getStyle_(a,"fontSize"),goog.style.getIePixelValue_(a,b==c?"1em":b,"left","pixelLeft")}c=
-goog.dom.createDom("span",{style:"visibility:hidden;position:absolute;line-height:0;padding:0;margin:0;border:0;height:1em;"});goog.dom.appendChild(a,c);b=c.offsetHeight;goog.dom.removeNode(c);return b};goog.style.parseStyleAttribute=function(a){var b={};goog.array.forEach(a.split(/\s*;\s*/),function(a){a=a.split(/\s*:\s*/);2==a.length&&(b[goog.string.toCamelCase(a[0].toLowerCase())]=a[1])});return b};
-goog.style.toStyleAttribute=function(a){var b=[];goog.object.forEach(a,function(a,d){b.push(goog.string.toSelectorCase(d),":",a,";")});return b.join("")};goog.style.setFloat=function(a,b){a.style[goog.userAgent.IE?"styleFloat":"cssFloat"]=b};goog.style.getFloat=function(a){return a.style[goog.userAgent.IE?"styleFloat":"cssFloat"]||""};
-goog.style.getScrollbarWidth=function(a){var b=goog.dom.createElement("div");a&&(b.className=a);b.style.cssText="overflow:auto;position:absolute;top:0;width:100px;height:100px";a=goog.dom.createElement("div");goog.style.setSize(a,"200px","200px");b.appendChild(a);goog.dom.appendChild(goog.dom.getDocument().body,b);a=b.offsetWidth-b.clientWidth;goog.dom.removeNode(b);return a};goog.style.MATRIX_TRANSLATION_REGEX_=/matrix\([0-9\.\-]+, [0-9\.\-]+, [0-9\.\-]+, [0-9\.\-]+, ([0-9\.\-]+)p?x?, ([0-9\.\-]+)p?x?\)/;
-goog.style.getCssTranslation=function(a){var b;goog.userAgent.IE?b="-ms-transform":goog.userAgent.WEBKIT?b="-webkit-transform":goog.userAgent.OPERA?b="-o-transform":goog.userAgent.GECKO&&(b="-moz-transform");var c;b&&(c=goog.style.getStyle_(a,b));c||(c=goog.style.getStyle_(a,"transform"));return c?(a=c.match(goog.style.MATRIX_TRANSLATION_REGEX_))?new goog.math.Coordinate(parseFloat(a[1]),parseFloat(a[2])):new goog.math.Coordinate(0,0):new goog.math.Coordinate(0,0)};goog.events.EventHandler=function(a){goog.Disposable.call(this);this.handler_=a;this.keys_={}};goog.inherits(goog.events.EventHandler,goog.Disposable);goog.events.EventHandler.typeArray_=[];goog.events.EventHandler.prototype.listen=function(a,b,c,d,e){return this.listen_(a,b,c,d,e)};goog.events.EventHandler.prototype.listenWithScope=function(a,b,c,d,e){return this.listen_(a,b,c,d,e)};
-goog.events.EventHandler.prototype.listen_=function(a,b,c,d,e){goog.isArray(b)||(goog.events.EventHandler.typeArray_[0]=b,b=goog.events.EventHandler.typeArray_);for(var f=0;f<b.length;f++){var g=goog.events.listen(a,b[f],c||this.handleEvent,d||!1,e||this.handler_||this);if(!g)break;this.keys_[g.key]=g}return this};goog.events.EventHandler.prototype.listenOnce=function(a,b,c,d,e){return this.listenOnce_(a,b,c,d,e)};
-goog.events.EventHandler.prototype.listenOnceWithScope=function(a,b,c,d,e){return this.listenOnce_(a,b,c,d,e)};goog.events.EventHandler.prototype.listenOnce_=function(a,b,c,d,e){if(goog.isArray(b))for(var f=0;f<b.length;f++)this.listenOnce(a,b[f],c,d,e);else{a=goog.events.listenOnce(a,b,c||this.handleEvent,d,e||this.handler_||this);if(!a)return this;this.keys_[a.key]=a}return this};goog.events.EventHandler.prototype.listenWithWrapper=function(a,b,c,d,e){return this.listenWithWrapper_(a,b,c,d,e)};
-goog.events.EventHandler.prototype.listenWithWrapperAndScope=function(a,b,c,d,e){return this.listenWithWrapper_(a,b,c,d,e)};goog.events.EventHandler.prototype.listenWithWrapper_=function(a,b,c,d,e){b.listen(a,c,d,e||this.handler_||this,this);return this};goog.events.EventHandler.prototype.getListenerCount=function(){var a=0,b;for(b in this.keys_)Object.prototype.hasOwnProperty.call(this.keys_,b)&&a++;return a};
-goog.events.EventHandler.prototype.unlisten=function(a,b,c,d,e){if(goog.isArray(b))for(var f=0;f<b.length;f++)this.unlisten(a,b[f],c,d,e);else if(a=goog.events.getListener(a,b,c||this.handleEvent,d,e||this.handler_||this))goog.events.unlistenByKey(a),delete this.keys_[a.key];return this};goog.events.EventHandler.prototype.unlistenWithWrapper=function(a,b,c,d,e){b.unlisten(a,c,d,e||this.handler_||this,this);return this};
-goog.events.EventHandler.prototype.removeAll=function(){goog.object.forEach(this.keys_,goog.events.unlistenByKey);this.keys_={}};goog.events.EventHandler.prototype.disposeInternal=function(){goog.events.EventHandler.superClass_.disposeInternal.call(this);this.removeAll()};goog.events.EventHandler.prototype.handleEvent=function(a){throw Error("EventHandler.handleEvent not implemented");};goog.ui={};goog.ui.IdGenerator=function(){};goog.addSingletonGetter(goog.ui.IdGenerator);goog.ui.IdGenerator.prototype.nextId_=0;goog.ui.IdGenerator.prototype.getNextUniqueId=function(){return":"+(this.nextId_++).toString(36)};goog.ui.Component=function(a){goog.events.EventTarget.call(this);this.dom_=a||goog.dom.getDomHelper();this.rightToLeft_=goog.ui.Component.defaultRightToLeft_};goog.inherits(goog.ui.Component,goog.events.EventTarget);goog.ui.Component.ALLOW_DETACHED_DECORATION=!1;goog.ui.Component.prototype.idGenerator_=goog.ui.IdGenerator.getInstance();goog.ui.Component.defaultRightToLeft_=null;
-goog.ui.Component.EventType={BEFORE_SHOW:"beforeshow",SHOW:"show",HIDE:"hide",DISABLE:"disable",ENABLE:"enable",HIGHLIGHT:"highlight",UNHIGHLIGHT:"unhighlight",ACTIVATE:"activate",DEACTIVATE:"deactivate",SELECT:"select",UNSELECT:"unselect",CHECK:"check",UNCHECK:"uncheck",FOCUS:"focus",BLUR:"blur",OPEN:"open",CLOSE:"close",ENTER:"enter",LEAVE:"leave",ACTION:"action",CHANGE:"change"};
-goog.ui.Component.Error={NOT_SUPPORTED:"Method not supported",DECORATE_INVALID:"Invalid element to decorate",ALREADY_RENDERED:"Component already rendered",PARENT_UNABLE_TO_BE_SET:"Unable to set parent component",CHILD_INDEX_OUT_OF_BOUNDS:"Child component index out of bounds",NOT_OUR_CHILD:"Child is not in parent component",NOT_IN_DOCUMENT:"Operation not supported while component is not in document",STATE_INVALID:"Invalid component state"};
-goog.ui.Component.State={ALL:255,DISABLED:1,HOVER:2,ACTIVE:4,SELECTED:8,CHECKED:16,FOCUSED:32,OPENED:64};
-goog.ui.Component.getStateTransitionEvent=function(a,b){switch(a){case goog.ui.Component.State.DISABLED:return b?goog.ui.Component.EventType.DISABLE:goog.ui.Component.EventType.ENABLE;case goog.ui.Component.State.HOVER:return b?goog.ui.Component.EventType.HIGHLIGHT:goog.ui.Component.EventType.UNHIGHLIGHT;case goog.ui.Component.State.ACTIVE:return b?goog.ui.Component.EventType.ACTIVATE:goog.ui.Component.EventType.DEACTIVATE;case goog.ui.Component.State.SELECTED:return b?goog.ui.Component.EventType.SELECT:
-goog.ui.Component.EventType.UNSELECT;case goog.ui.Component.State.CHECKED:return b?goog.ui.Component.EventType.CHECK:goog.ui.Component.EventType.UNCHECK;case goog.ui.Component.State.FOCUSED:return b?goog.ui.Component.EventType.FOCUS:goog.ui.Component.EventType.BLUR;case goog.ui.Component.State.OPENED:return b?goog.ui.Component.EventType.OPEN:goog.ui.Component.EventType.CLOSE}throw Error(goog.ui.Component.Error.STATE_INVALID);};
-goog.ui.Component.setDefaultRightToLeft=function(a){goog.ui.Component.defaultRightToLeft_=a};goog.ui.Component.prototype.id_=null;goog.ui.Component.prototype.inDocument_=!1;goog.ui.Component.prototype.element_=null;goog.ui.Component.prototype.rightToLeft_=null;goog.ui.Component.prototype.model_=null;goog.ui.Component.prototype.parent_=null;goog.ui.Component.prototype.children_=null;goog.ui.Component.prototype.childIndex_=null;goog.ui.Component.prototype.wasDecorated_=!1;
-goog.ui.Component.prototype.getId=function(){return this.id_||(this.id_=this.idGenerator_.getNextUniqueId())};goog.ui.Component.prototype.setId=function(a){this.parent_&&this.parent_.childIndex_&&(goog.object.remove(this.parent_.childIndex_,this.id_),goog.object.add(this.parent_.childIndex_,a,this));this.id_=a};goog.ui.Component.prototype.getElement=function(){return this.element_};
-goog.ui.Component.prototype.getElementStrict=function(){var a=this.element_;goog.asserts.assert(a,"Can not call getElementStrict before rendering/decorating.");return a};goog.ui.Component.prototype.setElementInternal=function(a){this.element_=a};goog.ui.Component.prototype.getElementsByClass=function(a){return this.element_?this.dom_.getElementsByClass(a,this.element_):[]};goog.ui.Component.prototype.getElementByClass=function(a){return this.element_?this.dom_.getElementByClass(a,this.element_):null};
-goog.ui.Component.prototype.getRequiredElementByClass=function(a){var b=this.getElementByClass(a);goog.asserts.assert(b,"Expected element in component with class: %s",a);return b};goog.ui.Component.prototype.getHandler=function(){return this.googUiComponentHandler_||(this.googUiComponentHandler_=new goog.events.EventHandler(this))};
-goog.ui.Component.prototype.setParent=function(a){if(this==a)throw Error(goog.ui.Component.Error.PARENT_UNABLE_TO_BE_SET);if(a&&this.parent_&&this.id_&&this.parent_.getChild(this.id_)&&this.parent_!=a)throw Error(goog.ui.Component.Error.PARENT_UNABLE_TO_BE_SET);this.parent_=a;goog.ui.Component.superClass_.setParentEventTarget.call(this,a)};goog.ui.Component.prototype.getParent=function(){return this.parent_};
-goog.ui.Component.prototype.setParentEventTarget=function(a){if(this.parent_&&this.parent_!=a)throw Error(goog.ui.Component.Error.NOT_SUPPORTED);goog.ui.Component.superClass_.setParentEventTarget.call(this,a)};goog.ui.Component.prototype.getDomHelper=function(){return this.dom_};goog.ui.Component.prototype.isInDocument=function(){return this.inDocument_};goog.ui.Component.prototype.createDom=function(){this.element_=this.dom_.createElement("div")};goog.ui.Component.prototype.render=function(a){this.render_(a)};
-goog.ui.Component.prototype.renderBefore=function(a){this.render_(a.parentNode,a)};goog.ui.Component.prototype.render_=function(a,b){if(this.inDocument_)throw Error(goog.ui.Component.Error.ALREADY_RENDERED);this.element_||this.createDom();a?a.insertBefore(this.element_,b||null):this.dom_.getDocument().body.appendChild(this.element_);this.parent_&&!this.parent_.isInDocument()||this.enterDocument()};
-goog.ui.Component.prototype.decorate=function(a){if(this.inDocument_)throw Error(goog.ui.Component.Error.ALREADY_RENDERED);if(a&&this.canDecorate(a)){this.wasDecorated_=!0;var b=goog.dom.getOwnerDocument(a);this.dom_&&this.dom_.getDocument()==b||(this.dom_=goog.dom.getDomHelper(a));this.decorateInternal(a);goog.ui.Component.ALLOW_DETACHED_DECORATION&&!goog.dom.contains(b,a)||this.enterDocument()}else throw Error(goog.ui.Component.Error.DECORATE_INVALID);};goog.ui.Component.prototype.canDecorate=function(a){return!0};
-goog.ui.Component.prototype.wasDecorated=function(){return this.wasDecorated_};goog.ui.Component.prototype.decorateInternal=function(a){this.element_=a};goog.ui.Component.prototype.enterDocument=function(){this.inDocument_=!0;this.forEachChild(function(a){!a.isInDocument()&&a.getElement()&&a.enterDocument()})};
-goog.ui.Component.prototype.exitDocument=function(){this.forEachChild(function(a){a.isInDocument()&&a.exitDocument()});this.googUiComponentHandler_&&this.googUiComponentHandler_.removeAll();this.inDocument_=!1};
-goog.ui.Component.prototype.disposeInternal=function(){this.inDocument_&&this.exitDocument();this.googUiComponentHandler_&&(this.googUiComponentHandler_.dispose(),delete this.googUiComponentHandler_);this.forEachChild(function(a){a.dispose()});!this.wasDecorated_&&this.element_&&goog.dom.removeNode(this.element_);this.parent_=this.model_=this.element_=this.childIndex_=this.children_=null;goog.ui.Component.superClass_.disposeInternal.call(this)};
-goog.ui.Component.prototype.makeId=function(a){return this.getId()+"."+a};goog.ui.Component.prototype.makeIds=function(a){var b={},c;for(c in a)b[c]=this.makeId(a[c]);return b};goog.ui.Component.prototype.getModel=function(){return this.model_};goog.ui.Component.prototype.setModel=function(a){this.model_=a};goog.ui.Component.prototype.getFragmentFromId=function(a){return a.substring(this.getId().length+1)};
-goog.ui.Component.prototype.getElementByFragment=function(a){if(!this.inDocument_)throw Error(goog.ui.Component.Error.NOT_IN_DOCUMENT);return this.dom_.getElement(this.makeId(a))};goog.ui.Component.prototype.addChild=function(a,b){this.addChildAt(a,this.getChildCount(),b)};
-goog.ui.Component.prototype.addChildAt=function(a,b,c){if(a.inDocument_&&(c||!this.inDocument_))throw Error(goog.ui.Component.Error.ALREADY_RENDERED);if(0>b||b>this.getChildCount())throw Error(goog.ui.Component.Error.CHILD_INDEX_OUT_OF_BOUNDS);this.childIndex_&&this.children_||(this.childIndex_={},this.children_=[]);a.getParent()==this?(goog.object.set(this.childIndex_,a.getId(),a),goog.array.remove(this.children_,a)):goog.object.add(this.childIndex_,a.getId(),a);a.setParent(this);goog.array.insertAt(this.children_,
-a,b);a.inDocument_&&this.inDocument_&&a.getParent()==this?(c=this.getContentElement(),c.insertBefore(a.getElement(),c.childNodes[b]||null)):c?(this.element_||this.createDom(),b=this.getChildAt(b+1),a.render_(this.getContentElement(),b?b.element_:null)):this.inDocument_&&!a.inDocument_&&a.element_&&a.element_.parentNode&&a.element_.parentNode.nodeType==goog.dom.NodeType.ELEMENT&&a.enterDocument()};goog.ui.Component.prototype.getContentElement=function(){return this.element_};
-goog.ui.Component.prototype.isRightToLeft=function(){null==this.rightToLeft_&&(this.rightToLeft_=goog.style.isRightToLeft(this.inDocument_?this.element_:this.dom_.getDocument().body));return this.rightToLeft_};goog.ui.Component.prototype.setRightToLeft=function(a){if(this.inDocument_)throw Error(goog.ui.Component.Error.ALREADY_RENDERED);this.rightToLeft_=a};goog.ui.Component.prototype.hasChildren=function(){return!!this.children_&&0!=this.children_.length};
-goog.ui.Component.prototype.getChildCount=function(){return this.children_?this.children_.length:0};goog.ui.Component.prototype.getChildIds=function(){var a=[];this.forEachChild(function(b){a.push(b.getId())});return a};goog.ui.Component.prototype.getChild=function(a){return this.childIndex_&&a?goog.object.get(this.childIndex_,a)||null:null};goog.ui.Component.prototype.getChildAt=function(a){return this.children_?this.children_[a]||null:null};
-goog.ui.Component.prototype.forEachChild=function(a,b){this.children_&&goog.array.forEach(this.children_,a,b)};goog.ui.Component.prototype.indexOfChild=function(a){return this.children_&&a?goog.array.indexOf(this.children_,a):-1};
-goog.ui.Component.prototype.removeChild=function(a,b){if(a){var c=goog.isString(a)?a:a.getId();a=this.getChild(c);c&&a&&(goog.object.remove(this.childIndex_,c),goog.array.remove(this.children_,a),b&&(a.exitDocument(),a.element_&&goog.dom.removeNode(a.element_)),a.setParent(null))}if(!a)throw Error(goog.ui.Component.Error.NOT_OUR_CHILD);return a};goog.ui.Component.prototype.removeChildAt=function(a,b){return this.removeChild(this.getChildAt(a),b)};
-goog.ui.Component.prototype.removeChildren=function(a){for(var b=[];this.hasChildren();)b.push(this.removeChildAt(0,a));return b};goog.a11y={};goog.a11y.aria={};
-goog.a11y.aria.Role={ALERT:"alert",ALERTDIALOG:"alertdialog",APPLICATION:"application",ARTICLE:"article",BANNER:"banner",BUTTON:"button",CHECKBOX:"checkbox",COLUMNHEADER:"columnheader",COMBOBOX:"combobox",COMPLEMENTARY:"complementary",CONTENTINFO:"contentinfo",DEFINITION:"definition",DIALOG:"dialog",DIRECTORY:"directory",DOCUMENT:"document",FORM:"form",GRID:"grid",GRIDCELL:"gridcell",GROUP:"group",HEADING:"heading",IMG:"img",LINK:"link",LIST:"list",LISTBOX:"listbox",LISTITEM:"listitem",LOG:"log",
-MAIN:"main",MARQUEE:"marquee",MATH:"math",MENU:"menu",MENUBAR:"menubar",MENU_ITEM:"menuitem",MENU_ITEM_CHECKBOX:"menuitemcheckbox",MENU_ITEM_RADIO:"menuitemradio",NAVIGATION:"navigation",NOTE:"note",OPTION:"option",PRESENTATION:"presentation",PROGRESSBAR:"progressbar",RADIO:"radio",RADIOGROUP:"radiogroup",REGION:"region",ROW:"row",ROWGROUP:"rowgroup",ROWHEADER:"rowheader",SCROLLBAR:"scrollbar",SEARCH:"search",SEPARATOR:"separator",SLIDER:"slider",SPINBUTTON:"spinbutton",STATUS:"status",TAB:"tab",
-TAB_LIST:"tablist",TAB_PANEL:"tabpanel",TEXTBOX:"textbox",TIMER:"timer",TOOLBAR:"toolbar",TOOLTIP:"tooltip",TREE:"tree",TREEGRID:"treegrid",TREEITEM:"treeitem"};goog.a11y.aria.State={ACTIVEDESCENDANT:"activedescendant",ATOMIC:"atomic",AUTOCOMPLETE:"autocomplete",BUSY:"busy",CHECKED:"checked",CONTROLS:"controls",DESCRIBEDBY:"describedby",DISABLED:"disabled",DROPEFFECT:"dropeffect",EXPANDED:"expanded",FLOWTO:"flowto",GRABBED:"grabbed",HASPOPUP:"haspopup",HIDDEN:"hidden",INVALID:"invalid",LABEL:"label",LABELLEDBY:"labelledby",LEVEL:"level",LIVE:"live",MULTILINE:"multiline",MULTISELECTABLE:"multiselectable",ORIENTATION:"orientation",OWNS:"owns",POSINSET:"posinset",
-PRESSED:"pressed",READONLY:"readonly",RELEVANT:"relevant",REQUIRED:"required",SELECTED:"selected",SETSIZE:"setsize",SORT:"sort",VALUEMAX:"valuemax",VALUEMIN:"valuemin",VALUENOW:"valuenow",VALUETEXT:"valuetext"};goog.a11y.aria.AutoCompleteValues={INLINE:"inline",LIST:"list",BOTH:"both",NONE:"none"};goog.a11y.aria.DropEffectValues={COPY:"copy",MOVE:"move",LINK:"link",EXECUTE:"execute",POPUP:"popup",NONE:"none"};goog.a11y.aria.LivePriority={OFF:"off",POLITE:"polite",ASSERTIVE:"assertive"};
-goog.a11y.aria.OrientationValues={VERTICAL:"vertical",HORIZONTAL:"horizontal"};goog.a11y.aria.RelevantValues={ADDITIONS:"additions",REMOVALS:"removals",TEXT:"text",ALL:"all"};goog.a11y.aria.SortValues={ASCENDING:"ascending",DESCENDING:"descending",NONE:"none",OTHER:"other"};goog.a11y.aria.CheckedValues={TRUE:"true",FALSE:"false",MIXED:"mixed",UNDEFINED:"undefined"};goog.a11y.aria.ExpandedValues={TRUE:"true",FALSE:"false",UNDEFINED:"undefined"};
-goog.a11y.aria.GrabbedValues={TRUE:"true",FALSE:"false",UNDEFINED:"undefined"};goog.a11y.aria.InvalidValues={FALSE:"false",TRUE:"true",GRAMMAR:"grammar",SPELLING:"spelling"};goog.a11y.aria.PressedValues={TRUE:"true",FALSE:"false",MIXED:"mixed",UNDEFINED:"undefined"};goog.a11y.aria.SelectedValues={TRUE:"true",FALSE:"false",UNDEFINED:"undefined"};goog.a11y.aria.datatables={};
-goog.a11y.aria.datatables.getDefaultValuesMap=function(){goog.a11y.aria.DefaultStateValueMap_||(goog.a11y.aria.DefaultStateValueMap_=goog.object.create(goog.a11y.aria.State.ATOMIC,!1,goog.a11y.aria.State.AUTOCOMPLETE,"none",goog.a11y.aria.State.DROPEFFECT,"none",goog.a11y.aria.State.HASPOPUP,!1,goog.a11y.aria.State.LIVE,"off",goog.a11y.aria.State.MULTILINE,!1,goog.a11y.aria.State.MULTISELECTABLE,!1,goog.a11y.aria.State.ORIENTATION,"vertical",goog.a11y.aria.State.READONLY,!1,goog.a11y.aria.State.RELEVANT,
-"additions text",goog.a11y.aria.State.REQUIRED,!1,goog.a11y.aria.State.SORT,"none",goog.a11y.aria.State.BUSY,!1,goog.a11y.aria.State.DISABLED,!1,goog.a11y.aria.State.HIDDEN,!1,goog.a11y.aria.State.INVALID,"false"));return goog.a11y.aria.DefaultStateValueMap_};goog.a11y.aria.ARIA_PREFIX_="aria-";goog.a11y.aria.ROLE_ATTRIBUTE_="role";goog.a11y.aria.TAGS_WITH_ASSUMED_ROLES_=[goog.dom.TagName.A,goog.dom.TagName.AREA,goog.dom.TagName.BUTTON,goog.dom.TagName.HEAD,goog.dom.TagName.INPUT,goog.dom.TagName.LINK,goog.dom.TagName.MENU,goog.dom.TagName.META,goog.dom.TagName.OPTGROUP,goog.dom.TagName.OPTION,goog.dom.TagName.PROGRESS,goog.dom.TagName.STYLE,goog.dom.TagName.SELECT,goog.dom.TagName.SOURCE,goog.dom.TagName.TEXTAREA,goog.dom.TagName.TITLE,goog.dom.TagName.TRACK];
-goog.a11y.aria.setRole=function(a,b){b?(goog.asserts.ENABLE_ASSERTS&&goog.asserts.assert(goog.object.containsValue(goog.a11y.aria.Role,b),"No such ARIA role "+b),a.setAttribute(goog.a11y.aria.ROLE_ATTRIBUTE_,b)):goog.a11y.aria.removeRole(a)};goog.a11y.aria.getRole=function(a){return a.getAttribute(goog.a11y.aria.ROLE_ATTRIBUTE_)||null};goog.a11y.aria.removeRole=function(a){a.removeAttribute(goog.a11y.aria.ROLE_ATTRIBUTE_)};
-goog.a11y.aria.setState=function(a,b,c){goog.isArrayLike(c)&&(c=c.join(" "));var d=goog.a11y.aria.getAriaAttributeName_(b);""===c||void 0==c?(c=goog.a11y.aria.datatables.getDefaultValuesMap(),b in c?a.setAttribute(d,c[b]):a.removeAttribute(d)):a.setAttribute(d,c)};goog.a11y.aria.removeState=function(a,b){a.removeAttribute(goog.a11y.aria.getAriaAttributeName_(b))};goog.a11y.aria.getState=function(a,b){var c=a.getAttribute(goog.a11y.aria.getAriaAttributeName_(b));return null==c||void 0==c?"":String(c)};
-goog.a11y.aria.getActiveDescendant=function(a){var b=goog.a11y.aria.getState(a,goog.a11y.aria.State.ACTIVEDESCENDANT);return goog.dom.getOwnerDocument(a).getElementById(b)};goog.a11y.aria.setActiveDescendant=function(a,b){var c="";b&&(c=b.id,goog.asserts.assert(c,"The active element should have an id."));goog.a11y.aria.setState(a,goog.a11y.aria.State.ACTIVEDESCENDANT,c)};goog.a11y.aria.getLabel=function(a){return goog.a11y.aria.getState(a,goog.a11y.aria.State.LABEL)};
-goog.a11y.aria.setLabel=function(a,b){goog.a11y.aria.setState(a,goog.a11y.aria.State.LABEL,b)};goog.a11y.aria.assertRoleIsSetInternalUtil=function(a,b){if(!goog.array.contains(goog.a11y.aria.TAGS_WITH_ASSUMED_ROLES_,a.tagName)){var c=goog.a11y.aria.getRole(a);goog.asserts.assert(null!=c,"The element ARIA role cannot be null.");goog.asserts.assert(goog.array.contains(b,c),'Non existing or incorrect role set for element.The role set is "'+c+'". The role should be any of "'+b+'". Check the ARIA specification for more details http://www.w3.org/TR/wai-aria/roles.')}};
-goog.a11y.aria.getStateBoolean=function(a,b){var c=a.getAttribute(goog.a11y.aria.getAriaAttributeName_(b));goog.asserts.assert(goog.isBoolean(c)||null==c||"true"==c||"false"==c);return null==c?c:goog.isBoolean(c)?c:"true"==c};goog.a11y.aria.getStateNumber=function(a,b){var c=a.getAttribute(goog.a11y.aria.getAriaAttributeName_(b));goog.asserts.assert((null==c||!isNaN(Number(c)))&&!goog.isBoolean(c));return null==c?null:Number(c)};
-goog.a11y.aria.getStateString=function(a,b){var c=a.getAttribute(goog.a11y.aria.getAriaAttributeName_(b));goog.asserts.assert((null==c||goog.isString(c))&&isNaN(Number(c))&&"true"!=c&&"false"!=c);return null==c?null:c};goog.a11y.aria.getStringArrayStateInternalUtil=function(a,b){var c=a.getAttribute(goog.a11y.aria.getAriaAttributeName_(b));return goog.a11y.aria.splitStringOnWhitespace_(c)};goog.a11y.aria.splitStringOnWhitespace_=function(a){return a?a.split(/\s+/):[]};
-goog.a11y.aria.getAriaAttributeName_=function(a){goog.asserts.ENABLE_ASSERTS&&(goog.asserts.assert(a,"ARIA attribute cannot be empty."),goog.asserts.assert(goog.object.containsValue(goog.a11y.aria.State,a),"No such ARIA attribute "+a));return goog.a11y.aria.ARIA_PREFIX_+a};goog.events.KeyCodes={WIN_KEY_FF_LINUX:0,MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,FF_SEMICOLON:59,FF_EQUALS:61,FF_DASH:173,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,
-V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SCROLL_LOCK:145,FIRST_MEDIA_KEY:166,LAST_MEDIA_KEY:183,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,
-TILDE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,MAC_WK_CMD_LEFT:91,MAC_WK_CMD_RIGHT:93,WIN_IME:229,PHANTOM:255};
-goog.events.KeyCodes.isTextModifyingKeyEvent=function(a){if(a.altKey&&!a.ctrlKey||a.metaKey||a.keyCode>=goog.events.KeyCodes.F1&&a.keyCode<=goog.events.KeyCodes.F12)return!1;switch(a.keyCode){case goog.events.KeyCodes.ALT:case goog.events.KeyCodes.CAPS_LOCK:case goog.events.KeyCodes.CONTEXT_MENU:case goog.events.KeyCodes.CTRL:case goog.events.KeyCodes.DOWN:case goog.events.KeyCodes.END:case goog.events.KeyCodes.ESC:case goog.events.KeyCodes.HOME:case goog.events.KeyCodes.INSERT:case goog.events.KeyCodes.LEFT:case goog.events.KeyCodes.MAC_FF_META:case goog.events.KeyCodes.META:case goog.events.KeyCodes.NUMLOCK:case goog.events.KeyCodes.NUM_CENTER:case goog.events.KeyCodes.PAGE_DOWN:case goog.events.KeyCodes.PAGE_UP:case goog.events.KeyCodes.PAUSE:case goog.events.KeyCodes.PHANTOM:case goog.events.KeyCodes.PRINT_SCREEN:case goog.events.KeyCodes.RIGHT:case goog.events.KeyCodes.SCROLL_LOCK:case goog.events.KeyCodes.SHIFT:case goog.events.KeyCodes.UP:case goog.events.KeyCodes.WIN_KEY:case goog.events.KeyCodes.WIN_KEY_RIGHT:return!1;case goog.events.KeyCodes.WIN_KEY_FF_LINUX:return!goog.userAgent.GECKO;
-default:return a.keyCode<goog.events.KeyCodes.FIRST_MEDIA_KEY||a.keyCode>goog.events.KeyCodes.LAST_MEDIA_KEY}};
-goog.events.KeyCodes.firesKeyPressEvent=function(a,b,c,d,e){if(!(goog.userAgent.IE||goog.userAgent.WEBKIT&&goog.userAgent.isVersionOrHigher("525")))return!0;if(goog.userAgent.MAC&&e)return goog.events.KeyCodes.isCharacterKey(a);if(e&&!d)return!1;goog.isNumber(b)&&(b=goog.events.KeyCodes.normalizeKeyCode(b));if(!c&&(b==goog.events.KeyCodes.CTRL||b==goog.events.KeyCodes.ALT||goog.userAgent.MAC&&b==goog.events.KeyCodes.META))return!1;if(goog.userAgent.WEBKIT&&d&&c)switch(a){case goog.events.KeyCodes.BACKSLASH:case goog.events.KeyCodes.OPEN_SQUARE_BRACKET:case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET:case goog.events.KeyCodes.TILDE:case goog.events.KeyCodes.SEMICOLON:case goog.events.KeyCodes.DASH:case goog.events.KeyCodes.EQUALS:case goog.events.KeyCodes.COMMA:case goog.events.KeyCodes.PERIOD:case goog.events.KeyCodes.SLASH:case goog.events.KeyCodes.APOSTROPHE:case goog.events.KeyCodes.SINGLE_QUOTE:return!1}if(goog.userAgent.IE&&
-d&&b==a)return!1;switch(a){case goog.events.KeyCodes.ENTER:return!(goog.userAgent.IE&&goog.userAgent.isDocumentModeOrHigher(9));case goog.events.KeyCodes.ESC:return!goog.userAgent.WEBKIT}return goog.events.KeyCodes.isCharacterKey(a)};
-goog.events.KeyCodes.isCharacterKey=function(a){if(a>=goog.events.KeyCodes.ZERO&&a<=goog.events.KeyCodes.NINE||a>=goog.events.KeyCodes.NUM_ZERO&&a<=goog.events.KeyCodes.NUM_MULTIPLY||a>=goog.events.KeyCodes.A&&a<=goog.events.KeyCodes.Z||goog.userAgent.WEBKIT&&0==a)return!0;switch(a){case goog.events.KeyCodes.SPACE:case goog.events.KeyCodes.QUESTION_MARK:case goog.events.KeyCodes.NUM_PLUS:case goog.events.KeyCodes.NUM_MINUS:case goog.events.KeyCodes.NUM_PERIOD:case goog.events.KeyCodes.NUM_DIVISION:case goog.events.KeyCodes.SEMICOLON:case goog.events.KeyCodes.FF_SEMICOLON:case goog.events.KeyCodes.DASH:case goog.events.KeyCodes.EQUALS:case goog.events.KeyCodes.FF_EQUALS:case goog.events.KeyCodes.COMMA:case goog.events.KeyCodes.PERIOD:case goog.events.KeyCodes.SLASH:case goog.events.KeyCodes.APOSTROPHE:case goog.events.KeyCodes.SINGLE_QUOTE:case goog.events.KeyCodes.OPEN_SQUARE_BRACKET:case goog.events.KeyCodes.BACKSLASH:case goog.events.KeyCodes.CLOSE_SQUARE_BRACKET:return!0;
-default:return!1}};goog.events.KeyCodes.normalizeKeyCode=function(a){return goog.userAgent.GECKO?goog.events.KeyCodes.normalizeGeckoKeyCode(a):goog.userAgent.MAC&&goog.userAgent.WEBKIT?goog.events.KeyCodes.normalizeMacWebKitKeyCode(a):a};
-goog.events.KeyCodes.normalizeGeckoKeyCode=function(a){switch(a){case goog.events.KeyCodes.FF_EQUALS:return goog.events.KeyCodes.EQUALS;case goog.events.KeyCodes.FF_SEMICOLON:return goog.events.KeyCodes.SEMICOLON;case goog.events.KeyCodes.FF_DASH:return goog.events.KeyCodes.DASH;case goog.events.KeyCodes.MAC_FF_META:return goog.events.KeyCodes.META;case goog.events.KeyCodes.WIN_KEY_FF_LINUX:return goog.events.KeyCodes.WIN_KEY;default:return a}};
-goog.events.KeyCodes.normalizeMacWebKitKeyCode=function(a){switch(a){case goog.events.KeyCodes.MAC_WK_CMD_RIGHT:return goog.events.KeyCodes.META;default:return a}};goog.events.KeyHandler=function(a,b){goog.events.EventTarget.call(this);a&&this.attach(a,b)};goog.inherits(goog.events.KeyHandler,goog.events.EventTarget);goog.events.KeyHandler.prototype.element_=null;goog.events.KeyHandler.prototype.keyPressKey_=null;goog.events.KeyHandler.prototype.keyDownKey_=null;goog.events.KeyHandler.prototype.keyUpKey_=null;goog.events.KeyHandler.prototype.lastKey_=-1;goog.events.KeyHandler.prototype.keyCode_=-1;goog.events.KeyHandler.prototype.altKey_=!1;
-goog.events.KeyHandler.EventType={KEY:"key"};
-goog.events.KeyHandler.safariKey_={3:goog.events.KeyCodes.ENTER,12:goog.events.KeyCodes.NUMLOCK,63232:goog.events.KeyCodes.UP,63233:goog.events.KeyCodes.DOWN,63234:goog.events.KeyCodes.LEFT,63235:goog.events.KeyCodes.RIGHT,63236:goog.events.KeyCodes.F1,63237:goog.events.KeyCodes.F2,63238:goog.events.KeyCodes.F3,63239:goog.events.KeyCodes.F4,63240:goog.events.KeyCodes.F5,63241:goog.events.KeyCodes.F6,63242:goog.events.KeyCodes.F7,63243:goog.events.KeyCodes.F8,63244:goog.events.KeyCodes.F9,63245:goog.events.KeyCodes.F10,
-63246:goog.events.KeyCodes.F11,63247:goog.events.KeyCodes.F12,63248:goog.events.KeyCodes.PRINT_SCREEN,63272:goog.events.KeyCodes.DELETE,63273:goog.events.KeyCodes.HOME,63275:goog.events.KeyCodes.END,63276:goog.events.KeyCodes.PAGE_UP,63277:goog.events.KeyCodes.PAGE_DOWN,63289:goog.events.KeyCodes.NUMLOCK,63302:goog.events.KeyCodes.INSERT};
-goog.events.KeyHandler.keyIdentifier_={Up:goog.events.KeyCodes.UP,Down:goog.events.KeyCodes.DOWN,Left:goog.events.KeyCodes.LEFT,Right:goog.events.KeyCodes.RIGHT,Enter:goog.events.KeyCodes.ENTER,F1:goog.events.KeyCodes.F1,F2:goog.events.KeyCodes.F2,F3:goog.events.KeyCodes.F3,F4:goog.events.KeyCodes.F4,F5:goog.events.KeyCodes.F5,F6:goog.events.KeyCodes.F6,F7:goog.events.KeyCodes.F7,F8:goog.events.KeyCodes.F8,F9:goog.events.KeyCodes.F9,F10:goog.events.KeyCodes.F10,F11:goog.events.KeyCodes.F11,F12:goog.events.KeyCodes.F12,
-"U+007F":goog.events.KeyCodes.DELETE,Home:goog.events.KeyCodes.HOME,End:goog.events.KeyCodes.END,PageUp:goog.events.KeyCodes.PAGE_UP,PageDown:goog.events.KeyCodes.PAGE_DOWN,Insert:goog.events.KeyCodes.INSERT};goog.events.KeyHandler.USES_KEYDOWN_=goog.userAgent.IE||goog.userAgent.WEBKIT&&goog.userAgent.isVersionOrHigher("525");goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_=goog.userAgent.MAC&&goog.userAgent.GECKO;
-goog.events.KeyHandler.prototype.handleKeyDown_=function(a){goog.userAgent.WEBKIT&&(this.lastKey_==goog.events.KeyCodes.CTRL&&!a.ctrlKey||this.lastKey_==goog.events.KeyCodes.ALT&&!a.altKey||goog.userAgent.MAC&&this.lastKey_==goog.events.KeyCodes.META&&!a.metaKey)&&(this.keyCode_=this.lastKey_=-1);-1==this.lastKey_&&(a.ctrlKey&&a.keyCode!=goog.events.KeyCodes.CTRL?this.lastKey_=goog.events.KeyCodes.CTRL:a.altKey&&a.keyCode!=goog.events.KeyCodes.ALT?this.lastKey_=goog.events.KeyCodes.ALT:a.metaKey&&
-a.keyCode!=goog.events.KeyCodes.META&&(this.lastKey_=goog.events.KeyCodes.META));goog.events.KeyHandler.USES_KEYDOWN_&&!goog.events.KeyCodes.firesKeyPressEvent(a.keyCode,this.lastKey_,a.shiftKey,a.ctrlKey,a.altKey)?this.handleEvent(a):(this.keyCode_=goog.events.KeyCodes.normalizeKeyCode(a.keyCode),goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_&&(this.altKey_=a.altKey))};goog.events.KeyHandler.prototype.resetState=function(){this.keyCode_=this.lastKey_=-1};
-goog.events.KeyHandler.prototype.handleKeyup_=function(a){this.resetState();this.altKey_=a.altKey};
-goog.events.KeyHandler.prototype.handleEvent=function(a){var b=a.getBrowserEvent(),c,d,e=b.altKey;goog.userAgent.IE&&a.type==goog.events.EventType.KEYPRESS?(c=this.keyCode_,d=c!=goog.events.KeyCodes.ENTER&&c!=goog.events.KeyCodes.ESC?b.keyCode:0):goog.userAgent.WEBKIT&&a.type==goog.events.EventType.KEYPRESS?(c=this.keyCode_,d=0<=b.charCode&&63232>b.charCode&&goog.events.KeyCodes.isCharacterKey(c)?b.charCode:0):goog.userAgent.OPERA?(c=this.keyCode_,d=goog.events.KeyCodes.isCharacterKey(c)?b.keyCode:
-0):(c=b.keyCode||this.keyCode_,d=b.charCode||0,goog.events.KeyHandler.SAVE_ALT_FOR_KEYPRESS_&&(e=this.altKey_),goog.userAgent.MAC&&d==goog.events.KeyCodes.QUESTION_MARK&&c==goog.events.KeyCodes.WIN_KEY&&(c=goog.events.KeyCodes.SLASH));var f=c=goog.events.KeyCodes.normalizeKeyCode(c),g=b.keyIdentifier;c?63232<=c&&c in goog.events.KeyHandler.safariKey_?f=goog.events.KeyHandler.safariKey_[c]:25==c&&a.shiftKey&&(f=9):g&&g in goog.events.KeyHandler.keyIdentifier_&&(f=goog.events.KeyHandler.keyIdentifier_[g]);
-a=f==this.lastKey_;this.lastKey_=f;b=new goog.events.KeyEvent(f,d,a,b);b.altKey=e;this.dispatchEvent(b)};goog.events.KeyHandler.prototype.getElement=function(){return this.element_};
-goog.events.KeyHandler.prototype.attach=function(a,b){this.keyUpKey_&&this.detach();this.element_=a;this.keyPressKey_=goog.events.listen(this.element_,goog.events.EventType.KEYPRESS,this,b);this.keyDownKey_=goog.events.listen(this.element_,goog.events.EventType.KEYDOWN,this.handleKeyDown_,b,this);this.keyUpKey_=goog.events.listen(this.element_,goog.events.EventType.KEYUP,this.handleKeyup_,b,this)};
-goog.events.KeyHandler.prototype.detach=function(){this.keyPressKey_&&(goog.events.unlistenByKey(this.keyPressKey_),goog.events.unlistenByKey(this.keyDownKey_),goog.events.unlistenByKey(this.keyUpKey_),this.keyUpKey_=this.keyDownKey_=this.keyPressKey_=null);this.element_=null;this.keyCode_=this.lastKey_=-1};goog.events.KeyHandler.prototype.disposeInternal=function(){goog.events.KeyHandler.superClass_.disposeInternal.call(this);this.detach()};
-goog.events.KeyEvent=function(a,b,c,d){goog.events.BrowserEvent.call(this,d);this.type=goog.events.KeyHandler.EventType.KEY;this.keyCode=a;this.charCode=b;this.repeat=c};goog.inherits(goog.events.KeyEvent,goog.events.BrowserEvent);goog.dom.classlist={};goog.dom.classlist.ALWAYS_USE_DOM_TOKEN_LIST=!1;goog.dom.classlist.NATIVE_DOM_TOKEN_LIST_=goog.dom.classlist.ALWAYS_USE_DOM_TOKEN_LIST||!!goog.global.DOMTokenList;goog.dom.classlist.get=goog.dom.classlist.NATIVE_DOM_TOKEN_LIST_?function(a){return a.classList}:function(a){a=a.className;return goog.isString(a)&&a.match(/\S+/g)||[]};goog.dom.classlist.set=function(a,b){a.className=b};
-goog.dom.classlist.contains=goog.dom.classlist.NATIVE_DOM_TOKEN_LIST_?function(a,b){goog.asserts.assert(!!a.classList);return a.classList.contains(b)}:function(a,b){return goog.array.contains(goog.dom.classlist.get(a),b)};goog.dom.classlist.add=goog.dom.classlist.NATIVE_DOM_TOKEN_LIST_?function(a,b){a.classList.add(b)}:function(a,b){goog.dom.classlist.contains(a,b)||(a.className+=0<a.className.length?" "+b:b)};
-goog.dom.classlist.addAll=goog.dom.classlist.NATIVE_DOM_TOKEN_LIST_?function(a,b){goog.array.forEach(b,function(b){goog.dom.classlist.add(a,b)})}:function(a,b){var c={};goog.array.forEach(goog.dom.classlist.get(a),function(a){c[a]=!0});goog.array.forEach(b,function(a){c[a]=!0});a.className="";for(var d in c)a.className+=0<a.className.length?" "+d:d};
-goog.dom.classlist.remove=goog.dom.classlist.NATIVE_DOM_TOKEN_LIST_?function(a,b){a.classList.remove(b)}:function(a,b){goog.dom.classlist.contains(a,b)&&(a.className=goog.array.filter(goog.dom.classlist.get(a),function(a){return a!=b}).join(" "))};
-goog.dom.classlist.removeAll=goog.dom.classlist.NATIVE_DOM_TOKEN_LIST_?function(a,b){goog.array.forEach(b,function(b){goog.dom.classlist.remove(a,b)})}:function(a,b){a.className=goog.array.filter(goog.dom.classlist.get(a),function(a){return!goog.array.contains(b,a)}).join(" ")};goog.dom.classlist.enable=function(a,b,c){c?goog.dom.classlist.add(a,b):goog.dom.classlist.remove(a,b)};
-goog.dom.classlist.swap=function(a,b,c){return goog.dom.classlist.contains(a,b)?(goog.dom.classlist.remove(a,b),goog.dom.classlist.add(a,c),!0):!1};goog.dom.classlist.toggle=function(a,b){var c=!goog.dom.classlist.contains(a,b);goog.dom.classlist.enable(a,b,c);return c};goog.dom.classlist.addRemove=function(a,b,c){goog.dom.classlist.remove(a,b);goog.dom.classlist.add(a,c)};goog.ui.registry={};goog.ui.registry.getDefaultRenderer=function(a){for(var b;a;){b=goog.getUid(a);if(b=goog.ui.registry.defaultRenderers_[b])break;a=a.superClass_?a.superClass_.constructor:null}return b?goog.isFunction(b.getInstance)?b.getInstance():new b:null};
-goog.ui.registry.setDefaultRenderer=function(a,b){if(!goog.isFunction(a))throw Error("Invalid component class "+a);if(!goog.isFunction(b))throw Error("Invalid renderer class "+b);var c=goog.getUid(a);goog.ui.registry.defaultRenderers_[c]=b};goog.ui.registry.getDecoratorByClassName=function(a){return a in goog.ui.registry.decoratorFunctions_?goog.ui.registry.decoratorFunctions_[a]():null};
-goog.ui.registry.setDecoratorByClassName=function(a,b){if(!a)throw Error("Invalid class name "+a);if(!goog.isFunction(b))throw Error("Invalid decorator function "+b);goog.ui.registry.decoratorFunctions_[a]=b};goog.ui.registry.getDecorator=function(a){for(var b=goog.dom.classlist.get(a),c=0,d=b.length;c<d;c++)if(a=goog.ui.registry.getDecoratorByClassName(b[c]))return a;return null};goog.ui.registry.reset=function(){goog.ui.registry.defaultRenderers_={};goog.ui.registry.decoratorFunctions_={}};
-goog.ui.registry.defaultRenderers_={};goog.ui.registry.decoratorFunctions_={};goog.ui.ContainerRenderer=function(){};goog.addSingletonGetter(goog.ui.ContainerRenderer);goog.ui.ContainerRenderer.getCustomRenderer=function(a,b){var c=new a;c.getCssClass=function(){return b};return c};goog.ui.ContainerRenderer.CSS_CLASS="goog-container";goog.ui.ContainerRenderer.prototype.getAriaRole=function(){};goog.ui.ContainerRenderer.prototype.enableTabIndex=function(a,b){a&&(a.tabIndex=b?0:-1)};
-goog.ui.ContainerRenderer.prototype.createDom=function(a){return a.getDomHelper().createDom("div",this.getClassNames(a).join(" "))};goog.ui.ContainerRenderer.prototype.getContentElement=function(a){return a};goog.ui.ContainerRenderer.prototype.canDecorate=function(a){return"DIV"==a.tagName};
-goog.ui.ContainerRenderer.prototype.decorate=function(a,b){b.id&&a.setId(b.id);var c=this.getCssClass(),d=!1,e=goog.dom.classlist.get(b);e&&goog.array.forEach(e,function(b){b==c?d=!0:b&&this.setStateFromClassName(a,b,c)},this);d||goog.dom.classlist.add(b,c);this.decorateChildren(a,this.getContentElement(b));return b};
-goog.ui.ContainerRenderer.prototype.setStateFromClassName=function(a,b,c){b==c+"-disabled"?a.setEnabled(!1):b==c+"-horizontal"?a.setOrientation(goog.ui.Container.Orientation.HORIZONTAL):b==c+"-vertical"&&a.setOrientation(goog.ui.Container.Orientation.VERTICAL)};
-goog.ui.ContainerRenderer.prototype.decorateChildren=function(a,b,c){if(b){c=c||b.firstChild;for(var d;c&&c.parentNode==b;){d=c.nextSibling;if(c.nodeType==goog.dom.NodeType.ELEMENT){var e=this.getDecoratorForChild(c);e&&(e.setElementInternal(c),a.isEnabled()||e.setEnabled(!1),a.addChild(e),e.decorate(c))}else c.nodeValue&&""!=goog.string.trim(c.nodeValue)||b.removeChild(c);c=d}}};goog.ui.ContainerRenderer.prototype.getDecoratorForChild=function(a){return goog.ui.registry.getDecorator(a)};
-goog.ui.ContainerRenderer.prototype.initializeDom=function(a){a=a.getElement();goog.asserts.assert(a,"The container DOM element cannot be null.");goog.style.setUnselectable(a,!0,goog.userAgent.GECKO);goog.userAgent.IE&&(a.hideFocus=!0);var b=this.getAriaRole();b&&goog.a11y.aria.setRole(a,b)};goog.ui.ContainerRenderer.prototype.getKeyEventTarget=function(a){return a.getElement()};goog.ui.ContainerRenderer.prototype.getCssClass=function(){return goog.ui.ContainerRenderer.CSS_CLASS};
-goog.ui.ContainerRenderer.prototype.getClassNames=function(a){var b=this.getCssClass(),c=a.getOrientation()==goog.ui.Container.Orientation.HORIZONTAL,c=[b,c?b+"-horizontal":b+"-vertical"];a.isEnabled()||c.push(b+"-disabled");return c};goog.ui.ContainerRenderer.prototype.getDefaultOrientation=function(){return goog.ui.Container.Orientation.VERTICAL};goog.ui.ControlRenderer=function(){};goog.addSingletonGetter(goog.ui.ControlRenderer);goog.ui.ControlRenderer.getCustomRenderer=function(a,b){var c=new a;c.getCssClass=function(){return b};return c};goog.ui.ControlRenderer.CSS_CLASS="goog-control";goog.ui.ControlRenderer.IE6_CLASS_COMBINATIONS=[];goog.ui.ControlRenderer.prototype.getAriaRole=function(){};
-goog.ui.ControlRenderer.prototype.createDom=function(a){var b=a.getDomHelper().createDom("div",this.getClassNames(a).join(" "),a.getContent());this.setAriaStates(a,b);return b};goog.ui.ControlRenderer.prototype.getContentElement=function(a){return a};
-goog.ui.ControlRenderer.prototype.enableClassName=function(a,b,c){if(a=a.getElement?a.getElement():a)if(goog.userAgent.IE&&!goog.userAgent.isVersionOrHigher("7")){var d=this.getAppliedCombinedClassNames_(goog.dom.classes.get(a),b);d.push(b);goog.partial(c?goog.dom.classes.add:goog.dom.classes.remove,a).apply(null,d)}else goog.dom.classes.enable(a,b,c)};goog.ui.ControlRenderer.prototype.enableExtraClassName=function(a,b,c){this.enableClassName(a,b,c)};
-goog.ui.ControlRenderer.prototype.canDecorate=function(a){return!0};
-goog.ui.ControlRenderer.prototype.decorate=function(a,b){b.id&&a.setId(b.id);var c=this.getContentElement(b);c&&c.firstChild?a.setContentInternal(c.firstChild.nextSibling?goog.array.clone(c.childNodes):c.firstChild):a.setContentInternal(null);var d=0,e=this.getCssClass(),f=this.getStructuralCssClass(),g=!1,h=!1,c=!1,k=goog.dom.classes.get(b);goog.array.forEach(k,function(a){g||a!=e?h||a!=f?d|=this.getStateFromClass(a):h=!0:(g=!0,f==e&&(h=!0))},this);a.setStateInternal(d);g||(k.push(e),f==e&&(h=!0));
-h||k.push(f);var l=a.getExtraClassNames();l&&k.push.apply(k,l);if(goog.userAgent.IE&&!goog.userAgent.isVersionOrHigher("7")){var p=this.getAppliedCombinedClassNames_(k);0<p.length&&(k.push.apply(k,p),c=!0)}g&&h&&!l&&!c||goog.dom.classes.set(b,k.join(" "));this.setAriaStates(a,b);return b};goog.ui.ControlRenderer.prototype.initializeDom=function(a){a.isRightToLeft()&&this.setRightToLeft(a.getElement(),!0);a.isEnabled()&&this.setFocusable(a,a.isVisible())};
-goog.ui.ControlRenderer.prototype.setAriaRole=function(a,b){var c=b||this.getAriaRole();c&&(goog.asserts.assert(a,"The element passed as a first parameter cannot be null."),goog.a11y.aria.setRole(a,c))};
-goog.ui.ControlRenderer.prototype.setAriaStates=function(a,b){goog.asserts.assert(a);goog.asserts.assert(b);a.isVisible()||goog.a11y.aria.setState(b,goog.a11y.aria.State.HIDDEN,!a.isVisible());a.isEnabled()||this.updateAriaState(b,goog.ui.Component.State.DISABLED,!a.isEnabled());a.isSupportedState(goog.ui.Component.State.SELECTED)&&this.updateAriaState(b,goog.ui.Component.State.SELECTED,a.isSelected());a.isSupportedState(goog.ui.Component.State.CHECKED)&&this.updateAriaState(b,goog.ui.Component.State.CHECKED,
-a.isChecked());a.isSupportedState(goog.ui.Component.State.OPENED)&&this.updateAriaState(b,goog.ui.Component.State.OPENED,a.isOpen())};goog.ui.ControlRenderer.prototype.setAllowTextSelection=function(a,b){goog.style.setUnselectable(a,!b,!goog.userAgent.IE&&!goog.userAgent.OPERA)};goog.ui.ControlRenderer.prototype.setRightToLeft=function(a,b){this.enableClassName(a,this.getStructuralCssClass()+"-rtl",b)};
-goog.ui.ControlRenderer.prototype.isFocusable=function(a){var b;return a.isSupportedState(goog.ui.Component.State.FOCUSED)&&(b=a.getKeyEventTarget())?goog.dom.isFocusableTabIndex(b):!1};goog.ui.ControlRenderer.prototype.setFocusable=function(a,b){var c;if(a.isSupportedState(goog.ui.Component.State.FOCUSED)&&(c=a.getKeyEventTarget())){if(!b&&a.isFocused()){try{c.blur()}catch(d){}a.isFocused()&&a.handleBlur(null)}goog.dom.isFocusableTabIndex(c)!=b&&goog.dom.setFocusableTabIndex(c,b)}};
-goog.ui.ControlRenderer.prototype.setVisible=function(a,b){goog.style.setElementShown(a,b);a&&goog.a11y.aria.setState(a,goog.a11y.aria.State.HIDDEN,!b)};goog.ui.ControlRenderer.prototype.setState=function(a,b,c){var d=a.getElement();if(d){var e=this.getClassForState(b);e&&this.enableClassName(a,e,c);this.updateAriaState(d,b,c)}};
-goog.ui.ControlRenderer.prototype.updateAriaState=function(a,b,c){goog.ui.ControlRenderer.ARIA_STATE_MAP_||(goog.ui.ControlRenderer.ARIA_STATE_MAP_=goog.object.create(goog.ui.Component.State.DISABLED,goog.a11y.aria.State.DISABLED,goog.ui.Component.State.SELECTED,goog.a11y.aria.State.SELECTED,goog.ui.Component.State.CHECKED,goog.a11y.aria.State.CHECKED,goog.ui.Component.State.OPENED,goog.a11y.aria.State.EXPANDED));if(b=goog.ui.ControlRenderer.ARIA_STATE_MAP_[b])goog.asserts.assert(a,"The element passed as a first parameter cannot be null."),
-goog.a11y.aria.setState(a,b,c)};goog.ui.ControlRenderer.prototype.setContent=function(a,b){var c=this.getContentElement(a);if(c&&(goog.dom.removeChildren(c),b))if(goog.isString(b))goog.dom.setTextContent(c,b);else{var d=function(a){if(a){var b=goog.dom.getOwnerDocument(c);c.appendChild(goog.isString(a)?b.createTextNode(a):a)}};goog.isArray(b)?goog.array.forEach(b,d):!goog.isArrayLike(b)||"nodeType"in b?d(b):goog.array.forEach(goog.array.clone(b),d)}};
-goog.ui.ControlRenderer.prototype.getKeyEventTarget=function(a){return a.getElement()};goog.ui.ControlRenderer.prototype.getCssClass=function(){return goog.ui.ControlRenderer.CSS_CLASS};goog.ui.ControlRenderer.prototype.getIe6ClassCombinations=function(){return[]};goog.ui.ControlRenderer.prototype.getStructuralCssClass=function(){return this.getCssClass()};
-goog.ui.ControlRenderer.prototype.getClassNames=function(a){var b=this.getCssClass(),c=[b],d=this.getStructuralCssClass();d!=b&&c.push(d);b=this.getClassNamesForState(a.getState());c.push.apply(c,b);(a=a.getExtraClassNames())&&c.push.apply(c,a);goog.userAgent.IE&&!goog.userAgent.isVersionOrHigher("7")&&c.push.apply(c,this.getAppliedCombinedClassNames_(c));return c};
-goog.ui.ControlRenderer.prototype.getAppliedCombinedClassNames_=function(a,b){var c=[];b&&(a=a.concat([b]));goog.array.forEach(this.getIe6ClassCombinations(),function(d){!goog.array.every(d,goog.partial(goog.array.contains,a))||b&&!goog.array.contains(d,b)||c.push(d.join("_"))});return c};goog.ui.ControlRenderer.prototype.getClassNamesForState=function(a){for(var b=[];a;){var c=a&-a;b.push(this.getClassForState(c));a&=~c}return b};
-goog.ui.ControlRenderer.prototype.getClassForState=function(a){this.classByState_||this.createClassByStateMap_();return this.classByState_[a]};goog.ui.ControlRenderer.prototype.getStateFromClass=function(a){this.stateByClass_||this.createStateByClassMap_();a=parseInt(this.stateByClass_[a],10);return isNaN(a)?0:a};
-goog.ui.ControlRenderer.prototype.createClassByStateMap_=function(){var a=this.getStructuralCssClass();this.classByState_=goog.object.create(goog.ui.Component.State.DISABLED,a+"-disabled",goog.ui.Component.State.HOVER,a+"-hover",goog.ui.Component.State.ACTIVE,a+"-active",goog.ui.Component.State.SELECTED,a+"-selected",goog.ui.Component.State.CHECKED,a+"-checked",goog.ui.Component.State.FOCUSED,a+"-focused",goog.ui.Component.State.OPENED,a+"-open")};
-goog.ui.ControlRenderer.prototype.createStateByClassMap_=function(){this.classByState_||this.createClassByStateMap_();this.stateByClass_=goog.object.transpose(this.classByState_)};goog.ui.decorate=function(a){var b=goog.ui.registry.getDecorator(a);b&&b.decorate(a);return b};goog.ui.Control=function(a,b,c){goog.ui.Component.call(this,c);this.renderer_=b||goog.ui.registry.getDefaultRenderer(this.constructor);this.setContentInternal(goog.isDef(a)?a:null)};goog.inherits(goog.ui.Control,goog.ui.Component);goog.ui.Control.registerDecorator=goog.ui.registry.setDecoratorByClassName;goog.ui.Control.getDecorator=goog.ui.registry.getDecorator;goog.ui.Control.decorate=goog.ui.decorate;goog.ui.Control.prototype.content_=null;goog.ui.Control.prototype.state_=0;
-goog.ui.Control.prototype.supportedStates_=goog.ui.Component.State.DISABLED|goog.ui.Component.State.HOVER|goog.ui.Component.State.ACTIVE|goog.ui.Component.State.FOCUSED;goog.ui.Control.prototype.autoStates_=goog.ui.Component.State.ALL;goog.ui.Control.prototype.statesWithTransitionEvents_=0;goog.ui.Control.prototype.visible_=!0;goog.ui.Control.prototype.extraClassNames_=null;goog.ui.Control.prototype.handleMouseEvents_=!0;goog.ui.Control.prototype.allowTextSelection_=!1;
-goog.ui.Control.prototype.preferredAriaRole_=null;goog.ui.Control.prototype.isHandleMouseEvents=function(){return this.handleMouseEvents_};goog.ui.Control.prototype.setHandleMouseEvents=function(a){this.isInDocument()&&a!=this.handleMouseEvents_&&this.enableMouseEventHandling_(a);this.handleMouseEvents_=a};goog.ui.Control.prototype.getKeyEventTarget=function(){return this.renderer_.getKeyEventTarget(this)};
-goog.ui.Control.prototype.getKeyHandler=function(){return this.keyHandler_||(this.keyHandler_=new goog.events.KeyHandler)};goog.ui.Control.prototype.getRenderer=function(){return this.renderer_};goog.ui.Control.prototype.setRenderer=function(a){if(this.isInDocument())throw Error(goog.ui.Component.Error.ALREADY_RENDERED);this.getElement()&&this.setElementInternal(null);this.renderer_=a};goog.ui.Control.prototype.getExtraClassNames=function(){return this.extraClassNames_};
-goog.ui.Control.prototype.addClassName=function(a){a&&(this.extraClassNames_?goog.array.contains(this.extraClassNames_,a)||this.extraClassNames_.push(a):this.extraClassNames_=[a],this.renderer_.enableExtraClassName(this,a,!0))};goog.ui.Control.prototype.removeClassName=function(a){a&&this.extraClassNames_&&goog.array.remove(this.extraClassNames_,a)&&(0==this.extraClassNames_.length&&(this.extraClassNames_=null),this.renderer_.enableExtraClassName(this,a,!1))};
-goog.ui.Control.prototype.enableClassName=function(a,b){b?this.addClassName(a):this.removeClassName(a)};goog.ui.Control.prototype.createDom=function(){var a=this.renderer_.createDom(this);this.setElementInternal(a);this.renderer_.setAriaRole(a,this.getPreferredAriaRole());this.isAllowTextSelection()||this.renderer_.setAllowTextSelection(a,!1);this.isVisible()||this.renderer_.setVisible(a,!1)};goog.ui.Control.prototype.getPreferredAriaRole=function(){return this.preferredAriaRole_};
-goog.ui.Control.prototype.setPreferredAriaRole=function(a){this.preferredAriaRole_=a};goog.ui.Control.prototype.getContentElement=function(){return this.renderer_.getContentElement(this.getElement())};goog.ui.Control.prototype.canDecorate=function(a){return this.renderer_.canDecorate(a)};
-goog.ui.Control.prototype.decorateInternal=function(a){a=this.renderer_.decorate(this,a);this.setElementInternal(a);this.renderer_.setAriaRole(a,this.getPreferredAriaRole());this.isAllowTextSelection()||this.renderer_.setAllowTextSelection(a,!1);this.visible_="none"!=a.style.display};
-goog.ui.Control.prototype.enterDocument=function(){goog.ui.Control.superClass_.enterDocument.call(this);this.renderer_.initializeDom(this);if(this.supportedStates_&~goog.ui.Component.State.DISABLED&&(this.isHandleMouseEvents()&&this.enableMouseEventHandling_(!0),this.isSupportedState(goog.ui.Component.State.FOCUSED))){var a=this.getKeyEventTarget();if(a){var b=this.getKeyHandler();b.attach(a);this.getHandler().listen(b,goog.events.KeyHandler.EventType.KEY,this.handleKeyEvent).listen(a,goog.events.EventType.FOCUS,
-this.handleFocus).listen(a,goog.events.EventType.BLUR,this.handleBlur)}}};
-goog.ui.Control.prototype.enableMouseEventHandling_=function(a){var b=this.getHandler(),c=this.getElement();a?(b.listen(c,goog.events.EventType.MOUSEOVER,this.handleMouseOver).listen(c,goog.events.EventType.MOUSEDOWN,this.handleMouseDown).listen(c,goog.events.EventType.MOUSEUP,this.handleMouseUp).listen(c,goog.events.EventType.MOUSEOUT,this.handleMouseOut),this.handleContextMenu!=goog.nullFunction&&b.listen(c,goog.events.EventType.CONTEXTMENU,this.handleContextMenu),goog.userAgent.IE&&b.listen(c,
-goog.events.EventType.DBLCLICK,this.handleDblClick)):(b.unlisten(c,goog.events.EventType.MOUSEOVER,this.handleMouseOver).unlisten(c,goog.events.EventType.MOUSEDOWN,this.handleMouseDown).unlisten(c,goog.events.EventType.MOUSEUP,this.handleMouseUp).unlisten(c,goog.events.EventType.MOUSEOUT,this.handleMouseOut),this.handleContextMenu!=goog.nullFunction&&b.unlisten(c,goog.events.EventType.CONTEXTMENU,this.handleContextMenu),goog.userAgent.IE&&b.unlisten(c,goog.events.EventType.DBLCLICK,this.handleDblClick))};
-goog.ui.Control.prototype.exitDocument=function(){goog.ui.Control.superClass_.exitDocument.call(this);this.keyHandler_&&this.keyHandler_.detach();this.isVisible()&&this.isEnabled()&&this.renderer_.setFocusable(this,!1)};goog.ui.Control.prototype.disposeInternal=function(){goog.ui.Control.superClass_.disposeInternal.call(this);this.keyHandler_&&(this.keyHandler_.dispose(),delete this.keyHandler_);delete this.renderer_;this.extraClassNames_=this.content_=null};goog.ui.Control.prototype.getContent=function(){return this.content_};
-goog.ui.Control.prototype.setContent=function(a){this.renderer_.setContent(this.getElement(),a);this.setContentInternal(a)};goog.ui.Control.prototype.setContentInternal=function(a){this.content_=a};goog.ui.Control.prototype.getCaption=function(){var a=this.getContent();if(!a)return"";a=goog.isString(a)?a:goog.isArray(a)?goog.array.map(a,goog.dom.getRawTextContent).join(""):goog.dom.getTextContent(a);return goog.string.collapseBreakingSpaces(a)};goog.ui.Control.prototype.setCaption=function(a){this.setContent(a)};
-goog.ui.Control.prototype.setRightToLeft=function(a){goog.ui.Control.superClass_.setRightToLeft.call(this,a);var b=this.getElement();b&&this.renderer_.setRightToLeft(b,a)};goog.ui.Control.prototype.isAllowTextSelection=function(){return this.allowTextSelection_};goog.ui.Control.prototype.setAllowTextSelection=function(a){this.allowTextSelection_=a;var b=this.getElement();b&&this.renderer_.setAllowTextSelection(b,a)};goog.ui.Control.prototype.isVisible=function(){return this.visible_};
-goog.ui.Control.prototype.setVisible=function(a,b){if(b||this.visible_!=a&&this.dispatchEvent(a?goog.ui.Component.EventType.SHOW:goog.ui.Component.EventType.HIDE)){var c=this.getElement();c&&this.renderer_.setVisible(c,a);this.isEnabled()&&this.renderer_.setFocusable(this,a);this.visible_=a;return!0}return!1};goog.ui.Control.prototype.isEnabled=function(){return!this.hasState(goog.ui.Component.State.DISABLED)};
-goog.ui.Control.prototype.isParentDisabled_=function(){var a=this.getParent();return!!a&&"function"==typeof a.isEnabled&&!a.isEnabled()};goog.ui.Control.prototype.setEnabled=function(a){!this.isParentDisabled_()&&this.isTransitionAllowed(goog.ui.Component.State.DISABLED,!a)&&(a||(this.setActive(!1),this.setHighlighted(!1)),this.isVisible()&&this.renderer_.setFocusable(this,a),this.setState(goog.ui.Component.State.DISABLED,!a))};goog.ui.Control.prototype.isHighlighted=function(){return this.hasState(goog.ui.Component.State.HOVER)};
-goog.ui.Control.prototype.setHighlighted=function(a){this.isTransitionAllowed(goog.ui.Component.State.HOVER,a)&&this.setState(goog.ui.Component.State.HOVER,a)};goog.ui.Control.prototype.isActive=function(){return this.hasState(goog.ui.Component.State.ACTIVE)};goog.ui.Control.prototype.setActive=function(a){this.isTransitionAllowed(goog.ui.Component.State.ACTIVE,a)&&this.setState(goog.ui.Component.State.ACTIVE,a)};goog.ui.Control.prototype.isSelected=function(){return this.hasState(goog.ui.Component.State.SELECTED)};
-goog.ui.Control.prototype.setSelected=function(a){this.isTransitionAllowed(goog.ui.Component.State.SELECTED,a)&&this.setState(goog.ui.Component.State.SELECTED,a)};goog.ui.Control.prototype.isChecked=function(){return this.hasState(goog.ui.Component.State.CHECKED)};goog.ui.Control.prototype.setChecked=function(a){this.isTransitionAllowed(goog.ui.Component.State.CHECKED,a)&&this.setState(goog.ui.Component.State.CHECKED,a)};goog.ui.Control.prototype.isFocused=function(){return this.hasState(goog.ui.Component.State.FOCUSED)};
-goog.ui.Control.prototype.setFocused=function(a){this.isTransitionAllowed(goog.ui.Component.State.FOCUSED,a)&&this.setState(goog.ui.Component.State.FOCUSED,a)};goog.ui.Control.prototype.isOpen=function(){return this.hasState(goog.ui.Component.State.OPENED)};goog.ui.Control.prototype.setOpen=function(a){this.isTransitionAllowed(goog.ui.Component.State.OPENED,a)&&this.setState(goog.ui.Component.State.OPENED,a)};goog.ui.Control.prototype.getState=function(){return this.state_};
-goog.ui.Control.prototype.hasState=function(a){return!!(this.state_&a)};goog.ui.Control.prototype.setState=function(a,b){this.isSupportedState(a)&&b!=this.hasState(a)&&(this.renderer_.setState(this,a,b),this.state_=b?this.state_|a:this.state_&~a)};goog.ui.Control.prototype.setStateInternal=function(a){this.state_=a};goog.ui.Control.prototype.isSupportedState=function(a){return!!(this.supportedStates_&a)};
-goog.ui.Control.prototype.setSupportedState=function(a,b){if(this.isInDocument()&&this.hasState(a)&&!b)throw Error(goog.ui.Component.Error.ALREADY_RENDERED);!b&&this.hasState(a)&&this.setState(a,!1);this.supportedStates_=b?this.supportedStates_|a:this.supportedStates_&~a};goog.ui.Control.prototype.isAutoState=function(a){return!!(this.autoStates_&a)&&this.isSupportedState(a)};goog.ui.Control.prototype.setAutoStates=function(a,b){this.autoStates_=b?this.autoStates_|a:this.autoStates_&~a};
-goog.ui.Control.prototype.isDispatchTransitionEvents=function(a){return!!(this.statesWithTransitionEvents_&a)&&this.isSupportedState(a)};goog.ui.Control.prototype.setDispatchTransitionEvents=function(a,b){this.statesWithTransitionEvents_=b?this.statesWithTransitionEvents_|a:this.statesWithTransitionEvents_&~a};
-goog.ui.Control.prototype.isTransitionAllowed=function(a,b){return this.isSupportedState(a)&&this.hasState(a)!=b&&(!(this.statesWithTransitionEvents_&a)||this.dispatchEvent(goog.ui.Component.getStateTransitionEvent(a,b)))&&!this.isDisposed()};goog.ui.Control.prototype.handleMouseOver=function(a){!goog.ui.Control.isMouseEventWithinElement_(a,this.getElement())&&this.dispatchEvent(goog.ui.Component.EventType.ENTER)&&this.isEnabled()&&this.isAutoState(goog.ui.Component.State.HOVER)&&this.setHighlighted(!0)};
-goog.ui.Control.prototype.handleMouseOut=function(a){!goog.ui.Control.isMouseEventWithinElement_(a,this.getElement())&&this.dispatchEvent(goog.ui.Component.EventType.LEAVE)&&(this.isAutoState(goog.ui.Component.State.ACTIVE)&&this.setActive(!1),this.isAutoState(goog.ui.Component.State.HOVER)&&this.setHighlighted(!1))};goog.ui.Control.prototype.handleContextMenu=goog.nullFunction;goog.ui.Control.isMouseEventWithinElement_=function(a,b){return!!a.relatedTarget&&goog.dom.contains(b,a.relatedTarget)};
-goog.ui.Control.prototype.handleMouseDown=function(a){this.isEnabled()&&(this.isAutoState(goog.ui.Component.State.HOVER)&&this.setHighlighted(!0),a.isMouseActionButton()&&(this.isAutoState(goog.ui.Component.State.ACTIVE)&&this.setActive(!0),this.renderer_.isFocusable(this)&&this.getKeyEventTarget().focus()));!this.isAllowTextSelection()&&a.isMouseActionButton()&&a.preventDefault()};
-goog.ui.Control.prototype.handleMouseUp=function(a){this.isEnabled()&&(this.isAutoState(goog.ui.Component.State.HOVER)&&this.setHighlighted(!0),this.isActive()&&this.performActionInternal(a)&&this.isAutoState(goog.ui.Component.State.ACTIVE)&&this.setActive(!1))};goog.ui.Control.prototype.handleDblClick=function(a){this.isEnabled()&&this.performActionInternal(a)};
-goog.ui.Control.prototype.performActionInternal=function(a){this.isAutoState(goog.ui.Component.State.CHECKED)&&this.setChecked(!this.isChecked());this.isAutoState(goog.ui.Component.State.SELECTED)&&this.setSelected(!0);this.isAutoState(goog.ui.Component.State.OPENED)&&this.setOpen(!this.isOpen());var b=new goog.events.Event(goog.ui.Component.EventType.ACTION,this);a&&(b.altKey=a.altKey,b.ctrlKey=a.ctrlKey,b.metaKey=a.metaKey,b.shiftKey=a.shiftKey,b.platformModifierKey=a.platformModifierKey);return this.dispatchEvent(b)};
-goog.ui.Control.prototype.handleFocus=function(a){this.isAutoState(goog.ui.Component.State.FOCUSED)&&this.setFocused(!0)};goog.ui.Control.prototype.handleBlur=function(a){this.isAutoState(goog.ui.Component.State.ACTIVE)&&this.setActive(!1);this.isAutoState(goog.ui.Component.State.FOCUSED)&&this.setFocused(!1)};goog.ui.Control.prototype.handleKeyEvent=function(a){return this.isVisible()&&this.isEnabled()&&this.handleKeyEventInternal(a)?(a.preventDefault(),a.stopPropagation(),!0):!1};
-goog.ui.Control.prototype.handleKeyEventInternal=function(a){return a.keyCode==goog.events.KeyCodes.ENTER&&this.performActionInternal(a)};goog.ui.registry.setDefaultRenderer(goog.ui.Control,goog.ui.ControlRenderer);goog.ui.registry.setDecoratorByClassName(goog.ui.ControlRenderer.CSS_CLASS,function(){return new goog.ui.Control(null)});goog.ui.Container=function(a,b,c){goog.ui.Component.call(this,c);this.renderer_=b||goog.ui.ContainerRenderer.getInstance();this.orientation_=a||this.renderer_.getDefaultOrientation()};goog.inherits(goog.ui.Container,goog.ui.Component);goog.ui.Container.EventType={AFTER_SHOW:"aftershow",AFTER_HIDE:"afterhide"};goog.ui.Container.Orientation={HORIZONTAL:"horizontal",VERTICAL:"vertical"};goog.ui.Container.prototype.keyEventTarget_=null;goog.ui.Container.prototype.keyHandler_=null;
-goog.ui.Container.prototype.renderer_=null;goog.ui.Container.prototype.orientation_=null;goog.ui.Container.prototype.visible_=!0;goog.ui.Container.prototype.enabled_=!0;goog.ui.Container.prototype.focusable_=!0;goog.ui.Container.prototype.highlightedIndex_=-1;goog.ui.Container.prototype.openItem_=null;goog.ui.Container.prototype.mouseButtonPressed_=!1;goog.ui.Container.prototype.allowFocusableChildren_=!1;goog.ui.Container.prototype.openFollowsHighlight_=!0;
-goog.ui.Container.prototype.childElementIdMap_=null;goog.ui.Container.prototype.getKeyEventTarget=function(){return this.keyEventTarget_||this.renderer_.getKeyEventTarget(this)};
-goog.ui.Container.prototype.setKeyEventTarget=function(a){if(this.focusable_){var b=this.getKeyEventTarget(),c=this.isInDocument();this.keyEventTarget_=a;var d=this.getKeyEventTarget();c&&(this.keyEventTarget_=b,this.enableFocusHandling_(!1),this.keyEventTarget_=a,this.getKeyHandler().attach(d),this.enableFocusHandling_(!0))}else throw Error("Can't set key event target for container that doesn't support keyboard focus!");};
-goog.ui.Container.prototype.getKeyHandler=function(){return this.keyHandler_||(this.keyHandler_=new goog.events.KeyHandler(this.getKeyEventTarget()))};goog.ui.Container.prototype.getRenderer=function(){return this.renderer_};goog.ui.Container.prototype.setRenderer=function(a){if(this.getElement())throw Error(goog.ui.Component.Error.ALREADY_RENDERED);this.renderer_=a};goog.ui.Container.prototype.createDom=function(){this.setElementInternal(this.renderer_.createDom(this))};
-goog.ui.Container.prototype.getContentElement=function(){return this.renderer_.getContentElement(this.getElement())};goog.ui.Container.prototype.canDecorate=function(a){return this.renderer_.canDecorate(a)};goog.ui.Container.prototype.decorateInternal=function(a){this.setElementInternal(this.renderer_.decorate(this,a));"none"==a.style.display&&(this.visible_=!1)};
-goog.ui.Container.prototype.enterDocument=function(){goog.ui.Container.superClass_.enterDocument.call(this);this.forEachChild(function(a){a.isInDocument()&&this.registerChildId_(a)},this);var a=this.getElement();this.renderer_.initializeDom(this);this.setVisible(this.visible_,!0);this.getHandler().listen(this,goog.ui.Component.EventType.ENTER,this.handleEnterItem).listen(this,goog.ui.Component.EventType.HIGHLIGHT,this.handleHighlightItem).listen(this,goog.ui.Component.EventType.UNHIGHLIGHT,this.handleUnHighlightItem).listen(this,
-goog.ui.Component.EventType.OPEN,this.handleOpenItem).listen(this,goog.ui.Component.EventType.CLOSE,this.handleCloseItem).listen(a,goog.events.EventType.MOUSEDOWN,this.handleMouseDown).listen(goog.dom.getOwnerDocument(a),goog.events.EventType.MOUSEUP,this.handleDocumentMouseUp).listen(a,[goog.events.EventType.MOUSEDOWN,goog.events.EventType.MOUSEUP,goog.events.EventType.MOUSEOVER,goog.events.EventType.MOUSEOUT,goog.events.EventType.CONTEXTMENU],this.handleChildMouseEvents);this.isFocusable()&&this.enableFocusHandling_(!0)};
-goog.ui.Container.prototype.enableFocusHandling_=function(a){var b=this.getHandler(),c=this.getKeyEventTarget();a?b.listen(c,goog.events.EventType.FOCUS,this.handleFocus).listen(c,goog.events.EventType.BLUR,this.handleBlur).listen(this.getKeyHandler(),goog.events.KeyHandler.EventType.KEY,this.handleKeyEvent):b.unlisten(c,goog.events.EventType.FOCUS,this.handleFocus).unlisten(c,goog.events.EventType.BLUR,this.handleBlur).unlisten(this.getKeyHandler(),goog.events.KeyHandler.EventType.KEY,this.handleKeyEvent)};
-goog.ui.Container.prototype.exitDocument=function(){this.setHighlightedIndex(-1);this.openItem_&&this.openItem_.setOpen(!1);this.mouseButtonPressed_=!1;goog.ui.Container.superClass_.exitDocument.call(this)};goog.ui.Container.prototype.disposeInternal=function(){goog.ui.Container.superClass_.disposeInternal.call(this);this.keyHandler_&&(this.keyHandler_.dispose(),this.keyHandler_=null);this.renderer_=this.openItem_=this.childElementIdMap_=this.keyEventTarget_=null};
-goog.ui.Container.prototype.handleEnterItem=function(a){return!0};
-goog.ui.Container.prototype.handleHighlightItem=function(a){var b=this.indexOfChild(a.target);if(-1<b&&b!=this.highlightedIndex_){var c=this.getHighlighted();c&&c.setHighlighted(!1);this.highlightedIndex_=b;c=this.getHighlighted();this.isMouseButtonPressed()&&c.setActive(!0);this.openFollowsHighlight_&&this.openItem_&&c!=this.openItem_&&(c.isSupportedState(goog.ui.Component.State.OPENED)?c.setOpen(!0):this.openItem_.setOpen(!1))}b=this.getElement();goog.asserts.assert(b,"The DOM element for the container cannot be null.");
-null!=a.target.getElement()&&goog.a11y.aria.setState(b,goog.a11y.aria.State.ACTIVEDESCENDANT,a.target.getElement().id)};goog.ui.Container.prototype.handleUnHighlightItem=function(a){a.target==this.getHighlighted()&&(this.highlightedIndex_=-1);a=this.getElement();goog.asserts.assert(a,"The DOM element for the container cannot be null.");goog.a11y.aria.removeState(a,goog.a11y.aria.State.ACTIVEDESCENDANT)};
-goog.ui.Container.prototype.handleOpenItem=function(a){(a=a.target)&&a!=this.openItem_&&a.getParent()==this&&(this.openItem_&&this.openItem_.setOpen(!1),this.openItem_=a)};goog.ui.Container.prototype.handleCloseItem=function(a){a.target==this.openItem_&&(this.openItem_=null)};goog.ui.Container.prototype.handleMouseDown=function(a){this.enabled_&&this.setMouseButtonPressed(!0);var b=this.getKeyEventTarget();b&&goog.dom.isFocusableTabIndex(b)?b.focus():a.preventDefault()};
-goog.ui.Container.prototype.handleDocumentMouseUp=function(a){this.setMouseButtonPressed(!1)};goog.ui.Container.prototype.handleChildMouseEvents=function(a){var b=this.getOwnerControl(a.target);if(b)switch(a.type){case goog.events.EventType.MOUSEDOWN:b.handleMouseDown(a);break;case goog.events.EventType.MOUSEUP:b.handleMouseUp(a);break;case goog.events.EventType.MOUSEOVER:b.handleMouseOver(a);break;case goog.events.EventType.MOUSEOUT:b.handleMouseOut(a);break;case goog.events.EventType.CONTEXTMENU:b.handleContextMenu(a)}};
-goog.ui.Container.prototype.getOwnerControl=function(a){if(this.childElementIdMap_)for(var b=this.getElement();a&&a!==b;){var c=a.id;if(c in this.childElementIdMap_)return this.childElementIdMap_[c];a=a.parentNode}return null};goog.ui.Container.prototype.handleFocus=function(a){};goog.ui.Container.prototype.handleBlur=function(a){this.setHighlightedIndex(-1);this.setMouseButtonPressed(!1);this.openItem_&&this.openItem_.setOpen(!1)};
-goog.ui.Container.prototype.handleKeyEvent=function(a){return this.isEnabled()&&this.isVisible()&&(0!=this.getChildCount()||this.keyEventTarget_)&&this.handleKeyEventInternal(a)?(a.preventDefault(),a.stopPropagation(),!0):!1};
-goog.ui.Container.prototype.handleKeyEventInternal=function(a){var b=this.getHighlighted();if(b&&"function"==typeof b.handleKeyEvent&&b.handleKeyEvent(a)||this.openItem_&&this.openItem_!=b&&"function"==typeof this.openItem_.handleKeyEvent&&this.openItem_.handleKeyEvent(a))return!0;if(a.shiftKey||a.ctrlKey||a.metaKey||a.altKey)return!1;switch(a.keyCode){case goog.events.KeyCodes.ESC:if(this.isFocusable())this.getKeyEventTarget().blur();else return!1;break;case goog.events.KeyCodes.HOME:this.highlightFirst();
-break;case goog.events.KeyCodes.END:this.highlightLast();break;case goog.events.KeyCodes.UP:if(this.orientation_==goog.ui.Container.Orientation.VERTICAL)this.highlightPrevious();else return!1;break;case goog.events.KeyCodes.LEFT:if(this.orientation_==goog.ui.Container.Orientation.HORIZONTAL)this.isRightToLeft()?this.highlightNext():this.highlightPrevious();else return!1;break;case goog.events.KeyCodes.DOWN:if(this.orientation_==goog.ui.Container.Orientation.VERTICAL)this.highlightNext();else return!1;
-break;case goog.events.KeyCodes.RIGHT:if(this.orientation_==goog.ui.Container.Orientation.HORIZONTAL)this.isRightToLeft()?this.highlightPrevious():this.highlightNext();else return!1;break;default:return!1}return!0};goog.ui.Container.prototype.registerChildId_=function(a){var b=a.getElement(),b=b.id||(b.id=a.getId());this.childElementIdMap_||(this.childElementIdMap_={});this.childElementIdMap_[b]=a};
-goog.ui.Container.prototype.addChild=function(a,b){goog.asserts.assertInstanceof(a,goog.ui.Control,"The child of a container must be a control");goog.ui.Container.superClass_.addChild.call(this,a,b)};
-goog.ui.Container.prototype.addChildAt=function(a,b,c){a.setDispatchTransitionEvents(goog.ui.Component.State.HOVER,!0);a.setDispatchTransitionEvents(goog.ui.Component.State.OPENED,!0);!this.isFocusable()&&this.isFocusableChildrenAllowed()||a.setSupportedState(goog.ui.Component.State.FOCUSED,!1);a.setHandleMouseEvents(!1);goog.ui.Container.superClass_.addChildAt.call(this,a,b,c);a.isInDocument()&&this.isInDocument()&&this.registerChildId_(a);b<=this.highlightedIndex_&&this.highlightedIndex_++};
-goog.ui.Container.prototype.removeChild=function(a,b){if(a=goog.isString(a)?this.getChild(a):a){var c=this.indexOfChild(a);-1!=c&&(c==this.highlightedIndex_?(a.setHighlighted(!1),this.highlightedIndex_=-1):c<this.highlightedIndex_&&this.highlightedIndex_--);(c=a.getElement())&&c.id&&this.childElementIdMap_&&goog.object.remove(this.childElementIdMap_,c.id)}a=goog.ui.Container.superClass_.removeChild.call(this,a,b);a.setHandleMouseEvents(!0);return a};goog.ui.Container.prototype.getOrientation=function(){return this.orientation_};
-goog.ui.Container.prototype.setOrientation=function(a){if(this.getElement())throw Error(goog.ui.Component.Error.ALREADY_RENDERED);this.orientation_=a};goog.ui.Container.prototype.isVisible=function(){return this.visible_};
-goog.ui.Container.prototype.setVisible=function(a,b){if(b||this.visible_!=a&&this.dispatchEvent(a?goog.ui.Component.EventType.SHOW:goog.ui.Component.EventType.HIDE)){this.visible_=a;var c=this.getElement();c&&(goog.style.setElementShown(c,a),this.isFocusable()&&this.renderer_.enableTabIndex(this.getKeyEventTarget(),this.enabled_&&this.visible_),b||this.dispatchEvent(this.visible_?goog.ui.Container.EventType.AFTER_SHOW:goog.ui.Container.EventType.AFTER_HIDE));return!0}return!1};
-goog.ui.Container.prototype.isEnabled=function(){return this.enabled_};
-goog.ui.Container.prototype.setEnabled=function(a){this.enabled_!=a&&this.dispatchEvent(a?goog.ui.Component.EventType.ENABLE:goog.ui.Component.EventType.DISABLE)&&(a?(this.enabled_=!0,this.forEachChild(function(a){a.wasDisabled?delete a.wasDisabled:a.setEnabled(!0)})):(this.forEachChild(function(a){a.isEnabled()?a.setEnabled(!1):a.wasDisabled=!0}),this.enabled_=!1,this.setMouseButtonPressed(!1)),this.isFocusable()&&this.renderer_.enableTabIndex(this.getKeyEventTarget(),a&&this.visible_))};
-goog.ui.Container.prototype.isFocusable=function(){return this.focusable_};goog.ui.Container.prototype.setFocusable=function(a){a!=this.focusable_&&this.isInDocument()&&this.enableFocusHandling_(a);this.focusable_=a;this.enabled_&&this.visible_&&this.renderer_.enableTabIndex(this.getKeyEventTarget(),a)};goog.ui.Container.prototype.isFocusableChildrenAllowed=function(){return this.allowFocusableChildren_};
-goog.ui.Container.prototype.setFocusableChildrenAllowed=function(a){this.allowFocusableChildren_=a};goog.ui.Container.prototype.isOpenFollowsHighlight=function(){return this.openFollowsHighlight_};goog.ui.Container.prototype.setOpenFollowsHighlight=function(a){this.openFollowsHighlight_=a};goog.ui.Container.prototype.getHighlightedIndex=function(){return this.highlightedIndex_};
-goog.ui.Container.prototype.setHighlightedIndex=function(a){(a=this.getChildAt(a))?a.setHighlighted(!0):-1<this.highlightedIndex_&&this.getHighlighted().setHighlighted(!1)};goog.ui.Container.prototype.setHighlighted=function(a){this.setHighlightedIndex(this.indexOfChild(a))};goog.ui.Container.prototype.getHighlighted=function(){return this.getChildAt(this.highlightedIndex_)};
-goog.ui.Container.prototype.highlightFirst=function(){this.highlightHelper(function(a,b){return(a+1)%b},this.getChildCount()-1)};goog.ui.Container.prototype.highlightLast=function(){this.highlightHelper(function(a,b){a--;return 0>a?b-1:a},0)};goog.ui.Container.prototype.highlightNext=function(){this.highlightHelper(function(a,b){return(a+1)%b},this.highlightedIndex_)};goog.ui.Container.prototype.highlightPrevious=function(){this.highlightHelper(function(a,b){a--;return 0>a?b-1:a},this.highlightedIndex_)};
-goog.ui.Container.prototype.highlightHelper=function(a,b){for(var c=0>b?this.indexOfChild(this.openItem_):b,d=this.getChildCount(),c=a.call(this,c,d),e=0;e<=d;){var f=this.getChildAt(c);if(f&&this.canHighlightItem(f))return this.setHighlightedIndexFromKeyEvent(c),!0;e++;c=a.call(this,c,d)}return!1};goog.ui.Container.prototype.canHighlightItem=function(a){return a.isVisible()&&a.isEnabled()&&a.isSupportedState(goog.ui.Component.State.HOVER)};
-goog.ui.Container.prototype.setHighlightedIndexFromKeyEvent=function(a){this.setHighlightedIndex(a)};goog.ui.Container.prototype.getOpenItem=function(){return this.openItem_};goog.ui.Container.prototype.isMouseButtonPressed=function(){return this.mouseButtonPressed_};goog.ui.Container.prototype.setMouseButtonPressed=function(a){this.mouseButtonPressed_=a};goog.ui.MenuHeaderRenderer=function(){goog.ui.ControlRenderer.call(this)};goog.inherits(goog.ui.MenuHeaderRenderer,goog.ui.ControlRenderer);goog.addSingletonGetter(goog.ui.MenuHeaderRenderer);goog.ui.MenuHeaderRenderer.CSS_CLASS="goog-menuheader";goog.ui.MenuHeaderRenderer.prototype.getCssClass=function(){return goog.ui.MenuHeaderRenderer.CSS_CLASS};goog.ui.MenuHeader=function(a,b,c){goog.ui.Control.call(this,a,c||goog.ui.MenuHeaderRenderer.getInstance(),b);this.setSupportedState(goog.ui.Component.State.DISABLED,!1);this.setSupportedState(goog.ui.Component.State.HOVER,!1);this.setSupportedState(goog.ui.Component.State.ACTIVE,!1);this.setSupportedState(goog.ui.Component.State.FOCUSED,!1);this.setStateInternal(goog.ui.Component.State.DISABLED)};goog.inherits(goog.ui.MenuHeader,goog.ui.Control);
-goog.ui.registry.setDecoratorByClassName(goog.ui.MenuHeaderRenderer.CSS_CLASS,function(){return new goog.ui.MenuHeader(null)});goog.ui.MenuItemRenderer=function(){goog.ui.ControlRenderer.call(this);this.classNameCache_=[]};goog.inherits(goog.ui.MenuItemRenderer,goog.ui.ControlRenderer);goog.addSingletonGetter(goog.ui.MenuItemRenderer);goog.ui.MenuItemRenderer.CSS_CLASS="goog-menuitem";goog.ui.MenuItemRenderer.CompositeCssClassIndex_={HOVER:0,CHECKBOX:1,CONTENT:2};
-goog.ui.MenuItemRenderer.prototype.getCompositeCssClass_=function(a){var b=this.classNameCache_[a];if(!b){switch(a){case goog.ui.MenuItemRenderer.CompositeCssClassIndex_.HOVER:b=this.getStructuralCssClass()+"-highlight";break;case goog.ui.MenuItemRenderer.CompositeCssClassIndex_.CHECKBOX:b=this.getStructuralCssClass()+"-checkbox";break;case goog.ui.MenuItemRenderer.CompositeCssClassIndex_.CONTENT:b=this.getStructuralCssClass()+"-content"}this.classNameCache_[a]=b}return b};
-goog.ui.MenuItemRenderer.prototype.getAriaRole=function(){return goog.a11y.aria.Role.MENU_ITEM};goog.ui.MenuItemRenderer.prototype.createDom=function(a){var b=a.getDomHelper().createDom("div",this.getClassNames(a).join(" "),this.createContent(a.getContent(),a.getDomHelper()));this.setEnableCheckBoxStructure(a,b,a.isSupportedState(goog.ui.Component.State.SELECTED)||a.isSupportedState(goog.ui.Component.State.CHECKED));this.setAriaStates(a,b);return b};
-goog.ui.MenuItemRenderer.prototype.getContentElement=function(a){return a&&a.firstChild};goog.ui.MenuItemRenderer.prototype.decorate=function(a,b){this.hasContentStructure(b)||b.appendChild(this.createContent(b.childNodes,a.getDomHelper()));goog.dom.classlist.contains(b,"goog-option")&&(a.setCheckable(!0),this.setCheckable(a,b,!0));return goog.ui.MenuItemRenderer.superClass_.decorate.call(this,a,b)};
-goog.ui.MenuItemRenderer.prototype.setContent=function(a,b){var c=this.getContentElement(a),d=this.hasCheckBoxStructure(a)?c.firstChild:null;goog.ui.MenuItemRenderer.superClass_.setContent.call(this,a,b);d&&!this.hasCheckBoxStructure(a)&&c.insertBefore(d,c.firstChild||null)};
-goog.ui.MenuItemRenderer.prototype.hasContentStructure=function(a){a=goog.dom.getFirstElementChild(a);var b=this.getCompositeCssClass_(goog.ui.MenuItemRenderer.CompositeCssClassIndex_.CONTENT);return!!a&&goog.dom.classlist.contains(a,b)};goog.ui.MenuItemRenderer.prototype.createContent=function(a,b){var c=this.getCompositeCssClass_(goog.ui.MenuItemRenderer.CompositeCssClassIndex_.CONTENT);return b.createDom("div",c,a)};
-goog.ui.MenuItemRenderer.prototype.setSelectable=function(a,b,c){b&&(goog.a11y.aria.setRole(b,c?goog.a11y.aria.Role.MENU_ITEM_RADIO:this.getAriaRole()),this.setEnableCheckBoxStructure(a,b,c))};goog.ui.MenuItemRenderer.prototype.setCheckable=function(a,b,c){b&&(goog.a11y.aria.setRole(b,c?goog.a11y.aria.Role.MENU_ITEM_CHECKBOX:this.getAriaRole()),this.setEnableCheckBoxStructure(a,b,c))};
-goog.ui.MenuItemRenderer.prototype.hasCheckBoxStructure=function(a){if(a=this.getContentElement(a)){a=a.firstChild;var b=this.getCompositeCssClass_(goog.ui.MenuItemRenderer.CompositeCssClassIndex_.CHECKBOX);return!!a&&goog.dom.isElement(a)&&goog.dom.classlist.contains(a,b)}return!1};
-goog.ui.MenuItemRenderer.prototype.setEnableCheckBoxStructure=function(a,b,c){c!=this.hasCheckBoxStructure(b)&&(goog.dom.classlist.enable(b,"goog-option",c),b=this.getContentElement(b),c?(c=this.getCompositeCssClass_(goog.ui.MenuItemRenderer.CompositeCssClassIndex_.CHECKBOX),b.insertBefore(a.getDomHelper().createDom("div",c),b.firstChild||null)):b.removeChild(b.firstChild))};
-goog.ui.MenuItemRenderer.prototype.getClassForState=function(a){switch(a){case goog.ui.Component.State.HOVER:return this.getCompositeCssClass_(goog.ui.MenuItemRenderer.CompositeCssClassIndex_.HOVER);case goog.ui.Component.State.CHECKED:case goog.ui.Component.State.SELECTED:return"goog-option-selected";default:return goog.ui.MenuItemRenderer.superClass_.getClassForState.call(this,a)}};
-goog.ui.MenuItemRenderer.prototype.getStateFromClass=function(a){var b=this.getCompositeCssClass_(goog.ui.MenuItemRenderer.CompositeCssClassIndex_.HOVER);switch(a){case "goog-option-selected":return goog.ui.Component.State.CHECKED;case b:return goog.ui.Component.State.HOVER;default:return goog.ui.MenuItemRenderer.superClass_.getStateFromClass.call(this,a)}};goog.ui.MenuItemRenderer.prototype.getCssClass=function(){return goog.ui.MenuItemRenderer.CSS_CLASS};goog.ui.MenuItem=function(a,b,c,d){goog.ui.Control.call(this,a,d||goog.ui.MenuItemRenderer.getInstance(),c);this.setValue(b)};goog.inherits(goog.ui.MenuItem,goog.ui.Control);goog.ui.MenuItem.MNEMONIC_WRAPPER_CLASS_="goog-menuitem-mnemonic-separator";goog.ui.MenuItem.ACCELERATOR_CLASS_="goog-menuitem-accel";goog.ui.MenuItem.prototype.getValue=function(){var a=this.getModel();return null!=a?a:this.getCaption()};goog.ui.MenuItem.prototype.setValue=function(a){this.setModel(a)};
-goog.ui.MenuItem.prototype.setSelectable=function(a){this.setSupportedState(goog.ui.Component.State.SELECTED,a);this.isChecked()&&!a&&this.setChecked(!1);var b=this.getElement();b&&this.getRenderer().setSelectable(this,b,a)};goog.ui.MenuItem.prototype.setCheckable=function(a){this.setSupportedState(goog.ui.Component.State.CHECKED,a);var b=this.getElement();b&&this.getRenderer().setCheckable(this,b,a)};
-goog.ui.MenuItem.prototype.getCaption=function(){var a=this.getContent();if(goog.isArray(a)){var b=goog.ui.MenuItem.ACCELERATOR_CLASS_,c=goog.ui.MenuItem.MNEMONIC_WRAPPER_CLASS_,a=goog.array.map(a,function(a){return goog.dom.isElement(a)&&(goog.dom.classlist.contains(a,b)||goog.dom.classlist.contains(a,c))?"":goog.dom.getRawTextContent(a)}).join("");return goog.string.collapseBreakingSpaces(a)}return goog.ui.MenuItem.superClass_.getCaption.call(this)};
-goog.ui.MenuItem.prototype.handleMouseUp=function(a){var b=this.getParent();if(b){var c=b.openingCoords;b.openingCoords=null;if(c&&goog.isNumber(a.clientX)&&(b=new goog.math.Coordinate(a.clientX,a.clientY),goog.math.Coordinate.equals(c,b)))return}goog.ui.MenuItem.superClass_.handleMouseUp.call(this,a)};goog.ui.MenuItem.prototype.handleKeyEventInternal=function(a){return a.keyCode==this.getMnemonic()&&this.performActionInternal(a)?!0:goog.ui.MenuItem.superClass_.handleKeyEventInternal.call(this,a)};
-goog.ui.MenuItem.prototype.setMnemonic=function(a){this.mnemonicKey_=a};goog.ui.MenuItem.prototype.getMnemonic=function(){return this.mnemonicKey_};goog.ui.registry.setDecoratorByClassName(goog.ui.MenuItemRenderer.CSS_CLASS,function(){return new goog.ui.MenuItem(null)});goog.ui.MenuSeparatorRenderer=function(){goog.ui.ControlRenderer.call(this)};goog.inherits(goog.ui.MenuSeparatorRenderer,goog.ui.ControlRenderer);goog.addSingletonGetter(goog.ui.MenuSeparatorRenderer);goog.ui.MenuSeparatorRenderer.CSS_CLASS="goog-menuseparator";goog.ui.MenuSeparatorRenderer.prototype.createDom=function(a){return a.getDomHelper().createDom("div",this.getCssClass())};
-goog.ui.MenuSeparatorRenderer.prototype.decorate=function(a,b){b.id&&a.setId(b.id);if("HR"==b.tagName){var c=b;b=this.createDom(a);goog.dom.insertSiblingBefore(b,c);goog.dom.removeNode(c)}else goog.dom.classlist.add(b,this.getCssClass());return b};goog.ui.MenuSeparatorRenderer.prototype.setContent=function(a,b){};goog.ui.MenuSeparatorRenderer.prototype.getCssClass=function(){return goog.ui.MenuSeparatorRenderer.CSS_CLASS};goog.ui.Separator=function(a,b){goog.ui.Control.call(this,null,a||goog.ui.MenuSeparatorRenderer.getInstance(),b);this.setSupportedState(goog.ui.Component.State.DISABLED,!1);this.setSupportedState(goog.ui.Component.State.HOVER,!1);this.setSupportedState(goog.ui.Component.State.ACTIVE,!1);this.setSupportedState(goog.ui.Component.State.FOCUSED,!1);this.setStateInternal(goog.ui.Component.State.DISABLED)};goog.inherits(goog.ui.Separator,goog.ui.Control);
-goog.ui.Separator.prototype.enterDocument=function(){goog.ui.Separator.superClass_.enterDocument.call(this);var a=this.getElement();goog.asserts.assert(a,"The DOM element for the separator cannot be null.");goog.a11y.aria.setRole(a,"separator")};goog.ui.registry.setDecoratorByClassName(goog.ui.MenuSeparatorRenderer.CSS_CLASS,function(){return new goog.ui.Separator});goog.ui.MenuRenderer=function(){goog.ui.ContainerRenderer.call(this)};goog.inherits(goog.ui.MenuRenderer,goog.ui.ContainerRenderer);goog.addSingletonGetter(goog.ui.MenuRenderer);goog.ui.MenuRenderer.CSS_CLASS="goog-menu";goog.ui.MenuRenderer.prototype.getAriaRole=function(){return goog.a11y.aria.Role.MENU};goog.ui.MenuRenderer.prototype.canDecorate=function(a){return"UL"==a.tagName||goog.ui.MenuRenderer.superClass_.canDecorate.call(this,a)};
-goog.ui.MenuRenderer.prototype.getDecoratorForChild=function(a){return"HR"==a.tagName?new goog.ui.Separator:goog.ui.MenuRenderer.superClass_.getDecoratorForChild.call(this,a)};goog.ui.MenuRenderer.prototype.containsElement=function(a,b){return goog.dom.contains(a.getElement(),b)};goog.ui.MenuRenderer.prototype.getCssClass=function(){return goog.ui.MenuRenderer.CSS_CLASS};
-goog.ui.MenuRenderer.prototype.initializeDom=function(a){goog.ui.MenuRenderer.superClass_.initializeDom.call(this,a);a=a.getElement();goog.asserts.assert(a,"The menu DOM element cannot be null.");goog.a11y.aria.setState(a,goog.a11y.aria.State.HASPOPUP,"true")};goog.ui.MenuSeparator=function(a){goog.ui.Separator.call(this,goog.ui.MenuSeparatorRenderer.getInstance(),a)};goog.inherits(goog.ui.MenuSeparator,goog.ui.Separator);goog.ui.registry.setDecoratorByClassName(goog.ui.MenuSeparatorRenderer.CSS_CLASS,function(){return new goog.ui.Separator});goog.ui.Menu=function(a,b){goog.ui.Container.call(this,goog.ui.Container.Orientation.VERTICAL,b||goog.ui.MenuRenderer.getInstance(),a);this.setFocusable(!1)};goog.inherits(goog.ui.Menu,goog.ui.Container);goog.ui.Menu.EventType={BEFORE_SHOW:goog.ui.Component.EventType.BEFORE_SHOW,SHOW:goog.ui.Component.EventType.SHOW,BEFORE_HIDE:goog.ui.Component.EventType.HIDE,HIDE:goog.ui.Component.EventType.HIDE};goog.ui.Menu.CSS_CLASS=goog.ui.MenuRenderer.CSS_CLASS;goog.ui.Menu.prototype.allowAutoFocus_=!0;
-goog.ui.Menu.prototype.allowHighlightDisabled_=!1;goog.ui.Menu.prototype.getCssClass=function(){return this.getRenderer().getCssClass()};goog.ui.Menu.prototype.containsElement=function(a){if(this.getRenderer().containsElement(this,a))return!0;for(var b=0,c=this.getChildCount();b<c;b++){var d=this.getChildAt(b);if("function"==typeof d.containsElement&&d.containsElement(a))return!0}return!1};goog.ui.Menu.prototype.addItem=function(a){this.addChild(a,!0)};
-goog.ui.Menu.prototype.addItemAt=function(a,b){this.addChildAt(a,b,!0)};goog.ui.Menu.prototype.removeItem=function(a){(a=this.removeChild(a,!0))&&a.dispose()};goog.ui.Menu.prototype.removeItemAt=function(a){(a=this.removeChildAt(a,!0))&&a.dispose()};goog.ui.Menu.prototype.getItemAt=function(a){return this.getChildAt(a)};goog.ui.Menu.prototype.getItemCount=function(){return this.getChildCount()};goog.ui.Menu.prototype.getItems=function(){var a=[];this.forEachChild(function(b){a.push(b)});return a};
-goog.ui.Menu.prototype.setPosition=function(a,b){var c=this.isVisible();c||goog.style.setElementShown(this.getElement(),!0);goog.style.setPageOffset(this.getElement(),a,b);c||goog.style.setElementShown(this.getElement(),!1)};goog.ui.Menu.prototype.getPosition=function(){return this.isVisible()?goog.style.getPageOffset(this.getElement()):null};goog.ui.Menu.prototype.setAllowAutoFocus=function(a){(this.allowAutoFocus_=a)&&this.setFocusable(!0)};goog.ui.Menu.prototype.getAllowAutoFocus=function(){return this.allowAutoFocus_};
-goog.ui.Menu.prototype.setAllowHighlightDisabled=function(a){this.allowHighlightDisabled_=a};goog.ui.Menu.prototype.getAllowHighlightDisabled=function(){return this.allowHighlightDisabled_};goog.ui.Menu.prototype.setVisible=function(a,b,c){(b=goog.ui.Menu.superClass_.setVisible.call(this,a,b))&&a&&this.isInDocument()&&this.allowAutoFocus_&&this.getKeyEventTarget().focus();a&&c&&goog.isNumber(c.clientX)?this.openingCoords=new goog.math.Coordinate(c.clientX,c.clientY):this.openingCoords=null;return b};
-goog.ui.Menu.prototype.handleEnterItem=function(a){this.allowAutoFocus_&&this.getKeyEventTarget().focus();return goog.ui.Menu.superClass_.handleEnterItem.call(this,a)};goog.ui.Menu.prototype.highlightNextPrefix=function(a){var b=RegExp("^"+goog.string.regExpEscape(a),"i");return this.highlightHelper(function(a,d){var e=0>a?0:a,f=!1;do{++a;a==d&&(a=0,f=!0);var g=this.getChildAt(a).getCaption();if(g&&g.match(b))return a}while(!f||a!=e);return this.getHighlightedIndex()},this.getHighlightedIndex())};
-goog.ui.Menu.prototype.canHighlightItem=function(a){return(this.allowHighlightDisabled_||a.isEnabled())&&a.isVisible()&&a.isSupportedState(goog.ui.Component.State.HOVER)};goog.ui.Menu.prototype.decorateInternal=function(a){this.decorateContent(a);goog.ui.Menu.superClass_.decorateInternal.call(this,a)};
-goog.ui.Menu.prototype.handleKeyEventInternal=function(a){var b=goog.ui.Menu.superClass_.handleKeyEventInternal.call(this,a);b||this.forEachChild(function(c){!b&&c.getMnemonic&&c.getMnemonic()==a.keyCode&&(this.isEnabled()&&this.setHighlighted(c),b=c.handleKeyEvent(a))},this);return b};goog.ui.Menu.prototype.setHighlightedIndex=function(a){goog.ui.Menu.superClass_.setHighlightedIndex.call(this,a);(a=this.getChildAt(a))&&goog.style.scrollIntoContainerView(a.getElement(),this.getElement())};
-goog.ui.Menu.prototype.decorateContent=function(a){var b=this.getRenderer();a=this.getDomHelper().getElementsByTagNameAndClass("div",b.getCssClass()+"-content",a);for(var c=a.length,d=0;d<c;d++)b.decorateChildren(this,a[d])};goog.color={};
-goog.color.names={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",
-darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",
-ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",
-lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",
-moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",
-seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};goog.color.parse=function(a){var b={};a=String(a);var c=goog.color.prependHashIfNecessaryHelper(a);if(goog.color.isValidHexColor_(c))return b.hex=goog.color.normalizeHex(c),b.type="hex",b;c=goog.color.isValidRgbColor_(a);if(c.length)return b.hex=goog.color.rgbArrayToHex(c),b.type="rgb",b;if(goog.color.names&&(c=goog.color.names[a.toLowerCase()]))return b.hex=c,b.type="named",b;throw Error(a+" is not a valid color string");};
-goog.color.isValidColor=function(a){var b=goog.color.prependHashIfNecessaryHelper(a);return!!(goog.color.isValidHexColor_(b)||goog.color.isValidRgbColor_(a).length||goog.color.names&&goog.color.names[a.toLowerCase()])};goog.color.parseRgb=function(a){var b=goog.color.isValidRgbColor_(a);if(!b.length)throw Error(a+" is not a valid RGB color");return b};goog.color.hexToRgbStyle=function(a){return goog.color.rgbStyle_(goog.color.hexToRgb(a))};goog.color.hexTripletRe_=/#(.)(.)(.)/;
-goog.color.normalizeHex=function(a){if(!goog.color.isValidHexColor_(a))throw Error("'"+a+"' is not a valid hex color");4==a.length&&(a=a.replace(goog.color.hexTripletRe_,"#$1$1$2$2$3$3"));return a.toLowerCase()};goog.color.hexToRgb=function(a){a=goog.color.normalizeHex(a);var b=parseInt(a.substr(1,2),16),c=parseInt(a.substr(3,2),16);a=parseInt(a.substr(5,2),16);return[b,c,a]};
-goog.color.rgbToHex=function(a,b,c){a=Number(a);b=Number(b);c=Number(c);if(isNaN(a)||0>a||255<a||isNaN(b)||0>b||255<b||isNaN(c)||0>c||255<c)throw Error('"('+a+","+b+","+c+'") is not a valid RGB color');a=goog.color.prependZeroIfNecessaryHelper(a.toString(16));b=goog.color.prependZeroIfNecessaryHelper(b.toString(16));c=goog.color.prependZeroIfNecessaryHelper(c.toString(16));return"#"+a+b+c};goog.color.rgbArrayToHex=function(a){return goog.color.rgbToHex(a[0],a[1],a[2])};
-goog.color.rgbToHsl=function(a,b,c){a/=255;b/=255;c/=255;var d=Math.max(a,b,c),e=Math.min(a,b,c),f=0,g=0,h=0.5*(d+e);d!=e&&(d==a?f=60*(b-c)/(d-e):d==b?f=60*(c-a)/(d-e)+120:d==c&&(f=60*(a-b)/(d-e)+240),g=0<h&&0.5>=h?(d-e)/(2*h):(d-e)/(2-2*h));return[Math.round(f+360)%360,g,h]};goog.color.rgbArrayToHsl=function(a){return goog.color.rgbToHsl(a[0],a[1],a[2])};goog.color.hueToRgb_=function(a,b,c){0>c?c+=1:1<c&&(c-=1);return 1>6*c?a+6*(b-a)*c:1>2*c?b:2>3*c?a+(b-a)*(2/3-c)*6:a};
-goog.color.hslToRgb=function(a,b,c){var d=0,e=0,f=0;a/=360;if(0==b)d=e=f=255*c;else var g=f=0,g=0.5>c?c*(1+b):c+b-b*c,f=2*c-g,d=255*goog.color.hueToRgb_(f,g,a+1/3),e=255*goog.color.hueToRgb_(f,g,a),f=255*goog.color.hueToRgb_(f,g,a-1/3);return[Math.round(d),Math.round(e),Math.round(f)]};goog.color.hslArrayToRgb=function(a){return goog.color.hslToRgb(a[0],a[1],a[2])};goog.color.validHexColorRe_=/^#(?:[0-9a-f]{3}){1,2}$/i;goog.color.isValidHexColor_=function(a){return goog.color.validHexColorRe_.test(a)};
-goog.color.normalizedHexColorRe_=/^#[0-9a-f]{6}$/;goog.color.isNormalizedHexColor_=function(a){return goog.color.normalizedHexColorRe_.test(a)};goog.color.rgbColorRe_=/^(?:rgb)?\((0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2}),\s?(0|[1-9]\d{0,2})\)$/i;goog.color.isValidRgbColor_=function(a){var b=a.match(goog.color.rgbColorRe_);if(b){a=Number(b[1]);var c=Number(b[2]),b=Number(b[3]);if(0<=a&&255>=a&&0<=c&&255>=c&&0<=b&&255>=b)return[a,c,b]}return[]};
-goog.color.prependZeroIfNecessaryHelper=function(a){return 1==a.length?"0"+a:a};goog.color.prependHashIfNecessaryHelper=function(a){return"#"==a.charAt(0)?a:"#"+a};goog.color.rgbStyle_=function(a){return"rgb("+a.join(",")+")"};
-goog.color.hsvToRgb=function(a,b,c){var d=0,e=0,f=0;if(0==b)f=e=d=c;else{var g=Math.floor(a/60),h=a/60-g;a=c*(1-b);var k=c*(1-b*h);b=c*(1-b*(1-h));switch(g){case 1:d=k;e=c;f=a;break;case 2:d=a;e=c;f=b;break;case 3:d=a;e=k;f=c;break;case 4:d=b;e=a;f=c;break;case 5:d=c;e=a;f=k;break;case 6:case 0:d=c,e=b,f=a}}return[Math.floor(d),Math.floor(e),Math.floor(f)]};
-goog.color.rgbToHsv=function(a,b,c){var d=Math.max(Math.max(a,b),c),e=Math.min(Math.min(a,b),c);if(e==d)e=a=0;else{var f=d-e,e=f/d;a=60*(a==d?(b-c)/f:b==d?2+(c-a)/f:4+(a-b)/f);0>a&&(a+=360);360<a&&(a-=360)}return[a,e,d]};goog.color.rgbArrayToHsv=function(a){return goog.color.rgbToHsv(a[0],a[1],a[2])};goog.color.hsvArrayToRgb=function(a){return goog.color.hsvToRgb(a[0],a[1],a[2])};goog.color.hexToHsl=function(a){a=goog.color.hexToRgb(a);return goog.color.rgbToHsl(a[0],a[1],a[2])};
-goog.color.hslToHex=function(a,b,c){return goog.color.rgbArrayToHex(goog.color.hslToRgb(a,b,c))};goog.color.hslArrayToHex=function(a){return goog.color.rgbArrayToHex(goog.color.hslToRgb(a[0],a[1],a[2]))};goog.color.hexToHsv=function(a){return goog.color.rgbArrayToHsv(goog.color.hexToRgb(a))};goog.color.hsvToHex=function(a,b,c){return goog.color.rgbArrayToHex(goog.color.hsvToRgb(a,b,c))};goog.color.hsvArrayToHex=function(a){return goog.color.hsvToHex(a[0],a[1],a[2])};
-goog.color.hslDistance=function(a,b){var c,d;c=0.5>=a[2]?a[1]*a[2]:a[1]*(1-a[2]);d=0.5>=b[2]?b[1]*b[2]:b[1]*(1-b[2]);return(a[2]-b[2])*(a[2]-b[2])+c*c+d*d-2*c*d*Math.cos(2*(a[0]/360-b[0]/360)*Math.PI)};goog.color.blend=function(a,b,c){c=goog.math.clamp(c,0,1);return[Math.round(c*a[0]+(1-c)*b[0]),Math.round(c*a[1]+(1-c)*b[1]),Math.round(c*a[2]+(1-c)*b[2])]};goog.color.darken=function(a,b){return goog.color.blend([0,0,0],a,b)};
-goog.color.lighten=function(a,b){return goog.color.blend([255,255,255],a,b)};goog.color.highContrast=function(a,b){for(var c=[],d=0;d<b.length;d++)c.push({color:b[d],diff:goog.color.yiqBrightnessDiff_(b[d],a)+goog.color.colorDiff_(b[d],a)});c.sort(function(a,b){return b.diff-a.diff});return c[0].color};goog.color.yiqBrightness_=function(a){return Math.round((299*a[0]+587*a[1]+114*a[2])/1E3)};goog.color.yiqBrightnessDiff_=function(a,b){return Math.abs(goog.color.yiqBrightness_(a)-goog.color.yiqBrightness_(b))};
-goog.color.colorDiff_=function(a,b){return Math.abs(a[0]-b[0])+Math.abs(a[1]-b[1])+Math.abs(a[2]-b[2])};goog.iter={};goog.iter.StopIteration="StopIteration"in goog.global?goog.global.StopIteration:Error("StopIteration");goog.iter.Iterator=function(){};goog.iter.Iterator.prototype.next=function(){throw goog.iter.StopIteration;};goog.iter.Iterator.prototype.__iterator__=function(a){return this};
-goog.iter.toIterator=function(a){if(a instanceof goog.iter.Iterator)return a;if("function"==typeof a.__iterator__)return a.__iterator__(!1);if(goog.isArrayLike(a)){var b=0,c=new goog.iter.Iterator;c.next=function(){for(;;){if(b>=a.length)throw goog.iter.StopIteration;if(b in a)return a[b++];b++}};return c}throw Error("Not implemented");};
-goog.iter.forEach=function(a,b,c){if(goog.isArrayLike(a))try{goog.array.forEach(a,b,c)}catch(d){if(d!==goog.iter.StopIteration)throw d;}else{a=goog.iter.toIterator(a);try{for(;;)b.call(c,a.next(),void 0,a)}catch(e){if(e!==goog.iter.StopIteration)throw e;}}};goog.iter.filter=function(a,b,c){var d=goog.iter.toIterator(a);a=new goog.iter.Iterator;a.next=function(){for(;;){var a=d.next();if(b.call(c,a,void 0,d))return a}};return a};
-goog.iter.range=function(a,b,c){var d=0,e=a,f=c||1;1<arguments.length&&(d=a,e=b);if(0==f)throw Error("Range step argument must not be zero");var g=new goog.iter.Iterator;g.next=function(){if(0<f&&d>=e||0>f&&d<=e)throw goog.iter.StopIteration;var a=d;d+=f;return a};return g};goog.iter.join=function(a,b){return goog.iter.toArray(a).join(b)};goog.iter.map=function(a,b,c){var d=goog.iter.toIterator(a);a=new goog.iter.Iterator;a.next=function(){for(;;){var a=d.next();return b.call(c,a,void 0,d)}};return a};
-goog.iter.reduce=function(a,b,c,d){var e=c;goog.iter.forEach(a,function(a){e=b.call(d,e,a)});return e};goog.iter.some=function(a,b,c){a=goog.iter.toIterator(a);try{for(;;)if(b.call(c,a.next(),void 0,a))return!0}catch(d){if(d!==goog.iter.StopIteration)throw d;}return!1};goog.iter.every=function(a,b,c){a=goog.iter.toIterator(a);try{for(;;)if(!b.call(c,a.next(),void 0,a))return!1}catch(d){if(d!==goog.iter.StopIteration)throw d;}return!0};
-goog.iter.chain=function(a){var b=goog.iter.toIterator(arguments),c=new goog.iter.Iterator,d=null;c.next=function(){for(;;){if(null==d){var a=b.next();d=goog.iter.toIterator(a)}try{return d.next()}catch(c){if(c!==goog.iter.StopIteration)throw c;d=null}}};return c};goog.iter.chainFromIterable=function(a){return goog.iter.chain.apply(void 0,a)};
-goog.iter.dropWhile=function(a,b,c){var d=goog.iter.toIterator(a);a=new goog.iter.Iterator;var e=!0;a.next=function(){for(;;){var a=d.next();if(!e||!b.call(c,a,void 0,d))return e=!1,a}};return a};goog.iter.takeWhile=function(a,b,c){var d=goog.iter.toIterator(a);a=new goog.iter.Iterator;var e=!0;a.next=function(){for(;;)if(e){var a=d.next();if(b.call(c,a,void 0,d))return a;e=!1}else throw goog.iter.StopIteration;};return a};
-goog.iter.toArray=function(a){if(goog.isArrayLike(a))return goog.array.toArray(a);a=goog.iter.toIterator(a);var b=[];goog.iter.forEach(a,function(a){b.push(a)});return b};goog.iter.equals=function(a,b){var c=goog.iter.zipLongest({},a,b);return goog.iter.every(c,function(a){return a[0]==a[1]})};goog.iter.nextOrValue=function(a,b){try{return goog.iter.toIterator(a).next()}catch(c){if(c!=goog.iter.StopIteration)throw c;return b}};
-goog.iter.product=function(a){if(goog.array.some(arguments,function(a){return!a.length})||!arguments.length)return new goog.iter.Iterator;var b=new goog.iter.Iterator,c=arguments,d=goog.array.repeat(0,c.length);b.next=function(){if(d){for(var a=goog.array.map(d,function(a,b){return c[b][a]}),b=d.length-1;0<=b;b--){goog.asserts.assert(d);if(d[b]<c[b].length-1){d[b]++;break}if(0==b){d=null;break}d[b]=0}return a}throw goog.iter.StopIteration;};return b};
-goog.iter.cycle=function(a){var b=goog.iter.toIterator(a),c=[],d=0;a=new goog.iter.Iterator;var e=!1;a.next=function(){var a=null;if(!e)try{return a=b.next(),c.push(a),a}catch(g){if(g!=goog.iter.StopIteration||goog.array.isEmpty(c))throw g;e=!0}a=c[d];d=(d+1)%c.length;return a};return a};goog.iter.count=function(a,b){var c=a||0,d=goog.isDef(b)?b:1,e=new goog.iter.Iterator;e.next=function(){var a=c;c+=d;return a};return e};
-goog.iter.repeat=function(a){var b=new goog.iter.Iterator;b.next=goog.functions.constant(a);return b};goog.iter.accumulate=function(a){var b=goog.iter.toIterator(a),c=0;a=new goog.iter.Iterator;a.next=function(){return c+=b.next()};return a};goog.iter.zip=function(a){var b=arguments,c=new goog.iter.Iterator;if(0<b.length){var d=goog.array.map(b,goog.iter.toIterator);c.next=function(){return goog.array.map(d,function(a){return a.next()})}}return c};
-goog.iter.zipLongest=function(a,b){var c=goog.array.slice(arguments,1),d=new goog.iter.Iterator;if(0<c.length){var e=goog.array.map(c,goog.iter.toIterator);d.next=function(){var b=!1,c=goog.array.map(e,function(c){var d;try{d=c.next(),b=!0}catch(e){if(e!==goog.iter.StopIteration)throw e;d=a}return d});if(!b)throw goog.iter.StopIteration;return c}}return d};goog.iter.compress=function(a,b){var c=goog.iter.toIterator(b);return goog.iter.filter(a,function(){return!!c.next()})};
-goog.iter.GroupByIterator_=function(a,b){this.iterator=goog.iter.toIterator(a);this.keyFunc=b||goog.functions.identity};goog.inherits(goog.iter.GroupByIterator_,goog.iter.Iterator);goog.iter.GroupByIterator_.prototype.next=function(){for(;this.currentKey==this.targetKey;)this.currentValue=this.iterator.next(),this.currentKey=this.keyFunc(this.currentValue);this.targetKey=this.currentKey;return[this.currentKey,this.groupItems_(this.targetKey)]};
-goog.iter.GroupByIterator_.prototype.groupItems_=function(a){for(var b=[];this.currentKey==a;){b.push(this.currentValue);try{this.currentValue=this.iterator.next()}catch(c){if(c!==goog.iter.StopIteration)throw c;break}this.currentKey=this.keyFunc(this.currentValue)}return b};goog.iter.groupBy=function(a,b){return new goog.iter.GroupByIterator_(a,b)};
-goog.iter.tee=function(a,b){var c=goog.iter.toIterator(a),d=goog.isNumber(b)?b:2,e=goog.array.map(goog.array.range(d),function(){return[]}),f=function(){var a=c.next();goog.array.forEach(e,function(b){b.push(a)})};return goog.array.map(e,function(a){var b=new goog.iter.Iterator;b.next=function(){goog.array.isEmpty(a)&&f();goog.asserts.assert(!goog.array.isEmpty(a));return a.shift()};return b})};goog.iter.enumerate=function(a,b){return goog.iter.zip(goog.iter.count(b),a)};
-goog.iter.limit=function(a,b){goog.asserts.assert(goog.math.isInt(b)&&0<=b);var c=goog.iter.toIterator(a),d=new goog.iter.Iterator,e=b;d.next=function(){if(0<e--)return c.next();throw goog.iter.StopIteration;};return d};goog.iter.consume=function(a,b){goog.asserts.assert(goog.math.isInt(b)&&0<=b);for(var c=goog.iter.toIterator(a);0<b--;)goog.iter.nextOrValue(c,null);return c};
-goog.iter.slice=function(a,b,c){goog.asserts.assert(goog.math.isInt(b)&&0<=b);a=goog.iter.consume(a,b);goog.isNumber(c)&&(goog.asserts.assert(goog.math.isInt(c)&&c>=b),a=goog.iter.limit(a,c-b));return a};goog.iter.hasDuplicates_=function(a){var b=[];goog.array.removeDuplicates(a,b);return a.length!=b.length};goog.iter.permutations=function(a,b){var c=goog.iter.toArray(a),d=goog.isNumber(b)?b:c.length,c=goog.array.repeat(c,d),c=goog.iter.product.apply(void 0,c);return goog.iter.filter(c,function(a){return!goog.iter.hasDuplicates_(a)})};
-goog.iter.combinations=function(a,b){function c(a){return d[a]}var d=goog.iter.toArray(a),e=goog.iter.range(d.length),e=goog.iter.permutations(e,b),f=goog.iter.filter(e,function(a){return goog.array.isSorted(a)}),e=new goog.iter.Iterator;e.next=function(){return goog.array.map(f.next(),c)};return e};
-goog.iter.combinationsWithReplacement=function(a,b){function c(a){return d[a]}var d=goog.iter.toArray(a),e=goog.array.range(d.length),e=goog.array.repeat(e,b),e=goog.iter.product.apply(void 0,e),f=goog.iter.filter(e,function(a){return goog.array.isSorted(a)}),e=new goog.iter.Iterator;e.next=function(){return goog.array.map(f.next(),c)};return e};goog.dom.TagWalkType={START_TAG:1,OTHER:0,END_TAG:-1};goog.dom.TagIterator=function(a,b,c,d,e){this.reversed=!!b;a&&this.setPosition(a,d);this.depth=void 0!=e?e:this.tagType||0;this.reversed&&(this.depth*=-1);this.constrained=!c};goog.inherits(goog.dom.TagIterator,goog.iter.Iterator);goog.dom.TagIterator.prototype.node=null;goog.dom.TagIterator.prototype.tagType=goog.dom.TagWalkType.OTHER;goog.dom.TagIterator.prototype.started_=!1;
-goog.dom.TagIterator.prototype.setPosition=function(a,b,c){if(this.node=a)goog.isNumber(b)?this.tagType=b:this.tagType=this.node.nodeType!=goog.dom.NodeType.ELEMENT?goog.dom.TagWalkType.OTHER:this.reversed?goog.dom.TagWalkType.END_TAG:goog.dom.TagWalkType.START_TAG;goog.isNumber(c)&&(this.depth=c)};goog.dom.TagIterator.prototype.copyFrom=function(a){this.node=a.node;this.tagType=a.tagType;this.depth=a.depth;this.reversed=a.reversed;this.constrained=a.constrained};
-goog.dom.TagIterator.prototype.clone=function(){return new goog.dom.TagIterator(this.node,this.reversed,!this.constrained,this.tagType,this.depth)};goog.dom.TagIterator.prototype.skipTag=function(){var a=this.reversed?goog.dom.TagWalkType.END_TAG:goog.dom.TagWalkType.START_TAG;this.tagType==a&&(this.tagType=-1*a,this.depth+=this.tagType*(this.reversed?-1:1))};
-goog.dom.TagIterator.prototype.restartTag=function(){var a=this.reversed?goog.dom.TagWalkType.START_TAG:goog.dom.TagWalkType.END_TAG;this.tagType==a&&(this.tagType=-1*a,this.depth+=this.tagType*(this.reversed?-1:1))};
-goog.dom.TagIterator.prototype.next=function(){var a;if(this.started_){if(!this.node||this.constrained&&0==this.depth)throw goog.iter.StopIteration;a=this.node;var b=this.reversed?goog.dom.TagWalkType.END_TAG:goog.dom.TagWalkType.START_TAG;if(this.tagType==b){var c=this.reversed?a.lastChild:a.firstChild;c?this.setPosition(c):this.setPosition(a,-1*b)}else(c=this.reversed?a.previousSibling:a.nextSibling)?this.setPosition(c):this.setPosition(a.parentNode,-1*b);this.depth+=this.tagType*(this.reversed?
--1:1)}else this.started_=!0;a=this.node;if(!this.node)throw goog.iter.StopIteration;return a};goog.dom.TagIterator.prototype.isStarted=function(){return this.started_};goog.dom.TagIterator.prototype.isStartTag=function(){return this.tagType==goog.dom.TagWalkType.START_TAG};goog.dom.TagIterator.prototype.isEndTag=function(){return this.tagType==goog.dom.TagWalkType.END_TAG};goog.dom.TagIterator.prototype.isNonElement=function(){return this.tagType==goog.dom.TagWalkType.OTHER};
-goog.dom.TagIterator.prototype.equals=function(a){return a.node==this.node&&(!this.node||a.tagType==this.tagType)};goog.dom.TagIterator.prototype.splice=function(a){var b=this.node;this.restartTag();this.reversed=!this.reversed;goog.dom.TagIterator.prototype.next.call(this);this.reversed=!this.reversed;for(var c=goog.isArrayLike(arguments[0])?arguments[0]:arguments,d=c.length-1;0<=d;d--)goog.dom.insertSiblingAfter(c[d],b);goog.dom.removeNode(b)};goog.dom.NodeIterator=function(a,b,c,d){goog.dom.TagIterator.call(this,a,b,c,null,d)};goog.inherits(goog.dom.NodeIterator,goog.dom.TagIterator);goog.dom.NodeIterator.prototype.next=function(){do goog.dom.NodeIterator.superClass_.next.call(this);while(this.isEndTag());return this.node};goog.ui.PaletteRenderer=function(){goog.ui.ControlRenderer.call(this)};goog.inherits(goog.ui.PaletteRenderer,goog.ui.ControlRenderer);goog.addSingletonGetter(goog.ui.PaletteRenderer);goog.ui.PaletteRenderer.cellId_=0;goog.ui.PaletteRenderer.CSS_CLASS="goog-palette";
-goog.ui.PaletteRenderer.prototype.createDom=function(a){var b=this.getClassNames(a);a=a.getDomHelper().createDom(goog.dom.TagName.DIV,b?b.join(" "):null,this.createGrid(a.getContent(),a.getSize(),a.getDomHelper()));goog.a11y.aria.setRole(a,goog.a11y.aria.Role.GRID);return a};
-goog.ui.PaletteRenderer.prototype.createGrid=function(a,b,c){for(var d=[],e=0,f=0;e<b.height;e++){for(var g=[],h=0;h<b.width;h++){var k=a&&a[f++];g.push(this.createCell(k,c))}d.push(this.createRow(g,c))}return this.createTable(d,c)};goog.ui.PaletteRenderer.prototype.createTable=function(a,b){var c=b.createDom(goog.dom.TagName.TABLE,this.getCssClass()+"-table",b.createDom(goog.dom.TagName.TBODY,this.getCssClass()+"-body",a));c.cellSpacing=0;c.cellPadding=0;return c};
-goog.ui.PaletteRenderer.prototype.createRow=function(a,b){var c=b.createDom(goog.dom.TagName.TR,this.getCssClass()+"-row",a);goog.a11y.aria.setRole(c,goog.a11y.aria.Role.ROW);return c};
-goog.ui.PaletteRenderer.prototype.createCell=function(a,b){var c=b.createDom(goog.dom.TagName.TD,{"class":this.getCssClass()+"-cell",id:this.getCssClass()+"-cell-"+goog.ui.PaletteRenderer.cellId_++},a);goog.a11y.aria.setRole(c,goog.a11y.aria.Role.GRIDCELL);if(!goog.dom.getTextContent(c)&&!goog.a11y.aria.getLabel(c)){var d=this.findAriaLabelForCell_(c);d&&goog.a11y.aria.setLabel(c,d)}return c};
-goog.ui.PaletteRenderer.prototype.findAriaLabelForCell_=function(a){a=new goog.dom.NodeIterator(a);for(var b="",c;!b&&(c=goog.iter.nextOrValue(a,null));)c.nodeType==goog.dom.NodeType.ELEMENT&&(b=goog.a11y.aria.getLabel(c)||c.title);return b};goog.ui.PaletteRenderer.prototype.canDecorate=function(a){return!1};goog.ui.PaletteRenderer.prototype.decorate=function(a,b){return null};
-goog.ui.PaletteRenderer.prototype.setContent=function(a,b){if(a){var c=goog.dom.getElementsByTagNameAndClass(goog.dom.TagName.TBODY,this.getCssClass()+"-body",a)[0];if(c){var d=0;goog.array.forEach(c.rows,function(a){goog.array.forEach(a.cells,function(a){goog.dom.removeChildren(a);if(b){var c=b[d++];c&&goog.dom.appendChild(a,c)}})});if(d<b.length){for(var e=[],f=goog.dom.getDomHelper(a),g=c.rows[0].cells.length;d<b.length;){var h=b[d++];e.push(this.createCell(h,f));e.length==g&&(h=this.createRow(e,
-f),goog.dom.appendChild(c,h),e.length=0)}if(0<e.length){for(;e.length<g;)e.push(this.createCell("",f));h=this.createRow(e,f);goog.dom.appendChild(c,h)}}}goog.style.setUnselectable(a,!0,goog.userAgent.GECKO)}};goog.ui.PaletteRenderer.prototype.getContainingItem=function(a,b){for(var c=a.getElement();b&&b.nodeType==goog.dom.NodeType.ELEMENT&&b!=c;){if(b.tagName==goog.dom.TagName.TD&&goog.dom.classlist.contains(b,this.getCssClass()+"-cell"))return b.firstChild;b=b.parentNode}return null};
-goog.ui.PaletteRenderer.prototype.highlightCell=function(a,b,c){b&&(b=this.getCellForItem(b),goog.dom.classlist.enable(b,this.getCssClass()+"-cell-hover",c),goog.a11y.aria.setState(a.getElementStrict(),goog.a11y.aria.State.ACTIVEDESCENDANT,b.id))};goog.ui.PaletteRenderer.prototype.getCellForItem=function(a){return a?a.parentNode:null};goog.ui.PaletteRenderer.prototype.selectCell=function(a,b,c){b&&goog.dom.classlist.enable(b.parentNode,this.getCssClass()+"-cell-selected",c)};
-goog.ui.PaletteRenderer.prototype.getCssClass=function(){return goog.ui.PaletteRenderer.CSS_CLASS};goog.ui.SelectionModel=function(a){goog.events.EventTarget.call(this);this.items_=[];this.addItems(a)};goog.inherits(goog.ui.SelectionModel,goog.events.EventTarget);goog.ui.SelectionModel.prototype.selectedItem_=null;goog.ui.SelectionModel.prototype.selectionHandler_=null;goog.ui.SelectionModel.prototype.getSelectionHandler=function(){return this.selectionHandler_};goog.ui.SelectionModel.prototype.setSelectionHandler=function(a){this.selectionHandler_=a};
-goog.ui.SelectionModel.prototype.getItemCount=function(){return this.items_.length};goog.ui.SelectionModel.prototype.indexOfItem=function(a){return a?goog.array.indexOf(this.items_,a):-1};goog.ui.SelectionModel.prototype.getFirst=function(){return this.items_[0]};goog.ui.SelectionModel.prototype.getLast=function(){return this.items_[this.items_.length-1]};goog.ui.SelectionModel.prototype.getItemAt=function(a){return this.items_[a]||null};
-goog.ui.SelectionModel.prototype.addItems=function(a){a&&(goog.array.forEach(a,function(a){this.selectItem_(a,!1)},this),goog.array.extend(this.items_,a))};goog.ui.SelectionModel.prototype.addItem=function(a){this.addItemAt(a,this.getItemCount())};goog.ui.SelectionModel.prototype.addItemAt=function(a,b){a&&(this.selectItem_(a,!1),goog.array.insertAt(this.items_,a,b))};
-goog.ui.SelectionModel.prototype.removeItem=function(a){a&&goog.array.remove(this.items_,a)&&a==this.selectedItem_&&(this.selectedItem_=null,this.dispatchEvent(goog.events.EventType.SELECT))};goog.ui.SelectionModel.prototype.removeItemAt=function(a){this.removeItem(this.getItemAt(a))};goog.ui.SelectionModel.prototype.getSelectedItem=function(){return this.selectedItem_};goog.ui.SelectionModel.prototype.getItems=function(){return goog.array.clone(this.items_)};
-goog.ui.SelectionModel.prototype.setSelectedItem=function(a){a!=this.selectedItem_&&(this.selectItem_(this.selectedItem_,!1),this.selectedItem_=a,this.selectItem_(a,!0));this.dispatchEvent(goog.events.EventType.SELECT)};goog.ui.SelectionModel.prototype.getSelectedIndex=function(){return this.indexOfItem(this.selectedItem_)};goog.ui.SelectionModel.prototype.setSelectedIndex=function(a){this.setSelectedItem(this.getItemAt(a))};
-goog.ui.SelectionModel.prototype.clear=function(){goog.array.clear(this.items_);this.selectedItem_=null};goog.ui.SelectionModel.prototype.disposeInternal=function(){goog.ui.SelectionModel.superClass_.disposeInternal.call(this);delete this.items_;this.selectedItem_=null};goog.ui.SelectionModel.prototype.selectItem_=function(a,b){a&&("function"==typeof this.selectionHandler_?this.selectionHandler_(a,b):"function"==typeof a.setSelected&&a.setSelected(b))};goog.ui.Palette=function(a,b,c){goog.ui.Control.call(this,a,b||goog.ui.PaletteRenderer.getInstance(),c);this.setAutoStates(goog.ui.Component.State.CHECKED|goog.ui.Component.State.SELECTED|goog.ui.Component.State.OPENED,!1);this.currentCellControl_=new goog.ui.Palette.CurrentCell_;this.currentCellControl_.setParentEventTarget(this)};goog.inherits(goog.ui.Palette,goog.ui.Control);goog.ui.Palette.EventType={AFTER_HIGHLIGHT:goog.events.getUniqueId("afterhighlight")};goog.ui.Palette.prototype.size_=null;
-goog.ui.Palette.prototype.highlightedIndex_=-1;goog.ui.Palette.prototype.selectionModel_=null;goog.ui.Palette.prototype.disposeInternal=function(){goog.ui.Palette.superClass_.disposeInternal.call(this);this.selectionModel_&&(this.selectionModel_.dispose(),this.selectionModel_=null);this.size_=null;this.currentCellControl_.dispose()};
-goog.ui.Palette.prototype.setContentInternal=function(a){goog.ui.Palette.superClass_.setContentInternal.call(this,a);this.adjustSize_();this.selectionModel_?(this.selectionModel_.clear(),this.selectionModel_.addItems(a)):(this.selectionModel_=new goog.ui.SelectionModel(a),this.selectionModel_.setSelectionHandler(goog.bind(this.selectItem_,this)),this.getHandler().listen(this.selectionModel_,goog.events.EventType.SELECT,this.handleSelectionChange));this.highlightedIndex_=-1};
-goog.ui.Palette.prototype.getCaption=function(){return""};goog.ui.Palette.prototype.setCaption=function(a){};goog.ui.Palette.prototype.handleMouseOver=function(a){goog.ui.Palette.superClass_.handleMouseOver.call(this,a);var b=this.getRenderer().getContainingItem(this,a.target);b&&a.relatedTarget&&goog.dom.contains(b,a.relatedTarget)||b!=this.getHighlightedItem()&&this.setHighlightedItem(b)};
-goog.ui.Palette.prototype.handleMouseOut=function(a){goog.ui.Palette.superClass_.handleMouseOut.call(this,a);var b=this.getRenderer().getContainingItem(this,a.target);b&&a.relatedTarget&&goog.dom.contains(b,a.relatedTarget)||b==this.getHighlightedItem()&&this.setHighlightedItem(null)};goog.ui.Palette.prototype.handleMouseDown=function(a){goog.ui.Palette.superClass_.handleMouseDown.call(this,a);this.isActive()&&(a=this.getRenderer().getContainingItem(this,a.target),a!=this.getHighlightedItem()&&this.setHighlightedItem(a))};
-goog.ui.Palette.prototype.performActionInternal=function(a){var b=this.getHighlightedItem();return b?(this.setSelectedItem(b),goog.ui.Palette.superClass_.performActionInternal.call(this,a)):!1};
-goog.ui.Palette.prototype.handleKeyEvent=function(a){var b=this.getContent(),b=b?b.length:0,c=this.size_.width;if(0==b||!this.isEnabled())return!1;if(a.keyCode==goog.events.KeyCodes.ENTER||a.keyCode==goog.events.KeyCodes.SPACE)return this.performActionInternal(a);if(a.keyCode==goog.events.KeyCodes.HOME)return this.setHighlightedIndex(0),!0;if(a.keyCode==goog.events.KeyCodes.END)return this.setHighlightedIndex(b-1),!0;var d=0>this.highlightedIndex_?this.getSelectedIndex():this.highlightedIndex_;switch(a.keyCode){case goog.events.KeyCodes.LEFT:if(-1==
-d||0==d)d=b;this.setHighlightedIndex(d-1);a.preventDefault();return!0;case goog.events.KeyCodes.RIGHT:return d==b-1&&(d=-1),this.setHighlightedIndex(d+1),a.preventDefault(),!0;case goog.events.KeyCodes.UP:-1==d&&(d=b+c-1);if(d>=c)return this.setHighlightedIndex(d-c),a.preventDefault(),!0;break;case goog.events.KeyCodes.DOWN:if(-1==d&&(d=-c),d<b-c)return this.setHighlightedIndex(d+c),a.preventDefault(),!0}return!1};goog.ui.Palette.prototype.handleSelectionChange=function(a){};
-goog.ui.Palette.prototype.getSize=function(){return this.size_};goog.ui.Palette.prototype.setSize=function(a,b){if(this.getElement())throw Error(goog.ui.Component.Error.ALREADY_RENDERED);this.size_=goog.isNumber(a)?new goog.math.Size(a,b):a;this.adjustSize_()};goog.ui.Palette.prototype.getHighlightedIndex=function(){return this.highlightedIndex_};goog.ui.Palette.prototype.getHighlightedItem=function(){var a=this.getContent();return a&&a[this.highlightedIndex_]};
-goog.ui.Palette.prototype.getHighlightedCellElement_=function(){return this.getRenderer().getCellForItem(this.getHighlightedItem())};goog.ui.Palette.prototype.setHighlightedIndex=function(a){a!=this.highlightedIndex_&&(this.highlightIndex_(this.highlightedIndex_,!1),this.highlightedIndex_=a,this.highlightIndex_(a,!0),this.dispatchEvent(goog.ui.Palette.EventType.AFTER_HIGHLIGHT))};
-goog.ui.Palette.prototype.setHighlightedItem=function(a){var b=this.getContent();this.setHighlightedIndex(b?goog.array.indexOf(b,a):-1)};goog.ui.Palette.prototype.getSelectedIndex=function(){return this.selectionModel_?this.selectionModel_.getSelectedIndex():-1};goog.ui.Palette.prototype.getSelectedItem=function(){return this.selectionModel_?this.selectionModel_.getSelectedItem():null};goog.ui.Palette.prototype.setSelectedIndex=function(a){this.selectionModel_&&this.selectionModel_.setSelectedIndex(a)};
-goog.ui.Palette.prototype.setSelectedItem=function(a){this.selectionModel_&&this.selectionModel_.setSelectedItem(a)};goog.ui.Palette.prototype.highlightIndex_=function(a,b){if(this.getElement()){var c=this.getContent();if(c&&0<=a&&a<c.length){var d=this.getHighlightedCellElement_();this.currentCellControl_.getElement()!=d&&this.currentCellControl_.setElementInternal(d);this.currentCellControl_.tryHighlight(b)&&this.getRenderer().highlightCell(this,c[a],b)}}};
-goog.ui.Palette.prototype.selectItem_=function(a,b){this.getElement()&&this.getRenderer().selectCell(this,a,b)};goog.ui.Palette.prototype.adjustSize_=function(){var a=this.getContent();if(a)if(this.size_&&this.size_.width){if(a=Math.ceil(a.length/this.size_.width),!goog.isNumber(this.size_.height)||this.size_.height<a)this.size_.height=a}else a=Math.ceil(Math.sqrt(a.length)),this.size_=new goog.math.Size(a,a);else this.size_=new goog.math.Size(0,0)};
-goog.ui.Palette.CurrentCell_=function(){goog.ui.Control.call(this,null);this.setDispatchTransitionEvents(goog.ui.Component.State.HOVER,!0)};goog.inherits(goog.ui.Palette.CurrentCell_,goog.ui.Control);goog.ui.Palette.CurrentCell_.prototype.tryHighlight=function(a){this.setHighlighted(a);return this.isHighlighted()==a};goog.ui.ColorPalette=function(a,b,c){this.colors_=a||[];goog.ui.Palette.call(this,null,b||goog.ui.PaletteRenderer.getInstance(),c);this.setColors(this.colors_)};goog.inherits(goog.ui.ColorPalette,goog.ui.Palette);goog.ui.ColorPalette.prototype.normalizedColors_=null;goog.ui.ColorPalette.prototype.labels_=null;goog.ui.ColorPalette.prototype.getColors=function(){return this.colors_};
-goog.ui.ColorPalette.prototype.setColors=function(a,b){this.colors_=a;this.labels_=b||null;this.normalizedColors_=null;this.setContent(this.createColorNodes())};goog.ui.ColorPalette.prototype.getSelectedColor=function(){var a=this.getSelectedItem();return a?(a=goog.style.getStyle(a,"background-color"),goog.ui.ColorPalette.parseColor_(a)):null};
-goog.ui.ColorPalette.prototype.setSelectedColor=function(a){a=goog.ui.ColorPalette.parseColor_(a);this.normalizedColors_||(this.normalizedColors_=goog.array.map(this.colors_,function(a){return goog.ui.ColorPalette.parseColor_(a)}));this.setSelectedIndex(a?goog.array.indexOf(this.normalizedColors_,a):-1)};
-goog.ui.ColorPalette.prototype.createColorNodes=function(){return goog.array.map(this.colors_,function(a,b){var c=this.getDomHelper().createDom("div",{"class":this.getRenderer().getCssClass()+"-colorswatch",style:"background-color:"+a});c.title=this.labels_&&this.labels_[b]?this.labels_[b]:"#"==a.charAt(0)?"RGB ("+goog.color.hexToRgb(a).join(", ")+")":a;return c},this)};goog.ui.ColorPalette.parseColor_=function(a){if(a)try{return goog.color.parse(a).hex}catch(b){}return null};goog.ui.ColorPicker=function(a,b){goog.ui.Component.call(this,a);this.colorPalette_=b||null;this.getHandler().listen(this,goog.ui.Component.EventType.ACTION,this.onColorPaletteAction_)};goog.inherits(goog.ui.ColorPicker,goog.ui.Component);goog.ui.ColorPicker.DEFAULT_NUM_COLS=5;goog.ui.ColorPicker.EventType={CHANGE:"change"};goog.ui.ColorPicker.prototype.focusable_=!0;goog.ui.ColorPicker.prototype.getColors=function(){return this.colorPalette_?this.colorPalette_.getColors():null};
-goog.ui.ColorPicker.prototype.setColors=function(a){this.colorPalette_?this.colorPalette_.setColors(a):this.createColorPalette_(a)};goog.ui.ColorPicker.prototype.addColors=function(a){this.setColors(a)};goog.ui.ColorPicker.prototype.setSize=function(a){this.colorPalette_||this.createColorPalette_([]);this.colorPalette_.setSize(a)};goog.ui.ColorPicker.prototype.getSize=function(){return this.colorPalette_?this.colorPalette_.getSize():null};goog.ui.ColorPicker.prototype.setColumnCount=function(a){this.setSize(a)};
-goog.ui.ColorPicker.prototype.getSelectedIndex=function(){return this.colorPalette_?this.colorPalette_.getSelectedIndex():-1};goog.ui.ColorPicker.prototype.setSelectedIndex=function(a){this.colorPalette_&&this.colorPalette_.setSelectedIndex(a)};goog.ui.ColorPicker.prototype.getSelectedColor=function(){return this.colorPalette_?this.colorPalette_.getSelectedColor():null};goog.ui.ColorPicker.prototype.setSelectedColor=function(a){this.colorPalette_&&this.colorPalette_.setSelectedColor(a)};
-goog.ui.ColorPicker.prototype.isFocusable=function(){return this.focusable_};goog.ui.ColorPicker.prototype.setFocusable=function(a){this.focusable_=a;this.colorPalette_&&this.colorPalette_.setSupportedState(goog.ui.Component.State.FOCUSED,a)};goog.ui.ColorPicker.prototype.canDecorate=function(a){return!1};
-goog.ui.ColorPicker.prototype.enterDocument=function(){goog.ui.ColorPicker.superClass_.enterDocument.call(this);this.colorPalette_&&this.colorPalette_.render(this.getElement());this.getElement().unselectable="on"};goog.ui.ColorPicker.prototype.disposeInternal=function(){goog.ui.ColorPicker.superClass_.disposeInternal.call(this);this.colorPalette_&&(this.colorPalette_.dispose(),this.colorPalette_=null)};goog.ui.ColorPicker.prototype.focus=function(){this.colorPalette_&&this.colorPalette_.getElement().focus()};
-goog.ui.ColorPicker.prototype.onColorPaletteAction_=function(a){a.stopPropagation();this.dispatchEvent(goog.ui.ColorPicker.EventType.CHANGE)};goog.ui.ColorPicker.prototype.createColorPalette_=function(a){a=new goog.ui.ColorPalette(a,null,this.getDomHelper());a.setSize(goog.ui.ColorPicker.DEFAULT_NUM_COLS);a.setSupportedState(goog.ui.Component.State.FOCUSED,this.focusable_);this.addChild(a);this.colorPalette_=a;this.isInDocument()&&this.colorPalette_.render(this.getElement())};
-goog.ui.ColorPicker.createSimpleColorGrid=function(a){a=new goog.ui.ColorPicker(a);a.setSize(7);a.setColors(goog.ui.ColorPicker.SIMPLE_GRID_COLORS);return a};goog.ui.ColorPicker.SIMPLE_GRID_COLORS="#ffffff #cccccc #c0c0c0 #999999 #666666 #333333 #000000 #ffcccc #ff6666 #ff0000 #cc0000 #990000 #660000 #330000 #ffcc99 #ff9966 #ff9900 #ff6600 #cc6600 #993300 #663300 #ffff99 #ffff66 #ffcc66 #ffcc33 #cc9933 #996633 #663333 #ffffcc #ffff33 #ffff00 #ffcc00 #999900 #666600 #333300 #99ff99 #66ff99 #33ff33 #33cc00 #009900 #006600 #003300 #99ffff #33ffff #66cccc #00cccc #339999 #336666 #003333 #ccffff #66ffff #33ccff #3366ff #3333ff #000099 #000066 #ccccff #9999ff #6666cc #6633ff #6600cc #333399 #330099 #ffccff #ff99ff #cc66cc #cc33cc #993399 #663366 #330033".split(" ");goog.events.FocusHandler=function(a){goog.events.EventTarget.call(this);this.element_=a;a=goog.userAgent.IE?"focusout":"blur";this.listenKeyIn_=goog.events.listen(this.element_,goog.userAgent.IE?"focusin":"focus",this,!goog.userAgent.IE);this.listenKeyOut_=goog.events.listen(this.element_,a,this,!goog.userAgent.IE)};goog.inherits(goog.events.FocusHandler,goog.events.EventTarget);goog.events.FocusHandler.EventType={FOCUSIN:"focusin",FOCUSOUT:"focusout"};
-goog.events.FocusHandler.prototype.handleEvent=function(a){var b=a.getBrowserEvent(),b=new goog.events.BrowserEvent(b);b.type="focusin"==a.type||"focus"==a.type?goog.events.FocusHandler.EventType.FOCUSIN:goog.events.FocusHandler.EventType.FOCUSOUT;this.dispatchEvent(b)};goog.events.FocusHandler.prototype.disposeInternal=function(){goog.events.FocusHandler.superClass_.disposeInternal.call(this);goog.events.unlistenByKey(this.listenKeyIn_);goog.events.unlistenByKey(this.listenKeyOut_);delete this.element_};goog.structs={};goog.structs.getCount=function(a){return"function"==typeof a.getCount?a.getCount():goog.isArrayLike(a)||goog.isString(a)?a.length:goog.object.getCount(a)};goog.structs.getValues=function(a){if("function"==typeof a.getValues)return a.getValues();if(goog.isString(a))return a.split("");if(goog.isArrayLike(a)){for(var b=[],c=a.length,d=0;d<c;d++)b.push(a[d]);return b}return goog.object.getValues(a)};
-goog.structs.getKeys=function(a){if("function"==typeof a.getKeys)return a.getKeys();if("function"!=typeof a.getValues){if(goog.isArrayLike(a)||goog.isString(a)){var b=[];a=a.length;for(var c=0;c<a;c++)b.push(c);return b}return goog.object.getKeys(a)}};goog.structs.contains=function(a,b){return"function"==typeof a.contains?a.contains(b):"function"==typeof a.containsValue?a.containsValue(b):goog.isArrayLike(a)||goog.isString(a)?goog.array.contains(a,b):goog.object.containsValue(a,b)};
-goog.structs.isEmpty=function(a){return"function"==typeof a.isEmpty?a.isEmpty():goog.isArrayLike(a)||goog.isString(a)?goog.array.isEmpty(a):goog.object.isEmpty(a)};goog.structs.clear=function(a){"function"==typeof a.clear?a.clear():goog.isArrayLike(a)?goog.array.clear(a):goog.object.clear(a)};
-goog.structs.forEach=function(a,b,c){if("function"==typeof a.forEach)a.forEach(b,c);else if(goog.isArrayLike(a)||goog.isString(a))goog.array.forEach(a,b,c);else for(var d=goog.structs.getKeys(a),e=goog.structs.getValues(a),f=e.length,g=0;g<f;g++)b.call(c,e[g],d&&d[g],a)};
-goog.structs.filter=function(a,b,c){if("function"==typeof a.filter)return a.filter(b,c);if(goog.isArrayLike(a)||goog.isString(a))return goog.array.filter(a,b,c);var d,e=goog.structs.getKeys(a),f=goog.structs.getValues(a),g=f.length;if(e){d={};for(var h=0;h<g;h++)b.call(c,f[h],e[h],a)&&(d[e[h]]=f[h])}else for(d=[],h=0;h<g;h++)b.call(c,f[h],void 0,a)&&d.push(f[h]);return d};
-goog.structs.map=function(a,b,c){if("function"==typeof a.map)return a.map(b,c);if(goog.isArrayLike(a)||goog.isString(a))return goog.array.map(a,b,c);var d,e=goog.structs.getKeys(a),f=goog.structs.getValues(a),g=f.length;if(e){d={};for(var h=0;h<g;h++)d[e[h]]=b.call(c,f[h],e[h],a)}else for(d=[],h=0;h<g;h++)d[h]=b.call(c,f[h],void 0,a);return d};
-goog.structs.some=function(a,b,c){if("function"==typeof a.some)return a.some(b,c);if(goog.isArrayLike(a)||goog.isString(a))return goog.array.some(a,b,c);for(var d=goog.structs.getKeys(a),e=goog.structs.getValues(a),f=e.length,g=0;g<f;g++)if(b.call(c,e[g],d&&d[g],a))return!0;return!1};
-goog.structs.every=function(a,b,c){if("function"==typeof a.every)return a.every(b,c);if(goog.isArrayLike(a)||goog.isString(a))return goog.array.every(a,b,c);for(var d=goog.structs.getKeys(a),e=goog.structs.getValues(a),f=e.length,g=0;g<f;g++)if(!b.call(c,e[g],d&&d[g],a))return!1;return!0};goog.structs.Collection=function(){};goog.structs.Map=function(a,b){this.map_={};this.keys_=[];this.version_=this.count_=0;var c=arguments.length;if(1<c){if(c%2)throw Error("Uneven number of arguments");for(var d=0;d<c;d+=2)this.set(arguments[d],arguments[d+1])}else a&&this.addAll(a)};goog.structs.Map.prototype.getCount=function(){return this.count_};goog.structs.Map.prototype.getValues=function(){this.cleanupKeysArray_();for(var a=[],b=0;b<this.keys_.length;b++)a.push(this.map_[this.keys_[b]]);return a};
-goog.structs.Map.prototype.getKeys=function(){this.cleanupKeysArray_();return this.keys_.concat()};goog.structs.Map.prototype.containsKey=function(a){return goog.structs.Map.hasKey_(this.map_,a)};goog.structs.Map.prototype.containsValue=function(a){for(var b=0;b<this.keys_.length;b++){var c=this.keys_[b];if(goog.structs.Map.hasKey_(this.map_,c)&&this.map_[c]==a)return!0}return!1};
-goog.structs.Map.prototype.equals=function(a,b){if(this===a)return!0;if(this.count_!=a.getCount())return!1;var c=b||goog.structs.Map.defaultEquals;this.cleanupKeysArray_();for(var d,e=0;d=this.keys_[e];e++)if(!c(this.get(d),a.get(d)))return!1;return!0};goog.structs.Map.defaultEquals=function(a,b){return a===b};goog.structs.Map.prototype.isEmpty=function(){return 0==this.count_};goog.structs.Map.prototype.clear=function(){this.map_={};this.version_=this.count_=this.keys_.length=0};
-goog.structs.Map.prototype.remove=function(a){return goog.structs.Map.hasKey_(this.map_,a)?(delete this.map_[a],this.count_--,this.version_++,this.keys_.length>2*this.count_&&this.cleanupKeysArray_(),!0):!1};
-goog.structs.Map.prototype.cleanupKeysArray_=function(){if(this.count_!=this.keys_.length){for(var a=0,b=0;a<this.keys_.length;){var c=this.keys_[a];goog.structs.Map.hasKey_(this.map_,c)&&(this.keys_[b++]=c);a++}this.keys_.length=b}if(this.count_!=this.keys_.length){for(var d={},b=a=0;a<this.keys_.length;)c=this.keys_[a],goog.structs.Map.hasKey_(d,c)||(this.keys_[b++]=c,d[c]=1),a++;this.keys_.length=b}};
-goog.structs.Map.prototype.get=function(a,b){return goog.structs.Map.hasKey_(this.map_,a)?this.map_[a]:b};goog.structs.Map.prototype.set=function(a,b){goog.structs.Map.hasKey_(this.map_,a)||(this.count_++,this.keys_.push(a),this.version_++);this.map_[a]=b};goog.structs.Map.prototype.addAll=function(a){var b;a instanceof goog.structs.Map?(b=a.getKeys(),a=a.getValues()):(b=goog.object.getKeys(a),a=goog.object.getValues(a));for(var c=0;c<b.length;c++)this.set(b[c],a[c])};
-goog.structs.Map.prototype.clone=function(){return new goog.structs.Map(this)};goog.structs.Map.prototype.transpose=function(){for(var a=new goog.structs.Map,b=0;b<this.keys_.length;b++){var c=this.keys_[b];a.set(this.map_[c],c)}return a};goog.structs.Map.prototype.toObject=function(){this.cleanupKeysArray_();for(var a={},b=0;b<this.keys_.length;b++){var c=this.keys_[b];a[c]=this.map_[c]}return a};goog.structs.Map.prototype.getKeyIterator=function(){return this.__iterator__(!0)};
-goog.structs.Map.prototype.getValueIterator=function(){return this.__iterator__(!1)};goog.structs.Map.prototype.__iterator__=function(a){this.cleanupKeysArray_();var b=0,c=this.keys_,d=this.map_,e=this.version_,f=this,g=new goog.iter.Iterator;g.next=function(){for(;;){if(e!=f.version_)throw Error("The map has changed since the iterator was created");if(b>=c.length)throw goog.iter.StopIteration;var g=c[b++];return a?g:d[g]}};return g};
-goog.structs.Map.hasKey_=function(a,b){return Object.prototype.hasOwnProperty.call(a,b)};goog.structs.Set=function(a){this.map_=new goog.structs.Map;a&&this.addAll(a)};goog.structs.Set.getKey_=function(a){var b=typeof a;return"object"==b&&a||"function"==b?"o"+goog.getUid(a):b.substr(0,1)+a};goog.structs.Set.prototype.getCount=function(){return this.map_.getCount()};goog.structs.Set.prototype.add=function(a){this.map_.set(goog.structs.Set.getKey_(a),a)};goog.structs.Set.prototype.addAll=function(a){a=goog.structs.getValues(a);for(var b=a.length,c=0;c<b;c++)this.add(a[c])};
-goog.structs.Set.prototype.removeAll=function(a){a=goog.structs.getValues(a);for(var b=a.length,c=0;c<b;c++)this.remove(a[c])};goog.structs.Set.prototype.remove=function(a){return this.map_.remove(goog.structs.Set.getKey_(a))};goog.structs.Set.prototype.clear=function(){this.map_.clear()};goog.structs.Set.prototype.isEmpty=function(){return this.map_.isEmpty()};goog.structs.Set.prototype.contains=function(a){return this.map_.containsKey(goog.structs.Set.getKey_(a))};
-goog.structs.Set.prototype.containsAll=function(a){return goog.structs.every(a,this.contains,this)};goog.structs.Set.prototype.intersection=function(a){var b=new goog.structs.Set;a=goog.structs.getValues(a);for(var c=0;c<a.length;c++){var d=a[c];this.contains(d)&&b.add(d)}return b};goog.structs.Set.prototype.difference=function(a){var b=this.clone();b.removeAll(a);return b};goog.structs.Set.prototype.getValues=function(){return this.map_.getValues()};goog.structs.Set.prototype.clone=function(){return new goog.structs.Set(this)};
-goog.structs.Set.prototype.equals=function(a){return this.getCount()==goog.structs.getCount(a)&&this.isSubsetOf(a)};goog.structs.Set.prototype.isSubsetOf=function(a){var b=goog.structs.getCount(a);if(this.getCount()>b)return!1;!(a instanceof goog.structs.Set)&&5<b&&(a=new goog.structs.Set(a));return goog.structs.every(this,function(b){return goog.structs.contains(a,b)})};goog.structs.Set.prototype.__iterator__=function(a){return this.map_.__iterator__(!1)};goog.debug.LOGGING_ENABLED=goog.DEBUG;goog.debug.catchErrors=function(a,b,c){c=c||goog.global;var d=c.onerror,e=!!b;goog.userAgent.WEBKIT&&!goog.userAgent.isVersionOrHigher("535.3")&&(e=!e);c.onerror=function(b,c,h,k,l){d&&d(b,c,h,k,l);a({message:b,fileName:c,line:h,col:k,error:l});return e}};goog.debug.expose=function(a,b){if("undefined"==typeof a)return"undefined";if(null==a)return"NULL";var c=[],d;for(d in a)if(b||!goog.isFunction(a[d])){var e=d+" = ";try{e+=a[d]}catch(f){e+="*** "+f+" ***"}c.push(e)}return c.join("\n")};
-goog.debug.deepExpose=function(a,b){var c=new goog.structs.Set,d=[],e=function(a,g){var h=g+"  ";try{if(goog.isDef(a))if(goog.isNull(a))d.push("NULL");else if(goog.isString(a))d.push('"'+a.replace(/\n/g,"\n"+g)+'"');else if(goog.isFunction(a))d.push(String(a).replace(/\n/g,"\n"+g));else if(goog.isObject(a))if(c.contains(a))d.push("*** reference loop detected ***");else{c.add(a);d.push("{");for(var k in a)if(b||!goog.isFunction(a[k]))d.push("\n"),d.push(h),d.push(k+" = "),e(a[k],h);d.push("\n"+g+"}")}else d.push(a);
-else d.push("undefined")}catch(l){d.push("*** "+l+" ***")}};e(a,"");return d.join("")};goog.debug.exposeArray=function(a){for(var b=[],c=0;c<a.length;c++)goog.isArray(a[c])?b.push(goog.debug.exposeArray(a[c])):b.push(a[c]);return"[ "+b.join(", ")+" ]"};
-goog.debug.exposeException=function(a,b){try{var c=goog.debug.normalizeErrorObject(a);return"Message: "+goog.string.htmlEscape(c.message)+'\nUrl: <a href="view-source:'+c.fileName+'" target="_new">'+c.fileName+"</a>\nLine: "+c.lineNumber+"\n\nBrowser stack:\n"+goog.string.htmlEscape(c.stack+"-> ")+"[end]\n\nJS stack traversal:\n"+goog.string.htmlEscape(goog.debug.getStacktrace(b)+"-> ")}catch(d){return"Exception trying to expose exception! You win, we lose. "+d}};
-goog.debug.normalizeErrorObject=function(a){var b=goog.getObjectByName("window.location.href");if(goog.isString(a))return{message:a,name:"Unknown error",lineNumber:"Not available",fileName:b,stack:"Not available"};var c,d,e=!1;try{c=a.lineNumber||a.line||"Not available"}catch(f){c="Not available",e=!0}try{d=a.fileName||a.filename||a.sourceURL||goog.global.$googDebugFname||b}catch(g){d="Not available",e=!0}return!e&&a.lineNumber&&a.fileName&&a.stack&&a.message&&a.name?a:{message:a.message||"Not available",
-name:a.name||"UnknownError",lineNumber:c,fileName:d,stack:a.stack||"Not available"}};goog.debug.enhanceError=function(a,b){var c="string"==typeof a?Error(a):a;c.stack||(c.stack=goog.debug.getStacktrace(arguments.callee.caller));if(b){for(var d=0;c["message"+d];)++d;c["message"+d]=String(b)}return c};
-goog.debug.getStacktraceSimple=function(a){for(var b=[],c=arguments.callee.caller,d=0;c&&(!a||d<a);){b.push(goog.debug.getFunctionName(c));b.push("()\n");try{c=c.caller}catch(e){b.push("[exception trying to get caller]\n");break}d++;if(d>=goog.debug.MAX_STACK_DEPTH){b.push("[...long stack...]");break}}a&&d>=a?b.push("[...reached max depth limit...]"):b.push("[end]");return b.join("")};goog.debug.MAX_STACK_DEPTH=50;
-goog.debug.getStacktrace=function(a){return goog.debug.getStacktraceHelper_(a||arguments.callee.caller,[])};
-goog.debug.getStacktraceHelper_=function(a,b){var c=[];if(goog.array.contains(b,a))c.push("[...circular reference...]");else if(a&&b.length<goog.debug.MAX_STACK_DEPTH){c.push(goog.debug.getFunctionName(a)+"(");for(var d=a.arguments,e=0;e<d.length;e++){0<e&&c.push(", ");var f;f=d[e];switch(typeof f){case "object":f=f?"object":"null";break;case "string":break;case "number":f=String(f);break;case "boolean":f=f?"true":"false";break;case "function":f=(f=goog.debug.getFunctionName(f))?f:"[fn]";break;default:f=
-typeof f}40<f.length&&(f=f.substr(0,40)+"...");c.push(f)}b.push(a);c.push(")\n");try{c.push(goog.debug.getStacktraceHelper_(a.caller,b))}catch(g){c.push("[exception trying to get caller]\n")}}else a?c.push("[...long stack...]"):c.push("[end]");return c.join("")};goog.debug.setFunctionResolver=function(a){goog.debug.fnNameResolver_=a};
-goog.debug.getFunctionName=function(a){if(goog.debug.fnNameCache_[a])return goog.debug.fnNameCache_[a];if(goog.debug.fnNameResolver_){var b=goog.debug.fnNameResolver_(a);if(b)return goog.debug.fnNameCache_[a]=b}a=String(a);goog.debug.fnNameCache_[a]||(b=/function ([^\(]+)/.exec(a),goog.debug.fnNameCache_[a]=b?b[1]:"[Anonymous]");return goog.debug.fnNameCache_[a]};
-goog.debug.makeWhitespaceVisible=function(a){return a.replace(/ /g,"[_]").replace(/\f/g,"[f]").replace(/\n/g,"[n]\n").replace(/\r/g,"[r]").replace(/\t/g,"[t]")};goog.debug.fnNameCache_={};goog.debug.LogRecord=function(a,b,c,d,e){this.reset(a,b,c,d,e)};goog.debug.LogRecord.prototype.sequenceNumber_=0;goog.debug.LogRecord.prototype.exception_=null;goog.debug.LogRecord.prototype.exceptionText_=null;goog.debug.LogRecord.ENABLE_SEQUENCE_NUMBERS=!0;goog.debug.LogRecord.nextSequenceNumber_=0;
-goog.debug.LogRecord.prototype.reset=function(a,b,c,d,e){goog.debug.LogRecord.ENABLE_SEQUENCE_NUMBERS&&(this.sequenceNumber_="number"==typeof e?e:goog.debug.LogRecord.nextSequenceNumber_++);this.time_=d||goog.now();this.level_=a;this.msg_=b;this.loggerName_=c;delete this.exception_;delete this.exceptionText_};goog.debug.LogRecord.prototype.getLoggerName=function(){return this.loggerName_};goog.debug.LogRecord.prototype.getException=function(){return this.exception_};
-goog.debug.LogRecord.prototype.setException=function(a){this.exception_=a};goog.debug.LogRecord.prototype.getExceptionText=function(){return this.exceptionText_};goog.debug.LogRecord.prototype.setExceptionText=function(a){this.exceptionText_=a};goog.debug.LogRecord.prototype.setLoggerName=function(a){this.loggerName_=a};goog.debug.LogRecord.prototype.getLevel=function(){return this.level_};goog.debug.LogRecord.prototype.setLevel=function(a){this.level_=a};
-goog.debug.LogRecord.prototype.getMessage=function(){return this.msg_};goog.debug.LogRecord.prototype.setMessage=function(a){this.msg_=a};goog.debug.LogRecord.prototype.getMillis=function(){return this.time_};goog.debug.LogRecord.prototype.setMillis=function(a){this.time_=a};goog.debug.LogRecord.prototype.getSequenceNumber=function(){return this.sequenceNumber_};goog.debug.LogBuffer=function(){goog.asserts.assert(goog.debug.LogBuffer.isBufferingEnabled(),"Cannot use goog.debug.LogBuffer without defining goog.debug.LogBuffer.CAPACITY.");this.clear()};goog.debug.LogBuffer.getInstance=function(){goog.debug.LogBuffer.instance_||(goog.debug.LogBuffer.instance_=new goog.debug.LogBuffer);return goog.debug.LogBuffer.instance_};goog.debug.LogBuffer.CAPACITY=0;
-goog.debug.LogBuffer.prototype.addRecord=function(a,b,c){var d=(this.curIndex_+1)%goog.debug.LogBuffer.CAPACITY;this.curIndex_=d;if(this.isFull_)return d=this.buffer_[d],d.reset(a,b,c),d;this.isFull_=d==goog.debug.LogBuffer.CAPACITY-1;return this.buffer_[d]=new goog.debug.LogRecord(a,b,c)};goog.debug.LogBuffer.isBufferingEnabled=function(){return 0<goog.debug.LogBuffer.CAPACITY};
-goog.debug.LogBuffer.prototype.clear=function(){this.buffer_=Array(goog.debug.LogBuffer.CAPACITY);this.curIndex_=-1;this.isFull_=!1};goog.debug.LogBuffer.prototype.forEachRecord=function(a){var b=this.buffer_;if(b[0]){var c=this.curIndex_,d=this.isFull_?c:-1;do d=(d+1)%goog.debug.LogBuffer.CAPACITY,a(b[d]);while(d!=c)}};goog.debug.Logger=function(a){this.name_=a};goog.debug.Logger.prototype.parent_=null;goog.debug.Logger.prototype.level_=null;goog.debug.Logger.prototype.children_=null;goog.debug.Logger.prototype.handlers_=null;goog.debug.Logger.ENABLE_HIERARCHY=!0;goog.debug.Logger.ENABLE_HIERARCHY||(goog.debug.Logger.rootHandlers_=[]);goog.debug.Logger.Level=function(a,b){this.name=a;this.value=b};goog.debug.Logger.Level.prototype.toString=function(){return this.name};
-goog.debug.Logger.Level.OFF=new goog.debug.Logger.Level("OFF",Infinity);goog.debug.Logger.Level.SHOUT=new goog.debug.Logger.Level("SHOUT",1200);goog.debug.Logger.Level.SEVERE=new goog.debug.Logger.Level("SEVERE",1E3);goog.debug.Logger.Level.WARNING=new goog.debug.Logger.Level("WARNING",900);goog.debug.Logger.Level.INFO=new goog.debug.Logger.Level("INFO",800);goog.debug.Logger.Level.CONFIG=new goog.debug.Logger.Level("CONFIG",700);goog.debug.Logger.Level.FINE=new goog.debug.Logger.Level("FINE",500);
-goog.debug.Logger.Level.FINER=new goog.debug.Logger.Level("FINER",400);goog.debug.Logger.Level.FINEST=new goog.debug.Logger.Level("FINEST",300);goog.debug.Logger.Level.ALL=new goog.debug.Logger.Level("ALL",0);
-goog.debug.Logger.Level.PREDEFINED_LEVELS=[goog.debug.Logger.Level.OFF,goog.debug.Logger.Level.SHOUT,goog.debug.Logger.Level.SEVERE,goog.debug.Logger.Level.WARNING,goog.debug.Logger.Level.INFO,goog.debug.Logger.Level.CONFIG,goog.debug.Logger.Level.FINE,goog.debug.Logger.Level.FINER,goog.debug.Logger.Level.FINEST,goog.debug.Logger.Level.ALL];goog.debug.Logger.Level.predefinedLevelsCache_=null;
-goog.debug.Logger.Level.createPredefinedLevelsCache_=function(){goog.debug.Logger.Level.predefinedLevelsCache_={};for(var a=0,b;b=goog.debug.Logger.Level.PREDEFINED_LEVELS[a];a++)goog.debug.Logger.Level.predefinedLevelsCache_[b.value]=b,goog.debug.Logger.Level.predefinedLevelsCache_[b.name]=b};
-goog.debug.Logger.Level.getPredefinedLevel=function(a){goog.debug.Logger.Level.predefinedLevelsCache_||goog.debug.Logger.Level.createPredefinedLevelsCache_();return goog.debug.Logger.Level.predefinedLevelsCache_[a]||null};
-goog.debug.Logger.Level.getPredefinedLevelByValue=function(a){goog.debug.Logger.Level.predefinedLevelsCache_||goog.debug.Logger.Level.createPredefinedLevelsCache_();if(a in goog.debug.Logger.Level.predefinedLevelsCache_)return goog.debug.Logger.Level.predefinedLevelsCache_[a];for(var b=0;b<goog.debug.Logger.Level.PREDEFINED_LEVELS.length;++b){var c=goog.debug.Logger.Level.PREDEFINED_LEVELS[b];if(c.value<=a)return c}return null};goog.debug.Logger.getLogger=function(a){return goog.debug.LogManager.getLogger(a)};
-goog.debug.Logger.logToProfilers=function(a){goog.global.console&&(goog.global.console.timeStamp?goog.global.console.timeStamp(a):goog.global.console.markTimeline&&goog.global.console.markTimeline(a));goog.global.msWriteProfilerMark&&goog.global.msWriteProfilerMark(a)};goog.debug.Logger.prototype.getName=function(){return this.name_};
-goog.debug.Logger.prototype.addHandler=function(a){goog.debug.LOGGING_ENABLED&&(goog.debug.Logger.ENABLE_HIERARCHY?(this.handlers_||(this.handlers_=[]),this.handlers_.push(a)):(goog.asserts.assert(!this.name_,"Cannot call addHandler on a non-root logger when goog.debug.Logger.ENABLE_HIERARCHY is false."),goog.debug.Logger.rootHandlers_.push(a)))};
-goog.debug.Logger.prototype.removeHandler=function(a){if(goog.debug.LOGGING_ENABLED){var b=goog.debug.Logger.ENABLE_HIERARCHY?this.handlers_:goog.debug.Logger.rootHandlers_;return!!b&&goog.array.remove(b,a)}return!1};goog.debug.Logger.prototype.getParent=function(){return this.parent_};goog.debug.Logger.prototype.getChildren=function(){this.children_||(this.children_={});return this.children_};
-goog.debug.Logger.prototype.setLevel=function(a){goog.debug.LOGGING_ENABLED&&(goog.debug.Logger.ENABLE_HIERARCHY?this.level_=a:(goog.asserts.assert(!this.name_,"Cannot call setLevel() on a non-root logger when goog.debug.Logger.ENABLE_HIERARCHY is false."),goog.debug.Logger.rootLevel_=a))};goog.debug.Logger.prototype.getLevel=function(){return goog.debug.LOGGING_ENABLED?this.level_:goog.debug.Logger.Level.OFF};
-goog.debug.Logger.prototype.getEffectiveLevel=function(){if(!goog.debug.LOGGING_ENABLED)return goog.debug.Logger.Level.OFF;if(!goog.debug.Logger.ENABLE_HIERARCHY)return goog.debug.Logger.rootLevel_;if(this.level_)return this.level_;if(this.parent_)return this.parent_.getEffectiveLevel();goog.asserts.fail("Root logger has no level set.");return null};goog.debug.Logger.prototype.isLoggable=function(a){return goog.debug.LOGGING_ENABLED&&a.value>=this.getEffectiveLevel().value};
-goog.debug.Logger.prototype.log=function(a,b,c){goog.debug.LOGGING_ENABLED&&this.isLoggable(a)&&this.doLogRecord_(this.getLogRecord(a,b,c))};goog.debug.Logger.prototype.getLogRecord=function(a,b,c){var d=goog.debug.LogBuffer.isBufferingEnabled()?goog.debug.LogBuffer.getInstance().addRecord(a,b,this.name_):new goog.debug.LogRecord(a,String(b),this.name_);c&&(d.setException(c),d.setExceptionText(goog.debug.exposeException(c,arguments.callee.caller)));return d};
-goog.debug.Logger.prototype.shout=function(a,b){goog.debug.LOGGING_ENABLED&&this.log(goog.debug.Logger.Level.SHOUT,a,b)};goog.debug.Logger.prototype.severe=function(a,b){goog.debug.LOGGING_ENABLED&&this.log(goog.debug.Logger.Level.SEVERE,a,b)};goog.debug.Logger.prototype.warning=function(a,b){goog.debug.LOGGING_ENABLED&&this.log(goog.debug.Logger.Level.WARNING,a,b)};goog.debug.Logger.prototype.info=function(a,b){goog.debug.LOGGING_ENABLED&&this.log(goog.debug.Logger.Level.INFO,a,b)};
-goog.debug.Logger.prototype.config=function(a,b){goog.debug.LOGGING_ENABLED&&this.log(goog.debug.Logger.Level.CONFIG,a,b)};goog.debug.Logger.prototype.fine=function(a,b){goog.debug.LOGGING_ENABLED&&this.log(goog.debug.Logger.Level.FINE,a,b)};goog.debug.Logger.prototype.finer=function(a,b){goog.debug.LOGGING_ENABLED&&this.log(goog.debug.Logger.Level.FINER,a,b)};goog.debug.Logger.prototype.finest=function(a,b){goog.debug.LOGGING_ENABLED&&this.log(goog.debug.Logger.Level.FINEST,a,b)};
-goog.debug.Logger.prototype.logRecord=function(a){goog.debug.LOGGING_ENABLED&&this.isLoggable(a.getLevel())&&this.doLogRecord_(a)};goog.debug.Logger.prototype.doLogRecord_=function(a){goog.debug.Logger.logToProfilers("log:"+a.getMessage());if(goog.debug.Logger.ENABLE_HIERARCHY)for(var b=this;b;)b.callPublish_(a),b=b.getParent();else for(var b=0,c;c=goog.debug.Logger.rootHandlers_[b++];)c(a)};goog.debug.Logger.prototype.callPublish_=function(a){if(this.handlers_)for(var b=0,c;c=this.handlers_[b];b++)c(a)};
-goog.debug.Logger.prototype.setParent_=function(a){this.parent_=a};goog.debug.Logger.prototype.addChild_=function(a,b){this.getChildren()[a]=b};goog.debug.LogManager={};goog.debug.LogManager.loggers_={};goog.debug.LogManager.rootLogger_=null;goog.debug.LogManager.initialize=function(){goog.debug.LogManager.rootLogger_||(goog.debug.LogManager.rootLogger_=new goog.debug.Logger(""),goog.debug.LogManager.loggers_[""]=goog.debug.LogManager.rootLogger_,goog.debug.LogManager.rootLogger_.setLevel(goog.debug.Logger.Level.CONFIG))};
-goog.debug.LogManager.getLoggers=function(){return goog.debug.LogManager.loggers_};goog.debug.LogManager.getRoot=function(){goog.debug.LogManager.initialize();return goog.debug.LogManager.rootLogger_};goog.debug.LogManager.getLogger=function(a){goog.debug.LogManager.initialize();return goog.debug.LogManager.loggers_[a]||goog.debug.LogManager.createLogger_(a)};
-goog.debug.LogManager.createFunctionForCatchErrors=function(a){return function(b){(a||goog.debug.LogManager.getRoot()).severe("Error: "+b.message+" ("+b.fileName+" @ Line: "+b.line+")")}};goog.debug.LogManager.createLogger_=function(a){var b=new goog.debug.Logger(a);if(goog.debug.Logger.ENABLE_HIERARCHY){var c=a.lastIndexOf("."),d=a.substr(0,c),c=a.substr(c+1),d=goog.debug.LogManager.getLogger(d);d.addChild_(c,b);b.setParent_(d)}return goog.debug.LogManager.loggers_[a]=b};goog.log={};goog.log.ENABLED=goog.debug.LOGGING_ENABLED;goog.log.Logger=goog.debug.Logger;goog.log.Level=goog.debug.Logger.Level;goog.log.LogRecord=goog.debug.LogRecord;goog.log.getLogger=function(a,b){if(goog.log.ENABLED){var c=goog.debug.Logger.getLogger(a);b&&c&&c.setLevel(b);return c}return null};goog.log.addHandler=function(a,b){goog.log.ENABLED&&a&&a.addHandler(b)};goog.log.removeHandler=function(a,b){return goog.log.ENABLED&&a?a.removeHandler(b):!1};
-goog.log.log=function(a,b,c,d){goog.log.ENABLED&&a&&a.log(b,c,d)};goog.log.error=function(a,b,c){goog.log.ENABLED&&a&&a.severe(b,c)};goog.log.warning=function(a,b,c){goog.log.ENABLED&&a&&a.warning(b,c)};goog.log.info=function(a,b,c){goog.log.ENABLED&&a&&a.info(b,c)};goog.log.fine=function(a,b,c){goog.log.ENABLED&&a&&a.fine(b,c)};goog.string.StringBuffer=function(a,b){null!=a&&this.append.apply(this,arguments)};goog.string.StringBuffer.prototype.buffer_="";goog.string.StringBuffer.prototype.set=function(a){this.buffer_=""+a};goog.string.StringBuffer.prototype.append=function(a,b,c){this.buffer_+=a;if(null!=b)for(var d=1;d<arguments.length;d++)this.buffer_+=arguments[d];return this};goog.string.StringBuffer.prototype.clear=function(){this.buffer_=""};goog.string.StringBuffer.prototype.getLength=function(){return this.buffer_.length};
-goog.string.StringBuffer.prototype.toString=function(){return this.buffer_};goog.ui.tree={};goog.ui.tree.BaseNode=function(a,b,c){goog.ui.Component.call(this,c);this.config_=b||goog.ui.tree.TreeControl.defaultConfig;this.html_=a};goog.inherits(goog.ui.tree.BaseNode,goog.ui.Component);goog.ui.tree.BaseNode.EventType={BEFORE_EXPAND:"beforeexpand",EXPAND:"expand",BEFORE_COLLAPSE:"beforecollapse",COLLAPSE:"collapse"};goog.ui.tree.BaseNode.allNodes={};goog.ui.tree.BaseNode.prototype.selected_=!1;goog.ui.tree.BaseNode.prototype.expanded_=!1;
-goog.ui.tree.BaseNode.prototype.toolTip_=null;goog.ui.tree.BaseNode.prototype.afterLabelHtml_="";goog.ui.tree.BaseNode.prototype.isUserCollapsible_=!0;goog.ui.tree.BaseNode.prototype.depth_=-1;goog.ui.tree.BaseNode.prototype.disposeInternal=function(){goog.ui.tree.BaseNode.superClass_.disposeInternal.call(this);this.tree_&&(this.tree_.removeNode(this),this.tree_=null);this.setElementInternal(null)};
-goog.ui.tree.BaseNode.prototype.initAccessibility=function(){var a=this.getElement();if(a){var b=this.getLabelElement();b&&!b.id&&(b.id=this.getId()+".label");goog.a11y.aria.setRole(a,"treeitem");goog.a11y.aria.setState(a,"selected",!1);goog.a11y.aria.setState(a,"expanded",!1);goog.a11y.aria.setState(a,"level",this.getDepth());b&&goog.a11y.aria.setState(a,"labelledby",b.id);(a=this.getIconElement())&&goog.a11y.aria.setRole(a,"presentation");(a=this.getExpandIconElement())&&goog.a11y.aria.setRole(a,
-"presentation");if(a=this.getChildrenElement())if(goog.a11y.aria.setRole(a,"group"),a.hasChildNodes())for(a=this.getChildCount(),b=1;b<=a;b++){var c=this.getChildAt(b-1).getElement();goog.asserts.assert(c,"The child element cannot be null");goog.a11y.aria.setState(c,"setsize",a);goog.a11y.aria.setState(c,"posinset",b)}}};goog.ui.tree.BaseNode.prototype.createDom=function(){var a=new goog.string.StringBuffer;this.toHtml(a);a=this.getDomHelper().htmlToDocumentFragment(a.toString());this.setElementInternal(a)};
-goog.ui.tree.BaseNode.prototype.enterDocument=function(){goog.ui.tree.BaseNode.superClass_.enterDocument.call(this);goog.ui.tree.BaseNode.allNodes[this.getId()]=this;this.initAccessibility()};goog.ui.tree.BaseNode.prototype.exitDocument=function(){goog.ui.tree.BaseNode.superClass_.exitDocument.call(this);delete goog.ui.tree.BaseNode.allNodes[this.getId()]};
-goog.ui.tree.BaseNode.prototype.addChildAt=function(a,b,c){goog.asserts.assert(!a.getParent());c=this.getChildAt(b-1);var d=this.getChildAt(b);goog.ui.tree.BaseNode.superClass_.addChildAt.call(this,a,b);a.previousSibling_=c;a.nextSibling_=d;c?c.nextSibling_=a:this.firstChild_=a;d?d.previousSibling_=a:this.lastChild_=a;(b=this.getTree())&&a.setTreeInternal(b);a.setDepth_(this.getDepth()+1);if(this.getElement()&&(this.updateExpandIcon(),this.getExpanded())){b=this.getChildrenElement();a.getElement()||
-a.createDom();var e=a.getElement(),f=d&&d.getElement();b.insertBefore(e,f);this.isInDocument()&&a.enterDocument();d||(c?c.updateExpandIcon():(goog.style.setElementShown(b,!0),this.setExpanded(this.getExpanded())))}};goog.ui.tree.BaseNode.prototype.add=function(a,b){goog.asserts.assert(!b||b.getParent()==this,"Can only add nodes before siblings");a.getParent()&&a.getParent().removeChild(a);this.addChildAt(a,b?this.indexOfChild(b):this.getChildCount());return a};
-goog.ui.tree.BaseNode.prototype.removeChild=function(a,b){var c=this.getTree(),d=c?c.getSelectedItem():null;if(d==a||a.contains(d))c.hasFocus()?(this.select(),goog.Timer.callOnce(this.onTimeoutSelect_,10,this)):this.select();goog.ui.tree.BaseNode.superClass_.removeChild.call(this,a);this.lastChild_==a&&(this.lastChild_=a.previousSibling_);this.firstChild_==a&&(this.firstChild_=a.nextSibling_);a.previousSibling_&&(a.previousSibling_.nextSibling_=a.nextSibling_);a.nextSibling_&&(a.nextSibling_.previousSibling_=
-a.previousSibling_);d=a.isLastSibling();a.tree_=null;a.depth_=-1;if(c&&(c.removeNode(this),this.isInDocument())){c=this.getChildrenElement();if(a.isInDocument()){var e=a.getElement();c.removeChild(e);a.exitDocument()}d&&(d=this.getLastChild())&&d.updateExpandIcon();this.hasChildren()||(c.style.display="none",this.updateExpandIcon(),this.updateIcon_())}return a};goog.ui.tree.BaseNode.prototype.remove=goog.ui.tree.BaseNode.prototype.removeChild;goog.ui.tree.BaseNode.prototype.onTimeoutSelect_=function(){this.select()};
-goog.ui.tree.BaseNode.prototype.getDepth=function(){var a=this.depth_;0>a&&(a=this.computeDepth_(),this.setDepth_(a));return a};goog.ui.tree.BaseNode.prototype.computeDepth_=function(){var a=this.getParent();return a?a.getDepth()+1:0};goog.ui.tree.BaseNode.prototype.setDepth_=function(a){if(a!=this.depth_){this.depth_=a;var b=this.getRowElement();if(b){var c=this.getPixelIndent_()+"px";this.isRightToLeft()?b.style.paddingRight=c:b.style.paddingLeft=c}this.forEachChild(function(b){b.setDepth_(a+1)})}};
-goog.ui.tree.BaseNode.prototype.contains=function(a){for(;a;){if(a==this)return!0;a=a.getParent()}return!1};goog.ui.tree.BaseNode.EMPTY_CHILDREN_=[];goog.ui.tree.BaseNode.prototype.getChildren=function(){var a=[];this.forEachChild(function(b){a.push(b)});return a};goog.ui.tree.BaseNode.prototype.getFirstChild=function(){return this.getChildAt(0)};goog.ui.tree.BaseNode.prototype.getLastChild=function(){return this.getChildAt(this.getChildCount()-1)};
-goog.ui.tree.BaseNode.prototype.getPreviousSibling=function(){return this.previousSibling_};goog.ui.tree.BaseNode.prototype.getNextSibling=function(){return this.nextSibling_};goog.ui.tree.BaseNode.prototype.isLastSibling=function(){return!this.nextSibling_};goog.ui.tree.BaseNode.prototype.isSelected=function(){return this.selected_};goog.ui.tree.BaseNode.prototype.select=function(){var a=this.getTree();a&&a.setSelectedItem(this)};goog.ui.tree.BaseNode.prototype.deselect=goog.nullFunction;
-goog.ui.tree.BaseNode.prototype.setSelectedInternal=function(a){if(this.selected_!=a){this.selected_=a;this.updateRow();var b=this.getElement();b&&(goog.a11y.aria.setState(b,"selected",a),a&&(a=this.getTree().getElement(),goog.asserts.assert(a,"The DOM element for the tree cannot be null"),goog.a11y.aria.setState(a,"activedescendant",this.getId())))}};goog.ui.tree.BaseNode.prototype.getExpanded=function(){return this.expanded_};
-goog.ui.tree.BaseNode.prototype.setExpandedInternal=function(a){this.expanded_=a};
-goog.ui.tree.BaseNode.prototype.setExpanded=function(a){var b=a!=this.expanded_;if(!b||this.dispatchEvent(a?goog.ui.tree.BaseNode.EventType.BEFORE_EXPAND:goog.ui.tree.BaseNode.EventType.BEFORE_COLLAPSE)){var c;this.expanded_=a;c=this.getTree();var d=this.getElement();if(this.hasChildren()){if(!a&&c&&this.contains(c.getSelectedItem())&&this.select(),d){if(c=this.getChildrenElement())if(goog.style.setElementShown(c,a),a&&this.isInDocument()&&!c.hasChildNodes()){var e=new goog.string.StringBuffer;this.forEachChild(function(a){a.toHtml(e)});
-c.innerHTML=e.toString();this.forEachChild(function(a){a.enterDocument()})}this.updateExpandIcon()}}else(c=this.getChildrenElement())&&goog.style.setElementShown(c,!1);d&&(this.updateIcon_(),goog.a11y.aria.setState(d,"expanded",a));b&&this.dispatchEvent(a?goog.ui.tree.BaseNode.EventType.EXPAND:goog.ui.tree.BaseNode.EventType.COLLAPSE)}};goog.ui.tree.BaseNode.prototype.toggle=function(){this.setExpanded(!this.getExpanded())};goog.ui.tree.BaseNode.prototype.expand=function(){this.setExpanded(!0)};
-goog.ui.tree.BaseNode.prototype.collapse=function(){this.setExpanded(!1)};goog.ui.tree.BaseNode.prototype.collapseChildren=function(){this.forEachChild(function(a){a.collapseAll()})};goog.ui.tree.BaseNode.prototype.collapseAll=function(){this.collapseChildren();this.collapse()};goog.ui.tree.BaseNode.prototype.expandChildren=function(){this.forEachChild(function(a){a.expandAll()})};goog.ui.tree.BaseNode.prototype.expandAll=function(){this.expandChildren();this.expand()};
-goog.ui.tree.BaseNode.prototype.reveal=function(){var a=this.getParent();a&&(a.setExpanded(!0),a.reveal())};goog.ui.tree.BaseNode.prototype.setIsUserCollapsible=function(a){(this.isUserCollapsible_=a)||this.expand();this.getElement()&&this.updateExpandIcon()};goog.ui.tree.BaseNode.prototype.isUserCollapsible=function(){return this.isUserCollapsible_};
-goog.ui.tree.BaseNode.prototype.toHtml=function(a){var b=this.getTree(),b=!b.getShowLines()||b==this.getParent()&&!b.getShowRootLines()?this.config_.cssChildrenNoLines:this.config_.cssChildren,c=this.getExpanded()&&this.hasChildren();a.append('<div class="',this.config_.cssItem,'" id="',this.getId(),'">',this.getRowHtml(),'<div class="',b,'" style="',this.getLineStyle(),c?"":"display:none;",'">');c&&this.forEachChild(function(b){b.toHtml(a)});a.append("</div></div>")};
-goog.ui.tree.BaseNode.prototype.getPixelIndent_=function(){return Math.max(0,(this.getDepth()-1)*this.config_.indentWidth)};goog.ui.tree.BaseNode.prototype.getRowHtml=function(){var a=new goog.string.StringBuffer;a.append('<div class="',this.getRowClassName(),'" style="padding-',this.isRightToLeft()?"right:":"left:",this.getPixelIndent_(),'px">',this.getExpandIconHtml(),this.getIconHtml(),this.getLabelHtml(),"</div>");return a.toString()};
-goog.ui.tree.BaseNode.prototype.getRowClassName=function(){var a;a=this.isSelected()?" "+this.config_.cssSelectedRow:"";return this.config_.cssTreeRow+a};goog.ui.tree.BaseNode.prototype.getLabelHtml=function(){var a=this.getToolTip(),b=new goog.string.StringBuffer;b.append('<span class="',this.config_.cssItemLabel,'"',a?' title="'+goog.string.htmlEscape(a)+'"':"",">",this.getHtml(),"</span>","<span>",this.getAfterLabelHtml(),"</span>");return b.toString()};
-goog.ui.tree.BaseNode.prototype.getAfterLabelHtml=function(){return this.afterLabelHtml_};goog.ui.tree.BaseNode.prototype.setAfterLabelHtml=function(a){this.afterLabelHtml_=a;var b=this.getAfterLabelElement();b&&(b.innerHTML=a)};goog.ui.tree.BaseNode.prototype.getIconHtml=function(){return'<span style="display:inline-block" class="'+this.getCalculatedIconClass()+'"></span>'};
-goog.ui.tree.BaseNode.prototype.getExpandIconHtml=function(){return'<span type="expand" style="display:inline-block" class="'+this.getExpandIconClass()+'"></span>'};
-goog.ui.tree.BaseNode.prototype.getExpandIconClass=function(){var a=this.getTree(),b=!a.getShowLines()||a==this.getParent()&&!a.getShowRootLines(),c=this.config_,d=new goog.string.StringBuffer;d.append(c.cssTreeIcon," ",c.cssExpandTreeIcon," ");if(this.hasChildren()){var e=0;a.getShowExpandIcons()&&this.isUserCollapsible_&&(e=this.getExpanded()?2:1);b||(e=this.isLastSibling()?e+4:e+8);switch(e){case 1:d.append(c.cssExpandTreeIconPlus);break;case 2:d.append(c.cssExpandTreeIconMinus);break;case 4:d.append(c.cssExpandTreeIconL);
-break;case 5:d.append(c.cssExpandTreeIconLPlus);break;case 6:d.append(c.cssExpandTreeIconLMinus);break;case 8:d.append(c.cssExpandTreeIconT);break;case 9:d.append(c.cssExpandTreeIconTPlus);break;case 10:d.append(c.cssExpandTreeIconTMinus);break;default:d.append(c.cssExpandTreeIconBlank)}}else b?d.append(c.cssExpandTreeIconBlank):this.isLastSibling()?d.append(c.cssExpandTreeIconL):d.append(c.cssExpandTreeIconT);return d.toString()};
-goog.ui.tree.BaseNode.prototype.getLineStyle=function(){return"background-position:"+this.getLineStyle2()+";"};goog.ui.tree.BaseNode.prototype.getLineStyle2=function(){return(this.isLastSibling()?"-100":(this.getDepth()-1)*this.config_.indentWidth)+"px 0"};goog.ui.tree.BaseNode.prototype.getElement=function(){var a=goog.ui.tree.BaseNode.superClass_.getElement.call(this);a||(a=this.getDomHelper().getElement(this.getId()),this.setElementInternal(a));return a};
-goog.ui.tree.BaseNode.prototype.getRowElement=function(){var a=this.getElement();return a?a.firstChild:null};goog.ui.tree.BaseNode.prototype.getExpandIconElement=function(){var a=this.getRowElement();return a?a.firstChild:null};goog.ui.tree.BaseNode.prototype.getIconElement=function(){var a=this.getRowElement();return a?a.childNodes[1]:null};goog.ui.tree.BaseNode.prototype.getLabelElement=function(){var a=this.getRowElement();return a&&a.lastChild?a.lastChild.previousSibling:null};
-goog.ui.tree.BaseNode.prototype.getAfterLabelElement=function(){var a=this.getRowElement();return a?a.lastChild:null};goog.ui.tree.BaseNode.prototype.getChildrenElement=function(){var a=this.getElement();return a?a.lastChild:null};goog.ui.tree.BaseNode.prototype.setIconClass=function(a){this.iconClass_=a;this.isInDocument()&&this.updateIcon_()};goog.ui.tree.BaseNode.prototype.getIconClass=function(){return this.iconClass_};
-goog.ui.tree.BaseNode.prototype.setExpandedIconClass=function(a){this.expandedIconClass_=a;this.isInDocument()&&this.updateIcon_()};goog.ui.tree.BaseNode.prototype.getExpandedIconClass=function(){return this.expandedIconClass_};goog.ui.tree.BaseNode.prototype.setText=function(a){this.setHtml(goog.string.htmlEscape(a))};goog.ui.tree.BaseNode.prototype.getText=function(){return goog.string.unescapeEntities(this.getHtml())};
-goog.ui.tree.BaseNode.prototype.setHtml=function(a){this.html_=a;var b=this.getLabelElement();b&&(b.innerHTML=a);(a=this.getTree())&&a.setNode(this)};goog.ui.tree.BaseNode.prototype.getHtml=function(){return this.html_};goog.ui.tree.BaseNode.prototype.setToolTip=function(a){this.toolTip_=a;var b=this.getLabelElement();b&&(b.title=a)};goog.ui.tree.BaseNode.prototype.getToolTip=function(){return this.toolTip_};
-goog.ui.tree.BaseNode.prototype.updateRow=function(){var a=this.getRowElement();a&&(a.className=this.getRowClassName())};goog.ui.tree.BaseNode.prototype.updateExpandIcon=function(){var a=this.getExpandIconElement();a&&(a.className=this.getExpandIconClass());if(a=this.getChildrenElement())a.style.backgroundPosition=this.getLineStyle2()};goog.ui.tree.BaseNode.prototype.updateIcon_=function(){this.getIconElement().className=this.getCalculatedIconClass()};
-goog.ui.tree.BaseNode.prototype.onMouseDown=function(a){"expand"==a.target.getAttribute("type")&&this.hasChildren()?this.isUserCollapsible_&&this.toggle():(this.select(),this.updateRow())};goog.ui.tree.BaseNode.prototype.onClick_=goog.events.Event.preventDefault;goog.ui.tree.BaseNode.prototype.onDoubleClick_=function(a){"expand"==a.target.getAttribute("type")&&this.hasChildren()||this.isUserCollapsible_&&this.toggle()};
-goog.ui.tree.BaseNode.prototype.onKeyDown=function(a){var b=!0;switch(a.keyCode){case goog.events.KeyCodes.RIGHT:if(a.altKey)break;this.hasChildren()&&(this.getExpanded()?this.getFirstChild().select():this.setExpanded(!0));break;case goog.events.KeyCodes.LEFT:if(a.altKey)break;if(this.hasChildren()&&this.getExpanded()&&this.isUserCollapsible_)this.setExpanded(!1);else{var c=this.getParent(),d=this.getTree();c&&(d.getShowRootNode()||c!=d)&&c.select()}break;case goog.events.KeyCodes.DOWN:(c=this.getNextShownNode())&&
-c.select();break;case goog.events.KeyCodes.UP:(c=this.getPreviousShownNode())&&c.select();break;default:b=!1}b&&(a.preventDefault(),(d=this.getTree())&&d.clearTypeAhead());return b};goog.ui.tree.BaseNode.prototype.onKeyPress_=function(a){!a.altKey&&a.keyCode>=goog.events.KeyCodes.LEFT&&a.keyCode<=goog.events.KeyCodes.DOWN&&a.preventDefault()};
-goog.ui.tree.BaseNode.prototype.getLastShownDescendant=function(){return this.getExpanded()&&this.hasChildren()?this.getLastChild().getLastShownDescendant():this};goog.ui.tree.BaseNode.prototype.getNextShownNode=function(){if(this.hasChildren()&&this.getExpanded())return this.getFirstChild();for(var a=this,b;a!=this.getTree();){b=a.getNextSibling();if(null!=b)return b;a=a.getParent()}return null};
-goog.ui.tree.BaseNode.prototype.getPreviousShownNode=function(){var a=this.getPreviousSibling();if(null!=a)return a.getLastShownDescendant();var a=this.getParent(),b=this.getTree();return b.getShowRootNode()||a!=b?a:null};goog.ui.tree.BaseNode.prototype.getClientData=goog.ui.tree.BaseNode.prototype.getModel;goog.ui.tree.BaseNode.prototype.setClientData=goog.ui.tree.BaseNode.prototype.setModel;goog.ui.tree.BaseNode.prototype.getConfig=function(){return this.config_};
-goog.ui.tree.BaseNode.prototype.setTreeInternal=function(a){this.tree_!=a&&(this.tree_=a,a.setNode(this),this.forEachChild(function(b){b.setTreeInternal(a)}))};goog.ui.tree.TreeNode=function(a,b,c){goog.ui.tree.BaseNode.call(this,a,b,c)};goog.inherits(goog.ui.tree.TreeNode,goog.ui.tree.BaseNode);goog.ui.tree.TreeNode.prototype.tree_=null;goog.ui.tree.TreeNode.prototype.getTree=function(){if(this.tree_)return this.tree_;var a=this.getParent();return a&&(a=a.getTree())?(this.setTreeInternal(a),a):null};
-goog.ui.tree.TreeNode.prototype.getCalculatedIconClass=function(){var a=this.getExpanded();if(a&&this.expandedIconClass_)return this.expandedIconClass_;if(!a&&this.iconClass_)return this.iconClass_;var b=this.getConfig();if(this.hasChildren()){if(a&&b.cssExpandedFolderIcon)return b.cssTreeIcon+" "+b.cssExpandedFolderIcon;if(!a&&b.cssCollapsedFolderIcon)return b.cssTreeIcon+" "+b.cssCollapsedFolderIcon}else if(b.cssFileIcon)return b.cssTreeIcon+" "+b.cssFileIcon;return""};goog.structs.Trie=function(a){this.value_=void 0;this.childNodes_={};a&&this.setAll(a)};goog.structs.Trie.prototype.set=function(a,b){this.setOrAdd_(a,b,!1)};goog.structs.Trie.prototype.add=function(a,b){this.setOrAdd_(a,b,!0)};
-goog.structs.Trie.prototype.setOrAdd_=function(a,b,c){for(var d=this,e=0;e<a.length;e++){var f=a.charAt(e);d.childNodes_[f]||(d.childNodes_[f]=new goog.structs.Trie);d=d.childNodes_[f]}if(c&&void 0!==d.value_)throw Error('The collection already contains the key "'+a+'"');d.value_=b};goog.structs.Trie.prototype.setAll=function(a){var b=goog.structs.getKeys(a);a=goog.structs.getValues(a);for(var c=0;c<b.length;c++)this.set(b[c],a[c])};
-goog.structs.Trie.prototype.get=function(a){for(var b=this,c=0;c<a.length;c++){var d=a.charAt(c);if(!b.childNodes_[d])return;b=b.childNodes_[d]}return b.value_};goog.structs.Trie.prototype.getKeyAndPrefixes=function(a,b){var c=this,d={},e=b||0;void 0!==c.value_&&(d[e]=c.value_);for(;e<a.length;e++){var f=a.charAt(e);if(!(f in c.childNodes_))break;c=c.childNodes_[f];void 0!==c.value_&&(d[e]=c.value_)}return d};goog.structs.Trie.prototype.getValues=function(){var a=[];this.getValuesInternal_(a);return a};
-goog.structs.Trie.prototype.getValuesInternal_=function(a){void 0!==this.value_&&a.push(this.value_);for(var b in this.childNodes_)this.childNodes_[b].getValuesInternal_(a)};goog.structs.Trie.prototype.getKeys=function(a){var b=[];if(a){for(var c=this,d=0;d<a.length;d++){var e=a.charAt(d);if(!c.childNodes_[e])return[];c=c.childNodes_[e]}c.getKeysInternal_(a,b)}else this.getKeysInternal_("",b);return b};
-goog.structs.Trie.prototype.getKeysInternal_=function(a,b){void 0!==this.value_&&b.push(a);for(var c in this.childNodes_)this.childNodes_[c].getKeysInternal_(a+c,b)};goog.structs.Trie.prototype.containsKey=function(a){return void 0!==this.get(a)};goog.structs.Trie.prototype.containsValue=function(a){if(this.value_===a)return!0;for(var b in this.childNodes_)if(this.childNodes_[b].containsValue(a))return!0;return!1};goog.structs.Trie.prototype.clear=function(){this.childNodes_={};this.value_=void 0};
-goog.structs.Trie.prototype.remove=function(a){for(var b=this,c=[],d=0;d<a.length;d++){var e=a.charAt(d);if(!b.childNodes_[e])throw Error('The collection does not have the key "'+a+'"');c.push([b,e]);b=b.childNodes_[e]}a=b.value_;for(delete b.value_;0<c.length;)if(e=c.pop(),b=e[0],e=e[1],goog.object.isEmpty(b.childNodes_[e].childNodes_))delete b.childNodes_[e];else break;return a};goog.structs.Trie.prototype.clone=function(){return new goog.structs.Trie(this)};
-goog.structs.Trie.prototype.getCount=function(){return goog.structs.getCount(this.getValues())};goog.structs.Trie.prototype.isEmpty=function(){return void 0===this.value_&&goog.structs.isEmpty(this.childNodes_)};goog.ui.tree.TypeAhead=function(){this.nodeMap_=new goog.structs.Trie};goog.ui.tree.TypeAhead.prototype.buffer_="";goog.ui.tree.TypeAhead.prototype.matchingLabels_=null;goog.ui.tree.TypeAhead.prototype.matchingNodes_=null;goog.ui.tree.TypeAhead.prototype.matchingLabelIndex_=0;goog.ui.tree.TypeAhead.prototype.matchingNodeIndex_=0;goog.ui.tree.TypeAhead.Offset={DOWN:1,UP:-1};
-goog.ui.tree.TypeAhead.prototype.handleNavigation=function(a){var b=!1;switch(a.keyCode){case goog.events.KeyCodes.DOWN:case goog.events.KeyCodes.UP:a.ctrlKey&&(this.jumpTo_(a.keyCode==goog.events.KeyCodes.DOWN?goog.ui.tree.TypeAhead.Offset.DOWN:goog.ui.tree.TypeAhead.Offset.UP),b=!0);break;case goog.events.KeyCodes.BACKSPACE:a=this.buffer_.length-1;b=!0;0<a?(this.buffer_=this.buffer_.substring(0,a),this.jumpToLabel_(this.buffer_)):0==a?this.buffer_="":b=!1;break;case goog.events.KeyCodes.ESC:this.buffer_=
-"",b=!0}return b};goog.ui.tree.TypeAhead.prototype.handleTypeAheadChar=function(a){var b=!1;a.ctrlKey||a.altKey||(a=String.fromCharCode(a.charCode||a.keyCode).toLowerCase(),goog.string.isUnicodeChar(a)&&(" "!=a||this.buffer_)&&(this.buffer_+=a,b=this.jumpToLabel_(this.buffer_)));return b};goog.ui.tree.TypeAhead.prototype.setNodeInMap=function(a){var b=a.getText();if(b&&!goog.string.isEmptySafe(b)){var b=b.toLowerCase(),c=this.nodeMap_.get(b);c?c.push(a):this.nodeMap_.set(b,[a])}};
-goog.ui.tree.TypeAhead.prototype.removeNodeFromMap=function(a){var b=a.getText();if(b&&!goog.string.isEmptySafe(b)){var b=b.toLowerCase(),c=this.nodeMap_.get(b);c&&(goog.array.remove(c,a),c.length&&this.nodeMap_.remove(b))}};goog.ui.tree.TypeAhead.prototype.jumpToLabel_=function(a){var b=!1;(a=this.nodeMap_.getKeys(a))&&a.length&&(this.matchingLabelIndex_=this.matchingNodeIndex_=0,b=this.nodeMap_.get(a[0]),b=this.selectMatchingNode_(b))&&(this.matchingLabels_=a);return b};
-goog.ui.tree.TypeAhead.prototype.jumpTo_=function(a){var b=!1,c=this.matchingLabels_;if(c){var b=null,d=!1;if(this.matchingNodes_){var e=this.matchingNodeIndex_+a;0<=e&&e<this.matchingNodes_.length?(this.matchingNodeIndex_=e,b=this.matchingNodes_):d=!0}b||(e=this.matchingLabelIndex_+a,0<=e&&e<c.length&&(this.matchingLabelIndex_=e),c.length>this.matchingLabelIndex_&&(b=this.nodeMap_.get(c[this.matchingLabelIndex_])),b&&b.length&&d&&(this.matchingNodeIndex_=a==goog.ui.tree.TypeAhead.Offset.UP?b.length-
-1:0));if(b=this.selectMatchingNode_(b))this.matchingLabels_=c}return b};goog.ui.tree.TypeAhead.prototype.selectMatchingNode_=function(a){var b;a&&(this.matchingNodeIndex_<a.length&&(b=a[this.matchingNodeIndex_],this.matchingNodes_=a),b&&(b.reveal(),b.select()));return!!b};goog.ui.tree.TypeAhead.prototype.clear=function(){this.buffer_=""};goog.ui.tree.TreeControl=function(a,b,c){goog.ui.tree.BaseNode.call(this,a,b,c);this.setExpandedInternal(!0);this.setSelectedInternal(!0);this.selectedItem_=this;this.typeAhead_=new goog.ui.tree.TypeAhead;if(goog.userAgent.IE)try{document.execCommand("BackgroundImageCache",!1,!0)}catch(d){goog.log.warning(this.logger_,"Failed to enable background image cache")}};goog.inherits(goog.ui.tree.TreeControl,goog.ui.tree.BaseNode);goog.ui.tree.TreeControl.prototype.keyHandler_=null;
-goog.ui.tree.TreeControl.prototype.focusHandler_=null;goog.ui.tree.TreeControl.prototype.logger_=goog.log.getLogger("goog.ui.tree.TreeControl");goog.ui.tree.TreeControl.prototype.focused_=!1;goog.ui.tree.TreeControl.prototype.focusedNode_=null;goog.ui.tree.TreeControl.prototype.showLines_=!0;goog.ui.tree.TreeControl.prototype.showExpandIcons_=!0;goog.ui.tree.TreeControl.prototype.showRootNode_=!0;goog.ui.tree.TreeControl.prototype.showRootLines_=!0;goog.ui.tree.TreeControl.prototype.getTree=function(){return this};
-goog.ui.tree.TreeControl.prototype.getDepth=function(){return 0};goog.ui.tree.TreeControl.prototype.reveal=function(){};goog.ui.tree.TreeControl.prototype.handleFocus_=function(a){this.focused_=!0;goog.dom.classlist.add(this.getElement(),"focused");this.selectedItem_&&this.selectedItem_.select()};goog.ui.tree.TreeControl.prototype.handleBlur_=function(a){this.focused_=!1;goog.dom.classlist.remove(this.getElement(),"focused")};goog.ui.tree.TreeControl.prototype.hasFocus=function(){return this.focused_};
-goog.ui.tree.TreeControl.prototype.getExpanded=function(){return!this.showRootNode_||goog.ui.tree.TreeControl.superClass_.getExpanded.call(this)};goog.ui.tree.TreeControl.prototype.setExpanded=function(a){this.showRootNode_?goog.ui.tree.TreeControl.superClass_.setExpanded.call(this,a):this.setExpandedInternal(a)};goog.ui.tree.TreeControl.prototype.getExpandIconHtml=function(){return""};goog.ui.tree.TreeControl.prototype.getIconElement=function(){var a=this.getRowElement();return a?a.firstChild:null};
-goog.ui.tree.TreeControl.prototype.getExpandIconElement=function(){return null};goog.ui.tree.TreeControl.prototype.updateExpandIcon=function(){};goog.ui.tree.TreeControl.prototype.getRowClassName=function(){return goog.ui.tree.TreeControl.superClass_.getRowClassName.call(this)+(this.showRootNode_?"":" "+this.getConfig().cssHideRoot)};
-goog.ui.tree.TreeControl.prototype.getCalculatedIconClass=function(){var a=this.getExpanded();if(a&&this.expandedIconClass_)return this.expandedIconClass_;if(!a&&this.iconClass_)return this.iconClass_;var b=this.getConfig();return a&&b.cssExpandedRootIcon?b.cssTreeIcon+" "+b.cssExpandedRootIcon:!a&&b.cssCollapsedRootIcon?b.cssTreeIcon+" "+b.cssCollapsedRootIcon:""};
-goog.ui.tree.TreeControl.prototype.setSelectedItem=function(a){if(this.selectedItem_!=a){var b=!1;this.selectedItem_&&(b=this.selectedItem_==this.focusedNode_,this.selectedItem_.setSelectedInternal(!1));if(this.selectedItem_=a)a.setSelectedInternal(!0),b&&a.select();this.dispatchEvent(goog.events.EventType.CHANGE)}};goog.ui.tree.TreeControl.prototype.getSelectedItem=function(){return this.selectedItem_};
-goog.ui.tree.TreeControl.prototype.setShowLines=function(a){this.showLines_!=a&&(this.showLines_=a,this.isInDocument()&&this.updateLinesAndExpandIcons_())};goog.ui.tree.TreeControl.prototype.getShowLines=function(){return this.showLines_};
-goog.ui.tree.TreeControl.prototype.updateLinesAndExpandIcons_=function(){function a(e){var f=e.getChildrenElement();if(f){var g=!c||b==e.getParent()&&!d?e.getConfig().cssChildrenNoLines:e.getConfig().cssChildren;f.className=g;if(f=e.getExpandIconElement())f.className=e.getExpandIconClass()}e.forEachChild(a)}var b=this,c=b.getShowLines(),d=b.getShowRootLines();a(this)};
-goog.ui.tree.TreeControl.prototype.setShowRootLines=function(a){this.showRootLines_!=a&&(this.showRootLines_=a,this.isInDocument()&&this.updateLinesAndExpandIcons_())};goog.ui.tree.TreeControl.prototype.getShowRootLines=function(){return this.showRootLines_};goog.ui.tree.TreeControl.prototype.setShowExpandIcons=function(a){this.showExpandIcons_!=a&&(this.showExpandIcons_=a,this.isInDocument()&&this.updateLinesAndExpandIcons_())};goog.ui.tree.TreeControl.prototype.getShowExpandIcons=function(){return this.showExpandIcons_};
-goog.ui.tree.TreeControl.prototype.setShowRootNode=function(a){if(this.showRootNode_!=a){this.showRootNode_=a;if(this.isInDocument()){var b=this.getRowElement();b&&(b.className=this.getRowClassName())}!a&&this.getSelectedItem()==this&&this.getFirstChild()&&this.setSelectedItem(this.getFirstChild())}};goog.ui.tree.TreeControl.prototype.getShowRootNode=function(){return this.showRootNode_};
-goog.ui.tree.TreeControl.prototype.initAccessibility=function(){goog.ui.tree.TreeControl.superClass_.initAccessibility.call(this);var a=this.getElement();goog.asserts.assert(a,"The DOM element for the tree cannot be null.");goog.a11y.aria.setRole(a,"tree");goog.a11y.aria.setState(a,"labelledby",this.getLabelElement().id)};
-goog.ui.tree.TreeControl.prototype.enterDocument=function(){goog.ui.tree.TreeControl.superClass_.enterDocument.call(this);var a=this.getElement();a.className=this.getConfig().cssRoot;a.setAttribute("hideFocus","true");this.attachEvents_();this.initAccessibility()};goog.ui.tree.TreeControl.prototype.exitDocument=function(){goog.ui.tree.TreeControl.superClass_.exitDocument.call(this);this.detachEvents_()};
-goog.ui.tree.TreeControl.prototype.attachEvents_=function(){var a=this.getElement();a.tabIndex=0;var b=this.keyHandler_=new goog.events.KeyHandler(a),c=this.focusHandler_=new goog.events.FocusHandler(a);this.getHandler().listen(c,goog.events.FocusHandler.EventType.FOCUSOUT,this.handleBlur_).listen(c,goog.events.FocusHandler.EventType.FOCUSIN,this.handleFocus_).listen(b,goog.events.KeyHandler.EventType.KEY,this.handleKeyEvent).listen(a,goog.events.EventType.MOUSEDOWN,this.handleMouseEvent_).listen(a,
-goog.events.EventType.CLICK,this.handleMouseEvent_).listen(a,goog.events.EventType.DBLCLICK,this.handleMouseEvent_)};goog.ui.tree.TreeControl.prototype.detachEvents_=function(){this.keyHandler_.dispose();this.keyHandler_=null;this.focusHandler_.dispose();this.focusHandler_=null};
-goog.ui.tree.TreeControl.prototype.handleMouseEvent_=function(a){goog.log.fine(this.logger_,"Received event "+a.type);var b=this.getNodeFromEvent_(a);if(b)switch(a.type){case goog.events.EventType.MOUSEDOWN:b.onMouseDown(a);break;case goog.events.EventType.CLICK:b.onClick_(a);break;case goog.events.EventType.DBLCLICK:b.onDoubleClick_(a)}};
-goog.ui.tree.TreeControl.prototype.handleKeyEvent=function(a){var b=!1;(b=this.typeAhead_.handleNavigation(a)||this.selectedItem_&&this.selectedItem_.onKeyDown(a)||this.typeAhead_.handleTypeAheadChar(a))&&a.preventDefault();return b};goog.ui.tree.TreeControl.prototype.getNodeFromEvent_=function(a){var b=null;for(a=a.target;null!=a;){if(b=goog.ui.tree.BaseNode.allNodes[a.id])return b;if(a==this.getElement())break;a=a.parentNode}return null};
-goog.ui.tree.TreeControl.prototype.createNode=function(a){return new goog.ui.tree.TreeNode(a||"",this.getConfig(),this.getDomHelper())};goog.ui.tree.TreeControl.prototype.setNode=function(a){this.typeAhead_.setNodeInMap(a)};goog.ui.tree.TreeControl.prototype.removeNode=function(a){this.typeAhead_.removeNodeFromMap(a)};goog.ui.tree.TreeControl.prototype.clearTypeAhead=function(){this.typeAhead_.clear()};
-goog.ui.tree.TreeControl.defaultConfig={indentWidth:19,cssRoot:"goog-tree-root goog-tree-item",cssHideRoot:"goog-tree-hide-root",cssItem:"goog-tree-item",cssChildren:"goog-tree-children",cssChildrenNoLines:"goog-tree-children-nolines",cssTreeRow:"goog-tree-row",cssItemLabel:"goog-tree-item-label",cssTreeIcon:"goog-tree-icon",cssExpandTreeIcon:"goog-tree-expand-icon",cssExpandTreeIconPlus:"goog-tree-expand-icon-plus",cssExpandTreeIconMinus:"goog-tree-expand-icon-minus",cssExpandTreeIconTPlus:"goog-tree-expand-icon-tplus",
-cssExpandTreeIconTMinus:"goog-tree-expand-icon-tminus",cssExpandTreeIconLPlus:"goog-tree-expand-icon-lplus",cssExpandTreeIconLMinus:"goog-tree-expand-icon-lminus",cssExpandTreeIconT:"goog-tree-expand-icon-t",cssExpandTreeIconL:"goog-tree-expand-icon-l",cssExpandTreeIconBlank:"goog-tree-expand-icon-blank",cssExpandedFolderIcon:"goog-tree-expanded-folder-icon",cssCollapsedFolderIcon:"goog-tree-collapsed-folder-icon",cssFileIcon:"goog-tree-file-icon",cssExpandedRootIcon:"goog-tree-expanded-folder-icon",
-cssCollapsedRootIcon:"goog-tree-collapsed-folder-icon",cssSelectedRow:"selected"};goog.cssom={};goog.cssom.CssRuleType={STYLE:1,IMPORT:3,MEDIA:4,FONT_FACE:5,PAGE:6,NAMESPACE:7};goog.cssom.getAllCssText=function(a){return goog.cssom.getAllCss_(a||document.styleSheets,!0)};goog.cssom.getAllCssStyleRules=function(a){return goog.cssom.getAllCss_(a||document.styleSheets,!1)};goog.cssom.getCssRulesFromStyleSheet=function(a){var b=null;try{b=a.rules||a.cssRules}catch(c){if(15==c.code)throw c.styleSheet=a,c;}return b};
-goog.cssom.getAllCssStyleSheets=function(a,b){var c=[],d=a||document.styleSheets,e=goog.isDef(b)?b:!1;if(d.imports&&d.imports.length)for(var f=0,g=d.imports.length;f<g;f++)goog.array.extend(c,goog.cssom.getAllCssStyleSheets(d.imports[f]));else if(d.length)for(f=0,g=d.length;f<g;f++)goog.array.extend(c,goog.cssom.getAllCssStyleSheets(d[f]));else{var h=goog.cssom.getCssRulesFromStyleSheet(d);if(h&&h.length)for(var f=0,g=h.length,k;f<g;f++)k=h[f],k.styleSheet&&goog.array.extend(c,goog.cssom.getAllCssStyleSheets(k.styleSheet))}!(d.type||
-d.rules||d.cssRules)||d.disabled&&!e||c.push(d);return c};goog.cssom.getCssTextFromCssRule=function(a){var b="";a.cssText?b=a.cssText:a.style&&a.style.cssText&&a.selectorText&&(b=a.style.cssText.replace(/\s*-closure-parent-stylesheet:\s*\[object\];?\s*/gi,"").replace(/\s*-closure-rule-index:\s*[\d]+;?\s*/gi,""),b=a.selectorText+" { "+b+" }");return b};
-goog.cssom.getCssRuleIndexInParentStyleSheet=function(a,b){if(a.style&&a.style["-closure-rule-index"])return a.style["-closure-rule-index"];var c=b||goog.cssom.getParentStyleSheet(a);if(!c)throw Error("Cannot find a parentStyleSheet.");if((c=goog.cssom.getCssRulesFromStyleSheet(c))&&c.length)for(var d=0,e=c.length,f;d<e;d++)if(f=c[d],f==a)return d;return-1};goog.cssom.getParentStyleSheet=function(a){return a.parentStyleSheet||a.style&&a.style["-closure-parent-stylesheet"]};
-goog.cssom.replaceCssRule=function(a,b,c,d){if(c=c||goog.cssom.getParentStyleSheet(a))if(a=0<=d?d:goog.cssom.getCssRuleIndexInParentStyleSheet(a,c),0<=a)goog.cssom.removeCssRule(c,a),goog.cssom.addCssRule(c,b,a);else throw Error("Cannot proceed without the index of the cssRule.");else throw Error("Cannot proceed without the parentStyleSheet.");};
-goog.cssom.addCssRule=function(a,b,c){if(0>c||void 0==c)c=(a.cssRules||a.rules).length;if(a.insertRule)a.insertRule(b,c);else if(b=/^([^\{]+)\{([^\{]+)\}/.exec(b),3==b.length)a.addRule(b[1],b[2],c);else throw Error("Your CSSRule appears to be ill-formatted.");};goog.cssom.removeCssRule=function(a,b){a.deleteRule?a.deleteRule(b):a.removeRule(b)};
-goog.cssom.addCssText=function(a,b){var c=b?b.getDocument():goog.dom.getDocument(),d=c.createElement("style");d.type="text/css";c.getElementsByTagName("head")[0].appendChild(d);d.styleSheet?d.styleSheet.cssText=a:(c=c.createTextNode(a),d.appendChild(c));return d};goog.cssom.getFileNameFromStyleSheet=function(a){return(a=a.href)?/([^\/\?]+)[^\/]*$/.exec(a)[1]:null};
-goog.cssom.getAllCss_=function(a,b){for(var c=[],d=goog.cssom.getAllCssStyleSheets(a),e=0;a=d[e];e++){var f=goog.cssom.getCssRulesFromStyleSheet(a);if(f&&f.length){if(!b)var g=0;for(var h=0,k=f.length,l;h<k;h++)l=f[h],b&&!l.href?(l=goog.cssom.getCssTextFromCssRule(l),c.push(l)):l.href||(l.style&&(l.parentStyleSheet||(l.style["-closure-parent-stylesheet"]=a),l.style["-closure-rule-index"]=g),c.push(l)),b||g++}}return b?c.join(" "):c};
-// Copyright 2012 Google Inc.  Apache License 2.0
-var Blockly={BlockSvg:function(a){this.block_=a;this.svgGroup_=Blockly.createSvgElement("g",{},null);this.svgPathDark_=Blockly.createSvgElement("path",{"class":"blocklyPathDark",transform:"translate(1, 1)"},this.svgGroup_);this.svgPath_=Blockly.createSvgElement("path",{"class":"blocklyPath"},this.svgGroup_);this.svgPathLight_=Blockly.createSvgElement("path",{"class":"blocklyPathLight"},this.svgGroup_);this.svgPath_.tooltip=this.block_;Blockly.Tooltip.bindMouseEvents(this.svgPath_);this.updateMovable()}};
-Blockly.BlockSvg.prototype.height=0;Blockly.BlockSvg.prototype.width=0;Blockly.BlockSvg.INLINE=-1;Blockly.BlockSvg.prototype.init=function(){var a=this.block_;this.updateColour();for(var b=0,c;c=a.inputList[b];b++)c.init();a.mutator&&a.mutator.createIcon()};Blockly.BlockSvg.prototype.updateMovable=function(){this.block_.isMovable()?Blockly.addClass_(this.svgGroup_,"blocklyDraggable"):Blockly.removeClass_(this.svgGroup_,"blocklyDraggable")};Blockly.BlockSvg.prototype.getRootElement=function(){return this.svgGroup_};
-Blockly.BlockSvg.SEP_SPACE_X=10;Blockly.BlockSvg.SEP_SPACE_Y=10;Blockly.BlockSvg.INLINE_PADDING_Y=5;Blockly.BlockSvg.MIN_BLOCK_Y=25;Blockly.BlockSvg.TAB_HEIGHT=20;Blockly.BlockSvg.TAB_WIDTH=8;Blockly.BlockSvg.NOTCH_WIDTH=30;Blockly.BlockSvg.CORNER_RADIUS=8;Blockly.BlockSvg.FIELD_HEIGHT=18;Blockly.BlockSvg.DISTANCE_45_INSIDE=(1-Math.SQRT1_2)*(Blockly.BlockSvg.CORNER_RADIUS-1)+1;Blockly.BlockSvg.DISTANCE_45_OUTSIDE=(1-Math.SQRT1_2)*(Blockly.BlockSvg.CORNER_RADIUS+1)-1;
-Blockly.BlockSvg.NOTCH_PATH_LEFT="l 6,4 3,0 6,-4";Blockly.BlockSvg.NOTCH_PATH_LEFT_HIGHLIGHT="l 6.5,4 2,0 6.5,-4";Blockly.BlockSvg.NOTCH_PATH_RIGHT="l -6,4 -3,0 -6,-4";Blockly.BlockSvg.JAGGED_TEETH="l 8,0 0,4 8,4 -16,8 8,4";Blockly.BlockSvg.JAGGED_TEETH_HEIGHT=20;Blockly.BlockSvg.JAGGED_TEETH_WIDTH=15;Blockly.BlockSvg.TAB_PATH_DOWN="v 5 c 0,10 -"+Blockly.BlockSvg.TAB_WIDTH+",-8 -"+Blockly.BlockSvg.TAB_WIDTH+",7.5 s "+Blockly.BlockSvg.TAB_WIDTH+",-2.5 "+Blockly.BlockSvg.TAB_WIDTH+",7.5";
-Blockly.BlockSvg.TAB_PATH_DOWN_HIGHLIGHT_RTL="v 6.5 m -"+0.98*Blockly.BlockSvg.TAB_WIDTH+",2.5 q -"+0.05*Blockly.BlockSvg.TAB_WIDTH+",10 "+0.27*Blockly.BlockSvg.TAB_WIDTH+",10 m "+0.71*Blockly.BlockSvg.TAB_WIDTH+",-2.5 v 1.5";Blockly.BlockSvg.TOP_LEFT_CORNER_START="m 0,"+Blockly.BlockSvg.CORNER_RADIUS;Blockly.BlockSvg.TOP_LEFT_CORNER_START_HIGHLIGHT_RTL="m "+Blockly.BlockSvg.DISTANCE_45_INSIDE+","+Blockly.BlockSvg.DISTANCE_45_INSIDE;
-Blockly.BlockSvg.TOP_LEFT_CORNER_START_HIGHLIGHT_LTR="m 1,"+(Blockly.BlockSvg.CORNER_RADIUS-1);Blockly.BlockSvg.TOP_LEFT_CORNER="A "+Blockly.BlockSvg.CORNER_RADIUS+","+Blockly.BlockSvg.CORNER_RADIUS+" 0 0,1 "+Blockly.BlockSvg.CORNER_RADIUS+",0";Blockly.BlockSvg.TOP_LEFT_CORNER_HIGHLIGHT="A "+(Blockly.BlockSvg.CORNER_RADIUS-1)+","+(Blockly.BlockSvg.CORNER_RADIUS-1)+" 0 0,1 "+Blockly.BlockSvg.CORNER_RADIUS+",1";
-Blockly.BlockSvg.INNER_TOP_LEFT_CORNER=Blockly.BlockSvg.NOTCH_PATH_RIGHT+" h -"+(Blockly.BlockSvg.NOTCH_WIDTH-15-Blockly.BlockSvg.CORNER_RADIUS)+" a "+Blockly.BlockSvg.CORNER_RADIUS+","+Blockly.BlockSvg.CORNER_RADIUS+" 0 0,0 -"+Blockly.BlockSvg.CORNER_RADIUS+","+Blockly.BlockSvg.CORNER_RADIUS;Blockly.BlockSvg.INNER_BOTTOM_LEFT_CORNER="a "+Blockly.BlockSvg.CORNER_RADIUS+","+Blockly.BlockSvg.CORNER_RADIUS+" 0 0,0 "+Blockly.BlockSvg.CORNER_RADIUS+","+Blockly.BlockSvg.CORNER_RADIUS;
-Blockly.BlockSvg.INNER_TOP_LEFT_CORNER_HIGHLIGHT_RTL="a "+(Blockly.BlockSvg.CORNER_RADIUS+1)+","+(Blockly.BlockSvg.CORNER_RADIUS+1)+" 0 0,0 "+(-Blockly.BlockSvg.DISTANCE_45_OUTSIDE-1)+","+(Blockly.BlockSvg.CORNER_RADIUS-Blockly.BlockSvg.DISTANCE_45_OUTSIDE);Blockly.BlockSvg.INNER_BOTTOM_LEFT_CORNER_HIGHLIGHT_RTL="a "+(Blockly.BlockSvg.CORNER_RADIUS+1)+","+(Blockly.BlockSvg.CORNER_RADIUS+1)+" 0 0,0 "+(Blockly.BlockSvg.CORNER_RADIUS+1)+","+(Blockly.BlockSvg.CORNER_RADIUS+1);
-Blockly.BlockSvg.INNER_BOTTOM_LEFT_CORNER_HIGHLIGHT_LTR="a "+(Blockly.BlockSvg.CORNER_RADIUS+1)+","+(Blockly.BlockSvg.CORNER_RADIUS+1)+" 0 0,0 "+(Blockly.BlockSvg.CORNER_RADIUS-Blockly.BlockSvg.DISTANCE_45_OUTSIDE)+","+(Blockly.BlockSvg.DISTANCE_45_OUTSIDE+1);Blockly.BlockSvg.prototype.dispose=function(){goog.dom.removeNode(this.svgGroup_);this.block_=this.svgPathDark_=this.svgPathLight_=this.svgPath_=this.svgGroup_=null};
-Blockly.BlockSvg.prototype.disposeUiEffect=function(){Blockly.playAudio("delete");var a=Blockly.getSvgXY_(this.svgGroup_),b=this.svgGroup_.cloneNode(!0);b.translateX_=a.x;b.translateY_=a.y;b.setAttribute("transform","translate("+b.translateX_+","+b.translateY_+")");Blockly.svg.appendChild(b);b.bBox_=b.getBBox();b.startDate_=new Date;Blockly.BlockSvg.disposeUiStep_(b)};
-Blockly.BlockSvg.disposeUiStep_=function(a){var b=(new Date-a.startDate_)/150;1<b?goog.dom.removeNode(a):(a.setAttribute("transform","translate("+(a.translateX_+(Blockly.RTL?-1:1)*a.bBox_.width/2*b+", "+(a.translateY_+a.bBox_.height*b))+") scale("+(1-b)+")"),window.setTimeout(function(){Blockly.BlockSvg.disposeUiStep_(a)},10))};
-Blockly.BlockSvg.prototype.connectionUiEffect=function(){Blockly.playAudio("click");var a=Blockly.getSvgXY_(this.svgGroup_);this.block_.outputConnection?(a.x+=Blockly.RTL?3:-3,a.y+=13):this.block_.previousConnection&&(a.x+=Blockly.RTL?-23:23,a.y+=3);a=Blockly.createSvgElement("circle",{cx:a.x,cy:a.y,r:0,fill:"none",stroke:"#888","stroke-width":10},Blockly.svg);a.startDate_=new Date;Blockly.BlockSvg.connectionUiStep_(a)};
-Blockly.BlockSvg.connectionUiStep_=function(a){var b=(new Date-a.startDate_)/150;1<b?goog.dom.removeNode(a):(a.setAttribute("r",25*b),a.style.opacity=1-b,window.setTimeout(function(){Blockly.BlockSvg.connectionUiStep_(a)},10))};
-Blockly.BlockSvg.prototype.updateColour=function(){if(!this.block_.disabled){var a=Blockly.makeColour(this.block_.getColour()),b=goog.color.hexToRgb(a),c=goog.color.lighten(b,0.3),b=goog.color.darken(b,0.4);this.svgPathLight_.setAttribute("stroke",goog.color.rgbArrayToHex(c));this.svgPathDark_.setAttribute("fill",goog.color.rgbArrayToHex(b));this.svgPath_.setAttribute("fill",a)}};
-Blockly.BlockSvg.prototype.updateDisabled=function(){this.block_.disabled||this.block_.getInheritedDisabled()?(Blockly.addClass_(this.svgGroup_,"blocklyDisabled"),this.svgPath_.setAttribute("fill","url(#blocklyDisabledPattern)")):(Blockly.removeClass_(this.svgGroup_,"blocklyDisabled"),this.updateColour());for(var a=this.block_.getChildren(),b=0,c;c=a[b];b++)c.svg_.updateDisabled()};Blockly.BlockSvg.prototype.addSelect=function(){Blockly.addClass_(this.svgGroup_,"blocklySelected");this.svgGroup_.parentNode.appendChild(this.svgGroup_)};
-Blockly.BlockSvg.prototype.removeSelect=function(){Blockly.removeClass_(this.svgGroup_,"blocklySelected")};Blockly.BlockSvg.prototype.addDragging=function(){Blockly.addClass_(this.svgGroup_,"blocklyDragging")};Blockly.BlockSvg.prototype.removeDragging=function(){Blockly.removeClass_(this.svgGroup_,"blocklyDragging")};
-Blockly.BlockSvg.prototype.render=function(){this.block_.rendered=!0;var a=Blockly.BlockSvg.SEP_SPACE_X;Blockly.RTL&&(a=-a);for(var b=this.block_.getIcons(),c=0;c<b.length;c++)a=b[c].renderIcon(a);a+=Blockly.RTL?Blockly.BlockSvg.SEP_SPACE_X:-Blockly.BlockSvg.SEP_SPACE_X;b=this.renderCompute_(a);this.renderDraw_(a,b);(a=this.block_.getParent())?a.render():Blockly.fireUiEvent(window,"resize")};
-Blockly.BlockSvg.prototype.renderFields_=function(a,b,c){Blockly.RTL&&(b=-b);for(var d=0,e;e=a[d];d++)Blockly.RTL?(b-=e.renderSep+e.renderWidth,e.getRootElement().setAttribute("transform","translate("+b+", "+c+")"),e.renderWidth&&(b-=Blockly.BlockSvg.SEP_SPACE_X)):(e.getRootElement().setAttribute("transform","translate("+(b+e.renderSep)+", "+c+")"),e.renderWidth&&(b+=e.renderSep+e.renderWidth+Blockly.BlockSvg.SEP_SPACE_X));return Blockly.RTL?-b:b};
-Blockly.BlockSvg.prototype.renderCompute_=function(a){var b=this.block_.inputList,c=[];c.rightEdge=a+2*Blockly.BlockSvg.SEP_SPACE_X;if(this.block_.previousConnection||this.block_.nextConnection)c.rightEdge=Math.max(c.rightEdge,Blockly.BlockSvg.NOTCH_WIDTH+Blockly.BlockSvg.SEP_SPACE_X);for(var d=0,e=0,f=!1,g=!1,h=!1,k=void 0,l=this.block_.inputsInline&&!this.block_.isCollapsed(),p=0,m;m=b[p];p++)if(m.isVisible()){var q;l&&k&&k!=Blockly.NEXT_STATEMENT&&m.type!=Blockly.NEXT_STATEMENT?q=c[c.length-1]:
-(k=m.type,q=[],q.type=l&&m.type!=Blockly.NEXT_STATEMENT?Blockly.BlockSvg.INLINE:m.type,q.height=0,c.push(q));q.push(m);m.renderHeight=Blockly.BlockSvg.MIN_BLOCK_Y;m.renderWidth=l&&m.type==Blockly.INPUT_VALUE?Blockly.BlockSvg.TAB_WIDTH+1.25*Blockly.BlockSvg.SEP_SPACE_X:0;if(m.connection&&m.connection.targetConnection){var n=m.connection.targetBlock().getHeightWidth();m.renderHeight=Math.max(m.renderHeight,n.height);m.renderWidth=Math.max(m.renderWidth,n.width)}p==b.length-1&&m.renderHeight--;q.height=
-Math.max(q.height,m.renderHeight);m.fieldWidth=0;1==c.length&&(m.fieldWidth+=Blockly.RTL?-a:a);for(var n=!1,r=0,s;s=m.fieldRow[r];r++){0!=r&&(m.fieldWidth+=Blockly.BlockSvg.SEP_SPACE_X);var t=s.getSize();s.renderWidth=t.width;s.renderSep=n&&s.EDITABLE?Blockly.BlockSvg.SEP_SPACE_X:0;m.fieldWidth+=s.renderWidth+s.renderSep;q.height=Math.max(q.height,t.height);n=s.EDITABLE}q.type!=Blockly.BlockSvg.INLINE&&(q.type==Blockly.NEXT_STATEMENT?(g=!0,e=Math.max(e,m.fieldWidth)):(q.type==Blockly.INPUT_VALUE?
-f=!0:q.type==Blockly.DUMMY_INPUT&&(h=!0),d=Math.max(d,m.fieldWidth)))}for(a=0;q=c[a];a++)if(q.thicker=!1,q.type==Blockly.BlockSvg.INLINE)for(b=0;m=q[b];b++)if(m.type==Blockly.INPUT_VALUE){q.height+=2*Blockly.BlockSvg.INLINE_PADDING_Y;q.thicker=!0;break}c.statementEdge=2*Blockly.BlockSvg.SEP_SPACE_X+e;g&&(c.rightEdge=Math.max(c.rightEdge,c.statementEdge+Blockly.BlockSvg.NOTCH_WIDTH));f?c.rightEdge=Math.max(c.rightEdge,d+2*Blockly.BlockSvg.SEP_SPACE_X+Blockly.BlockSvg.TAB_WIDTH):h&&(c.rightEdge=Math.max(c.rightEdge,
-d+2*Blockly.BlockSvg.SEP_SPACE_X));c.hasValue=f;c.hasStatement=g;c.hasDummy=h;return c};
-Blockly.BlockSvg.prototype.renderDraw_=function(a,b){if(this.block_.outputConnection)this.squareBottomLeftCorner_=this.squareTopLeftCorner_=!0;else{this.squareBottomLeftCorner_=this.squareTopLeftCorner_=!1;if(this.block_.previousConnection){var c=this.block_.previousConnection.targetBlock();c&&c.getNextBlock()==this.block_&&(this.squareTopLeftCorner_=!0)}this.block_.getNextBlock()&&(this.squareBottomLeftCorner_=!0)}var d=this.block_.getRelativeToSurfaceXY(),e=[],f=[],c=[],g=[];this.renderDrawTop_(e,
-c,d,b.rightEdge);var h=this.renderDrawRight_(e,c,f,g,d,b,a);this.renderDrawBottom_(e,c,d,h);this.renderDrawLeft_(e,c,d,h);d=e.join(" ")+"\n"+f.join(" ");this.svgPath_.setAttribute("d",d);this.svgPathDark_.setAttribute("d",d);d=c.join(" ")+"\n"+g.join(" ");this.svgPathLight_.setAttribute("d",d);Blockly.RTL&&(this.svgPath_.setAttribute("transform","scale(-1 1)"),this.svgPathLight_.setAttribute("transform","scale(-1 1)"),this.svgPathDark_.setAttribute("transform","translate(1,1) scale(-1 1)"))};
-Blockly.BlockSvg.prototype.renderDrawTop_=function(a,b,c,d){this.squareTopLeftCorner_?(a.push("m 0,0"),b.push("m 1,1")):(a.push(Blockly.BlockSvg.TOP_LEFT_CORNER_START),b.push(Blockly.RTL?Blockly.BlockSvg.TOP_LEFT_CORNER_START_HIGHLIGHT_RTL:Blockly.BlockSvg.TOP_LEFT_CORNER_START_HIGHLIGHT_LTR),a.push(Blockly.BlockSvg.TOP_LEFT_CORNER),b.push(Blockly.BlockSvg.TOP_LEFT_CORNER_HIGHLIGHT));this.block_.previousConnection&&(a.push("H",Blockly.BlockSvg.NOTCH_WIDTH-15),b.push("H",Blockly.BlockSvg.NOTCH_WIDTH-
-15),a.push(Blockly.BlockSvg.NOTCH_PATH_LEFT),b.push(Blockly.BlockSvg.NOTCH_PATH_LEFT_HIGHLIGHT),this.block_.previousConnection.moveTo(c.x+(Blockly.RTL?-Blockly.BlockSvg.NOTCH_WIDTH:Blockly.BlockSvg.NOTCH_WIDTH),c.y));a.push("H",d);b.push("H",d+(Blockly.RTL?-1:0));this.width=d};
-Blockly.BlockSvg.prototype.renderDrawRight_=function(a,b,c,d,e,f,g){for(var h,k=0,l,p,m=0,q;q=f[m];m++){h=Blockly.BlockSvg.SEP_SPACE_X;0==m&&(h+=Blockly.RTL?-g:g);b.push("M",f.rightEdge-1+","+(k+1));if(this.block_.isCollapsed()){var n=q[0];l=k+Blockly.BlockSvg.FIELD_HEIGHT;this.renderFields_(n.fieldRow,h,l);a.push(Blockly.BlockSvg.JAGGED_TEETH);Blockly.RTL?b.push("l 8,0 0,3.8 7,3.2 m -14.5,9 l 8,4"):b.push("h 8");n=q.height-Blockly.BlockSvg.JAGGED_TEETH_HEIGHT;a.push("v",n);Blockly.RTL&&b.push("v",
-n-2);this.width+=Blockly.BlockSvg.JAGGED_TEETH_WIDTH}else if(q.type==Blockly.BlockSvg.INLINE){for(var r=0;n=q[r];r++)l=k+Blockly.BlockSvg.FIELD_HEIGHT,q.thicker&&(l+=Blockly.BlockSvg.INLINE_PADDING_Y),h=this.renderFields_(n.fieldRow,h,l),n.type!=Blockly.DUMMY_INPUT&&(h+=n.renderWidth+Blockly.BlockSvg.SEP_SPACE_X),n.type==Blockly.INPUT_VALUE&&(c.push("M",h-Blockly.BlockSvg.SEP_SPACE_X+","+(k+Blockly.BlockSvg.INLINE_PADDING_Y)),c.push("h",Blockly.BlockSvg.TAB_WIDTH-2-n.renderWidth),c.push(Blockly.BlockSvg.TAB_PATH_DOWN),
-c.push("v",n.renderHeight+1-Blockly.BlockSvg.TAB_HEIGHT),c.push("h",n.renderWidth+2-Blockly.BlockSvg.TAB_WIDTH),c.push("z"),Blockly.RTL?(d.push("M",h-Blockly.BlockSvg.SEP_SPACE_X-3+Blockly.BlockSvg.TAB_WIDTH-n.renderWidth+","+(k+Blockly.BlockSvg.INLINE_PADDING_Y+1)),d.push(Blockly.BlockSvg.TAB_PATH_DOWN_HIGHLIGHT_RTL),d.push("v",n.renderHeight-Blockly.BlockSvg.TAB_HEIGHT+3),d.push("h",n.renderWidth-Blockly.BlockSvg.TAB_WIDTH+1)):(d.push("M",h-Blockly.BlockSvg.SEP_SPACE_X+1+","+(k+Blockly.BlockSvg.INLINE_PADDING_Y+
-1)),d.push("v",n.renderHeight+1),d.push("h",Blockly.BlockSvg.TAB_WIDTH-2-n.renderWidth),d.push("M",h-n.renderWidth-Blockly.BlockSvg.SEP_SPACE_X+0.8+","+(k+Blockly.BlockSvg.INLINE_PADDING_Y+Blockly.BlockSvg.TAB_HEIGHT-0.4)),d.push("l",0.42*Blockly.BlockSvg.TAB_WIDTH+",-1.8")),l=Blockly.RTL?e.x-h-Blockly.BlockSvg.TAB_WIDTH+Blockly.BlockSvg.SEP_SPACE_X+n.renderWidth+1:e.x+h+Blockly.BlockSvg.TAB_WIDTH-Blockly.BlockSvg.SEP_SPACE_X-n.renderWidth-1,p=e.y+k+Blockly.BlockSvg.INLINE_PADDING_Y+1,n.connection.moveTo(l,
-p),n.connection.targetConnection&&n.connection.tighten_());h=Math.max(h,f.rightEdge);this.width=Math.max(this.width,h);a.push("H",h);b.push("H",h+(Blockly.RTL?-1:0));a.push("v",q.height);Blockly.RTL&&b.push("v",q.height-2)}else q.type==Blockly.INPUT_VALUE?(n=q[0],l=k+Blockly.BlockSvg.FIELD_HEIGHT,n.align!=Blockly.ALIGN_LEFT&&(r=f.rightEdge-n.fieldWidth-Blockly.BlockSvg.TAB_WIDTH-2*Blockly.BlockSvg.SEP_SPACE_X,n.align==Blockly.ALIGN_RIGHT?h+=r:n.align==Blockly.ALIGN_CENTRE&&(h+=(r+h)/2)),this.renderFields_(n.fieldRow,
-h,l),a.push(Blockly.BlockSvg.TAB_PATH_DOWN),r=q.height-Blockly.BlockSvg.TAB_HEIGHT,a.push("v",r),Blockly.RTL?(b.push(Blockly.BlockSvg.TAB_PATH_DOWN_HIGHLIGHT_RTL),b.push("v",r)):(b.push("M",f.rightEdge-4.2+","+(k+Blockly.BlockSvg.TAB_HEIGHT-0.4)),b.push("l",0.42*Blockly.BlockSvg.TAB_WIDTH+",-1.8")),l=e.x+(Blockly.RTL?-f.rightEdge-1:f.rightEdge+1),p=e.y+k,n.connection.moveTo(l,p),n.connection.targetConnection&&(n.connection.tighten_(),this.width=Math.max(this.width,f.rightEdge+n.connection.targetBlock().getHeightWidth().width-
-Blockly.BlockSvg.TAB_WIDTH+1))):q.type==Blockly.DUMMY_INPUT?(n=q[0],l=k+Blockly.BlockSvg.FIELD_HEIGHT,n.align!=Blockly.ALIGN_LEFT&&(r=f.rightEdge-n.fieldWidth-2*Blockly.BlockSvg.SEP_SPACE_X,f.hasValue&&(r-=Blockly.BlockSvg.TAB_WIDTH),n.align==Blockly.ALIGN_RIGHT?h+=r:n.align==Blockly.ALIGN_CENTRE&&(h+=(r+h)/2)),this.renderFields_(n.fieldRow,h,l),a.push("v",q.height),Blockly.RTL&&b.push("v",q.height-2)):q.type==Blockly.NEXT_STATEMENT&&(n=q[0],0==m&&(a.push("v",Blockly.BlockSvg.SEP_SPACE_Y),Blockly.RTL&&
-b.push("v",Blockly.BlockSvg.SEP_SPACE_Y-1),k+=Blockly.BlockSvg.SEP_SPACE_Y),l=k+Blockly.BlockSvg.FIELD_HEIGHT,n.align!=Blockly.ALIGN_LEFT&&(r=f.statementEdge-n.fieldWidth-2*Blockly.BlockSvg.SEP_SPACE_X,n.align==Blockly.ALIGN_RIGHT?h+=r:n.align==Blockly.ALIGN_CENTRE&&(h+=(r+h)/2)),this.renderFields_(n.fieldRow,h,l),h=f.statementEdge+Blockly.BlockSvg.NOTCH_WIDTH,a.push("H",h),a.push(Blockly.BlockSvg.INNER_TOP_LEFT_CORNER),a.push("v",q.height-2*Blockly.BlockSvg.CORNER_RADIUS),a.push(Blockly.BlockSvg.INNER_BOTTOM_LEFT_CORNER),
-a.push("H",f.rightEdge),Blockly.RTL?(b.push("M",h-Blockly.BlockSvg.NOTCH_WIDTH+Blockly.BlockSvg.DISTANCE_45_OUTSIDE+","+(k+Blockly.BlockSvg.DISTANCE_45_OUTSIDE)),b.push(Blockly.BlockSvg.INNER_TOP_LEFT_CORNER_HIGHLIGHT_RTL),b.push("v",q.height-2*Blockly.BlockSvg.CORNER_RADIUS),b.push(Blockly.BlockSvg.INNER_BOTTOM_LEFT_CORNER_HIGHLIGHT_RTL),b.push("H",f.rightEdge-1)):(b.push("M",h-Blockly.BlockSvg.NOTCH_WIDTH+Blockly.BlockSvg.DISTANCE_45_OUTSIDE+","+(k+q.height-Blockly.BlockSvg.DISTANCE_45_OUTSIDE)),
-b.push(Blockly.BlockSvg.INNER_BOTTOM_LEFT_CORNER_HIGHLIGHT_LTR),b.push("H",f.rightEdge)),l=e.x+(Blockly.RTL?-h:h),p=e.y+k+1,n.connection.moveTo(l,p),n.connection.targetConnection&&(n.connection.tighten_(),this.width=Math.max(this.width,f.statementEdge+n.connection.targetBlock().getHeightWidth().width)),m==f.length-1||f[m+1].type==Blockly.NEXT_STATEMENT)&&(a.push("v",Blockly.BlockSvg.SEP_SPACE_Y),Blockly.RTL&&b.push("v",Blockly.BlockSvg.SEP_SPACE_Y-1),k+=Blockly.BlockSvg.SEP_SPACE_Y);k+=q.height}f.length||
-(k=Blockly.BlockSvg.MIN_BLOCK_Y,a.push("V",k),Blockly.RTL&&b.push("V",k-1));return k};
-Blockly.BlockSvg.prototype.renderDrawBottom_=function(a,b,c,d){this.height=d+1;this.block_.nextConnection&&(a.push("H",Blockly.BlockSvg.NOTCH_WIDTH+" "+Blockly.BlockSvg.NOTCH_PATH_RIGHT),this.block_.nextConnection.moveTo(Blockly.RTL?c.x-Blockly.BlockSvg.NOTCH_WIDTH:c.x+Blockly.BlockSvg.NOTCH_WIDTH,c.y+d+1),this.block_.nextConnection.targetConnection&&this.block_.nextConnection.tighten_(),this.height+=4);this.squareBottomLeftCorner_?(a.push("H 0"),Blockly.RTL||b.push("M","1,"+d)):(a.push("H",Blockly.BlockSvg.CORNER_RADIUS),
-a.push("a",Blockly.BlockSvg.CORNER_RADIUS+","+Blockly.BlockSvg.CORNER_RADIUS+" 0 0,1 -"+Blockly.BlockSvg.CORNER_RADIUS+",-"+Blockly.BlockSvg.CORNER_RADIUS),Blockly.RTL||(b.push("M",Blockly.BlockSvg.DISTANCE_45_INSIDE+","+(d-Blockly.BlockSvg.DISTANCE_45_INSIDE)),b.push("A",Blockly.BlockSvg.CORNER_RADIUS-1+","+(Blockly.BlockSvg.CORNER_RADIUS-1)+" 0 0,1 1,"+(d-Blockly.BlockSvg.CORNER_RADIUS))))};
-Blockly.BlockSvg.prototype.renderDrawLeft_=function(a,b,c,d){this.block_.outputConnection?(this.block_.outputConnection.moveTo(c.x,c.y),a.push("V",Blockly.BlockSvg.TAB_HEIGHT),a.push("c 0,-10 -"+Blockly.BlockSvg.TAB_WIDTH+",8 -"+Blockly.BlockSvg.TAB_WIDTH+",-7.5 s "+Blockly.BlockSvg.TAB_WIDTH+",2.5 "+Blockly.BlockSvg.TAB_WIDTH+",-7.5"),Blockly.RTL?(b.push("M",-0.3*Blockly.BlockSvg.TAB_WIDTH+",8.9"),b.push("l",-0.45*Blockly.BlockSvg.TAB_WIDTH+",-2.1")):(b.push("V",Blockly.BlockSvg.TAB_HEIGHT-1),b.push("m",
--0.92*Blockly.BlockSvg.TAB_WIDTH+",-1 q "+-0.19*Blockly.BlockSvg.TAB_WIDTH+",-5.5 0,-11"),b.push("m",0.92*Blockly.BlockSvg.TAB_WIDTH+",1 V 1 H 2")),this.width+=Blockly.BlockSvg.TAB_WIDTH):Blockly.RTL||(this.squareTopLeftCorner_?b.push("V",1):b.push("V",Blockly.BlockSvg.CORNER_RADIUS));a.push("z")};
-// Copyright 2013 Google Inc.  Apache License 2.0
-Blockly.Blocks={};
-Blockly.Blocks.addTemplate=function(a){goog.asserts.assert(a.blockName);goog.asserts.assert(Blockly.Blocks[a.blockName],"Blockly.Blocks already has a field named ",a.blockName);goog.asserts.assert(a.message);goog.asserts.assert(a.colour&&"number"==typeof a.colour&&0<=a.colour&&360>a.colour,"details.colour must be a number from 0 to 360 (exclusive)");"undefined"!=a.output&&(goog.asserts.assert(!a.previousStatement,"When details.output is defined, details.previousStatement must not be true."),goog.asserts.assert(!a.nextStatement,
-"When details.output is defined, details.nextStatement must not be true."));var b={init:function(){var b=this;this.setColour(a.colour);this.setHelpUrl(a.helpUrl);"string"==typeof a.tooltip?this.setTooltip(a.tooltip):"function"==typeof a.tooltip&&this.setTooltip(function(){return a.tooltip(b)});"undefined"!=a.output?this.setOutput(!0,a.output):(this.setPreviousStatement("undefined"==typeof a.previousStatement?!0:a.previousStatement),this.setNextStatement("undefined"==typeof a.nextStatement?!0:a.nextStatement));
-var d=[];d.push(a.text);a.args&&a.args.forEach(function(a){goog.asserts.assert(a.name);goog.asserts.assert("undefined"!=a.check);"undefined"==a.type||a.type==Blockly.INPUT_VALUE?d.push([a.name,a.check,"undefined"==typeof a.align?Blockly.ALIGN_RIGHT:a.align]):goog.asserts.fail("addTemplate() can only handle value inputs.")});d.push(Blockly.ALIGN_RIGHT);a.inline&&this.setInlineInputs(a.inline);Blockly.Block.prototype.interpolateMsg.apply(this,d)}};b.mutationToDom=a.switchable?function(){var b=a.mutationToDomFunc?
-a.mutatationToDomFunc():document.createElement("mutation");b.setAttribute("is_statement",this.isStatement||!1);return b}:a.mutationToDomFunc;Blockly.Blocks[a.blockName]=b};
-// Copyright 2011 Google Inc.  Apache License 2.0
-Blockly.ScrollbarPair=function(a){this.workspace_=a;this.oldHostMetrics_=null;this.hScroll=new Blockly.Scrollbar(a,!0,!0);this.vScroll=new Blockly.Scrollbar(a,!1,!0);this.corner_=Blockly.createSvgElement("rect",{height:Blockly.Scrollbar.scrollbarThickness,width:Blockly.Scrollbar.scrollbarThickness,style:"fill: #fff"},null);Blockly.Scrollbar.insertAfter_(this.corner_,a.getBubbleCanvas())};
-Blockly.ScrollbarPair.prototype.dispose=function(){Blockly.unbindEvent_(this.onResizeWrapper_);this.onResizeWrapper_=null;goog.dom.removeNode(this.corner_);this.oldHostMetrics_=this.workspace_=this.corner_=null;this.hScroll.dispose();this.hScroll=null;this.vScroll.dispose();this.vScroll=null};
-Blockly.ScrollbarPair.prototype.resize=function(){var a=this.workspace_.getMetrics();if(a){var b=!1,c=!1;this.oldHostMetrics_&&this.oldHostMetrics_.viewWidth==a.viewWidth&&this.oldHostMetrics_.viewHeight==a.viewHeight&&this.oldHostMetrics_.absoluteTop==a.absoluteTop&&this.oldHostMetrics_.absoluteLeft==a.absoluteLeft?(this.oldHostMetrics_&&this.oldHostMetrics_.contentWidth==a.contentWidth&&this.oldHostMetrics_.viewLeft==a.viewLeft&&this.oldHostMetrics_.contentLeft==a.contentLeft||(b=!0),this.oldHostMetrics_&&
-this.oldHostMetrics_.contentHeight==a.contentHeight&&this.oldHostMetrics_.viewTop==a.viewTop&&this.oldHostMetrics_.contentTop==a.contentTop||(c=!0)):c=b=!0;b&&this.hScroll.resize(a);c&&this.vScroll.resize(a);this.oldHostMetrics_&&this.oldHostMetrics_.viewWidth==a.viewWidth&&this.oldHostMetrics_.absoluteLeft==a.absoluteLeft||this.corner_.setAttribute("x",this.vScroll.xCoordinate);this.oldHostMetrics_&&this.oldHostMetrics_.viewHeight==a.viewHeight&&this.oldHostMetrics_.absoluteTop==a.absoluteTop||this.corner_.setAttribute("y",
-this.hScroll.yCoordinate);this.oldHostMetrics_=a}};Blockly.ScrollbarPair.prototype.set=function(a,b){if(Blockly.Scrollbar===Blockly.ScrollbarNative){this.hScroll.set(a,!1);this.vScroll.set(b,!1);var c={};c.x=this.hScroll.outerDiv_.scrollLeft/this.hScroll.innerImg_.offsetWidth||0;c.y=this.vScroll.outerDiv_.scrollTop/this.vScroll.innerImg_.offsetHeight||0;this.workspace_.setMetrics(c)}else this.hScroll.set(a,!0),this.vScroll.set(b,!0)};
-Blockly.Scrollbar=function(a,b,c){this.workspace_=a;this.pair_=c||!1;this.horizontal_=b;this.createDom_();b?(this.svgBackground_.setAttribute("height",Blockly.Scrollbar.scrollbarThickness),this.svgKnob_.setAttribute("height",Blockly.Scrollbar.scrollbarThickness-6),this.svgKnob_.setAttribute("y",3)):(this.svgBackground_.setAttribute("width",Blockly.Scrollbar.scrollbarThickness),this.svgKnob_.setAttribute("width",Blockly.Scrollbar.scrollbarThickness-6),this.svgKnob_.setAttribute("x",3));this.onMouseDownBarWrapper_=
-Blockly.bindEvent_(this.svgBackground_,"mousedown",this,this.onMouseDownBar_);this.onMouseDownKnobWrapper_=Blockly.bindEvent_(this.svgKnob_,"mousedown",this,this.onMouseDownKnob_)};Blockly.Scrollbar.scrollbarThickness=15;
-Blockly.Scrollbar.prototype.dispose=function(){this.onMouseUpKnob_();this.onResizeWrapper_&&(Blockly.unbindEvent_(this.onResizeWrapper_),this.onResizeWrapper_=null);Blockly.unbindEvent_(this.onMouseDownBarWrapper_);this.onMouseDownBarWrapper_=null;Blockly.unbindEvent_(this.onMouseDownKnobWrapper_);this.onMouseDownKnobWrapper_=null;goog.dom.removeNode(this.svgGroup_);this.workspace_=this.svgKnob_=this.svgBackground_=this.svgGroup_=null};
-Blockly.Scrollbar.prototype.resize=function(a){if(!a&&(a=this.workspace_.getMetrics(),!a))return;if(this.horizontal_){var b=a.viewWidth;this.pair_?b-=Blockly.Scrollbar.scrollbarThickness:this.setVisible(b<a.contentHeight);this.ratio_=b/a.contentWidth;if(-Infinity===this.ratio_||Infinity===this.ratio_||isNaN(this.ratio_))this.ratio_=0;var c=a.viewWidth*this.ratio_,d=(a.viewLeft-a.contentLeft)*this.ratio_;this.svgKnob_.setAttribute("width",Math.max(0,c));this.xCoordinate=a.absoluteLeft;this.pair_&&
-Blockly.RTL&&(this.xCoordinate+=a.absoluteLeft+Blockly.Scrollbar.scrollbarThickness);this.yCoordinate=a.absoluteTop+a.viewHeight-Blockly.Scrollbar.scrollbarThickness;this.svgGroup_.setAttribute("transform","translate("+this.xCoordinate+", "+this.yCoordinate+")");this.svgBackground_.setAttribute("width",Math.max(0,b));this.svgKnob_.setAttribute("x",this.constrainKnob_(d))}else{b=a.viewHeight;this.pair_?b-=Blockly.Scrollbar.scrollbarThickness:this.setVisible(b<a.contentHeight);this.ratio_=b/a.contentHeight;
-if(-Infinity===this.ratio_||Infinity===this.ratio_||isNaN(this.ratio_))this.ratio_=0;c=a.viewHeight*this.ratio_;d=(a.viewTop-a.contentTop)*this.ratio_;this.svgKnob_.setAttribute("height",Math.max(0,c));this.xCoordinate=a.absoluteLeft;Blockly.RTL||(this.xCoordinate+=a.viewWidth-Blockly.Scrollbar.scrollbarThickness);this.yCoordinate=a.absoluteTop;this.svgGroup_.setAttribute("transform","translate("+this.xCoordinate+", "+this.yCoordinate+")");this.svgBackground_.setAttribute("height",Math.max(0,b));
-this.svgKnob_.setAttribute("y",this.constrainKnob_(d))}this.onScroll_()};Blockly.Scrollbar.prototype.createDom_=function(){this.svgGroup_=Blockly.createSvgElement("g",{},null);this.svgBackground_=Blockly.createSvgElement("rect",{"class":"blocklyScrollbarBackground"},this.svgGroup_);var a=Math.floor((Blockly.Scrollbar.scrollbarThickness-6)/2);this.svgKnob_=Blockly.createSvgElement("rect",{"class":"blocklyScrollbarKnob",rx:a,ry:a},this.svgGroup_);Blockly.Scrollbar.insertAfter_(this.svgGroup_,this.workspace_.getBubbleCanvas())};
-Blockly.Scrollbar.prototype.isVisible=function(){return"none"!=this.svgGroup_.getAttribute("display")};Blockly.Scrollbar.prototype.setVisible=function(a){if(a!=this.isVisible()){if(this.pair_)throw"Unable to toggle visibility of paired scrollbars.";a?this.svgGroup_.setAttribute("display","block"):(this.workspace_.setMetrics({x:0,y:0}),this.svgGroup_.setAttribute("display","none"))}};
-Blockly.Scrollbar.prototype.onMouseDownBar_=function(a){this.onMouseUpKnob_();if(!Blockly.isRightButton(a)){var b=Blockly.mouseToSvg(a),b=this.horizontal_?b.x:b.y,c=Blockly.getSvgXY_(this.svgKnob_),c=this.horizontal_?c.x:c.y,d=parseFloat(this.svgKnob_.getAttribute(this.horizontal_?"width":"height")),e=parseFloat(this.svgKnob_.getAttribute(this.horizontal_?"x":"y")),f=0.95*d;b<=c?e-=f:b>=c+d&&(e+=f);this.svgKnob_.setAttribute(this.horizontal_?"x":"y",this.constrainKnob_(e));this.onScroll_()}a.stopPropagation()};
-Blockly.Scrollbar.prototype.onMouseDownKnob_=function(a){this.onMouseUpKnob_();Blockly.isRightButton(a)||(this.startDragKnob=parseFloat(this.svgKnob_.getAttribute(this.horizontal_?"x":"y")),this.startDragMouse=this.horizontal_?a.clientX:a.clientY,Blockly.Scrollbar.onMouseUpWrapper_=Blockly.bindEvent_(document,"mouseup",this,this.onMouseUpKnob_),Blockly.Scrollbar.onMouseMoveWrapper_=Blockly.bindEvent_(document,"mousemove",this,this.onMouseMoveKnob_));a.stopPropagation()};
-Blockly.Scrollbar.prototype.onMouseMoveKnob_=function(a){this.svgKnob_.setAttribute(this.horizontal_?"x":"y",this.constrainKnob_(this.startDragKnob+((this.horizontal_?a.clientX:a.clientY)-this.startDragMouse)));this.onScroll_()};
-Blockly.Scrollbar.prototype.onMouseUpKnob_=function(){Blockly.removeAllRanges();Blockly.hideChaff(!0);Blockly.Scrollbar.onMouseUpWrapper_&&(Blockly.unbindEvent_(Blockly.Scrollbar.onMouseUpWrapper_),Blockly.Scrollbar.onMouseUpWrapper_=null);Blockly.Scrollbar.onMouseMoveWrapper_&&(Blockly.unbindEvent_(Blockly.Scrollbar.onMouseMoveWrapper_),Blockly.Scrollbar.onMouseMoveWrapper_=null)};
-Blockly.Scrollbar.prototype.constrainKnob_=function(a){if(0>=a||isNaN(a))a=0;else{var b=this.horizontal_?"width":"height",c=parseFloat(this.svgBackground_.getAttribute(b)),b=parseFloat(this.svgKnob_.getAttribute(b));a=Math.min(a,c-b)}return a};
-Blockly.Scrollbar.prototype.onScroll_=function(){var a=parseFloat(this.svgKnob_.getAttribute(this.horizontal_?"x":"y")),b=parseFloat(this.svgBackground_.getAttribute(this.horizontal_?"width":"height")),a=a/b;isNaN(a)&&(a=0);b={};this.horizontal_?b.x=a:b.y=a;this.workspace_.setMetrics(b)};Blockly.Scrollbar.prototype.set=function(a,b){this.svgKnob_.setAttribute(this.horizontal_?"x":"y",a*this.ratio_);if(b)this.onScroll_()};
-Blockly.Scrollbar.insertAfter_=function(a,b){var c=b.nextSibling,d=b.parentNode;if(!d)throw"Reference node has no parent.";c?d.insertBefore(a,c):d.appendChild(a)};
-// Copyright 2011 Google Inc.  Apache License 2.0
-Blockly.Trashcan=function(a){this.workspace_=a};Blockly.Trashcan.prototype.BODY_URL_="media/trashbody.png";Blockly.Trashcan.prototype.LID_URL_="media/trashlid.png";Blockly.Trashcan.prototype.WIDTH_=47;Blockly.Trashcan.prototype.BODY_HEIGHT_=45;Blockly.Trashcan.prototype.LID_HEIGHT_=15;Blockly.Trashcan.prototype.MARGIN_BOTTOM_=35;Blockly.Trashcan.prototype.MARGIN_SIDE_=35;Blockly.Trashcan.prototype.MARGIN_HOTSPOT_=25;Blockly.Trashcan.prototype.isOpen=!1;Blockly.Trashcan.prototype.svgGroup_=null;
-Blockly.Trashcan.prototype.svgBody_=null;Blockly.Trashcan.prototype.svgLid_=null;Blockly.Trashcan.prototype.lidTask_=0;Blockly.Trashcan.prototype.lidAngle_=0;Blockly.Trashcan.prototype.left_=0;Blockly.Trashcan.prototype.top_=0;
-Blockly.Trashcan.prototype.createDom=function(){this.svgGroup_=Blockly.createSvgElement("g",{filter:"url(#blocklyTrashcanShadowFilter)"},null);this.svgBody_=Blockly.createSvgElement("image",{width:this.WIDTH_,height:this.BODY_HEIGHT_},this.svgGroup_);this.svgBody_.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",Blockly.pathToBlockly+this.BODY_URL_);this.svgBody_.setAttribute("y",this.LID_HEIGHT_);this.svgLid_=Blockly.createSvgElement("image",{width:this.WIDTH_,height:this.LID_HEIGHT_},
-this.svgGroup_);this.svgLid_.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",Blockly.pathToBlockly+this.LID_URL_);return this.svgGroup_};Blockly.Trashcan.prototype.init=function(){this.setOpen_(!1);this.position_();Blockly.bindEvent_(window,"resize",this,this.position_)};Blockly.Trashcan.prototype.dispose=function(){this.svgGroup_&&(goog.dom.removeNode(this.svgGroup_),this.svgGroup_=null);this.workspace_=this.svgLid_=this.svgBody_=null;goog.Timer.clear(this.lidTask_)};
-Blockly.Trashcan.prototype.position_=function(){var a=this.workspace_.getMetrics();a&&(this.left_=Blockly.RTL?this.MARGIN_SIDE_:a.viewWidth+a.absoluteLeft-this.WIDTH_-this.MARGIN_SIDE_,this.top_=a.viewHeight+a.absoluteTop-(this.BODY_HEIGHT_+this.LID_HEIGHT_)-this.MARGIN_BOTTOM_,this.svgGroup_.setAttribute("transform","translate("+this.left_+","+this.top_+")"))};
-Blockly.Trashcan.prototype.onMouseMove=function(a){if(this.svgGroup_){a=Blockly.mouseToSvg(a);var b=Blockly.getSvgXY_(this.svgGroup_);a=a.x>b.x-this.MARGIN_HOTSPOT_&&a.x<b.x+this.WIDTH_+this.MARGIN_HOTSPOT_&&a.y>b.y-this.MARGIN_HOTSPOT_&&a.y<b.y+this.BODY_HEIGHT_+this.LID_HEIGHT_+this.MARGIN_HOTSPOT_;this.isOpen!=a&&this.setOpen_(a)}};Blockly.Trashcan.prototype.setOpen_=function(a){this.isOpen!=a&&(goog.Timer.clear(this.lidTask_),this.isOpen=a,this.animateLid_())};
-Blockly.Trashcan.prototype.animateLid_=function(){this.lidAngle_+=this.isOpen?10:-10;this.lidAngle_=Math.max(0,this.lidAngle_);this.svgLid_.setAttribute("transform","rotate("+(Blockly.RTL?-this.lidAngle_:this.lidAngle_)+", "+(Blockly.RTL?4:this.WIDTH_-4)+", "+(this.LID_HEIGHT_-2)+")");if(this.isOpen?45>this.lidAngle_:0<this.lidAngle_)this.lidTask_=goog.Timer.callOnce(this.animateLid_,5,this)};Blockly.Trashcan.prototype.close=function(){this.setOpen_(!1)};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Xml={};Blockly.Xml.workspaceToDom=function(a){var b;Blockly.RTL&&(b=a.getMetrics().viewWidth);var c=goog.dom.createDom("xml");a=a.getTopBlocks(!0);for(var d=0,e;e=a[d];d++){var f=Blockly.Xml.blockToDom_(e);e=e.getRelativeToSurfaceXY();f.setAttribute("x",Blockly.RTL?b-e.x:e.x);f.setAttribute("y",e.y);c.appendChild(f)}return c};
-Blockly.Xml.blockToDom_=function(a){var b=goog.dom.createDom("block");b.setAttribute("type",a.type);b.setAttribute("id",a.id);if(a.mutationToDom){var c=a.mutationToDom();c&&b.appendChild(c)}for(var d=0;c=a.inputList[d];d++)for(var e=0,f;f=c.fieldRow[e];e++)if(f.name&&f.EDITABLE){var g=goog.dom.createDom("field",null,f.getValue());g.setAttribute("name",f.name);b.appendChild(g)}a.comment&&(c=goog.dom.createDom("comment",null,a.comment.getText()),c.setAttribute("pinned",a.comment.isVisible()),d=a.comment.getBubbleSize(),
-c.setAttribute("h",d.height),c.setAttribute("w",d.width),b.appendChild(c));d=!1;for(e=0;c=a.inputList[e];e++){var h;f=!0;c.type!=Blockly.DUMMY_INPUT&&(g=c.connection.targetBlock(),c.type==Blockly.INPUT_VALUE?(h=goog.dom.createDom("value"),d=!0):c.type==Blockly.NEXT_STATEMENT&&(h=goog.dom.createDom("statement")),g&&(h.appendChild(Blockly.Xml.blockToDom_(g)),f=!1),h.setAttribute("name",c.name),f||b.appendChild(h))}d&&b.setAttribute("inline",a.inputsInline);a.isCollapsed()&&b.setAttribute("collapsed",
-!0);a.disabled&&b.setAttribute("disabled",!0);a.isDeletable()||b.setAttribute("deletable",!1);a.isMovable()||b.setAttribute("movable",!1);a.isEditable()||b.setAttribute("editable",!1);if(a=a.getNextBlock())h=goog.dom.createDom("next",null,Blockly.Xml.blockToDom_(a)),b.appendChild(h);return b};Blockly.Xml.domToText=function(a){return(new XMLSerializer).serializeToString(a)};
-Blockly.Xml.domToPrettyText=function(a){a=Blockly.Xml.domToText(a).split("<");for(var b="",c=1;c<a.length;c++){var d=a[c];"/"==d[0]&&(b=b.substring(2));a[c]=b+"<"+d;"/"!=d[0]&&"/>"!=d.slice(-2)&&(b+="  ")}a=a.join("\n");a=a.replace(/(<(\w+)\b[^>]*>[^\n]*)\n *<\/\2>/g,"$1</$2>");return a.replace(/^\n/,"")};
-Blockly.Xml.textToDom=function(a){a=(new DOMParser).parseFromString(a,"text/xml");if(!a||!a.firstChild||"xml"!=a.firstChild.nodeName.toLowerCase()||a.firstChild!==a.lastChild)throw"Blockly.Xml.textToDom did not obtain a valid XML tree.";return a.firstChild};
-Blockly.Xml.domToWorkspace=function(a,b){var c;Blockly.RTL&&(c=a.getMetrics().viewWidth);for(var d=0,e;e=b.childNodes[d];d++)if("block"==e.nodeName.toLowerCase()){var f=Blockly.Xml.domToBlock(a,e),g=parseInt(e.getAttribute("x"),10);e=parseInt(e.getAttribute("y"),10);isNaN(g)||isNaN(e)||f.moveBy(Blockly.RTL?c-g:g,e)}};
-Blockly.Xml.domToBlock=function(a,b,c){var d=null,e=b.getAttribute("type");if(!e)throw"Block type unspecified: \n"+b.outerHTML;var f=b.getAttribute("id");if(c&&f){d=Blockly.Block.getById(f,a);if(!d)throw"Couldn't get Block with id: "+f;f=d.getParent();d.workspace&&d.dispose(!0,!1,!0);d.fill(a,e);d.parent_=f}else d=Blockly.Block.obtain(a,e);d.svg_||d.initSvg();(f=b.getAttribute("inline"))&&d.setInputsInline("true"==f);(f=b.getAttribute("disabled"))&&d.setDisabled("true"==f);(f=b.getAttribute("deletable"))&&
-d.setDeletable("true"==f);(f=b.getAttribute("movable"))&&d.setMovable("true"==f);(f=b.getAttribute("editable"))&&d.setEditable("true"==f);for(var g=null,f=0,h;h=b.childNodes[f];f++)if(3!=h.nodeType||!h.data.match(/^\s*$/)){for(var g=null,k=0,l;l=h.childNodes[k];k++)3==l.nodeType&&l.data.match(/^\s*$/)||(g=l);k=h.getAttribute("name");switch(h.nodeName.toLowerCase()){case "mutation":d.domToMutation&&d.domToMutation(h);break;case "comment":d.setCommentText(h.textContent);var p=h.getAttribute("pinned");
-p&&setTimeout(function(){d.comment.setVisible("true"==p)},1);g=parseInt(h.getAttribute("w"),10);h=parseInt(h.getAttribute("h"),10);isNaN(g)||isNaN(h)||d.comment.setBubbleSize(g,h);break;case "title":case "field":d.setFieldValue(h.textContent,k);break;case "value":case "statement":h=d.getInput(k);if(!h)throw"Input "+k+" does not exist in block "+e;if(g&&"block"==g.nodeName.toLowerCase())if(g=Blockly.Xml.domToBlock(a,g,c),g.outputConnection)h.connection.connect(g.outputConnection);else if(g.previousConnection)h.connection.connect(g.previousConnection);
-else throw"Child block does not have output or previous statement.";break;case "next":if(g&&"block"==g.nodeName.toLowerCase()){if(!d.nextConnection)throw"Next statement does not exist.";if(d.nextConnection.targetConnection)throw"Next statement is already connected.";g=Blockly.Xml.domToBlock(a,g,c);if(!g.previousConnection)throw"Next block does not have previous statement.";d.nextConnection.connect(g.previousConnection)}}}(a=b.getAttribute("collapsed"))&&d.setCollapsed("true"==a);(a=d.getNextBlock())?
-a.render():d.render();return d};Blockly.Xml.deleteNext=function(a){for(var b=0,c;c=a.childNodes[b];b++)if("next"==c.nodeName.toLowerCase()){a.removeChild(c);break}};Blockly.Xml=Blockly.Xml;Blockly.Xml.domToText=Blockly.Xml.domToText;Blockly.Xml.domToWorkspace=Blockly.Xml.domToWorkspace;Blockly.Xml.textToDom=Blockly.Xml.textToDom;Blockly.Xml.workspaceToDom=Blockly.Xml.workspaceToDom;
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Workspace=function(a,b){this.getMetrics=a;this.setMetrics=b;this.isFlyout=!1;this.topBlocks_=[];this.maxBlocks=Infinity;Blockly.ConnectionDB.init(this)};Blockly.Workspace.SCAN_ANGLE=3;Blockly.Workspace.prototype.dragMode=!1;Blockly.Workspace.prototype.scrollX=0;Blockly.Workspace.prototype.scrollY=0;Blockly.Workspace.prototype.trashcan=null;Blockly.Workspace.prototype.fireChangeEventPid_=null;Blockly.Workspace.prototype.scrollbar=null;
-Blockly.Workspace.prototype.createDom=function(){this.svgGroup_=Blockly.createSvgElement("g",{},null);this.svgBlockCanvas_=Blockly.createSvgElement("g",{},this.svgGroup_);this.svgBubbleCanvas_=Blockly.createSvgElement("g",{},this.svgGroup_);this.fireChangeEvent();return this.svgGroup_};
-Blockly.Workspace.prototype.dispose=function(){this.svgGroup_&&(goog.dom.removeNode(this.svgGroup_),this.svgGroup_=null);this.svgBubbleCanvas_=this.svgBlockCanvas_=null;this.trashcan&&(this.trashcan.dispose(),this.trashcan=null)};Blockly.Workspace.prototype.addTrashcan=function(){if(Blockly.hasTrashcan&&!Blockly.readOnly){this.trashcan=new Blockly.Trashcan(this);var a=this.trashcan.createDom();this.svgGroup_.insertBefore(a,this.svgBlockCanvas_);this.trashcan.init()}};
-Blockly.Workspace.prototype.getCanvas=function(){return this.svgBlockCanvas_};Blockly.Workspace.prototype.getBubbleCanvas=function(){return this.svgBubbleCanvas_};Blockly.Workspace.prototype.addTopBlock=function(a){this.topBlocks_.push(a);Blockly.Realtime.isEnabled()&&this==Blockly.mainWorkspace&&Blockly.Realtime.addTopBlock(a);this.fireChangeEvent()};
-Blockly.Workspace.prototype.removeTopBlock=function(a){for(var b=!1,c,d=0;c=this.topBlocks_[d];d++)if(c==a){this.topBlocks_.splice(d,1);b=!0;break}if(!b)throw"Block not present in workspace's list of top-most blocks.";Blockly.Realtime.isEnabled()&&this==Blockly.mainWorkspace&&Blockly.Realtime.removeTopBlock(a);this.fireChangeEvent()};
-Blockly.Workspace.prototype.getTopBlocks=function(a){var b=[].concat(this.topBlocks_);if(a&&1<b.length){var c=Math.sin(Blockly.Workspace.SCAN_ANGLE/180*Math.PI);Blockly.RTL&&(c*=-1);b.sort(function(a,b){var f=a.getRelativeToSurfaceXY(),g=b.getRelativeToSurfaceXY();return f.y+c*f.x-(g.y+c*g.x)})}return b};Blockly.Workspace.prototype.getAllBlocks=function(){for(var a=this.getTopBlocks(!1),b=0;b<a.length;b++)a.push.apply(a,a[b].getChildren());return a};Blockly.Workspace.prototype.clear=function(){for(Blockly.hideChaff();this.topBlocks_.length;)this.topBlocks_[0].dispose()};
-Blockly.Workspace.prototype.render=function(){for(var a=this.getAllBlocks(),b=0,c;c=a[b];b++)c.getChildren().length||c.render()};Blockly.Workspace.prototype.getBlockById=function(a){for(var b=this.getAllBlocks(),c=0,d;d=b[c];c++)if(d.id==a)return d;return null};
-Blockly.Workspace.prototype.traceOn=function(a){this.traceOn_=a;this.traceWrapper_&&(Blockly.unbindEvent_(this.traceWrapper_),this.traceWrapper_=null);a&&(this.traceWrapper_=Blockly.bindEvent_(this.svgBlockCanvas_,"blocklySelectChange",this,function(){this.traceOn_=!1}))};
-Blockly.Workspace.prototype.highlightBlock=function(a){this.traceOn_&&0!=Blockly.Block.dragMode_&&this.traceOn(!1);if(this.traceOn_){var b=null;if(a&&(b=this.getBlockById(a),!b))return;this.traceOn(!1);b?b.select():Blockly.selected&&Blockly.selected.unselect();var c=this;setTimeout(function(){c.traceOn(!0)},1)}};
-Blockly.Workspace.prototype.fireChangeEvent=function(){this.fireChangeEventPid_&&window.clearTimeout(this.fireChangeEventPid_);var a=this.svgBlockCanvas_;a&&(this.fireChangeEventPid_=window.setTimeout(function(){Blockly.fireUiEvent(a,"blocklyWorkspaceChange")},0))};
-Blockly.Workspace.prototype.paste=function(a){if(!(a.getElementsByTagName("block").length>=this.remainingCapacity())){var b=Blockly.Xml.domToBlock(this,a),c=parseInt(a.getAttribute("x"),10);a=parseInt(a.getAttribute("y"),10);if(!isNaN(c)&&!isNaN(a)){Blockly.RTL&&(c=-c);do for(var d=!1,e=this.getAllBlocks(),f=0,g;g=e[f];f++)g=g.getRelativeToSurfaceXY(),1>=Math.abs(c-g.x)&&1>=Math.abs(a-g.y)&&(c=Blockly.RTL?c-Blockly.SNAP_RADIUS:c+Blockly.SNAP_RADIUS,a+=2*Blockly.SNAP_RADIUS,d=!0);while(d);b.moveBy(c,
-a)}b.select()}};Blockly.Workspace.prototype.remainingCapacity=function(){return Infinity==this.maxBlocks?Infinity:this.maxBlocks-this.getAllBlocks().length};Blockly.Workspace.prototype.clear=Blockly.Workspace.prototype.clear;
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Bubble=function(a,b,c,d,e,f,g){var h=Blockly.Bubble.ARROW_ANGLE;Blockly.RTL&&(h=-h);this.arrow_radians_=h/360*Math.PI*2;this.workspace_=a;this.content_=b;this.shape_=c;a.getBubbleCanvas().appendChild(this.createDom_(b,!(!f||!g)));this.setAnchorLocation(d,e);f&&g||(a=this.content_.getBBox(),f=a.width+2*Blockly.Bubble.BORDER_WIDTH,g=a.height+2*Blockly.Bubble.BORDER_WIDTH);this.setBubbleSize(f,g);this.positionBubble_();this.renderArrow_();this.rendered_=!0;Blockly.readOnly||(Blockly.bindEvent_(this.bubbleBack_,
-"mousedown",this,this.bubbleMouseDown_),this.resizeGroup_&&Blockly.bindEvent_(this.resizeGroup_,"mousedown",this,this.resizeMouseDown_))};Blockly.Bubble.BORDER_WIDTH=6;Blockly.Bubble.ARROW_THICKNESS=10;Blockly.Bubble.ARROW_ANGLE=20;Blockly.Bubble.ARROW_BEND=4;Blockly.Bubble.ANCHOR_RADIUS=8;Blockly.Bubble.onMouseUpWrapper_=null;Blockly.Bubble.onMouseMoveWrapper_=null;
-Blockly.Bubble.unbindDragEvents_=function(){Blockly.Bubble.onMouseUpWrapper_&&(Blockly.unbindEvent_(Blockly.Bubble.onMouseUpWrapper_),Blockly.Bubble.onMouseUpWrapper_=null);Blockly.Bubble.onMouseMoveWrapper_&&(Blockly.unbindEvent_(Blockly.Bubble.onMouseMoveWrapper_),Blockly.Bubble.onMouseMoveWrapper_=null)};Blockly.Bubble.prototype.rendered_=!1;Blockly.Bubble.prototype.anchorX_=0;Blockly.Bubble.prototype.anchorY_=0;Blockly.Bubble.prototype.relativeLeft_=0;Blockly.Bubble.prototype.relativeTop_=0;
-Blockly.Bubble.prototype.width_=0;Blockly.Bubble.prototype.height_=0;Blockly.Bubble.prototype.autoLayout_=!0;
-Blockly.Bubble.prototype.createDom_=function(a,b){this.bubbleGroup_=Blockly.createSvgElement("g",{},null);var c=Blockly.createSvgElement("g",{filter:"url(#blocklyEmboss)"},this.bubbleGroup_);this.bubbleArrow_=Blockly.createSvgElement("path",{},c);this.bubbleBack_=Blockly.createSvgElement("rect",{"class":"blocklyDraggable",x:0,y:0,rx:Blockly.Bubble.BORDER_WIDTH,ry:Blockly.Bubble.BORDER_WIDTH},c);b?(this.resizeGroup_=Blockly.createSvgElement("g",{"class":Blockly.RTL?"blocklyResizeSW":"blocklyResizeSE"},
-this.bubbleGroup_),c=2*Blockly.Bubble.BORDER_WIDTH,Blockly.createSvgElement("polygon",{points:"0,x x,x x,0".replace(/x/g,c.toString())},this.resizeGroup_),Blockly.createSvgElement("line",{"class":"blocklyResizeLine",x1:c/3,y1:c-1,x2:c-1,y2:c/3},this.resizeGroup_),Blockly.createSvgElement("line",{"class":"blocklyResizeLine",x1:2*c/3,y1:c-1,x2:c-1,y2:2*c/3},this.resizeGroup_)):this.resizeGroup_=null;this.bubbleGroup_.appendChild(a);return this.bubbleGroup_};
-Blockly.Bubble.prototype.bubbleMouseDown_=function(a){this.promote_();Blockly.Bubble.unbindDragEvents_();Blockly.isRightButton(a)||Blockly.isTargetInput_(a)||(Blockly.setCursorHand_(!0),this.dragDeltaX=Blockly.RTL?this.relativeLeft_+a.clientX:this.relativeLeft_-a.clientX,this.dragDeltaY=this.relativeTop_-a.clientY,Blockly.Bubble.onMouseUpWrapper_=Blockly.bindEvent_(document,"mouseup",this,Blockly.Bubble.unbindDragEvents_),Blockly.Bubble.onMouseMoveWrapper_=Blockly.bindEvent_(document,"mousemove",
-this,this.bubbleMouseMove_),Blockly.hideChaff(),a.stopPropagation())};Blockly.Bubble.prototype.bubbleMouseMove_=function(a){this.autoLayout_=!1;this.relativeLeft_=Blockly.RTL?this.dragDeltaX-a.clientX:this.dragDeltaX+a.clientX;this.relativeTop_=this.dragDeltaY+a.clientY;this.positionBubble_();this.renderArrow_()};
-Blockly.Bubble.prototype.resizeMouseDown_=function(a){this.promote_();Blockly.Bubble.unbindDragEvents_();Blockly.isRightButton(a)||(Blockly.setCursorHand_(!0),this.resizeDeltaWidth=Blockly.RTL?this.width_+a.clientX:this.width_-a.clientX,this.resizeDeltaHeight=this.height_-a.clientY,Blockly.Bubble.onMouseUpWrapper_=Blockly.bindEvent_(document,"mouseup",this,Blockly.Bubble.unbindDragEvents_),Blockly.Bubble.onMouseMoveWrapper_=Blockly.bindEvent_(document,"mousemove",this,this.resizeMouseMove_),Blockly.hideChaff(),
-a.stopPropagation())};Blockly.Bubble.prototype.resizeMouseMove_=function(a){this.autoLayout_=!1;var b=this.resizeDeltaWidth,c=this.resizeDeltaHeight+a.clientY,b=Blockly.RTL?b-a.clientX:b+a.clientX;this.setBubbleSize(b,c);Blockly.RTL&&this.positionBubble_()};Blockly.Bubble.prototype.registerResizeEvent=function(a,b){Blockly.bindEvent_(this.bubbleGroup_,"resize",a,b)};Blockly.Bubble.prototype.promote_=function(){this.bubbleGroup_.parentNode.appendChild(this.bubbleGroup_)};
-Blockly.Bubble.prototype.setAnchorLocation=function(a,b){this.anchorX_=a;this.anchorY_=b;this.rendered_&&this.positionBubble_()};
-Blockly.Bubble.prototype.layoutBubble_=function(){var a=-this.width_/4,b=-this.height_-Blockly.BlockSvg.MIN_BLOCK_Y,c=this.workspace_.getMetrics();Blockly.RTL?this.anchorX_-c.viewLeft-a-this.width_<Blockly.Scrollbar.scrollbarThickness?a=this.anchorX_-c.viewLeft-this.width_-Blockly.Scrollbar.scrollbarThickness:this.anchorX_-c.viewLeft-a>c.viewWidth&&(a=this.anchorX_-c.viewLeft-c.viewWidth):this.anchorX_+a<c.viewLeft?a=c.viewLeft-this.anchorX_:c.viewLeft+c.viewWidth<this.anchorX_+a+this.width_+Blockly.BlockSvg.SEP_SPACE_X+
-Blockly.Scrollbar.scrollbarThickness&&(a=c.viewLeft+c.viewWidth-this.anchorX_-this.width_-Blockly.Scrollbar.scrollbarThickness);this.anchorY_+b<c.viewTop&&(b=this.shape_.getBBox().height);this.relativeLeft_=a;this.relativeTop_=b};Blockly.Bubble.prototype.positionBubble_=function(){this.bubbleGroup_.setAttribute("transform","translate("+(Blockly.RTL?this.anchorX_-this.relativeLeft_-this.width_:this.anchorX_+this.relativeLeft_)+", "+(this.relativeTop_+this.anchorY_)+")")};
-Blockly.Bubble.prototype.getBubbleSize=function(){return{width:this.width_,height:this.height_}};
-Blockly.Bubble.prototype.setBubbleSize=function(a,b){var c=2*Blockly.Bubble.BORDER_WIDTH;a=Math.max(a,c+45);b=Math.max(b,c+Blockly.BlockSvg.FIELD_HEIGHT);this.width_=a;this.height_=b;this.bubbleBack_.setAttribute("width",a);this.bubbleBack_.setAttribute("height",b);this.resizeGroup_&&(Blockly.RTL?this.resizeGroup_.setAttribute("transform","translate("+2*Blockly.Bubble.BORDER_WIDTH+", "+(b-c)+") scale(-1 1)"):this.resizeGroup_.setAttribute("transform","translate("+(a-c)+", "+(b-c)+")"));this.rendered_&&
-(this.autoLayout_&&this.layoutBubble_(),this.positionBubble_(),this.renderArrow_());Blockly.fireUiEvent(this.bubbleGroup_,"resize")};
-Blockly.Bubble.prototype.renderArrow_=function(){var a=[],b=this.width_/2,c=this.height_/2,d=-this.relativeLeft_,e=-this.relativeTop_;if(b==d&&c==e)a.push("M "+b+","+c);else{e-=c;d-=b;Blockly.RTL&&(d*=-1);var f=Math.sqrt(e*e+d*d),g=Math.acos(d/f);0>e&&(g=2*Math.PI-g);var h=g+Math.PI/2;h>2*Math.PI&&(h-=2*Math.PI);var k=Math.sin(h),l=Math.cos(h),p=this.getBubbleSize(),h=(p.width+p.height)/Blockly.Bubble.ARROW_THICKNESS,h=Math.min(h,p.width,p.height)/2,p=1-Blockly.Bubble.ANCHOR_RADIUS/f,d=b+p*d,e=c+
-p*e,p=b+h*l,m=c+h*k,b=b-h*l,c=c-h*k,k=g+this.arrow_radians_;k>2*Math.PI&&(k-=2*Math.PI);g=Math.sin(k)*f/Blockly.Bubble.ARROW_BEND;f=Math.cos(k)*f/Blockly.Bubble.ARROW_BEND;a.push("M"+p+","+m);a.push("C"+(p+f)+","+(m+g)+" "+d+","+e+" "+d+","+e);a.push("C"+d+","+e+" "+(b+f)+","+(c+g)+" "+b+","+c)}a.push("z");this.bubbleArrow_.setAttribute("d",a.join(" "))};Blockly.Bubble.prototype.setColour=function(a){this.bubbleBack_.setAttribute("fill",a);this.bubbleArrow_.setAttribute("fill",a)};
-Blockly.Bubble.prototype.dispose=function(){Blockly.Bubble.unbindDragEvents_();goog.dom.removeNode(this.bubbleGroup_);this.shape_=this.content_=this.workspace_=this.bubbleGroup_=null};
-// Copyright 2013 Google Inc.  Apache License 2.0
-Blockly.Icon=function(a){this.block_=a};Blockly.Icon.RADIUS=8;Blockly.Icon.prototype.bubble_=null;Blockly.Icon.prototype.iconX_=0;Blockly.Icon.prototype.iconY_=0;Blockly.Icon.prototype.createIcon_=function(){this.iconGroup_=Blockly.createSvgElement("g",{},null);this.block_.getSvgRoot().appendChild(this.iconGroup_);Blockly.bindEvent_(this.iconGroup_,"mouseup",this,this.iconClick_);this.updateEditable()};
-Blockly.Icon.prototype.dispose=function(){goog.dom.removeNode(this.iconGroup_);this.iconGroup_=null;this.setVisible(!1);this.block_=null};Blockly.Icon.prototype.updateEditable=function(){this.block_.isInFlyout?Blockly.removeClass_(this.iconGroup_,"blocklyIconGroup"):Blockly.addClass_(this.iconGroup_,"blocklyIconGroup")};Blockly.Icon.prototype.isVisible=function(){return!!this.bubble_};Blockly.Icon.prototype.iconClick_=function(a){this.block_.isInFlyout||this.setVisible(!this.isVisible())};
-Blockly.Icon.prototype.updateColour=function(){if(this.isVisible()){var a=Blockly.makeColour(this.block_.getColour());this.bubble_.setColour(a)}};
-Blockly.Icon.prototype.renderIcon=function(a){if(this.block_.isCollapsed())return this.iconGroup_.setAttribute("display","none"),a;this.iconGroup_.setAttribute("display","block");var b=2*Blockly.Icon.RADIUS;Blockly.RTL&&(a-=b);this.iconGroup_.setAttribute("transform","translate("+a+", 5)");this.computeIconLocation();return a=Blockly.RTL?a-Blockly.BlockSvg.SEP_SPACE_X:a+(b+Blockly.BlockSvg.SEP_SPACE_X)};
-Blockly.Icon.prototype.setIconLocation=function(a,b){this.iconX_=a;this.iconY_=b;this.isVisible()&&this.bubble_.setAnchorLocation(a,b)};Blockly.Icon.prototype.computeIconLocation=function(){var a=this.block_.getRelativeToSurfaceXY(),b=Blockly.getRelativeXY_(this.iconGroup_),c=a.x+b.x+Blockly.Icon.RADIUS,a=a.y+b.y+Blockly.Icon.RADIUS;c===this.iconX_&&a===this.iconY_||this.setIconLocation(c,a)};Blockly.Icon.prototype.getIconLocation=function(){return{x:this.iconX_,y:this.iconY_}};
-// Copyright 2011 Google Inc.  Apache License 2.0
-Blockly.Comment=function(a){Blockly.Comment.superClass_.constructor.call(this,a);this.createIcon_()};goog.inherits(Blockly.Comment,Blockly.Icon);Blockly.Comment.prototype.text_="";Blockly.Comment.prototype.width_=160;Blockly.Comment.prototype.height_=80;
-Blockly.Comment.prototype.createIcon_=function(){Blockly.Icon.prototype.createIcon_.call(this);Blockly.createSvgElement("circle",{"class":"blocklyIconShield",r:Blockly.Icon.RADIUS,cx:Blockly.Icon.RADIUS,cy:Blockly.Icon.RADIUS},this.iconGroup_);this.iconMark_=Blockly.createSvgElement("text",{"class":"blocklyIconMark",x:Blockly.Icon.RADIUS,y:2*Blockly.Icon.RADIUS-3},this.iconGroup_);this.iconMark_.appendChild(document.createTextNode("?"))};
-Blockly.Comment.prototype.createEditor_=function(){this.foreignObject_=Blockly.createSvgElement("foreignObject",{x:Blockly.Bubble.BORDER_WIDTH,y:Blockly.Bubble.BORDER_WIDTH},null);var a=document.createElementNS(Blockly.HTML_NS,"body");a.setAttribute("xmlns",Blockly.HTML_NS);a.className="blocklyMinimalBody";this.textarea_=document.createElementNS(Blockly.HTML_NS,"textarea");this.textarea_.className="blocklyCommentTextarea";this.textarea_.setAttribute("dir",Blockly.RTL?"RTL":"LTR");a.appendChild(this.textarea_);
-this.foreignObject_.appendChild(a);Blockly.bindEvent_(this.textarea_,"mouseup",this,this.textareaFocus_);return this.foreignObject_};Blockly.Comment.prototype.updateEditable=function(){this.isVisible()&&(this.setVisible(!1),this.setVisible(!0));Blockly.Icon.prototype.updateEditable.call(this)};
-Blockly.Comment.prototype.resizeBubble_=function(){var a=this.bubble_.getBubbleSize(),b=2*Blockly.Bubble.BORDER_WIDTH;this.foreignObject_.setAttribute("width",a.width-b);this.foreignObject_.setAttribute("height",a.height-b);this.textarea_.style.width=a.width-b-4+"px";this.textarea_.style.height=a.height-b-4+"px"};
-Blockly.Comment.prototype.setVisible=function(a){if(a!=this.isVisible())if(!this.block_.isEditable()&&!this.textarea_||goog.userAgent.IE)Blockly.Warning.prototype.setVisible.call(this,a);else{var b=this.getText(),c=this.getBubbleSize();a?(this.bubble_=new Blockly.Bubble(this.block_.workspace,this.createEditor_(),this.block_.svg_.svgPath_,this.iconX_,this.iconY_,this.width_,this.height_),this.bubble_.registerResizeEvent(this,this.resizeBubble_),this.updateColour(),this.text_=null):(this.bubble_.dispose(),
-this.foreignObject_=this.textarea_=this.bubble_=null);this.setText(b);this.setBubbleSize(c.width,c.height)}};Blockly.Comment.prototype.textareaFocus_=function(a){this.bubble_.promote_();this.textarea_.focus()};Blockly.Comment.prototype.getBubbleSize=function(){return this.isVisible()?this.bubble_.getBubbleSize():{width:this.width_,height:this.height_}};Blockly.Comment.prototype.setBubbleSize=function(a,b){this.textarea_?this.bubble_.setBubbleSize(a,b):(this.width_=a,this.height_=b)};
-Blockly.Comment.prototype.getText=function(){return this.textarea_?this.textarea_.value:this.text_};Blockly.Comment.prototype.setText=function(a){this.textarea_?this.textarea_.value=a:this.text_=a};Blockly.Comment.prototype.dispose=function(){this.block_.comment=null;Blockly.Icon.prototype.dispose.call(this)};
-// Copyright 2011 Google Inc.  Apache License 2.0
-Blockly.Connection=function(a,b){this.sourceBlock_=a;this.targetConnection=null;this.type=b;this.y_=this.x_=0;this.inDB_=!1;this.dbList_=this.sourceBlock_.workspace.connectionDBList};
-Blockly.Connection.prototype.dispose=function(){if(this.targetConnection)throw"Disconnect connection before disposing of it.";this.inDB_&&this.dbList_[this.type].removeConnection_(this);this.inDB_=!1;Blockly.highlightedConnection_==this&&(Blockly.highlightedConnection_=null);Blockly.localConnection_==this&&(Blockly.localConnection_=null)};Blockly.Connection.prototype.isSuperior=function(){return this.type==Blockly.INPUT_VALUE||this.type==Blockly.NEXT_STATEMENT};
-Blockly.Connection.prototype.connect=function(a){if(this.sourceBlock_==a.sourceBlock_)throw"Attempted to connect a block to itself.";if(this.sourceBlock_.workspace!==a.sourceBlock_.workspace)throw"Blocks are on different workspaces.";if(Blockly.OPPOSITE_TYPE[this.type]!=a.type)throw"Attempt to connect incompatible types.";if(this.type==Blockly.INPUT_VALUE||this.type==Blockly.OUTPUT_VALUE){if(this.targetConnection)throw"Source connection already connected (value).";if(a.targetConnection){var b=a.targetBlock();
-b.setParent(null);if(!b.outputConnection)throw"Orphan block does not have an output connection.";for(var c=this.sourceBlock_;c=Blockly.Connection.singleConnection_(c,b);)if(c.targetBlock())c=c.targetBlock();else{c.connect(b.outputConnection);b=null;break}b&&window.setTimeout(function(){b.outputConnection.bumpAwayFrom_(a)},Blockly.BUMP_DELAY)}}else{if(this.targetConnection)throw"Source connection already connected (block).";if(a.targetConnection){if(this.type!=Blockly.PREVIOUS_STATEMENT)throw"Can only do a mid-stack connection with the top of a block.";
-b=a.targetBlock();b.setParent(null);if(!b.previousConnection)throw"Orphan block does not have a previous connection.";for(c=this.sourceBlock_;c.nextConnection;)if(c.nextConnection.targetConnection)c=c.getNextBlock();else{c.nextConnection.connect(b.previousConnection);b=null;break}b&&window.setTimeout(function(){b.previousConnection.bumpAwayFrom_(a)},Blockly.BUMP_DELAY)}}var d;this.isSuperior()?(c=this.sourceBlock_,d=a.sourceBlock_):(c=a.sourceBlock_,d=this.sourceBlock_);this.targetConnection=a;a.targetConnection=
-this;d.setParent(c);c.rendered&&c.svg_.updateDisabled();d.rendered&&d.svg_.updateDisabled();c.rendered&&d.rendered&&(this.type==Blockly.NEXT_STATEMENT||this.type==Blockly.PREVIOUS_STATEMENT?d.render():c.render())};Blockly.Connection.singleConnection_=function(a,b){for(var c=!1,d=0;d<a.inputList.length;d++){var e=a.inputList[d].connection;if(e&&e.type==Blockly.INPUT_VALUE&&b.outputConnection.checkType_(e)){if(c)return null;c=e}}return c};
-Blockly.Connection.prototype.disconnect=function(){var a=this.targetConnection;if(!a)throw"Source connection not connected.";if(a.targetConnection!=this)throw"Target connection not connected to source connection.";this.targetConnection=a.targetConnection=null;var b;this.isSuperior()?(b=this.sourceBlock_,a=a.sourceBlock_):(b=a.sourceBlock_,a=this.sourceBlock_);b.rendered&&b.render();a.rendered&&(a.svg_.updateDisabled(),a.render())};
-Blockly.Connection.prototype.targetBlock=function(){return this.targetConnection?this.targetConnection.sourceBlock_:null};
-Blockly.Connection.prototype.bumpAwayFrom_=function(a){if(0==Blockly.Block.dragMode_){var b=this.sourceBlock_.getRootBlock();if(!b.isInFlyout){var c=!1;if(!b.isMovable()){b=a.sourceBlock_.getRootBlock();if(!b.isMovable())return;a=this;c=!0}b.getSvgRoot().parentNode.appendChild(b.getSvgRoot());var d=a.x_+Blockly.SNAP_RADIUS-this.x_;a=a.y_+Blockly.SNAP_RADIUS-this.y_;c&&(a=-a);Blockly.RTL&&(d=-d);b.moveBy(d,a)}}};
-Blockly.Connection.prototype.moveTo=function(a,b){this.inDB_&&this.dbList_[this.type].removeConnection_(this);this.x_=a;this.y_=b;this.dbList_[this.type].addConnection_(this)};Blockly.Connection.prototype.moveBy=function(a,b){this.moveTo(this.x_+a,this.y_+b)};
-Blockly.Connection.prototype.highlight=function(){var a;this.type==Blockly.INPUT_VALUE||this.type==Blockly.OUTPUT_VALUE?(a=Blockly.RTL?-Blockly.BlockSvg.TAB_WIDTH:Blockly.BlockSvg.TAB_WIDTH,a="m 0,0 v 5 c 0,10 "+-a+",-8 "+-a+",7.5 s "+a+",-2.5 "+a+",7.5 v 5"):a=Blockly.RTL?"m 20,0 h -5 l -6,4 -3,0 -6,-4 h -5":"m -20,0 h 5 l 6,4 3,0 6,-4 h 5";var b=this.sourceBlock_.getRelativeToSurfaceXY();Blockly.Connection.highlightedPath_=Blockly.createSvgElement("path",{"class":"blocklyHighlightedConnectionPath",
-d:a,transform:"translate("+(this.x_-b.x)+", "+(this.y_-b.y)+")"},this.sourceBlock_.getSvgRoot())};Blockly.Connection.prototype.unhighlight=function(){goog.dom.removeNode(Blockly.Connection.highlightedPath_);delete Blockly.Connection.highlightedPath_};
-Blockly.Connection.prototype.tighten_=function(){var a=Math.round(this.targetConnection.x_-this.x_),b=Math.round(this.targetConnection.y_-this.y_);if(0!=a||0!=b){var c=this.targetBlock(),d=c.getSvgRoot();if(!d)throw"block is not rendered.";d=Blockly.getRelativeXY_(d);c.getSvgRoot().setAttribute("transform","translate("+(d.x-a)+", "+(d.y-b)+")");c.moveConnections_(-a,-b)}};
-Blockly.Connection.prototype.closest=function(a,b,c){function d(b){var c=e[b];if((c.type==Blockly.OUTPUT_VALUE||c.type==Blockly.PREVIOUS_STATEMENT)&&c.targetConnection||c.type==Blockly.INPUT_VALUE&&c.targetConnection&&!c.targetBlock().isMovable()||!p.checkType_(c))return!0;c=c.sourceBlock_;do{if(l==c)return!0;c=c.getParent()}while(c);var d=f-e[b].x_,c=g-e[b].y_,d=Math.sqrt(d*d+c*c);d<=a&&(k=e[b],a=d);return c<a}if(this.targetConnection)return{connection:null,radius:a};var e=this.dbList_[Blockly.OPPOSITE_TYPE[this.type]],
-f=this.x_+b,g=this.y_+c;b=0;for(var h=c=e.length-2;b<h;)e[h].y_<g?b=h:c=h,h=Math.floor((b+c)/2);c=b=h;var k=null,l=this.sourceBlock_,p=this;if(e.length){for(;0<=b&&d(b);)b--;do c++;while(c<e.length&&d(c))}return{connection:k,radius:a}};Blockly.Connection.prototype.checkType_=function(a){if(!this.check_||!a.check_)return!0;for(var b=0;b<this.check_.length;b++)if(-1!=a.check_.indexOf(this.check_[b]))return!0;return!1};
-Blockly.Connection.prototype.setCheck=function(a){a?(goog.isArray(a)||(a=[a]),this.check_=a,this.targetConnection&&!this.checkType_(this.targetConnection)&&(this.isSuperior()?this.targetBlock().setParent(null):this.sourceBlock_.setParent(null),this.sourceBlock_.bumpNeighbours_())):this.check_=null;return this};
-Blockly.Connection.prototype.neighbours_=function(a){function b(b){var f=d-c[b].x_,g=e-c[b].y_;Math.sqrt(f*f+g*g)<=a&&k.push(c[b]);return g<a}for(var c=this.dbList_[Blockly.OPPOSITE_TYPE[this.type]],d=this.x_,e=this.y_,f=0,g=c.length-2,h=g;f<h;)c[h].y_<e?f=h:g=h,h=Math.floor((f+g)/2);var g=f=h,k=[];if(c.length){for(;0<=f&&b(f);)f--;do g++;while(g<c.length&&b(g))}return k};
-Blockly.Connection.prototype.hideAll=function(){this.inDB_&&this.dbList_[this.type].removeConnection_(this);if(this.targetConnection)for(var a=this.targetBlock().getDescendants(),b=0;b<a.length;b++){for(var c=a[b],d=c.getConnections_(!0),e=0;e<d.length;e++){var f=d[e];f.inDB_&&this.dbList_[f.type].removeConnection_(f)}c=c.getIcons();for(d=0;d<c.length;d++)c[d].setVisible(!1)}};
-Blockly.Connection.prototype.unhideAll=function(){this.inDB_||this.dbList_[this.type].addConnection_(this);var a=[];if(this.type!=Blockly.INPUT_VALUE&&this.type!=Blockly.NEXT_STATEMENT)return a;var b=this.targetBlock();if(b){var c;b.isCollapsed()?(c=[],b.outputConnection&&c.push(b.outputConnection),b.nextConnection&&c.push(b.nextConnection),b.previousConnection&&c.push(b.previousConnection)):c=b.getConnections_(!0);for(var d=0;d<c.length;d++)a.push.apply(a,c[d].unhideAll());0==a.length&&(a[0]=b)}return a};
-Blockly.ConnectionDB=function(){};Blockly.ConnectionDB.prototype=[];Blockly.ConnectionDB.constructor=Blockly.ConnectionDB;Blockly.ConnectionDB.prototype.addConnection_=function(a){if(a.inDB_)throw"Connection already in database.";for(var b=0,c=this.length;b<c;){var d=Math.floor((b+c)/2);if(this[d].y_<a.y_)b=d+1;else if(this[d].y_>a.y_)c=d;else{b=d;break}}this.splice(b,0,a);a.inDB_=!0};
-Blockly.ConnectionDB.prototype.removeConnection_=function(a){if(!a.inDB_)throw"Connection not in database.";a.inDB_=!1;for(var b=0,c=this.length-2,d=c;b<d;)this[d].y_<a.y_?b=d:c=d,d=Math.floor((b+c)/2);for(c=b=d;0<=b&&this[b].y_==a.y_;){if(this[b]==a){this.splice(b,1);return}b--}do{if(this[c]==a){this.splice(c,1);return}c++}while(c<this.length&&this[c].y_==a.y_);throw"Unable to find connection in connectionDB.";};
-Blockly.ConnectionDB.init=function(a){var b=[];b[Blockly.INPUT_VALUE]=new Blockly.ConnectionDB;b[Blockly.OUTPUT_VALUE]=new Blockly.ConnectionDB;b[Blockly.NEXT_STATEMENT]=new Blockly.ConnectionDB;b[Blockly.PREVIOUS_STATEMENT]=new Blockly.ConnectionDB;a.connectionDBList=b};
-// Copyright 2011 Google Inc.  Apache License 2.0
-Blockly.ContextMenu={};Blockly.ContextMenu.currentBlock=null;
-Blockly.ContextMenu.show=function(a,b){Blockly.WidgetDiv.show(Blockly.ContextMenu,null);if(b.length){for(var c=new goog.ui.Menu,d=0,e;e=b[d];d++){var f=new goog.ui.MenuItem(e.text);c.addItem(f);f.setEnabled(e.enabled);e.enabled&&goog.events.listen(f,goog.ui.Component.EventType.ACTION,function(a){return function(){Blockly.doCommand(a)}}(e.callback))}goog.events.listen(c,goog.ui.Component.EventType.ACTION,Blockly.ContextMenu.hide);e=goog.dom.getViewportSize();f=goog.style.getViewportPageOffset(document);
-c.render(Blockly.WidgetDiv.DIV);var g=c.getElement();Blockly.addClass_(g,"blocklyContextMenu");var h=goog.style.getSize(g),d=a.clientX+f.x,k=a.clientY+f.y;a.clientY+h.height>=e.height&&(k-=h.height);Blockly.RTL?h.width>=a.clientX&&(d+=h.width):a.clientX+h.width>=e.width&&(d-=h.width);Blockly.WidgetDiv.position(d,k,e,f);c.setAllowAutoFocus(!0);setTimeout(function(){g.focus()},1);Blockly.ContextMenu.currentBlock=null}else Blockly.ContextMenu.hide()};
-Blockly.ContextMenu.hide=function(){Blockly.WidgetDiv.hideIfOwner(Blockly.ContextMenu);Blockly.ContextMenu.currentBlock=null};Blockly.ContextMenu.callbackFactory=function(a,b){return function(){var c=Blockly.Xml.domToBlock(a.workspace,b),d=a.getRelativeToSurfaceXY();d.x=Blockly.RTL?d.x-Blockly.SNAP_RADIUS:d.x+Blockly.SNAP_RADIUS;d.y+=2*Blockly.SNAP_RADIUS;c.moveBy(d.x,d.y);c.select()}};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Field=function(a){this.sourceBlock_=null;this.fieldGroup_=Blockly.createSvgElement("g",{},null);this.borderRect_=Blockly.createSvgElement("rect",{rx:4,ry:4,x:-Blockly.BlockSvg.SEP_SPACE_X/2,y:-12,height:16},this.fieldGroup_);this.textElement_=Blockly.createSvgElement("text",{"class":"blocklyText"},this.fieldGroup_);this.size_={height:25,width:0};this.setText(a);this.visible_=!0};Blockly.Field.prototype.clone=function(){goog.asserts.fail("There should never be an instance of Field, only its derived classes.")};
-Blockly.Field.NBSP="\u00a0";Blockly.Field.prototype.EDITABLE=!0;Blockly.Field.prototype.init=function(a){if(this.sourceBlock_)throw"Field has already been initialized once.";this.sourceBlock_=a;this.updateEditable();a.getSvgRoot().appendChild(this.fieldGroup_);this.mouseUpWrapper_=Blockly.bindEvent_(this.fieldGroup_,"mouseup",this,this.onMouseUp_);this.setText(null)};
-Blockly.Field.prototype.dispose=function(){this.mouseUpWrapper_&&(Blockly.unbindEvent_(this.mouseUpWrapper_),this.mouseUpWrapper_=null);this.sourceBlock_=null;goog.dom.removeNode(this.fieldGroup_);this.borderRect_=this.textElement_=this.fieldGroup_=null};
-Blockly.Field.prototype.updateEditable=function(){this.EDITABLE&&(this.sourceBlock_.isEditable()?(Blockly.addClass_(this.fieldGroup_,"blocklyEditableText"),Blockly.removeClass_(this.fieldGroup_,"blocklyNoNEditableText"),this.fieldGroup_.style.cursor=this.CURSOR):(Blockly.addClass_(this.fieldGroup_,"blocklyNonEditableText"),Blockly.removeClass_(this.fieldGroup_,"blocklyEditableText"),this.fieldGroup_.style.cursor=""))};Blockly.Field.prototype.isVisible=function(){return this.visible_};
-Blockly.Field.prototype.setVisible=function(a){this.visible_=a;this.getRootElement().style.display=a?"block":"none"};Blockly.Field.prototype.getRootElement=function(){return this.fieldGroup_};Blockly.Field.prototype.render_=function(){var a=this.textElement_.getComputedTextLength();this.borderRect_&&this.borderRect_.setAttribute("width",a+Blockly.BlockSvg.SEP_SPACE_X);this.size_.width=a};Blockly.Field.prototype.getSize=function(){this.size_.width||this.render_();return this.size_};
-Blockly.Field.prototype.getText=function(){return this.text_};Blockly.Field.prototype.setText=function(a){null!==a&&a!==this.text_&&(this.text_=a,this.updateTextNode_(),this.sourceBlock_&&this.sourceBlock_.rendered&&(this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours_(),this.sourceBlock_.workspace.fireChangeEvent()))};
-Blockly.Field.prototype.updateTextNode_=function(){var a=this.text_;goog.dom.removeChildren(this.textElement_);a=a.replace(/\s/g,Blockly.Field.NBSP);Blockly.RTL&&a&&(a+="\u200f");a||(a=Blockly.Field.NBSP);a=document.createTextNode(a);this.textElement_.appendChild(a);this.size_.width=0};Blockly.Field.prototype.getValue=function(){return this.getText()};Blockly.Field.prototype.setValue=function(a){this.setText(a)};
-Blockly.Field.prototype.onMouseUp_=function(a){Blockly.isRightButton(a)||2!=Blockly.Block.dragMode_&&this.sourceBlock_.isEditable()&&this.showEditor_()};Blockly.Field.prototype.setTooltip=function(a){};
-// Copyright 2011 Google Inc.  Apache License 2.0
-Blockly.Tooltip={};Blockly.Tooltip.visible=!1;Blockly.Tooltip.LIMIT=50;Blockly.Tooltip.mouseOutPid_=0;Blockly.Tooltip.showPid_=0;Blockly.Tooltip.lastXY_={x:0,y:0};Blockly.Tooltip.element_=null;Blockly.Tooltip.poisonedElement_=null;Blockly.Tooltip.svgGroup_=null;Blockly.Tooltip.svgText_=null;Blockly.Tooltip.svgBackground_=null;Blockly.Tooltip.svgShadow_=null;Blockly.Tooltip.OFFSET_X=0;Blockly.Tooltip.OFFSET_Y=10;Blockly.Tooltip.RADIUS_OK=10;Blockly.Tooltip.HOVER_MS=1E3;Blockly.Tooltip.MARGINS=5;
-Blockly.Tooltip.createDom=function(){var a=Blockly.createSvgElement("g",{"class":"blocklyHidden"},null);Blockly.Tooltip.svgGroup_=a;Blockly.Tooltip.svgShadow_=Blockly.createSvgElement("rect",{"class":"blocklyTooltipShadow",x:2,y:2},a);Blockly.Tooltip.svgBackground_=Blockly.createSvgElement("rect",{"class":"blocklyTooltipBackground"},a);Blockly.Tooltip.svgText_=Blockly.createSvgElement("text",{"class":"blocklyTooltipText"},a);return a};
-Blockly.Tooltip.bindMouseEvents=function(a){Blockly.bindEvent_(a,"mouseover",null,Blockly.Tooltip.onMouseOver_);Blockly.bindEvent_(a,"mouseout",null,Blockly.Tooltip.onMouseOut_);Blockly.bindEvent_(a,"mousemove",null,Blockly.Tooltip.onMouseMove_)};Blockly.Tooltip.onMouseOver_=function(a){for(a=a.target;!goog.isString(a.tooltip)&&!goog.isFunction(a.tooltip);)a=a.tooltip;Blockly.Tooltip.element_!=a&&(Blockly.Tooltip.hide(),Blockly.Tooltip.poisonedElement_=null,Blockly.Tooltip.element_=a);window.clearTimeout(Blockly.Tooltip.mouseOutPid_)};
-Blockly.Tooltip.onMouseOut_=function(a){Blockly.Tooltip.mouseOutPid_=window.setTimeout(function(){Blockly.Tooltip.element_=null;Blockly.Tooltip.poisonedElement_=null;Blockly.Tooltip.hide()},1);window.clearTimeout(Blockly.Tooltip.showPid_)};
-Blockly.Tooltip.onMouseMove_=function(a){if(Blockly.Tooltip.element_&&Blockly.Tooltip.element_.tooltip&&0==Blockly.Block.dragMode_&&!Blockly.WidgetDiv.isVisible())if(Blockly.Tooltip.visible){a=Blockly.mouseToSvg(a);var b=Blockly.Tooltip.lastXY_.y-a.y;Math.sqrt(Math.pow(Blockly.Tooltip.lastXY_.x-a.x,2)+Math.pow(b,2))>Blockly.Tooltip.RADIUS_OK&&Blockly.Tooltip.hide()}else Blockly.Tooltip.poisonedElement_!=Blockly.Tooltip.element_&&(window.clearTimeout(Blockly.Tooltip.showPid_),Blockly.Tooltip.lastXY_=
-Blockly.mouseToSvg(a),Blockly.Tooltip.showPid_=window.setTimeout(Blockly.Tooltip.show_,Blockly.Tooltip.HOVER_MS))};Blockly.Tooltip.hide=function(){Blockly.Tooltip.visible&&(Blockly.Tooltip.visible=!1,Blockly.Tooltip.svgGroup_&&(Blockly.Tooltip.svgGroup_.style.display="none"));window.clearTimeout(Blockly.Tooltip.showPid_)};
-Blockly.Tooltip.show_=function(){Blockly.Tooltip.poisonedElement_=Blockly.Tooltip.element_;if(Blockly.Tooltip.svgGroup_){goog.dom.removeChildren(Blockly.Tooltip.svgText_);var a=Blockly.Tooltip.element_.tooltip;goog.isFunction(a)&&(a=a());for(var a=Blockly.Tooltip.wrap_(a,Blockly.Tooltip.LIMIT),a=a.split("\n"),b=0;b<a.length;b++){var c=Blockly.createSvgElement("tspan",{dy:"1em",x:Blockly.Tooltip.MARGINS},Blockly.Tooltip.svgText_),d=document.createTextNode(a[b]);c.appendChild(d)}Blockly.Tooltip.visible=
-!0;Blockly.Tooltip.svgGroup_.style.display="block";a=Blockly.Tooltip.svgText_.getBBox();b=2*Blockly.Tooltip.MARGINS+a.width;c=a.height;Blockly.Tooltip.svgBackground_.setAttribute("width",b);Blockly.Tooltip.svgBackground_.setAttribute("height",c);Blockly.Tooltip.svgShadow_.setAttribute("width",b);Blockly.Tooltip.svgShadow_.setAttribute("height",c);if(Blockly.RTL)for(var c=a.width,d=0,e;e=Blockly.Tooltip.svgText_.childNodes[d];d++)e.setAttribute("text-anchor","end"),e.setAttribute("x",c+Blockly.Tooltip.MARGINS);
-c=Blockly.Tooltip.lastXY_.x;c=Blockly.RTL?c-(Blockly.Tooltip.OFFSET_X+b):c+Blockly.Tooltip.OFFSET_X;b=Blockly.Tooltip.lastXY_.y+Blockly.Tooltip.OFFSET_Y;d=Blockly.svgSize();b+a.height>d.height&&(b-=a.height+2*Blockly.Tooltip.OFFSET_Y);Blockly.RTL?c=Math.max(Blockly.Tooltip.MARGINS,c):c+a.width>d.width-2*Blockly.Tooltip.MARGINS&&(c=d.width-a.width-2*Blockly.Tooltip.MARGINS);Blockly.Tooltip.svgGroup_.setAttribute("transform","translate("+c+","+b+")")}};
-Blockly.Tooltip.wrap_=function(a,b){if(a.length<=b)return a;for(var c=a.trim().split(/\s+/),d=0;d<c.length;d++)c[d].length>b&&(b=c[d].length);var e,d=-Infinity,f,g=1;do{e=d;f=a;for(var h=[],k=c.length/g,l=1,d=0;d<c.length-1;d++)l<(d+1.5)/k?(l++,h[d]=!0):h[d]=!1;h=Blockly.Tooltip.wrapMutate_(c,h,b);d=Blockly.Tooltip.wrapScore_(c,h,b);a=Blockly.Tooltip.wrapToText_(c,h);g++}while(d>e);return f};
-Blockly.Tooltip.wrapScore_=function(a,b,c){for(var d=[0],e=[],f=0;f<a.length;f++)d[d.length-1]+=a[f].length,!0===b[f]?(d.push(0),e.push(a[f].charAt(a[f].length-1))):!1===b[f]&&d[d.length-1]++;a=Math.max.apply(Math,d);for(f=b=0;f<d.length;f++)b-=2*Math.pow(Math.abs(c-d[f]),1.5),b-=Math.pow(a-d[f],1.5),-1!=".?!".indexOf(e[f])?b+=c/3:-1!=",;)]}".indexOf(e[f])&&(b+=c/4);1<d.length&&d[d.length-1]<=d[d.length-2]&&(b+=0.5);return b};
-Blockly.Tooltip.wrapMutate_=function(a,b,c){for(var d=Blockly.Tooltip.wrapScore_(a,b,c),e,f=0;f<b.length-1;f++)if(b[f]!=b[f+1]){var g=[].concat(b);g[f]=!g[f];g[f+1]=!g[f+1];var h=Blockly.Tooltip.wrapScore_(a,g,c);h>d&&(d=h,e=g)}return e?Blockly.Tooltip.wrapMutate_(a,e,c):b};Blockly.Tooltip.wrapToText_=function(a,b){for(var c=[],d=0;d<a.length;d++)c.push(a[d]),void 0!==b[d]&&c.push(b[d]?"\n":" ");return c.join("")};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.FieldLabel=function(a){this.sourceBlock_=null;this.textElement_=Blockly.createSvgElement("text",{"class":"blocklyText"},null);this.size_={height:25,width:0};this.setText(a)};goog.inherits(Blockly.FieldLabel,Blockly.Field);Blockly.FieldLabel.prototype.clone=function(){return new Blockly.FieldLabel(this.getText())};Blockly.FieldLabel.prototype.EDITABLE=!1;
-Blockly.FieldLabel.prototype.init=function(a){if(this.sourceBlock_)throw"Text has already been initialized once.";this.sourceBlock_=a;a.getSvgRoot().appendChild(this.textElement_);this.textElement_.tooltip=this.sourceBlock_;Blockly.Tooltip.bindMouseEvents(this.textElement_)};Blockly.FieldLabel.prototype.dispose=function(){goog.dom.removeNode(this.textElement_);this.textElement_=null};Blockly.FieldLabel.prototype.getRootElement=function(){return this.textElement_};
-Blockly.FieldLabel.prototype.setTooltip=function(a){this.textElement_.tooltip=a};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Input=function(a,b,c,d){this.type=a;this.name=b;this.sourceBlock_=c;this.connection=d;this.fieldRow=[];this.align=Blockly.ALIGN_LEFT;this.visible_=!0};
-Blockly.Input.prototype.appendField=function(a,b){if(!a&&!b)return this;goog.isString(a)&&(a=new Blockly.FieldLabel(a));this.sourceBlock_.svg_&&a.init(this.sourceBlock_);a.name=b;a.prefixField&&this.appendField(a.prefixField);this.fieldRow.push(a);a.suffixField&&this.appendField(a.suffixField);this.sourceBlock_.rendered&&(this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours_());return this};
-Blockly.Input.prototype.appendTitle=function(a,b){console.log("Deprecated call to appendTitle, use appendField instead.");return this.appendField(a,b)};Blockly.Input.prototype.removeField=function(a){for(var b=0,c;c=this.fieldRow[b];b++)if(c.name===a){c.dispose();this.fieldRow.splice(b,1);this.sourceBlock_.rendered&&(this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours_());return}goog.asserts.fail('Field "%s" not found.',a)};Blockly.Input.prototype.isVisible=function(){return this.visible_};
-Blockly.Input.prototype.setVisible=function(a){var b=[];if(this.visible_==a)return b;for(var c=(this.visible_=a)?"block":"none",d=0,e;e=this.fieldRow[d];d++)e.setVisible(a);this.connection&&(a?b=this.connection.unhideAll():this.connection.hideAll(),d=this.connection.targetBlock())&&(d.svg_.getRootElement().style.display=c,a||(d.rendered=!1));return b};Blockly.Input.prototype.setCheck=function(a){if(!this.connection)throw"This input does not have a connection.";this.connection.setCheck(a);return this};
-Blockly.Input.prototype.setAlign=function(a){this.align=a;this.sourceBlock_.rendered&&this.sourceBlock_.render();return this};Blockly.Input.prototype.init=function(){for(var a=0;a<this.fieldRow.length;a++)this.fieldRow[a].init(this.sourceBlock_)};Blockly.Input.prototype.dispose=function(){for(var a=0,b;b=this.fieldRow[a];a++)b.dispose();this.connection&&this.connection.dispose();this.sourceBlock_=null};
-// Copyright 2013 Google Inc.  Apache License 2.0
-Blockly.Msg={};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Mutator=function(a){Blockly.Mutator.superClass_.constructor.call(this,null);this.quarkXml_=[];for(var b=0;b<a.length;b++){var c=goog.dom.createDom("block",{type:a[b]});this.quarkXml_[b]=c}};goog.inherits(Blockly.Mutator,Blockly.Icon);Blockly.Mutator.prototype.workspaceWidth_=0;Blockly.Mutator.prototype.workspaceHeight_=0;
-Blockly.Mutator.prototype.createIcon=function(){Blockly.Icon.prototype.createIcon_.call(this);var a=Blockly.Icon.RADIUS/2;Blockly.createSvgElement("rect",{"class":"blocklyIconShield",width:4*a,height:4*a,rx:a,ry:a},this.iconGroup_);this.iconMark_=Blockly.createSvgElement("text",{"class":"blocklyIconMark",x:Blockly.Icon.RADIUS,y:2*Blockly.Icon.RADIUS-4},this.iconGroup_);this.iconMark_.appendChild(document.createTextNode("\u2605"))};
-Blockly.Mutator.prototype.iconClick_=function(a){this.block_.isEditable()&&Blockly.Icon.prototype.iconClick_.call(this,a)};
-Blockly.Mutator.prototype.createEditor_=function(){this.svgDialog_=Blockly.createSvgElement("svg",{x:Blockly.Bubble.BORDER_WIDTH,y:Blockly.Bubble.BORDER_WIDTH},null);Blockly.createSvgElement("rect",{"class":"blocklyMutatorBackground",height:"100%",width:"100%"},this.svgDialog_);var a=this;this.workspace_=new Blockly.Workspace(function(){return a.getFlyoutMetrics_()},null);this.flyout_=new Blockly.Flyout;this.flyout_.autoClose=!1;this.svgDialog_.appendChild(this.flyout_.createDom());this.svgDialog_.appendChild(this.workspace_.createDom());
-return this.svgDialog_};Blockly.Mutator.prototype.updateEditable=function(){this.block_.isEditable()?Blockly.Icon.prototype.updateEditable.call(this):(this.setVisible(!1),Blockly.removeClass_(this.iconGroup_,"blocklyIconGroup"))};
-Blockly.Mutator.prototype.resizeBubble_=function(){var a=2*Blockly.Bubble.BORDER_WIDTH,b=this.workspace_.getCanvas().getBBox(),c=this.flyout_.getMetrics_(),d;d=Blockly.RTL?-b.x:b.width+b.x;b=Math.max(b.height+3*a,c.contentHeight+20);d+=3*a;if(Math.abs(this.workspaceWidth_-d)>a||Math.abs(this.workspaceHeight_-b)>a)this.workspaceWidth_=d,this.workspaceHeight_=b,this.bubble_.setBubbleSize(d+a,b+a),this.svgDialog_.setAttribute("width",this.workspaceWidth_),this.svgDialog_.setAttribute("height",this.workspaceHeight_);
-Blockly.RTL&&(a="translate("+this.workspaceWidth_+",0)",this.workspace_.getCanvas().setAttribute("transform",a))};
-Blockly.Mutator.prototype.setVisible=function(a){if(a!=this.isVisible())if(a){this.bubble_=new Blockly.Bubble(this.block_.workspace,this.createEditor_(),this.block_.svg_.svgPath_,this.iconX_,this.iconY_,null,null);var b=this;this.flyout_.init(this.workspace_,!1);this.flyout_.show(this.quarkXml_);this.rootBlock_=this.block_.decompose(this.workspace_);a=this.rootBlock_.getDescendants();for(var c=0,d;d=a[c];c++)d.render();this.rootBlock_.setMovable(!1);this.rootBlock_.setDeletable(!1);a=2*this.flyout_.CORNER_RADIUS;
-c=this.flyout_.width_+a;Blockly.RTL&&(c=-c);this.rootBlock_.moveBy(c,a);this.block_.saveConnections&&(this.block_.saveConnections(this.rootBlock_),this.sourceListener_=Blockly.bindEvent_(this.block_.workspace.getCanvas(),"blocklyWorkspaceChange",this.block_,function(){b.block_.saveConnections(b.rootBlock_)}));this.resizeBubble_();Blockly.bindEvent_(this.workspace_.getCanvas(),"blocklyWorkspaceChange",this.block_,function(){b.workspaceChanged_()});this.updateColour()}else this.svgDialog_=null,this.flyout_.dispose(),
-this.flyout_=null,this.workspace_.dispose(),this.rootBlock_=this.workspace_=null,this.bubble_.dispose(),this.bubble_=null,this.workspaceHeight_=this.workspaceWidth_=0,this.sourceListener_&&(Blockly.unbindEvent_(this.sourceListener_),this.sourceListener_=null)};
-Blockly.Mutator.prototype.workspaceChanged_=function(){if(0==Blockly.Block.dragMode_)for(var a=this.workspace_.getTopBlocks(!1),b=0,c;c=a[b];b++){var d=c.getRelativeToSurfaceXY(),e=c.getHeightWidth();(Blockly.RTL?d.x>-this.flyout_.width_+20:d.x<this.flyout_.width_-20)?c.dispose(!1,!0):20>d.y+e.height&&c.moveBy(0,20-e.height-d.y)}this.rootBlock_.workspace==this.workspace_&&(a=this.block_.rendered,this.block_.rendered=!1,this.block_.compose(this.rootBlock_),this.block_.rendered=a,this.block_.rendered&&
-this.block_.render(),this.resizeBubble_(),this.block_.workspace.fireChangeEvent())};Blockly.Mutator.prototype.getFlyoutMetrics_=function(){var a=0;Blockly.RTL&&(a+=this.workspaceWidth_);return{viewHeight:this.workspaceHeight_,viewWidth:0,absoluteTop:0,absoluteLeft:a}};Blockly.Mutator.prototype.dispose=function(){this.block_.mutator=null;Blockly.Icon.prototype.dispose.call(this)};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Warning=function(a){Blockly.Warning.superClass_.constructor.call(this,a);this.createIcon_()};goog.inherits(Blockly.Warning,Blockly.Icon);Blockly.Warning.textToDom_=function(a){var b=Blockly.createSvgElement("text",{"class":"blocklyText blocklyBubbleText",y:Blockly.Bubble.BORDER_WIDTH},null);a=a.split("\n");for(var c=0;c<a.length;c++){var d=Blockly.createSvgElement("tspan",{dy:"1em",x:Blockly.Bubble.BORDER_WIDTH},b),e=document.createTextNode(a[c]);d.appendChild(e)}return b};
-Blockly.Warning.prototype.text_="";Blockly.Warning.prototype.createIcon_=function(){Blockly.Icon.prototype.createIcon_.call(this);Blockly.createSvgElement("path",{"class":"blocklyIconShield",d:"M 2,15 Q -1,15 0.5,12 L 6.5,1.7 Q 8,-1 9.5,1.7 L 15.5,12 Q 17,15 14,15 z"},this.iconGroup_);this.iconMark_=Blockly.createSvgElement("text",{"class":"blocklyIconMark",x:Blockly.Icon.RADIUS,y:2*Blockly.Icon.RADIUS-3},this.iconGroup_);this.iconMark_.appendChild(document.createTextNode("!"))};
-Blockly.Warning.prototype.setVisible=function(a){if(a!=this.isVisible())if(a){a=Blockly.Warning.textToDom_(this.text_);this.bubble_=new Blockly.Bubble(this.block_.workspace,a,this.block_.svg_.svgPath_,this.iconX_,this.iconY_,null,null);if(Blockly.RTL)for(var b=a.getBBox().width,c=0,d;d=a.childNodes[c];c++)d.setAttribute("text-anchor","end"),d.setAttribute("x",b+Blockly.Bubble.BORDER_WIDTH);this.updateColour();a=this.bubble_.getBubbleSize();this.bubble_.setBubbleSize(a.width,a.height)}else this.bubble_.dispose(),
-this.body_=this.bubble_=null};Blockly.Warning.prototype.bodyFocus_=function(a){this.bubble_.promote_()};Blockly.Warning.prototype.setText=function(a){this.text_!=a&&(this.text_=a,this.isVisible()&&(this.setVisible(!1),this.setVisible(!0)))};Blockly.Warning.prototype.dispose=function(){this.block_.warning=null;Blockly.Icon.prototype.dispose.call(this)};
-// Copyright 2011 Google Inc.  Apache License 2.0
-Blockly.uidCounter_=0;Blockly.getUidCounter=function(){return Blockly.uidCounter_};Blockly.setUidCounter=function(a){Blockly.uidCounter_=a};Blockly.genUid=function(){var a=(++Blockly.uidCounter_).toString();return Blockly.Realtime.isEnabled()?Blockly.Realtime.genUid(a):a};Blockly.Block=function(){goog.asserts.assert(0==arguments.length,"Please use Blockly.Block.obtain.")};
-Blockly.Block.obtain=function(a,b){if(Blockly.Realtime.isEnabled())return Blockly.Realtime.obtainBlock(a,b);var c=new Blockly.Block;c.initialize(a,b);return c};Blockly.Block.prototype.initialize=function(a,b){this.id=Blockly.genUid();a.addTopBlock(this);this.fill(a,b);goog.isFunction(this.onchange)&&Blockly.bindEvent_(a.getCanvas(),"blocklyWorkspaceChange",this,this.onchange)};
-Blockly.Block.prototype.fill=function(a,b){this.previousConnection=this.nextConnection=this.outputConnection=null;this.inputList=[];this.disabled=this.rendered=this.inputsInline=!1;this.tooltip="";this.contextMenu=!0;this.parentBlock_=null;this.childBlocks_=[];this.editable_=this.movable_=this.deletable_=!0;this.collapsed_=!1;this.workspace=a;this.isInFlyout=a.isFlyout;if(b){this.type=b;var c=Blockly.Blocks[b];goog.asserts.assertObject(c,'Error: "%s" is an unknown language block.',b);goog.mixin(this,
-c)}goog.isFunction(this.init)&&this.init()};Blockly.Block.getById=function(a,b){return Blockly.Realtime.isEnabled()?Blockly.Realtime.getBlockById(a):b.getBlockById(a)};Blockly.Block.prototype.svg_=null;Blockly.Block.prototype.mutator=null;Blockly.Block.prototype.comment=null;Blockly.Block.prototype.warning=null;Blockly.Block.prototype.getIcons=function(){var a=[];this.mutator&&a.push(this.mutator);this.comment&&a.push(this.comment);this.warning&&a.push(this.warning);return a};
-Blockly.Block.prototype.initSvg=function(){this.svg_=new Blockly.BlockSvg(this);this.svg_.init();Blockly.readOnly||Blockly.bindEvent_(this.svg_.getRootElement(),"mousedown",this,this.onMouseDown_);this.workspace.getCanvas().appendChild(this.svg_.getRootElement())};Blockly.Block.prototype.getSvgRoot=function(){return this.svg_&&this.svg_.getRootElement()};Blockly.Block.dragMode_=0;Blockly.Block.onMouseUpWrapper_=null;Blockly.Block.onMouseMoveWrapper_=null;
-Blockly.Block.terminateDrag_=function(){Blockly.Block.onMouseUpWrapper_&&(Blockly.unbindEvent_(Blockly.Block.onMouseUpWrapper_),Blockly.Block.onMouseUpWrapper_=null);Blockly.Block.onMouseMoveWrapper_&&(Blockly.unbindEvent_(Blockly.Block.onMouseMoveWrapper_),Blockly.Block.onMouseMoveWrapper_=null);var a=Blockly.selected;if(2==Blockly.Block.dragMode_&&a){var b=a.getRelativeToSurfaceXY();a.moveConnections_(b.x-a.startDragX,b.y-a.startDragY);delete a.draggedBubbles_;a.setDragging_(!1);a.render();goog.Timer.callOnce(a.bumpNeighbours_,
-Blockly.BUMP_DELAY,a);Blockly.fireUiEvent(window,"resize")}a&&a.workspace.fireChangeEvent();Blockly.Block.dragMode_=0};Blockly.Block.prototype.select=function(){goog.asserts.assertObject(this.svg_,"Block is not rendered.");Blockly.selected&&Blockly.selected.unselect();Blockly.selected=this;this.svg_.addSelect();Blockly.fireUiEvent(this.workspace.getCanvas(),"blocklySelectChange")};
-Blockly.Block.prototype.unselect=function(){goog.asserts.assertObject(this.svg_,"Block is not rendered.");Blockly.selected=null;this.svg_.removeSelect();Blockly.fireUiEvent(this.workspace.getCanvas(),"blocklySelectChange")};
-Blockly.Block.prototype.dispose=function(a,b,c){this.rendered=!1;this.unplug(a);b&&this.svg_&&this.svg_.disposeUiEffect();this.workspace&&!c&&(this.workspace.removeTopBlock(this),this.workspace=null);Blockly.selected==this&&(Blockly.selected=null,Blockly.terminateDrag_());Blockly.ContextMenu.currentBlock==this&&Blockly.ContextMenu.hide();for(a=this.childBlocks_.length-1;0<=a;a--)this.childBlocks_[a].dispose(!1);b=this.getIcons();for(a=0;a<b.length;a++)b[a].dispose();for(a=0;b=this.inputList[a];a++)b.dispose();
-this.inputList=[];b=this.getConnections_(!0);for(a=0;a<b.length;a++)c=b[a],c.targetConnection&&c.disconnect(),b[a].dispose();this.svg_&&(this.svg_.dispose(),this.svg_=null);Blockly.Realtime.isEnabled()&&!Blockly.Realtime.withinSync&&Blockly.Realtime.removeBlock(this)};
-Blockly.Block.prototype.unplug=function(a,b){b=b&&!!this.getParent();if(this.outputConnection)this.outputConnection.targetConnection&&this.setParent(null);else{var c=null;this.previousConnection&&this.previousConnection.targetConnection&&(c=this.previousConnection.targetConnection,this.setParent(null));var d=this.getNextBlock();if(a&&d){var e=this.nextConnection.targetConnection;d.setParent(null);c&&c.connect(e)}}b&&this.moveBy(Blockly.SNAP_RADIUS*(Blockly.RTL?-1:1),2*Blockly.SNAP_RADIUS)};
-Blockly.Block.prototype.getRelativeToSurfaceXY=function(){var a=0,b=0;if(this.svg_){var c=this.svg_.getRootElement();do var d=Blockly.getRelativeXY_(c),a=a+d.x,b=b+d.y,c=c.parentNode;while(c&&c!=this.workspace.getCanvas())}return{x:a,y:b}};Blockly.Block.prototype.moveBy=function(a,b){var c=this.getRelativeToSurfaceXY();this.svg_.getRootElement().setAttribute("transform","translate("+(c.x+a)+", "+(c.y+b)+")");this.moveConnections_(a,b);Blockly.Realtime.blockChanged(this)};
-Blockly.Block.prototype.getHeightWidth=function(){var a=this.svg_.height,b=this.svg_.width,c=this.getNextBlock();c&&(c=c.getHeightWidth(),a+=c.height-4,b=Math.max(b,c.width));return{height:a,width:b}};
-Blockly.Block.prototype.onMouseDown_=function(a){if(!this.isInFlyout){Blockly.svgResize();Blockly.terminateDrag_();this.select();Blockly.hideChaff();if(Blockly.isRightButton(a))this.showContextMenu_(a);else if(this.isMovable()){Blockly.removeAllRanges();Blockly.setCursorHand_(!0);var b=this.getRelativeToSurfaceXY();this.startDragX=b.x;this.startDragY=b.y;this.startDragMouseX=a.clientX;this.startDragMouseY=a.clientY;Blockly.Block.dragMode_=1;Blockly.Block.onMouseUpWrapper_=Blockly.bindEvent_(document,
-"mouseup",this,this.onMouseUp_);Blockly.Block.onMouseMoveWrapper_=Blockly.bindEvent_(document,"mousemove",this,this.onMouseMove_);this.draggedBubbles_=[];for(var b=this.getDescendants(),c=0,d;d=b[c];c++){d=d.getIcons();for(var e=0;e<d.length;e++){var f=d[e].getIconLocation();f.bubble=d[e];this.draggedBubbles_.push(f)}}}else return;a.stopPropagation()}};
-Blockly.Block.prototype.onMouseUp_=function(a){var b=this;Blockly.doCommand(function(){Blockly.terminateDrag_();if(Blockly.selected&&Blockly.highlightedConnection_)Blockly.localConnection_.connect(Blockly.highlightedConnection_),b.svg_&&(Blockly.localConnection_.isSuperior()?Blockly.highlightedConnection_:Blockly.localConnection_).sourceBlock_.svg_.connectionUiEffect(),b.workspace.trashcan&&b.workspace.trashcan.isOpen&&b.workspace.trashcan.close();else if(b.workspace.trashcan&&b.workspace.trashcan.isOpen){var a=
-b.workspace.trashcan;goog.Timer.callOnce(a.close,100,a);Blockly.selected.dispose(!1,!0);Blockly.fireUiEvent(window,"resize")}Blockly.highlightedConnection_&&(Blockly.highlightedConnection_.unhighlight(),Blockly.highlightedConnection_=null)})};Blockly.Block.prototype.showHelp_=function(){var a=goog.isFunction(this.helpUrl)?this.helpUrl():this.helpUrl;a&&window.open(a)};
-Blockly.Block.prototype.duplicate_=function(){var a=Blockly.Xml.blockToDom_(this);Blockly.Xml.deleteNext(a);var a=Blockly.Xml.domToBlock(this.workspace,a),b=this.getRelativeToSurfaceXY();b.x=Blockly.RTL?b.x-Blockly.SNAP_RADIUS:b.x+Blockly.SNAP_RADIUS;b.y+=2*Blockly.SNAP_RADIUS;a.moveBy(b.x,b.y);a.select();return a};
-Blockly.Block.prototype.showContextMenu_=function(a){if(!Blockly.readOnly&&this.contextMenu){var b=this,c=[];if(this.isDeletable()&&!b.isInFlyout){var d={text:Blockly.Msg.DUPLICATE_BLOCK,enabled:!0,callback:function(){b.duplicate_()}};this.getDescendants().length>this.workspace.remainingCapacity()&&(d.enabled=!1);c.push(d);this.isEditable()&&!this.collapsed_&&(d={enabled:!0},this.comment?(d.text=Blockly.Msg.REMOVE_COMMENT,d.callback=function(){b.setCommentText(null)}):(d.text=Blockly.Msg.ADD_COMMENT,
-d.callback=function(){b.setCommentText("")}),c.push(d));if(!this.collapsed_)for(d=0;d<this.inputList.length;d++)if(this.inputList[d].type==Blockly.INPUT_VALUE){d={enabled:!0};d.text=this.inputsInline?Blockly.Msg.EXTERNAL_INPUTS:Blockly.Msg.INLINE_INPUTS;d.callback=function(){b.setInputsInline(!b.inputsInline)};c.push(d);break}Blockly.collapse&&(this.collapsed_?(d={enabled:!0},d.text=Blockly.Msg.EXPAND_BLOCK,d.callback=function(){b.setCollapsed(!1)}):(d={enabled:!0},d.text=Blockly.Msg.COLLAPSE_BLOCK,
-d.callback=function(){b.setCollapsed(!0)}),c.push(d));d={text:this.disabled?Blockly.Msg.ENABLE_BLOCK:Blockly.Msg.DISABLE_BLOCK,enabled:!this.getInheritedDisabled(),callback:function(){b.setDisabled(!b.disabled)}};c.push(d);var d=this.getDescendants().length,e=this.getNextBlock();e&&(d-=e.getDescendants().length);d={text:1==d?Blockly.Msg.DELETE_BLOCK:Blockly.Msg.DELETE_X_BLOCKS.replace("%1",String(d)),enabled:!0,callback:function(){b.dispose(!0,!0)}};c.push(d)}d={enabled:!(goog.isFunction(this.helpUrl)?
-!this.helpUrl():!this.helpUrl)};d.text=Blockly.Msg.HELP;d.callback=function(){b.showHelp_()};c.push(d);this.customContextMenu&&!b.isInFlyout&&this.customContextMenu(c);Blockly.ContextMenu.show(a,c);Blockly.ContextMenu.currentBlock=this}};
-Blockly.Block.prototype.getConnections_=function(a){var b=[];if(a||this.rendered)if(this.outputConnection&&b.push(this.outputConnection),this.nextConnection&&b.push(this.nextConnection),this.previousConnection&&b.push(this.previousConnection),a||!this.collapsed_){a=0;for(var c;c=this.inputList[a];a++)c.connection&&b.push(c.connection)}return b};
-Blockly.Block.prototype.moveConnections_=function(a,b){if(this.rendered){for(var c=this.getConnections_(!1),d=0;d<c.length;d++)c[d].moveBy(a,b);c=this.getIcons();for(d=0;d<c.length;d++)c[d].computeIconLocation();for(d=0;d<this.childBlocks_.length;d++)this.childBlocks_[d].moveConnections_(a,b)}};Blockly.Block.prototype.setDragging_=function(a){a?this.svg_.addDragging():this.svg_.removeDragging();for(var b=0;b<this.childBlocks_.length;b++)this.childBlocks_[b].setDragging_(a)};
-Blockly.Block.prototype.onMouseMove_=function(a){var b=this;Blockly.doCommand(function(){if(!("mousemove"==a.type&&1>=a.clientX&&0==a.clientY&&0==a.button)){Blockly.removeAllRanges();var c=a.clientX-b.startDragMouseX,d=a.clientY-b.startDragMouseY;1==Blockly.Block.dragMode_&&Math.sqrt(Math.pow(c,2)+Math.pow(d,2))>Blockly.DRAG_RADIUS&&(Blockly.Block.dragMode_=2,b.setParent(null),b.setDragging_(!0));if(2==Blockly.Block.dragMode_){var e=b.startDragX+c,f=b.startDragY+d;b.svg_.getRootElement().setAttribute("transform",
-"translate("+e+", "+f+")");for(e=0;e<b.draggedBubbles_.length;e++)f=b.draggedBubbles_[e],f.bubble.setIconLocation(f.x+c,f.y+d);for(var f=b.getConnections_(!1),g=null,h=null,k=Blockly.SNAP_RADIUS,e=0;e<f.length;e++){var l=f[e],p=l.closest(k,c,d);p.connection&&(g=p.connection,h=l,k=p.radius)}Blockly.highlightedConnection_&&Blockly.highlightedConnection_!=g&&(Blockly.highlightedConnection_.unhighlight(),Blockly.highlightedConnection_=null,Blockly.localConnection_=null);g&&g!=Blockly.highlightedConnection_&&
-(g.highlight(),Blockly.highlightedConnection_=g,Blockly.localConnection_=h);if(b.workspace.trashcan&&b.isDeletable())b.workspace.trashcan.onMouseMove(a)}}a.stopPropagation()})};
-Blockly.Block.prototype.bumpNeighbours_=function(){if(0==Blockly.Block.dragMode_){var a=this.getRootBlock();if(!a.isInFlyout)for(var b=this.getConnections_(!1),c=0;c<b.length;c++){var d=b[c];d.targetConnection&&d.isSuperior()&&d.targetBlock().bumpNeighbours_();for(var e=d.neighbours_(Blockly.SNAP_RADIUS),f=0;f<e.length;f++){var g=e[f];d.targetConnection&&g.targetConnection||g.sourceBlock_.getRootBlock()!=a&&(d.isSuperior()?g.bumpAwayFrom_(d):d.bumpAwayFrom_(g))}}}};
-Blockly.Block.prototype.getParent=function(){return this.parentBlock_};Blockly.Block.prototype.getSurroundParent=function(){for(var a=this;;){do{var b=a,a=a.getParent();if(!a)return null}while(a.getNextBlock()==b);return a}};Blockly.Block.prototype.getNextBlock=function(){return this.nextConnection&&this.nextConnection.targetBlock()};Blockly.Block.prototype.getRootBlock=function(){var a,b=this;do a=b,b=a.parentBlock_;while(b);return a};Blockly.Block.prototype.getChildren=function(){return this.childBlocks_};
-Blockly.Block.prototype.setParent=function(a){if(this.parentBlock_){for(var b=this.parentBlock_.childBlocks_,c,d=0;c=b[d];d++)if(c==this){b.splice(d,1);break}b=this.getRelativeToSurfaceXY();this.workspace.getCanvas().appendChild(this.svg_.getRootElement());this.svg_.getRootElement().setAttribute("transform","translate("+b.x+", "+b.y+")");this.parentBlock_=null;this.previousConnection&&this.previousConnection.targetConnection&&this.previousConnection.disconnect();this.outputConnection&&this.outputConnection.targetConnection&&
-this.outputConnection.disconnect()}else goog.array.contains(this.workspace.getTopBlocks(!1),this)&&this.workspace.removeTopBlock(this);(this.parentBlock_=a)?(a.childBlocks_.push(this),b=this.getRelativeToSurfaceXY(),a.svg_&&this.svg_&&a.svg_.getRootElement().appendChild(this.svg_.getRootElement()),a=this.getRelativeToSurfaceXY(),this.moveConnections_(a.x-b.x,a.y-b.y)):this.workspace.addTopBlock(this)};
-Blockly.Block.prototype.getDescendants=function(){for(var a=[this],b,c=0;b=this.childBlocks_[c];c++)a.push.apply(a,b.getDescendants());return a};Blockly.Block.prototype.isDeletable=function(){return this.deletable_&&!Blockly.readOnly};Blockly.Block.prototype.setDeletable=function(a){this.deletable_=a;this.svg_&&this.svg_.updateMovable()};Blockly.Block.prototype.isMovable=function(){return this.movable_&&!Blockly.readOnly};Blockly.Block.prototype.setMovable=function(a){this.movable_=a};
-Blockly.Block.prototype.isEditable=function(){return this.editable_&&!Blockly.readOnly};Blockly.Block.prototype.setEditable=function(a){this.editable_=a;a=0;for(var b;b=this.inputList[a];a++)for(var c=0,d;d=b.fieldRow[c];c++)d.updateEditable();b=this.getIcons();for(a=0;a<b.length;a++)b[a].updateEditable()};Blockly.Block.prototype.setHelpUrl=function(a){this.helpUrl=a};Blockly.Block.prototype.getColour=function(){return this.colourHue_};
-Blockly.Block.prototype.setColour=function(a){this.colourHue_=a;this.svg_&&this.svg_.updateColour();var b=this.getIcons();for(a=0;a<b.length;a++)b[a].updateColour();if(this.rendered){for(a=0;b=this.inputList[a];a++)for(var c=0,d;d=b.fieldRow[c];c++)d.setText(null);this.render()}};Blockly.Block.prototype.getField_=function(a){for(var b=0,c;c=this.inputList[b];b++)for(var d=0,e;e=c.fieldRow[d];d++)if(e.name===a)return e;return null};
-Blockly.Block.prototype.getFieldValue=function(a){return(a=this.getField_(a))?a.getValue():null};Blockly.Block.prototype.getTitleValue=function(a){console.log("Deprecated call to getTitleValue, use getFieldValue instead.");return this.getFieldValue(a)};Blockly.Block.prototype.setFieldValue=function(a,b){var c=this.getField_(b);goog.asserts.assertObject(c,'Field "%s" not found.',b);c.setValue(a)};
-Blockly.Block.prototype.setTitleValue=function(a,b){console.log("Deprecated call to setTitleValue, use setFieldValue instead.");this.setFieldValue(a,b)};Blockly.Block.prototype.setTooltip=function(a){this.tooltip=a};
-Blockly.Block.prototype.setPreviousStatement=function(a,b){this.previousConnection&&(goog.asserts.assert(!this.previousConnection.targetConnection,"Must disconnect previous statement before removing connection."),this.previousConnection.dispose(),this.previousConnection=null);a&&(goog.asserts.assert(!this.outputConnection,"Remove output connection prior to adding previous connection."),void 0===b&&(b=null),this.previousConnection=new Blockly.Connection(this,Blockly.PREVIOUS_STATEMENT),this.previousConnection.setCheck(b));
-this.rendered&&(this.render(),this.bumpNeighbours_())};Blockly.Block.prototype.setNextStatement=function(a,b){this.nextConnection&&(goog.asserts.assert(!this.nextConnection.targetConnection,"Must disconnect next statement before removing connection."),this.nextConnection.dispose(),this.nextConnection=null);a&&(void 0===b&&(b=null),this.nextConnection=new Blockly.Connection(this,Blockly.NEXT_STATEMENT),this.nextConnection.setCheck(b));this.rendered&&(this.render(),this.bumpNeighbours_())};
-Blockly.Block.prototype.setOutput=function(a,b){this.outputConnection&&(goog.asserts.assert(!this.outputConnection.targetConnection,"Must disconnect output value before removing connection."),this.outputConnection.dispose(),this.outputConnection=null);a&&(goog.asserts.assert(!this.previousConnection,"Remove previous connection prior to adding output connection."),void 0===b&&(b=null),this.outputConnection=new Blockly.Connection(this,Blockly.OUTPUT_VALUE),this.outputConnection.setCheck(b));this.rendered&&
-(this.render(),this.bumpNeighbours_())};Blockly.Block.prototype.changeOutput=function(a){goog.asserts.assert(this.outputConnection,"Only use changeOutput() on blocks that already have an output.");this.outputConnection.setCheck(a)};Blockly.Block.prototype.setInputsInline=function(a){this.inputsInline=a;this.rendered&&(this.render(),this.bumpNeighbours_(),this.workspace.fireChangeEvent())};
-Blockly.Block.prototype.setDisabled=function(a){this.disabled!=a&&(this.disabled=a,this.svg_.updateDisabled(),this.workspace.fireChangeEvent())};Blockly.Block.prototype.getInheritedDisabled=function(){for(var a=this;;){a=a.getSurroundParent();if(!a)return!1;if(a.disabled)return!0}};Blockly.Block.prototype.isCollapsed=function(){return this.collapsed_};
-Blockly.Block.prototype.setCollapsed=function(a){if(this.collapsed_!=a){this.collapsed_=a;for(var b=[],c=0,d;d=this.inputList[c];c++)b.push.apply(b,d.setVisible(!a));if(a){a=this.getIcons();for(c=0;c<a.length;c++)a[c].setVisible(!1);c=this.toString(Blockly.COLLAPSE_CHARS);this.appendDummyInput("_TEMP_COLLAPSED_INPUT").appendField(c)}else this.removeInput("_TEMP_COLLAPSED_INPUT");b.length||(b[0]=this);if(this.rendered){for(c=0;a=b[c];c++)a.render();this.bumpNeighbours_()}}};
-Blockly.Block.prototype.toString=function(a){for(var b=[],c=0,d;d=this.inputList[c];c++){for(var e=0,f;f=d.fieldRow[e];e++)b.push(f.getText());d.connection&&((d=d.connection.targetBlock())?b.push(d.toString()):b.push("?"))}b=goog.string.trim(b.join(" "))||"???";a&&(b=goog.string.truncate(b,a));return b};Blockly.Block.prototype.appendValueInput=function(a){return this.appendInput_(Blockly.INPUT_VALUE,a)};
-Blockly.Block.prototype.appendStatementInput=function(a){return this.appendInput_(Blockly.NEXT_STATEMENT,a)};Blockly.Block.prototype.appendDummyInput=function(a){return this.appendInput_(Blockly.DUMMY_INPUT,a||"")};
-Blockly.Block.prototype.interpolateMsg=function(a,b){function c(a){a instanceof Blockly.Field?this.appendField(a):(goog.asserts.assert(goog.isArray(a)),this.appendField(a[1],a[0]))}goog.asserts.assertString(a);var d=arguments[arguments.length-1];goog.asserts.assert(d===Blockly.ALIGN_LEFT||d===Blockly.ALIGN_CENTRE||d===Blockly.ALIGN_RIGHT,'Illegal final argument "%d" is not an alignment.',d);arguments.length-=1;for(var e=a.split(this.interpolateMsg.SPLIT_REGEX_),f=[],g=0;g<e.length;g+=2){var h=goog.string.trim(e[g]),
-k=void 0;h&&f.push(new Blockly.FieldLabel(h));if((h=e[g+1])&&"%"==h.charAt(0)){var l=parseInt(h.substring(1),10),p=arguments[l];goog.asserts.assertArray(p,'Message symbol "%s" is out of range.',h);goog.asserts.assertArray(p,'Argument "%s" is not a tuple.',h);p[1]instanceof Blockly.Field?f.push([p[0],p[1]]):k=this.appendValueInput(p[0]).setCheck(p[1]).setAlign(p[2]);arguments[l]=null}else"\n"==h&&f.length&&(k=this.appendDummyInput());k&&f.length&&(f.forEach(c,k),f=[])}f.length&&(k=this.appendDummyInput().setAlign(d),
-f.forEach(c,k));for(g=1;g<arguments.length-1;g++)goog.asserts.assert(null===arguments[g],'Input "%%s" not used in message: "%s"',g,a);this.setInputsInline(!a.match(this.interpolateMsg.INLINE_REGEX_))};Blockly.Block.prototype.interpolateMsg.SPLIT_REGEX_=/(%\d+|\n)/;Blockly.Block.prototype.interpolateMsg.INLINE_REGEX_=/%1\s*$/;
-Blockly.Block.prototype.appendInput_=function(a,b){var c=null;if(a==Blockly.INPUT_VALUE||a==Blockly.NEXT_STATEMENT)c=new Blockly.Connection(this,a);c=new Blockly.Input(a,b,this,c);this.inputList.push(c);this.rendered&&(this.render(),this.bumpNeighbours_());return c};
-Blockly.Block.prototype.moveInputBefore=function(a,b){if(a!=b){for(var c=-1,d=b?-1:this.inputList.length,e=0,f;f=this.inputList[e];e++)if(f.name==a){if(c=e,-1!=d)break}else if(b&&f.name==b&&(d=e,-1!=c))break;goog.asserts.assert(-1!=c,'Named input "%s" not found.',a);goog.asserts.assert(-1!=d,'Reference input "%s" not found.',b);this.moveNumberedInputBefore(c,d)}};
-Blockly.Block.prototype.moveNumberedInputBefore=function(a,b){goog.asserts.assert(a!=b,"Can't move input to itself.");goog.asserts.assert(a<this.inputList.length,"Input index "+a+" out of bounds.");goog.asserts.assert(b<=this.inputList.length,"Reference input "+b+" out of bounds.");var c=this.inputList[a];this.inputList.splice(a,1);a<b&&b--;this.inputList.splice(b,0,c);this.rendered&&(this.render(),this.bumpNeighbours_())};
-Blockly.Block.prototype.removeInput=function(a,b){for(var c=0,d;d=this.inputList[c];c++)if(d.name==a){d.connection&&d.connection.targetConnection&&d.connection.targetBlock().setParent(null);d.dispose();this.inputList.splice(c,1);this.rendered&&(this.render(),this.bumpNeighbours_());return}b||goog.asserts.fail('Input "%s" not found.',a)};Blockly.Block.prototype.getInput=function(a){for(var b=0,c;c=this.inputList[b];b++)if(c.name==a)return c;return null};
-Blockly.Block.prototype.getInputTargetBlock=function(a){return(a=this.getInput(a))&&a.connection&&a.connection.targetBlock()};Blockly.Block.prototype.setMutator=function(a){this.mutator&&this.mutator!==a&&this.mutator.dispose();a&&(a.block_=this,this.mutator=a,this.svg_&&a.createIcon())};Blockly.Block.prototype.getCommentText=function(){return this.comment?this.comment.getText().replace(/\s+$/,"").replace(/ +\n/g,"\n"):""};
-Blockly.Block.prototype.setCommentText=function(a){var b=!1;goog.isString(a)?(this.comment||(this.comment=new Blockly.Comment(this),b=!0),this.comment.setText(a)):this.comment&&(this.comment.dispose(),b=!0);this.rendered&&(this.render(),b&&this.bumpNeighbours_())};
-Blockly.Block.prototype.setWarningText=function(a){this.isInFlyout&&(a=null);var b=!1;goog.isString(a)?(this.warning||(this.warning=new Blockly.Warning(this),b=!0),this.warning.setText(a)):this.warning&&(this.warning.dispose(),b=!0);b&&this.rendered&&(this.render(),this.bumpNeighbours_())};Blockly.Block.prototype.render=function(){goog.asserts.assertObject(this.svg_,"Uninitialized block cannot be rendered.  Call block.initSvg()");this.svg_.render();Blockly.Realtime.blockChanged(this)};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.FieldTextInput=function(a,b){Blockly.FieldTextInput.superClass_.constructor.call(this,a);this.changeHandler_=b};goog.inherits(Blockly.FieldTextInput,Blockly.Field);Blockly.FieldTextInput.prototype.clone=function(){return new Blockly.FieldTextInput(this.getText(),this.changeHandler_)};Blockly.FieldTextInput.prototype.CURSOR="text";Blockly.FieldTextInput.prototype.dispose=function(){Blockly.WidgetDiv.hideIfOwner(this);Blockly.FieldTextInput.superClass_.dispose.call(this)};
-Blockly.FieldTextInput.prototype.setText=function(a){if(null!==a){if(this.changeHandler_){var b=this.changeHandler_(a);null!==b&&void 0!==b&&(a=b)}Blockly.Field.prototype.setText.call(this,a)}};
-Blockly.FieldTextInput.prototype.showEditor_=function(a){var b=a||!1;if(!b&&(goog.userAgent.MOBILE||goog.userAgent.ANDROID||goog.userAgent.IPAD))a=window.prompt(Blockly.Msg.CHANGE_VALUE_TITLE,this.text_),this.changeHandler_&&(b=this.changeHandler_(a),void 0!==b&&(a=b)),null!==a&&this.setText(a);else{Blockly.WidgetDiv.show(this,this.widgetDispose_());var c=Blockly.WidgetDiv.DIV;a=goog.dom.createDom("input","blocklyHtmlInput");Blockly.FieldTextInput.htmlInput_=a;c.appendChild(a);a.value=a.defaultValue=
-this.text_;a.oldValue_=null;this.validate_();this.resizeEditor_();b||(a.focus(),a.select());a.onKeyUpWrapper_=Blockly.bindEvent_(a,"keyup",this,this.onHtmlInputChange_);a.onKeyPressWrapper_=Blockly.bindEvent_(a,"keypress",this,this.onHtmlInputChange_);b=this.sourceBlock_.workspace.getCanvas();a.onWorkspaceChangeWrapper_=Blockly.bindEvent_(b,"blocklyWorkspaceChange",this,this.resizeEditor_)}};
-Blockly.FieldTextInput.prototype.onHtmlInputChange_=function(a){var b=Blockly.FieldTextInput.htmlInput_;13==a.keyCode?Blockly.WidgetDiv.hide():27==a.keyCode?(this.setText(b.defaultValue),Blockly.WidgetDiv.hide()):(a=b.value,a!==b.oldValue_?(b.oldValue_=a,this.setText(a),this.validate_()):goog.userAgent.WEBKIT&&this.sourceBlock_.render())};
-Blockly.FieldTextInput.prototype.validate_=function(){var a=!0;goog.asserts.assertObject(Blockly.FieldTextInput.htmlInput_);var b=Blockly.FieldTextInput.htmlInput_;this.changeHandler_&&(a=this.changeHandler_(b.value));null===a?Blockly.addClass_(b,"blocklyInvalidInput"):Blockly.removeClass_(b,"blocklyInvalidInput")};
-Blockly.FieldTextInput.prototype.resizeEditor_=function(){var a=Blockly.WidgetDiv.DIV,b=this.fieldGroup_.getBBox();a.style.width=b.width+"px";b=Blockly.getAbsoluteXY_(this.borderRect_);if(Blockly.RTL){var c=this.borderRect_.getBBox();b.x+=c.width;b.x-=a.offsetWidth}b.y+=1;goog.userAgent.WEBKIT&&(b.y-=3);a.style.left=b.x+"px";a.style.top=b.y+"px"};
-Blockly.FieldTextInput.prototype.widgetDispose_=function(){var a=this;return function(){var b=Blockly.FieldTextInput.htmlInput_,c=b.value;a.changeHandler_&&(c=a.changeHandler_(c),null===c&&(c=b.defaultValue));a.setText(c);a.sourceBlock_.rendered&&a.sourceBlock_.render();Blockly.unbindEvent_(b.onKeyUpWrapper_);Blockly.unbindEvent_(b.onKeyPressWrapper_);Blockly.unbindEvent_(b.onWorkspaceChangeWrapper_);Blockly.FieldTextInput.htmlInput_=null;Blockly.WidgetDiv.DIV.style.width="auto"}};
-Blockly.FieldTextInput.numberValidator=function(a){a=a.replace(/O/ig,"0");a=a.replace(/,/g,"");a=parseFloat(a||0);return isNaN(a)?null:String(a)};Blockly.FieldTextInput.nonnegativeIntegerValidator=function(a){(a=Blockly.FieldTextInput.numberValidator(a))&&(a=String(Math.max(0,Math.floor(a))));return a};
-// Copyright 2013 Google Inc.  Apache License 2.0
-Blockly.FieldAngle=function(a,b){var c;if(b){var d=this;c=function(a){a=Blockly.FieldAngle.angleValidator.call(d,a);null!==a&&b.call(d,a);return a}}else c=Blockly.FieldAngle.angleValidator;this.symbol_=Blockly.createSvgElement("tspan",{},null);this.symbol_.appendChild(document.createTextNode("\u00b0"));Blockly.FieldAngle.superClass_.constructor.call(this,a,c)};goog.inherits(Blockly.FieldAngle,Blockly.FieldTextInput);
-Blockly.FieldAngle.prototype.clone=function(){return new Blockly.FieldAngle(this.getText(),this.changeHandler_)};Blockly.FieldAngle.ROUND=15;Blockly.FieldAngle.HALF=50;Blockly.FieldAngle.RADIUS=Blockly.FieldAngle.HALF-1;Blockly.FieldAngle.prototype.dispose_=function(){var a=this;return function(){Blockly.FieldAngle.superClass_.dispose_.call(a)();a.gauge_=null;a.clickWrapper_&&Blockly.unbindEvent_(a.clickWrapper_);a.moveWrapper1_&&Blockly.unbindEvent_(a.moveWrapper1_);a.moveWrapper2_&&Blockly.unbindEvent_(a.moveWrapper2_)}};
-Blockly.FieldAngle.prototype.showEditor_=function(){Blockly.FieldAngle.superClass_.showEditor_.call(this,goog.userAgent.MOBILE||goog.userAgent.ANDROID||goog.userAgent.IPAD);var a=Blockly.WidgetDiv.DIV;if(a.firstChild){var a=Blockly.createSvgElement("svg",{xmlns:"http://www.w3.org/2000/svg","xmlns:html":"http://www.w3.org/1999/xhtml","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1",height:2*Blockly.FieldAngle.HALF+"px",width:2*Blockly.FieldAngle.HALF+"px"},a),b=Blockly.createSvgElement("circle",
-{cx:Blockly.FieldAngle.HALF,cy:Blockly.FieldAngle.HALF,r:Blockly.FieldAngle.RADIUS,"class":"blocklyAngleCircle"},a);this.gauge_=Blockly.createSvgElement("path",{"class":"blocklyAngleGauge"},a);this.line_=Blockly.createSvgElement("line",{x1:Blockly.FieldAngle.HALF,y1:Blockly.FieldAngle.HALF,"class":"blocklyAngleLine"},a);for(var c=0;360>c;c+=15)Blockly.createSvgElement("line",{x1:Blockly.FieldAngle.HALF+Blockly.FieldAngle.RADIUS,y1:Blockly.FieldAngle.HALF,x2:Blockly.FieldAngle.HALF+Blockly.FieldAngle.RADIUS-
-(0==c%45?10:5),y2:Blockly.FieldAngle.HALF,"class":"blocklyAngleMarks",transform:"rotate("+c+", "+Blockly.FieldAngle.HALF+", "+Blockly.FieldAngle.HALF+")"},a);a.style.marginLeft="-35px";this.clickWrapper_=Blockly.bindEvent_(a,"click",this,Blockly.WidgetDiv.hide);this.moveWrapper1_=Blockly.bindEvent_(b,"mousemove",this,this.onMouseMove);this.moveWrapper2_=Blockly.bindEvent_(this.gauge_,"mousemove",this,this.onMouseMove);this.updateGraph_()}};
-Blockly.FieldAngle.prototype.onMouseMove=function(a){var b=this.gauge_.ownerSVGElement.getBoundingClientRect(),c=a.clientX-b.left-Blockly.FieldAngle.HALF;a=a.clientY-b.top-Blockly.FieldAngle.HALF;b=Math.atan(-a/c);isNaN(b)||(b=b/Math.PI*180,0>c?b+=180:0<a&&(b+=360),Blockly.FieldAngle.ROUND&&(b=Math.round(b/Blockly.FieldAngle.ROUND)*Blockly.FieldAngle.ROUND),360<=b&&(b-=360),b=String(b),Blockly.FieldTextInput.htmlInput_.value=b,this.setText(b))};
-Blockly.FieldAngle.prototype.setText=function(a){Blockly.FieldAngle.superClass_.setText.call(this,a);this.updateGraph_();Blockly.RTL?this.textElement_.insertBefore(this.symbol_,this.textElement_.firstChild):this.textElement_.appendChild(this.symbol_);this.size_.width=0};
-Blockly.FieldAngle.prototype.updateGraph_=function(){if(this.gauge_){var a=Number(this.getText())/180*Math.PI;if(isNaN(a))this.gauge_.setAttribute("d","M "+Blockly.FieldAngle.HALF+", "+Blockly.FieldAngle.HALF),this.line_.setAttribute("x2",Blockly.FieldAngle.HALF),this.line_.setAttribute("y2",Blockly.FieldAngle.HALF);else{var b=Blockly.FieldAngle.HALF+Math.cos(a)*Blockly.FieldAngle.RADIUS,c=Blockly.FieldAngle.HALF+Math.sin(a)*-Blockly.FieldAngle.RADIUS;this.gauge_.setAttribute("d","M "+Blockly.FieldAngle.HALF+
-", "+Blockly.FieldAngle.HALF+" h "+Blockly.FieldAngle.RADIUS+" A "+Blockly.FieldAngle.RADIUS+","+Blockly.FieldAngle.RADIUS+" 0 "+(a>Math.PI?1:0)+" 0 "+b+","+c+" z");this.line_.setAttribute("x2",b);this.line_.setAttribute("y2",c)}}};Blockly.FieldAngle.angleValidator=function(a){a=Blockly.FieldTextInput.numberValidator(a);null!==a&&(a%=360,0>a&&(a+=360),a=String(a));return a};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.FieldCheckbox=function(a,b){Blockly.FieldCheckbox.superClass_.constructor.call(this,"");this.changeHandler_=b;this.checkElement_=Blockly.createSvgElement("text",{"class":"blocklyText",x:-3},this.fieldGroup_);var c=document.createTextNode("\u2713");this.checkElement_.appendChild(c);this.setValue(a)};goog.inherits(Blockly.FieldCheckbox,Blockly.Field);Blockly.FieldCheckbox.prototype.clone=function(){return new Blockly.FieldCheckbox(this.getValue(),this.changeHandler_)};
-Blockly.FieldCheckbox.prototype.CURSOR="default";Blockly.FieldCheckbox.prototype.getValue=function(){return String(this.state_).toUpperCase()};Blockly.FieldCheckbox.prototype.setValue=function(a){a="TRUE"==a;this.state_!==a&&(this.state_=a,this.checkElement_.style.display=a?"block":"none",this.sourceBlock_&&this.sourceBlock_.rendered&&this.sourceBlock_.workspace.fireChangeEvent())};
-Blockly.FieldCheckbox.prototype.showEditor_=function(){var a=!this.state_;if(this.changeHandler_){var b=this.changeHandler_(a);void 0!==b&&(a=b)}null!==a&&this.setValue(String(a).toUpperCase())};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.FieldColour=function(a,b){Blockly.FieldColour.superClass_.constructor.call(this,"\u00a0\u00a0\u00a0");this.changeHandler_=b;this.borderRect_.style.fillOpacity=1;this.setValue(a)};goog.inherits(Blockly.FieldColour,Blockly.Field);Blockly.FieldColour.prototype.clone=function(){return new Blockly.FieldColour(this.getValue(),this.changeHandler_)};Blockly.FieldColour.prototype.CURSOR="default";Blockly.FieldColour.prototype.dispose=function(){Blockly.WidgetDiv.hideIfOwner(this);Blockly.FieldColour.superClass_.dispose.call(this)};
-Blockly.FieldColour.prototype.getValue=function(){return this.colour_};Blockly.FieldColour.prototype.setValue=function(a){this.colour_=a;this.borderRect_.style.fill=a;this.sourceBlock_&&this.sourceBlock_.rendered&&(Blockly.Realtime.blockChanged(this.sourceBlock_),this.sourceBlock_.workspace.fireChangeEvent())};Blockly.FieldColour.COLOURS=goog.ui.ColorPicker.SIMPLE_GRID_COLORS;Blockly.FieldColour.COLUMNS=7;
-Blockly.FieldColour.prototype.showEditor_=function(){Blockly.WidgetDiv.show(this,Blockly.FieldColour.widgetDispose_);var a=new goog.ui.ColorPicker;a.setSize(Blockly.FieldColour.COLUMNS);a.setColors(Blockly.FieldColour.COLOURS);var b=goog.dom.getViewportSize(),c=goog.style.getViewportPageOffset(document),d=Blockly.getAbsoluteXY_(this.borderRect_),e=this.borderRect_.getBBox();a.render(Blockly.WidgetDiv.DIV);a.setSelectedColor(this.getValue());var f=goog.style.getSize(a.getElement());d.y=d.y+f.height+
-e.height>=b.height+c.y?d.y-(f.height-1):d.y+(e.height-1);Blockly.RTL?(d.x+=e.width,d.x-=f.width,d.x<c.x&&(d.x=c.x)):d.x>b.width+c.x-f.width&&(d.x=b.width+c.x-f.width);Blockly.WidgetDiv.position(d.x,d.y,b,c);var g=this;Blockly.FieldColour.changeEventKey_=goog.events.listen(a,goog.ui.ColorPicker.EventType.CHANGE,function(a){a=a.target.getSelectedColor()||"#000000";Blockly.WidgetDiv.hide();if(g.changeHandler_){var b=g.changeHandler_(a);void 0!==b&&(a=b)}null!==a&&g.setValue(a)})};
-Blockly.FieldColour.widgetDispose_=function(){Blockly.FieldColour.changeEventKey_&&goog.events.unlistenByKey(Blockly.FieldColour.changeEventKey_)};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.FieldDropdown=function(a,b){this.menuGenerator_=a;this.changeHandler_=b;this.trimOptions_();var c=this.getOptions_()[0];this.value_=c[1];var d=goog.userAgent.ANDROID?"\u25bc":"\u25be";this.arrow_=Blockly.createSvgElement("tspan",{},null);this.arrow_.appendChild(document.createTextNode(Blockly.RTL?d+" ":" "+d));Blockly.FieldDropdown.superClass_.constructor.call(this,c[0])};goog.inherits(Blockly.FieldDropdown,Blockly.Field);Blockly.FieldDropdown.CHECKMARK_OVERHANG=25;
-Blockly.FieldDropdown.prototype.clone=function(){return new Blockly.FieldDropdown(this.menuGenerator_,this.changeHandler_)};Blockly.FieldDropdown.prototype.CURSOR="default";
-Blockly.FieldDropdown.prototype.showEditor_=function(){Blockly.WidgetDiv.show(this,null);for(var a=this,b=new goog.ui.Menu,c=this.getOptions_(),d=0;d<c.length;d++){var e=c[d][1],f=new goog.ui.MenuItem(c[d][0]);f.setValue(e);f.setCheckable(!0);b.addItem(f);f.setChecked(e==this.value_)}goog.events.listen(b,goog.ui.Component.EventType.ACTION,function(b){if(b=b.target){b=b.getValue();if(a.changeHandler_){var c=a.changeHandler_(b);void 0!==c&&(b=c)}null!==b&&a.setValue(b)}Blockly.WidgetDiv.hideIfOwner(a)});
-c=goog.dom.getViewportSize();d=goog.style.getViewportPageOffset(document);e=Blockly.getAbsoluteXY_(this.borderRect_);f=this.borderRect_.getBBox();b.render(Blockly.WidgetDiv.DIV);var g=b.getElement();Blockly.addClass_(g,"blocklyDropdownMenu");var h=goog.style.getSize(g);e.y=e.y+h.height+f.height>=c.height+d.y?e.y-h.height:e.y+f.height;Blockly.RTL?(e.x+=f.width,e.x+=Blockly.FieldDropdown.CHECKMARK_OVERHANG,e.x<d.x+h.width&&(e.x=d.x+h.width)):(e.x-=Blockly.FieldDropdown.CHECKMARK_OVERHANG,e.x>c.width+
-d.x-h.width&&(e.x=c.width+d.x-h.width));Blockly.WidgetDiv.position(e.x,e.y,c,d);b.setAllowAutoFocus(!0);g.focus()};
-Blockly.FieldDropdown.prototype.trimOptions_=function(){this.suffixField=this.prefixField=null;var a=this.menuGenerator_;if(goog.isArray(a)&&!(2>a.length)){var b=a.map(function(a){return a[0]}),c=Blockly.shortestStringLength(b),d=Blockly.commonWordPrefix(b,c),e=Blockly.commonWordSuffix(b,c);if((d||e)&&!(c<=d+e)){d&&(this.prefixField=b[0].substring(0,d-1));e&&(this.suffixField=b[0].substr(1-e));b=[];for(c=0;c<a.length;c++){var f=a[c][0],g=a[c][1],f=f.substring(d,f.length-e);b[c]=[f,g]}this.menuGenerator_=
-b}}};Blockly.FieldDropdown.prototype.getOptions_=function(){return goog.isFunction(this.menuGenerator_)?this.menuGenerator_.call(this):this.menuGenerator_};Blockly.FieldDropdown.prototype.getValue=function(){return this.value_};Blockly.FieldDropdown.prototype.setValue=function(a){this.value_=a;for(var b=this.getOptions_(),c=0;c<b.length;c++)if(b[c][1]==a){this.setText(b[c][0]);return}this.setText(a)};
-Blockly.FieldDropdown.prototype.setText=function(a){this.sourceBlock_&&(this.arrow_.style.fill=Blockly.makeColour(this.sourceBlock_.getColour()));null!==a&&a!==this.text_&&(this.text_=a,this.updateTextNode_(),Blockly.RTL?this.textElement_.insertBefore(this.arrow_,this.textElement_.firstChild):this.textElement_.appendChild(this.arrow_),this.sourceBlock_&&this.sourceBlock_.rendered&&(this.sourceBlock_.render(),this.sourceBlock_.bumpNeighbours_(),this.sourceBlock_.workspace.fireChangeEvent()))};
-Blockly.FieldDropdown.prototype.dispose=function(){Blockly.WidgetDiv.hideIfOwner(this);Blockly.FieldDropdown.superClass_.dispose.call(this)};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.FieldImage=function(a,b,c,d){this.sourceBlock_=null;this.height_=Number(c);this.width_=Number(b);this.size_={height:this.height_+10,width:this.width_};this.text_=d||"";b=6-Blockly.BlockSvg.FIELD_HEIGHT;this.fieldGroup_=Blockly.createSvgElement("g",{},null);this.imageElement_=Blockly.createSvgElement("image",{height:this.height_+"px",width:this.width_+"px",y:b},this.fieldGroup_);this.setValue(a);goog.userAgent.GECKO&&(this.rectElement_=Blockly.createSvgElement("rect",{height:this.height_+"px",
-width:this.width_+"px",y:b,"fill-opacity":0},this.fieldGroup_))};goog.inherits(Blockly.FieldImage,Blockly.Field);Blockly.FieldImage.prototype.clone=function(){return new Blockly.FieldImage(this.getSrc(),this.width_,this.height_,this.getText())};Blockly.FieldImage.prototype.rectElement_=null;Blockly.FieldImage.prototype.EDITABLE=!1;
-Blockly.FieldImage.prototype.init=function(a){if(this.sourceBlock_)throw"Image has already been initialized once.";this.sourceBlock_=a;a.getSvgRoot().appendChild(this.fieldGroup_);a=this.rectElement_||this.imageElement_;a.tooltip=this.sourceBlock_;Blockly.Tooltip.bindMouseEvents(a)};Blockly.FieldImage.prototype.dispose=function(){goog.dom.removeNode(this.fieldGroup_);this.rectElement_=this.imageElement_=this.fieldGroup_=null};
-Blockly.FieldImage.prototype.setTooltip=function(a){(this.rectElement_||this.imageElement_).tooltip=a};Blockly.FieldImage.prototype.getValue=function(){return this.src_};Blockly.FieldImage.prototype.setValue=function(a){null!==a&&(this.src_=a,this.imageElement_.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",goog.isString(a)?a:""))};Blockly.FieldImage.prototype.setText=function(a){null!==a&&(this.text_=a)};
-// Copyright 2011 Google Inc.  Apache License 2.0
-Blockly.Flyout=function(){var a=this;this.workspace_=new Blockly.Workspace(function(){return a.getMetrics_()},function(b){return a.setMetrics_(b)});this.workspace_.isFlyout=!0;this.changeWrapper_=null;this.height_=this.width_=0;this.buttons_=[];this.listeners_=[]};Blockly.Flyout.prototype.autoClose=!0;Blockly.Flyout.prototype.CORNER_RADIUS=8;Blockly.Flyout.prototype.onResizeWrapper_=null;
-Blockly.Flyout.prototype.createDom=function(){this.svgGroup_=Blockly.createSvgElement("g",{},null);this.svgBackground_=Blockly.createSvgElement("path",{"class":"blocklyFlyoutBackground"},this.svgGroup_);this.svgGroup_.appendChild(this.workspace_.createDom());return this.svgGroup_};
-Blockly.Flyout.prototype.dispose=function(){this.hide();this.onResizeWrapper_&&(Blockly.unbindEvent_(this.onResizeWrapper_),this.onResizeWrapper_=null);this.changeWrapper_&&(Blockly.unbindEvent_(this.changeWrapper_),this.changeWrapper_=null);this.scrollbar_&&(this.scrollbar_.dispose(),this.scrollbar_=null);this.workspace_=null;this.svgGroup_&&(goog.dom.removeNode(this.svgGroup_),this.svgGroup_=null);this.targetWorkspace_=this.svgBackground_=null};
-Blockly.Flyout.prototype.getMetrics_=function(){if(!this.isVisible())return null;var a=this.height_-2*this.CORNER_RADIUS,b=this.width_;try{var c=this.workspace_.getCanvas().getBBox()}catch(d){c={height:0,y:0}}return{viewHeight:a,viewWidth:b,contentHeight:c.height+c.y,viewTop:-this.workspace_.scrollY,contentTop:0,absoluteTop:this.CORNER_RADIUS,absoluteLeft:0}};
-Blockly.Flyout.prototype.setMetrics_=function(a){var b=this.getMetrics_();b&&(goog.isNumber(a.y)&&(this.workspace_.scrollY=-b.contentHeight*a.y-b.contentTop),a=this.workspace_.scrollY+b.absoluteTop,this.workspace_.getCanvas().setAttribute("transform","translate(0,"+a+")"))};
-Blockly.Flyout.prototype.init=function(a,b){this.targetWorkspace_=a;b&&(this.scrollbar_=new Blockly.Scrollbar(this.workspace_,!1,!1));this.hide();this.onResizeWrapper_=Blockly.bindEvent_(window,goog.events.EventType.RESIZE,this,this.position_);this.position_();this.changeWrapper_=Blockly.bindEvent_(this.targetWorkspace_.getCanvas(),"blocklyWorkspaceChange",this,this.filterForCapacity_)};
-Blockly.Flyout.prototype.position_=function(){if(this.isVisible()){var a=this.targetWorkspace_.getMetrics();if(a){var b=this.width_-this.CORNER_RADIUS;Blockly.RTL&&(b*=-1);var c=["M "+(Blockly.RTL?this.width_:0)+",0"];c.push("h",b);c.push("a",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,Blockly.RTL?0:1,Blockly.RTL?-this.CORNER_RADIUS:this.CORNER_RADIUS,this.CORNER_RADIUS);c.push("v",Math.max(0,a.viewHeight-2*this.CORNER_RADIUS));c.push("a",this.CORNER_RADIUS,this.CORNER_RADIUS,0,0,Blockly.RTL?0:1,Blockly.RTL?
-this.CORNER_RADIUS:-this.CORNER_RADIUS,this.CORNER_RADIUS);c.push("h",-b);c.push("z");this.svgBackground_.setAttribute("d",c.join(" "));b=a.absoluteLeft;Blockly.RTL&&(b+=a.viewWidth,b-=this.width_);this.svgGroup_.setAttribute("transform","translate("+b+","+a.absoluteTop+")");this.height_=a.viewHeight;this.scrollbar_&&this.scrollbar_.resize()}}};Blockly.Flyout.prototype.isVisible=function(){return"block"==this.svgGroup_.style.display};
-Blockly.Flyout.prototype.hide=function(){if(this.isVisible()){this.svgGroup_.style.display="none";for(var a=0,b;b=this.listeners_[a];a++)Blockly.unbindEvent_(b);this.listeners_.splice(0);this.reflowWrapper_&&(Blockly.unbindEvent_(this.reflowWrapper_),this.reflowWrapper_=null);b=this.workspace_.getTopBlocks(!1);for(var a=0,c;c=b[a];a++)c.workspace==this.workspace_&&c.dispose(!1,!1);for(a=0;b=this.buttons_[a];a++)goog.dom.removeNode(b);this.buttons_.splice(0)}};
-Blockly.Flyout.prototype.show=function(a){this.hide();var b=this.CORNER_RADIUS;this.svgGroup_.style.display="block";var c=[],d=[];if(a==Blockly.Variables.NAME_TYPE)Blockly.Variables.flyoutCategory(c,d,b,this.workspace_);else if(a==Blockly.Procedures.NAME_TYPE)Blockly.Procedures.flyoutCategory(c,d,b,this.workspace_);else for(var e=0,f;f=a[e];e++)f.tagName&&"BLOCK"==f.tagName.toUpperCase()&&(f=Blockly.Xml.domToBlock(this.workspace_,f),c.push(f),d.push(3*b));a=b;for(e=0;f=c[e];e++){for(var g=f.getDescendants(),
-h=0,k;k=g[h];h++)k.isInFlyout=!0,k.setCommentText(null);f.render();g=f.getSvgRoot();h=f.getHeightWidth();f.moveBy(Blockly.RTL?0:b+Blockly.BlockSvg.TAB_WIDTH,a);a+=h.height+d[e];h=Blockly.createSvgElement("rect",{"fill-opacity":0},null);this.workspace_.getCanvas().insertBefore(h,f.getSvgRoot());f.flyoutRect_=h;this.buttons_[e]=h;this.autoClose?this.listeners_.push(Blockly.bindEvent_(g,"mousedown",null,this.createBlockFunc_(f))):this.listeners_.push(Blockly.bindEvent_(g,"mousedown",null,this.blockMouseDown_(f)));
-this.listeners_.push(Blockly.bindEvent_(g,"mouseover",f.svg_,f.svg_.addSelect));this.listeners_.push(Blockly.bindEvent_(g,"mouseout",f.svg_,f.svg_.removeSelect));this.listeners_.push(Blockly.bindEvent_(h,"mousedown",null,this.createBlockFunc_(f)));this.listeners_.push(Blockly.bindEvent_(h,"mouseover",f.svg_,f.svg_.addSelect));this.listeners_.push(Blockly.bindEvent_(h,"mouseout",f.svg_,f.svg_.removeSelect))}this.listeners_.push(Blockly.bindEvent_(this.svgBackground_,"mouseover",this,function(a){a=
-this.workspace_.getTopBlocks(!1);for(var b=0,c;c=a[b];b++)c.svg_.removeSelect()}));this.width_=0;this.reflow();this.filterForCapacity_();Blockly.fireUiEventNow(window,"resize");this.reflowWrapper_=Blockly.bindEvent_(this.workspace_.getCanvas(),"blocklyWorkspaceChange",this,this.reflow);this.workspace_.fireChangeEvent()};
-Blockly.Flyout.prototype.reflow=function(){for(var a=0,b=this.CORNER_RADIUS,c=this.workspace_.getTopBlocks(!1),d=0,e;e=c[d];d++){e.getSvgRoot();var f=e.getHeightWidth(),a=Math.max(a,f.width)}a+=b+Blockly.BlockSvg.TAB_WIDTH+b/2+Blockly.Scrollbar.scrollbarThickness;if(this.width_!=a){for(d=0;e=c[d];d++){var f=e.getHeightWidth(),g=e.getRelativeToSurfaceXY();if(Blockly.RTL){var h=a-b-Blockly.BlockSvg.TAB_WIDTH-g.x;e.moveBy(h,0);g.x+=h}e.flyoutRect_&&(e.flyoutRect_.setAttribute("width",f.width),e.flyoutRect_.setAttribute("height",
-f.height),e.flyoutRect_.setAttribute("x",Blockly.RTL?g.x-f.width:g.x),e.flyoutRect_.setAttribute("y",g.y))}this.width_=a;Blockly.fireUiEvent(window,"resize")}};Blockly.Block.prototype.moveTo=function(a,b){var c=this.getRelativeToSurfaceXY();this.svg_.getRootElement().setAttribute("transform","translate("+a+", "+b+")");this.moveConnections_(a-c.x,b-c.y)};
-Blockly.Flyout.prototype.blockMouseDown_=function(a){var b=this;return function(c){Blockly.terminateDrag_();Blockly.hideChaff();Blockly.isRightButton(c)?a.showContextMenu_(c):(Blockly.removeAllRanges(),Blockly.setCursorHand_(!0),Blockly.Flyout.startDownEvent_=c,Blockly.Flyout.startBlock_=a,Blockly.Flyout.startFlyout_=b,Blockly.Flyout.onMouseUpWrapper_=Blockly.bindEvent_(document,"mouseup",this,Blockly.terminateDrag_),Blockly.Flyout.onMouseMoveWrapper_=Blockly.bindEvent_(document,"mousemove",this,
-b.onMouseMove_));c.stopPropagation()}};Blockly.Flyout.prototype.onMouseMove_=function(a){if("mousemove"==a.type&&1>=a.clientX&&0==a.clientY&&0==a.button)a.stopPropagation();else{Blockly.removeAllRanges();var b=a.clientY-Blockly.Flyout.startDownEvent_.clientY;Math.sqrt(Math.pow(a.clientX-Blockly.Flyout.startDownEvent_.clientX,2)+Math.pow(b,2))>Blockly.DRAG_RADIUS&&Blockly.Flyout.startFlyout_.createBlockFunc_(Blockly.Flyout.startBlock_)(Blockly.Flyout.startDownEvent_)}};
-Blockly.Flyout.prototype.createBlockFunc_=function(a){var b=this;return function(c){if(!Blockly.isRightButton(c)&&!a.disabled){var d=Blockly.Xml.blockToDom_(a),d=Blockly.Xml.domToBlock(b.targetWorkspace_,d),e=a.getSvgRoot();if(!e)throw"originBlock is not rendered.";var e=Blockly.getSvgXY_(e),f=d.getSvgRoot();if(!f)throw"block is not rendered.";f=Blockly.getSvgXY_(f);d.moveBy(e.x-f.x,e.y-f.y);b.autoClose?b.hide():b.filterForCapacity_();d.onMouseDown_(c)}}};
-Blockly.Flyout.prototype.filterForCapacity_=function(){for(var a=this.targetWorkspace_.remainingCapacity(),b=this.workspace_.getTopBlocks(!1),c=0,d;d=b[c];c++){var e=d.getDescendants().length>a;d.setDisabled(e)}};
-Blockly.Flyout.terminateDrag_=function(){Blockly.Flyout.onMouseUpWrapper_&&(Blockly.unbindEvent_(Blockly.Flyout.onMouseUpWrapper_),Blockly.Flyout.onMouseUpWrapper_=null);Blockly.Flyout.onMouseMoveWrapper_&&(Blockly.unbindEvent_(Blockly.Flyout.onMouseMoveWrapper_),Blockly.Flyout.onMouseMoveWrapper_=null);Blockly.Flyout.startDownEvent_=null;Blockly.Flyout.startBlock_=null;Blockly.Flyout.startFlyout_=null};
-// Copyright 2011 Google Inc.  Apache License 2.0
-Blockly.Toolbox={};Blockly.Toolbox.width=0;Blockly.Toolbox.selectedOption_=null;Blockly.Toolbox.CONFIG_={indentWidth:19,cssRoot:"blocklyTreeRoot",cssHideRoot:"blocklyHidden",cssItem:"",cssTreeRow:"blocklyTreeRow",cssItemLabel:"blocklyTreeLabel",cssTreeIcon:"blocklyTreeIcon",cssExpandedFolderIcon:"blocklyTreeIconOpen",cssFileIcon:"blocklyTreeIconNone",cssSelectedRow:"blocklyTreeSelected"};
-Blockly.Toolbox.createDom=function(a,b){Blockly.Toolbox.HtmlDiv=goog.dom.createDom("div","blocklyToolboxDiv");Blockly.Toolbox.HtmlDiv.setAttribute("dir",Blockly.RTL?"RTL":"LTR");b.appendChild(Blockly.Toolbox.HtmlDiv);Blockly.Toolbox.flyout_=new Blockly.Flyout;a.appendChild(Blockly.Toolbox.flyout_.createDom());Blockly.bindEvent_(Blockly.Toolbox.HtmlDiv,"mousedown",null,function(a){Blockly.isRightButton(a)||a.target==Blockly.Toolbox.HtmlDiv?Blockly.hideChaff(!1):Blockly.hideChaff(!0)})};
-Blockly.Toolbox.init=function(){Blockly.Toolbox.CONFIG_.cleardotPath=Blockly.pathToBlockly+"media/1x1.gif";Blockly.Toolbox.CONFIG_.cssCollapsedFolderIcon="blocklyTreeIconClosed"+(Blockly.RTL?"Rtl":"Ltr");var a=new Blockly.Toolbox.TreeControl("root",Blockly.Toolbox.CONFIG_);Blockly.Toolbox.tree_=a;a.setShowRootNode(!1);a.setShowLines(!1);a.setShowExpandIcons(!1);a.setSelectedItem(null);Blockly.Toolbox.HtmlDiv.style.display="block";Blockly.Toolbox.flyout_.init(Blockly.mainWorkspace,!0);Blockly.Toolbox.populate_();
-a.render(Blockly.Toolbox.HtmlDiv);goog.events.listen(window,goog.events.EventType.RESIZE,Blockly.Toolbox.position_);Blockly.Toolbox.position_()};Blockly.Toolbox.position_=function(){var a=Blockly.Toolbox.HtmlDiv,b=goog.style.getBorderBox(Blockly.svg),c=Blockly.svgSize();Blockly.RTL?(b=Blockly.convertCoordinates(0,0,!1),a.style.left=b.x+c.width-a.offsetWidth+"px"):a.style.marginLeft=b.left;a.style.height=c.height+1+"px";Blockly.Toolbox.width=a.offsetWidth;Blockly.RTL||(Blockly.Toolbox.width-=1)};
-Blockly.Toolbox.populate_=function(){function a(c,d){for(var e=0,f;f=c.childNodes[e];e++)if(f.tagName){var g=f.tagName.toUpperCase();if("CATEGORY"==g){g=b.createNode(f.getAttribute("name"));g.blocks=[];d.add(g);var h=f.getAttribute("custom");h?g.blocks=h:a(f,g)}else"BLOCK"==g&&d.blocks.push(f)}}var b=Blockly.Toolbox.tree_;b.removeChildren();b.blocks=[];a(Blockly.languageTree,Blockly.Toolbox.tree_);if(b.blocks.length)throw"Toolbox cannot have both blocks and categories in the root level.";Blockly.fireUiEvent(window,
-"resize")};Blockly.Toolbox.clearSelection=function(){Blockly.Toolbox.tree_.setSelectedItem(null)};Blockly.Toolbox.TreeControl=function(a,b,c){goog.ui.tree.TreeControl.call(this,a,b,c)};goog.inherits(Blockly.Toolbox.TreeControl,goog.ui.tree.TreeControl);
-Blockly.Toolbox.TreeControl.prototype.enterDocument=function(){Blockly.Toolbox.TreeControl.superClass_.enterDocument.call(this);if(goog.events.BrowserFeature.TOUCH_ENABLED){var a=this.getElement();Blockly.bindEvent_(a,goog.events.EventType.TOUCHSTART,this,this.handleTouchEvent_)}};Blockly.Toolbox.TreeControl.prototype.handleTouchEvent_=function(a){a.preventDefault();var b=this.getNodeFromEvent_(a);b&&a.type===goog.events.EventType.TOUCHSTART&&window.setTimeout(function(){b.onMouseDown(a)},1)};
-Blockly.Toolbox.TreeControl.prototype.createNode=function(a){return new Blockly.Toolbox.TreeNode(a||"",this.getConfig(),this.getDomHelper())};Blockly.Toolbox.TreeControl.prototype.setSelectedItem=function(a){this.selectedItem_!=a&&(goog.ui.tree.TreeControl.prototype.setSelectedItem.call(this,a),a&&a.blocks&&a.blocks.length?Blockly.Toolbox.flyout_.show(a.blocks):Blockly.Toolbox.flyout_.hide())};
-Blockly.Toolbox.TreeNode=function(a,b,c){goog.ui.tree.TreeNode.call(this,a,b,c);a=function(){Blockly.fireUiEvent(window,"resize")};goog.events.listen(Blockly.Toolbox.tree_,goog.ui.tree.BaseNode.EventType.EXPAND,a);goog.events.listen(Blockly.Toolbox.tree_,goog.ui.tree.BaseNode.EventType.COLLAPSE,a)};goog.inherits(Blockly.Toolbox.TreeNode,goog.ui.tree.TreeNode);Blockly.Toolbox.TreeNode.prototype.getExpandIconHtml=function(){return"<span></span>"};
-Blockly.Toolbox.TreeNode.prototype.getExpandIconElement=function(){return null};Blockly.Toolbox.TreeNode.prototype.onMouseDown=function(a){this.hasChildren()&&this.isUserCollapsible_?(this.toggle(),this.select()):this.isSelected()?this.getTree().setSelectedItem(null):this.select();this.updateRow()};Blockly.Toolbox.TreeNode.prototype.onDoubleClick_=function(a){};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Variables={};Blockly.Variables.NAME_TYPE="VARIABLE";Blockly.Variables.allVariables=function(a){var b;b=a?a.getDescendants():Blockly.mainWorkspace.getAllBlocks();a=Object.create(null);for(var c=0;c<b.length;c++){var d=b[c].getVars;if(d)for(var d=d.call(b[c]),e=0;e<d.length;e++){var f=d[e];f&&(a[f.toLowerCase()]=f)}}b=[];for(var g in a)b.push(a[g]);return b};
-Blockly.Variables.renameVariable=function(a,b){for(var c=Blockly.mainWorkspace.getAllBlocks(),d=0;d<c.length;d++){var e=c[d].renameVar;e&&e.call(c[d],a,b)}};
-Blockly.Variables.flyoutCategory=function(a,b,c,d){var e=Blockly.Variables.allVariables();e.sort(goog.string.caseInsensitiveCompare);e.unshift(null);for(var f=void 0,g=0;g<e.length;g++)if(e[g]!==f){var h=Blockly.Blocks.variables_get?Blockly.Block.obtain(d,"variables_get"):null;h&&h.initSvg();var k=Blockly.Blocks.variables_set?Blockly.Block.obtain(d,"variables_set"):null;k&&k.initSvg();null===e[g]?f=(h||k).getVars()[0]:(h&&h.setFieldValue(e[g],"VAR"),k&&k.setFieldValue(e[g],"VAR"));k&&a.push(k);h&&
-a.push(h);h&&k?b.push(c,3*c):b.push(2*c)}};Blockly.Variables.generateUniqueName=function(){var a=Blockly.Variables.allVariables(),b="";if(a.length){a.sort(goog.string.caseInsensitiveCompare);for(var c=0,d="i",e=0,f=!1;!b;){e=0;for(f=!1;e<a.length&&!f;)a[e].toLowerCase()==d&&(f=!0),e++;f?("z"===d[0]?(c++,d="a"):(d=String.fromCharCode(d.charCodeAt(0)+1),"l"==d[0]&&(d=String.fromCharCode(d.charCodeAt(0)+1))),0<c&&(d+=c)):b=d}}else b="i";return b};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.FieldVariable=function(a,b){var c;if(b){var d=this;c=function(a){var c=Blockly.FieldVariable.dropdownChange.call(d,a);a=void 0===c?a:null===c?d.getValue():c;b.call(d,a);return c}}else c=Blockly.FieldVariable.dropdownChange;Blockly.FieldVariable.superClass_.constructor.call(this,Blockly.FieldVariable.dropdownCreate,c);a?this.setValue(a):this.setValue(Blockly.Variables.generateUniqueName())};goog.inherits(Blockly.FieldVariable,Blockly.FieldDropdown);
-Blockly.FieldVariable.prototype.clone=function(){return new Blockly.FieldVariable(this.getValue(),this.changeHandler_)};Blockly.FieldVariable.prototype.getValue=function(){return this.getText()};Blockly.FieldVariable.prototype.setValue=function(a){this.value_=a;this.setText(a)};
-Blockly.FieldVariable.dropdownCreate=function(){var a=Blockly.Variables.allVariables(),b=this.getText();b&&-1==a.indexOf(b)&&a.push(b);a.sort(goog.string.caseInsensitiveCompare);a.push(Blockly.Msg.RENAME_VARIABLE);a.push(Blockly.Msg.NEW_VARIABLE);for(var b=[],c=0;c<a.length;c++)b[c]=[a[c],a[c]];return b};
-Blockly.FieldVariable.dropdownChange=function(a){function b(a,b){Blockly.hideChaff();var c=window.prompt(a,b);return c&&c.replace(/[\s\xa0]+/g," ").replace(/^ | $/g,"")}if(a==Blockly.Msg.RENAME_VARIABLE){var c=this.getText();(a=b(Blockly.Msg.RENAME_VARIABLE_TITLE.replace("%1",c),c))&&Blockly.Variables.renameVariable(c,a);return null}if(a==Blockly.Msg.NEW_VARIABLE)return(a=b(Blockly.Msg.NEW_VARIABLE_TITLE,""))?(Blockly.Variables.renameVariable(a,a),a):null};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Generator=function(a){this.name_=a;this.RESERVED_WORDS_=""};Blockly.Generator.NAME_TYPE="generated_function";
-Blockly.Generator.prototype.workspaceToCode=function(){var a=[];this.init();for(var b=Blockly.mainWorkspace.getTopBlocks(!0),c=0,d;d=b[c];c++){var e=this.blockToCode(d);goog.isArray(e)&&(e=e[0]);e&&(d.outputConnection&&this.scrubNakedValue&&(e=this.scrubNakedValue(e)),a.push(e))}a=a.join("\n");a=this.finish(a);a=a.replace(/^\s+\n/,"");a=a.replace(/\n\s+$/,"\n");return a=a.replace(/[ \t]+\n/g,"\n")};Blockly.Generator.prototype.prefixLines=function(a,b){return b+a.replace(/\n(.)/g,"\n"+b+"$1")};
-Blockly.Generator.prototype.allNestedComments=function(a){var b=[];a=a.getDescendants();for(var c=0;c<a.length;c++){var d=a[c].getCommentText();d&&b.push(d)}b.length&&b.push("");return b.join("\n")};
-Blockly.Generator.prototype.blockToCode=function(a){if(!a)return"";if(a.disabled)return this.blockToCode(a.getNextBlock());var b=this[a.type];if(!b)throw'Language "'+this.name_+'" does not know how to generate code for block type "'+a.type+'".';b=b.call(a,a);return goog.isArray(b)?[this.scrub_(a,b[0]),b[1]]:this.scrub_(a,b)};
-Blockly.Generator.prototype.valueToCode=function(a,b,c){if(isNaN(c))throw'Expecting valid order from block "'+a.type+'".';a=a.getInputTargetBlock(b);if(!a)return"";var d=this.blockToCode(a);if(""===d)return"";if(!goog.isArray(d))throw'Expecting tuple from value block "'+a.type+'".';b=d[0];d=d[1];if(isNaN(d))throw'Expecting valid order from value block "'+a.type+'".';b&&c<=d&&c!=d&&0!=c&&99!=c&&(b="("+b+")");return b};
-Blockly.Generator.prototype.statementToCode=function(a,b){var c=a.getInputTargetBlock(b),d=this.blockToCode(c);if(!goog.isString(d))throw'Expecting code from statement block "'+c.type+'".';d&&(d=this.prefixLines(d,this.INDENT));return d};Blockly.Generator.prototype.INDENT="  ";Blockly.Generator.prototype.addReservedWords=function(a){this.RESERVED_WORDS_+=a+","};Blockly.Generator.prototype.FUNCTION_NAME_PLACEHOLDER_="{leCUI8hutHZI4480Dc}";
-Blockly.Generator.prototype.FUNCTION_NAME_PLACEHOLDER_REGEXP_=RegExp(Blockly.Generator.prototype.FUNCTION_NAME_PLACEHOLDER_,"g");Blockly.Generator.prototype.provideFunction_=function(a,b){if(!this.definitions_[a]){var c=this.variableDB_.getDistinctName(a,this.NAME_TYPE);this.functionNames_[a]=c;this.definitions_[a]=b.join("\n").replace(this.FUNCTION_NAME_PLACEHOLDER_REGEXP_,c)}return this.functionNames_[a]};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Names=function(a){this.reservedDict_=Object.create(null);if(a){a=a.split(",");for(var b=0;b<a.length;b++)this.reservedDict_[a[b]]=!0}this.reset()};Blockly.Names.prototype.reset=function(){this.db_=Object.create(null);this.dbReverse_=Object.create(null)};Blockly.Names.prototype.getName=function(a,b){var c=a.toLowerCase()+"_"+b;if(c in this.db_)return this.db_[c];var d=this.getDistinctName(a,b);return this.db_[c]=d};
-Blockly.Names.prototype.getDistinctName=function(a,b){for(var c=this.safeName_(a),d="";this.dbReverse_[c+d]||c+d in this.reservedDict_;)d=d?d+1:2;c+=d;this.dbReverse_[c]=!0;return c};Blockly.Names.prototype.safeName_=function(a){a?(a=encodeURI(a.replace(/ /g,"_")).replace(/[^\w]/g,"_"),-1!="0123456789".indexOf(a[0])&&(a="my_"+a)):a="unnamed";return a};Blockly.Names.equals=function(a,b){return a.toLowerCase()==b.toLowerCase()};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Procedures={};Blockly.Procedures.NAME_TYPE="PROCEDURE";Blockly.Procedures.allProcedures=function(){for(var a=Blockly.mainWorkspace.getAllBlocks(),b=[],c=[],d=0;d<a.length;d++){var e=a[d].getProcedureDef;e&&(e=e.call(a[d]))&&(e[2]?b.push(e):c.push(e))}c.sort(Blockly.Procedures.procTupleComparator_);b.sort(Blockly.Procedures.procTupleComparator_);return[c,b]};Blockly.Procedures.procTupleComparator_=function(a,b){var c=a[0].toLowerCase(),d=b[0].toLowerCase();return c>d?1:c<d?-1:0};
-Blockly.Procedures.findLegalName=function(a,b){if(b.isInFlyout)return a;for(;!Blockly.Procedures.isLegalName(a,b.workspace,b);){var c=a.match(/^(.*?)(\d+)$/);a=c?c[1]+(parseInt(c[2],10)+1):a+"2"}return a};Blockly.Procedures.isLegalName=function(a,b,c){b=b.getAllBlocks();for(var d=0;d<b.length;d++)if(b[d]!=c){var e=b[d].getProcedureDef;if(e&&(e=e.call(b[d]),Blockly.Names.equals(e[0],a)))return!1}return!0};
-Blockly.Procedures.rename=function(a){a=a.replace(/^[\s\xa0]+|[\s\xa0]+$/g,"");a=Blockly.Procedures.findLegalName(a,this.sourceBlock_);for(var b=this.sourceBlock_.workspace.getAllBlocks(),c=0;c<b.length;c++){var d=b[c].renameProcedure;d&&d.call(b[c],this.text_,a)}return a};
-Blockly.Procedures.flyoutCategory=function(a,b,c,d){function e(e,f){for(var k=0;k<e.length;k++){var l=Blockly.Block.obtain(d,f);l.setFieldValue(e[k][0],"NAME");for(var p=[],m=0;m<e[k][1].length;m++)p[m]="ARG"+m;l.setProcedureParameters(e[k][1],p);l.initSvg();a.push(l);b.push(2*c)}}if(Blockly.Blocks.procedures_defnoreturn){var f=Blockly.Block.obtain(d,"procedures_defnoreturn");f.initSvg();a.push(f);b.push(2*c)}Blockly.Blocks.procedures_defreturn&&(f=Blockly.Block.obtain(d,"procedures_defreturn"),f.initSvg(),
-a.push(f),b.push(2*c));Blockly.Blocks.procedures_ifreturn&&(f=Blockly.Block.obtain(d,"procedures_ifreturn"),f.initSvg(),a.push(f),b.push(2*c));b.length&&(b[b.length-1]=3*c);f=Blockly.Procedures.allProcedures();e(f[0],"procedures_callnoreturn");e(f[1],"procedures_callreturn")};Blockly.Procedures.getCallers=function(a,b){for(var c=[],d=b.getAllBlocks(),e=0;e<d.length;e++){var f=d[e].getProcedureCall;f&&(f=f.call(d[e]))&&Blockly.Names.equals(f,a)&&c.push(d[e])}return c};
-Blockly.Procedures.disposeCallers=function(a,b){for(var c=Blockly.Procedures.getCallers(a,b),d=0;d<c.length;d++)c[d].dispose(!0,!1)};Blockly.Procedures.mutateCallers=function(a,b,c,d){a=Blockly.Procedures.getCallers(a,b);for(b=0;b<a.length;b++)a[b].setProcedureParameters(c,d)};Blockly.Procedures.getDefinition=function(a,b){for(var c=b.getAllBlocks(),d=0;d<c.length;d++){var e=c[d].getProcedureDef;if(e&&(e=e.call(c[d]))&&Blockly.Names.equals(e[0],a))return c[d]}return null};
-// Copyright 2013 Google Inc.  Apache License 2.0
-var rtclient={INSTALL_SCOPE:"https://www.googleapis.com/auth/drive.install",FILE_SCOPE:"https://www.googleapis.com/auth/drive.file",APPDATA_SCOPE:"https://www.googleapis.com/auth/drive.appdata",OPENID_SCOPE:"openid",REALTIME_MIMETYPE:"application/vnd.google-apps.drive-sdk",FOLDER_KEY:"folderId",getParams:function(){function a(a){a=a.slice(1).split("&");for(var c=0;c<a.length;c++){var f=a[c].split("=");b[decodeURIComponent(f[0])]=decodeURIComponent(f[1])}}var b={},c=window.location.hash;c&&a(c);(c=
-window.location.search)&&a(c);return b}};rtclient.params=rtclient.getParams();rtclient.getOption=function(a,b,c){if(a.hasOwnProperty(b))return a[b];void 0===c&&console.error(b+" should be present in the options.");return c};rtclient.Authorizer=function(a){this.clientId=rtclient.getOption(a,"clientId");this.userId=rtclient.params.userId;this.authButton=document.getElementById(rtclient.getOption(a,"authButtonElementId"));this.authDiv=document.getElementById(rtclient.getOption(a,"authDivElementId"))};
-rtclient.Authorizer.prototype.start=function(a){var b=this;gapi.load("auth:client,drive-realtime,drive-share",function(){b.authorize(a)})};
-rtclient.Authorizer.prototype.authorize=function(a){var b=this.clientId,c=this.userId,d=this,e=function(b){b&&!b.error?(d.authButton.disabled=!0,d.fetchUserId(a),d.authDiv.style.display="none"):(d.authButton.disabled=!1,d.authButton.onclick=f,d.authDiv.style.display="block")},f=function(){gapi.auth.authorize({client_id:b,scope:[rtclient.INSTALL_SCOPE,rtclient.FILE_SCOPE,rtclient.OPENID_SCOPE,rtclient.APPDATA_SCOPE],user_id:c,immediate:!1},e)};gapi.auth.authorize({client_id:b,scope:[rtclient.INSTALL_SCOPE,
-rtclient.FILE_SCOPE,rtclient.OPENID_SCOPE,rtclient.APPDATA_SCOPE],user_id:c,immediate:!0},e)};rtclient.Authorizer.prototype.fetchUserId=function(a){var b=this;gapi.client.load("oauth2","v2",function(){gapi.client.oauth2.userinfo.get().execute(function(c){c.id&&(b.userId=c.id);a&&a()})})};
-rtclient.createRealtimeFile=function(a,b,c,d){function e(c){gapi.client.drive.files.insert({resource:{mimeType:b,title:a,parents:[{id:c}]}}).execute(d)}function f(){function a(b){gapi.client.drive.properties.insert({fileId:"appdata",resource:{key:rtclient.FOLDER_KEY,value:b}}).execute(function(a){e(b)})}function b(){gapi.client.drive.files.insert({resource:{mimeType:"application/vnd.google-apps.folder",title:c}}).execute(function(b){a(b.id)})}gapi.client.drive.properties.get({fileId:"appdata",propertyKey:rtclient.FOLDER_KEY}).execute(function(d){if(d.error)c?
-b():a("root");else{var f=d.result.value;gapi.client.drive.files.get({fileId:f}).execute(function(a){a.error||a.labels.trashed?b():e(f)})}})}gapi.client.load("drive","v2",function(){f()})};rtclient.getFileMetadata=function(a,b){gapi.client.load("drive","v2",function(){gapi.client.drive.files.get({fileId:a}).execute(b)})};rtclient.parseState=function(a){try{return JSON.parse(a)}catch(b){return null}};
-rtclient.RealtimeLoader=function(a){this.onFileLoaded=rtclient.getOption(a,"onFileLoaded");this.newFileMimeType=rtclient.getOption(a,"newFileMimeType",rtclient.REALTIME_MIMETYPE);this.initializeModel=rtclient.getOption(a,"initializeModel");this.registerTypes=rtclient.getOption(a,"registerTypes",function(){});this.afterAuth=rtclient.getOption(a,"afterAuth",function(){});this.autoCreate=rtclient.getOption(a,"autoCreate",!1);this.defaultTitle=rtclient.getOption(a,"defaultTitle","New Realtime File");
-this.defaultFolderTitle=rtclient.getOption(a,"defaultFolderTitle","");this.afterCreate=rtclient.getOption(a,"afterCreate",function(){});this.authorizer=new rtclient.Authorizer(a)};
-rtclient.RealtimeLoader.prototype.redirectTo=function(a,b){var c=[];a&&c.push("fileIds="+a.join(","));b&&c.push("userId="+b);c=0==c.length?window.location.pathname:window.location.pathname+"#"+c.join("&");window.history&&window.history.replaceState?window.history.replaceState("Google Drive Realtime API Playground","Google Drive Realtime API Playground",c):window.location.href=c;rtclient.params=rtclient.getParams();for(var d in a)gapi.drive.realtime.load(a[d],this.onFileLoaded,this.initializeModel,
-this.handleErrors)};rtclient.RealtimeLoader.prototype.start=function(){var a=this;this.authorizer.start(function(){a.registerTypes&&a.registerTypes();a.afterAuth&&a.afterAuth();a.load()})};
-rtclient.RealtimeLoader.prototype.handleErrors=function(a){a.type==gapi.drive.realtime.ErrorType.TOKEN_REFRESH_REQUIRED?this.authorizer.authorize():a.type==gapi.drive.realtime.ErrorType.CLIENT_ERROR?(alert("An Error happened: "+a.message),window.location.href="/"):a.type==gapi.drive.realtime.ErrorType.NOT_FOUND&&(alert("The file was not found. It does not exist or you do not have read access to the file."),window.location.href="/")};
-rtclient.RealtimeLoader.prototype.load=function(){var a=rtclient.params.fileIds;a&&(a=a.split(","));var b=this.authorizer.userId,b=rtclient.params.state;if(a)for(var c in a)gapi.drive.realtime.load(a[c],this.onFileLoaded,this.initializeModel,this.handleErrors);else{if(b&&(c=rtclient.parseState(b),"open"==c.action)){a=c.ids;b=c.userId;this.redirectTo(a,b);return}this.autoCreate&&this.createNewFileAndRedirect()}};
-rtclient.RealtimeLoader.prototype.createNewFileAndRedirect=function(){var a=this;rtclient.createRealtimeFile(this.defaultTitle,this.newFileMimeType,this.defaultFolderTitle,function(b){b.id?(a.afterCreate&&a.afterCreate(b.id),a.redirectTo([b.id],a.authorizer.userId)):(console.error("Error creating file."),console.error(b))})};
-// Copyright 2014 Google Inc.  Apache License 2.0
-Blockly.Realtime={};Blockly.Realtime.PROGRESS_URL_="media/progress.gif";Blockly.Realtime.enabled_=!1;Blockly.Realtime.document_=null;Blockly.Realtime.model_=null;Blockly.Realtime.sessionId_=null;Blockly.Realtime.initUi_=null;Blockly.Realtime.blocksMap_=null;Blockly.Realtime.withinSync=!1;Blockly.Realtime.realtimeLoader_=null;Blockly.Realtime.chatBoxElementId_=null;Blockly.Realtime.chatBoxInitialText_=null;Blockly.Realtime.withinUndo_=!1;Blockly.Realtime.isEnabled=function(){return Blockly.Realtime.enabled_};
-Blockly.Realtime.undoElementId_=null;Blockly.Realtime.redoElementId_=null;Blockly.Realtime.PROGRESS_URL_="media/progress.gif";Blockly.Realtime.ANONYMOUS_URL_="media/anon.jpeg";Blockly.Realtime.initializeModel_=function(a){Blockly.Realtime.model_=a;var b=a.createMap();a.getRoot().set("blocks",b);b=a.createList();a.getRoot().set("topBlocks",b);Blockly.Realtime.chatBoxElementId_&&a.getRoot().set(Blockly.Realtime.chatBoxElementId_,a.createString(Blockly.Realtime.chatBoxInitialText_))};
-Blockly.Realtime.removeBlock=function(a){Blockly.Realtime.blocksMap_["delete"](a.id.toString())};Blockly.Realtime.addTopBlock=function(a){-1==Blockly.Realtime.topBlocks_.indexOf(a)&&Blockly.Realtime.topBlocks_.push(a)};Blockly.Realtime.removeTopBlock=function(a){Blockly.Realtime.topBlocks_.removeValue(a)};Blockly.Realtime.obtainBlock=function(a,b){return Blockly.Realtime.model_.create(Blockly.Block,a,b)};Blockly.Realtime.getBlockById=function(a){return Blockly.Realtime.blocksMap_.get(a)};
-Blockly.Realtime.logEvent_=function(a){console.log("Object event:");console.log("  id: "+a.target.id);console.log("  type: "+a.type);if(a=a.events)for(var b=a.length,c=0;c<b;c++){var d=a[c];console.log("  child event:");console.log("    id: "+d.target.id);console.log("    type: "+d.type)}};
-Blockly.Realtime.onObjectChange_=function(a){var b=a.events;a=a.events.length;for(var c=0;c<a;c++){var d=b[c];if(!d.isLocal||Blockly.Realtime.withinUndo_){var e=d.target;"value_changed"==d.type&&("xmlDom"==d.property?Blockly.Realtime.doWithinSync_(function(){Blockly.Realtime.placeBlockOnWorkspace_(e,!1);Blockly.Realtime.moveBlock_(e)}):"relativeX"!=d.property&&"relativeY"!=d.property||Blockly.Realtime.doWithinSync_(function(){e.svg_||Blockly.Realtime.placeBlockOnWorkspace_(e,!1);Blockly.Realtime.moveBlock_(e)}))}}};
-Blockly.Realtime.onBlocksMapChange_=function(a){if(!a.isLocal||Blockly.Realtime.withinUndo_){var b=a.newValue;b?Blockly.Realtime.placeBlockOnWorkspace_(b,!a.oldValue):(b=a.oldValue,Blockly.Realtime.deleteBlock(b))}};Blockly.Realtime.doWithinSync_=function(a){if(Blockly.Realtime.withinSync)a();else try{Blockly.Realtime.withinSync=!0,a()}finally{Blockly.Realtime.withinSync=!1}};
-Blockly.Realtime.placeBlockOnWorkspace_=function(a,b){Blockly.Realtime.doWithinSync_(function(){var c=Blockly.Xml.textToDom(a.xmlDom).firstChild;if(c=Blockly.Xml.domToBlock(Blockly.mainWorkspace,c,!0))b&&c.workspace.addTopBlock(c),(b||goog.array.contains(Blockly.Realtime.topBlocks_,c))&&Blockly.Realtime.moveBlock_(c)})};
-Blockly.Realtime.moveBlock_=function(a){if(!isNaN(a.relativeX)&&!isNaN(a.relativeY)){var b=Blockly.svgSize().width,c=a.getRelativeToSurfaceXY(),d=a.relativeX-c.x;a.moveBy(Blockly.RTL?b-d:d,a.relativeY-c.y)}};Blockly.Realtime.deleteBlock=function(a){Blockly.Realtime.doWithinSync_(function(){a.dispose(!0,!0,!0)})};Blockly.Realtime.loadBlocks_=function(){for(var a=Blockly.Realtime.topBlocks_,b=0;b<a.length;b++){var c=a.get(b);Blockly.Realtime.placeBlockOnWorkspace_(c,!0)}};
-Blockly.Realtime.blockChanged=function(a){if(a.workspace==Blockly.mainWorkspace&&Blockly.Realtime.isEnabled()&&!Blockly.Realtime.withinSync){a=a.getRootBlock();var b=a.getRelativeToSurfaceXY(),c=!1,d=Blockly.Xml.blockToDom_(a);d.setAttribute("id",a.id);var e=goog.dom.createDom("xml");e.appendChild(d);d=Blockly.Xml.domToText(e);d!=a.xmlDom&&(c=!0,a.xmlDom=d);if(a.relativeX!=b.x||a.relativeY!=b.y)a.relativeX=b.x,a.relativeY=b.y,c=!0;c&&Blockly.Realtime.blocksMap_.set(a.id.toString(),a)}};
-Blockly.Realtime.onFileLoaded_=function(a){Blockly.Realtime.document_=a;Blockly.Realtime.sessionId_=Blockly.Realtime.getSessionId_(a);Blockly.Realtime.model_=a.getModel();Blockly.Realtime.blocksMap_=Blockly.Realtime.model_.getRoot().get("blocks");Blockly.Realtime.topBlocks_=Blockly.Realtime.model_.getRoot().get("topBlocks");Blockly.Realtime.model_.getRoot().addEventListener(gapi.drive.realtime.EventType.OBJECT_CHANGED,Blockly.Realtime.onObjectChange_);Blockly.Realtime.blocksMap_.addEventListener(gapi.drive.realtime.EventType.VALUE_CHANGED,
-Blockly.Realtime.onBlocksMapChange_);Blockly.Realtime.initUi_();a.addEventListener(gapi.drive.realtime.EventType.COLLABORATOR_JOINED,Blockly.Realtime.onCollaboratorJoined_);a.addEventListener(gapi.drive.realtime.EventType.COLLABORATOR_LEFT,Blockly.Realtime.onCollaboratorLeft_);Blockly.Realtime.updateCollabUi_();Blockly.Realtime.loadBlocks_()};Blockly.Realtime.getSessionId_=function(a){a=a.getCollaborators();for(var b=0;b<a.length;b++){var c=a[b];if(c.isMe)return c.sessionId}};
-Blockly.Realtime.registerTypes_=function(){var a=gapi.drive.realtime.custom;a.registerType(Blockly.Block,"Block");Blockly.Block.prototype.id=a.collaborativeField("id");Blockly.Block.prototype.xmlDom=a.collaborativeField("xmlDom");Blockly.Block.prototype.relativeX=a.collaborativeField("relativeX");Blockly.Block.prototype.relativeY=a.collaborativeField("relativeY");a.setInitializer(Blockly.Block,Blockly.Block.prototype.initialize)};Blockly.Realtime.REAUTH_INTERVAL_IN_MILLISECONDS_=18E5;
-Blockly.Realtime.afterAuth_=function(){window.setTimeout(function(){Blockly.Realtime.realtimeLoader_.authorizer.authorize(Blockly.Realtime.afterAuth_)},Blockly.Realtime.REAUTH_INTERVAL_IN_MILLISECONDS_)};
-Blockly.Realtime.afterCreate_=function(a){var b=gapi.client.drive.permissions.insert({fileId:a,resource:{type:"anyone",role:"writer",value:"default",withLink:!0}});b.execute(function(c){c.error&&Blockly.Realtime.getUserDomain(a,function(c){b=gapi.client.drive.permissions.insert({fileId:a,resource:{type:"domain",role:"writer",value:c,withLink:!0}});b.execute(function(a){})})})};
-Blockly.Realtime.getUserDomain=function(a,b){gapi.client.drive.permissions.list({fileId:a}).execute(function(a){for(var d=0;d<a.items.length;d++){var e=a.items[d];if("owner"==e.role){b(e.domain);break}}})};
-Blockly.Realtime.rtclientOptions_={clientId:null,authButtonElementId:"authorizeButton",authDivElementId:"authButtonDiv",initializeModel:Blockly.Realtime.initializeModel_,autoCreate:!0,defaultTitle:"Realtime Blockly File",defaultFolderTitle:"Realtime Blockly Folder",newFileMimeType:null,onFileLoaded:Blockly.Realtime.onFileLoaded_,registerTypes:Blockly.Realtime.registerTypes_,afterAuth:Blockly.Realtime.afterAuth_,afterCreate:Blockly.Realtime.afterCreate_};
-Blockly.Realtime.parseOptions_=function(a){var b=rtclient.getOption(a,"chatbox");b&&(Blockly.Realtime.chatBoxElementId_=rtclient.getOption(b,"elementId"),Blockly.Realtime.chatBoxInitialText_=rtclient.getOption(b,"initText",Blockly.Msg.CHAT));Blockly.Realtime.rtclientOptions_.clientId=rtclient.getOption(a,"clientId");Blockly.Realtime.collabElementId=rtclient.getOption(a,"collabElementId")};
-Blockly.Realtime.startRealtime=function(a,b,c){Blockly.Realtime.parseOptions_(c);Blockly.Realtime.enabled_=!0;Blockly.Realtime.addAuthUi_(b);Blockly.Realtime.initUi_=function(){a();if(Blockly.Realtime.chatBoxElementId_){var b=Blockly.Realtime.model_.getRoot().get(Blockly.Realtime.chatBoxElementId_),c=document.getElementById(Blockly.Realtime.chatBoxElementId_);gapi.drive.realtime.databinding.bindString(b,c);c.disabled=!1}};Blockly.Realtime.realtimeLoader_=new rtclient.RealtimeLoader(Blockly.Realtime.rtclientOptions_);
-Blockly.Realtime.realtimeLoader_.start()};
-Blockly.Realtime.addAuthUi_=function(a){a.style.background="url("+Blockly.pathToBlockly+Blockly.Realtime.PROGRESS_URL_+") no-repeat center center";var b=goog.style.getBounds(a),c=goog.dom.createDom("div");c.id=Blockly.Realtime.rtclientOptions_.authDivElementId;var d=goog.dom.createDom("p",null,Blockly.Msg.AUTH);c.appendChild(d);d=goog.dom.createDom("button",null,"Authorize");d.id=Blockly.Realtime.rtclientOptions_.authButtonElementId;c.appendChild(d);a.appendChild(c);c.style.display="none";c.style.position=
-"relative";c.style.textAlign="center";c.style.border="1px solid";c.style.backgroundColor="#f6f9ff";c.style.borderRadius="15px";c.style.boxShadow="10px 10px 5px #888";c.style.width=b.width/3+"px";a=goog.style.getBounds(c);c.style.left=(b.width-a.width)/3+"px";c.style.top=(b.height-a.height)/4+"px";return c};
-Blockly.Realtime.updateCollabUi_=function(){if(Blockly.Realtime.collabElementId){var a=goog.dom.getElement(Blockly.Realtime.collabElementId);goog.dom.removeChildren(a);for(var b=Blockly.Realtime.document_.getCollaborators(),c=0;c<b.length;c++){var d=b[c],e=goog.dom.createDom("img",{src:d.photoUrl||Blockly.pathToBlockly+Blockly.Realtime.ANONYMOUS_URL_,alt:d.displayName,title:d.displayName+(d.isMe?" ("+Blockly.Msg.ME+")":"")});e.style.backgroundColor=d.color;goog.dom.appendChild(a,e)}}};
-Blockly.Realtime.onCollaboratorJoined_=function(a){Blockly.Realtime.updateCollabUi_()};Blockly.Realtime.onCollaboratorLeft_=function(a){Blockly.Realtime.updateCollabUi_()};Blockly.Realtime.doCommand=function(a){a()};Blockly.Realtime.genUid=function(a){var b=Blockly.Realtime.sessionId_+"-"+a;return Blockly.Realtime.blocksMap_.has(b)?Blockly.Realtime.genUid("-"+a):b};
-// Copyright 2013 Google Inc.  Apache License 2.0
-Blockly.Css={};Blockly.Css.inject=function(){var a=Blockly.Css.CONTENT.join("\n"),b=Blockly.pathToBlockly.replace(/[\\\/]$/,""),a=a.replace(/<<<PATH>>>/g,b);goog.cssom.addCssText(a)};
-Blockly.Css.CONTENT=[".blocklySvg {","  background-color: #fff;","  border: 1px solid #ddd;","  overflow: hidden;","}",".blocklyWidgetDiv {","  position: absolute;","  display: none;","  z-index: 999;","}",".blocklyDraggable {","  cursor: url(<<<PATH>>>/media/handopen.cur) 8 5, auto;","}",".blocklyResizeSE {","  fill: #aaa;","  cursor: se-resize;","}",".blocklyResizeSW {","  fill: #aaa;","  cursor: sw-resize;","}",".blocklyResizeLine {","  stroke-width: 1;","  stroke: #888;","}",".blocklyHighlightedConnectionPath {",
-"  stroke-width: 4px;","  stroke: #fc3;","  fill: none;","}",".blocklyPathLight {","  fill: none;","  stroke-width: 2;","  stroke-linecap: round;","}",".blocklySelected>.blocklyPath {","  stroke-width: 3px;","  stroke: #fc3;","}",".blocklySelected>.blocklyPathLight {","  display: none;","}",".blocklyDragging>.blocklyPath,",".blocklyDragging>.blocklyPathLight {","  fill-opacity: .8;","  stroke-opacity: .8;","}",".blocklyDragging>.blocklyPathDark {","  display: none;","}",".blocklyDisabled>.blocklyPath {",
-"  fill-opacity: .5;","  stroke-opacity: .5;","}",".blocklyDisabled>.blocklyPathLight,",".blocklyDisabled>.blocklyPathDark {","  display: none;","}",".blocklyText {","  cursor: default;","  font-family: sans-serif;","  font-size: 11pt;","  fill: #fff;","}",".blocklyNonEditableText>text {","  pointer-events: none;","}",".blocklyNonEditableText>rect,",".blocklyEditableText>rect {","  fill: #fff;","  fill-opacity: .6;","}",".blocklyNonEditableText>text,",".blocklyEditableText>text {","  fill: #000;",
-"}",".blocklyEditableText:hover>rect {","  stroke-width: 2;","  stroke: #fff;","}",".blocklyBubbleText {","  fill: #000;","}",".blocklySvg text {","  -moz-user-select: none;","  -webkit-user-select: none;","  user-select: none;","  cursor: inherit;","}",".blocklyHidden {","  display: none;","}",".blocklyFieldDropdown:not(.blocklyHidden) {","  display: block;","}",".blocklyTooltipBackground {","  fill: #ffffc7;","  stroke-width: 1px;","  stroke: #d8d8d8;","}",".blocklyTooltipShadow,",".blocklyDropdownMenuShadow {",
-"  fill: #bbb;","  filter: url(#blocklyShadowFilter);","}",".blocklyTooltipText {","  font-family: sans-serif;","  font-size: 9pt;","  fill: #000;","}",".blocklyIconShield {","  cursor: default;","  fill: #00c;","  stroke-width: 1px;","  stroke: #ccc;","}",".blocklyIconGroup:hover>.blocklyIconShield {","  fill: #00f;","  stroke: #fff;","}",".blocklyIconGroup:hover>.blocklyIconMark {","  fill: #fff;","}",".blocklyIconMark {","  cursor: default !important;","  font-family: sans-serif;","  font-size: 9pt;",
-"  font-weight: bold;","  fill: #ccc;","  text-anchor: middle;","}",".blocklyWarningBody {","}",".blocklyMinimalBody {","  margin: 0;","  padding: 0;","}",".blocklyCommentTextarea {","  margin: 0;","  padding: 2px;","  border: 0;","  resize: none;","  background-color: #ffc;","}",".blocklyHtmlInput {","  font-family: sans-serif;","  font-size: 11pt;","  border: none;","  outline: none;","  width: 100%","}",".blocklyMutatorBackground {","  fill: #fff;","  stroke-width: 1;","  stroke: #ddd;","}",".blocklyFlyoutBackground {",
-"  fill: #ddd;","  fill-opacity: .8;","}",".blocklyColourBackground {","  fill: #666;","}",".blocklyScrollbarBackground {","  fill: #fff;","  stroke-width: 1;","  stroke: #e4e4e4;","}",".blocklyScrollbarKnob {","  fill: #ccc;","}",".blocklyScrollbarBackground:hover+.blocklyScrollbarKnob,",".blocklyScrollbarKnob:hover {","  fill: #bbb;","}",".blocklyInvalidInput {","  background: #faa;","}",".blocklyAngleCircle {","  stroke: #444;","  stroke-width: 1;","  fill: #ddd;","  fill-opacity: .8;","}",".blocklyAngleMarks {",
-"  stroke: #444;","  stroke-width: 1;","}",".blocklyAngleGauge {","  fill: #f88;","  fill-opacity: .8;  ","}",".blocklyAngleLine {","  stroke: #f00;","  stroke-width: 2;","  stroke-linecap: round;","}",".blocklyContextMenu {","  border-radius: 4px;","}",".blocklyDropdownMenu {","  padding: 0 !important;","}",".goog-option-selected .goog-menuitem-checkbox,",".goog-option-selected .goog-menuitem-icon {","  background: url(<<<PATH>>>/media/sprites.png) no-repeat 0 0 !important;","}",".blocklyToolboxDiv {",
-"  background-color: #ddd;","  display: none;","  overflow-x: visible;","  overflow-y: auto;","  position: absolute;","}",".blocklyTreeRoot {","  padding: 4px 0;","}",".blocklyTreeRoot:focus {","  outline: none;","}",".blocklyTreeRow {","  line-height: 22px;","  height: 22px;","  padding-right: 1em;","  white-space: nowrap;","}",'.blocklyToolboxDiv[dir="RTL"] .blocklyTreeRow {',"  padding-right: 0;","  padding-left: 1em !important;","}",".blocklyTreeRow:hover {","  background-color: #e4e4e4;","}",
-".blocklyTreeIcon {","  height: 16px;","  width: 16px;","  vertical-align: middle;","  background-image: url(<<<PATH>>>/media/tree.png);","}",".blocklyTreeIconClosedLtr {","  background-position: -32px -1px;","}",".blocklyTreeIconClosedRtl {","  background-position: 0px -1px;","}",".blocklyTreeIconOpen {","  background-position: -16px -1px;","}",".blocklyTreeIconNone {","  background-position: -48px -1px;","}",".blocklyTreeSelected>.blocklyTreeIconClosedLtr {","  background-position: -32px -17px;",
-"}",".blocklyTreeSelected>.blocklyTreeIconClosedRtl {","  background-position: 0px -17px;","}",".blocklyTreeSelected>.blocklyTreeIconOpen {","  background-position: -16px -17px;","}",".blocklyTreeSelected>.blocklyTreeIconNone {","  background-position: -48px -17px;","}",".blocklyTreeLabel {","  cursor: default;","  font-family: sans-serif;","  font-size: 16px;","  padding: 0 3px;","  vertical-align: middle;","}",".blocklyTreeSelected  {","  background-color: #57e !important;","}",".blocklyTreeSelected .blocklyTreeLabel {",
-"  color: #fff;","}",".goog-palette {","  outline: none;","  cursor: default;","}",".goog-palette-table {","  border: 1px solid #666;","  border-collapse: collapse;","}",".goog-palette-cell {","  height: 13px;","  width: 15px;","  margin: 0;","  border: 0;","  text-align: center;","  vertical-align: middle;","  border-right: 1px solid #666;","  font-size: 1px;","}",".goog-palette-colorswatch {","  position: relative;","  height: 13px;","  width: 15px;","  border: 1px solid #666;","}",".goog-palette-cell-hover .goog-palette-colorswatch {",
-"  border: 1px solid #FFF;","}",".goog-palette-cell-selected .goog-palette-colorswatch {","  border: 1px solid #000;","  color: #fff;","}",".goog-menu {","  background: #fff;","  border-color: #ccc #666 #666 #ccc;","  border-style: solid;","  border-width: 1px;","  cursor: default;","  font: normal 13px Arial, sans-serif;","  margin: 0;","  outline: none;","  padding: 4px 0;","  position: absolute;","  z-index: 20000;","}",".goog-menuitem {","  color: #000;","  font: normal 13px Arial, sans-serif;",
-"  list-style: none;","  margin: 0;","  padding: 4px 7em 4px 28px;","  white-space: nowrap;","}",".goog-menuitem.goog-menuitem-rtl {","  padding-left: 7em;","  padding-right: 28px;","}",".goog-menu-nocheckbox .goog-menuitem,",".goog-menu-noicon .goog-menuitem {","  padding-left: 12px;","}",".goog-menu-noaccel .goog-menuitem {","  padding-right: 20px;","}",".goog-menuitem-content {","  color: #000;","  font: normal 13px Arial, sans-serif;","}",".goog-menuitem-disabled .goog-menuitem-accel,",".goog-menuitem-disabled .goog-menuitem-content {",
-"  color: #ccc !important;","}",".goog-menuitem-disabled .goog-menuitem-icon {","  opacity: 0.3;","  -moz-opacity: 0.3;","  filter: alpha(opacity=30);","}",".goog-menuitem-highlight,",".goog-menuitem-hover {","  background-color: #d6e9f8;","  border-color: #d6e9f8;","  border-style: dotted;","  border-width: 1px 0;","  padding-bottom: 3px;","  padding-top: 3px;","}",".goog-menuitem-checkbox,",".goog-menuitem-icon {","  background-repeat: no-repeat;","  height: 16px;","  left: 6px;","  position: absolute;",
-"  right: auto;","  vertical-align: middle;","  width: 16px;","}",".goog-menuitem-rtl .goog-menuitem-checkbox,",".goog-menuitem-rtl .goog-menuitem-icon {","  left: auto;","  right: 6px;","}",".goog-option-selected .goog-menuitem-checkbox,",".goog-option-selected .goog-menuitem-icon {","  background: url(//ssl.gstatic.com/editor/editortoolbar.png) no-repeat -512px 0;","}",".goog-menuitem-accel {","  color: #999;","  direction: ltr;","  left: auto;","  padding: 0 6px;","  position: absolute;","  right: 0;",
-"  text-align: right;","}",".goog-menuitem-rtl .goog-menuitem-accel {","  left: 0;","  right: auto;","  text-align: left;","}",".goog-menuitem-mnemonic-hint {","  text-decoration: underline;","}",".goog-menuitem-mnemonic-separator {","  color: #999;","  font-size: 12px;","  padding-left: 4px;","}",".goog-menuseparator {","  border-top: 1px solid #ccc;","  margin: 4px 0;","  padding: 0;","}",""];
-// Copyright 2013 Google Inc.  Apache License 2.0
-Blockly.WidgetDiv={};Blockly.WidgetDiv.DIV=null;Blockly.WidgetDiv.owner_=null;Blockly.WidgetDiv.dispose_=null;Blockly.WidgetDiv.show=function(a,b){Blockly.WidgetDiv.hide();Blockly.WidgetDiv.owner_=a;Blockly.WidgetDiv.dispose_=b;Blockly.WidgetDiv.DIV.style.display="block"};Blockly.WidgetDiv.hide=function(){Blockly.WidgetDiv.owner_&&(Blockly.WidgetDiv.DIV.style.display="none",Blockly.WidgetDiv.dispose_&&Blockly.WidgetDiv.dispose_(),Blockly.WidgetDiv.owner_=null,Blockly.WidgetDiv.dispose_=null,goog.dom.removeChildren(Blockly.WidgetDiv.DIV))};
-Blockly.WidgetDiv.isVisible=function(){return!!Blockly.WidgetDiv.owner_};Blockly.WidgetDiv.hideIfOwner=function(a){Blockly.WidgetDiv.owner_==a&&Blockly.WidgetDiv.hide()};Blockly.WidgetDiv.position=function(a,b,c,d){b<d.y&&(b=d.y);Blockly.RTL?a>c.width+d.x&&(a=c.width+d.x):a<d.x&&(a=d.x);Blockly.WidgetDiv.DIV.style.left=a+"px";Blockly.WidgetDiv.DIV.style.top=b+"px"};
-// Copyright 2011 Google Inc.  Apache License 2.0
-Blockly.inject=function(a,b){if(!goog.dom.contains(document,a))throw"Error: container is not in current document.";b&&goog.mixin(Blockly,Blockly.parseOptions_(b));var c=function(){Blockly.createDom_(a);Blockly.init_()};if(Blockly.enableRealtime){var d=document.getElementById("realtime");d&&(d.style.display="block");Blockly.Realtime.startRealtime(c,a,Blockly.realtimeOptions)}else c()};
-Blockly.parseToolboxTree_=function(a){a?("string"!=typeof a&&"undefined"==typeof XSLTProcessor&&(a=a.outerHTML),"string"==typeof a&&(a=Blockly.Xml.textToDom(a))):a=null;return a};
-Blockly.parseOptions_=function(a){var b=!!a.readOnly;if(b)var c=!1,d=!1,e=!1,f=null;else f=Blockly.parseToolboxTree_(a.toolbox),c=Boolean(f&&f.getElementsByTagName("category").length),d=a.trashcan,void 0===d&&(d=c),e=a.collapse,void 0===e&&(e=c);if(f&&!c)var g=!1;else g=a.scrollbars,void 0===g&&(g=!0);var h=!!a.realtime;return{RTL:!!a.rtl,collapse:e,readOnly:b,maxBlocks:a.maxBlocks||Infinity,pathToBlockly:a.path||"./",hasCategories:c,hasScrollbars:g,hasTrashcan:d,languageTree:f,enableRealtime:h,realtimeOptions:h?
-a.realtimeOptions:void 0}};
-Blockly.createDom_=function(a){a.setAttribute("dir","LTR");goog.ui.Component.setDefaultRightToLeft(Blockly.RTL);Blockly.Css.inject();var b=Blockly.createSvgElement("svg",{xmlns:"http://www.w3.org/2000/svg","xmlns:html":"http://www.w3.org/1999/xhtml","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1","class":"blocklySvg"},null),c=Blockly.createSvgElement("defs",{},b),d,e;d=Blockly.createSvgElement("filter",{id:"blocklyEmboss"},c);Blockly.createSvgElement("feGaussianBlur",{"in":"SourceAlpha",
-stdDeviation:1,result:"blur"},d);e=Blockly.createSvgElement("feSpecularLighting",{"in":"blur",surfaceScale:1,specularConstant:0.5,specularExponent:10,"lighting-color":"white",result:"specOut"},d);Blockly.createSvgElement("fePointLight",{x:-5E3,y:-1E4,z:2E4},e);Blockly.createSvgElement("feComposite",{"in":"specOut",in2:"SourceAlpha",operator:"in",result:"specOut"},d);Blockly.createSvgElement("feComposite",{"in":"SourceGraphic",in2:"specOut",operator:"arithmetic",k1:0,k2:1,k3:1,k4:0},d);d=Blockly.createSvgElement("filter",
-{id:"blocklyTrashcanShadowFilter"},c);Blockly.createSvgElement("feGaussianBlur",{"in":"SourceAlpha",stdDeviation:2,result:"blur"},d);Blockly.createSvgElement("feOffset",{"in":"blur",dx:1,dy:1,result:"offsetBlur"},d);d=Blockly.createSvgElement("feMerge",{},d);Blockly.createSvgElement("feMergeNode",{"in":"offsetBlur"},d);Blockly.createSvgElement("feMergeNode",{"in":"SourceGraphic"},d);d=Blockly.createSvgElement("filter",{id:"blocklyShadowFilter"},c);Blockly.createSvgElement("feGaussianBlur",{stdDeviation:2},
-d);c=Blockly.createSvgElement("pattern",{id:"blocklyDisabledPattern",patternUnits:"userSpaceOnUse",width:10,height:10},c);Blockly.createSvgElement("rect",{width:10,height:10,fill:"#aaa"},c);Blockly.createSvgElement("path",{d:"M 0 0 L 10 10 M 10 0 L 0 10",stroke:"#cc0"},c);Blockly.mainWorkspace=new Blockly.Workspace(Blockly.getMainWorkspaceMetrics_,Blockly.setMainWorkspaceMetrics_);b.appendChild(Blockly.mainWorkspace.createDom());Blockly.mainWorkspace.maxBlocks=Blockly.maxBlocks;Blockly.readOnly||
-(Blockly.hasCategories?Blockly.Toolbox.createDom(b,a):(Blockly.mainWorkspace.flyout_=new Blockly.Flyout,c=Blockly.mainWorkspace.flyout_,d=c.createDom(),c.init(Blockly.mainWorkspace,!0),c.autoClose=!1,goog.dom.insertSiblingBefore(d,Blockly.mainWorkspace.svgGroup_),Blockly.addChangeListener(function(){if(0==Blockly.Block.dragMode_){var a=Blockly.mainWorkspace.getMetrics();if(0>a.contentTop||a.contentTop+a.contentHeight>a.viewHeight+a.viewTop||a.contentLeft<(Blockly.RTL?a.viewLeft:0)||a.contentLeft+
-a.contentWidth>(Blockly.RTL?a.viewWidth:a.viewWidth+a.viewLeft))for(var b=Blockly.mainWorkspace.getTopBlocks(!1),c=0,d;d=b[c];c++){var e=d.getRelativeToSurfaceXY(),p=d.getHeightWidth(),m=a.viewTop+25-p.height-e.y;0<m&&d.moveBy(0,m);m=a.viewTop+a.viewHeight-25-e.y;0>m&&d.moveBy(0,m);m=25+a.viewLeft-e.x-(Blockly.RTL?0:p.width);0<m&&d.moveBy(m,0);m=a.viewLeft+a.viewWidth-25-e.x+(Blockly.RTL?p.width:0);0>m&&d.moveBy(m,0);d.isDeletable()&&50<(Blockly.RTL?e.x-a.viewWidth:-e.x)&&d.dispose(!1,!0)}}})));b.appendChild(Blockly.Tooltip.createDom());
-a.appendChild(b);Blockly.svg=b;Blockly.svgResize();Blockly.WidgetDiv.DIV=goog.dom.createDom("div","blocklyWidgetDiv");Blockly.WidgetDiv.DIV.style.direction=Blockly.RTL?"rtl":"ltr";document.body.appendChild(Blockly.WidgetDiv.DIV)};
-Blockly.init_=function(){var a=[],b=function(){for(;a.length;)Blockly.unbindEvent_(a.pop());Blockly.preloadAudio_()};a.push(Blockly.bindEvent_(document,"mousemove",null,b));a.push(Blockly.bindEvent_(document,"touchstart",null,b));Blockly.bindEvent_(Blockly.svg,"mousedown",null,Blockly.onMouseDown_);Blockly.bindEvent_(Blockly.svg,"mousemove",null,Blockly.onMouseMove_);Blockly.bindEvent_(Blockly.svg,"contextmenu",null,Blockly.onContextMenu_);Blockly.bindEvent_(Blockly.WidgetDiv.DIV,"contextmenu",null,
-Blockly.onContextMenu_);Blockly.documentEventsBound_||(Blockly.bindEvent_(window,"resize",document,Blockly.svgResize),Blockly.bindEvent_(document,"keydown",null,Blockly.onKeyDown_),document.addEventListener("mouseup",Blockly.onMouseUp_,!1),goog.userAgent.IPAD&&Blockly.bindEvent_(window,"orientationchange",document,function(){Blockly.fireUiEvent(window,"resize")}),Blockly.documentEventsBound_=!0);Blockly.languageTree&&(Blockly.hasCategories?Blockly.Toolbox.init():(Blockly.mainWorkspace.flyout_.init(Blockly.mainWorkspace,
-!0),Blockly.mainWorkspace.flyout_.show(Blockly.languageTree.childNodes),Blockly.mainWorkspace.scrollX=Blockly.mainWorkspace.flyout_.width_,Blockly.RTL&&(Blockly.mainWorkspace.scrollX*=-1),b="translate("+Blockly.mainWorkspace.scrollX+", 0)",Blockly.mainWorkspace.getCanvas().setAttribute("transform",b),Blockly.mainWorkspace.getBubbleCanvas().setAttribute("transform",b)));Blockly.hasScrollbars&&(Blockly.mainWorkspace.scrollbar=new Blockly.ScrollbarPair(Blockly.mainWorkspace),Blockly.mainWorkspace.scrollbar.resize());
-Blockly.mainWorkspace.addTrashcan();Blockly.loadAudio_(["media/click.mp3","media/click.wav","media/click.ogg"],"click");Blockly.loadAudio_(["media/delete.mp3","media/delete.ogg","media/delete.wav"],"delete")};
-Blockly.updateToolbox=function(a){if(a=Blockly.parseToolboxTree_(a)){if(!Blockly.languageTree)throw"Existing toolbox is null.  Can't create new toolbox.";if(a.getElementsByTagName("category").length){if(!Blockly.hasCategories)throw"Existing toolbox has no categories.  Can't change mode.";Blockly.languageTree=a;Blockly.Toolbox.populate_()}else{if(Blockly.hasCategories)throw"Existing toolbox has categories.  Can't change mode.";Blockly.languageTree=a;Blockly.mainWorkspace.flyout_.show(Blockly.languageTree.childNodes)}}else if(Blockly.languageTree)throw"Can't nullify an existing toolbox.";
-};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.utils={};Blockly.addClass_=function(a,b){var c=a.getAttribute("class")||"";-1==(" "+c+" ").indexOf(" "+b+" ")&&(c&&(c+=" "),a.setAttribute("class",c+b))};Blockly.removeClass_=function(a,b){var c=a.getAttribute("class");if(-1!=(" "+c+" ").indexOf(" "+b+" ")){for(var c=c.split(/\s+/),d=0;d<c.length;d++)c[d]&&c[d]!=b||(c.splice(d,1),d--);c.length?a.setAttribute("class",c.join(" ")):a.removeAttribute("class")}};
-Blockly.bindEvent_=function(a,b,c,d){var e=function(a){d.apply(c,arguments)};a.addEventListener(b,e,!1);var f=[[a,b,e]];b in Blockly.bindEvent_.TOUCH_MAP&&(e=function(a){if(1==a.changedTouches.length){var b=a.changedTouches[0];a.clientX=b.clientX;a.clientY=b.clientY}d.apply(c,arguments);a.preventDefault()},a.addEventListener(Blockly.bindEvent_.TOUCH_MAP[b],e,!1),f.push([a,Blockly.bindEvent_.TOUCH_MAP[b],e]));return f};Blockly.bindEvent_.TOUCH_MAP={};
-"ontouchstart"in document.documentElement&&(Blockly.bindEvent_.TOUCH_MAP={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"});Blockly.unbindEvent_=function(a){for(;a.length;){var b=a.pop(),c=b[2];b[0].removeEventListener(b[1],c,!1)}return c};
-Blockly.fireUiEventNow=function(a,b){var c=document;if(c.createEvent)c=c.createEvent("UIEvents"),c.initEvent(b,!0,!0),a.dispatchEvent(c);else if(c.createEventObject)c=c.createEventObject(),a.fireEvent("on"+b,c);else throw"FireEvent: No event creation mechanism.";};Blockly.fireUiEvent=function(a,b){setTimeout(function(){Blockly.fireUiEventNow(a,b)},0)};Blockly.noEvent=function(a){a.preventDefault();a.stopPropagation()};
-Blockly.getRelativeXY_=function(a){var b={x:0,y:0},c=a.getAttribute("x");c&&(b.x=parseInt(c,10));if(c=a.getAttribute("y"))b.y=parseInt(c,10);if(a=(a=a.getAttribute("transform"))&&a.match(/translate\(\s*([-\d.]+)([ ,]\s*([-\d.]+)\s*\))?/))b.x+=parseInt(a[1],10),a[3]&&(b.y+=parseInt(a[3],10));return b};Blockly.getSvgXY_=function(a){var b=0,c=0;do{var d=Blockly.getRelativeXY_(a),b=b+d.x,c=c+d.y;a=a.parentNode}while(a&&a!=Blockly.svg);return{x:b,y:c}};
-Blockly.getAbsoluteXY_=function(a){a=Blockly.getSvgXY_(a);return Blockly.convertCoordinates(a.x,a.y,!1)};Blockly.createSvgElement=function(a,b,c){a=document.createElementNS(Blockly.SVG_NS,a);for(var d in b)a.setAttribute(d,b[d]);document.body.runtimeStyle&&(a.runtimeStyle=a.currentStyle=a.style);c&&c.appendChild(a);return a};Blockly.isRightButton=function(a){return 2==a.button||a.ctrlKey};
-Blockly.convertCoordinates=function(a,b,c){c&&(a-=window.scrollX||window.pageXOffset,b-=window.scrollY||window.pageYOffset);var d=Blockly.svg.createSVGPoint();d.x=a;d.y=b;a=Blockly.svg.getScreenCTM();c&&(a=a.inverse());d=d.matrixTransform(a);c||(d.x+=window.scrollX||window.pageXOffset,d.y+=window.scrollY||window.pageYOffset);return d};Blockly.mouseToSvg=function(a){return Blockly.convertCoordinates(a.clientX+(window.scrollX||window.pageXOffset),a.clientY+(window.scrollY||window.pageYOffset),!0)};
-Blockly.shortestStringLength=function(a){if(!a.length)return 0;for(var b=a[0].length,c=1;c<a.length;c++)b=Math.min(b,a[c].length);return b};Blockly.commonWordPrefix=function(a,b){if(!a.length)return 0;if(1==a.length)return a[0].length;for(var c=0,d=b||Blockly.shortestStringLength(a),e=0;e<d;e++){for(var f=a[0][e],g=1;g<a.length;g++)if(f!=a[g][e])return c;" "==f&&(c=e+1)}for(g=1;g<a.length;g++)if((f=a[g][e])&&" "!=f)return c;return d};
-Blockly.commonWordSuffix=function(a,b){if(!a.length)return 0;if(1==a.length)return a[0].length;for(var c=0,d=b||Blockly.shortestStringLength(a),e=0;e<d;e++){for(var f=a[0].substr(-e-1,1),g=1;g<a.length;g++)if(f!=a[g].substr(-e-1,1))return c;" "==f&&(c=e+1)}for(g=1;g<a.length;g++)if((f=a[g].charAt(a[g].length-e-1))&&" "!=f)return c;return d};Blockly.isNumber=function(a){return!!a.match(/^\s*-?\d+(\.\d+)?\s*$/)};
-// Copyright 2011 Google Inc.  Apache License 2.0
-Blockly.pathToBlockly="./";Blockly.SVG_NS="http://www.w3.org/2000/svg";Blockly.HTML_NS="http://www.w3.org/1999/xhtml";Blockly.HSV_SATURATION=0.45;Blockly.HSV_VALUE=0.65;Blockly.makeColour=function(a){return goog.color.hsvToHex(a,Blockly.HSV_SATURATION,256*Blockly.HSV_VALUE)};Blockly.INPUT_VALUE=1;Blockly.OUTPUT_VALUE=2;Blockly.NEXT_STATEMENT=3;Blockly.PREVIOUS_STATEMENT=4;Blockly.DUMMY_INPUT=5;Blockly.ALIGN_LEFT=-1;Blockly.ALIGN_CENTRE=0;Blockly.ALIGN_RIGHT=1;Blockly.OPPOSITE_TYPE=[];
-Blockly.OPPOSITE_TYPE[Blockly.INPUT_VALUE]=Blockly.OUTPUT_VALUE;Blockly.OPPOSITE_TYPE[Blockly.OUTPUT_VALUE]=Blockly.INPUT_VALUE;Blockly.OPPOSITE_TYPE[Blockly.NEXT_STATEMENT]=Blockly.PREVIOUS_STATEMENT;Blockly.OPPOSITE_TYPE[Blockly.PREVIOUS_STATEMENT]=Blockly.NEXT_STATEMENT;Blockly.SOUNDS_=Object.create(null);Blockly.selected=null;Blockly.readOnly=!1;Blockly.highlightedConnection_=null;Blockly.localConnection_=null;Blockly.DRAG_RADIUS=5;Blockly.SNAP_RADIUS=20;Blockly.BUMP_DELAY=250;
-Blockly.COLLAPSE_CHARS=30;Blockly.mainWorkspace=null;Blockly.clipboard_=null;Blockly.svgSize=function(){return{width:Blockly.svg.cachedWidth_,height:Blockly.svg.cachedHeight_}};Blockly.svgResize=function(){var a=Blockly.svg,b=a.parentNode,c=b.offsetWidth,b=b.offsetHeight;a.cachedWidth_!=c&&(a.setAttribute("width",c+"px"),a.cachedWidth_=c);a.cachedHeight_!=b&&(a.setAttribute("height",b+"px"),a.cachedHeight_=b);Blockly.mainWorkspace.scrollbar&&Blockly.mainWorkspace.scrollbar.resize()};
-Blockly.onMouseDown_=function(a){Blockly.svgResize();Blockly.terminateDrag_();Blockly.hideChaff();var b=a.target&&a.target.nodeName&&"svg"==a.target.nodeName.toLowerCase();!Blockly.readOnly&&Blockly.selected&&b&&Blockly.selected.unselect();a.target==Blockly.svg&&Blockly.isRightButton(a)?Blockly.showContextMenu_(a):(Blockly.readOnly||b)&&Blockly.mainWorkspace.scrollbar&&(Blockly.mainWorkspace.dragMode=!0,Blockly.mainWorkspace.startDragMouseX=a.clientX,Blockly.mainWorkspace.startDragMouseY=a.clientY,
-Blockly.mainWorkspace.startDragMetrics=Blockly.mainWorkspace.getMetrics(),Blockly.mainWorkspace.startScrollX=Blockly.mainWorkspace.scrollX,Blockly.mainWorkspace.startScrollY=Blockly.mainWorkspace.scrollY)};Blockly.onMouseUp_=function(a){Blockly.setCursorHand_(!1);Blockly.mainWorkspace.dragMode=!1};
-Blockly.onMouseMove_=function(a){if(Blockly.mainWorkspace.dragMode){Blockly.removeAllRanges();var b=Blockly.mainWorkspace.startDragMetrics,c=Blockly.mainWorkspace.startScrollX+(a.clientX-Blockly.mainWorkspace.startDragMouseX);a=Blockly.mainWorkspace.startScrollY+(a.clientY-Blockly.mainWorkspace.startDragMouseY);c=Math.min(c,-b.contentLeft);a=Math.min(a,-b.contentTop);c=Math.max(c,b.viewWidth-b.contentLeft-b.contentWidth);a=Math.max(a,b.viewHeight-b.contentTop-b.contentHeight);Blockly.mainWorkspace.scrollbar.set(-c-
-b.contentLeft,-a-b.contentTop)}};
-Blockly.onKeyDown_=function(a){if(!Blockly.isTargetInput_(a))if(27==a.keyCode)Blockly.hideChaff();else if(8==a.keyCode||46==a.keyCode)try{Blockly.selected&&Blockly.selected.isDeletable()&&(Blockly.hideChaff(),Blockly.selected.dispose(!0,!0))}finally{a.preventDefault()}else if(a.altKey||a.ctrlKey||a.metaKey)Blockly.selected&&Blockly.selected.isDeletable()&&Blockly.selected.workspace==Blockly.mainWorkspace&&(Blockly.hideChaff(),67==a.keyCode?Blockly.copy_(Blockly.selected):88==a.keyCode&&(Blockly.copy_(Blockly.selected),
-Blockly.selected.dispose(!0,!0))),86==a.keyCode&&Blockly.clipboard_&&Blockly.mainWorkspace.paste(Blockly.clipboard_)};Blockly.terminateDrag_=function(){Blockly.Block.terminateDrag_();Blockly.Flyout.terminateDrag_()};Blockly.copy_=function(a){var b=Blockly.Xml.blockToDom_(a);Blockly.Xml.deleteNext(b);a=a.getRelativeToSurfaceXY();b.setAttribute("x",Blockly.RTL?-a.x:a.x);b.setAttribute("y",a.y);Blockly.clipboard_=b};
-Blockly.showContextMenu_=function(a){if(!Blockly.readOnly){var b=[];if(Blockly.collapse){for(var c=!1,d=!1,e=Blockly.mainWorkspace.getTopBlocks(!1),f=0;f<e.length;f++)for(var g=e[f];g;)g.isCollapsed()?c=!0:d=!0,g=g.getNextBlock();d={enabled:d};d.text=Blockly.Msg.COLLAPSE_ALL;d.callback=function(){for(var a=0,b=0;b<e.length;b++)for(var c=e[b];c;)setTimeout(c.setCollapsed.bind(c,!0),a),c=c.getNextBlock(),a+=10};b.push(d);c={enabled:c};c.text=Blockly.Msg.EXPAND_ALL;c.callback=function(){for(var a=0,
-b=0;b<e.length;b++)for(var c=e[b];c;)setTimeout(c.setCollapsed.bind(c,!1),a),c=c.getNextBlock(),a+=10};b.push(c)}Blockly.ContextMenu.show(a,b)}};Blockly.onContextMenu_=function(a){Blockly.isTargetInput_(a)||a.preventDefault()};Blockly.hideChaff=function(a){Blockly.Tooltip.hide();Blockly.WidgetDiv.hide();!a&&Blockly.Toolbox.flyout_&&Blockly.Toolbox.flyout_.autoClose&&Blockly.Toolbox.clearSelection()};
-Blockly.removeAllRanges=function(){if(window.getSelection){var a=window.getSelection();a&&a.removeAllRanges&&(a.removeAllRanges(),window.setTimeout(function(){try{window.getSelection().removeAllRanges()}catch(a){}},0))}};Blockly.isTargetInput_=function(a){return"textarea"==a.target.type||"text"==a.target.type};
-Blockly.loadAudio_=function(a,b){if(window.Audio&&a.length){for(var c,d=new window.Audio,e=0;e<a.length;e++){var f=a[e],g=f.match(/\.(\w+)$/);if(g&&d.canPlayType("audio/"+g[1])){c=new window.Audio(Blockly.pathToBlockly+f);break}}c&&c.play&&(Blockly.SOUNDS_[b]=c)}};Blockly.preloadAudio_=function(){for(var a in Blockly.SOUNDS_){var b=Blockly.SOUNDS_[a];b.volume=0.01;b.play();b.pause()}};
-Blockly.playAudio=function(a,b){var c=Blockly.SOUNDS_[a];c&&(c=goog.userAgent.DOCUMENT_MODE&&9===goog.userAgent.DOCUMENT_MODE||goog.userAgent.IPAD||goog.userAgent.ANDROID?c:c.cloneNode(),c.volume=void 0===b?1:b,c.play())};Blockly.setCursorHand_=function(a){if(!Blockly.readOnly){var b="";a&&(b="url("+Blockly.pathToBlockly+"media/handclosed.cur) 7 3, auto");Blockly.selected&&(Blockly.selected.getSvgRoot().style.cursor=b);Blockly.svg.style.cursor=b}};
-Blockly.getMainWorkspaceMetrics_=function(){var a=Blockly.svgSize();a.width-=Blockly.Toolbox.width;var b=a.width-Blockly.Scrollbar.scrollbarThickness,c=a.height-Blockly.Scrollbar.scrollbarThickness;try{var d=Blockly.mainWorkspace.getCanvas().getBBox()}catch(e){return null}if(Blockly.mainWorkspace.scrollbar)var f=Math.min(d.x-b/2,d.x+d.width-b),b=Math.max(d.x+d.width+b/2,d.x+b),g=Math.min(d.y-c/2,d.y+d.height-c),c=Math.max(d.y+d.height+c/2,d.y+c);else f=d.x,b=f+d.width,g=d.y,c=g+d.height;return{viewHeight:a.height,
-viewWidth:a.width,contentHeight:c-g,contentWidth:b-f,viewTop:-Blockly.mainWorkspace.scrollY,viewLeft:-Blockly.mainWorkspace.scrollX,contentTop:g,contentLeft:f,absoluteTop:0,absoluteLeft:Blockly.RTL?0:Blockly.Toolbox.width}};
-Blockly.setMainWorkspaceMetrics_=function(a){if(!Blockly.mainWorkspace.scrollbar)throw"Attempt to set main workspace scroll without scrollbars.";var b=Blockly.getMainWorkspaceMetrics_();goog.isNumber(a.x)&&(Blockly.mainWorkspace.scrollX=-b.contentWidth*a.x-b.contentLeft);goog.isNumber(a.y)&&(Blockly.mainWorkspace.scrollY=-b.contentHeight*a.y-b.contentTop);a="translate("+(Blockly.mainWorkspace.scrollX+b.absoluteLeft)+","+(Blockly.mainWorkspace.scrollY+b.absoluteTop)+")";Blockly.mainWorkspace.getCanvas().setAttribute("transform",
-a);Blockly.mainWorkspace.getBubbleCanvas().setAttribute("transform",a)};Blockly.doCommand=function(a){Blockly.Realtime.isEnabled?Blockly.Realtime.doCommand(a):a()};Blockly.addChangeListener=function(a){return Blockly.bindEvent_(Blockly.mainWorkspace.getCanvas(),"blocklyWorkspaceChange",null,a)};Blockly.removeChangeListener=function(a){Blockly.unbindEvent_(a)};Blockly.getMainWorkspace=function(){return Blockly.mainWorkspace};window.Blockly=Blockly;Blockly.getMainWorkspace=Blockly.getMainWorkspace;
-Blockly.addChangeListener=Blockly.addChangeListener;Blockly.removeChangeListener=Blockly.removeChangeListener;

+ 0 - 145
support/client/lib/vwf/model/blockly/blocks_compressed.js

@@ -1,145 +0,0 @@
-// Do not edit this file; automatically generated by build.py.
-"use strict";
-
-
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Blocks.colour={};Blockly.Blocks.colour_picker={init:function(){this.setHelpUrl(Blockly.Msg.COLOUR_PICKER_HELPURL);this.setColour(20);this.appendDummyInput().appendField(new Blockly.FieldColour("#ff0000"),"COLOUR");this.setOutput(!0,"Colour");this.setTooltip(Blockly.Msg.COLOUR_PICKER_TOOLTIP)}};
-Blockly.Blocks.colour_random={init:function(){this.setHelpUrl(Blockly.Msg.COLOUR_RANDOM_HELPURL);this.setColour(20);this.appendDummyInput().appendField(Blockly.Msg.COLOUR_RANDOM_TITLE);this.setOutput(!0,"Colour");this.setTooltip(Blockly.Msg.COLOUR_RANDOM_TOOLTIP)}};
-Blockly.Blocks.colour_rgb={init:function(){this.setHelpUrl(Blockly.Msg.COLOUR_RGB_HELPURL);this.setColour(20);this.appendValueInput("RED").setCheck("Number").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.COLOUR_RGB_TITLE).appendField(Blockly.Msg.COLOUR_RGB_RED);this.appendValueInput("GREEN").setCheck("Number").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.COLOUR_RGB_GREEN);this.appendValueInput("BLUE").setCheck("Number").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.COLOUR_RGB_BLUE);
-this.setOutput(!0,"Colour");this.setTooltip(Blockly.Msg.COLOUR_RGB_TOOLTIP)}};
-Blockly.Blocks.colour_blend={init:function(){this.setHelpUrl(Blockly.Msg.COLOUR_BLEND_HELPURL);this.setColour(20);this.appendValueInput("COLOUR1").setCheck("Colour").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.COLOUR_BLEND_TITLE).appendField(Blockly.Msg.COLOUR_BLEND_COLOUR1);this.appendValueInput("COLOUR2").setCheck("Colour").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.COLOUR_BLEND_COLOUR2);this.appendValueInput("RATIO").setCheck("Number").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.COLOUR_BLEND_RATIO);this.setOutput(!0,
-"Colour");this.setTooltip(Blockly.Msg.COLOUR_BLEND_TOOLTIP)}};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Blocks.lists={};Blockly.Blocks.lists_create_empty={init:function(){this.setHelpUrl(Blockly.Msg.LISTS_CREATE_EMPTY_HELPURL);this.setColour(260);this.setOutput(!0,"Array");this.appendDummyInput().appendField(Blockly.Msg.LISTS_CREATE_EMPTY_TITLE);this.setTooltip(Blockly.Msg.LISTS_CREATE_EMPTY_TOOLTIP)}};
-Blockly.Blocks.lists_create_with={init:function(){this.setColour(260);this.appendValueInput("ADD0").appendField(Blockly.Msg.LISTS_CREATE_WITH_INPUT_WITH);this.appendValueInput("ADD1");this.appendValueInput("ADD2");this.setOutput(!0,"Array");this.setMutator(new Blockly.Mutator(["lists_create_with_item"]));this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_TOOLTIP);this.itemCount_=3},mutationToDom:function(){var a=document.createElement("mutation");a.setAttribute("items",this.itemCount_);return a},domToMutation:function(a){for(var b=
-0;b<this.itemCount_;b++)this.removeInput("ADD"+b);this.itemCount_=parseInt(a.getAttribute("items"),10);for(b=0;b<this.itemCount_;b++)a=this.appendValueInput("ADD"+b),0==b&&a.appendField(Blockly.Msg.LISTS_CREATE_WITH_INPUT_WITH);0==this.itemCount_&&this.appendDummyInput("EMPTY").appendField(Blockly.Msg.LISTS_CREATE_EMPTY_TITLE)},decompose:function(a){var b=Blockly.Block.obtain(a,"lists_create_with_container");b.initSvg();for(var c=b.getInput("STACK").connection,d=0;d<this.itemCount_;d++){var e=Blockly.Block.obtain(a,
-"lists_create_with_item");e.initSvg();c.connect(e.previousConnection);c=e.nextConnection}return b},compose:function(a){if(0==this.itemCount_)this.removeInput("EMPTY");else for(var b=this.itemCount_-1;0<=b;b--)this.removeInput("ADD"+b);this.itemCount_=0;for(a=a.getInputTargetBlock("STACK");a;)b=this.appendValueInput("ADD"+this.itemCount_),0==this.itemCount_&&b.appendField(Blockly.Msg.LISTS_CREATE_WITH_INPUT_WITH),a.valueConnection_&&b.connection.connect(a.valueConnection_),this.itemCount_++,a=a.nextConnection&&
-a.nextConnection.targetBlock();0==this.itemCount_&&this.appendDummyInput("EMPTY").appendField(Blockly.Msg.LISTS_CREATE_EMPTY_TITLE)},saveConnections:function(a){a=a.getInputTargetBlock("STACK");for(var b=0;a;){var c=this.getInput("ADD"+b);a.valueConnection_=c&&c.connection.targetConnection;b++;a=a.nextConnection&&a.nextConnection.targetBlock()}}};
-Blockly.Blocks.lists_create_with_container={init:function(){this.setColour(260);this.appendDummyInput().appendField(Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TITLE_ADD);this.appendStatementInput("STACK");this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TOOLTIP);this.contextMenu=!1}};
-Blockly.Blocks.lists_create_with_item={init:function(){this.setColour(260);this.appendDummyInput().appendField(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.LISTS_CREATE_WITH_ITEM_TOOLTIP);this.contextMenu=!1}};
-Blockly.Blocks.lists_repeat={init:function(){this.setHelpUrl(Blockly.Msg.LISTS_REPEAT_HELPURL);this.setColour(260);this.setOutput(!0,"Array");this.interpolateMsg(Blockly.Msg.LISTS_REPEAT_TITLE,["ITEM",null,Blockly.ALIGN_RIGHT],["NUM","Number",Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setTooltip(Blockly.Msg.LISTS_REPEAT_TOOLTIP)}};
-Blockly.Blocks.lists_length={init:function(){this.setHelpUrl(Blockly.Msg.LISTS_LENGTH_HELPURL);this.setColour(260);this.interpolateMsg(Blockly.Msg.LISTS_LENGTH_TITLE,["VALUE",["Array","String"],Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setOutput(!0,"Number");this.setTooltip(Blockly.Msg.LISTS_LENGTH_TOOLTIP)}};
-Blockly.Blocks.lists_isEmpty={init:function(){this.setHelpUrl(Blockly.Msg.LISTS_IS_EMPTY_HELPURL);this.setColour(260);this.interpolateMsg(Blockly.Msg.LISTS_IS_EMPTY_TITLE,["VALUE",["Array","String"],Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setInputsInline(!0);this.setOutput(!0,"Boolean");this.setTooltip(Blockly.Msg.LISTS_TOOLTIP)}};
-Blockly.Blocks.lists_indexOf={init:function(){var a=[[Blockly.Msg.LISTS_INDEX_OF_FIRST,"FIRST"],[Blockly.Msg.LISTS_INDEX_OF_LAST,"LAST"]];this.setHelpUrl(Blockly.Msg.LISTS_INDEX_OF_HELPURL);this.setColour(260);this.setOutput(!0,"Number");this.appendValueInput("VALUE").setCheck("Array").appendField(Blockly.Msg.LISTS_INDEX_OF_INPUT_IN_LIST);this.appendValueInput("FIND").appendField(new Blockly.FieldDropdown(a),"END");this.setInputsInline(!0);this.setTooltip(Blockly.Msg.LISTS_INDEX_OF_TOOLTIP)}};
-Blockly.Blocks.lists_getIndex={init:function(){var a=[[Blockly.Msg.LISTS_GET_INDEX_GET,"GET"],[Blockly.Msg.LISTS_GET_INDEX_GET_REMOVE,"GET_REMOVE"],[Blockly.Msg.LISTS_GET_INDEX_REMOVE,"REMOVE"]];this.WHERE_OPTIONS=[[Blockly.Msg.LISTS_GET_INDEX_FROM_START,"FROM_START"],[Blockly.Msg.LISTS_GET_INDEX_FROM_END,"FROM_END"],[Blockly.Msg.LISTS_GET_INDEX_FIRST,"FIRST"],[Blockly.Msg.LISTS_GET_INDEX_LAST,"LAST"],[Blockly.Msg.LISTS_GET_INDEX_RANDOM,"RANDOM"]];this.setHelpUrl(Blockly.Msg.LISTS_GET_INDEX_HELPURL);
-this.setColour(260);a=new Blockly.FieldDropdown(a,function(a){this.sourceBlock_.updateStatement_("REMOVE"==a)});this.appendValueInput("VALUE").setCheck("Array").appendField(Blockly.Msg.LISTS_GET_INDEX_INPUT_IN_LIST);this.appendDummyInput().appendField(a,"MODE").appendField("","SPACE");this.appendDummyInput("AT");Blockly.Msg.LISTS_GET_INDEX_TAIL&&this.appendDummyInput("TAIL").appendField(Blockly.Msg.LISTS_GET_INDEX_TAIL);this.setInputsInline(!0);this.setOutput(!0);this.updateAt_(!0);var b=this;this.setTooltip(function(){var a=
-b.getFieldValue("MODE")+"_"+b.getFieldValue("WHERE");return Blockly.Msg["LISTS_GET_INDEX_TOOLTIP_"+a]})},mutationToDom:function(){var a=document.createElement("mutation");a.setAttribute("statement",!this.outputConnection);var b=this.getInput("AT").type==Blockly.INPUT_VALUE;a.setAttribute("at",b);return a},domToMutation:function(a){var b="true"==a.getAttribute("statement");this.updateStatement_(b);a="false"!=a.getAttribute("at");this.updateAt_(a)},updateStatement_:function(a){a!=!this.outputConnection&&
-(this.unplug(!0,!0),a?(this.setOutput(!1),this.setPreviousStatement(!0),this.setNextStatement(!0)):(this.setPreviousStatement(!1),this.setNextStatement(!1),this.setOutput(!0)))},updateAt_:function(a){this.removeInput("AT");this.removeInput("ORDINAL",!0);a?(this.appendValueInput("AT").setCheck("Number"),Blockly.Msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput("ORDINAL").appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput("AT");var b=new Blockly.FieldDropdown(this.WHERE_OPTIONS,function(b){var d=
-"FROM_START"==b||"FROM_END"==b;if(d!=a){var e=this.sourceBlock_;e.updateAt_(d);e.setFieldValue(b,"WHERE");return null}});this.getInput("AT").appendField(b,"WHERE");Blockly.Msg.LISTS_GET_INDEX_TAIL&&this.moveInputBefore("TAIL",null)}};
-Blockly.Blocks.lists_setIndex={init:function(){var a=[[Blockly.Msg.LISTS_SET_INDEX_SET,"SET"],[Blockly.Msg.LISTS_SET_INDEX_INSERT,"INSERT"]];this.WHERE_OPTIONS=[[Blockly.Msg.LISTS_GET_INDEX_FROM_START,"FROM_START"],[Blockly.Msg.LISTS_GET_INDEX_FROM_END,"FROM_END"],[Blockly.Msg.LISTS_GET_INDEX_FIRST,"FIRST"],[Blockly.Msg.LISTS_GET_INDEX_LAST,"LAST"],[Blockly.Msg.LISTS_GET_INDEX_RANDOM,"RANDOM"]];this.setHelpUrl(Blockly.Msg.LISTS_SET_INDEX_HELPURL);this.setColour(260);this.appendValueInput("LIST").setCheck("Array").appendField(Blockly.Msg.LISTS_SET_INDEX_INPUT_IN_LIST);
-this.appendDummyInput().appendField(new Blockly.FieldDropdown(a),"MODE").appendField("","SPACE");this.appendDummyInput("AT");this.appendValueInput("TO").appendField(Blockly.Msg.LISTS_SET_INDEX_INPUT_TO);this.setInputsInline(!0);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.LISTS_SET_INDEX_TOOLTIP);this.updateAt_(!0);var b=this;this.setTooltip(function(){var a=b.getFieldValue("MODE")+"_"+b.getFieldValue("WHERE");return Blockly.Msg["LISTS_SET_INDEX_TOOLTIP_"+a]})},
-mutationToDom:function(){var a=document.createElement("mutation"),b=this.getInput("AT").type==Blockly.INPUT_VALUE;a.setAttribute("at",b);return a},domToMutation:function(a){a="false"!=a.getAttribute("at");this.updateAt_(a)},updateAt_:function(a){this.removeInput("AT");this.removeInput("ORDINAL",!0);a?(this.appendValueInput("AT").setCheck("Number"),Blockly.Msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput("ORDINAL").appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)):this.appendDummyInput("AT");var b=new Blockly.FieldDropdown(this.WHERE_OPTIONS,
-function(b){var d="FROM_START"==b||"FROM_END"==b;if(d!=a){var e=this.sourceBlock_;e.updateAt_(d);e.setFieldValue(b,"WHERE");return null}});this.moveInputBefore("AT","TO");this.getInput("ORDINAL")&&this.moveInputBefore("ORDINAL","TO");this.getInput("AT").appendField(b,"WHERE")}};
-Blockly.Blocks.lists_getSublist={init:function(){this.WHERE_OPTIONS_1=[[Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_START,"FROM_START"],[Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_END,"FROM_END"],[Blockly.Msg.LISTS_GET_SUBLIST_START_FIRST,"FIRST"]];this.WHERE_OPTIONS_2=[[Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_START,"FROM_START"],[Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_END,"FROM_END"],[Blockly.Msg.LISTS_GET_SUBLIST_END_LAST,"LAST"]];this.setHelpUrl(Blockly.Msg.LISTS_GET_SUBLIST_HELPURL);this.setColour(260);
-this.appendValueInput("LIST").setCheck("Array").appendField(Blockly.Msg.LISTS_GET_SUBLIST_INPUT_IN_LIST);this.appendDummyInput("AT1");this.appendDummyInput("AT2");Blockly.Msg.LISTS_GET_SUBLIST_TAIL&&this.appendDummyInput("TAIL").appendField(Blockly.Msg.LISTS_GET_SUBLIST_TAIL);this.setInputsInline(!0);this.setOutput(!0,"Array");this.updateAt_(1,!0);this.updateAt_(2,!0);this.setTooltip(Blockly.Msg.LISTS_GET_SUBLIST_TOOLTIP)},mutationToDom:function(){var a=document.createElement("mutation"),b=this.getInput("AT1").type==
-Blockly.INPUT_VALUE;a.setAttribute("at1",b);b=this.getInput("AT2").type==Blockly.INPUT_VALUE;a.setAttribute("at2",b);return a},domToMutation:function(a){var b="true"==a.getAttribute("at1");a="true"==a.getAttribute("at2");this.updateAt_(1,b);this.updateAt_(2,a)},updateAt_:function(a,b){this.removeInput("AT"+a);this.removeInput("ORDINAL"+a,!0);b?(this.appendValueInput("AT"+a).setCheck("Number"),Blockly.Msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput("ORDINAL"+a).appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)):
-this.appendDummyInput("AT"+a);var c=new Blockly.FieldDropdown(this["WHERE_OPTIONS_"+a],function(c){var e="FROM_START"==c||"FROM_END"==c;if(e!=b){var f=this.sourceBlock_;f.updateAt_(a,e);f.setFieldValue(c,"WHERE"+a);return null}});this.getInput("AT"+a).appendField(c,"WHERE"+a);1==a&&(this.moveInputBefore("AT1","AT2"),this.getInput("ORDINAL1")&&this.moveInputBefore("ORDINAL1","AT2"));Blockly.Msg.LISTS_GET_SUBLIST_TAIL&&this.moveInputBefore("TAIL",null)}};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Blocks.logic={};
-Blockly.Blocks.controls_if={init:function(){this.setHelpUrl(Blockly.Msg.CONTROLS_IF_HELPURL);this.setColour(210);this.appendValueInput("IF0").setCheck("Boolean").appendField(Blockly.Msg.CONTROLS_IF_MSG_IF);this.appendStatementInput("DO0").appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setMutator(new Blockly.Mutator(["controls_if_elseif","controls_if_else"]));var a=this;this.setTooltip(function(){if(a.elseifCount_||a.elseCount_){if(!a.elseifCount_&&
-a.elseCount_)return Blockly.Msg.CONTROLS_IF_TOOLTIP_2;if(a.elseifCount_&&!a.elseCount_)return Blockly.Msg.CONTROLS_IF_TOOLTIP_3;if(a.elseifCount_&&a.elseCount_)return Blockly.Msg.CONTROLS_IF_TOOLTIP_4}else return Blockly.Msg.CONTROLS_IF_TOOLTIP_1;return""});this.elseCount_=this.elseifCount_=0},mutationToDom:function(){if(!this.elseifCount_&&!this.elseCount_)return null;var a=document.createElement("mutation");this.elseifCount_&&a.setAttribute("elseif",this.elseifCount_);this.elseCount_&&a.setAttribute("else",
-1);return a},domToMutation:function(a){this.elseifCount_=parseInt(a.getAttribute("elseif"),10);this.elseCount_=parseInt(a.getAttribute("else"),10);for(a=1;a<=this.elseifCount_;a++)this.appendValueInput("IF"+a).setCheck("Boolean").appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSEIF),this.appendStatementInput("DO"+a).appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN);this.elseCount_&&this.appendStatementInput("ELSE").appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSE)},decompose:function(a){var b=Blockly.Block.obtain(a,
-"controls_if_if");b.initSvg();for(var c=b.getInput("STACK").connection,d=1;d<=this.elseifCount_;d++){var e=Blockly.Block.obtain(a,"controls_if_elseif");e.initSvg();c.connect(e.previousConnection);c=e.nextConnection}this.elseCount_&&(a=Blockly.Block.obtain(a,"controls_if_else"),a.initSvg(),c.connect(a.previousConnection));return b},compose:function(a){this.elseCount_&&this.removeInput("ELSE");this.elseCount_=0;for(var b=this.elseifCount_;0<b;b--)this.removeInput("IF"+b),this.removeInput("DO"+b);this.elseifCount_=
-0;for(a=a.getInputTargetBlock("STACK");a;){switch(a.type){case "controls_if_elseif":this.elseifCount_++;var b=this.appendValueInput("IF"+this.elseifCount_).setCheck("Boolean").appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSEIF),c=this.appendStatementInput("DO"+this.elseifCount_);c.appendField(Blockly.Msg.CONTROLS_IF_MSG_THEN);a.valueConnection_&&b.connection.connect(a.valueConnection_);a.statementConnection_&&c.connection.connect(a.statementConnection_);break;case "controls_if_else":this.elseCount_++;
-b=this.appendStatementInput("ELSE");b.appendField(Blockly.Msg.CONTROLS_IF_MSG_ELSE);a.statementConnection_&&b.connection.connect(a.statementConnection_);break;default:throw"Unknown block type.";}a=a.nextConnection&&a.nextConnection.targetBlock()}},saveConnections:function(a){a=a.getInputTargetBlock("STACK");for(var b=1;a;){switch(a.type){case "controls_if_elseif":var c=this.getInput("IF"+b),d=this.getInput("DO"+b);a.valueConnection_=c&&c.connection.targetConnection;a.statementConnection_=d&&d.connection.targetConnection;
-b++;break;case "controls_if_else":d=this.getInput("ELSE");a.statementConnection_=d&&d.connection.targetConnection;break;default:throw"Unknown block type.";}a=a.nextConnection&&a.nextConnection.targetBlock()}}};Blockly.Blocks.controls_if_if={init:function(){this.setColour(210);this.appendDummyInput().appendField(Blockly.Msg.CONTROLS_IF_IF_TITLE_IF);this.appendStatementInput("STACK");this.setTooltip(Blockly.Msg.CONTROLS_IF_IF_TOOLTIP);this.contextMenu=!1}};
-Blockly.Blocks.controls_if_elseif={init:function(){this.setColour(210);this.appendDummyInput().appendField(Blockly.Msg.CONTROLS_IF_ELSEIF_TITLE_ELSEIF);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.CONTROLS_IF_ELSEIF_TOOLTIP);this.contextMenu=!1}};
-Blockly.Blocks.controls_if_else={init:function(){this.setColour(210);this.appendDummyInput().appendField(Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE);this.setPreviousStatement(!0);this.setTooltip(Blockly.Msg.CONTROLS_IF_ELSE_TOOLTIP);this.contextMenu=!1}};
-Blockly.Blocks.logic_compare={init:function(){var a=Blockly.RTL?[["=","EQ"],["\u2260","NEQ"],[">","LT"],["\u2265","LTE"],["<","GT"],["\u2264","GTE"]]:[["=","EQ"],["\u2260","NEQ"],["<","LT"],["\u2264","LTE"],[">","GT"],["\u2265","GTE"]];this.setHelpUrl(Blockly.Msg.LOGIC_COMPARE_HELPURL);this.setColour(210);this.setOutput(!0,"Boolean");this.appendValueInput("A");this.appendValueInput("B").appendField(new Blockly.FieldDropdown(a),"OP");this.setInputsInline(!0);var b=this;this.setTooltip(function(){var a=
-b.getFieldValue("OP");return{EQ:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_EQ,NEQ:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_NEQ,LT:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LT,LTE:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LTE,GT:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GT,GTE:Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GTE}[a]})}};
-Blockly.Blocks.logic_operation={init:function(){var a=[[Blockly.Msg.LOGIC_OPERATION_AND,"AND"],[Blockly.Msg.LOGIC_OPERATION_OR,"OR"]];this.setHelpUrl(Blockly.Msg.LOGIC_OPERATION_HELPURL);this.setColour(210);this.setOutput(!0,"Boolean");this.appendValueInput("A").setCheck("Boolean");this.appendValueInput("B").setCheck("Boolean").appendField(new Blockly.FieldDropdown(a),"OP");this.setInputsInline(!0);var b=this;this.setTooltip(function(){var a=b.getFieldValue("OP");return{AND:Blockly.Msg.LOGIC_OPERATION_TOOLTIP_AND,
-OR:Blockly.Msg.LOGIC_OPERATION_TOOLTIP_OR}[a]})}};Blockly.Blocks.logic_negate={init:function(){this.setHelpUrl(Blockly.Msg.LOGIC_NEGATE_HELPURL);this.setColour(210);this.setOutput(!0,"Boolean");this.interpolateMsg(Blockly.Msg.LOGIC_NEGATE_TITLE,["BOOL","Boolean",Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setTooltip(Blockly.Msg.LOGIC_NEGATE_TOOLTIP)}};
-Blockly.Blocks.logic_boolean={init:function(){var a=[[Blockly.Msg.LOGIC_BOOLEAN_TRUE,"TRUE"],[Blockly.Msg.LOGIC_BOOLEAN_FALSE,"FALSE"]];this.setHelpUrl(Blockly.Msg.LOGIC_BOOLEAN_HELPURL);this.setColour(210);this.setOutput(!0,"Boolean");this.appendDummyInput().appendField(new Blockly.FieldDropdown(a),"BOOL");this.setTooltip(Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP)}};
-Blockly.Blocks.logic_null={init:function(){this.setHelpUrl(Blockly.Msg.LOGIC_NULL_HELPURL);this.setColour(210);this.setOutput(!0);this.appendDummyInput().appendField(Blockly.Msg.LOGIC_NULL);this.setTooltip(Blockly.Msg.LOGIC_NULL_TOOLTIP)}};
-Blockly.Blocks.logic_ternary={init:function(){this.setHelpUrl(Blockly.Msg.LOGIC_TERNARY_HELPURL);this.setColour(210);this.appendValueInput("IF").setCheck("Boolean").appendField(Blockly.Msg.LOGIC_TERNARY_CONDITION);this.appendValueInput("THEN").appendField(Blockly.Msg.LOGIC_TERNARY_IF_TRUE);this.appendValueInput("ELSE").appendField(Blockly.Msg.LOGIC_TERNARY_IF_FALSE);this.setOutput(!0);this.setTooltip(Blockly.Msg.LOGIC_TERNARY_TOOLTIP)}};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Blocks.loops={};
-Blockly.Blocks.controls_repeat={init:function(){this.setHelpUrl(Blockly.Msg.CONTROLS_REPEAT_HELPURL);this.setColour(120);this.appendDummyInput().appendField(Blockly.Msg.CONTROLS_REPEAT_TITLE_REPEAT).appendField(new Blockly.FieldTextInput("10",Blockly.FieldTextInput.nonnegativeIntegerValidator),"TIMES").appendField(Blockly.Msg.CONTROLS_REPEAT_TITLE_TIMES);this.appendStatementInput("DO").appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.CONTROLS_REPEAT_TOOLTIP)}};
-Blockly.Blocks.controls_repeat_ext={init:function(){this.setHelpUrl(Blockly.Msg.CONTROLS_REPEAT_HELPURL);this.setColour(120);this.interpolateMsg(Blockly.Msg.CONTROLS_REPEAT_TITLE,["TIMES","Number",Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.appendStatementInput("DO").appendField(Blockly.Msg.CONTROLS_REPEAT_INPUT_DO);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setInputsInline(!0);this.setTooltip(Blockly.Msg.CONTROLS_REPEAT_TOOLTIP)}};
-Blockly.Blocks.controls_whileUntil={init:function(){var a=[[Blockly.Msg.CONTROLS_WHILEUNTIL_OPERATOR_WHILE,"WHILE"],[Blockly.Msg.CONTROLS_WHILEUNTIL_OPERATOR_UNTIL,"UNTIL"]];this.setHelpUrl(Blockly.Msg.CONTROLS_WHILEUNTIL_HELPURL);this.setColour(120);this.appendValueInput("BOOL").setCheck("Boolean").appendField(new Blockly.FieldDropdown(a),"MODE");this.appendStatementInput("DO").appendField(Blockly.Msg.CONTROLS_WHILEUNTIL_INPUT_DO);this.setPreviousStatement(!0);this.setNextStatement(!0);var b=this;
-this.setTooltip(function(){var a=b.getFieldValue("MODE");return{WHILE:Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_WHILE,UNTIL:Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL}[a]})}};
-Blockly.Blocks.controls_for={init:function(){this.setHelpUrl(Blockly.Msg.CONTROLS_FOR_HELPURL);this.setColour(120);this.appendDummyInput().appendField(Blockly.Msg.CONTROLS_FOR_INPUT_WITH).appendField(new Blockly.FieldVariable(null),"VAR");this.interpolateMsg(Blockly.Msg.CONTROLS_FOR_INPUT_FROM_TO_BY,["FROM","Number",Blockly.ALIGN_RIGHT],["TO","Number",Blockly.ALIGN_RIGHT],["BY","Number",Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.appendStatementInput("DO").appendField(Blockly.Msg.CONTROLS_FOR_INPUT_DO);
-this.setPreviousStatement(!0);this.setNextStatement(!0);this.setInputsInline(!0);var a=this;this.setTooltip(function(){return Blockly.Msg.CONTROLS_FOR_TOOLTIP.replace("%1",a.getFieldValue("VAR"))})},getVars:function(){return[this.getFieldValue("VAR")]},renameVar:function(a,b){Blockly.Names.equals(a,this.getFieldValue("VAR"))&&this.setFieldValue(b,"VAR")},customContextMenu:function(a){if(!this.isCollapsed()){var b={enabled:!0},c=this.getFieldValue("VAR");b.text=Blockly.Msg.VARIABLES_SET_CREATE_GET.replace("%1",
-c);c=goog.dom.createDom("field",null,c);c.setAttribute("name","VAR");c=goog.dom.createDom("block",null,c);c.setAttribute("type","variables_get");b.callback=Blockly.ContextMenu.callbackFactory(this,c);a.push(b)}}};
-Blockly.Blocks.controls_forEach={init:function(){this.setHelpUrl(Blockly.Msg.CONTROLS_FOREACH_HELPURL);this.setColour(120);this.appendValueInput("LIST").setCheck("Array").appendField(Blockly.Msg.CONTROLS_FOREACH_INPUT_ITEM).appendField(new Blockly.FieldVariable(null),"VAR").appendField(Blockly.Msg.CONTROLS_FOREACH_INPUT_INLIST);Blockly.Msg.CONTROLS_FOREACH_INPUT_INLIST_TAIL&&(this.appendDummyInput().appendField(Blockly.Msg.CONTROLS_FOREACH_INPUT_INLIST_TAIL),this.setInputsInline(!0));this.appendStatementInput("DO").appendField(Blockly.Msg.CONTROLS_FOREACH_INPUT_DO);
-this.setPreviousStatement(!0);this.setNextStatement(!0);var a=this;this.setTooltip(function(){return Blockly.Msg.CONTROLS_FOREACH_TOOLTIP.replace("%1",a.getFieldValue("VAR"))})},getVars:function(){return[this.getFieldValue("VAR")]},renameVar:function(a,b){Blockly.Names.equals(a,this.getFieldValue("VAR"))&&this.setFieldValue(b,"VAR")},customContextMenu:Blockly.Blocks.controls_for.customContextMenu};
-Blockly.Blocks.controls_flow_statements={init:function(){var a=[[Blockly.Msg.CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK,"BREAK"],[Blockly.Msg.CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE,"CONTINUE"]];this.setHelpUrl(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_HELPURL);this.setColour(120);this.appendDummyInput().appendField(new Blockly.FieldDropdown(a),"FLOW");this.setPreviousStatement(!0);var b=this;this.setTooltip(function(){var a=b.getFieldValue("FLOW");return{BREAK:Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK,
-CONTINUE:Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE}[a]})},onchange:function(){if(this.workspace){var a=!1,b=this;do{if("controls_repeat"==b.type||"controls_repeat_ext"==b.type||"controls_forEach"==b.type||"controls_for"==b.type||"controls_whileUntil"==b.type){a=!0;break}b=b.getSurroundParent()}while(b);a?this.setWarningText(null):this.setWarningText(Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING)}}};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Blocks.math={};Blockly.Blocks.math_number={init:function(){this.setHelpUrl(Blockly.Msg.MATH_NUMBER_HELPURL);this.setColour(230);this.appendDummyInput().appendField(new Blockly.FieldTextInput("0",Blockly.FieldTextInput.numberValidator),"NUM");this.setOutput(!0,"Number");this.setTooltip(Blockly.Msg.MATH_NUMBER_TOOLTIP)}};
-Blockly.Blocks.math_arithmetic={init:function(){var a=[[Blockly.Msg.MATH_ADDITION_SYMBOL,"ADD"],[Blockly.Msg.MATH_SUBTRACTION_SYMBOL,"MINUS"],[Blockly.Msg.MATH_MULTIPLICATION_SYMBOL,"MULTIPLY"],[Blockly.Msg.MATH_DIVISION_SYMBOL,"DIVIDE"],[Blockly.Msg.MATH_POWER_SYMBOL,"POWER"]];this.setHelpUrl(Blockly.Msg.MATH_ARITHMETIC_HELPURL);this.setColour(230);this.setOutput(!0,"Number");this.appendValueInput("A").setCheck("Number");this.appendValueInput("B").setCheck("Number").appendField(new Blockly.FieldDropdown(a),
-"OP");this.setInputsInline(!0);var b=this;this.setTooltip(function(){var a=b.getFieldValue("OP");return{ADD:Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_ADD,MINUS:Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS,MULTIPLY:Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY,DIVIDE:Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE,POWER:Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_POWER}[a]})}};
-Blockly.Blocks.math_single={init:function(){var a=[[Blockly.Msg.MATH_SINGLE_OP_ROOT,"ROOT"],[Blockly.Msg.MATH_SINGLE_OP_ABSOLUTE,"ABS"],["-","NEG"],["ln","LN"],["log10","LOG10"],["e^","EXP"],["10^","POW10"]];this.setHelpUrl(Blockly.Msg.MATH_SINGLE_HELPURL);this.setColour(230);this.setOutput(!0,"Number");this.interpolateMsg("%1 %2",["OP",new Blockly.FieldDropdown(a)],["NUM","Number",Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);var b=this;this.setTooltip(function(){var a=b.getFieldValue("OP");return{ROOT:Blockly.Msg.MATH_SINGLE_TOOLTIP_ROOT,
-ABS:Blockly.Msg.MATH_SINGLE_TOOLTIP_ABS,NEG:Blockly.Msg.MATH_SINGLE_TOOLTIP_NEG,LN:Blockly.Msg.MATH_SINGLE_TOOLTIP_LN,LOG10:Blockly.Msg.MATH_SINGLE_TOOLTIP_LOG10,EXP:Blockly.Msg.MATH_SINGLE_TOOLTIP_EXP,POW10:Blockly.Msg.MATH_SINGLE_TOOLTIP_POW10}[a]})}};
-Blockly.Blocks.math_trig={init:function(){var a=[[Blockly.Msg.MATH_TRIG_SIN,"SIN"],[Blockly.Msg.MATH_TRIG_COS,"COS"],[Blockly.Msg.MATH_TRIG_TAN,"TAN"],[Blockly.Msg.MATH_TRIG_ASIN,"ASIN"],[Blockly.Msg.MATH_TRIG_ACOS,"ACOS"],[Blockly.Msg.MATH_TRIG_ATAN,"ATAN"]];this.setHelpUrl(Blockly.Msg.MATH_TRIG_HELPURL);this.setColour(230);this.setOutput(!0,"Number");this.appendValueInput("NUM").setCheck("Number").appendField(new Blockly.FieldDropdown(a),"OP");var b=this;this.setTooltip(function(){var a=b.getFieldValue("OP");
-return{SIN:Blockly.Msg.MATH_TRIG_TOOLTIP_SIN,COS:Blockly.Msg.MATH_TRIG_TOOLTIP_COS,TAN:Blockly.Msg.MATH_TRIG_TOOLTIP_TAN,ASIN:Blockly.Msg.MATH_TRIG_TOOLTIP_ASIN,ACOS:Blockly.Msg.MATH_TRIG_TOOLTIP_ACOS,ATAN:Blockly.Msg.MATH_TRIG_TOOLTIP_ATAN}[a]})}};
-Blockly.Blocks.math_constant={init:function(){this.setHelpUrl(Blockly.Msg.MATH_CONSTANT_HELPURL);this.setColour(230);this.setOutput(!0,"Number");this.appendDummyInput().appendField(new Blockly.FieldDropdown([["\u03c0","PI"],["e","E"],["\u03c6","GOLDEN_RATIO"],["sqrt(2)","SQRT2"],["sqrt(\u00bd)","SQRT1_2"],["\u221e","INFINITY"]]),"CONSTANT");this.setTooltip(Blockly.Msg.MATH_CONSTANT_TOOLTIP)}};
-Blockly.Blocks.math_number_property={init:function(){var a=[[Blockly.Msg.MATH_IS_EVEN,"EVEN"],[Blockly.Msg.MATH_IS_ODD,"ODD"],[Blockly.Msg.MATH_IS_PRIME,"PRIME"],[Blockly.Msg.MATH_IS_WHOLE,"WHOLE"],[Blockly.Msg.MATH_IS_POSITIVE,"POSITIVE"],[Blockly.Msg.MATH_IS_NEGATIVE,"NEGATIVE"],[Blockly.Msg.MATH_IS_DIVISIBLE_BY,"DIVISIBLE_BY"]];this.setColour(230);this.appendValueInput("NUMBER_TO_CHECK").setCheck("Number");a=new Blockly.FieldDropdown(a,function(a){this.sourceBlock_.updateShape_("DIVISIBLE_BY"==
-a)});this.appendDummyInput().appendField(a,"PROPERTY");this.setInputsInline(!0);this.setOutput(!0,"Boolean");this.setTooltip(Blockly.Msg.MATH_IS_TOOLTIP)},mutationToDom:function(){var a=document.createElement("mutation"),b="DIVISIBLE_BY"==this.getFieldValue("PROPERTY");a.setAttribute("divisor_input",b);return a},domToMutation:function(a){a="true"==a.getAttribute("divisor_input");this.updateShape_(a)},updateShape_:function(a){var b=this.getInput("DIVISOR");a?b||this.appendValueInput("DIVISOR").setCheck("Number"):
-b&&this.removeInput("DIVISOR")}};
-Blockly.Blocks.math_change={init:function(){this.setHelpUrl(Blockly.Msg.MATH_CHANGE_HELPURL);this.setColour(230);this.interpolateMsg(Blockly.Msg.MATH_CHANGE_TITLE_CHANGE+" %1 "+Blockly.Msg.MATH_CHANGE_INPUT_BY+" %2",["VAR",new Blockly.FieldVariable(Blockly.Msg.MATH_CHANGE_TITLE_ITEM)],["DELTA","Number",Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setPreviousStatement(!0);this.setNextStatement(!0);var a=this;this.setTooltip(function(){return Blockly.Msg.MATH_CHANGE_TOOLTIP.replace("%1",a.getFieldValue("VAR"))})},
-getVars:function(){return[this.getFieldValue("VAR")]},renameVar:function(a,b){Blockly.Names.equals(a,this.getFieldValue("VAR"))&&this.setFieldValue(b,"VAR")}};
-Blockly.Blocks.math_round={init:function(){var a=[[Blockly.Msg.MATH_ROUND_OPERATOR_ROUND,"ROUND"],[Blockly.Msg.MATH_ROUND_OPERATOR_ROUNDUP,"ROUNDUP"],[Blockly.Msg.MATH_ROUND_OPERATOR_ROUNDDOWN,"ROUNDDOWN"]];this.setHelpUrl(Blockly.Msg.MATH_ROUND_HELPURL);this.setColour(230);this.setOutput(!0,"Number");this.appendValueInput("NUM").setCheck("Number").appendField(new Blockly.FieldDropdown(a),"OP");this.setTooltip(Blockly.Msg.MATH_ROUND_TOOLTIP)}};
-Blockly.Blocks.math_on_list={init:function(){var a=[[Blockly.Msg.MATH_ONLIST_OPERATOR_SUM,"SUM"],[Blockly.Msg.MATH_ONLIST_OPERATOR_MIN,"MIN"],[Blockly.Msg.MATH_ONLIST_OPERATOR_MAX,"MAX"],[Blockly.Msg.MATH_ONLIST_OPERATOR_AVERAGE,"AVERAGE"],[Blockly.Msg.MATH_ONLIST_OPERATOR_MEDIAN,"MEDIAN"],[Blockly.Msg.MATH_ONLIST_OPERATOR_MODE,"MODE"],[Blockly.Msg.MATH_ONLIST_OPERATOR_STD_DEV,"STD_DEV"],[Blockly.Msg.MATH_ONLIST_OPERATOR_RANDOM,"RANDOM"]],b=this;this.setHelpUrl(Blockly.Msg.MATH_ONLIST_HELPURL);this.setColour(230);
-this.setOutput(!0,"Number");a=new Blockly.FieldDropdown(a,function(a){"MODE"==a?b.outputConnection.setCheck("Array"):b.outputConnection.setCheck("Number")});this.appendValueInput("LIST").setCheck("Array").appendField(a,"OP");this.setTooltip(function(){var a=b.getFieldValue("OP");return{SUM:Blockly.Msg.MATH_ONLIST_TOOLTIP_SUM,MIN:Blockly.Msg.MATH_ONLIST_TOOLTIP_MIN,MAX:Blockly.Msg.MATH_ONLIST_TOOLTIP_MAX,AVERAGE:Blockly.Msg.MATH_ONLIST_TOOLTIP_AVERAGE,MEDIAN:Blockly.Msg.MATH_ONLIST_TOOLTIP_MEDIAN,
-MODE:Blockly.Msg.MATH_ONLIST_TOOLTIP_MODE,STD_DEV:Blockly.Msg.MATH_ONLIST_TOOLTIP_STD_DEV,RANDOM:Blockly.Msg.MATH_ONLIST_TOOLTIP_RANDOM}[a]})}};Blockly.Blocks.math_modulo={init:function(){this.setHelpUrl(Blockly.Msg.MATH_MODULO_HELPURL);this.setColour(230);this.setOutput(!0,"Number");this.interpolateMsg(Blockly.Msg.MATH_MODULO_TITLE,["DIVIDEND","Number",Blockly.ALIGN_RIGHT],["DIVISOR","Number",Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setInputsInline(!0);this.setTooltip(Blockly.Msg.MATH_MODULO_TOOLTIP)}};
-Blockly.Blocks.math_constrain={init:function(){this.setHelpUrl(Blockly.Msg.MATH_CONSTRAIN_HELPURL);this.setColour(230);this.setOutput(!0,"Number");this.interpolateMsg(Blockly.Msg.MATH_CONSTRAIN_TITLE,["VALUE","Number",Blockly.ALIGN_RIGHT],["LOW","Number",Blockly.ALIGN_RIGHT],["HIGH","Number",Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setInputsInline(!0);this.setTooltip(Blockly.Msg.MATH_CONSTRAIN_TOOLTIP)}};
-Blockly.Blocks.math_random_int={init:function(){this.setHelpUrl(Blockly.Msg.MATH_RANDOM_INT_HELPURL);this.setColour(230);this.setOutput(!0,"Number");this.interpolateMsg(Blockly.Msg.MATH_RANDOM_INT_TITLE,["FROM","Number",Blockly.ALIGN_RIGHT],["TO","Number",Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setInputsInline(!0);this.setTooltip(Blockly.Msg.MATH_RANDOM_INT_TOOLTIP)}};
-Blockly.Blocks.math_random_float={init:function(){this.setHelpUrl(Blockly.Msg.MATH_RANDOM_FLOAT_HELPURL);this.setColour(230);this.setOutput(!0,"Number");this.appendDummyInput().appendField(Blockly.Msg.MATH_RANDOM_FLOAT_TITLE_RANDOM);this.setTooltip(Blockly.Msg.MATH_RANDOM_FLOAT_TOOLTIP)}};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Blocks.procedures={};
-Blockly.Blocks.procedures_defnoreturn={init:function(){this.setHelpUrl(Blockly.Msg.PROCEDURES_DEFNORETURN_HELPURL);this.setColour(290);var a=Blockly.Procedures.findLegalName(Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE,this);this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE).appendField(new Blockly.FieldTextInput(a,Blockly.Procedures.rename),"NAME").appendField("","PARAMS");this.appendStatementInput("STACK").appendField(Blockly.Msg.PROCEDURES_DEFNORETURN_DO);this.setMutator(new Blockly.Mutator(["procedures_mutatorarg"]));
-this.setTooltip(Blockly.Msg.PROCEDURES_DEFNORETURN_TOOLTIP);this.arguments_=[]},updateParams_:function(){for(var a=!1,b={},c=0;c<this.arguments_.length;c++){if(b["arg_"+this.arguments_[c].toLowerCase()]){a=!0;break}b["arg_"+this.arguments_[c].toLowerCase()]=!0}a?this.setWarningText(Blockly.Msg.PROCEDURES_DEF_DUPLICATE_WARNING):this.setWarningText(null);a="";this.arguments_.length&&(a=Blockly.Msg.PROCEDURES_BEFORE_PARAMS+" "+this.arguments_.join(", "));this.setFieldValue(a,"PARAMS")},mutationToDom:function(){for(var a=
-document.createElement("mutation"),b=0;b<this.arguments_.length;b++){var c=document.createElement("arg");c.setAttribute("name",this.arguments_[b]);a.appendChild(c)}return a},domToMutation:function(a){this.arguments_=[];for(var b=0,c;c=a.childNodes[b];b++)"arg"==c.nodeName.toLowerCase()&&this.arguments_.push(c.getAttribute("name"));this.updateParams_()},decompose:function(a){var b=Blockly.Block.obtain(a,"procedures_mutatorcontainer");b.initSvg();for(var c=b.getInput("STACK").connection,d=0;d<this.arguments_.length;d++){var e=
-Blockly.Block.obtain(a,"procedures_mutatorarg");e.initSvg();e.setFieldValue(this.arguments_[d],"NAME");e.oldLocation=d;c.connect(e.previousConnection);c=e.nextConnection}Blockly.Procedures.mutateCallers(this.getFieldValue("NAME"),this.workspace,this.arguments_,null);return b},compose:function(a){this.arguments_=[];this.paramIds_=[];for(a=a.getInputTargetBlock("STACK");a;)this.arguments_.push(a.getFieldValue("NAME")),this.paramIds_.push(a.id),a=a.nextConnection&&a.nextConnection.targetBlock();this.updateParams_();
-Blockly.Procedures.mutateCallers(this.getFieldValue("NAME"),this.workspace,this.arguments_,this.paramIds_)},dispose:function(){var a=this.getFieldValue("NAME");Blockly.Procedures.disposeCallers(a,this.workspace);Blockly.Block.prototype.dispose.apply(this,arguments)},getProcedureDef:function(){return[this.getFieldValue("NAME"),this.arguments_,!1]},getVars:function(){return this.arguments_},renameVar:function(a,b){for(var c=!1,d=0;d<this.arguments_.length;d++)Blockly.Names.equals(a,this.arguments_[d])&&
-(this.arguments_[d]=b,c=!0);if(c&&(this.updateParams_(),this.mutator.isVisible_()))for(var c=this.mutator.workspace_.getAllBlocks(),d=0,e;e=c[d];d++)"procedures_mutatorarg"==e.type&&Blockly.Names.equals(a,e.getFieldValue("NAME"))&&e.setFieldValue(b,"NAME")},customContextMenu:function(a){var b={enabled:!0},c=this.getFieldValue("NAME");b.text=Blockly.Msg.PROCEDURES_CREATE_DO.replace("%1",c);var d=goog.dom.createDom("mutation");d.setAttribute("name",c);for(var e=0;e<this.arguments_.length;e++)c=goog.dom.createDom("arg"),
-c.setAttribute("name",this.arguments_[e]),d.appendChild(c);d=goog.dom.createDom("block",null,d);d.setAttribute("type",this.callType_);b.callback=Blockly.ContextMenu.callbackFactory(this,d);a.push(b);if(!this.isCollapsed())for(e=0;e<this.arguments_.length;e++)b={enabled:!0},c=this.arguments_[e],b.text=Blockly.Msg.VARIABLES_SET_CREATE_GET.replace("%1",c),d=goog.dom.createDom("field",null,c),d.setAttribute("name","VAR"),d=goog.dom.createDom("block",null,d),d.setAttribute("type","variables_get"),b.callback=
-Blockly.ContextMenu.callbackFactory(this,d),a.push(b)},callType_:"procedures_callnoreturn"};
-Blockly.Blocks.procedures_defreturn={init:function(){this.setHelpUrl(Blockly.Msg.PROCEDURES_DEFRETURN_HELPURL);this.setColour(290);var a=Blockly.Procedures.findLegalName(Blockly.Msg.PROCEDURES_DEFRETURN_PROCEDURE,this);this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_DEFRETURN_TITLE).appendField(new Blockly.FieldTextInput(a,Blockly.Procedures.rename),"NAME").appendField("","PARAMS");this.appendStatementInput("STACK").appendField(Blockly.Msg.PROCEDURES_DEFRETURN_DO);this.appendValueInput("RETURN").setAlign(Blockly.ALIGN_RIGHT).appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN);
-this.setMutator(new Blockly.Mutator(["procedures_mutatorarg"]));this.setTooltip(Blockly.Msg.PROCEDURES_DEFRETURN_TOOLTIP);this.arguments_=[]},updateParams_:Blockly.Blocks.procedures_defnoreturn.updateParams_,mutationToDom:Blockly.Blocks.procedures_defnoreturn.mutationToDom,domToMutation:Blockly.Blocks.procedures_defnoreturn.domToMutation,decompose:Blockly.Blocks.procedures_defnoreturn.decompose,compose:Blockly.Blocks.procedures_defnoreturn.compose,dispose:Blockly.Blocks.procedures_defnoreturn.dispose,
-getProcedureDef:function(){return[this.getFieldValue("NAME"),this.arguments_,!0]},getVars:Blockly.Blocks.procedures_defnoreturn.getVars,renameVar:Blockly.Blocks.procedures_defnoreturn.renameVar,customContextMenu:Blockly.Blocks.procedures_defnoreturn.customContextMenu,callType_:"procedures_callreturn"};
-Blockly.Blocks.procedures_mutatorcontainer={init:function(){this.setColour(290);this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TITLE);this.appendStatementInput("STACK");this.setTooltip(Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TOOLTIP);this.contextMenu=!1}};
-Blockly.Blocks.procedures_mutatorarg={init:function(){this.setColour(290);this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_MUTATORARG_TITLE).appendField(new Blockly.FieldTextInput("x",this.validator_),"NAME");this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.PROCEDURES_MUTATORARG_TOOLTIP);this.contextMenu=!1},validator_:function(a){return(a=a.replace(/[\s\xa0]+/g," ").replace(/^ | $/g,""))||null}};
-Blockly.Blocks.procedures_callnoreturn={init:function(){this.setHelpUrl(Blockly.Msg.PROCEDURES_CALLNORETURN_HELPURL);this.setColour(290);this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_CALLNORETURN_CALL).appendField("","NAME");this.setPreviousStatement(!0);this.setNextStatement(!0);this.arguments_=[];this.quarkArguments_=this.quarkConnections_=null},getProcedureCall:function(){return this.getFieldValue("NAME")},renameProcedure:function(a,b){Blockly.Names.equals(a,this.getProcedureCall())&&
-(this.setFieldValue(b,"NAME"),this.setTooltip((this.outputConnection?Blockly.Msg.PROCEDURES_CALLRETURN_TOOLTIP:Blockly.Msg.PROCEDURES_CALLNORETURN_TOOLTIP).replace("%1",b)))},setProcedureParameters:function(a,b){if(b){if(b.length!=a.length)throw"Error: paramNames and paramIds must be the same length.";this.quarkArguments_||(this.quarkConnections_={},a.join("\n")==this.arguments_.join("\n")?this.quarkArguments_=b:this.quarkArguments_=[]);var c=this.rendered;this.rendered=!1;for(var d=this.arguments_.length-
-1;0<=d;d--){var e=this.getInput("ARG"+d);if(e){var f=e.connection.targetConnection;this.quarkConnections_[this.quarkArguments_[d]]=f;this.removeInput("ARG"+d)}}this.arguments_=[].concat(a);this.quarkArguments_=b;for(d=0;d<this.arguments_.length;d++)if(e=this.appendValueInput("ARG"+d).setAlign(Blockly.ALIGN_RIGHT).appendField(this.arguments_[d]),this.quarkArguments_){var g=this.quarkArguments_[d];g in this.quarkConnections_&&(f=this.quarkConnections_[g],!f||f.targetConnection||f.sourceBlock_.workspace!=
-this.workspace?delete this.quarkConnections_[g]:e.connection.connect(f))}(this.rendered=c)&&this.render()}else this.quarkConnections_={},this.quarkArguments_=null},mutationToDom:function(){var a=document.createElement("mutation");a.setAttribute("name",this.getProcedureCall());for(var b=0;b<this.arguments_.length;b++){var c=document.createElement("arg");c.setAttribute("name",this.arguments_[b]);a.appendChild(c)}return a},domToMutation:function(a){var b=a.getAttribute("name");this.setFieldValue(b,"NAME");
-this.setTooltip((this.outputConnection?Blockly.Msg.PROCEDURES_CALLRETURN_TOOLTIP:Blockly.Msg.PROCEDURES_CALLNORETURN_TOOLTIP).replace("%1",b));if((b=Blockly.Procedures.getDefinition(b,this.workspace))&&b.mutator.isVisible())this.setProcedureParameters(b.arguments_,b.paramIds_);else{this.arguments_=[];for(var b=0,c;c=a.childNodes[b];b++)"arg"==c.nodeName.toLowerCase()&&this.arguments_.push(c.getAttribute("name"));this.setProcedureParameters(this.arguments_,this.arguments_)}},renameVar:function(a,b){for(var c=
-0;c<this.arguments_.length;c++)Blockly.Names.equals(a,this.arguments_[c])&&(this.arguments_[c]=b,this.getInput("ARG"+c).fieldRow[0].setText(b))},customContextMenu:function(a){var b={enabled:!0};b.text=Blockly.Msg.PROCEDURES_HIGHLIGHT_DEF;var c=this.getProcedureCall(),d=this.workspace;b.callback=function(){var a=Blockly.Procedures.getDefinition(c,d);a&&a.select()};a.push(b)}};
-Blockly.Blocks.procedures_callreturn={init:function(){this.setHelpUrl(Blockly.Msg.PROCEDURES_CALLRETURN_HELPURL);this.setColour(290);this.appendDummyInput().appendField(Blockly.Msg.PROCEDURES_CALLRETURN_CALL).appendField("","NAME");this.setOutput(!0);this.arguments_=[];this.quarkArguments_=this.quarkConnections_=null},getProcedureCall:Blockly.Blocks.procedures_callnoreturn.getProcedureCall,renameProcedure:Blockly.Blocks.procedures_callnoreturn.renameProcedure,setProcedureParameters:Blockly.Blocks.procedures_callnoreturn.setProcedureParameters,
-mutationToDom:Blockly.Blocks.procedures_callnoreturn.mutationToDom,domToMutation:Blockly.Blocks.procedures_callnoreturn.domToMutation,renameVar:Blockly.Blocks.procedures_callnoreturn.renameVar,customContextMenu:Blockly.Blocks.procedures_callnoreturn.customContextMenu};
-Blockly.Blocks.procedures_ifreturn={init:function(){this.setHelpUrl("http://c2.com/cgi/wiki?GuardClause");this.setColour(290);this.appendValueInput("CONDITION").setCheck("Boolean").appendField(Blockly.Msg.CONTROLS_IF_MSG_IF);this.appendValueInput("VALUE").appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN);this.setInputsInline(!0);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.PROCEDURES_IFRETURN_TOOLTIP);this.hasReturnValue_=!0},mutationToDom:function(){var a=
-document.createElement("mutation");a.setAttribute("value",Number(this.hasReturnValue_));return a},domToMutation:function(a){this.hasReturnValue_=1==a.getAttribute("value");this.hasReturnValue_||(this.removeInput("VALUE"),this.appendDummyInput("VALUE").appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN))},onchange:function(){if(this.workspace){var a=!1,b=this;do{if("procedures_defnoreturn"==b.type||"procedures_defreturn"==b.type){a=!0;break}b=b.getSurroundParent()}while(b);a?("procedures_defnoreturn"==
-b.type&&this.hasReturnValue_?(this.removeInput("VALUE"),this.appendDummyInput("VALUE").appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN),this.hasReturnValue_=!1):"procedures_defreturn"!=b.type||this.hasReturnValue_||(this.removeInput("VALUE"),this.appendValueInput("VALUE").appendField(Blockly.Msg.PROCEDURES_DEFRETURN_RETURN),this.hasReturnValue_=!0),this.setWarningText(null)):this.setWarningText(Blockly.Msg.PROCEDURES_IFRETURN_WARNING)}}};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Blocks.text={};Blockly.Blocks.text={init:function(){this.setHelpUrl(Blockly.Msg.TEXT_TEXT_HELPURL);this.setColour(160);this.appendDummyInput().appendField(this.newQuote_(!0)).appendField(new Blockly.FieldTextInput(""),"TEXT").appendField(this.newQuote_(!1));this.setOutput(!0,"String");this.setTooltip(Blockly.Msg.TEXT_TEXT_TOOLTIP)},newQuote_:function(a){return new Blockly.FieldImage(Blockly.pathToBlockly+"media/"+(a==Blockly.RTL?"quote1.png":"quote0.png"),12,12,'"')}};
-Blockly.Blocks.text_join={init:function(){this.setHelpUrl(Blockly.Msg.TEXT_JOIN_HELPURL);this.setColour(160);this.appendValueInput("ADD0").appendField(Blockly.Msg.TEXT_JOIN_TITLE_CREATEWITH);this.appendValueInput("ADD1");this.setOutput(!0,"String");this.setMutator(new Blockly.Mutator(["text_create_join_item"]));this.setTooltip(Blockly.Msg.TEXT_JOIN_TOOLTIP);this.itemCount_=2},mutationToDom:function(){var a=document.createElement("mutation");a.setAttribute("items",this.itemCount_);return a},domToMutation:function(a){for(var b=
-0;b<this.itemCount_;b++)this.removeInput("ADD"+b);this.itemCount_=parseInt(a.getAttribute("items"),10);for(b=0;b<this.itemCount_;b++)a=this.appendValueInput("ADD"+b),0==b&&a.appendField(Blockly.Msg.TEXT_JOIN_TITLE_CREATEWITH);0==this.itemCount_&&this.appendDummyInput("EMPTY").appendField(new Blockly.FieldImage(Blockly.pathToBlockly+"media/quote0.png",12,12,'"')).appendField(new Blockly.FieldImage(Blockly.pathToBlockly+"media/quote1.png",12,12,'"'))},decompose:function(a){var b=Blockly.Block.obtain(a,
-"text_create_join_container");b.initSvg();for(var c=b.getInput("STACK").connection,d=0;d<this.itemCount_;d++){var e=Blockly.Block.obtain(a,"text_create_join_item");e.initSvg();c.connect(e.previousConnection);c=e.nextConnection}return b},compose:function(a){if(0==this.itemCount_)this.removeInput("EMPTY");else for(var b=this.itemCount_-1;0<=b;b--)this.removeInput("ADD"+b);this.itemCount_=0;for(a=a.getInputTargetBlock("STACK");a;)b=this.appendValueInput("ADD"+this.itemCount_),0==this.itemCount_&&b.appendField(Blockly.Msg.TEXT_JOIN_TITLE_CREATEWITH),
-a.valueConnection_&&b.connection.connect(a.valueConnection_),this.itemCount_++,a=a.nextConnection&&a.nextConnection.targetBlock();0==this.itemCount_&&this.appendDummyInput("EMPTY").appendField(new Blockly.FieldImage(Blockly.pathToBlockly+"media/quote0.png",12,12,'"')).appendField(new Blockly.FieldImage(Blockly.pathToBlockly+"media/quote1.png",12,12,'"'))},saveConnections:function(a){a=a.getInputTargetBlock("STACK");for(var b=0;a;){var c=this.getInput("ADD"+b);a.valueConnection_=c&&c.connection.targetConnection;
-b++;a=a.nextConnection&&a.nextConnection.targetBlock()}}};Blockly.Blocks.text_create_join_container={init:function(){this.setColour(160);this.appendDummyInput().appendField(Blockly.Msg.TEXT_CREATE_JOIN_TITLE_JOIN);this.appendStatementInput("STACK");this.setTooltip(Blockly.Msg.TEXT_CREATE_JOIN_TOOLTIP);this.contextMenu=!1}};
-Blockly.Blocks.text_create_join_item={init:function(){this.setColour(160);this.appendDummyInput().appendField(Blockly.Msg.TEXT_CREATE_JOIN_ITEM_TITLE_ITEM);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.TEXT_CREATE_JOIN_ITEM_TOOLTIP);this.contextMenu=!1}};
-Blockly.Blocks.text_append={init:function(){this.setHelpUrl(Blockly.Msg.TEXT_APPEND_HELPURL);this.setColour(160);this.appendValueInput("TEXT").appendField(Blockly.Msg.TEXT_APPEND_TO).appendField(new Blockly.FieldVariable(Blockly.Msg.TEXT_APPEND_VARIABLE),"VAR").appendField(Blockly.Msg.TEXT_APPEND_APPENDTEXT);this.setPreviousStatement(!0);this.setNextStatement(!0);var a=this;this.setTooltip(function(){return Blockly.Msg.TEXT_APPEND_TOOLTIP.replace("%1",a.getFieldValue("VAR"))})},getVars:function(){return[this.getFieldValue("VAR")]},
-renameVar:function(a,b){Blockly.Names.equals(a,this.getFieldValue("VAR"))&&this.setFieldValue(b,"VAR")}};Blockly.Blocks.text_length={init:function(){this.setHelpUrl(Blockly.Msg.TEXT_LENGTH_HELPURL);this.setColour(160);this.interpolateMsg(Blockly.Msg.TEXT_LENGTH_TITLE,["VALUE",["String","Array"],Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setOutput(!0,"Number");this.setTooltip(Blockly.Msg.TEXT_LENGTH_TOOLTIP)}};
-Blockly.Blocks.text_isEmpty={init:function(){this.setHelpUrl(Blockly.Msg.TEXT_ISEMPTY_HELPURL);this.setColour(160);this.interpolateMsg(Blockly.Msg.TEXT_ISEMPTY_TITLE,["VALUE",["String","Array"],Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setOutput(!0,"Boolean");this.setTooltip(Blockly.Msg.TEXT_ISEMPTY_TOOLTIP)}};
-Blockly.Blocks.text_indexOf={init:function(){var a=[[Blockly.Msg.TEXT_INDEXOF_OPERATOR_FIRST,"FIRST"],[Blockly.Msg.TEXT_INDEXOF_OPERATOR_LAST,"LAST"]];this.setHelpUrl(Blockly.Msg.TEXT_INDEXOF_HELPURL);this.setColour(160);this.setOutput(!0,"Number");this.appendValueInput("VALUE").setCheck("String").appendField(Blockly.Msg.TEXT_INDEXOF_INPUT_INTEXT);this.appendValueInput("FIND").setCheck("String").appendField(new Blockly.FieldDropdown(a),"END");Blockly.Msg.TEXT_INDEXOF_TAIL&&this.appendDummyInput().appendField(Blockly.Msg.TEXT_INDEXOF_TAIL);
-this.setInputsInline(!0);this.setTooltip(Blockly.Msg.TEXT_INDEXOF_TOOLTIP)}};
-Blockly.Blocks.text_charAt={init:function(){this.WHERE_OPTIONS=[[Blockly.Msg.TEXT_CHARAT_FROM_START,"FROM_START"],[Blockly.Msg.TEXT_CHARAT_FROM_END,"FROM_END"],[Blockly.Msg.TEXT_CHARAT_FIRST,"FIRST"],[Blockly.Msg.TEXT_CHARAT_LAST,"LAST"],[Blockly.Msg.TEXT_CHARAT_RANDOM,"RANDOM"]];this.setHelpUrl(Blockly.Msg.TEXT_CHARAT_HELPURL);this.setColour(160);this.setOutput(!0,"String");this.appendValueInput("VALUE").setCheck("String").appendField(Blockly.Msg.TEXT_CHARAT_INPUT_INTEXT);this.appendDummyInput("AT");
-this.setInputsInline(!0);this.updateAt_(!0);this.setTooltip(Blockly.Msg.TEXT_CHARAT_TOOLTIP)},mutationToDom:function(){var a=document.createElement("mutation"),b=this.getInput("AT").type==Blockly.INPUT_VALUE;a.setAttribute("at",b);return a},domToMutation:function(a){a="false"!=a.getAttribute("at");this.updateAt_(a)},updateAt_:function(a){this.removeInput("AT");this.removeInput("ORDINAL",!0);a?(this.appendValueInput("AT").setCheck("Number"),Blockly.Msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput("ORDINAL").appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)):
-this.appendDummyInput("AT");Blockly.Msg.TEXT_CHARAT_TAIL&&(this.removeInput("TAIL",!0),this.appendDummyInput("TAIL").appendField(Blockly.Msg.TEXT_CHARAT_TAIL));var b=new Blockly.FieldDropdown(this.WHERE_OPTIONS,function(b){var d="FROM_START"==b||"FROM_END"==b;if(d!=a){var e=this.sourceBlock_;e.updateAt_(d);e.setFieldValue(b,"WHERE");return null}});this.getInput("AT").appendField(b,"WHERE")}};
-Blockly.Blocks.text_getSubstring={init:function(){this.WHERE_OPTIONS_1=[[Blockly.Msg.TEXT_GET_SUBSTRING_START_FROM_START,"FROM_START"],[Blockly.Msg.TEXT_GET_SUBSTRING_START_FROM_END,"FROM_END"],[Blockly.Msg.TEXT_GET_SUBSTRING_START_FIRST,"FIRST"]];this.WHERE_OPTIONS_2=[[Blockly.Msg.TEXT_GET_SUBSTRING_END_FROM_START,"FROM_START"],[Blockly.Msg.TEXT_GET_SUBSTRING_END_FROM_END,"FROM_END"],[Blockly.Msg.TEXT_GET_SUBSTRING_END_LAST,"LAST"]];this.setHelpUrl(Blockly.Msg.TEXT_GET_SUBSTRING_HELPURL);this.setColour(160);
-this.appendValueInput("STRING").setCheck("String").appendField(Blockly.Msg.TEXT_GET_SUBSTRING_INPUT_IN_TEXT);this.appendDummyInput("AT1");this.appendDummyInput("AT2");Blockly.Msg.TEXT_GET_SUBSTRING_TAIL&&this.appendDummyInput("TAIL").appendField(Blockly.Msg.TEXT_GET_SUBSTRING_TAIL);this.setInputsInline(!0);this.setOutput(!0,"String");this.updateAt_(1,!0);this.updateAt_(2,!0);this.setTooltip(Blockly.Msg.TEXT_GET_SUBSTRING_TOOLTIP)},mutationToDom:function(){var a=document.createElement("mutation"),
-b=this.getInput("AT1").type==Blockly.INPUT_VALUE;a.setAttribute("at1",b);b=this.getInput("AT2").type==Blockly.INPUT_VALUE;a.setAttribute("at2",b);return a},domToMutation:function(a){var b="true"==a.getAttribute("at1");a="true"==a.getAttribute("at2");this.updateAt_(1,b);this.updateAt_(2,a)},updateAt_:function(a,b){this.removeInput("AT"+a);this.removeInput("ORDINAL"+a,!0);b?(this.appendValueInput("AT"+a).setCheck("Number"),Blockly.Msg.ORDINAL_NUMBER_SUFFIX&&this.appendDummyInput("ORDINAL"+a).appendField(Blockly.Msg.ORDINAL_NUMBER_SUFFIX)):
-this.appendDummyInput("AT"+a);2==a&&Blockly.Msg.TEXT_GET_SUBSTRING_TAIL&&(this.removeInput("TAIL",!0),this.appendDummyInput("TAIL").appendField(Blockly.Msg.TEXT_GET_SUBSTRING_TAIL));var c=new Blockly.FieldDropdown(this["WHERE_OPTIONS_"+a],function(c){var e="FROM_START"==c||"FROM_END"==c;if(e!=b){var f=this.sourceBlock_;f.updateAt_(a,e);f.setFieldValue(c,"WHERE"+a);return null}});this.getInput("AT"+a).appendField(c,"WHERE"+a);1==a&&this.moveInputBefore("AT1","AT2")}};
-Blockly.Blocks.text_changeCase={init:function(){var a=[[Blockly.Msg.TEXT_CHANGECASE_OPERATOR_UPPERCASE,"UPPERCASE"],[Blockly.Msg.TEXT_CHANGECASE_OPERATOR_LOWERCASE,"LOWERCASE"],[Blockly.Msg.TEXT_CHANGECASE_OPERATOR_TITLECASE,"TITLECASE"]];this.setHelpUrl(Blockly.Msg.TEXT_CHANGECASE_HELPURL);this.setColour(160);this.appendValueInput("TEXT").setCheck("String").appendField(new Blockly.FieldDropdown(a),"CASE");this.setOutput(!0,"String");this.setTooltip(Blockly.Msg.TEXT_CHANGECASE_TOOLTIP)}};
-Blockly.Blocks.text_trim={init:function(){var a=[[Blockly.Msg.TEXT_TRIM_OPERATOR_BOTH,"BOTH"],[Blockly.Msg.TEXT_TRIM_OPERATOR_LEFT,"LEFT"],[Blockly.Msg.TEXT_TRIM_OPERATOR_RIGHT,"RIGHT"]];this.setHelpUrl(Blockly.Msg.TEXT_TRIM_HELPURL);this.setColour(160);this.appendValueInput("TEXT").setCheck("String").appendField(new Blockly.FieldDropdown(a),"MODE");this.setOutput(!0,"String");this.setTooltip(Blockly.Msg.TEXT_TRIM_TOOLTIP)}};
-Blockly.Blocks.text_print={init:function(){this.setHelpUrl(Blockly.Msg.TEXT_PRINT_HELPURL);this.setColour(160);this.interpolateMsg(Blockly.Msg.TEXT_PRINT_TITLE,["TEXT",null,Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.TEXT_PRINT_TOOLTIP)}};
-Blockly.Blocks.text_prompt={init:function(){var a=[[Blockly.Msg.TEXT_PROMPT_TYPE_TEXT,"TEXT"],[Blockly.Msg.TEXT_PROMPT_TYPE_NUMBER,"NUMBER"]],b=this;this.setHelpUrl(Blockly.Msg.TEXT_PROMPT_HELPURL);this.setColour(160);a=new Blockly.FieldDropdown(a,function(a){"NUMBER"==a?b.changeOutput("Number"):b.changeOutput("String")});this.appendDummyInput().appendField(a,"TYPE").appendField(this.newQuote_(!0)).appendField(new Blockly.FieldTextInput(""),"TEXT").appendField(this.newQuote_(!1));this.setOutput(!0,
-"String");b=this;this.setTooltip(function(){return"TEXT"==b.getFieldValue("TYPE")?Blockly.Msg.TEXT_PROMPT_TOOLTIP_TEXT:Blockly.Msg.TEXT_PROMPT_TOOLTIP_NUMBER})},newQuote_:Blockly.Blocks.text.newQuote_};
-// Copyright 2012 Google Inc.  Apache License 2.0
-Blockly.Blocks.variables={};
-Blockly.Blocks.variables_get={init:function(){this.setHelpUrl(Blockly.Msg.VARIABLES_GET_HELPURL);this.setColour(330);this.appendDummyInput().appendField(Blockly.Msg.VARIABLES_GET_TITLE).appendField(new Blockly.FieldVariable(Blockly.Msg.VARIABLES_GET_ITEM),"VAR").appendField(Blockly.Msg.VARIABLES_GET_TAIL);this.setOutput(!0);this.setTooltip(Blockly.Msg.VARIABLES_GET_TOOLTIP);this.contextMenuMsg_=Blockly.Msg.VARIABLES_GET_CREATE_SET;this.contextMenuType_="variables_set"},getVars:function(){return[this.getFieldValue("VAR")]},
-renameVar:function(a,b){Blockly.Names.equals(a,this.getFieldValue("VAR"))&&this.setFieldValue(b,"VAR")},customContextMenu:function(a){var b={enabled:!0},c=this.getFieldValue("VAR");b.text=this.contextMenuMsg_.replace("%1",c);c=goog.dom.createDom("field",null,c);c.setAttribute("name","VAR");c=goog.dom.createDom("block",null,c);c.setAttribute("type",this.contextMenuType_);b.callback=Blockly.ContextMenu.callbackFactory(this,c);a.push(b)}};
-Blockly.Blocks.variables_set={init:function(){this.setHelpUrl(Blockly.Msg.VARIABLES_SET_HELPURL);this.setColour(330);this.interpolateMsg(Blockly.Msg.VARIABLES_SET_TITLE+" %1 "+Blockly.Msg.VARIABLES_SET_TAIL+" %2",["VAR",new Blockly.FieldVariable(Blockly.Msg.VARIABLES_SET_ITEM)],["VALUE",null,Blockly.ALIGN_RIGHT],Blockly.ALIGN_RIGHT);this.setPreviousStatement(!0);this.setNextStatement(!0);this.setTooltip(Blockly.Msg.VARIABLES_SET_TOOLTIP);this.contextMenuMsg_=Blockly.Msg.VARIABLES_SET_CREATE_GET;this.contextMenuType_=
-"variables_get"},getVars:function(){return[this.getFieldValue("VAR")]},renameVar:function(a,b){Blockly.Names.equals(a,this.getFieldValue("VAR"))&&this.setFieldValue(b,"VAR")},customContextMenu:Blockly.Blocks.variables_get.customContextMenu};

File diff suppressed because it is too large
+ 0 - 5
support/client/lib/vwf/model/blockly/javascript_compressed.js


+ 0 - 382
support/client/lib/vwf/model/blockly/msg/js/en.js

@@ -1,382 +0,0 @@
-// This file was automatically generated.  Do not modify.
-
-'use strict';
-
-goog.provide('Blockly.Msg.en');
-
-goog.require('Blockly.Msg');
-
-Blockly.Msg.ADD_COMMENT = "Add Comment";
-Blockly.Msg.AUTH = "Please authorize this app to enable your work to be saved and to allow it to be shared by you.";
-Blockly.Msg.CHANGE_VALUE_TITLE = "Change value:";
-Blockly.Msg.CHAT = "Chat with your collaborator by typing in this box!";
-Blockly.Msg.COLLAPSE_ALL = "Collapse Blocks";
-Blockly.Msg.COLLAPSE_BLOCK = "Collapse Block";
-Blockly.Msg.COLOUR_BLEND_COLOUR1 = "colour 1";
-Blockly.Msg.COLOUR_BLEND_COLOUR2 = "colour 2";
-Blockly.Msg.COLOUR_BLEND_HELPURL = "http://meyerweb.com/eric/tools/color-blend/";
-Blockly.Msg.COLOUR_BLEND_RATIO = "ratio";
-Blockly.Msg.COLOUR_BLEND_TITLE = "blend";
-Blockly.Msg.COLOUR_BLEND_TOOLTIP = "Blends two colours together with a given ratio (0.0 - 1.0).";
-Blockly.Msg.COLOUR_PICKER_HELPURL = "https://en.wikipedia.org/wiki/Color";
-Blockly.Msg.COLOUR_PICKER_TOOLTIP = "Choose a colour from the palette.";
-Blockly.Msg.COLOUR_RANDOM_HELPURL = "http://randomcolour.com";
-Blockly.Msg.COLOUR_RANDOM_TITLE = "random colour";
-Blockly.Msg.COLOUR_RANDOM_TOOLTIP = "Choose a colour at random.";
-Blockly.Msg.COLOUR_RGB_BLUE = "blue";
-Blockly.Msg.COLOUR_RGB_GREEN = "green";
-Blockly.Msg.COLOUR_RGB_HELPURL = "http://www.december.com/html/spec/colorper.html";
-Blockly.Msg.COLOUR_RGB_RED = "red";
-Blockly.Msg.COLOUR_RGB_TITLE = "colour with";
-Blockly.Msg.COLOUR_RGB_TOOLTIP = "Create a colour with the specified amount of red, green, and blue.  All values must be between 0 and 100.";
-Blockly.Msg.CONTROLS_FLOW_STATEMENTS_HELPURL = "https://code.google.com/p/blockly/wiki/Loops#Loop_Termination_Blocks";
-Blockly.Msg.CONTROLS_FLOW_STATEMENTS_OPERATOR_BREAK = "break out of loop";
-Blockly.Msg.CONTROLS_FLOW_STATEMENTS_OPERATOR_CONTINUE = "continue with next iteration of loop";
-Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_BREAK = "Break out of the containing loop.";
-Blockly.Msg.CONTROLS_FLOW_STATEMENTS_TOOLTIP_CONTINUE = "Skip the rest of this loop, and continue with the next iteration.";
-Blockly.Msg.CONTROLS_FLOW_STATEMENTS_WARNING = "Warning: This block may only be used within a loop.";
-Blockly.Msg.CONTROLS_FOREACH_HELPURL = "https://code.google.com/p/blockly/wiki/Loops#for_each for each block";
-Blockly.Msg.CONTROLS_FOREACH_INPUT_INLIST = "in list";
-Blockly.Msg.CONTROLS_FOREACH_INPUT_INLIST_TAIL = "";
-Blockly.Msg.CONTROLS_FOREACH_INPUT_ITEM = "for each item";
-Blockly.Msg.CONTROLS_FOREACH_TOOLTIP = "For each item in a list, set the variable '%1' to the item, and then do some statements.";
-Blockly.Msg.CONTROLS_FOR_HELPURL = "https://code.google.com/p/blockly/wiki/Loops#count_with";
-Blockly.Msg.CONTROLS_FOR_INPUT_FROM_TO_BY = "from %1 to %2 by %3";
-Blockly.Msg.CONTROLS_FOR_INPUT_WITH = "count with";
-Blockly.Msg.CONTROLS_FOR_TOOLTIP = "Have the variable %1 take on the values from the start number to the end number, counting by the specified interval, and do the specified blocks.";
-Blockly.Msg.CONTROLS_IF_ELSEIF_TOOLTIP = "Add a condition to the if block.";
-Blockly.Msg.CONTROLS_IF_ELSE_TOOLTIP = "Add a final, catch-all condition to the if block.";
-Blockly.Msg.CONTROLS_IF_HELPURL = "https://code.google.com/p/blockly/wiki/If_Then";
-Blockly.Msg.CONTROLS_IF_IF_TOOLTIP = "Add, remove, or reorder sections to reconfigure this if block.";
-Blockly.Msg.CONTROLS_IF_MSG_ELSE = "else";
-Blockly.Msg.CONTROLS_IF_MSG_ELSEIF = "else if";
-Blockly.Msg.CONTROLS_IF_MSG_IF = "if";
-Blockly.Msg.CONTROLS_IF_TOOLTIP_1 = "If a value is true, then do some statements.";
-Blockly.Msg.CONTROLS_IF_TOOLTIP_2 = "If a value is true, then do the first block of statements.  Otherwise, do the second block of statements.";
-Blockly.Msg.CONTROLS_IF_TOOLTIP_3 = "If the first value is true, then do the first block of statements.  Otherwise, if the second value is true, do the second block of statements.";
-Blockly.Msg.CONTROLS_IF_TOOLTIP_4 = "If the first value is true, then do the first block of statements.  Otherwise, if the second value is true, do the second block of statements.  If none of the values are true, do the last block of statements.";
-Blockly.Msg.CONTROLS_REPEAT_HELPURL = "https://en.wikipedia.org/wiki/For_loop";
-Blockly.Msg.CONTROLS_REPEAT_INPUT_DO = "do";
-Blockly.Msg.CONTROLS_REPEAT_TITLE = "repeat %1 times";
-Blockly.Msg.CONTROLS_REPEAT_TITLE_REPEAT = "repeat";
-Blockly.Msg.CONTROLS_REPEAT_TITLE_TIMES = "times";
-Blockly.Msg.CONTROLS_REPEAT_TOOLTIP = "Do some statements several times.";
-Blockly.Msg.CONTROLS_WHILEUNTIL_HELPURL = "https://code.google.com/p/blockly/wiki/Repeat";
-Blockly.Msg.CONTROLS_WHILEUNTIL_OPERATOR_UNTIL = "repeat until";
-Blockly.Msg.CONTROLS_WHILEUNTIL_OPERATOR_WHILE = "repeat while";
-Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_UNTIL = "While a value is false, then do some statements.";
-Blockly.Msg.CONTROLS_WHILEUNTIL_TOOLTIP_WHILE = "While a value is true, then do some statements.";
-Blockly.Msg.DELETE_BLOCK = "Delete Block";
-Blockly.Msg.DELETE_X_BLOCKS = "Delete %1 Blocks";
-Blockly.Msg.DISABLE_BLOCK = "Disable Block";
-Blockly.Msg.DUPLICATE_BLOCK = "Duplicate";
-Blockly.Msg.ENABLE_BLOCK = "Enable Block";
-Blockly.Msg.EXPAND_ALL = "Expand Blocks";
-Blockly.Msg.EXPAND_BLOCK = "Expand Block";
-Blockly.Msg.EXTERNAL_INPUTS = "External Inputs";
-Blockly.Msg.HELP = "Help";
-Blockly.Msg.INLINE_INPUTS = "Inline Inputs";
-Blockly.Msg.LISTS_CREATE_EMPTY_HELPURL = "https://en.wikipedia.org/wiki/Linked_list#Empty_lists";
-Blockly.Msg.LISTS_CREATE_EMPTY_TITLE = "create empty list";
-Blockly.Msg.LISTS_CREATE_EMPTY_TOOLTIP = "Returns a list, of length 0, containing no data records";
-Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TITLE_ADD = "list";
-Blockly.Msg.LISTS_CREATE_WITH_CONTAINER_TOOLTIP = "Add, remove, or reorder sections to reconfigure this list block.";
-Blockly.Msg.LISTS_CREATE_WITH_INPUT_WITH = "create list with";
-Blockly.Msg.LISTS_CREATE_WITH_ITEM_TOOLTIP = "Add an item to the list.";
-Blockly.Msg.LISTS_CREATE_WITH_TOOLTIP = "Create a list with any number of items.";
-Blockly.Msg.LISTS_GET_INDEX_FIRST = "first";
-Blockly.Msg.LISTS_GET_INDEX_FROM_END = "# from end";
-Blockly.Msg.LISTS_GET_INDEX_FROM_START = "#";
-Blockly.Msg.LISTS_GET_INDEX_GET = "get";
-Blockly.Msg.LISTS_GET_INDEX_GET_REMOVE = "get and remove";
-Blockly.Msg.LISTS_GET_INDEX_LAST = "last";
-Blockly.Msg.LISTS_GET_INDEX_RANDOM = "random";
-Blockly.Msg.LISTS_GET_INDEX_REMOVE = "remove";
-Blockly.Msg.LISTS_GET_INDEX_TAIL = "";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FIRST = "Returns the first item in a list.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM_END = "Returns the item at the specified position in a list.  #1 is the last item.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_FROM_START = "Returns the item at the specified position in a list.  #1 is the first item.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_LAST = "Returns the last item in a list.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_RANDOM = "Returns a random item in a list.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FIRST = "Removes and returns the first item in a list.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM_END = "Removes and returns the item at the specified position in a list.  #1 is the last item.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_FROM_START = "Removes and returns the item at the specified position in a list.  #1 is the first item.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_LAST = "Removes and returns the last item in a list.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_GET_REMOVE_RANDOM = "Removes and returns a random item in a list.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FIRST = "Removes the first item in a list.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM_END = "Removes the item at the specified position in a list.  #1 is the last item.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_FROM_START = "Removes the item at the specified position in a list.  #1 is the first item.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_LAST = "Removes the last item in a list.";
-Blockly.Msg.LISTS_GET_INDEX_TOOLTIP_REMOVE_RANDOM = "Removes a random item in a list.";
-Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_END = "to # from end";
-Blockly.Msg.LISTS_GET_SUBLIST_END_FROM_START = "to #";
-Blockly.Msg.LISTS_GET_SUBLIST_END_LAST = "to last";
-Blockly.Msg.LISTS_GET_SUBLIST_HELPURL = "https://code.google.com/p/blockly/wiki/Lists#Getting_a_sublist";
-Blockly.Msg.LISTS_GET_SUBLIST_START_FIRST = "get sub-list from first";
-Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_END = "get sub-list from # from end";
-Blockly.Msg.LISTS_GET_SUBLIST_START_FROM_START = "get sub-list from #";
-Blockly.Msg.LISTS_GET_SUBLIST_TAIL = "";
-Blockly.Msg.LISTS_GET_SUBLIST_TOOLTIP = "Creates a copy of the specified portion of a list.";
-Blockly.Msg.LISTS_INDEX_OF_FIRST = "find first occurrence of item";
-Blockly.Msg.LISTS_INDEX_OF_HELPURL = "https://code.google.com/p/blockly/wiki/Lists#Getting_Items_from_a_List";
-Blockly.Msg.LISTS_INDEX_OF_LAST = "find last occurrence of item";
-Blockly.Msg.LISTS_INDEX_OF_TOOLTIP = "Returns the index of the first/last occurrence of the item in the list.  Returns 0 if text is not found.";
-Blockly.Msg.LISTS_INLIST = "in list";
-Blockly.Msg.LISTS_IS_EMPTY_HELPURL = "https://code.google.com/p/blockly/wiki/Lists#is_empty";
-Blockly.Msg.LISTS_IS_EMPTY_TITLE = "%1 is empty";
-Blockly.Msg.LISTS_LENGTH_HELPURL = "https://code.google.com/p/blockly/wiki/Lists#length_of";
-Blockly.Msg.LISTS_LENGTH_TITLE = "length of %1";
-Blockly.Msg.LISTS_LENGTH_TOOLTIP = "Returns the length of a list.";
-Blockly.Msg.LISTS_REPEAT_HELPURL = "https://code.google.com/p/blockly/wiki/Lists#create_list_with";
-Blockly.Msg.LISTS_REPEAT_TITLE = "create list with item %1 repeated %2 times";
-Blockly.Msg.LISTS_REPEAT_TOOLTIP = "Creates a list consisting of the given value repeated the specified number of times.";
-Blockly.Msg.LISTS_SET_INDEX_HELPURL = "https://code.google.com/p/blockly/wiki/Lists#in_list_..._set";
-Blockly.Msg.LISTS_SET_INDEX_INPUT_TO = "as";
-Blockly.Msg.LISTS_SET_INDEX_INSERT = "insert at";
-Blockly.Msg.LISTS_SET_INDEX_SET = "set";
-Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FIRST = "Inserts the item at the start of a list.";
-Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM_END = "Inserts the item at the specified position in a list.  #1 is the last item.";
-Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_FROM_START = "Inserts the item at the specified position in a list.  #1 is the first item.";
-Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_LAST = "Append the item to the end of a list.";
-Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_INSERT_RANDOM = "Inserts the item randomly in a list.";
-Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FIRST = "Sets the first item in a list.";
-Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM_END = "Sets the item at the specified position in a list.  #1 is the last item.";
-Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_FROM_START = "Sets the item at the specified position in a list.  #1 is the first item.";
-Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_LAST = "Sets the last item in a list.";
-Blockly.Msg.LISTS_SET_INDEX_TOOLTIP_SET_RANDOM = "Sets a random item in a list.";
-Blockly.Msg.LISTS_TOOLTIP = "Returns true if the list is empty.";
-Blockly.Msg.LOGIC_BOOLEAN_FALSE = "false";
-Blockly.Msg.LOGIC_BOOLEAN_HELPURL = "https://code.google.com/p/blockly/wiki/True_False";
-Blockly.Msg.LOGIC_BOOLEAN_TOOLTIP = "Returns either true or false.";
-Blockly.Msg.LOGIC_BOOLEAN_TRUE = "true";
-Blockly.Msg.LOGIC_COMPARE_HELPURL = "https://en.wikipedia.org/wiki/Inequality_(mathematics)";
-Blockly.Msg.LOGIC_COMPARE_TOOLTIP_EQ = "Return true if both inputs equal each other.";
-Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GT = "Return true if the first input is greater than the second input.";
-Blockly.Msg.LOGIC_COMPARE_TOOLTIP_GTE = "Return true if the first input is greater than or equal to the second input.";
-Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LT = "Return true if the first input is smaller than the second input.";
-Blockly.Msg.LOGIC_COMPARE_TOOLTIP_LTE = "Return true if the first input is smaller than or equal to the second input.";
-Blockly.Msg.LOGIC_COMPARE_TOOLTIP_NEQ = "Return true if both inputs are not equal to each other.";
-Blockly.Msg.LOGIC_NEGATE_HELPURL = "https://code.google.com/p/blockly/wiki/Not";
-Blockly.Msg.LOGIC_NEGATE_TITLE = "not %1";
-Blockly.Msg.LOGIC_NEGATE_TOOLTIP = "Returns true if the input is false.  Returns false if the input is true.";
-Blockly.Msg.LOGIC_NULL = "null";
-Blockly.Msg.LOGIC_NULL_HELPURL = "https://en.wikipedia.org/wiki/Nullable_type";
-Blockly.Msg.LOGIC_NULL_TOOLTIP = "Returns null.";
-Blockly.Msg.LOGIC_OPERATION_AND = "and";
-Blockly.Msg.LOGIC_OPERATION_HELPURL = "https://code.google.com/p/blockly/wiki/And_Or";
-Blockly.Msg.LOGIC_OPERATION_OR = "or";
-Blockly.Msg.LOGIC_OPERATION_TOOLTIP_AND = "Return true if both inputs are true.";
-Blockly.Msg.LOGIC_OPERATION_TOOLTIP_OR = "Return true if at least one of the inputs is true.";
-Blockly.Msg.LOGIC_TERNARY_CONDITION = "test";
-Blockly.Msg.LOGIC_TERNARY_HELPURL = "https://en.wikipedia.org/wiki/%3F:";
-Blockly.Msg.LOGIC_TERNARY_IF_FALSE = "if false";
-Blockly.Msg.LOGIC_TERNARY_IF_TRUE = "if true";
-Blockly.Msg.LOGIC_TERNARY_TOOLTIP = "Check the condition in 'test'. If the condition is true, returns the 'if true' value; otherwise returns the 'if false' value.";
-Blockly.Msg.MATH_ADDITION_SYMBOL = "+";
-Blockly.Msg.MATH_ARITHMETIC_HELPURL = "https://en.wikipedia.org/wiki/Arithmetic";
-Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_ADD = "Return the sum of the two numbers.";
-Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_DIVIDE = "Return the quotient of the two numbers.";
-Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MINUS = "Return the difference of the two numbers.";
-Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_MULTIPLY = "Return the product of the two numbers.";
-Blockly.Msg.MATH_ARITHMETIC_TOOLTIP_POWER = "Return the first number raised to the power of the second number.";
-Blockly.Msg.MATH_CHANGE_HELPURL = "https://en.wikipedia.org/wiki/Programming_idiom#Incrementing_a_counter";
-Blockly.Msg.MATH_CHANGE_INPUT_BY = "by";
-Blockly.Msg.MATH_CHANGE_TITLE_CHANGE = "change";
-Blockly.Msg.MATH_CHANGE_TOOLTIP = "Add a number to variable '%1'.";
-Blockly.Msg.MATH_CONSTANT_HELPURL = "https://en.wikipedia.org/wiki/Mathematical_constant";
-Blockly.Msg.MATH_CONSTANT_TOOLTIP = "Return one of the common constants: π (3.141…), e (2.718…), φ (1.618…), sqrt(2) (1.414…), sqrt(½) (0.707…), or ∞ (infinity).";
-Blockly.Msg.MATH_CONSTRAIN_HELPURL = "https://en.wikipedia.org/wiki/Clamping_%28graphics%29";
-Blockly.Msg.MATH_CONSTRAIN_TITLE = "constrain %1 low %2 high %3";
-Blockly.Msg.MATH_CONSTRAIN_TOOLTIP = "Constrain a number to be between the specified limits (inclusive).";
-Blockly.Msg.MATH_DIVISION_SYMBOL = "÷";
-Blockly.Msg.MATH_IS_DIVISIBLE_BY = "is divisible by";
-Blockly.Msg.MATH_IS_EVEN = "is even";
-Blockly.Msg.MATH_IS_NEGATIVE = "is negative";
-Blockly.Msg.MATH_IS_ODD = "is odd";
-Blockly.Msg.MATH_IS_POSITIVE = "is positive";
-Blockly.Msg.MATH_IS_PRIME = "is prime";
-Blockly.Msg.MATH_IS_TOOLTIP = "Check if a number is an even, odd, prime, whole, positive, negative, or if it is divisible by certain number.  Returns true or false.";
-Blockly.Msg.MATH_IS_WHOLE = "is whole";
-Blockly.Msg.MATH_MODULO_HELPURL = "https://en.wikipedia.org/wiki/Modulo_operation";
-Blockly.Msg.MATH_MODULO_TITLE = "remainder of %1 ÷ %2";
-Blockly.Msg.MATH_MODULO_TOOLTIP = "Return the remainder from dividing the two numbers.";
-Blockly.Msg.MATH_MULTIPLICATION_SYMBOL = "×";
-Blockly.Msg.MATH_NUMBER_HELPURL = "https://en.wikipedia.org/wiki/Number";
-Blockly.Msg.MATH_NUMBER_TOOLTIP = "A number.";
-Blockly.Msg.MATH_ONLIST_HELPURL = "";
-Blockly.Msg.MATH_ONLIST_OPERATOR_AVERAGE = "average of list";
-Blockly.Msg.MATH_ONLIST_OPERATOR_MAX = "max of list";
-Blockly.Msg.MATH_ONLIST_OPERATOR_MEDIAN = "median of list";
-Blockly.Msg.MATH_ONLIST_OPERATOR_MIN = "min of list";
-Blockly.Msg.MATH_ONLIST_OPERATOR_MODE = "modes of list";
-Blockly.Msg.MATH_ONLIST_OPERATOR_RANDOM = "random item of list";
-Blockly.Msg.MATH_ONLIST_OPERATOR_STD_DEV = "standard deviation of list";
-Blockly.Msg.MATH_ONLIST_OPERATOR_SUM = "sum of list";
-Blockly.Msg.MATH_ONLIST_TOOLTIP_AVERAGE = "Return the average (arithmetic mean) of the numeric values in the list.";
-Blockly.Msg.MATH_ONLIST_TOOLTIP_MAX = "Return the largest number in the list.";
-Blockly.Msg.MATH_ONLIST_TOOLTIP_MEDIAN = "Return the median number in the list.";
-Blockly.Msg.MATH_ONLIST_TOOLTIP_MIN = "Return the smallest number in the list.";
-Blockly.Msg.MATH_ONLIST_TOOLTIP_MODE = "Return a list of the most common item(s) in the list.";
-Blockly.Msg.MATH_ONLIST_TOOLTIP_RANDOM = "Return a random element from the list.";
-Blockly.Msg.MATH_ONLIST_TOOLTIP_STD_DEV = "Return the standard deviation of the list.";
-Blockly.Msg.MATH_ONLIST_TOOLTIP_SUM = "Return the sum of all the numbers in the list.";
-Blockly.Msg.MATH_POWER_SYMBOL = "^";
-Blockly.Msg.MATH_RANDOM_FLOAT_HELPURL = "https://en.wikipedia.org/wiki/Random_number_generation";
-Blockly.Msg.MATH_RANDOM_FLOAT_TITLE_RANDOM = "random fraction";
-Blockly.Msg.MATH_RANDOM_FLOAT_TOOLTIP = "Return a random fraction between 0.0 (inclusive) and 1.0 (exclusive).";
-Blockly.Msg.MATH_RANDOM_INT_HELPURL = "https://en.wikipedia.org/wiki/Random_number_generation";
-Blockly.Msg.MATH_RANDOM_INT_TITLE = "random integer from %1 to %2";
-Blockly.Msg.MATH_RANDOM_INT_TOOLTIP = "Return a random integer between the two specified limits, inclusive.";
-Blockly.Msg.MATH_ROUND_HELPURL = "https://en.wikipedia.org/wiki/Rounding";
-Blockly.Msg.MATH_ROUND_OPERATOR_ROUND = "round";
-Blockly.Msg.MATH_ROUND_OPERATOR_ROUNDDOWN = "round down";
-Blockly.Msg.MATH_ROUND_OPERATOR_ROUNDUP = "round up";
-Blockly.Msg.MATH_ROUND_TOOLTIP = "Round a number up or down.";
-Blockly.Msg.MATH_SINGLE_HELPURL = "https://en.wikipedia.org/wiki/Square_root";
-Blockly.Msg.MATH_SINGLE_OP_ABSOLUTE = "absolute";
-Blockly.Msg.MATH_SINGLE_OP_ROOT = "square root";
-Blockly.Msg.MATH_SINGLE_TOOLTIP_ABS = "Return the absolute value of a number.";
-Blockly.Msg.MATH_SINGLE_TOOLTIP_EXP = "Return e to the power of a number.";
-Blockly.Msg.MATH_SINGLE_TOOLTIP_LN = "Return the natural logarithm of a number.";
-Blockly.Msg.MATH_SINGLE_TOOLTIP_LOG10 = "Return the base 10 logarithm of a number.";
-Blockly.Msg.MATH_SINGLE_TOOLTIP_NEG = "Return the negation of a number.";
-Blockly.Msg.MATH_SINGLE_TOOLTIP_POW10 = "Return 10 to the power of a number.";
-Blockly.Msg.MATH_SINGLE_TOOLTIP_ROOT = "Return the square root of a number.";
-Blockly.Msg.MATH_SUBTRACTION_SYMBOL = "-";
-Blockly.Msg.MATH_TRIG_ACOS = "acos";
-Blockly.Msg.MATH_TRIG_ASIN = "asin";
-Blockly.Msg.MATH_TRIG_ATAN = "atan";
-Blockly.Msg.MATH_TRIG_COS = "cos";
-Blockly.Msg.MATH_TRIG_HELPURL = "https://en.wikipedia.org/wiki/Trigonometric_functions";
-Blockly.Msg.MATH_TRIG_SIN = "sin";
-Blockly.Msg.MATH_TRIG_TAN = "tan";
-Blockly.Msg.MATH_TRIG_TOOLTIP_ACOS = "Return the arccosine of a number.";
-Blockly.Msg.MATH_TRIG_TOOLTIP_ASIN = "Return the arcsine of a number.";
-Blockly.Msg.MATH_TRIG_TOOLTIP_ATAN = "Return the arctangent of a number.";
-Blockly.Msg.MATH_TRIG_TOOLTIP_COS = "Return the cosine of a degree (not radian).";
-Blockly.Msg.MATH_TRIG_TOOLTIP_SIN = "Return the sine of a degree (not radian).";
-Blockly.Msg.MATH_TRIG_TOOLTIP_TAN = "Return the tangent of a degree (not radian).";
-Blockly.Msg.ME = "Me";
-Blockly.Msg.NEW_VARIABLE = "New variable...";
-Blockly.Msg.NEW_VARIABLE_TITLE = "New variable name:";
-Blockly.Msg.ORDINAL_NUMBER_SUFFIX = "";
-Blockly.Msg.PROCEDURES_BEFORE_PARAMS = "with:";
-Blockly.Msg.PROCEDURES_CALLNORETURN_CALL = "";
-Blockly.Msg.PROCEDURES_CALLNORETURN_HELPURL = "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29";
-Blockly.Msg.PROCEDURES_CALLNORETURN_TOOLTIP = "Run the user-defined function '%1'.";
-Blockly.Msg.PROCEDURES_CALLRETURN_HELPURL = "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29";
-Blockly.Msg.PROCEDURES_CALLRETURN_TOOLTIP = "Run the user-defined function '%1' and use its output.";
-Blockly.Msg.PROCEDURES_CREATE_DO = "Create '%1'";
-Blockly.Msg.PROCEDURES_DEFNORETURN_DO = "";
-Blockly.Msg.PROCEDURES_DEFNORETURN_HELPURL = "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29";
-Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE = "do something";
-Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE = "to";
-Blockly.Msg.PROCEDURES_DEFNORETURN_TOOLTIP = "Creates a function with no output.";
-Blockly.Msg.PROCEDURES_DEFRETURN_HELPURL = "https://en.wikipedia.org/wiki/Procedure_%28computer_science%29";
-Blockly.Msg.PROCEDURES_DEFRETURN_RETURN = "return";
-Blockly.Msg.PROCEDURES_DEFRETURN_TOOLTIP = "Creates a function with an output.";
-Blockly.Msg.PROCEDURES_DEF_DUPLICATE_WARNING = "Warning: This function has duplicate parameters.";
-Blockly.Msg.PROCEDURES_HIGHLIGHT_DEF = "Highlight function definition";
-Blockly.Msg.PROCEDURES_IFRETURN_TOOLTIP = "If a value is true, then return a second value.";
-Blockly.Msg.PROCEDURES_IFRETURN_WARNING = "Warning: This block may be used only within a function definition.";
-Blockly.Msg.PROCEDURES_MUTATORARG_TITLE = "input name:";
-Blockly.Msg.PROCEDURES_MUTATORARG_TOOLTIP = "Add an input to the function.";
-Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TITLE = "inputs";
-Blockly.Msg.PROCEDURES_MUTATORCONTAINER_TOOLTIP = "Add, remove, or reorder inputs to this function.";
-Blockly.Msg.REMOVE_COMMENT = "Remove Comment";
-Blockly.Msg.RENAME_VARIABLE = "Rename variable...";
-Blockly.Msg.RENAME_VARIABLE_TITLE = "Rename all '%1' variables to:";
-Blockly.Msg.TEXT_APPEND_APPENDTEXT = "append text";
-Blockly.Msg.TEXT_APPEND_HELPURL = "https://code.google.com/p/blockly/wiki/Text#Text_modification";
-Blockly.Msg.TEXT_APPEND_TO = "to";
-Blockly.Msg.TEXT_APPEND_TOOLTIP = "Append some text to variable '%1'.";
-Blockly.Msg.TEXT_CHANGECASE_HELPURL = "https://code.google.com/p/blockly/wiki/Text#Adjusting_text_case";
-Blockly.Msg.TEXT_CHANGECASE_OPERATOR_LOWERCASE = "to lower case";
-Blockly.Msg.TEXT_CHANGECASE_OPERATOR_TITLECASE = "to Title Case";
-Blockly.Msg.TEXT_CHANGECASE_OPERATOR_UPPERCASE = "to UPPER CASE";
-Blockly.Msg.TEXT_CHANGECASE_TOOLTIP = "Return a copy of the text in a different case.";
-Blockly.Msg.TEXT_CHARAT_FIRST = "get first letter";
-Blockly.Msg.TEXT_CHARAT_FROM_END = "get letter # from end";
-Blockly.Msg.TEXT_CHARAT_FROM_START = "get letter #";
-Blockly.Msg.TEXT_CHARAT_HELPURL = "https://code.google.com/p/blockly/wiki/Text#Extracting_text";
-Blockly.Msg.TEXT_CHARAT_INPUT_INTEXT = "in text";
-Blockly.Msg.TEXT_CHARAT_LAST = "get last letter";
-Blockly.Msg.TEXT_CHARAT_RANDOM = "get random letter";
-Blockly.Msg.TEXT_CHARAT_TAIL = "";
-Blockly.Msg.TEXT_CHARAT_TOOLTIP = "Returns the letter at the specified position.";
-Blockly.Msg.TEXT_CREATE_JOIN_ITEM_TOOLTIP = "Add an item to the text.";
-Blockly.Msg.TEXT_CREATE_JOIN_TITLE_JOIN = "join";
-Blockly.Msg.TEXT_CREATE_JOIN_TOOLTIP = "Add, remove, or reorder sections to reconfigure this text block.";
-Blockly.Msg.TEXT_GET_SUBSTRING_END_FROM_END = "to letter # from end";
-Blockly.Msg.TEXT_GET_SUBSTRING_END_FROM_START = "to letter #";
-Blockly.Msg.TEXT_GET_SUBSTRING_END_LAST = "to last letter";
-Blockly.Msg.TEXT_GET_SUBSTRING_HELPURL = "https://code.google.com/p/blockly/wiki/Text#Extracting_a_region_of_text";
-Blockly.Msg.TEXT_GET_SUBSTRING_INPUT_IN_TEXT = "in text";
-Blockly.Msg.TEXT_GET_SUBSTRING_START_FIRST = "get substring from first letter";
-Blockly.Msg.TEXT_GET_SUBSTRING_START_FROM_END = "get substring from letter # from end";
-Blockly.Msg.TEXT_GET_SUBSTRING_START_FROM_START = "get substring from letter #";
-Blockly.Msg.TEXT_GET_SUBSTRING_TAIL = "";
-Blockly.Msg.TEXT_GET_SUBSTRING_TOOLTIP = "Returns a specified portion of the text.";
-Blockly.Msg.TEXT_INDEXOF_HELPURL = "https://code.google.com/p/blockly/wiki/Text#Finding_text";
-Blockly.Msg.TEXT_INDEXOF_INPUT_INTEXT = "in text";
-Blockly.Msg.TEXT_INDEXOF_OPERATOR_FIRST = "find first occurrence of text";
-Blockly.Msg.TEXT_INDEXOF_OPERATOR_LAST = "find last occurrence of text";
-Blockly.Msg.TEXT_INDEXOF_TAIL = "";
-Blockly.Msg.TEXT_INDEXOF_TOOLTIP = "Returns the index of the first/last occurrence of first text in the second text.  Returns 0 if text is not found.";
-Blockly.Msg.TEXT_ISEMPTY_HELPURL = "https://code.google.com/p/blockly/wiki/Text#Checking_for_empty_text";
-Blockly.Msg.TEXT_ISEMPTY_TITLE = "%1 is empty";
-Blockly.Msg.TEXT_ISEMPTY_TOOLTIP = "Returns true if the provided text is empty.";
-Blockly.Msg.TEXT_JOIN_HELPURL = "https://code.google.com/p/blockly/wiki/Text#Text_creation";
-Blockly.Msg.TEXT_JOIN_TITLE_CREATEWITH = "create text with";
-Blockly.Msg.TEXT_JOIN_TOOLTIP = "Create a piece of text by joining together any number of items.";
-Blockly.Msg.TEXT_LENGTH_HELPURL = "https://code.google.com/p/blockly/wiki/Text#Text_modification";
-Blockly.Msg.TEXT_LENGTH_TITLE = "length of %1";
-Blockly.Msg.TEXT_LENGTH_TOOLTIP = "Returns the number of letters (including spaces) in the provided text.";
-Blockly.Msg.TEXT_PRINT_HELPURL = "https://code.google.com/p/blockly/wiki/Text#Printing_text";
-Blockly.Msg.TEXT_PRINT_TITLE = "print %1";
-Blockly.Msg.TEXT_PRINT_TOOLTIP = "Print the specified text, number or other value.";
-Blockly.Msg.TEXT_PROMPT_HELPURL = "https://code.google.com/p/blockly/wiki/Text#Getting_input_from_the_user";
-Blockly.Msg.TEXT_PROMPT_TOOLTIP_NUMBER = "Prompt for user for a number.";
-Blockly.Msg.TEXT_PROMPT_TOOLTIP_TEXT = "Prompt for user for some text.";
-Blockly.Msg.TEXT_PROMPT_TYPE_NUMBER = "prompt for number with message";
-Blockly.Msg.TEXT_PROMPT_TYPE_TEXT = "prompt for text with message";
-Blockly.Msg.TEXT_TEXT_HELPURL = "https://en.wikipedia.org/wiki/String_(computer_science)";
-Blockly.Msg.TEXT_TEXT_TOOLTIP = "A letter, word, or line of text.";
-Blockly.Msg.TEXT_TRIM_HELPURL = "https://code.google.com/p/blockly/wiki/Text#Trimming_%28removing%29_spaces";
-Blockly.Msg.TEXT_TRIM_OPERATOR_BOTH = "trim spaces from both sides of";
-Blockly.Msg.TEXT_TRIM_OPERATOR_LEFT = "trim spaces from left side of";
-Blockly.Msg.TEXT_TRIM_OPERATOR_RIGHT = "trim spaces from right side of";
-Blockly.Msg.TEXT_TRIM_TOOLTIP = "Return a copy of the text with spaces removed from one or both ends.";
-Blockly.Msg.VARIABLES_DEFAULT_NAME = "item";
-Blockly.Msg.VARIABLES_GET_CREATE_SET = "Create 'set %1'";
-Blockly.Msg.VARIABLES_GET_HELPURL = "https://code.google.com/p/blockly/wiki/Variables#Get";
-Blockly.Msg.VARIABLES_GET_TAIL = "";
-Blockly.Msg.VARIABLES_GET_TITLE = "";
-Blockly.Msg.VARIABLES_GET_TOOLTIP = "Returns the value of this variable.";
-Blockly.Msg.VARIABLES_SET_CREATE_GET = "Create 'get %1'";
-Blockly.Msg.VARIABLES_SET_HELPURL = "https://code.google.com/p/blockly/wiki/Variables#Set";
-Blockly.Msg.VARIABLES_SET_TAIL = "to";
-Blockly.Msg.VARIABLES_SET_TITLE = "set";
-Blockly.Msg.VARIABLES_SET_TOOLTIP = "Sets this variable to be equal to the input.";
-Blockly.Msg.PROCEDURES_DEFRETURN_TITLE = Blockly.Msg.PROCEDURES_DEFNORETURN_TITLE;
-Blockly.Msg.LISTS_GET_SUBLIST_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST;
-Blockly.Msg.LISTS_SET_INDEX_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST;
-Blockly.Msg.PROCEDURES_DEFRETURN_PROCEDURE = Blockly.Msg.PROCEDURES_DEFNORETURN_PROCEDURE;
-Blockly.Msg.VARIABLES_SET_ITEM = Blockly.Msg.VARIABLES_DEFAULT_NAME;
-Blockly.Msg.LISTS_CREATE_WITH_ITEM_TITLE = Blockly.Msg.VARIABLES_DEFAULT_NAME;
-Blockly.Msg.MATH_CHANGE_TITLE_ITEM = Blockly.Msg.VARIABLES_DEFAULT_NAME;
-Blockly.Msg.VARIABLES_GET_ITEM = Blockly.Msg.VARIABLES_DEFAULT_NAME;
-Blockly.Msg.PROCEDURES_DEFRETURN_DO = Blockly.Msg.PROCEDURES_DEFNORETURN_DO;
-Blockly.Msg.LISTS_GET_INDEX_HELPURL = Blockly.Msg.LISTS_INDEX_OF_HELPURL;
-Blockly.Msg.TEXT_CREATE_JOIN_ITEM_TITLE_ITEM = Blockly.Msg.VARIABLES_DEFAULT_NAME;
-Blockly.Msg.CONTROLS_IF_MSG_THEN = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
-Blockly.Msg.LISTS_INDEX_OF_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST;
-Blockly.Msg.PROCEDURES_CALLRETURN_CALL = Blockly.Msg.PROCEDURES_CALLNORETURN_CALL;
-Blockly.Msg.LISTS_GET_INDEX_INPUT_IN_LIST = Blockly.Msg.LISTS_INLIST;
-Blockly.Msg.CONTROLS_FOR_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
-Blockly.Msg.CONTROLS_FOREACH_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
-Blockly.Msg.CONTROLS_IF_IF_TITLE_IF = Blockly.Msg.CONTROLS_IF_MSG_IF;
-Blockly.Msg.CONTROLS_WHILEUNTIL_INPUT_DO = Blockly.Msg.CONTROLS_REPEAT_INPUT_DO;
-Blockly.Msg.CONTROLS_IF_ELSEIF_TITLE_ELSEIF = Blockly.Msg.CONTROLS_IF_MSG_ELSEIF;
-Blockly.Msg.TEXT_APPEND_VARIABLE = Blockly.Msg.VARIABLES_DEFAULT_NAME;
-Blockly.Msg.CONTROLS_IF_ELSE_TITLE_ELSE = Blockly.Msg.CONTROLS_IF_MSG_ELSE;

+ 0 - 2775
support/client/lib/vwf/model/cesium.js

@@ -1,2775 +0,0 @@
-"use strict";
-
-// Copyright 2012 United States Government, as represented by the Secretary of Defense, Under
-// Secretary of Defense (Personnel & Readiness).
-// 
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
-// in compliance with the License. You may obtain a copy of the License at
-// 
-//   http://www.apache.org/licenses/LICENSE-2.0
-// 
-// Unless required by applicable law or agreed to in writing, software distributed under the License
-// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-// or implied. See the License for the specific language governing permissions and limitations under
-// the License.
-
-  
-    
-define( [ "module", 
-          "vwf/model", 
-          "vwf/utility", 
-          "vwf/utility/color", 
-          "vwf/model/cesium/Cesium" 
-        ], 
-
-    function( module, model, utility, Color, Cesium ) {
-
-
-    return model.load( module, {
-
-        // == Module Definition ====================================================================
-
-        // -- initialize ---------------------------------------------------------------------------
-
-        initialize: function( options ) {
-            
-            checkCompatibility.call( this );
-
-            if ( options === undefined ) { options = {}; }
-
-            this.state.scenes = {}; // id => { scene: Cesium.Scene }
-            this.state.nodes = {}; // id => { name: string, cesiumObj:  }
-            this.state.prototypes = {}; 
-            
-            this.state.createImageryProvider = function( options ) {
-                var imageProvider = undefined;
-                if ( options && options.imageryProvider ) {
-                    var url, ext, credit, type, mapStyle, params, layers;
-
-                    if ( !utility.isString( options ) ) {
-                        url = options.imageryProvider.url;
-                        ext = options.imageryProvider.fileExtension;
-                        mapStyle = options.imageryProvider.mapStyle;
-                        credit = options.imageryProvider.credit;
-                        type = options.imageryProvider.type;
-                        params = options.imageryProvider.params;
-                        layers = options.imageryProvider.layers;
-                    } else {
-                        type = options.imageryProvider;     
-                    }
-
-                    switch ( type ) {
-                        
-                        case "bingAerial":
-                            imageProvider = new Cesium.BingMapsImageryProvider({
-                                "url" : url || '//dev.virtualearth.net',
-                                "mapStyle" : mapStyle || Cesium.BingMapsStyle.AERIAL
-                            });
-                            break;
-
-                        case "bingAerialLabel":
-                            imageProvider = new Cesium.BingMapsImageryProvider({
-                                "url" : url || '//dev.virtualearth.net',
-                                "mapStyle" : mapStyle || Cesium.BingMapsStyle.AERIAL_WITH_LABELS
-                            });
-                            break;
-
-                        case "bingRoad":
-                            imageProvider = new Cesium.BingMapsImageryProvider( {
-                                "url": url || '//dev.virtualearth.net',
-                                "mapStyle": mapStyle || Cesium.BingMapsStyle.ROAD
-                            } );                        
-                            break;
-
-                        case "esriWorld":
-                            imageProvider = new Cesium.ArcGisMapServerImageryProvider({
-                                "url" : url || '//services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer',
-                            });                      
-                            break;
-
-                        case "esriStreet":
-                            imageProvider = new Cesium.ArcGisMapServerImageryProvider({
-                                "url" : url || '//server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer'
-                            } );                       
-                            break;
-
-                        case "esriGeo":
-                            imageProvider = new Cesium.ArcGisMapServerImageryProvider({
-                                "url" : url || '//services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer/',
-                                "proxy" : new Cesium.DefaultProxy('/proxy/')
-                            });                      
-                            break;
-
-                        case "openStreet":
-                            imageProvider = new Cesium.OpenStreetMapImageryProvider({});
-                            break;
-
-                        case "mapQuestStreet":
-                            imageProvider = new Cesium.OpenStreetMapImageryProvider({
-                                "url": url || '//otile1.mqcdn.com/tiles/1.0.0/osm/'
-                            });
-                            break;
-
-                        case "stamen":
-                            imageProvider = new Cesium.OpenStreetMapImageryProvider({
-                                "url": url || '//stamen-tiles.a.ssl.fastly.net/watercolor/',
-                                "fileExtension": fileExtension || 'jpg',
-                                "credit": credit || 'Map tiles by Stamen Design, under CC BY 3.0. Data by OpenStreetMap, under CC BY SA.'
-                            });
-                            break;
-
-                        case "naturalEarth":
-                            imageProvider = new Cesium.TileMapServiceImageryProvider({
-                                "url" : url ||  require.toUrl('Assets/Textures/NaturalEarthII')
-                            });
-                            break;
-
-                        case "single":
-                            imageProvider = new Cesium.SingleTileImageryProvider({
-                                "url" : url || require.toUrl('Assets/Textures/NE2_LR_LC_SR_W_DR_2048.jpg')
-                            } );
-                            break;
-
-                        case "usInfrared":
-                            imageProvider = new Cesium.WebMapServiceImageryProvider({
-                                "url" : url || '//mesonet.agron.iastate.edu/cgi-bin/wms/goes/conus_ir.cgi?',
-                                "layers" : layers || 'goes_conus_ir',
-                                "credit" : credit || 'Infrared data courtesy Iowa Environmental Mesonet',
-                                "parameters" : params || {
-                                    "transparent" : 'true',
-                                    "format" : 'image/png'
-                                },
-                                "proxy": new Cesium.DefaultProxy('/proxy/')
-                            });
-                            break;
-
-                        case "usWeather":
-                            imageProvider = new Cesium.WebMapServiceImageryProvider({
-                                "url" : url || '//mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi?',
-                                "layers" : layers || 'nexrad-n0r',
-                                "credit" : credit || 'Radar data courtesy Iowa Environmental Mesonet',
-                                "parameters" : params || {
-                                    "transparent" : 'true',
-                                    "format" : 'image/png'
-                                },
-                                "proxy" : new Cesium.DefaultProxy('/proxy/')
-                            });
-               
-                            break;
-
-                        case "tms":
-                            imageProvider = new Cesium.TileMapServiceImageryProvider({
-                                "url" : url || '../images/cesium_maptiler/Cesium_Logo_Color'
-                            });
-                            break;
-
-                        case "image":
-                            imageProvider = new Cesium.SingleTileImageryProvider({
-                                "url" : url || '../images/Cesium_Logo_overlay.png',
-                                "rectangle" : Cesium.Rectangle.fromDegrees(-115.0, 38.0, -107, 39.75)
-                            });
-                            break;
-
-                        case "grid":
-                            imageProvider = new Cesium.GridImageryProvider();
-                            break;
-
-                        case "tile":
-                            imageProvider = new Cesium.TileCoordinatesImageryProvider();
-                            break;
-
-                    }
-                    options.imageryProvider = imageProvider;
-                }
-                return imageProvider;
-
-            };
-            
-            this.state.createTerrainProvider = function( options ) {
-                var terrainProvider = undefined;
-                if ( options ) {
-                    var type, url, credit, ext;
-
-                    type = utility.isString( options ) ? options : options.type;
-                    url = options.url || undefined;
-                    credit = options.credit || undefined;
-                    ext = options.ext || undefined; 
-
-                    switch ( type ) {
-                        
-                        case "cesium":   // remove if all refences can be found
-                        case "CesiumTerrainProvider":
-                            terrainProvider = new Cesium.CesiumTerrainProvider({
-                                url : url || '//cesiumjs.org/smallterrain',
-                                credit : credit || 'Terrain data courtesy Analytical Graphics, Inc.'
-                            });  
-                            break;
-
-                        case "NaturalEarthII":
-                        case "TileMapServiceImageryProvider":
-                            terrainProvider = new Cesium.TileMapServiceImageryProvider({
-                                url: url || '../vwf/model/Assets/Textures/NaturalEarthII',
-                                fileExtension: ext || 'jpg'
-                            });
-                            break;
-
-                        case "cesiumMesh":
-                            terrainProvider = new Cesium.CesiumTerrainProvider({
-                                url : url || '//cesiumjs.org/stk-terrain/tilesets/world/tiles'
-                            });  
-                            break;
-
-                        case "ArcGisImageServerTerrainProvider":
-                            terrainProvider = new Cesium.ArcGisImageServerTerrainProvider({
-                                url : url || '//elevation.arcgisonline.com/ArcGIS/rest/services/WorldElevation/DTMEllipsoidal/ImageServer',
-                                // sample token : 'KED1aF_I4UzXOHy3BnhwyBHU4l5oY6rO6walkmHoYqGp4XyIWUd5YZUC1ZrLAzvV40pR6gBXQayh0eFA8m6vPg..',
-                                proxy : new Cesium.DefaultProxy('/terrain/')
-                            }); 
-                            break;
-
-                        default:
-                            // tilingScheme - parm 1
-                            // ellipsoid - parm 2
-                            terrainProvider = new Cesium.EllipsoidTerrainProvider();
-                            break;
-
-                    }
-                }
-                return terrainProvider;
-            };
-            this.state.createClock = function( options ) {
-
-            };
-            this.state.createSkyBox = function( options ) {
-
-            };
-            this.state.setSceneMode = function( options ) {
-
-            };
-            this.state.createMapProjection = function( options ) {
-
-            };
-
-
-            // turns on logger debugger console messages 
-            this.debug = {
-                "creation": false,
-                "initializing": false,
-                "parenting": false,
-                "deleting": false,
-                "properties": false,
-                "initProperties": false,
-                "createProperties": false,
-                "setting": false,
-                "getting": false,
-                "prototypes": false
-            };
-       
-        },
-
-
-        // == Model API ============================================================================
-
-        // -- creatingNode ------------------------------------------------------------------------
-        
-        creatingNode: function( nodeID, childID, childExtendsID, childImplementsIDs,
-                                childSource, childType, childIndex, childName, callback ) {
-
-            var childURI = nodeID === 0 ? childIndex : undefined;
-            var appID = this.kernel.application();
-
-            if ( this.debug.creation ) {
-                this.logger.infox( "creatingNode", nodeID, childID, childExtendsID, childImplementsIDs, childSource, childType, childName );
-            }
-
-            var self = this;
-            var kernel = this.kernel;
-
-            var prototypeID = utility.ifPrototypeGetId( appID, this.state.prototypes, nodeID, childID );
-            if ( prototypeID !== undefined ) {
-                
-                if ( this.debug.prototypes ) {
-                    this.logger.infox( "prototype: ", prototypeID );
-                }
-
-                this.state.prototypes[ prototypeID ] = {
-                    parentID: nodeID,
-                    ID: childID,
-                    extendsID: childExtendsID,
-                    implementsID: childImplementsIDs,
-                    source: childSource, 
-                    type: childType,
-                    uri: childURI,
-                    name: childName
-                };
-                return;                
-            }
-            
-            var node = undefined, parentNode, sceneNode;
-            var protos = getPrototypes.call( this, childExtendsID );
-
-            var createNode = function() {
-                return {
-                    parentID: nodeID,
-                    ID: childID,
-                    extendsID: childExtendsID,
-                    implementsIDs: childImplementsIDs,
-                    source: childSource,
-                    type: childType,
-                    name: childName,
-                    loadComplete: callback,
-                    prototypes: protos
-                };
-            }; 
-
-            var createSceneNode = function( id ) {
-                var sNode = createNode();
-                sNode.sceneNode = findSceneNode.call( self, sNode )
-                return sNode;
-            };  
-
-            if ( isCesium.call( this, protos ) ) {
-
-                if ( this.state.scenes[ childID ] === undefined ) {
-                    this.state.scenes[ childID ] = node = createNode();
-                }
-
-            } else if ( isGlobe.call( this, protos ) ) {
-
-                this.state.nodes[ childID ] = node = createNode();
-                parentNode = findParent.call( this, nodeID );
-                if ( parentNode && parentNode.globe ) {
-                    node.cesiumObj = parentNode.globe;
-                    node.cesiumObj.vwfID = childID;
-                    node.terrainProviderValue = "";
-                    node.imageryProviderValue = "";
-                }                
-
-            } else if ( isAtmosphere.call( this, protos ) ) {
-
-                this.state.nodes[ childID ] = node = createNode();
-                parentNode = findParent.call( this, nodeID );
-                if ( parentNode && parentNode.scene ) {
-                    if ( !parentNode.scene.skyAtmosphere ) {
-                        parentNode.scene.skyAtmosphere = new Cesium.SkyAtmosphere();
-                    }
-                    node.cesiumObj = parentNode.scene.skyAtmosphere;
-                    node.cesiumObj.vwfID = childID;
-                }
-
-            } else if ( isSkyBox.call( this, protos ) ) {
-
-                this.state.nodes[ childID ] = node = createNode();
-                parentNode = findParent.call( this, nodeID );
-                if ( parentNode && parentNode.scene ) {
-                    if ( !parentNode.scene.skyBox ) {
-                        var skyBoxBaseUrl = '../vwf/model/Assets/Textures/SkyBox/tycho2t3_80';
-                        parentNode.scene.skyBox = new Cesium.SkyBox({
-                            positiveX : skyBoxBaseUrl + '_px.jpg',
-                            negativeX : skyBoxBaseUrl + '_mx.jpg',
-                            positiveY : skyBoxBaseUrl + '_py.jpg',
-                            negativeY : skyBoxBaseUrl + '_my.jpg',
-                            positiveZ : skyBoxBaseUrl + '_pz.jpg',
-                            negativeZ : skyBoxBaseUrl + '_mz.jpg'
-                        });
-                    }
-                    node.cesiumObj = parentNode.scene.skyBox;
-                    node.cesiumObj.vwfID = childID;
-                } 
-
-
-            } else if ( isSun.call( this, protos ) ) {
-
-                this.state.nodes[ childID ] = node = createNode();
-                parentNode = findParent.call( this, nodeID );
-                if ( parentNode && parentNode.scene ) {
-                    if ( !parentNode.scene.sun ) { 
-                        parentNode.scene.sun = new Cesium.Sun(); 
-                    }
-                    node.cesiumObj = parentNode.scene.sun;
-                    node.cesiumObj.vwfID = childID;
-                } 
-
-            } else if ( isBillboard.call( this, protos ) ) {
-
-                this.state.nodes[ childID ] = node = createSceneNode( childID );
-                parentNode = findParent.call( this, nodeID );
-
-                if ( parentNode && parentNode.cesiumObj instanceof Cesium.Entity ) {
-                    node.cesiumObj = parentNode.cesiumObj.billboard;
-                } else {
-                    var canvas = document.createElement( 'canvas' );
-                    canvas.width = 16;
-                    canvas.height = 16;
-                    var context2D = canvas.getContext( '2d' );
-                    context2D.beginPath();
-                    context2D.arc( 8, 8, 8, 0, Cesium.Math.TWO_PI, true );
-                    context2D.closePath();
-                    context2D.fillStyle = 'rgb(255,255,255)';
-                    context2D.fill();
-
-                    // this is making a collection per billboard, which 
-                    // probably isn't exactly what we want, but without an
-                    // idea of exactly how we'll be using billboards,
-                    // I'm just going to leave this implementation as is
-                    var bbCollection = node.sceneNode.scene.primitives.add( new Cesium.BillboardCollection() );
-
-                    var bb = bbCollection.add( {
-                        "image": canvas,
-                        "imageId": childID,
-                        "color" : Cesium.Color.RED,
-                        "scale" : 1,
-                        "imageIndex": 0
-                    } );
-                    
-                    node.bbCollection = bbCollection; 
-                    node.cesiumObj = bb;
-                    node.cesiumObj.vwfID = childID;
-                    
-                }
-
-            } else if ( isLabel.call( this, protos ) ) {
-
-                this.state.nodes[ childID ] = node = createSceneNode( childID );
-                parentNode = findParent.call( this, nodeID );
-
-                if ( parentNode && parentNode.cesiumObj instanceof Cesium.Entity ) {
-                    node.cesiumObj = parentNode.cesiumObj.label;
-                } else {
-                    var labels = node.sceneNode.scene.primitives.add( new Cesium.LabelCollection() );
-                    var lbl = labels.add( {
-                        "font"      : '10px Helvetica',
-                        "fillColor" : { red : 0.0, blue : 1.0, green : 1.0, alpha : 1.0 },
-                        "outlineColor" : { red : 0.0, blue : 0.0, green : 0.0, alpha : 1.0 },
-                        "outlineWidth" : 2,
-                        "style" : Cesium.LabelStyle.FILL_AND_OUTLINE
-                    } );
-
-                    node.labelCollection = labels; 
-                    node.cesiumObj = lbl;
-                    node.cesiumObj.vwfID = childID;
-                }
-
-            } else if ( isPolylineCollection.call( this, protos ) ) { 
-
-                this.state.nodes[ childID ] = node = createSceneNode( childID );
-
-                node.cesiumObj = new Cesium.PolylineCollection();
-                node.cesiumObj.vwfID = childID;  
-
-            } else if ( isPolyline.call( this, protos ) ) { 
-
-                this.state.nodes[ childID ] = node = createSceneNode( childID );
-                parentNode = findParent.call( this, nodeID );
-
-                if ( parentNode && parentNode.cesiumObj instanceof Cesium.Entity ) {
-                    node.cesiumObj = parentNode.cesiumObj.polyline;
-                } else { 
-                    var primitives = node.sceneNode.scene.primitives;               
-                    if ( parentNode.cesiumObj && parentNode.cesiumObj instanceof Cesium.PolylineCollection ) {
-                        node.polylineCollection = parentNode.cesiumObj;
-                    }
-
-                    if ( node.polylineCollection === undefined ) {
-                        node.polylineCollection = new Cesium.PolylineCollection();
-                    }
-
-                    node.cesiumObj = node.polylineCollection.add( childSource );
-                    if ( !primitives.contains( node.polylineCollection ) ) {
-                        primitives.add( node.polylineCollection );
-                    }
-                    node.cesiumObj.vwfID = childID;
-                }
-            
-
-            } else if ( isGeometry.call( this, protos ) ) { 
-
-                this.state.nodes[ childID ] = node = createSceneNode( childID );
-
-                node.geometry = undefined;
-                node.cesiumObj = undefined;
-                node.primitive = undefined;
-
-            } else if ( isModel.call( this, protos ) ) { 
-
-                this.state.nodes[ childID ] = node = createSceneNode( childID );
-
-                node.cesiumObj = undefined;
-
-                loadAsset( node );
-
-            } else if ( isMaterial.call( this, protos ) ) { 
-
-                this.state.nodes[ childID ] = node = createSceneNode( childID );
-                var parentNode = this.state.nodes[ nodeID ];
-                if ( parentNode && parentNode.cesiumObj ) {
-                    if ( parentNode.cesiumObj.getMaterial ) {
-                        node.cesiumObj = parentNode.cesiumObj.getMaterial();
-                    } else {
-                        node.cesiumObj = parentNode.cesiumObj.material;
-                    }
-                    node.cesiumObj.vwfID = childID;
-                }
-               
-                node.context = undefined;
-
-                // if undefined or the wrong type, create a new material and
-                // set on the parent node 
-                if ( node.cesiumObj === undefined || ( childType && node.cesiumObj.type != childType.type ) ) {
-                    if ( childType && childType.context ) {
-                        node.context = node.scene._context;
-                    }
-                    node.cesiumObj = Cesium.Material.fromType( node.context, childType.type );
-                    if ( parentNode.cesiumObj.setMaterial ) {
-                        parentNode.cesiumObj.setMaterial( node.cesiumObj );
-                    } else {
-                        parentNode.cesiumObj.material = node.cesiumObj;
-                    }
-                }                
-
-            } else if ( isCamera.call( this, protos ) ) {
-                this.state.nodes[ childID ] = node = createSceneNode( childID );
-
-                if ( nodeID === this.kernel.application() && childName === 'camera' ) {
-                    node.cesiumObj = node.sceneNode.scene.camera;
-                } else {
-                    var camera = new Cesium.Camera( canvas );
-                    camera.position = toCartesian3();
-                    camera.direction = Cartesian3.UNIT_Z.negate();
-                    camera.up = Cartesian3.UNIT_Y;
-                    camera.frustum.fovy = CesiumMath.PI_OVER_THREE;
-                    camera.frustum.near = 1.0;
-                    camera.frustum.far = 2.0;  
-                    node.cesiumObj = camera;              
-                }
-                node.cesiumObj.vwfID = childID;
-                
-            } else if ( isDynamicObject.call( this, protos ) ) {
-                this.state.nodes[ childID ] = node = createNode();
-                var sceneNode = findSceneNode.call( this, node );
-                parentNode = findParent.call( this, nodeID );
-
-                if ( parentNode ) {
-                    if ( parentNode.dynObjs ) {
-                        node.cesiumObj = parentNode.dynObjs.getObject( childName );
-                        node.cesiumObj.vwfID = childID;
-                    }
-                }
-              
-            } else if ( isNode3.call( this, protos ) ) {
-                this.state.nodes[ childID ] = node = createNode();
-                var sceneNode = findSceneNode.call( this, node );
-                parentNode = findParent.call( this, nodeID );
-
-                switch ( childType ) {
-                    
-                    case "model/vnd.google-earth.kmz":
-                        break;
-
-                    case "model/vnd.google-earth.kml+xml":
-                        break;
-
-                    case "model/vnd.cesium.czml+xml":
-                        if ( sceneNode && sceneNode.cesiumViewer ) {
-                            
-                            var viewer = sceneNode.cesiumViewer;
-                            var cds = new Cesium.CzmlDataSource();
-                            cds.loadUrl( childSource ).then( function() {
-                                viewer.homeButton.viewModel.command();
-                                var dataClock = cds.getClock();
-                                if( typeof dataClock !== 'undefined' ) {
-                                    dataClock.clone( viewer.clock );
-                                    viewer.timeline.zoomTo( dataClock.startTime, dataClock.stopTime );
-                                }                                
-                            } );
-                            viewer.dataSources.add( cds );
-
-
-                        } else {
-                            node.dynObjs = new Cesium.DynamicObjectCollection();
-
-                            // Create the standard CZML visualizer collection
-                            node.visualizers = Cesium.VisualizerCollection.createCzmlStandardCollection( sceneNode.scene, node.dynObjs );
-
-                            // Process the CZML, which populates the collection with DynamicObjects
-                            Cesium.processCzml( childSource, node.dynObjs );
-
-                            //// Figure out the time span of the data
-                            //var availability = dynObjs.computeAvailability();
-
-                            //// Set the clock range
-                            //clock.startTime = availability.start.clone();
-                            //clock.currentTime = availability.start.clone();
-                            //clock.stopTime = availability.stop.clone();
-                            //clock.clockRange = Cesium.ClockRange.LOOP_STOP;
-                        }
-                        break;
-
-                    default:
-                        break;
-                }
-                
-            }
-
-            // If we do not have a load a model for this node, then we are almost done, so we can update all
-            // the driver properties w/ the stop-gap function below.
-            // Else, it will be called at the end of the assetLoaded callback
-            //if ( ! ( childType == "model/vnd.collada+xml" || 
-            //         childType == "model/vnd.osgjs+json+compressed") )
-            //    notifyDriverOfPrototypeAndBehaviorProps();
-
-            // Since prototypes are created before the object, it does not get "setProperty" updates for
-            // its prototype (and behavior) properties.  Therefore, we cycle through those properties to
-            // notify the drivers of the property values so they can react accordingly
-            // TODO: Have the kernel send the "setProperty" updates itself so the driver need not
-            // NOTE: Identical code exists in GLGE, and Threejs drivers, so if an change is necessary, it should be made
-            //       there, too
-            function notifyDriverOfPrototypeAndBehaviorProps() {
-                var ptPropValue;
-                var protos = getPrototypes.call( self, childExtendsID );
-                protos.forEach( function( prototypeID ) {
-                    for ( var propertyName in kernel.getProperties( prototypeID ) ) {
-                        //console.info( " 1    getting "+propertyName+" of: " + childExtendsID  );
-                        ptPropValue = kernel.getProperty( childExtendsID, propertyName );
-                        if ( ptPropValue !== undefined && ptPropValue !== null && childID !== undefined && childID !== null) {
-                            //console.info( " 1    setting "+propertyName+" of: " + childID + " to " + ptPropValue );
-                            self.settingProperty( childID, propertyName, ptPropValue );
-                        }
-                    }
-                } );
-                childImplementsIDs.forEach( function( behaviorID ) {
-                    for ( var propertyName in kernel.getProperties( behaviorID ) ) {
-                        //console.info( "     2    getting "+propertyName+" of: " + behaviorID  );
-                        ptPropValue = kernel.getProperty( behaviorID, propertyName );
-                        if ( ptPropValue !== undefined && ptPropValue !== null && childID !== undefined && childID !== null) {
-                            //console.info( "     2    setting "+propertyName+" of: " + childID + " to " + ptPropValue );
-                            self.settingProperty( childID, propertyName, ptPropValue );
-                        }
-                    }
-                } );
-            };
-
-        },
-
-        initializingNode: function( nodeID, childID, childExtendsID, childImplementsIDs,
-            childSource, childType, childIndex, childName ) {
-
-            if ( this.debug.initializing ) {
-                this.logger.infox( "initializingNode", nodeID, childID, childExtendsID, childImplementsIDs, childSource, childType, childName );
-            }
-
-            // if ( this.state.nodes[ childID ] ) {
-            //     var node = this.state.nodes[ childID ];
-
-            //     if ( node.geometryType !== undefined ) {
-            //         createGeometryPrimitive( childID, undefined );
-            //     }
-
-            // }
-        },
-         
-        // -- deletingNode -------------------------------------------------------------------------
-
-        deletingNode: function( nodeID ) {
-            
-            if ( this.debug.deleting ) {
-                this.logger.infox( "deletingNode", nodeID );
-            }
-
-            if ( this.state.nodes[ nodeID ] ) {
-                var node = this.state.nodes[ nodeID ];
-                var scene = this.state.scenes[ node.sceneID ];
-                
-                var sceneNode = findSceneNode.call( this, node );
-                
-                if ( node.cesiumObj ) {
-                    if ( node.cesiumObj instanceof Cesium.Billboard ) {
-                        if ( node.bbCollection ) {
-                            node.bbCollection.remove( node.cesiumObj );
-                            if ( node.bbCollection.getLength() == 0 ) {
-                                sceneNode.scene.primitives.remove( node.bbCollection );
-                            }
-                            node.bbCollection = undefined;
-                            node.cesiumObj = undefined;
-                        }
-                        node.cesiumObj = undefined;
-                    } else if ( node.cesiumObj instanceof Cesium.Label ) {
-                        if ( node.labelCollection ) {
-                            node.labelCollection.remove( node.cesiumObj );
-                            if ( node.labelCollection.getLength() == 0 ) {
-                                sceneNode.scene.primitives.remove( node.labelCollection );
-                            }
-                            node.labelCollection = undefined;
-                            node.cesiumObj = undefined;
-                        }
-                        node.cesiumObj = undefined;
-                    } else if ( node.cesiumObj instanceof Cesium.Polyline ) {
-                        var parentNode = this.state.nodes[ node.parentID ]; 
-                        if ( parentNode ) {
-                            if ( parentNode.cesiumObj instanceof Cesium.PolylineCollection ) {
-                                // this should work, but there's an error in Cesium
-                                // when an object is removed the member isn't deleted
-                                // then later when the collection is removed, the _polylines
-                                // var has a series of null references
-                                //parentNode.cesiumObj.remove( node.cesiumObj );
-                                node.cesiumObj = undefined;
-                            }
-                        }
-                    } else if ( node.cesiumObj instanceof Cesium.PolylineCollection ) {
-                        sceneNode.scene.primitives.remove( node.cesiumObj );
-                        node.cesiumObj = undefined;
-                    }
-                }
-
-
-
-                delete this.state.nodes[ nodeID ];
-            }
-        },
-
-        // -- addingChild ------------------------------------------------------------------------
-        
-        //addingChild: function( nodeID, childID, childName ) {
-        //},
-
-        // -- movingChild ------------------------------------------------------------------------
-        
-        //movingChild: function( nodeID, childID, childName ) {
-        //},
-
-        // -- removingChild ------------------------------------------------------------------------
-        
-        //removingChild: function( nodeID, childID, childName ) {
-        //},
-
-        // -- creatingProperty ---------------------------------------------------------------------
-
-        creatingProperty: function( nodeID, propertyName, propertyValue ) {
-            var value = undefined;
-
-            if ( this.debug.properties || this.debug.createProperties) {
-                this.logger.infox( "C === creatingProperty ", nodeID, propertyName, propertyValue );
-            }
-
-            if ( utility.validObject( propertyValue ) ) {
-                var node = this.state.nodes[ nodeID ];
-                if ( node === undefined ) node = this.state.scenes[ nodeID ];
-                if ( node !== undefined ) {
-                    switch ( propertyName ) {
-                        default:
-                            value = this.settingProperty( nodeID, propertyName, propertyValue );
-                            break;
-                    }                  
-                }
-            }
-
-            return value;
-        },
-
-        // -- initializingProperty -----------------------------------------------------------------
-
-        initializingProperty: function( nodeID, propertyName, propertyValue ) {
-
-            var value = undefined;
-
-            if ( this.debug.properties || this.debug.initProperties ) {
-                this.logger.infox( "  I === initializingProperty ", nodeID, propertyName, propertyValue );
-            }
-
-            if ( utility.validObject( propertyValue ) ) {
-                var node = this.state.nodes[ nodeID ];
-                if ( node === undefined ) node = this.state.scenes[ nodeID ];
-                
-                if ( node !== undefined ) {
-                    switch ( propertyName ) {
-                        
-                        case "geometryDefinition":
-                            var geoDef = JSON.parse( JSON.stringify( propertyValue ) );
-                            var geoObjects = createGeometryPrimitive( nodeID, geoDef );
-
-                            if ( geoObjects !== undefined ) {
-                                node.geometry = geoObjects.geometry;
-                                node.cesiumObj = geoObjects.geometryInstance;
-                                node.primitive = geoObjects.primitive;
-
-                                if ( node.cesiumObj !== undefined ) {
-                                    node.sceneNode.scene.primitives.add( node.primitive );    
-                                }                    
-                            }
-                            break;
-
-
-                        default:
-                            value = this.settingProperty( nodeID, propertyName, propertyValue );
-                            break;
-                    }  
-                }
-            }
-
-            return value;
-            
-        },
-
-        // -- settingProperty ----------------------------------------------------------------------
-
-        settingProperty: function( nodeID, propertyName, propertyValue ) {
-
-            var value = propertyValue;
-            var node = this.state.nodes[ nodeID ]; 
-
-            if ( this.debug.properties || this.debug.setting ) {
-                this.logger.infox( "    S === settingProperty ", nodeID, propertyName, propertyValue );
-            }
-
-            if ( node ) {
-
-                if ( utility.validObject( propertyValue ) ) {
-
-                    switch ( propertyName ) {
-
-                        case "visible":
-                            if ( node.cesiumObj.show !== undefined ) {
-                                node.cesiumObj.show = Boolean( propertyValue );
-                            } else if ( node.cesiumObj.setShow ) {
-                                node.cesiumObj.setShow( Boolean( propertyValue ) );
-                            }
-                            break;
-
-                        case "position":
-                            if ( node.cesiumObj === undefined ) {
-                                
-                                if ( node.geometryType !== undefined ) {
-                                    if ( node.properties !== undefined ) {
-                                        node.properties[ propertyName ] = propertyValue;
-                                    } else {
-                                        // already created need to modify the existing object
-                                    }
-                                }
-                            } else {
-
-                                if ( node.cesiumObj.position !== undefined ) {
-                                    node.cesiumObj.position = toCartesian3( propertyValue );                                
-                                    if ( node.cesiumObj instanceof Cesium.Camera ) {
-                                        this.state.cameraInfo.position = node.cesiumObj.position;
-                                    }
-                                } else if ( node.cesiumObj.setPosition ) {
-                                    var pos = toCartesian3( propertyValue );
-                                    node.cesiumObj.setPosition( pos );
-                                    this.state.cameraInfo.isInitialized();
-                                }
-                            }
-                            break;
-                       
-                        case "positions":
-                        case "radius":
-                        case "length": 
-                        case "topRadius": 
-                        case "bottomRadius":                        
-                        case "dimensions":
-                            if ( node.cesiumObj === undefined ) {
-                                
-                                if ( node.properties !== undefined ) {
-                                    node.properties[ propertyName ] = propertyValue;
-                                } else {
-                                    // already created need to modify the existing object
-                                }
-
-                            }
-                            break;
-
-                        case "pixelOffset":
-                            node.cesiumObj.pixelOffset = toCartesian2( propertyValue );
-                            break;
-
-                        case "eyeOffset":
-                            node.cesiumObj.eyeOffset = toCartesian3( propertyValue );
-                            break;
-
-                        case "horizontalOrigin":
-                            switch ( propertyValue ) {
-                                case "left":
-                                    node.cesiumObj.horizontalOrigin = Cesium.HorizontalOrigin.LEFT;
-                                    break;
-                                case "right":
-                                    node.cesiumObj.horizontalOrigin = Cesium.HorizontalOrigin.RIGHT;
-                                    break;
-                                case "center":
-                                    node.cesiumObj.horizontalOrigin = Cesium.HorizontalOrigin.CENTER;
-                                    break;
-                            }
-                            break;
-
-                        case "verticalOrigin": 
-                            switch ( propertyValue ) {
-                                case "top":
-                                    node.cesiumObj.verticalOrigin = Cesium.VerticalOrigin.TOP;
-                                    break;
-                                case "bottom":
-                                    node.cesiumObj.verticalOrigin = Cesium.VerticalOrigin.BOTTOM;
-                                    break;
-                                case "center":
-                                    node.cesiumObj.verticalOrigin = Cesium.VerticalOrigin.CENTER;
-                                    break;
-                            }
-                            break;
-
-                        case "scale":
-                            node.cesiumObj.scale = parseFloat( propertyValue );;
-                            break;
-
-                        case "imageIndex": 
-                            var val = Number( propertyValue );
-                            node.cesiumObj.setImageIndex( val );
-                            break;
-
-                        case "color": 
-                            var vwfColor = new utility.color( propertyValue );
-                            if ( vwfColor ) {
-                                if ( node.cesiumObj !== undefined ) {                            
-                                    node.cesiumObj._color.red = vwfColor.red() / 255;
-                                    node.cesiumObj._color.green = vwfColor.green() / 255;
-                                    node.cesiumObj._color.blue = vwfColor.blue() / 255;
-                                    node.cesiumObj._color.alpha = vwfColor.alpha();
-                                } else if ( node.geometryType !== undefined ) {
-
-                                    if ( node.properties !== undefined ) {
-                                        node.properties[ propertyName ] = propertyValue;
-                                    } else {
-                                        // already created need to modify the existing object
-                                    }
-                                }
-                            } 
-                            break;
-
-                        case "font":
-                            if ( node.cesiumObj instanceof Cesium.Label ) {
-                                node.cesiumObj.font = propertyValue;    
-                            }
-                            break;
-
-                        case "fillColor":
-                            if ( node.cesiumObj instanceof Cesium.Label ) {
-                                var vwfColor = new utility.color( propertyValue );
-                                if ( vwfColor ) {                            
-                                    node.cesiumObj.fillColor.red = vwfColor.red() / 255;
-                                    node.cesiumObj.fillColor.green = vwfColor.green() / 255;
-                                    node.cesiumObj.fillColor.blue = vwfColor.blue() / 255;
-                                    node.cesiumObj.fillColor.alpha = vwfColor.alpha();
-                                }                                
-                            }                        
-                            break;
-
-                        case "style":
-                            if ( node.cesiumObj instanceof Cesium.Label ) {
-                                switch ( propertyValue ) {
-                                    case "fill":
-                                        node.cesiumObj.style = Cesium.LabelStyle.FILL;
-                                        break;
-                                    case "filloutline":
-                                        node.cesiumObj.style = Cesium.LabelStyle.FILL_AND_OUTLINE;
-                                        break;
-                                    case "outline":
-                                        node.cesiumObj.style = Cesium.LabelStyle.OUTLINE;
-                                        break;
-                                }   
-                            }    
-                            break;
-
-                        case "outlineColor":
-                            if ( node.cesiumObj instanceof Cesium.Label ) {
-                                var vwfColor = new utility.color( propertyValue );
-                                if ( vwfColor ) {  
-                                    node.cesiumObj.outlineColor.red = vwfColor.red() / 255;
-                                    node.cesiumObj.outlineColor.green = vwfColor.green() / 255;
-                                    node.cesiumObj.outlineColor.blue = vwfColor.blue() / 255;
-                                    node.cesiumObj.outlineColor.alpha = vwfColor.alpha();
-                                }                                
-                            }  
-                            break;
-
-                        case "outlineWidth":
-                            if ( node.cesiumObj instanceof Cesium.Label ) {
-                                node.cesiumObj.outlineWidth = Number( propertyValue );    
-                            }    
-                            break;
-
-                        case "text":
-                            if ( node.cesiumObj instanceof Cesium.Label ) {
-                                node.cesiumObj.text = propertyValue;    
-                            }    
-                            break;
-
-
-                        case "image":
-                            if ( node.cesiumObj instanceof Cesium.Billboard ) {
-                                // set and image on the billboard
-                                // TODO
-                            }
-                            break;
-
-                        case "direction":
-                            if ( node.cesiumObj instanceof Cesium.Camera ) {
-                                node.cesiumObj.direction = toCartesian3( propertyValue );
-                                this.state.cameraInfo.direction = node.cesiumObj.direction;
-                                this.state.cameraInfo.isInitialized();
-                            }
-                            break;
-
-                        case "fovy":
-                            if ( node.cesiumObj instanceof Cesium.Camera && node.cesiumObj.frustum ) {
-                                node.cesiumObj.frustum.fovy = parseFloat( propertyValue );
-                            }                    
-                            break;
-
-                        case "near":
-                            if ( node.cesiumObj instanceof Cesium.Camera && node.cesiumObj.frustum ) {
-                                node.cesiumObj.frustum.near = parseFloat( propertyValue );
-                            }
-                            break;
-
-                        case "far":
-                            if ( node.cesiumObj instanceof Cesium.Camera && node.cesiumObj.frustum ) {
-                                node.cesiumObj.frustum.far = parseFloat( propertyValue );
-                            }
-                            break;
-
-                        case "right":
-                            if ( node.cesiumObj instanceof Cesium.Camera ) {
-                                node.cesiumObj.right = toCartesian3( propertyValue );
-                                this.state.cameraInfo.right = node.cesiumObj.right;
-                                this.state.cameraInfo.isInitialized();
-                            }                    
-                            break;
-
-                        case "transform":
-                            if ( node.cesiumObj instanceof Cesium.Camera ) {
-                                node.cesiumObj.transform = arrayToMatrix4( propertyValue );
-                            } 
-                            break;
-
-                        case "modelMatrix":
-                            if ( node.cesiumObj !== undefined ) {
-                                if ( node.cesiumObj.hasOwnProperty( propertyName ) ) {
-                                    node.cesiumObj.modelMatrix = arrayToMatrix4( propertyValue );
-                                }
-                            }
-                            break;
-
-                        case "up":
-                            if ( node.cesiumObj instanceof Cesium.Camera ) {
-                                node.cesiumObj.up = toCartesian3( propertyValue );
-                                this.state.cameraInfo.up = node.cesiumObj.up;
-                                this.state.cameraInfo.isInitialized();
-                            }
-                            break;
-
-                        case "fabric":
-                            if ( node.cesiumObj instanceof Cesium.Material ) {
-                                // this parameter is the context, which I'm not exactly
-                                // sure what to do about that right now
-                                node.cesiumObj.material = new Cesium.Material( undefined, propertyValue );
-                                
-                            }
-                            value = undefined;
-                            break;
-                        case "type":
-                            if ( node.cesiumObj instanceof Cesium.Material ) {
-                                // best to set the type in the fabric
-
-                                // switch ( propertyValue ) {
-                                //     case "Color":
-                                //     case "Image":
-                                //     case "DiffuseMap":
-                                //     case "AlphaMap":
-                                //     case "SpecularMap":
-                                //     case "EmissionMap":
-                                //     case "BumpMap":
-                                //     case "NormalMap":
-                                //     case "Reflection":
-                                //     case "Refraction":
-                                //     case "Fresnel":
-                                //     case "Brick":
-                                //     case "Wood":
-                                //     case "Asphalt":
-                                //     case "Cement":
-                                //     case "Grass":
-                                //     case "Grid":
-                                //     case "Stripe":
-                                //     case "Checkerboard":
-                                //     case "Dot":
-                                //     case "Tiedye":
-                                //     case "Facet":
-                                //     case "Blob":
-                                //     case "Water":
-                                //     case "RimLighting":
-                                //     case "erosion":
-                                //     case "Fade":
-                                //     case "PolylineArrow":
-                                //     case "PolylineGlow":
-                                //     case "PolylineOutline":
-                                //     default:
-                                //         node.cesiumObj = Cesium.Material.fromType( undefined, propertyValue );
-                                //         break;
-                                // }
-
-                                if ( node.cesiumObj.type != propertyValue ) {
-                                    node.cesiumObj.type = propertyValue;    
-                                }
-                            }
-                            break;
-
-                        case "uniforms":
-                            if ( node.cesiumObj instanceof Cesium.Material ) {
-                                
-                                // the uniforms properties are based upon the material type
-                                // check the Material spec at //cesium.agi.com/refdoc.html
-                                // for more information
-                                var uni = node.cesiumObj.uniforms;
-                                if ( uni ) {
-                                    if ( propertyValue instanceof Object ) {
-                                        for( var prop in propertyValue ) {
-                                            switch( prop ) {
-                                                
-                                                case "color":
-                                                    uni.color = cesiumColor( propertyValue[ prop ] )
-                                                    break;
-
-                                                default:
-                                                    uni[ prop ] = propertyValue[ prop ];
-                                                    break;
-
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                            break;
-
-                        case "shaderSource":
-                            if ( node.cesiumObj instanceof Cesium.Material ) {
-                                node.cesiumObj.shaderSource = propertyValue;
-                            }
-                            break;
- 
-                        case "positions":
-                            if ( node.cesiumObj instanceof Cesium.Polyline || node.cesiumObj instanceof Cesium.Geometry ) {
-                                var points = [];
-                                if ( propertyValue instanceof Array ) {
-                                    var len = propertyValue.length;
-                                    for ( var i = 0; i < len; i++ ) {
-                                        points.push( toCartesian3( propertyValue ) );
-                                    }
-                                }
-                                node.cesiumObj.positions = points;
-                            }
-                            break;
-
-                        case "width":
-                            if ( node.cesiumObj instanceof Cesium.Polyline ) {
-                                node.cesiumObj.width = Number( propertyValue );
-                            }
-                            break;
-                        
-                        // case "extent":
-                        //     if ( node.cesiumObj instanceof Cesium.Polygon ) {
-                        //         var pv = propertyValue;
-                        //         if ( pv instanceof Array ) {
-                        //             switch ( pv.length ) {
-                        //                 case 4:
-                        //                     node.cesiumObj.configureExtent( new Cesium.Extent( pv[0], pv[1], pv[2], pv[3] ) );
-                        //                     break;
-                        //                 case 6:
-                        //                     node.cesiumObj.configureExtent( new Cesium.Extent( pv[0], pv[1], pv[2], pv[3], pv[4], pv[5] ) );
-                        //                     break;
-
-                        //             }
-                        //         }
-                        //     }
-                        //     value = undefined;
-                        //     break;
-
-                        case "height":
-                            if ( node.cesiumObj === undefined ) {
-                                if ( node.properties !== undefined ) {
-                                    node.properties[ propertyName ] = propertyValue;
-                                }
-                            } else if ( node.cesiumObj instanceof Cesium.Polygon ) {
-                                node.cesiumObj.height = Number( propertyValue );
-                            }
-                            break; 
-
-                        case "hierarchy":
-                            if ( node.cesiumObj instanceof Cesium.Polygon ) {
-                                node.cesiumObj.configureFromPolygonHierarchy( propertyValue );
-                            }
-                            break; 
-
-                        case "granularity":
-                            if ( node.cesiumObj instanceof Cesium.Polygon ) {
-                                node.cesiumObj.granularity = Number( propertyValue );
-                            }
-                            break; 
-
-                        case "availability":
-                            if ( node.cesiumObj instanceof Cesium.Entity ) {
-                                var start = propertyValue.start;
-                                var stop = propertyValue.stop;
-                                var startIncluded = propertyValue.isStartIncluded ? propertyValue.isStartIncluded : true;
-                                var stopIncluded = propertyValue.isStopIncluded ? propertyValue.isStopIncluded : true;
-
-                                if ( start && stop ) {
-                                    node.cesiumObj.availability = new TimeInterval( start, stop, startIncluded, stopIncluded );
-                                }
-                            }
-                            break;
-                        //case "orientation":
-                        //    if ( node.cesiumObj instanceof Cesium.Entity ) {
-                        //    
-                        //    }
-                        //    break;
-                        //case "point":
-                        //    if ( node.cesiumObj instanceof Cesium.Entity ) {
-                        //    
-                        //    }
-                        //    break;
-                        //case "vector":
-                        //    if ( node.cesiumObj instanceof Cesium.Entity ) {
-                        //    
-                        //    }
-                        //    break;
-                        //case "vertexPositions":
-                        //    if ( node.cesiumObj instanceof Cesium.Entity ) {
-                        //    
-                        //    }
-                        //    break;
-
-
-
-                        case "viewFrom":
-                            if ( node.cesiumObj instanceof Cesium.Entity ) {
-                               node.cesiumObj.viewFrom = toCartesian3( propertyValue );
-                            }
-                            break;
-
-                        case "northPoleColor":
-                            if ( node.cesiumObj instanceof Cesium.Globe ) {
-                                var vwfColor = new utility.color( propertyValue );
-                                if ( vwfColor ) {                            
-                                    node.cesiumObj.northPoleColor = vwfColorToCartesian3( vwfColor );
-                                }
-                            } 
-                            break;
-
-                        case "southPoleColor":
-                            if ( node.cesiumObj instanceof Cesium.Globe ) {
-                                var vwfColor = new utility.color( propertyValue );
-                                if ( vwfColor ) {                            
-                                    node.cesiumObj.southPoleColor = vwfColorToCartesian3( vwfColor );
-                                }
-                            } 
-                            break;
-                            
-                        case "logoOffset":
-                            if ( node.cesiumObj instanceof Cesium.Globe ) {
-                                node.cesiumObj.logoOffset = toCartesian2( propertyValue );
-                            }
-                            break;
-
-                        case "tileCacheSize":
-                            if ( node.cesiumObj instanceof Cesium.Globe ) {
-                                node.cesiumObj.tileCacheSize = Number( propertyValue );
-                            }
-                            break;  
-
-                        case "oceanNormalMapUrl":
-                            if ( node.cesiumObj instanceof Cesium.Globe ) {
-                                node.cesiumObj.oceanNormalMapUrl =  propertyValue;
-                            }
-                            break;
-
-                        case "depthTestAgainstTerrain":
-                            if ( node.cesiumObj instanceof Cesium.Globe ) {
-                                node.cesiumObj.depthTestAgainstTerrain = Boolean( propertyValue );
-                            }
-                            break;
-
-                        case "terrainProvider":
-                            if ( node.cesiumObj instanceof Cesium.Globe ) {
-                                
-                                var requestedType = propertyValue.type || propertyValue.terrainProvider || propertyValue;
-                                if ( requestedType === node.terrainProviderValue ) {
-                                    break;
-                                }
-
-                                node.terrainProvider = this.state.createTerrainProvider( propertyValue );
-                               
-                                node.cesiumObj.depthTestAgainstTerrain = ( node.terrainProvider !== undefined );
-
-                                if ( node.terrainProvider !== undefined ) {
-                                    node.terrainProviderValue = requestedType;
-                                    node.cesiumObj.terrainProvider = node.terrainProvider;
-                                }
-                            }
-                            value = undefined;
-                            break;
-
-
-
-                        default:
-                            value = undefined;
-                            break;
-
-                    }
-                } else {
-                    value = undefined;    
-                }
-
-
-            } else if ( this.state.scenes[ nodeID ] ) {
-                
-                node = this.state.scenes[ nodeID ]; 
-                var scene = node.scene;
-
-                if ( ( node.cesiumWidget !== undefined || scene.globe !== undefined ) && utility.validObject( propertyValue ) ) {
-
-                    switch ( propertyName ) {
-
-                        case "clientControl":
-                            this.state.clientControl = propertyValue;
-                            break;
-
-                        case "cameraViewData":
-                            if ( this.kernel.client() != this.kernel.moniker() ) {
-                                var camera = scene._camera;
-                                if ( propertyValue.direction ) {
-                                    camera.direction = toCartesian3( propertyValue.direction );
-                                }
-                                if ( propertyValue.position ) { 
-                                    camera.position = toCartesian3( propertyValue.position );
-                                }
-                                if ( propertyValue.up ) { 
-                                    camera.up = toCartesian3( propertyValue.up );
-                                }
-                                if ( propertyValue.right ) {
-                                    camera.right = toCartesian3( propertyValue.right );
-                                }
-                                this.state.cameraInfo.getCurrent( camera );
-                            }
-                            break;
-
-                        case "imageryProvider":
-                            var requestedType = propertyValue.type || propertyValue.terrainProvider;
-                            if ( node.imageryProviderValue === requestedType ) {
-                                return;
-                            }
-                
-                            node.imageProvider = this.state.createImageryProvider ( { 
-                                "imageryProvider": propertyValue
-                            } );                            
-
-                            if ( node.imageProvider !== undefined ) {
-                                scene.globe.imageryLayers().addImageryProvider( node.imageProvider );
-                                node.imageryProviderValue = requestedType;
-                            }
-                            value = undefined;
-                            break;
-
-                        case "renderStyle":
-                            // using the Cesium.Widget
-                            if ( node.cesiumWidget ) {
-                                
-                                var currentRS = this.gettingProperty( nodeID, propertyName );
-                                if ( currentRS != propertyValue ) {
-                                    switch ( propertyValue ) {
-                                        case "3D":
-                                            node.cesiumWidget._transitioner.to3D();
-                                            break;
-                                        case "2D":
-                                            node.cesiumWidget._transitioner.to2D();
-                                            break;
-                                        case "2.5D":
-                                            node.cesiumWidget._transitioner.toColumbusView();
-                                            break;
-                                    }
-                                }
-                            } else if ( node.transitioner ) {
-                                switch ( propertyValue ) {
-                                    case "3D":
-                                        node.transitioner.morphTo3D();
-                                        break;
-                                    case "2D":
-                                        node.transitioner.morphTo2D();
-                                        break;
-                                    case "2.5D":
-                                        node.transitioner.morphToColumbusView();
-                                        break;
-                                }
-                            }
-                            value = undefined;
-                            break;
-
-                        case "backgroundColor":
-
-                            if( node.scene ) {
-                                node.scene.backgroundColor = cesiumColor( propertyValue );
-                            }
-                            break;
-
-                        case "enableLook": 
-                            if( node.scene ) {
-                                var controller = node.scene.screenSpaceCameraController;
-                                if ( controller ) {
-                                    controller.enableLook = Boolean( propertyValue );
-                                }
-                            }
-                            break;
-
-                        case "enableRotate": 
-                            if( node.scene ) {
-                                var controller = node.scene.screenSpaceCameraController;
-                                if ( controller ) {
-                                    controller.enableRotate = Boolean( propertyValue );
-                                }
-                            }
-                            break;
-
-                        case "enableTilt":
-                            if( node.scene ) {
-                                var controller = node.scene.screenSpaceCameraController;
-                                if ( controller ) {
-                                    controller.enableTilt = Boolean( propertyValue );
-                                }
-                            }
-                            break; 
-
-                        case "enableTranslate":
-                            if( node.scene ) {
-                                var controller = node.scene.screenSpaceCameraController;
-                                if ( controller ) {
-                                    controller.enableTranslate = Boolean( propertyValue );
-                                }
-                            } 
-                            break;
-
-                        case "enableZoom": 
-                            if( node.scene ) {
-                                var controller = node.scene.screenSpaceCameraController;
-                                if ( controller ) {
-                                    controller.enableZoom = Boolean( propertyValue );
-                                }
-                            }
-                            break;
-
-
-                        case "clientControl": //
-                            // propertyValue.event is being ignored 
-                            if ( this.state.clientControl.locked == false ) {
-
-                                if ( this.state.clientControl.controller != propertyValue.controller ) {
-                                    // switching controllers, disable all non-controllers
-                                    if ( propertyValue.controller != this.kernel.moniker() ) {
-                                        this.state.mouse.enable( false );
-                                    }
-                                }
-
-                                // new client in control
-                                this.state.clientControl = propertyValue;
-
-                            } else if ( !propertyValue.locked ) {
-                                // leave the controller set, but update locked 
-                                // this will allow the camera to keep moving by the 
-                                // current controller
-                                if ( this.state.clientControl.controller == propertyValue.controller ) {
-                                    this.state.clientControl.locked = false;
-                                    this.state.mouse.enable( true );
-                                }
-                            } else {
-                                console.info( "state.clientControl ignoring:{ event: " + propertyValue.event + ", controller: " + propertyValue.controller + ", locked: " + propertyValue.locked + " }" );
-                            }
-
-                            break;
-
-                        default:
-                            value = undefined;
-                            break;
-
-                    }
-                } else {
-                    value = undefined;
-                }
-            } else {
-                value = undefined;
-            }
-
-            return value;
-        },
-
-        // -- gettingProperty ----------------------------------------------------------------------
-
-        gettingProperty: function( nodeID, propertyName, propertyValue ) {
-
-            var node = this.state.nodes[ nodeID ]; 
-            if( !node ) node = this.state.scenes[ nodeID ]; 
-            var value = undefined;
-
-            if ( this.debug.properties || this.debug.getting ) {
-                this.logger.infox( "   G === gettingProperty ", nodeID, propertyName, propertyValue );
-            }
-
-            if( !node ) return undefined;
-
-            switch ( propertyName ) {
-
-                case "visible":
-                    if ( node.cesiumObj ) {
-                        if ( node.cesiumObj.getShow ) {
-                            value = node.cesiumObj.getShow();
-                        } else {
-                            value = node.cesiumObj.show;
-                        }
-                    }
-                    break;
-                case "position":
-                    if ( node.cesiumObj ) {
-                        var pos = node.cesiumObj.position;
-                        if ( pos ) {
-                            value = [ pos.x, pos.y, pos.z ];
-                        }
-                    }
-                    break;
-
-                case "pixelOffset":
-                    if ( node.cesiumObj ) {
-                        var pos = node.cesiumObj.pixelOffset;
-                        value = [ pos.x, pos.y ];
-                    }
-                    break;
-
-                case "eyeOffset":
-                    if ( node.cesiumObj ) {
-                        var pos = node.cesiumObj.eyeOffset;
-                        value = [ pos.x, pos.y, pos.z ];
-                    }
-                case "horizontalOrigin":
-                    if ( node.cesiumObj ) {
-                        switch ( node.cesiumObj.horizontalOrigin ) {
-                            case Cesium.HorizontalOrigin.LEFT:
-                                value = "left";
-                                break;
-                            case Cesium.HorizontalOrigin.RIGHT:
-                                value = "right";
-                                break;
-                            case Cesium.HorizontalOrigin.CENTER:
-                                value = "center";
-                                break;
-                        }
-                    }
-                    break;
-
-                case "verticalOrigin": 
-                    if ( node.cesiumObj ) {
-                        switch ( node.cesiumObj.verticalOrigin ) {
-                            case Cesium.VerticalOrigin.TOP:
-                                value = "top";
-                                break;
-                            case Cesium.VerticalOrigin.BOTTOM:
-                                value = "bottom";
-                                break;
-                            case Cesium.VerticalOrigin.CENTER:
-                                value = "center";
-                                break;
-                        }
-                    }
-                    break;
-
-                case "scale":
-                    if ( node.cesiumObj ) {
-                        value = node.cesiumObj.scale;
-                    }
-                    break;
-
-                case "imageIndex": 
-                    if ( node.cesiumObj ) {
-                        value = node.cesiumObj.imageIndex;
-                    }
-                    break;
-
-                case "color": 
-                    if( node.cesiumObj && node.cesiumObj._color ) {
-                        var clr = node.cesiumObj._color;
-                        if ( clr.alpha == 1 ) {
-                            value = "rgb("+(clr.red*255)+","+(clr.green*255)+","+(clr.blue*255)+")";
-                        } else {
-                            value = "rgba("+(clr.red*255)+","+(clr.green*255)+","+(clr.blue*255)+","+clr.alpha+")";
-                        }
-                    }
-                    break;
-
-                case "font":
-                    if ( node.cesiumObj instanceof Cesium.Label ) {
-                        value = node.cesiumObj.font;    
-                    }
-                    break;
-
-                case "fillColor":
-                    if( node.cesiumObj ) {
-                        var clr = node.cesiumObj.fillColor;
-                        if ( clr.alpha == 1 ) {
-                            value = "rgb("+(clr.red*255)+","+(clr.green*255)+","+(clr.blue*255)+")";
-                        } else {
-                            value = "rgba("+(clr.red*255)+","+(clr.green*255)+","+(clr.blue*255)+","+clr.alpha+")";
-                        }
-                    }                      
-                    break;
-
-                case "style":
-                    if ( node.cesiumObj instanceof Cesium.Label ) {
-                        switch ( node.cesiumObj.style ) {
-                            case Cesium.LabelStyle.FILL:
-                                value = "fill";
-                                break;
-                            case Cesium.LabelStyle.FILL_AND_OUTLINE:
-                                value = "filloutline";
-                                break;
-                            case Cesium.LabelStyle.OUTLINE:
-                                value = "outline";
-                                break;
-                        }   
-                    }    
-                    break;
-
-                case "outlineColor":
-                    if( node.cesiumObj ) {
-                        var clr = node.cesiumObj.outlineColor;
-                        if ( clr.alpha == 1 ) {
-                            value = "rgb("+(clr.red*255)+","+(clr.green*255)+","+(clr.blue*255)+")";
-                        } else {
-                            value = "rgba("+(clr.red*255)+","+(clr.green*255)+","+(clr.blue*255)+","+clr.alpha+")";
-                        }
-                    } 
-                    break;
-
-                case "outlineWidth":
-                    if ( node.cesiumObj instanceof Cesium.Label ) {
-                        value = node.cesiumObj.outlineWidth;    
-                    }    
-                    break;
-
-                case "text":
-                    if ( node.cesiumObj instanceof Cesium.Label ) {
-                        value = node.cesiumObj.text;    
-                    }    
-                    break;
-
-
-                case "imageryProvider":
-                    break;
-                    
-                case "terrainProvider":
-                    break;
-
-                case "northPoleColor":
-                    if ( node.cesiumObj instanceof Cesium.Globe ) {
-                        var clr = node.cesiumObj.northPoleColor;
-                        value = "rgb(" + ( clr.x*255 ) + "," + (clr.y*255) + "," + (clr.z*255) + ")";
-                    } 
-                    break;
-
-                case "southPoleColor":
-                    if ( node.cesiumObj instanceof Cesium.Globe ) {
-                        var clr = node.cesiumObj.southPoleColor;
-                        value = "rgb(" + ( clr.x*255 ) + "," + (clr.y*255) + "," + (clr.z*255) + ")";
-                    } 
-                    break;
-                    break;
-                    
-                case "logoOffset":
-                    if ( node.cesiumObj instanceof Cesium.Globe ) {
-                        var pos = node.cesiumObj.logoOffset;
-                        
-                        value = pos !== undefined ? [ pos.x, pos.y ] : undefined;
-                    }
-                    break;
-
-                case "tileCacheSize":
-                    if ( node.cesiumObj instanceof Cesium.Globe ) {
-                        value = node.cesiumObj.tileCacheSize;
-                    }
-                    break;  
-
-                case "oceanNormalMapUrl":
-                    if ( node.cesiumObj instanceof Cesium.Globe ) {
-                        value = node.cesiumObj.oceanNormalMapUrl;
-                    }
-                    break;
-
-                case "depthTestAgainstTerrain":
-                    if ( node.cesiumObj instanceof Cesium.Globe ) {
-                        value = node.cesiumObj.depthTestAgainstTerrain;
-                    }
-                    break;
-
-
-                case "cameraViewData":
-                    if ( node.scene ) {
-                        var camera = node.scene._camera;
-                        var value = {}
-                        var vec;
-                        if ( camera.direction ) {
-                            vec = camera.direction;
-                            value.direction = [ vec.x, vec.y, vec.z ];
-                        }
-                        if ( camera.position ) { 
-                            vec = camera.position;
-                            value.position = [ vec.x, vec.y, vec.z ];
-                        }
-                        if ( camera.up ) { 
-                            vec = camera.up;
-                            value.up = [ vec.x, vec.y, vec.z ];
-                        }
-                        if ( camera.right ) { 
-                            vec = camera.right;
-                            value.right = [ vec.x, vec.y, vec.z ];
-                        }
-                    }
-                    break;
-
-                case "renderStyle":
-                    if ( node.scene && node.scene.mode ) {
-                        switch ( node.scene.mode ) {
-                            case Cesium.SceneMode.COLUMBUS_VIEW:
-                                value = "2.5D";
-                                break;
-                            case Cesium.SceneMode.SCENE2D:
-                                value = "2D";
-                                break;
-                            case Cesium.SceneMode.SCENE3D:
-                                value = "3D";
-                                break;
-                        }                          
-                    }
-                    break;
-
-                case "backgroundColor":
-                    if( node.scene ) {
-                        var clr = node.scene.backgroundColor
-                        if ( clr.alpha == 1 ) {
-                            value = "rgb("+(clr.red*255)+","+(clr.green*255)+","+(clr.blue*255)+")";
-                        } else {
-                            value = "rgba("+(clr.red*255)+","+(clr.green*255)+","+(clr.blue*255)+","+clr.alpha+")";
-                        }
-                    }
-                    break;
-
-                case "clientControl":
-                    value = this.state.clientControl;
-                    break;
-
-                case "direction":
-                    if ( node.cesiumObj instanceof Cesium.Camera ) {
-                        var vec3 = node.cesiumObj.direction;
-                        value = [ vec3.x, vec3.y, vec3.z ];
-                    }
-                    break;
-
-                case "fovy":
-                    if ( node.cesiumObj instanceof Cesium.Camera ) {
-                        value = node.cesiumObj.frustum.fovy;
-                    }                    
-                    break;
-
-                case "near":
-                    if ( node.cesiumObj instanceof Cesium.Camera ) {
-                        value = node.cesiumObj.frustum.near;
-                    }
-                    break;
-
-                case "far":
-                    if ( node.cesiumObj instanceof Cesium.Camera ) {
-                        value = node.cesiumObj.frustum.far;
-                    }
-                    break;
-
-                case "right":
-                    if ( node.cesiumObj instanceof Cesium.Camera ) {
-                        var vec3 = node.cesiumObj.right;
-                        value = [ vec3.x, vec3.y, vec3.z ];                    }                    
-                    break;
-
-                case "transform":
-                    if ( node.cesiumObj instanceof Cesium.Camera ) {
-                        value = matrix4ToArray( node.cesiumObj.transform );
-                    } 
-                    break;
-                    
-                case "modelMatrix":
-                    if ( node.cesiumObj !== undefined ) {
-                        if ( node.cesiumObj.hasOwnProperty( propertyName ) ) {
-                            value = matrix4ToArray( node.cesiumObj.modelMatrix );
-                        }
-                    }
-                    break;
-
-                case "up":
-                    if ( node.cesiumObj instanceof Cesium.Camera ) {
-                        var vec3 = node.cesiumObj.up;
-                        value = [ vec3.x, vec3.y, vec3.z ]; 
-                    }
-                    break;
-
-                case "fabric":
-                    // current state stored by the object model
-                    break;
-
-                case "type":
-                    if ( node.cesiumObj instanceof Cesium.Material ) {
-                        value = node.cesiumObj.type;    
-                    }
-                    break;
-
-                case "shaderSource":
-                    if ( node.cesiumObj instanceof Cesium.Material ) {
-                        value = node.cesiumObj.shaderSource;
-                    }
-                    break;
-
-                case "uniforms":
-                    if ( node.cesiumObj instanceof Cesium.Material ) {
-                        // this can be used 
-                        var uni = node.cesiumObj.uniforms;
-                        if ( uni ) {
-                            value = {};
-                            for ( var prop in uni ) {
-                                if ( uni.hasOwnProperty( prop ) ) {
-                                    switch( prop ) {
-                                        case "color":
-                                            var clr = uni[ prop ];
-                                            if ( clr.alpha == 1 ) {
-                                                value[ prop ] = "rgb("+(clr.red*255)+","+(clr.green*255)+","+(clr.blue*255)+")";
-                                            } else {
-                                                value[ prop ] = "rgba("+(clr.red*255)+","+(clr.green*255)+","+(clr.blue*255)+","+clr.alpha+")";
-                                            }                                       
-                                            break;
-                                        default:
-                                            value[ prop ] = uni[ prop ];
-                                            break;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                    break;
-
-                case "positions":
-                    //if ( node.cesiumObj instanceof Cesium.Polyline || node.cesiumObj instanceof Cesium.Polygon ) {
-                    if ( node.cesiumObj.getPositions ) {
-                        var cesiumPoints = node.cesiumObj.positions;
-                        var len = cesiumPoints.length;
-
-                        value = [];
-                        for ( var i = 0; i < len; i++ ) {
-                            value.push( [ cesiumPoints[i].x, cesiumPoints[i].y, cesiumPoints[i].z ] );
-                        }
-                    }
-                    break;
-
-                case "width":
-                    if ( node.cesiumObj instanceof Cesium.Polyline ) {
-                        value = node.cesiumObj.width;
-                    }
-                    break;
-
-                case "height":
-                    if ( node.cesiumObj instanceof Cesium.Polygon ) {
-                        value = node.cesiumObj.height;
-                    }
-                    break; 
-
-                case "granularity":
-                    if ( node.cesiumObj instanceof Cesium.Polygon ) {
-                        value = node.cesiumObj.granularity;
-                    }
-                    break; 
-
-                case "orientation":
-                    if ( node.cesiumObj instanceof Cesium.Entity ) {
-                        value = node.cesiumObj.orientation.getValue();
-                    }
-                    break;
-
-                case "point":
-                    if ( node.cesiumObj instanceof Cesium.Entity ) {
-                        value = node.cesiumObj.point.getValue();
-                    }
-                    break;
-
-                case "vector":
-                    if ( node.cesiumObj instanceof Cesium.Entity ) {
-                        value = node.cesiumObj.vector.getValue();
-                    }
-                    break;
-
-                case "vertexPositions":
-                    if ( node.cesiumObj instanceof Cesium.Entity ) {
-                        value = node.cesiumObj.vertexPositions.getValue();
-                    }
-                    break;
-
-                case "viewFrom":
-                    if ( node.cesiumObj instanceof Cesium.Entity ) {
-                       value = node.cesiumObj.viewFrom;
-                    }
-                    break;   
-
-                case "enableLook": 
-                    if( node.scene ) {
-                        var controller = node.scene.screenSpaceCameraController;
-                        if ( controller ) {
-                            value = controller.enableLook;
-                        }
-                    }
-                    break;
-                case "enableRotate": 
-                    if( node.scene ) {
-                        var controller = node.scene.screenSpaceCameraController;
-                        if ( controller ) {
-                            value = controller.enableRotate;
-                        }
-                    }
-                    break;
-                case "enableTilt":
-                    if( node.scene ) {
-                        var controller = node.scene.screenSpaceCameraController;
-                        if ( controller ) {
-                            value = controller.enableTilt;
-                        }
-                    }
-                    break; 
-                case "enableTranslate":
-                    if( node.scene ) {
-                        var controller = node.scene.screenSpaceCameraController;
-                        if ( controller ) {
-                            value = controller.enableTranslate;
-                        }
-                    } 
-                    break;
-                case "enableZoom": 
-                    if( node.scene ) {
-                        var controller = node.scene.screenSpaceCameraController;
-                        if ( controller ) {
-                            value = controller.enableZoom;
-                        }
-                    }
-                    break;
-
-
-            }
-
-            return value;
-        },
-
-
-        // TODO: deletingMethod
-
-        // -- callingMethod --------------------------------------------------------------------------
-
-        //callingMethod: function( nodeID, methodName /* [, parameter1, parameter2, ... ] */ ) { // TODO: parameters
-        //    return undefined;
-        //},
-
-
-        // TODO: creatingEvent, deltetingEvent, firingEvent
-
-        // -- executing ------------------------------------------------------------------------------
-
-        //executing: function( nodeID, scriptText, scriptType ) {
-        //    return undefined;
-        //},
-
-        // == ticking =============================================================================
-
-
-    } );
-    // == PRIVATE  ========================================================================================
-
-    function checkCompatibility() {
-        this.compatibilityStatus = { compatible:true, errors:{} }
-        var contextNames = ["webgl","experimental-webgl","moz-webgl","webkit-3d"];
-        for(var i = 0; i < contextNames.length; i++){
-            try{
-                var canvas = document.createElement('canvas');
-                var gl = canvas.getContext(contextNames[i]);
-                if(gl){
-                    return true;
-                }
-            }
-            catch(e){}
-        }
-        this.compatibilityStatus.compatible = false;
-        this.compatibilityStatus.errors["WGL"] = "This browser is not compatible. The vwf/view/threejs driver requires WebGL.";
-        return false;
-    }
-    
-
-    function getPrototypes( extendsID ) {
-        var prototypes = [];
-        var id = extendsID;
-
-        while ( id !== undefined ) {
-            prototypes.push( id );
-            id = this.kernel.prototype( id );
-        }
-                
-        return prototypes;
-    }
-
-    function findParent( ID ) {
-        var retNode = this.state.nodes[ ID ];
-        if ( retNode === undefined ) {
-            retNode = this.state.scenes[ ID ];
-        }
-        return retNode;
-    } 
-
-    function findSceneNode( node ) {
-        var parentID = node.parentID;
-        var sceneNode = undefined;
-        var protos = undefined;
-        var parent = findParent.call( this, parentID );
-        while ( parent && sceneNode === undefined ) {
-            protos = getPrototypes.call( this, parent.extendsID );
-            if ( protos && isCesium.call( this, protos ) ) {
-                sceneNode = parent;
-            } else {
-                parent = findParent.call( this, parent.parentID );
-            }
-        }
-        if ( sceneNode === undefined ) {
-            sceneNode = this.state.scenes[ this.kernel.application() ]
-        }
-        return sceneNode;
-    }
-
-    function isCesium( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium.vwf" );
-            }
-        }
-
-        return foundCesium;
-    }
-
-    function isGlobe( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/globe.vwf" );
-            }
-        }
-
-        return foundCesium;
-    }
-
-    function isSun( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/sun.vwf" );
-            }
-        }
-
-        return foundCesium;
-    }    
-
-    function isAtmosphere( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/atmosphere.vwf" );
-            }
-        }
-
-        return foundCesium;
-    } 
-
-    function isSkyBox( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/skybox.vwf" );
-            }
-        }
-
-        return foundCesium;
-    }     
-    
-    function isBillboard( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/billboard.vwf" );
-            }
-        }
-
-        return foundCesium;
-    }  
-
-    function isDynamicObject( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/dynamicObject.vwf" );
-            }
-        }
-
-        return foundCesium;
-    }  
-
-    function isLabel( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/label.vwf" );
-            }
-        }
-
-        return foundCesium;
-    } 
-
-    function isPolylineCollection( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/polylineCollection.vwf" );
-            }
-        }
-
-        return foundCesium;
-    }    
-
-    function isPolyline( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/polyline.vwf" );
-            }
-        }
-
-        return foundCesium;
-    }     
-
-    function isModel( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/model.vwf" );
-            }
-        }
-
-        return foundCesium;
-    } 
-
-    function isGeometry( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/geometry.vwf" );
-            }
-        }
-
-        return foundCesium;
-    } 
-
-    function isMaterial( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/material.vwf" );
-            }
-        }
-
-        return foundCesium;
-    }     
-
-    function isCamera( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/camera.vwf" );
-            }
-        }
-
-        return foundCesium;
-    } 
-
-    function isNode3( prototypes ) {
-        var foundCesium = false;
-        if ( prototypes ) {
-            var len = prototypes.length;
-            for ( var i = 0; i < len && !foundCesium; i++ ) {
-                foundCesium = ( prototypes[i] == "http://vwf.example.com/cesium/node3.vwf" );
-            }
-        }
-
-        return foundCesium;
-    } 
-
-    function vwfColor( color ) {
-        var vwfColor = {};
-        vwfColor['r'] = color['r']*255;
-        vwfColor['g'] = color['g']*255;
-        vwfColor['b'] = color['b']*255;                                
-        if ( color['a'] !== undefined && color['a'] != 1 ) {
-            vwfColor['a'] = color['a'];
-            vwfColor = new utility.color( "rgba("+vwfColor['r']+","+vwfColor['g']+","+vwfColor['b']+","+vwfColor['a']+")" );
-        } else {
-            vwfColor = new utility.color( "rgb("+vwfColor['r']+","+vwfColor['g']+","+vwfColor['b']+")" );
-        }
-        return vwfColor;        
-    }
-
-    function cesiumColor( color ) {
-        var vwfColor = new utility.color( color );
-        if ( vwfColor ) { 
-            return new Cesium.Color( 
-                vwfColor.red()/255, 
-                vwfColor.green()/255, 
-                vwfColor.blue()/255, 
-                vwfColor.alpha() 
-            );
-        }  
-        return new Cesium.Color( 1.0, 1.0, 1.0, 1.0 );       
-    }
-
-    function matrix4ToArray( mat ) {
-
-        return [ 
-            mat['0'], mat['1'], mat['2'], mat['3'],
-            mat['4'], mat['5'], mat['6'], mat['7'],
-            mat['8'], mat['9'], mat['10'], mat['11'],
-            mat['12'], mat['13'], mat['14'], mat['15'] 
-        ];
-    }
-
-
-    function arrayToMatrix4( arry ) {
-        return Cesium.Matrix4.fromArray( arry );
-    }
-
-    function toCartesian2( value ) {
-        if ( value instanceof Array ) {
-            if ( value.length > 1 ) {
-                return new Cesium.Cartesian2( value[ 0 ], value[ 1 ] );
-            }
-        } else if ( value.x !== undefined && value.y !== undefined ) {
-            return new Cesium.Cartesian2( value.x, value.y );
-        }
-        return new Cesium.Cartesian2( 0, 0 );
-    }
-
-    function toCartesian3( value ) {
-        if ( value instanceof Array ) {
-            if ( value.length > 2 ) {
-                return new Cesium.Cartesian3( value[ 0 ], value[ 1 ], value[ 2 ] );
-            }
-        } else if ( value.x !== undefined && value.y !== undefined && value.z !== undefined ) {
-            return new Cesium.Cartesian3( value.x, value.y, value.z );
-        }
-        return new Cesium.Cartesian3( 0, 0, 0 );
-    }
-
-    function toCartesian4( value ) {
-        if ( value instanceof Array ) {
-            if ( value.length > 3 ) {
-                return new Cesium.Cartesian4( value[ 0 ], value[ 1 ], value[ 2 ], value[ 3 ] );
-            }
-        } else if ( value.x !== undefined && value.y !== undefined && value.z !== undefined && value.w !== undefined) {
-            return new Cesium.Cartesian4( value.x, value.y, value.z, value.w );
-        }
-        return new Cesium.Cartesian4( 0, 0, 0, 0 );
-    }
-
-    function toRectangle( value ) {
-        if ( value instanceof Array ) {
-            if ( value.length > 3 ) {
-                return new Cesium.Rectangle( value[ 0 ], value[ 1 ], value[ 2 ], value[ 3 ] );
-            }
-        } else if ( value.west !== undefined && value.south !== undefined && value.east !== undefined && value.north !== undefined) {
-            return new Cesium.Rectangle( value.west, value.south, value.east, value.north );
-        }
-        return new Cesium.Rectangle( 0, 0, 0, 0 );
-    }
-
-    function vwfColorToCartesian3( vwfColor ) {
-        return new Cesium.Cartesian3( 
-            vwfColor.red() / 255, 
-            vwfColor.green() / 255, 
-            vwfColor.blue() / 255 
-        );        
-    }
-
-    function createGeometry( options ) {
-
-        var geo = undefined;
-        var geometryType = options.type ? options.type : options;
- 
-        //console.log( "createGeometry", JSON.stringify( options ) );
-
-        cesiumifyOptions( options );
-
-        switch ( geometryType.toLowerCase() ) {
-            
-            case "box":
-            case "boxgeometry":
-                if ( options.dimensions !== undefined ) {
-                    geo = new Cesium.BoxGeometry.fromDimensions( options );
-                } else {
-                    geo = new Cesium.BoxGeometry( options );                    
-                }
-                break;
-
-            case "boxoutline":
-            case "boxoutlinegeometry":
-                if ( options.dimensions !== undefined ) {
-                    geo = new Cesium.BoxOutlineGeometry.fromDimensions( options );
-                } else {
-                    geo = new Cesium.BoxOutlineGeometry( options );    
-                }
-                break;
-
-            case "circle":
-            case "circlegeometry":
-                geo = new Cesium.CircleGeometry( options );  
-                break;  
-
-            case "circleoutline":
-            case "circleoutlinegeometry":
-                geo = new Cesium.CircleOutlineGeometry( options );  
-                break;
-
-            case "corridor":
-            case "corridorgeometry":
-                geo = new Cesium.CorridorGeometry( options );  
-                break;  
-
-            case "corridoroutline":
-            case "corridoroutlinegeometry":
-                geo = new Cesium.CorridorOutlineGeometry( options );  
-                break;
-
-            case "cylinder":
-            case "cylindergeometry":
-                geo = new Cesium.CylinderGeometry( options );  
-                break;  
-
-            case "cylinderoutline":
-            case "cylinderoutlinegeometry":
-                geo = new Cesium.CylinderOutlineGeometry( options );  
-                break;
-
-            case "ellipse":
-            case "ellipsegeometry":
-                geo = new Cesium.EllipseGeometry( options );
-                break;
-            
-            case "ellipseoutline":
-            case "ellipseoutlinegeometry":
-                geo = new Cesium.EllipseOutlineGeometry( options );
-                break;
-
-            case "ellipsoid":
-            case "ellipsoidgeometry":
-                geo = new Cesium.EllipsoidGeometry( options );
-                break;
-            
-            case "ellipsoidoutline":
-            case "ellipsoidoutlinegeometry":
-                geo = new Cesium.EllipsoidOutlineGeometry( options );
-                break;
-
-            case "polygon":
-            case "polygongeometry":
-                if ( options.positions !== undefined ) {
-                    geo = new Cesium.PolygonGeometry.fromPositions( options );  
-                } else {
-                    geo = new Cesium.PolygonGeometry( options );                    
-                }
-
-                break;
-
-            case "polygonoutline":
-            case "polygonoutlinegeometry":
-                if ( options.positions !== undefined ) {
-                    geo = new Cesium.PolygonOutlineGeometry.fromPositions( options );
-                } else {
-                    geo = new Cesium.PolygonOutlineGeometry( options );    
-                }
-                break;
-
-            // polyline is special and is included in the polylineCollection
-            // case "polyline":
-            //     geo = new Cesium.PolylineGeometry( options );
-            //     break;
-
-            case "polylinevolume":
-            case "polylinevolumegeometry":
-                geo = new Cesium.PolylineVolumeGeometry( options );
-                break; 
-
-            case "rectangle":
-            case "rectanglegeometry":
-                geo = new Cesium.RectangleGeometry( options )
-                break;
-
-            case "rectangleoutline":
-            case "rectangleoutlinegeometry":
-                geo = new Cesium.RectangleOutlineGeometry( options );
-                break;
-
-            case "simplepolyline":
-            case "simplepolylinegeometry":
-                geo = new Cesium.SimplePolylineGeometry( options );
-                break;  
-
-            case "sphere":
-            case "spheregeometry":
-                geo = new Cesium.SphereGeometry( options );
-                break;
-
-            case "sphereoutline":
-            case "sphereoutlinegeometry":
-                geo = new Cesium.SphereOutlineGeometry( options );
-                break;
-
-            case "wall":
-            case "wallgeometry":
-                geo = new Cesium.WallGeometry( options );
-                break;
-
-            case "walloutline":
-            case "walloutlinegeometry":
-                geo = new Cesium.WallOutlineGeometry( options );
-                break;
-
-        }
-        return geo;
-    }
-
-    function createGeometryPrimitive( id, options ) {
-
-        var primitive = undefined;
-        var geometry = undefined;
-        var geometryInstance = undefined;
-
-        //console.log( "createGeometryPrimitive", id, JSON.stringify( options ) );
-
-        geometry = createGeometry( options.geometry );
-
-        if ( geometry !== undefined ) {
-            
-            if ( options.instance === undefined ) {
-                options.instance = {};    
-            } else {
-                cesiumifyOptions( options.instance );                
-            }
-
-            options.instance.id = id;
-            options.instance.geometry = geometry;
-
-            geometryInstance = new Cesium.GeometryInstance( options.instance );
-
-            if ( options.primitive === undefined ) {
-                options.primitive = {}
-            } else {
-                cesiumifyOptions( options.primitive );     
-            }
-            options.primitive.geometryInstances = geometryInstance;
-            options.primitive.appearance = createAppearance( options.primitive.appearance );
-
-            primitive = new Cesium.Primitive( options.primitive );
-        }
-
-        return { 
-            "primitive": primitive,
-            "geometry": geometry,
-            "geometryInstance": geometryInstance
-        };
-    }
-
-    function createAppearance( options ) {
-        var appearance = undefined;
-
-        //console.log( "createAppearance", JSON.stringify( options ) );
-
-        if ( options ) {
-            var appearanceType = options.type ? options.type : "material";
-            var materialOptions = options.material ? options.material : undefined;
-            options.material = createMaterial( materialOptions );
-
-            switch ( appearanceType.toLowerCase() ) {
-
-                case "ellipsoidsurface":
-                case "ellipsoidsurfaceappearance":
-                    appearance = new Cesium.EllipsoidSurfaceAppearance( options );
-                    break;
-
-                case "perinstancecolor":
-                case "perinstancecolorappearance":
-                    appearance = new Cesium.PerInstanceColorAppearance( options );
-                    break;
-
-                case "debug":
-                case "debugappearance":
-                    appearance = new Cesium.DebugAppearance( options );
-                    break;
-
-                case "polylinecolor":
-                case "polylinecolorappearance":
-                    appearance = new Cesium.PolylineColorAppearance( options );
-                    break;
-
-                case "polylinematerial":
-                case "polylinematerialappearance":
-                    appearance = new Cesium.PolylineMaterialAppearance( options );
-                    break;
-
-                case "material":
-                case "materialappearance":
-                default:
-                    appearance = new Cesium.MaterialAppearance( options );
-                    break;
-
-            }            
-        } else {
-            appearance = new Cesium.MaterialAppearance();    
-        }
-
-
-        return appearance;
-    }
-
-    function loadAsset( node ) {
-        var scene = node.sceneNode.scene;
-        var primitives = scene.primitives;
-        var src = node.source;
-
-        if ( !utility.isString( node.source ) ) {
-            src = node.source.url;
-        }
-
-        switch ( node.type ) {
-
-            case "model/vnd.gltf+json":
-                node.loadComplete( false );
-                node.cesiumObj = Cesium.Model.fromGltf( {
-                    "url": src,
-                    "id": node.ID,
-                    "minimumPixelSize": 128
-                } );
-
-                if ( node.cesiumObj !== undefined ) {
-                    primitives.add( node.cesiumObj );    
-                }
-                node.cesiumObj.readyToRender.addEventListener( function( model ) {
-                    node.loadComplete( true );
-                } );
-                break;
-
-        }        
-    }
-    
-    function cesiumifyOptions( options, geometry ) {
-
-        if ( options !== undefined ) {
-            if ( options.color !== undefined ) {
-                options.color = cesiumColor( options.color );
-                if ( options.convertColorToInstance ) {
-                    options.color = Cesium.ColorGeometryInstanceAttribute.fromColor( options.color );
-                    delete options.convertColorToInstance;    
-                }
-            }
-            if ( options.colorInstance !== undefined ) {
-                options.color = Cesium.ColorGeometryInstanceAttribute.fromColor( cesiumColor( options.colorInstance ) );
-                delete options.colorInstance;    
-            }
-            if ( options.translucent !== undefined ) {
-                if ( utility.isString( options.translucent ) && ( 
-                    options.translucent !== "true" || 
-                    options.translucent !== "false" ||
-                    options.translucent !== "0" ||
-                    options.translucent !== "1" ) ) {
-                    options.translucent = new Function( options.translucent );    
-                }            
-            }
-            if ( options.materialSupport !== undefined ) {
-                switch ( options.materialSupport.toLowerCase() ) {
-                    
-                    case "basic":
-                        options.materialSupport = Cesium.MaterialAppearance.MaterialSupport.BASIC;
-                        break;
-
-                    case "all":
-                        options.materialSupport = Cesium.MaterialAppearance.MaterialSupport.ALL;
-                        break;
-
-                    default:
-                        options.materialSupport = Cesium.MaterialAppearance.MaterialSupport.TEXTURED;
-                        break;        
-                }
-            }
-            if ( options.positions !== undefined ) {
-                if ( options.positions.degrees !== undefined ) {
-                    options.positions = Cesium.Cartesian3.fromDegreesArray( options.positions.degrees );
-                    delete options.positions.degrees;
-                } else {
-                    if ( options.positions instanceof Array && options.positions.length > 1 ) {
-                        var i, positions = [];
-                        if ( options.positions[ 0 ] instanceof Array ) {
-                            switch ( options.positions[ 0 ].length ) {
-                                case 2:
-                                    for ( i = 0; i < options.positions.length; i++ ) {
-                                        positions.push( toCartesian2( options.positions[ i ] ) );
-                                    }
-                                    break;
-                                
-                                case 3:
-                                    for ( i = 0; i < options.positions.length; i++ ) {
-                                        positions.push( toCartesian3( options.positions[ i ] ) );
-                                    }
-                                    break;
-
-                                case 4:
-                                    for ( i = 0; i < options.positions.length; i++ ) {
-                                        positions.push( toCartesian4( options.positions[ i ] ) );
-                                    }
-                                    break;
-                            }
-                        } 
-                        options.positions = positions;    
-                    }                    
-                }
-            }
-            if ( options.radii !== undefined ) {
-                options.radii = toCartesian3( options.radii );
-            }            
-            if ( options.center !== undefined ) {
-                if ( options.center.degrees !== undefined ) {
-                    options.center = Cesium.Cartesian3.fromDegrees(
-                        options.center.degrees[ 0 ], 
-                        options.center.degrees[ 1 ]
-                    );
-                    delete options.center.degrees;
-                } else {
-                    options.center = toCartesian3( options.center );
-                }
-            }
-            if ( options.rectangle !== undefined ) {
-                if ( options.rectangle.degrees !== undefined ) {
-                    options.rectangle = Cesium.Rectangle.fromDegrees( 
-                        options.rectangle.degrees[ 0 ], 
-                        options.rectangle.degrees[ 1 ], 
-                        options.rectangle.degrees[ 2 ], 
-                        options.rectangle.degrees[ 3 ]
-                    );
-                    delete options.rectangle.degrees;
-                } else {
-                    options.rectangle = toRectangle( options.rectangle );                       
-                }
-            }
-            if ( options.vertexFormat !== undefined ) {
-                if ( utility.isString( options.vertexFormat ) ) {
-                    switch ( options.vertexFormat.toLowerCase() ) {
-                        case "ellipsoidsurface":
-                            options.vertexFormat = Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT;
-                            break;
-                        case "perinstancecolor":
-                            options.vertexFormat = Cesium.PerInstanceColorAppearance.VERTEX_FORMAT;
-                            break;
-                    }
-                } else if ( options.vertexFormat.vertexFormatType !== undefined ) {
-                    if ( options.vertexFormat.material !== undefined ) {
-                        options.vertexFormat.material = createMaterial( options.vertexFormat.material );
-                    }
-
-                    switch ( options.vertexFormat.vertexFormatType.toLowerCase() ) {
-                        case "ellipsoidsurface":
-                            options.vertexFormat = Cesium.EllipsoidSurfaceAppearance.VERTEX_FORMAT;
-                            break;
-                        case "perinstancecolor":
-                            options.vertexFormat = Cesium.PerInstanceColorAppearance.VERTEX_FORMAT;
-                            break;
-                    }
-                }
-            }
-            if ( options.modelMatrix !== undefined ) { 
-                if ( options.modelMatrix.degrees !== undefined ) {
-                    options.modelMatrix = Cesium.Matrix4.multiplyByTranslation(
-                        Cesium.Transforms.eastNorthUpToFixedFrame(
-                        Cesium.Cartesian3.fromDegrees(
-                            options.modelMatrix.degrees[ 0 ], 
-                            options.modelMatrix.degrees[ 1 ]
-                        ) ), new Cesium.Cartesian3( 0.0, 0.0, options.modelMatrix.z || 0 ),
-                    new Cesium.Matrix4() );
-                } else {
-                    if ( options.modelMatrix instanceof Array && options.modelMatrix.length > 15 ) {
-                        options.modelMatrix = arrayToMatrix4( options.modelMatrix );   
-                    }
-                }
-            }
-            if ( options.dimensions !== undefined ) {
-                options.dimensions = toCartesian3( options.dimensions );    
-            }
-            if ( options.attributes ) {
-                cesiumifyOptions( options.attributes );
-            }
-            if ( options.polygonHierarchy ) {
-                cesiumifyOptions( options.polygonHierarchy );    
-            }
-        }
-    }
-
-    function createMaterial( options ) {
-        var material = undefined;
-
-        //console.log( "createMaterial", JSON.stringify( options ) );
-
-        if ( options !== undefined ) {
-            
-            if ( utility.isString( options ) ) {
-                material = new Cesium.Material.fromType( options );
-            } else if ( options.type !== undefined ) {
-                material = new Cesium.Material.fromType( options.type, cesiumifyOptions( options.uniforms ) );    
-            } else {
-                if ( options.fabric !== undefined && options.fabric.uniforms !== undefined ) {
-                    cesiumifyOptions( options.fabric.uniforms );
-                }
-                if ( options.translucent !== undefined ) {
-                    cesiumifyOptions( options );
-                }
-                material = new Cesium.Material( options );                
-            }
-        } else {
-            material = new Cesium.Material();    
-        }
-        return material;
-    }
-
-});
-
-

+ 0 - 8
support/client/lib/vwf/model/cesium/Assets/Assets.profile.js

@@ -1,8 +0,0 @@
-var profile = {
-    resourceTags : {
-        amd : function(filename, mid) {
-            "use strict";
-            return (/\.js$/).test(filename);
-        }
-    }
-};

File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json


File diff suppressed because it is too large
+ 0 - 0
support/client/lib/vwf/model/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json


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