Notice: |

  Apache Brooklyn
  Copyright 2014-2020 The Apache Software Foundation

  This product includes software developed at
  The Apache Software Foundation (http://www.apache.org/).

  This software is released under the Apache Software License, verison 2.0.
  This license and the licenses for all dependencies are included below
  following the dependencies and their notices.

Source dependencies:

  # This software includes the following third-party components in its source code.
  # Additional runtime dependencies are required when built and are listed in the subsequent section.

  # No such dependencies


Runtime dependencies:

  # This software depends on additional third-party components at runtime.
  # These are not bundled here but may be included as part of a build.

  angular-animate@1.7.2: 
    Project:      angular-animate (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-cookies@1.7.2: 
    Project:      angular-cookies (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-multiple-transclusion@1.0.0: 
    Project:      angular-multiple-transclusion (NodeJS module)
    Version:      1.0.0
    Available at: https://github.com/mcasimir/angular-multiple-transclusion
    Developed by: mcasimir (https://github.com/mcasimir)
    License name: MIT License
  
  angular-resource@1.7.2: 
    Project:      angular-resource (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-sanitize@1.7.2: 
    Project:      angular-sanitize (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  angular-ui-bootstrap@2.5.6: 
    Project:      angular-ui-bootstrap (NodeJS module)
    Version:      2.5.6
    Available at: 
      - http://angular-ui.github.io/bootstrap/
      - https://github.com/angular-ui/bootstrap
    Developed by: https://github.com/angular-ui/bootstrap/graphs/contributors
    License name: MIT License
    Notice:       Copyright (c) 2012-2017 the AngularUI Team, https://github.com/organizations/angular-ui/teams/291112
  
  angular-ui-router@0.3.2: 
    Project:      angular-ui-router (NodeJS module)
    Version:      0.3.2
    Available at: 
      - http://angular-ui.github.com/
      - https://github.com/angular-ui/ui-router
    License name: MIT License
    Notice:       Copyright (c) 2013-2015 The AngularUI Team, Karsten Sperling
  
  angular-xeditable@0.4.0: 
    Project:      angular-xeditable (NodeJS module)
    Version:      0.4.0
    Available at: 
      - https://github.com/vitalets/angular-xeditable
      - https://vitalets.github.io/angular-xeditable
    Developed by: Vitaliy Potapov (noginsk@rambler.ru)
    License name: MIT License
    Notice:       Copyright (c) 2015 Vitaliy Potapov
  
  angular@1.7.2: 
    Project:      angular (NodeJS module)
    Version:      1.7.2
    Available at: 
      - http://angularjs.org
      - https://github.com/angular/angular.js
    Developed by: Angular Core Team (angular-core+npm@google.com)
    License name: MIT License
    Notice:       Copyright (c) 2016 Angular
  
  argparse@1.0.10: 
    Project:      argparse (NodeJS module)
    Version:      1.0.10
    Available at: https://github.com/nodeca/argparse
    License name: MIT License
    Notice:       Copyright (C) 2012 by Vitaly Puzrin
  
  bootstrap@3.3.7: 
    Project:      bootstrap (NodeJS module)
    Version:      3.3.7
    Available at: 
      - http://getbootstrap.com
      - https://github.com/twbs/bootstrap
    Developed by: Twitter, Inc.
    License name: MIT License
    Notice:       Copyright (c) 2011-2016 Twitter, Inc.
  
  clipboard@1.5.16: 
    Project:      clipboard (NodeJS module)
    Version:      1.5.16
    Available at: https://github.com/zenorocha/clipboard.js
    License name: MIT License
  
  codemirror@5.39.2: 
    Project:      codemirror (NodeJS module)
    Version:      5.39.2
    Available at: 
      - http://codemirror.net
      - https://github.com/codemirror/CodeMirror
    License name: MIT License
    Notice:       Copyright (C) 2017 by Marijn Haverbeke <marijnh@gmail.com> and others
  
  commander@2.16.0: 
    Project:      commander (NodeJS module)
    Version:      2.16.0
    Available at: https://github.com/tj/commander.js
    Developed by: TJ Holowaychuk (tj@vision-media.ca)
    License name: MIT License
    Notice:       Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
  
  d3-array@1.2.0: 
    Project:      d3-array (NodeJS module)
    Version:      1.2.0
    Available at: 
      - https://d3js.org/d3-array/
      - https://github.com/d3/d3-array
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-axis@1.0.8: 
    Project:      d3-axis (NodeJS module)
    Version:      1.0.8
    Available at: 
      - https://d3js.org/d3-axis/
      - https://github.com/d3/d3-axis
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-brush@1.0.4: 
    Project:      d3-brush (NodeJS module)
    Version:      1.0.4
    Available at: 
      - https://d3js.org/d3-brush/
      - https://github.com/d3/d3-brush
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-chord@1.0.4: 
    Project:      d3-chord (NodeJS module)
    Version:      1.0.4
    Available at: 
      - https://d3js.org/d3-chord/
      - https://github.com/d3/d3-chord
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-collection@1.0.4: 
    Project:      d3-collection (NodeJS module)
    Version:      1.0.4
    Available at: 
      - https://d3js.org/d3-collection/
      - https://github.com/d3/d3-collection
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016, Mike Bostock. All rights reserved.
  
  d3-color@1.0.3: 
    Project:      d3-color (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-color/
      - https://github.com/d3/d3-color
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-dispatch@1.0.3: 
    Project:      d3-dispatch (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-dispatch/
      - https://github.com/d3/d3-dispatch
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-drag@1.1.1: 
    Project:      d3-drag (NodeJS module)
    Version:      1.1.1
    Available at: 
      - https://d3js.org/d3-drag/
      - https://github.com/d3/d3-drag
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-dsv@1.0.5: 
    Project:      d3-dsv (NodeJS module)
    Version:      1.0.5
    Available at: 
      - https://d3js.org/d3-dsv/
      - https://github.com/d3/d3-dsv
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2013-2016 Mike Bostock. All rights reserved.
  
  d3-ease@1.0.3: 
    Project:      d3-ease (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-ease/
      - https://github.com/d3/d3-ease
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. Copyright 2001 Robert Penner. All rights reserved.
  
  d3-force@1.0.6: 
    Project:      d3-force (NodeJS module)
    Version:      1.0.6
    Available at: 
      - https://d3js.org/d3-force/
      - https://github.com/d3/d3-force
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-format@1.2.0: 
    Project:      d3-format (NodeJS module)
    Version:      1.2.0
    Available at: 
      - https://d3js.org/d3-format/
      - https://github.com/d3/d3-format
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2015 Mike Bostock. All rights reserved.
  
  d3-geo@1.6.4: 
    Project:      d3-geo (NodeJS module)
    Version:      1.6.4
    Available at: 
      - https://d3js.org/d3-geo/
      - https://github.com/d3/d3-geo
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.*
  
  d3-hierarchy@1.1.5: 
    Project:      d3-hierarchy (NodeJS module)
    Version:      1.1.5
    Available at: 
      - https://d3js.org/d3-hierarchy/
      - https://github.com/d3/d3-hierarchy
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-interpolate@1.1.5: 
    Project:      d3-interpolate (NodeJS module)
    Version:      1.1.5
    Available at: 
      - https://d3js.org/d3-interpolate/
      - https://github.com/d3/d3-interpolate
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-path@1.0.5: 
    Project:      d3-path (NodeJS module)
    Version:      1.0.5
    Available at: 
      - https://d3js.org/d3-path/
      - https://github.com/d3/d3-path
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2015-2016 Mike Bostock. All rights reserved.
  
  d3-polygon@1.0.3: 
    Project:      d3-polygon (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-polygon/
      - https://github.com/d3/d3-polygon
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-quadtree@1.0.3: 
    Project:      d3-quadtree (NodeJS module)
    Version:      1.0.3
    Available at: 
      - https://d3js.org/d3-quadtree/
      - https://github.com/d3/d3-quadtree
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-queue@3.0.7: 
    Project:      d3-queue (NodeJS module)
    Version:      3.0.7
    Available at: 
      - https://d3js.org/d3-queue/
      - https://github.com/d3/d3-queue
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2012-2016, Michael Bostock. All rights reserved.
  
  d3-random@1.1.0: 
    Project:      d3-random (NodeJS module)
    Version:      1.1.0
    Available at: 
      - https://d3js.org/d3-random/
      - https://github.com/d3/d3-random
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-request@1.0.5: 
    Project:      d3-request (NodeJS module)
    Version:      1.0.5
    Available at: 
      - https://d3js.org/d3-request/
      - https://github.com/d3/d3-request
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-scale@1.0.6: 
    Project:      d3-scale (NodeJS module)
    Version:      1.0.6
    Available at: 
      - https://d3js.org/d3-scale/
      - https://github.com/d3/d3-scale
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2015 Mike Bostock. All rights reserved.
  
  d3-selection@1.1.0: 
    Project:      d3-selection (NodeJS module)
    Version:      1.1.0
    Available at: 
      - https://d3js.org/d3-selection/
      - https://github.com/d3/d3-selection
    Developed by: Mike Bostock (https://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2010-2016, Michael Bostock. All rights reserved.
  
  d3-shape@1.2.0: 
    Project:      d3-shape (NodeJS module)
    Version:      1.2.0
    Available at: 
      - https://d3js.org/d3-shape/
      - https://github.com/d3/d3-shape
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2015 Mike Bostock. All rights reserved.
  
  d3-time-format@2.0.5: 
    Project:      d3-time-format (NodeJS module)
    Version:      2.0.5
    Available at: 
      - https://d3js.org/d3-time-format/
      - https://github.com/d3/d3-time-format
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-time@1.0.7: 
    Project:      d3-time (NodeJS module)
    Version:      1.0.7
    Available at: 
      - https://d3js.org/d3-time/
      - https://github.com/d3/d3-time
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-timer@1.0.6: 
    Project:      d3-timer (NodeJS module)
    Version:      1.0.6
    Available at: 
      - https://d3js.org/d3-timer/
      - https://github.com/d3/d3-timer
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3-transition@1.1.0: 
    Project:      d3-transition (NodeJS module)
    Version:      1.1.0
    Available at: 
      - https://d3js.org/d3-transition/
      - https://github.com/d3/d3-transition
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2010-2015, Michael Bostock. All rights reserved.*
  
  d3-voronoi@1.1.2: 
    Project:      d3-voronoi (NodeJS module)
    Version:      1.1.2
    Available at: 
      - https://d3js.org/d3-voronoi/
      - https://github.com/d3/d3-voronoi
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.*
  
  d3-zoom@1.5.0: 
    Project:      d3-zoom (NodeJS module)
    Version:      1.5.0
    Available at: 
      - https://d3js.org/d3-zoom/
      - https://github.com/d3/d3-zoom
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2016 Mike Bostock. All rights reserved.
  
  d3@4.10.0: 
    Project:      d3 (NodeJS module)
    Version:      4.10.0
    Available at: 
      - https://d3js.org
      - https://github.com/d3/d3
    Developed by: Mike Bostock (https://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright 2010-2017 Mike Bostock. All rights reserved.
  
  delegate@3.2.0: 
    Project:      delegate (NodeJS module)
    Version:      3.2.0
    Available at: https://github.com/zenorocha/delegate
    License name: MIT License
  
  encoding@0.1.12: 
    Project:      encoding (NodeJS module)
    Version:      0.1.12
    Available at: https://github.com/andris9/encoding
    Developed by: Andris Reinman
    License name: MIT License
    Notice:       Copyright (c) 2012-2014 Andris Reinman
  
  es6-promise@4.2.4: 
    Project:      es6-promise (NodeJS module)
    Version:      4.2.4
    Available at: https://github.com/stefanpenner/es6-promise
    Developed by: Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
    License name: MIT License
    Notice:       Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors
  
  esprima@4.0.1: 
    Project:      esprima (NodeJS module)
    Version:      4.0.1
    Available at: 
      - http://esprima.org
      - https://github.com/jquery/esprima
    Developed by: Ariya Hidayat (ariya.hidayat@gmail.com)
    License name: BSD 2-Clause (Simplified or FreeBSD) License
    Notice:       Copyright JS Foundation and other contributors, https://js.foundation/
  
  font-awesome@4.7.0: 
    Project:      font-awesome (NodeJS module)
    Version:      4.7.0
    Available at: 
      - http://fontawesome.io/
      - https://github.com/FortAwesome/Font-Awesome
    Developed by: Dave Gandy (http://twitter.com/davegandy)
    License name: Font Awesome License
  
  good-listener@1.2.2: 
    Project:      good-listener (NodeJS module)
    Version:      1.2.2
    Available at: https://github.com/zenorocha/good-listener
    License name: MIT License
  
  iconv-lite@0.4.23: 
    Project:      iconv-lite (NodeJS module)
    Version:      0.4.23
    Available at: https://github.com/ashtuchkin/iconv-lite
    Developed by: Alexander Shtuchkin (ashtuchkin@gmail.com)
    License name: MIT License
    Notice:       Copyright (c) 2011 Alexander Shtuchkin
  
  identicon.js@1.3.0: 
    Project:      identicon.js (NodeJS module)
    Version:      1.3.0
    Available at: https://github.com/stewartlord/identicon.js
    Developed by: stewardlord
    License name: BSD 2-Clause (Simplified or FreeBSD) License
    Notice:       Copyright (c) 2013, Stewart Lord. All rights reserved.
  
  is-stream@1.1.0: 
    Project:      is-stream (NodeJS module)
    Version:      1.1.0
    Available at: https://github.com/sindresorhus/is-stream
    Developed by: Sindre Sorhus (sindresorhus.com)
    License name: MIT License
    Notice:       Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
  
  isomorphic-fetch@2.2.1: 
    Project:      isomorphic-fetch (NodeJS module)
    Version:      2.2.1
    Available at: 
      - https://github.com/matthew-andrews/isomorphic-fetch
      - https://github.com/matthew-andrews/isomorphic-fetch/issues
    Developed by: Matt Andrews (matt@mattandre.ws)
    License name: MIT License
    Notice:       Copyright (c) 2015 Matt Andrews
  
  jquery@1.12.4: 
    Project:      jquery (NodeJS module)
    Version:      1.12.4
    Available at: 
      - http://jquery.com
      - https://github.com/jquery/jquery
    Developed by: jQuery Foundation and other contributors (https://github.com/jquery/jquery/blob/1.12-stable/AUTHORS.txt)
    License name: MIT License
    Notice:       Copyright jQuery Foundation and other contributors, https://jquery.org/
  
  js-yaml@3.12.0: 
    Project:      js-yaml (NodeJS module)
    Version:      3.12.0
    Available at: https://github.com/nodeca/js-yaml
    Developed by: Vladimir Zapparov (dervus.grim@gmail.com)
    License name: MIT License
    Notice:       Copyright (C) 2011-2015 by Vitaly Puzrin
  
  jsonschema@1.2.4: 
    Project:      jsonschema (NodeJS module)
    Version:      1.2.4
    Available at: https://github.com/tdegrunt/jsonschema
    Developed by: Tom de Grunt (tom@degrunt.nl)
    License name: MIT License
    Notice:       Copyright (C) 2012-2015 Tom de Grunt <tom@degrunt.nl>
  
  jssha@2.3.1: 
    Project:      jssha (NodeJS module)
    Version:      2.3.1
    Available at: https://github.com/Caligatio/jsSHA
    Developed by: Brian Turek (brian.turek@gmail.com)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2008-2017, Brian Turek. All rights reserved.*
  
  lodash@4.17.10: 
    Project:      lodash (NodeJS module)
    Version:      4.17.10
    Available at: 
      - https://github.com/lodash/lodash
      - https://lodash.com/
    Developed by: John-David Dalton (http://allyoucanleet.com/)
    License name: MIT License
    Notice:       Copyright JS Foundation and other contributors <https://js.foundation/>
  
  moment@2.22.2: 
    Project:      moment (NodeJS module)
    Version:      2.22.2
    Available at: 
      - http://momentjs.com
      - https://github.com/moment/moment
    Developed by: Iskren Ivov Chernev (https://github.com/ichernev)
    License name: MIT License
    Notice:       Copyright (c) JS Foundation and other contributors
  
  ngclipboard@1.1.2: 
    Project:      ngclipboard (NodeJS module)
    Version:      1.1.2
    Available at: https://github.com/sachinchoolur/ngclipboard
    Developed by: Sachin (https://github.com/sachinchoolur)
    License name: MIT License
    Notice:       Copyright (c) 2015 Sachin N
  
  node-fetch@1.7.3: 
    Project:      node-fetch (NodeJS module)
    Version:      1.7.3
    Available at: https://github.com/bitinn/node-fetch
    Developed by: David Frank
    License name: MIT License
    Notice:       Copyright (c) 2016 David Frank
  
  normalizr@2.3.1: 
    Project:      normalizr (NodeJS module)
    Version:      2.3.1
    Available at: https://github.com/paularmstrong/normalizr
    Developed by: Dan Abramov
    License name: MIT License
    Notice:       Copyright (c) 2014 Dan Abramov
  
  rw@1.3.3: 
    Project:      rw (NodeJS module)
    Version:      1.3.3
    Available at: https://github.com/mbostock/rw
    Developed by: Mike Bostock (http://bost.ocks.org/mike)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2014-2016, Michael Bostock. All rights reserved.
  
  rxjs@5.5.11: 
    Project:      rxjs (NodeJS module)
    Version:      5.5.11
    Available at: https://github.com/ReactiveX/RxJS
    Developed by: Ben Lesh (ben@benlesh.com)
    License name: Apache License, version 2.0
  
  safer-buffer@2.1.2: 
    Project:      safer-buffer (NodeJS module)
    Version:      2.1.2
    Available at: https://github.com/ChALkeR/safer-buffer
    Developed by: Nikita Skovoroda (https://github.com/ChALkeR)
    License name: MIT License
    Notice:       Copyright (c) 2018 Nikita Skovoroda <chalkerx@gmail.com>
  
  select@1.1.2: 
    Project:      select (NodeJS module)
    Version:      1.1.2
    Available at: https://github.com/zenorocha/select
    License name: MIT License
  
  sprintf-js@1.0.3: 
    Project:      sprintf-js (NodeJS module)
    Version:      1.0.3
    Available at: https://github.com/alexei/sprintf.js
    Developed by: Alexandru Marasteanu (http://alexei.ro/)
    License name: BSD 3-Clause (New BSD) License
    Notice:       Copyright (c) 2007-2014, Alexandru Marasteanu <hello [at) alexei (dot] ro>. All rights reserved.
  
  symbol-observable@1.0.1: 
    Project:      symbol-observable (NodeJS module)
    Version:      1.0.1
    Available at: https://github.com/blesh/symbol-observable
    Developed by: Ben Lesh (ben@benlesh.com)
    License name: MIT License
    Notice:       Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com). Copyright (c) Ben Lesh <ben@benlesh.com>
  
  tiny-emitter@1.2.0: 
    Project:      tiny-emitter (NodeJS module)
    Version:      1.2.0
    Available at: https://github.com/scottcorgan/tiny-emitter
    Developed by: Scott Corgan
    License name: MIT License
    Notice:       Copyright (c) 2016 Scott Corgan
  
  whatwg-fetch@2.0.4: 
    Project:      whatwg-fetch (NodeJS module)
    Version:      2.0.4
    Available at: https://github.com/github/fetch
    License name: MIT License
    Notice:       Copyright (c) 2014-2016 GitHub, Inc.
  
  xmlhttprequest@1.8.0: 
    Project:      xmlhttprequest (NodeJS module)
    Version:      1.8.0
    Available at: https://github.com/driverdan/node-XMLHttpRequest
    Developed by: Dan DeFelippi (http://driverdan.com)
    License name: MIT License
  

Apache License: |

   Apache License
   Version 2.0, January 2004
   http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.


   END OF TERMS AND CONDITIONS

   APPENDIX - HOW TO APPLY THE APACHE LICENSE TO YOUR WORK
   
   To apply the Apache License to your work, attach the following boilerplate 
   notice, with the fields enclosed by brackets "[]" replaced with your own 
   identifying information. (Don't include the brackets!) The text should be 
   enclosed in the appropriate comment syntax for the file format. We also 
   recommend that a file or class name and description of purpose be included 
   on the same "printed page" as the copyright notice for easier 
   identification within third-party archives.
   
   Copyright [yyyy] [name of copyright owner]
   
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at
   
       http://www.apache.org/licenses/LICENSE-2.0
   
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
   
   
Dependency licenses:

   # Licenses of the source and binary dependencies of this software are included below.

  Apache License, version 2.0: |
    # from https://www.apache.org/licenses/LICENSE-2.0
       
                                     Apache License
                               Version 2.0, January 2004
                            http://www.apache.org/licenses/
       
       TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
       
       1. Definitions.
       
          "License" shall mean the terms and conditions for use, reproduction,
          and distribution as defined by Sections 1 through 9 of this document.
       
          "Licensor" shall mean the copyright owner or entity authorized by
          the copyright owner that is granting the License.
       
          "Legal Entity" shall mean the union of the acting entity and all
          other entities that control, are controlled by, or are under common
          control with that entity. For the purposes of this definition,
          "control" means (i) the power, direct or indirect, to cause the
          direction or management of such entity, whether by contract or
          otherwise, or (ii) ownership of fifty percent (50%) or more of the
          outstanding shares, or (iii) beneficial ownership of such entity.
       
          "You" (or "Your") shall mean an individual or Legal Entity
          exercising permissions granted by this License.
       
          "Source" form shall mean the preferred form for making modifications,
          including but not limited to software source code, documentation
          source, and configuration files.
       
          "Object" form shall mean any form resulting from mechanical
          transformation or translation of a Source form, including but
          not limited to compiled object code, generated documentation,
          and conversions to other media types.
       
          "Work" shall mean the work of authorship, whether in Source or
          Object form, made available under the License, as indicated by a
          copyright notice that is included in or attached to the work
          (an example is provided in the Appendix below).
       
          "Derivative Works" shall mean any work, whether in Source or Object
          form, that is based on (or derived from) the Work and for which the
          editorial revisions, annotations, elaborations, or other modifications
          represent, as a whole, an original work of authorship. For the purposes
          of this License, Derivative Works shall not include works that remain
          separable from, or merely link (or bind by name) to the interfaces of,
          the Work and Derivative Works thereof.
       
          "Contribution" shall mean any work of authorship, including
          the original version of the Work and any modifications or additions
          to that Work or Derivative Works thereof, that is intentionally
          submitted to Licensor for inclusion in the Work by the copyright owner
          or by an individual or Legal Entity authorized to submit on behalf of
          the copyright owner. For the purposes of this definition, "submitted"
          means any form of electronic, verbal, or written communication sent
          to the Licensor or its representatives, including but not limited to
          communication on electronic mailing lists, source code control systems,
          and issue tracking systems that are managed by, or on behalf of, the
          Licensor for the purpose of discussing and improving the Work, but
          excluding communication that is conspicuously marked or otherwise
          designated in writing by the copyright owner as "Not a Contribution."
       
          "Contributor" shall mean Licensor and any individual or Legal Entity
          on behalf of whom a Contribution has been received by Licensor and
          subsequently incorporated within the Work.
       
       2. Grant of Copyright License. Subject to the terms and conditions of
          this License, each Contributor hereby grants to You a perpetual,
          worldwide, non-exclusive, no-charge, royalty-free, irrevocable
          copyright license to reproduce, prepare Derivative Works of,
          publicly display, publicly perform, sublicense, and distribute the
          Work and such Derivative Works in Source or Object form.
       
       3. Grant of Patent License. Subject to the terms and conditions of
          this License, each Contributor hereby grants to You a perpetual,
          worldwide, non-exclusive, no-charge, royalty-free, irrevocable
          (except as stated in this section) patent license to make, have made,
          use, offer to sell, sell, import, and otherwise transfer the Work,
          where such license applies only to those patent claims licensable
          by such Contributor that are necessarily infringed by their
          Contribution(s) alone or by combination of their Contribution(s)
          with the Work to which such Contribution(s) was submitted. If You
          institute patent litigation against any entity (including a
          cross-claim or counterclaim in a lawsuit) alleging that the Work
          or a Contribution incorporated within the Work constitutes direct
          or contributory patent infringement, then any patent licenses
          granted to You under this License for that Work shall terminate
          as of the date such litigation is filed.
       
       4. Redistribution. You may reproduce and distribute copies of the
          Work or Derivative Works thereof in any medium, with or without
          modifications, and in Source or Object form, provided that You
          meet the following conditions:
       
          (a) You must give any other recipients of the Work or
              Derivative Works a copy of this License; and
       
          (b) You must cause any modified files to carry prominent notices
              stating that You changed the files; and
       
          (c) You must retain, in the Source form of any Derivative Works
              that You distribute, all copyright, patent, trademark, and
              attribution notices from the Source form of the Work,
              excluding those notices that do not pertain to any part of
              the Derivative Works; and
       
          (d) If the Work includes a "NOTICE" text file as part of its
              distribution, then any Derivative Works that You distribute must
              include a readable copy of the attribution notices contained
              within such NOTICE file, excluding those notices that do not
              pertain to any part of the Derivative Works, in at least one
              of the following places: within a NOTICE text file distributed
              as part of the Derivative Works; within the Source form or
              documentation, if provided along with the Derivative Works; or,
              within a display generated by the Derivative Works, if and
              wherever such third-party notices normally appear. The contents
              of the NOTICE file are for informational purposes only and
              do not modify the License. You may add Your own attribution
              notices within Derivative Works that You distribute, alongside
              or as an addendum to the NOTICE text from the Work, provided
              that such additional attribution notices cannot be construed
              as modifying the License.
       
          You may add Your own copyright statement to Your modifications and
          may provide additional or different license terms and conditions
          for use, reproduction, or distribution of Your modifications, or
          for any such Derivative Works as a whole, provided Your use,
          reproduction, and distribution of the Work otherwise complies with
          the conditions stated in this License.
       
       5. Submission of Contributions. Unless You explicitly state otherwise,
          any Contribution intentionally submitted for inclusion in the Work
          by You to the Licensor shall be under the terms and conditions of
          this License, without any additional terms or conditions.
          Notwithstanding the above, nothing herein shall supersede or modify
          the terms of any separate license agreement you may have executed
          with Licensor regarding such Contributions.
       
       6. Trademarks. This License does not grant permission to use the trade
          names, trademarks, service marks, or product names of the Licensor,
          except as required for reasonable and customary use in describing the
          origin of the Work and reproducing the content of the NOTICE file.
       
       7. Disclaimer of Warranty. Unless required by applicable law or
          agreed to in writing, Licensor provides the Work (and each
          Contributor provides its Contributions) on an "AS IS" BASIS,
          WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
          implied, including, without limitation, any warranties or conditions
          of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
          PARTICULAR PURPOSE. You are solely responsible for determining the
          appropriateness of using or redistributing the Work and assume any
          risks associated with Your exercise of permissions under this License.
       
       8. Limitation of Liability. In no event and under no legal theory,
          whether in tort (including negligence), contract, or otherwise,
          unless required by applicable law (such as deliberate and grossly
          negligent acts) or agreed to in writing, shall any Contributor be
          liable to You for damages, including any direct, indirect, special,
          incidental, or consequential damages of any character arising as a
          result of this License or out of the use or inability to use the
          Work (including but not limited to damages for loss of goodwill,
          work stoppage, computer failure or malfunction, or any and all
          other commercial damages or losses), even if such Contributor
          has been advised of the possibility of such damages.
       
       9. Accepting Warranty or Additional Liability. While redistributing
          the Work or Derivative Works thereof, You may choose to offer,
          and charge a fee for, acceptance of support, warranty, indemnity,
          or other liability obligations and/or rights consistent with this
          License. However, in accepting such obligations, You may act only
          on Your own behalf and on Your sole responsibility, not on behalf
          of any other Contributor, and only if You agree to indemnify,
          defend, and hold each Contributor harmless for any liability
          incurred by, or claims asserted against, such Contributor by reason
          of your accepting any such warranty or additional liability.
     

  BSD 2-Clause (Simplified or FreeBSD) License: |
    Redistribution and use in source and binary forms, with or without modification, 
    are permitted provided that the following conditions are met:
    
    1. Redistributions of source code must retain the above copyright notice, this list 
    of conditions and the following disclaimer.
    
    2. Redistributions in binary form must reproduce the above copyright notice, this 
    list of conditions and the following disclaimer in the documentation and/or other 
    materials provided with the distribution.
    
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
    SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
    TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
    BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
    ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
    DAMAGE.

  BSD 3-Clause (New BSD) License: |
    Copyright (c) as noted in accompanying NOTICE file. All rights reserved.
    
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are met:
    
      1. Redistributions of source code must retain the above copyright notice,
         this list of conditions and the following disclaimer.
    
      2. Redistributions in binary form must reproduce the above copyright 
         notice, this list of conditions and the following disclaimer in 
         the documentation and/or other materials provided with the distribution.
    
      3. The names of the authors may not be used to endorse or promote products
         derived from this software without specific prior written permission.
    
    THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
    FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT,
    INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
    INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
    OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
    EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

  Font Awesome License: |
    Font Awesome Free License
    -------------------------
    
    Font Awesome Free is free, open source, and GPL friendly. You can use it for
    commercial projects, open source projects, or really almost whatever you want.
    Full Font Awesome Free license: https://fontawesome.com/license.
    
    # Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
    In the Font Awesome Free download, the CC BY 4.0 license applies to all icons
    packaged as SVG and JS file types.
    
    # Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL)
    In the Font Awesome Free download, the SIL OLF license applies to all icons
    packaged as web and desktop font files.
    
    # Code: MIT License (https://opensource.org/licenses/MIT)
    In the Font Awesome Free download, the MIT license applies to all non-font and
    non-icon files.
    
    # Attribution
    Attribution is required by MIT, SIL OLF, and CC BY licenses. Downloaded Font
    Awesome Free files already contain embedded comments with sufficient
    attribution, so you shouldn't need to do anything additional when using these
    files normally.
    
    We've kept attribution comments terse, so we ask that you do not actively work
    to remove them from files, especially code. They're a great way for folks to 
    learn about Font Awesome.
    
    # Brand Icons
    All brand icons are trademarks of their respective owners. The use of these
    trademarks does not indicate endorsement of the trademark holder by Font
    Awesome, nor vice versa. **Please do not use brand logos for any purpose except
    to represent the company, product, or service to which they refer.**

  MIT License: |
    MIT License
    
    Copyright (c) as noted in accompanying NOTICE file. All rights reserved.
    
    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.

