[roll] Update third-party dart packages

Updated:
Change-Id: Ifb65f1bb7f5338d1b7b5f82a0a75383ec2a0d740
diff --git a/image/BUILD.gn b/image/BUILD.gn
index fc13501..e41201b 100644
--- a/image/BUILD.gn
+++ b/image/BUILD.gn
@@ -1,4 +1,4 @@
-# This file is generated by importer.py for image-2.0.8
+# This file is generated by importer.py for image-2.0.9
 
 import("//build/dart/dart_library.gni")
 
diff --git a/image/CHANGELOG.md b/image/CHANGELOG.md
index 9ed3af9..1c6fcc4 100755
--- a/image/CHANGELOG.md
+++ b/image/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 2.0.9 - May 10, 2019

+

+- Use strict dartanalysys settings and clean up code.

+

 ## 2.0.8 - May 8, 2019

 

 - Add ability to quantize an image to any number of colors.

diff --git a/image/analysis_options.yaml b/image/analysis_options.yaml
index 0ecbeea..2ac3347 100755
--- a/image/analysis_options.yaml
+++ b/image/analysis_options.yaml
@@ -1 +1,10 @@
+include: package:pedantic/analysis_options.yaml

+

+linter:

+  rules:

+    - camel_case_types

+

 analyzer:

+  strong-mode:

+    implicit-casts: false

+    implicit-dynamic: false

diff --git a/image/example/image_isolate.dart b/image/example/image_isolate.dart
index 8070694..e899166 100755
--- a/image/example/image_isolate.dart
+++ b/image/example/image_isolate.dart
@@ -27,7 +27,7 @@
       new DecodeParam(new File('test.webp'), receivePort.sendPort));

 

   // Get the processed image from the isolate.

-  Image image = await receivePort.first;

+  Image image = await receivePort.first as Image;

 

   new File('thumbnail.png').writeAsBytesSync(encodePng(image));

 }

diff --git a/image/lib/image.dart b/image/lib/image.dart
index b8ccc4f..b564728 100755
--- a/image/lib/image.dart
+++ b/image/lib/image.dart
@@ -1,7 +1,5 @@
-/**

- * The image library aims to provide server-side programs the ability to load,

- * manipulate, and save various image file formats.

- */

+/// The image library aims to provide server-side programs the ability to load,

+/// manipulate, and save various image file formats.

 library image;

 

 export 'src/draw/draw_char.dart';

@@ -52,7 +50,8 @@
 export 'src/formats/exr/exr_image.dart';

 export 'src/formats/exr/exr_part.dart' hide InternalExrPart;

 export 'src/formats/exr/exr_piz_compressor.dart' hide InternalExrPizCompressor;

-export 'src/formats/exr/exr_pxr24_compressor.dart' hide InternalExrPxr24Compressor;

+export 'src/formats/exr/exr_pxr24_compressor.dart'

+    hide InternalExrPxr24Compressor;

 export 'src/formats/exr/exr_rle_compressor.dart' hide InternalExrRleCompressor;

 export 'src/formats/exr/exr_wavelet.dart';

 export 'src/formats/exr/exr_zip_compressor.dart' hide InternalExrZipCompressor;

@@ -141,6 +140,7 @@
 export 'src/transform/copy_into.dart';

 export 'src/transform/copy_rectify.dart';

 export 'src/transform/copy_resize.dart';

+export 'src/transform/copy_resize_crop_square.dart';

 export 'src/transform/copy_rotate.dart';

 export 'src/transform/flip.dart';

 export 'src/transform/trim.dart';

diff --git a/image/lib/src/animation.dart b/image/lib/src/animation.dart
index 05a51ed..091d459 100755
--- a/image/lib/src/animation.dart
+++ b/image/lib/src/animation.dart
@@ -2,98 +2,84 @@
 

 import 'image.dart';

 

-/**

- * Stores multiple images, most often as the frames of an animation.

- *

- * Some formats, such as [TiffDecoder], support multiple images that are not

- * to be interpreted as animation, but rather multiple pages of a document.

- * The [Animation] container is still used to store the images for these files.

- * The [frameType] property is used to differentiate multi-page documents from

- * multi-frame animations, where it is set to [PAGE] for documents and

- * [ANIMATION] for animated frames.

- *

- * All [Decoder] classes support decoding to an [Animation], where the

- * [Animation] will only contain a single frame for single image formats

- * such as JPEG, or if the file doesn't contain any animation such as a single

- * image GIF.  If you want to generically support both animated and non-animated

- * files, you can always decode to an animation and if the animation has only

- * a single frame, then it's a non-animated image.

- *

- * In some cases, the frames of the animation may only provide a portion of the

- * canvas, such as the case of animations encoding only the changing pixels

- * from one frame to the next.  The [width] and [height] and [backgroundColor]

- * properties of the [Animation] provide information about the canvas that

- * contains the animation, and the [Image] frames provide information about

- * how to draw the particular frame, such as the area of the canvas to draw

- * into, and if the canvas should be cleared prior to drawing the frame.

- */

+/// Stores multiple images, most often as the frames of an animation.

+///

+/// Some formats, such as [TiffDecoder], support multiple images that are not

+/// to be interpreted as animation, but rather multiple pages of a document.

+/// The [Animation] container is still used to store the images for these files.

+/// The [frameType] property is used to differentiate multi-page documents from

+/// multi-frame animations, where it is set to [PAGE] for documents and

+/// [ANIMATION] for animated frames.

+///

+/// All [Decoder] classes support decoding to an [Animation], where the

+/// [Animation] will only contain a single frame for single image formats

+/// such as JPEG, or if the file doesn't contain any animation such as a single

+/// image GIF.  If you want to generically support both animated and non-animated

+/// files, you can always decode to an animation and if the animation has only

+/// a single frame, then it's a non-animated image.

+///

+/// In some cases, the frames of the animation may only provide a portion of the

+/// canvas, such as the case of animations encoding only the changing pixels

+/// from one frame to the next.  The [width] and [height] and [backgroundColor]

+/// properties of the [Animation] provide information about the canvas that

+/// contains the animation, and the [Image] frames provide information about

+/// how to draw the particular frame, such as the area of the canvas to draw

+/// into, and if the canvas should be cleared prior to drawing the frame.

 class Animation extends IterableBase<Image> {

   /// The frames of this document are to be interpreted as animation.

   static const int ANIMATION = 0;

+

   /// The frames of this document are to be interpreted as pages of a document.

   static const int PAGE = 1;

 

   /// The canvas width for containing the animation.

   int width;

+

   /// The canvas height for containing the animation.

   int height;

+

   /// The suggested background color to clear the canvas with.

   int backgroundColor = 0xffffffff;

+

   /// The frames of the animation.

   List<Image> frames = [];

+

   /// How many times should the animation loop (0 means forever)?

   int loopCount = 0;

+

   /// How should the frames be interpreted?  If [ANIMATION], the frames

   /// are part of an animated sequence.  If [PAGE], the frames are the pages

   /// of a document.

   int frameType = ANIMATION;

 

-  /**

-   * How many frames are in the animation?

-   */

+  /// How many frames are in the animation?

   int get numFrames => frames.length;

 

-  /**

-   * How many frames are in the animation?

-   */

+  /// How many frames are in the animation?

   int get length => frames.length;

 

-  /**

-   * Get the frame at the given [index].

-   */

-  Image operator[](int index) => frames[index];

+  /// Get the frame at the given [index].

+  Image operator [](int index) => frames[index];

 

-  /**

-   * Add a frame to the animation.

-   */

+  /// Add a frame to the animation.

   void addFrame(Image image) {

     frames.add(image);

   }

 

-  /**

-   * The first frame of the animation.

-   */

+  /// The first frame of the animation.

   Image get first => frames.first;

 

-  /**

-   * The last frame of the animation.

-   */

+  /// The last frame of the animation.

   Image get last => frames.last;

 

-  /**

-   * Is the animation empty (no frames)?

-   */

+  /// Is the animation empty (no frames)?

   bool get isEmpty => frames.isEmpty;

 

-  /**

-   * Returns true if there is at least one frame in the animation.

-   */

+  /// Returns true if there is at least one frame in the animation.

   bool get isNotEmpty => frames.isNotEmpty;

 

-  /**

-   * Get the iterator for looping over the animation.  This allows the

-   * Animation to be used in for-each loops:

-   * for (AnimationFrame frame in animation) { ... }

-   */

+  /// Get the iterator for looping over the animation.  This allows the

+  /// Animation to be used in for-each loops:

+  /// for (AnimationFrame frame in animation) { ... }

   Iterator<Image> get iterator => frames.iterator;

 }

diff --git a/image/lib/src/bitmap_font.dart b/image/lib/src/bitmap_font.dart
index 4360e83..e7e85a3 100755
--- a/image/lib/src/bitmap_font.dart
+++ b/image/lib/src/bitmap_font.dart
@@ -1,31 +1,22 @@
 import 'package:archive/archive.dart';

-import 'package:xml/xml.dart' as XML;

+import 'package:xml/xml.dart';

 

 import 'image.dart';

 import 'image_exception.dart';

 import 'formats/png_decoder.dart';

 

-/**

- * Decode a [BitmapFont] from the contents of a zip file that stores the

- * .fnt font definition and associated PNG images.

- */

-BitmapFont readFontZip(List<int> bytes) =>

-    new BitmapFont.fromZip(bytes);

+/// Decode a [BitmapFont] from the contents of a zip file that stores the

+/// .fnt font definition and associated PNG images.

+BitmapFont readFontZip(List<int> bytes) => new BitmapFont.fromZip(bytes);

 

-

-/**

- * Decode a [BitmapFont] from the contents of [font] definition (.fnt) file,

- * and an [Image] that stores the font [map].

- */

+/// Decode a [BitmapFont] from the contents of [font] definition (.fnt) file,

+/// and an [Image] that stores the font [map].

 BitmapFont readFont(String font, Image map) =>

     new BitmapFont.fromFnt(font, map);

 

-

-/**

- * A bitmap font that can be used with [drawString] and [drawChar] functions.

- * You can generate a font files from a program

- * like: http://kvazars.com/littera

- */

+/// A bitmap font that can be used with [drawString] and [drawChar] functions.

+/// You can generate a font files from a program

+/// like: http://kvazars.com/littera

 class BitmapFont {

   String face = '';

   int size = 0;

@@ -49,31 +40,28 @@
   Map<int, BitmapFontCharacter> characters = {};

   Map<int, Map<int, int>> kernings = {};

 

-  /**

-   * Decode a [BitmapFont] from the contents of [font] definition (.fnt) file,

-   * and an [Image] that stores the font [map].

-   */

+  /// Decode a [BitmapFont] from the contents of [font] definition (.fnt) file,

+  /// and an [Image] that stores the font [map].

   BitmapFont.fromFnt(String fnt, Image page) {

-    Map<int, Image> fontPages = { 0: page };

+    Map<int, Image> fontPages = {0: page};

 

-    XML.XmlDocument xml;

+    XmlDocument doc;

 

     if (fnt.startsWith('<font>')) {

-      xml = XML.parse(fnt);

-      if (xml == null) {

+      doc = parse(fnt);

+      if (doc == null) {

         throw new ImageException('Invalid font XML');

       }

     } else {

-      xml = _parseTextFnt(fnt);

+      doc = _parseTextFnt(fnt);

     }

 

-    _parseFnt(xml, fontPages);

+    _parseFnt(doc, fontPages);

   }

 

-  /**

-   * Decode a [BitmapFont] from the contents of a zip file that stores the

-   * .fnt font definition and associated PNG images.

-   */

+  /// Decode a [BitmapFont] from the contents of a zip file that stores the

+  /// .fnt font definition and associated PNG images.

+  ///

   BitmapFont.fromZip(List<int> fileData) {

     Archive arc = ZipDecoder().decodeBytes(fileData);

 

@@ -89,11 +77,11 @@
       throw new ImageException('Invalid font archive');

     }

 

-    String font_str = String.fromCharCodes(font_file.content);

-    XML.XmlDocument xml;

+    String font_str = String.fromCharCodes(font_file.content as List<int>);

+    XmlDocument xml;

 

     if (font_str.startsWith('<font>')) {

-      xml = XML.parse(font_str);

+      xml = parse(font_str);

       if (xml == null) {

         throw new ImageException('Invalid font XML');

       }

@@ -104,10 +92,8 @@
     _parseFnt(xml, {}, arc);

   }

 

-  /**

-   * Get the amount the writer x position should advance after drawing the

-   * character [ch].

-   */

+  /// Get the amount the writer x position should advance after drawing the

+  /// character [ch].

   int characterXAdvance(String ch) {

     if (ch.isEmpty) {

       return 0;

@@ -119,13 +105,12 @@
     return characters[c].xadvance;

   }

 

+  Iterable<XmlElement> _childElements(XmlNode n) => n.children

+      .where((c) => c is XmlElement)

+      .map((c) => c as XmlElement);

 

-  Iterable<XML.XmlElement> _childElements(XML.XmlNode n) =>

-    n.children.where((c) => c is XML.XmlElement).map((c) => c as XML.XmlElement);

-

-

-  void _parseFnt(XML.XmlDocument xml, Map<int, Image> fontPages,

-                 [Archive arc]) {

+  void _parseFnt(XmlDocument xml, Map<int, Image> fontPages,

+      [Archive arc]) {

     if (xml.children.length != 1) {

       throw new ImageException('Invalid font XML');

     }

@@ -135,7 +120,7 @@
     for (var c in _childElements(font)) {

       String name = c.name.toString();

       if (name == 'info') {

-        for (XML.XmlAttribute a in c.attributes) {

+        for (XmlAttribute a in c.attributes) {

           switch (a.name.toString()) {

             case 'face':

               face = a.value;

@@ -184,7 +169,7 @@
           }

         }

       } else if (name == 'common') {

-        for (XML.XmlAttribute a in c.attributes) {

+        for (XmlAttribute a in c.attributes) {

           switch (a.name.toString()) {

             case 'lineHeight':

               lineHeight = int.parse(a.value);

@@ -219,10 +204,10 @@
             ArchiveFile imageFile = _findFile(arc, filename);

             if (imageFile == null) {

               throw new ImageException('Font zip missing font page image '

-                                       '$filename');

+                  '$filename');

             }

 

-            Image image = PngDecoder().decodeImage(imageFile.content);

+            Image image = PngDecoder().decodeImage(imageFile.content as List<int>);

 

             fontPages[id] = image;

           }

@@ -262,8 +247,8 @@
 

           Image fontImage = fontPages[page];

 

-          BitmapFontCharacter ch = BitmapFontCharacter(id, width, height,

-              xoffset, yoffset, xadvance, page, chnl);

+          BitmapFontCharacter ch = BitmapFontCharacter(

+              id, width, height, xoffset, yoffset, xadvance, page, chnl);

 

           characters[id] = ch;

 

@@ -281,13 +266,13 @@
     }

   }

 

-  XML.XmlDocument _parseTextFnt(String content) {

-    var children = <XML.XmlNode>[];

-    var pageList = <XML.XmlNode>[];

-    var charList = <XML.XmlNode>[];

-    var kerningList = <XML.XmlNode>[];

-    var charsAttrs;

-    var kerningsAttrs;

+  XmlDocument _parseTextFnt(String content) {

+    var children = <XmlNode>[];

+    var pageList = <XmlNode>[];

+    var charList = <XmlNode>[];

+    var kerningList = <XmlNode>[];

+    List<XmlAttribute> charsAttrs;

+    List<XmlAttribute> kerningsAttrs;

 

     List<String> lines = content.split('\n');

 

@@ -300,17 +285,17 @@
       switch (tk[0]) {

         case 'info':

           var attrs = _parseParameters(tk);

-          var info = XML.XmlElement(new XML.XmlName('info'), attrs, []);

+          var info = XmlElement(new XmlName('info'), attrs, []);

           children.add(info);

           break;

         case 'common':

           var attrs = _parseParameters(tk);

-          var node = XML.XmlElement(new XML.XmlName('common'), attrs, []);

+          var node = XmlElement(new XmlName('common'), attrs, []);

           children.add(node);

           break;

         case 'page':

           var attrs = _parseParameters(tk);

-          var page = XML.XmlElement(new XML.XmlName('page'), attrs, []);

+          var page = XmlElement(new XmlName('page'), attrs, []);

           pageList.add(page);

           break;

         case 'chars':

@@ -318,7 +303,7 @@
           break;

         case 'char':

           var attrs = _parseParameters(tk);

-          var node = XML.XmlElement(new XML.XmlName('char'), attrs, []);

+          var node = XmlElement(new XmlName('char'), attrs, []);

           charList.add(node);

           break;

         case 'kernings':

@@ -326,37 +311,36 @@
           break;

         case 'kerning':

           var attrs = _parseParameters(tk);

-          var node = XML.XmlElement(new XML.XmlName('kerning'), attrs, []);

+          var node = XmlElement(new XmlName('kerning'), attrs, []);

           kerningList.add(node);

           break;

       }

     }

 

     if (charsAttrs != null || charList.isNotEmpty) {

-      var node = XML.XmlElement(new XML.XmlName('chars'), charsAttrs,

-          charList);

+      var node = XmlElement(new XmlName('chars'), charsAttrs, charList);

       children.add(node);

     }

 

     if (kerningsAttrs != null || kerningList.isNotEmpty) {

-      var node = XML.XmlElement(new XML.XmlName('kernings'), kerningsAttrs,

-          kerningList);

+      var node = XmlElement(

+          new XmlName('kernings'), kerningsAttrs, kerningList);

       children.add(node);

     }

 

     if (pageList.isNotEmpty) {

-      var pages = XML.XmlElement(new XML.XmlName('pages'), [], pageList);

+      var pages = XmlElement(new XmlName('pages'), [], pageList);

       children.add(pages);

     }

 

-    var xml = XML.XmlElement(new XML.XmlName('font'), [], children);

-    var doc = XML.XmlDocument([xml]);

+    var xml = XmlElement(new XmlName('font'), [], children);

+    var doc = XmlDocument([xml]);

 

     return doc;

   }

 

-  List<XML.XmlAttribute> _parseParameters(List<String> tk) {

-    var params = <XML.XmlAttribute>[];

+  List<XmlAttribute> _parseParameters(List<String> tk) {

+    var params = <XmlAttribute>[];

     for (int ti = 1; ti < tk.length; ++ti) {

       if (tk[ti].isEmpty) {

         continue;

@@ -369,7 +353,7 @@
       // Remove all " characters

       atk[1] = atk[1].replaceAll('"', '');

 

-      var a = XML.XmlAttribute(new XML.XmlName(atk[0]), atk[1]);

+      var a = XmlAttribute(new XmlName(atk[0]), atk[1]);

       params.add(a);

     }

     return params;

@@ -385,9 +369,7 @@
   }

 }

 

-/**

- * A single character in a [BitmapFont].

- */

+/// A single character in a [BitmapFont].

 class BitmapFontCharacter {

   final int id;

   final int width;

@@ -399,17 +381,23 @@
   final int channel;

   final Image image;

 

-  BitmapFontCharacter(this.id, int width, int height,

-                      this.xoffset, this.yoffset, this.xadvance, this.page,

-                      this.channel) :

-    this.width = width,

-    this.height = height,

-    image = Image(width, height);

+  BitmapFontCharacter(this.id, int width, int height, this.xoffset,

+      this.yoffset, this.xadvance, this.page, this.channel)

+      : this.width = width,

+        this.height = height,

+        image = Image(width, height);

 

   String toString() {

-    Map x = {'id': id, 'width': width, 'height': height, 'xoffset': xoffset,

-             'yoffset': yoffset, 'xadvance': xadvance, 'page': page,

-             'channel': channel};

+    Map<String, int> x = {

+      'id': id,

+      'width': width,

+      'height': height,

+      'xoffset': xoffset,

+      'yoffset': yoffset,

+      'xadvance': xadvance,

+      'page': page,

+      'channel': channel

+    };

     return 'Character $x';

   }

 }

diff --git a/image/lib/src/color.dart b/image/lib/src/color.dart
index 233daa1..981fd31 100755
--- a/image/lib/src/color.dart
+++ b/image/lib/src/color.dart
@@ -1,188 +1,141 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

 import 'image_exception.dart';

 import 'internal/clamp.dart';

 

-/**

- * Image pixel colors are instantiated as an int object rather than an instance

- * of the Color class in order to reduce object allocations. Image pixels are

- * stored in 32-bit RGBA format (8 bits per channel). Internally in dart, this

- * will be stored in a "small integer" on 64-bit machines, or a

- * "medium integer" on 32-bit machines. In Javascript, this will be stored

- * in a 64-bit double.

- *

- * The Color class is used as a namespace for color operations, in an attempt

- * to create a cleaner API for color operations.

- */

+/// Image pixel colors are instantiated as an int object rather than an instance

+/// of the Color class in order to reduce object allocations. Image pixels are

+/// stored in 32-bit RGBA format (8 bits per channel). Internally in dart, this

+/// will be stored in a "small integer" on 64-bit machines, or a

+/// "medium integer" on 32-bit machines. In Javascript, this will be stored

+/// in a 64-bit double.

+///

+/// The Color class is used as a namespace for color operations, in an attempt

+/// to create a cleaner API for color operations.

 class Color {

-  /**

-   * Create a color value from RGB values in the range [0, 255].

-   */

+  /// Create a color value from RGB values in the range [0, 255].

   static int fromRgb(int red, int green, int blue) {

     return getColor(red, green, blue);

   }

 

-  /**

-   * Create a color value from RGBA values in the range [0, 255].

-   */

+  /// Create a color value from RGBA values in the range [0, 255].

   static int fromRgba(int red, int green, int blue, int alpha) {

     return getColor(red, green, blue, alpha);

   }

 

-  /**

-   * Create a color value from HSL values in the range [0, 1].

-   */

+  /// Create a color value from HSL values in the range [0, 1].

   static int fromHsl(num hue, num saturation, num lightness) {

     var rgb = hslToRGB(hue, saturation, lightness);

     return getColor(rgb[0], rgb[1], rgb[2]);

   }

 

-  /**

-   * Create a color value from HSV values in the range [0, 1].

-   */

+  /// Create a color value from HSV values in the range [0, 1].

   static int fromHsv(num hue, num saturation, num value) {

     var rgb = hsvToRGB(hue, saturation, value);

     return getColor(rgb[0], rgb[1], rgb[2]);

   }

 

-  /**

-   * Create a color value from XYZ values.

-   */

+  /// Create a color value from XYZ values.

   static int fromXyz(num x, num y, num z) {

     var rgb = xyzToRGB(x, y, z);

     return getColor(rgb[0], rgb[1], rgb[2]);

   }

 

-  /**

-   * Create a color value from CIE-L*ab values.

-   */

+  /// Create a color value from CIE-L*ab values.

   static int fromLab(num L, num a, num b) {

     var rgb = labToRGB(L, a, b);

     return getColor(rgb[0], rgb[1], rgb[2]);

   }

 

-  /**

-   * Compare colors from a 3 or 4 dimensional color space

-   */

-  static double distance(List<double> c1, List<double> c2, bool compareAlpha) {

-    double d1 = c1[0] - c2[0];

-    double d2 = c1[1] - c2[1];

-    double d3 = c1[2] - c2[2];

+  /// Compare colors from a 3 or 4 dimensional color space

+  static num distance(List<num> c1, List<num> c2, bool compareAlpha) {

+    num d1 = c1[0] - c2[0];

+    num d2 = c1[1] - c2[1];

+    num d3 = c1[2] - c2[2];

     if (compareAlpha) {

-      double dA = c1[3] - c2[3];

-      return Math.sqrt(

-        Math.max(d1*d1, (d1-dA)*(d1-dA)) +

-        Math.max(d2*d2, (d2-dA)*(d2-dA)) +

-        Math.max(d3*d3, (d3-dA)*(d3-dA))

-      );

+      num dA = c1[3] - c2[3];

+      return sqrt(max(d1 * d1, (d1 - dA) * (d1 - dA)) +

+          max(d2 * d2, (d2 - dA) * (d2 - dA)) +

+          max(d3 * d3, (d3 - dA) * (d3 - dA)));

     } else {

-      return Math.sqrt(

-        d1*d1 +

-        d2*d2 +

-        d3*d3);

+      return sqrt(d1 * d1 + d2 * d2 + d3 * d3);

     }

   }

 }

 

-

 /// Blue channel of a color.

 const int BLUE = 0;

+

 /// Green channel of a color.

 const int GREEN = 1;

+

 /// Red channel of a color.

 const int RED = 2;

+

 /// Alpha channel of a color.

 const int ALPHA = 3;

+

 /// Luminance of a color.

 const int LUMINANCE = 4;

 

-/**

- * Get the color with the given [r], [g], [b], and [a] components.

- *

- * The channel order of a uint32 encoded color is RGBA, to be consistent

- * with the image data of a canvas html element.

- */

+/// Get the color with the given [r], [g], [b], and [a] components.

+///

+/// The channel order of a uint32 encoded color is RGBA, to be consistent

+/// with the image data of a canvas html element.

 int getColor(int r, int g, int b, [int a = 255]) =>

     (clamp255(a) << 24) |

     (clamp255(r) << 16) |

     (clamp255(g) << 8) |

     (clamp255(b));

 

-/**

- * Get the [channel] from the [color].

- */

-int getChannel(int color, int channel) =>

-    channel == RED ? getRed(color) :

-    channel == GREEN ? getGreen(color) :

-    channel == BLUE ? getBlue(color) :

-    getAlpha(color);

+/// Get the [channel] from the [color].

+int getChannel(int color, int channel) => channel == RED

+    ? getRed(color)

+    : channel == GREEN

+        ? getGreen(color)

+        : channel == BLUE ? getBlue(color) : getAlpha(color);

 

-/**

- * Returns a new color, where the given [color]'s [channel] has been

- * replaced with the given [value].

- */

-int setChannel(int color, int channel, int value) =>

-    channel == RED ? setRed(color, value) :

-    channel == GREEN ? setGreen(color, value) :

-    channel == BLUE ? setBlue(color, value) :

-    setAlpha(color, value);

+/// Returns a new color, where the given [color]'s [channel] has been

+/// replaced with the given [value].

+int setChannel(int color, int channel, int value) => channel == RED

+    ? setRed(color, value)

+    : channel == GREEN

+        ? setGreen(color, value)

+        : channel == BLUE ? setBlue(color, value) : setAlpha(color, value);

 

-/**

- * Get the blue channel from the [color].

- */

-int getBlue(int color) =>

-    (color) & 0xff;

+/// Get the blue channel from the [color].

+int getBlue(int color) => (color) & 0xff;

 

-/**

- * Returns a new color where the blue channel of [color] has been replaced

- * by [value].

- */

-int setBlue(int color, int value) =>

-    (color & 0xffffff00) | (clamp255(value));

+/// Returns a new color where the blue channel of [color] has been replaced

+/// by [value].

+int setBlue(int color, int value) => (color & 0xffffff00) | (clamp255(value));

 

-/**

- * Get the green channel from the [color].

- */

-int getGreen(int color) =>

-    (color >> 8) & 0xff;

+/// Get the green channel from the [color].

+int getGreen(int color) => (color >> 8) & 0xff;

 

-/**

- * Returns a new color where the green channel of [color] has been replaced

- * by [value].

- */

+/// Returns a new color where the green channel of [color] has been replaced

+/// by [value].

 int setGreen(int color, int value) =>

     (color & 0xffff00ff) | (clamp255(value) << 8);

 

-/**

- * Get the red channel from the [color].

- */

-int getRed(int color) =>

-    (color >> 16) & 0xff;

+/// Get the red channel from the [color].

+int getRed(int color) => (color >> 16) & 0xff;

 

-/**

- * Returns a new color where the red channel of [color] has been replaced

- * by [value].

- */

+/// Returns a new color where the red channel of [color] has been replaced

+/// by [value].

 int setRed(int color, int value) =>

     (color & 0xff00ffff) | (clamp255(value) << 16);

 

-/**

- * Get the alpha channel from the [color].

- */

-int getAlpha(int color) =>

-    (color >> 24) & 0xff;

+/// Get the alpha channel from the [color].

+int getAlpha(int color) => (color >> 24) & 0xff;

 

-/**

- * Returns a new color where the alpha channel of [color] has been replaced

- * by [value].

- */

+/// Returns a new color where the alpha channel of [color] has been replaced

+/// by [value].

 int setAlpha(int color, int value) =>

     (color & 0x00ffffff) | (clamp255(value) << 24);

 

-/**

- * Returns a new color of [src] alpha-blended onto [dst]. The opacity of [src]

- * is additionally scaled by [fraction] / 255.

- */

+/// Returns a new color of [src] alpha-blended onto [dst]. The opacity of [src]

+/// is additionally scaled by [fraction] / 255.

 int alphaBlendColors(int dst, int src, [int fraction = 0xff]) {

   double a = (getAlpha(src) / 255.0);

   if (fraction != 0xff) {

@@ -202,9 +155,7 @@
   return getColor(sr + dr, sg + dg, sb + db, sa + da);

 }

 

-/**

- * Returns the luminance (grayscale) value of the [color].

- */

+/// Returns the luminance (grayscale) value of the [color].

 int getLuminance(int color) {

   int r = getRed(color);

   int g = getGreen(color);

@@ -212,17 +163,13 @@
   return (0.299 * r + 0.587 * g + 0.114 * b).round();

 }

 

-/**

- * Returns the luminance (grayscale) value of the color.

- */

+/// Returns the luminance (grayscale) value of the color.

 int getLuminanceRGB(int r, int g, int b) =>

-  (0.299 * r + 0.587 * g + 0.114 * b).round();

+    (0.299 * r + 0.587 * g + 0.114 * b).round();

 

-/**

- * Convert an HSL color to RGB, where h is specified in normalized degrees

- * [0, 1] (where 1 is 360-degrees); s and l are in the range [0, 1].

- * Returns a list [r, g, b] with values in the range [0, 255].

- */

+/// Convert an HSL color to RGB, where h is specified in normalized degrees

+/// [0, 1] (where 1 is 360-degrees); s and l are in the range [0, 1].

+/// Returns a list [r, g, b] with values in the range [0, 255].

 List<int> hslToRGB(num hue, num saturation, num lightness) {

   if (saturation == 0) {

     int gray = (lightness * 255.0).toInt();

@@ -243,14 +190,14 @@
       return q;

     }

     if (t < 2.0 / 3.0) {

-      return p + (q - p) * (2.0/3.0 - t) * 6.0;

+      return p + (q - p) * (2.0 / 3.0 - t) * 6.0;

     }

     return p;

   }

 

   var q = lightness < 0.5

-          ? lightness * (1.0 + saturation)

-          : lightness + saturation - lightness * saturation;

+      ? lightness * (1.0 + saturation)

+      : lightness + saturation - lightness * saturation;

   var p = 2.0 * lightness - q;

 

   var r = hue2rgb(p, q, hue + 1.0 / 3.0);

@@ -260,78 +207,85 @@
   return [(r * 255.0).round(), (g * 255.0).round(), (b * 255.0).round()];

 }

 

-/**

- * Convert an HSV color to RGB, where h is specified in normalized degrees

- * [0, 1] (where 1 is 360-degrees); s and l are in the range [0, 1].

- * Returns a list [r, g, b] with values in the range [0, 255].

- */

+/// Convert an HSV color to RGB, where h is specified in normalized degrees

+/// [0, 1] (where 1 is 360-degrees); s and l are in the range [0, 1].

+/// Returns a list [r, g, b] with values in the range [0, 255].

 List<int> hsvToRGB(num hue, num saturation, num brightness) {

   if (saturation == 0) {

     var gray = (brightness * 255.0).round();

     return [gray, gray, gray];

   }

 

-  double h = (hue - hue.floor()) * 6.0;

-  double f = h - h.floor();

-  double p = brightness * (1.0 - saturation);

-  double q = brightness * (1.0 - saturation * f);

-  double t = brightness * (1.0 - (saturation * (1.0 - f)));

+  num h = (hue - hue.floor()) * 6.0;

+  num f = h - h.floor();

+  num p = brightness * (1.0 - saturation);

+  num q = brightness * (1.0 - saturation * f);

+  num t = brightness * (1.0 - (saturation * (1.0 - f)));

 

   switch (h.toInt()) {

     case 0:

-      return [(brightness * 255.0).round(),

-              (t * 255.0).round(),

-              (p * 255.0).round()];

+      return [

+        (brightness * 255.0).round(),

+        (t * 255.0).round(),

+        (p * 255.0).round()

+      ];

     case 1:

-      return [(q * 255.0).round(),

-              (brightness * 255.0).round(),

-              (p * 255.0).round()];

+      return [

+        (q * 255.0).round(),

+        (brightness * 255.0).round(),

+        (p * 255.0).round()

+      ];

     case 2:

-      return [(p * 255.0).round(),

-              (brightness * 255.0).round(),

-              (t * 255.0).round()];

+      return [

+        (p * 255.0).round(),

+        (brightness * 255.0).round(),

+        (t * 255.0).round()

+      ];

     case 3:

-      return [(p * 255.0).round(),

-              (q * 255.0).round(),

-              (brightness * 255.0).round()];

+      return [

+        (p * 255.0).round(),

+        (q * 255.0).round(),

+        (brightness * 255.0).round()

+      ];

     case 4:

-      return [(t * 255.0).round(),

-              (p * 255.0).round(),

-              (brightness * 255.0).round()];

+      return [

+        (t * 255.0).round(),

+        (p * 255.0).round(),

+        (brightness * 255.0).round()

+      ];

     case 5:

-      return [(brightness * 255.0).round(),

-              (p * 255.0).round(),

-              (q * 255.0).round()];

+      return [

+        (brightness * 255.0).round(),

+        (p * 255.0).round(),

+        (q * 255.0).round()

+      ];

     default:

       throw new ImageException('invalid hue');

   }

 }

 

-/**

- * Convert an RGB color to HSL, where r, g and b are in the range [0, 255].

- * Returns a list [h, s, l] with values in the range [0, 1].

- */

-List<double> rgbToHSL(num r, num g, num b) {

+/// Convert an RGB color to HSL, where r, g and b are in the range [0, 255].

+/// Returns a list [h, s, l] with values in the range [0, 1].

+List<num> rgbToHSL(num r, num g, num b) {

   r /= 255.0;

   g /= 255.0;

   b /= 255.0;

-  var max = Math.max(r, Math.max(g, b));

-  var min = Math.min(r, Math.min(g, b));

-  var h;

-  var s;

-  var l = (max + min) / 2.0;

+  var mx = max(r, max(g, b));

+  var mn = min(r, min(g, b));

+  num h;

+  var l = (mx + mn) / 2.0;

 

-  if (max == min){

+  if (mx == mn) {

     return [0.0, 0.0, l];

   }

 

-  var d = max - min;

+  var d = mx - mn;

 

-  s = l > 0.5 ? d / (2.0 - max - min) : d / (max + min);

+  var s = l > 0.5 ? d / (2.0 - mx - mn) : d / (mx + mn);

 

-  if (max == r) {

+  if (mx == r) {

     h = (g - b) / d + (g < b ? 6.0 : 0.0);

-  } else if (max == g) {

+  } else if (mx == g) {

     h = (b - r) / d + 2.0;

   } else {

     h = (r - g) / d + 4.0;

@@ -342,25 +296,23 @@
   return [h, s, l];

 }

 

-/**

- * Convert a CIE-L*ab color to XYZ.

- */

+/// Convert a CIE-L*ab color to XYZ.

 List<int> labToXYZ(num l, num a, num b) {

-  var y = (l + 16.0) / 116.0;

-  var x = y + (a / 500.0);

-  var z = y - (b / 200.0);

-  if (Math.pow(x, 3) > 0.008856) {

-    x = Math.pow(x, 3);

+  num y = (l + 16.0) / 116.0;

+  num x = y + (a / 500.0);

+  num z = y - (b / 200.0);

+  if (pow(x, 3) > 0.008856) {

+    x = pow(x, 3);

   } else {

     x = (x - 16.0 / 116) / 7.787;

   }

-  if (Math.pow(y, 3) > 0.008856) {

-    y = Math.pow(y, 3);

+  if (pow(y, 3) > 0.008856) {

+    y = pow(y, 3);

   } else {

     y = (y - 16.0 / 116.0) / 7.787;

   }

-  if (Math.pow(z, 3) > 0.008856) {

-    z = Math.pow(z, 3);

+  if (pow(z, 3) > 0.008856) {

+    z = pow(z, 3);

   } else {

     z = (z - 16.0 / 116.0) / 7.787;

   }

@@ -368,79 +320,76 @@
   return [(x * 95.047).toInt(), (y * 100.0).toInt(), (z * 108.883).toInt()];

 }

 

-/**

- * Convert an XYZ color to RGB.

- */

+/// Convert an XYZ color to RGB.

 List<int> xyzToRGB(num x, num y, num z) {

-  var b, g, r;

   x /= 100;

   y /= 100;

   z /= 100;

-  r = (3.2406 * x) + (-1.5372 * y) + (-0.4986 * z);

-  g = (-0.9689 * x) + (1.8758 * y) + (0.0415 * z);

-  b = (0.0557 * x) + (-0.2040 * y) + (1.0570 * z);

+  num r = (3.2406 * x) + (-1.5372 * y) + (-0.4986 * z);

+  num g = (-0.9689 * x) + (1.8758 * y) + (0.0415 * z);

+  num b = (0.0557 * x) + (-0.2040 * y) + (1.0570 * z);

   if (r > 0.0031308) {

-    r = (1.055 * Math.pow(r, 0.4166666667)) - 0.055;

+    r = (1.055 * pow(r, 0.4166666667)) - 0.055;

   } else {

     r *= 12.92;

   }

   if (g > 0.0031308) {

-    g = (1.055 * Math.pow(g, 0.4166666667)) - 0.055;

+    g = (1.055 * pow(g, 0.4166666667)) - 0.055;

   } else {

     g *= 12.92;

   }

   if (b > 0.0031308) {

-    b = (1.055 * Math.pow(b, 0.4166666667)) - 0.055;

+    b = (1.055 * pow(b, 0.4166666667)) - 0.055;

   } else {

     b *= 12.92;

   }

 

-  return [(r * 255).toInt().clamp(0, 255),

-          (g * 255).toInt().clamp(0, 255),

-          (b * 255).toInt().clamp(0, 255)];

+  return [

+    (r * 255).clamp(0, 255).toInt(),

+    (g * 255).clamp(0, 255).toInt(),

+    (b * 255).clamp(0, 255).toInt()

+  ];

 }

 

-/**

- * Convert a CMYK color to RGB, where c, m, y, k values are in the range

- * [0, 255]. Returns a list [r, g, b] with values in the range [0, 255].

- */

+/// Convert a CMYK color to RGB, where c, m, y, k values are in the range

+/// [0, 255]. Returns a list [r, g, b] with values in the range [0, 255].

 List<int> cmykToRGB(num c, num m, num y, num k) {

   c /= 255.0;

   m /= 255.0;

   y /= 255.0;

   k /= 255.0;

-  return [(255.0 * (1.0 - c) * (1.0 - k)).round(),

-          (255.0 * (1.0 - m) * (1.0 - k)).round(),

-          (255.0 * (1.0 - y) * (1.0 - k)).round()];

+  return [

+    (255.0 * (1.0 - c) * (1.0 - k)).round(),

+    (255.0 * (1.0 - m) * (1.0 - k)).round(),

+    (255.0 * (1.0 - y) * (1.0 - k)).round()

+  ];

 }

 

-/**

- * Convert a CIE-L*ab color to RGB.

- */

+/// Convert a CIE-L*ab color to RGB.

 List<int> labToRGB(num l, num a, num b) {

-  const double ref_x = 95.047;

-  const double ref_y = 100.000;

-  const double ref_z = 108.883;

+  const num ref_x = 95.047;

+  const num ref_y = 100.000;

+  const num ref_z = 108.883;

 

-  double y = (l + 16.0) / 116.0;

-  double x = a / 500.0 + y;

-  double z = y - b / 200.0;

+  num y = (l + 16.0) / 116.0;

+  num x = a / 500.0 + y;

+  num z = y - b / 200.0;

 

-  double y3 = Math.pow(y, 3);

+  num y3 = pow(y, 3);

   if (y3 > 0.008856) {

     y = y3;

   } else {

     y = (y - 16 / 116) / 7.787;

   }

 

-  double x3 = Math.pow(x,  3);

+  num x3 = pow(x, 3);

   if (x3 > 0.008856) {

     x = x3;

   } else {

     x = (x - 16 / 116) / 7.787;

   }

 

-  double z3 = Math.pow(z, 3);

+  num z3 = pow(z, 3);

   if (z3 > 0.008856) {

     z = z3;

   } else {

@@ -456,112 +405,142 @@
   z /= 100.0;

 

   // xyz to rgb

-  double R = x * 3.2406 + y * (-1.5372) + z * (-0.4986);

-  double G = x * (-0.9689) + y * 1.8758 + z * 0.0415;

-  double B = x * 0.0557 + y * (-0.2040) + z * 1.0570;

+  num R = x * 3.2406 + y * (-1.5372) + z * (-0.4986);

+  num G = x * (-0.9689) + y * 1.8758 + z * 0.0415;

+  num B = x * 0.0557 + y * (-0.2040) + z * 1.0570;

 

   if (R > 0.0031308) {

-    R = 1.055 * (Math.pow(R, 1.0 / 2.4)) - 0.055;

+    R = 1.055 * (pow(R, 1.0 / 2.4)) - 0.055;

   } else {

     R = 12.92 * R;

   }

 

   if (G > 0.0031308) {

-    G = 1.055 * (Math.pow(G, 1.0 / 2.4)) - 0.055;

+    G = 1.055 * (pow(G, 1.0 / 2.4)) - 0.055;

   } else {

     G = 12.92 * G;

   }

 

   if (B > 0.0031308) {

-    B = 1.055 * (Math.pow(B, 1.0 / 2.4)) - 0.055;

+    B = 1.055 * (pow(B, 1.0 / 2.4)) - 0.055;

   } else {

     B = 12.92 * B;

   }

 

-  return [(R * 255.0).toInt().clamp(0,  255),

-          (G * 255.0).toInt().clamp(0,  255),

-          (B * 255.0).toInt().clamp(0,  255)];

+  return [

+    (R * 255.0).clamp(0, 255).toInt(),

+    (G * 255.0).clamp(0, 255).toInt(),

+    (B * 255.0).clamp(0, 255).toInt()

+  ];

 }

 

-/**

- * Convert a RGB color to XYZ.

- */

-List<double> rgbToXYZ(num r, num g, num b) {

+/// Convert a RGB color to XYZ.

+List<num> rgbToXYZ(num r, num g, num b) {

   r = r / 255.0;

   g = g / 255.0;

   b = b / 255.0;

 

-  if ( r > 0.04045 ) r = Math.pow((r + 0.055) / 1.055, 2.4);

-  else               r = r / 12.92;

-  if ( g > 0.04045 ) g = Math.pow((g + 0.055) / 1.055, 2.4);

-  else               g = g / 12.92;

-  if ( b > 0.04045 ) b = Math.pow((b + 0.055) / 1.055, 2.4);

-  else               b = b / 12.92;

+  if (r > 0.04045) {

+    r = pow((r + 0.055) / 1.055, 2.4);

+  } else {

+    r = r / 12.92;

+  }

+  if (g > 0.04045) {

+    g = pow((g + 0.055) / 1.055, 2.4);

+  } else {

+    g = g / 12.92;

+  }

+  if (b > 0.04045) {

+    b = pow((b + 0.055) / 1.055, 2.4);

+  } else {

+    b = b / 12.92;

+  }

 

   r = r * 100.0;

   g = g * 100.0;

   b = b * 100.0;

 

-  return [r * 0.4124 + g * 0.3576 + b * 0.1805,

-          r * 0.2126 + g * 0.7152 + b * 0.0722,

-          r * 0.0193 + g * 0.1192 + b * 0.9505];

+  return [

+    r * 0.4124 + g * 0.3576 + b * 0.1805,

+    r * 0.2126 + g * 0.7152 + b * 0.0722,

+    r * 0.0193 + g * 0.1192 + b * 0.9505

+  ];

 }

 

-/**

- * Convert a XYZ color to CIE-L*ab.

- */

-List<double> xyzToLab(num x, num y, num z) {

+/// Convert a XYZ color to CIE-L*ab.

+List<num> xyzToLab(num x, num y, num z) {

   x = x / 95.047;

   y = y / 100.0;

   z = z / 108.883;

 

-  if (x > 0.008856) x = Math.pow(x, 1/3.0);

-  else              x = (7.787 * x) + (16 / 116.0);

-  if (y > 0.008856) y = Math.pow(y, 1/3.0);

-  else              y = (7.787 * y) + (16 / 116.0);

-  if (z > 0.008856) z = Math.pow(z, 1/3.0);

-  else              z = (7.787 * z) + (16 / 116.0);

+  if (x > 0.008856) {

+    x = pow(x, 1 / 3.0);

+  } else {

+    x = (7.787 * x) + (16 / 116.0);

+  }

+  if (y > 0.008856) {

+    y = pow(y, 1 / 3.0);

+  } else {

+    y = (7.787 * y) + (16 / 116.0);

+  }

+  if (z > 0.008856) {

+    z = pow(z, 1 / 3.0);

+  } else {

+    z = (7.787 * z) + (16 / 116.0);

+  }

 

-  return [(116.0 * y) - 16,

-          500.0 * (x - y),

-          200.0 * (y - z)];

+  return [(116.0 * y) - 16, 500.0 * (x - y), 200.0 * (y - z)];

 }

 

-/**

- * Convert a RGB color to CIE-L*ab.

- */

-List<double> rgbToLab(num r, num g, num b) {

+/// Convert a RGB color to CIE-L*ab.

+List<num> rgbToLab(num r, num g, num b) {

   r = r / 255.0;

   g = g / 255.0;

   b = b / 255.0;

 

-  if ( r > 0.04045 ) r = Math.pow((r + 0.055) / 1.055, 2.4);

-  else               r = r / 12.92;

-  if ( g > 0.04045 ) g = Math.pow((g + 0.055) / 1.055, 2.4);

-  else               g = g / 12.92;

-  if ( b > 0.04045 ) b = Math.pow((b + 0.055) / 1.055, 2.4);

-  else               b = b / 12.92;

+  if (r > 0.04045) {

+    r = pow((r + 0.055) / 1.055, 2.4);

+  } else {

+    r = r / 12.92;

+  }

+  if (g > 0.04045) {

+    g = pow((g + 0.055) / 1.055, 2.4);

+  } else {

+    g = g / 12.92;

+  }

+  if (b > 0.04045) {

+    b = pow((b + 0.055) / 1.055, 2.4);

+  } else {

+    b = b / 12.92;

+  }

 

   r = r * 100.0;

   g = g * 100.0;

   b = b * 100.0;

 

-  double x = r * 0.4124 + g * 0.3576 + b * 0.1805;

-  double y = r * 0.2126 + g * 0.7152 + b * 0.0722;

-  double z = r * 0.0193 + g * 0.1192 + b * 0.9505;

+  num x = r * 0.4124 + g * 0.3576 + b * 0.1805;

+  num y = r * 0.2126 + g * 0.7152 + b * 0.0722;

+  num z = r * 0.0193 + g * 0.1192 + b * 0.9505;

 

   x = x / 95.047;

   y = y / 100.0;

   z = z / 108.883;

 

-  if (x > 0.008856) x = Math.pow(x, 1/3.0);

-  else              x = (7.787 * x) + (16 / 116.0);

-  if (y > 0.008856) y = Math.pow(y, 1/3.0);

-  else              y = (7.787 * y) + (16 / 116.0);

-  if (z > 0.008856) z = Math.pow(z, 1/3.0);

-  else              z = (7.787 * z) + (16 / 116.0);

+  if (x > 0.008856) {

+    x = pow(x, 1 / 3.0);

+  } else {

+    x = (7.787 * x) + (16 / 116.0);

+  }

+  if (y > 0.008856) {

+    y = pow(y, 1 / 3.0);

+  } else {

+    y = (7.787 * y) + (16 / 116.0);

+  }

+  if (z > 0.008856) {

+    z = pow(z, 1 / 3.0);

+  } else {

+    z = (7.787 * z) + (16 / 116.0);

+  }

 

-  return [(116.0 * y) - 16,

-          500.0 * (x - y),

-          200.0 * (y - z)];

+  return [(116.0 * y) - 16, 500.0 * (x - y), 200.0 * (y - z)];

 }

diff --git a/image/lib/src/draw/draw_char.dart b/image/lib/src/draw/draw_char.dart
index d8f76dd..50acdda 100755
--- a/image/lib/src/draw/draw_char.dart
+++ b/image/lib/src/draw/draw_char.dart
@@ -2,12 +2,10 @@
 import '../bitmap_font.dart';

 import 'draw_pixel.dart';

 

-/**

- * Draw a single character from [char] horizontally into [image] at position

- * [x],[y] with the given [color].

- */

+/// Draw a single character from [char] horizontally into [image] at position

+/// [x],[y] with the given [color].

 Image drawChar(Image image, BitmapFont font, int x, int y, String char,

-               {int color: 0xffffffff}) {

+    {int color = 0xffffffff}) {

   int c = char.codeUnits[0];

   if (!font.characters.containsKey(c)) {

     return image;

diff --git a/image/lib/src/draw/draw_circle.dart b/image/lib/src/draw/draw_circle.dart
index d1418bf..510b837 100755
--- a/image/lib/src/draw/draw_circle.dart
+++ b/image/lib/src/draw/draw_circle.dart
@@ -1,13 +1,13 @@
 import '../image.dart';

 import 'draw_pixel.dart';

 

-/**

- * Draw a circle into the [image] with a center of [x0],[y0] and

- * the given [radius] and [color].

- */

+/// Draw a circle into the [image] with a center of [x0],[y0] and

+/// the given [radius] and [color].

 Image drawCircle(Image image, int x0, int y0, int radius, int color) {

-  if (radius < 0 || x0 - radius >= image.width ||

-      y0 + radius < 0 || y0 - radius >= image.height) {

+  if (radius < 0 ||

+      x0 - radius >= image.width ||

+      y0 + radius < 0 ||

+      y0 - radius >= image.height) {

     return image;

   }

 

@@ -25,7 +25,7 @@
   }

 

   for (int f = 1 - radius, ddFx = 0, ddFy = -(radius << 1), x = 0, y = radius;

-       x < y; ) {

+      x < y;) {

     if (f >= 0) {

       f += (ddFy += 2);

       --y;

diff --git a/image/lib/src/draw/draw_image.dart b/image/lib/src/draw/draw_image.dart
index 5a07d2f..acf7326 100755
--- a/image/lib/src/draw/draw_image.dart
+++ b/image/lib/src/draw/draw_image.dart
@@ -1,23 +1,26 @@
 import '../image.dart';

 import 'draw_pixel.dart';

 

-/**

- * Draw the image [src] onto the image [dst].

- *

- * In other words, copyInto will take an rectangular area from src of

- * width [src_w] and height [src_h] at position ([src_x],[src_y]) and place it

- * in a rectangular area of [dst] of width [dst_w] and height [dst_h] at

- * position ([dst_x],[dst_y]).

- *

- * If the source and destination coordinates and width and heights differ,

- * appropriate stretching or shrinking of the image fragment will be performed.

- * The coordinates refer to the upper left corner. This function can be used to

- * copy regions within the same image (if [dst] is the same as [src])

- * but if the regions overlap the results will be unpredictable.

- */

+/// Draw the image [src] onto the image [dst].

+///

+/// In other words, copyInto will take an rectangular area from src of

+/// width [src_w] and height [src_h] at position ([src_x],[src_y]) and place it

+/// in a rectangular area of [dst] of width [dst_w] and height [dst_h] at

+/// position ([dst_x],[dst_y]).

+///

+/// If the source and destination coordinates and width and heights differ,

+/// appropriate stretching or shrinking of the image fragment will be performed.

+/// The coordinates refer to the upper left corner. This function can be used to

+/// copy regions within the same image (if [dst] is the same as [src])

+/// but if the regions overlap the results will be unpredictable.

 Image drawImage(Image dst, Image src,

-                {int dstX, int dstY, int srcX, int srcY,

-                 int srcW, int srcH, bool blend: true}) {

+    {int dstX,

+    int dstY,

+    int srcX,

+    int srcY,

+    int srcW,

+    int srcH,

+    bool blend = true}) {

   if (dstX == null) {

     dstX = 0;

   }

diff --git a/image/lib/src/draw/draw_line.dart b/image/lib/src/draw/draw_line.dart
index 2f065c6..a4bc49c 100755
--- a/image/lib/src/draw/draw_line.dart
+++ b/image/lib/src/draw/draw_line.dart
@@ -1,17 +1,15 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

 import '../image.dart';

 import '../util/clip_line.dart';

 import 'draw_pixel.dart';

 

-/**

- * Draw a line into [image].

- *

- * If [antialias] is true then the line is drawn with smooth edges.

- * [thickness] determines how thick the line should be drawn, in pixels.

- */

+/// Draw a line into [image].

+///

+/// If [antialias] is true then the line is drawn with smooth edges.

+/// [thickness] determines how thick the line should be drawn, in pixels.

 Image drawLine(Image image, int x1, int y1, int x2, int y2, int color,

-               {bool antialias: false, num thickness: 1}) {

+    {bool antialias = false, num thickness = 1}) {

   List<int> line = [x1, y1, x2, y2];

   if (!clipLine(line, [0, 0, image.width - 1, image.height - 1])) {

     return image;

@@ -63,7 +61,7 @@
     dy = dy.abs();

     if (dy <= dx) {

       // More-or-less horizontal. use wid for vertical stroke

-      double ac = Math.cos(Math.atan2(dy, dx));

+      double ac = cos(atan2(dy, dx));

       int wid;

       if (ac != 0) {

         wid = thickness ~/ ac;

@@ -131,7 +129,7 @@
       }

     } else {

       // More-or-less vertical. use wid for horizontal stroke

-      double as = Math.sin(Math.atan2(dy, dx));

+      double as = sin(atan2(dy, dx));

       int wid;

       if (as != 0) {

         wid = thickness ~/ as;

@@ -202,9 +200,9 @@
 

   // Antialias Line

 

-  double ag = (dy.abs() < dx.abs()) ?

-              Math.cos(Math.atan2(dy, dx)) :

-              Math.sin(Math.atan2(dy, dx));

+  double ag = (dy.abs() < dx.abs())

+      ? cos(atan2(dy, dx))

+      : sin(atan2(dy, dx));

 

   int wid;

   if (ag != 0.0) {

@@ -232,7 +230,7 @@
     int inc = (dy * 65536) ~/ dx;

     int frac = 0;

 

-    for (int x = x1 ; x <= x2; x++) {

+    for (int x = x1; x <= x2; x++) {

       int wstart = (y - wid ~/ 2);

       for (int w = wstart; w < wstart + wid; w++) {

         drawPixel(image, x, w, color, (frac >> 8) & 0xff);

@@ -264,7 +262,7 @@
     int inc = (dx * 65536) ~/ dy;

     int frac = 0;

 

-    for (int y = y1 ; y <= y2; y++) {

+    for (int y = y1; y <= y2; y++) {

       int wstart = (x - wid ~/ 2);

       for (int w = wstart; w < wstart + wid; w++) {

         drawPixel(image, w, y, color, (frac >> 8) & 0xff);

diff --git a/image/lib/src/draw/draw_pixel.dart b/image/lib/src/draw/draw_pixel.dart
index f551656..030f326 100755
--- a/image/lib/src/draw/draw_pixel.dart
+++ b/image/lib/src/draw/draw_pixel.dart
@@ -1,9 +1,7 @@
 import '../color.dart';

 import '../image.dart';

 

-/**

- * Draw a single pixel into the image, applying alpha and opacity blending.

- */

+/// Draw a single pixel into the image, applying alpha and opacity blending.

 Image drawPixel(Image image, int x, int y, int color, [int opacity = 0xff]) {

   if (image.boundsSafe(x, y)) {

     int pi = y * image.width + x;

diff --git a/image/lib/src/draw/draw_rect.dart b/image/lib/src/draw/draw_rect.dart
index d4c1dbb..b6c239f 100755
--- a/image/lib/src/draw/draw_rect.dart
+++ b/image/lib/src/draw/draw_rect.dart
@@ -1,16 +1,14 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

 import '../image.dart';

 import 'draw_line.dart';

 

-/**

- * Draw a rectangle in the image [dst] with the [color].

- */

+/// Draw a rectangle in the image [dst] with the [color].

 Image drawRect(Image dst, int x1, int y1, int x2, int y2, int color) {

-  int x0 = Math.min(x1, x2);

-  int y0 = Math.min(y1, y2);

-  x1 = Math.max(x1, x2);

-  y1 = Math.max(y1, y2);

+  int x0 = min(x1, x2);

+  int y0 = min(y1, y2);

+  x1 = max(x1, x2);

+  y1 = max(y1, y2);

 

   drawLine(dst, x0, y0, x1, y0, color);

   drawLine(dst, x1, y0, x1, y1, color);

diff --git a/image/lib/src/draw/draw_string.dart b/image/lib/src/draw/draw_string.dart
index 6604f25..011ef3d 100755
--- a/image/lib/src/draw/draw_string.dart
+++ b/image/lib/src/draw/draw_string.dart
@@ -9,15 +9,13 @@
 var _b_lut = Uint8List(256);

 var _a_lut = Uint8List(256);

 

-/**

- * Draw a string horizontally into [image] horizontally into [image] at position

- * [x],[y] with the given [color].

- *

- * You can load your own font, or use one of the existing ones

- * such as: [arial_14], [arial_24], or [arial_48].

- */

+/// Draw a string horizontally into [image] horizontally into [image] at position

+/// [x],[y] with the given [color].

+///

+/// You can load your own font, or use one of the existing ones

+/// such as: [arial_14], [arial_24], or [arial_48].

 Image drawString(Image image, BitmapFont font, int x, int y, String string,

-                 {int color = 0xffffffff}) {

+    {int color = 0xffffffff}) {

   if (color != 0xffffffff) {

     int ca = getAlpha(color);

     if (ca == 0) {

@@ -51,10 +49,8 @@
       for (int xi = x; xi < x2; ++xi) {

         int p = ch.image[pi++];

         if (color != 0xffffffff) {

-          p = getColor(_r_lut[getRed(p)],

-              _g_lut[getGreen(p)],

-              _b_lut[getBlue(p)],

-              _a_lut[getAlpha(p)]);

+          p = getColor(_r_lut[getRed(p)], _g_lut[getGreen(p)],

+              _b_lut[getBlue(p)], _a_lut[getAlpha(p)]);

         }

         drawPixel(image, xi + ch.xoffset, yi + ch.yoffset, p);

       }

diff --git a/image/lib/src/draw/fill.dart b/image/lib/src/draw/fill.dart
index e9cd97a..41ded79 100755
--- a/image/lib/src/draw/fill.dart
+++ b/image/lib/src/draw/fill.dart
@@ -1,8 +1,6 @@
 import '../image.dart';

 

-/**

- * Set all of the pixels of an [image] to the given [color].

- */

+/// Set all of the pixels of an [image] to the given [color].

 Image fill(Image image, int color) {

   return image.fill(color);

 }

diff --git a/image/lib/src/draw/fill_flood.dart b/image/lib/src/draw/fill_flood.dart
index a613a02..4325d08 100755
--- a/image/lib/src/draw/fill_flood.dart
+++ b/image/lib/src/draw/fill_flood.dart
@@ -1,4 +1,3 @@
-import 'dart:math' as Math;

 import 'dart:typed_data';

 

 import '../color.dart';

@@ -7,19 +6,26 @@
 typedef TestPixel = bool Function(int y, int x);

 typedef MarkPixel = void Function(int y, int x);

 

-/**

- * Fill the 4-connected shape containing [x],[y] in the image [src] with the given [color]

- */

-

-Image fillFlood(Image src, int x, int y, int color, {num threshold=0.0, bool compareAlpha=false}) {

+/// Fill the 4-connected shape containing [x],[y] in the image [src] with the given [color]

+Image fillFlood(Image src, int x, int y, int color,

+    {num threshold = 0.0, bool compareAlpha = false}) {

   int srcColor = src.getPixel(x, y);

-  if (!compareAlpha) srcColor = setAlpha(srcColor, 0);

+  if (!compareAlpha) {

+    srcColor = setAlpha(srcColor, 0);

+  }

 

   TestPixel array;

   if (threshold > 0) {

-    List<double> lab = rgbToLab(getRed(srcColor), getGreen(srcColor), getBlue(srcColor));

-    if (compareAlpha) lab.add(getAlpha(srcColor).toDouble());

-    array = (int y, int x) => _testPixelLabColorDistance(src, x, y, lab, threshold);

+    List<num> lab =

+        rgbToLab(getRed(srcColor), getGreen(srcColor), getBlue(srcColor));

+

+    if (compareAlpha) {

+      lab.add(getAlpha(srcColor).toDouble());

+    }

+

+    array =

+        (int y, int x) => _testPixelLabColorDistance(src, x, y, lab, threshold);

+

   } else if (!compareAlpha) {

     array = (int y, int x) => setAlpha(src.getPixel(x, y), 0) != srcColor;

   } else {

@@ -31,24 +37,36 @@
   return src;

 }

 

-/**

- * Create a mask describing the 4-connected shape containing [x],[y] in the image [src]

- */

-

-Uint8List maskFlood(Image src, int x, int y, {num threshold=0.0, bool compareAlpha=false, int fillValue=255}) {

+/// Create a mask describing the 4-connected shape containing [x],[y] in the image [src]

+Uint8List maskFlood(Image src, int x, int y,

+    {num threshold = 0.0, bool compareAlpha = false, int fillValue = 255}) {

   int srcColor = src.getPixel(x, y);

-  if (!compareAlpha) srcColor = setAlpha(srcColor, 0);

+

+  if (!compareAlpha) {

+    srcColor = setAlpha(srcColor, 0);

+  }

+

   Uint8List ret = Uint8List(src.width * src.height);

 

   TestPixel array;

   if (threshold > 0) {

-    List<double> lab = rgbToLab(getRed(srcColor), getGreen(srcColor), getBlue(srcColor));

-    if (compareAlpha) lab.add(getAlpha(srcColor).toDouble());

-    array = (int y, int x) => ret[y * src.width + x] != 0 || _testPixelLabColorDistance(src, x, y, lab, threshold);

+    List<num> lab =

+        rgbToLab(getRed(srcColor), getGreen(srcColor), getBlue(srcColor));

+

+    if (compareAlpha) {

+      lab.add(getAlpha(srcColor).toDouble());

+    }

+

+    array = (int y, int x) =>

+        ret[y * src.width + x] != 0 ||

+        _testPixelLabColorDistance(src, x, y, lab, threshold);

   } else if (!compareAlpha) {

-    array = (int y, int x) => ret[y * src.width + x] != 0 || setAlpha(src.getPixel(x, y), 0) != srcColor;

+    array = (int y, int x) =>

+        ret[y * src.width + x] != 0 ||

+        setAlpha(src.getPixel(x, y), 0) != srcColor;

   } else {

-    array = (int y, int x) => ret[y * src.width + x] != 0 || src.getPixel(x, y) != srcColor;

+    array = (int y, int x) =>

+        ret[y * src.width + x] != 0 || src.getPixel(x, y) != srcColor;

   }

 

   MarkPixel mark = (int y, int x) => ret[y * src.width + x] = fillValue;

@@ -56,88 +74,130 @@
   return ret;

 }

 

-bool _testPixelLabColorDistance(Image src, int x, int y, List<double> refColor, num threshold) {

+bool _testPixelLabColorDistance(Image src, int x, int y, List<num> refColor,

+                                num threshold) {

   int pixel = src.getPixel(x, y);

   bool compareAlpha = refColor.length > 3;

-  List<double> pixelColor = rgbToLab(getRed(pixel), getGreen(pixel), getBlue(pixel));

-  if (compareAlpha) pixelColor.add(getAlpha(pixel).toDouble());

+  var pixelColor = rgbToLab(getRed(pixel), getGreen(pixel), getBlue(pixel));

+  if (compareAlpha) {

+    pixelColor.add(getAlpha(pixel).toDouble());

+  }

+

   return Color.distance(pixelColor, refColor, compareAlpha) > threshold;

 }

 

-/**

- * Adam Milazzo (2015). A More Efficient Flood Fill.

- * http://www.adammil.net/blog/v126_A_More_Efficient_Flood_Fill.html

- */

-

+/// Adam Milazzo (2015). A More Efficient Flood Fill.

+/// http://www.adammil.net/blog/v126_A_More_Efficient_Flood_Fill.html

 void _fill4(Image src, int x, int y, TestPixel array, MarkPixel mark) {

-

-  // at this point, we know array(y,x) is clear, and we want to move as far as possible to the upper-left. moving

-  // up is much more important than moving left, so we could try to make this smarter by sometimes moving to

-  // the right if doing so would allow us to move further up, but it doesn't seem worth the complexity

-  while(true)

-  {

-    int ox = x, oy = y;

-    while (y != 0 && !array(y-1, x)) y--;

-    while (x != 0 && !array(y, x-1)) x--;

-    if (x == ox && y == oy) break;

+  // at this point, we know array(y,x) is clear, and we want to move as far as

+  // possible to the upper-left. moving up is much more important than moving

+  // left, so we could try to make this smarter by sometimes moving to the

+  // right if doing so would allow us to move further up, but it doesn't seem

+  // worth the complexity

+  while (true) {

+    int ox = x;

+    int oy = y;

+    while (y != 0 && !array(y - 1, x)) {

+      y--;

+    }

+    while (x != 0 && !array(y, x - 1)) {

+      x--;

+    }

+    if (x == ox && y == oy) {

+      break;

+    }

   }

   _fill4Core(src, x, y, array, mark);

 }

 

 void _fill4Core(Image src, int x, int y, TestPixel array, MarkPixel mark) {

-  // at this point, we know that array(y,x) is clear, and array(y-1,x) and array(y,x-1) are set.

-  // we'll begin scanning down and to the right, attempting to fill an entire rectangular block

-  int lastRowLength = 0; // the number of cells that were clear in the last row we scanned

+  // at this point, we know that array(y,x) is clear, and array(y-1,x) and

+  // array(y,x-1) are set. We'll begin scanning down and to the right,

+  // attempting to fill an entire rectangular block

+

+  // the number of cells that were clear in the last row we scanned

+  int lastRowLength = 0;

 

   do {

-    int rowLength = 0, sx = x; // keep track of how long this row is. sx is the starting x for the main scan below

-    // now we want to handle a case like |***|, where we fill 3 cells in the first row and then after we move to

-    // the second row we find the first  | **| cell is filled, ending our rectangular scan. rather than handling

-    // this via the recursion below, we'll increase the starting value of 'x' and reduce the last row length to

-    // match. then we'll continue trying to set the narrower rectangular block

-    if (lastRowLength != 0 && array(y, x)) { // if this is not the first row and the leftmost cell is filled...

+    int rowLength = 0;

+    int sx = x;

+    // keep track of how long this row is. sx is the starting x for the main

+    // scan below now we want to handle a case like |***|, where we fill 3

+    // cells in the first row and then after we move to the second row we find

+    // the first  | **| cell is filled, ending our rectangular scan. rather

+    // than handling this via the recursion below, we'll increase the starting

+    // value of 'x' and reduce the last row length to match. then we'll continue

+    // trying to set the narrower rectangular block

+    if (lastRowLength != 0 && array(y, x)) {

+      // if this is not the first row and the leftmost cell is filled...

       do {

-        if (--lastRowLength == 0) return; // shorten the row. if it's full, we're done

-      } while (array(y, ++x)); // otherwise, update the starting point of the main scan to match

+        if (--lastRowLength == 0) {

+          return; // shorten the row. if it's full, we're done

+        }

+        // otherwise, update the starting point of the main scan to match

+      } while (array(y, ++x));

       sx = x;

     } else {

-      // we also want to handle the opposite case, | **|, where we begin scanning a 2-wide rectangular block and

-      // then find on the next row that it has     |***| gotten wider on the left. again, we could handle this

+      // we also want to handle the opposite case, | **|, where we begin

+      // scanning a 2-wide rectangular block and then find on the next row that

+      // it has |***| gotten wider on the left. again, we could handle this

       // with recursion but we'd prefer to adjust x and lastRowLength instead

-      for (; x != 0 && !array(y, x-1); rowLength++, lastRowLength++) {

-        mark(y, --x); // to avoid scanning the cells twice, we'll fill them and update rowLength here

-        // if there's something above the new starting point, handle that recursively. this deals with cases

-        // like |* **| when we begin filling from (2,0), move down to (2,1), and then move left to (0,1).

-        // the  |****| main scan assumes the portion of the previous row from x to x+lastRowLength has already

-        // been filled. adjusting x and lastRowLength breaks that assumption in this case, so we must fix it

-        if (y != 0 && !array(y-1, x)) _fill4(src, x, y-1, array, mark); // use _Fill since there may be more up and left

+      for (; x != 0 && !array(y, x - 1); rowLength++, lastRowLength++) {

+        mark(y, --x);

+        // to avoid scanning the cells twice, we'll fill them and update

+        // rowLength here if there's something above the new starting point,

+        // handle that recursively. this deals with cases like |* **| when we

+        // begin filling from (2,0), move down to (2,1), and then move left to

+        // (0,1). The  |****| main scan assumes the portion of the previous row

+        // from x to x+lastRowLength has already been filled. adjusting x and

+        // lastRowLength breaks that assumption in this case, so we must fix it

+        if (y != 0 && !array(y - 1, x)) {

+          // use _Fill since there may be more up and left

+          _fill4(src, x, y - 1, array, mark);

+        }

       }

     }

 

-    // now at this point we can begin to scan the current row in the rectangular block. the span of the previous

-    // row from x (inclusive) to x+lastRowLength (exclusive) has already been filled, so we don't need to

+    // now at this point we can begin to scan the current row in the rectangular

+    // block. the span of the previous row from x (inclusive) to x+lastRowLength

+    // (exclusive) has already been filled, so we don't need to

     // check it. so scan across to the right in the current row

-    for (; sx < src.width && !array(y, sx); rowLength++, sx++) mark(y, sx);

-    // now we've scanned this row. if the block is rectangular, then the previous row has already been scanned,

-    // so we don't need to look upwards and we're going to scan the next row in the next iteration so we don't

-    // need to look downwards. however, if the block is not rectangular, we may need to look upwards or rightwards

-    // for some portion of the row. if this row was shorter than the last row, we may need to look rightwards near

-    // the end, as in the case of |*****|, where the first row is 5 cells long and the second row is 3 cells long.

-    // we must look to the right  |*** *| of the single cell at the end of the second row, i.e. at (4,1)

+    for (; sx < src.width && !array(y, sx); rowLength++, sx++) {

+      mark(y, sx);

+    }

+    // now we've scanned this row. if the block is rectangular, then the

+    // previous row has already been scanned, so we don't need to look upwards

+    // and we're going to scan the next row in the next iteration so we don't

+    // need to look downwards. however, if the block is not rectangular, we may

+    // need to look upwards or rightwards for some portion of the row. if this

+    // row was shorter than the last row, we may need to look rightwards near

+    // the end, as in the case of |*****|, where the first row is 5 cells long

+    // and the second row is 3 cells long. We must look to the right  |*** *|

+    // of the single cell at the end of the second row, i.e. at (4,1)

     if (rowLength < lastRowLength) {

-      for (int end=x+lastRowLength; ++sx < end; ) // 'end' is the end of the previous row, so scan the current row to

-      {                                           // there. any clear cells would have been connected to the previous

-        if (!array(y, sx)) _fill4Core(src, sx, y, array, mark); // row. the cells up and left must be set so use FillCore

+      // 'end' is the end of the previous row, so scan the current row to

+      for (int end = x + lastRowLength; ++sx < end; ) {

+        // there. any clear cells would have been connected to the previous

+        if (!array(y, sx)) {

+          // row. the cells up and left must be set so use FillCore

+          _fill4Core(src, sx, y, array, mark);

+        }

       }

     }

-    // alternately, if this row is longer than the previous row, as in the case |*** *| then we must look above

-    // the end of the row, i.e at (4,0)                                         |*****|

-    else if (rowLength > lastRowLength && y != 0) // if this row is longer and we're not already at the top...

-    {

-      for (int ux=x+lastRowLength; ++ux<sx; ) { // sx is the end of the current row

-        if (!array(y-1, ux)) _fill4(src, ux, y-1, array, mark); // since there may be clear cells up and left, use _Fill

+    // alternately, if this row is longer than the previous row, as in the case

+    // |*** *| then we must look above the end of the row, i.e at (4,0)

+    // |*****|

+    else if (rowLength > lastRowLength && y != 0) {

+      // if this row is longer and we're not already at the top...

+      for (int ux = x + lastRowLength; ++ux < sx;) {

+        // sx is the end of the current row

+        if (!array(y - 1, ux)) {

+          // since there may be clear cells up and left, use _Fill

+          _fill4(src, ux, y - 1, array, mark);

+        }

       }

     }

     lastRowLength = rowLength; // record the new row length

-  } while (lastRowLength != 0 && ++y < src.height); // if we get to a full row or to the bottom, we're done

+    // if we get to a full row or to the bottom, we're done

+  } while (lastRowLength != 0 && ++y < src.height);

 }

diff --git a/image/lib/src/draw/fill_rect.dart b/image/lib/src/draw/fill_rect.dart
index d89cb96..e63f7fc 100755
--- a/image/lib/src/draw/fill_rect.dart
+++ b/image/lib/src/draw/fill_rect.dart
@@ -1,17 +1,15 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

 import '../image.dart';

 import 'draw_pixel.dart';

 

-/**

- * Fill a rectangle in the image [src] with the given [color] with the corners

- * [x1],[y1] and [x2],[y2].

- */

+/// Fill a rectangle in the image [src] with the given [color] with the corners

+/// [x1],[y1] and [x2],[y2].

 Image fillRect(Image src, int x1, int y1, int x2, int y2, int color) {

-  int x0 = Math.min(x1, x2);

-  int y0 = Math.min(y1, y2);

-  x1 = Math.max(x1, x2);

-  y1 = Math.max(y1, y2);

+  int x0 = min(x1, x2);

+  int y0 = min(y1, y2);

+  x1 = max(x1, x2);

+  y1 = max(y1, y2);

   for (int sy = y0; sy <= y1; ++sy) {

     for (int sx = x0; sx <= x1; ++sx) {

       drawPixel(src, sx, sy, color);

diff --git a/image/lib/src/effects/drop_shadow.dart b/image/lib/src/effects/drop_shadow.dart
index f86b0d7..2a53dcb 100755
--- a/image/lib/src/effects/drop_shadow.dart
+++ b/image/lib/src/effects/drop_shadow.dart
@@ -5,11 +5,9 @@
 import '../filter/scale_rgba.dart';

 import '../transform/copy_into.dart';

 

-/**

- * Create a drop-shadow effect for the image.

- */

+/// Create a drop-shadow effect for the image.

 Image dropShadow(Image src, int hShadow, int vShadow, int blur,

-                 {int shadowColor: 0xa0000000}) {

+    {int shadowColor = 0xa0000000}) {

   if (blur < 0) {

     blur = 0;

   }

@@ -52,11 +50,10 @@
   remapColors(dst, red: ALPHA, green: ALPHA, blue: ALPHA);

 

   scaleRGBA(dst, getRed(shadowColor), getGreen(shadowColor),

-            getBlue(shadowColor), getAlpha(shadowColor));

+      getBlue(shadowColor), getAlpha(shadowColor));

 

   gaussianBlur(dst, blur);

 

-

   copyInto(dst, src, dstX: imageOffsetX, dstY: imageOffsetY);

 

   return dst;

diff --git a/image/lib/src/exif_data.dart b/image/lib/src/exif_data.dart
index 1b8cc10..6509020 100755
--- a/image/lib/src/exif_data.dart
+++ b/image/lib/src/exif_data.dart
@@ -1,8 +1,6 @@
 import 'dart:typed_data';

 

-/**

- * Exif data stored with an image.

- */

+/// Exif data stored with an image.

 class ExifData {

   static const int CAMERA_MAKE = 0x010F; // string

   static const int CAMERA_MODEL = 0x0110; // string

@@ -12,13 +10,12 @@
   List<Uint8List> rawData;

   Map<int, dynamic> data;

 

-  ExifData()

-    : data = Map<int, dynamic>();

+  ExifData() : data = Map<int, dynamic>();

 

   ExifData.from(ExifData other)

-    : data = (other == null) ?

-              new Map<int, dynamic>() :

-              new Map<int, dynamic>.from(other.data) {

+      : data = (other == null)

+            ? new Map<int, dynamic>()

+            : new Map<int, dynamic>.from(other.data) {

     if (other != null && other.rawData != null) {

       rawData = List<Uint8List>(other.rawData.length);

       for (int i = 0; i < other.rawData.length; ++i) {

@@ -30,6 +27,6 @@
   bool get hasRawData => rawData != null && rawData.isNotEmpty;

 

   bool get hasOrientation => data.containsKey(ORIENTATION);

-  int get orientation => data[ORIENTATION];

+  int get orientation => data[ORIENTATION] as int;

   set orientation(int value) => data[ORIENTATION] = value;

 }

diff --git a/image/lib/src/filter/adjust_color.dart b/image/lib/src/filter/adjust_color.dart
index dc6de6d..29730ff 100755
--- a/image/lib/src/filter/adjust_color.dart
+++ b/image/lib/src/filter/adjust_color.dart
@@ -1,65 +1,70 @@
-import 'dart:math' as Math;

+import 'dart:math';

 import 'dart:typed_data';

 

 import '../color.dart';

 import '../image.dart';

 import '../internal/clamp.dart';

 

-/**

- * Adjust the color of the [src] image using various color transformations.

- *

- * [blacks] defines the black level of the image, as a color.

- *

- * [whites] defines the white level of the image, as a color.

- *

- * [mids] defines the mid level of hte image, as a color.

- *

- * [contrast] increases (> 1) / decreases (< 1) the contrast of the image by

- * pushing colors away/toward neutral gray, where at 0.0 the image is entirely

- * neutral gray (0 contrast), 1.0, the image is not adjusted and > 1.0 the

- * image increases contrast.

- *

- * [saturation] increases (> 1) / decreases (< 1) the saturation of the image

- * by pushing colors away/toward their grayscale value, where 0.0 is grayscale

- * and 1.0 is the original image, and > 1.0 the image becomes more saturated.

- *

- * [brightness] is a constant scalar of the image colors.  At 0 the image

- * is black, 1.0 unmodified, and > 1.0 the image becomes brighter.

- *

- * [gamma] is an exponential scalar of the image colors.  At < 1.0 the image

- * becomes brighter, and > 1.0 the image becomes darker.  A [gamma] of 1/2.2

- * will convert the image colors to linear color space.

- *

- * [exposure] is an exponential scalar of the image as rgb * pow(2, exposure).

- * At 0, the image is unmodified; as the exposure increases, the image

- * brightens.

- *

- * [hue] shifts the hue component of the image colors in degrees.  A [hue] of

- * 0 will have no affect, and a [hue] of 45 will shift the hue of all colors

- * by 45 degrees.

- *

- * [amount] controls how much affect this filter has on the [src] image, where

- * 0.0 has no effect and 1.0 has full effect.

- */

-Image adjustColor(Image src, {int blacks, int whites, int mids,

-                  double contrast, double saturation, double brightness,

-                  double gamma, double exposure, double hue,

-                  double amount}) {

+/// Adjust the color of the [src] image using various color transformations.

+///

+/// [blacks] defines the black level of the image, as a color.

+///

+/// [whites] defines the white level of the image, as a color.

+///

+/// [mids] defines the mid level of hte image, as a color.

+///

+/// [contrast] increases (> 1) / decreases (< 1) the contrast of the image by

+/// pushing colors away/toward neutral gray, where at 0.0 the image is entirely

+/// neutral gray (0 contrast), 1.0, the image is not adjusted and > 1.0 the

+/// image increases contrast.

+///

+/// [saturation] increases (> 1) / decreases (< 1) the saturation of the image

+/// by pushing colors away/toward their grayscale value, where 0.0 is grayscale

+/// and 1.0 is the original image, and > 1.0 the image becomes more saturated.

+///

+/// [brightness] is a constant scalar of the image colors.  At 0 the image

+/// is black, 1.0 unmodified, and > 1.0 the image becomes brighter.

+///

+/// [gamma] is an exponential scalar of the image colors.  At < 1.0 the image

+/// becomes brighter, and > 1.0 the image becomes darker.  A [gamma] of 1/2.2

+/// will convert the image colors to linear color space.

+///

+/// [exposure] is an exponential scalar of the image as rgb/// pow(2, exposure).

+/// At 0, the image is unmodified; as the exposure increases, the image

+/// brightens.

+///

+/// [hue] shifts the hue component of the image colors in degrees.  A [hue] of

+/// 0 will have no affect, and a [hue] of 45 will shift the hue of all colors

+/// by 45 degrees.

+///

+/// [amount] controls how much affect this filter has on the [src] image, where

+/// 0.0 has no effect and 1.0 has full effect.

+Image adjustColor(Image src,

+   {int blacks,

+    int whites,

+    int mids,

+    num contrast,

+    num saturation,

+    num brightness,

+    num gamma,

+    num exposure,

+    num hue,

+    num amount}) {

   if (amount == 0.0) {

     return src;

   }

 

-  const double DEG_TO_RAD = 0.0174532925;

-  const double avgLumR = 0.5;

-  const double avgLumG = 0.5;

-  const double avgLumB = 0.5;

-  const double lumCoeffR = 0.2125;

-  const double lumCoeffG = 0.7154;

-  const double lumCoeffB = 0.0721;

+  const DEG_TO_RAD = 0.0174532925;

+  const avgLumR = 0.5;

+  const avgLumG = 0.5;

+  const avgLumB = 0.5;

+  const lumCoeffR = 0.2125;

+  const lumCoeffG = 0.7154;

+  const lumCoeffB = 0.0721;

 

-  double br, bg, bb;

-  double wr, wg, wb;

-  double mr, mg, mb;

+  num br, bg, bb;

+  num wr, wg, wb;

+  num mr, mg, mb;

   if (blacks != null || whites != null || mids != null) {

     br = blacks != null ? getRed(blacks) / 255.0 : 0.0;

     bg = blacks != null ? getGreen(blacks) / 255.0 : 0.0;

@@ -78,42 +83,42 @@
     mb = 1.0 / (1.0 + 2.0 * (mb - 0.5));

   }

 

-  double invSaturation = saturation != null ? 1.0 - saturation : 0.0;

-  double invContrast = contrast != null ? 1.0 - contrast : 0.0;

+  num invSaturation = saturation != null ? 1.0 - saturation : 0.0;

+  num invContrast = contrast != null ? 1.0 - contrast : 0.0;

 

   if (exposure != null) {

-    exposure = Math.pow(2.0, exposure);

+    exposure = pow(2.0, exposure);

   }

 

-  double hueR;

-  double hueG;

-  double hueB;

+  num hueR;

+  num hueG;

+  num hueB;

   if (hue != null) {

     hue *= DEG_TO_RAD;

-    double s = Math.sin(hue);

-    double c = Math.cos(hue);

+    var s = sin(hue);

+    var c = cos(hue);

 

     hueR = (2.0 * c) / 3.0;

-    hueG = (-Math.sqrt(3.0) * s - c) / 3.0;

-    hueB = ((Math.sqrt(3.0) * s - c) + 1.0) / 3.0;

+    hueG = (-sqrt(3.0) * s - c) / 3.0;

+    hueB = ((sqrt(3.0) * s - c) + 1.0) / 3.0;

   }

 

-  double invAmount = amount != null ? 1.0 - amount : 0.0;

+  var invAmount = amount != null ? 1.0 - amount : 0.0;

 

   Uint8List pixels = src.getBytes();

   for (int i = 0, len = pixels.length; i < len; i += 4) {

-    double or = pixels[i] / 255.0;

-    double og = pixels[i + 1] / 255.0;

-    double ob = pixels[i + 2] / 255.0;

+    num or = pixels[i] / 255.0;

+    num og = pixels[i + 1] / 255.0;

+    num ob = pixels[i + 2] / 255.0;

 

-    double r = or;

-    double g = og;

-    double b = ob;

+    num r = or;

+    num g = og;

+    num b = ob;

 

     if (br != null) {

-      r = Math.pow((r + br) * wr, mr);

-      g = Math.pow((g + bg) * wg, mg);

-      b = Math.pow((b + bb) * wb, mb);

+      r = pow((r + br) * wr, mr);

+      g = pow((g + bg) * wg, mg);

+      b = pow((b + bb) * wb, mb);

     }

 

     if (brightness != null && brightness != 1.0) {

@@ -123,7 +128,7 @@
     }

 

     if (saturation != null) {

-      double lum = r * lumCoeffR + g * lumCoeffG + b * lumCoeffB;

+      num lum = r * lumCoeffR + g * lumCoeffG + b * lumCoeffB;

 

       r = lum * invSaturation + r * saturation;

       g = lum * invSaturation + g * saturation;

@@ -137,9 +142,9 @@
     }

 

     if (gamma != null) {

-      r = Math.pow(r, gamma);

-      g = Math.pow(g, gamma);

-      b = Math.pow(b, gamma);

+      r = pow(r, gamma);

+      g = pow(g, gamma);

+      b = pow(b, gamma);

     }

 

     if (exposure != null) {

@@ -149,9 +154,9 @@
     }

 

     if (hue != null && hue != 0.0) {

-      double hr = r * hueR + g * hueG + b * hueB;

-      double hg = r * hueB + g * hueR + b * hueG;

-      double hb = r * hueG + g * hueB + b * hueR;

+      num hr = r * hueR + g * hueG + b * hueB;

+      num hg = r * hueB + g * hueR + b * hueG;

+      num hb = r * hueG + g * hueB + b * hueR;

 

       r = hr;

       g = hg;

diff --git a/image/lib/src/filter/brightness.dart b/image/lib/src/filter/brightness.dart
index 44f03ea..fa0683b 100755
--- a/image/lib/src/filter/brightness.dart
+++ b/image/lib/src/filter/brightness.dart
@@ -1,12 +1,9 @@
 import '../image.dart';

 import '../internal/clamp.dart';

 

-/**

- * Set the [brightness] level for the image [src].

- *

- * [brightness] is an offset that is added to the red, green, and blue channels

- * of every pixel.

- */

+/// Set the [brightness] level for the image [src].

+/// [brightness] is an offset that is added to the red, green, and blue channels

+/// of every pixel.

 Image brightness(Image src, int brightness) {

   if (src == null || brightness == 0) {

     return src;

diff --git a/image/lib/src/filter/bump_to_normal.dart b/image/lib/src/filter/bump_to_normal.dart
index 41c5dcb..543a095 100755
--- a/image/lib/src/filter/bump_to_normal.dart
+++ b/image/lib/src/filter/bump_to_normal.dart
@@ -1,25 +1,25 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

 import '../color.dart';

 import '../image.dart';

 

-/**

- * Generate a normal map from a heightfield bump image.

- *

- * The red channel of the [src] image is used as an input, 0 represents a low

- * height and 1 a high value. The optional [strength] parameter allows to set

- * the strength of the normal image.

- */

-Image bumpToNormal(Image src, {double strength: 2.0}) {

+/// Generate a normal map from a heightfield bump image.

+///

+/// The red channel of the [src] image is used as an input, 0 represents a low

+/// height and 1 a high value. The optional [strength] parameter allows to set

+/// the strength of the normal image.

+Image bumpToNormal(Image src, {double strength = 2.0}) {

   Image dest = Image.from(src);

 

   for (var y = 0; y < src.height; ++y) {

     for (var x = 0; x < src.width; ++x) {

       final height = getRed(src.getPixel(x, y)) / 255.0;

-      var du = (height - getRed(src.getPixel(x < src.width - 1 ? x + 1 : x, y))

-          / 255.0) * strength;

-      var dv = (height - getRed(src.getPixel(x, y < src.height - 1 ? y + 1 : y))

-          / 255.0) * strength;

+      var du = (height -

+              getRed(src.getPixel(x < src.width - 1 ? x + 1 : x, y)) / 255.0) *

+          strength;

+      var dv = (height -

+              getRed(src.getPixel(x, y < src.height - 1 ? y + 1 : y)) / 255.0) *

+          strength;

       final z = du.abs() + dv.abs();

 

       if (z > 1) {

@@ -27,13 +27,13 @@
         dv /= z;

       }

 

-      final dw = Math.sqrt(1.0 - du * du - dv * dv);

+      final dw = sqrt(1.0 - du * du - dv * dv);

       final nX = du * 0.5 + 0.5;

       final nY = dv * 0.5 + 0.5;

       final nZ = dw;

 

-      dest.setPixelRGBA(x, y, (255 * nX).floor(), (255 * nY).floor(),

-          (255 * nZ).floor());

+      dest.setPixelRGBA(

+          x, y, (255 * nX).floor(), (255 * nY).floor(), (255 * nZ).floor());

     }

   }

 

diff --git a/image/lib/src/filter/color_offset.dart b/image/lib/src/filter/color_offset.dart
index 606d7ba..52a511e 100755
--- a/image/lib/src/filter/color_offset.dart
+++ b/image/lib/src/filter/color_offset.dart
@@ -1,10 +1,8 @@
 import '../image.dart';

 import '../internal/clamp.dart';

 

-/**

- * Add the [red], [green], [blue] and [alpha] values to the [src] image

- * colors, a per-channel brightness.

- */

+/// Add the [red], [green], [blue] and [alpha] values to the [src] image

+/// colors, a per-channel brightness.

 Image colorOffset(Image src, int red, int green, int blue, int alpha) {

   var pixels = src.getBytes();

   for (int i = 0, len = pixels.length; i < len; i += 4) {

diff --git a/image/lib/src/filter/contrast.dart b/image/lib/src/filter/contrast.dart
index 3188b1e..a7389f5 100755
--- a/image/lib/src/filter/contrast.dart
+++ b/image/lib/src/filter/contrast.dart
@@ -6,13 +6,11 @@
 num _lastContrast;

 Uint8List _contrast;

 

-/**

- * Set the [contrast] level for the image [src].

- *

- * [contrast] values below 100 will decrees the contrast of the image,

- * and values above 100 will increase the contrast.  A contrast of of 100

- * will have no affect.

- */

+/// Set the [contrast] level for the image [src].

+///

+/// [contrast] values below 100 will decrees the contrast of the image,

+/// and values above 100 will increase the contrast.  A contrast of of 100

+/// will have no affect.

 Image contrast(Image src, num contrast) {

   if (src == null || contrast == 100.0) {

     return src;

diff --git a/image/lib/src/filter/convolution.dart b/image/lib/src/filter/convolution.dart
index 4008e7f..8b27a74 100755
--- a/image/lib/src/filter/convolution.dart
+++ b/image/lib/src/filter/convolution.dart
@@ -1,17 +1,15 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

 import '../color.dart';

 import '../image.dart';

 

-/**

- * Apply a 3x3 convolution filter to the [src] image.  [filter] should be a

- * list of 9 doubles.

- *

- * The rgb channels will be divided by [filterDiv] and add [offset], allowing

- * filters to normalize and offset the filtered pixel value.

- */

+/// Apply a 3x3 convolution filter to the [src] image.  [filter] should be a

+/// list of 9 doubles.

+///

+/// The rgb channels will be divided by [filterDiv] and add [offset], allowing

+/// filters to normalize and offset the filtered pixel value.

 Image convolution(Image src, List<num> filter,

-                  [num filterDiv = 1.0, num offset = 0.0]) {

+    [num filterDiv = 1.0, num offset = 0.0]) {

   Image tmp = Image.from(src);

 

   for (int y = 0; y < src.height; ++y) {

@@ -22,9 +20,9 @@
       double b = 0.0;

       int a = getAlpha(c);

       for (int j = 0, fi = 0; j < 3; ++j) {

-        int yv = Math.min(Math.max(y - 1 + j, 0), src.height - 1);

+        int yv = min(max(y - 1 + j, 0), src.height - 1);

         for (int i = 0; i < 3; ++i, ++fi) {

-          int xv = Math.min(Math.max(x - 1 + i, 0), src.width - 1);

+          int xv = min(max(x - 1 + i, 0), src.width - 1);

           int c2 = tmp.getPixel(xv, yv);

           r += getRed(c2) * filter[fi];

           g += getGreen(c2) * filter[fi];

diff --git a/image/lib/src/filter/emboss.dart b/image/lib/src/filter/emboss.dart
index 1b5a355..a91b0a0 100755
--- a/image/lib/src/filter/emboss.dart
+++ b/image/lib/src/filter/emboss.dart
@@ -1,14 +1,19 @@
 import '../image.dart';

 import 'convolution.dart';

 

-/**

- * Apply an emboss convolution filter.

- */

+/// Apply an emboss convolution filter.

 Image emboss(Image src) {

-  const List<double> filter = const[

-    1.5, 0.0,  0.0,

-    0.0, 0.0,  0.0,

-    0.0, 0.0, -1.5];

+  const List<double> filter = const [

+    1.5,

+    0.0,

+    0.0,

+    0.0,

+    0.0,

+    0.0,

+    0.0,

+    0.0,

+    -1.5

+  ];

 

   return convolution(src, filter, 1, 127);

 }

diff --git a/image/lib/src/filter/gaussian_blur.dart b/image/lib/src/filter/gaussian_blur.dart
index 5bc657d..a98633a 100755
--- a/image/lib/src/filter/gaussian_blur.dart
+++ b/image/lib/src/filter/gaussian_blur.dart
@@ -1,4 +1,4 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

 import '../image.dart';

 import 'seperable_convolution.dart';

@@ -6,11 +6,9 @@
 

 Map<int, SeperableKernel> _gaussianKernelCache = {};

 

-/**

- * Apply gaussian blur to the [src] image.  [radius] determines how many pixels

- * away from the current pixel should contribute to the blur, where 0 is no

- * blur and the larger the radius, the stronger the blur.

- */

+/// Apply gaussian blur to the [src] image.  [radius] determines how many pixels

+/// away from the current pixel should contribute to the blur, where 0 is no

+/// blur and the larger the radius, the stronger the blur.

 Image gaussianBlur(Image src, int radius) {

   if (radius <= 0) {

     return src;

@@ -29,7 +27,7 @@
 

     double sum = 0.0;

     for (int x = -radius; x <= radius; ++x) {

-      double c = Math.exp(-(x * x) / s);

+      double c = exp(-(x * x) / s);

       sum += c;

       kernel[x + radius] = c;

     }

diff --git a/image/lib/src/filter/grayscale.dart b/image/lib/src/filter/grayscale.dart
index 5084469..b102245 100755
--- a/image/lib/src/filter/grayscale.dart
+++ b/image/lib/src/filter/grayscale.dart
@@ -1,9 +1,7 @@
 import '../color.dart';

 import '../image.dart';

 

-/**

- * Convert the image to grayscale.

- */

+/// Convert the image to grayscale.

 Image grayscale(Image src) {

   var p = src.getBytes();

   for (int i = 0, len = p.length; i < len; i += 4) {

diff --git a/image/lib/src/filter/invert.dart b/image/lib/src/filter/invert.dart
index df64659..d0480cc 100755
--- a/image/lib/src/filter/invert.dart
+++ b/image/lib/src/filter/invert.dart
@@ -1,8 +1,6 @@
 import '../image.dart';

 

-/**

- * Invert the colors of the [src] image.

- */

+/// Invert the colors of the [src] image.

 Image invert(Image src) {

   var p = src.getBytes();

   for (int i = 0, len = p.length; i < len; i += 4) {

diff --git a/image/lib/src/filter/noise.dart b/image/lib/src/filter/noise.dart
index dd4d8ef..e97ab19 100755
--- a/image/lib/src/filter/noise.dart
+++ b/image/lib/src/filter/noise.dart
@@ -1,4 +1,4 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

 import '../color.dart';

 import '../image.dart';

@@ -7,24 +7,26 @@
 

 /// Gaussian noise type used by [noise].

 const int NOISE_GAUSSIAN = 0;

+

 /// Uniform noise type used by [noise].

 const int NOISE_UNIFORM = 1;

+

 /// Salt&Pepper noise type used by [noise].

 const int NOISE_SALT_PEPPER = 2;

+

 /// Poisson noise type used by [noise].

 const int NOISE_POISSON = 3;

+

 /// Rice noise type used by [noise].

 const int NOISE_RICE = 4;

 

-/**

- * Add random noise to pixel values.  [sigma] determines how strong the effect

- * should be.  [type] should be one of the following: [NOISE_GAUSSIAN],

- * [NOISE_UNIFORM], [NOISE_SALT_PEPPER], [NOISE_POISSON], or [NOISE_RICE].

- */

-Image noise(Image image, double sigma, {int type: NOISE_GAUSSIAN,

-  Math.Random random}) {

+/// Add random noise to pixel values.  [sigma] determines how strong the effect

+/// should be.  [type] should be one of the following: [NOISE_GAUSSIAN],

+/// [NOISE_UNIFORM], [NOISE_SALT_PEPPER], [NOISE_POISSON], or [NOISE_RICE].

+Image noise(Image image, double sigma,

+    {int type = NOISE_GAUSSIAN, Random random}) {

   if (random == null) {

-    random = Math.Random();

+    random = Random();

   }

 

   double nsigma = sigma;

@@ -57,7 +59,7 @@
         image[i] = getColor(r, g, b, a);

       }

       break;

-    case NOISE_UNIFORM :

+    case NOISE_UNIFORM:

       for (int i = 0; i < len; ++i) {

         int c = image[i];

         int r = (getRed(c) + nsigma * crand(random)).toInt();

@@ -97,26 +99,26 @@
       }

       break;

     case NOISE_RICE:

-      double sqrt2 = Math.sqrt(2.0);

+      double sqrt2 = sqrt(2.0);

       for (int i = 0; i < len; ++i) {

         int c = image[i];

 

         double val0 = getRed(c) / sqrt2;

         double re = (val0 + nsigma * grand(random));

         double im = (val0 + nsigma * grand(random));

-        double val = Math.sqrt(re * re + im * im);

+        double val = sqrt(re * re + im * im);

         int r = val.toInt();

 

         val0 = getGreen(c) / sqrt2;

         re = (val0 + nsigma * grand(random));

         im = (val0 + nsigma * grand(random));

-        val = Math.sqrt(re * re + im * im);

+        val = sqrt(re * re + im * im);

         int g = val.toInt();

 

         val0 = getBlue(c) / sqrt2;

         re = (val0 + nsigma * grand(random));

         im = (val0 + nsigma * grand(random));

-        val = Math.sqrt(re * re + im * im);

+        val = sqrt(re * re + im * im);

         int b = val.toInt();

 

         int a = getAlpha(c);

diff --git a/image/lib/src/filter/normalize.dart b/image/lib/src/filter/normalize.dart
index 6bfeb1a..641a9fb 100755
--- a/image/lib/src/filter/normalize.dart
+++ b/image/lib/src/filter/normalize.dart
@@ -4,15 +4,13 @@
 import '../draw/fill.dart';

 import '../util/min_max.dart';

 

-/**

- * Linearly normalize the colors of the image.  All color values will be mapped

- * to the range [minValue], [maxValue] inclusive.

- */

+/// Linearly normalize the colors of the image.  All color values will be mapped

+/// to the range [minValue], [maxValue] inclusive.

 Image normalize(Image src, int minValue, int maxValue) {

   int A = minValue < maxValue ? minValue : maxValue;

   int B = minValue < maxValue ? maxValue : minValue;

 

-  List mM = minMax(src);

+  var mM = minMax(src);

   int m = mM[0];

   int M = mM[1];

 

diff --git a/image/lib/src/filter/pixelate.dart b/image/lib/src/filter/pixelate.dart
index 8eb5d2c..3192f11 100755
--- a/image/lib/src/filter/pixelate.dart
+++ b/image/lib/src/filter/pixelate.dart
@@ -4,19 +4,18 @@
 

 /// Use the top-left pixel of a block for the block color, used by [pixelate].

 const int PIXELATE_UPPERLEFT = 0;

+

 /// Use the average of the pixels within a block for the block color, used by

 /// [pixelate].

 const int PIXELATE_AVERAGE = 1;

 

-/**

- * Pixelate the [src] image.

- *

- * [blockSize] determines the size of the pixelated blocks.

- * If [mode] is [PIXELATE_UPPERLEFT] then the upper-left corner of the block

- * will be used for the block color. Otherwise if [mode] is [PIXELATE_AVERAGE],

- * the average of all the pixels in the block will be used for the block color.

- */

-Image pixelate(Image src, int blockSize, {int mode: PIXELATE_UPPERLEFT}) {

+/// Pixelate the [src] image.

+///

+/// [blockSize] determines the size of the pixelated blocks.

+/// If [mode] is [PIXELATE_UPPERLEFT] then the upper-left corner of the block

+/// will be used for the block color. Otherwise if [mode] is [PIXELATE_AVERAGE],

+/// the average of all the pixels in the block will be used for the block color.

+Image pixelate(Image src, int blockSize, {int mode = PIXELATE_UPPERLEFT}) {

   if (blockSize <= 1) {

     return src;

   }

diff --git a/image/lib/src/filter/quantize.dart b/image/lib/src/filter/quantize.dart
index 39278bc..e3455ad 100755
--- a/image/lib/src/filter/quantize.dart
+++ b/image/lib/src/filter/quantize.dart
@@ -3,16 +3,12 @@
 import '../image.dart';

 import '../util/neural_quantizer.dart';

 

-enum QuantizeMethod {

-  neuralNet,

-  octree

-}

+enum QuantizeMethod { neuralNet, octree }

 

-/**

- * Quantize the number of colors in image to 256.

- */

-Image quantize(Image src, {int numberOfColors=256,

-               QuantizeMethod method=QuantizeMethod.neuralNet}) {

+/// Quantize the number of colors in image to 256.

+Image quantize(Image src,

+    {int numberOfColors = 256,

+    QuantizeMethod method = QuantizeMethod.neuralNet}) {

   if (method == QuantizeMethod.octree || numberOfColors < 4) {

     OctreeQuantizer oct = OctreeQuantizer(src, numberOfColors: numberOfColors);

     for (int i = 0, len = src.length; i < len; ++i) {

diff --git a/image/lib/src/filter/remap_colors.dart b/image/lib/src/filter/remap_colors.dart
index a2261f2..efaef38 100755
--- a/image/lib/src/filter/remap_colors.dart
+++ b/image/lib/src/filter/remap_colors.dart
@@ -1,19 +1,13 @@
 import '../color.dart';

 import '../image.dart';

 

-/**

- * Remap the color channels of the image.

- * [red], [green], [blue] and [alpha] should be set to one of the following:

- * [RED], [GREEN], [BLUE] or [ALPHA].  For example,

- * remapColors(src, red: GREEN, green: RED);

- * will swap the red and green channels of the image.

- */

+/// Remap the color channels of the image.

+/// [red], [green], [blue] and [alpha] should be set to one of the following:

+/// [RED], [GREEN], [BLUE] or [ALPHA].  For example,

+/// remapColors(src, red: GREEN, green: RED);

+/// will swap the red and green channels of the image.

 Image remapColors(Image src,

-   {int red: RED,

-    int green: GREEN,

-    int blue: BLUE,

-    int alpha: ALPHA}) {

-

+    {int red = RED, int green = GREEN, int blue = BLUE, int alpha = ALPHA}) {

   List<int> l = [0, 0, 0, 0, 0];

   var p = src.getBytes();

   for (int i = 0, len = p.length; i < len; i += 4) {

@@ -21,7 +15,9 @@
     l[1] = p[i + 1];

     l[2] = p[i + 2];

     l[3] = p[i + 3];

-    if (red == LUMINANCE || green == LUMINANCE || blue == LUMINANCE ||

+    if (red == LUMINANCE ||

+        green == LUMINANCE ||

+        blue == LUMINANCE ||

         alpha == LUMINANCE) {

       l[4] = getLuminanceRGB(l[0], l[1], l[2]);

     }

diff --git a/image/lib/src/filter/seperable_convolution.dart b/image/lib/src/filter/seperable_convolution.dart
index 6ff5a5a..048eb6f 100755
--- a/image/lib/src/filter/seperable_convolution.dart
+++ b/image/lib/src/filter/seperable_convolution.dart
@@ -1,12 +1,10 @@
 import '../image.dart';

 import 'seperable_kernel.dart';

 

-/**

- * Apply a generic seperable convolution filter the [src] image, using the

- * given [kernel].

- *

- * [gaussianBlur] is an example of such a filter.

- */

+/// Apply a generic seperable convolution filter the [src] image, using the

+/// given [kernel].

+///

+/// [gaussianBlur] is an example of such a filter.

 Image seperableConvolution(Image src, SeperableKernel kernel) {

   // Apply the filter horizontally

   Image tmp = Image.from(src);

diff --git a/image/lib/src/filter/seperable_kernel.dart b/image/lib/src/filter/seperable_kernel.dart
index db0b39e..3bf3bfb 100755
--- a/image/lib/src/filter/seperable_kernel.dart
+++ b/image/lib/src/filter/seperable_kernel.dart
@@ -1,44 +1,32 @@
 import '../color.dart';

 import '../image.dart';

 

-/**

- * A kernel object to use with [seperableConvolution] filtering.

- */

+/// A kernel object to use with [seperableConvolution] filtering.

 class SeperableKernel {

   final List<double> coefficients;

   final int size;

 

-  /**

-   * Create a seperable convolution kernel for the given [radius].

-   */

-  SeperableKernel(int radius) :

-    coefficients = List<double>(2 * radius + 1),

-    this.size = radius;

+  /// Create a seperable convolution kernel for the given [radius].

+  SeperableKernel(int radius)

+      : coefficients = List<double>(2 * radius + 1),

+        this.size = radius;

 

-  /**

-   * Get the number of coefficients in the kernel.

-   */

+  /// Get the number of coefficients in the kernel.

   int get length => coefficients.length;

 

-  /**

-   * Get a coefficient from the kernel.

-   */

-  double operator[](int index) => coefficients[index];

+  /// Get a coefficient from the kernel.

+  double operator [](int index) => coefficients[index];

 

-  /**

-   * Set a coefficient in the kernel.

-   */

-  void operator[]=(int index, double c) {

+  /// Set a coefficient in the kernel.

+  void operator []=(int index, double c) {

     coefficients[index] = c;

   }

 

-  /**

-   * Apply the kernel to the [src] image, storing the results in [dst],

-   * for a single dimension. If [horizontal is true, the filter will be

-   * applied to the horizontal axis, otherwise it will be appied to the

-   * vertical axis.

-   */

-  void apply(Image src, Image dst, {bool horizontal: true}) {

+  /// Apply the kernel to the [src] image, storing the results in [dst],

+  /// for a single dimension. If [horizontal is true, the filter will be

+  /// applied to the horizontal axis, otherwise it will be appied to the

+  /// vertical axis.

+  void apply(Image src, Image dst, {bool horizontal = true}) {

     if (horizontal) {

       for (int y = 0; y < src.height; ++y) {

         _applyCoeffsLine(src, dst, y, src.width, horizontal);

@@ -50,9 +38,7 @@
     }

   }

 

-  /**

-   * Scale all of the coefficients by [s].

-   */

+  /// Scale all of the coefficients by [s].

   void scaleCoefficients(double s) {

     for (int i = 0; i < coefficients.length; ++i) {

       coefficients[i] *= s;

@@ -69,8 +55,8 @@
     return x;

   }

 

-  void _applyCoeffsLine(Image src, Image dst, int y, int width,

-                        bool horizontal) {

+  void _applyCoeffsLine(

+      Image src, Image dst, int y, int width, bool horizontal) {

     for (int x = 0; x < width; x++) {

       double r = 0.0;

       double g = 0.0;

@@ -81,9 +67,7 @@
         double coeff = coefficients[j2];

         int gr = _reflect(width, x + j);

 

-        int sc = (horizontal) ?

-            src.getPixel(gr, y) :

-            src.getPixel(y, gr);

+        int sc = (horizontal) ? src.getPixel(gr, y) : src.getPixel(y, gr);

 

         r += coeff * getRed(sc);

         g += coeff * getGreen(sc);

@@ -91,7 +75,8 @@
         a += coeff * getAlpha(sc);

       }

 

-      int c = getColor((r > 255.0 ? 255.0 : r).toInt(),

+      int c = getColor(

+          (r > 255.0 ? 255.0 : r).toInt(),

           (g > 255.0 ? 255.0 : g).toInt(),

           (b > 255.0 ? 255.0 : b).toInt(),

           (a > 255.0 ? 255.0 : a).toInt());

diff --git a/image/lib/src/filter/sepia.dart b/image/lib/src/filter/sepia.dart
index 1babf40..237049f 100755
--- a/image/lib/src/filter/sepia.dart
+++ b/image/lib/src/filter/sepia.dart
@@ -2,12 +2,10 @@
 import '../image.dart';

 import '../internal/clamp.dart';

 

-/**

- * Apply sepia tone to the image.

- *

- * [amount] controls the strength of the effect, in the range 0.0 - 1.0.

- */

-Image sepia(Image src, {num amount: 1.0}) {

+/// Apply sepia tone to the image.

+///

+/// [amount] controls the strength of the effect, in the range 0.0 - 1.0.

+Image sepia(Image src, {num amount = 1.0}) {

   if (amount == 0) {

     return src;

   }

diff --git a/image/lib/src/filter/smooth.dart b/image/lib/src/filter/smooth.dart
index a3ad256..9ad01da 100755
--- a/image/lib/src/filter/smooth.dart
+++ b/image/lib/src/filter/smooth.dart
@@ -1,17 +1,12 @@
 import '../image.dart';

 import 'convolution.dart';

 

-/**

- * Apply a smoothing convolution filter to the [src] image.

- *

- * [w] is the weight of the current pixel being filtered.  If it's greater than

- * 1.0, it will make the image sharper.

- */

+/// Apply a smoothing convolution filter to the [src] image.

+///

+/// [w] is the weight of the current pixel being filtered.  If it's greater than

+/// 1.0, it will make the image sharper.

 Image smooth(Image src, num w) {

-  List<double> filter = [

-    1.0, 1.0, 1.0,

-    1.0, w.toDouble(),   1.0,

-    1.0, 1.0, 1.0];

+  List<double> filter = [1.0, 1.0, 1.0, 1.0, w.toDouble(), 1.0, 1.0, 1.0, 1.0];

 

   return convolution(src, filter, w + 8, 0);

 }

diff --git a/image/lib/src/filter/sobel.dart b/image/lib/src/filter/sobel.dart
index b5ac4e0..c694f82 100755
--- a/image/lib/src/filter/sobel.dart
+++ b/image/lib/src/filter/sobel.dart
@@ -1,15 +1,12 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

 import '../image.dart';

 import '../internal/clamp.dart';

 import 'grayscale.dart';

 

-

-/**

- * Apply Sobe edge detection filtering to the [src] Image.

- */

-Image sobel(Image src, {double amount: 1.0}) {

-  double invAmount = 1.0 - amount;

+/// Apply Sobel edge detection filtering to the [src] Image.

+Image sobel(Image src, {num amount = 1.0}) {

+  num invAmount = 1.0 - amount;

   Image orig = grayscale(new Image.from(src));

   final List<int> origRGBA = orig.getBytes();

   int rowSize = src.width * 4;

@@ -26,23 +23,25 @@
       int t = pi - rowSize;

       int tr = pi - rowSize + 4;

 

-      double tlInt = tl < 0 ? 0.0 : origRGBA[tl] / 255.0;

-      double tInt = t < 0 ? 0.0 : origRGBA[t] / 255.0;

-      double trInt = tr < 0 ? 0.0 : origRGBA[tr] / 255.0;

-      double lInt = l < 0 ? 0.0 : origRGBA[l] / 255.0;

-      double rInt = r < rgbaLen ? origRGBA[r] / 255.0 : 0.0;

-      double blInt = bl < rgbaLen ? origRGBA[bl] / 255.0 : 0.0;

-      double bInt = b < rgbaLen ? origRGBA[b] / 255.0 : 0.0;

-      double brInt = br < rgbaLen ? origRGBA[br] / 255.0 : 0.0;

+      num tlInt = tl < 0 ? 0.0 : origRGBA[tl] / 255.0;

+      num tInt = t < 0 ? 0.0 : origRGBA[t] / 255.0;

+      num trInt = tr < 0 ? 0.0 : origRGBA[tr] / 255.0;

+      num lInt = l < 0 ? 0.0 : origRGBA[l] / 255.0;

+      num rInt = r < rgbaLen ? origRGBA[r] / 255.0 : 0.0;

+      num blInt = bl < rgbaLen ? origRGBA[bl] / 255.0 : 0.0;

+      num bInt = b < rgbaLen ? origRGBA[b] / 255.0 : 0.0;

+      num brInt = br < rgbaLen ? origRGBA[br] / 255.0 : 0.0;

 

-      double h = -tlInt - 2.0 * tInt - trInt + blInt + 2.0 * bInt + brInt;

-      double v = -blInt - 2.0 * lInt - tlInt + brInt + 2.0 * rInt + trInt;

+      num h = -tlInt - 2.0 * tInt - trInt + blInt + 2.0 * bInt + brInt;

+      num v = -blInt - 2.0 * lInt - tlInt + brInt + 2.0 * rInt + trInt;

 

-      int mag = clamp255((Math.sqrt(h * h + v * v) * 255.0).toInt());

+      int mag = clamp255((sqrt(h * h + v * v) * 255.0).toInt());

 

       rgba[pi] = clamp255((mag * amount + rgba[pi] * invAmount).toInt());

-      rgba[pi + 1] = clamp255((mag * amount + rgba[pi + 1] * invAmount).toInt());

-      rgba[pi + 2] = clamp255((mag * amount + rgba[pi + 2] * invAmount).toInt());

+      rgba[pi + 1] =

+          clamp255((mag * amount + rgba[pi + 1] * invAmount).toInt());

+      rgba[pi + 2] =

+          clamp255((mag * amount + rgba[pi + 2] * invAmount).toInt());

     }

   }

 

diff --git a/image/lib/src/filter/vignette.dart b/image/lib/src/filter/vignette.dart
index 37e1e9d..66a9f89 100755
--- a/image/lib/src/filter/vignette.dart
+++ b/image/lib/src/filter/vignette.dart
@@ -1,9 +1,9 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

 import '../image.dart';

 import '../internal/clamp.dart';

 

-double _smoothStep(double edge0, double edge1, double x) {

+num _smoothStep(num edge0, num edge1, num x) {

   x = ((x - edge0) / (edge1 - edge0));

   if (x < 0.0) {

     x = 0.0;

@@ -14,18 +14,18 @@
   return x * x * (3.0 - 2.0 * x);

 }

 

-Image vignette(Image src, {double start: 0.3, double end: 0.75,

-               double amount: 0.8}) {

+Image vignette(Image src,

+    {num start = 0.3, num end = 0.75, num amount = 0.8}) {

   final int h = src.height - 1;

   final int w = src.width - 1;

-  double invAmt = 1.0 - amount;

+  num invAmt = 1.0 - amount;

   var p = src.getBytes();

   for (int y = 0, i = 0; y <= h; ++y) {

-    double dy = 0.5 - (y / h);

+    num dy = 0.5 - (y / h);

     for (int x = 0; x <= w; ++x, i += 4) {

-      double dx = 0.5 - (x / w);

+      num dx = 0.5 - (x / w);

 

-      double d = Math.sqrt(dx * dx + dy * dy);

+      num d = sqrt(dx * dx + dy * dy);

       d = _smoothStep(end, start, d);

 

       p[i] = clamp255((amount * p[i] * d + invAmt * p[i]).toInt());

diff --git a/image/lib/src/fonts/arial_14.dart b/image/lib/src/fonts/arial_14.dart
index 288ee3c..6dfcc55 100755
--- a/image/lib/src/fonts/arial_14.dart
+++ b/image/lib/src/fonts/arial_14.dart
@@ -1,32 +1,5775 @@
 import '../bitmap_font.dart';

 

-/**

- * 14px Arial font for use with [drawString] and [drawChar].

- */

+/// 14px Arial font for use with [drawString] and [drawChar].

 final BitmapFont arial_14 = BitmapFont.fromZip(_ARIAL_14);

 

 const List<int> _ARIAL_14 = const [

-  80, 75, 3, 4, 20, 0, 0, 8, 8, 0, 184, 182, 42, 68, 36, 55, 216, 103, 135, 15, 0, 0, 133, 15, 0, 0, 12, 0, 0, 0, 97, 114, 105, 97, 108, 95, 49, 52, 46, 112,

-  110, 103, 117, 215, 119, 48, 27, 142, 223, 7, 240, 32, 86, 137, 86, 141, 146, 134, 106, 81, 212, 38, 20, 165, 182, 216, 171, 86, 218, 218, 148, 162, 21, 69,

-  80, 123, 212, 94, 169, 88, 21, 177, 171, 173, 61, 66, 17, 163, 95, 21, 171, 182, 47, 181, 66, 236, 189, 247, 168, 95, 239, 126, 207, 31, 207, 221, 115,

-  207, 221, 251, 222, 247, 254, 247, 115, 247, 249, 231, 21, 99, 168, 15, 3, 221, 0, 223, 0, 0, 0, 32, 45, 77, 53, 99, 0, 128, 2, 244, 119, 223, 166, 161, 250,

-  219, 236, 49, 18, 146, 0, 192, 77, 93, 45, 53, 101, 19, 223, 201, 45, 203, 4, 84, 33, 158, 1, 79, 15, 33, 191, 127, 235, 191, 9, 83, 229, 2, 170, 112, 69,

-  136, 2, 85, 50, 110, 117, 205, 93, 190, 253, 182, 89, 102, 165, 167, 195, 74, 223, 116, 114, 80, 250, 173, 172, 41, 147, 108, 170, 171, 186, 48, 205, 225,

-  96, 1, 86, 160, 145, 0, 150, 114, 25, 253, 98, 244, 127, 198, 144, 48, 218, 248, 83, 240, 159, 203, 51, 235, 179, 139, 35, 63, 230, 86, 197, 215, 136,

-  90, 201, 63, 231, 47, 112, 72, 180, 191, 213, 228, 159, 35, 217, 231, 11, 2, 129, 75, 179, 216, 81, 215, 133, 211, 163, 157, 227, 203, 235, 138, 214,

-  238, 11, 249, 177, 140, 242, 58, 84, 231, 112, 187, 164, 240, 192, 192, 192, 94, 213, 138, 80, 14, 169, 126, 69, 210, 43, 63, 73, 125, 247, 53, 97,

-  246, 192, 135, 226, 178, 133, 253, 160, 110, 201, 213, 110, 187, 196, 201, 62, 248, 15, 213, 9, 37, 164, 253, 224, 90, 183, 174, 235, 50, 96, 190, 239,

-  224, 122, 64, 52, 183, 149, 186, 223, 188, 229, 85, 71, 203, 146, 212, 217, 9, 199, 83, 131, 1, 87, 196, 159, 160, 43, 142, 1, 241, 246, 223, 55, 197, 97,

-  216, 160, 184, 95, 90, 96, 102, 162, 254, 217, 201, 215, 7, 130, 31, 24, 50, 118, 172, 94, 84, 216, 101, 139, 79, 156, 230, 174, 120, 230, 253, 50, 61, 55,

-  207, 209, 105, 2, 140, 127, 144, 38, 60, 80, 197, 226, 144, 142, 205, 44, 19, 101, 165, 164, 167, 3, 103, 239, 53, 234, 127, 20, 32, 9, 151, 61, 45, 220, 254,

-  15, 209, 158, 170, 179, 101, 218, 214, 241, 72, 189, 129, 229, 149, 4, 167, 41, 74, 63, 120, 170, 236, 134, 7, 222, 237, 173, 160, 68, 170, 252, 129, 129, 215,

-  63, 207, 225, 246, 150, 142, 194, 35, 184, 12, 239, 223, 170, 235, 220, 210, 229, 251, 248, 73, 167, 125, 250, 123, 114, 212, 57, 37, 117, 137, 120, 9, 222,

-  165, 150, 7, 237, 70, 147, 6, 175, 30, 239, 179, 217, 151, 37, 228, 223, 251, 0, 169, 108, 128, 64, 57, 151, 102, 31, 47, 162, 134, 244, 247, 215, 31, 245, 213, 177, 201, 237, 43, 194, 20, 247, 54, 47, 229, 29, 141, 187, 210, 208, 87, 252, 142, 154, 174, 116, 135, 235, 26, 99, 179, 38, 153, 215, 95, 75, 115, 220, 118, 110, 46, 53, 138, 108, 160, 109, 106, 113, 46, 174, 140, 231, 147, 181, 126, 60, 158, 162, 126, 213, 175, 61, 59, 150, 181, 122, 88, 247, 174, 195, 164, 245, 223, 85, 140, 118, 12, 237, 167, 151, 29, 187, 186, 66, 15, 38, 208, 182, 47, 139, 227, 115, 56, 225, 166, 132, 95, 99, 177, 47, 123, 127, 124, 154, 227, 22, 45, 191, 47, 121, 153, 66, 142, 4, 143, 217, 37, 219, 191, 117, 194, 49, 127, 32, 41, 165, 253, 233, 245, 29, 155, 126, 11, 99, 107, 1, 39, 42, 51, 183, 61, 192, 34, 78, 185, 215, 220, 125, 169, 125, 153, 237, 233, 7, 82, 247, 101, 138, 47, 253, 58, 59, 140, 89, 13, 26, 172, 192, 122, 98, 154, 113, 4, 190, 85, 251, 254, 113, 183, 119, 85, 41, 126, 83, 241, 85, 48, 47, 195, 30, 242, 112, 39, 57, 205, 11, 45, 70, 47, 22, 40, 115, 7, 127, 91, 55, 31, 34, 35, 231, 69, 88, 52, 48, 215, 38, 149, 139, 234, 142, 232, 139, 46, 141, 86, 48, 23, 205, 59, 34, 243, 135, 170, 2, 146, 161, 131, 35, 65, 202, 2, 242, 88, 93, 250, 196, 238, 55, 233, 64, 4, 195, 228, 230, 217, 51, 254, 230, 70, 87, 218, 213, 130, 53, 226, 229, 184, 100, 148, 232, 201, 29, 178, 104, 51, 71, 82, 137, 18, 5, 5, 253, 29, 165, 246, 82, 118, 133, 97, 159, 225, 83, 21, 66, 54, 66, 159, 212, 212, 45, 110, 64, 71, 1, 165, 132, 22, 96, 76, 38, 57, 34, 22, 12, 189, 134, 85, 14, 213, 123, 14, 98, 60, 253, 163, 143, 98, 236, 133, 246, 207, 246, 102, 224, 131, 201, 57, 47, 60, 189, 172, 198, 184, 60, 221, 148, 168, 204, 95, 233, 96, 24, 90, 47, 203, 5, 229, 204, 72, 35, 154, 24, 137, 134, 32, 66, 126, 175, 160, 254, 90, 156, 110, 54, 0, 100, 180, 27, 216, 43, 191, 101, 24, 132, 29, 72, 91, 122, 40, 51, 201, 191, 17, 112, 91, 250, 11, 223, 85, 41, 220, 12, 102, 103, 206, 77, 198, 158, 148, 69, 158, 207, 234, 156, 43, 167, 59, 20, 30, 94, 89, 246, 241, 78, 201, 60, 155, 190, 132, 166, 199, 223, 67, 17, 116, 151, 34, 193, 85, 203, 171, 142, 196, 1, 49, 164, 192, 206, 253, 250, 189, 65, 136, 65, 242, 108, 68, 93, 26, 165, 132, 17, 231, 163, 57, 187, 59, 248, 157, 212, 163, 69, 28, 147, 194, 169, 122, 1, 213, 122, 141, 174, 246, 45, 9, 26, 107, 223, 135, 141, 30, 140, 65, 83, 102, 100, 63, 107, 126, 232, 124, 30, 160, 32, 73, 77, 122, 172, 101, 233, 176, 103, 119, 101, 232, 132, 120, 49, 111, 64, 111, 65, 66, 130, 14, 148, 151, 4, 172, 229, 199, 32, 86, 171, 8, 195, 124, 83, 137, 79, 247, 246, 1, 97, 228, 98, 84, 203, 104, 199, 60, 199, 126, 226, 58, 115, 190, 41, 184, 195, 78, 62, 97, 101, 45, 70, 130, 214, 161, 234, 144, 165, 184, 176, 98, 87, 236, 134, 42, 206, 4, 83, 104, 20, 38, 112, 26, 48, 154, 63, 31, 43, 153, 12, 57, 32, 16, 90, 70, 31, 48, 68, 192, 24, 33, 241, 219, 64, 231, 228, 72, 183, 52, 13, 96, 1, 111, 230, 137, 63, 118, 133, 241, 180, 157, 30, 25, 179, 184, 19, 169, 178, 105, 163, 207, 153, 26, 221, 251, 150, 127, 125, 216, 202, 154, 236, 222, 175, 76, 108, 215, 75, 189, 216, 240, 223, 140, 134, 175, 5, 38, 58, 59, 116, 243, 59, 127, 112, 226, 126, 197, 162, 247, 118, 200, 65, 96, 27, 25, 90, 176, 180, 128, 100, 165, 25, 114, 194, 7, 155, 52, 179, 64, 35, 56, 116, 153, 250, 171, 149, 245, 42, 136, 198, 82, 162, 90, 169, 119, 2, 233, 88, 215, 255, 156, 9, 220, 229, 173, 182, 208, 156, 123, 159, 77, 95, 230, 2, 155, 208, 204, 214, 17, 94, 251, 68, 64, 2, 247, 111, 245, 77, 177, 164, 236, 207, 179, 160, 137, 27, 84, 171, 193, 40, 129, 110, 24, 218, 31, 21, 136, 17, 188, 226, 20, 170, 174, 112, 100, 175, 149, 142, 46, 75, 171, 67, 2, 168, 29, 62, 74, 100, 86, 236, 48, 103, 98, 137, 64, 186, 28, 136, 98, 159, 79, 3, 45, 70, 40, 182, 127, 42, 130, 35, 93, 58, 224,

-  215, 184, 208, 190, 255, 112, 11, 31, 69, 165, 160, 235, 46, 25, 242, 13, 175, 190, 95, 204, 47, 106, 196, 121, 102, 25, 156, 100, 64, 151, 95, 250, 203, 201, 104, 204, 215, 196, 151, 93, 116, 50, 70, 111, 143, 229, 137, 71, 31, 42, 144, 202, 207, 189, 118, 17, 94, 46, 252, 170, 152, 54, 100, 130, 93, 172, 206, 151, 2, 79, 20, 154, 43, 7, 26, 90, 164, 145, 140, 246, 246, 50, 20, 191, 190, 170, 234, 93, 20, 169, 252, 158, 57, 226, 203, 92, 148, 202, 62, 193, 68, 57, 239, 33, 143, 68, 145, 203, 90, 146, 219, 166, 106, 84, 122, 240, 51, 116, 20, 127, 188, 213, 80, 57, 128, 230, 35, 211, 46, 9, 141, 28, 98, 75, 89, 227, 97, 236, 156, 148, 210, 128, 81, 169, 45, 164, 243, 129, 45, 88, 213, 195, 222, 69, 238, 138, 56, 183, 209, 176, 208, 236, 148, 178, 149, 221, 63, 169, 81, 130, 186, 138, 229, 127, 148, 140, 251, 93, 21, 196, 30, 194, 203, 24, 213, 47, 193, 227, 88, 181, 140, 172, 151, 204, 85, 150, 83, 240, 147, 207, 34, 51, 124, 223, 137, 241, 230, 113, 245, 228, 115, 174, 196, 74, 6, 248, 124, 254, 65, 78, 207, 167, 220, 206, 83, 224, 202, 27, 251, 229, 208, 18, 114, 226, 44, 243, 79, 147, 81, 228, 160, 255, 74, 183, 253, 165, 72, 221, 197, 237, 25, 106, 203, 21, 100, 203, 54, 0, 164, 113, 108, 99, 203, 69, 69, 111, 207, 231, 77, 191, 110, 135, 72, 12, 27, 38, 144, 161, 26, 44, 106, 92, 105, 74, 93, 28, 233, 118, 117, 163, 236, 12, 164, 50, 63, 21, 77, 171, 142, 34, 43, 149, 10, 156, 69, 115, 91, 234, 171, 233, 245, 59, 27, 166, 21, 233, 102, 237, 68, 121, 185, 113, 251, 183, 132, 55, 252, 109, 133, 202, 171, 19, 154, 182, 165, 180, 129, 41, 199, 178, 3, 112, 174, 204, 68, 173, 238, 87, 148, 247, 173, 105, 221, 136, 159, 101, 186, 186, 15, 228, 37, 232, 110, 186, 22, 112, 111, 228, 9, 78, 32, 4, 157, 77, 40, 250, 169, 156, 163, 221, 67, 34, 239,

-  192, 210, 79, 37, 117, 104, 93, 198, 191, 217, 66, 54, 130, 198, 200, 227, 28, 133, 180, 77, 219, 129, 240, 130, 47, 38, 245, 144, 91, 183, 216, 44, 196, 154, 88, 209, 41, 100, 102, 40, 35, 90, 214, 224, 127, 133, 30, 202, 40, 22, 201, 23, 61, 131, 16, 65, 17, 200, 7, 70, 208, 164, 61, 75, 53, 168, 151, 201, 121, 227, 102, 155, 47, 39, 54, 36, 249, 44, 86, 149, 97, 45, 183, 221, 168, 126, 224, 88, 230, 82, 100, 112, 240, 201, 233, 18, 150, 41, 122, 117, 19, 171, 89, 205, 4, 13, 40, 20, 73, 120, 191, 207, 210, 227, 73, 176, 139, 40, 196, 160, 190, 16, 141, 190, 38, 17, 225, 153, 156, 49, 167, 39, 44, 78, 107, 20, 94, 206, 112, 242, 185, 78, 6, 165, 247, 143, 29, 92, 158, 218, 66, 45, 51, 65, 19, 173, 117, 48, 245, 166, 68, 254, 30, 18, 213, 2, 246, 45, 0, 36, 73, 23, 246, 18, 8, 42, 242, 50, 216, 46, 96, 7, 181, 73, 196, 206, 169, 28, 142, 30, 184, 50, 194, 120, 179, 21, 82, 74, 23, 131, 242, 102, 76, 209, 248, 50, 109, 129, 103, 112, 85, 90, 200, 24, 41, 75, 169, 61, 46, 92, 148, 59, 84, 141, 213, 169, 82, 225, 110, 87, 15, 249, 213, 38, 203, 76, 26, 164, 95, 125, 232, 217, 80, 193, 93, 53, 128, 189, 60, 89, 152, 98, 168, 116, 70, 184, 38, 166, 45, 143, 117, 176, 109, 245, 48, 83, 40, 60, 255, 197, 99, 86, 16, 245, 28, 33, 127, 108, 104, 238, 194, 67, 149, 42, 23, 60, 36, 85, 205, 236, 226, 247, 177, 38, 27, 165, 22, 59, 242, 193, 41, 163, 205, 15, 50, 36, 29, 130, 239, 19, 170, 81, 174, 222, 15, 221, 99, 89, 204, 171, 63, 94, 165, 201, 14, 224, 191, 208, 243, 49, 163, 90, 237, 230, 111, 147, 20, 246, 161, 76, 143, 87, 160, 28, 130, 63, 31, 117, 133, 91, 112, 63, 131, 124, 104, 137, 89, 156, 120, 70, 82, 22, 241, 124, 207, 191, 212, 22, 133, 11, 54, 4, 52, 14, 145, 63, 126, 62, 152, 227, 120, 108, 50, 243, 8, 68, 161, 211, 254, 72, 202, 56, 198, 205, 234, 19, 78, 243, 38, 189, 29, 15, 197, 221, 82, 90, 194, 106, 133, 106, 180, 195, 55, 81, 254, 163, 188, 145, 38, 134, 6, 179, 226, 43, 142, 92, 229, 137, 182, 58, 212, 237, 84, 35, 176, 116, 92, 189, 91, 120, 37, 78, 32, 121, 11, 230, 17, 22, 169, 21, 31, 74, 134, 41, 168, 11, 109, 114, 40, 249, 249, 210, 181, 167, 20, 205, 228, 45, 196, 193, 135, 38, 125, 67, 139, 129, 112, 9, 125, 243, 141, 68, 237, 149, 187, 250, 83, 63, 232, 19, 199, 239, 183, 2, 192, 14, 215, 70, 95, 3, 131, 27, 250, 101, 103, 199, 150, 93, 234, 12, 236, 154, 201, 160, 60, 40, 101, 144, 123, 88, 36, 237, 74, 161, 90, 198, 163, 34, 163, 123, 132, 57, 33, 103, 132, 131, 102, 138, 113, 15, 162, 104, 198, 52, 228, 67, 89, 117, 186, 19, 57, 140, 27, 174, 180, 36, 50, 200, 149, 144, 69, 185, 25, 67, 34, 92, 228, 75, 251, 76, 202, 200, 51, 250, 34, 230, 228, 135, 54, 135, 26, 199, 110, 76, 115, 41, 82, 58, 91, 72, 205, 117, 97, 136, 198, 15, 233, 135, 54, 21, 6, 182, 48, 83, 89, 31, 152, 36, 217, 240, 68, 133, 44, 149, 110, 133, 148, 251, 246, 197, 28, 155, 79, 148, 218, 45, 35, 46, 104, 136, 64, 144, 96, 200, 207, 168, 165, 10, 1, 57, 89, 187, 99, 165, 24, 141, 168, 234, 99, 91, 81, 19, 46, 125, 47, 81, 7, 182, 171, 56, 134, 48, 171, 39, 171, 205, 137, 192, 54, 114, 79, 43, 219, 248, 155, 21, 216, 211, 27, 131, 128, 16, 91, 9, 137, 11, 79, 218, 70, 201, 54, 65, 9, 63, 84, 105, 115, 226, 174, 234, 185, 251, 147, 175, 183, 51, 152, 103, 236, 77, 205, 33, 185, 11, 119, 204, 144, 143, 202, 39, 132, 7, 43, 227, 244, 124, 111, 58, 53, 244, 235, 232, 41, 170, 137, 60, 152, 226, 154, 143, 119, 89, 208, 72, 163, 57, 114, 250, 33, 160, 150, 67, 32, 27, 96, 218, 73, 156, 167, 176, 79, 223, 161, 2, 197, 207, 106, 199, 140, 222, 127, 176, 31, 215, 33, 26, 125, 219, 183, 39, 133, 181, 74, 96, 60, 235, 181, 5, 194, 93, 121, 237, 153, 81, 218, 215, 87, 22, 139, 175, 31, 150, 78, 43, 189, 138, 112, 248, 73, 152, 114, 111, 89, 249, 146, 109, 69, 246, 6, 47, 227, 199, 217, 25, 163, 206, 208, 63, 122, 54, 214, 147, 82, 30, 194, 88, 28, 222, 231, 194, 77, 237, 1, 104, 67, 68, 137, 239, 58, 128, 129, 162, 245, 143, 149, 219, 97, 149, 133, 104, 47, 57, 37, 85, 113, 42, 58, 50, 80, 148, 84, 78, 225, 104, 251, 19, 3, 44, 82, 56, 80, 198, 133, 17, 193, 221, 211, 226, 138, 82, 167, 118, 102, 107, 206, 37, 235, 53, 179, 232, 171, 176, 195, 63, 241, 208, 84, 185, 121, 224, 28, 234, 58, 205, 230, 55, 218, 227, 88, 26, 120, 51, 194, 26, 230, 184, 25, 87, 167, 207, 181, 42, 78, 238, 188, 154, 107, 103, 195, 157, 168, 91, 134, 127, 37, 236, 207, 160, 141, 48, 64, 109, 56, 3, 114, 107, 80, 167, 207, 162, 98, 94, 122, 77, 55, 149, 76, 164, 248, 196, 108, 141, 127, 39, 7, 231, 254, 196, 153, 247, 80, 166, 96, 96, 121, 176, 222, 215, 206, 223, 109, 229, 92, 142, 243, 208, 63, 176, 194, 170, 63, 135, 77, 208, 30, 203, 220, 178, 75, 226, 51, 182, 124, 253, 97, 145, 159, 102, 243, 78, 7, 115, 54, 161, 97, 126, 151, 1, 15, 185, 123, 125, 11, 1, 201, 185, 148, 60, 36, 108, 149, 25, 35, 151, 190, 5, 184, 116, 191, 16, 160, 63, 75, 47, 133, 196, 234, 170, 58, 213, 30, 133, 153, 192, 63, 43, 179, 227, 221, 138, 159, 176, 107, 109, 145, 136, 68, 143, 234, 30, 211, 65, 49, 151, 200, 176, 67, 70, 202, 106, 76, 23, 219, 195, 133, 115, 125, 70, 214, 69, 38, 65, 167, 204, 218, 217, 84, 228, 249, 228, 111, 248, 122, 109, 215, 0, 237, 138, 119, 154, 68, 113, 124, 175, 125, 8, 111, 206, 251, 37, 185, 58, 82, 179, 100, 188, 205, 247, 143, 141, 99, 210, 230, 46, 168, 176, 30, 42, 115, 244, 212, 191, 136, 22, 179, 119, 231, 105, 132, 147, 171, 88, 143, 32, 31, 131, 112, 106, 93, 255, 132, 80, 249, 229, 145, 42, 66, 167, 36, 126, 188, 60, 116, 196, 166, 110, 184, 213, 188, 213, 198, 140, 126, 217, 77, 10, 147, 93, 226, 111, 96, 177, 117, 13, 104, 108, 158, 44, 175, 115, 234, 4, 140, 172, 127, 134, 209, 65, 157, 135, 132,

-  184, 71, 78, 108, 253, 229, 219, 168, 244, 147, 166, 186, 79, 204, 188, 68, 184, 78, 181, 91, 10, 82, 168, 163, 184, 33, 98, 55, 94, 188, 238, 157, 164, 150, 238, 213, 75, 251, 103, 219, 91, 119, 214, 165, 154, 42, 113, 13, 88, 244, 130, 91, 214, 82, 67, 112, 92, 190, 249, 122, 238, 239, 83, 238, 228, 243, 36, 62, 15, 148, 28, 73, 30, 252, 154, 178, 97, 2, 236, 227, 220, 71, 243, 221, 86, 179, 44, 171, 86, 233, 210, 134, 96, 251, 46, 237, 244, 18, 28, 20, 120, 212, 57, 113, 237, 224, 48, 250, 0, 223, 173, 8, 227, 80, 15, 140, 76, 134, 61, 238, 120, 69, 162, 165, 10, 80, 41, 131, 219, 166, 132, 178, 37, 94, 126, 11, 148, 86, 106, 159, 251, 34, 100, 19, 168, 78, 186, 103, 122, 117, 84, 19, 231, 207, 18, 189, 232, 145, 151, 205, 15, 201, 90, 251, 102, 247, 69, 173, 21, 158, 105, 114, 77, 153, 107, 27, 242, 225, 226, 203, 27, 161, 51, 80, 236, 134, 25, 177, 69, 60, 242, 108, 125, 185, 113, 182, 173, 134, 75, 103, 90, 164, 86, 156, 61, 215, 222, 28, 131, 44, 51, 107, 230, 75, 92, 44, 61, 52, 47, 9, 206, 137, 127, 151, 54, 65, 22, 217, 175, 102, 180, 244, 249, 52, 23, 66, 237, 195, 2, 149, 159, 67, 39, 98, 209, 248, 42, 41, 60, 111, 144, 208, 222, 166, 140, 11, 18, 0, 91, 15, 61, 31, 56, 75, 140, 54, 110, 127, 100, 0, 156, 236, 14, 64, 18, 75, 179, 151, 50, 236, 62, 23, 197, 195, 101, 177, 38, 125, 94, 40, 113, 183, 158, 160, 172, 163, 249, 53, 45, 148, 131, 38, 12, 185, 153, 15, 84, 231, 188, 11, 92, 112, 228, 173, 208, 242, 68, 194, 225, 14, 194, 231, 235, 64, 80, 22, 142, 8, 93, 81, 203, 44, 224, 56, 54, 210, 29, 107, 146, 188, 45, 139, 197, 168, 23, 87, 225, 121, 77, 137, 21, 92, 139, 71, 177, 217, 19, 9, 178, 219, 82, 28, 231, 233, 191, 81, 240, 18, 165, 239, 25, 85, 171, 221, 145, 171, 156, 5, 67, 4, 78, 178, 204, 25, 250, 216, 151, 137, 52, 224, 82, 111, 215, 120, 79, 238, 186, 144, 87, 135, 101, 39, 92, 24, 25, 225, 103, 147, 49, 95, 32, 5, 96, 200, 9, 3, 238, 74, 115, 223, 68, 30, 89, 25, 177, 34, 107, 235, 174, 92, 28, 202, 127, 170, 223, 239, 115, 84, 168, 174, 147, 94, 53, 87, 68, 127, 220, 221, 82, 33, 23, 212, 132, 211, 26, 217, 72, 102, 89, 224, 213, 126, 182, 13, 4, 21, 240, 223, 243, 27, 5, 238, 82, 13, 222, 234, 170, 138, 2, 65, 47, 79, 77, 68, 160, 215, 188, 177, 79, 155, 113, 22, 204, 81, 225, 135, 182, 88, 182, 207, 121, 1, 8, 124, 21, 94, 80, 192, 63, 136, 103, 75, 251, 103, 135, 247, 63, 4, 218, 98, 28, 26, 207, 91, 197, 48, 115, 116, 146, 248, 174, 249, 235, 187, 88, 176, 119, 68, 204, 240, 120, 87, 79, 237, 48, 147, 27, 38, 144, 143, 210, 129, 164, 113, 26, 158, 221, 16, 244, 206, 128, 238, 205, 29, 204, 175, 185, 140, 112, 108, 200, 80, 82, 59, 240, 231, 244, 183, 78, 101, 51, 37, 85, 67, 171, 12, 11, 193, 39, 251, 219, 28, 185, 89, 236, 164, 11, 56, 170, 153, 154, 20, 108, 3, 91, 195, 2, 65, 15, 99, 54, 228, 69, 5, 117, 13, 177, 14, 100, 179, 68, 38, 198, 168, 145, 68, 170, 13, 102, 17, 242, 203, 114, 181, 193, 244, 201, 80, 102, 197, 63, 198, 213, 86, 134, 62, 161, 6, 130, 128, 240, 104, 87, 209, 192, 32, 101, 54, 10, 1, 10, 7, 134, 48, 20, 92, 176, 184, 45, 53, 144, 54, 207, 108, 217, 121, 245, 138, 227, 176, 239, 211, 161, 207, 97, 64, 199, 154, 214, 189, 157, 44, 64, 115, 254, 27, 134, 68, 237, 215, 53, 222, 92, 176, 36, 190, 152, 247, 190, 14, 104, 230, 55, 118, 238, 224, 146, 100, 11, 151, 192, 162, 243, 161, 93, 50, 226, 157, 163, 28, 99, 145, 49, 186, 6, 237, 244, 26, 122, 53, 129, 150, 192, 49, 143, 176, 19, 40, 94, 150, 117, 35, 224, 50, 125, 181, 47, 203, 62, 209, 201, 240, 228, 222, 60, 208, 122, 126, 175, 201, 243, 160, 254, 54, 218, 221, 43, 248, 84, 230, 73, 159, 236, 169, 234, 217, 25, 239, 2, 240, 169, 215, 117, 200, 166, 183, 207, 186, 96, 217, 140, 60, 159, 206, 150, 67, 10, 83, 221, 92, 90, 195, 191, 15, 182, 19, 90, 58, 52, 232, 121, 118, 89, 13, 70, 189, 172, 251, 160, 94, 145, 76, 77, 87, 160, 208, 135, 113, 21, 96, 103, 124, 15, 223, 239, 164, 113, 229, 6, 82, 49, 247, 11, 173, 76, 23, 234, 161, 77, 67, 1, 163, 52, 119, 126, 43, 145, 120, 22, 239, 63, 197, 246, 14, 10, 115, 115, 150, 131, 136, 250, 138, 243, 127, 91, 118, 187, 91, 206, 43, 220, 162, 222, 232, 57, 31, 114, 182, 167, 183, 130, 160, 208, 255, 74, 50, 184, 210, 210, 82, 235, 88, 124, 218, 99, 122, 253, 222, 57, 126, 109, 62, 80, 97, 179, 157, 246, 70, 229, 111, 227, 37, 74, 68, 127, 208, 177, 15, 135, 137, 147, 181, 145, 44, 216, 210, 191, 33, 75, 190, 249, 117, 101, 207, 131, 187, 82, 231, 217, 116, 87, 223, 133, 45, 71, 254, 7, 162, 231, 252, 35, 92, 253, 139, 151, 73, 79, 221, 223, 167, 152, 151, 236, 89, 229, 248, 142, 176, 21, 187, 207, 119, 116, 246, 218, 82, 202, 248, 78, 60, 254, 73, 228, 40, 108, 54, 248, 95, 106, 109, 93, 211, 60, 217, 15, 188, 117, 189, 91, 67, 52, 21, 153, 185, 162, 91, 10, 168, 174, 221, 186, 198, 65, 27, 141, 254, 95, 234, 174, 206, 126, 190, 38, 139, 19, 89, 249, 115, 26, 167, 50, 249, 151, 215, 0, 45, 117, 125, 181, 114, 21, 155, 176, 255, 0, 80, 75, 3, 4, 20, 0, 0, 8, 8, 0, 184, 182, 42, 68, 49, 191, 99, 158, 35, 6, 0, 0, 211, 60, 0, 0, 12, 0, 0, 0, 97, 114, 105, 97, 108, 95, 49, 52, 46, 102, 110, 116, 189, 91, 219, 110, 219, 72, 12, 125, 239, 87, 8, 122, 110, 55, 115, 191, 0, 78, 129, 190, 245, 15, 246, 113, 161, 181, 229, 68, 168, 35, 5, 177, 179, 155, 238, 215, 175, 102, 56, 78, 45, 59, 82, 73, 141, 45, 20, 72, 101, 199, 199, 103, 200, 33, 15, 41, 142, 178, 218, 118, 237, 225, 235, 167, 162, 88, 53, 237, 182, 43, 182, 213, 186, 190, 47, 191, 189, 52, 213, 174, 44, 246, 205, 127, 253, 11, 174, 202, 226, 239, 110, 183, 185, 47, 89, 89, 52, 135, 106, 215, 172, 227, 229, 250, 177, 122, 217, 215, 135, 251, 178, 44, 94, 219, 102, 221, 109,

-  234, 112, 185, 63, 188, 212, 135, 245, 227, 247, 30, 199, 250, 15, 237, 159, 186, 238, 240, 216, 191, 40, 139, 170, 138, 255, 61, 87, 155, 77, 211, 62, 220, 151, 226, 115, 252, 215, 127, 230, 185, 90, 199, 119, 216, 231, 30, 209, 189, 30, 118, 77, 91, 7, 138, 187, 184, 174, 117, 247, 244, 212, 181, 69, 120, 243, 123, 221, 60, 60, 246, 140, 220, 244, 75, 170, 246, 97, 113, 178, 199, 175, 171, 93, 253, 231, 125, 105, 29, 79, 47, 2, 187, 11, 84, 15, 245, 62, 145, 174, 127, 212, 155, 95, 223, 25, 127, 19, 174, 210, 117, 209, 128, 121, 219, 102, 215, 127, 105, 21, 204, 255, 139, 171, 63, 158, 219, 135, 4, 184, 123, 71, 172, 162, 221, 197, 186, 123, 109, 251, 149, 120, 94, 166, 175, 9, 111, 199, 175, 241, 182, 44, 222, 122, 243, 202, 226, 103, 252, 249, 111, 179, 9, 30, 232, 223, 125, 76, 203, 239, 151, 246, 214, 109, 183, 209, 121, 253, 226, 126, 30, 175, 123, 71, 191, 85, 155, 127, 170, 54, 236, 65, 90, 127, 114, 117, 187, 235, 63, 170, 97, 49, 3, 50, 23, 201, 56, 31, 103, 11, 191, 251, 144, 142, 207, 160, 243, 96, 27, 203, 52, 206, 162, 216, 98, 4, 5, 58, 143, 180, 142, 229, 89, 199, 25, 143, 124, 210, 45, 178, 119, 156, 137, 72, 167, 236, 25, 157, 166, 154, 167, 144, 124, 50, 242, 105, 53, 195, 157, 179, 236, 83, 145, 207, 200, 51, 62, 115, 194, 199, 174, 23, 156, 156, 233, 200, 103, 207, 147, 65, 80, 249, 36, 146, 207, 0, 159, 62, 227, 147, 39, 124, 242, 132, 239, 75, 54, 33, 72, 139, 99, 185, 14, 197, 230, 31, 168, 139, 115, 75, 57, 20, 228, 197, 159, 107, 103, 32, 33, 37, 32, 23, 56, 66, 14, 2, 19, 35, 117, 204, 163, 215, 204, 120, 206, 147, 92, 35, 171, 67, 110, 6, 114, 80, 24, 46, 230, 212, 135, 89, 132, 32, 49, 92, 178, 133, 52, 134, 171, 68, 120, 94, 35, 20, 113, 7, 53, 146, 15, 52, 134, 43, 141, 139, 24, 150, 89, 2, 57, 104, 12, 215, 114, 220, 190, 65, 14, 230, 22, 9, 110, 19, 161, 95, 40, 37, 82, 7, 99, 108, 102, 74, 96, 29, 10, 26, 195, 173, 65, 138, 204, 40, 97, 0, 96, 24, 69, 18, 25, 231, 150, 177, 80, 36, 145, 241, 54, 55, 7, 177, 132, 34, 117, 133, 102, 17, 3, 13, 164, 160, 224, 122, 98, 7, 113, 57, 225, 113, 132, 144, 131, 66, 156, 59, 212, 81, 235, 32, 146, 47, 221, 65, 200, 115, 62, 79, 237, 234, 145, 33, 106, 32, 7, 133, 114, 19, 132, 236, 154, 132, 233, 62, 226, 66, 100, 110, 228, 81, 155, 110, 36, 204, 212, 157, 196, 53, 249, 32, 5, 133, 117, 83, 33, 138, 219, 66, 142, 99, 76, 57, 232, 89, 174, 71, 145, 91, 104, 161, 210, 75, 198, 114, 155, 67, 92, 97, 178, 42, 241, 77, 180, 106, 184, 187, 37, 156, 202, 88, 80, 25, 121, 209, 170, 221, 42, 68, 65, 100, 164, 16, 185, 33, 138, 43, 188, 22, 68, 70, 74, 142, 85, 209, 241, 136, 193, 117, 219, 22, 84, 70, 42, 185, 84, 136, 130, 202, 200, 139, 222, 233, 102, 89, 232, 64, 103, 164, 209, 203, 4, 141, 75, 3, 11, 171, 23, 179, 80, 164, 17, 137, 93, 168, 84, 184, 164, 51, 222, 77, 184, 148, 95, 209, 165, 160, 51, 138, 57, 228, 22, 102, 54, 23, 14, 116, 70, 241, 108, 251, 176, 14, 5, 161, 81, 194, 45, 212, 62, 57, 80, 26, 165, 206, 43, 5, 151, 84, 66, 142, 27, 36, 56, 80, 26, 165, 53, 50, 72, 115, 45, 4, 161, 81, 198, 44, 228, 82, 207, 210, 228, 112, 161, 32, 149, 144, 132, 42, 127, 18, 164, 144, 73, 152, 58, 54, 117, 57, 11, 82, 100, 161, 193, 221, 218, 107, 216, 68, 205, 230, 216, 168, 232, 54, 74, 72, 11, 125, 209, 96, 132, 108, 39, 102, 62, 174, 0, 107, 72, 11, 45, 244, 184, 133, 238, 122, 6, 154, 52, 110, 70, 143, 239, 51, 59, 26, 5, 165, 73, 95, 140, 239, 79, 230, 233, 26, 147, 19, 184, 120, 81, 44, 77, 211, 245, 196, 100, 70, 97, 204, 67, 242, 65, 173, 215, 154, 47, 195, 231, 117, 226, 155, 170, 244, 99, 238, 148, 51, 182, 47, 133, 139, 153, 24, 147, 216, 17, 243, 230, 208, 37, 243, 172, 29, 119, 167, 24, 49, 207, 210, 189, 105, 210, 238, 57, 57, 110, 157, 190, 222, 88, 77, 65, 145, 215, 23, 242, 41, 62, 182, 110, 16, 43, 140, 158, 235, 74, 37, 62, 51, 206, 167, 174, 201, 7, 226, 105, 46, 238, 62, 213, 141, 206, 206, 68, 58, 203, 186, 152, 113, 113, 106, 246, 33, 171, 195, 145, 111, 98, 174, 125, 197, 100, 151, 80, 252, 12, 215, 51, 246, 143, 126, 210, 99, 146, 117, 220, 79, 181, 132, 40, 66, 142, 244, 167, 78, 103, 145, 10, 217, 102, 103, 158, 37, 75, 72, 64, 163, 166, 14, 91, 229, 8, 31, 155, 113, 50, 159, 60, 170, 39, 14, 91, 205, 245, 166, 35, 18, 90, 9, 99, 120, 238, 136, 210, 35, 243, 15, 170, 131, 177, 2, 89, 253, 50, 171, 59, 23, 41, 96, 46, 90, 236, 27, 17, 122, 40, 16, 198, 41, 228, 105, 114, 166, 192, 248, 228, 80, 231, 145, 124, 153, 10, 42, 161, 59, 51, 254, 220, 190, 147, 91, 164, 209, 59, 150, 25, 124, 202, 141, 240, 221, 170, 251, 4, 5, 181, 12, 123, 80, 39, 242, 248, 52, 75, 124, 216, 145, 118, 166, 160, 105, 158, 30, 174, 112, 203, 248, 83, 67, 188, 88, 97, 23, 178, 15, 242, 193, 74, 179, 204, 252, 85, 131, 96, 219, 139, 219, 135, 91, 249, 51, 61, 28, 51, 249, 244, 207, 53, 237, 75, 15, 199, 24, 185, 144, 125, 208, 17, 90, 43, 150, 225, 75, 122, 6, 253, 39, 35, 169, 25, 78, 204, 86, 119, 241, 73, 195, 120, 249, 163, 126, 105, 155, 246, 225, 215, 99, 135, 246, 248, 216, 97, 250, 77, 177, 109, 94, 246, 7, 88, 213, 190, 94, 119, 109, 58, 39, 173, 158, 0, 240, 133, 191, 91, 48, 129, 8, 181, 231, 136, 96, 40, 128, 71, 0, 130, 50, 30, 1, 202, 99, 214, 20, 86, 126, 68, 4, 58, 26, 226, 212, 10, 36, 194, 144, 17, 150, 140, 32, 91, 30, 31, 141, 248, 173, 119, 135, 8, 79, 69, 132, 135, 5, 126, 139, 8, 195, 184, 247, 29, 60, 245, 174, 64, 33, 12, 21, 129, 139, 220, 112, 98, 70, 139, 146, 83, 4, 46, 74, 6, 8, 67, 70, 88, 50, 194, 83, 17, 131, 29, 28, 135, 56, 246, 177, 179, 24, 6, 128, 219, 115, 71, 222, 115, 71, 222, 115, 71, 85, 171, 1, 192, 80, 1, 150, 10, 192, 228, 95, 88, 55, 109, 43, 20, 121, 43, 78, 17,

-  56, 199, 42, 242, 230, 157, 32, 180, 35, 35, 60, 21, 97, 200, 118, 88, 234, 110, 120, 75, 93, 148, 39, 155, 17, 31, 50, 167, 66, 200, 166, 199, 39, 77, 137, 44, 92, 209, 89, 52, 157, 197, 210, 89, 60, 25, 130, 20, 69, 51, 146, 88, 56, 132, 38, 35, 12, 21, 49, 72, 44, 28, 194, 83, 17, 134, 108, 135, 183, 84, 196, 48, 234, 145, 16, 141, 73, 95, 51, 22, 244, 56, 18, 174, 232, 16, 186, 245, 200, 112, 180, 228, 112, 180, 31, 135, 35, 67, 1, 12, 149, 66, 59, 34, 133, 246, 68, 0, 50, 22, 45, 57, 22, 237, 72, 44, 50, 28, 130, 234, 219, 65, 40, 34, 17, 138, 140, 176, 84, 4, 170, 219, 119, 158, 218, 159, 120, 114, 127, 226, 201, 50, 234, 201, 253, 137, 39, 203, 168, 39, 203, 168, 39, 135, 174, 39, 135, 174, 167, 203, 168, 167, 55, 15, 158, 174, 163, 3, 136, 160, 67, 36, 29, 66, 247, 24, 71, 109, 125, 252, 91, 188, 95, 46, 195, 68, 125, 76, 88, 154, 92, 15, 33, 6, 7, 113, 116, 22, 71, 103, 241, 116, 22, 79, 102, 9, 242, 67, 100, 25, 64, 62, 96, 89, 221, 29, 103, 99, 95, 63, 173, 238, 226, 31, 51, 255, 15, 80, 75, 1, 2, 20, 0, 20, 0, 0, 8, 8, 0, 184, 182, 42, 68, 36, 55,

-  216, 103, 135, 15, 0, 0, 133, 15, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 114, 105, 97, 108, 95, 49, 52, 46, 112, 110, 103,

-  80, 75, 1, 2, 20, 0, 20, 0, 0, 8, 8, 0, 184, 182, 42, 68, 49, 191, 99, 158, 35, 6, 0, 0, 211, 60, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

-  0, 177, 15, 0, 0, 97, 114, 105, 97, 108, 95, 49, 52, 46, 102, 110, 116, 80, 75, 5, 6, 0, 0, 0, 0, 2, 0, 2, 0, 116, 0, 0, 0, 254, 21, 0, 0, 0, 0];

+  80,

+  75,

+  3,

+  4,

+  20,

+  0,

+  0,

+  8,

+  8,

+  0,

+  184,

+  182,

+  42,

+  68,

+  36,

+  55,

+  216,

+  103,

+  135,

+  15,

+  0,

+  0,

+  133,

+  15,

+  0,

+  0,

+  12,

+  0,

+  0,

+  0,

+  97,

+  114,

+  105,

+  97,

+  108,

+  95,

+  49,

+  52,

+  46,

+  112,

+  110,

+  103,

+  117,

+  215,

+  119,

+  48,

+  27,

+  142,

+  223,

+  7,

+  240,

+  32,

+  86,

+  137,

+  86,

+  141,

+  146,

+  134,

+  106,

+  81,

+  212,

+  38,

+  20,

+  165,

+  182,

+  216,

+  171,

+  86,

+  218,

+  218,

+  148,

+  162,

+  21,

+  69,

+  80,

+  123,

+  212,

+  94,

+  169,

+  88,

+  21,

+  177,

+  171,

+  173,

+  61,

+  66,

+  17,

+  163,

+  95,

+  21,

+  171,

+  182,

+  47,

+  181,

+  66,

+  236,

+  189,

+  247,

+  168,

+  95,

+  239,

+  126,

+  207,

+  31,

+  207,

+  221,

+  115,

+  207,

+  221,

+  251,

+  222,

+  247,

+  254,

+  247,

+  115,

+  247,

+  249,

+  231,

+  21,

+  99,

+  168,

+  15,

+  3,

+  221,

+  0,

+  223,

+  0,

+  0,

+  0,

+  32,

+  45,

+  77,

+  53,

+  99,

+  0,

+  128,

+  2,

+  244,

+  119,

+  223,

+  166,

+  161,

+  250,

+  219,

+  236,

+  49,

+  18,

+  146,

+  0,

+  192,

+  77,

+  93,

+  45,

+  53,

+  101,

+  19,

+  223,

+  201,

+  45,

+  203,

+  4,

+  84,

+  33,

+  158,

+  1,

+  79,

+  15,

+  33,

+  191,

+  127,

+  235,

+  191,

+  9,

+  83,

+  229,

+  2,

+  170,

+  112,

+  69,

+  136,

+  2,

+  85,

+  50,

+  110,

+  117,

+  205,

+  93,

+  190,

+  253,

+  182,

+  89,

+  102,

+  165,

+  167,

+  195,

+  74,

+  223,

+  116,

+  114,

+  80,

+  250,

+  173,

+  172,

+  41,

+  147,

+  108,

+  170,

+  171,

+  186,

+  48,

+  205,

+  225,

+  96,

+  1,

+  86,

+  160,

+  145,

+  0,

+  150,

+  114,

+  25,

+  253,

+  98,

+  244,

+  127,

+  198,

+  144,

+  48,

+  218,

+  248,

+  83,

+  240,

+  159,

+  203,

+  51,

+  235,

+  179,

+  139,

+  35,

+  63,

+  230,

+  86,

+  197,

+  215,

+  136,

+  90,

+  201,

+  63,

+  231,

+  47,

+  112,

+  72,

+  180,

+  191,

+  213,

+  228,

+  159,

+  35,

+  217,

+  231,

+  11,

+  2,

+  129,

+  75,

+  179,

+  216,

+  81,

+  215,

+  133,

+  211,

+  163,

+  157,

+  227,

+  203,

+  235,

+  138,

+  214,

+  238,

+  11,

+  249,

+  177,

+  140,

+  242,

+  58,

+  84,

+  231,

+  112,

+  187,

+  164,

+  240,

+  192,

+  192,

+  192,

+  94,

+  213,

+  138,

+  80,

+  14,

+  169,

+  126,

+  69,

+  210,

+  43,

+  63,

+  73,

+  125,

+  247,

+  53,

+  97,

+  246,

+  192,

+  135,

+  226,

+  178,

+  133,

+  253,

+  160,

+  110,

+  201,

+  213,

+  110,

+  187,

+  196,

+  201,

+  62,

+  248,

+  15,

+  213,

+  9,

+  37,

+  164,

+  253,

+  224,

+  90,

+  183,

+  174,

+  235,

+  50,

+  96,

+  190,

+  239,

+  224,

+  122,

+  64,

+  52,

+  183,

+  149,

+  186,

+  223,

+  188,

+  229,

+  85,

+  71,

+  203,

+  146,

+  212,

+  217,

+  9,

+  199,

+  83,

+  131,

+  1,

+  87,

+  196,

+  159,

+  160,

+  43,

+  142,

+  1,

+  241,

+  246,

+  223,

+  55,

+  197,

+  97,

+  216,

+  160,

+  184,

+  95,

+  90,

+  96,

+  102,

+  162,

+  254,

+  217,

+  201,

+  215,

+  7,

+  130,

+  31,

+  24,

+  50,

+  118,

+  172,

+  94,

+  84,

+  216,

+  101,

+  139,

+  79,

+  156,

+  230,

+  174,

+  120,

+  230,

+  253,

+  50,

+  61,

+  55,

+  207,

+  209,

+  105,

+  2,

+  140,

+  127,

+  144,

+  38,

+  60,

+  80,

+  197,

+  226,

+  144,

+  142,

+  205,

+  44,

+  19,

+  101,

+  165,

+  164,

+  167,

+  3,

+  103,

+  239,

+  53,

+  234,

+  127,

+  20,

+  32,

+  9,

+  151,

+  61,

+  45,

+  220,

+  254,

+  15,

+  209,

+  158,

+  170,

+  179,

+  101,

+  218,

+  214,

+  241,

+  72,

+  189,

+  129,

+  229,

+  149,

+  4,

+  167,

+  41,

+  74,

+  63,

+  120,

+  170,

+  236,

+  134,

+  7,

+  222,

+  237,

+  173,

+  160,

+  68,

+  170,

+  252,

+  129,

+  129,

+  215,

+  63,

+  207,

+  225,

+  246,

+  150,

+  142,

+  194,

+  35,

+  184,

+  12,

+  239,

+  223,

+  170,

+  235,

+  220,

+  210,

+  229,

+  251,

+  248,

+  73,

+  167,

+  125,

+  250,

+  123,

+  114,

+  212,

+  57,

+  37,

+  117,

+  137,

+  120,

+  9,

+  222,

+  165,

+  150,

+  7,

+  237,

+  70,

+  147,

+  6,

+  175,

+  30,

+  239,

+  179,

+  217,

+  151,

+  37,

+  228,

+  223,

+  251,

+  0,

+  169,

+  108,

+  128,

+  64,

+  57,

+  151,

+  102,

+  31,

+  47,

+  162,

+  134,

+  244,

+  247,

+  215,

+  31,

+  245,

+  213,

+  177,

+  201,

+  237,

+  43,

+  194,

+  20,

+  247,

+  54,

+  47,

+  229,

+  29,

+  141,

+  187,

+  210,

+  208,

+  87,

+  252,

+  142,

+  154,

+  174,

+  116,

+  135,

+  235,

+  26,

+  99,

+  179,

+  38,

+  153,

+  215,

+  95,

+  75,

+  115,

+  220,

+  118,

+  110,

+  46,

+  53,

+  138,

+  108,

+  160,

+  109,

+  106,

+  113,

+  46,

+  174,

+  140,

+  231,

+  147,

+  181,

+  126,

+  60,

+  158,

+  162,

+  126,

+  213,

+  175,

+  61,

+  59,

+  150,

+  181,

+  122,

+  88,

+  247,

+  174,

+  195,

+  164,

+  245,

+  223,

+  85,

+  140,

+  118,

+  12,

+  237,

+  167,

+  151,

+  29,

+  187,

+  186,

+  66,

+  15,

+  38,

+  208,

+  182,

+  47,

+  139,

+  227,

+  115,

+  56,

+  225,

+  166,

+  132,

+  95,

+  99,

+  177,

+  47,

+  123,

+  127,

+  124,

+  154,

+  227,

+  22,

+  45,

+  191,

+  47,

+  121,

+  153,

+  66,

+  142,

+  4,

+  143,

+  217,

+  37,

+  219,

+  191,

+  117,

+  194,

+  49,

+  127,

+  32,

+  41,

+  165,

+  253,

+  233,

+  245,

+  29,

+  155,

+  126,

+  11,

+  99,

+  107,

+  1,

+  39,

+  42,

+  51,

+  183,

+  61,

+  192,

+  34,

+  78,

+  185,

+  215,

+  220,

+  125,

+  169,

+  125,

+  153,

+  237,

+  233,

+  7,

+  82,

+  247,

+  101,

+  138,

+  47,

+  253,

+  58,

+  59,

+  140,

+  89,

+  13,

+  26,

+  172,

+  192,

+  122,

+  98,

+  154,

+  113,

+  4,

+  190,

+  85,

+  251,

+  254,

+  113,

+  183,

+  119,

+  85,

+  41,

+  126,

+  83,

+  241,

+  85,

+  48,

+  47,

+  195,

+  30,

+  242,

+  112,

+  39,

+  57,

+  205,

+  11,

+  45,

+  70,

+  47,

+  22,

+  40,

+  115,

+  7,

+  127,

+  91,

+  55,

+  31,

+  34,

+  35,

+  231,

+  69,

+  88,

+  52,

+  48,

+  215,

+  38,

+  149,

+  139,

+  234,

+  142,

+  232,

+  139,

+  46,

+  141,

+  86,

+  48,

+  23,

+  205,

+  59,

+  34,

+  243,

+  135,

+  170,

+  2,

+  146,

+  161,

+  131,

+  35,

+  65,

+  202,

+  2,

+  242,

+  88,

+  93,

+  250,

+  196,

+  238,

+  55,

+  233,

+  64,

+  4,

+  195,

+  228,

+  230,

+  217,

+  51,

+  254,

+  230,

+  70,

+  87,

+  218,

+  213,

+  130,

+  53,

+  226,

+  229,

+  184,

+  100,

+  148,

+  232,

+  201,

+  29,

+  178,

+  104,

+  51,

+  71,

+  82,

+  137,

+  18,

+  5,

+  5,

+  253,

+  29,

+  165,

+  246,

+  82,

+  118,

+  133,

+  97,

+  159,

+  225,

+  83,

+  21,

+  66,

+  54,

+  66,

+  159,

+  212,

+  212,

+  45,

+  110,

+  64,

+  71,

+  1,

+  165,

+  132,

+  22,

+  96,

+  76,

+  38,

+  57,

+  34,

+  22,

+  12,

+  189,

+  134,

+  85,

+  14,

+  213,

+  123,

+  14,

+  98,

+  60,

+  253,

+  163,

+  143,

+  98,

+  236,

+  133,

+  246,

+  207,

+  246,

+  102,

+  224,

+  131,

+  201,

+  57,

+  47,

+  60,

+  189,

+  172,

+  198,

+  184,

+  60,

+  221,

+  148,

+  168,

+  204,

+  95,

+  233,

+  96,

+  24,

+  90,

+  47,

+  203,

+  5,

+  229,

+  204,

+  72,

+  35,

+  154,

+  24,

+  137,

+  134,

+  32,

+  66,

+  126,

+  175,

+  160,

+  254,

+  90,

+  156,

+  110,

+  54,

+  0,

+  100,

+  180,

+  27,

+  216,

+  43,

+  191,

+  101,

+  24,

+  132,

+  29,

+  72,

+  91,

+  122,

+  40,

+  51,

+  201,

+  191,

+  17,

+  112,

+  91,

+  250,

+  11,

+  223,

+  85,

+  41,

+  220,

+  12,

+  102,

+  103,

+  206,

+  77,

+  198,

+  158,

+  148,

+  69,

+  158,

+  207,

+  234,

+  156,

+  43,

+  167,

+  59,

+  20,

+  30,

+  94,

+  89,

+  246,

+  241,

+  78,

+  201,

+  60,

+  155,

+  190,

+  132,

+  166,

+  199,

+  223,

+  67,

+  17,

+  116,

+  151,

+  34,

+  193,

+  85,

+  203,

+  171,

+  142,

+  196,

+  1,

+  49,

+  164,

+  192,

+  206,

+  253,

+  250,

+  189,

+  65,

+  136,

+  65,

+  242,

+  108,

+  68,

+  93,

+  26,

+  165,

+  132,

+  17,

+  231,

+  163,

+  57,

+  187,

+  59,

+  248,

+  157,

+  212,

+  163,

+  69,

+  28,

+  147,

+  194,

+  169,

+  122,

+  1,

+  213,

+  122,

+  141,

+  174,

+  246,

+  45,

+  9,

+  26,

+  107,

+  223,

+  135,

+  141,

+  30,

+  140,

+  65,

+  83,

+  102,

+  100,

+  63,

+  107,

+  126,

+  232,

+  124,

+  30,

+  160,

+  32,

+  73,

+  77,

+  122,

+  172,

+  101,

+  233,

+  176,

+  103,

+  119,

+  101,

+  232,

+  132,

+  120,

+  49,

+  111,

+  64,

+  111,

+  65,

+  66,

+  130,

+  14,

+  148,

+  151,

+  4,

+  172,

+  229,

+  199,

+  32,

+  86,

+  171,

+  8,

+  195,

+  124,

+  83,

+  137,

+  79,

+  247,

+  246,

+  1,

+  97,

+  228,

+  98,

+  84,

+  203,

+  104,

+  199,

+  60,

+  199,

+  126,

+  226,

+  58,

+  115,

+  190,

+  41,

+  184,

+  195,

+  78,

+  62,

+  97,

+  101,

+  45,

+  70,

+  130,

+  214,

+  161,

+  234,

+  144,

+  165,

+  184,

+  176,

+  98,

+  87,

+  236,

+  134,

+  42,

+  206,

+  4,

+  83,

+  104,

+  20,

+  38,

+  112,

+  26,

+  48,

+  154,

+  63,

+  31,

+  43,

+  153,

+  12,

+  57,

+  32,

+  16,

+  90,

+  70,

+  31,

+  48,

+  68,

+  192,

+  24,

+  33,

+  241,

+  219,

+  64,

+  231,

+  228,

+  72,

+  183,

+  52,

+  13,

+  96,

+  1,

+  111,

+  230,

+  137,

+  63,

+  118,

+  133,

+  241,

+  180,

+  157,

+  30,

+  25,

+  179,

+  184,

+  19,

+  169,

+  178,

+  105,

+  163,

+  207,

+  153,

+  26,

+  221,

+  251,

+  150,

+  127,

+  125,

+  216,

+  202,

+  154,

+  236,

+  222,

+  175,

+  76,

+  108,

+  215,

+  75,

+  189,

+  216,

+  240,

+  223,

+  140,

+  134,

+  175,

+  5,

+  38,

+  58,

+  59,

+  116,

+  243,

+  59,

+  127,

+  112,

+  226,

+  126,

+  197,

+  162,

+  247,

+  118,

+  200,

+  65,

+  96,

+  27,

+  25,

+  90,

+  176,

+  180,

+  128,

+  100,

+  165,

+  25,

+  114,

+  194,

+  7,

+  155,

+  52,

+  179,

+  64,

+  35,

+  56,

+  116,

+  153,

+  250,

+  171,

+  149,

+  245,

+  42,

+  136,

+  198,

+  82,

+  162,

+  90,

+  169,

+  119,

+  2,

+  233,

+  88,

+  215,

+  255,

+  156,

+  9,

+  220,

+  229,

+  173,

+  182,

+  208,

+  156,

+  123,

+  159,

+  77,

+  95,

+  230,

+  2,

+  155,

+  208,

+  204,

+  214,

+  17,

+  94,

+  251,

+  68,

+  64,

+  2,

+  247,

+  111,

+  245,

+  77,

+  177,

+  164,

+  236,

+  207,

+  179,

+  160,

+  137,

+  27,

+  84,

+  171,

+  193,

+  40,

+  129,

+  110,

+  24,

+  218,

+  31,

+  21,

+  136,

+  17,

+  188,

+  226,

+  20,

+  170,

+  174,

+  112,

+  100,

+  175,

+  149,

+  142,

+  46,

+  75,

+  171,

+  67,

+  2,

+  168,

+  29,

+  62,

+  74,

+  100,

+  86,

+  236,

+  48,

+  103,

+  98,

+  137,

+  64,

+  186,

+  28,

+  136,

+  98,

+  159,

+  79,

+  3,

+  45,

+  70,

+  40,

+  182,

+  127,

+  42,

+  130,

+  35,

+  93,

+  58,

+  224,

+  215,

+  184,

+  208,

+  190,

+  255,

+  112,

+  11,

+  31,

+  69,

+  165,

+  160,

+  235,

+  46,

+  25,

+  242,

+  13,

+  175,

+  190,

+  95,

+  204,

+  47,

+  106,

+  196,

+  121,

+  102,

+  25,

+  156,

+  100,

+  64,

+  151,

+  95,

+  250,

+  203,

+  201,

+  104,

+  204,

+  215,

+  196,

+  151,

+  93,

+  116,

+  50,

+  70,

+  111,

+  143,

+  229,

+  137,

+  71,

+  31,

+  42,

+  144,

+  202,

+  207,

+  189,

+  118,

+  17,

+  94,

+  46,

+  252,

+  170,

+  152,

+  54,

+  100,

+  130,

+  93,

+  172,

+  206,

+  151,

+  2,

+  79,

+  20,

+  154,

+  43,

+  7,

+  26,

+  90,

+  164,

+  145,

+  140,

+  246,

+  246,

+  50,

+  20,

+  191,

+  190,

+  170,

+  234,

+  93,

+  20,

+  169,

+  252,

+  158,

+  57,

+  226,

+  203,

+  92,

+  148,

+  202,

+  62,

+  193,

+  68,

+  57,

+  239,

+  33,

+  143,

+  68,

+  145,

+  203,

+  90,

+  146,

+  219,

+  166,

+  106,

+  84,

+  122,

+  240,

+  51,

+  116,

+  20,

+  127,

+  188,

+  213,

+  80,

+  57,

+  128,

+  230,

+  35,

+  211,

+  46,

+  9,

+  141,

+  28,

+  98,

+  75,

+  89,

+  227,

+  97,

+  236,

+  156,

+  148,

+  210,

+  128,

+  81,

+  169,

+  45,

+  164,

+  243,

+  129,

+  45,

+  88,

+  213,

+  195,

+  222,

+  69,

+  238,

+  138,

+  56,

+  183,

+  209,

+  176,

+  208,

+  236,

+  148,

+  178,

+  149,

+  221,

+  63,

+  169,

+  81,

+  130,

+  186,

+  138,

+  229,

+  127,

+  148,

+  140,

+  251,

+  93,

+  21,

+  196,

+  30,

+  194,

+  203,

+  24,

+  213,

+  47,

+  193,

+  227,

+  88,

+  181,

+  140,

+  172,

+  151,

+  204,

+  85,

+  150,

+  83,

+  240,

+  147,

+  207,

+  34,

+  51,

+  124,

+  223,

+  137,

+  241,

+  230,

+  113,

+  245,

+  228,

+  115,

+  174,

+  196,

+  74,

+  6,

+  248,

+  124,

+  254,

+  65,

+  78,

+  207,

+  167,

+  220,

+  206,

+  83,

+  224,

+  202,

+  27,

+  251,

+  229,

+  208,

+  18,

+  114,

+  226,

+  44,

+  243,

+  79,

+  147,

+  81,

+  228,

+  160,

+  255,

+  74,

+  183,

+  253,

+  165,

+  72,

+  221,

+  197,

+  237,

+  25,

+  106,

+  203,

+  21,

+  100,

+  203,

+  54,

+  0,

+  164,

+  113,

+  108,

+  99,

+  203,

+  69,

+  69,

+  111,

+  207,

+  231,

+  77,

+  191,

+  110,

+  135,

+  72,

+  12,

+  27,

+  38,

+  144,

+  161,

+  26,

+  44,

+  106,

+  92,

+  105,

+  74,

+  93,

+  28,

+  233,

+  118,

+  117,

+  163,

+  236,

+  12,

+  164,

+  50,

+  63,

+  21,

+  77,

+  171,

+  142,

+  34,

+  43,

+  149,

+  10,

+  156,

+  69,

+  115,

+  91,

+  234,

+  171,

+  233,

+  245,

+  59,

+  27,

+  166,

+  21,

+  233,

+  102,

+  237,

+  68,

+  121,

+  185,

+  113,

+  251,

+  183,

+  132,

+  55,

+  252,

+  109,

+  133,

+  202,

+  171,

+  19,

+  154,

+  182,

+  165,

+  180,

+  129,

+  41,

+  199,

+  178,

+  3,

+  112,

+  174,

+  204,

+  68,

+  173,

+  238,

+  87,

+  148,

+  247,

+  173,

+  105,

+  221,

+  136,

+  159,

+  101,

+  186,

+  186,

+  15,

+  228,

+  37,

+  232,

+  110,

+  186,

+  22,

+  112,

+  111,

+  228,

+  9,

+  78,

+  32,

+  4,

+  157,

+  77,

+  40,

+  250,

+  169,

+  156,

+  163,

+  221,

+  67,

+  34,

+  239,

+  192,

+  210,

+  79,

+  37,

+  117,

+  104,

+  93,

+  198,

+  191,

+  217,

+  66,

+  54,

+  130,

+  198,

+  200,

+  227,

+  28,

+  133,

+  180,

+  77,

+  219,

+  129,

+  240,

+  130,

+  47,

+  38,

+  245,

+  144,

+  91,

+  183,

+  216,

+  44,

+  196,

+  154,

+  88,

+  209,

+  41,

+  100,

+  102,

+  40,

+  35,

+  90,

+  214,

+  224,

+  127,

+  133,

+  30,

+  202,

+  40,

+  22,

+  201,

+  23,

+  61,

+  131,

+  16,

+  65,

+  17,

+  200,

+  7,

+  70,

+  208,

+  164,

+  61,

+  75,

+  53,

+  168,

+  151,

+  201,

+  121,

+  227,

+  102,

+  155,

+  47,

+  39,

+  54,

+  36,

+  249,

+  44,

+  86,

+  149,

+  97,

+  45,

+  183,

+  221,

+  168,

+  126,

+  224,

+  88,

+  230,

+  82,

+  100,

+  112,

+  240,

+  201,

+  233,

+  18,

+  150,

+  41,

+  122,

+  117,

+  19,

+  171,

+  89,

+  205,

+  4,

+  13,

+  40,

+  20,

+  73,

+  120,

+  191,

+  207,

+  210,

+  227,

+  73,

+  176,

+  139,

+  40,

+  196,

+  160,

+  190,

+  16,

+  141,

+  190,

+  38,

+  17,

+  225,

+  153,

+  156,

+  49,

+  167,

+  39,

+  44,

+  78,

+  107,

+  20,

+  94,

+  206,

+  112,

+  242,

+  185,

+  78,

+  6,

+  165,

+  247,

+  143,

+  29,

+  92,

+  158,

+  218,

+  66,

+  45,

+  51,

+  65,

+  19,

+  173,

+  117,

+  48,

+  245,

+  166,

+  68,

+  254,

+  30,

+  18,

+  213,

+  2,

+  246,

+  45,

+  0,

+  36,

+  73,

+  23,

+  246,

+  18,

+  8,

+  42,

+  242,

+  50,

+  216,

+  46,

+  96,

+  7,

+  181,

+  73,

+  196,

+  206,

+  169,

+  28,

+  142,

+  30,

+  184,

+  50,

+  194,

+  120,

+  179,

+  21,

+  82,

+  74,

+  23,

+  131,

+  242,

+  102,

+  76,

+  209,

+  248,

+  50,

+  109,

+  129,

+  103,

+  112,

+  85,

+  90,

+  200,

+  24,

+  41,

+  75,

+  169,

+  61,

+  46,

+  92,

+  148,

+  59,

+  84,

+  141,

+  213,

+  169,

+  82,

+  225,

+  110,

+  87,

+  15,

+  249,

+  213,

+  38,

+  203,

+  76,

+  26,

+  164,

+  95,

+  125,

+  232,

+  217,

+  80,

+  193,

+  93,

+  53,

+  128,

+  189,

+  60,

+  89,

+  152,

+  98,

+  168,

+  116,

+  70,

+  184,

+  38,

+  166,

+  45,

+  143,

+  117,

+  176,

+  109,

+  245,

+  48,

+  83,

+  40,

+  60,

+  255,

+  197,

+  99,

+  86,

+  16,

+  245,

+  28,

+  33,

+  127,

+  108,

+  104,

+  238,

+  194,

+  67,

+  149,

+  42,

+  23,

+  60,

+  36,

+  85,

+  205,

+  236,

+  226,

+  247,

+  177,

+  38,

+  27,

+  165,

+  22,

+  59,

+  242,

+  193,

+  41,

+  163,

+  205,

+  15,

+  50,

+  36,

+  29,

+  130,

+  239,

+  19,

+  170,

+  81,

+  174,

+  222,

+  15,

+  221,

+  99,

+  89,

+  204,

+  171,

+  63,

+  94,

+  165,

+  201,

+  14,

+  224,

+  191,

+  208,

+  243,

+  49,

+  163,

+  90,

+  237,

+  230,

+  111,

+  147,

+  20,

+  246,

+  161,

+  76,

+  143,

+  87,

+  160,

+  28,

+  130,

+  63,

+  31,

+  117,

+  133,

+  91,

+  112,

+  63,

+  131,

+  124,

+  104,

+  137,

+  89,

+  156,

+  120,

+  70,

+  82,

+  22,

+  241,

+  124,

+  207,

+  191,

+  212,

+  22,

+  133,

+  11,

+  54,

+  4,

+  52,

+  14,

+  145,

+  63,

+  126,

+  62,

+  152,

+  227,

+  120,

+  108,

+  50,

+  243,

+  8,

+  68,

+  161,

+  211,

+  254,

+  72,

+  202,

+  56,

+  198,

+  205,

+  234,

+  19,

+  78,

+  243,

+  38,

+  189,

+  29,

+  15,

+  197,

+  221,

+  82,

+  90,

+  194,

+  106,

+  133,

+  106,

+  180,

+  195,

+  55,

+  81,

+  254,

+  163,

+  188,

+  145,

+  38,

+  134,

+  6,

+  179,

+  226,

+  43,

+  142,

+  92,

+  229,

+  137,

+  182,

+  58,

+  212,

+  237,

+  84,

+  35,

+  176,

+  116,

+  92,

+  189,

+  91,

+  120,

+  37,

+  78,

+  32,

+  121,

+  11,

+  230,

+  17,

+  22,

+  169,

+  21,

+  31,

+  74,

+  134,

+  41,

+  168,

+  11,

+  109,

+  114,

+  40,

+  249,

+  249,

+  210,

+  181,

+  167,

+  20,

+  205,

+  228,

+  45,

+  196,

+  193,

+  135,

+  38,

+  125,

+  67,

+  139,

+  129,

+  112,

+  9,

+  125,

+  243,

+  141,

+  68,

+  237,

+  149,

+  187,

+  250,

+  83,

+  63,

+  232,

+  19,

+  199,

+  239,

+  183,

+  2,

+  192,

+  14,

+  215,

+  70,

+  95,

+  3,

+  131,

+  27,

+  250,

+  101,

+  103,

+  199,

+  150,

+  93,

+  234,

+  12,

+  236,

+  154,

+  201,

+  160,

+  60,

+  40,

+  101,

+  144,

+  123,

+  88,

+  36,

+  237,

+  74,

+  161,

+  90,

+  198,

+  163,

+  34,

+  163,

+  123,

+  132,

+  57,

+  33,

+  103,

+  132,

+  131,

+  102,

+  138,

+  113,

+  15,

+  162,

+  104,

+  198,

+  52,

+  228,

+  67,

+  89,

+  117,

+  186,

+  19,

+  57,

+  140,

+  27,

+  174,

+  180,

+  36,

+  50,

+  200,

+  149,

+  144,

+  69,

+  185,

+  25,

+  67,

+  34,

+  92,

+  228,

+  75,

+  251,

+  76,

+  202,

+  200,

+  51,

+  250,

+  34,

+  230,

+  228,

+  135,

+  54,

+  135,

+  26,

+  199,

+  110,

+  76,

+  115,

+  41,

+  82,

+  58,

+  91,

+  72,

+  205,

+  117,

+  97,

+  136,

+  198,

+  15,

+  233,

+  135,

+  54,

+  21,

+  6,

+  182,

+  48,

+  83,

+  89,

+  31,

+  152,

+  36,

+  217,

+  240,

+  68,

+  133,

+  44,

+  149,

+  110,

+  133,

+  148,

+  251,

+  246,

+  197,

+  28,

+  155,

+  79,

+  148,

+  218,

+  45,

+  35,

+  46,

+  104,

+  136,

+  64,

+  144,

+  96,

+  200,

+  207,

+  168,

+  165,

+  10,

+  1,

+  57,

+  89,

+  187,

+  99,

+  165,

+  24,

+  141,

+  168,

+  234,

+  99,

+  91,

+  81,

+  19,

+  46,

+  125,

+  47,

+  81,

+  7,

+  182,

+  171,

+  56,

+  134,

+  48,

+  171,

+  39,

+  171,

+  205,

+  137,

+  192,

+  54,

+  114,

+  79,

+  43,

+  219,

+  248,

+  155,

+  21,

+  216,

+  211,

+  27,

+  131,

+  128,

+  16,

+  91,

+  9,

+  137,

+  11,

+  79,

+  218,

+  70,

+  201,

+  54,

+  65,

+  9,

+  63,

+  84,

+  105,

+  115,

+  226,

+  174,

+  234,

+  185,

+  251,

+  147,

+  175,

+  183,

+  51,

+  152,

+  103,

+  236,

+  77,

+  205,

+  33,

+  185,

+  11,

+  119,

+  204,

+  144,

+  143,

+  202,

+  39,

+  132,

+  7,

+  43,

+  227,

+  244,

+  124,

+  111,

+  58,

+  53,

+  244,

+  235,

+  232,

+  41,

+  170,

+  137,

+  60,

+  152,

+  226,

+  154,

+  143,

+  119,

+  89,

+  208,

+  72,

+  163,

+  57,

+  114,

+  250,

+  33,

+  160,

+  150,

+  67,

+  32,

+  27,

+  96,

+  218,

+  73,

+  156,

+  167,

+  176,

+  79,

+  223,

+  161,

+  2,

+  197,

+  207,

+  106,

+  199,

+  140,

+  222,

+  127,

+  176,

+  31,

+  215,

+  33,

+  26,

+  125,

+  219,

+  183,

+  39,

+  133,

+  181,

+  74,

+  96,

+  60,

+  235,

+  181,

+  5,

+  194,

+  93,

+  121,

+  237,

+  153,

+  81,

+  218,

+  215,

+  87,

+  22,

+  139,

+  175,

+  31,

+  150,

+  78,

+  43,

+  189,

+  138,

+  112,

+  248,

+  73,

+  152,

+  114,

+  111,

+  89,

+  249,

+  146,

+  109,

+  69,

+  246,

+  6,

+  47,

+  227,

+  199,

+  217,

+  25,

+  163,

+  206,

+  208,

+  63,

+  122,

+  54,

+  214,

+  147,

+  82,

+  30,

+  194,

+  88,

+  28,

+  222,

+  231,

+  194,

+  77,

+  237,

+  1,

+  104,

+  67,

+  68,

+  137,

+  239,

+  58,

+  128,

+  129,

+  162,

+  245,

+  143,

+  149,

+  219,

+  97,

+  149,

+  133,

+  104,

+  47,

+  57,

+  37,

+  85,

+  113,

+  42,

+  58,

+  50,

+  80,

+  148,

+  84,

+  78,

+  225,

+  104,

+  251,

+  19,

+  3,

+  44,

+  82,

+  56,

+  80,

+  198,

+  133,

+  17,

+  193,

+  221,

+  211,

+  226,

+  138,

+  82,

+  167,

+  118,

+  102,

+  107,

+  206,

+  37,

+  235,

+  53,

+  179,

+  232,

+  171,

+  176,

+  195,

+  63,

+  241,

+  208,

+  84,

+  185,

+  121,

+  224,

+  28,

+  234,

+  58,

+  205,

+  230,

+  55,

+  218,

+  227,

+  88,

+  26,

+  120,

+  51,

+  194,

+  26,

+  230,

+  184,

+  25,

+  87,

+  167,

+  207,

+  181,

+  42,

+  78,

+  238,

+  188,

+  154,

+  107,

+  103,

+  195,

+  157,

+  168,

+  91,

+  134,

+  127,

+  37,

+  236,

+  207,

+  160,

+  141,

+  48,

+  64,

+  109,

+  56,

+  3,

+  114,

+  107,

+  80,

+  167,

+  207,

+  162,

+  98,

+  94,

+  122,

+  77,

+  55,

+  149,

+  76,

+  164,

+  248,

+  196,

+  108,

+  141,

+  127,

+  39,

+  7,

+  231,

+  254,

+  196,

+  153,

+  247,

+  80,

+  166,

+  96,

+  96,

+  121,

+  176,

+  222,

+  215,

+  206,

+  223,

+  109,

+  229,

+  92,

+  142,

+  243,

+  208,

+  63,

+  176,

+  194,

+  170,

+  63,

+  135,

+  77,

+  208,

+  30,

+  203,

+  220,

+  178,

+  75,

+  226,

+  51,

+  182,

+  124,

+  253,

+  97,

+  145,

+  159,

+  102,

+  243,

+  78,

+  7,

+  115,

+  54,

+  161,

+  97,

+  126,

+  151,

+  1,

+  15,

+  185,

+  123,

+  125,

+  11,

+  1,

+  201,

+  185,

+  148,

+  60,

+  36,

+  108,

+  149,

+  25,

+  35,

+  151,

+  190,

+  5,

+  184,

+  116,

+  191,

+  16,

+  160,

+  63,

+  75,

+  47,

+  133,

+  196,

+  234,

+  170,

+  58,

+  213,

+  30,

+  133,

+  153,

+  192,

+  63,

+  43,

+  179,

+  227,

+  221,

+  138,

+  159,

+  176,

+  107,

+  109,

+  145,

+  136,

+  68,

+  143,

+  234,

+  30,

+  211,

+  65,

+  49,

+  151,

+  200,

+  176,

+  67,

+  70,

+  202,

+  106,

+  76,

+  23,

+  219,

+  195,

+  133,

+  115,

+  125,

+  70,

+  214,

+  69,

+  38,

+  65,

+  167,

+  204,

+  218,

+  217,

+  84,

+  228,

+  249,

+  228,

+  111,

+  248,

+  122,

+  109,

+  215,

+  0,

+  237,

+  138,

+  119,

+  154,

+  68,

+  113,

+  124,

+  175,

+  125,

+  8,

+  111,

+  206,

+  251,

+  37,

+  185,

+  58,

+  82,

+  179,

+  100,

+  188,

+  205,

+  247,

+  143,

+  141,

+  99,

+  210,

+  230,

+  46,

+  168,

+  176,

+  30,

+  42,

+  115,

+  244,

+  212,

+  191,

+  136,

+  22,

+  179,

+  119,

+  231,

+  105,

+  132,

+  147,

+  171,

+  88,

+  143,

+  32,

+  31,

+  131,

+  112,

+  106,

+  93,

+  255,

+  132,

+  80,

+  249,

+  229,

+  145,

+  42,

+  66,

+  167,

+  36,

+  126,

+  188,

+  60,

+  116,

+  196,

+  166,

+  110,

+  184,

+  213,

+  188,

+  213,

+  198,

+  140,

+  126,

+  217,

+  77,

+  10,

+  147,

+  93,

+  226,

+  111,

+  96,

+  177,

+  117,

+  13,

+  104,

+  108,

+  158,

+  44,

+  175,

+  115,

+  234,

+  4,

+  140,

+  172,

+  127,

+  134,

+  209,

+  65,

+  157,

+  135,

+  132,

+  184,

+  71,

+  78,

+  108,

+  253,

+  229,

+  219,

+  168,

+  244,

+  147,

+  166,

+  186,

+  79,

+  204,

+  188,

+  68,

+  184,

+  78,

+  181,

+  91,

+  10,

+  82,

+  168,

+  163,

+  184,

+  33,

+  98,

+  55,

+  94,

+  188,

+  238,

+  157,

+  164,

+  150,

+  238,

+  213,

+  75,

+  251,

+  103,

+  219,

+  91,

+  119,

+  214,

+  165,

+  154,

+  42,

+  113,

+  13,

+  88,

+  244,

+  130,

+  91,

+  214,

+  82,

+  67,

+  112,

+  92,

+  190,

+  249,

+  122,

+  238,

+  239,

+  83,

+  238,

+  228,

+  243,

+  36,

+  62,

+  15,

+  148,

+  28,

+  73,

+  30,

+  252,

+  154,

+  178,

+  97,

+  2,

+  236,

+  227,

+  220,

+  71,

+  243,

+  221,

+  86,

+  179,

+  44,

+  171,

+  86,

+  233,

+  210,

+  134,

+  96,

+  251,

+  46,

+  237,

+  244,

+  18,

+  28,

+  20,

+  120,

+  212,

+  57,

+  113,

+  237,

+  224,

+  48,

+  250,

+  0,

+  223,

+  173,

+  8,

+  227,

+  80,

+  15,

+  140,

+  76,

+  134,

+  61,

+  238,

+  120,

+  69,

+  162,

+  165,

+  10,

+  80,

+  41,

+  131,

+  219,

+  166,

+  132,

+  178,

+  37,

+  94,

+  126,

+  11,

+  148,

+  86,

+  106,

+  159,

+  251,

+  34,

+  100,

+  19,

+  168,

+  78,

+  186,

+  103,

+  122,

+  117,

+  84,

+  19,

+  231,

+  207,

+  18,

+  189,

+  232,

+  145,

+  151,

+  205,

+  15,

+  201,

+  90,

+  251,

+  102,

+  247,

+  69,

+  173,

+  21,

+  158,

+  105,

+  114,

+  77,

+  153,

+  107,

+  27,

+  242,

+  225,

+  226,

+  203,

+  27,

+  161,

+  51,

+  80,

+  236,

+  134,

+  25,

+  177,

+  69,

+  60,

+  242,

+  108,

+  125,

+  185,

+  113,

+  182,

+  173,

+  134,

+  75,

+  103,

+  90,

+  164,

+  86,

+  156,

+  61,

+  215,

+  222,

+  28,

+  131,

+  44,

+  51,

+  107,

+  230,

+  75,

+  92,

+  44,

+  61,

+  52,

+  47,

+  9,

+  206,

+  137,

+  127,

+  151,

+  54,

+  65,

+  22,

+  217,

+  175,

+  102,

+  180,

+  244,

+  249,

+  52,

+  23,

+  66,

+  237,

+  195,

+  2,

+  149,

+  159,

+  67,

+  39,

+  98,

+  209,

+  248,

+  42,

+  41,

+  60,

+  111,

+  144,

+  208,

+  222,

+  166,

+  140,

+  11,

+  18,

+  0,

+  91,

+  15,

+  61,

+  31,

+  56,

+  75,

+  140,

+  54,

+  110,

+  127,

+  100,

+  0,

+  156,

+  236,

+  14,

+  64,

+  18,

+  75,

+  179,

+  151,

+  50,

+  236,

+  62,

+  23,

+  197,

+  195,

+  101,

+  177,

+  38,

+  125,

+  94,

+  40,

+  113,

+  183,

+  158,

+  160,

+  172,

+  163,

+  249,

+  53,

+  45,

+  148,

+  131,

+  38,

+  12,

+  185,

+  153,

+  15,

+  84,

+  231,

+  188,

+  11,

+  92,

+  112,

+  228,

+  173,

+  208,

+  242,

+  68,

+  194,

+  225,

+  14,

+  194,

+  231,

+  235,

+  64,

+  80,

+  22,

+  142,

+  8,

+  93,

+  81,

+  203,

+  44,

+  224,

+  56,

+  54,

+  210,

+  29,

+  107,

+  146,

+  188,

+  45,

+  139,

+  197,

+  168,

+  23,

+  87,

+  225,

+  121,

+  77,

+  137,

+  21,

+  92,

+  139,

+  71,

+  177,

+  217,

+  19,

+  9,

+  178,

+  219,

+  82,

+  28,

+  231,

+  233,

+  191,

+  81,

+  240,

+  18,

+  165,

+  239,

+  25,

+  85,

+  171,

+  221,

+  145,

+  171,

+  156,

+  5,

+  67,

+  4,

+  78,

+  178,

+  204,

+  25,

+  250,

+  216,

+  151,

+  137,

+  52,

+  224,

+  82,

+  111,

+  215,

+  120,

+  79,

+  238,

+  186,

+  144,

+  87,

+  135,

+  101,

+  39,

+  92,

+  24,

+  25,

+  225,

+  103,

+  147,

+  49,

+  95,

+  32,

+  5,

+  96,

+  200,

+  9,

+  3,

+  238,

+  74,

+  115,

+  223,

+  68,

+  30,

+  89,

+  25,

+  177,

+  34,

+  107,

+  235,

+  174,

+  92,

+  28,

+  202,

+  127,

+  170,

+  223,

+  239,

+  115,

+  84,

+  168,

+  174,

+  147,

+  94,

+  53,

+  87,

+  68,

+  127,

+  220,

+  221,

+  82,

+  33,

+  23,

+  212,

+  132,

+  211,

+  26,

+  217,

+  72,

+  102,

+  89,

+  224,

+  213,

+  126,

+  182,

+  13,

+  4,

+  21,

+  240,

+  223,

+  243,

+  27,

+  5,

+  238,

+  82,

+  13,

+  222,

+  234,

+  170,

+  138,

+  2,

+  65,

+  47,

+  79,

+  77,

+  68,

+  160,

+  215,

+  188,

+  177,

+  79,

+  155,

+  113,

+  22,

+  204,

+  81,

+  225,

+  135,

+  182,

+  88,

+  182,

+  207,

+  121,

+  1,

+  8,

+  124,

+  21,

+  94,

+  80,

+  192,

+  63,

+  136,

+  103,

+  75,

+  251,

+  103,

+  135,

+  247,

+  63,

+  4,

+  218,

+  98,

+  28,

+  26,

+  207,

+  91,

+  197,

+  48,

+  115,

+  116,

+  146,

+  248,

+  174,

+  249,

+  235,

+  187,

+  88,

+  176,

+  119,

+  68,

+  204,

+  240,

+  120,

+  87,

+  79,

+  237,

+  48,

+  147,

+  27,

+  38,

+  144,

+  143,

+  210,

+  129,

+  164,

+  113,

+  26,

+  158,

+  221,

+  16,

+  244,

+  206,

+  128,

+  238,

+  205,

+  29,

+  204,

+  175,

+  185,

+  140,

+  112,

+  108,

+  200,

+  80,

+  82,

+  59,

+  240,

+  231,

+  244,

+  183,

+  78,

+  101,

+  51,

+  37,

+  85,

+  67,

+  171,

+  12,

+  11,

+  193,

+  39,

+  251,

+  219,

+  28,

+  185,

+  89,

+  236,

+  164,

+  11,

+  56,

+  170,

+  153,

+  154,

+  20,

+  108,

+  3,

+  91,

+  195,

+  2,

+  65,

+  15,

+  99,

+  54,

+  228,

+  69,

+  5,

+  117,

+  13,

+  177,

+  14,

+  100,

+  179,

+  68,

+  38,

+  198,

+  168,

+  145,

+  68,

+  170,

+  13,

+  102,

+  17,

+  242,

+  203,

+  114,

+  181,

+  193,

+  244,

+  201,

+  80,

+  102,

+  197,

+  63,

+  198,

+  213,

+  86,

+  134,

+  62,

+  161,

+  6,

+  130,

+  128,

+  240,

+  104,

+  87,

+  209,

+  192,

+  32,

+  101,

+  54,

+  10,

+  1,

+  10,

+  7,

+  134,

+  48,

+  20,

+  92,

+  176,

+  184,

+  45,

+  53,

+  144,

+  54,

+  207,

+  108,

+  217,

+  121,

+  245,

+  138,

+  227,

+  176,

+  239,

+  211,

+  161,

+  207,

+  97,

+  64,

+  199,

+  154,

+  214,

+  189,

+  157,

+  44,

+  64,

+  115,

+  254,

+  27,

+  134,

+  68,

+  237,

+  215,

+  53,

+  222,

+  92,

+  176,

+  36,

+  190,

+  152,

+  247,

+  190,

+  14,

+  104,

+  230,

+  55,

+  118,

+  238,

+  224,

+  146,

+  100,

+  11,

+  151,

+  192,

+  162,

+  243,

+  161,

+  93,

+  50,

+  226,

+  157,

+  163,

+  28,

+  99,

+  145,

+  49,

+  186,

+  6,

+  237,

+  244,

+  26,

+  122,

+  53,

+  129,

+  150,

+  192,

+  49,

+  143,

+  176,

+  19,

+  40,

+  94,

+  150,

+  117,

+  35,

+  224,

+  50,

+  125,

+  181,

+  47,

+  203,

+  62,

+  209,

+  201,

+  240,

+  228,

+  222,

+  60,

+  208,

+  122,

+  126,

+  175,

+  201,

+  243,

+  160,

+  254,

+  54,

+  218,

+  221,

+  43,

+  248,

+  84,

+  230,

+  73,

+  159,

+  236,

+  169,

+  234,

+  217,

+  25,

+  239,

+  2,

+  240,

+  169,

+  215,

+  117,

+  200,

+  166,

+  183,

+  207,

+  186,

+  96,

+  217,

+  140,

+  60,

+  159,

+  206,

+  150,

+  67,

+  10,

+  83,

+  221,

+  92,

+  90,

+  195,

+  191,

+  15,

+  182,

+  19,

+  90,

+  58,

+  52,

+  232,

+  121,

+  118,

+  89,

+  13,

+  70,

+  189,

+  172,

+  251,

+  160,

+  94,

+  145,

+  76,

+  77,

+  87,

+  160,

+  208,

+  135,

+  113,

+  21,

+  96,

+  103,

+  124,

+  15,

+  223,

+  239,

+  164,

+  113,

+  229,

+  6,

+  82,

+  49,

+  247,

+  11,

+  173,

+  76,

+  23,

+  234,

+  161,

+  77,

+  67,

+  1,

+  163,

+  52,

+  119,

+  126,

+  43,

+  145,

+  120,

+  22,

+  239,

+  63,

+  197,

+  246,

+  14,

+  10,

+  115,

+  115,

+  150,

+  131,

+  136,

+  250,

+  138,

+  243,

+  127,

+  91,

+  118,

+  187,

+  91,

+  206,

+  43,

+  220,

+  162,

+  222,

+  232,

+  57,

+  31,

+  114,

+  182,

+  167,

+  183,

+  130,

+  160,

+  208,

+  255,

+  74,

+  50,

+  184,

+  210,

+  210,

+  82,

+  235,

+  88,

+  124,

+  218,

+  99,

+  122,

+  253,

+  222,

+  57,

+  126,

+  109,

+  62,

+  80,

+  97,

+  179,

+  157,

+  246,

+  70,

+  229,

+  111,

+  227,

+  37,

+  74,

+  68,

+  127,

+  208,

+  177,

+  15,

+  135,

+  137,

+  147,

+  181,

+  145,

+  44,

+  216,

+  210,

+  191,

+  33,

+  75,

+  190,

+  249,

+  117,

+  101,

+  207,

+  131,

+  187,

+  82,

+  231,

+  217,

+  116,

+  87,

+  223,

+  133,

+  45,

+  71,

+  254,

+  7,

+  162,

+  231,

+  252,

+  35,

+  92,

+  253,

+  139,

+  151,

+  73,

+  79,

+  221,

+  223,

+  167,

+  152,

+  151,

+  236,

+  89,

+  229,

+  248,

+  142,

+  176,

+  21,

+  187,

+  207,

+  119,

+  116,

+  246,

+  218,

+  82,

+  202,

+  248,

+  78,

+  60,

+  254,

+  73,

+  228,

+  40,

+  108,

+  54,

+  248,

+  95,

+  106,

+  109,

+  93,

+  211,

+  60,

+  217,

+  15,

+  188,

+  117,

+  189,

+  91,

+  67,

+  52,

+  21,

+  153,

+  185,

+  162,

+  91,

+  10,

+  168,

+  174,

+  221,

+  186,

+  198,

+  65,

+  27,

+  141,

+  254,

+  95,

+  234,

+  174,

+  206,

+  126,

+  190,

+  38,

+  139,

+  19,

+  89,

+  249,

+  115,

+  26,

+  167,

+  50,

+  249,

+  151,

+  215,

+  0,

+  45,

+  117,

+  125,

+  181,

+  114,

+  21,

+  155,

+  176,

+  255,

+  0,

+  80,

+  75,

+  3,

+  4,

+  20,

+  0,

+  0,

+  8,

+  8,

+  0,

+  184,

+  182,

+  42,

+  68,

+  49,

+  191,

+  99,

+  158,

+  35,

+  6,

+  0,

+  0,

+  211,

+  60,

+  0,

+  0,

+  12,

+  0,

+  0,

+  0,

+  97,

+  114,

+  105,

+  97,

+  108,

+  95,

+  49,

+  52,

+  46,

+  102,

+  110,

+  116,

+  189,

+  91,

+  219,

+  110,

+  219,

+  72,

+  12,

+  125,

+  239,

+  87,

+  8,

+  122,

+  110,

+  55,

+  115,

+  191,

+  0,

+  78,

+  129,

+  190,

+  245,

+  15,

+  246,

+  113,

+  161,

+  181,

+  229,

+  68,

+  168,

+  35,

+  5,

+  177,

+  179,

+  155,

+  238,

+  215,

+  175,

+  102,

+  56,

+  78,

+  45,

+  59,

+  82,

+  73,

+  141,

+  45,

+  20,

+  72,

+  101,

+  199,

+  199,

+  103,

+  200,

+  33,

+  15,

+  41,

+  142,

+  178,

+  218,

+  118,

+  237,

+  225,

+  235,

+  167,

+  162,

+  88,

+  53,

+  237,

+  182,

+  43,

+  182,

+  213,

+  186,

+  190,

+  47,

+  191,

+  189,

+  52,

+  213,

+  174,

+  44,

+  246,

+  205,

+  127,

+  253,

+  11,

+  174,

+  202,

+  226,

+  239,

+  110,

+  183,

+  185,

+  47,

+  89,

+  89,

+  52,

+  135,

+  106,

+  215,

+  172,

+  227,

+  229,

+  250,

+  177,

+  122,

+  217,

+  215,

+  135,

+  251,

+  178,

+  44,

+  94,

+  219,

+  102,

+  221,

+  109,

+  234,

+  112,

+  185,

+  63,

+  188,

+  212,

+  135,

+  245,

+  227,

+  247,

+  30,

+  199,

+  250,

+  15,

+  237,

+  159,

+  186,

+  238,

+  240,

+  216,

+  191,

+  40,

+  139,

+  170,

+  138,

+  255,

+  61,

+  87,

+  155,

+  77,

+  211,

+  62,

+  220,

+  151,

+  226,

+  115,

+  252,

+  215,

+  127,

+  230,

+  185,

+  90,

+  199,

+  119,

+  216,

+  231,

+  30,

+  209,

+  189,

+  30,

+  118,

+  77,

+  91,

+  7,

+  138,

+  187,

+  184,

+  174,

+  117,

+  247,

+  244,

+  212,

+  181,

+  69,

+  120,

+  243,

+  123,

+  221,

+  60,

+  60,

+  246,

+  140,

+  220,

+  244,

+  75,

+  170,

+  246,

+  97,

+  113,

+  178,

+  199,

+  175,

+  171,

+  93,

+  253,

+  231,

+  125,

+  105,

+  29,

+  79,

+  47,

+  2,

+  187,

+  11,

+  84,

+  15,

+  245,

+  62,

+  145,

+  174,

+  127,

+  212,

+  155,

+  95,

+  223,

+  25,

+  127,

+  19,

+  174,

+  210,

+  117,

+  209,

+  128,

+  121,

+  219,

+  102,

+  215,

+  127,

+  105,

+  21,

+  204,

+  255,

+  139,

+  171,

+  63,

+  158,

+  219,

+  135,

+  4,

+  184,

+  123,

+  71,

+  172,

+  162,

+  221,

+  197,

+  186,

+  123,

+  109,

+  251,

+  149,

+  120,

+  94,

+  166,

+  175,

+  9,

+  111,

+  199,

+  175,

+  241,

+  182,

+  44,

+  222,

+  122,

+  243,

+  202,

+  226,

+  103,

+  252,

+  249,

+  111,

+  179,

+  9,

+  30,

+  232,

+  223,

+  125,

+  76,

+  203,

+  239,

+  151,

+  246,

+  214,

+  109,

+  183,

+  209,

+  121,

+  253,

+  226,

+  126,

+  30,

+  175,

+  123,

+  71,

+  191,

+  85,

+  155,

+  127,

+  170,

+  54,

+  236,

+  65,

+  90,

+  127,

+  114,

+  117,

+  187,

+  235,

+  63,

+  170,

+  97,

+  49,

+  3,

+  50,

+  23,

+  201,

+  56,

+  31,

+  103,

+  11,

+  191,

+  251,

+  144,

+  142,

+  207,

+  160,

+  243,

+  96,

+  27,

+  203,

+  52,

+  206,

+  162,

+  216,

+  98,

+  4,

+  5,

+  58,

+  143,

+  180,

+  142,

+  229,

+  89,

+  199,

+  25,

+  143,

+  124,

+  210,

+  45,

+  178,

+  119,

+  156,

+  137,

+  72,

+  167,

+  236,

+  25,

+  157,

+  166,

+  154,

+  167,

+  144,

+  124,

+  50,

+  242,

+  105,

+  53,

+  195,

+  157,

+  179,

+  236,

+  83,

+  145,

+  207,

+  200,

+  51,

+  62,

+  115,

+  194,

+  199,

+  174,

+  23,

+  156,

+  156,

+  233,

+  200,

+  103,

+  207,

+  147,

+  65,

+  80,

+  249,

+  36,

+  146,

+  207,

+  0,

+  159,

+  62,

+  227,

+  147,

+  39,

+  124,

+  242,

+  132,

+  239,

+  75,

+  54,

+  33,

+  72,

+  139,

+  99,

+  185,

+  14,

+  197,

+  230,

+  31,

+  168,

+  139,

+  115,

+  75,

+  57,

+  20,

+  228,

+  197,

+  159,

+  107,

+  103,

+  32,

+  33,

+  37,

+  32,

+  23,

+  56,

+  66,

+  14,

+  2,

+  19,

+  35,

+  117,

+  204,

+  163,

+  215,

+  204,

+  120,

+  206,

+  147,

+  92,

+  35,

+  171,

+  67,

+  110,

+  6,

+  114,

+  80,

+  24,

+  46,

+  230,

+  212,

+  135,

+  89,

+  132,

+  32,

+  49,

+  92,

+  178,

+  133,

+  52,

+  134,

+  171,

+  68,

+  120,

+  94,

+  35,

+  20,

+  113,

+  7,

+  53,

+  146,

+  15,

+  52,

+  134,

+  43,

+  141,

+  139,

+  24,

+  150,

+  89,

+  2,

+  57,

+  104,

+  12,

+  215,

+  114,

+  220,

+  190,

+  65,

+  14,

+  230,

+  22,

+  9,

+  110,

+  19,

+  161,

+  95,

+  40,

+  37,

+  82,

+  7,

+  99,

+  108,

+  102,

+  74,

+  96,

+  29,

+  10,

+  26,

+  195,

+  173,

+  65,

+  138,

+  204,

+  40,

+  97,

+  0,

+  96,

+  24,

+  69,

+  18,

+  25,

+  231,

+  150,

+  177,

+  80,

+  36,

+  145,

+  241,

+  54,

+  55,

+  7,

+  177,

+  132,

+  34,

+  117,

+  133,

+  102,

+  17,

+  3,

+  13,

+  164,

+  160,

+  224,

+  122,

+  98,

+  7,

+  113,

+  57,

+  225,

+  113,

+  132,

+  144,

+  131,

+  66,

+  156,

+  59,

+  212,

+  81,

+  235,

+  32,

+  146,

+  47,

+  221,

+  65,

+  200,

+  115,

+  62,

+  79,

+  237,

+  234,

+  145,

+  33,

+  106,

+  32,

+  7,

+  133,

+  114,

+  19,

+  132,

+  236,

+  154,

+  132,

+  233,

+  62,

+  226,

+  66,

+  100,

+  110,

+  228,

+  81,

+  155,

+  110,

+  36,

+  204,

+  212,

+  157,

+  196,

+  53,

+  249,

+  32,

+  5,

+  133,

+  117,

+  83,

+  33,

+  138,

+  219,

+  66,

+  142,

+  99,

+  76,

+  57,

+  232,

+  89,

+  174,

+  71,

+  145,

+  91,

+  104,

+  161,

+  210,

+  75,

+  198,

+  114,

+  155,

+  67,

+  92,

+  97,

+  178,

+  42,

+  241,

+  77,

+  180,

+  106,

+  184,

+  187,

+  37,

+  156,

+  202,

+  88,

+  80,

+  25,

+  121,

+  209,

+  170,

+  221,

+  42,

+  68,

+  65,

+  100,

+  164,

+  16,

+  185,

+  33,

+  138,

+  43,

+  188,

+  22,

+  68,

+  70,

+  74,

+  142,

+  85,

+  209,

+  241,

+  136,

+  193,

+  117,

+  219,

+  22,

+  84,

+  70,

+  42,

+  185,

+  84,

+  136,

+  130,

+  202,

+  200,

+  139,

+  222,

+  233,

+  102,

+  89,

+  232,

+  64,

+  103,

+  164,

+  209,

+  203,

+  4,

+  141,

+  75,

+  3,

+  11,

+  171,

+  23,

+  179,

+  80,

+  164,

+  17,

+  137,

+  93,

+  168,

+  84,

+  184,

+  164,

+  51,

+  222,

+  77,

+  184,

+  148,

+  95,

+  209,

+  165,

+  160,

+  51,

+  138,

+  57,

+  228,

+  22,

+  102,

+  54,

+  23,

+  14,

+  116,

+  70,

+  241,

+  108,

+  251,

+  176,

+  14,

+  5,

+  161,

+  81,

+  194,

+  45,

+  212,

+  62,

+  57,

+  80,

+  26,

+  165,

+  206,

+  43,

+  5,

+  151,

+  84,

+  66,

+  142,

+  27,

+  36,

+  56,

+  80,

+  26,

+  165,

+  53,

+  50,

+  72,

+  115,

+  45,

+  4,

+  161,

+  81,

+  198,

+  44,

+  228,

+  82,

+  207,

+  210,

+  228,

+  112,

+  161,

+  32,

+  149,

+  144,

+  132,

+  42,

+  127,

+  18,

+  164,

+  144,

+  73,

+  152,

+  58,

+  54,

+  117,

+  57,

+  11,

+  82,

+  100,

+  161,

+  193,

+  221,

+  218,

+  107,

+  216,

+  68,

+  205,

+  230,

+  216,

+  168,

+  232,

+  54,

+  74,

+  72,

+  11,

+  125,

+  209,

+  96,

+  132,

+  108,

+  39,

+  102,

+  62,

+  174,

+  0,

+  107,

+  72,

+  11,

+  45,

+  244,

+  184,

+  133,

+  238,

+  122,

+  6,

+  154,

+  52,

+  110,

+  70,

+  143,

+  239,

+  51,

+  59,

+  26,

+  5,

+  165,

+  73,

+  95,

+  140,

+  239,

+  79,

+  230,

+  233,

+  26,

+  147,

+  19,

+  184,

+  120,

+  81,

+  44,

+  77,

+  211,

+  245,

+  196,

+  100,

+  70,

+  97,

+  204,

+  67,

+  242,

+  65,

+  173,

+  215,

+  154,

+  47,

+  195,

+  231,

+  117,

+  226,

+  155,

+  170,

+  244,

+  99,

+  238,

+  148,

+  51,

+  182,

+  47,

+  133,

+  139,

+  153,

+  24,

+  147,

+  216,

+  17,

+  243,

+  230,

+  208,

+  37,

+  243,

+  172,

+  29,

+  119,

+  167,

+  24,

+  49,

+  207,

+  210,

+  189,

+  105,

+  210,

+  238,

+  57,

+  57,

+  110,

+  157,

+  190,

+  222,

+  88,

+  77,

+  65,

+  145,

+  215,

+  23,

+  242,

+  41,

+  62,

+  182,

+  110,

+  16,

+  43,

+  140,

+  158,

+  235,

+  74,

+  37,

+  62,

+  51,

+  206,

+  167,

+  174,

+  201,

+  7,

+  226,

+  105,

+  46,

+  238,

+  62,

+  213,

+  141,

+  206,

+  206,

+  68,

+  58,

+  203,

+  186,

+  152,

+  113,

+  113,

+  106,

+  246,

+  33,

+  171,

+  195,

+  145,

+  111,

+  98,

+  174,

+  125,

+  197,

+  100,

+  151,

+  80,

+  252,

+  12,

+  215,

+  51,

+  246,

+  143,

+  126,

+  210,

+  99,

+  146,

+  117,

+  220,

+  79,

+  181,

+  132,

+  40,

+  66,

+  142,

+  244,

+  167,

+  78,

+  103,

+  145,

+  10,

+  217,

+  102,

+  103,

+  158,

+  37,

+  75,

+  72,

+  64,

+  163,

+  166,

+  14,

+  91,

+  229,

+  8,

+  31,

+  155,

+  113,

+  50,

+  159,

+  60,

+  170,

+  39,

+  14,

+  91,

+  205,

+  245,

+  166,

+  35,

+  18,

+  90,

+  9,

+  99,

+  120,

+  238,

+  136,

+  210,

+  35,

+  243,

+  15,

+  170,

+  131,

+  177,

+  2,

+  89,

+  253,

+  50,

+  171,

+  59,

+  23,

+  41,

+  96,

+  46,

+  90,

+  236,

+  27,

+  17,

+  122,

+  40,

+  16,

+  198,

+  41,

+  228,

+  105,

+  114,

+  166,

+  192,

+  248,

+  228,

+  80,

+  231,

+  145,

+  124,

+  153,

+  10,

+  42,

+  161,

+  59,

+  51,

+  254,

+  220,

+  190,

+  147,

+  91,

+  164,

+  209,

+  59,

+  150,

+  25,

+  124,

+  202,

+  141,

+  240,

+  221,

+  170,

+  251,

+  4,

+  5,

+  181,

+  12,

+  123,

+  80,

+  39,

+  242,

+  248,

+  52,

+  75,

+  124,

+  216,

+  145,

+  118,

+  166,

+  160,

+  105,

+  158,

+  30,

+  174,

+  112,

+  203,

+  248,

+  83,

+  67,

+  188,

+  88,

+  97,

+  23,

+  178,

+  15,

+  242,

+  193,

+  74,

+  179,

+  204,

+  252,

+  85,

+  131,

+  96,

+  219,

+  139,

+  219,

+  135,

+  91,

+  249,

+  51,

+  61,

+  28,

+  51,

+  249,

+  244,

+  207,

+  53,

+  237,

+  75,

+  15,

+  199,

+  24,

+  185,

+  144,

+  125,

+  208,

+  17,

+  90,

+  43,

+  150,

+  225,

+  75,

+  122,

+  6,

+  253,

+  39,

+  35,

+  169,

+  25,

+  78,

+  204,

+  86,

+  119,

+  241,

+  73,

+  195,

+  120,

+  249,

+  163,

+  126,

+  105,

+  155,

+  246,

+  225,

+  215,

+  99,

+  135,

+  246,

+  248,

+  216,

+  97,

+  250,

+  77,

+  177,

+  109,

+  94,

+  246,

+  7,

+  88,

+  213,

+  190,

+  94,

+  119,

+  109,

+  58,

+  39,

+  173,

+  158,

+  0,

+  240,

+  133,

+  191,

+  91,

+  48,

+  129,

+  8,

+  181,

+  231,

+  136,

+  96,

+  40,

+  128,

+  71,

+  0,

+  130,

+  50,

+  30,

+  1,

+  202,

+  99,

+  214,

+  20,

+  86,

+  126,

+  68,

+  4,

+  58,

+  26,

+  226,

+  212,

+  10,

+  36,

+  194,

+  144,

+  17,

+  150,

+  140,

+  32,

+  91,

+  30,

+  31,

+  141,

+  248,

+  173,

+  119,

+  135,

+  8,

+  79,

+  69,

+  132,

+  135,

+  5,

+  126,

+  139,

+  8,

+  195,

+  184,

+  247,

+  29,

+  60,

+  245,

+  174,

+  64,

+  33,

+  12,

+  21,

+  129,

+  139,

+  220,

+  112,

+  98,

+  70,

+  139,

+  146,

+  83,

+  4,

+  46,

+  74,

+  6,

+  8,

+  67,

+  70,

+  88,

+  50,

+  194,

+  83,

+  17,

+  131,

+  29,

+  28,

+  135,

+  56,

+  246,

+  177,

+  179,

+  24,

+  6,

+  128,

+  219,

+  115,

+  71,

+  222,

+  115,

+  71,

+  222,

+  115,

+  71,

+  85,

+  171,

+  1,

+  192,

+  80,

+  1,

+  150,

+  10,

+  192,

+  228,

+  95,

+  88,

+  55,

+  109,

+  43,

+  20,

+  121,

+  43,

+  78,

+  17,

+  56,

+  199,

+  42,

+  242,

+  230,

+  157,

+  32,

+  180,

+  35,

+  35,

+  60,

+  21,

+  97,

+  200,

+  118,

+  88,

+  234,

+  110,

+  120,

+  75,

+  93,

+  148,

+  39,

+  155,

+  17,

+  31,

+  50,

+  167,

+  66,

+  200,

+  166,

+  199,

+  39,

+  77,

+  137,

+  44,

+  92,

+  209,

+  89,

+  52,

+  157,

+  197,

+  210,

+  89,

+  60,

+  25,

+  130,

+  20,

+  69,

+  51,

+  146,

+  88,

+  56,

+  132,

+  38,

+  35,

+  12,

+  21,

+  49,

+  72,

+  44,

+  28,

+  194,

+  83,

+  17,

+  134,

+  108,

+  135,

+  183,

+  84,

+  196,

+  48,

+  234,

+  145,

+  16,

+  141,

+  73,

+  95,

+  51,

+  22,

+  244,

+  56,

+  18,

+  174,

+  232,

+  16,

+  186,

+  245,

+  200,

+  112,

+  180,

+  228,

+  112,

+  180,

+  31,

+  135,

+  35,

+  67,

+  1,

+  12,

+  149,

+  66,

+  59,

+  34,

+  133,

+  246,

+  68,

+  0,

+  50,

+  22,

+  45,

+  57,

+  22,

+  237,

+  72,

+  44,

+  50,

+  28,

+  130,

+  234,

+  219,

+  65,

+  40,

+  34,

+  17,

+  138,

+  140,

+  176,

+  84,

+  4,

+  170,

+  219,

+  119,

+  158,

+  218,

+  159,

+  120,

+  114,

+  127,

+  226,

+  201,

+  50,

+  234,

+  201,

+  253,

+  137,

+  39,

+  203,

+  168,

+  39,

+  203,

+  168,

+  39,

+  135,

+  174,

+  39,

+  135,

+  174,

+  167,

+  203,

+  168,

+  167,

+  55,

+  15,

+  158,

+  174,

+  163,

+  3,

+  136,

+  160,

+  67,

+  36,

+  29,

+  66,

+  247,

+  24,

+  71,

+  109,

+  125,

+  252,

+  91,

+  188,

+  95,

+  46,

+  195,

+  68,

+  125,

+  76,

+  88,

+  154,

+  92,

+  15,

+  33,

+  6,

+  7,

+  113,

+  116,

+  22,

+  71,

+  103,

+  241,

+  116,

+  22,

+  79,

+  102,

+  9,

+  242,

+  67,

+  100,

+  25,

+  64,

+  62,

+  96,

+  89,

+  221,

+  29,

+  103,

+  99,

+  95,

+  63,

+  173,

+  238,

+  226,

+  31,

+  51,

+  255,

+  15,

+  80,

+  75,

+  1,

+  2,

+  20,

+  0,

+  20,

+  0,

+  0,

+  8,

+  8,

+  0,

+  184,

+  182,

+  42,

+  68,

+  36,

+  55,

+  216,

+  103,

+  135,

+  15,

+  0,

+  0,

+  133,

+  15,

+  0,

+  0,

+  12,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  97,

+  114,

+  105,

+  97,

+  108,

+  95,

+  49,

+  52,

+  46,

+  112,

+  110,

+  103,

+  80,

+  75,

+  1,

+  2,

+  20,

+  0,

+  20,

+  0,

+  0,

+  8,

+  8,

+  0,

+  184,

+  182,

+  42,

+  68,

+  49,

+  191,

+  99,

+  158,

+  35,

+  6,

+  0,

+  0,

+  211,

+  60,

+  0,

+  0,

+  12,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  177,

+  15,

+  0,

+  0,

+  97,

+  114,

+  105,

+  97,

+  108,

+  95,

+  49,

+  52,

+  46,

+  102,

+  110,

+  116,

+  80,

+  75,

+  5,

+  6,

+  0,

+  0,

+  0,

+  0,

+  2,

+  0,

+  2,

+  0,

+  116,

+  0,

+  0,

+  0,

+  254,

+  21,

+  0,

+  0,

+  0,

+  0

+];

diff --git a/image/lib/src/fonts/arial_24.dart b/image/lib/src/fonts/arial_24.dart
index b838e04..59bb07e 100755
--- a/image/lib/src/fonts/arial_24.dart
+++ b/image/lib/src/fonts/arial_24.dart
@@ -1,20 +1,9309 @@
 import '../bitmap_font.dart';

 

-/**

- * 24px Arial font for use with [drawString] and [drawChar].

- */

+/// 24px Arial font for use with [drawString] and [drawChar].

 final BitmapFont arial_24 = BitmapFont.fromZip(_ARIAL_24);

 

 const List<int> _ARIAL_24 = const [

-80, 75, 3, 4, 20, 0, 0, 8, 8, 0, 131, 182, 42, 68, 22, 124, 124, 222, 0, 29, 0, 0, 62, 29, 0, 0, 12, 0, 0, 0, 97, 114, 105, 97, 108, 95, 50, 52, 46, 112, 110, 103, 141, 121, 103, 80, 19, 80, 179, 118, 18, 66, 143, 180, 208, 155, 128, 64, 164, 67, 232, 16, 122, 239, 85, 5, 68, 64, 122, 83, 58, 132, 158, 0, 130, 244, 142, 160, 16, 170, 2, 138, 72, 87, 164, 5, 165, 119, 4, 233, 66, 144, 222, 36, 116, 233, 215, 119, 190, 31, 223, 251, 235, 206, 61, 179, 115, 102, 127, 236, 236, 60, 115, 102, 207, 238, 179, 243, 196, 27, 27, 106, 221, 33, 99, 38, 3, 0, 0, 119, 116, 180, 213, 77, 1, 0, 48, 230, 159, 207, 66, 66, 244, 239, 86, 224, 212, 200, 0, 0, 216, 8, 117, 212, 85, 204, 145, 115, 123, 79, 18, 211, 75, 229, 234, 49, 16, 18, 52, 21, 109, 148, 42, 7, 248, 159, 189, 80, 38, 137, 81, 38, 129, 130, 56, 101, 192, 240, 191, 1, 163, 11, 81, 191, 2, 91, 10, 85, 79, 145, 206, 63, 31, 84, 43, 184, 120, 42, 107, 111, 79, 79, 83, 134, 135, 73, 184, 79, 86, 152, 148, 106, 38, 51, 75, 254, 239, 206, 120, 234, 219, 124, 191, 179, 37, 151, 235, 165, 219, 155, 51, 82, 165, 219, 107, 33, 177, 142, 219, 72, 254, 176, 135, 183, 75, 46, 156, 24, 73, 186, 5, 129, 136, 228, 149, 157, 144, 117, 89, 241, 144, 158, 139, 37, 23, 137, 133, 32, 141, 105, 194, 245, 217, 191, 65, 91, 30, 194, 163, 183, 29, 112, 219, 5, 201, 73, 249, 208, 253, 212, 72, 202, 222, 75, 73, 37, 100, 120, 251, 34, 233, 16, 95, 196, 6, 112, 145, 197, 230, 72, 242, 110, 151, 28, 241, 83, 202, 145, 174, 253, 254, 19, 85, 7, 195, 205, 215, 107, 30, 85, 3, 236, 172, 203, 45, 249, 163, 178, 55, 161, 206, 139, 46, 191, 123, 2, 194, 148, 76, 17, 101, 73, 60, 198, 97, 239, 62, 242, 213, 198, 126, 94, 49, 218, 189, 121, 23, 113, 239, 73, 208, 208, 10, 195, 179, 33, 214, 136, 189, 239, 44, 127, 31, 15, 68, 242, 209, 76, 231, 47, 237, 111, 96, 190, 194, 3, 143, 17, 57, 247, 207, 57, 90, 61, 114, 166, 200, 71, 149, 14, 170, 88, 44, 46, 153, 218, 203, 189, 63, 165, 167, 119, 12, 30, 60, 217, 96, 37, 88, 140, 28, 191, 100, 7, 189, 253, 230, 145, 121, 120, 67, 41, 7, 108, 85, 251, 148, 164, 224, 238, 23, 182, 16, 199, 18, 217, 208, 55, 44, 112, 166, 124, 233, 193, 199, 70, 32, 182, 159, 232, 179, 43, 237, 116, 199, 172, 255, 82, 252, 194, 205, 249, 244, 208, 24, 93, 206, 123, 47, 210, 16, 100, 68, 151, 76, 144, 186, 246, 197, 86, 34, 201, 169, 200, 191, 216, 199, 203, 118, 109, 152, 107, 17, 112, 233, 228, 179, 59, 72, 104, 75, 240, 71, 252, 254, 213, 167, 63, 27, 71, 65, 218, 27, 254, 113, 138, 181, 3, 231, 121, 227, 42, 133, 147, 75, 146, 243, 153, 191, 227, 162, 2, 18, 105, 148, 172, 130, 205, 235, 226, 244, 130, 89, 230, 37, 50, 10, 40, 214, 185, 153, 144, 2, 98, 97, 117, 198, 82, 45, 13, 188, 41, 141, 74, 103, 186, 37, 187, 125, 9, 97, 185, 159, 170, 199, 161, 199, 159, 190, 244, 38, 213, 181, 149, 31, 51, 172, 37, 230, 159, 213, 42, 218, 90, 138, 79, 41, 202, 252, 13, 110, 192, 87, 113, 144, 131, 66, 22, 25, 62, 106, 42, 176, 22, 132, 5, 70, 31, 14, 226, 4, 70, 99, 110, 182, 89, 247, 103, 10, 61, 18, 167, 220, 94, 133, 133, 185, 71, 138, 237, 228, 19, 222, 69, 136, 182, 71, 120, 177, 134, 210, 134, 197, 99, 103, 152, 196, 55, 28, 162, 66, 133, 181, 219, 185, 119, 114, 25, 35, 121, 73, 67, 207, 50, 158, 232, 47, 115, 79, 94, 216, 166, 27, 76, 202, 89, 214, 100, 168, 217, 124, 98, 95, 186, 124, 206, 153, 102, 114, 97, 231, 186, 204, 32, 68, 136, 161, 0, 214, 146, 251, 193, 229, 246, 181, 200, 14, 28, 84, 185, 231, 146, 40, 190, 233, 176, 213, 26, 47, 132, 122, 34, 35, 22, 217, 144, 81, 223, 162, 131, 203, 9, 153, 172, 210, 2, 191, 140, 67, 206, 66, 168, 184, 227, 80, 191, 20, 118, 156, 144, 35, 154, 98, 0, 184, 175, 216, 199, 40, 84, 247, 165, 189, 51, 68, 58, 37, 202, 78, 59, 210, 230, 95, 54, 116, 23, 179, 132, 221, 117, 160, 230, 185, 112, 66, 253, 156, 216, 145, 246, 8, 65, 14, 11, 241, 168, 247, 142, 146, 206, 0, 187, 117, 75, 105, 104, 10, 171, 5, 122, 202, 65, 146, 81, 122, 119, 206, 70, 66, 91, 26, 40, 179, 205, 24, 172, 182, 55, 168, 55, 16, 235, 199, 216, 14, 69, 250, 182, 70, 230, 96, 103, 131, 136, 49, 50, 99, 149, 52, 248, 6, 150, 136, 187, 73, 30, 140, 186, 104, 216, 142, 213, 67, 240, 99, 25, 204, 38, 74, 63, 180, 91, 70, 61, 248, 41, 184, 183, 55, 136, 0, 131, 210, 111, 2, 137, 177, 53, 166, 98, 49, 185, 66, 87, 156, 178, 78, 249, 213, 170, 77, 253, 101, 140, 3, 171, 54, 90, 82, 47, 223, 139, 160, 158, 47, 240, 87, 21, 208, 33, 7, 116, 169, 62, 240, 227, 193, 168, 88, 179, 212, 103, 63, 88, 239, 158, 205, 72, 166, 189, 4, 126, 225, 77, 94, 250, 4, 50, 138, 123, 130, 157, 229, 209, 193, 217, 158, 109, 188, 2, 25, 221, 163, 190, 10, 101, 198, 59, 222, 17, 4, 133, 138, 231, 236, 6, 83, 34, 201, 10, 142, 51, 69, 170, 226, 161, 125, 103, 140, 108, 112, 222, 87, 224, 55, 36, 44, 17, 47, 176, 153, 61, 143, 101, 210, 116, 8, 87, 71, 47, 161, 138, 72, 202, 240, 167, 223, 92, 32, 68, 111, 156, 92, 174, 94, 216, 205, 208, 168, 164, 223, 254, 17, 35, 117, 208, 142, 197, 197, 12, 10, 63, 188, 234, 111, 164, 199, 59, 230, 14, 174, 174, 13, 59, 24, 129, 63, 215, 2, 210, 126, 176, 56, 73, 208, 130, 248, 140, 107, 69, 180, 255, 82, 62, 92, 153, 6,

-124, 243, 31, 67, 113, 100, 13, 189, 211, 223, 188, 75, 160, 217, 55, 178,

-188, 232, 80, 66, 255, 197, 187, 157, 166, 158, 239, 114, 165, 165, 86, 10, 239, 223, 58, 93, 248, 18, 110, 85, 95, 32, 170, 27, 216, 170, 4, 118, 98, 0, 212, 248, 57, 128, 119, 185, 170, 166, 185, 68, 231, 212, 197, 8, 239, 65, 130, 236, 61, 217, 224, 17, 178, 142, 145, 138, 127, 218, 184, 106, 158, 173, 230, 43, 139, 222, 100, 59, 44, 234, 98, 205, 68, 152, 202, 205, 37, 152, 15, 217, 165, 254, 142, 95, 179, 115, 77, 225, 34, 162, 69, 123, 197, 197, 40, 117, 94, 150, 57, 245, 228, 229, 139, 168, 47, 61, 232, 37, 173, 90, 218, 246, 94, 23, 175, 79, 253, 125, 144, 87, 148, 111, 188, 186, 220, 31, 68, 29, 206, 203, 83, 210, 5, 12, 222, 56, 33, 128, 35, 122, 4, 112, 6, 107, 30, 242, 174, 185, 249, 177, 247, 110, 56, 8, 17, 215, 18, 56, 29, 80, 1, 63, 208, 104, 54, 173, 83, 156, 165, 224, 213, 71, 90, 164, 234, 142, 4, 212, 67, 54, 170, 237, 75, 232, 41, 23, 238, 3, 176, 109, 144, 187, 111, 222, 172, 16, 210, 216, 131, 238, 141, 90, 180, 28, 192, 47, 80, 48, 69, 111, 56, 158, 86, 41, 73, 56, 122, 28, 242, 214, 127, 146, 55, 82, 166, 234, 27, 27, 62, 12, 250, 134, 153, 67, 35, 32, 9, 80, 73, 50, 191, 54, 241, 11, 74, 57, 56, 189, 67, 136, 168, 92, 215, 114, 194, 238, 61, 20, 85, 186, 86, 246, 110, 190, 61, 110, 203, 162, 60, 230, 120, 54, 225, 108, 76, 108, 177, 141, 123, 158, 20, 40, 155, 238, 51, 230, 12, 182, 206, 40, 250, 45, 214, 180, 7, 81, 44, 200, 19, 97, 37, 1, 132, 37, 161, 211, 83, 67, 117, 166, 212, 58, 17, 12, 159, 76, 186, 197, 140, 61, 188, 7, 52, 72, 145, 86, 181, 201, 167, 16, 28, 233, 220, 74, 111, 46, 183, 109, 149, 22, 106, 100, 119, 188, 52, 38, 53, 13, 28, 92, 13, 36, 77, 60, 108, 29, 126, 239, 145, 254, 103, 147, 116, 105, 170, 84, 132, 158, 224, 203, 207, 208, 112, 170, 254, 56, 160, 156, 147, 230,

-165, 147, 24, 152, 145, 11, 212, 195, 85, 74, 92, 19, 185, 100, 210, 79, 16, 147, 42, 102, 118, 154, 126, 15, 250, 113, 5, 222, 167, 0, 12, 136, 110, 107, 82, 11, 126, 33, 154, 103, 94, 226, 85, 227, 89, 182, 126, 56, 212, 176, 114, 165, 211, 69, 60, 227, 146, 250, 126, 233, 173, 172, 63, 150, 239, 186, 10, 128, 48, 176, 38, 162, 163, 113, 31, 164, 227, 196, 228, 249, 178, 15, 118, 21, 145, 238, 101, 185, 184, 239, 251, 144, 34, 249, 125, 0, 2, 0, 163, 122, 156, 204, 179, 252, 218, 254, 251, 24, 29, 213, 120, 210, 206, 238, 97, 23, 227, 172, 233, 247, 140, 149, 233, 84, 224, 68, 123, 72, 132, 105, 69, 135, 10, 167, 217, 17, 131, 119, 3, 142, 9, 11, 101, 238, 229, 70, 189, 85, 241, 54, 5, 241, 72, 48, 61, 109, 243, 91, 81, 83, 246, 5, 71, 253, 130, 199, 149, 58, 9, 37, 27, 166, 241, 37, 0, 99, 14, 73, 78, 47, 93, 151, 57, 121, 38, 156, 112, 49, 210, 252, 123, 47, 95, 47, 148, 245, 56, 6, 8, 83, 255, 29, 111, 35, 197, 55, 112, 185, 148, 138, 203, 133, 92, 27, 1, 49, 99, 173, 163, 141, 235, 84, 46, 174, 238, 114, 80, 103, 23, 198, 146, 245, 126, 114, 132, 155, 220, 43, 49, 84, 224, 183, 162, 218, 63, 27, 217, 25, 215, 125, 22, 100, 34, 140, 90, 189, 132, 154, 69, 153, 194, 178, 13, 162, 190, 55, 134, 216, 76, 137, 209, 4, 72, 65, 190, 202, 11, 0, 196, 66, 39, 50, 192, 106, 138, 242, 109, 71, 124, 128, 85, 242, 126, 45, 203, 110, 250, 177, 137, 178, 40, 86, 5, 28, 38, 148, 39, 148, 201, 48, 169, 140, 42, 111, 156, 236, 222, 205, 125, 92, 87, 208, 122, 165, 63, 147, 39, 106, 215, 12, 103, 226, 100, 33, 72, 90, 146, 97, 39, 8, 245, 56, 71, 194, 219, 8, 240, 101, 187, 215, 58, 192, 151, 210, 110, 169, 0, 121, 191, 223, 187, 134, 248, 207, 38, 245, 223, 217, 66, 27, 137, 125, 61, 197, 174, 20, 69, 3, 247, 248, 205, 155, 23, 156, 6, 65, 151, 82, 114, 117, 182, 244, 118, 12, 234, 209, 250, 41, 83, 184, 84, 59, 105, 75, 108, 151, 5, 57, 242, 55, 63, 45, 73, 168, 163, 233, 238, 19, 97, 180, 202, 33, 3, 167, 204, 52, 180, 41, 119, 93, 196, 42, 74, 144, 138, 49, 99, 42, 76, 24, 16, 31, 162, 55, 149, 67, 199, 157, 89, 67, 247, 221, 90, 56, 201, 208, 54, 107, 199, 89, 232, 242, 139, 182, 246, 183, 59, 241, 37, 87, 38, 202, 239, 164, 53, 220, 78, 127, 156, 216, 149, 220, 220, 55, 34, 66, 206, 53, 188, 90, 191, 160, 176, 128, 200, 99, 135, 50, 185, 198, 234, 0, 199, 234, 195, 84, 50, 29, 80, 174, 234, 78, 46, 142, 138, 0, 106, 84, 57, 142, 218, 198, 116, 214, 246, 225, 197, 15, 228, 84, 34, 72, 169, 161, 143, 155, 202, 46, 211, 129, 82, 87, 121, 206, 213, 123, 119, 120, 235, 181, 168, 129, 228, 237, 199, 207, 24, 145, 127, 141, 35, 179, 77, 66, 247, 91, 2, 252, 111, 231, 18, 40, 48, 9, 187, 244, 176, 212, 231, 153, 143, 110, 243, 203, 102, 189, 177, 146, 205, 71, 254, 100, 23, 41, 4, 243, 122, 108, 242, 58, 193, 86, 116, 108, 130, 182, 173, 56, 235, 132, 217, 15, 159, 192, 152, 178, 205, 76, 151, 171, 125, 8, 130, 115, 204, 173, 74, 54, 14, 223, 110, 21, 203, 190, 250, 192, 233, 138, 223, 213, 225, 126, 111, 45, 254, 113, 175, 19, 72, 14, 233, 206, 197, 58, 190, 104, 250, 252, 129, 31, 171, 41, 158, 227, 118, 15, 93, 222, 159, 110, 199, 87, 122, 193, 139, 115, 27, 59, 110, 38, 180, 206, 184, 64, 0, 47, 237, 135, 124, 183, 206, 93, 95, 102, 157, 205, 28, 240, 28, 251, 109, 88, 164, 62, 168, 113, 248, 156, 10, 82, 13, 227, 117, 154, 231, 225, 255, 251, 214, 49, 192, 228, 116, 38, 109, 75, 138, 136, 190, 247, 39, 24, 97, 89, 95, 32, 120, 56, 196, 98, 173, 97, 104, 103, 236, 25, 213, 143, 37, 120, 80, 143, 137, 17, 92, 79, 254, 91, 125, 249, 151, 119, 32, 114, 190, 232, 56, 97, 87, 231, 7, 123, 39, 138, 244, 193, 8, 239, 176, 228, 171, 188, 125, 36, 165, 7, 206, 187, 44, 162, 247, 196, 14, 52, 34, 117, 122, 135, 107, 33, 46, 63, 44, 234, 8, 196, 26, 161, 199, 33, 101, 169, 242, 70, 21, 199, 167, 0, 68, 190, 206, 138, 161, 135, 67, 73, 128, 253, 80, 194, 118, 203, 197, 248, 230, 231, 57, 33, 144, 199, 64, 5, 44, 241, 27, 34, 65, 31, 92, 113, 119, 147, 73, 216, 7, 199, 236, 70, 211, 254, 86, 162, 40, 63, 63, 33, 96, 111, 223, 105, 115, 48, 216, 81, 142, 215, 127, 165, 78, 33, 109, 185, 5, 218, 152, 161, 166, 1, 123, 43, 239,

-238, 238, 227, 239, 80, 156, 175, 206, 120, 78, 21, 210, 177, 155, 18, 178, 181, 250, 75, 31, 84, 35, 110, 108, 194, 156, 192, 9, 214, 24, 140, 82, 120, 168, 220, 149, 153, 254, 128, 12, 65, 55, 100, 224, 79, 38, 189, 39, 59, 190, 83, 129, 73, 23, 113, 86, 114, 67, 109, 26, 102, 173, 221, 153, 29, 103, 188, 24, 64, 208, 168, 114, 106, 99, 51, 168, 189, 231, 211, 84, 55, 107, 234, 57, 14, 132, 230, 118, 232, 97, 134, 9, 230, 22, 16, 39, 134, 162, 104, 200, 180, 198, 235, 239, 52, 193, 61, 178, 217, 99, 231, 162, 41, 98, 142, 37, 58, 95, 252, 158, 187, 16, 205, 92, 82, 224, 220, 234, 100, 26, 186, 216, 11, 248, 100, 79, 159, 99, 51, 233, 252, 223, 3, 16, 26, 69, 229, 196, 78, 191, 180, 158, 93, 41, 27, 122, 166, 156, 21, 182, 165, 200, 72, 196, 146, 161, 203, 181, 55, 211, 43, 57, 104, 144, 110, 172, 198, 77, 52, 82, 166, 13, 41, 189, 219, 200, 118, 102, 100, 157, 156, 92, 236, 208, 185, 70, 31, 137, 226, 153, 151, 8, 208, 98, 202, 215, 131, 107, 126, 234, 87, 15, 90, 160, 89, 45, 47, 156, 135, 39, 176, 244, 97, 142, 90, 182, 169, 232, 233, 202, 251, 89, 7, 117, 150, 232, 101, 100, 220, 47, 139, 18, 15, 16, 166, 218, 81, 222, 242, 84, 105, 163, 79, 25, 143, 155, 209, 146, 135, 34, 126, 65, 46, 194, 14, 115, 220, 101, 157, 26, 95, 44, 40, 36, 84, 21, 86, 157, 77, 90, 102, 157, 235, 232, 163, 8, 231, 147, 197, 235, 232, 92, 190, 173, 231, 50, 121, 195, 224, 121, 85, 162, 111, 182, 134, 26, 44, 224, 50, 248, 141, 201, 122, 142, 34, 239, 230, 51, 102, 130, 10, 30, 34, 228, 118, 253, 2, 251, 218, 243, 91, 119, 101, 88, 93, 122, 20, 17, 87, 43, 20, 95, 134, 150, 201, 219, 151, 14, 117, 246, 33, 6, 42, 111, 55, 86, 25, 144, 119, 144, 79, 91, 132, 191, 78, 59, 89, 255, 45, 175, 61, 134, 214, 17, 31, 7, 200, 164, 208, 57, 166, 90, 188, 174, 116, 122, 71, 202, 100, 68, 191, 164, 181, 40, 207, 202, 232, 11, 255, 4, 66, 20, 168, 226, 170, 152, 12, 173, 239,

-216, 23, 163, 147, 39, 132, 15, 252, 2, 129, 247, 107, 168, 158, 87, 7, 17, 55, 137, 149, 191, 106, 134, 21, 228, 78, 19, 142, 190, 106, 204, 31, 39, 59, 213, 182, 148, 185, 165, 193, 119, 237, 38, 187, 74, 54, 177, 198, 222, 204, 126, 79, 72, 16, 22, 54, 149, 178, 252, 104, 42, 63, 160, 60, 93, 50, 78, 229, 77, 160, 122, 72, 209, 48, 88, 81, 8, 53, 38, 41, 24, 47, 174, 213, 116, 117, 230, 178, 106, 99, 169, 7, 78, 178,

-179, 39, 20, 43, 33, 75, 158, 107, 82, 101, 10, 152, 181, 210, 74, 138, 248, 167, 105, 185, 223, 13, 35, 198, 171, 23, 212, 29, 238, 158, 69, 210, 225, 87, 129, 255, 153, 60, 37, 223, 193, 199, 142, 46, 0, 140, 92, 124, 92, 238, 196, 168, 98, 27, 34, 78, 23, 106, 15, 196, 75, 144, 199, 94, 9, 244, 82, 103, 253, 56, 100, 83, 215, 138, 35, 139, 93, 29, 68, 195, 102, 60, 186, 168, 68, 95, 146, 49, 54, 136, 161, 49, 44, 156, 44, 196, 6, 134, 2, 134, 199, 121, 58, 187, 127, 226, 209, 61, 181, 119, 87, 118, 43, 60, 249, 123, 175, 139, 34, 230, 32, 30, 98, 162, 8, 230, 102, 79, 47, 16, 146, 153, 73, 43, 162, 110, 243, 31, 186, 18, 214, 123, 246, 70, 239, 82, 97, 212, 229, 90, 232, 225, 69, 180, 143, 62, 109, 170, 59, 64, 212, 255, 155, 123, 74, 1, 0, 37, 149, 187, 246, 7, 24, 103, 67, 234, 46, 118, 85, 243, 24, 219, 79, 182, 51, 212, 200, 211, 183, 137, 99, 156, 193, 43, 210, 4, 58, 142, 126, 36, 60, 102, 59, 152, 203, 135, 189, 42, 41, 146, 124, 20, 64, 205, 118, 232, 202, 181, 91, 171, 113, 20, 158, 26, 201, 192, 87, 187, 82, 128, 42, 247, 220, 84, 235, 6, 59, 54, 7, 156, 205, 104, 182, 137, 87, 204, 91, 250, 179, 206, 17, 100, 118, 74, 255, 17, 77, 177, 215, 31, 155, 197, 181, 58, 250, 255, 40, 39, 78, 131, 59, 27, 117, 42, 76, 153, 169, 52, 103, 60, 4, 255, 246, 50, 254, 181, 125, 71, 93, 3, 180, 209, 90, 250, 198, 116, 235, 113, 184, 16, 177, 86, 130, 189, 243, 58, 227, 175, 196, 20, 243, 6, 185, 171, 23, 88, 40, 33, 200, 224, 71, 88, 54, 74, 65, 89, 219, 7, 214, 34, 137, 171, 132, 227, 213, 17, 44, 46, 91, 207, 68, 64, 152, 63, 144, 10, 79, 79, 111, 226, 59, 17, 69, 95, 136, 203, 184, 93, 56, 140, 165, 5, 246, 173, 238, 141, 124, 169, 26, 53, 57, 237, 201, 25, 190, 63, 125, 71, 127, 149, 199, 53, 157, 71, 168, 222, 212, 23, 222, 234, 228, 156, 141, 130, 13, 247, 47, 66, 76, 38, 102, 197, 137, 243, 85, 158, 128, 168, 30, 138, 182, 30, 213, 163, 97, 96, 57, 203, 210, 140, 71, 232, 114, 155, 177, 116, 224, 97, 12, 181, 140, 131, 184, 186, 59, 42, 168, 43, 96, 17, 10, 130, 37, 68, 98, 36, 82, 120, 142, 96, 143, 132, 152, 211, 210, 238, 26, 141, 207, 170, 0, 246, 248, 78, 251, 161, 168, 114, 27, 126, 194, 134, 44, 213, 141, 203, 27, 253, 201, 98, 56, 57, 131, 76, 122, 245, 103, 176, 160, 208, 215, 81, 0, 255, 136, 121, 101, 50, 12, 149, 192, 60, 23, 20, 219, 248, 18, 148, 90, 61, 217, 70, 130, 139, 23, 200, 126, 169, 89, 238, 11, 182, 36, 73, 231, 47, 110, 126, 189, 231, 104, 209, 107, 201, 39, 226, 200, 246, 104, 184, 231, 61, 157, 54, 223, 242, 50, 179, 221, 29, 147, 247, 176, 240, 175, 137, 59, 88, 167, 217, 159, 33, 175, 48, 124, 161, 177, 237, 250, 189, 51, 226, 22, 213, 96, 33, 188, 90, 246, 164, 207, 90, 16, 190, 37, 58, 53, 84, 0, 159, 245, 98, 209, 255, 75, 134, 50, 41,

-253, 215, 16, 27, 206, 155, 187, 182, 16, 196, 19, 2, 94, 50, 52, 140, 251, 204, 197, 160, 137, 218, 210, 191, 109, 93, 64, 244, 186, 44, 211, 222, 235, 22, 40, 158, 238, 197, 113, 242, 151, 60, 79, 105, 235, 87, 217, 168, 96, 248, 7, 146, 39, 241, 153, 9, 101, 144, 31, 179, 118, 103, 234, 164, 157, 43, 41, 188, 236, 13, 166, 242, 132, 203, 6, 93, 118, 111, 23, 181, 73, 23, 39, 210, 234, 164, 161, 111, 84, 12, 242, 90, 236, 103, 100, 127, 144, 240, 121, 59, 213, 193, 159, 242, 225, 187, 72, 183, 165, 137, 48, 213, 167, 72, 178, 132, 104, 213, 61, 149, 173, 138, 201, 65, 44, 180, 83, 77, 222, 76, 209, 24, 140, 88, 134, 240, 16, 170, 207, 37, 185, 157, 108, 200, 141, 202, 148, 146, 202, 125, 86, 102, 226, 45, 29, 103, 175, 27, 43, 178, 81, 189, 18, 58, 185, 200, 115, 35, 243, 178, 102, 105, 2, 171, 67, 231, 52, 211, 28, 202, 235, 126, 125, 121, 121, 34, 77, 96, 84, 61, 233, 183, 209, 56, 126, 116, 195, 81, 240, 250, 170, 149, 15, 15, 22, 231, 62, 117, 145, 147, 143, 185, 167, 251, 46, 199, 1, 48, 107, 194, 175, 157, 179, 208, 70, 133, 252, 141, 93, 184, 115, 240, 240, 118, 213, 199, 66, 91, 220, 155, 120, 217, 98, 247, 218, 162, 180, 61, 39, 220, 148, 5, 249, 251, 88, 132, 129, 176, 9, 44, 69, 114, 46, 79, 35, 213, 157, 236, 141, 213, 29, 144, 77, 4, 254, 185, 66, 50, 59, 142, 247, 187, 220, 63, 146, 102, 12, 200, 0, 35, 210, 209, 57, 115, 88, 232, 151, 222, 95, 227, 59, 88, 97, 164, 123, 19, 52, 163, 178, 120, 149, 125, 196, 121, 104, 158, 188, 238, 243, 123, 160, 209, 39, 46, 194, 180, 74, 66, 132, 65, 87, 251, 221, 108, 211, 162, 7, 36, 95, 181, 15, 245, 9, 154, 67, 116, 40, 162, 248, 239, 146, 227, 179, 192, 99, 134, 135, 31, 215, 77, 177, 232, 180, 225, 78, 170, 176, 130, 72, 248, 191, 183, 207, 84, 205, 110, 70, 23, 45, 222, 95, 8, 133, 121, 82, 184, 93, 243, 86, 206, 189, 144, 55, 143, 169, 144, 137, 46, 63, 76, 73, 129, 111, 185, 246, 227, 192, 66, 244, 247, 211, 60, 134, 47, 72, 235, 84, 128, 117, 218, 56, 157, 48, 210, 106, 238, 111, 198, 95, 197, 169, 148, 209, 140, 98, 160, 164, 117, 55, 14, 131, 226, 180, 196, 174, 178, 251, 81, 210, 33, 116, 112, 213, 246, 39, 229, 115, 164, 28, 58, 116, 56, 82, 141, 133, 159, 55, 18, 94, 32, 132, 219, 101, 73, 233, 105, 165, 179, 57, 168, 135, 2, 108, 28, 124, 68, 102, 242, 34, 184, 219, 87, 180, 26, 243, 24, 132, 193, 74, 210, 172, 184, 104, 196, 139, 76, 29, 31, 132, 69, 126, 3, 6, 132, 244, 199, 194, 115, 163, 126, 162, 212, 60, 42, 100, 221, 41, 29, 70, 125, 29, 230, 13, 8, 172, 238, 164, 87, 112, 36, 57, 152, 33, 3, 7, 82, 135, 213, 38, 102, 123, 81, 52, 99, 116, 19, 75, 30, 32, 163, 76, 78, 247, 1, 160, 171, 169, 179, 246, 225, 187, 237, 245, 75, 118, 1, 74, 243, 193, 230, 106, 8, 226, 218, 210, 133, 182, 82, 191, 113, 202, 216, 91, 29, 246, 142, 118, 141, 40, 120, 9, 136, 72, 231, 9, 18, 1, 99, 36, 172, 252, 150, 117, 252, 71, 124, 176, 25, 127, 141, 28, 243, 13, 70, 54, 253, 100, 170, 45, 25, 57, 220, 143, 241, 248, 68, 116, 121, 250, 143, 55, 179, 222, 63, 242, 29, 151, 124, 168, 35, 171, 140, 42, 61, 238, 248, 181, 217, 10, 73, 14, 164, 134, 147, 233, 233, 238, 102, 248, 37, 103, 190, 61, 134, 2, 61, 210, 129, 24, 222, 158, 206, 192, 194, 164, 174, 45, 27, 48, 85, 196, 175, 32, 66, 101, 159, 129, 181, 240, 194, 31, 15, 198, 72, 247, 222, 174, 226, 162, 79, 86, 116, 142, 213, 208, 229, 26, 125, 200, 170, 67, 97, 125, 232, 225, 27, 154, 154, 105, 208, 231, 126, 130, 50, 159, 228, 238, 244, 214, 199, 36, 179, 109, 164, 14, 136, 189, 78, 236, 130, 8, 245, 90, 49, 203, 64, 147, 126, 18, 198, 190, 126, 150, 149, 231, 29, 149, 249, 86, 4, 23, 62, 235, 174, 81, 101, 227, 233, 225, 142, 49, 47, 108, 99, 163, 90, 223, 205, 175, 110, 128, 158, 48, 142, 145, 145, 229, 229, 137, 30, 100, 231, 171, 171, 28, 244, 28, 204, 72, 190, 37, 123, 115, 239, 248, 55, 196, 243, 154, 45, 251, 139, 150, 251, 83, 47, 235, 96, 50, 171, 164, 225, 122, 78, 38, 229, 168, 189, 56, 20, 132, 208, 143, 118, 226, 144, 53, 42, 239, 97, 177, 254, 152, 227, 76, 241, 74, 165, 60, 133, 198, 73, 148, 24, 29, 10, 38, 37, 191, 156, 140, 134, 157, 210, 230, 173, 200, 55, 142, 50, 118, 74, 88, 127, 127, 212, 183, 75, 126, 32, 28, 202, 137, 111, 240, 197, 197, 77, 202, 43, 155, 228, 139, 3, 66, 236, 8, 212, 24, 9, 77, 197, 75, 16, 68, 242, 244, 188, 214, 96, 77, 147, 145, 120, 31, 83, 162, 82, 213, 111, 14, 182, 144, 111, 1, 90, 233, 64, 41, 189, 88, 81, 69, 65, 90, 93, 54, 121, 119, 175, 208, 148, 231, 225, 52, 120, 127, 89, 179, 213, 146, 250, 14, 1, 162, 181, 251, 78, 45, 255, 62, 65, 76, 103, 119, 99, 14, 208, 25, 128, 169, 176, 145, 69, 243, 37, 138, 13, 3, 31, 248, 246, 90, 119, 48, 252, 65, 19, 63, 198, 146, 68, 157, 14, 96, 152, 89, 29, 54, 179, 124,

-212, 187, 133, 153, 69, 240, 207, 83, 177, 110, 228, 200, 35, 33, 44, 244, 245, 146, 242, 80, 183, 59, 227, 40, 106, 160, 34, 218, 56, 33, 108, 218, 238, 231, 196, 18, 169, 236, 115, 241, 177, 173, 207, 52, 84, 234, 228, 135, 140, 75, 179, 214, 32, 10, 76, 57, 17, 63, 206, 173, 28, 27, 31, 133, 53, 27, 205, 90, 253, 72, 111, 108, 201, 180, 81, 112, 148, 226, 41, 48, 19, 234, 242, 19, 101, 211, 201, 55, 239, 215, 86, 101, 167, 231, 85, 115, 62, 91, 52, 70, 73, 136, 9, 228, 3, 60, 226, 91, 113, 211, 10, 252, 204, 67, 106, 231, 12, 191, 136, 178, 183, 21, 140, 97, 155, 124, 124, 46, 177, 116, 183, 43, 189, 210, 19, 75, 126, 36, 106, 122, 65, 8, 163, 227, 232, 168, 188, 183, 250, 237, 57, 225, 211, 49, 241, 97, 152, 71, 7, 1, 126, 117, 216, 191, 14, 240, 43, 169, 221, 22, 209, 238, 67, 24, 234, 43, 246, 215, 173, 19, 224, 78, 56, 236, 69, 151, 161, 88, 130, 107, 33, 122, 175, 190, 47, 56, 90, 74, 163, 244, 197, 21, 162, 239, 213, 1, 212, 44, 113, 119, 253, 133, 133, 206, 224, 228, 35, 48, 0, 142, 47, 104, 216, 21, 171, 249, 227, 60, 186, 210, 31, 86, 151, 194, 63, 109, 133, 151, 72, 16, 207, 92, 61, 39, 90, 8, 140, 6, 218, 103, 8, 149, 137, 159, 31, 235, 75, 122, 209, 2, 136, 159, 83, 230, 128, 140, 130, 46, 129, 178, 67, 150, 131, 214, 246, 255, 26, 242, 140, 3, 148, 142, 211, 62, 233, 44, 127, 143, 26, 149, 39, 62, 153, 70, 173, 192, 130, 77, 190, 79, 242, 245, 77, 70, 247, 106, 192, 220, 3, 154, 124, 40, 185, 208, 219, 20, 182, 5, 130, 174, 203, 97, 138, 110, 198, 127, 20, 55, 223, 62, 92, 22, 15, 94, 239, 154, 72, 21, 104, 151, 197, 75, 120, 155, 112, 186, 117, 76, 3, 48, 99, 24, 178, 151, 175, 226, 126, 200, 98, 121, 130, 246, 127, 88, 183, 210, 34, 76, 122, 158, 142, 104, 171, 27, 98, 127, 86, 117, 143, 144, 25, 134, 137, 227, 213, 79, 108, 230, 88, 13, 21, 20, 177, 246, 52, 186, 8, 94, 0, 235, 137, 85, 172, 66, 163, 20, 99, 210, 193, 192, 155, 15, 88, 51, 41, 41, 232, 70, 190, 242, 160, 213, 122, 175, 162, 121, 150, 194, 105, 185, 22, 77, 221, 222, 190, 39, 191, 200, 45, 110, 151, 138, 108, 168, 68, 23, 149, 140, 157, 176, 160, 30, 243, 222, 233, 131, 17, 24, 177, 101, 43, 92, 245, 20, 153, 25, 123, 182, 187, 239, 168, 159, 140, 154, 68, 229, 191, 201, 136, 167, 209, 219, 211, 24, 12, 69, 115, 232, 212, 57, 31, 203, 43, 31, 189, 32, 176, 72, 113, 249, 8, 242, 46, 36, 223, 29, 108, 30, 59, 43, 70, 149, 27, 184, 153, 61, 205, 216, 98, 198, 251, 3, 88, 63, 103, 36, 16, 107, 80, 106, 113, 225, 84, 179, 111, 151, 68, 123, 188, 127, 58, 215, 178, 198, 62, 205, 101, 200, 14, 170, 42, 10, 227, 125, 125, 86, 42, 203, 162, 210, 52, 129, 250, 148, 201, 174, 72, 93, 185, 68, 254, 242, 93, 117, 111, 162, 41, 81, 201, 20, 237, 179, 70, 14, 39, 209, 15, 209, 241, 117, 201, 139, 155, 42, 55, 161, 3, 51, 106, 70, 68, 156, 238, 219, 98, 187, 33, 185, 15, 195, 70, 210, 87, 57, 218, 0, 200, 237, 180, 229, 30, 73, 199, 214, 150, 207, 93, 18, 231, 94, 208, 166, 244, 167, 87, 70, 89, 138, 34, 112, 142, 51, 133, 70, 155, 162, 156, 175, 208, 117, 72, 121, 7, 70, 213, 18, 177, 142, 1, 112, 193, 220, 159, 127, 4, 173, 37, 217, 57, 212, 108, 34, 227, 138, 187, 198, 100, 255, 200, 2, 217, 173, 143, 194, 191, 123, 125, 28, 53, 61, 204, 34, 70, 121, 208, 0, 143, 3, 112, 45, 28, 248, 112, 83, 218, 145, 224, 84, 87, 81, 132, 23, 209, 91, 151, 11, 146, 132, 79, 210, 234, 81, 51, 18, 142, 90, 201, 145, 239, 254, 120, 88, 191, 90, 118, 111, 162, 33, 62, 13, 51, 235, 153, 88, 245, 225, 181, 37, 69, 232, 92, 217, 0, 22, 212, 63, 42, 169, 105, 224, 220, 98, 122, 214, 153, 14, 90, 101, 110, 90, 50, 228, 215, 67, 204, 182, 165, 9, 236, 39, 193, 42, 137, 189, 42, 142, 46, 238, 216, 204, 215, 115, 251, 254, 72, 134, 210, 210, 149, 90, 163, 161, 107, 119, 9, 121, 242, 254, 33, 54, 185, 50, 204, 121, 44, 145, 120, 64, 8, 203, 65, 149, 16, 11, 101, 46, 199, 170, 163, 29, 168, 42, 218, 207, 182, 25, 13, 179, 143, 68, 234, 194, 75, 233, 144, 92, 139, 207, 236, 65, 181, 4, 117, 102, 80, 135, 141, 95, 73, 151, 78, 220, 112, 120, 5, 234, 183, 114, 31, 121, 226, 141, 209, 91, 229, 229, 127, 165, 167, 148, 92, 247, 99, 112, 147, 16, 59, 81, 14, 188, 143, 205, 211, 147, 119, 122, 188, 204, 33, 78, 200, 85, 100, 119, 236, 57, 243, 152, 122, 62, 43, 251, 116, 167, 8, 53, 107, 175, 204, 210, 186, 225, 137, 92, 135, 172, 238, 89, 0, 145, 86, 217, 166, 189, 174, 227, 108, 52, 216, 40, 229, 51, 158, 29, 133, 130, 146, 82, 185, 226, 47, 169, 247, 57, 55, 66, 72, 91, 123, 61, 92, 73, 7, 124, 63, 62, 70, 224, 178, 31, 72, 209, 99, 4, 103, 126, 222, 95, 11, 164, 148, 129, 246, 106, 209, 43, 186, 164, 211, 23, 55, 149, 224, 25, 3, 99, 67, 119, 63, 17, 97, 114, 239, 212, 187, 99, 39, 40, 31, 188, 252, 185, 180, 252, 211, 109, 108, 120, 236, 233, 134, 211, 71, 78, 37, 193, 132, 169, 229, 44, 131, 23, 216, 9, 221, 44, 149, 0, 122, 23, 74, 249, 116, 213, 102, 183, 134, 1, 201, 98, 163, 9, 1, 52, 44, 119, 248, 115, 8, 242, 104, 22, 155, 105, 46, 151, 19, 31, 77, 149, 127, 253, 254, 29, 12, 100, 196, 6, 248, 170, 165, 235, 149, 227, 24, 174, 226, 130, 129, 187, 142, 89, 89, 229, 63, 108, 90, 154, 239, 110, 155, 209, 203, 107, 143, 51, 107, 47, 44, 146, 3, 21, 102, 6, 177, 90, 105, 38, 254, 252, 171, 118, 248, 252, 228, 80, 153, 80, 84, 192, 66, 220, 129, 211, 162, 43, 187, 153, 177, 192, 130, 110, 8, 125, 228, 34, 81, 18, 221, 64, 73, 77, 53, 73, 151, 36, 203, 176, 249, 105, 144, 201, 135, 222, 155, 241, 132, 70, 176, 9, 86, 102, 35, 137, 124, 38, 83, 147, 51, 251, 169, 18, 245, 202, 65, 216, 117, 85, 184, 234, 210, 117, 45, 239, 131, 165, 64, 71, 60, 36, 239, 228, 167, 238, 94, 17, 235, 112, 72, 170, 129, 176, 107, 205, 253, 34, 173, 81, 48, 142, 94, 141, 3, 238, 139, 133, 102, 164, 22, 131, 62, 165, 18, 121, 135, 63, 66, 106, 103, 7, 209, 104, 123, 255, 219, 187, 104, 199, 198, 192, 130, 126, 69, 196, 117, 46,

-109, 207, 212, 53, 163, 217, 27, 216, 79, 211, 33, 23, 154, 10, 49, 16, 96, 121, 230, 211, 103, 245, 181, 195, 186, 18, 248, 252, 77, 23, 49, 158, 211, 13, 160, 121, 244, 111, 219, 159, 10, 101, 232, 157, 107, 243, 175, 168, 23, 20, 80, 65, 39, 36, 19, 190, 140, 73, 181, 185, 72, 229, 68, 28, 5, 107, 160, 80, 35, 192, 44, 50, 32, 15, 203, 126, 223, 18, 20, 101, 238, 108, 238, 170, 58, 108, 59, 19, 54, 217, 109, 105, 162, 253, 228, 200, 20, 234, 51, 178, 196, 84, 24, 213, 159, 143, 145, 56, 230, 238, 169, 90, 14, 254, 227, 216, 160, 180, 113, 221, 36, 144, 89, 221, 223, 172, 36, 152, 115, 91, 194, 64, 29, 73, 249, 25, 28, 15, 203, 90, 172, 34, 225, 32, 123, 132, 134, 125, 75, 127, 135, 122, 61, 110, 161, 10, 45, 139, 128, 60, 42, 56, 25, 146, 120, 170, 208, 161, 246, 54, 245, 241, 176, 167, 38, 40, 23, 35, 24, 238, 94, 55, 118, 121, 200, 133, 167, 109, 188, 100, 63, 236, 12, 227, 186, 63, 244, 126, 112, 0, 205, 60, 144, 107, 142, 226, 86, 194, 108, 151, 125, 236, 126, 39, 243, 62, 156, 84, 116, 133, 16, 83, 87, 159, 39, 35, 174, 37, 198, 112, 44, 215, 205, 163, 122, 126, 208, 23, 220, 148, 117, 255, 118, 207, 103, 150, 229, 12, 251, 87, 16, 87, 89, 167, 80, 107, 213, 11, 88, 93, 57, 30, 39, 153, 179, 223, 249, 71, 86, 33, 222, 58, 17, 220, 194, 98, 60, 97, 34, 149, 13, 225, 118, 171, 39, 206, 62, 167, 164, 191, 238, 74, 22, 149, 57, 118, 48, 43, 191, 241, 4, 220, 161, 87, 227, 221, 225, 118, 52, 204, 6, 25, 181, 117, 123, 5, 53, 84, 190, 100, 55, 214, 202, 75, 252, 232, 184, 72, 142, 42, 231, 158, 97, 48, 33, 105, 15, 208, 197, 155, 17, 56, 150, 254, 140, 28, 184, 232, 180, 129, 174, 92, 114, 23, 19, 234, 216, 146, 223, 166, 231, 226, 141, 44, 205, 34, 118, 41, 108, 121, 220, 81, 23, 251, 87, 110, 28, 16, 195, 165, 16, 73, 60, 45, 24, 102, 95, 130, 197, 236, 3, 48, 101, 195, 75, 168, 242, 207, 64, 12, 145, 145, 193, 185, 136, 148, 183, 29, 233, 226, 233, 80, 197, 189, 71, 77, 206, 254, 144, 74, 90, 235, 63, 155, 103, 73, 33, 159, 2, 162, 64, 138, 19, 47, 158, 70, 31, 3, 179, 185, 245, 102, 225, 57, 98, 130, 86, 84, 232, 175, 196, 62, 163, 205, 92, 198, 53, 84, 78, 141, 212, 97, 52, 192, 16, 125, 158, 209, 32, 71, 68, 178, 171, 193, 143, 131, 125, 155, 215, 1, 177, 117, 62, 82, 186, 244, 30, 71, 94, 121, 65, 50, 129, 252, 81, 193, 64, 228, 182, 113, 66, 164, 41, 192, 52, 12, 226, 173, 110, 215, 189, 118, 40, 113, 207, 88, 47, 217, 65, 237, 116, 240, 173, 79, 145, 103, 38, 38, 111, 63, 108, 215, 161, 181, 131, 161, 50, 117, 249, 31, 107, 34, 136, 237, 149, 89, 222, 18, 23, 127, 77, 156, 40, 184, 235, 45, 242, 157, 188, 169, 148, 200, 148, 194, 52, 85, 209, 121, 56, 136, 199, 225, 105, 77, 84, 24, 3, 170, 124, 40, 235, 80, 187, 85, 129, 102, 154, 33, 250, 59, 0, 73, 70, 145, 87, 103, 49, 64, 213, 156, 217, 1, 247, 241, 151, 183, 120, 85, 194, 142, 202, 134, 187, 241, 18, 215, 108, 111, 199, 159, 83, 206, 56, 69, 3, 23, 42, 26, 13, 227, 239, 47, 89, 147, 200, 82, 0, 175, 143, 90, 98, 64, 204, 157, 255, 170, 45, 152, 146, 99, 195, 133, 12, 249, 158, 78, 116, 109, 224, 72, 69, 128, 50, 63, 92, 208, 233, 128, 59, 58, 223, 0, 212, 103, 2, 70, 20, 99, 129, 107, 159, 223, 156, 66, 8, 17, 78, 237, 34, 141, 188, 143, 228, 39, 91, 152, 83, 182, 38, 104, 192, 167, 35, 34, 114, 87, 192, 194, 171, 158, 237, 176, 201, 223, 14, 154, 82, 89, 244, 49, 185, 172, 63, 89, 131, 58, 115, 195, 34, 43, 18, 39, 247, 63, 195, 172, 38, 213, 141, 171, 175, 89, 111, 239, 180, 35, 160, 250, 121, 252, 138, 31, 6, 253, 239, 225, 218, 156, 161, 170, 169, 79, 95, 109, 221, 147, 156, 253, 58, 191, 15, 194, 80, 201, 181, 74, 225, 182, 218,

-80, 48, 254, 168, 131, 84, 102, 153, 2, 162, 73, 243, 176, 169, 223, 195, 240, 82, 195, 91, 137, 156, 176, 125, 75, 25, 211, 215, 128, 194, 138, 138, 99, 33, 129, 56, 48, 99, 245, 221, 228, 148, 162, 15, 203, 206, 60, 69, 118, 3, 97, 208, 235, 150, 13, 178, 97, 213, 15, 82, 12, 176, 58, 33, 28, 163, 110, 189, 131, 38, 25, 184, 74, 118, 255, 101, 234, 186, 21, 22, 186, 220, 0, 91, 150, 110, 121, 170, 68, 244, 129, 189, 138, 211, 140, 110, 174, 122, 87, 160, 50, 117, 186, 115, 169, 48, 86, 44, 215, 80, 141, 255, 223, 78, 26, 253, 241, 119, 70, 227, 102, 196, 159, 36, 118, 137, 187, 239, 48, 44, 186, 206, 147, 56, 38, 74, 80, 101, 148, 139, 8, 29, 192, 227, 161, 46, 29, 170, 188, 58, 144, 227, 97, 218, 211, 210, 26, 105, 105, 18, 170, 172, 227, 243, 10, 8, 226, 36, 39, 34, 129, 71, 97, 240, 6, 216, 50, 100, 26, 241, 208, 163, 0, 68, 96, 103, 220, 190, 244, 50, 234, 170, 42, 98, 253, 148, 190, 62, 40, 211, 164, 60, 137, 10, 25, 229, 219, 244, 195, 90, 59, 196, 159, 216, 110, 218, 125, 247, 246, 212, 23, 167, 115, 144, 105, 32, 23, 7, 194, 72, 132, 90, 246, 15, 81, 228, 41, 153, 187, 30, 129, 70, 98, 183, 203, 71, 28, 244, 200, 78, 185, 108, 110, 59, 69, 223, 117, 119, 6, 189, 57, 179, 180, 84, 164, 11, 139, 200, 81, 78, 168, 168, 180, 26, 208, 93, 89, 214, 29, 34, 41, 156, 216, 24, 128, 169, 99, 131, 196, 82, 136, 165, 25, 96, 111, 226, 221, 146, 135, 1, 246, 51, 110, 211, 162, 88, 51, 243, 129, 103, 92, 160, 70, 251, 234, 177, 80, 220, 155, 236, 18, 183, 2, 178, 233, 200, 43, 215, 99, 161, 29, 62, 160, 164, 164, 211, 171, 122, 245, 152, 53, 206, 181, 21, 183, 252, 54, 99, 106, 55, 13, 217, 74, 7, 239, 161, 184, 19, 40, 119, 115, 0, 16, 89, 182, 186, 197, 47, 233, 122, 140, 184, 53, 174, 249, 18, 243, 162, 141, 221, 209, 186, 160, 176, 248, 27, 163, 253, 178, 34, 124, 84, 30, 57, 250, 103, 155, 53, 235, 112, 132, 250, 252, 91, 104, 176, 216, 41, 87, 162, 228, 223, 91, 156,

-165, 15, 107, 159, 40, 70, 183, 183, 248, 96, 190, 242, 17, 227, 205, 169, 212, 158, 255, 206, 31, 135, 95, 189, 87, 200, 77, 85, 219, 190, 15, 221, 167, 4, 60, 122, 10, 8, 129, 43, 222, 144, 94, 175, 161, 195, 237, 130, 179, 84, 194, 66, 155, 223, 98, 59, 17, 96, 191, 3, 90, 150, 252, 193, 64, 26, 214, 245, 70, 71, 65, 75, 217, 178, 85, 208, 12, 159, 172, 231, 232, 150, 222, 225, 17, 26, 246, 113, 223, 122, 24, 123, 171, 138, 170, 102, 59, 188, 246, 86, 202, 39, 190, 134, 232, 30, 61, 226, 50, 110, 160, 185, 46, 32, 226, 175, 209, 72, 242, 82, 195, 118, 230, 5, 248, 29, 57, 166, 200, 173, 174, 234, 206, 168, 178, 213, 122, 45, 9, 175, 232, 224, 231, 21, 46, 132, 189, 35, 106, 31, 85, 195, 15, 121, 158, 164, 139, 79, 217, 248, 27, 199, 33, 195, 40, 65, 143, 153, 10, 25, 211, 122, 253, 224, 76, 207, 190, 109, 61, 104, 127, 92, 186, 255, 128, 72, 100, 116, 192, 237, 255, 169, 103, 17, 149, 138, 79, 252, 4, 62, 185, 77, 110, 62, 154, 31, 178, 84, 228, 219, 94, 127, 134, 88, 170, 144, 195, 131, 245, 126, 244, 238, 127, 141, 243, 246, 226, 139, 246, 15, 255, 220, 118, 68, 129, 53, 251, 79, 116, 92, 81, 33, 115, 169, 244, 255, 87, 222, 184, 161, 125, 198, 197, 112, 149, 184, 156, 61, 243, 221, 84, 243, 19, 141, 177, 173, 172, 68, 113, 241, 240, 12, 10, 211, 224, 158, 150, 14, 191, 181, 151, 212, 200, 215, 44, 248, 127, 225, 247, 82, 58, 137, 39, 115, 171, 248, 250, 255, 75, 185, 67, 94, 202, 122, 7, 30, 153, 140, 248, 123, 204, 26, 106, 28, 89, 177, 249, 163, 202, 159, 69, 213, 53, 189, 224, 43, 103, 78, 145, 34, 148, 214, 163, 204, 159, 219, 191, 89, 199, 78, 0, 46, 85, 169, 215, 46, 106, 36, 114, 20, 28, 163, 229, 146, 0, 89, 73, 75, 204, 255, 82, 142, 239, 211, 225, 231, 5, 94, 139, 252, 23, 154, 227, 68, 207, 205, 60, 153, 101, 89, 247, 235, 66, 230, 120, 191, 139, 33, 231, 211, 126, 95, 60, 137, 28, 176, 42, 114, 185, 165, 55, 232, 236, 59, 238, 41, 197, 16, 144, 39, 7, 154, 218, 184, 243, 31, 80, 227, 34, 116, 248, 90, 231, 163, 159, 255, 5, 233, 134, 90, 94, 174, 248, 59, 91, 79, 96, 238, 208, 218, 57, 107, 225, 85, 146, 82, 111, 35, 148, 152, 59, 73, 233, 186, 168, 140, 161, 106, 92, 173, 254, 230, 67, 114, 35, 139, 228, 255, 81, 149, 52, 41, 93, 210, 187, 37, 14, 160, 154, 180, 9, 200, 238, 221, 1, 252, 59, 58, 26, 134, 234, 213, 170, 118, 81, 255, 3, 80, 75, 3, 4, 20, 0, 0, 8, 8, 0, 131, 182, 42, 68, 158, 64, 172, 29, 120, 6, 0, 0, 95, 61, 0, 0, 12, 0, 0, 0, 97, 114, 105, 97, 108, 95, 50, 52, 46, 102, 110, 116, 189, 91, 219, 110, 219, 72, 12, 125, 239, 87, 8, 126, 110, 55, 195, 185, 15, 144, 20, 216, 183, 254, 193, 62, 46, 180, 190, 36, 66, 29, 185, 136, 221, 221, 237, 126, 253, 74, 195, 81, 34, 89, 29, 149, 148, 28, 161, 64, 42, 59, 62, 62, 67, 14, 121, 72, 113, 148, 251, 195, 169, 190, 124, 254, 80, 20, 247, 85, 125, 56, 21, 135, 114, 187, 127, 216, 252, 254, 82, 149, 199, 77, 113, 174, 254, 107, 94, 72, 189, 41, 254, 58, 29, 119, 15, 27, 177, 41, 170, 75, 121, 172, 182, 241, 114, 251, 84, 190, 156, 247, 151, 135, 205, 166, 248, 94, 87, 219, 211, 110, 223, 94, 158, 47, 47, 251, 203, 246, 233, 203, 195, 6, 68, 243, 161, 243, 243, 233, 116, 121, 106, 94, 108, 138, 178, 140, 255, 125, 43, 119, 187, 170, 126, 108, 190, 247, 99, 252, 215, 124, 230, 91, 185, 141, 239, 136, 143, 13, 226, 244, 253, 114, 172, 234, 125, 75, 113, 23, 215, 181, 61, 61, 63, 159, 234, 162, 125, 243, 203, 190, 122, 124, 106, 24, 165, 111, 150, 84, 158, 219, 197, 181, 248, 109, 121, 220, 255, 209, 124, 57, 248, 238, 85, 67, 47, 93, 203, 245, 184, 63, 39, 214, 237, 215, 253, 238, 237, 75, 227, 111, 218, 171, 116, 93, 84, 104, 223, 161, 58, 54, 223, 90, 182, 246, 255, 41, 245, 111, 223, 234, 199, 4, 184, 123, 69, 220, 71, 195, 139, 237, 233, 123, 221, 44, 37, 192, 38, 125, 77, 251, 118, 252, 154, 208, 48, 255, 219, 44, 96, 83, 252, 136, 63, 255, 169, 118, 209, 5, 205, 229, 83, 50, 0, 84, 243, 145, 211, 225, 16, 253, 215, 44, 239, 71, 119, 109, 155, 247, 203, 221, 223, 101, 221, 110, 67, 251, 169, 150, 54, 185, 187, 62, 54, 111, 25, 92, 207, 128, 207, 71, 62, 176, 215, 132, 208, 35, 244, 61, 66, 217, 35, 148, 115, 8, 3, 26, 24, 166, 8, 105, 22, 74, 18, 97, 12, 165, 134, 81, 75, 170, 137, 176, 208, 68, 16, 16, 25, 141, 89, 107, 23, 65, 200, 200, 104, 175, 189, 234, 51, 38, 138, 30, 33, 244, 9, 29, 145, 79, 69, 62, 23, 230, 248, 116, 158, 133, 58, 50, 6, 185, 86, 160, 130, 48, 152, 26, 226, 122, 27, 37, 151, 209, 16, 9, 109, 34, 188, 246, 170, 121, 35, 148, 253, 176, 249, 4, 75, 25, 81, 109, 96, 156, 254, 130, 237, 85, 106, 54, 38, 193, 105, 101, 120, 29, 175, 162, 224, 128, 26, 69, 142, 203, 100, 163, 204, 197, 170, 20, 52, 74, 64, 197, 1, 3, 83, 110, 37, 81, 82, 131, 21, 32, 233, 184, 90, 77, 115, 0, 53, 7, 156, 155, 147, 146, 243, 40, 81, 118, 32, 136, 213, 116, 7, 80, 119, 164, 184, 118, 44, 59, 122, 60, 145, 16, 101, 71, 130, 92, 173, 66, 2, 10, 143, 148, 215, 74, 103, 123, 140, 46, 83, 62, 228, 140, 242, 1, 169, 203, 81, 106, 189, 4, 65, 221, 145, 154, 92, 148, 197, 98, 183, 166, 86, 199, 4, 170, 242, 228, 41, 137, 142, 149, 168, 60, 210, 249, 213, 172, 148, 144, 26, 186, 201, 158, 213, 223, 148, 18, 149, 71, 9, 75, 77, 145, 165, 148, 22, 147, 82, 193, 104, 43, 45, 193, 200, 97, 161, 180, 52, 70, 204, 73, 165, 70, 234, 170, 216, 165, 153, 200, 136, 73, 169, 140, 164, 218, 8, 185, 46, 146, 24, 174, 22, 115, 82, 185, 145, 156, 27, 182, 141, 68, 70, 76, 73, 229, 87, 243, 170, 75, 119, 31, 130, 156, 30, 121, 70, 90, 199, 227, 48, 33, 245, 184, 169, 227, 239, 99, 160, 49, 98, 62, 106, 165, 175, 25, 245, 59, 237, 163, 195, 70, 64, 155, 235, 200, 97, 111, 35, 145, 79, 39, 62, 67, 109, 148, 97, 97, 163, 236, 80, 113, 180, 117, 203, 125, 74, 140, 84, 84, 28, 237, 213, 90, 183, 88, 14, 21, 71, 7, 59, 85, 32, 73, 140, 196, 214, 220, 161, 226, 24, 48, 171, 69, 42, 42, 142, 81, 64, 181, 113, 105, 54, 122, 145, 166, 15, 98, 45, 141, 243, 105, 222, 97, 205, 148, 141, 225, 150, 54, 162, 226, 24, 175, 215, 170, 28, 30, 21, 199, 10, 160, 70, 78, 222, 70, 162, 87, 81, 115, 44, 184, 57, 140, 115, 42, 135, 71, 205, 177, 227, 182, 252, 189, 178, 195, 163, 230, 88, 189, 90, 95, 229, 81, 115, 236, 72, 87, 165, 228, 50, 74, 154, 202, 121, 159, 102, 115, 176, 154, 141, 168, 57, 78, 172, 230, 213, 128, 154, 227, 36, 57, 86, 197, 194, 88, 85, 105, 2, 169, 213, 58, 29, 128, 215, 169, 147, 115, 122, 52, 185, 98, 83, 74, 154, 87, 77, 218, 71, 55, 101, 163, 165, 220, 37, 211, 108, 84, 46, 241, 141, 238, 30, 3, 87, 227, 36, 208, 44, 244, 105, 142, 28, 38, 44, 84, 183, 179, 208, 98, 212, 120, 161, 231, 12, 144, 96, 70, 143, 163, 177, 82, 249, 145, 138, 247, 70, 243, 36, 62, 90, 97, 212, 24, 164, 126, 148, 136, 54, 51, 67, 206, 242, 209, 198, 85, 26, 75, 191, 87, 102, 29, 190, 128, 37, 202, 235, 169, 18, 37, 115, 58, 51, 167, 73, 213, 41, 100, 198, 83, 156, 126, 193, 144, 25, 19, 205, 128, 81, 211, 24, 147, 141, 110, 98, 228, 152, 227, 131, 25, 62, 181, 105, 15, 253, 212, 45, 106, 46, 70, 221, 28, 3, 177, 234, 251, 81, 223, 223, 203, 250, 92, 210, 195, 140, 172, 215, 233, 236, 104, 212, 187, 245, 248, 236, 45, 249, 92, 226, 179, 19, 51, 227, 91, 30, 199, 201, 100, 32, 76, 28, 85, 201, 172, 71, 251, 132, 180, 194, 164, 58, 190, 144, 55, 208, 82, 26, 83, 154, 168, 169, 144, 206, 254, 60, 109, 255, 22, 30, 139, 217, 100, 221, 168, 13, 238, 23, 122, 154, 168, 73, 90, 66, 40, 204, 248, 96, 60, 245, 150, 77, 44, 44, 75, 10, 83, 48, 184, 169, 243, 34, 153, 83, 25, 49, 231, 224, 63, 121, 117, 60, 122, 235, 143, 80, 4, 169, 244, 210, 154, 11, 133, 205, 69, 24, 53, 23, 217, 155, 196, 165, 183, 108, 32, 211, 1, 149, 128, 137, 212, 191, 101, 61, 4, 217, 157, 82, 143, 14, 111, 222, 137, 49, 164, 147, 70, 49, 154, 246, 153, 76, 228, 44, 236, 188, 67, 231, 83, 13, 68, 194, 133, 199, 83, 74, 118, 132, 215, 233, 216, 139, 84, 145, 75, 198, 48, 163, 94, 248, 28, 97, 118, 72, 188, 244, 25, 21, 157, 78, 197, 133, 149, 196, 26, 165, 22, 50, 154, 116, 40, 46, 28, 172, 101, 164, 233, 66, 213, 155, 213, 40, 187, 216, 9, 97, 206, 113, 216, 44, 202, 148, 31, 241, 116, 124, 37, 43, 117, 162, 28, 223, 239, 191, 27, 101, 210, 57, 24, 169, 192, 224, 214, 205, 221, 146, 50, 61, 143, 3, 70, 175, 102, 229, 235, 3, 57, 171, 41, 65, 82, 59, 28, 22, 11, 142, 212, 17, 165, 245, 254, 46, 62, 244, 24, 47, 191, 238, 95, 234, 170, 126, 124, 123, 2, 210, 117, 79, 64, 166, 223, 20, 135, 234, 229, 124, 193, 85, 157, 247, 219, 83, 157, 14, 95, 203, 103, 4, 124, 130, 87, 11, 38, 16, 237, 232, 180, 67, 8, 18, 32, 16, 0, 173, 102, 118, 0, 221, 3, 124, 146, 57, 68, 187, 242, 14, 209, 210, 253, 218, 138, 62, 162, 111, 5, 141, 163, 29, 167, 50, 17, 142, 189, 42, 182, 229, 241, 217, 139, 95, 122, 119, 136, 8, 92, 68, 59, 112, 250, 37, 162, 29, 225, 189, 238, 96, 223, 187, 138, 132, 176, 92, 4, 45, 114, 219, 131, 55, 94, 148, 244, 17, 180, 40, 25, 32, 44, 27, 225, 216, 136, 192, 69, 12, 118, 48, 111, 186, 23, 63, 119, 150, 160, 0, 104, 123, 238, 217, 123, 238, 115, 123, 158, 181, 220, 115, 213, 106, 0, 176, 92, 128, 227, 2, 40, 249, 215, 174, 155, 183, 21, 154, 189, 21, 125, 4, 41, 153, 6, 8, 203, 229, 48, 158, 141, 8, 92, 4, 49, 64, 122, 8, 199, 221, 141, 224, 184, 139, 10, 108, 51, 226, 83, 238, 92, 8, 123, 11, 227, 131, 173, 76, 22, 208, 124, 22, 195, 103, 113, 124, 150, 192, 134, 16, 69, 209, 102, 18, 75, 146, 16, 134, 205, 97, 185, 28, 131, 196, 34, 113, 152, 192, 69, 16, 19, 203, 102, 242, 132, 132, 24, 70, 61, 208, 32, 134, 146, 190, 54, 23, 244, 52, 18, 98, 208, 91, 126, 4, 207, 168, 209, 46, 19, 142, 52, 4, 201, 93, 46, 19, 141, 36, 10, 227, 153, 20, 38, 48, 1, 180, 206, 175, 143, 8, 142, 139, 24, 196, 162, 160, 33, 184, 190, 29, 132, 34, 17, 161, 217, 8, 199, 69, 144, 186, 125, 31, 184, 253, 73, 96, 247, 39, 33, 35, 163, 146, 132, 176, 92, 14, 162, 140, 134, 140, 140, 146, 86, 101, 217, 118, 16, 101, 52, 228, 100, 148, 8, 49, 92, 219, 135, 58, 74, 99, 1, 201, 135, 40, 62, 196, 241, 109, 33, 109, 125, 252, 75, 192, 55, 151, 81, 162, 62, 38, 44, 79, 174, 135, 16, 75, 131, 120, 110, 143, 50, 132, 88, 26, 36, 240, 109, 9, 108, 91, 90, 249, 97, 218, 50, 128, 252, 196, 150, 251, 187, 110, 54, 246, 249, 195, 253, 93, 252, 195, 234, 255, 1, 80, 75, 1, 2, 20, 0, 20, 0, 0, 8, 8, 0, 131, 182, 42, 68, 22, 124, 124, 222, 0, 29, 0, 0, 62, 29, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 114, 105, 97, 108, 95, 50, 52, 46, 112, 110, 103, 80, 75, 1, 2, 20, 0, 20, 0, 0, 8, 8, 0, 131, 182, 42, 68, 158, 64, 172, 29, 120, 6, 0, 0, 95, 61, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 29, 0, 0, 97, 114, 105, 97, 108, 95, 50, 52, 46, 102, 110, 116, 80, 75, 5, 6, 0, 0, 0, 0, 2, 0, 2, 0, 116, 0, 0, 0, 204, 35, 0, 0, 0, 0];

+  80,

+  75,

+  3,

+  4,

+  20,

+  0,

+  0,

+  8,

+  8,

+  0,

+  131,

+  182,

+  42,

+  68,

+  22,

+  124,

+  124,

+  222,

+  0,

+  29,

+  0,

+  0,

+  62,

+  29,

+  0,

+  0,

+  12,

+  0,

+  0,

+  0,

+  97,

+  114,

+  105,

+  97,

+  108,

+  95,

+  50,

+  52,

+  46,

+  112,

+  110,

+  103,

+  141,

+  121,

+  103,

+  80,

+  19,

+  80,

+  179,

+  118,

+  18,

+  66,

+  143,

+  180,

+  208,

+  155,

+  128,

+  64,

+  164,

+  67,

+  232,

+  16,

+  122,

+  239,

+  85,

+  5,

+  68,

+  64,

+  122,

+  83,

+  58,

+  132,

+  158,

+  0,

+  130,

+  244,

+  142,

+  160,

+  16,

+  170,

+  2,

+  138,

+  72,

+  87,

+  164,

+  5,

+  165,

+  119,

+  4,

+  233,

+  66,

+  144,

+  222,

+  36,

+  116,

+  233,

+  215,

+  119,

+  190,

+  31,

+  223,

+  251,

+  235,

+  206,

+  61,

+  179,

+  115,

+  102,

+  127,

+  236,

+  236,

+  60,

+  115,

+  102,

+  207,

+  238,

+  179,

+  243,

+  196,

+  27,

+  27,

+  106,

+  221,

+  33,

+  99,

+  38,

+  3,

+  0,

+  0,

+  119,

+  116,

+  180,

+  213,

+  77,

+  1,

+  0,

+  48,

+  230,

+  159,

+  207,

+  66,

+  66,

+  244,

+  239,

+  86,

+  224,

+  212,

+  200,

+  0,

+  0,

+  216,

+  8,

+  117,

+  212,

+  85,

+  204,

+  145,

+  115,

+  123,

+  79,

+  18,

+  211,

+  75,

+  229,

+  234,

+  49,

+  16,

+  18,

+  52,

+  21,

+  109,

+  148,

+  42,

+  7,

+  248,

+  159,

+  189,

+  80,

+  38,

+  137,

+  81,

+  38,

+  129,

+  130,

+  56,

+  101,

+  192,

+  240,

+  191,

+  1,

+  163,

+  11,

+  81,

+  191,

+  2,

+  91,

+  10,

+  85,

+  79,

+  145,

+  206,

+  63,

+  31,

+  84,

+  43,

+  184,

+  120,

+  42,

+  107,

+  111,

+  79,

+  79,

+  83,

+  134,

+  135,

+  73,

+  184,

+  79,

+  86,

+  152,

+  148,

+  106,

+  38,

+  51,

+  75,

+  254,

+  239,

+  206,

+  120,

+  234,

+  219,

+  124,

+  191,

+  179,

+  37,

+  151,

+  235,

+  165,

+  219,

+  155,

+  51,

+  82,

+  165,

+  219,

+  107,

+  33,

+  177,

+  142,

+  219,

+  72,

+  254,

+  176,

+  135,

+  183,

+  75,

+  46,

+  156,

+  24,

+  73,

+  186,

+  5,

+  129,

+  136,

+  228,

+  149,

+  157,

+  144,

+  117,

+  89,

+  241,

+  144,

+  158,

+  139,

+  37,

+  23,

+  137,

+  133,

+  32,

+  141,

+  105,

+  194,

+  245,

+  217,

+  191,

+  65,

+  91,

+  30,

+  194,

+  163,

+  183,

+  29,

+  112,

+  219,

+  5,

+  201,

+  73,

+  249,

+  208,

+  253,

+  212,

+  72,

+  202,

+  222,

+  75,

+  73,

+  37,

+  100,

+  120,

+  251,

+  34,

+  233,

+  16,

+  95,

+  196,

+  6,

+  112,

+  145,

+  197,

+  230,

+  72,

+  242,

+  110,

+  151,

+  28,

+  241,

+  83,

+  202,

+  145,

+  174,

+  253,

+  254,

+  19,

+  85,

+  7,

+  195,

+  205,

+  215,

+  107,

+  30,

+  85,

+  3,

+  236,

+  172,

+  203,

+  45,

+  249,

+  163,

+  178,

+  55,

+  161,

+  206,

+  139,

+  46,

+  191,

+  123,

+  2,

+  194,

+  148,

+  76,

+  17,

+  101,

+  73,

+  60,

+  198,

+  97,

+  239,

+  62,

+  242,

+  213,

+  198,

+  126,

+  94,

+  49,

+  218,

+  189,

+  121,

+  23,

+  113,

+  239,

+  73,

+  208,

+  208,

+  10,

+  195,

+  179,

+  33,

+  214,

+  136,

+  189,

+  239,

+  44,

+  127,

+  31,

+  15,

+  68,

+  242,

+  209,

+  76,

+  231,

+  47,

+  237,

+  111,

+  96,

+  190,

+  194,

+  3,

+  143,

+  17,

+  57,

+  247,

+  207,

+  57,

+  90,

+  61,

+  114,

+  166,

+  200,

+  71,

+  149,

+  14,

+  170,

+  88,

+  44,

+  46,

+  153,

+  218,

+  203,

+  189,

+  63,

+  165,

+  167,

+  119,

+  12,

+  30,

+  60,

+  217,

+  96,

+  37,

+  88,

+  140,

+  28,

+  191,

+  100,

+  7,

+  189,

+  253,

+  230,

+  145,

+  121,

+  120,

+  67,

+  41,

+  7,

+  108,

+  85,

+  251,

+  148,

+  164,

+  224,

+  238,

+  23,

+  182,

+  16,

+  199,

+  18,

+  217,

+  208,

+  55,

+  44,

+  112,

+  166,

+  124,

+  233,

+  193,

+  199,

+  70,

+  32,

+  182,

+  159,

+  232,

+  179,

+  43,

+  237,

+  116,

+  199,

+  172,

+  255,

+  82,

+  252,

+  194,

+  205,

+  249,

+  244,

+  208,

+  24,

+  93,

+  206,

+  123,

+  47,

+  210,

+  16,

+  100,

+  68,

+  151,

+  76,

+  144,

+  186,

+  246,

+  197,

+  86,

+  34,

+  201,

+  169,

+  200,

+  191,

+  216,

+  199,

+  203,

+  118,

+  109,

+  152,

+  107,

+  17,

+  112,

+  233,

+  228,

+  179,

+  59,

+  72,

+  104,

+  75,

+  240,

+  71,

+  252,

+  254,

+  213,

+  167,

+  63,

+  27,

+  71,

+  65,

+  218,

+  27,

+  254,

+  113,

+  138,

+  181,

+  3,

+  231,

+  121,

+  227,

+  42,

+  133,

+  147,

+  75,

+  146,

+  243,

+  153,

+  191,

+  227,

+  162,

+  2,

+  18,

+  105,

+  148,

+  172,

+  130,

+  205,

+  235,

+  226,

+  244,

+  130,

+  89,

+  230,

+  37,

+  50,

+  10,

+  40,

+  214,

+  185,

+  153,

+  144,

+  2,

+  98,

+  97,

+  117,

+  198,

+  82,

+  45,

+  13,

+  188,

+  41,

+  141,

+  74,

+  103,

+  186,

+  37,

+  187,

+  125,

+  9,

+  97,

+  185,

+  159,

+  170,

+  199,

+  161,

+  199,

+  159,

+  190,

+  244,

+  38,

+  213,

+  181,

+  149,

+  31,

+  51,

+  172,

+  37,

+  230,

+  159,

+  213,

+  42,

+  218,

+  90,

+  138,

+  79,

+  41,

+  202,

+  252,

+  13,

+  110,

+  192,

+  87,

+  113,

+  144,

+  131,

+  66,

+  22,

+  25,

+  62,

+  106,

+  42,

+  176,

+  22,

+  132,

+  5,

+  70,

+  31,

+  14,

+  226,

+  4,

+  70,

+  99,

+  110,

+  182,

+  89,

+  247,

+  103,

+  10,

+  61,

+  18,

+  167,

+  220,

+  94,

+  133,

+  133,

+  185,

+  71,

+  138,

+  237,

+  228,

+  19,

+  222,

+  69,

+  136,

+  182,

+  71,

+  120,

+  177,

+  134,

+  210,

+  134,

+  197,

+  99,

+  103,

+  152,

+  196,

+  55,

+  28,

+  162,

+  66,

+  133,

+  181,

+  219,

+  185,

+  119,

+  114,

+  25,

+  35,

+  121,

+  73,

+  67,

+  207,

+  50,

+  158,

+  232,

+  47,

+  115,

+  79,

+  94,

+  216,

+  166,

+  27,

+  76,

+  202,

+  89,

+  214,

+  100,

+  168,

+  217,

+  124,

+  98,

+  95,

+  186,

+  124,

+  206,

+  153,

+  102,

+  114,

+  97,

+  231,

+  186,

+  204,

+  32,

+  68,

+  136,

+  161,

+  0,

+  214,

+  146,

+  251,

+  193,

+  229,

+  246,

+  181,

+  200,

+  14,

+  28,

+  84,

+  185,

+  231,

+  146,

+  40,

+  190,

+  233,

+  176,

+  213,

+  26,

+  47,

+  132,

+  122,

+  34,

+  35,

+  22,

+  217,

+  144,

+  81,

+  223,

+  162,

+  131,

+  203,

+  9,

+  153,

+  172,

+  210,

+  2,

+  191,

+  140,

+  67,

+  206,

+  66,

+  168,

+  184,

+  227,

+  80,

+  191,

+  20,

+  118,

+  156,

+  144,

+  35,

+  154,

+  98,

+  0,

+  184,

+  175,

+  216,

+  199,

+  40,

+  84,

+  247,

+  165,

+  189,

+  51,

+  68,

+  58,

+  37,

+  202,

+  78,

+  59,

+  210,

+  230,

+  95,

+  54,

+  116,

+  23,

+  179,

+  132,

+  221,

+  117,

+  160,

+  230,

+  185,

+  112,

+  66,

+  253,

+  156,

+  216,

+  145,

+  246,

+  8,

+  65,

+  14,

+  11,

+  241,

+  168,

+  247,

+  142,

+  146,

+  206,

+  0,

+  187,

+  117,

+  75,

+  105,

+  104,

+  10,

+  171,

+  5,

+  122,

+  202,

+  65,

+  146,

+  81,

+  122,

+  119,

+  206,

+  70,

+  66,

+  91,

+  26,

+  40,

+  179,

+  205,

+  24,

+  172,

+  182,

+  55,

+  168,

+  55,

+  16,

+  235,

+  199,

+  216,

+  14,

+  69,

+  250,

+  182,

+  70,

+  230,

+  96,

+  103,

+  131,

+  136,

+  49,

+  50,

+  99,

+  149,

+  52,

+  248,

+  6,

+  150,

+  136,

+  187,

+  73,

+  30,

+  140,

+  186,

+  104,

+  216,

+  142,

+  213,

+  67,

+  240,

+  99,

+  25,

+  204,

+  38,

+  74,

+  63,

+  180,

+  91,

+  70,

+  61,

+  248,

+  41,

+  184,

+  183,

+  55,

+  136,

+  0,

+  131,

+  210,

+  111,

+  2,

+  137,

+  177,

+  53,

+  166,

+  98,

+  49,

+  185,

+  66,

+  87,

+  156,

+  178,

+  78,

+  249,

+  213,

+  170,

+  77,

+  253,

+  101,

+  140,

+  3,

+  171,

+  54,

+  90,

+  82,

+  47,

+  223,

+  139,

+  160,

+  158,

+  47,

+  240,

+  87,

+  21,

+  208,

+  33,

+  7,

+  116,

+  169,

+  62,

+  240,

+  227,

+  193,

+  168,

+  88,

+  179,

+  212,

+  103,

+  63,

+  88,

+  239,

+  158,

+  205,

+  72,

+  166,

+  189,

+  4,

+  126,

+  225,

+  77,

+  94,

+  250,

+  4,

+  50,

+  138,

+  123,

+  130,

+  157,

+  229,

+  209,

+  193,

+  217,

+  158,

+  109,

+  188,

+  2,

+  25,

+  221,

+  163,

+  190,

+  10,

+  101,

+  198,

+  59,

+  222,

+  17,

+  4,

+  133,

+  138,

+  231,

+  236,

+  6,

+  83,

+  34,

+  201,

+  10,

+  142,

+  51,

+  69,

+  170,

+  226,

+  161,

+  125,

+  103,

+  140,

+  108,

+  112,

+  222,

+  87,

+  224,

+  55,

+  36,

+  44,

+  17,

+  47,

+  176,

+  153,

+  61,

+  143,

+  101,

+  210,

+  116,

+  8,

+  87,

+  71,

+  47,

+  161,

+  138,

+  72,

+  202,

+  240,

+  167,

+  223,

+  92,

+  32,

+  68,

+  111,

+  156,

+  92,

+  174,

+  94,

+  216,

+  205,

+  208,

+  168,

+  164,

+  223,

+  254,

+  17,

+  35,

+  117,

+  208,

+  142,

+  197,

+  197,

+  12,

+  10,

+  63,

+  188,

+  234,

+  111,

+  164,

+  199,

+  59,

+  230,

+  14,

+  174,

+  174,

+  13,

+  59,

+  24,

+  129,

+  63,

+  215,

+  2,

+  210,

+  126,

+  176,

+  56,

+  73,

+  208,

+  130,

+  248,

+  140,

+  107,

+  69,

+  180,

+  255,

+  82,

+  62,

+  92,

+  153,

+  6,

+  124,

+  243,

+  31,

+  67,

+  113,

+  100,

+  13,

+  189,

+  211,

+  223,

+  188,

+  75,

+  160,

+  217,

+  55,

+  178,

+  188,

+  232,

+  80,

+  66,

+  255,

+  197,

+  187,

+  157,

+  166,

+  158,

+  239,

+  114,

+  165,

+  165,

+  86,

+  10,

+  239,

+  223,

+  58,

+  93,

+  248,

+  18,

+  110,

+  85,

+  95,

+  32,

+  170,

+  27,

+  216,

+  170,

+  4,

+  118,

+  98,

+  0,

+  212,

+  248,

+  57,

+  128,

+  119,

+  185,

+  170,

+  166,

+  185,

+  68,

+  231,

+  212,

+  197,

+  8,

+  239,

+  65,

+  130,

+  236,

+  61,

+  217,

+  224,

+  17,

+  178,

+  142,

+  145,

+  138,

+  127,

+  218,

+  184,

+  106,

+  158,

+  173,

+  230,

+  43,

+  139,

+  222,

+  100,

+  59,

+  44,

+  234,

+  98,

+  205,

+  68,

+  152,

+  202,

+  205,

+  37,

+  152,

+  15,

+  217,

+  165,

+  254,

+  142,

+  95,

+  179,

+  115,

+  77,

+  225,

+  34,

+  162,

+  69,

+  123,

+  197,

+  197,

+  40,

+  117,

+  94,

+  150,

+  57,

+  245,

+  228,

+  229,

+  139,

+  168,

+  47,

+  61,

+  232,

+  37,

+  173,

+  90,

+  218,

+  246,

+  94,

+  23,

+  175,

+  79,

+  253,

+  125,

+  144,

+  87,

+  148,

+  111,

+  188,

+  186,

+  220,

+  31,

+  68,

+  29,

+  206,

+  203,

+  83,

+  210,

+  5,

+  12,

+  222,

+  56,

+  33,

+  128,

+  35,

+  122,

+  4,

+  112,

+  6,

+  107,

+  30,

+  242,

+  174,

+  185,

+  249,

+  177,

+  247,

+  110,

+  56,

+  8,

+  17,

+  215,

+  18,

+  56,

+  29,

+  80,

+  1,

+  63,

+  208,

+  104,

+  54,

+  173,

+  83,

+  156,

+  165,

+  224,

+  213,

+  71,

+  90,

+  164,

+  234,

+  142,

+  4,

+  212,

+  67,

+  54,

+  170,

+  237,

+  75,

+  232,

+  41,

+  23,

+  238,

+  3,

+  176,

+  109,

+  144,

+  187,

+  111,

+  222,

+  172,

+  16,

+  210,

+  216,

+  131,

+  238,

+  141,

+  90,

+  180,

+  28,

+  192,

+  47,

+  80,

+  48,

+  69,

+  111,

+  56,

+  158,

+  86,

+  41,

+  73,

+  56,

+  122,

+  28,

+  242,

+  214,

+  127,

+  146,

+  55,

+  82,

+  166,

+  234,

+  27,

+  27,

+  62,

+  12,

+  250,

+  134,

+  153,

+  67,

+  35,

+  32,

+  9,

+  80,

+  73,

+  50,

+  191,

+  54,

+  241,

+  11,

+  74,

+  57,

+  56,

+  189,

+  67,

+  136,

+  168,

+  92,

+  215,

+  114,

+  194,

+  238,

+  61,

+  20,

+  85,

+  186,

+  86,

+  246,

+  110,

+  190,

+  61,

+  110,

+  203,

+  162,

+  60,

+  230,

+  120,

+  54,

+  225,

+  108,

+  76,

+  108,

+  177,

+  141,

+  123,

+  158,

+  20,

+  40,

+  155,

+  238,

+  51,

+  230,

+  12,

+  182,

+  206,

+  40,

+  250,

+  45,

+  214,

+  180,

+  7,

+  81,

+  44,

+  200,

+  19,

+  97,

+  37,

+  1,

+  132,

+  37,

+  161,

+  211,

+  83,

+  67,

+  117,

+  166,

+  212,

+  58,

+  17,

+  12,

+  159,

+  76,

+  186,

+  197,

+  140,

+  61,

+  188,

+  7,

+  52,

+  72,

+  145,

+  86,

+  181,

+  201,

+  167,

+  16,

+  28,

+  233,

+  220,

+  74,

+  111,

+  46,

+  183,

+  109,

+  149,

+  22,

+  106,

+  100,

+  119,

+  188,

+  52,

+  38,

+  53,

+  13,

+  28,

+  92,

+  13,

+  36,

+  77,

+  60,

+  108,

+  29,

+  126,

+  239,

+  145,

+  254,

+  103,

+  147,

+  116,

+  105,

+  170,

+  84,

+  132,

+  158,

+  224,

+  203,

+  207,

+  208,

+  112,

+  170,

+  254,

+  56,

+  160,

+  156,

+  147,

+  230,

+  165,

+  147,

+  24,

+  152,

+  145,

+  11,

+  212,

+  195,

+  85,

+  74,

+  92,

+  19,

+  185,

+  100,

+  210,

+  79,

+  16,

+  147,

+  42,

+  102,

+  118,

+  154,

+  126,

+  15,

+  250,

+  113,

+  5,

+  222,

+  167,

+  0,

+  12,

+  136,

+  110,

+  107,

+  82,

+  11,

+  126,

+  33,

+  154,

+  103,

+  94,

+  226,

+  85,

+  227,

+  89,

+  182,

+  126,

+  56,

+  212,

+  176,

+  114,

+  165,

+  211,

+  69,

+  60,

+  227,

+  146,

+  250,

+  126,

+  233,

+  173,

+  172,

+  63,

+  150,

+  239,

+  186,

+  10,

+  128,

+  48,

+  176,

+  38,

+  162,

+  163,

+  113,

+  31,

+  164,

+  227,

+  196,

+  228,

+  249,

+  178,

+  15,

+  118,

+  21,

+  145,

+  238,

+  101,

+  185,

+  184,

+  239,

+  251,

+  144,

+  34,

+  249,

+  125,

+  0,

+  2,

+  0,

+  163,

+  122,

+  156,

+  204,

+  179,

+  252,

+  218,

+  254,

+  251,

+  24,

+  29,

+  213,

+  120,

+  210,

+  206,

+  238,

+  97,

+  23,

+  227,

+  172,

+  233,

+  247,

+  140,

+  149,

+  233,

+  84,

+  224,

+  68,

+  123,

+  72,

+  132,

+  105,

+  69,

+  135,

+  10,

+  167,

+  217,

+  17,

+  131,

+  119,

+  3,

+  142,

+  9,

+  11,

+  101,

+  238,

+  229,

+  70,

+  189,

+  85,

+  241,

+  54,

+  5,

+  241,

+  72,

+  48,

+  61,

+  109,

+  243,

+  91,

+  81,

+  83,

+  246,

+  5,

+  71,

+  253,

+  130,

+  199,

+  149,

+  58,

+  9,

+  37,

+  27,

+  166,

+  241,

+  37,

+  0,

+  99,

+  14,

+  73,

+  78,

+  47,

+  93,

+  151,

+  57,

+  121,

+  38,

+  156,

+  112,

+  49,

+  210,

+  252,

+  123,

+  47,

+  95,

+  47,

+  148,

+  245,

+  56,

+  6,

+  8,

+  83,

+  255,

+  29,

+  111,

+  35,

+  197,

+  55,

+  112,

+  185,

+  148,

+  138,

+  203,

+  133,

+  92,

+  27,

+  1,

+  49,

+  99,

+  173,

+  163,

+  141,

+  235,

+  84,

+  46,

+  174,

+  238,

+  114,

+  80,

+  103,

+  23,

+  198,

+  146,

+  245,

+  126,

+  114,

+  132,

+  155,

+  220,

+  43,

+  49,

+  84,

+  224,

+  183,

+  162,

+  218,

+  63,

+  27,

+  217,

+  25,

+  215,

+  125,

+  22,

+  100,

+  34,

+  140,

+  90,

+  189,

+  132,

+  154,

+  69,

+  153,

+  194,

+  178,

+  13,

+  162,

+  190,

+  55,

+  134,

+  216,

+  76,

+  137,

+  209,

+  4,

+  72,

+  65,

+  190,

+  202,

+  11,

+  0,

+  196,

+  66,

+  39,

+  50,

+  192,

+  106,

+  138,

+  242,

+  109,

+  71,

+  124,

+  128,

+  85,

+  242,

+  126,

+  45,

+  203,

+  110,

+  250,

+  177,

+  137,

+  178,

+  40,

+  86,

+  5,

+  28,

+  38,

+  148,

+  39,

+  148,

+  201,

+  48,

+  169,

+  140,

+  42,

+  111,

+  156,

+  236,

+  222,

+  205,

+  125,

+  92,

+  87,

+  208,

+  122,

+  165,

+  63,

+  147,

+  39,

+  106,

+  215,

+  12,

+  103,

+  226,

+  100,

+  33,

+  72,

+  90,

+  146,

+  97,

+  39,

+  8,

+  245,

+  56,

+  71,

+  194,

+  219,

+  8,

+  240,

+  101,

+  187,

+  215,

+  58,

+  192,

+  151,

+  210,

+  110,

+  169,

+  0,

+  121,

+  191,

+  223,

+  187,

+  134,

+  248,

+  207,

+  38,

+  245,

+  223,

+  217,

+  66,

+  27,

+  137,

+  125,

+  61,

+  197,

+  174,

+  20,

+  69,

+  3,

+  247,

+  248,

+  205,

+  155,

+  23,

+  156,

+  6,

+  65,

+  151,

+  82,

+  114,

+  117,

+  182,

+  244,

+  118,

+  12,

+  234,

+  209,

+  250,

+  41,

+  83,

+  184,

+  84,

+  59,

+  105,

+  75,

+  108,

+  151,

+  5,

+  57,

+  242,

+  55,

+  63,

+  45,

+  73,

+  168,

+  163,

+  233,

+  238,

+  19,

+  97,

+  180,

+  202,

+  33,

+  3,

+  167,

+  204,

+  52,

+  180,

+  41,

+  119,

+  93,

+  196,

+  42,

+  74,

+  144,

+  138,

+  49,

+  99,

+  42,

+  76,

+  24,

+  16,

+  31,

+  162,

+  55,

+  149,

+  67,

+  199,

+  157,

+  89,

+  67,

+  247,

+  221,

+  90,

+  56,

+  201,

+  208,

+  54,

+  107,

+  199,

+  89,

+  232,

+  242,

+  139,

+  182,

+  246,

+  183,

+  59,

+  241,

+  37,

+  87,

+  38,

+  202,

+  239,

+  164,

+  53,

+  220,

+  78,

+  127,

+  156,

+  216,

+  149,

+  220,

+  220,

+  55,

+  34,

+  66,

+  206,

+  53,

+  188,

+  90,

+  191,

+  160,

+  176,

+  128,

+  200,

+  99,

+  135,

+  50,

+  185,

+  198,

+  234,

+  0,

+  199,

+  234,

+  195,

+  84,

+  50,

+  29,

+  80,

+  174,

+  234,

+  78,

+  46,

+  142,

+  138,

+  0,

+  106,

+  84,

+  57,

+  142,

+  218,

+  198,

+  116,

+  214,

+  246,

+  225,

+  197,

+  15,

+  228,

+  84,

+  34,

+  72,

+  169,

+  161,

+  143,

+  155,

+  202,

+  46,

+  211,

+  129,

+  82,

+  87,

+  121,

+  206,

+  213,

+  123,

+  119,

+  120,

+  235,

+  181,

+  168,

+  129,

+  228,

+  237,

+  199,

+  207,

+  24,

+  145,

+  127,

+  141,

+  35,

+  179,

+  77,

+  66,

+  247,

+  91,

+  2,

+  252,

+  111,

+  231,

+  18,

+  40,

+  48,

+  9,

+  187,

+  244,

+  176,

+  212,

+  231,

+  153,

+  143,

+  110,

+  243,

+  203,

+  102,

+  189,

+  177,

+  146,

+  205,

+  71,

+  254,

+  100,

+  23,

+  41,

+  4,

+  243,

+  122,

+  108,

+  242,

+  58,

+  193,

+  86,

+  116,

+  108,

+  130,

+  182,

+  173,

+  56,

+  235,

+  132,

+  217,

+  15,

+  159,

+  192,

+  152,

+  178,

+  205,

+  76,

+  151,

+  171,

+  125,

+  8,

+  130,

+  115,

+  204,

+  173,

+  74,

+  54,

+  14,

+  223,

+  110,

+  21,

+  203,

+  190,

+  250,

+  192,

+  233,

+  138,

+  223,

+  213,

+  225,

+  126,

+  111,

+  45,

+  254,

+  113,

+  175,

+  19,

+  72,

+  14,

+  233,

+  206,

+  197,

+  58,

+  190,

+  104,

+  250,

+  252,

+  129,

+  31,

+  171,

+  41,

+  158,

+  227,

+  118,

+  15,

+  93,

+  222,

+  159,

+  110,

+  199,

+  87,

+  122,

+  193,

+  139,

+  115,

+  27,

+  59,

+  110,

+  38,

+  180,

+  206,

+  184,

+  64,

+  0,

+  47,

+  237,

+  135,

+  124,

+  183,

+  206,

+  93,

+  95,

+  102,

+  157,

+  205,

+  28,

+  240,

+  28,

+  251,

+  109,

+  88,

+  164,

+  62,

+  168,

+  113,

+  248,

+  156,

+  10,

+  82,

+  13,

+  227,

+  117,

+  154,

+  231,

+  225,

+  255,

+  251,

+  214,

+  49,

+  192,

+  228,

+  116,

+  38,

+  109,

+  75,

+  138,

+  136,

+  190,

+  247,

+  39,

+  24,

+  97,

+  89,

+  95,

+  32,

+  120,

+  56,

+  196,

+  98,

+  173,

+  97,

+  104,

+  103,

+  236,

+  25,

+  213,

+  143,

+  37,

+  120,

+  80,

+  143,

+  137,

+  17,

+  92,

+  79,

+  254,

+  91,

+  125,

+  249,

+  151,

+  119,

+  32,

+  114,

+  190,

+  232,

+  56,

+  97,

+  87,

+  231,

+  7,

+  123,

+  39,

+  138,

+  244,

+  193,

+  8,

+  239,

+  176,

+  228,

+  171,

+  188,

+  125,

+  36,

+  165,

+  7,

+  206,

+  187,

+  44,

+  162,

+  247,

+  196,

+  14,

+  52,

+  34,

+  117,

+  122,

+  135,

+  107,

+  33,

+  46,

+  63,

+  44,

+  234,

+  8,

+  196,

+  26,

+  161,

+  199,

+  33,

+  101,

+  169,

+  242,

+  70,

+  21,

+  199,

+  167,

+  0,

+  68,

+  190,

+  206,

+  138,

+  161,

+  135,

+  67,

+  73,

+  128,

+  253,

+  80,

+  194,

+  118,

+  203,

+  197,

+  248,

+  230,

+  231,

+  57,

+  33,

+  144,

+  199,

+  64,

+  5,

+  44,

+  241,

+  27,

+  34,

+  65,

+  31,

+  92,

+  113,

+  119,

+  147,

+  73,

+  216,

+  7,

+  199,

+  236,

+  70,

+  211,

+  254,

+  86,

+  162,

+  40,

+  63,

+  63,

+  33,

+  96,

+  111,

+  223,

+  105,

+  115,

+  48,

+  216,

+  81,

+  142,

+  215,

+  127,

+  165,

+  78,

+  33,

+  109,

+  185,

+  5,

+  218,

+  152,

+  161,

+  166,

+  1,

+  123,

+  43,

+  239,

+  238,

+  238,

+  227,

+  239,

+  80,

+  156,

+  175,

+  206,

+  120,

+  78,

+  21,

+  210,

+  177,

+  155,

+  18,

+  178,

+  181,

+  250,

+  75,

+  31,

+  84,

+  35,

+  110,

+  108,

+  194,

+  156,

+  192,

+  9,

+  214,

+  24,

+  140,

+  82,

+  120,

+  168,

+  220,

+  149,

+  153,

+  254,

+  128,

+  12,

+  65,

+  55,

+  100,

+  224,

+  79,

+  38,

+  189,

+  39,

+  59,

+  190,

+  83,

+  129,

+  73,

+  23,

+  113,

+  86,

+  114,

+  67,

+  109,

+  26,

+  102,

+  173,

+  221,

+  153,

+  29,

+  103,

+  188,

+  24,

+  64,

+  208,

+  168,

+  114,

+  106,

+  99,

+  51,

+  168,

+  189,

+  231,

+  211,

+  84,

+  55,

+  107,

+  234,

+  57,

+  14,

+  132,

+  230,

+  118,

+  232,

+  97,

+  134,

+  9,

+  230,

+  22,

+  16,

+  39,

+  134,

+  162,

+  104,

+  200,

+  180,

+  198,

+  235,

+  239,

+  52,

+  193,

+  61,

+  178,

+  217,

+  99,

+  231,

+  162,

+  41,

+  98,

+  142,

+  37,

+  58,

+  95,

+  252,

+  158,

+  187,

+  16,

+  205,

+  92,

+  82,

+  224,

+  220,

+  234,

+  100,

+  26,

+  186,

+  216,

+  11,

+  248,

+  100,

+  79,

+  159,

+  99,

+  51,

+  233,

+  252,

+  223,

+  3,

+  16,

+  26,

+  69,

+  229,

+  196,

+  78,

+  191,

+  180,

+  158,

+  93,

+  41,

+  27,

+  122,

+  166,

+  156,

+  21,

+  182,

+  165,

+  200,

+  72,

+  196,

+  146,

+  161,

+  203,

+  181,

+  55,

+  211,

+  43,

+  57,

+  104,

+  144,

+  110,

+  172,

+  198,

+  77,

+  52,

+  82,

+  166,

+  13,

+  41,

+  189,

+  219,

+  200,

+  118,

+  102,

+  100,

+  157,

+  156,

+  92,

+  236,

+  208,

+  185,

+  70,

+  31,

+  137,

+  226,

+  153,

+  151,

+  8,

+  208,

+  98,

+  202,

+  215,

+  131,

+  107,

+  126,

+  234,

+  87,

+  15,

+  90,

+  160,

+  89,

+  45,

+  47,

+  156,

+  135,

+  39,

+  176,

+  244,

+  97,

+  142,

+  90,

+  182,

+  169,

+  232,

+  233,

+  202,

+  251,

+  89,

+  7,

+  117,

+  150,

+  232,

+  101,

+  100,

+  220,

+  47,

+  139,

+  18,

+  15,

+  16,

+  166,

+  218,

+  81,

+  222,

+  242,

+  84,

+  105,

+  163,

+  79,

+  25,

+  143,

+  155,

+  209,

+  146,

+  135,

+  34,

+  126,

+  65,

+  46,

+  194,

+  14,

+  115,

+  220,

+  101,

+  157,

+  26,

+  95,

+  44,

+  40,

+  36,

+  84,

+  21,

+  86,

+  157,

+  77,

+  90,

+  102,

+  157,

+  235,

+  232,

+  163,

+  8,

+  231,

+  147,

+  197,

+  235,

+  232,

+  92,

+  190,

+  173,

+  231,

+  50,

+  121,

+  195,

+  224,

+  121,

+  85,

+  162,

+  111,

+  182,

+  134,

+  26,

+  44,

+  224,

+  50,

+  248,

+  141,

+  201,

+  122,

+  142,

+  34,

+  239,

+  230,

+  51,

+  102,

+  130,

+  10,

+  30,

+  34,

+  228,

+  118,

+  253,

+  2,

+  251,

+  218,

+  243,

+  91,

+  119,

+  101,

+  88,

+  93,

+  122,

+  20,

+  17,

+  87,

+  43,

+  20,

+  95,

+  134,

+  150,

+  201,

+  219,

+  151,

+  14,

+  117,

+  246,

+  33,

+  6,

+  42,

+  111,

+  55,

+  86,

+  25,

+  144,

+  119,

+  144,

+  79,

+  91,

+  132,

+  191,

+  78,

+  59,

+  89,

+  255,

+  45,

+  175,

+  61,

+  134,

+  214,

+  17,

+  31,

+  7,

+  200,

+  164,

+  208,

+  57,

+  166,

+  90,

+  188,

+  174,

+  116,

+  122,

+  71,

+  202,

+  100,

+  68,

+  191,

+  164,

+  181,

+  40,

+  207,

+  202,

+  232,

+  11,

+  255,

+  4,

+  66,

+  20,

+  168,

+  226,

+  170,

+  152,

+  12,

+  173,

+  239,

+  216,

+  23,

+  163,

+  147,

+  39,

+  132,

+  15,

+  252,

+  2,

+  129,

+  247,

+  107,

+  168,

+  158,

+  87,

+  7,

+  17,

+  55,

+  137,

+  149,

+  191,

+  106,

+  134,

+  21,

+  228,

+  78,

+  19,

+  142,

+  190,

+  106,

+  204,

+  31,

+  39,

+  59,

+  213,

+  182,

+  148,

+  185,

+  165,

+  193,

+  119,

+  237,

+  38,

+  187,

+  74,

+  54,

+  177,

+  198,

+  222,

+  204,

+  126,

+  79,

+  72,

+  16,

+  22,

+  54,

+  149,

+  178,

+  252,

+  104,

+  42,

+  63,

+  160,

+  60,

+  93,

+  50,

+  78,

+  229,

+  77,

+  160,

+  122,

+  72,

+  209,

+  48,

+  88,

+  81,

+  8,

+  53,

+  38,

+  41,

+  24,

+  47,

+  174,

+  213,

+  116,

+  117,

+  230,

+  178,

+  106,

+  99,

+  169,

+  7,

+  78,

+  178,

+  179,

+  39,

+  20,

+  43,

+  33,

+  75,

+  158,

+  107,

+  82,

+  101,

+  10,

+  152,

+  181,

+  210,

+  74,

+  138,

+  248,

+  167,

+  105,

+  185,

+  223,

+  13,

+  35,

+  198,

+  171,

+  23,

+  212,

+  29,

+  238,

+  158,

+  69,

+  210,

+  225,

+  87,

+  129,

+  255,

+  153,

+  60,

+  37,

+  223,

+  193,

+  199,

+  142,

+  46,

+  0,

+  140,

+  92,

+  124,

+  92,

+  238,

+  196,

+  168,

+  98,

+  27,

+  34,

+  78,

+  23,

+  106,

+  15,

+  196,

+  75,

+  144,

+  199,

+  94,

+  9,

+  244,

+  82,

+  103,

+  253,

+  56,

+  100,

+  83,

+  215,

+  138,

+  35,

+  139,

+  93,

+  29,

+  68,

+  195,

+  102,

+  60,

+  186,

+  168,

+  68,

+  95,

+  146,

+  49,

+  54,

+  136,

+  161,

+  49,

+  44,

+  156,

+  44,

+  196,

+  6,

+  134,

+  2,

+  134,

+  199,

+  121,

+  58,

+  187,

+  127,

+  226,

+  209,

+  61,

+  181,

+  119,

+  87,

+  118,

+  43,

+  60,

+  249,

+  123,

+  175,

+  139,

+  34,

+  230,

+  32,

+  30,

+  98,

+  162,

+  8,

+  230,

+  102,

+  79,

+  47,

+  16,

+  146,

+  153,

+  73,

+  43,

+  162,

+  110,

+  243,

+  31,

+  186,

+  18,

+  214,

+  123,

+  246,

+  70,

+  239,

+  82,

+  97,

+  212,

+  229,

+  90,

+  232,

+  225,

+  69,

+  180,

+  143,

+  62,

+  109,

+  170,

+  59,

+  64,

+  212,

+  255,

+  155,

+  123,

+  74,

+  1,

+  0,

+  37,

+  149,

+  187,

+  246,

+  7,

+  24,

+  103,

+  67,

+  234,

+  46,

+  118,

+  85,

+  243,

+  24,

+  219,

+  79,

+  182,

+  51,

+  212,

+  200,

+  211,

+  183,

+  137,

+  99,

+  156,

+  193,

+  43,

+  210,

+  4,

+  58,

+  142,

+  126,

+  36,

+  60,

+  102,

+  59,

+  152,

+  203,

+  135,

+  189,

+  42,

+  41,

+  146,

+  124,

+  20,

+  64,

+  205,

+  118,

+  232,

+  202,

+  181,

+  91,

+  171,

+  113,

+  20,

+  158,

+  26,

+  201,

+  192,

+  87,

+  187,

+  82,

+  128,

+  42,

+  247,

+  220,

+  84,

+  235,

+  6,

+  59,

+  54,

+  7,

+  156,

+  205,

+  104,

+  182,

+  137,

+  87,

+  204,

+  91,

+  250,

+  179,

+  206,

+  17,

+  100,

+  118,

+  74,

+  255,

+  17,

+  77,

+  177,

+  215,

+  31,

+  155,

+  197,

+  181,

+  58,

+  250,

+  255,

+  40,

+  39,

+  78,

+  131,

+  59,

+  27,

+  117,

+  42,

+  76,

+  153,

+  169,

+  52,

+  103,

+  60,

+  4,

+  255,

+  246,

+  50,

+  254,

+  181,

+  125,

+  71,

+  93,

+  3,

+  180,

+  209,

+  90,

+  250,

+  198,

+  116,

+  235,

+  113,

+  184,

+  16,

+  177,

+  86,

+  130,

+  189,

+  243,

+  58,

+  227,

+  175,

+  196,

+  20,

+  243,

+  6,

+  185,

+  171,

+  23,

+  88,

+  40,

+  33,

+  200,

+  224,

+  71,

+  88,

+  54,

+  74,

+  65,

+  89,

+  219,

+  7,

+  214,

+  34,

+  137,

+  171,

+  132,

+  227,

+  213,

+  17,

+  44,

+  46,

+  91,

+  207,

+  68,

+  64,

+  152,

+  63,

+  144,

+  10,

+  79,

+  79,

+  111,

+  226,

+  59,

+  17,

+  69,

+  95,

+  136,

+  203,

+  184,

+  93,

+  56,

+  140,

+  165,

+  5,

+  246,

+  173,

+  238,

+  141,

+  124,

+  169,

+  26,

+  53,

+  57,

+  237,

+  201,

+  25,

+  190,

+  63,

+  125,

+  71,

+  127,

+  149,

+  199,

+  53,

+  157,

+  71,

+  168,

+  222,

+  212,

+  23,

+  222,

+  234,

+  228,

+  156,

+  141,

+  130,

+  13,

+  247,

+  47,

+  66,

+  76,

+  38,

+  102,

+  197,

+  137,

+  243,

+  85,

+  158,

+  128,

+  168,

+  30,

+  138,

+  182,

+  30,

+  213,

+  163,

+  97,

+  96,

+  57,

+  203,

+  210,

+  140,

+  71,

+  232,

+  114,

+  155,

+  177,

+  116,

+  224,

+  97,

+  12,

+  181,

+  140,

+  131,

+  184,

+  186,

+  59,

+  42,

+  168,

+  43,

+  96,

+  17,

+  10,

+  130,

+  37,

+  68,

+  98,

+  36,

+  82,

+  120,

+  142,

+  96,

+  143,

+  132,

+  152,

+  211,

+  210,

+  238,

+  26,

+  141,

+  207,

+  170,

+  0,

+  246,

+  248,

+  78,

+  251,

+  161,

+  168,

+  114,

+  27,

+  126,

+  194,

+  134,

+  44,

+  213,

+  141,

+  203,

+  27,

+  253,

+  201,

+  98,

+  56,

+  57,

+  131,

+  76,

+  122,

+  245,

+  103,

+  176,

+  160,

+  208,

+  215,

+  81,

+  0,

+  255,

+  136,

+  121,

+  101,

+  50,

+  12,

+  149,

+  192,

+  60,

+  23,

+  20,

+  219,

+  248,

+  18,

+  148,

+  90,

+  61,

+  217,

+  70,

+  130,

+  139,

+  23,

+  200,

+  126,

+  169,

+  89,

+  238,

+  11,

+  182,

+  36,

+  73,

+  231,

+  47,

+  110,

+  126,

+  189,

+  231,

+  104,

+  209,

+  107,

+  201,

+  39,

+  226,

+  200,

+  246,

+  104,

+  184,

+  231,

+  61,

+  157,

+  54,

+  223,

+  242,

+  50,

+  179,

+  221,

+  29,

+  147,

+  247,

+  176,

+  240,

+  175,

+  137,

+  59,

+  88,

+  167,

+  217,

+  159,

+  33,

+  175,

+  48,

+  124,

+  161,

+  177,

+  237,

+  250,

+  189,

+  51,

+  226,

+  22,

+  213,

+  96,

+  33,

+  188,

+  90,

+  246,

+  164,

+  207,

+  90,

+  16,

+  190,

+  37,

+  58,

+  53,

+  84,

+  0,

+  159,

+  245,

+  98,

+  209,

+  255,

+  75,

+  134,

+  50,

+  41,

+  253,

+  215,

+  16,

+  27,

+  206,

+  155,

+  187,

+  182,

+  16,

+  196,

+  19,

+  2,

+  94,

+  50,

+  52,

+  140,

+  251,

+  204,

+  197,

+  160,

+  137,

+  218,

+  210,

+  191,

+  109,

+  93,

+  64,

+  244,

+  186,

+  44,

+  211,

+  222,

+  235,

+  22,

+  40,

+  158,

+  238,

+  197,

+  113,

+  242,

+  151,

+  60,

+  79,

+  105,

+  235,

+  87,

+  217,

+  168,

+  96,

+  248,

+  7,

+  146,

+  39,

+  241,

+  153,

+  9,

+  101,

+  144,

+  31,

+  179,

+  118,

+  103,

+  234,

+  164,

+  157,

+  43,

+  41,

+  188,

+  236,

+  13,

+  166,

+  242,

+  132,

+  203,

+  6,

+  93,

+  118,

+  111,

+  23,

+  181,

+  73,

+  23,

+  39,

+  210,

+  234,

+  164,

+  161,

+  111,

+  84,

+  12,

+  242,

+  90,

+  236,

+  103,

+  100,

+  127,

+  144,

+  240,

+  121,

+  59,

+  213,

+  193,

+  159,

+  242,

+  225,

+  187,

+  72,

+  183,

+  165,

+  137,

+  48,

+  213,

+  167,

+  72,

+  178,

+  132,

+  104,

+  213,

+  61,

+  149,

+  173,

+  138,

+  201,

+  65,

+  44,

+  180,

+  83,

+  77,

+  222,

+  76,

+  209,

+  24,

+  140,

+  88,

+  134,

+  240,

+  16,

+  170,

+  207,

+  37,

+  185,

+  157,

+  108,

+  200,

+  141,

+  202,

+  148,

+  146,

+  202,

+  125,

+  86,

+  102,

+  226,

+  45,

+  29,

+  103,

+  175,

+  27,

+  43,

+  178,

+  81,

+  189,

+  18,

+  58,

+  185,

+  200,

+  115,

+  35,

+  243,

+  178,

+  102,

+  105,

+  2,

+  171,

+  67,

+  231,

+  52,

+  211,

+  28,

+  202,

+  235,

+  126,

+  125,

+  121,

+  121,

+  34,

+  77,

+  96,

+  84,

+  61,

+  233,

+  183,

+  209,

+  56,

+  126,

+  116,

+  195,

+  81,

+  240,

+  250,

+  170,

+  149,

+  15,

+  15,

+  22,

+  231,

+  62,

+  117,

+  145,

+  147,

+  143,

+  185,

+  167,

+  251,

+  46,

+  199,

+  1,

+  48,

+  107,

+  194,

+  175,

+  157,

+  179,

+  208,

+  70,

+  133,

+  252,

+  141,

+  93,

+  184,

+  115,

+  240,

+  240,

+  118,

+  213,

+  199,

+  66,

+  91,

+  220,

+  155,

+  120,

+  217,

+  98,

+  247,

+  218,

+  162,

+  180,

+  61,

+  39,

+  220,

+  148,

+  5,

+  249,

+  251,

+  88,

+  132,

+  129,

+  176,

+  9,

+  44,

+  69,

+  114,

+  46,

+  79,

+  35,

+  213,

+  157,

+  236,

+  141,

+  213,

+  29,

+  144,

+  77,

+  4,

+  254,

+  185,

+  66,

+  50,

+  59,

+  142,

+  247,

+  187,

+  220,

+  63,

+  146,

+  102,

+  12,

+  200,

+  0,

+  35,

+  210,

+  209,

+  57,

+  115,

+  88,

+  232,

+  151,

+  222,

+  95,

+  227,

+  59,

+  88,

+  97,

+  164,

+  123,

+  19,

+  52,

+  163,

+  178,

+  120,

+  149,

+  125,

+  196,

+  121,

+  104,

+  158,

+  188,

+  238,

+  243,

+  123,

+  160,

+  209,

+  39,

+  46,

+  194,

+  180,

+  74,

+  66,

+  132,

+  65,

+  87,

+  251,

+  221,

+  108,

+  211,

+  162,

+  7,

+  36,

+  95,

+  181,

+  15,

+  245,

+  9,

+  154,

+  67,

+  116,

+  40,

+  162,

+  248,

+  239,

+  146,

+  227,

+  179,

+  192,

+  99,

+  134,

+  135,

+  31,

+  215,

+  77,

+  177,

+  232,

+  180,

+  225,

+  78,

+  170,

+  176,

+  130,

+  72,

+  248,

+  191,

+  183,

+  207,

+  84,

+  205,

+  110,

+  70,

+  23,

+  45,

+  222,

+  95,

+  8,

+  133,

+  121,

+  82,

+  184,

+  93,

+  243,

+  86,

+  206,

+  189,

+  144,

+  55,

+  143,

+  169,

+  144,

+  137,

+  46,

+  63,

+  76,

+  73,

+  129,

+  111,

+  185,

+  246,

+  227,

+  192,

+  66,

+  244,

+  247,

+  211,

+  60,

+  134,

+  47,

+  72,

+  235,

+  84,

+  128,

+  117,

+  218,

+  56,

+  157,

+  48,

+  210,

+  106,

+  238,

+  111,

+  198,

+  95,

+  197,

+  169,

+  148,

+  209,

+  140,

+  98,

+  160,

+  164,

+  117,

+  55,

+  14,

+  131,

+  226,

+  180,

+  196,

+  174,

+  178,

+  251,

+  81,

+  210,

+  33,

+  116,

+  112,

+  213,

+  246,

+  39,

+  229,

+  115,

+  164,

+  28,

+  58,

+  116,

+  56,

+  82,

+  141,

+  133,

+  159,

+  55,

+  18,

+  94,

+  32,

+  132,

+  219,

+  101,

+  73,

+  233,

+  105,

+  165,

+  179,

+  57,

+  168,

+  135,

+  2,

+  108,

+  28,

+  124,

+  68,

+  102,

+  242,

+  34,

+  184,

+  219,

+  87,

+  180,

+  26,

+  243,

+  24,

+  132,

+  193,

+  74,

+  210,

+  172,

+  184,

+  104,

+  196,

+  139,

+  76,

+  29,

+  31,

+  132,

+  69,

+  126,

+  3,

+  6,

+  132,

+  244,

+  199,

+  194,

+  115,

+  163,

+  126,

+  162,

+  212,

+  60,

+  42,

+  100,

+  221,

+  41,

+  29,

+  70,

+  125,

+  29,

+  230,

+  13,

+  8,

+  172,

+  238,

+  164,

+  87,

+  112,

+  36,

+  57,

+  152,

+  33,

+  3,

+  7,

+  82,

+  135,

+  213,

+  38,

+  102,

+  123,

+  81,

+  52,

+  99,

+  116,

+  19,

+  75,

+  30,

+  32,

+  163,

+  76,

+  78,

+  247,

+  1,

+  160,

+  171,

+  169,

+  179,

+  246,

+  225,

+  187,

+  237,

+  245,

+  75,

+  118,

+  1,

+  74,

+  243,

+  193,

+  230,

+  106,

+  8,

+  226,

+  218,

+  210,

+  133,

+  182,

+  82,

+  191,

+  113,

+  202,

+  216,

+  91,

+  29,

+  246,

+  142,

+  118,

+  141,

+  40,

+  120,

+  9,

+  136,

+  72,

+  231,

+  9,

+  18,

+  1,

+  99,

+  36,

+  172,

+  252,

+  150,

+  117,

+  252,

+  71,

+  124,

+  176,

+  25,

+  127,

+  141,

+  28,

+  243,

+  13,

+  70,

+  54,

+  253,

+  100,

+  170,

+  45,

+  25,

+  57,

+  220,

+  143,

+  241,

+  248,

+  68,

+  116,

+  121,

+  250,

+  143,

+  55,

+  179,

+  222,

+  63,

+  242,

+  29,

+  151,

+  124,

+  168,

+  35,

+  171,

+  140,

+  42,

+  61,

+  238,

+  248,

+  181,

+  217,

+  10,

+  73,

+  14,

+  164,

+  134,

+  147,

+  233,

+  233,

+  238,

+  102,

+  248,

+  37,

+  103,

+  190,

+  61,

+  134,

+  2,

+  61,

+  210,

+  129,

+  24,

+  222,

+  158,

+  206,

+  192,

+  194,

+  164,

+  174,

+  45,

+  27,

+  48,

+  85,

+  196,

+  175,

+  32,

+  66,

+  101,

+  159,

+  129,

+  181,

+  240,

+  194,

+  31,

+  15,

+  198,

+  72,

+  247,

+  222,

+  174,

+  226,

+  162,

+  79,

+  86,

+  116,

+  142,

+  213,

+  208,

+  229,

+  26,

+  125,

+  200,

+  170,

+  67,

+  97,

+  125,

+  232,

+  225,

+  27,

+  154,

+  154,

+  105,

+  208,

+  231,

+  126,

+  130,

+  50,

+  159,

+  228,

+  238,

+  244,

+  214,

+  199,

+  36,

+  179,

+  109,

+  164,

+  14,

+  136,

+  189,

+  78,

+  236,

+  130,

+  8,

+  245,

+  90,

+  49,

+  203,

+  64,

+  147,

+  126,

+  18,

+  198,

+  190,

+  126,

+  150,

+  149,

+  231,

+  29,

+  149,

+  249,

+  86,

+  4,

+  23,

+  62,

+  235,

+  174,

+  81,

+  101,

+  227,

+  233,

+  225,

+  142,

+  49,

+  47,

+  108,

+  99,

+  163,

+  90,

+  223,

+  205,

+  175,

+  110,

+  128,

+  158,

+  48,

+  142,

+  145,

+  145,

+  229,

+  229,

+  137,

+  30,

+  100,

+  231,

+  171,

+  171,

+  28,

+  244,

+  28,

+  204,

+  72,

+  190,

+  37,

+  123,

+  115,

+  239,

+  248,

+  55,

+  196,

+  243,

+  154,

+  45,

+  251,

+  139,

+  150,

+  251,

+  83,

+  47,

+  235,

+  96,

+  50,

+  171,

+  164,

+  225,

+  122,

+  78,

+  38,

+  229,

+  168,

+  189,

+  56,

+  20,

+  132,

+  208,

+  143,

+  118,

+  226,

+  144,

+  53,

+  42,

+  239,

+  97,

+  177,

+  254,

+  152,

+  227,

+  76,

+  241,

+  74,

+  165,

+  60,

+  133,

+  198,

+  73,

+  148,

+  24,

+  29,

+  10,

+  38,

+  37,

+  191,

+  156,

+  140,

+  134,

+  157,

+  210,

+  230,

+  173,

+  200,

+  55,

+  142,

+  50,

+  118,

+  74,

+  88,

+  127,

+  127,

+  212,

+  183,

+  75,

+  126,

+  32,

+  28,

+  202,

+  137,

+  111,

+  240,

+  197,

+  197,

+  77,

+  202,

+  43,

+  155,

+  228,

+  139,

+  3,

+  66,

+  236,

+  8,

+  212,

+  24,

+  9,

+  77,

+  197,

+  75,

+  16,

+  68,

+  242,

+  244,

+  188,

+  214,

+  96,

+  77,

+  147,

+  145,

+  120,

+  31,

+  83,

+  162,

+  82,

+  213,

+  111,

+  14,

+  182,

+  144,

+  111,

+  1,

+  90,

+  233,

+  64,

+  41,

+  189,

+  88,

+  81,

+  69,

+  65,

+  90,

+  93,

+  54,

+  121,

+  119,

+  175,

+  208,

+  148,

+  231,

+  225,

+  52,

+  120,

+  127,

+  89,

+  179,

+  213,

+  146,

+  250,

+  14,

+  1,

+  162,

+  181,

+  251,

+  78,

+  45,

+  255,

+  62,

+  65,

+  76,

+  103,

+  119,

+  99,

+  14,

+  208,

+  25,

+  128,

+  169,

+  176,

+  145,

+  69,

+  243,

+  37,

+  138,

+  13,

+  3,

+  31,

+  248,

+  246,

+  90,

+  119,

+  48,

+  252,

+  65,

+  19,

+  63,

+  198,

+  146,

+  68,

+  157,

+  14,

+  96,

+  152,

+  89,

+  29,

+  54,

+  179,

+  124,

+  212,

+  187,

+  133,

+  153,

+  69,

+  240,

+  207,

+  83,

+  177,

+  110,

+  228,

+  200,

+  35,

+  33,

+  44,

+  244,

+  245,

+  146,

+  242,

+  80,

+  183,

+  59,

+  227,

+  40,

+  106,

+  160,

+  34,

+  218,

+  56,

+  33,

+  108,

+  218,

+  238,

+  231,

+  196,

+  18,

+  169,

+  236,

+  115,

+  241,

+  177,

+  173,

+  207,

+  52,

+  84,

+  234,

+  228,

+  135,

+  140,

+  75,

+  179,

+  214,

+  32,

+  10,

+  76,

+  57,

+  17,

+  63,

+  206,

+  173,

+  28,

+  27,

+  31,

+  133,

+  53,

+  27,

+  205,

+  90,

+  253,

+  72,

+  111,

+  108,

+  201,

+  180,

+  81,

+  112,

+  148,

+  226,

+  41,

+  48,

+  19,

+  234,

+  242,

+  19,

+  101,

+  211,

+  201,

+  55,

+  239,

+  215,

+  86,

+  101,

+  167,

+  231,

+  85,

+  115,

+  62,

+  91,

+  52,

+  70,

+  73,

+  136,

+  9,

+  228,

+  3,

+  60,

+  226,

+  91,

+  113,

+  211,

+  10,

+  252,

+  204,

+  67,

+  106,

+  231,

+  12,

+  191,

+  136,

+  178,

+  183,

+  21,

+  140,

+  97,

+  155,

+  124,

+  124,

+  46,

+  177,

+  116,

+  183,

+  43,

+  189,

+  210,

+  19,

+  75,

+  126,

+  36,

+  106,

+  122,

+  65,

+  8,

+  163,

+  227,

+  232,

+  168,

+  188,

+  183,

+  250,

+  237,

+  57,

+  225,

+  211,

+  49,

+  241,

+  97,

+  152,

+  71,

+  7,

+  1,

+  126,

+  117,

+  216,

+  191,

+  14,

+  240,

+  43,

+  169,

+  221,

+  22,

+  209,

+  238,

+  67,

+  24,

+  234,

+  43,

+  246,

+  215,

+  173,

+  19,

+  224,

+  78,

+  56,

+  236,

+  69,

+  151,

+  161,

+  88,

+  130,

+  107,

+  33,

+  122,

+  175,

+  190,

+  47,

+  56,

+  90,

+  74,

+  163,

+  244,

+  197,

+  21,

+  162,

+  239,

+  213,

+  1,

+  212,

+  44,

+  113,

+  119,

+  253,

+  133,

+  133,

+  206,

+  224,

+  228,

+  35,

+  48,

+  0,

+  142,

+  47,

+  104,

+  216,

+  21,

+  171,

+  249,

+  227,

+  60,

+  186,

+  210,

+  31,

+  86,

+  151,

+  194,

+  63,

+  109,

+  133,

+  151,

+  72,

+  16,

+  207,

+  92,

+  61,

+  39,

+  90,

+  8,

+  140,

+  6,

+  218,

+  103,

+  8,

+  149,

+  137,

+  159,

+  31,

+  235,

+  75,

+  122,

+  209,

+  2,

+  136,

+  159,

+  83,

+  230,

+  128,

+  140,

+  130,

+  46,

+  129,

+  178,

+  67,

+  150,

+  131,

+  214,

+  246,

+  255,

+  26,

+  242,

+  140,

+  3,

+  148,

+  142,

+  211,

+  62,

+  233,

+  44,

+  127,

+  143,

+  26,

+  149,

+  39,

+  62,

+  153,

+  70,

+  173,

+  192,

+  130,

+  77,

+  190,

+  79,

+  242,

+  245,

+  77,

+  70,

+  247,

+  106,

+  192,

+  220,

+  3,

+  154,

+  124,

+  40,

+  185,

+  208,

+  219,

+  20,

+  182,

+  5,

+  130,

+  174,

+  203,

+  97,

+  138,

+  110,

+  198,

+  127,

+  20,

+  55,

+  223,

+  62,

+  92,

+  22,

+  15,

+  94,

+  239,

+  154,

+  72,

+  21,

+  104,

+  151,

+  197,

+  75,

+  120,

+  155,

+  112,

+  186,

+  117,

+  76,

+  3,

+  48,

+  99,

+  24,

+  178,

+  151,

+  175,

+  226,

+  126,

+  200,

+  98,

+  121,

+  130,

+  246,

+  127,

+  88,

+  183,

+  210,

+  34,

+  76,

+  122,

+  158,

+  142,

+  104,

+  171,

+  27,

+  98,

+  127,

+  86,

+  117,

+  143,

+  144,

+  25,

+  134,

+  137,

+  227,

+  213,

+  79,

+  108,

+  230,

+  88,

+  13,

+  21,

+  20,

+  177,

+  246,

+  52,

+  186,

+  8,

+  94,

+  0,

+  235,

+  137,

+  85,

+  172,

+  66,

+  163,

+  20,

+  99,

+  210,

+  193,

+  192,

+  155,

+  15,

+  88,

+  51,

+  41,

+  41,

+  232,

+  70,

+  190,

+  242,

+  160,

+  213,

+  122,

+  175,

+  162,

+  121,

+  150,

+  194,

+  105,

+  185,

+  22,

+  77,

+  221,

+  222,

+  190,

+  39,

+  191,

+  200,

+  45,

+  110,

+  151,

+  138,

+  108,

+  168,

+  68,

+  23,

+  149,

+  140,

+  157,

+  176,

+  160,

+  30,

+  243,

+  222,

+  233,

+  131,

+  17,

+  24,

+  177,

+  101,

+  43,

+  92,

+  245,

+  20,

+  153,

+  25,

+  123,

+  182,

+  187,

+  239,

+  168,

+  159,

+  140,

+  154,

+  68,

+  229,

+  191,

+  201,

+  136,

+  167,

+  209,

+  219,

+  211,

+  24,

+  12,

+  69,

+  115,

+  232,

+  212,

+  57,

+  31,

+  203,

+  43,

+  31,

+  189,

+  32,

+  176,

+  72,

+  113,

+  249,

+  8,

+  242,

+  46,

+  36,

+  223,

+  29,

+  108,

+  30,

+  59,

+  43,

+  70,

+  149,

+  27,

+  184,

+  153,

+  61,

+  205,

+  216,

+  98,

+  198,

+  251,

+  3,

+  88,

+  63,

+  103,

+  36,

+  16,

+  107,

+  80,

+  106,

+  113,

+  225,

+  84,

+  179,

+  111,

+  151,

+  68,

+  123,

+  188,

+  127,

+  58,

+  215,

+  178,

+  198,

+  62,

+  205,

+  101,

+  200,

+  14,

+  170,

+  42,

+  10,

+  227,

+  125,

+  125,

+  86,

+  42,

+  203,

+  162,

+  210,

+  52,

+  129,

+  250,

+  148,

+  201,

+  174,

+  72,

+  93,

+  185,

+  68,

+  254,

+  242,

+  93,

+  117,

+  111,

+  162,

+  41,

+  81,

+  201,

+  20,

+  237,

+  179,

+  70,

+  14,

+  39,

+  209,

+  15,

+  209,

+  241,

+  117,

+  201,

+  139,

+  155,

+  42,

+  55,

+  161,

+  3,

+  51,

+  106,

+  70,

+  68,

+  156,

+  238,

+  219,

+  98,

+  187,

+  33,

+  185,

+  15,

+  195,

+  70,

+  210,

+  87,

+  57,

+  218,

+  0,

+  200,

+  237,

+  180,

+  229,

+  30,

+  73,

+  199,

+  214,

+  150,

+  207,

+  93,

+  18,

+  231,

+  94,

+  208,

+  166,

+  244,

+  167,

+  87,

+  70,

+  89,

+  138,

+  34,

+  112,

+  142,

+  51,

+  133,

+  70,

+  155,

+  162,

+  156,

+  175,

+  208,

+  117,

+  72,

+  121,

+  7,

+  70,

+  213,

+  18,

+  177,

+  142,

+  1,

+  112,

+  193,

+  220,

+  159,

+  127,

+  4,

+  173,

+  37,

+  217,

+  57,

+  212,

+  108,

+  34,

+  227,

+  138,

+  187,

+  198,

+  100,

+  255,

+  200,

+  2,

+  217,

+  173,

+  143,

+  194,

+  191,

+  123,

+  125,

+  28,

+  53,

+  61,

+  204,

+  34,

+  70,

+  121,

+  208,

+  0,

+  143,

+  3,

+  112,

+  45,

+  28,

+  248,

+  112,

+  83,

+  218,

+  145,

+  224,

+  84,

+  87,

+  81,

+  132,

+  23,

+  209,

+  91,

+  151,

+  11,

+  146,

+  132,

+  79,

+  210,

+  234,

+  81,

+  51,

+  18,

+  142,

+  90,

+  201,

+  145,

+  239,

+  254,

+  120,

+  88,

+  191,

+  90,

+  118,

+  111,

+  162,

+  33,

+  62,

+  13,

+  51,

+  235,

+  153,

+  88,

+  245,

+  225,

+  181,

+  37,

+  69,

+  232,

+  92,

+  217,

+  0,

+  22,

+  212,

+  63,

+  42,

+  169,

+  105,

+  224,

+  220,

+  98,

+  122,

+  214,

+  153,

+  14,

+  90,

+  101,

+  110,

+  90,

+  50,

+  228,

+  215,

+  67,

+  204,

+  182,

+  165,

+  9,

+  236,

+  39,

+  193,

+  42,

+  137,

+  189,

+  42,

+  142,

+  46,

+  238,

+  216,

+  204,

+  215,

+  115,

+  251,

+  254,

+  72,

+  134,

+  210,

+  210,

+  149,

+  90,

+  163,

+  161,

+  107,

+  119,

+  9,

+  121,

+  242,

+  254,

+  33,

+  54,

+  185,

+  50,

+  204,

+  121,

+  44,

+  145,

+  120,

+  64,

+  8,

+  203,

+  65,

+  149,

+  16,

+  11,

+  101,

+  46,

+  199,

+  170,

+  163,

+  29,

+  168,

+  42,

+  218,

+  207,

+  182,

+  25,

+  13,

+  179,

+  143,

+  68,

+  234,

+  194,

+  75,

+  233,

+  144,

+  92,

+  139,

+  207,

+  236,

+  65,

+  181,

+  4,

+  117,

+  102,

+  80,

+  135,

+  141,

+  95,

+  73,

+  151,

+  78,

+  220,

+  112,

+  120,

+  5,

+  234,

+  183,

+  114,

+  31,

+  121,

+  226,

+  141,

+  209,

+  91,

+  229,

+  229,

+  127,

+  165,

+  167,

+  148,

+  92,

+  247,

+  99,

+  112,

+  147,

+  16,

+  59,

+  81,

+  14,

+  188,

+  143,

+  205,

+  211,

+  147,

+  119,

+  122,

+  188,

+  204,

+  33,

+  78,

+  200,

+  85,

+  100,

+  119,

+  236,

+  57,

+  243,

+  152,

+  122,

+  62,

+  43,

+  251,

+  116,

+  167,

+  8,

+  53,

+  107,

+  175,

+  204,

+  210,

+  186,

+  225,

+  137,

+  92,

+  135,

+  172,

+  238,

+  89,

+  0,

+  145,

+  86,

+  217,

+  166,

+  189,

+  174,

+  227,

+  108,

+  52,

+  216,

+  40,

+  229,

+  51,

+  158,

+  29,

+  133,

+  130,

+  146,

+  82,

+  185,

+  226,

+  47,

+  169,

+  247,

+  57,

+  55,

+  66,

+  72,

+  91,

+  123,

+  61,

+  92,

+  73,

+  7,

+  124,

+  63,

+  62,

+  70,

+  224,

+  178,

+  31,

+  72,

+  209,

+  99,

+  4,

+  103,

+  126,

+  222,

+  95,

+  11,

+  164,

+  148,

+  129,

+  246,

+  106,

+  209,

+  43,

+  186,

+  164,

+  211,

+  23,

+  55,

+  149,

+  224,

+  25,

+  3,

+  99,

+  67,

+  119,

+  63,

+  17,

+  97,

+  114,

+  239,

+  212,

+  187,

+  99,

+  39,

+  40,

+  31,

+  188,

+  252,

+  185,

+  180,

+  252,

+  211,

+  109,

+  108,

+  120,

+  236,

+  233,

+  134,

+  211,

+  71,

+  78,

+  37,

+  193,

+  132,

+  169,

+  229,

+  44,

+  131,

+  23,

+  216,

+  9,

+  221,

+  44,

+  149,

+  0,

+  122,

+  23,

+  74,

+  249,

+  116,

+  213,

+  102,

+  183,

+  134,

+  1,

+  201,

+  98,

+  163,

+  9,

+  1,

+  52,

+  44,

+  119,

+  248,

+  115,

+  8,

+  242,

+  104,

+  22,

+  155,

+  105,

+  46,

+  151,

+  19,

+  31,

+  77,

+  149,

+  127,

+  253,

+  254,

+  29,

+  12,

+  100,

+  196,

+  6,

+  248,

+  170,

+  165,

+  235,

+  149,

+  227,

+  24,

+  174,

+  226,

+  130,

+  129,

+  187,

+  142,

+  89,

+  89,

+  229,

+  63,

+  108,

+  90,

+  154,

+  239,

+  110,

+  155,

+  209,

+  203,

+  107,

+  143,

+  51,

+  107,

+  47,

+  44,

+  146,

+  3,

+  21,

+  102,

+  6,

+  177,

+  90,

+  105,

+  38,

+  254,

+  252,

+  171,

+  118,

+  248,

+  252,

+  228,

+  80,

+  153,

+  80,

+  84,

+  192,

+  66,

+  220,

+  129,

+  211,

+  162,

+  43,

+  187,

+  153,

+  177,

+  192,

+  130,

+  110,

+  8,

+  125,

+  228,

+  34,

+  81,

+  18,

+  221,

+  64,

+  73,

+  77,

+  53,

+  73,

+  151,

+  36,

+  203,

+  176,

+  249,

+  105,

+  144,

+  201,

+  135,

+  222,

+  155,

+  241,

+  132,

+  70,

+  176,

+  9,

+  86,

+  102,

+  35,

+  137,

+  124,

+  38,

+  83,

+  147,

+  51,

+  251,

+  169,

+  18,

+  245,

+  202,

+  65,

+  216,

+  117,

+  85,

+  184,

+  234,

+  210,

+  117,

+  45,

+  239,

+  131,

+  165,

+  64,

+  71,

+  60,

+  36,

+  239,

+  228,

+  167,

+  238,

+  94,

+  17,

+  235,

+  112,

+  72,

+  170,

+  129,

+  176,

+  107,

+  205,

+  253,

+  34,

+  173,

+  81,

+  48,

+  142,

+  94,

+  141,

+  3,

+  238,

+  139,

+  133,

+  102,

+  164,

+  22,

+  131,

+  62,

+  165,

+  18,

+  121,

+  135,

+  63,

+  66,

+  106,

+  103,

+  7,

+  209,

+  104,

+  123,

+  255,

+  219,

+  187,

+  104,

+  199,

+  198,

+  192,

+  130,

+  126,

+  69,

+  196,

+  117,

+  46,

+  109,

+  207,

+  212,

+  53,

+  163,

+  217,

+  27,

+  216,

+  79,

+  211,

+  33,

+  23,

+  154,

+  10,

+  49,

+  16,

+  96,

+  121,

+  230,

+  211,

+  103,

+  245,

+  181,

+  195,

+  186,

+  18,

+  248,

+  252,

+  77,

+  23,

+  49,

+  158,

+  211,

+  13,

+  160,

+  121,

+  244,

+  111,

+  219,

+  159,

+  10,

+  101,

+  232,

+  157,

+  107,

+  243,

+  175,

+  168,

+  23,

+  20,

+  80,

+  65,

+  39,

+  36,

+  19,

+  190,

+  140,

+  73,

+  181,

+  185,

+  72,

+  229,

+  68,

+  28,

+  5,

+  107,

+  160,

+  80,

+  35,

+  192,

+  44,

+  50,

+  32,

+  15,

+  203,

+  126,

+  223,

+  18,

+  20,

+  101,

+  238,

+  108,

+  238,

+  170,

+  58,

+  108,

+  59,

+  19,

+  54,

+  217,

+  109,

+  105,

+  162,

+  253,

+  228,

+  200,

+  20,

+  234,

+  51,

+  178,

+  196,

+  84,

+  24,

+  213,

+  159,

+  143,

+  145,

+  56,

+  230,

+  238,

+  169,

+  90,

+  14,

+  254,

+  227,

+  216,

+  160,

+  180,

+  113,

+  221,

+  36,

+  144,

+  89,

+  221,

+  223,

+  172,

+  36,

+  152,

+  115,

+  91,

+  194,

+  64,

+  29,

+  73,

+  249,

+  25,

+  28,

+  15,

+  203,

+  90,

+  172,

+  34,

+  225,

+  32,

+  123,

+  132,

+  134,

+  125,

+  75,

+  127,

+  135,

+  122,

+  61,

+  110,

+  161,

+  10,

+  45,

+  139,

+  128,

+  60,

+  42,

+  56,

+  25,

+  146,

+  120,

+  170,

+  208,

+  161,

+  246,

+  54,

+  245,

+  241,

+  176,

+  167,

+  38,

+  40,

+  23,

+  35,

+  24,

+  238,

+  94,

+  55,

+  118,

+  121,

+  200,

+  133,

+  167,

+  109,

+  188,

+  100,

+  63,

+  236,

+  12,

+  227,

+  186,

+  63,

+  244,

+  126,

+  112,

+  0,

+  205,

+  60,

+  144,

+  107,

+  142,

+  226,

+  86,

+  194,

+  108,

+  151,

+  125,

+  236,

+  126,

+  39,

+  243,

+  62,

+  156,

+  84,

+  116,

+  133,

+  16,

+  83,

+  87,

+  159,

+  39,

+  35,

+  174,

+  37,

+  198,

+  112,

+  44,

+  215,

+  205,

+  163,

+  122,

+  126,

+  208,

+  23,

+  220,

+  148,

+  117,

+  255,

+  118,

+  207,

+  103,

+  150,

+  229,

+  12,

+  251,

+  87,

+  16,

+  87,

+  89,

+  167,

+  80,

+  107,

+  213,

+  11,

+  88,

+  93,

+  57,

+  30,

+  39,

+  153,

+  179,

+  223,

+  249,

+  71,

+  86,

+  33,

+  222,

+  58,

+  17,

+  220,

+  194,

+  98,

+  60,

+  97,

+  34,

+  149,

+  13,

+  225,

+  118,

+  171,

+  39,

+  206,

+  62,

+  167,

+  164,

+  191,

+  238,

+  74,

+  22,

+  149,

+  57,

+  118,

+  48,

+  43,

+  191,

+  241,

+  4,

+  220,

+  161,

+  87,

+  227,

+  221,

+  225,

+  118,

+  52,

+  204,

+  6,

+  25,

+  181,

+  117,

+  123,

+  5,

+  53,

+  84,

+  190,

+  100,

+  55,

+  214,

+  202,

+  75,

+  252,

+  232,

+  184,

+  72,

+  142,

+  42,

+  231,

+  158,

+  97,

+  48,

+  33,

+  105,

+  15,

+  208,

+  197,

+  155,

+  17,

+  56,

+  150,

+  254,

+  140,

+  28,

+  184,

+  232,

+  180,

+  129,

+  174,

+  92,

+  114,

+  23,

+  19,

+  234,

+  216,

+  146,

+  223,

+  166,

+  231,

+  226,

+  141,

+  44,

+  205,

+  34,

+  118,

+  41,

+  108,

+  121,

+  220,

+  81,

+  23,

+  251,

+  87,

+  110,

+  28,

+  16,

+  195,

+  165,

+  16,

+  73,

+  60,

+  45,

+  24,

+  102,

+  95,

+  130,

+  197,

+  236,

+  3,

+  48,

+  101,

+  195,

+  75,

+  168,

+  242,

+  207,

+  64,

+  12,

+  145,

+  145,

+  193,

+  185,

+  136,

+  148,

+  183,

+  29,

+  233,

+  226,

+  233,

+  80,

+  197,

+  189,

+  71,

+  77,

+  206,

+  254,

+  144,

+  74,

+  90,

+  235,

+  63,

+  155,

+  103,

+  73,

+  33,

+  159,

+  2,

+  162,

+  64,

+  138,

+  19,

+  47,

+  158,

+  70,

+  31,

+  3,

+  179,

+  185,

+  245,

+  102,

+  225,

+  57,

+  98,

+  130,

+  86,

+  84,

+  232,

+  175,

+  196,

+  62,

+  163,

+  205,

+  92,

+  198,

+  53,

+  84,

+  78,

+  141,

+  212,

+  97,

+  52,

+  192,

+  16,

+  125,

+  158,

+  209,

+  32,

+  71,

+  68,

+  178,

+  171,

+  193,

+  143,

+  131,

+  125,

+  155,

+  215,

+  1,

+  177,

+  117,

+  62,

+  82,

+  186,

+  244,

+  30,

+  71,

+  94,

+  121,

+  65,

+  50,

+  129,

+  252,

+  81,

+  193,

+  64,

+  228,

+  182,

+  113,

+  66,

+  164,

+  41,

+  192,

+  52,

+  12,

+  226,

+  173,

+  110,

+  215,

+  189,

+  118,

+  40,

+  113,

+  207,

+  88,

+  47,

+  217,

+  65,

+  237,

+  116,

+  240,

+  173,

+  79,

+  145,

+  103,

+  38,

+  38,

+  111,

+  63,

+  108,

+  215,

+  161,

+  181,

+  131,

+  161,

+  50,

+  117,

+  249,

+  31,

+  107,

+  34,

+  136,

+  237,

+  149,

+  89,

+  222,

+  18,

+  23,

+  127,

+  77,

+  156,

+  40,

+  184,

+  235,

+  45,

+  242,

+  157,

+  188,

+  169,

+  148,

+  200,

+  148,

+  194,

+  52,

+  85,

+  209,

+  121,

+  56,

+  136,

+  199,

+  225,

+  105,

+  77,

+  84,

+  24,

+  3,

+  170,

+  124,

+  40,

+  235,

+  80,

+  187,

+  85,

+  129,

+  102,

+  154,

+  33,

+  250,

+  59,

+  0,

+  73,

+  70,

+  145,

+  87,

+  103,

+  49,

+  64,

+  213,

+  156,

+  217,

+  1,

+  247,

+  241,

+  151,

+  183,

+  120,

+  85,

+  194,

+  142,

+  202,

+  134,

+  187,

+  241,

+  18,

+  215,

+  108,

+  111,

+  199,

+  159,

+  83,

+  206,

+  56,

+  69,

+  3,

+  23,

+  42,

+  26,

+  13,

+  227,

+  239,

+  47,

+  89,

+  147,

+  200,

+  82,

+  0,

+  175,

+  143,

+  90,

+  98,

+  64,

+  204,

+  157,

+  255,

+  170,

+  45,

+  152,

+  146,

+  99,

+  195,

+  133,

+  12,

+  249,

+  158,

+  78,

+  116,

+  109,

+  224,

+  72,

+  69,

+  128,

+  50,

+  63,

+  92,

+  208,

+  233,

+  128,

+  59,

+  58,

+  223,

+  0,

+  212,

+  103,

+  2,

+  70,

+  20,

+  99,

+  129,

+  107,

+  159,

+  223,

+  156,

+  66,

+  8,

+  17,

+  78,

+  237,

+  34,

+  141,

+  188,

+  143,

+  228,

+  39,

+  91,

+  152,

+  83,

+  182,

+  38,

+  104,

+  192,

+  167,

+  35,

+  34,

+  114,

+  87,

+  192,

+  194,

+  171,

+  158,

+  237,

+  176,

+  201,

+  223,

+  14,

+  154,

+  82,

+  89,

+  244,

+  49,

+  185,

+  172,

+  63,

+  89,

+  131,

+  58,

+  115,

+  195,

+  34,

+  43,

+  18,

+  39,

+  247,

+  63,

+  195,

+  172,

+  38,

+  213,

+  141,

+  171,

+  175,

+  89,

+  111,

+  239,

+  180,

+  35,

+  160,

+  250,

+  121,

+  252,

+  138,

+  31,

+  6,

+  253,

+  239,

+  225,

+  218,

+  156,

+  161,

+  170,

+  169,

+  79,

+  95,

+  109,

+  221,

+  147,

+  156,

+  253,

+  58,

+  191,

+  15,

+  194,

+  80,

+  201,

+  181,

+  74,

+  225,

+  182,

+  218,

+  80,

+  48,

+  254,

+  168,

+  131,

+  84,

+  102,

+  153,

+  2,

+  162,

+  73,

+  243,

+  176,

+  169,

+  223,

+  195,

+  240,

+  82,

+  195,

+  91,

+  137,

+  156,

+  176,

+  125,

+  75,

+  25,

+  211,

+  215,

+  128,

+  194,

+  138,

+  138,

+  99,

+  33,

+  129,

+  56,

+  48,

+  99,

+  245,

+  221,

+  228,

+  148,

+  162,

+  15,

+  203,

+  206,

+  60,

+  69,

+  118,

+  3,

+  97,

+  208,

+  235,

+  150,

+  13,

+  178,

+  97,

+  213,

+  15,

+  82,

+  12,

+  176,

+  58,

+  33,

+  28,

+  163,

+  110,

+  189,

+  131,

+  38,

+  25,

+  184,

+  74,

+  118,

+  255,

+  101,

+  234,

+  186,

+  21,

+  22,

+  186,

+  220,

+  0,

+  91,

+  150,

+  110,

+  121,

+  170,

+  68,

+  244,

+  129,

+  189,

+  138,

+  211,

+  140,

+  110,

+  174,

+  122,

+  87,

+  160,

+  50,

+  117,

+  186,

+  115,

+  169,

+  48,

+  86,

+  44,

+  215,

+  80,

+  141,

+  255,

+  223,

+  78,

+  26,

+  253,

+  241,

+  119,

+  70,

+  227,

+  102,

+  196,

+  159,

+  36,

+  118,

+  137,

+  187,

+  239,

+  48,

+  44,

+  186,

+  206,

+  147,

+  56,

+  38,

+  74,

+  80,

+  101,

+  148,

+  139,

+  8,

+  29,

+  192,

+  227,

+  161,

+  46,

+  29,

+  170,

+  188,

+  58,

+  144,

+  227,

+  97,

+  218,

+  211,

+  210,

+  26,

+  105,

+  105,

+  18,

+  170,

+  172,

+  227,

+  243,

+  10,

+  8,

+  226,

+  36,

+  39,

+  34,

+  129,

+  71,

+  97,

+  240,

+  6,

+  216,

+  50,

+  100,

+  26,

+  241,

+  208,

+  163,

+  0,

+  68,

+  96,

+  103,

+  220,

+  190,

+  244,

+  50,

+  234,

+  170,

+  42,

+  98,

+  253,

+  148,

+  190,

+  62,

+  40,

+  211,

+  164,

+  60,

+  137,

+  10,

+  25,

+  229,

+  219,

+  244,

+  195,

+  90,

+  59,

+  196,

+  159,

+  216,

+  110,

+  218,

+  125,

+  247,

+  246,

+  212,

+  23,

+  167,

+  115,

+  144,

+  105,

+  32,

+  23,

+  7,

+  194,

+  72,

+  132,

+  90,

+  246,

+  15,

+  81,

+  228,

+  41,

+  153,

+  187,

+  30,

+  129,

+  70,

+  98,

+  183,

+  203,

+  71,

+  28,

+  244,

+  200,

+  78,

+  185,

+  108,

+  110,

+  59,

+  69,

+  223,

+  117,

+  119,

+  6,

+  189,

+  57,

+  179,

+  180,

+  84,

+  164,

+  11,

+  139,

+  200,

+  81,

+  78,

+  168,

+  168,

+  180,

+  26,

+  208,

+  93,

+  89,

+  214,

+  29,

+  34,

+  41,

+  156,

+  216,

+  24,

+  128,

+  169,

+  99,

+  131,

+  196,

+  82,

+  136,

+  165,

+  25,

+  96,

+  111,

+  226,

+  221,

+  146,

+  135,

+  1,

+  246,

+  51,

+  110,

+  211,

+  162,

+  88,

+  51,

+  243,

+  129,

+  103,

+  92,

+  160,

+  70,

+  251,

+  234,

+  177,

+  80,

+  220,

+  155,

+  236,

+  18,

+  183,

+  2,

+  178,

+  233,

+  200,

+  43,

+  215,

+  99,

+  161,

+  29,

+  62,

+  160,

+  164,

+  164,

+  211,

+  171,

+  122,

+  245,

+  152,

+  53,

+  206,

+  181,

+  21,

+  183,

+  252,

+  54,

+  99,

+  106,

+  55,

+  13,

+  217,

+  74,

+  7,

+  239,

+  161,

+  184,

+  19,

+  40,

+  119,

+  115,

+  0,

+  16,

+  89,

+  182,

+  186,

+  197,

+  47,

+  233,

+  122,

+  140,

+  184,

+  53,

+  174,

+  249,

+  18,

+  243,

+  162,

+  141,

+  221,

+  209,

+  186,

+  160,

+  176,

+  248,

+  27,

+  163,

+  253,

+  178,

+  34,

+  124,

+  84,

+  30,

+  57,

+  250,

+  103,

+  155,

+  53,

+  235,

+  112,

+  132,

+  250,

+  252,

+  91,

+  104,

+  176,

+  216,

+  41,

+  87,

+  162,

+  228,

+  223,

+  91,

+  156,

+  165,

+  15,

+  107,

+  159,

+  40,

+  70,

+  183,

+  183,

+  248,

+  96,

+  190,

+  242,

+  17,

+  227,

+  205,

+  169,

+  212,

+  158,

+  255,

+  206,

+  31,

+  135,

+  95,

+  189,

+  87,

+  200,

+  77,

+  85,

+  219,

+  190,

+  15,

+  221,

+  167,

+  4,

+  60,

+  122,

+  10,

+  8,

+  129,

+  43,

+  222,

+  144,

+  94,

+  175,

+  161,

+  195,

+  237,

+  130,

+  179,

+  84,

+  194,

+  66,

+  155,

+  223,

+  98,

+  59,

+  17,

+  96,

+  191,

+  3,

+  90,

+  150,

+  252,

+  193,

+  64,

+  26,

+  214,

+  245,

+  70,

+  71,

+  65,

+  75,

+  217,

+  178,

+  85,

+  208,

+  12,

+  159,

+  172,

+  231,

+  232,

+  150,

+  222,

+  225,

+  17,

+  26,

+  246,

+  113,

+  223,

+  122,

+  24,

+  123,

+  171,

+  138,

+  170,

+  102,

+  59,

+  188,

+  246,

+  86,

+  202,

+  39,

+  190,

+  134,

+  232,

+  30,

+  61,

+  226,

+  50,

+  110,

+  160,

+  185,

+  46,

+  32,

+  226,

+  175,

+  209,

+  72,

+  242,

+  82,

+  195,

+  118,

+  230,

+  5,

+  248,

+  29,

+  57,

+  166,

+  200,

+  173,

+  174,

+  234,

+  206,

+  168,

+  178,

+  213,

+  122,

+  45,

+  9,

+  175,

+  232,

+  224,

+  231,

+  21,

+  46,

+  132,

+  189,

+  35,

+  106,

+  31,

+  85,

+  195,

+  15,

+  121,

+  158,

+  164,

+  139,

+  79,

+  217,

+  248,

+  27,

+  199,

+  33,

+  195,

+  40,

+  65,

+  143,

+  153,

+  10,

+  25,

+  211,

+  122,

+  253,

+  224,

+  76,

+  207,

+  190,

+  109,

+  61,

+  104,

+  127,

+  92,

+  186,

+  255,

+  128,

+  72,

+  100,

+  116,

+  192,

+  237,

+  255,

+  169,

+  103,

+  17,

+  149,

+  138,

+  79,

+  252,

+  4,

+  62,

+  185,

+  77,

+  110,

+  62,

+  154,

+  31,

+  178,

+  84,

+  228,

+  219,

+  94,

+  127,

+  134,

+  88,

+  170,

+  144,

+  195,

+  131,

+  245,

+  126,

+  244,

+  238,

+  127,

+  141,

+  243,

+  246,

+  226,

+  139,

+  246,

+  15,

+  255,

+  220,

+  118,

+  68,

+  129,

+  53,

+  251,

+  79,

+  116,

+  92,

+  81,

+  33,

+  115,

+  169,

+  244,

+  255,

+  87,

+  222,

+  184,

+  161,

+  125,

+  198,

+  197,

+  112,

+  149,

+  184,

+  156,

+  61,

+  243,

+  221,

+  84,

+  243,

+  19,

+  141,

+  177,

+  173,

+  172,

+  68,

+  113,

+  241,

+  240,

+  12,

+  10,

+  211,

+  224,

+  158,

+  150,

+  14,

+  191,

+  181,

+  151,

+  212,

+  200,

+  215,

+  44,

+  248,

+  127,

+  225,

+  247,

+  82,

+  58,

+  137,

+  39,

+  115,

+  171,

+  248,

+  250,

+  255,

+  75,

+  185,

+  67,

+  94,

+  202,

+  122,

+  7,

+  30,

+  153,

+  140,

+  248,

+  123,

+  204,

+  26,

+  106,

+  28,

+  89,

+  177,

+  249,

+  163,

+  202,

+  159,

+  69,

+  213,

+  53,

+  189,

+  224,

+  43,

+  103,

+  78,

+  145,

+  34,

+  148,

+  214,

+  163,

+  204,

+  159,

+  219,

+  191,

+  89,

+  199,

+  78,

+  0,

+  46,

+  85,

+  169,

+  215,

+  46,

+  106,

+  36,

+  114,

+  20,

+  28,

+  163,

+  229,

+  146,

+  0,

+  89,

+  73,

+  75,

+  204,

+  255,

+  82,

+  142,

+  239,

+  211,

+  225,

+  231,

+  5,

+  94,

+  139,

+  252,

+  23,

+  154,

+  227,

+  68,

+  207,

+  205,

+  60,

+  153,

+  101,

+  89,

+  247,

+  235,

+  66,

+  230,

+  120,

+  191,

+  139,

+  33,

+  231,

+  211,

+  126,

+  95,

+  60,

+  137,

+  28,

+  176,

+  42,

+  114,

+  185,

+  165,

+  55,

+  232,

+  236,

+  59,

+  238,

+  41,

+  197,

+  16,

+  144,

+  39,

+  7,

+  154,

+  218,

+  184,

+  243,

+  31,

+  80,

+  227,

+  34,

+  116,

+  248,

+  90,

+  231,

+  163,

+  159,

+  255,

+  5,

+  233,

+  134,

+  90,

+  94,

+  174,

+  248,

+  59,

+  91,

+  79,

+  96,

+  238,

+  208,

+  218,

+  57,

+  107,

+  225,

+  85,

+  146,

+  82,

+  111,

+  35,

+  148,

+  152,

+  59,

+  73,

+  233,

+  186,

+  168,

+  140,

+  161,

+  106,

+  92,

+  173,

+  254,

+  230,

+  67,

+  114,

+  35,

+  139,

+  228,

+  255,

+  81,

+  149,

+  52,

+  41,

+  93,

+  210,

+  187,

+  37,

+  14,

+  160,

+  154,

+  180,

+  9,

+  200,

+  238,

+  221,

+  1,

+  252,

+  59,

+  58,

+  26,

+  134,

+  234,

+  213,

+  170,

+  118,

+  81,

+  255,

+  3,

+  80,

+  75,

+  3,

+  4,

+  20,

+  0,

+  0,

+  8,

+  8,

+  0,

+  131,

+  182,

+  42,

+  68,

+  158,

+  64,

+  172,

+  29,

+  120,

+  6,

+  0,

+  0,

+  95,

+  61,

+  0,

+  0,

+  12,

+  0,

+  0,

+  0,

+  97,

+  114,

+  105,

+  97,

+  108,

+  95,

+  50,

+  52,

+  46,

+  102,

+  110,

+  116,

+  189,

+  91,

+  219,

+  110,

+  219,

+  72,

+  12,

+  125,

+  239,

+  87,

+  8,

+  126,

+  110,

+  55,

+  195,

+  185,

+  15,

+  144,

+  20,

+  216,

+  183,

+  254,

+  193,

+  62,

+  46,

+  180,

+  190,

+  36,

+  66,

+  29,

+  185,

+  136,

+  221,

+  221,

+  237,

+  126,

+  253,

+  74,

+  195,

+  81,

+  34,

+  89,

+  29,

+  149,

+  148,

+  28,

+  161,

+  64,

+  42,

+  59,

+  62,

+  62,

+  67,

+  14,

+  121,

+  72,

+  113,

+  148,

+  251,

+  195,

+  169,

+  190,

+  124,

+  254,

+  80,

+  20,

+  247,

+  85,

+  125,

+  56,

+  21,

+  135,

+  114,

+  187,

+  127,

+  216,

+  252,

+  254,

+  82,

+  149,

+  199,

+  77,

+  113,

+  174,

+  254,

+  107,

+  94,

+  72,

+  189,

+  41,

+  254,

+  58,

+  29,

+  119,

+  15,

+  27,

+  177,

+  41,

+  170,

+  75,

+  121,

+  172,

+  182,

+  241,

+  114,

+  251,

+  84,

+  190,

+  156,

+  247,

+  151,

+  135,

+  205,

+  166,

+  248,

+  94,

+  87,

+  219,

+  211,

+  110,

+  223,

+  94,

+  158,

+  47,

+  47,

+  251,

+  203,

+  246,

+  233,

+  203,

+  195,

+  6,

+  68,

+  243,

+  161,

+  243,

+  243,

+  233,

+  116,

+  121,

+  106,

+  94,

+  108,

+  138,

+  178,

+  140,

+  255,

+  125,

+  43,

+  119,

+  187,

+  170,

+  126,

+  108,

+  190,

+  247,

+  99,

+  252,

+  215,

+  124,

+  230,

+  91,

+  185,

+  141,

+  239,

+  136,

+  143,

+  13,

+  226,

+  244,

+  253,

+  114,

+  172,

+  234,

+  125,

+  75,

+  113,

+  23,

+  215,

+  181,

+  61,

+  61,

+  63,

+  159,

+  234,

+  162,

+  125,

+  243,

+  203,

+  190,

+  122,

+  124,

+  106,

+  24,

+  165,

+  111,

+  150,

+  84,

+  158,

+  219,

+  197,

+  181,

+  248,

+  109,

+  121,

+  220,

+  255,

+  209,

+  124,

+  57,

+  248,

+  238,

+  85,

+  67,

+  47,

+  93,

+  203,

+  245,

+  184,

+  63,

+  39,

+  214,

+  237,

+  215,

+  253,

+  238,

+  237,

+  75,

+  227,

+  111,

+  218,

+  171,

+  116,

+  93,

+  84,

+  104,

+  223,

+  161,

+  58,

+  54,

+  223,

+  90,

+  182,

+  246,

+  255,

+  41,

+  245,

+  111,

+  223,

+  234,

+  199,

+  4,

+  184,

+  123,

+  69,

+  220,

+  71,

+  195,

+  139,

+  237,

+  233,

+  123,

+  221,

+  44,

+  37,

+  192,

+  38,

+  125,

+  77,

+  251,

+  118,

+  252,

+  154,

+  208,

+  48,

+  255,

+  219,

+  44,

+  96,

+  83,

+  252,

+  136,

+  63,

+  255,

+  169,

+  118,

+  209,

+  5,

+  205,

+  229,

+  83,

+  50,

+  0,

+  84,

+  243,

+  145,

+  211,

+  225,

+  16,

+  253,

+  215,

+  44,

+  239,

+  71,

+  119,

+  109,

+  155,

+  247,

+  203,

+  221,

+  223,

+  101,

+  221,

+  110,

+  67,

+  251,

+  169,

+  150,

+  54,

+  185,

+  187,

+  62,

+  54,

+  111,

+  25,

+  92,

+  207,

+  128,

+  207,

+  71,

+  62,

+  176,

+  215,

+  132,

+  208,

+  35,

+  244,

+  61,

+  66,

+  217,

+  35,

+  148,

+  115,

+  8,

+  3,

+  26,

+  24,

+  166,

+  8,

+  105,

+  22,

+  74,

+  18,

+  97,

+  12,

+  165,

+  134,

+  81,

+  75,

+  170,

+  137,

+  176,

+  208,

+  68,

+  16,

+  16,

+  25,

+  141,

+  89,

+  107,

+  23,

+  65,

+  200,

+  200,

+  104,

+  175,

+  189,

+  234,

+  51,

+  38,

+  138,

+  30,

+  33,

+  244,

+  9,

+  29,

+  145,

+  79,

+  69,

+  62,

+  23,

+  230,

+  248,

+  116,

+  158,

+  133,

+  58,

+  50,

+  6,

+  185,

+  86,

+  160,

+  130,

+  48,

+  152,

+  26,

+  226,

+  122,

+  27,

+  37,

+  151,

+  209,

+  16,

+  9,

+  109,

+  34,

+  188,

+  246,

+  170,

+  121,

+  35,

+  148,

+  253,

+  176,

+  249,

+  4,

+  75,

+  25,

+  81,

+  109,

+  96,

+  156,

+  254,

+  130,

+  237,

+  85,

+  106,

+  54,

+  38,

+  193,

+  105,

+  101,

+  120,

+  29,

+  175,

+  162,

+  224,

+  128,

+  26,

+  69,

+  142,

+  203,

+  100,

+  163,

+  204,

+  197,

+  170,

+  20,

+  52,

+  74,

+  64,

+  197,

+  1,

+  3,

+  83,

+  110,

+  37,

+  81,

+  82,

+  131,

+  21,

+  32,

+  233,

+  184,

+  90,

+  77,

+  115,

+  0,

+  53,

+  7,

+  156,

+  155,

+  147,

+  146,

+  243,

+  40,

+  81,

+  118,

+  32,

+  136,

+  213,

+  116,

+  7,

+  80,

+  119,

+  164,

+  184,

+  118,

+  44,

+  59,

+  122,

+  60,

+  145,

+  16,

+  101,

+  71,

+  130,

+  92,

+  173,

+  66,

+  2,

+  10,

+  143,

+  148,

+  215,

+  74,

+  103,

+  123,

+  140,

+  46,

+  83,

+  62,

+  228,

+  140,

+  242,

+  1,

+  169,

+  203,

+  81,

+  106,

+  189,

+  4,

+  65,

+  221,

+  145,

+  154,

+  92,

+  148,

+  197,

+  98,

+  183,

+  166,

+  86,

+  199,

+  4,

+  170,

+  242,

+  228,

+  41,

+  137,

+  142,

+  149,

+  168,

+  60,

+  210,

+  249,

+  213,

+  172,

+  148,

+  144,

+  26,

+  186,

+  201,

+  158,

+  213,

+  223,

+  148,

+  18,

+  149,

+  71,

+  9,

+  75,

+  77,

+  145,

+  165,

+  148,

+  22,

+  147,

+  82,

+  193,

+  104,

+  43,

+  45,

+  193,

+  200,

+  97,

+  161,

+  180,

+  52,

+  70,

+  204,

+  73,

+  165,

+  70,

+  234,

+  170,

+  216,

+  165,

+  153,

+  200,

+  136,

+  73,

+  169,

+  140,

+  164,

+  218,

+  8,

+  185,

+  46,

+  146,

+  24,

+  174,

+  22,

+  115,

+  82,

+  185,

+  145,

+  156,

+  27,

+  182,

+  141,

+  68,

+  70,

+  76,

+  73,

+  229,

+  87,

+  243,

+  170,

+  75,

+  119,

+  31,

+  130,

+  156,

+  30,

+  121,

+  70,

+  90,

+  199,

+  227,

+  48,

+  33,

+  245,

+  184,

+  169,

+  227,

+  239,

+  99,

+  160,

+  49,

+  98,

+  62,

+  106,

+  165,

+  175,

+  25,

+  245,

+  59,

+  237,

+  163,

+  195,

+  70,

+  64,

+  155,

+  235,

+  200,

+  97,

+  111,

+  35,

+  145,

+  79,

+  39,

+  62,

+  67,

+  109,

+  148,

+  97,

+  97,

+  163,

+  236,

+  80,

+  113,

+  180,

+  117,

+  203,

+  125,

+  74,

+  140,

+  84,

+  84,

+  28,

+  237,

+  213,

+  90,

+  183,

+  88,

+  14,

+  21,

+  71,

+  7,

+  59,

+  85,

+  32,

+  73,

+  140,

+  196,

+  214,

+  220,

+  161,

+  226,

+  24,

+  48,

+  171,

+  69,

+  42,

+  42,

+  142,

+  81,

+  64,

+  181,

+  113,

+  105,

+  54,

+  122,

+  145,

+  166,

+  15,

+  98,

+  45,

+  141,

+  243,

+  105,

+  222,

+  97,

+  205,

+  148,

+  141,

+  225,

+  150,

+  54,

+  162,

+  226,

+  24,

+  175,

+  215,

+  170,

+  28,

+  30,

+  21,

+  199,

+  10,

+  160,

+  70,

+  78,

+  222,

+  70,

+  162,

+  87,

+  81,

+  115,

+  44,

+  184,

+  57,

+  140,

+  115,

+  42,

+  135,

+  71,

+  205,

+  177,

+  227,

+  182,

+  252,

+  189,

+  178,

+  195,

+  163,

+  230,

+  88,

+  189,

+  90,

+  95,

+  229,

+  81,

+  115,

+  236,

+  72,

+  87,

+  165,

+  228,

+  50,

+  74,

+  154,

+  202,

+  121,

+  159,

+  102,

+  115,

+  176,

+  154,

+  141,

+  168,

+  57,

+  78,

+  172,

+  230,

+  213,

+  128,

+  154,

+  227,

+  36,

+  57,

+  86,

+  197,

+  194,

+  88,

+  85,

+  105,

+  2,

+  169,

+  213,

+  58,

+  29,

+  128,

+  215,

+  169,

+  147,

+  115,

+  122,

+  52,

+  185,

+  98,

+  83,

+  74,

+  154,

+  87,

+  77,

+  218,

+  71,

+  55,

+  101,

+  163,

+  165,

+  220,

+  37,

+  211,

+  108,

+  84,

+  46,

+  241,

+  141,

+  238,

+  30,

+  3,

+  87,

+  227,

+  36,

+  208,

+  44,

+  244,

+  105,

+  142,

+  28,

+  38,

+  44,

+  84,

+  183,

+  179,

+  208,

+  98,

+  212,

+  120,

+  161,

+  231,

+  12,

+  144,

+  96,

+  70,

+  143,

+  163,

+  177,

+  82,

+  249,

+  145,

+  138,

+  247,

+  70,

+  243,

+  36,

+  62,

+  90,

+  97,

+  212,

+  24,

+  164,

+  126,

+  148,

+  136,

+  54,

+  51,

+  67,

+  206,

+  242,

+  209,

+  198,

+  85,

+  26,

+  75,

+  191,

+  87,

+  102,

+  29,

+  190,

+  128,

+  37,

+  202,

+  235,

+  169,

+  18,

+  37,

+  115,

+  58,

+  51,

+  167,

+  73,

+  213,

+  41,

+  100,

+  198,

+  83,

+  156,

+  126,

+  193,

+  144,

+  25,

+  19,

+  205,

+  128,

+  81,

+  211,

+  24,

+  147,

+  141,

+  110,

+  98,

+  228,

+  152,

+  227,

+  131,

+  25,

+  62,

+  181,

+  105,

+  15,

+  253,

+  212,

+  45,

+  106,

+  46,

+  70,

+  221,

+  28,

+  3,

+  177,

+  234,

+  251,

+  81,

+  223,

+  223,

+  203,

+  250,

+  92,

+  210,

+  195,

+  140,

+  172,

+  215,

+  233,

+  236,

+  104,

+  212,

+  187,

+  245,

+  248,

+  236,

+  45,

+  249,

+  92,

+  226,

+  179,

+  19,

+  51,

+  227,

+  91,

+  30,

+  199,

+  201,

+  100,

+  32,

+  76,

+  28,

+  85,

+  201,

+  172,

+  71,

+  251,

+  132,

+  180,

+  194,

+  164,

+  58,

+  190,

+  144,

+  55,

+  208,

+  82,

+  26,

+  83,

+  154,

+  168,

+  169,

+  144,

+  206,

+  254,

+  60,

+  109,

+  255,

+  22,

+  30,

+  139,

+  217,

+  100,

+  221,

+  168,

+  13,

+  238,

+  23,

+  122,

+  154,

+  168,

+  73,

+  90,

+  66,

+  40,

+  204,

+  248,

+  96,

+  60,

+  245,

+  150,

+  77,

+  44,

+  44,

+  75,

+  10,

+  83,

+  48,

+  184,

+  169,

+  243,

+  34,

+  153,

+  83,

+  25,

+  49,

+  231,

+  224,

+  63,

+  121,

+  117,

+  60,

+  122,

+  235,

+  143,

+  80,

+  4,

+  169,

+  244,

+  210,

+  154,

+  11,

+  133,

+  205,

+  69,

+  24,

+  53,

+  23,

+  217,

+  155,

+  196,

+  165,

+  183,

+  108,

+  32,

+  211,

+  1,

+  149,

+  128,

+  137,

+  212,

+  191,

+  101,

+  61,

+  4,

+  217,

+  157,

+  82,

+  143,

+  14,

+  111,

+  222,

+  137,

+  49,

+  164,

+  147,

+  70,

+  49,

+  154,

+  246,

+  153,

+  76,

+  228,

+  44,

+  236,

+  188,

+  67,

+  231,

+  83,

+  13,

+  68,

+  194,

+  133,

+  199,

+  83,

+  74,

+  118,

+  132,

+  215,

+  233,

+  216,

+  139,

+  84,

+  145,

+  75,

+  198,

+  48,

+  163,

+  94,

+  248,

+  28,

+  97,

+  118,

+  72,

+  188,

+  244,

+  25,

+  21,

+  157,

+  78,

+  197,

+  133,

+  149,

+  196,

+  26,

+  165,

+  22,

+  50,

+  154,

+  116,

+  40,

+  46,

+  28,

+  172,

+  101,

+  164,

+  233,

+  66,

+  213,

+  155,

+  213,

+  40,

+  187,

+  216,

+  9,

+  97,

+  206,

+  113,

+  216,

+  44,

+  202,

+  148,

+  31,

+  241,

+  116,

+  124,

+  37,

+  43,

+  117,

+  162,

+  28,

+  223,

+  239,

+  191,

+  27,

+  101,

+  210,

+  57,

+  24,

+  169,

+  192,

+  224,

+  214,

+  205,

+  221,

+  146,

+  50,

+  61,

+  143,

+  3,

+  70,

+  175,

+  102,

+  229,

+  235,

+  3,

+  57,

+  171,

+  41,

+  65,

+  82,

+  59,

+  28,

+  22,

+  11,

+  142,

+  212,

+  17,

+  165,

+  245,

+  254,

+  46,

+  62,

+  244,

+  24,

+  47,

+  191,

+  238,

+  95,

+  234,

+  170,

+  126,

+  124,

+  123,

+  2,

+  210,

+  117,

+  79,

+  64,

+  166,

+  223,

+  20,

+  135,

+  234,

+  229,

+  124,

+  193,

+  85,

+  157,

+  247,

+  219,

+  83,

+  157,

+  14,

+  95,

+  203,

+  103,

+  4,

+  124,

+  130,

+  87,

+  11,

+  38,

+  16,

+  237,

+  232,

+  180,

+  67,

+  8,

+  18,

+  32,

+  16,

+  0,

+  173,

+  102,

+  118,

+  0,

+  221,

+  3,

+  124,

+  146,

+  57,

+  68,

+  187,

+  242,

+  14,

+  209,

+  210,

+  253,

+  218,

+  138,

+  62,

+  162,

+  111,

+  5,

+  141,

+  163,

+  29,

+  167,

+  50,

+  17,

+  142,

+  189,

+  42,

+  182,

+  229,

+  241,

+  217,

+  139,

+  95,

+  122,

+  119,

+  136,

+  8,

+  92,

+  68,

+  59,

+  112,

+  250,

+  37,

+  162,

+  29,

+  225,

+  189,

+  238,

+  96,

+  223,

+  187,

+  138,

+  132,

+  176,

+  92,

+  4,

+  45,

+  114,

+  219,

+  131,

+  55,

+  94,

+  148,

+  244,

+  17,

+  180,

+  40,

+  25,

+  32,

+  44,

+  27,

+  225,

+  216,

+  136,

+  192,

+  69,

+  12,

+  118,

+  48,

+  111,

+  186,

+  23,

+  63,

+  119,

+  150,

+  160,

+  0,

+  104,

+  123,

+  238,

+  217,

+  123,

+  238,

+  115,

+  123,

+  158,

+  181,

+  220,

+  115,

+  213,

+  106,

+  0,

+  176,

+  92,

+  128,

+  227,

+  2,

+  40,

+  249,

+  215,

+  174,

+  155,

+  183,

+  21,

+  154,

+  189,

+  21,

+  125,

+  4,

+  41,

+  153,

+  6,

+  8,

+  203,

+  229,

+  48,

+  158,

+  141,

+  8,

+  92,

+  4,

+  49,

+  64,

+  122,

+  8,

+  199,

+  221,

+  141,

+  224,

+  184,

+  139,

+  10,

+  108,

+  51,

+  226,

+  83,

+  238,

+  92,

+  8,

+  123,

+  11,

+  227,

+  131,

+  173,

+  76,

+  22,

+  208,

+  124,

+  22,

+  195,

+  103,

+  113,

+  124,

+  150,

+  192,

+  134,

+  16,

+  69,

+  209,

+  102,

+  18,

+  75,

+  146,

+  16,

+  134,

+  205,

+  97,

+  185,

+  28,

+  131,

+  196,

+  34,

+  113,

+  152,

+  192,

+  69,

+  16,

+  19,

+  203,

+  102,

+  242,

+  132,

+  132,

+  24,

+  70,

+  61,

+  208,

+  32,

+  134,

+  146,

+  190,

+  54,

+  23,

+  244,

+  52,

+  18,

+  98,

+  208,

+  91,

+  126,

+  4,

+  207,

+  168,

+  209,

+  46,

+  19,

+  142,

+  52,

+  4,

+  201,

+  93,

+  46,

+  19,

+  141,

+  36,

+  10,

+  227,

+  153,

+  20,

+  38,

+  48,

+  1,

+  180,

+  206,

+  175,

+  143,

+  8,

+  142,

+  139,

+  24,

+  196,

+  162,

+  160,

+  33,

+  184,

+  190,

+  29,

+  132,

+  34,

+  17,

+  161,

+  217,

+  8,

+  199,

+  69,

+  144,

+  186,

+  125,

+  31,

+  184,

+  253,

+  73,

+  96,

+  247,

+  39,

+  33,

+  35,

+  163,

+  146,

+  132,

+  176,

+  92,

+  14,

+  162,

+  140,

+  134,

+  140,

+  140,

+  146,

+  86,

+  101,

+  217,

+  118,

+  16,

+  101,

+  52,

+  228,

+  100,

+  148,

+  8,

+  49,

+  92,

+  219,

+  135,

+  58,

+  74,

+  99,

+  1,

+  201,

+  135,

+  40,

+  62,

+  196,

+  241,

+  109,

+  33,

+  109,

+  125,

+  252,

+  75,

+  192,

+  55,

+  151,

+  81,

+  162,

+  62,

+  38,

+  44,

+  79,

+  174,

+  135,

+  16,

+  75,

+  131,

+  120,

+  110,

+  143,

+  50,

+  132,

+  88,

+  26,

+  36,

+  240,

+  109,

+  9,

+  108,

+  91,

+  90,

+  249,

+  97,

+  218,

+  50,

+  128,

+  252,

+  196,

+  150,

+  251,

+  187,

+  110,

+  54,

+  246,

+  249,

+  195,

+  253,

+  93,

+  252,

+  195,

+  234,

+  255,

+  1,

+  80,

+  75,

+  1,

+  2,

+  20,

+  0,

+  20,

+  0,

+  0,

+  8,

+  8,

+  0,

+  131,

+  182,

+  42,

+  68,

+  22,

+  124,

+  124,

+  222,

+  0,

+  29,

+  0,

+  0,

+  62,

+  29,

+  0,

+  0,

+  12,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  97,

+  114,

+  105,

+  97,

+  108,

+  95,

+  50,

+  52,

+  46,

+  112,

+  110,

+  103,

+  80,

+  75,

+  1,

+  2,

+  20,

+  0,

+  20,

+  0,

+  0,

+  8,

+  8,

+  0,

+  131,

+  182,

+  42,

+  68,

+  158,

+  64,

+  172,

+  29,

+  120,

+  6,

+  0,

+  0,

+  95,

+  61,

+  0,

+  0,

+  12,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  42,

+  29,

+  0,

+  0,

+  97,

+  114,

+  105,

+  97,

+  108,

+  95,

+  50,

+  52,

+  46,

+  102,

+  110,

+  116,

+  80,

+  75,

+  5,

+  6,

+  0,

+  0,

+  0,

+  0,

+  2,

+  0,

+  2,

+  0,

+  116,

+  0,

+  0,

+  0,

+  204,

+  35,

+  0,

+  0,

+  0,

+  0

+];

diff --git a/image/lib/src/fonts/arial_48.dart b/image/lib/src/fonts/arial_48.dart
index a156382..b7a5244 100755
--- a/image/lib/src/fonts/arial_48.dart
+++ b/image/lib/src/fonts/arial_48.dart
@@ -1,26 +1,18940 @@
 import '../bitmap_font.dart';

 

-/**

- * 48px Arial font for use with [drawString] and [drawChar].

- */

+/// 48px Arial font for use with [drawString] and [drawChar].

 final BitmapFont arial_48 = BitmapFont.fromZip(_ARIAL_48);

 

-const List<int> _ARIAL_48 = const

-[80, 75, 3, 4, 20, 0, 0, 8, 8, 0, 187, 182, 42, 68, 95, 169, 84, 175, 60, 66, 0, 0, 49, 67, 0, 0, 12, 0, 0, 0, 97, 114, 105, 97, 108, 95, 52, 56, 46, 112, 110, 103, 164, 187, 85, 80, 92, 77, 224, 237, 59, 131, 187, 7, 201, 64, 112, 11, 110, 131, 133, 224, 238, 16, 130, 59, 9, 131, 12, 4, 6, 215, 193, 33, 193, 157, 96, 131, 36, 192, 135, 195, 224, 26, 66, 176, 32, 67, 66, 128, 76, 112, 39, 184, 219, 0, 55, 255, 115, 238, 173, 243, 112, 30, 239, 170, 93, 187, 118, 213, 126, 233, 174, 213, 221, 235, 183, 30, 58, 193, 64, 79, 157, 148, 232, 41, 17, 0, 0, 32, 213, 212, 80, 49, 2, 0, 8, 160, 255, 190, 69, 8, 240, 254, 189, 93, 253, 135, 138, 1, 0, 165, 107, 77, 21, 197, 87, 1, 232, 3, 235, 164, 198, 242, 246, 186, 34, 18, 130, 8, 138, 255, 247, 249, 194, 74, 129, 197, 74, 49, 16, 173, 64, 192, 141, 35, 26, 16, 118, 181, 160, 125, 36, 202, 168, 153, 237, 244, 27, 37, 103, 100, 50, 247, 250, 128, 177, 95, 254, 118, 206, 249, 102, 78, 136, 251, 255, 183, 42, 30, 13, 18, 27, 31, 167, 132, 48, 219, 109, 15, 203, 143, 247, 203, 158, 251, 254, 24, 221, 156, 128, 185, 172, 219, 247, 103, 185, 13, 210, 33, 143, 143, 143, 152, 161, 71, 204, 71, 162, 117, 130, 28, 9, 130, 241, 237, 222, 97, 73, 246, 245, 226, 190, 71, 57, 152, 213, 242, 145, 45, 220, 95, 104, 56, 55, 120, 72, 22, 125, 228, 203, 53, 52, 143, 237, 118, 50, 85, 143, 87, 172, 177, 28, 154, 200, 180, 80, 223, 53, 20, 104, 222, 150, 246, 117, 27, 63, 37, 252, 209, 82, 59, 4, 6, 15, 88, 9, 120, 22, 10, 22, 41, 74, 94, 73, 224, 140, 243, 164, 94, 15, 157, 104, 163, 28, 249, 244, 86, 183, 249, 124, 168, 196, 182, 74, 194, 83, 240, 212, 247, 153, 115, 58, 119, 178, 243, 208, 217, 53, 185, 57, 35, 189, 163, 91, 178, 8, 142, 195, 163, 210, 103, 61, 65, 87, 177, 202, 237, 71, 177, 184, 250, 239, 125, 2, 99, 129, 252, 243, 193, 112, 207, 196, 113, 255, 214, 254, 249, 237, 68, 231, 63, 223, 123, 15, 165, 221, 136, 119, 190, 201, 251, 56, 38, 181, 168, 94, 74, 230, 52, 249, 72, 9, 31, 105, 236, 46, 144, 188, 212, 163, 114, 136, 226, 254, 112, 2, 184, 125, 195, 26, 242, 53, 107, 79, 217, 105, 60, 144, 187, 87, 104, 118, 186, 81, 56, 52, 165, 122, 237, 42, 232, 91, 47, 56, 46, 148, 148, 176, 239, 177, 165, 45, 42, 186, 158, 103, 209, 126, 223, 118, 56, 125, 185, 230, 166, 199, 81, 31, 236, 148, 50, 252, 116, 47, 127, 109, 206, 243, 222, 25, 83, 40, 194, 41, 159, 42, 216, 16, 191, 73, 182, 76, 178, 96, 25, 195, 56, 145, 120, 221, 209, 247, 29, 108, 181, 175, 236, 216, 29, 39, 167, 156, 18, 205, 248, 39, 191, 138, 185, 45, 189, 245, 180, 33, 13, 27, 70, 58, 148, 169, 111, 245, 83, 143, 82, 4, 226, 123, 111, 61, 214, 230, 240, 183, 32, 141, 126, 56, 251, 164, 22, 215, 124, 239, 245, 77, 175, 244, 133, 160, 70, 189, 249, 150, 16, 5, 232, 87, 197, 90, 92, 181, 190, 147, 48, 153, 95, 129, 177, 162, 31, 214, 122, 112, 101, 136, 121, 205, 132, 73, 107, 205, 156, 108, 75, 95, 180, 7, 137, 134, 71, 137, 228, 194, 157, 77, 153, 190, 180, 155, 207, 70, 187, 210, 128, 250, 228, 4, 181, 249, 93, 154, 236, 6, 159, 245, 37, 52, 160, 146, 233, 125, 94, 183, 153, 40, 153, 238, 55, 192, 214, 9, 251, 133, 167, 149, 52, 205, 70, 186, 197, 78, 215, 194, 9, 75, 43, 119, 230, 76, 240, 156, 149, 207, 24, 121, 215, 117, 248, 98, 189, 150, 79, 99, 190, 155, 82, 216, 148, 248, 230, 223, 93, 170, 214, 149, 125, 110, 243, 161, 152, 97, 140, 58, 7, 183, 124, 206, 49, 161, 208, 205, 21, 76, 48, 20, 255, 218, 191, 107, 231, 97, 214, 108, 238, 28, 221, 55, 87, 83, 165, 90, 27, 251, 190, 54, 15, 220, 90, 226, 138, 80, 123, 169, 172, 62, 99, 150, 179, 126, 7, 197, 149, 163, 16, 191, 125, 138, 34, 254, 118, 22, 83, 17, 106, 78, 32, 135, 206, 106, 104, 140, 237, 94, 230, 58, 6, 54, 15, 210, 25, 205, 12, 153, 82, 47, 201, 68, 187, 170, 70, 62, 19, 149, 250, 82, 240, 83, 86, 1, 100, 64, 5, 215, 194, 192, 136, 29, 99, 215, 9, 19, 7, 182, 4, 233, 31, 203, 233, 127, 142, 92, 15, 85, 242, 172, 69, 76, 110, 125, 144, 198, 77, 174, 139, 2, 83, 40, 135, 122, 197, 59, 15, 221, 134, 91, 103, 237, 92, 117, 229, 221, 181, 41, 135, 0, 146, 182, 45, 241, 9, 2, 214, 180, 41, 94, 181, 13, 191, 224, 12, 114, 73, 131, 99, 11, 186, 201, 184, 164, 139, 22, 4, 178, 104, 106, 64, 38, 176, 169, 142, 163, 7, 159, 157, 39, 248, 126, 140, 151, 176, 137, 14, 114, 206, 156, 207, 254, 185, 16, 172, 29, 248, 100, 108, 218, 215, 211, 191, 108, 208, 78, 127, 100, 131, 13, 53, 106, 152, 193, 136, 87, 180, 8, 239, 99, 160, 144, 118, 167, 63, 42, 166, 87, 221, 225, 109, 75, 141, 173, 129, 154, 206, 255, 254, 238, 117, 139, 191, 81, 8, 3, 6, 167, 154, 148, 143, 181, 152, 44, 191, 24, 250, 117, 148, 154, 50, 176, 33, 166, 141, 38, 47, 156, 93, 106, 88, 242, 196, 70, 143, 28, 223, 169, 18, 114, 224, 67, 43, 247, 73, 136, 27, 12, 189, 67, 243, 48, 104, 134, 48, 103, 19, 56, 120, 164, 188, 130, 171, 177, 92, 3, 225, 163, 196, 252, 151, 60, 152, 53, 243, 55, 21, 146, 30, 158, 230, 188, 217, 182, 109, 86, 210, 192, 214, 144, 229, 24, 59, 174, 199, 224, 134, 90, 130, 86, 20, 225, 160, 21, 102, 189, 111, 223, 232, 192, 109, 155, 197, 224, 180, 73, 167, 150, 182, 31, 67, 136, 233, 132, 35, 158, 104, 167, 118, 155, 129, 231, 73, 3, 61, 21, 28, 198, 123, 54, 194, 216, 90, 29, 123, 53, 147, 155, 20, 64, 210, 47, 34, 14, 38, 22, 17, 164, 159, 61, 172, 36, 94, 4, 22, 85, 59, 21, 165, 151, 158, 248, 119, 15, 143, 175, 98, 210, 108, 103, 57, 182, 133, 142, 24, 72, 174, 184, 40, 94, 146, 91, 50, 75, 65, 214, 29, 21, 65, 236, 111, 181, 151, 128, 200, 180, 221, 184, 199, 180, 40, 1, 194, 149, 84, 128, 8, 92, 98, 31, 230, 171, 8, 236, 223, 128, 64, 251, 244, 130, 66, 133, 222, 72, 102, 158, 248, 219, 141, 4, 11, 207, 72, 124, 70, 144, 218, 203, 189, 1, 31, 83, 62, 154, 125, 143, 78, 130, 70, 75, 44, 152, 62, 11, 166, 74, 116, 102, 185, 164, 45, 45, 65, 60, 27, 25, 149, 62, 151, 56, 139, 193, 50, 15, 57, 24, 61, 230, 64, 13, 81, 70, 213, 40, 201, 10, 63, 223, 159, 250, 175, 113, 207, 104, 200, 220, 155, 154, 201, 63, 10, 76, 165, 53, 203, 113, 98, 69, 133, 244, 74, 12, 55, 73, 46, 134, 54, 144, 125, 54, 18, 123, 60, 193, 124, 126, 23, 137, 135, 15, 157, 135, 131, 105, 186, 123, 251, 104, 120, 168, 27, 96, 161, 173, 101, 5, 87, 81, 220, 226, 122, 167, 35, 0, 119, 72, 161, 167, 209, 42, 27, 2, 191, 234, 217, 134, 159, 18, 253, 147, 51, 51, 14, 4, 233, 150, 133, 68, 252, 11, 183, 185, 0, 251, 241, 208, 39, 50, 153, 156, 138, 32, 168, 135, 157, 23, 169, 30, 188, 223, 15, 5, 80, 38, 88, 114, 163, 113, 123, 65, 216, 43, 194, 231, 116, 172, 238, 93, 49, 132, 126, 73, 129, 108, 164, 232, 172, 16, 105, 197, 167, 21, 231, 189, 255, 239, 219, 202, 159, 81, 9, 94, 113, 103, 218, 134, 11, 79, 28, 168, 70, 100, 195, 130, 132, 31, 74, 77, 186, 127, 8, 91, 1, 212, 60, 45, 249, 84, 247, 7, 250, 121, 71, 169, 38, 66, 35, 234, 156, 49, 188, 93, 201, 126, 133, 239, 111, 231, 185, 142, 196, 182, 109, 21, 4, 73, 48, 103, 39, 140, 250, 52, 202, 49, 109, 139, 135, 134, 176, 62, 147, 152, 117, 131, 106, 21, 179, 226, 38, 40, 158, 212, 78, 190, 95, 38, 8, 237, 120, 7, 124, 86, 191, 96, 56, 132, 38, 29, 40, 189, 138, 62, 238, 86, 245, 207, 143, 200, 207, 9, 97, 71, 169, 189, 102, 60, 225, 64, 197, 54, 244, 55, 60, 223, 80, 88, 120, 163, 108, 36, 158, 77, 155, 238, 29, 136, 97, 171, 150, 22, 249, 235, 211, 120, 68, 154, 37, 191, 114, 26, 31, 5, 126, 73, 139, 108, 116, 104, 221, 24, 69, 36, 41, 63, 214, 227, 102, 135, 37, 189, 233, 12, 110, 140, 160, 55, 12, 164, 122, 220, 88, 14, 217, 131, 111, 206, 240, 174, 245, 201, 36, 252, 52, 177, 172, 170, 79, 191, 108, 51, 176, 106, 124, 138, 110, 22, 74, 134, 78, 77, 124, 157, 193, 131, 66, 246, 233, 125, 142, 37, 185, 245, 181, 70, 219, 79, 237, 232, 101, 201, 89, 43, 195, 255, 115, 171, 161, 234, 195, 93, 107, 6, 173, 29, 22, 149, 40, 35, 91, 46, 14, 9, 17, 73, 241, 254, 171, 212, 119, 167, 67, 190, 189, 1, 53, 80, 62, 251, 2, 184, 52, 161, 134, 91, 74, 33, 159, 112, 139, 2, 40, 97, 96, 189, 229, 201, 95, 83, 143, 129, 74, 28, 72, 148, 193, 107, 3, 190, 185, 74, 95, 63, 156, 228, 164, 202, 254, 239, 43, 25, 139, 138, 160, 155, 127, 35, 235, 151, 252, 180, 202, 148, 165, 229, 198, 94, 112, 85, 175, 99, 167, 202, 46, 96, 21, 18, 158, 193, 78, 141, 85, 214, 8, 60, 154, 95, 43, 54, 77, 229, 31, 121, 65, 167, 42, 186, 219, 226, 113, 182, 123, 47, 54, 19, 155, 67, 140, 182, 147, 146, 229, 243, 79, 34, 92, 20, 18, 196, 225, 99, 140, 118, 64, 144, 170, 60, 106, 82, 171, 184, 105, 21, 195, 2, 143, 79, 199, 235, 4, 84, 8, 3, 122, 21, 247, 109, 185, 125, 74, 131, 183, 208, 27, 117, 7, 209, 243, 198, 19, 83, 50, 246, 133, 174, 186, 146, 79, 255, 68, 177, 141, 58, 169, 57, 216, 75, 98, 46, 245, 78, 44, 86, 187, 151, 125, 126, 6, 201, 147, 33, 41, 113, 173, 27, 107, 176, 44, 241, 161, 78, 216, 224, 75, 30, 217, 14, 3, 82, 164, 189, 137, 198, 39, 140, 49, 23, 132, 189, 109, 132, 19, 11, 74, 255, 228, 111, 248, 117, 198, 201, 179, 119, 32, 109, 117, 16, 23, 108, 230, 76, 61, 253, 222, 182, 138, 118, 62, 145, 17, 46, 69, 8, 49, 64, 81, 63, 57, 126, 228, 66, 225, 165, 213, 55, 236, 239, 99, 31, 88, 127, 7, 248, 65, 124, 100, 179, 156, 126, 249, 220, 131, 56, 78, 148, 196, 247, 253, 34, 56, 20, 51, 110, 219, 6, 37, 120, 85, 148, 90, 187, 12, 147, 249, 21, 64, 29, 34, 99, 142, 255, 78, 39, 155, 131, 134, 54, 57, 163, 119, 133, 226, 103, 153, 147, 105, 95, 63, 240, 246, 69, 187, 88, 130, 7, 36, 15, 169, 246, 126, 99, 123, 47, 60, 223, 112, 224, 56, 87, 202, 126, 25, 64, 37, 13, 97, 39, 70, 54, 58, 182, 110, 84, 33, 146, 70, 246, 142, 91, 57, 235, 212, 53, 111, 6, 63, 139, 178, 2, 29, 172, 124, 216, 219, 238, 14, 17, 241, 39, 38, 214, 79, 216, 72, 71, 126, 218, 0, 9, 111, 192, 178, 202, 115, 22, 62, 29, 7, 212, 221, 194, 92, 253, 207, 247, 219, 233, 19, 194, 235, 58, 190, 131, 211, 30, 55, 182, 156, 185, 147, 221, 89, 122, 103, 234, 54, 146, 98, 248, 214, 41, 165, 25, 99, 103, 130, 253, 92, 150, 158, 84, 219, 18, 253, 213, 204, 111, 36, 51, 227, 177, 44, 13, 93, 18, 181, 213, 184, 158, 149, 133, 77, 244, 135, 40, 125, 89, 80, 229, 3, 100, 105, 98, 218, 102, 236, 223, 235, 217, 5, 247, 114, 56, 254, 139, 130, 114, 88, 160, 159, 131, 244, 85, 210, 44, 0, 74, 161, 57, 153, 53, 223, 175, 216, 3, 193, 85, 0, 165, 174, 133, 250, 10, 179, 108, 49, 138, 227, 237, 61, 135, 111, 239, 105, 211, 79, 53, 205, 73, 139, 162, 25, 127, 173, 80, 43,

- 52, 250, 120, 146, 161, 219, 105, 31, 130, 85, 234, 182, 95, 81, 0, 56, 3, 226, 7, 245, 134, 25, 167, 162, 1, 97, 106, 27, 61, 84, 20, 63, 213, 164, 56, 160, 52, 72, 184, 46, 207, 131, 141, 217, 254, 211, 24, 60, 79, 35, 174, 75, 44, 24, 198, 89, 88, 35, 0, 232, 71, 255, 133, 172, 234, 46, 173, 244, 177, 40, 96, 203, 5, 65, 202, 3, 252, 73, 224, 78, 234, 114, 214, 190, 130, 29, 241, 69, 223, 119, 128, 158, 35, 2, 139, 42, 213, 29, 203, 134, 100, 160, 20, 52, 215, 138, 68, 59, 51, 28, 29, 138, 135, 37, 11, 3, 251, 204, 100, 174, 7, 124, 61, 245, 9, 81, 48, 54, 26, 98, 30, 105, 194, 62, 17, 123, 89, 172, 227, 137, 57, 79, 182, 222, 30, 75, 154, 75, 114, 243, 238, 48, 127, 157, 249, 158, 119, 166, 211, 119, 135, 71, 133, 111, 88, 211, 204, 200, 240, 143, 236, 130, 101, 185, 48, 157, 191, 20, 65, 157, 71, 156, 0, 208, 98, 33, 102, 144, 32, 183, 153, 184, 234, 85, 122, 26, 33, 122, 68, 192, 187, 81, 17, 68, 217, 247, 116, 143, 145, 78, 55, 58, 172, 188, 255, 44, 31, 85, 65, 164, 3, 186, 142, 99, 164, 198, 7, 244, 230, 30, 253, 33, 100, 234, 203, 252, 216, 199, 217, 199, 44, 90, 209, 154, 101, 22, 121, 133, 106, 100, 45, 81, 207, 225, 145, 194, 201, 224, 211, 151, 86, 253, 3, 82, 4, 41, 39, 180, 72, 215, 78, 211, 13, 123, 118, 61, 20, 54, 181, 35, 177, 188, 75, 103, 75, 226, 235, 51, 198, 23, 55, 1, 45, 84, 29, 44, 135, 161, 63, 62, 207, 149, 179, 116, 150, 107, 173, 230, 161, 162, 10, 220, 152, 58, 184, 33, 248, 196, 191, 159, 19, 162, 227, 251, 23, 143, 163, 147, 173, 232, 69, 91, 137, 207, 219, 254, 251, 142, 151, 206, 92, 144, 135, 219, 173, 176, 145, 19, 28, 205, 109, 58, 30, 102, 5, 115, 222, 222, 214, 63, 99, 180, 245, 30, 254, 253, 29, 166, 51, 54, 66, 204, 255, 122, 101, 174, 107, 20, 128, 156, 214, 14, 111, 217, 142, 59, 217, 215, 38, 155, 186, 149, 254, 250, 8, 21, 102, 186, 196, 249, 183, 94, 83, 146, 42, 200, 168, 10, 13, 114, 240, 7, 232, 196, 101, 161, 225, 207, 252, 93, 39, 233, 122, 218, 121, 46, 13, 149, 214, 164, 185, 222, 15, 163, 201, 28, 100, 155, 81, 204, 226, 97, 241, 200, 183, 116, 129, 10, 222, 60, 203, 242, 153, 227, 254, 176, 101, 224, 166, 66, 35, 218, 22, 115, 213, 121, 94, 211, 195, 161, 64, 223, 151, 119, 215, 206, 229, 138, 40, 195, 169, 33, 30, 185, 40, 170, 92, 28, 199, 93, 47, 98, 53, 161, 51, 153, 151, 134, 21, 155, 54, 225, 153, 77, 180, 69, 47, 39, 28, 191, 230, 70, 81, 242, 134, 0, 64, 169, 207, 78, 190, 54, 188, 234, 105, 82, 39, 115, 145, 252, 145, 160, 125, 136, 212, 94, 146, 180, 32, 68, 82, 138, 3, 65, 84, 221, 147, 79, 134, 232, 164, 198, 196, 149, 143, 131, 237, 79, 92, 27, 208, 158, 46, 138, 77, 92, 197, 52, 90, 86, 203, 120, 232, 126, 11, 38, 46, 70, 2, 218, 112, 77, 38, 168, 224, 14, 161, 214, 59, 22, 83, 150, 68, 180, 211, 139, 1, 207, 2, 65, 133, 253, 72, 174, 212, 254, 59, 37, 56, 107, 51, 77, 99, 14, 79, 174, 183, 2, 40, 10, 190, 13, 118, 249, 65, 97, 190, 60, 173, 245, 86, 43, 10, 156, 220, 247, 251, 83, 48, 214, 174, 2, 91, 42, 125, 204, 169, 218, 19, 69, 201, 18, 227, 111, 192, 67, 78, 38, 17, 158, 142, 49, 29, 154, 131, 167, 234, 84, 13, 66, 213, 105, 54, 7, 165, 107, 42, 8, 182, 223, 228, 161, 21, 146, 72, 124, 116, 233, 76, 41, 0, 203, 151, 22, 24, 58, 40, 235, 235, 30, 179, 189, 64, 157, 144, 83, 242, 214, 240, 63, 63, 74, 157, 180, 87, 1, 163, 81, 52, 118, 40, 42, 213, 203, 85, 66, 213, 62, 127, 44, 232, 6, 0, 236, 122, 76, 189, 22, 254, 241, 155, 30, 1, 68, 255, 95, 112, 243, 122, 55, 42, 128, 210, 122, 223, 11, 18, 192, 223, 207, 100, 229, 90, 38, 245, 112, 133, 232, 158, 36, 124, 186, 62, 178, 94, 209, 29, 189, 201, 89, 243, 87, 41, 174, 125, 239, 204, 181, 250, 140, 31, 109, 166, 34, 218, 234, 143, 3, 181, 59, 201, 158, 110, 11, 6, 2, 194, 103, 185, 76, 211, 36, 172, 34, 66, 139, 93, 247, 133, 216, 96, 150, 147, 69, 132, 208, 69, 14, 224, 153, 214, 133, 169, 230, 59, 44, 99, 242, 228, 241, 16, 108, 98, 100, 218, 216, 197, 187, 171, 170, 217, 78, 97, 167, 10, 199, 195, 77, 150, 64, 255, 146, 181, 254, 207, 19, 212, 236, 83, 201, 137, 102, 33, 29, 59, 177, 240, 99, 115, 118, 20, 180, 106, 205, 62, 195, 210, 61, 148, 104, 51, 18, 252, 50, 98, 178, 5, 248, 169, 119, 158, 135, 201, 79, 18, 18, 133, 234, 105, 198, 133, 191, 88, 179, 62, 111, 34, 187, 99, 57, 35, 195, 234, 208, 97, 2, 236, 85, 117, 63, 238, 46, 251, 177, 169, 55, 17, 108, 77, 219, 244, 1, 71, 138, 207, 93, 43, 53, 215, 136, 177, 207, 10, 147, 46, 212,

- 203, 50, 75, 202, 109, 95, 81, 34, 27, 53, 97, 129, 105, 211, 49, 100, 235, 230, 135, 64, 18, 182, 162, 165, 242, 32, 61, 67, 227, 181, 25, 7, 90, 98, 121, 147, 84, 249, 120, 134, 187, 37, 134, 63, 169, 54, 29, 111, 97, 171, 22, 187, 28, 227, 166, 251, 239, 149, 89, 217, 77, 133, 216, 206, 172, 165, 189, 177, 18, 5, 52, 136, 249, 127, 200, 238, 92, 169, 172, 86, 224, 65, 28, 231, 240, 184, 82, 21, 104, 233, 153, 171, 6, 211, 220, 24, 56, 212, 28, 54, 39, 229, 159, 31, 186, 115, 81, 113, 247, 137, 205, 246, 43, 130, 34, 253, 43, 176, 194, 74, 78, 157, 24, 152, 88, 120, 251, 182, 146, 227, 242, 49, 107, 145, 108, 222, 5, 164, 78, 100, 11, 88, 98, 223, 115, 55, 119, 184, 6, 119, 9, 105, 215, 227, 34, 129, 37, 47, 234, 173, 184, 31, 75, 16, 73, 230, 132, 4, 232, 92, 194, 37, 181, 116, 187, 142, 253, 11, 188, 17, 27, 246, 212, 159, 122, 210, 57, 242, 78, 56, 138, 156, 146, 68, 55, 75, 252, 115, 175, 71, 136, 73, 69, 83, 4, 207, 122, 152, 54, 36, 1, 15, 131, 14, 16, 242, 25, 85, 170, 74, 89, 61, 182, 149, 219, 38, 41, 17, 197, 29, 45, 15, 7, 89, 167, 195, 159, 3, 45, 225, 225, 132, 16, 71, 101, 34, 44, 232, 144, 172, 57, 46, 61, 62, 52, 254, 34, 83, 195, 244, 23, 30, 20, 16, 20, 54, 21, 242, 136, 195, 145, 133, 68, 144, 66, 129, 169, 196, 232, 249, 84, 39, 15, 183, 111, 198, 9, 212, 2, 179, 65, 162, 239, 50, 200, 18, 140, 57, 173, 147, 110, 232, 50, 15, 212, 140, 24, 149, 221, 255, 56, 124, 202, 175, 205, 152, 58, 34, 66, 43, 172, 153, 125, 24, 32, 145, 101, 229, 147, 99, 249, 26, 240, 114, 176, 216, 250, 52, 108, 110, 158, 90, 41, 214, 249, 219, 11, 21, 120, 138, 74, 8, 95, 143, 94, 163, 42, 224, 247, 22, 19, 12, 183, 211, 193, 254, 240, 9, 8, 89, 242, 11, 151, 28, 11, 234, 94, 80, 192, 78, 97, 58, 145, 120, 47, 148, 45, 169, 210, 191, 231, 182, 117, 6, 82, 62, 130, 185, 172, 140, 228, 32, 40, 158, 241, 43, 70, 249, 167, 69, 129, 31, 22, 180, 63, 21, 164, 207, 61, 216, 96, 78, 72, 127, 70, 104, 8, 186, 15, 122, 151, 143, 59, 208, 249, 81, 56, 243, 35, 214, 163, 36, 222, 97, 163, 136, 163, 88, 184, 118, 159, 248, 221, 51, 179, 92, 104, 131, 109, 238, 232, 30, 253, 215, 238, 252, 99, 133, 188, 46, 38, 212, 16, 43, 210, 196, 115, 206, 19, 210, 237, 111, 223, 45, 126, 68, 183, 37, 140, 215, 25, 101, 75, 124, 154, 145, 77, 149, 250, 228, 248, 247, 135, 208, 106, 200, 109, 110, 187, 40, 13, 0, 170, 35, 253, 32, 119, 138, 73, 21, 75, 137, 46, 150, 100, 248, 195, 237, 165, 75, 123, 42, 64, 52, 63, 45, 244, 166, 16, 199, 162, 249, 155, 6, 183, 127, 122, 46, 104, 245, 222, 166, 42, 206, 47, 150, 252, 121, 19, 185, 194, 139, 152, 97, 161, 126, 39, 63, 236, 173, 106, 34, 244, 136, 161, 90, 180, 178, 125,

- 210, 107, 34, 149, 213, 22, 9, 30, 163, 214, 5, 105, 136, 34, 40, 30, 129, 28, 240, 93, 98, 66, 150, 4, 75, 102, 102, 190, 237, 133, 141, 75, 113, 54, 16, 164, 111, 89, 126, 30, 191, 76, 40, 79, 165, 209, 201, 22, 71, 50, 250, 124, 22, 94, 109, 19, 77, 183, 180, 222, 146, 73, 67, 36, 233, 44, 118, 16, 23, 147, 226, 135, 95, 24, 250, 249, 31, 83, 43, 128, 10, 113, 94, 41, 238, 252, 86, 75, 141, 102, 206, 5, 67, 240, 2, 170, 183, 19, 53, 7, 190, 166, 237, 28, 71, 211, 116, 221, 25, 181, 98, 153, 253, 89, 84, 40, 118, 136, 65, 125, 89, 89, 68, 236, 179, 139, 46, 211, 255, 142, 42, 248, 57, 147, 209, 175, 110, 86, 75, 100, 56, 115, 69, 41, 222, 237, 43, 66, 181, 30, 97, 80, 205, 99, 226, 24, 158, 21, 86, 105, 238, 0, 22, 149, 209, 146, 134, 40, 143, 151, 117, 161, 108, 43, 73, 209, 4, 240, 58, 122, 209, 165, 62, 107, 184, 138, 226, 187, 166, 35, 190, 54, 192, 72, 82, 10, 91, 24, 174, 109, 126, 71, 47, 59, 29, 137, 181, 134, 254, 161, 78, 191, 86, 3, 214, 40, 100, 219, 214, 172, 120, 220, 170, 24, 104, 254, 97, 232, 29, 121, 19, 6, 241, 207, 55, 228, 44, 156, 182, 220, 14, 73, 0, 83, 101, 141, 170, 151, 129, 88, 243, 109, 245, 6, 237, 174, 18, 39, 170, 75, 116, 166, 72, 65, 165, 32, 55, 127, 136, 246, 11, 237, 155, 57, 23, 211, 202, 17, 164, 186, 252, 252, 88, 80, 198, 23, 141, 128, 57, 161, 238, 186, 91, 87, 152, 47, 190, 35, 73, 122, 159, 181, 247, 126, 207, 15, 90, 13, 253, 36, 161, 204, 164, 248, 138, 189, 129, 120, 55, 226, 250, 222, 201, 160, 193, 143, 2, 198, 173, 234, 159, 72, 131, 190, 123, 128, 200, 208, 215, 115, 197, 180, 0, 191, 143, 153, 2, 172, 152, 19, 9, 67, 124, 37, 217, 212, 207, 174, 26, 26, 97, 154, 33, 222, 50, 48, 129, 184, 2, 236, 128, 196, 16, 141, 175, 191, 86, 223, 211, 135, 195, 157, 214, 155, 194, 147, 182, 82, 103, 77, 108, 11, 96, 50, 115, 213, 117, 28, 119, 236, 23, 150, 181, 95, 18, 242, 20, 208, 54, 110, 71, 68, 145, 224, 249, 56, 126, 6, 47, 6, 191, 157, 170, 164, 128, 97, 5, 35, 63, 228, 10, 124, 80, 118, 171, 160, 192, 103, 32, 118, 155, 113, 136, 56, 225, 171, 144, 33, 34, 227, 61, 208, 155, 82, 56, 226, 118, 5, 169, 234, 175, 162, 161, 47, 226, 193, 104, 144, 130, 189, 154, 159, 156, 102, 73, 103, 59, 205, 125, 58, 183, 214, 231, 31, 229, 79, 164, 216, 241, 111, 249, 202, 252, 34, 230, 249, 52, 87, 21, 183, 132, 190, 230, 86, 0, 101, 224, 58, 98, 227, 73, 66, 50, 210, 117, 184, 29, 197, 230, 249, 240, 161, 194, 203, 181, 2, 165, 111, 74, 199, 231, 53, 207, 120, 60, 107, 245, 38, 36, 232, 71, 7, 11, 20, 252, 183, 176, 148, 241, 158, 127, 33, 26, 233, 217, 18, 255, 65, 71, 135, 44, 121, 39, 248, 129, 67, 73, 63, 100, 142, 29, 227, 223, 179, 221, 221, 146, 41, 162, 248, 35, 60, 3, 225, 12, 188, 111, 33, 184, 120, 24, 216, 40, 3, 190, 203, 196, 54, 22, 154, 202, 107, 229, 101, 83, 189, 75, 117, 73, 121, 251, 189, 101, 66, 35, 219, 220, 247, 72, 65, 54, 211, 80, 52, 216, 52, 45, 218, 13, 159, 165, 16, 1, 157, 24, 95, 73, 96, 38, 140, 81, 82, 189, 188, 36, 235, 215, 152, 184, 55, 57, 173, 121, 179, 74, 26, 244, 248, 218, 177, 247, 136, 4, 221, 128, 229, 62, 179, 194, 141, 131, 20, 177, 216, 129, 42, 168, 69, 161, 30, 25, 189, 137, 225, 5, 215, 241, 169, 101, 147, 144, 36, 245, 100, 91, 211, 248, 122, 58, 181, 200, 82, 197, 116, 111, 147, 255, 241, 250, 124, 193, 223, 50, 146, 141, 32, 92, 135, 20, 239, 150, 6, 133, 151, 238, 134, 174, 13, 20, 248, 54, 12, 175, 179, 193, 13, 62, 193, 77, 178, 38, 14, 193, 158, 133, 74, 174, 73, 254, 247, 39, 158, 151, 64, 230, 173, 85, 70, 228, 11, 55, 155, 118, 245, 222, 30, 173, 225, 90, 0, 116, 28, 15, 95, 27, 203, 56, 199, 47, 109, 249, 196, 126, 108, 154, 233, 53, 130, 180, 223, 25, 66, 188, 127, 246, 54, 211, 54, 27, 80, 134, 88, 155, 211, 139, 16, 167, 239, 52, 50, 114, 55, 215, 170, 119, 115, 185, 253, 163, 8, 162, 99, 126, 251, 250, 120, 87, 48, 77, 183, 63, 153, 196, 42, 12, 231, 124, 129, 37, 81, 44, 71, 203, 13, 253, 109, 124, 242, 60, 53, 241, 147, 207, 237, 183, 89, 247, 129, 144, 147, 200, 81, 188, 84, 242, 163, 79, 157, 207, 26, 190, 68, 172, 36, 240, 42, 227, 31, 12, 96, 86, 63, 118, 204, 21, 227, 161, 231, 197, 214, 215, 228, 188, 88, 156, 89, 49, 49, 210, 148, 223, 37, 213, 94, 14, 233, 132, 56, 254, 183, 170, 46, 226, 59, 66, 222, 144, 215, 196, 5, 210, 154, 241, 136, 151, 203, 154, 165, 69, 159, 5, 153, 195, 181, 40, 250, 186, 248, 58, 252, 121, 127, 55, 197, 55, 2, 153, 27, 173, 24, 51, 176, 209, 82, 153, 127, 66, 20, 125, 132, 134, 217, 174, 24, 157, 41, 175, 31, 48, 213, 88, 246, 241, 231, 142, 47, 196, 76, 162, 123, 233, 91, 127, 57, 96, 210, 126, 63, 211, 34, 70, 167, 150, 218, 167, 121, 146, 63, 69, 13, 177, 98, 168, 145, 179, 195, 237, 74, 229, 71, 178, 196, 57, 182, 223, 41, 16, 103, 203, 87, 29, 120, 151, 194, 79, 231, 188, 72, 176, 204, 13, 57, 199, 29, 134, 124, 165, 126, 148, 119, 100, 177, 225, 4, 232, 90, 18, 208, 83, 17, 94, 239, 111, 84, 190, 123, 6, 171, 179, 82, 239, 252, 169, 102, 176, 115, 36, 84, 174, 1, 242, 198, 90, 228, 97, 55, 70, 20, 3, 144, 172, 88, 165, 64, 183, 172, 78, 246, 214, 117, 169, 247, 253, 207, 36, 41, 219, 185, 155, 94, 121, 179, 101, 213, 24, 203, 176, 178, 113, 155, 7, 127, 251, 160, 224, 49, 30, 25, 204, 65, 56, 71, 17, 116, 246, 93, 35, 214, 21, 14, 86, 170, 243, 200, 217, 89, 223, 43, 162, 225, 39, 17, 240, 7, 168, 185, 30, 212, 199, 58, 11, 164, 30, 145, 116, 64, 248, 246, 15, 44, 35, 193, 252, 64, 144, 196, 53, 33, 16, 42, 78, 27, 243, 170, 159, 182, 77, 233, 177, 89, 253, 252, 195, 185, 143, 6, 17, 82, 36, 203, 198, 121, 227, 60, 192, 50, 168, 158, 114, 113,

- 89, 204, 41, 164, 78, 238, 113, 224, 118, 67, 15, 165, 230, 22, 40, 188, 146, 161, 0, 34, 56, 218, 4, 224, 169, 8, 180, 83, 246, 121, 155, 30, 238, 105, 237, 100, 154, 243, 114, 191, 157, 59, 101, 81, 104, 52, 80, 186, 148, 152, 43, 87, 193,

- 88, 100, 58, 84, 212, 82, 135, 228, 38, 154, 167, 10, 18, 101, 134, 103, 254, 106, 45, 202, 111, 72, 14, 208, 14, 245, 27, 247, 48, 199, 161, 134, 131, 179, 127, 196, 88, 18, 23, 114, 203, 73, 249, 46, 53, 127, 239, 109, 232, 36, 4, 44, 91, 138, 13, 223, 85, 122, 128, 204, 158, 93, 167, 83, 63, 0, 89, 156, 95, 136, 61, 222, 2, 100, 246, 71, 5, 127, 37, 164, 77, 183, 196, 30, 15, 223, 225, 204, 75, 18, 144, 181, 93, 204, 130, 143, 124, 132, 111, 48, 63, 173, 138, 231, 205, 231, 11, 62, 88, 9, 209, 134, 131, 242, 152, 230, 68, 80, 120, 107, 196, 26, 176, 82, 1, 240, 179, 85, 66, 127, 94, 148, 174, 15, 64, 127, 173, 186, 71, 22, 194, 94, 129, 167, 114, 61, 198, 199, 190, 220, 215, 135, 57, 83, 225, 95, 6, 213, 2, 47, 146, 192, 15, 127, 152, 66, 38, 228, 22, 42, 199, 19, 148, 111, 158, 249, 182, 201, 41, 208, 145, 13, 249, 57, 133, 83, 29, 139, 12, 88, 11, 109, 253, 8, 174, 0, 168, 196, 88, 21, 82, 147, 202, 36, 21, 199, 236, 201, 138, 208, 82, 12, 199, 155, 192, 239, 108, 48, 51, 133, 47, 233, 50, 95, 179, 11, 63, 117, 180, 31, 114, 193, 5, 78, 242, 85, 37, 68, 130, 235, 142, 100, 34, 40, 84, 228, 89, 164, 207, 178, 12, 42, 75, 217, 10, 145, 118, 163, 190, 207, 169, 66, 126, 112, 80, 132, 204, 41, 157, 217, 217, 211, 240, 194, 223, 15, 181, 179, 192, 174, 41, 225, 132, 138, 160, 30, 133, 183, 110, 112, 240, 56, 209, 222, 244, 206, 67, 67, 38, 181, 219, 43, 247, 121, 225, 123, 199, 136, 49, 61, 150, 188, 178, 8, 29, 50, 194, 105, 244, 122, 95, 173, 33, 204, 162, 69, 158, 18, 57, 253, 46, 66, 22, 206, 62, 73, 164, 32, 101, 23, 237, 230, 128, 23, 156, 45, 18, 38, 64, 238, 79, 217, 23, 101, 240, 36, 147, 205, 237, 143, 101, 93, 173, 240, 138, 152, 114, 29, 214, 165, 253, 155, 29, 166, 36, 247, 108, 60, 168, 56, 111, 88, 139, 224, 126, 120, 223, 209, 245, 144, 247, 190, 177, 105, 149, 112, 102, 55, 254, 201, 87, 69, 80, 254, 27, 145, 84, 214, 179, 63, 171, 93, 178, 144, 40, 230, 254, 62, 204, 252, 97, 2, 38, 186, 71, 254, 169, 85, 154, 183, 249, 7, 221, 189, 112, 54, 110, 145, 89, 70, 185, 81, 158, 110, 115, 255, 183, 251, 198, 163, 9, 255, 80, 61, 31, 119, 94, 218, 255, 33, 230, 98, 52, 21, 136, 190, 22, 69, 227, 95, 178, 98, 39, 212, 159, 110, 33, 72, 155, 141, 91, 227, 83, 192, 207, 3, 155, 29, 95, 72, 82, 121, 57, 240, 225, 166, 176, 220, 149, 200, 93, 124, 184, 121, 52, 30, 8, 71, 39, 94,

- 50, 239, 217, 136, 19, 132, 28, 63, 215, 124, 227, 196, 100, 230, 70, 158, 148, 151, 198, 7, 117, 84, 115, 230, 214, 27, 120, 218, 229, 176, 101, 181, 162, 242, 160, 150, 69, 222, 0, 128, 2, 238, 80, 180, 232, 163, 135, 87, 251, 134, 187, 14, 154, 64, 170, 235, 63, 123, 104, 24, 252, 141, 91, 157, 205, 72, 7, 26, 17, 73, 66, 203, 90, 125, 121, 250, 17, 35, 119, 54, 220, 179, 246, 118, 22, 222, 39, 20, 244, 54, 115, 100, 75, 98, 89, 249, 230, 85, 21, 25, 57, 150, 180, 69, 222, 109, 16, 103, 107, 104, 204, 249, 42, 238, 248, 79, 78, 76, 150, 65, 134, 126, 66, 136, 48, 223, 92, 241, 191, 67, 198, 217, 22, 12, 252, 8, 50, 114, 99, 184, 176, 30, 180, 240, 16, 20, 21, 173, 63, 66, 13, 49, 51, 3, 208, 185, 36, 0, 124, 197, 157, 46, 254, 132, 40, 119, 211, 69, 123, 123, 231, 109, 170, 91, 198, 213, 117, 78, 255, 144, 87, 2, 234, 37, 245, 186, 161, 44, 123, 5, 33, 37, 140, 92, 109, 236, 203, 149, 181, 25, 42, 67, 45, 50, 175, 189, 52, 94, 219, 108, 226, 142, 75, 209, 251, 254, 124, 74, 201, 143, 226, 38, 82, 161, 47, 33, 88, 255, 24, 97, 89, 218, 30, 35, 19, 105, 232, 103, 177, 148, 136, 92, 182, 107, 93, 151, 176, 215, 89, 187, 207, 192, 186, 159, 210, 61, 52, 193, 134, 190, 3, 130, 72, 190, 222, 73, 70, 128, 199, 157, 62, 222, 49, 213, 70, 180, 225, 93, 11, 95, 10, 209, 164, 142, 154, 176, 216, 222, 125, 161, 43, 124, 183, 200, 140, 143, 86, 216, 122, 41, 178, 153, 251, 199, 219, 251, 243, 18, 57, 14, 183, 216, 201, 196, 75, 74, 241, 205, 133, 102, 73, 214, 224, 12, 246, 96, 126, 117, 186, 92, 103, 50, 173, 222, 156, 107, 242, 79, 233, 247, 39, 219, 61, 193, 125, 164, 62, 166, 100, 16, 246, 192, 36, 198, 38, 63, 19, 125, 243, 44, 254, 23, 21, 0, 222, 98, 34, 52, 28, 240, 106, 246, 202, 214, 38, 100, 227, 243, 86, 200, 50, 41, 146, 242, 132, 12, 100, 30, 244, 87, 13, 53, 148, 91, 38, 6, 40, 148, 113, 185, 215, 215, 5, 166, 238, 9, 193, 224, 182, 159, 168, 104, 36, 124, 76, 162, 187, 140, 125, 9, 255, 248, 127, 199, 16, 239, 101, 196, 124, 151, 111, 180, 115, 126, 206, 158, 127, 37, 130, 32, 117, 242, 172, 145, 185, 211, 208, 227, 80, 175, 234, 35, 186, 30, 16, 216, 204, 31, 60, 183, 62, 53, 247, 247, 17, 187, 127, 188, 79, 13, 220, 239, 189, 155, 52, 88, 194, 39, 232, 31, 209, 25, 104, 90, 23, 193, 150, 119, 157, 251, 171, 64, 10, 137, 154, 207, 215, 101, 183, 84, 248, 146, 73, 202, 51, 50, 205, 185, 237, 92, 133, 5, 232, 159, 19, 115, 228, 79, 249, 139, 243, 165, 177, 186, 160, 163, 111, 150, 206, 140, 122, 215, 229, 110, 200, 110, 124, 61, 106, 246, 108, 23, 145, 244, 103, 216, 127, 135, 68, 51, 78, 154, 150, 224, 121, 137, 182, 223, 128, 233, 94, 252, 87, 42, 1, 229, 109, 91, 223, 163, 201, 134, 52, 69, 3, 219, 191, 237, 55, 222, 16, 126, 137, 27, 132, 48, 164, 108, 115, 11, 35, 101, 29, 6, 3, 80, 16, 24, 188, 235, 130, 3, 199, 101, 153, 195, 88, 32, 142, 163, 23, 89, 20, 44, 178, 62, 44, 206, 17, 152, 1, 136, 79, 79, 60, 71, 31, 221, 119, 155, 123, 217, 183, 117, 204, 129, 190, 13, 108, 21, 109, 182, 189, 45, 128, 149, 230, 139, 227, 43, 113, 83, 242, 186, 62, 15, 14, 149, 73, 24, 192, 110, 225, 118, 183, 116, 68, 217, 44, 2, 28, 52, 57, 24, 217, 100, 32, 200, 219, 127, 79, 64, 34, 148, 216, 162, 201, 152, 109, 129, 32, 197, 106, 104, 196, 30, 96, 21, 65, 146, 161, 237, 18, 79, 98, 110, 157, 234, 96, 197, 98, 126, 213, 74, 221, 56, 13, 95, 132, 187, 201, 208, 194, 175, 163, 255, 225, 198, 87, 160, 217, 147, 160, 53, 190, 83, 189, 10, 205, 8, 61, 9, 69, 16, 182, 152, 97, 165, 82, 203, 103, 212, 14, 92, 76, 148, 130, 176, 37, 21, 37, 36, 93, 91, 26, 236, 148, 15, 3, 208, 96, 115, 127, 241, 136, 161, 87, 115, 71, 238, 242, 150, 140, 184, 167, 48, 81, 155, 170, 206, 240, 167, 171, 108, 89, 215, 232, 243, 40, 252, 179, 142, 253, 178, 189, 234, 228, 0, 13, 123, 115, 188, 118, 94, 45, 42, 13, 41, 99, 180, 43, 195, 147, 167, 68, 36, 213, 36, 235, 195, 245, 160, 48, 140, 254, 96, 182, 151, 254, 27, 3, 68, 82, 2, 246, 60, 95, 110, 57, 132, 248, 236, 34, 155, 231, 121, 178, 126, 94, 248, 23, 137, 126, 189, 31, 146, 145, 125, 203, 235, 19, 181, 78, 141, 215, 27, 216, 255, 96, 16, 151, 220, 251, 48, 140, 110, 48, 132, 216, 49, 57, 152, 237, 164, 77, 99, 139, 38, 198, 84, 86, 244, 10, 184, 111, 20, 13, 239, 24, 194, 18, 237, 19, 61, 216, 182, 33, 202, 20, 248, 149, 146, 238, 59, 23, 9, 142, 199, 154, 229, 200, 18, 64, 160, 198, 94, 42, 190, 175, 145, 107, 91, 31, 30, 152, 169, 192, 102, 215, 219, 173, 237, 215, 122, 18, 240, 121, 117, 231, 35, 129, 255, 171, 93, 2, 102, 151, 231, 230, 238, 9, 137, 198, 231, 146, 117, 85, 81, 224, 253, 57, 113, 97, 69, 147, 76, 193, 93, 178, 223, 251, 4, 203, 157, 41, 199, 38, 254, 161, 107, 191, 251, 91, 228, 199, 66, 182, 194, 18, 139, 127, 101, 1, 232, 167, 12, 62, 144, 115, 32, 146, 8, 252, 141, 239, 161, 43, 196, 77, 117, 97, 106, 33, 2, 117, 19, 16, 145, 84, 39, 140, 237, 240, 221, 50, 167, 211, 198, 79, 5, 208, 171, 36, 54, 49, 249, 5, 91, 76, 188, 222, 94, 156, 217, 81, 222, 27, 1, 169, 182, 124, 54, 44, 41, 118, 71, 115, 210, 148, 111, 242, 245, 223, 180, 118, 59, 99, 78, 243, 216, 167, 33, 43, 28, 249, 142, 209, 178, 74, 164, 67, 210, 87, 120, 157, 105, 108, 220, 87, 193, 221, 66, 184, 183, 32, 105, 17, 79, 69, 212, 16, 11, 147, 213, 251, 236, 245, 14, 1, 108, 36, 37, 219, 130, 23, 66, 29, 171, 188, 113, 38, 146, 23, 27, 236, 142, 129, 14, 184, 252, 195, 215, 29, 125, 121, 30, 134, 89, 219, 48, 107, 129, 33, 167, 154, 175, 207, 78, 140, 245, 114, 97, 173, 27, 137, 139, 165, 20, 66, 184, 238, 194, 84, 211, 100, 232, 6, 195, 127, 150, 34, 152, 78, 164, 199, 186, 248, 170, 110, 58, 163, 169, 171, 83, 253, 69, 43, 53, 74, 156, 90, 100, 200, 181, 62, 2, 253, 162, 137, 210, 51, 32, 143, 137, 131, 63, 152, 191, 184, 199, 126, 189, 83, 253, 125, 92, 9, 9, 228, 213, 224, 249, 88, 132, 135, 51, 203, 168, 90, 171, 126, 29, 148, 43, 157, 145, 34, 241, 101, 150, 92, 189, 72, 67, 165, 166, 67, 33, 3, 139, 80, 72, 27, 165, 70, 129, 46, 212, 7, 66, 83, 185, 119, 150, 67, 61, 151, 113, 145, 134, 84, 13, 134, 81, 197, 84, 48, 99, 219, 180, 72, 107, 242, 236, 245, 112, 182, 23, 83, 46, 21, 58, 17, 224, 108, 139, 91, 17, 147, 130, 214, 37, 55, 200, 18, 188, 239, 36, 247, 134, 206, 2, 91, 231, 165, 179, 139, 200, 229, 171, 227, 222, 150, 189, 161, 138, 8, 112, 170, 213, 184, 107, 191, 101, 143, 95, 119, 21, 135, 32, 139, 165, 88, 153, 70, 39, 199, 82, 199, 214, 117, 54, 22, 179, 204, 231, 83, 190, 236, 81, 243, 193, 56, 79, 106, 153, 202, 118, 161, 168, 16, 83, 28, 2, 103, 0, 15, 207, 50, 13, 118, 92, 203, 167, 222, 81, 171, 184, 254, 130, 187, 17, 222, 78, 239, 126, 166, 163, 31, 111, 216, 215, 152, 92, 27, 4, 241, 190, 38, 60, 114, 175, 89, 243, 1, 131, 126, 243, 247, 155, 104, 96, 208, 47, 156, 172, 131, 135, 142, 58, 201, 168, 215, 243, 38, 33, 33, 158, 248, 232, 246, 145, 153, 241, 60, 203, 209, 19, 131, 192, 28, 156, 202, 232, 78, 191, 83, 147, 230, 160, 3, 255, 246, 222, 28, 55, 83, 224, 141, 25, 197, 226, 221, 58, 254, 102, 98, 66, 223, 125, 103, 226, 209, 173, 164, 92, 182, 208, 224, 198, 50, 1, 178, 241, 29, 48, 90, 97, 194, 133, 50, 68, 221, 40, 223, 138, 228, 226, 251, 48, 28, 204, 239, 174, 52, 222, 125, 218, 33, 14, 193, 78, 229, 37, 166, 56, 179, 243, 34, 101, 62, 78, 214, 52, 98, 167, 216, 16, 253, 116, 185, 65, 220, 28, 216, 159, 171, 94, 162, 115, 104, 22, 106, 213, 72, 94, 166, 168, 91, 9, 60, 93, 177, 165, 60, 36,

- 155, 97, 185, 41, 19, 16, 173, 163, 49, 29, 51, 29, 78, 174, 79, 200, 224, 220, 142, 16, 28, 198, 211, 153, 211, 252, 108, 96, 53, 24, 44, 139, 215, 28, 254, 41, 178, 252, 41, 130, 244, 128, 176, 44, 190, 173, 128, 92, 98, 120, 74, 87, 43, 27, 204, 159, 233, 205, 134, 35, 31, 19, 27, 73, 148, 28, 60, 57, 15, 35, 62, 209, 128, 247, 9, 111, 173, 33, 146, 108, 201, 208, 26, 251, 182, 79, 22, 189, 232, 235, 210, 126, 75, 243, 112, 29, 190, 12, 249, 55, 34, 97, 20, 140, 77, 81, 134, 112, 56, 138, 22, 41, 168, 184, 126, 244, 138, 42, 182, 225, 143, 180, 105, 89, 185, 30, 167, 59, 195, 81, 81, 21, 78, 176, 120, 123, 120, 14, 79, 43, 201, 80, 43, 44, 245, 90, 4, 206, 148, 202, 21, 200, 14, 255, 76, 54, 190, 28, 201, 177, 226, 175, 56, 32, 244, 240, 159, 78, 140, 34, 8, 245, 160, 171, 182, 87, 120, 123, 145, 216, 33, 56, 30, 93, 206, 179, 155, 43, 179, 26, 184, 190, 52, 11, 224, 151, 199, 66, 42, 238, 240, 100, 68, 90, 186, 252, 214, 236, 145, 127, 94, 175, 1, 220, 159, 135, 172, 134, 83, 41, 12, 42, 238, 9, 205, 101, 179, 219, 47, 228, 194, 124, 105, 91, 95, 175, 23, 6, 113, 72, 168, 87, 75, 72, 57, 81, 119, 37, 27, 131, 162, 108, 150, 27, 149, 110, 50, 126, 156, 255, 43, 242, 188, 21, 8, 250, 240, 165, 80, 1, 57, 105, 238, 206, 143, 28, 167, 122, 155, 96, 37, 150, 17, 27, 182, 203, 15, 1, 195, 114, 198, 240, 18, 148, 186, 101, 66, 99, 204, 15, 81, 21, 142, 170, 46, 198, 151, 57, 88, 60, 44, 210, 246, 52, 209, 60, 32, 180, 246, 38, 207, 91, 31, 187, 120, 121, 253, 252, 207, 91, 116, 84, 152, 60, 156, 218, 5, 213, 232, 62, 73, 47, 119, 74, 67, 41, 16, 213, 212, 71, 160, 0, 252, 132, 188, 111, 41, 90, 202, 84, 146, 102, 178, 49, 231, 218, 23, 55, 48, 171, 101, 202, 31, 14, 102, 43, 187, 211, 99, 203, 145, 112, 190, 246, 192, 142, 27, 230, 120, 57, 248, 38, 49, 95, 193, 121, 82, 137, 137, 248, 208, 80, 16, 194, 78, 84, 111, 167, 116, 110, 196, 119, 253, 172, 66, 131, 49, 113, 243, 234, 31, 2, 170, 186, 250, 167, 75, 8, 17, 162, 227, 241, 152, 132, 201, 139, 240, 190, 24, 229, 29, 189, 241, 237, 53, 130, 131, 105, 217, 89, 86, 76, 163, 65, 228, 86, 208, 112, 230, 39, 76, 137, 60, 118, 241, 253, 217, 225, 230, 199, 147, 87, 82, 169, 161, 139, 130, 146, 82, 251, 233, 237, 234, 63, 3, 211, 170, 214, 177, 104, 67, 28, 176, 25,

- 115, 137, 255, 3, 66, 113, 146, 78, 149, 169, 52, 127, 243, 228, 164, 235, 68, 209, 200, 97, 83, 134, 208, 245, 200, 26, 88, 14, 10, 253, 114, 224, 253, 194, 29, 138, 247, 85, 210, 162, 44, 203, 56, 126, 24, 0, 242, 103, 88, 242, 199, 129, 2, 68, 229, 92, 178, 196, 179, 32, 163, 154, 11, 148, 167, 178, 20, 177, 158, 226, 6, 91, 191, 128, 182, 113, 141, 97, 172, 63, 121, 203, 22, 45, 165, 62, 73, 159, 41, 97, 69, 207, 92, 89, 144, 156, 191, 73, 35, 0, 94, 190, 83, 115, 18, 43, 167, 26, 63, 89, 14, 78, 118, 254, 240, 111, 79, 115, 20, 2, 123, 103, 105, 85, 80, 0, 161, 183, 173, 191, 244, 113, 254, 126, 251, 35, 41, 70, 181, 167, 60, 217, 78, 52, 211, 52, 199, 179, 19, 111, 124, 198, 161, 187, 59, 64, 193, 189, 107, 75, 175, 78, 161, 117, 36, 212, 106, 11, 127, 188, 189, 216, 195, 187, 181, 84, 4, 17, 246, 199, 154, 43, 97, 222, 162, 98, 181, 114, 176, 253, 106, 26, 79, 229, 203, 214, 62, 102, 170, 36, 54, 89, 70, 48, 100, 169, 102, 252, 242, 174, 79, 145, 195, 166, 126, 53, 242, 132, 44, 88, 247, 142, 130, 154, 233, 9, 66, 196, 182, 30, 165, 115, 207, 182, 104, 14, 95, 172, 250, 48, 242, 201, 224, 219, 17, 39, 209, 81, 209, 148, 128, 77, 40, 1, 164, 108, 244, 188, 250, 114, 225, 58, 253, 253, 157, 81, 8, 255, 136, 172, 207, 66, 251, 172, 217, 225, 150, 85, 96, 195, 121, 179, 190, 230, 122, 237, 231, 7, 221, 145, 139, 220, 239, 219, 31, 235, 232, 140, 222, 117, 210, 32, 13, 155, 16, 184, 131, 202, 178, 94, 2, 96, 191, 255, 78, 252, 117, 251, 245, 212, 198, 187, 126, 37, 87, 192, 123, 110, 198, 66, 150, 141, 64, 44, 38, 99, 135, 223, 226, 172, 76, 47, 13, 194, 152, 112, 112, 175, 101, 21, 64, 196, 206, 33, 26, 189, 111, 210, 198, 116, 241, 232, 155, 237, 79, 183, 232, 156, 67, 20, 14, 19, 97, 6, 1, 122, 181, 17, 64, 8, 59, 207, 172, 89, 173, 118, 50, 102, 55, 121, 243, 69, 77, 68, 112, 65, 119, 205, 160, 188, 47, 74, 77, 26, 165, 230, 228, 19, 255, 106, 107, 167, 36, 64, 215, 98, 253, 47, 0, 225, 250, 213, 220, 82, 213, 61, 100, 114, 177, 109, 196, 140, 214, 99, 137, 98, 141, 225, 16, 104, 35, 40, 204, 225, 104, 235, 77, 230, 37, 73, 104, 64, 134, 60, 42, 51, 96, 118, 117, 85, 1, 209, 33, 27, 55, 240, 214, 140, 80, 177, 107, 175, 190, 106, 113, 122, 144, 124, 193, 89, 141, 225, 210, 194, 29, 73, 239, 151, 48, 225, 1, 12, 201, 63, 62, 215, 48, 92, 118, 113, 228, 141, 224, 98, 203, 28, 20, 124, 149, 252, 86, 77, 155, 24, 61, 2, 116, 207, 20, 237, 246, 36, 66, 11, 167, 17, 142, 36, 76, 137, 100, 142, 111, 216, 235, 239, 212, 153, 159, 36, 189, 147, 132, 96, 127, 148, 116, 232, 119, 38, 174, 16, 167, 70, 78, 187, 21, 13, 3, 192, 211, 43, 201, 102, 112, 125, 240, 198, 162, 92, 84, 28, 54, 197, 117, 149, 222, 140, 202, 70, 24, 100, 128, 114, 90, 230, 110, 37, 161, 144, 199, 157, 112, 2, 169, 253, 223, 149, 48, 181, 87, 169, 177, 177, 134, 119, 248, 119, 84, 90, 71, 252, 95, 233, 180, 232, 119, 168, 33, 252, 72, 112, 81, 67, 253, 147, 217, 171, 42, 4, 233, 161, 175, 227, 239, 10, 181, 35, 28, 40, 203, 131, 30, 85, 188, 119, 163, 99, 117, 203, 35, 67, 204, 92, 185, 6, 124, 243, 211, 102, 252, 243, 246, 109, 44, 90, 250, 23, 191, 151, 107, 213, 141, 224, 81, 3, 207, 157, 50, 198, 216, 87, 233, 96, 125, 116, 53, 31, 214, 138, 9, 208, 10, 152, 222, 172, 155, 90, 86, 201, 47, 92, 9, 7, 28, 132, 33, 118, 76, 13, 212, 87, 191, 69, 18, 6, 60, 5, 78, 153, 20, 173, 154, 44, 255, 104, 127, 126, 17, 110, 254, 141, 174, 42, 148, 15, 168, 18, 66, 5, 89, 63, 199, 76, 162, 98, 116, 217, 194, 219, 135, 227, 172, 230, 128, 199, 30, 141, 124, 199, 174, 180, 67, 14, 171, 217, 151, 18, 161, 248, 248, 208, 99, 247, 170, 242, 126, 43, 74, 100, 99, 133, 143, 167, 10, 122, 217, 249, 248, 195, 150, 129, 222, 212, 12, 121, 13, 35, 213, 241, 67, 242, 89, 24, 73, 244, 253, 152, 203, 83, 56, 216, 239, 91, 119, 176, 75, 40, 247, 195, 145, 19, 198, 83, 119, 242, 235, 60, 243, 175, 25, 26, 78, 22, 39, 124, 232, 206, 208, 79, 243, 155, 24, 17, 175, 197, 145, 47, 113, 176, 76, 223, 120, 123, 255, 255, 140, 174, 237, 83, 201, 165, 68, 55, 133, 9, 149, 212, 48, 57, 242, 33, 115, 202, 242, 23, 57, 203, 238, 12, 178, 102, 190, 191, 219, 119, 102, 116, 233, 243, 133, 8, 89, 28, 115, 196, 150, 71, 218, 211, 176, 77, 122, 159, 58, 9, 178, 167, 229, 196, 24, 56, 211, 216, 108, 91, 157, 203, 217, 209, 191, 86, 202, 109, 179, 26, 234, 162, 33, 218, 90, 144, 147, 18, 209, 99, 254, 233, 111, 229, 170, 8, 42, 163, 125, 165, 248, 100, 190, 210, 233, 202, 90, 77, 27, 27, 221, 192, 243, 76, 6, 130, 125, 95, 247, 154, 75, 227, 183, 104, 174, 178, 150, 164, 46, 174, 79, 198, 197, 5, 223, 129, 72, 10, 139, 143, 6, 130, 101, 183, 205, 167, 62, 47, 92, 254, 237, 211, 126, 155, 146, 229, 215, 85, 235, 156, 62, 43, 232, 234, 201, 21, 174, 80, 32, 32, 98, 150, 245, 54, 9, 72, 85, 178, 162, 255, 33, 55, 73, 99, 47, 68, 193, 217, 47, 239, 72, 32, 219, 44, 121, 44, 123, 65, 99, 186, 193, 244, 175, 6, 49, 58, 193, 1, 30, 5, 102, 68, 42, 142, 90, 24, 96, 134, 180, 246, 238, 94, 161, 240, 94, 103, 2, 142, 198, 67, 254, 219, 23, 118, 236, 49, 92, 123, 84, 91, 115, 165, 225, 123, 20, 35, 170, 215, 12, 52, 69, 197, 54, 134, 210, 23, 219, 49, 31, 2, 160, 140, 221, 233, 191, 238, 215, 86, 74, 36, 28, 233, 171, 77, 34, 142, 162, 20, 65, 207, 143, 113, 27, 132, 94, 227, 94, 39, 237, 150, 233, 97, 133, 182, 139, 158, 241, 100, 52, 22, 49, 19, 46, 213, 120, 171, 98, 53, 245, 125, 219, 226, 231, 217, 184, 159, 156, 33, 78, 183, 114, 1, 83, 156, 184, 32, 146,

- 76, 39, 35, 120, 134, 38, 40, 61, 149, 239, 77, 198, 218, 68, 214, 126, 255, 1, 128, 226, 109, 8, 242, 142, 246, 4, 78, 223, 249, 167, 70, 129, 103, 46, 18, 250, 47, 128, 174, 27, 248, 0, 38, 9, 34, 247, 236, 141, 6, 211, 212, 173, 116, 120, 163, 215, 105, 162, 59, 203, 144, 175, 206, 128, 5, 74, 239, 186, 45, 248, 237, 51, 133, 96, 2, 23, 199, 195, 55, 212, 39, 30, 182, 34, 109, 175, 203, 81, 101, 81, 17, 15, 246, 204, 217, 222, 40, 53, 218, 20, 114, 181, 96, 193, 177, 77, 145, 16, 164, 106, 83, 235, 64, 119, 2, 100, 41, 181, 206, 105, 102, 104, 242, 6, 168, 183, 125, 58, 129, 184, 92, 6, 157, 122, 100, 48, 100, 100, 32, 232, 7, 139, 117, 135, 78, 8, 27, 12, 86, 8, 74, 144, 6, 75, 207, 21, 64, 73, 14, 141, 188, 49, 56, 184, 254, 208, 173, 59, 110, 182, 145, 185, 130, 236, 226, 4, 165, 47, 118, 37, 1, 240, 193, 13, 54, 93, 173, 231, 151, 65, 35, 86, 206, 207, 127, 203, 45, 189, 65, 150, 199, 156, 66, 124, 208, 127, 20, 65, 229, 134, 127, 107, 223, 12, 0, 156, 154, 57, 210, 199, 160, 159, 61, 92, 99, 84, 135, 94, 194, 66, 185, 86, 207, 106, 162, 27, 148, 30, 122, 145, 50, 116, 94, 180, 65, 159, 194, 92, 97, 17, 174, 209, 94, 207, 170, 140, 135, 8, 67, 197, 55, 119, 180, 56, 118, 73, 126, 31, 46, 105, 212, 71, 212, 158, 77, 233, 181, 149, 98, 207, 153, 137, 73, 227, 29, 115, 92, 57, 57, 87, 88, 43, 227, 28, 232, 62, 25, 161, 219, 120, 229, 187, 145, 248, 69, 17, 180, 118, 145, 141, 145, 226, 158, 251, 118, 112, 47, 116, 247, 2, 118, 51, 82, 10, 103, 197, 77, 103, 33, 184, 92, 90, 225, 6, 98, 47, 147, 162, 175, 213, 213, 53, 59, 77, 22, 5, 100, 11, 174, 148, 131, 94, 122, 41, 217, 127, 118, 80, 254, 31, 239, 244, 184, 31, 55, 17, 73, 114, 105, 42, 15, 42, 168, 161, 48, 25, 85, 9, 250, 239,

- 218, 176, 107, 222, 15, 8, 38, 62, 62, 77, 167, 131, 178, 229, 42, 91, 113, 4, 169, 46, 134, 234, 137, 41, 183, 22, 70, 230, 173, 104, 187, 118, 183, 191, 254, 230, 119, 120, 96, 91, 236, 139, 252, 206, 173, 10, 139, 56, 108, 182, 209, 206, 215, 215, 151, 137, 52, 221, 222, 95, 172, 104, 17, 164, 36, 241, 243, 196, 48, 169, 143, 213, 42, 81, 37, 125, 63, 172, 49, 237, 217, 12, 71, 246, 173, 93, 210, 107, 232, 139, 53, 186, 250, 198, 227, 150, 159, 102, 135, 171, 215, 97, 79, 2, 27, 119, 100, 160, 89, 178, 221, 249, 140, 200, 146, 86, 71, 222, 187, 87, 32, 36, 165, 212, 69, 217, 2, 245, 111, 141, 68, 97, 194, 226, 221, 79, 103, 171, 167, 13, 14, 47, 247, 247, 110, 245, 2, 201, 244, 184, 83, 54, 75, 45, 57, 37, 16, 171, 167, 251, 145, 59, 199, 89, 128, 115, 123, 213, 201, 233, 248, 229, 186, 56, 74, 147, 7, 61, 26, 43, 214, 117, 4, 233, 137, 84, 44, 196, 231, 205, 98, 224, 50, 165, 13, 129, 17, 130, 2, 199, 207, 137, 230, 72, 66, 226, 247, 92, 203, 69, 161, 67, 239, 135, 84, 103, 21, 55, 146, 93, 102, 213, 228, 240, 70, 169, 25, 21, 184, 139, 233, 160, 115, 216, 77, 154, 251, 51, 229, 83, 76, 125, 200, 114, 60, 230, 158, 8, 83, 75, 143,

- 100, 237, 233, 114, 201, 130, 131, 145, 26, 139, 175, 222, 145, 241, 215, 149, 143, 72, 26, 197, 152, 172, 252, 161, 197, 109, 74, 125, 39, 165, 242, 133, 181, 212, 108, 144, 123, 180, 92, 137, 131, 129, 251, 109, 124, 45, 201, 247, 36, 68, 210, 196, 243, 198, 21, 4, 169, 209, 150, 228, 234, 221, 112, 230, 128, 42, 149, 145, 192, 217, 253, 191, 30, 59, 60, 216, 179, 240, 99, 48, 141, 19, 194, 62, 199, 131, 5, 179, 228, 47, 48, 82, 48, 109, 96, 220, 142, 111, 203, 251, 155, 117, 123, 208, 246, 173, 234, 197, 72, 165, 178, 2, 73, 73, 216, 20, 80, 169, 53, 45, 16, 138, 191, 182, 64, 250, 254, 198, 118, 89, 204, 21, 168, 76, 233, 249, 193, 148, 67, 58, 22, 231, 220, 49, 182, 64, 133, 75, 222, 153, 78, 51, 185, 103, 72, 79, 64, 103, 230, 234, 37, 5, 82, 132, 11, 208, 169, 250, 97, 73, 98, 219, 181, 167, 62, 70, 1, 244, 237, 67, 24, 57, 54, 20, 3, 124, 174, 124, 254, 110, 210, 37, 237, 95, 64, 198, 31, 60, 203, 243, 90, 180, 248, 241, 152, 56, 254, 115, 52, 156, 23, 226, 152, 210, 93, 221, 91, 68, 134, 38, 80, 113, 168, 150, 199, 124, 197, 229, 29, 186, 124, 226, 254, 199, 141, 127, 129, 47, 163, 41, 99, 186, 152, 4, 29, 63, 32, 88, 105, 122, 87, 28, 236, 253, 66, 20, 29, 173, 29, 49, 154, 90, 172, 243, 173, 48, 187, 98, 57, 97, 99, 75, 32, 204, 126, 176, 94, 147, 55, 116, 98, 144, 7, 23, 201, 187, 78, 240, 4, 130, 221, 108, 108, 240, 82, 208, 132, 223, 16, 80, 12, 214, 190, 47, 31, 7, 226, 59, 201, 73, 205, 213, 249, 60, 9, 124, 123, 99, 146, 6, 239, 97, 36, 217, 208, 15, 221, 217, 209, 243, 70, 197, 254, 7, 254, 210, 209, 84, 10, 134, 56, 234, 254, 238, 204, 13, 60, 45, 24, 57, 57, 31, 112, 14, 34, 180, 213, 170, 43, 53, 220, 10, 43, 103, 226, 67, 41, 189, 85, 13, 91, 48, 122, 144, 78, 207, 192, 57, 56, 59, 121, 108, 91, 207, 19, 249, 44, 59, 93, 79, 251, 82, 16, 171, 70, 188, 227, 165, 213, 109, 178, 62, 22, 84, 165, 155, 120, 193, 44, 149, 91, 214, 195, 26, 120, 98, 30, 188, 139, 126, 157, 218, 172, 103, 102, 73, 53, 39, 158, 214, 243, 23, 167, 83, 27, 167, 148, 122, 43, 140, 235, 19, 73, 25, 44, 222, 39, 110, 128, 70, 17, 142, 76, 245, 57, 229, 0, 178, 136, 244, 219, 65, 55, 140, 9, 28, 202, 43, 37, 68, 24, 28, 43, 232, 127, 106, 148, 124, 142, 108, 33, 36, 20, 182, 24, 234, 194, 31, 25, 209, 44, 160, 254, 242, 194, 98, 16, 225, 71, 56, 164, 78, 253, 240, 122, 47, 132, 29, 18, 85, 186, 234, 241, 245, 174, 14, 65, 170, 194, 69, 251, 182, 177, 57, 206, 32, 76, 65, 137, 221, 117, 67, 16, 235, 160, 56, 30, 94, 106, 250, 247, 115, 121, 152, 196, 60, 182, 111, 14, 179, 38, 171, 37, 37, 137, 174, 134, 240, 52, 65, 241, 104, 246, 147, 164, 175, 172, 26, 255, 53, 44, 21, 210, 231, 224, 49, 182, 122, 81, 167, 191, 78, 48, 30, 66, 107, 245, 27, 117, 93, 44, 17, 80, 239, 26, 206, 227, 174, 106, 83, 31, 155, 209, 106, 74, 41, 208, 197, 11, 121, 16, 160, 181, 35, 193, 145, 255, 182, 26, 14, 4, 123, 165, 207, 250, 132, 236, 95, 122, 244, 230, 96, 137, 147, 73, 175,

- 76, 127, 196, 12, 242, 167, 167, 48, 222, 225, 204, 71, 149, 148, 63, 106, 210, 112, 224, 215, 245, 21, 16, 115, 128, 83, 255, 224, 230, 247, 53, 241, 161, 120, 86, 155, 11, 66, 34, 46, 48, 176, 235, 66, 169, 42, 19, 204, 24, 46, 156, 59, 46, 215, 99, 226, 207, 219, 154, 85, 238, 40, 176, 197, 168, 5, 240, 84, 254, 77, 114, 176, 230, 134, 175, 140, 11, 165, 36, 87, 93, 238, 251, 1, 190, 74, 239, 251, 133, 248, 101, 160, 245, 102, 16, 145, 246, 195, 196, 113, 134, 238, 123, 44, 64, 223, 103, 178, 52, 13, 114, 73, 12, 15, 201, 167, 247, 156, 233, 81, 102, 26, 36, 115, 6, 47, 75, 167, 139, 116, 94, 237, 39, 12, 86, 230, 202, 127, 28, 199, 230, 85, 156, 176, 245, 199, 2, 243, 127, 128, 125, 90, 14, 140, 91, 122, 135, 194, 115, 43, 164, 37, 148, 159, 1, 64, 223, 41, 144, 89, 60, 178, 74, 234, 147, 109, 48, 74, 95, 124, 148, 51, 25, 84, 15, 137, 99, 85, 142, 181, 93, 73, 178, 166, 232, 108, 246, 62, 24, 186, 229, 43, 39, 147, 161, 232, 101, 204, 156, 250, 43, 125, 115, 176, 222, 213, 220, 66, 22, 71, 180, 62, 44, 25, 41, 81, 185, 230, 9, 128, 82, 216, 21, 62, 181, 70, 170, 37, 23, 83, 100, 73, 138, 205, 224, 65, 1, 157, 241, 48, 158, 242, 239, 247, 177, 44, 106, 204, 48, 242, 10, 42, 145, 53, 182, 204, 213, 194, 239, 93, 58, 199, 194, 185, 254, 128, 243, 229, 193, 39, 145, 49, 246, 128, 215, 30, 148, 85, 84, 16, 108, 24, 154, 142, 13, 192, 32, 245, 173, 250, 41, 34, 41, 154, 242, 111, 66, 104, 110, 185, 93, 68, 238, 239, 83, 50, 145, 154, 96, 156, 67, 96, 242, 163, 91, 156, 234, 147, 231, 242, 76, 72, 214, 231, 30, 50, 144, 40, 78, 106, 158, 74, 54, 86, 106, 57, 71, 18, 198, 142, 175, 153, 167, 44, 58, 117, 6, 157, 9, 88, 44, 56, 218, 139, 209, 35, 219, 153, 0, 13, 18, 67, 212, 173, 150, 185, 221, 23, 42, 65, 99, 76, 243, 39, 87, 248, 123, 94, 180, 239, 151, 243, 44, 213, 136, 72, 133, 30, 152, 158, 212, 62, 45, 129, 35, 105, 63, 37, 16, 239, 1, 188, 38, 65, 121, 28, 141, 34, 156, 139, 156, 97, 3, 190, 230, 8, 48, 252, 27, 221, 152, 30, 215, 242, 129, 163, 170, 71, 40, 203, 39, 84, 201, 62, 30, 245, 21, 154, 228, 57, 87, 228, 54, 80, 60, 205, 209, 162, 166, 199, 154, 235, 106, 124, 71, 23, 5, 166, 197, 181, 245, 208, 95, 231, 230, 130, 148, 173, 226, 252, 201, 153, 135, 213, 175, 134, 179, 85, 104, 167, 39, 244, 118, 157, 151, 161, 174, 248, 108, 84, 66, 127, 96, 72, 211, 227, 23, 169, 225, 32, 186, 14, 194, 145, 220, 183, 213, 114, 119, 28, 40, 188, 129, 140, 12, 150, 192, 57, 167, 228, 96, 29, 154, 193, 111, 115, 244, 106, 27, 207, 21, 217, 156, 37, 233, 15, 190, 196, 223, 108, 82, 202, 187, 204, 255, 154, 149, 230, 36, 142, 161, 148, 55, 151, 164, 251, 225, 210, 163, 88, 208, 205, 125, 170, 198, 139, 82, 27, 230, 205, 100, 13, 76, 249, 132, 12, 5, 108, 209, 211, 223, 58, 246, 108, 16, 108, 225, 52, 112, 242, 181, 226, 110, 132, 244, 141, 198, 74, 65, 176, 183, 85, 241, 161, 229, 208, 9, 158, 213, 56, 173, 66, 240, 101, 102, 31, 112, 191, 101, 139, 197, 88, 168, 240, 143, 73, 189, 240, 67, 239, 102, 157, 164, 93, 138, 101, 217, 197, 62, 91, 223, 247, 63, 70, 105, 116, 150, 100, 253, 201, 246, 119, 224, 1, 83, 172, 185, 233, 191, 194, 140, 67, 166, 85, 202, 150, 159, 20, 65, 240, 144, 68, 218, 59, 234, 55, 166, 235, 149, 138, 32, 74, 249, 235, 158, 185, 153, 61, 222, 48, 44, 39, 191, 159, 135, 203, 76, 224, 244, 177, 122, 200, 30, 179, 130, 135, 155, 192, 141, 149, 150, 58, 31, 121, 1, 158, 230, 62, 245, 106, 181, 126, 67, 16, 237, 47, 197, 202, 97, 28, 47, 117, 27, 176, 21, 227, 242, 42, 61, 129, 79, 100, 33, 17, 209, 251, 40, 112, 242, 17, 201, 224, 192, 120, 206, 198, 233, 152, 0, 220, 4, 7, 138, 240, 79, 85, 172, 168, 140, 199, 154, 103, 99, 212, 22, 55, 178, 41, 80, 250, 117, 68, 142, 7, 229, 39, 32, 175, 243, 31, 255, 226, 208, 199, 12, 64, 247, 59, 57, 200, 59, 93, 243, 83, 139, 177, 82, 47, 144, 81, 80, 18, 60, 72, 7, 177, 11, 71, 150, 37, 85, 229, 27, 145, 249, 242, 212, 228, 215, 197, 175, 244, 51, 218, 230, 52, 207, 233, 40, 143, 150, 0, 94, 252, 113, 126, 10, 201, 112, 122, 249, 182, 76, 74, 38, 114, 165, 231, 245, 241, 189, 94, 62, 66, 169, 87, 158, 65, 74, 190, 148, 133, 141, 150, 205, 94, 244, 207, 251, 216, 143, 170, 84, 229, 136, 78, 206, 203, 10, 215, 166, 106, 39, 17, 209, 95, 94, 107, 198, 138, 32, 2, 179, 154, 145, 94, 162, 122, 159, 107, 144, 2, 136, 113, 209, 195, 136, 63, 8, 11, 130, 221, 248, 196, 145, 141, 161, 107, 230, 84, 158, 146, 169, 205, 27, 243, 70, 37, 25, 173, 36, 250, 199, 248, 114, 141, 12, 165, 166, 43, 71, 197, 80, 177, 225, 61, 199, 178, 182, 216, 247, 31, 18, 179, 125, 11, 145, 86, 237, 31, 64, 36, 117, 208, 216, 18, 22, 49, 73, 143, 170, 174, 128, 170, 191, 180, 91, 186, 46, 40, 60, 139, 8, 206, 218, 143, 253, 246, 26, 94, 8, 73, 12, 16, 252, 21, 35, 160, 241, 254, 185, 4, 38, 225, 199, 242, 243, 19, 57, 109, 20, 30, 101, 177, 123, 186, 3, 97, 233, 220, 148, 194, 181, 180, 104, 167, 0, 45, 22, 20, 39, 214, 253, 40, 177, 207, 188, 221, 14, 186, 91, 164, 93, 39, 83, 203, 168, 143, 105, 65, 36, 177, 51, 95, 79, 149, 36, 62, 5, 52, 251, 179, 179, 48, 255, 210, 186, 46, 161, 130, 176, 239, 46, 3, 193, 34, 27, 59, 12, 117, 158, 176, 214, 159, 241, 54, 181, 138, 107, 29, 189, 231, 191, 78, 150, 193, 134, 83, 12, 174, 163, 213, 108, 242, 179, 148, 45, 244, 4, 51, 141, 139, 52, 146, 146, 3, 31, 141, 92, 80, 177, 106, 47, 111, 11, 188, 254, 177, 229, 114, 112, 226, 134, 218, 37, 90, 70, 142, 171, 243, 131, 114, 139, 215, 97, 137, 226, 8, 126, 7, 230, 206, 93, 142, 121, 172, 173, 245, 180, 75, 226, 46, 121, 163, 74, 125, 243, 170, 109, 33, 247, 9, 3, 121, 133, 241, 101, 91, 152, 5, 188, 7, 167, 30, 225, 128, 173, 235, 248, 32, 199, 47, 119, 117, 238, 160, 137, 26, 210, 172, 68, 86, 56, 232, 90, 220, 137, 197, 200, 81, 104, 194, 5, 28, 229, 105, 147, 214, 12, 137, 190, 62, 103, 178, 164, 89, 160, 187, 127, 251, 175, 89, 55, 10, 42, 31, 72, 155, 237, 95, 45, 34, 72, 217, 243, 232, 113, 29, 205, 180, 70, 24, 211, 164, 52, 34, 11, 180, 100, 131, 135, 131, 63, 143, 247, 219, 243, 83, 94, 171, 223, 132, 38, 2, 9, 251, 57, 38, 223, 228, 19, 39, 83, 212, 225, 242, 141, 70, 237, 79, 115, 249, 188, 64, 76, 26, 73, 207, 165, 199, 51, 58, 59, 65, 253, 163, 46, 248, 8, 209, 243, 90, 161, 198, 1, 21, 85, 154, 194, 121, 0, 61, 50, 206, 126, 45, 211, 96, 31, 172, 146, 75, 145, 208, 55, 89, 38, 246, 125, 218, 79, 102, 228, 233, 145, 34, 179, 183, 217, 81, 96, 159, 101, 118, 162, 145, 175, 198, 215, 154, 0, 52, 61, 181, 55, 248, 221, 150, 217, 216, 99, 226, 160, 4, 111, 2, 253, 167, 246, 48, 157, 235, 151, 109, 190, 184, 157, 246, 15, 172, 155, 81, 230, 53, 64, 32, 71, 214, 181, 132, 156, 211, 119, 173, 201, 69, 37, 230, 229, 27, 193, 239, 87, 88, 97, 46, 195, 60, 251, 36, 106, 142, 143, 145, 189, 164, 28, 183, 173, 36, 191, 153, 75, 252, 45, 106, 194, 7, 235, 147, 158, 74, 247, 58, 138, 203, 164, 89, 228, 111, 75, 221, 182, 226, 240, 124, 123, 138, 84, 220, 215, 78, 229, 152, 136, 105, 188, 140, 29, 201, 229, 133, 96, 243, 116, 39, 145, 228, 139, 139, 220, 63, 50, 88, 250, 99, 223, 255, 124, 232, 140, 96, 68, 174, 102, 150, 156, 129, 121, 229, 95, 224, 34, 237, 95, 149, 153, 199, 192, 35, 192, 159, 252, 151, 128, 72, 175, 188, 41, 162, 223, 253, 90, 221, 237, 46, 189, 31, 126, 9, 81, 230, 243, 72, 119, 119, 152, 1, 29, 120, 239, 220, 71, 250, 94, 29, 64, 120, 113, 208, 169, 140, 244, 51, 52, 71, 141, 202, 93, 150, 53, 33, 190, 228, 220, 91, 252, 188, 27, 156, 62, 7, 255, 24, 219, 160, 168, 68, 4, 93, 191, 164, 33, 127, 95, 215, 111, 169, 235, 154, 6, 38, 196, 46, 44, 244, 83, 104, 120, 59, 56, 226, 102, 89, 179, 191, 16, 147, 50, 62, 203, 65, 135, 139, 34, 138, 60, 213, 20, 121, 72, 171, 22, 95, 239, 187, 74, 209, 196, 185, 253, 32, 43, 200, 135, 26, 114, 177, 225, 77, 29, 159, 212, 137, 239, 229, 131, 56, 106, 225, 124, 92, 169, 138, 254, 1, 107, 152, 63, 226, 134, 131, 69, 157, 216, 18, 234, 226, 134, 40, 24, 76, 111, 11, 46, 125, 198, 36, 28, 104, 88, 244, 190, 124, 8, 141, 229, 255, 224, 222, 175, 121, 68, 194, 73, 186, 77, 92, 59, 130, 90, 149, 107, 28, 42, 245, 109, 132, 180, 241, 16, 144, 153, 227, 98, 149, 239, 188, 32, 236, 149, 221, 166, 181, 242, 142, 96, 31, 65, 11, 230, 5, 149, 209, 67, 176, 205, 97, 23, 188, 86, 42, 245, 200, 143, 128, 47, 99, 134, 125, 243, 43, 159, 125, 140, 158, 173, 126, 109, 220, 40, 144, 94, 22, 184, 57, 248, 120, 167, 61, 63, 245, 124, 52, 215, 31, 11, 58, 24, 222, 53, 155, 160, 183, 158, 133, 149, 160, 130, 249, 251, 229, 146, 16, 195, 1, 128, 166, 154, 150, 171, 12, 253, 226, 225, 188, 159, 210, 176, 202, 72, 63, 205, 97, 63, 59, 207, 142, 96, 12, 53, 92, 238, 32, 68, 78, 111, 160, 195, 191, 115, 212, 253, 122, 250, 15, 21, 108, 216, 51, 227, 166, 33, 135, 181, 89, 158, 182, 244, 200, 19, 147, 200, 185, 39, 170, 63, 103, 46, 240, 149, 121, 255, 208, 165, 237, 105, 113, 72, 51, 171, 141, 247, 178, 140, 142, 27, 216, 97, 42, 245, 147, 1, 109, 19, 215, 189, 226, 143, 68, 25, 131, 170, 122, 222, 69, 219, 142, 79, 184, 169, 239, 126, 104, 166, 111, 45, 223, 229, 142, 133, 50, 174, 123, 150, 55, 170, 214, 217, 170, 251, 160, 8, 22, 204, 100, 30, 126, 167, 69, 185, 226, 10, 254, 146, 127, 11, 3, 95, 78, 253, 115, 112, 176, 165, 171, 57, 147, 249, 37, 9, 146, 21, 203, 6, 248, 82, 221, 148, 207, 212, 4, 11, 153, 118, 140, 223, 9, 242, 153, 227, 15, 200, 54, 6, 205, 243, 118, 197, 0, 248, 154, 250, 129, 20, 59, 43, 191, 66, 89, 211, 206, 154, 240, 160, 58, 29, 222, 32, 177, 58, 97, 157, 111, 167, 185, 66, 145, 215, 226, 123, 133, 50, 103, 154, 136, 164, 168, 190, 91, 18, 133, 71, 186, 173, 171, 225, 196, 61, 119, 239, 75, 166, 31, 138, 67, 139, 172, 158, 41, 101, 121, 34, 35, 147, 129, 149, 210, 209, 193, 236, 5, 23, 156, 3, 115, 244, 137, 39, 83, 180, 183, 25, 89, 202, 31, 56, 222, 75, 169, 214, 61, 208, 11, 225, 61, 55, 147, 198, 85, 87, 200, 155, 194, 35, 18, 18, 222, 102, 162, 138, 153, 185, 152, 111, 86, 19, 206, 94, 146, 25, 145, 194, 141, 155, 179, 157, 210, 45, 234, 22, 129, 148, 57, 115, 1, 103, 199, 165, 173, 230, 94, 123, 43, 61, 164, 56, 199, 116, 123, 135, 249, 141, 51, 233, 79, 158, 241, 230, 73, 37, 82, 128, 88, 243, 205, 142, 210, 222, 109, 12, 233, 4, 222, 44, 101, 224, 186, 206, 133, 75, 33, 4, 50, 232, 154, 47, 225, 239, 178, 103, 227, 109, 127, 157, 251, 110, 198, 60, 141, 61, 115, 42, 174, 131, 93, 182, 230, 120, 170, 0, 32, 159, 66, 143, 205, 154, 143, 190, 118, 117, 123, 166, 227, 84, 112, 18, 193, 82, 15, 117, 238, 187, 54, 159, 177, 106, 174, 126, 222, 40, 72, 43, 31, 79, 233, 193, 252, 235, 138, 108, 254, 170, 239, 5, 60, 241, 208, 40, 90, 205, 247, 112, 48, 193, 205, 159, 162, 126, 253, 244, 43, 71, 238, 57, 120, 128, 199, 52, 14, 6, 239, 68, 73, 97, 173, 138, 6, 82, 22, 96, 68, 45, 45, 7, 94, 174, 170, 166, 10, 82, 193, 202, 117, 49, 10, 79, 41, 248, 251, 81, 251, 36, 120, 240, 15, 63, 126, 137, 174, 57, 209, 24, 250, 96, 148, 139, 67, 122, 201, 105, 178, 89, 2, 149, 199, 132, 59, 214, 32, 229, 194, 163, 241, 47, 211, 242, 11, 143, 123, 238, 76, 30, 97, 68, 170, 29, 65, 92, 184, 175, 217, 0, 100, 170, 152, 107, 162, 209, 31, 117, 92, 20, 156, 69, 117, 208, 134, 204, 64, 158, 86, 41, 95, 100, 6, 141, 246, 3, 200, 25, 91, 160, 48, 103, 228, 136, 94, 150, 158, 145, 64, 219, 239, 55, 252, 90, 121, 64, 251, 147, 207, 133, 245, 201, 127, 190, 146, 172, 28, 87, 15, 243, 1, 139, 188, 223, 15, 223, 119, 41, 134, 19, 65, 148, 137, 254, 118, 215, 49, 77, 247, 236, 124, 172, 142, 246, 17, 59, 183, 196, 9, 255, 195, 119, 142, 131, 139, 134, 147, 21, 198, 142, 221, 241, 63, 112, 165, 87, 211, 205, 45, 84, 42, 181, 42, 214, 65, 5, 114, 153, 43, 92, 25, 122, 218, 89, 10, 226, 239, 104, 250, 213, 40, 3, 50, 101, 70, 62, 166, 177, 91, 232, 5, 139, 90, 156, 185, 8, 160, 98, 113, 83, 113, 27, 15, 168, 91, 240, 199, 46, 44, 202, 131, 33, 94, 139, 191, 50, 214, 33, 111, 221, 67, 153, 165, 70, 209, 136, 89, 191, 247, 17, 27, 75, 217, 93, 171, 45, 84, 238, 11, 209, 243, 214, 110, 230, 213, 48, 101, 40, 10, 47, 109, 129, 209, 149, 135, 190, 162, 147, 168, 231, 29, 203, 3, 253, 226, 201, 232, 222, 190, 143, 118, 169, 93, 240, 117, 128, 238, 7, 209, 248, 178, 68, 44, 197, 26, 98, 88, 65, 198, 143, 198, 21, 147, 167, 140, 194, 142, 172, 8, 173, 149, 2, 174, 251, 119, 168, 33, 132, 180, 174, 7, 195, 194, 11, 10, 100, 163, 163, 98, 53, 71, 4, 229, 99, 183, 242, 203, 54, 64, 66, 225, 199, 194, 163, 45, 110, 86, 136, 163, 138, 222, 135, 148, 200, 140, 198, 111, 107, 184, 28, 85, 180, 37, 3, 231, 155, 121, 130, 87, 78, 117, 108, 94, 215, 101, 102, 222, 236, 16, 199, 145, 188, 71, 190, 4, 24, 214, 35, 120, 60, 212, 69, 251, 52, 248, 149, 85, 6, 214, 245, 86, 48, 178, 139, 109, 51, 1, 145, 52, 221, 217, 158, 212, 13, 19, 78, 221, 76, 67, 157, 213, 126, 234, 86, 122, 24, 223, 204, 255, 173, 233, 109, 39, 116, 53, 238, 229, 104, 23, 147, 204, 247, 85, 34, 228, 38, 125, 244, 71, 188, 45, 169, 216, 99, 103, 4, 137, 183, 157, 217, 48, 2, 29, 51, 107, 7, 64, 155, 73, 169, 206, 196, 193, 193, 175, 226, 74, 139, 138, 248, 58, 197, 76, 247, 95, 89, 169, 113, 79, 244, 46, 33, 180, 47, 95, 177, 242, 209, 213, 112, 28, 60, 16,

- 97, 66, 167, 114, 213, 135, 153, 216, 1, 253, 32, 173, 29, 66, 44, 247, 166, 25, 65, 22, 239, 83, 49, 45, 75, 193, 49, 152, 194, 73, 97, 154, 109, 87, 246, 249, 133, 241, 209, 8, 238, 242, 38, 237, 15, 246, 199, 143, 173, 138, 249, 143, 20, 183, 106, 31, 214, 152, 228, 176, 25, 203, 238, 239, 3, 142, 54, 231, 12, 189, 42, 12, 23, 126, 81, 118, 4, 157, 181, 235, 164, 150, 29, 146, 94, 201, 209, 207, 151, 184, 153, 166, 211, 202, 46, 20, 137, 76, 238, 206, 89, 103, 242, 133, 40, 68, 250, 212, 190, 120, 16, 220, 118, 202, 250, 166, 73, 181, 126, 83, 201, 120, 114, 237, 185, 183, 194, 8, 180, 32, 28, 122, 20, 71, 13, 145, 15, 62, 95, 167, 249, 64, 215, 182, 204, 163, 121, 154, 28, 209, 94, 223, 252, 211, 152, 10, 183, 77, 134, 75, 166, 194, 79, 56, 64, 168, 107, 93, 17, 136, 26, 26, 39, 76, 78, 43, 181, 63, 172, 210, 227, 175, 60, 36, 158, 98, 144, 85, 93, 204, 182, 241, 140, 177, 225, 191, 149, 219, 16, 31, 51, 58, 5, 233, 227, 65, 33, 245, 174, 239, 7, 239, 179, 105, 97, 28, 122, 31, 73, 252, 79, 51, 40, 144, 211, 10, 9, 49, 205, 15, 142, 5, 16, 62, 82, 244, 142, 84, 133, 21, 189, 166, 174, 152, 101, 108, 119, 112, 143, 165, 191, 240, 57, 1, 221, 49, 142, 239, 139, 91, 252, 238, 47, 184, 243, 89, 102, 216, 35, 135, 156, 122, 209, 186, 49, 10, 177, 111, 241, 77, 18, 21, 65, 181, 56, 62, 99, 39, 132, 8, 137, 54, 157, 116, 108, 55, 151, 34, 121, 153, 63, 81, 142, 47, 11, 191, 104, 182, 19, 106, 172, 89, 20, 2, 190, 133, 52, 166, 54, 123, 114, 250, 24, 216, 163, 134, 44, 168, 224, 166, 178, 122, 91, 243, 205, 90, 49, 179, 18, 219, 150, 240, 34, 134, 14, 12, 235, 234, 39, 242, 196, 122, 186, 245, 121, 222, 187, 232, 214, 159, 142, 129, 111, 76, 34, 61, 170, 255, 166, 127, 24, 247, 208, 145, 19, 236, 176, 112, 76, 189, 110, 130, 91, 219, 228, 45, 51, 116, 168, 194, 20, 146, 57, 11, 103, 254, 56, 234, 1, 239, 240, 176, 145, 148, 30, 13, 12, 150, 117, 182, 9, 52, 125, 142, 52, 54, 48, 172, 154, 240, 226, 209, 182, 170, 251, 58, 32, 218, 172, 165, 21, 104, 110, 234, 178, 221, 206, 161, 207, 106, 109, 163, 227, 224, 102, 167, 47, 129, 121, 179, 228, 66, 241, 71, 222, 222, 61, 149, 244, 149, 242, 165, 227, 247, 4, 199, 212, 128, 198, 180, 191, 142, 223, 67, 231, 172, 146, 24, 168, 77, 127, 186, 109, 141, 166, 214, 111, 205, 89, 71, 227, 220, 88, 15, 57, 13, 161, 97, 35, 138, 213, 236, 145, 15, 201, 136, 164, 151, 25, 34, 198, 7, 1, 47, 137, 144, 138, 28, 203, 206, 19, 140, 5, 69, 57, 28, 85, 229, 193, 47, 41, 145, 34, 50, 87, 247, 161, 56, 28, 65, 197, 33, 18, 99, 31, 247, 246, 9, 211, 113, 64, 198, 30, 222, 122, 84, 254, 11, 74, 194, 14, 109, 222, 71, 87, 86, 82, 132, 78, 235, 210, 142, 149, 247, 207, 85, 21, 254, 25, 112, 223, 67, 187, 26, 241, 109, 231, 94, 113, 126, 246, 228, 80, 15, 180, 182, 151, 66, 33, 47, 101, 54, 69, 9, 244, 63, 24, 216, 208, 111, 207, 176, 141, 144, 38, 73, 223, 112, 117, 65, 225, 13, 201, 146, 160, 240, 178, 173, 198, 166, 77, 72, 155, 182, 83, 0, 185, 34, 25, 101, 188, 97, 244, 9, 111, 150, 82, 157, 94, 77, 232, 189, 154, 239, 230, 114, 152, 242, 91, 207, 80, 52, 80, 180, 34, 21, 111, 16, 12, 178, 196, 122, 164, 128, 255, 72, 103, 149, 151, 63, 165, 134, 39, 51, 255, 3, 137, 11, 16, 171, 228, 18, 208, 253, 194, 225, 137, 178, 87, 168, 200, 39, 121, 151, 167, 202, 57, 88, 80, 150, 32, 249, 239, 195, 161, 74, 47, 217, 222, 76, 213, 237, 13, 67, 248, 138, 75, 139, 86, 62, 72, 231, 200, 27, 123, 229, 68, 129, 31, 204, 218, 70, 141, 94, 31, 242, 44, 201, 44, 150, 186, 113, 77, 192, 178, 222, 223, 104, 107, 189, 173, 15, 227, 148, 52, 101, 63, 0, 227, 94, 215, 239, 15, 28, 125, 83, 159, 167, 14, 239, 114, 57, 213, 179, 10, 191, 46, 65, 36, 237, 203, 48, 172, 233, 191, 191, 215, 234, 143, 141, 213, 185, 121, 63, 16, 202, 7, 68, 211, 35, 187, 137, 175, 9, 242, 29, 66, 24, 81, 67, 86, 255, 237, 49, 164, 251, 103, 1, 76, 45, 38, 237, 137, 248, 150, 245, 69, 178, 117, 143, 107, 19, 190, 194, 22, 250, 168, 55, 194, 95, 199, 236, 67, 243, 246, 100, 182, 254, 62, 25, 84, 247, 16, 12, 63, 251, 148, 48, 69, 1, 184, 63, 221, 211, 251, 209, 202, 23, 73, 242, 159, 201, 234, 32, 100, 157, 110, 19, 118, 180, 224, 162, 156, 116, 168, 68, 163, 224, 246, 166, 189, 136, 0, 205, 130, 211, 43, 244, 166, 187, 240, 47, 151, 166, 214, 207, 127, 233, 15, 136, 106, 93, 206, 99, 132, 117, 170, 206, 14, 20, 50, 53, 71, 59, 66, 181, 113, 201, 227, 95, 216, 233, 53, 127, 171, 186, 167, 37, 140, 29, 177, 99, 108, 178, 172, 55, 46, 239, 72, 200, 33, 130, 29, 38, 56, 157, 191, 174, 38, 128, 100, 57, 241, 242, 199, 61, 30, 71, 210, 170, 248, 94, 255, 117, 123, 63, 252, 140, 0, 77, 207, 17, 118, 207, 170, 157, 143, 154, 155, 137, 4, 55, 252, 28, 255, 99, 141, 113, 50, 40, 95, 230, 172, 240, 117, 133, 131, 235, 52, 141, 200, 32, 81, 43, 76, 23, 85, 44, 74, 234, 177, 21, 59, 100, 106, 145, 2, 210, 143, 236, 201, 140, 184, 223, 6, 74, 184, 250, 180, 191, 24, 225, 160, 156, 12, 198, 48, 158, 218, 169, 205, 190, 211, 249, 43, 119, 38, 6, 253, 16, 130, 60, 55, 177, 33, 191, 172, 146, 221, 26, 101, 237, 205, 148, 120, 137, 209, 143, 212, 165, 143, 205, 75, 9, 27, 229, 175, 78, 232, 215, 180, 115, 135, 252, 56, 21, 64, 35, 97, 7, 159, 20, 55, 134, 209, 113, 241, 86, 159, 236, 223, 252, 228, 233, 229, 37, 68, 183, 111, 184, 155, 236, 17, 14, 218, 244, 160, 200, 12, 17, 179, 139, 255, 209, 31, 163, 218, 91, 218, 198, 115, 212, 191, 133, 158, 235, 121, 126, 225, 142, 186, 156, 193, 144, 126, 195, 108, 152, 176, 86, 97, 151, 168, 140, 119, 18, 99, 238, 83, 203, 138, 167, 130, 192, 45, 30, 12, 118, 216, 179, 163, 215, 113, 54, 41, 145, 17, 10, 29, 248, 221, 234, 177, 181, 79, 179, 78, 69, 248, 182, 168, 179, 238, 172, 113, 144, 17, 215, 184, 154, 169, 207, 169, 114, 92, 21, 70, 56, 32, 216, 191, 31, 39, 230, 115, 48, 63, 142, 77, 157, 252, 8, 91, 199, 107, 121, 214, 143, 84, 111, 22, 180, 198, 45, 125, 44, 21, 148, 158, 201, 38, 20, 33, 127, 200, 105, 220, 243, 170, 215, 243, 39, 250, 46, 230, 237, 33, 45, 134, 250, 63, 81, 133, 58, 71, 184, 19, 126, 234, 216, 110, 133, 55, 114, 112, 180, 155, 39, 96, 245, 171, 140, 223, 31, 40, 128, 226, 141, 27, 68, 24, 168, 189, 83, 95, 87, 77, 79, 63, 173, 149, 253, 87, 186, 218, 203, 24, 141, 67, 200, 208, 237, 214, 146, 210, 144, 178, 162, 195, 16, 178, 38, 212, 168, 209, 231, 167, 128, 77, 185, 222, 12, 15, 101, 172, 243, 214, 227, 187, 156, 204, 176, 219, 86, 208, 114, 19, 199, 13, 231, 70, 93, 198, 124, 237, 247, 42, 125, 189, 134, 159, 212, 71, 185, 82, 50, 230, 50, 206, 107, 193, 154, 234, 104, 135, 30, 134, 245, 124, 194, 59, 234, 231, 39, 146, 129, 108, 49, 212, 255, 88, 102, 49, 247, 121, 128, 122, 103, 62, 186, 22, 65, 202, 150, 250, 72, 153, 207, 248, 128, 41, 194, 50, 164, 247, 183, 237, 215, 123, 152, 106, 185, 190, 26, 39, 38, 66, 169, 41, 211, 164, 244, 150, 223, 89, 80, 32, 21, 119, 59, 121, 178, 202, 28, 23, 131, 182, 218, 240, 149, 98, 105, 35, 142, 158, 122, 52, 100, 152, 159, 233, 15, 142, 104, 246, 53, 80, 64, 176, 247, 139, 210, 218, 185, 222, 180, 172, 96, 243, 106, 104, 175, 7, 131, 158, 244, 208, 13, 244, 214, 197, 89, 239, 68, 44, 103, 54, 200, 125, 46, 52, 130, 95, 20, 16, 143, 97, 125, 220, 30, 11, 216, 118, 191, 209, 43, 53, 144, 48, 59, 201, 241, 77, 171, 160, 120, 60, 148, 8, 233, 113, 220, 159, 177, 222, 104, 84, 121, 25, 121, 12, 122, 31, 9, 22, 60, 250, 11, 243, 37, 118, 174, 151, 86, 181, 30, 164, 107, 252, 43, 56, 103, 248, 242, 39, 182, 183, 133, 244, 34, 101, 91, 197, 198, 114, 161, 78, 160, 211, 44, 86, 176, 7, 0, 138, 28, 159, 231, 38, 0, 76, 25, 179, 233, 191, 195, 45, 85, 52, 245, 79, 100, 240, 102, 192, 233, 12, 254, 177, 163, 167, 245, 96, 140, 32, 237, 247, 236, 20, 19, 106, 228, 62, 125, 213, 131, 138, 245, 242, 6, 133, 146, 21, 219, 6, 94, 242, 34, 72, 9, 106, 222, 51, 205, 38, 188, 203, 233, 44, 224, 155, 50, 66, 36, 145, 86, 213, 199, 38, 46, 143, 28, 127, 184, 212, 176, 141, 139, 190, 25, 255, 32, 114, 164, 173, 8, 162, 79, 117, 82, 135, 67, 205, 138, 236, 181, 55, 84, 184, 55, 142, 109, 132, 50, 29, 103, 131, 178, 80, 114, 56, 26, 193, 26, 53, 71, 227, 80, 169, 8, 95, 121, 86, 97, 178, 121, 96, 210, 221, 94, 240, 136, 74, 157, 230, 90, 56, 78, 146, 65, 255,

- 247, 137, 179, 126, 139, 146, 195, 225, 173, 162, 172, 111, 217, 185, 103, 93, 145, 96, 181, 232, 4, 238, 232, 180, 59, 71, 232, 229, 76, 85, 172, 62, 46, 148, 98, 116, 180, 35, 250, 196, 175, 201, 215, 231, 240, 51, 121, 199, 51, 206, 152, 200, 165, 2, 144, 188, 218, 103, 11, 181, 21, 228, 203, 64, 50, 10, 182, 158, 31, 79, 37, 198, 149, 224, 184, 164, 137, 94, 126, 9, 27, 67, 65, 82, 131, 242, 239, 197, 18, 20, 44, 140, 18, 145, 165, 73, 94, 77, 125, 82, 191, 118, 94, 164, 165, 177, 116, 220, 250, 18, 211, 144, 192, 210, 57, 12, 236, 174, 84, 80, 120, 38, 43, 168, 17, 195, 8, 165, 141, 241, 172, 101, 37, 254, 124, 223, 11, 237, 193, 122, 12, 193, 143, 80, 1, 92, 52, 75, 200, 185, 83, 136, 202, 232, 52, 43, 55, 181, 81, 63, 25, 97, 191, 177, 111, 127, 100, 203, 51, 205, 241, 112, 77, 31, 170, 249, 39, 183, 104, 173, 226, 248, 206, 74, 149, 78, 24, 78, 30, 92, 7, 64, 218, 220, 69, 75, 243, 60, 8, 182, 197, 199, 153, 129, 209, 75, 56, 164, 25, 147, 18, 0, 241, 40, 29, 175, 186, 183, 59, 195, 184, 132, 236, 224, 109, 85, 131, 157, 79, 79, 60, 117, 255, 242, 62, 227, 205, 74, 137, 31, 63, 12, 162, 220, 121, 96, 197, 180, 208, 61, 179, 44, 235, 37, 214, 169, 31, 169, 109, 97, 148, 195, 218, 96, 9, 98, 183, 156, 150, 223, 55, 88, 114, 5, 34, 21, 0, 109, 75, 76, 23, 98, 222, 226, 249, 179, 135, 179, 120, 80, 0, 56, 116, 248, 250, 73, 227, 189, 115, 159, 155, 98, 39, 41, 60, 40, 189, 97, 247, 7, 90, 101, 56, 75, 147, 133, 44, 205, 71, 209, 222, 26, 168, 24, 1, 78, 245, 247, 201, 186, 110, 98, 13, 89, 189, 161, 146, 39, 33, 100, 246, 97, 123, 8, 205, 220, 241, 193, 133, 40, 159, 135, 8, 252, 107, 204, 245, 7, 10, 76, 151, 196, 55, 178, 181, 208, 10, 135, 155, 198, 232, 245, 152, 227, 43, 165, 13, 252, 142, 64, 193, 51, 183, 115, 113, 9, 243, 40, 169, 196, 224, 157, 48, 46, 239, 144, 109, 137, 252, 132, 167, 129, 213, 27, 142, 213, 185, 97, 92, 179, 118, 148, 227, 101, 198, 27, 169, 117, 215, 240, 39, 129, 143, 183, 52, 248, 171, 234, 43, 5, 60, 56, 149, 40, 175, 39, 73, 99, 92, 38, 140, 112, 199, 199, 108, 68, 146, 138, 55, 91, 181, 221, 249, 40, 130, 212, 97, 49, 200, 109, 253, 192, 233, 104, 103, 65, 179, 24, 128, 6, 96, 125, 203, 45, 139, 42, 88, 210, 171, 211, 33, 166, 140, 25, 126, 153, 169, 165, 32, 182, 175, 72, 81, 83, 38, 147, 154, 134, 99, 67, 178, 18, 155, 249, 153, 100, 105, 26, 53, 185, 216, 215, 71, 136, 244, 90, 187, 232, 233, 23, 119, 222, 186, 93, 34, 67, 75, 113, 146, 138, 239, 81, 184, 142, 167, 73, 25, 78, 191, 94, 89, 182, 66, 13, 85, 10, 32, 102, 113, 160, 6, 141, 73, 177, 143, 90, 127, 71, 184, 119, 200, 216, 111, 70, 45, 62, 164, 187, 81, 156, 184, 25, 125, 84, 34, 20, 231, 97, 157, 53, 63, 67, 154, 148, 112, 178, 113, 167, 105, 161, 157, 183, 218, 185, 60, 176, 230, 204, 240, 34, 105, 25, 243, 205, 214, 33, 37, 123, 169, 78, 45, 154, 167, 121, 128, 156, 23, 233, 225, 143, 84, 40, 60, 179, 193, 26, 19, 200, 196, 162, 219, 232, 191, 21, 89, 72, 21, 118, 248, 150, 231, 234, 30, 27, 234, 5, 230, 33, 78, 117, 145, 55, 59, 99, 232, 200, 3, 87, 180, 122, 199, 9, 2, 221, 247, 32, 153, 213, 244, 236, 97, 2, 248, 91, 213, 36, 120, 162, 191, 69, 15, 206, 235, 80, 37, 182, 85, 74, 236, 120, 104, 248, 108, 253, 76, 150, 119, 66, 200, 207, 236, 93, 253, 100, 146, 226, 130, 197, 131, 141, 12, 5, 80, 180, 208, 136, 249, 220, 164, 86, 172, 80, 35, 198, 104, 224, 132, 202, 234, 145, 189, 68, 130, 118, 196, 214, 109, 143, 21, 63, 197, 109, 139, 253, 244, 94, 12, 46, 145, 94, 173, 129, 78, 151, 232, 24, 127, 49, 65, 27, 184, 248, 137, 78, 160, 254, 229, 103, 65, 44, 17, 71, 140, 173, 118, 71, 189, 145, 90, 211, 113, 200, 83, 172, 4, 108, 143, 65, 238, 8, 176, 30, 36, 168, 22, 112, 197, 73, 50, 247, 83, 17, 148, 230, 165, 251, 62, 10, 124, 248, 75, 151, 12, 205, 83, 108, 160, 64, 196, 110, 89, 19, 189, 229, 247, 95, 211, 84, 48, 225, 112, 223, 143, 249, 156, 167, 220, 137, 108, 63, 90, 254, 51, 240, 190, 249, 213, 106, 245, 167, 169, 93, 110, 246, 205, 20, 33, 34, 183, 210, 67, 251, 221, 24, 15, 137, 206, 195, 115, 212, 208, 104, 49, 177, 26, 238, 176, 116, 90, 106, 16, 7, 100, 157, 35, 165, 75, 161, 232, 179, 5, 140, 35, 61, 205, 18, 247, 97, 2, 23, 42, 94, 229, 197, 71, 45, 183, 213, 11, 242, 67, 40, 52, 168, 87, 71, 76, 254, 205, 236, 124, 190, 224, 46, 217, 12, 29, 44, 137, 242, 195, 233, 71, 205, 89, 97, 175, 189, 27, 181, 224, 1, 11, 166, 211, 243, 227, 254, 11, 10, 234, 89, 170, 203, 129, 74, 30,

- 147, 205, 21, 114, 163, 238, 164, 217, 187, 138, 64, 238, 244, 119, 18, 23, 223, 180, 35, 148, 24, 145, 105, 18, 83, 171, 214, 10, 32, 195, 233, 55, 235, 14, 193, 225, 227, 212, 210, 2, 158, 19, 87, 250, 216, 80, 113, 90, 85, 83, 133, 162, 10, 91, 189, 226, 212, 124, 6, 152, 55, 72, 50, 2, 108, 241, 220, 147, 108, 100, 125, 18, 48, 88, 180, 135, 93, 48, 239, 63, 141, 110, 34, 110, 247, 213, 199, 28, 100, 55, 247, 82, 246, 17, 173, 12, 75, 88, 231, 4, 140, 97, 254, 34, 117, 152, 90, 121, 215, 227, 178, 79, 234, 102, 36, 58, 152, 73, 209, 253, 222, 92, 9, 1, 229, 223, 23, 140, 159, 103, 47, 107, 73, 217, 36, 240, 9, 116, 72, 236, 52, 79, 210, 19, 159, 118, 199, 164, 244, 137, 188, 113, 50, 74, 110, 204, 169, 201, 123, 229, 204, 214, 251, 202, 179, 123, 242, 169, 65, 174, 207, 179, 116, 171, 53, 90, 230, 31, 153, 107, 157, 148, 143, 24, 128, 226, 146, 200, 208, 251, 169, 151, 105, 31, 34, 37, 201, 202, 164, 172, 30, 46, 187, 201, 14, 38, 238, 210, 10, 205, 174, 139, 176, 219, 246, 134, 170, 126, 249, 125, 221, 164, 142, 17, 75, 120, 41, 20, 234, 143, 133, 44, 121, 182, 93, 34, 60, 62, 180, 235, 84, 212, 237, 133, 138, 205, 48, 238, 181, 154, 144, 160, 58, 151, 192, 100, 165, 179, 100, 16, 180, 37, 121, 82, 61, 10, 222, 183, 196, 174, 223, 11, 253, 103, 185, 211, 238, 153, 222, 191, 108, 215, 91, 120, 18, 102, 246, 40, 179, 22, 124, 128, 29, 16, 158, 5, 167, 211, 51, 101, 17, 127, 127, 1, 77, 26, 90, 116, 240, 138, 221, 200, 23, 42, 126, 182, 126, 148, 99, 43, 116, 238, 88, 187, 53, 111, 242, 131, 110, 231, 186, 5, 134, 61, 180, 244, 252, 170, 133, 239, 128, 79, 121, 175, 102, 69, 53, 141, 132, 201, 235, 157, 71, 247, 207, 151, 131, 97, 233, 162, 153, 31, 229, 159, 152, 246, 118, 190, 158, 181, 192, 214, 217, 202, 13, 110, 214, 72, 87, 30, 14, 170, 141, 73, 127, 245, 237, 62, 47, 234, 40, 99, 165, 207, 145, 92, 89, 51, 108, 34, 107, 149, 251, 38, 57, 147, 108, 124, 99, 189, 14, 190, 112, 53, 27, 212, 129, 243, 248, 250, 244, 140, 229, 110, 129, 243, 180, 100, 11, 92, 251, 246, 133, 99, 214, 246, 8, 207, 235, 67, 18, 203, 159, 79, 82, 111, 42, 128, 60, 245, 44, 50, 73, 147, 237, 117, 155, 235, 142, 254, 220, 34, 158, 238, 239, 183, 61, 129, 112, 160, 234, 150, 180, 253, 7, 181, 149, 84, 14, 250, 106, 170, 138, 95, 182, 115, 106, 229, 22, 107, 113, 63, 235, 191, 79, 67, 105, 131, 162, 1, 211, 189, 117, 244, 191, 245, 58, 242, 138, 164, 152, 122, 23, 198, 171, 35, 40, 213, 57, 200, 57, 172, 47, 115, 96, 7, 107, 195, 81, 96, 189, 94, 206, 172, 41, 203, 90, 5, 217, 147, 101, 62, 69, 219, 190, 19, 182, 63, 156, 97, 236, 142, 86, 142, 88, 62, 189, 154, 228, 225, 230, 215, 46, 177, 123, 58, 127, 185, 54, 37, 241, 220, 39, 244, 76, 63, 191, 232, 244, 211, 156, 88, 21, 79, 49, 239, 122, 27, 231, 62, 161, 242, 162, 91, 134, 98, 118, 119, 146, 99, 81, 131, 231, 125, 219, 30, 237, 106, 140, 247, 255, 190, 130, 46, 42, 133, 216, 127, 216, 73, 232, 109, 187, 220, 13, 98, 97, 245, 125, 32, 237, 53, 210, 211, 115, 101, 248, 248, 178, 167, 203, 108, 18, 147, 18, 30, 247, 254, 221, 65, 126, 173, 98, 62, 170, 204, 147, 129, 93, 86, 90, 90, 154, 1, 157, 176, 255, 85, 108, 134, 87, 107, 183, 37, 149, 185, 181, 168, 249, 248, 102, 149, 169, 179, 89, 170, 42, 192, 113, 44, 97, 213, 3, 7, 42, 14, 151, 151, 90, 234, 206, 142, 248, 249, 37, 98, 111, 175, 16, 94, 207, 138, 63, 255, 20, 90, 247, 55, 255, 217, 231, 169, 6, 250, 82, 202, 67, 186, 138, 212, 229, 123, 82, 4, 233, 255, 190, 0, 223, 198, 141, 15, 149, 146, 254, 63, 250, 245, 201, 88, 82, 251, 98, 212, 224, 127, 253, 84, 223, 187, 153, 109, 226, 75, 86, 245, 255, 232, 95, 113, 182, 235, 178, 251, 132, 183, 127, 52, 88, 8, 32, 211, 19, 176, 14, 22, 38, 127, 119, 49, 12, 157, 59, 96, 155, 211, 38, 33, 71, 87, 196, 238, 32, 190, 244, 82, 253, 188, 89, 80, 4, 233, 253, 47, 233, 147, 5, 48, 34, 87, 55, 254, 143, 124, 176, 11, 45, 146, 130, 252, 153, 255, 247, 180, 209, 111, 147, 63, 70, 158, 26, 238, 95, 8, 130, 244, 232, 195, 23, 198, 64, 4, 20, 246, 53, 47, 98, 111, 172, 225, 100, 113, 47, 244, 19, 39, 65, 193, 187, 110, 123, 15, 180, 47, 241, 101, 152, 106, 23, 60, 165, 33, 95, 71, 255, 71, 154, 10, 253, 76, 182, 101, 245, 239, 51, 254, 47, 253, 204, 216, 241, 46, 28, 28, 11, 121, 27, 228, 122, 5, 168, 80, 63, 158, 57, 128, 63, 195, 105, 111, 212, 168, 27, 51, 8, 107, 195, 118, 197, 126, 188, 191, 204, 223, 95, 172, 198, 158, 38, 238, 111, 188, 175, 45, 140, 143, 238, 20, 35, 42, 102, 226, 128, 63, 251, 255, 166, 191, 155, 232, 187, 142, 135, 26, 253, 191, 180, 187, 139, 3, 16, 78, 175, 216, 17, 154, 251, 47, 32, 135, 180, 130, 79, 95, 174, 148, 152, 24, 107, 97, 158, 188, 200, 51, 177, 239, 23, 149, 233, 255, 179, 222, 61, 119, 27, 207, 133, 171, 23, 78, 127, 255, 69, 106, 238, 10, 193, 15, 222, 19, 24, 238, 195, 60, 126, 196, 184, 236, 236, 211, 127, 167, 191, 190, 226, 248, 165, 101, 137, 9,

- 108, 39, 234, 205, 101, 60, 209, 199, 112, 96, 170, 86, 29, 211, 253, 151, 167, 148, 251, 119, 90, 177, 51, 168, 254, 53, 220, 246, 88, 106, 178, 223, 207, 119, 223, 52, 246, 189, 63, 241, 123, 255, 189, 80, 59, 153, 45, 7, 111, 253, 215, 246, 72, 79, 178, 187, 206, 112, 55, 194, 106, 157, 207, 220, 93, 199, 90, 78, 175, 183, 253, 91, 203, 80, 199, 119, 171, 160, 8, 8, 126, 85, 60, 182, 81, 125, 87, 21, 93, 51, 117, 14, 38, 152, 231, 113, 220, 209, 36, 108, 123, 175, 247, 198, 194, 111, 87, 139, 153, 126, 104, 218, 173, 20, 62, 253, 116, 23, 127, 151, 217, 146, 27, 127, 143, 191, 103, 48, 121, 179, 114, 150, 195, 203, 213, 17, 94, 147, 154, 205, 34, 106, 76, 157, 28, 22, 92, 127, 127, 39, 241, 233, 167, 255, 245, 13, 213, 42, 70, 174, 1, 235, 255, 86, 67, 146, 139, 191, 225, 57, 239, 67, 23, 179, 177, 91, 226, 53, 253, 221, 65, 237, 79, 230, 151, 151, 118, 55, 60, 183, 157, 171, 96, 215, 233, 191, 219, 238, 249, 139, 105, 178, 13, 124, 236, 203, 74, 68, 158, 254, 230, 191, 113, 248, 35, 195, 202, 158, 115, 23, 159, 88, 5, 62, 152, 203, 112, 178, 229, 217, 47, 25, 88, 240, 27, 118, 20, 124, 49, 203, 231, 127, 241, 4, 3, 124, 41, 177, 234, 186, 101, 29, 118, 193, 251, 239, 238, 201, 151, 59, 195, 229, 216, 111, 237, 232, 201, 103, 89, 103, 113, 126, 225, 95, 139, 27, 47, 183, 54, 236, 239, 191, 110, 205, 180, 227, 32, 99, 110, 78, 208, 204, 34, 96, 249, 5, 2, 194, 121, 6, 191, 133, 63, 153, 88, 48, 93, 197, 18, 161, 119, 95, 104, 56, 52, 29, 61, 242, 126, 117, 128, 223, 127, 179, 159, 89, 150, 130, 53, 95, 50, 46, 28, 75, 93, 115, 127, 231, 223, 135, 15, 222, 247, 70, 190, 185, 199, 119, 225, 248, 139, 187, 105, 115, 246, 173, 159, 236, 228, 224, 32, 146, 145, 108, 253, 127, 247, 100, 170, 128, 224, 174, 127, 242, 230, 211, 147, 99, 239, 55, 9, 157, 100, 0, 2, 79, 87, 63, 151, 117, 78, 9, 77, 0, 80, 75, 3, 4, 20, 0, 0, 8, 8, 0, 187, 182, 42, 68, 34, 236, 10, 177, 219, 6, 0, 0, 221, 61, 0, 0, 12, 0, 0, 0, 97, 114, 105, 97, 108, 95, 52, 56, 46, 102, 110, 116, 189, 91, 219, 110, 227, 54, 16, 125, 223, 175, 16, 252, 188, 219, 112, 200, 225, 13, 72, 22, 232, 219, 254, 65, 31, 11, 213, 151, 68, 88, 71, 14, 98, 167, 221, 246, 235, 43, 138, 116, 162, 75, 168, 204, 72, 177, 177, 64, 214, 118, 116, 124, 56, 195, 153, 195, 225, 144, 185, 221, 29, 234, 211, 247, 47, 69, 113, 91, 213, 187, 67, 177, 43, 215, 219, 187, 213, 239, 207, 85, 185, 95, 21, 199, 234, 191, 230, 13, 186, 85, 241, 215, 97, 191, 185, 91, 137, 85, 81, 157, 202, 125, 181, 110, 95, 174, 31, 202, 231, 227, 246, 116, 183, 90, 21, 47, 117, 181, 62, 108, 182, 225, 229, 241, 244, 188, 61, 173, 31, 126, 220, 173, 64, 52, 15, 29, 31, 15, 135, 211, 67, 243, 102, 85, 148, 101, 251, 223, 83, 185, 217, 84, 245, 253, 221, 74, 126, 109, 255, 53, 207, 60, 149, 235, 246, 19, 241, 181, 65, 28, 94, 78, 251, 170, 222, 6, 138, 155, 118, 92, 235, 195, 227, 227, 161, 46, 194, 135, 63, 182, 213, 253, 67, 195, 168, 117, 51, 164, 242, 24, 6, 167, 26, 252, 186, 220, 111, 255, 104, 190, 16, 180, 77, 239, 26, 122, 244, 129, 235, 126, 123, 76, 172, 235, 159, 219, 205, 219, 151, 182, 191, 9, 175, 210, 235, 162, 138, 246, 237, 170, 125, 243, 173, 101, 176, 255, 79, 116, 191, 61, 213, 247, 9, 112, 243, 138, 184, 109, 13, 47, 214, 135, 151, 186, 25, 138, 135, 85, 250, 154, 240, 113, 251, 53, 190, 25, 197, 175, 102, 56, 171, 226, 223, 246, 231, 63, 213, 38, 184, 64, 54, 67, 125, 72, 6, 72, 211, 60, 114, 216, 237, 90, 255, 133, 7, 207, 175, 161, 121, 243, 171, 220, 252, 93, 214, 97, 30, 164, 141, 54, 36, 127, 215, 251, 230, 1, 29, 7, 212, 35, 116, 145, 208, 14, 25, 229, 27, 163, 210, 29, 70, 213, 97, 84, 115, 8, 125, 75, 168, 97, 130, 144, 106, 34, 146, 24, 219, 96, 106, 40, 173, 166, 218, 40, 23, 218, 8, 2, 90, 198, 96, 235, 149, 230, 17, 132, 108, 41, 33, 56, 165, 199, 217, 60, 253, 190, 149, 34, 103, 37, 40, 34, 165, 138, 148, 56, 53, 151, 234, 147, 205, 196, 200, 105, 70, 147, 9, 23, 10, 88, 16, 58, 82, 58, 55, 160, 212, 92, 70, 0, 34, 163, 137, 140, 126, 104, 36, 136, 55, 74, 236, 82, 126, 147, 139, 57, 147, 242, 8, 187, 220, 177, 212, 188, 76, 218, 163, 196, 213, 28, 235, 19, 227, 208, 72, 133, 153, 196, 84, 217, 136, 69, 65, 227, 4, 145, 20, 86, 77, 56, 150, 200, 73, 13, 89, 136, 250, 35, 189, 25, 114, 226, 197, 4, 8, 162, 0, 41, 41, 231, 44, 37, 51, 57, 163, 2, 41, 52, 115, 164, 125, 38, 103, 84, 32, 101, 135, 81, 11, 252, 24, 2, 67, 228, 140, 18, 164, 156, 161, 198, 16, 44, 94, 53, 33, 138, 16, 138, 225, 34, 6, 157, 69, 44, 228, 205, 187, 156, 56, 103, 65, 129, 168, 65, 56, 90, 195, 104, 169, 50, 75, 221, 33, 138, 16, 162, 157, 90, 171, 117, 206, 181, 179, 132, 15, 162, 12, 161, 29, 166, 138, 210, 25, 78, 145, 229, 12, 16, 10, 167, 140, 50, 164, 133, 167, 218, 41, 22, 219, 41, 163, 12, 105, 133, 19, 156, 234, 115, 125, 43, 163, 12, 105, 237, 167, 10, 204, 79, 229, 52, 49, 59, 181, 27, 42, 188, 82, 220, 210, 75, 73, 26, 99, 204, 77, 3, 195, 146, 36, 36, 199, 187, 140, 184, 148, 49, 166, 166, 25, 41, 173, 2, 66, 173, 55, 39, 98, 77, 76, 76, 99, 71, 19, 233, 217, 54, 18, 25, 99, 90, 90, 16, 215, 242, 170, 77, 59, 19, 229, 38, 214, 105, 26, 163, 244, 52, 198, 152, 146, 214, 12, 83, 82, 229, 106, 246, 108, 209, 165, 104, 10, 107, 99, 66, 90, 63, 178, 209, 94, 104, 30, 109, 172, 10, 220, 104, 83, 171, 185, 132, 196, 133, 203, 198, 146, 192, 141, 116, 14, 60, 65, 231, 230, 72, 142, 141, 146, 227, 180, 94, 158, 28, 196, 80, 141, 146, 227, 28, 185, 212, 194, 133, 27, 47, 27, 37, 199, 143, 210, 49, 43, 171, 89, 70, 98, 173, 110, 163, 228, 120, 212, 87, 11, 213, 40, 57, 222, 226, 148, 141, 52, 89, 165, 121, 213, 69, 201, 1, 49, 46, 4, 236, 133, 66, 199, 65, 162, 28, 201, 92, 119, 219, 21, 126, 249, 121, 86, 166, 110, 136, 24, 59, 86, 92, 104, 42, 93, 234, 134, 180, 187, 247, 190, 99, 29, 123, 46, 137, 142,

- 77, 205, 16, 80, 147, 148, 52, 225, 161, 173, 31, 46, 53, 67, 192, 152, 107, 229, 136, 75, 221, 144, 113, 59, 68, 201, 11, 213, 87, 206, 166, 102, 154, 28, 38, 9, 106, 174, 99, 145, 104, 165, 75, 148, 214, 92, 205, 202, 40, 62, 160, 198, 10, 123, 41, 74, 159, 212, 71, 33, 94, 43, 98, 85, 202, 75, 53, 146, 2, 115, 161, 114, 192, 161, 61, 155, 233, 134, 59, 60, 100, 147, 106, 90, 111, 75, 167, 201, 196, 201, 110, 154, 204, 48, 194, 28, 59, 149, 61, 83, 142, 218, 105, 93, 45, 176, 148, 98, 18, 105, 148, 58, 101, 9, 142, 178, 36, 183, 115, 94, 108, 165, 57, 119, 185, 71, 219, 187, 236, 46, 118, 233, 249, 1, 166, 213, 75, 139, 225, 130, 9, 157, 240, 1, 18, 37, 208, 178, 4, 83, 196, 106, 57, 116, 44, 200, 76, 207, 57, 223, 141, 165, 117, 181, 48, 149, 5, 26, 197, 181, 40, 125, 90, 189, 180, 158, 148, 159, 110, 99, 189, 215, 212, 194, 57, 147, 153, 226, 71, 187, 169, 46, 136, 84, 25, 51, 125, 143, 210, 209, 40, 147, 153, 102, 178, 119, 151, 11, 31, 57, 199, 179, 38, 77, 166, 145, 83, 86, 130, 166, 245, 238, 136, 102, 166, 194, 192, 160, 207, 139, 65, 86, 99, 231, 104, 1, 190, 158, 62, 77, 200, 15, 200, 79, 165, 76, 34, 107, 140, 154, 232, 55, 247, 202, 202, 197, 7, 123, 242, 108, 230, 168, 247, 130, 153, 196, 204, 47, 153, 180, 186, 64, 157, 25, 157, 158, 136, 88, 80, 36, 197, 163, 229, 165, 74, 11, 166, 21, 19, 11, 38, 141, 145, 38, 177, 6, 207, 132, 118, 162, 168, 164, 233, 29, 18, 107, 159, 36, 4, 118, 172, 119, 134, 27, 60, 68, 185, 83, 41, 41, 173, 155, 186, 196, 128, 57, 191, 138, 57, 87, 10, 146, 99, 221, 248, 236, 178, 179, 217, 107, 155, 238, 31, 23, 149, 196, 210, 39, 213, 33, 78, 78, 118, 39, 63, 115, 179, 7, 50, 45, 36, 206, 76, 157, 60, 33, 169, 118, 166, 30, 60, 201, 243, 217, 247, 168, 222, 186, 24, 167, 79, 43, 137, 243, 114, 234, 244, 27, 73, 101, 1, 109, 54, 125, 242, 172, 23, 72, 165, 132, 133, 148, 42, 149, 120, 30, 134, 142, 237, 48, 138, 92, 94, 186, 57, 11, 137, 203, 49, 94, 174, 142, 77, 18, 235, 71, 55, 68, 32, 71, 169, 23, 82, 106, 113, 190, 58, 97, 230, 156, 57, 205, 162, 76, 1, 235, 29, 92, 203, 177, 90, 166, 203, 26, 194, 80, 15, 14, 22, 91, 169, 18, 165, 146, 115, 172, 156, 83, 57, 107, 76, 148, 218, 94, 205, 177, 58, 81, 78, 174, 94, 189, 83, 239, 197, 86, 198, 5, 83, 130, 184, 158, 149, 233, 174, 15, 204, 155, 203, 89, 101, 65, 140, 216, 184, 114, 9, 150, 216, 17, 181, 238, 246, 166, 189, 92, 217, 190, 252, 185, 125, 174, 171, 250, 254, 237, 166, 165, 61, 223, 180, 76, 191, 41, 118, 213, 243, 49, 53, 68, 142, 219, 245, 161, 78, 199, 184, 229, 99, 4, 124, 83, 175, 38, 76, 32, 194, 142, 238, 21, 1, 36, 132, 167, 32, 130, 110, 158, 17, 216, 69, 96, 14, 17, 198, 126, 70, 4, 190, 143, 237, 232, 34, 122, 118, 144, 56, 66, 79, 150, 137, 176, 29, 132, 36, 33, 216, 150, 183, 151, 57, 62, 118, 111, 31, 226, 217, 144, 112, 173, 225, 99, 72, 232, 1, 190, 78, 98, 215, 193, 154, 132, 48, 92, 4, 45, 124, 67, 29, 247, 110, 160, 72, 10, 130, 22, 40, 61, 132, 97, 35, 44, 27, 225, 185, 136, 254, 20, 102, 77, 119, 34, 227, 44, 160, 32, 122, 147, 110, 72, 8, 195, 69, 244, 38, 61, 107, 186, 99, 107, 86, 15, 97, 216, 8, 203, 70, 144, 178, 48, 140, 157, 57, 31, 200, 77, 194, 30, 130, 148, 82, 61, 132, 225, 114, 104, 199, 70, 120, 46, 130, 24, 37, 29, 132, 101, 207, 135, 183, 220, 81, 121, 182, 29, 237, 189, 122, 46, 68, 147, 50, 189, 11, 1, 62, 11, 32, 159, 69, 243, 89, 44, 159, 197, 115, 67, 184, 175, 141, 121, 136, 201, 100, 22, 146, 16, 154, 205, 97, 184, 28, 189, 204, 146, 36, 132, 231, 34, 136, 153, 101, 50, 121, 66, 66, 244, 163, 94, 209, 32, 154, 148, 191, 38, 23, 245, 52, 22, 98, 212, 27, 126, 8, 207, 88, 171, 109, 38, 30, 21, 9, 65, 243, 151, 205, 196, 35, 137, 67, 59, 46, 135, 246, 92, 132, 209, 92, 95, 121, 203, 69, 244, 227, 17, 104, 144, 206, 184, 4, 9, 1, 124, 18, 64, 62, 196, 178, 33, 221, 112, 204, 155, 226, 217, 149, 138, 103, 87, 142, 62, 19, 191, 72, 66, 24, 46, 71, 47, 126, 21, 9, 225, 185, 8, 195, 182, 131, 168, 167, 62, 23, 191, 68, 8, 45, 175, 124, 46, 128, 105, 44, 32, 249, 16, 197, 135, 88, 238, 172, 244, 247, 213, 89, 72, 251, 55, 136, 111, 46, 35, 133, 125, 155, 180, 60, 221, 238, 67, 12, 13, 226, 184, 213, 74, 31, 98, 104, 16, 207, 183, 197, 179, 109, 9, 2, 196, 180, 165, 7, 121, 199, 150, 219, 155, 115, 199, 236, 251, 151, 219, 155, 246, 207, 186, 255, 7, 80, 75, 1, 2, 20, 0, 20, 0, 0, 8, 8, 0, 187, 182, 42, 68, 95, 169, 84, 175, 60, 66, 0, 0, 49, 67, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 114, 105, 97, 108, 95, 52, 56, 46, 112, 110, 103, 80, 75, 1, 2, 20, 0, 20, 0, 0, 8, 8, 0, 187, 182, 42, 68, 34, 236, 10, 177, 219, 6, 0, 0, 221, 61, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 102, 66, 0, 0, 97, 114, 105, 97, 108, 95, 52, 56, 46, 102, 110, 116, 80, 75, 5, 6, 0, 0, 0, 0, 2, 0, 2, 0, 116, 0, 0, 0, 107, 73, 0, 0, 0, 0];

+const List<int> _ARIAL_48 = const [

+  80,

+  75,

+  3,

+  4,

+  20,

+  0,

+  0,

+  8,

+  8,

+  0,

+  187,

+  182,

+  42,

+  68,

+  95,

+  169,

+  84,

+  175,

+  60,

+  66,

+  0,

+  0,

+  49,

+  67,

+  0,

+  0,

+  12,

+  0,

+  0,

+  0,

+  97,

+  114,

+  105,

+  97,

+  108,

+  95,

+  52,

+  56,

+  46,

+  112,

+  110,

+  103,

+  164,

+  187,

+  85,

+  80,

+  92,

+  77,

+  224,

+  237,

+  59,

+  131,

+  187,

+  7,

+  201,

+  64,

+  112,

+  11,

+  110,

+  131,

+  133,

+  224,

+  238,

+  16,

+  130,

+  59,

+  9,

+  131,

+  12,

+  4,

+  6,

+  215,

+  193,

+  33,

+  193,

+  157,

+  96,

+  131,

+  36,

+  192,

+  135,

+  195,

+  224,

+  26,

+  66,

+  176,

+  32,

+  67,

+  66,

+  128,

+  76,

+  112,

+  39,

+  184,

+  219,

+  0,

+  55,

+  255,

+  115,

+  238,

+  173,

+  243,

+  112,

+  30,

+  239,

+  170,

+  93,

+  187,

+  118,

+  213,

+  126,

+  233,

+  174,

+  213,

+  221,

+  235,

+  183,

+  30,

+  58,

+  193,

+  64,

+  79,

+  157,

+  148,

+  232,

+  41,

+  17,

+  0,

+  0,

+  32,

+  213,

+  212,

+  80,

+  49,

+  2,

+  0,

+  8,

+  160,

+  255,

+  190,

+  69,

+  8,

+  240,

+  254,

+  189,

+  93,

+  253,

+  135,

+  138,

+  1,

+  0,

+  165,

+  107,

+  77,

+  21,

+  197,

+  87,

+  1,

+  232,

+  3,

+  235,

+  164,

+  198,

+  242,

+  246,

+  186,

+  34,

+  18,

+  130,

+  8,

+  138,

+  255,

+  247,

+  249,

+  194,

+  74,

+  129,

+  197,

+  74,

+  49,

+  16,

+  173,

+  64,

+  192,

+  141,

+  35,

+  26,

+  16,

+  118,

+  181,

+  160,

+  125,

+  36,

+  202,

+  168,

+  153,

+  237,

+  244,

+  27,

+  37,

+  103,

+  100,

+  50,

+  247,

+  250,

+  128,

+  177,

+  95,

+  254,

+  118,

+  206,

+  249,

+  102,

+  78,

+  136,

+  251,

+  255,

+  183,

+  42,

+  30,

+  13,

+  18,

+  27,

+  31,

+  167,

+  132,

+  48,

+  219,

+  109,

+  15,

+  203,

+  143,

+  247,

+  203,

+  158,

+  251,

+  254,

+  24,

+  221,

+  156,

+  128,

+  185,

+  172,

+  219,

+  247,

+  103,

+  185,

+  13,

+  210,

+  33,

+  143,

+  143,

+  143,

+  152,

+  161,

+  71,

+  204,

+  71,

+  162,

+  117,

+  130,

+  28,

+  9,

+  130,

+  241,

+  237,

+  222,

+  97,

+  73,

+  246,

+  245,

+  226,

+  190,

+  71,

+  57,

+  152,

+  213,

+  242,

+  145,

+  45,

+  220,

+  95,

+  104,

+  56,

+  55,

+  120,

+  72,

+  22,

+  125,

+  228,

+  203,

+  53,

+  52,

+  143,

+  237,

+  118,

+  50,

+  85,

+  143,

+  87,

+  172,

+  177,

+  28,

+  154,

+  200,

+  180,

+  80,

+  223,

+  53,

+  20,

+  104,

+  222,

+  150,

+  246,

+  117,

+  27,

+  63,

+  37,

+  252,

+  209,

+  82,

+  59,

+  4,

+  6,

+  15,

+  88,

+  9,

+  120,

+  22,

+  10,

+  22,

+  41,

+  74,

+  94,

+  73,

+  224,

+  140,

+  243,

+  164,

+  94,

+  15,

+  157,

+  104,

+  163,

+  28,

+  249,

+  244,

+  86,

+  183,

+  249,

+  124,

+  168,

+  196,

+  182,

+  74,

+  194,

+  83,

+  240,

+  212,

+  247,

+  153,

+  115,

+  58,

+  119,

+  178,

+  243,

+  208,

+  217,

+  53,

+  185,

+  57,

+  35,

+  189,

+  163,

+  91,

+  178,

+  8,

+  142,

+  195,

+  163,

+  210,

+  103,

+  61,

+  65,

+  87,

+  177,

+  202,

+  237,

+  71,

+  177,

+  184,

+  250,

+  239,

+  125,

+  2,

+  99,

+  129,

+  252,

+  243,

+  193,

+  112,

+  207,

+  196,

+  113,

+  255,

+  214,

+  254,

+  249,

+  237,

+  68,

+  231,

+  63,

+  223,

+  123,

+  15,

+  165,

+  221,

+  136,

+  119,

+  190,

+  201,

+  251,

+  56,

+  38,

+  181,

+  168,

+  94,

+  74,

+  230,

+  52,

+  249,

+  72,

+  9,

+  31,

+  105,

+  236,

+  46,

+  144,

+  188,

+  212,

+  163,

+  114,

+  136,

+  226,

+  254,

+  112,

+  2,

+  184,

+  125,

+  195,

+  26,

+  242,

+  53,

+  107,

+  79,

+  217,

+  105,

+  60,

+  144,

+  187,

+  87,

+  104,

+  118,

+  186,

+  81,

+  56,

+  52,

+  165,

+  122,

+  237,

+  42,

+  232,

+  91,

+  47,

+  56,

+  46,

+  148,

+  148,

+  176,

+  239,

+  177,

+  165,

+  45,

+  42,

+  186,

+  158,

+  103,

+  209,

+  126,

+  223,

+  118,

+  56,

+  125,

+  185,

+  230,

+  166,

+  199,

+  81,

+  31,

+  236,

+  148,

+  50,

+  252,

+  116,

+  47,

+  127,

+  109,

+  206,

+  243,

+  222,

+  25,

+  83,

+  40,

+  194,

+  41,

+  159,

+  42,

+  216,

+  16,

+  191,

+  73,

+  182,

+  76,

+  178,

+  96,

+  25,

+  195,

+  56,

+  145,

+  120,

+  221,

+  209,

+  247,

+  29,

+  108,

+  181,

+  175,

+  236,

+  216,

+  29,

+  39,

+  167,

+  156,

+  18,

+  205,

+  248,

+  39,

+  191,

+  138,

+  185,

+  45,

+  189,

+  245,

+  180,

+  33,

+  13,

+  27,

+  70,

+  58,

+  148,

+  169,

+  111,

+  245,

+  83,

+  143,

+  82,

+  4,

+  226,

+  123,

+  111,

+  61,

+  214,

+  230,

+  240,

+  183,

+  32,

+  141,

+  126,

+  56,

+  251,

+  164,

+  22,

+  215,

+  124,

+  239,

+  245,

+  77,

+  175,

+  244,

+  133,

+  160,

+  70,

+  189,

+  249,

+  150,

+  16,

+  5,

+  232,

+  87,

+  197,

+  90,

+  92,

+  181,

+  190,

+  147,

+  48,

+  153,

+  95,

+  129,

+  177,

+  162,

+  31,

+  214,

+  122,

+  112,

+  101,

+  136,

+  121,

+  205,

+  132,

+  73,

+  107,

+  205,

+  156,

+  108,

+  75,

+  95,

+  180,

+  7,

+  137,

+  134,

+  71,

+  137,

+  228,

+  194,

+  157,

+  77,

+  153,

+  190,

+  180,

+  155,

+  207,

+  70,

+  187,

+  210,

+  128,

+  250,

+  228,

+  4,

+  181,

+  249,

+  93,

+  154,

+  236,

+  6,

+  159,

+  245,

+  37,

+  52,

+  160,

+  146,

+  233,

+  125,

+  94,

+  183,

+  153,

+  40,

+  153,

+  238,

+  55,

+  192,

+  214,

+  9,

+  251,

+  133,

+  167,

+  149,

+  52,

+  205,

+  70,

+  186,

+  197,

+  78,

+  215,

+  194,

+  9,

+  75,

+  43,

+  119,

+  230,

+  76,

+  240,

+  156,

+  149,

+  207,

+  24,

+  121,

+  215,

+  117,

+  248,

+  98,

+  189,

+  150,

+  79,

+  99,

+  190,

+  155,

+  82,

+  216,

+  148,

+  248,

+  230,

+  223,

+  93,

+  170,

+  214,

+  149,

+  125,

+  110,

+  243,

+  161,

+  152,

+  97,

+  140,

+  58,

+  7,

+  183,

+  124,

+  206,

+  49,

+  161,

+  208,

+  205,

+  21,

+  76,

+  48,

+  20,

+  255,

+  218,

+  191,

+  107,

+  231,

+  97,

+  214,

+  108,

+  238,

+  28,

+  221,

+  55,

+  87,

+  83,

+  165,

+  90,

+  27,

+  251,

+  190,

+  54,

+  15,

+  220,

+  90,

+  226,

+  138,

+  80,

+  123,

+  169,

+  172,

+  62,

+  99,

+  150,

+  179,

+  126,

+  7,

+  197,

+  149,

+  163,

+  16,

+  191,

+  125,

+  138,

+  34,

+  254,

+  118,

+  22,

+  83,

+  17,

+  106,

+  78,

+  32,

+  135,

+  206,

+  106,

+  104,

+  140,

+  237,

+  94,

+  230,

+  58,

+  6,

+  54,

+  15,

+  210,

+  25,

+  205,

+  12,

+  153,

+  82,

+  47,

+  201,

+  68,

+  187,

+  170,

+  70,

+  62,

+  19,

+  149,

+  250,

+  82,

+  240,

+  83,

+  86,

+  1,

+  100,

+  64,

+  5,

+  215,

+  194,

+  192,

+  136,

+  29,

+  99,

+  215,

+  9,

+  19,

+  7,

+  182,

+  4,

+  233,

+  31,

+  203,

+  233,

+  127,

+  142,

+  92,

+  15,

+  85,

+  242,

+  172,

+  69,

+  76,

+  110,

+  125,

+  144,

+  198,

+  77,

+  174,

+  139,

+  2,

+  83,

+  40,

+  135,

+  122,

+  197,

+  59,

+  15,

+  221,

+  134,

+  91,

+  103,

+  237,

+  92,

+  117,

+  229,

+  221,

+  181,

+  41,

+  135,

+  0,

+  146,

+  182,

+  45,

+  241,

+  9,

+  2,

+  214,

+  180,

+  41,

+  94,

+  181,

+  13,

+  191,

+  224,

+  12,

+  114,

+  73,

+  131,

+  99,

+  11,

+  186,

+  201,

+  184,

+  164,

+  139,

+  22,

+  4,

+  178,

+  104,

+  106,

+  64,

+  38,

+  176,

+  169,

+  142,

+  163,

+  7,

+  159,

+  157,

+  39,

+  248,

+  126,

+  140,

+  151,

+  176,

+  137,

+  14,

+  114,

+  206,

+  156,

+  207,

+  254,

+  185,

+  16,

+  172,

+  29,

+  248,

+  100,

+  108,

+  218,

+  215,

+  211,

+  191,

+  108,

+  208,

+  78,

+  127,

+  100,

+  131,

+  13,

+  53,

+  106,

+  152,

+  193,

+  136,

+  87,

+  180,

+  8,

+  239,

+  99,

+  160,

+  144,

+  118,

+  167,

+  63,

+  42,

+  166,

+  87,

+  221,

+  225,

+  109,

+  75,

+  141,

+  173,

+  129,

+  154,

+  206,

+  255,

+  254,

+  238,

+  117,

+  139,

+  191,

+  81,

+  8,

+  3,

+  6,

+  167,

+  154,

+  148,

+  143,

+  181,

+  152,

+  44,

+  191,

+  24,

+  250,

+  117,

+  148,

+  154,

+  50,

+  176,

+  33,

+  166,

+  141,

+  38,

+  47,

+  156,

+  93,

+  106,

+  88,

+  242,

+  196,

+  70,

+  143,

+  28,

+  223,

+  169,

+  18,

+  114,

+  224,

+  67,

+  43,

+  247,

+  73,

+  136,

+  27,

+  12,

+  189,

+  67,

+  243,

+  48,

+  104,

+  134,

+  48,

+  103,

+  19,

+  56,

+  120,

+  164,

+  188,

+  130,

+  171,

+  177,

+  92,

+  3,

+  225,

+  163,

+  196,

+  252,

+  151,

+  60,

+  152,

+  53,

+  243,

+  55,

+  21,

+  146,

+  30,

+  158,

+  230,

+  188,

+  217,

+  182,

+  109,

+  86,

+  210,

+  192,

+  214,

+  144,

+  229,

+  24,

+  59,

+  174,

+  199,

+  224,

+  134,

+  90,

+  130,

+  86,

+  20,

+  225,

+  160,

+  21,

+  102,

+  189,

+  111,

+  223,

+  232,

+  192,

+  109,

+  155,

+  197,

+  224,

+  180,

+  73,

+  167,

+  150,

+  182,

+  31,

+  67,

+  136,

+  233,

+  132,

+  35,

+  158,

+  104,

+  167,

+  118,

+  155,

+  129,

+  231,

+  73,

+  3,

+  61,

+  21,

+  28,

+  198,

+  123,

+  54,

+  194,

+  216,

+  90,

+  29,

+  123,

+  53,

+  147,

+  155,

+  20,

+  64,

+  210,

+  47,

+  34,

+  14,

+  38,

+  22,

+  17,

+  164,

+  159,

+  61,

+  172,

+  36,

+  94,

+  4,

+  22,

+  85,

+  59,

+  21,

+  165,

+  151,

+  158,

+  248,

+  119,

+  15,

+  143,

+  175,

+  98,

+  210,

+  108,

+  103,

+  57,

+  182,

+  133,

+  142,

+  24,

+  72,

+  174,

+  184,

+  40,

+  94,

+  146,

+  91,

+  50,

+  75,

+  65,

+  214,

+  29,

+  21,

+  65,

+  236,

+  111,

+  181,

+  151,

+  128,

+  200,

+  180,

+  221,

+  184,

+  199,

+  180,

+  40,

+  1,

+  194,

+  149,

+  84,

+  128,

+  8,

+  92,

+  98,

+  31,

+  230,

+  171,

+  8,

+  236,

+  223,

+  128,

+  64,

+  251,

+  244,

+  130,

+  66,

+  133,

+  222,

+  72,

+  102,

+  158,

+  248,

+  219,

+  141,

+  4,

+  11,

+  207,

+  72,

+  124,

+  70,

+  144,

+  218,

+  203,

+  189,

+  1,

+  31,

+  83,

+  62,

+  154,

+  125,

+  143,

+  78,

+  130,

+  70,

+  75,

+  44,

+  152,

+  62,

+  11,

+  166,

+  74,

+  116,

+  102,

+  185,

+  164,

+  45,

+  45,

+  65,

+  60,

+  27,

+  25,

+  149,

+  62,

+  151,

+  56,

+  139,

+  193,

+  50,

+  15,

+  57,

+  24,

+  61,

+  230,

+  64,

+  13,

+  81,

+  70,

+  213,

+  40,

+  201,

+  10,

+  63,

+  223,

+  159,

+  250,

+  175,

+  113,

+  207,

+  104,

+  200,

+  220,

+  155,

+  154,

+  201,

+  63,

+  10,

+  76,

+  165,

+  53,

+  203,

+  113,

+  98,

+  69,

+  133,

+  244,

+  74,

+  12,

+  55,

+  73,

+  46,

+  134,

+  54,

+  144,

+  125,

+  54,

+  18,

+  123,

+  60,

+  193,

+  124,

+  126,

+  23,

+  137,

+  135,

+  15,

+  157,

+  135,

+  131,

+  105,

+  186,

+  123,

+  251,

+  104,

+  120,

+  168,

+  27,

+  96,

+  161,

+  173,

+  101,

+  5,

+  87,

+  81,

+  220,

+  226,

+  122,

+  167,

+  35,

+  0,

+  119,

+  72,

+  161,

+  167,

+  209,

+  42,

+  27,

+  2,

+  191,

+  234,

+  217,

+  134,

+  159,

+  18,

+  253,

+  147,

+  51,

+  51,

+  14,

+  4,

+  233,

+  150,

+  133,

+  68,

+  252,

+  11,

+  183,

+  185,

+  0,

+  251,

+  241,

+  208,

+  39,

+  50,

+  153,

+  156,

+  138,

+  32,

+  168,

+  135,

+  157,

+  23,

+  169,

+  30,

+  188,

+  223,

+  15,

+  5,

+  80,

+  38,

+  88,

+  114,

+  163,

+  113,

+  123,

+  65,

+  216,

+  43,

+  194,

+  231,

+  116,

+  172,

+  238,

+  93,

+  49,

+  132,

+  126,

+  73,

+  129,

+  108,

+  164,

+  232,

+  172,

+  16,

+  105,

+  197,

+  167,

+  21,

+  231,

+  189,

+  255,

+  239,

+  219,

+  202,

+  159,

+  81,

+  9,

+  94,

+  113,

+  103,

+  218,

+  134,

+  11,

+  79,

+  28,

+  168,

+  70,

+  100,

+  195,

+  130,

+  132,

+  31,

+  74,

+  77,

+  186,

+  127,

+  8,

+  91,

+  1,

+  212,

+  60,

+  45,

+  249,

+  84,

+  247,

+  7,

+  250,

+  121,

+  71,

+  169,

+  38,

+  66,

+  35,

+  234,

+  156,

+  49,

+  188,

+  93,

+  201,

+  126,

+  133,

+  239,

+  111,

+  231,

+  185,

+  142,

+  196,

+  182,

+  109,

+  21,

+  4,

+  73,

+  48,

+  103,

+  39,

+  140,

+  250,

+  52,

+  202,

+  49,

+  109,

+  139,

+  135,

+  134,

+  176,

+  62,

+  147,

+  152,

+  117,

+  131,

+  106,

+  21,

+  179,

+  226,

+  38,

+  40,

+  158,

+  212,

+  78,

+  190,

+  95,

+  38,

+  8,

+  237,

+  120,

+  7,

+  124,

+  86,

+  191,

+  96,

+  56,

+  132,

+  38,

+  29,

+  40,

+  189,

+  138,

+  62,

+  238,

+  86,

+  245,

+  207,

+  143,

+  200,

+  207,

+  9,

+  97,

+  71,

+  169,

+  189,

+  102,

+  60,

+  225,

+  64,

+  197,

+  54,

+  244,

+  55,

+  60,

+  223,

+  80,

+  88,

+  120,

+  163,

+  108,

+  36,

+  158,

+  77,

+  155,

+  238,

+  29,

+  136,

+  97,

+  171,

+  150,

+  22,

+  249,

+  235,

+  211,

+  120,

+  68,

+  154,

+  37,

+  191,

+  114,

+  26,

+  31,

+  5,

+  126,

+  73,

+  139,

+  108,

+  116,

+  104,

+  221,

+  24,

+  69,

+  36,

+  41,

+  63,

+  214,

+  227,

+  102,

+  135,

+  37,

+  189,

+  233,

+  12,

+  110,

+  140,

+  160,

+  55,

+  12,

+  164,

+  122,

+  220,

+  88,

+  14,

+  217,

+  131,

+  111,

+  206,

+  240,

+  174,

+  245,

+  201,

+  36,

+  252,

+  52,

+  177,

+  172,

+  170,

+  79,

+  191,

+  108,

+  51,

+  176,

+  106,

+  124,

+  138,

+  110,

+  22,

+  74,

+  134,

+  78,

+  77,

+  124,

+  157,

+  193,

+  131,

+  66,

+  246,

+  233,

+  125,

+  142,

+  37,

+  185,

+  245,

+  181,

+  70,

+  219,

+  79,

+  237,

+  232,

+  101,

+  201,

+  89,

+  43,

+  195,

+  255,

+  115,

+  171,

+  161,

+  234,

+  195,

+  93,

+  107,

+  6,

+  173,

+  29,

+  22,

+  149,

+  40,

+  35,

+  91,

+  46,

+  14,

+  9,

+  17,

+  73,

+  241,

+  254,

+  171,

+  212,

+  119,

+  167,

+  67,

+  190,

+  189,

+  1,

+  53,

+  80,

+  62,

+  251,

+  2,

+  184,

+  52,

+  161,

+  134,

+  91,

+  74,

+  33,

+  159,

+  112,

+  139,

+  2,

+  40,

+  97,

+  96,

+  189,

+  229,

+  201,

+  95,

+  83,

+  143,

+  129,

+  74,

+  28,

+  72,

+  148,

+  193,

+  107,

+  3,

+  190,

+  185,

+  74,

+  95,

+  63,

+  156,

+  228,

+  164,

+  202,

+  254,

+  239,

+  43,

+  25,

+  139,

+  138,

+  160,

+  155,

+  127,

+  35,

+  235,

+  151,

+  252,

+  180,

+  202,

+  148,

+  165,

+  229,

+  198,

+  94,

+  112,

+  85,

+  175,

+  99,

+  167,

+  202,

+  46,

+  96,

+  21,

+  18,

+  158,

+  193,

+  78,

+  141,

+  85,

+  214,

+  8,

+  60,

+  154,

+  95,

+  43,

+  54,

+  77,

+  229,

+  31,

+  121,

+  65,

+  167,

+  42,

+  186,

+  219,

+  226,

+  113,

+  182,

+  123,

+  47,

+  54,

+  19,

+  155,

+  67,

+  140,

+  182,

+  147,

+  146,

+  229,

+  243,

+  79,

+  34,

+  92,

+  20,

+  18,

+  196,

+  225,

+  99,

+  140,

+  118,

+  64,

+  144,

+  170,

+  60,

+  106,

+  82,

+  171,

+  184,

+  105,

+  21,

+  195,

+  2,

+  143,

+  79,

+  199,

+  235,

+  4,

+  84,

+  8,

+  3,

+  122,

+  21,

+  247,

+  109,

+  185,

+  125,

+  74,

+  131,

+  183,

+  208,

+  27,

+  117,

+  7,

+  209,

+  243,

+  198,

+  19,

+  83,

+  50,

+  246,

+  133,

+  174,

+  186,

+  146,

+  79,

+  255,

+  68,

+  177,

+  141,

+  58,

+  169,

+  57,

+  216,

+  75,

+  98,

+  46,

+  245,

+  78,

+  44,

+  86,

+  187,

+  151,

+  125,

+  126,

+  6,

+  201,

+  147,

+  33,

+  41,

+  113,

+  173,

+  27,

+  107,

+  176,

+  44,

+  241,

+  161,

+  78,

+  216,

+  224,

+  75,

+  30,

+  217,

+  14,

+  3,

+  82,

+  164,

+  189,

+  137,

+  198,

+  39,

+  140,

+  49,

+  23,

+  132,

+  189,

+  109,

+  132,

+  19,

+  11,

+  74,

+  255,

+  228,

+  111,

+  248,

+  117,

+  198,

+  201,

+  179,

+  119,

+  32,

+  109,

+  117,

+  16,

+  23,

+  108,

+  230,

+  76,

+  61,

+  253,

+  222,

+  182,

+  138,

+  118,

+  62,

+  145,

+  17,

+  46,

+  69,

+  8,

+  49,

+  64,

+  81,

+  63,

+  57,

+  126,

+  228,

+  66,

+  225,

+  165,

+  213,

+  55,

+  236,

+  239,

+  99,

+  31,

+  88,

+  127,

+  7,

+  248,

+  65,

+  124,

+  100,

+  179,

+  156,

+  126,

+  249,

+  220,

+  131,

+  56,

+  78,

+  148,

+  196,

+  247,

+  253,

+  34,

+  56,

+  20,

+  51,

+  110,

+  219,

+  6,

+  37,

+  120,

+  85,

+  148,

+  90,

+  187,

+  12,

+  147,

+  249,

+  21,

+  64,

+  29,

+  34,

+  99,

+  142,

+  255,

+  78,

+  39,

+  155,

+  131,

+  134,

+  54,

+  57,

+  163,

+  119,

+  133,

+  226,

+  103,

+  153,

+  147,

+  105,

+  95,

+  63,

+  240,

+  246,

+  69,

+  187,

+  88,

+  130,

+  7,

+  36,

+  15,

+  169,

+  246,

+  126,

+  99,

+  123,

+  47,

+  60,

+  223,

+  112,

+  224,

+  56,

+  87,

+  202,

+  126,

+  25,

+  64,

+  37,

+  13,

+  97,

+  39,

+  70,

+  54,

+  58,

+  182,

+  110,

+  84,

+  33,

+  146,

+  70,

+  246,

+  142,

+  91,

+  57,

+  235,

+  212,

+  53,

+  111,

+  6,

+  63,

+  139,

+  178,

+  2,

+  29,

+  172,

+  124,

+  216,

+  219,

+  238,

+  14,

+  17,

+  241,

+  39,

+  38,

+  214,

+  79,

+  216,

+  72,

+  71,

+  126,

+  218,

+  0,

+  9,

+  111,

+  192,

+  178,

+  202,

+  115,

+  22,

+  62,

+  29,

+  7,

+  212,

+  221,

+  194,

+  92,

+  253,

+  207,

+  247,

+  219,

+  233,

+  19,

+  194,

+  235,

+  58,

+  190,

+  131,

+  211,

+  30,

+  55,

+  182,

+  156,

+  185,

+  147,

+  221,

+  89,

+  122,

+  103,

+  234,

+  54,

+  146,

+  98,

+  248,

+  214,

+  41,

+  165,

+  25,

+  99,

+  103,

+  130,

+  253,

+  92,

+  150,

+  158,

+  84,

+  219,

+  18,

+  253,

+  213,

+  204,

+  111,

+  36,

+  51,

+  227,

+  177,

+  44,

+  13,

+  93,

+  18,

+  181,

+  213,

+  184,

+  158,

+  149,

+  133,

+  77,

+  244,

+  135,

+  40,

+  125,

+  89,

+  80,

+  229,

+  3,

+  100,

+  105,

+  98,

+  218,

+  102,

+  236,

+  223,

+  235,

+  217,

+  5,

+  247,

+  114,

+  56,

+  254,

+  139,

+  130,

+  114,

+  88,

+  160,

+  159,

+  131,

+  244,

+  85,

+  210,

+  44,

+  0,

+  74,

+  161,

+  57,

+  153,

+  53,

+  223,

+  175,

+  216,

+  3,

+  193,

+  85,

+  0,

+  165,

+  174,

+  133,

+  250,

+  10,

+  179,

+  108,

+  49,

+  138,

+  227,

+  237,

+  61,

+  135,

+  111,

+  239,

+  105,

+  211,

+  79,

+  53,

+  205,

+  73,

+  139,

+  162,

+  25,

+  127,

+  173,

+  80,

+  43,

+  52,

+  250,

+  120,

+  146,

+  161,

+  219,

+  105,

+  31,

+  130,

+  85,

+  234,

+  182,

+  95,

+  81,

+  0,

+  56,

+  3,

+  226,

+  7,

+  245,

+  134,

+  25,

+  167,

+  162,

+  1,

+  97,

+  106,

+  27,

+  61,

+  84,

+  20,

+  63,

+  213,

+  164,

+  56,

+  160,

+  52,

+  72,

+  184,

+  46,

+  207,

+  131,

+  141,

+  217,

+  254,

+  211,

+  24,

+  60,

+  79,

+  35,

+  174,

+  75,

+  44,

+  24,

+  198,

+  89,

+  88,

+  35,

+  0,

+  232,

+  71,

+  255,

+  133,

+  172,

+  234,

+  46,

+  173,

+  244,

+  177,

+  40,

+  96,

+  203,

+  5,

+  65,

+  202,

+  3,

+  252,

+  73,

+  224,

+  78,

+  234,

+  114,

+  214,

+  190,

+  130,

+  29,

+  241,

+  69,

+  223,

+  119,

+  128,

+  158,

+  35,

+  2,

+  139,

+  42,

+  213,

+  29,

+  203,

+  134,

+  100,

+  160,

+  20,

+  52,

+  215,

+  138,

+  68,

+  59,

+  51,

+  28,

+  29,

+  138,

+  135,

+  37,

+  11,

+  3,

+  251,

+  204,

+  100,

+  174,

+  7,

+  124,

+  61,

+  245,

+  9,

+  81,

+  48,

+  54,

+  26,

+  98,

+  30,

+  105,

+  194,

+  62,

+  17,

+  123,

+  89,

+  172,

+  227,

+  137,

+  57,

+  79,

+  182,

+  222,

+  30,

+  75,

+  154,

+  75,

+  114,

+  243,

+  238,

+  48,

+  127,

+  157,

+  249,

+  158,

+  119,

+  166,

+  211,

+  119,

+  135,

+  71,

+  133,

+  111,

+  88,

+  211,

+  204,

+  200,

+  240,

+  143,

+  236,

+  130,

+  101,

+  185,

+  48,

+  157,

+  191,

+  20,

+  65,

+  157,

+  71,

+  156,

+  0,

+  208,

+  98,

+  33,

+  102,

+  144,

+  32,

+  183,

+  153,

+  184,

+  234,

+  85,

+  122,

+  26,

+  33,

+  122,

+  68,

+  192,

+  187,

+  81,

+  17,

+  68,

+  217,

+  247,

+  116,

+  143,

+  145,

+  78,

+  55,

+  58,

+  172,

+  188,

+  255,

+  44,

+  31,

+  85,

+  65,

+  164,

+  3,

+  186,

+  142,

+  99,

+  164,

+  198,

+  7,

+  244,

+  230,

+  30,

+  253,

+  33,

+  100,

+  234,

+  203,

+  252,

+  216,

+  199,

+  217,

+  199,

+  44,

+  90,

+  209,

+  154,

+  101,

+  22,

+  121,

+  133,

+  106,

+  100,

+  45,

+  81,

+  207,

+  225,

+  145,

+  194,

+  201,

+  224,

+  211,

+  151,

+  86,

+  253,

+  3,

+  82,

+  4,

+  41,

+  39,

+  180,

+  72,

+  215,

+  78,

+  211,

+  13,

+  123,

+  118,

+  61,

+  20,

+  54,

+  181,

+  35,

+  177,

+  188,

+  75,

+  103,

+  75,

+  226,

+  235,

+  51,

+  198,

+  23,

+  55,

+  1,

+  45,

+  84,

+  29,

+  44,

+  135,

+  161,

+  63,

+  62,

+  207,

+  149,

+  179,

+  116,

+  150,

+  107,

+  173,

+  230,

+  161,

+  162,

+  10,

+  220,

+  152,

+  58,

+  184,

+  33,

+  248,

+  196,

+  191,

+  159,

+  19,

+  162,

+  227,

+  251,

+  23,

+  143,

+  163,

+  147,

+  173,

+  232,

+  69,

+  91,

+  137,

+  207,

+  219,

+  254,

+  251,

+  142,

+  151,

+  206,

+  92,

+  144,

+  135,

+  219,

+  173,

+  176,

+  145,

+  19,

+  28,

+  205,

+  109,

+  58,

+  30,

+  102,

+  5,

+  115,

+  222,

+  222,

+  214,

+  63,

+  99,

+  180,

+  245,

+  30,

+  254,

+  253,

+  29,

+  166,

+  51,

+  54,

+  66,

+  204,

+  255,

+  122,

+  101,

+  174,

+  107,

+  20,

+  128,

+  156,

+  214,

+  14,

+  111,

+  217,

+  142,

+  59,

+  217,

+  215,

+  38,

+  155,

+  186,

+  149,

+  254,

+  250,

+  8,

+  21,

+  102,

+  186,

+  196,

+  249,

+  183,

+  94,

+  83,

+  146,

+  42,

+  200,

+  168,

+  10,

+  13,

+  114,

+  240,

+  7,

+  232,

+  196,

+  101,

+  161,

+  225,

+  207,

+  252,

+  93,

+  39,

+  233,

+  122,

+  218,

+  121,

+  46,

+  13,

+  149,

+  214,

+  164,

+  185,

+  222,

+  15,

+  163,

+  201,

+  28,

+  100,

+  155,

+  81,

+  204,

+  226,

+  97,

+  241,

+  200,

+  183,

+  116,

+  129,

+  10,

+  222,

+  60,

+  203,

+  242,

+  153,

+  227,

+  254,

+  176,

+  101,

+  224,

+  166,

+  66,

+  35,

+  218,

+  22,

+  115,

+  213,

+  121,

+  94,

+  211,

+  195,

+  161,

+  64,

+  223,

+  151,

+  119,

+  215,

+  206,

+  229,

+  138,

+  40,

+  195,

+  169,

+  33,

+  30,

+  185,

+  40,

+  170,

+  92,

+  28,

+  199,

+  93,

+  47,

+  98,

+  53,

+  161,

+  51,

+  153,

+  151,

+  134,

+  21,

+  155,

+  54,

+  225,

+  153,

+  77,

+  180,

+  69,

+  47,

+  39,

+  28,

+  191,

+  230,

+  70,

+  81,

+  242,

+  134,

+  0,

+  64,

+  169,

+  207,

+  78,

+  190,

+  54,

+  188,

+  234,

+  105,

+  82,

+  39,

+  115,

+  145,

+  252,

+  145,

+  160,

+  125,

+  136,

+  212,

+  94,

+  146,

+  180,

+  32,

+  68,

+  82,

+  138,

+  3,

+  65,

+  84,

+  221,

+  147,

+  79,

+  134,

+  232,

+  164,

+  198,

+  196,

+  149,

+  143,

+  131,

+  237,

+  79,

+  92,

+  27,

+  208,

+  158,

+  46,

+  138,

+  77,

+  92,

+  197,

+  52,

+  90,

+  86,

+  203,

+  120,

+  232,

+  126,

+  11,

+  38,

+  46,

+  70,

+  2,

+  218,

+  112,

+  77,

+  38,

+  168,

+  224,

+  14,

+  161,

+  214,

+  59,

+  22,

+  83,

+  150,

+  68,

+  180,

+  211,

+  139,

+  1,

+  207,

+  2,

+  65,

+  133,

+  253,

+  72,

+  174,

+  212,

+  254,

+  59,

+  37,

+  56,

+  107,

+  51,

+  77,

+  99,

+  14,

+  79,

+  174,

+  183,

+  2,

+  40,

+  10,

+  190,

+  13,

+  118,

+  249,

+  65,

+  97,

+  190,

+  60,

+  173,

+  245,

+  86,

+  43,

+  10,

+  156,

+  220,

+  247,

+  251,

+  83,

+  48,

+  214,

+  174,

+  2,

+  91,

+  42,

+  125,

+  204,

+  169,

+  218,

+  19,

+  69,

+  201,

+  18,

+  227,

+  111,

+  192,

+  67,

+  78,

+  38,

+  17,

+  158,

+  142,

+  49,

+  29,

+  154,

+  131,

+  167,

+  234,

+  84,

+  13,

+  66,

+  213,

+  105,

+  54,

+  7,

+  165,

+  107,

+  42,

+  8,

+  182,

+  223,

+  228,

+  161,

+  21,

+  146,

+  72,

+  124,

+  116,

+  233,

+  76,

+  41,

+  0,

+  203,

+  151,

+  22,

+  24,

+  58,

+  40,

+  235,

+  235,

+  30,

+  179,

+  189,

+  64,

+  157,

+  144,

+  83,

+  242,

+  214,

+  240,

+  63,

+  63,

+  74,

+  157,

+  180,

+  87,

+  1,

+  163,

+  81,

+  52,

+  118,

+  40,

+  42,

+  213,

+  203,

+  85,

+  66,

+  213,

+  62,

+  127,

+  44,

+  232,

+  6,

+  0,

+  236,

+  122,

+  76,

+  189,

+  22,

+  254,

+  241,

+  155,

+  30,

+  1,

+  68,

+  255,

+  95,

+  112,

+  243,

+  122,

+  55,

+  42,

+  128,

+  210,

+  122,

+  223,

+  11,

+  18,

+  192,

+  223,

+  207,

+  100,

+  229,

+  90,

+  38,

+  245,

+  112,

+  133,

+  232,

+  158,

+  36,

+  124,

+  186,

+  62,

+  178,

+  94,

+  209,

+  29,

+  189,

+  201,

+  89,

+  243,

+  87,

+  41,

+  174,

+  125,

+  239,

+  204,

+  181,

+  250,

+  140,

+  31,

+  109,

+  166,

+  34,

+  218,

+  234,

+  143,

+  3,

+  181,

+  59,

+  201,

+  158,

+  110,

+  11,

+  6,

+  2,

+  194,

+  103,

+  185,

+  76,

+  211,

+  36,

+  172,

+  34,

+  66,

+  139,

+  93,

+  247,

+  133,

+  216,

+  96,

+  150,

+  147,

+  69,

+  132,

+  208,

+  69,

+  14,

+  224,

+  153,

+  214,

+  133,

+  169,

+  230,

+  59,

+  44,

+  99,

+  242,

+  228,

+  241,

+  16,

+  108,

+  98,

+  100,

+  218,

+  216,

+  197,

+  187,

+  171,

+  170,

+  217,

+  78,

+  97,

+  167,

+  10,

+  199,

+  195,

+  77,

+  150,

+  64,

+  255,

+  146,

+  181,

+  254,

+  207,

+  19,

+  212,

+  236,

+  83,

+  201,

+  137,

+  102,

+  33,

+  29,

+  59,

+  177,

+  240,

+  99,

+  115,

+  118,

+  20,

+  180,

+  106,

+  205,

+  62,

+  195,

+  210,

+  61,

+  148,

+  104,

+  51,

+  18,

+  252,

+  50,

+  98,

+  178,

+  5,

+  248,

+  169,

+  119,

+  158,

+  135,

+  201,

+  79,

+  18,

+  18,

+  133,

+  234,

+  105,

+  198,

+  133,

+  191,

+  88,

+  179,

+  62,

+  111,

+  34,

+  187,

+  99,

+  57,

+  35,

+  195,

+  234,

+  208,

+  97,

+  2,

+  236,

+  85,

+  117,

+  63,

+  238,

+  46,

+  251,

+  177,

+  169,

+  55,

+  17,

+  108,

+  77,

+  219,

+  244,

+  1,

+  71,

+  138,

+  207,

+  93,

+  43,

+  53,

+  215,

+  136,

+  177,

+  207,

+  10,

+  147,

+  46,

+  212,

+  203,

+  50,

+  75,

+  202,

+  109,

+  95,

+  81,

+  34,

+  27,

+  53,

+  97,

+  129,

+  105,

+  211,

+  49,

+  100,

+  235,

+  230,

+  135,

+  64,

+  18,

+  182,

+  162,

+  165,

+  242,

+  32,

+  61,

+  67,

+  227,

+  181,

+  25,

+  7,

+  90,

+  98,

+  121,

+  147,

+  84,

+  249,

+  120,

+  134,

+  187,

+  37,

+  134,

+  63,

+  169,

+  54,

+  29,

+  111,

+  97,

+  171,

+  22,

+  187,

+  28,

+  227,

+  166,

+  251,

+  239,

+  149,

+  89,

+  217,

+  77,

+  133,

+  216,

+  206,

+  172,

+  165,

+  189,

+  177,

+  18,

+  5,

+  52,

+  136,

+  249,

+  127,

+  200,

+  238,

+  92,

+  169,

+  172,

+  86,

+  224,

+  65,

+  28,

+  231,

+  240,

+  184,

+  82,

+  21,

+  104,

+  233,

+  153,

+  171,

+  6,

+  211,

+  220,

+  24,

+  56,

+  212,

+  28,

+  54,

+  39,

+  229,

+  159,

+  31,

+  186,

+  115,

+  81,

+  113,

+  247,

+  137,

+  205,

+  246,

+  43,

+  130,

+  34,

+  253,

+  43,

+  176,

+  194,

+  74,

+  78,

+  157,

+  24,

+  152,

+  88,

+  120,

+  251,

+  182,

+  146,

+  227,

+  242,

+  49,

+  107,

+  145,

+  108,

+  222,

+  5,

+  164,

+  78,

+  100,

+  11,

+  88,

+  98,

+  223,

+  115,

+  55,

+  119,

+  184,

+  6,

+  119,

+  9,

+  105,

+  215,

+  227,

+  34,

+  129,

+  37,

+  47,

+  234,

+  173,

+  184,

+  31,

+  75,

+  16,

+  73,

+  230,

+  132,

+  4,

+  232,

+  92,

+  194,

+  37,

+  181,

+  116,

+  187,

+  142,

+  253,

+  11,

+  188,

+  17,

+  27,

+  246,

+  212,

+  159,

+  122,

+  210,

+  57,

+  242,

+  78,

+  56,

+  138,

+  156,

+  146,

+  68,

+  55,

+  75,

+  252,

+  115,

+  175,

+  71,

+  136,

+  73,

+  69,

+  83,

+  4,

+  207,

+  122,

+  152,

+  54,

+  36,

+  1,

+  15,

+  131,

+  14,

+  16,

+  242,

+  25,

+  85,

+  170,

+  74,

+  89,

+  61,

+  182,

+  149,

+  219,

+  38,

+  41,

+  17,

+  197,

+  29,

+  45,

+  15,

+  7,

+  89,

+  167,

+  195,

+  159,

+  3,

+  45,

+  225,

+  225,

+  132,

+  16,

+  71,

+  101,

+  34,

+  44,

+  232,

+  144,

+  172,

+  57,

+  46,

+  61,

+  62,

+  52,

+  254,

+  34,

+  83,

+  195,

+  244,

+  23,

+  30,

+  20,

+  16,

+  20,

+  54,

+  21,

+  242,

+  136,

+  195,

+  145,

+  133,

+  68,

+  144,

+  66,

+  129,

+  169,

+  196,

+  232,

+  249,

+  84,

+  39,

+  15,

+  183,

+  111,

+  198,

+  9,

+  212,

+  2,

+  179,

+  65,

+  162,

+  239,

+  50,

+  200,

+  18,

+  140,

+  57,

+  173,

+  147,

+  110,

+  232,

+  50,

+  15,

+  212,

+  140,

+  24,

+  149,

+  221,

+  255,

+  56,

+  124,

+  202,

+  175,

+  205,

+  152,

+  58,

+  34,

+  66,

+  43,

+  172,

+  153,

+  125,

+  24,

+  32,

+  145,

+  101,

+  229,

+  147,

+  99,

+  249,

+  26,

+  240,

+  114,

+  176,

+  216,

+  250,

+  52,

+  108,

+  110,

+  158,

+  90,

+  41,

+  214,

+  249,

+  219,

+  11,

+  21,

+  120,

+  138,

+  74,

+  8,

+  95,

+  143,

+  94,

+  163,

+  42,

+  224,

+  247,

+  22,

+  19,

+  12,

+  183,

+  211,

+  193,

+  254,

+  240,

+  9,

+  8,

+  89,

+  242,

+  11,

+  151,

+  28,

+  11,

+  234,

+  94,

+  80,

+  192,

+  78,

+  97,

+  58,

+  145,

+  120,

+  47,

+  148,

+  45,

+  169,

+  210,

+  191,

+  231,

+  182,

+  117,

+  6,

+  82,

+  62,

+  130,

+  185,

+  172,

+  140,

+  228,

+  32,

+  40,

+  158,

+  241,

+  43,

+  70,

+  249,

+  167,

+  69,

+  129,

+  31,

+  22,

+  180,

+  63,

+  21,

+  164,

+  207,

+  61,

+  216,

+  96,

+  78,

+  72,

+  127,

+  70,

+  104,

+  8,

+  186,

+  15,

+  122,

+  151,

+  143,

+  59,

+  208,

+  249,

+  81,

+  56,

+  243,

+  35,

+  214,

+  163,

+  36,

+  222,

+  97,

+  163,

+  136,

+  163,

+  88,

+  184,

+  118,

+  159,

+  248,

+  221,

+  51,

+  179,

+  92,

+  104,

+  131,

+  109,

+  238,

+  232,

+  30,

+  253,

+  215,

+  238,

+  252,

+  99,

+  133,

+  188,

+  46,

+  38,

+  212,

+  16,

+  43,

+  210,

+  196,

+  115,

+  206,

+  19,

+  210,

+  237,

+  111,

+  223,

+  45,

+  126,

+  68,

+  183,

+  37,

+  140,

+  215,

+  25,

+  101,

+  75,

+  124,

+  154,

+  145,

+  77,

+  149,

+  250,

+  228,

+  248,

+  247,

+  135,

+  208,

+  106,

+  200,

+  109,

+  110,

+  187,

+  40,

+  13,

+  0,

+  170,

+  35,

+  253,

+  32,

+  119,

+  138,

+  73,

+  21,

+  75,

+  137,

+  46,

+  150,

+  100,

+  248,

+  195,

+  237,

+  165,

+  75,

+  123,

+  42,

+  64,

+  52,

+  63,

+  45,

+  244,

+  166,

+  16,

+  199,

+  162,

+  249,

+  155,

+  6,

+  183,

+  127,

+  122,

+  46,

+  104,

+  245,

+  222,

+  166,

+  42,

+  206,

+  47,

+  150,

+  252,

+  121,

+  19,

+  185,

+  194,

+  139,

+  152,

+  97,

+  161,

+  126,

+  39,

+  63,

+  236,

+  173,

+  106,

+  34,

+  244,

+  136,

+  161,

+  90,

+  180,

+  178,

+  125,

+  210,

+  107,

+  34,

+  149,

+  213,

+  22,

+  9,

+  30,

+  163,

+  214,

+  5,

+  105,

+  136,

+  34,

+  40,

+  30,

+  129,

+  28,

+  240,

+  93,

+  98,

+  66,

+  150,

+  4,

+  75,

+  102,

+  102,

+  190,

+  237,

+  133,

+  141,

+  75,

+  113,

+  54,

+  16,

+  164,

+  111,

+  89,

+  126,

+  30,

+  191,

+  76,

+  40,

+  79,

+  165,

+  209,

+  201,

+  22,

+  71,

+  50,

+  250,

+  124,

+  22,

+  94,

+  109,

+  19,

+  77,

+  183,

+  180,

+  222,

+  146,

+  73,

+  67,

+  36,

+  233,

+  44,

+  118,

+  16,

+  23,

+  147,

+  226,

+  135,

+  95,

+  24,

+  250,

+  249,

+  31,

+  83,

+  43,

+  128,

+  10,

+  113,

+  94,

+  41,

+  238,

+  252,

+  86,

+  75,

+  141,

+  102,

+  206,

+  5,

+  67,

+  240,

+  2,

+  170,

+  183,

+  19,

+  53,

+  7,

+  190,

+  166,

+  237,

+  28,

+  71,

+  211,

+  116,

+  221,

+  25,

+  181,

+  98,

+  153,

+  253,

+  89,

+  84,

+  40,

+  118,

+  136,

+  65,

+  125,

+  89,

+  89,

+  68,

+  236,

+  179,

+  139,

+  46,

+  211,

+  255,

+  142,

+  42,

+  248,

+  57,

+  147,

+  209,

+  175,

+  110,

+  86,

+  75,

+  100,

+  56,

+  115,

+  69,

+  41,

+  222,

+  237,

+  43,

+  66,

+  181,

+  30,

+  97,

+  80,

+  205,

+  99,

+  226,

+  24,

+  158,

+  21,

+  86,

+  105,

+  238,

+  0,

+  22,

+  149,

+  209,

+  146,

+  134,

+  40,

+  143,

+  151,

+  117,

+  161,

+  108,

+  43,

+  73,

+  209,

+  4,

+  240,

+  58,

+  122,

+  209,

+  165,

+  62,

+  107,

+  184,

+  138,

+  226,

+  187,

+  166,

+  35,

+  190,

+  54,

+  192,

+  72,

+  82,

+  10,

+  91,

+  24,

+  174,

+  109,

+  126,

+  71,

+  47,

+  59,

+  29,

+  137,

+  181,

+  134,

+  254,

+  161,

+  78,

+  191,

+  86,

+  3,

+  214,

+  40,

+  100,

+  219,

+  214,

+  172,

+  120,

+  220,

+  170,

+  24,

+  104,

+  254,

+  97,

+  232,

+  29,

+  121,

+  19,

+  6,

+  241,

+  207,

+  55,

+  228,

+  44,

+  156,

+  182,

+  220,

+  14,

+  73,

+  0,

+  83,

+  101,

+  141,

+  170,

+  151,

+  129,

+  88,

+  243,

+  109,

+  245,

+  6,

+  237,

+  174,

+  18,

+  39,

+  170,

+  75,

+  116,

+  166,

+  72,

+  65,

+  165,

+  32,

+  55,

+  127,

+  136,

+  246,

+  11,

+  237,

+  155,

+  57,

+  23,

+  211,

+  202,

+  17,

+  164,

+  186,

+  252,

+  252,

+  88,

+  80,

+  198,

+  23,

+  141,

+  128,

+  57,

+  161,

+  238,

+  186,

+  91,

+  87,

+  152,

+  47,

+  190,

+  35,

+  73,

+  122,

+  159,

+  181,

+  247,

+  126,

+  207,

+  15,

+  90,

+  13,

+  253,

+  36,

+  161,

+  204,

+  164,

+  248,

+  138,

+  189,

+  129,

+  120,

+  55,

+  226,

+  250,

+  222,

+  201,

+  160,

+  193,

+  143,

+  2,

+  198,

+  173,

+  234,

+  159,

+  72,

+  131,

+  190,

+  123,

+  128,

+  200,

+  208,

+  215,

+  115,

+  197,

+  180,

+  0,

+  191,

+  143,

+  153,

+  2,

+  172,

+  152,

+  19,

+  9,

+  67,

+  124,

+  37,

+  217,

+  212,

+  207,

+  174,

+  26,

+  26,

+  97,

+  154,

+  33,

+  222,

+  50,

+  48,

+  129,

+  184,

+  2,

+  236,

+  128,

+  196,

+  16,

+  141,

+  175,

+  191,

+  86,

+  223,

+  211,

+  135,

+  195,

+  157,

+  214,

+  155,

+  194,

+  147,

+  182,

+  82,

+  103,

+  77,

+  108,

+  11,

+  96,

+  50,

+  115,

+  213,

+  117,

+  28,

+  119,

+  236,

+  23,

+  150,

+  181,

+  95,

+  18,

+  242,

+  20,

+  208,

+  54,

+  110,

+  71,

+  68,

+  145,

+  224,

+  249,

+  56,

+  126,

+  6,

+  47,

+  6,

+  191,

+  157,

+  170,

+  164,

+  128,

+  97,

+  5,

+  35,

+  63,

+  228,

+  10,

+  124,

+  80,

+  118,

+  171,

+  160,

+  192,

+  103,

+  32,

+  118,

+  155,

+  113,

+  136,

+  56,

+  225,

+  171,

+  144,

+  33,

+  34,

+  227,

+  61,

+  208,

+  155,

+  82,

+  56,

+  226,

+  118,

+  5,

+  169,

+  234,

+  175,

+  162,

+  161,

+  47,

+  226,

+  193,

+  104,

+  144,

+  130,

+  189,

+  154,

+  159,

+  156,

+  102,

+  73,

+  103,

+  59,

+  205,

+  125,

+  58,

+  183,

+  214,

+  231,

+  31,

+  229,

+  79,

+  164,

+  216,

+  241,

+  111,

+  249,

+  202,

+  252,

+  34,

+  230,

+  249,

+  52,

+  87,

+  21,

+  183,

+  132,

+  190,

+  230,

+  86,

+  0,

+  101,

+  224,

+  58,

+  98,

+  227,

+  73,

+  66,

+  50,

+  210,

+  117,

+  184,

+  29,

+  197,

+  230,

+  249,

+  240,

+  161,

+  194,

+  203,

+  181,

+  2,

+  165,

+  111,

+  74,

+  199,

+  231,

+  53,

+  207,

+  120,

+  60,

+  107,

+  245,

+  38,

+  36,

+  232,

+  71,

+  7,

+  11,

+  20,

+  252,

+  183,

+  176,

+  148,

+  241,

+  158,

+  127,

+  33,

+  26,

+  233,

+  217,

+  18,

+  255,

+  65,

+  71,

+  135,

+  44,

+  121,

+  39,

+  248,

+  129,

+  67,

+  73,

+  63,

+  100,

+  142,

+  29,

+  227,

+  223,

+  179,

+  221,

+  221,

+  146,

+  41,

+  162,

+  248,

+  35,

+  60,

+  3,

+  225,

+  12,

+  188,

+  111,

+  33,

+  184,

+  120,

+  24,

+  216,

+  40,

+  3,

+  190,

+  203,

+  196,

+  54,

+  22,

+  154,

+  202,

+  107,

+  229,

+  101,

+  83,

+  189,

+  75,

+  117,

+  73,

+  121,

+  251,

+  189,

+  101,

+  66,

+  35,

+  219,

+  220,

+  247,

+  72,

+  65,

+  54,

+  211,

+  80,

+  52,

+  216,

+  52,

+  45,

+  218,

+  13,

+  159,

+  165,

+  16,

+  1,

+  157,

+  24,

+  95,

+  73,

+  96,

+  38,

+  140,

+  81,

+  82,

+  189,

+  188,

+  36,

+  235,

+  215,

+  152,

+  184,

+  55,

+  57,

+  173,

+  121,

+  179,

+  74,

+  26,

+  244,

+  248,

+  218,

+  177,

+  247,

+  136,

+  4,

+  221,

+  128,

+  229,

+  62,

+  179,

+  194,

+  141,

+  131,

+  20,

+  177,

+  216,

+  129,

+  42,

+  168,

+  69,

+  161,

+  30,

+  25,

+  189,

+  137,

+  225,

+  5,

+  215,

+  241,

+  169,

+  101,

+  147,

+  144,

+  36,

+  245,

+  100,

+  91,

+  211,

+  248,

+  122,

+  58,

+  181,

+  200,

+  82,

+  197,

+  116,

+  111,

+  147,

+  255,

+  241,

+  250,

+  124,

+  193,

+  223,

+  50,

+  146,

+  141,

+  32,

+  92,

+  135,

+  20,

+  239,

+  150,

+  6,

+  133,

+  151,

+  238,

+  134,

+  174,

+  13,

+  20,

+  248,

+  54,

+  12,

+  175,

+  179,

+  193,

+  13,

+  62,

+  193,

+  77,

+  178,

+  38,

+  14,

+  193,

+  158,

+  133,

+  74,

+  174,

+  73,

+  254,

+  247,

+  39,

+  158,

+  151,

+  64,

+  230,

+  173,

+  85,

+  70,

+  228,

+  11,

+  55,

+  155,

+  118,

+  245,

+  222,

+  30,

+  173,

+  225,

+  90,

+  0,

+  116,

+  28,

+  15,

+  95,

+  27,

+  203,

+  56,

+  199,

+  47,

+  109,

+  249,

+  196,

+  126,

+  108,

+  154,

+  233,

+  53,

+  130,

+  180,

+  223,

+  25,

+  66,

+  188,

+  127,

+  246,

+  54,

+  211,

+  54,

+  27,

+  80,

+  134,

+  88,

+  155,

+  211,

+  139,

+  16,

+  167,

+  239,

+  52,

+  50,

+  114,

+  55,

+  215,

+  170,

+  119,

+  115,

+  185,

+  253,

+  163,

+  8,

+  162,

+  99,

+  126,

+  251,

+  250,

+  120,

+  87,

+  48,

+  77,

+  183,

+  63,

+  153,

+  196,

+  42,

+  12,

+  231,

+  124,

+  129,

+  37,

+  81,

+  44,

+  71,

+  203,

+  13,

+  253,

+  109,

+  124,

+  242,

+  60,

+  53,

+  241,

+  147,

+  207,

+  237,

+  183,

+  89,

+  247,

+  129,

+  144,

+  147,

+  200,

+  81,

+  188,

+  84,

+  242,

+  163,

+  79,

+  157,

+  207,

+  26,

+  190,

+  68,

+  172,

+  36,

+  240,

+  42,

+  227,

+  31,

+  12,

+  96,

+  86,

+  63,

+  118,

+  204,

+  21,

+  227,

+  161,

+  231,

+  197,

+  214,

+  215,

+  228,

+  188,

+  88,

+  156,

+  89,

+  49,

+  49,

+  210,

+  148,

+  223,

+  37,

+  213,

+  94,

+  14,

+  233,

+  132,

+  56,

+  254,

+  183,

+  170,

+  46,

+  226,

+  59,

+  66,

+  222,

+  144,

+  215,

+  196,

+  5,

+  210,

+  154,

+  241,

+  136,

+  151,

+  203,

+  154,

+  165,

+  69,

+  159,

+  5,

+  153,

+  195,

+  181,

+  40,

+  250,

+  186,

+  248,

+  58,

+  252,

+  121,

+  127,

+  55,

+  197,

+  55,

+  2,

+  153,

+  27,

+  173,

+  24,

+  51,

+  176,

+  209,

+  82,

+  153,

+  127,

+  66,

+  20,

+  125,

+  132,

+  134,

+  217,

+  174,

+  24,

+  157,

+  41,

+  175,

+  31,

+  48,

+  213,

+  88,

+  246,

+  241,

+  231,

+  142,

+  47,

+  196,

+  76,

+  162,

+  123,

+  233,

+  91,

+  127,

+  57,

+  96,

+  210,

+  126,

+  63,

+  211,

+  34,

+  70,

+  167,

+  150,

+  218,

+  167,

+  121,

+  146,

+  63,

+  69,

+  13,

+  177,

+  98,

+  168,

+  145,

+  179,

+  195,

+  237,

+  74,

+  229,

+  71,

+  178,

+  196,

+  57,

+  182,

+  223,

+  41,

+  16,

+  103,

+  203,

+  87,

+  29,

+  120,

+  151,

+  194,

+  79,

+  231,

+  188,

+  72,

+  176,

+  204,

+  13,

+  57,

+  199,

+  29,

+  134,

+  124,

+  165,

+  126,

+  148,

+  119,

+  100,

+  177,

+  225,

+  4,

+  232,

+  90,

+  18,

+  208,

+  83,

+  17,

+  94,

+  239,

+  111,

+  84,

+  190,

+  123,

+  6,

+  171,

+  179,

+  82,

+  239,

+  252,

+  169,

+  102,

+  176,

+  115,

+  36,

+  84,

+  174,

+  1,

+  242,

+  198,

+  90,

+  228,

+  97,

+  55,

+  70,

+  20,

+  3,

+  144,

+  172,

+  88,

+  165,

+  64,

+  183,

+  172,

+  78,

+  246,

+  214,

+  117,

+  169,

+  247,

+  253,

+  207,

+  36,

+  41,

+  219,

+  185,

+  155,

+  94,

+  121,

+  179,

+  101,

+  213,

+  24,

+  203,

+  176,

+  178,

+  113,

+  155,

+  7,

+  127,

+  251,

+  160,

+  224,

+  49,

+  30,

+  25,

+  204,

+  65,

+  56,

+  71,

+  17,

+  116,

+  246,

+  93,

+  35,

+  214,

+  21,

+  14,

+  86,

+  170,

+  243,

+  200,

+  217,

+  89,

+  223,

+  43,

+  162,

+  225,

+  39,

+  17,

+  240,

+  7,

+  168,

+  185,

+  30,

+  212,

+  199,

+  58,

+  11,

+  164,

+  30,

+  145,

+  116,

+  64,

+  248,

+  246,

+  15,

+  44,

+  35,

+  193,

+  252,

+  64,

+  144,

+  196,

+  53,

+  33,

+  16,

+  42,

+  78,

+  27,

+  243,

+  170,

+  159,

+  182,

+  77,

+  233,

+  177,

+  89,

+  253,

+  252,

+  195,

+  185,

+  143,

+  6,

+  17,

+  82,

+  36,

+  203,

+  198,

+  121,

+  227,

+  60,

+  192,

+  50,

+  168,

+  158,

+  114,

+  113,

+  89,

+  204,

+  41,

+  164,

+  78,

+  238,

+  113,

+  224,

+  118,

+  67,

+  15,

+  165,

+  230,

+  22,

+  40,

+  188,

+  146,

+  161,

+  0,

+  34,

+  56,

+  218,

+  4,

+  224,

+  169,

+  8,

+  180,

+  83,

+  246,

+  121,

+  155,

+  30,

+  238,

+  105,

+  237,

+  100,

+  154,

+  243,

+  114,

+  191,

+  157,

+  59,

+  101,

+  81,

+  104,

+  52,

+  80,

+  186,

+  148,

+  152,

+  43,

+  87,

+  193,

+  88,

+  100,

+  58,

+  84,

+  212,

+  82,

+  135,

+  228,

+  38,

+  154,

+  167,

+  10,

+  18,

+  101,

+  134,

+  103,

+  254,

+  106,

+  45,

+  202,

+  111,

+  72,

+  14,

+  208,

+  14,

+  245,

+  27,

+  247,

+  48,

+  199,

+  161,

+  134,

+  131,

+  179,

+  127,

+  196,

+  88,

+  18,

+  23,

+  114,

+  203,

+  73,

+  249,

+  46,

+  53,

+  127,

+  239,

+  109,

+  232,

+  36,

+  4,

+  44,

+  91,

+  138,

+  13,

+  223,

+  85,

+  122,

+  128,

+  204,

+  158,

+  93,

+  167,

+  83,

+  63,

+  0,

+  89,

+  156,

+  95,

+  136,

+  61,

+  222,

+  2,

+  100,

+  246,

+  71,

+  5,

+  127,

+  37,

+  164,

+  77,

+  183,

+  196,

+  30,

+  15,

+  223,

+  225,

+  204,

+  75,

+  18,

+  144,

+  181,

+  93,

+  204,

+  130,

+  143,

+  124,

+  132,

+  111,

+  48,

+  63,

+  173,

+  138,

+  231,

+  205,

+  231,

+  11,

+  62,

+  88,

+  9,

+  209,

+  134,

+  131,

+  242,

+  152,

+  230,

+  68,

+  80,

+  120,

+  107,

+  196,

+  26,

+  176,

+  82,

+  1,

+  240,

+  179,

+  85,

+  66,

+  127,

+  94,

+  148,

+  174,

+  15,

+  64,

+  127,

+  173,

+  186,

+  71,

+  22,

+  194,

+  94,

+  129,

+  167,

+  114,

+  61,

+  198,

+  199,

+  190,

+  220,

+  215,

+  135,

+  57,

+  83,

+  225,

+  95,

+  6,

+  213,

+  2,

+  47,

+  146,

+  192,

+  15,

+  127,

+  152,

+  66,

+  38,

+  228,

+  22,

+  42,

+  199,

+  19,

+  148,

+  111,

+  158,

+  249,

+  182,

+  201,

+  41,

+  208,

+  145,

+  13,

+  249,

+  57,

+  133,

+  83,

+  29,

+  139,

+  12,

+  88,

+  11,

+  109,

+  253,

+  8,

+  174,

+  0,

+  168,

+  196,

+  88,

+  21,

+  82,

+  147,

+  202,

+  36,

+  21,

+  199,

+  236,

+  201,

+  138,

+  208,

+  82,

+  12,

+  199,

+  155,

+  192,

+  239,

+  108,

+  48,

+  51,

+  133,

+  47,

+  233,

+  50,

+  95,

+  179,

+  11,

+  63,

+  117,

+  180,

+  31,

+  114,

+  193,

+  5,

+  78,

+  242,

+  85,

+  37,

+  68,

+  130,

+  235,

+  142,

+  100,

+  34,

+  40,

+  84,

+  228,

+  89,

+  164,

+  207,

+  178,

+  12,

+  42,

+  75,

+  217,

+  10,

+  145,

+  118,

+  163,

+  190,

+  207,

+  169,

+  66,

+  126,

+  112,

+  80,

+  132,

+  204,

+  41,

+  157,

+  217,

+  217,

+  211,

+  240,

+  194,

+  223,

+  15,

+  181,

+  179,

+  192,

+  174,

+  41,

+  225,

+  132,

+  138,

+  160,

+  30,

+  133,

+  183,

+  110,

+  112,

+  240,

+  56,

+  209,

+  222,

+  244,

+  206,

+  67,

+  67,

+  38,

+  181,

+  219,

+  43,

+  247,

+  121,

+  225,

+  123,

+  199,

+  136,

+  49,

+  61,

+  150,

+  188,

+  178,

+  8,

+  29,

+  50,

+  194,

+  105,

+  244,

+  122,

+  95,

+  173,

+  33,

+  204,

+  162,

+  69,

+  158,

+  18,

+  57,

+  253,

+  46,

+  66,

+  22,

+  206,

+  62,

+  73,

+  164,

+  32,

+  101,

+  23,

+  237,

+  230,

+  128,

+  23,

+  156,

+  45,

+  18,

+  38,

+  64,

+  238,

+  79,

+  217,

+  23,

+  101,

+  240,

+  36,

+  147,

+  205,

+  237,

+  143,

+  101,

+  93,

+  173,

+  240,

+  138,

+  152,

+  114,

+  29,

+  214,

+  165,

+  253,

+  155,

+  29,

+  166,

+  36,

+  247,

+  108,

+  60,

+  168,

+  56,

+  111,

+  88,

+  139,

+  224,

+  126,

+  120,

+  223,

+  209,

+  245,

+  144,

+  247,

+  190,

+  177,

+  105,

+  149,

+  112,

+  102,

+  55,

+  254,

+  201,

+  87,

+  69,

+  80,

+  254,

+  27,

+  145,

+  84,

+  214,

+  179,

+  63,

+  171,

+  93,

+  178,

+  144,

+  40,

+  230,

+  254,

+  62,

+  204,

+  252,

+  97,

+  2,

+  38,

+  186,

+  71,

+  254,

+  169,

+  85,

+  154,

+  183,

+  249,

+  7,

+  221,

+  189,

+  112,

+  54,

+  110,

+  145,

+  89,

+  70,

+  185,

+  81,

+  158,

+  110,

+  115,

+  255,

+  183,

+  251,

+  198,

+  163,

+  9,

+  255,

+  80,

+  61,

+  31,

+  119,

+  94,

+  218,

+  255,

+  33,

+  230,

+  98,

+  52,

+  21,

+  136,

+  190,

+  22,

+  69,

+  227,

+  95,

+  178,

+  98,

+  39,

+  212,

+  159,

+  110,

+  33,

+  72,

+  155,

+  141,

+  91,

+  227,

+  83,

+  192,

+  207,

+  3,

+  155,

+  29,

+  95,

+  72,

+  82,

+  121,

+  57,

+  240,

+  225,

+  166,

+  176,

+  220,

+  149,

+  200,

+  93,

+  124,

+  184,

+  121,

+  52,

+  30,

+  8,

+  71,

+  39,

+  94,

+  50,

+  239,

+  217,

+  136,

+  19,

+  132,

+  28,

+  63,

+  215,

+  124,

+  227,

+  196,

+  100,

+  230,

+  70,

+  158,

+  148,

+  151,

+  198,

+  7,

+  117,

+  84,

+  115,

+  230,

+  214,

+  27,

+  120,

+  218,

+  229,

+  176,

+  101,

+  181,

+  162,

+  242,

+  160,

+  150,

+  69,

+  222,

+  0,

+  128,

+  2,

+  238,

+  80,

+  180,

+  232,

+  163,

+  135,

+  87,

+  251,

+  134,

+  187,

+  14,

+  154,

+  64,

+  170,

+  235,

+  63,

+  123,

+  104,

+  24,

+  252,

+  141,

+  91,

+  157,

+  205,

+  72,

+  7,

+  26,

+  17,

+  73,

+  66,

+  203,

+  90,

+  125,

+  121,

+  250,

+  17,

+  35,

+  119,

+  54,

+  220,

+  179,

+  246,

+  118,

+  22,

+  222,

+  39,

+  20,

+  244,

+  54,

+  115,

+  100,

+  75,

+  98,

+  89,

+  249,

+  230,

+  85,

+  21,

+  25,

+  57,

+  150,

+  180,

+  69,

+  222,

+  109,

+  16,

+  103,

+  107,

+  104,

+  204,

+  249,

+  42,

+  238,

+  248,

+  79,

+  78,

+  76,

+  150,

+  65,

+  134,

+  126,

+  66,

+  136,

+  48,

+  223,

+  92,

+  241,

+  191,

+  67,

+  198,

+  217,

+  22,

+  12,

+  252,

+  8,

+  50,

+  114,

+  99,

+  184,

+  176,

+  30,

+  180,

+  240,

+  16,

+  20,

+  21,

+  173,

+  63,

+  66,

+  13,

+  49,

+  51,

+  3,

+  208,

+  185,

+  36,

+  0,

+  124,

+  197,

+  157,

+  46,

+  254,

+  132,

+  40,

+  119,

+  211,

+  69,

+  123,

+  123,

+  231,

+  109,

+  170,

+  91,

+  198,

+  213,

+  117,

+  78,

+  255,

+  144,

+  87,

+  2,

+  234,

+  37,

+  245,

+  186,

+  161,

+  44,

+  123,

+  5,

+  33,

+  37,

+  140,

+  92,

+  109,

+  236,

+  203,

+  149,

+  181,

+  25,

+  42,

+  67,

+  45,

+  50,

+  175,

+  189,

+  52,

+  94,

+  219,

+  108,

+  226,

+  142,

+  75,

+  209,

+  251,

+  254,

+  124,

+  74,

+  201,

+  143,

+  226,

+  38,

+  82,

+  161,

+  47,

+  33,

+  88,

+  255,

+  24,

+  97,

+  89,

+  218,

+  30,

+  35,

+  19,

+  105,

+  232,

+  103,

+  177,

+  148,

+  136,

+  92,

+  182,

+  107,

+  93,

+  151,

+  176,

+  215,

+  89,

+  187,

+  207,

+  192,

+  186,

+  159,

+  210,

+  61,

+  52,

+  193,

+  134,

+  190,

+  3,

+  130,

+  72,

+  190,

+  222,

+  73,

+  70,

+  128,

+  199,

+  157,

+  62,

+  222,

+  49,

+  213,

+  70,

+  180,

+  225,

+  93,

+  11,

+  95,

+  10,

+  209,

+  164,

+  142,

+  154,

+  176,

+  216,

+  222,

+  125,

+  161,

+  43,

+  124,

+  183,

+  200,

+  140,

+  143,

+  86,

+  216,

+  122,

+  41,

+  178,

+  153,

+  251,

+  199,

+  219,

+  251,

+  243,

+  18,

+  57,

+  14,

+  183,

+  216,

+  201,

+  196,

+  75,

+  74,

+  241,

+  205,

+  133,

+  102,

+  73,

+  214,

+  224,

+  12,

+  246,

+  96,

+  126,

+  117,

+  186,

+  92,

+  103,

+  50,

+  173,

+  222,

+  156,

+  107,

+  242,

+  79,

+  233,

+  247,

+  39,

+  219,

+  61,

+  193,

+  125,

+  164,

+  62,

+  166,

+  100,

+  16,

+  246,

+  192,

+  36,

+  198,

+  38,

+  63,

+  19,

+  125,

+  243,

+  44,

+  254,

+  23,

+  21,

+  0,

+  222,

+  98,

+  34,

+  52,

+  28,

+  240,

+  106,

+  246,

+  202,

+  214,

+  38,

+  100,

+  227,

+  243,

+  86,

+  200,

+  50,

+  41,

+  146,

+  242,

+  132,

+  12,

+  100,

+  30,

+  244,

+  87,

+  13,

+  53,

+  148,

+  91,

+  38,

+  6,

+  40,

+  148,

+  113,

+  185,

+  215,

+  215,

+  5,

+  166,

+  238,

+  9,

+  193,

+  224,

+  182,

+  159,

+  168,

+  104,

+  36,

+  124,

+  76,

+  162,

+  187,

+  140,

+  125,

+  9,

+  255,

+  248,

+  127,

+  199,

+  16,

+  239,

+  101,

+  196,

+  124,

+  151,

+  111,

+  180,

+  115,

+  126,

+  206,

+  158,

+  127,

+  37,

+  130,

+  32,

+  117,

+  242,

+  172,

+  145,

+  185,

+  211,

+  208,

+  227,

+  80,

+  175,

+  234,

+  35,

+  186,

+  30,

+  16,

+  216,

+  204,

+  31,

+  60,

+  183,

+  62,

+  53,

+  247,

+  247,

+  17,

+  187,

+  127,

+  188,

+  79,

+  13,

+  220,

+  239,

+  189,

+  155,

+  52,

+  88,

+  194,

+  39,

+  232,

+  31,

+  209,

+  25,

+  104,

+  90,

+  23,

+  193,

+  150,

+  119,

+  157,

+  251,

+  171,

+  64,

+  10,

+  137,

+  154,

+  207,

+  215,

+  101,

+  183,

+  84,

+  248,

+  146,

+  73,

+  202,

+  51,

+  50,

+  205,

+  185,

+  237,

+  92,

+  133,

+  5,

+  232,

+  159,

+  19,

+  115,

+  228,

+  79,

+  249,

+  139,

+  243,

+  165,

+  177,

+  186,

+  160,

+  163,

+  111,

+  150,

+  206,

+  140,

+  122,

+  215,

+  229,

+  110,

+  200,

+  110,

+  124,

+  61,

+  106,

+  246,

+  108,

+  23,

+  145,

+  244,

+  103,

+  216,

+  127,

+  135,

+  68,

+  51,

+  78,

+  154,

+  150,

+  224,

+  121,

+  137,

+  182,

+  223,

+  128,

+  233,

+  94,

+  252,

+  87,

+  42,

+  1,

+  229,

+  109,

+  91,

+  223,

+  163,

+  201,

+  134,

+  52,

+  69,

+  3,

+  219,

+  191,

+  237,

+  55,

+  222,

+  16,

+  126,

+  137,

+  27,

+  132,

+  48,

+  164,

+  108,

+  115,

+  11,

+  35,

+  101,

+  29,

+  6,

+  3,

+  80,

+  16,

+  24,

+  188,

+  235,

+  130,

+  3,

+  199,

+  101,

+  153,

+  195,

+  88,

+  32,

+  142,

+  163,

+  23,

+  89,

+  20,

+  44,

+  178,

+  62,

+  44,

+  206,

+  17,

+  152,

+  1,

+  136,

+  79,

+  79,

+  60,

+  71,

+  31,

+  221,

+  119,

+  155,

+  123,

+  217,

+  183,

+  117,

+  204,

+  129,

+  190,

+  13,

+  108,

+  21,

+  109,

+  182,

+  189,

+  45,

+  128,

+  149,

+  230,

+  139,

+  227,

+  43,

+  113,

+  83,

+  242,

+  186,

+  62,

+  15,

+  14,

+  149,

+  73,

+  24,

+  192,

+  110,

+  225,

+  118,

+  183,

+  116,

+  68,

+  217,

+  44,

+  2,

+  28,

+  52,

+  57,

+  24,

+  217,

+  100,

+  32,

+  200,

+  219,

+  127,

+  79,

+  64,

+  34,

+  148,

+  216,

+  162,

+  201,

+  152,

+  109,

+  129,

+  32,

+  197,

+  106,

+  104,

+  196,

+  30,

+  96,

+  21,

+  65,

+  146,

+  161,

+  237,

+  18,

+  79,

+  98,

+  110,

+  157,

+  234,

+  96,

+  197,

+  98,

+  126,

+  213,

+  74,

+  221,

+  56,

+  13,

+  95,

+  132,

+  187,

+  201,

+  208,

+  194,

+  175,

+  163,

+  255,

+  225,

+  198,

+  87,

+  160,

+  217,

+  147,

+  160,

+  53,

+  190,

+  83,

+  189,

+  10,

+  205,

+  8,

+  61,

+  9,

+  69,

+  16,

+  182,

+  152,

+  97,

+  165,

+  82,

+  203,

+  103,

+  212,

+  14,

+  92,

+  76,

+  148,

+  130,

+  176,

+  37,

+  21,

+  37,

+  36,

+  93,

+  91,

+  26,

+  236,

+  148,

+  15,

+  3,

+  208,

+  96,

+  115,

+  127,

+  241,

+  136,

+  161,

+  87,

+  115,

+  71,

+  238,

+  242,

+  150,

+  140,

+  184,

+  167,

+  48,

+  81,

+  155,

+  170,

+  206,

+  240,

+  167,

+  171,

+  108,

+  89,

+  215,

+  232,

+  243,

+  40,

+  252,

+  179,

+  142,

+  253,

+  178,

+  189,

+  234,

+  228,

+  0,

+  13,

+  123,

+  115,

+  188,

+  118,

+  94,

+  45,

+  42,

+  13,

+  41,

+  99,

+  180,

+  43,

+  195,

+  147,

+  167,

+  68,

+  36,

+  213,

+  36,

+  235,

+  195,

+  245,

+  160,

+  48,

+  140,

+  254,

+  96,

+  182,

+  151,

+  254,

+  27,

+  3,

+  68,

+  82,

+  2,

+  246,

+  60,

+  95,

+  110,

+  57,

+  132,

+  248,

+  236,

+  34,

+  155,

+  231,

+  121,

+  178,

+  126,

+  94,

+  248,

+  23,

+  137,

+  126,

+  189,

+  31,

+  146,

+  145,

+  125,

+  203,

+  235,

+  19,

+  181,

+  78,

+  141,

+  215,

+  27,

+  216,

+  255,

+  96,

+  16,

+  151,

+  220,

+  251,

+  48,

+  140,

+  110,

+  48,

+  132,

+  216,

+  49,

+  57,

+  152,

+  237,

+  164,

+  77,

+  99,

+  139,

+  38,

+  198,

+  84,

+  86,

+  244,

+  10,

+  184,

+  111,

+  20,

+  13,

+  239,

+  24,

+  194,

+  18,

+  237,

+  19,

+  61,

+  216,

+  182,

+  33,

+  202,

+  20,

+  248,

+  149,

+  146,

+  238,

+  59,

+  23,

+  9,

+  142,

+  199,

+  154,

+  229,

+  200,

+  18,

+  64,

+  160,

+  198,

+  94,

+  42,

+  190,

+  175,

+  145,

+  107,

+  91,

+  31,

+  30,

+  152,

+  169,

+  192,

+  102,

+  215,

+  219,

+  173,

+  237,

+  215,

+  122,

+  18,

+  240,

+  121,

+  117,

+  231,

+  35,

+  129,

+  255,

+  171,

+  93,

+  2,

+  102,

+  151,

+  231,

+  230,

+  238,

+  9,

+  137,

+  198,

+  231,

+  146,

+  117,

+  85,

+  81,

+  224,

+  253,

+  57,

+  113,

+  97,

+  69,

+  147,

+  76,

+  193,

+  93,

+  178,

+  223,

+  251,

+  4,

+  203,

+  157,

+  41,

+  199,

+  38,

+  254,

+  161,

+  107,

+  191,

+  251,

+  91,

+  228,

+  199,

+  66,

+  182,

+  194,

+  18,

+  139,

+  127,

+  101,

+  1,

+  232,

+  167,

+  12,

+  62,

+  144,

+  115,

+  32,

+  146,

+  8,

+  252,

+  141,

+  239,

+  161,

+  43,

+  196,

+  77,

+  117,

+  97,

+  106,

+  33,

+  2,

+  117,

+  19,

+  16,

+  145,

+  84,

+  39,

+  140,

+  237,

+  240,

+  221,

+  50,

+  167,

+  211,

+  198,

+  79,

+  5,

+  208,

+  171,

+  36,

+  54,

+  49,

+  249,

+  5,

+  91,

+  76,

+  188,

+  222,

+  94,

+  156,

+  217,

+  81,

+  222,

+  27,

+  1,

+  169,

+  182,

+  124,

+  54,

+  44,

+  41,

+  118,

+  71,

+  115,

+  210,

+  148,

+  111,

+  242,

+  245,

+  223,

+  180,

+  118,

+  59,

+  99,

+  78,

+  243,

+  216,

+  167,

+  33,

+  43,

+  28,

+  249,

+  142,

+  209,

+  178,

+  74,

+  164,

+  67,

+  210,

+  87,

+  120,

+  157,

+  105,

+  108,

+  220,

+  87,

+  193,

+  221,

+  66,

+  184,

+  183,

+  32,

+  105,

+  17,

+  79,

+  69,

+  212,

+  16,

+  11,

+  147,

+  213,

+  251,

+  236,

+  245,

+  14,

+  1,

+  108,

+  36,

+  37,

+  219,

+  130,

+  23,

+  66,

+  29,

+  171,

+  188,

+  113,

+  38,

+  146,

+  23,

+  27,

+  236,

+  142,

+  129,

+  14,

+  184,

+  252,

+  195,

+  215,

+  29,

+  125,

+  121,

+  30,

+  134,

+  89,

+  219,

+  48,

+  107,

+  129,

+  33,

+  167,

+  154,

+  175,

+  207,

+  78,

+  140,

+  245,

+  114,

+  97,

+  173,

+  27,

+  137,

+  139,

+  165,

+  20,

+  66,

+  184,

+  238,

+  194,

+  84,

+  211,

+  100,

+  232,

+  6,

+  195,

+  127,

+  150,

+  34,

+  152,

+  78,

+  164,

+  199,

+  186,

+  248,

+  170,

+  110,

+  58,

+  163,

+  169,

+  171,

+  83,

+  253,

+  69,

+  43,

+  53,

+  74,

+  156,

+  90,

+  100,

+  200,

+  181,

+  62,

+  2,

+  253,

+  162,

+  137,

+  210,

+  51,

+  32,

+  143,

+  137,

+  131,

+  63,

+  152,

+  191,

+  184,

+  199,

+  126,

+  189,

+  83,

+  253,

+  125,

+  92,

+  9,

+  9,

+  228,

+  213,

+  224,

+  249,

+  88,

+  132,

+  135,

+  51,

+  203,

+  168,

+  90,

+  171,

+  126,

+  29,

+  148,

+  43,

+  157,

+  145,

+  34,

+  241,

+  101,

+  150,

+  92,

+  189,

+  72,

+  67,

+  165,

+  166,

+  67,

+  33,

+  3,

+  139,

+  80,

+  72,

+  27,

+  165,

+  70,

+  129,

+  46,

+  212,

+  7,

+  66,

+  83,

+  185,

+  119,

+  150,

+  67,

+  61,

+  151,

+  113,

+  145,

+  134,

+  84,

+  13,

+  134,

+  81,

+  197,

+  84,

+  48,

+  99,

+  219,

+  180,

+  72,

+  107,

+  242,

+  236,

+  245,

+  112,

+  182,

+  23,

+  83,

+  46,

+  21,

+  58,

+  17,

+  224,

+  108,

+  139,

+  91,

+  17,

+  147,

+  130,

+  214,

+  37,

+  55,

+  200,

+  18,

+  188,

+  239,

+  36,

+  247,

+  134,

+  206,

+  2,

+  91,

+  231,

+  165,

+  179,

+  139,

+  200,

+  229,

+  171,

+  227,

+  222,

+  150,

+  189,

+  161,

+  138,

+  8,

+  112,

+  170,

+  213,

+  184,

+  107,

+  191,

+  101,

+  143,

+  95,

+  119,

+  21,

+  135,

+  32,

+  139,

+  165,

+  88,

+  153,

+  70,

+  39,

+  199,

+  82,

+  199,

+  214,

+  117,

+  54,

+  22,

+  179,

+  204,

+  231,

+  83,

+  190,

+  236,

+  81,

+  243,

+  193,

+  56,

+  79,

+  106,

+  153,

+  202,

+  118,

+  161,

+  168,

+  16,

+  83,

+  28,

+  2,

+  103,

+  0,

+  15,

+  207,

+  50,

+  13,

+  118,

+  92,

+  203,

+  167,

+  222,

+  81,

+  171,

+  184,

+  254,

+  130,

+  187,

+  17,

+  222,

+  78,

+  239,

+  126,

+  166,

+  163,

+  31,

+  111,

+  216,

+  215,

+  152,

+  92,

+  27,

+  4,

+  241,

+  190,

+  38,

+  60,

+  114,

+  175,

+  89,

+  243,

+  1,

+  131,

+  126,

+  243,

+  247,

+  155,

+  104,

+  96,

+  208,

+  47,

+  156,

+  172,

+  131,

+  135,

+  142,

+  58,

+  201,

+  168,

+  215,

+  243,

+  38,

+  33,

+  33,

+  158,

+  248,

+  232,

+  246,

+  145,

+  153,

+  241,

+  60,

+  203,

+  209,

+  19,

+  131,

+  192,

+  28,

+  156,

+  202,

+  232,

+  78,

+  191,

+  83,

+  147,

+  230,

+  160,

+  3,

+  255,

+  246,

+  222,

+  28,

+  55,

+  83,

+  224,

+  141,

+  25,

+  197,

+  226,

+  221,

+  58,

+  254,

+  102,

+  98,

+  66,

+  223,

+  125,

+  103,

+  226,

+  209,

+  173,

+  164,

+  92,

+  182,

+  208,

+  224,

+  198,

+  50,

+  1,

+  178,

+  241,

+  29,

+  48,

+  90,

+  97,

+  194,

+  133,

+  50,

+  68,

+  221,

+  40,

+  223,

+  138,

+  228,

+  226,

+  251,

+  48,

+  28,

+  204,

+  239,

+  174,

+  52,

+  222,

+  125,

+  218,

+  33,

+  14,

+  193,

+  78,

+  229,

+  37,

+  166,

+  56,

+  179,

+  243,

+  34,

+  101,

+  62,

+  78,

+  214,

+  52,

+  98,

+  167,

+  216,

+  16,

+  253,

+  116,

+  185,

+  65,

+  220,

+  28,

+  216,

+  159,

+  171,

+  94,

+  162,

+  115,

+  104,

+  22,

+  106,

+  213,

+  72,

+  94,

+  166,

+  168,

+  91,

+  9,

+  60,

+  93,

+  177,

+  165,

+  60,

+  36,

+  155,

+  97,

+  185,

+  41,

+  19,

+  16,

+  173,

+  163,

+  49,

+  29,

+  51,

+  29,

+  78,

+  174,

+  79,

+  200,

+  224,

+  220,

+  142,

+  16,

+  28,

+  198,

+  211,

+  153,

+  211,

+  252,

+  108,

+  96,

+  53,

+  24,

+  44,

+  139,

+  215,

+  28,

+  254,

+  41,

+  178,

+  252,

+  41,

+  130,

+  244,

+  128,

+  176,

+  44,

+  190,

+  173,

+  128,

+  92,

+  98,

+  120,

+  74,

+  87,

+  43,

+  27,

+  204,

+  159,

+  233,

+  205,

+  134,

+  35,

+  31,

+  19,

+  27,

+  73,

+  148,

+  28,

+  60,

+  57,

+  15,

+  35,

+  62,

+  209,

+  128,

+  247,

+  9,

+  111,

+  173,

+  33,

+  146,

+  108,

+  201,

+  208,

+  26,

+  251,

+  182,

+  79,

+  22,

+  189,

+  232,

+  235,

+  210,

+  126,

+  75,

+  243,

+  112,

+  29,

+  190,

+  12,

+  249,

+  55,

+  34,

+  97,

+  20,

+  140,

+  77,

+  81,

+  134,

+  112,

+  56,

+  138,

+  22,

+  41,

+  168,

+  184,

+  126,

+  244,

+  138,

+  42,

+  182,

+  225,

+  143,

+  180,

+  105,

+  89,

+  185,

+  30,

+  167,

+  59,

+  195,

+  81,

+  81,

+  21,

+  78,

+  176,

+  120,

+  123,

+  120,

+  14,

+  79,

+  43,

+  201,

+  80,

+  43,

+  44,

+  245,

+  90,

+  4,

+  206,

+  148,

+  202,

+  21,

+  200,

+  14,

+  255,

+  76,

+  54,

+  190,

+  28,

+  201,

+  177,

+  226,

+  175,

+  56,

+  32,

+  244,

+  240,

+  159,

+  78,

+  140,

+  34,

+  8,

+  245,

+  160,

+  171,

+  182,

+  87,

+  120,

+  123,

+  145,

+  216,

+  33,

+  56,

+  30,

+  93,

+  206,

+  179,

+  155,

+  43,

+  179,

+  26,

+  184,

+  190,

+  52,

+  11,

+  224,

+  151,

+  199,

+  66,

+  42,

+  238,

+  240,

+  100,

+  68,

+  90,

+  186,

+  252,

+  214,

+  236,

+  145,

+  127,

+  94,

+  175,

+  1,

+  220,

+  159,

+  135,

+  172,

+  134,

+  83,

+  41,

+  12,

+  42,

+  238,

+  9,

+  205,

+  101,

+  179,

+  219,

+  47,

+  228,

+  194,

+  124,

+  105,

+  91,

+  95,

+  175,

+  23,

+  6,

+  113,

+  72,

+  168,

+  87,

+  75,

+  72,

+  57,

+  81,

+  119,

+  37,

+  27,

+  131,

+  162,

+  108,

+  150,

+  27,

+  149,

+  110,

+  50,

+  126,

+  156,

+  255,

+  43,

+  242,

+  188,

+  21,

+  8,

+  250,

+  240,

+  165,

+  80,

+  1,

+  57,

+  105,

+  238,

+  206,

+  143,

+  28,

+  167,

+  122,

+  155,

+  96,

+  37,

+  150,

+  17,

+  27,

+  182,

+  203,

+  15,

+  1,

+  195,

+  114,

+  198,

+  240,

+  18,

+  148,

+  186,

+  101,

+  66,

+  99,

+  204,

+  15,

+  81,

+  21,

+  142,

+  170,

+  46,

+  198,

+  151,

+  57,

+  88,

+  60,

+  44,

+  210,

+  246,

+  52,

+  209,

+  60,

+  32,

+  180,

+  246,

+  38,

+  207,

+  91,

+  31,

+  187,

+  120,

+  121,

+  253,

+  252,

+  207,

+  91,

+  116,

+  84,

+  152,

+  60,

+  156,

+  218,

+  5,

+  213,

+  232,

+  62,

+  73,

+  47,

+  119,

+  74,

+  67,

+  41,

+  16,

+  213,

+  212,

+  71,

+  160,

+  0,

+  252,

+  132,

+  188,

+  111,

+  41,

+  90,

+  202,

+  84,

+  146,

+  102,

+  178,

+  49,

+  231,

+  218,

+  23,

+  55,

+  48,

+  171,

+  101,

+  202,

+  31,

+  14,

+  102,

+  43,

+  187,

+  211,

+  99,

+  203,

+  145,

+  112,

+  190,

+  246,

+  192,

+  142,

+  27,

+  230,

+  120,

+  57,

+  248,

+  38,

+  49,

+  95,

+  193,

+  121,

+  82,

+  137,

+  137,

+  248,

+  208,

+  80,

+  16,

+  194,

+  78,

+  84,

+  111,

+  167,

+  116,

+  110,

+  196,

+  119,

+  253,

+  172,

+  66,

+  131,

+  49,

+  113,

+  243,

+  234,

+  31,

+  2,

+  170,

+  186,

+  250,

+  167,

+  75,

+  8,

+  17,

+  162,

+  227,

+  241,

+  152,

+  132,

+  201,

+  139,

+  240,

+  190,

+  24,

+  229,

+  29,

+  189,

+  241,

+  237,

+  53,

+  130,

+  131,

+  105,

+  217,

+  89,

+  86,

+  76,

+  163,

+  65,

+  228,

+  86,

+  208,

+  112,

+  230,

+  39,

+  76,

+  137,

+  60,

+  118,

+  241,

+  253,

+  217,

+  225,

+  230,

+  199,

+  147,

+  87,

+  82,

+  169,

+  161,

+  139,

+  130,

+  146,

+  82,

+  251,

+  233,

+  237,

+  234,

+  63,

+  3,

+  211,

+  170,

+  214,

+  177,

+  104,

+  67,

+  28,

+  176,

+  25,

+  115,

+  137,

+  255,

+  3,

+  66,

+  113,

+  146,

+  78,

+  149,

+  169,

+  52,

+  127,

+  243,

+  228,

+  164,

+  235,

+  68,

+  209,

+  200,

+  97,

+  83,

+  134,

+  208,

+  245,

+  200,

+  26,

+  88,

+  14,

+  10,

+  253,

+  114,

+  224,

+  253,

+  194,

+  29,

+  138,

+  247,

+  85,

+  210,

+  162,

+  44,

+  203,

+  56,

+  126,

+  24,

+  0,

+  242,

+  103,

+  88,

+  242,

+  199,

+  129,

+  2,

+  68,

+  229,

+  92,

+  178,

+  196,

+  179,

+  32,

+  163,

+  154,

+  11,

+  148,

+  167,

+  178,

+  20,

+  177,

+  158,

+  226,

+  6,

+  91,

+  191,

+  128,

+  182,

+  113,

+  141,

+  97,

+  172,

+  63,

+  121,

+  203,

+  22,

+  45,

+  165,

+  62,

+  73,

+  159,

+  41,

+  97,

+  69,

+  207,

+  92,

+  89,

+  144,

+  156,

+  191,

+  73,

+  35,

+  0,

+  94,

+  190,

+  83,

+  115,

+  18,

+  43,

+  167,

+  26,

+  63,

+  89,

+  14,

+  78,

+  118,

+  254,

+  240,

+  111,

+  79,

+  115,

+  20,

+  2,

+  123,

+  103,

+  105,

+  85,

+  80,

+  0,

+  161,

+  183,

+  173,

+  191,

+  244,

+  113,

+  254,

+  126,

+  251,

+  35,

+  41,

+  70,

+  181,

+  167,

+  60,

+  217,

+  78,

+  52,

+  211,

+  52,

+  199,

+  179,

+  19,

+  111,

+  124,

+  198,

+  161,

+  187,

+  59,

+  64,

+  193,

+  189,

+  107,

+  75,

+  175,

+  78,

+  161,

+  117,

+  36,

+  212,

+  106,

+  11,

+  127,

+  188,

+  189,

+  216,

+  195,

+  187,

+  181,

+  84,

+  4,

+  17,

+  246,

+  199,

+  154,

+  43,

+  97,

+  222,

+  162,

+  98,

+  181,

+  114,

+  176,

+  253,

+  106,

+  26,

+  79,

+  229,

+  203,

+  214,

+  62,

+  102,

+  170,

+  36,

+  54,

+  89,

+  70,

+  48,

+  100,

+  169,

+  102,

+  252,

+  242,

+  174,

+  79,

+  145,

+  195,

+  166,

+  126,

+  53,

+  242,

+  132,

+  44,

+  88,

+  247,

+  142,

+  130,

+  154,

+  233,

+  9,

+  66,

+  196,

+  182,

+  30,

+  165,

+  115,

+  207,

+  182,

+  104,

+  14,

+  95,

+  172,

+  250,

+  48,

+  242,

+  201,

+  224,

+  219,

+  17,

+  39,

+  209,

+  81,

+  209,

+  148,

+  128,

+  77,

+  40,

+  1,

+  164,

+  108,

+  244,

+  188,

+  250,

+  114,

+  225,

+  58,

+  253,

+  253,

+  157,

+  81,

+  8,

+  255,

+  136,

+  172,

+  207,

+  66,

+  251,

+  172,

+  217,

+  225,

+  150,

+  85,

+  96,

+  195,

+  121,

+  179,

+  190,

+  230,

+  122,

+  237,

+  231,

+  7,

+  221,

+  145,

+  139,

+  220,

+  239,

+  219,

+  31,

+  235,

+  232,

+  140,

+  222,

+  117,

+  210,

+  32,

+  13,

+  155,

+  16,

+  184,

+  131,

+  202,

+  178,

+  94,

+  2,

+  96,

+  191,

+  255,

+  78,

+  252,

+  117,

+  251,

+  245,

+  212,

+  198,

+  187,

+  126,

+  37,

+  87,

+  192,

+  123,

+  110,

+  198,

+  66,

+  150,

+  141,

+  64,

+  44,

+  38,

+  99,

+  135,

+  223,

+  226,

+  172,

+  76,

+  47,

+  13,

+  194,

+  152,

+  112,

+  112,

+  175,

+  101,

+  21,

+  64,

+  196,

+  206,

+  33,

+  26,

+  189,

+  111,

+  210,

+  198,

+  116,

+  241,

+  232,

+  155,

+  237,

+  79,

+  183,

+  232,

+  156,

+  67,

+  20,

+  14,

+  19,

+  97,

+  6,

+  1,

+  122,

+  181,

+  17,

+  64,

+  8,

+  59,

+  207,

+  172,

+  89,

+  173,

+  118,

+  50,

+  102,

+  55,

+  121,

+  243,

+  69,

+  77,

+  68,

+  112,

+  65,

+  119,

+  205,

+  160,

+  188,

+  47,

+  74,

+  77,

+  26,

+  165,

+  230,

+  228,

+  19,

+  255,

+  106,

+  107,

+  167,

+  36,

+  64,

+  215,

+  98,

+  253,

+  47,

+  0,

+  225,

+  250,

+  213,

+  220,

+  82,

+  213,

+  61,

+  100,

+  114,

+  177,

+  109,

+  196,

+  140,

+  214,

+  99,

+  137,

+  98,

+  141,

+  225,

+  16,

+  104,

+  35,

+  40,

+  204,

+  225,

+  104,

+  235,

+  77,

+  230,

+  37,

+  73,

+  104,

+  64,

+  134,

+  60,

+  42,

+  51,

+  96,

+  118,

+  117,

+  85,

+  1,

+  209,

+  33,

+  27,

+  55,

+  240,

+  214,

+  140,

+  80,

+  177,

+  107,

+  175,

+  190,

+  106,

+  113,

+  122,

+  144,

+  124,

+  193,

+  89,

+  141,

+  225,

+  210,

+  194,

+  29,

+  73,

+  239,

+  151,

+  48,

+  225,

+  1,

+  12,

+  201,

+  63,

+  62,

+  215,

+  48,

+  92,

+  118,

+  113,

+  228,

+  141,

+  224,

+  98,

+  203,

+  28,

+  20,

+  124,

+  149,

+  252,

+  86,

+  77,

+  155,

+  24,

+  61,

+  2,

+  116,

+  207,

+  20,

+  237,

+  246,

+  36,

+  66,

+  11,

+  167,

+  17,

+  142,

+  36,

+  76,

+  137,

+  100,

+  142,

+  111,

+  216,

+  235,

+  239,

+  212,

+  153,

+  159,

+  36,

+  189,

+  147,

+  132,

+  96,

+  127,

+  148,

+  116,

+  232,

+  119,

+  38,

+  174,

+  16,

+  167,

+  70,

+  78,

+  187,

+  21,

+  13,

+  3,

+  192,

+  211,

+  43,

+  201,

+  102,

+  112,

+  125,

+  240,

+  198,

+  162,

+  92,

+  84,

+  28,

+  54,

+  197,

+  117,

+  149,

+  222,

+  140,

+  202,

+  70,

+  24,

+  100,

+  128,

+  114,

+  90,

+  230,

+  110,

+  37,

+  161,

+  144,

+  199,

+  157,

+  112,

+  2,

+  169,

+  253,

+  223,

+  149,

+  48,

+  181,

+  87,

+  169,

+  177,

+  177,

+  134,

+  119,

+  248,

+  119,

+  84,

+  90,

+  71,

+  252,

+  95,

+  233,

+  180,

+  232,

+  119,

+  168,

+  33,

+  252,

+  72,

+  112,

+  81,

+  67,

+  253,

+  147,

+  217,

+  171,

+  42,

+  4,

+  233,

+  161,

+  175,

+  227,

+  239,

+  10,

+  181,

+  35,

+  28,

+  40,

+  203,

+  131,

+  30,

+  85,

+  188,

+  119,

+  163,

+  99,

+  117,

+  203,

+  35,

+  67,

+  204,

+  92,

+  185,

+  6,

+  124,

+  243,

+  211,

+  102,

+  252,

+  243,

+  246,

+  109,

+  44,

+  90,

+  250,

+  23,

+  191,

+  151,

+  107,

+  213,

+  141,

+  224,

+  81,

+  3,

+  207,

+  157,

+  50,

+  198,

+  216,

+  87,

+  233,

+  96,

+  125,

+  116,

+  53,

+  31,

+  214,

+  138,

+  9,

+  208,

+  10,

+  152,

+  222,

+  172,

+  155,

+  90,

+  86,

+  201,

+  47,

+  92,

+  9,

+  7,

+  28,

+  132,

+  33,

+  118,

+  76,

+  13,

+  212,

+  87,

+  191,

+  69,

+  18,

+  6,

+  60,

+  5,

+  78,

+  153,

+  20,

+  173,

+  154,

+  44,

+  255,

+  104,

+  127,

+  126,

+  17,

+  110,

+  254,

+  141,

+  174,

+  42,

+  148,

+  15,

+  168,

+  18,

+  66,

+  5,

+  89,

+  63,

+  199,

+  76,

+  162,

+  98,

+  116,

+  217,

+  194,

+  219,

+  135,

+  227,

+  172,

+  230,

+  128,

+  199,

+  30,

+  141,

+  124,

+  199,

+  174,

+  180,

+  67,

+  14,

+  171,

+  217,

+  151,

+  18,

+  161,

+  248,

+  248,

+  208,

+  99,

+  247,

+  170,

+  242,

+  126,

+  43,

+  74,

+  100,

+  99,

+  133,

+  143,

+  167,

+  10,

+  122,

+  217,

+  249,

+  248,

+  195,

+  150,

+  129,

+  222,

+  212,

+  12,

+  121,

+  13,

+  35,

+  213,

+  241,

+  67,

+  242,

+  89,

+  24,

+  73,

+  244,

+  253,

+  152,

+  203,

+  83,

+  56,

+  216,

+  239,

+  91,

+  119,

+  176,

+  75,

+  40,

+  247,

+  195,

+  145,

+  19,

+  198,

+  83,

+  119,

+  242,

+  235,

+  60,

+  243,

+  175,

+  25,

+  26,

+  78,

+  22,

+  39,

+  124,

+  232,

+  206,

+  208,

+  79,

+  243,

+  155,

+  24,

+  17,

+  175,

+  197,

+  145,

+  47,

+  113,

+  176,

+  76,

+  223,

+  120,

+  123,

+  255,

+  255,

+  140,

+  174,

+  237,

+  83,

+  201,

+  165,

+  68,

+  55,

+  133,

+  9,

+  149,

+  212,

+  48,

+  57,

+  242,

+  33,

+  115,

+  202,

+  242,

+  23,

+  57,

+  203,

+  238,

+  12,

+  178,

+  102,

+  190,

+  191,

+  219,

+  119,

+  102,

+  116,

+  233,

+  243,

+  133,

+  8,

+  89,

+  28,

+  115,

+  196,

+  150,

+  71,

+  218,

+  211,

+  176,

+  77,

+  122,

+  159,

+  58,

+  9,

+  178,

+  167,

+  229,

+  196,

+  24,

+  56,

+  211,

+  216,

+  108,

+  91,

+  157,

+  203,

+  217,

+  209,

+  191,

+  86,

+  202,

+  109,

+  179,

+  26,

+  234,

+  162,

+  33,

+  218,

+  90,

+  144,

+  147,

+  18,

+  209,

+  99,

+  254,

+  233,

+  111,

+  229,

+  170,

+  8,

+  42,

+  163,

+  125,

+  165,

+  248,

+  100,

+  190,

+  210,

+  233,

+  202,

+  90,

+  77,

+  27,

+  27,

+  221,

+  192,

+  243,

+  76,

+  6,

+  130,

+  125,

+  95,

+  247,

+  154,

+  75,

+  227,

+  183,

+  104,

+  174,

+  178,

+  150,

+  164,

+  46,

+  174,

+  79,

+  198,

+  197,

+  5,

+  223,

+  129,

+  72,

+  10,

+  139,

+  143,

+  6,

+  130,

+  101,

+  183,

+  205,

+  167,

+  62,

+  47,

+  92,

+  254,

+  237,

+  211,

+  126,

+  155,

+  146,

+  229,

+  215,

+  85,

+  235,

+  156,

+  62,

+  43,

+  232,

+  234,

+  201,

+  21,

+  174,

+  80,

+  32,

+  32,

+  98,

+  150,

+  245,

+  54,

+  9,

+  72,

+  85,

+  178,

+  162,

+  255,

+  33,

+  55,

+  73,

+  99,

+  47,

+  68,

+  193,

+  217,

+  47,

+  239,

+  72,

+  32,

+  219,

+  44,

+  121,

+  44,

+  123,

+  65,

+  99,

+  186,

+  193,

+  244,

+  175,

+  6,

+  49,

+  58,

+  193,

+  1,

+  30,

+  5,

+  102,

+  68,

+  42,

+  142,

+  90,

+  24,

+  96,

+  134,

+  180,

+  246,

+  238,

+  94,

+  161,

+  240,

+  94,

+  103,

+  2,

+  142,

+  198,

+  67,

+  254,

+  219,

+  23,

+  118,

+  236,

+  49,

+  92,

+  123,

+  84,

+  91,

+  115,

+  165,

+  225,

+  123,

+  20,

+  35,

+  170,

+  215,

+  12,

+  52,

+  69,

+  197,

+  54,

+  134,

+  210,

+  23,

+  219,

+  49,

+  31,

+  2,

+  160,

+  140,

+  221,

+  233,

+  191,

+  238,

+  215,

+  86,

+  74,

+  36,

+  28,

+  233,

+  171,

+  77,

+  34,

+  142,

+  162,

+  20,

+  65,

+  207,

+  143,

+  113,

+  27,

+  132,

+  94,

+  227,

+  94,

+  39,

+  237,

+  150,

+  233,

+  97,

+  133,

+  182,

+  139,

+  158,

+  241,

+  100,

+  52,

+  22,

+  49,

+  19,

+  46,

+  213,

+  120,

+  171,

+  98,

+  53,

+  245,

+  125,

+  219,

+  226,

+  231,

+  217,

+  184,

+  159,

+  156,

+  33,

+  78,

+  183,

+  114,

+  1,

+  83,

+  156,

+  184,

+  32,

+  146,

+  76,

+  39,

+  35,

+  120,

+  134,

+  38,

+  40,

+  61,

+  149,

+  239,

+  77,

+  198,

+  218,

+  68,

+  214,

+  126,

+  255,

+  1,

+  128,

+  226,

+  109,

+  8,

+  242,

+  142,

+  246,

+  4,

+  78,

+  223,

+  249,

+  167,

+  70,

+  129,

+  103,

+  46,

+  18,

+  250,

+  47,

+  128,

+  174,

+  27,

+  248,

+  0,

+  38,

+  9,

+  34,

+  247,

+  236,

+  141,

+  6,

+  211,

+  212,

+  173,

+  116,

+  120,

+  163,

+  215,

+  105,

+  162,

+  59,

+  203,

+  144,

+  175,

+  206,

+  128,

+  5,

+  74,

+  239,

+  186,

+  45,

+  248,

+  237,

+  51,

+  133,

+  96,

+  2,

+  23,

+  199,

+  195,

+  55,

+  212,

+  39,

+  30,

+  182,

+  34,

+  109,

+  175,

+  203,

+  81,

+  101,

+  81,

+  17,

+  15,

+  246,

+  204,

+  217,

+  222,

+  40,

+  53,

+  218,

+  20,

+  114,

+  181,

+  96,

+  193,

+  177,

+  77,

+  145,

+  16,

+  164,

+  106,

+  83,

+  235,

+  64,

+  119,

+  2,

+  100,

+  41,

+  181,

+  206,

+  105,

+  102,

+  104,

+  242,

+  6,

+  168,

+  183,

+  125,

+  58,

+  129,

+  184,

+  92,

+  6,

+  157,

+  122,

+  100,

+  48,

+  100,

+  100,

+  32,

+  232,

+  7,

+  139,

+  117,

+  135,

+  78,

+  8,

+  27,

+  12,

+  86,

+  8,

+  74,

+  144,

+  6,

+  75,

+  207,

+  21,

+  64,

+  73,

+  14,

+  141,

+  188,

+  49,

+  56,

+  184,

+  254,

+  208,

+  173,

+  59,

+  110,

+  182,

+  145,

+  185,

+  130,

+  236,

+  226,

+  4,

+  165,

+  47,

+  118,

+  37,

+  1,

+  240,

+  193,

+  13,

+  54,

+  93,

+  173,

+  231,

+  151,

+  65,

+  35,

+  86,

+  206,

+  207,

+  127,

+  203,

+  45,

+  189,

+  65,

+  150,

+  199,

+  156,

+  66,

+  124,

+  208,

+  127,

+  20,

+  65,

+  229,

+  134,

+  127,

+  107,

+  223,

+  12,

+  0,

+  156,

+  154,

+  57,

+  210,

+  199,

+  160,

+  159,

+  61,

+  92,

+  99,

+  84,

+  135,

+  94,

+  194,

+  66,

+  185,

+  86,

+  207,

+  106,

+  162,

+  27,

+  148,

+  30,

+  122,

+  145,

+  50,

+  116,

+  94,

+  180,

+  65,

+  159,

+  194,

+  92,

+  97,

+  17,

+  174,

+  209,

+  94,

+  207,

+  170,

+  140,

+  135,

+  8,

+  67,

+  197,

+  55,

+  119,

+  180,

+  56,

+  118,

+  73,

+  126,

+  31,

+  46,

+  105,

+  212,

+  71,

+  212,

+  158,

+  77,

+  233,

+  181,

+  149,

+  98,

+  207,

+  153,

+  137,

+  73,

+  227,

+  29,

+  115,

+  92,

+  57,

+  57,

+  87,

+  88,

+  43,

+  227,

+  28,

+  232,

+  62,

+  25,

+  161,

+  219,

+  120,

+  229,

+  187,

+  145,

+  248,

+  69,

+  17,

+  180,

+  118,

+  145,

+  141,

+  145,

+  226,

+  158,

+  251,

+  118,

+  112,

+  47,

+  116,

+  247,

+  2,

+  118,

+  51,

+  82,

+  10,

+  103,

+  197,

+  77,

+  103,

+  33,

+  184,

+  92,

+  90,

+  225,

+  6,

+  98,

+  47,

+  147,

+  162,

+  175,

+  213,

+  213,

+  53,

+  59,

+  77,

+  22,

+  5,

+  100,

+  11,

+  174,

+  148,

+  131,

+  94,

+  122,

+  41,

+  217,

+  127,

+  118,

+  80,

+  254,

+  31,

+  239,

+  244,

+  184,

+  31,

+  55,

+  17,

+  73,

+  114,

+  105,

+  42,

+  15,

+  42,

+  168,

+  161,

+  48,

+  25,

+  85,

+  9,

+  250,

+  239,

+  218,

+  176,

+  107,

+  222,

+  15,

+  8,

+  38,

+  62,

+  62,

+  77,

+  167,

+  131,

+  178,

+  229,

+  42,

+  91,

+  113,

+  4,

+  169,

+  46,

+  134,

+  234,

+  137,

+  41,

+  183,

+  22,

+  70,

+  230,

+  173,

+  104,

+  187,

+  118,

+  183,

+  191,

+  254,

+  230,

+  119,

+  120,

+  96,

+  91,

+  236,

+  139,

+  252,

+  206,

+  173,

+  10,

+  139,

+  56,

+  108,

+  182,

+  209,

+  206,

+  215,

+  215,

+  151,

+  137,

+  52,

+  221,

+  222,

+  95,

+  172,

+  104,

+  17,

+  164,

+  36,

+  241,

+  243,

+  196,

+  48,

+  169,

+  143,

+  213,

+  42,

+  81,

+  37,

+  125,

+  63,

+  172,

+  49,

+  237,

+  217,

+  12,

+  71,

+  246,

+  173,

+  93,

+  210,

+  107,

+  232,

+  139,

+  53,

+  186,

+  250,

+  198,

+  227,

+  150,

+  159,

+  102,

+  135,

+  171,

+  215,

+  97,

+  79,

+  2,

+  27,

+  119,

+  100,

+  160,

+  89,

+  178,

+  221,

+  249,

+  140,

+  200,

+  146,

+  86,

+  71,

+  222,

+  187,

+  87,

+  32,

+  36,

+  165,

+  212,

+  69,

+  217,

+  2,

+  245,

+  111,

+  141,

+  68,

+  97,

+  194,

+  226,

+  221,

+  79,

+  103,

+  171,

+  167,

+  13,

+  14,

+  47,

+  247,

+  247,

+  110,

+  245,

+  2,

+  201,

+  244,

+  184,

+  83,

+  54,

+  75,

+  45,

+  57,

+  37,

+  16,

+  171,

+  167,

+  251,

+  145,

+  59,

+  199,

+  89,

+  128,

+  115,

+  123,

+  213,

+  201,

+  233,

+  248,

+  229,

+  186,

+  56,

+  74,

+  147,

+  7,

+  61,

+  26,

+  43,

+  214,

+  117,

+  4,

+  233,

+  137,

+  84,

+  44,

+  196,

+  231,

+  205,

+  98,

+  224,

+  50,

+  165,

+  13,

+  129,

+  17,

+  130,

+  2,

+  199,

+  207,

+  137,

+  230,

+  72,

+  66,

+  226,

+  247,

+  92,

+  203,

+  69,

+  161,

+  67,

+  239,

+  135,

+  84,

+  103,

+  21,

+  55,

+  146,

+  93,

+  102,

+  213,

+  228,

+  240,

+  70,

+  169,

+  25,

+  21,

+  184,

+  139,

+  233,

+  160,

+  115,

+  216,

+  77,

+  154,

+  251,

+  51,

+  229,

+  83,

+  76,

+  125,

+  200,

+  114,

+  60,

+  230,

+  158,

+  8,

+  83,

+  75,

+  143,

+  100,

+  237,

+  233,

+  114,

+  201,

+  130,

+  131,

+  145,

+  26,

+  139,

+  175,

+  222,

+  145,

+  241,

+  215,

+  149,

+  143,

+  72,

+  26,

+  197,

+  152,

+  172,

+  252,

+  161,

+  197,

+  109,

+  74,

+  125,

+  39,

+  165,

+  242,

+  133,

+  181,

+  212,

+  108,

+  144,

+  123,

+  180,

+  92,

+  137,

+  131,

+  129,

+  251,

+  109,

+  124,

+  45,

+  201,

+  247,

+  36,

+  68,

+  210,

+  196,

+  243,

+  198,

+  21,

+  4,

+  169,

+  209,

+  150,

+  228,

+  234,

+  221,

+  112,

+  230,

+  128,

+  42,

+  149,

+  145,

+  192,

+  217,

+  253,

+  191,

+  30,

+  59,

+  60,

+  216,

+  179,

+  240,

+  99,

+  48,

+  141,

+  19,

+  194,

+  62,

+  199,

+  131,

+  5,

+  179,

+  228,

+  47,

+  48,

+  82,

+  48,

+  109,

+  96,

+  220,

+  142,

+  111,

+  203,

+  251,

+  155,

+  117,

+  123,

+  208,

+  246,

+  173,

+  234,

+  197,

+  72,

+  165,

+  178,

+  2,

+  73,

+  73,

+  216,

+  20,

+  80,

+  169,

+  53,

+  45,

+  16,

+  138,

+  191,

+  182,

+  64,

+  250,

+  254,

+  198,

+  118,

+  89,

+  204,

+  21,

+  168,

+  76,

+  233,

+  249,

+  193,

+  148,

+  67,

+  58,

+  22,

+  231,

+  220,

+  49,

+  182,

+  64,

+  133,

+  75,

+  222,

+  153,

+  78,

+  51,

+  185,

+  103,

+  72,

+  79,

+  64,

+  103,

+  230,

+  234,

+  37,

+  5,

+  82,

+  132,

+  11,

+  208,

+  169,

+  250,

+  97,

+  73,

+  98,

+  219,

+  181,

+  167,

+  62,

+  70,

+  1,

+  244,

+  237,

+  67,

+  24,

+  57,

+  54,

+  20,

+  3,

+  124,

+  174,

+  124,

+  254,

+  110,

+  210,

+  37,

+  237,

+  95,

+  64,

+  198,

+  31,

+  60,

+  203,

+  243,

+  90,

+  180,

+  248,

+  241,

+  152,

+  56,

+  254,

+  115,

+  52,

+  156,

+  23,

+  226,

+  152,

+  210,

+  93,

+  221,

+  91,

+  68,

+  134,

+  38,

+  80,

+  113,

+  168,

+  150,

+  199,

+  124,

+  197,

+  229,

+  29,

+  186,

+  124,

+  226,

+  254,

+  199,

+  141,

+  127,

+  129,

+  47,

+  163,

+  41,

+  99,

+  186,

+  152,

+  4,

+  29,

+  63,

+  32,

+  88,

+  105,

+  122,

+  87,

+  28,

+  236,

+  253,

+  66,

+  20,

+  29,

+  173,

+  29,

+  49,

+  154,

+  90,

+  172,

+  243,

+  173,

+  48,

+  187,

+  98,

+  57,

+  97,

+  99,

+  75,

+  32,

+  204,

+  126,

+  176,

+  94,

+  147,

+  55,

+  116,

+  98,

+  144,

+  7,

+  23,

+  201,

+  187,

+  78,

+  240,

+  4,

+  130,

+  221,

+  108,

+  108,

+  240,

+  82,

+  208,

+  132,

+  223,

+  16,

+  80,

+  12,

+  214,

+  190,

+  47,

+  31,

+  7,

+  226,

+  59,

+  201,

+  73,

+  205,

+  213,

+  249,

+  60,

+  9,

+  124,

+  123,

+  99,

+  146,

+  6,

+  239,

+  97,

+  36,

+  217,

+  208,

+  15,

+  221,

+  217,

+  209,

+  243,

+  70,

+  197,

+  254,

+  7,

+  254,

+  210,

+  209,

+  84,

+  10,

+  134,

+  56,

+  234,

+  254,

+  238,

+  204,

+  13,

+  60,

+  45,

+  24,

+  57,

+  57,

+  31,

+  112,

+  14,

+  34,

+  180,

+  213,

+  170,

+  43,

+  53,

+  220,

+  10,

+  43,

+  103,

+  226,

+  67,

+  41,

+  189,

+  85,

+  13,

+  91,

+  48,

+  122,

+  144,

+  78,

+  207,

+  192,

+  57,

+  56,

+  59,

+  121,

+  108,

+  91,

+  207,

+  19,

+  249,

+  44,

+  59,

+  93,

+  79,

+  251,

+  82,

+  16,

+  171,

+  70,

+  188,

+  227,

+  165,

+  213,

+  109,

+  178,

+  62,

+  22,

+  84,

+  165,

+  155,

+  120,

+  193,

+  44,

+  149,

+  91,

+  214,

+  195,

+  26,

+  120,

+  98,

+  30,

+  188,

+  139,

+  126,

+  157,

+  218,

+  172,

+  103,

+  102,

+  73,

+  53,

+  39,

+  158,

+  214,

+  243,

+  23,

+  167,

+  83,

+  27,

+  167,

+  148,

+  122,

+  43,

+  140,

+  235,

+  19,

+  73,

+  25,

+  44,

+  222,

+  39,

+  110,

+  128,

+  70,

+  17,

+  142,

+  76,

+  245,

+  57,

+  229,

+  0,

+  178,

+  136,

+  244,

+  219,

+  65,

+  55,

+  140,

+  9,

+  28,

+  202,

+  43,

+  37,

+  68,

+  24,

+  28,

+  43,

+  232,

+  127,

+  106,

+  148,

+  124,

+  142,

+  108,

+  33,

+  36,

+  20,

+  182,

+  24,

+  234,

+  194,

+  31,

+  25,

+  209,

+  44,

+  160,

+  254,

+  242,

+  194,

+  98,

+  16,

+  225,

+  71,

+  56,

+  164,

+  78,

+  253,

+  240,

+  122,

+  47,

+  132,

+  29,

+  18,

+  85,

+  186,

+  234,

+  241,

+  245,

+  174,

+  14,

+  65,

+  170,

+  194,

+  69,

+  251,

+  182,

+  177,

+  57,

+  206,

+  32,

+  76,

+  65,

+  137,

+  221,

+  117,

+  67,

+  16,

+  235,

+  160,

+  56,

+  30,

+  94,

+  106,

+  250,

+  247,

+  115,

+  121,

+  152,

+  196,

+  60,

+  182,

+  111,

+  14,

+  179,

+  38,

+  171,

+  37,

+  37,

+  137,

+  174,

+  134,

+  240,

+  52,

+  65,

+  241,

+  104,

+  246,

+  147,

+  164,

+  175,

+  172,

+  26,

+  255,

+  53,

+  44,

+  21,

+  210,

+  231,

+  224,

+  49,

+  182,

+  122,

+  81,

+  167,

+  191,

+  78,

+  48,

+  30,

+  66,

+  107,

+  245,

+  27,

+  117,

+  93,

+  44,

+  17,

+  80,

+  239,

+  26,

+  206,

+  227,

+  174,

+  106,

+  83,

+  31,

+  155,

+  209,

+  106,

+  74,

+  41,

+  208,

+  197,

+  11,

+  121,

+  16,

+  160,

+  181,

+  35,

+  193,

+  145,

+  255,

+  182,

+  26,

+  14,

+  4,

+  123,

+  165,

+  207,

+  250,

+  132,

+  236,

+  95,

+  122,

+  244,

+  230,

+  96,

+  137,

+  147,

+  73,

+  175,

+  76,

+  127,

+  196,

+  12,

+  242,

+  167,

+  167,

+  48,

+  222,

+  225,

+  204,

+  71,

+  149,

+  148,

+  63,

+  106,

+  210,

+  112,

+  224,

+  215,

+  245,

+  21,

+  16,

+  115,

+  128,

+  83,

+  255,

+  224,

+  230,

+  247,

+  53,

+  241,

+  161,

+  120,

+  86,

+  155,

+  11,

+  66,

+  34,

+  46,

+  48,

+  176,

+  235,

+  66,

+  169,

+  42,

+  19,

+  204,

+  24,

+  46,

+  156,

+  59,

+  46,

+  215,

+  99,

+  226,

+  207,

+  219,

+  154,

+  85,

+  238,

+  40,

+  176,

+  197,

+  168,

+  5,

+  240,

+  84,

+  254,

+  77,

+  114,

+  176,

+  230,

+  134,

+  175,

+  140,

+  11,

+  165,

+  36,

+  87,

+  93,

+  238,

+  251,

+  1,

+  190,

+  74,

+  239,

+  251,

+  133,

+  248,

+  101,

+  160,

+  245,

+  102,

+  16,

+  145,

+  246,

+  195,

+  196,

+  113,

+  134,

+  238,

+  123,

+  44,

+  64,

+  223,

+  103,

+  178,

+  52,

+  13,

+  114,

+  73,

+  12,

+  15,

+  201,

+  167,

+  247,

+  156,

+  233,

+  81,

+  102,

+  26,

+  36,

+  115,

+  6,

+  47,

+  75,

+  167,

+  139,

+  116,

+  94,

+  237,

+  39,

+  12,

+  86,

+  230,

+  202,

+  127,

+  28,

+  199,

+  230,

+  85,

+  156,

+  176,

+  245,

+  199,

+  2,

+  243,

+  127,

+  128,

+  125,

+  90,

+  14,

+  140,

+  91,

+  122,

+  135,

+  194,

+  115,

+  43,

+  164,

+  37,

+  148,

+  159,

+  1,

+  64,

+  223,

+  41,

+  144,

+  89,

+  60,

+  178,

+  74,

+  234,

+  147,

+  109,

+  48,

+  74,

+  95,

+  124,

+  148,

+  51,

+  25,

+  84,

+  15,

+  137,

+  99,

+  85,

+  142,

+  181,

+  93,

+  73,

+  178,

+  166,

+  232,

+  108,

+  246,

+  62,

+  24,

+  186,

+  229,

+  43,

+  39,

+  147,

+  161,

+  232,

+  101,

+  204,

+  156,

+  250,

+  43,

+  125,

+  115,

+  176,

+  222,

+  213,

+  220,

+  66,

+  22,

+  71,

+  180,

+  62,

+  44,

+  25,

+  41,

+  81,

+  185,

+  230,

+  9,

+  128,

+  82,

+  216,

+  21,

+  62,

+  181,

+  70,

+  170,

+  37,

+  23,

+  83,

+  100,

+  73,

+  138,

+  205,

+  224,

+  65,

+  1,

+  157,

+  241,

+  48,

+  158,

+  242,

+  239,

+  247,

+  177,

+  44,

+  106,

+  204,

+  48,

+  242,

+  10,

+  42,

+  145,

+  53,

+  182,

+  204,

+  213,

+  194,

+  239,

+  93,

+  58,

+  199,

+  194,

+  185,

+  254,

+  128,

+  243,

+  229,

+  193,

+  39,

+  145,

+  49,

+  246,

+  128,

+  215,

+  30,

+  148,

+  85,

+  84,

+  16,

+  108,

+  24,

+  154,

+  142,

+  13,

+  192,

+  32,

+  245,

+  173,

+  250,

+  41,

+  34,

+  41,

+  154,

+  242,

+  111,

+  66,

+  104,

+  110,

+  185,

+  93,

+  68,

+  238,

+  239,

+  83,

+  50,

+  145,

+  154,

+  96,

+  156,

+  67,

+  96,

+  242,

+  163,

+  91,

+  156,

+  234,

+  147,

+  231,

+  242,

+  76,

+  72,

+  214,

+  231,

+  30,

+  50,

+  144,

+  40,

+  78,

+  106,

+  158,

+  74,

+  54,

+  86,

+  106,

+  57,

+  71,

+  18,

+  198,

+  142,

+  175,

+  153,

+  167,

+  44,

+  58,

+  117,

+  6,

+  157,

+  9,

+  88,

+  44,

+  56,

+  218,

+  139,

+  209,

+  35,

+  219,

+  153,

+  0,

+  13,

+  18,

+  67,

+  212,

+  173,

+  150,

+  185,

+  221,

+  23,

+  42,

+  65,

+  99,

+  76,

+  243,

+  39,

+  87,

+  248,

+  123,

+  94,

+  180,

+  239,

+  151,

+  243,

+  44,

+  213,

+  136,

+  72,

+  133,

+  30,

+  152,

+  158,

+  212,

+  62,

+  45,

+  129,

+  35,

+  105,

+  63,

+  37,

+  16,

+  239,

+  1,

+  188,

+  38,

+  65,

+  121,

+  28,

+  141,

+  34,

+  156,

+  139,

+  156,

+  97,

+  3,

+  190,

+  230,

+  8,

+  48,

+  252,

+  27,

+  221,

+  152,

+  30,

+  215,

+  242,

+  129,

+  163,

+  170,

+  71,

+  40,

+  203,

+  39,

+  84,

+  201,

+  62,

+  30,

+  245,

+  21,

+  154,

+  228,

+  57,

+  87,

+  228,

+  54,

+  80,

+  60,

+  205,

+  209,

+  162,

+  166,

+  199,

+  154,

+  235,

+  106,

+  124,

+  71,

+  23,

+  5,

+  166,

+  197,

+  181,

+  245,

+  208,

+  95,

+  231,

+  230,

+  130,

+  148,

+  173,

+  226,

+  252,

+  201,

+  153,

+  135,

+  213,

+  175,

+  134,

+  179,

+  85,

+  104,

+  167,

+  39,

+  244,

+  118,

+  157,

+  151,

+  161,

+  174,

+  248,

+  108,

+  84,

+  66,

+  127,

+  96,

+  72,

+  211,

+  227,

+  23,

+  169,

+  225,

+  32,

+  186,

+  14,

+  194,

+  145,

+  220,

+  183,

+  213,

+  114,

+  119,

+  28,

+  40,

+  188,

+  129,

+  140,

+  12,

+  150,

+  192,

+  57,

+  167,

+  228,

+  96,

+  29,

+  154,

+  193,

+  111,

+  115,

+  244,

+  106,

+  27,

+  207,

+  21,

+  217,

+  156,

+  37,

+  233,

+  15,

+  190,

+  196,

+  223,

+  108,

+  82,

+  202,

+  187,

+  204,

+  255,

+  154,

+  149,

+  230,

+  36,

+  142,

+  161,

+  148,

+  55,

+  151,

+  164,

+  251,

+  225,

+  210,

+  163,

+  88,

+  208,

+  205,

+  125,

+  170,

+  198,

+  139,

+  82,

+  27,

+  230,

+  205,

+  100,

+  13,

+  76,

+  249,

+  132,

+  12,

+  5,

+  108,

+  209,

+  211,

+  223,

+  58,

+  246,

+  108,

+  16,

+  108,

+  225,

+  52,

+  112,

+  242,

+  181,

+  226,

+  110,

+  132,

+  244,

+  141,

+  198,

+  74,

+  65,

+  176,

+  183,

+  85,

+  241,

+  161,

+  229,

+  208,

+  9,

+  158,

+  213,

+  56,

+  173,

+  66,

+  240,

+  101,

+  102,

+  31,

+  112,

+  191,

+  101,

+  139,

+  197,

+  88,

+  168,

+  240,

+  143,

+  73,

+  189,

+  240,

+  67,

+  239,

+  102,

+  157,

+  164,

+  93,

+  138,

+  101,

+  217,

+  197,

+  62,

+  91,

+  223,

+  247,

+  63,

+  70,

+  105,

+  116,

+  150,

+  100,

+  253,

+  201,

+  246,

+  119,

+  224,

+  1,

+  83,

+  172,

+  185,

+  233,

+  191,

+  194,

+  140,

+  67,

+  166,

+  85,

+  202,

+  150,

+  159,

+  20,

+  65,

+  240,

+  144,

+  68,

+  218,

+  59,

+  234,

+  55,

+  166,

+  235,

+  149,

+  138,

+  32,

+  74,

+  249,

+  235,

+  158,

+  185,

+  153,

+  61,

+  222,

+  48,

+  44,

+  39,

+  191,

+  159,

+  135,

+  203,

+  76,

+  224,

+  244,

+  177,

+  122,

+  200,

+  30,

+  179,

+  130,

+  135,

+  155,

+  192,

+  141,

+  149,

+  150,

+  58,

+  31,

+  121,

+  1,

+  158,

+  230,

+  62,

+  245,

+  106,

+  181,

+  126,

+  67,

+  16,

+  237,

+  47,

+  197,

+  202,

+  97,

+  28,

+  47,

+  117,

+  27,

+  176,

+  21,

+  227,

+  242,

+  42,

+  61,

+  129,

+  79,

+  100,

+  33,

+  17,

+  209,

+  251,

+  40,

+  112,

+  242,

+  17,

+  201,

+  224,

+  192,

+  120,

+  206,

+  198,

+  233,

+  152,

+  0,

+  220,

+  4,

+  7,

+  138,

+  240,

+  79,

+  85,

+  172,

+  168,

+  140,

+  199,

+  154,

+  103,

+  99,

+  212,

+  22,

+  55,

+  178,

+  41,

+  80,

+  250,

+  117,

+  68,

+  142,

+  7,

+  229,

+  39,

+  32,

+  175,

+  243,

+  31,

+  255,

+  226,

+  208,

+  199,

+  12,

+  64,

+  247,

+  59,

+  57,

+  200,

+  59,

+  93,

+  243,

+  83,

+  139,

+  177,

+  82,

+  47,

+  144,

+  81,

+  80,

+  18,

+  60,

+  72,

+  7,

+  177,

+  11,

+  71,

+  150,

+  37,

+  85,

+  229,

+  27,

+  145,

+  249,

+  242,

+  212,

+  228,

+  215,

+  197,

+  175,

+  244,

+  51,

+  218,

+  230,

+  52,

+  207,

+  233,

+  40,

+  143,

+  150,

+  0,

+  94,

+  252,

+  113,

+  126,

+  10,

+  201,

+  112,

+  122,

+  249,

+  182,

+  76,

+  74,

+  38,

+  114,

+  165,

+  231,

+  245,

+  241,

+  189,

+  94,

+  62,

+  66,

+  169,

+  87,

+  158,

+  65,

+  74,

+  190,

+  148,

+  133,

+  141,

+  150,

+  205,

+  94,

+  244,

+  207,

+  251,

+  216,

+  143,

+  170,

+  84,

+  229,

+  136,

+  78,

+  206,

+  203,

+  10,

+  215,

+  166,

+  106,

+  39,

+  17,

+  209,

+  95,

+  94,

+  107,

+  198,

+  138,

+  32,

+  2,

+  179,

+  154,

+  145,

+  94,

+  162,

+  122,

+  159,

+  107,

+  144,

+  2,

+  136,

+  113,

+  209,

+  195,

+  136,

+  63,

+  8,

+  11,

+  130,

+  221,

+  248,

+  196,

+  145,

+  141,

+  161,

+  107,

+  230,

+  84,

+  158,

+  146,

+  169,

+  205,

+  27,

+  243,

+  70,

+  37,

+  25,

+  173,

+  36,

+  250,

+  199,

+  248,

+  114,

+  141,

+  12,

+  165,

+  166,

+  43,

+  71,

+  197,

+  80,

+  177,

+  225,

+  61,

+  199,

+  178,

+  182,

+  216,

+  247,

+  31,

+  18,

+  179,

+  125,

+  11,

+  145,

+  86,

+  237,

+  31,

+  64,

+  36,

+  117,

+  208,

+  216,

+  18,

+  22,

+  49,

+  73,

+  143,

+  170,

+  174,

+  128,

+  170,

+  191,

+  180,

+  91,

+  186,

+  46,

+  40,

+  60,

+  139,

+  8,

+  206,

+  218,

+  143,

+  253,

+  246,

+  26,

+  94,

+  8,

+  73,

+  12,

+  16,

+  252,

+  21,

+  35,

+  160,

+  241,

+  254,

+  185,

+  4,

+  38,

+  225,

+  199,

+  242,

+  243,

+  19,

+  57,

+  109,

+  20,

+  30,

+  101,

+  177,

+  123,

+  186,

+  3,

+  97,

+  233,

+  220,

+  148,

+  194,

+  181,

+  180,

+  104,

+  167,

+  0,

+  45,

+  22,

+  20,

+  39,

+  214,

+  253,

+  40,

+  177,

+  207,

+  188,

+  221,

+  14,

+  186,

+  91,

+  164,

+  93,

+  39,

+  83,

+  203,

+  168,

+  143,

+  105,

+  65,

+  36,

+  177,

+  51,

+  95,

+  79,

+  149,

+  36,

+  62,

+  5,

+  52,

+  251,

+  179,

+  179,

+  48,

+  255,

+  210,

+  186,

+  46,

+  161,

+  130,

+  176,

+  239,

+  46,

+  3,

+  193,

+  34,

+  27,

+  59,

+  12,

+  117,

+  158,

+  176,

+  214,

+  159,

+  241,

+  54,

+  181,

+  138,

+  107,

+  29,

+  189,

+  231,

+  191,

+  78,

+  150,

+  193,

+  134,

+  83,

+  12,

+  174,

+  163,

+  213,

+  108,

+  242,

+  179,

+  148,

+  45,

+  244,

+  4,

+  51,

+  141,

+  139,

+  52,

+  146,

+  146,

+  3,

+  31,

+  141,

+  92,

+  80,

+  177,

+  106,

+  47,

+  111,

+  11,

+  188,

+  254,

+  177,

+  229,

+  114,

+  112,

+  226,

+  134,

+  218,

+  37,

+  90,

+  70,

+  142,

+  171,

+  243,

+  131,

+  114,

+  139,

+  215,

+  97,

+  137,

+  226,

+  8,

+  126,

+  7,

+  230,

+  206,

+  93,

+  142,

+  121,

+  172,

+  173,

+  245,

+  180,

+  75,

+  226,

+  46,

+  121,

+  163,

+  74,

+  125,

+  243,

+  170,

+  109,

+  33,

+  247,

+  9,

+  3,

+  121,

+  133,

+  241,

+  101,

+  91,

+  152,

+  5,

+  188,

+  7,

+  167,

+  30,

+  225,

+  128,

+  173,

+  235,

+  248,

+  32,

+  199,

+  47,

+  119,

+  117,

+  238,

+  160,

+  137,

+  26,

+  210,

+  172,

+  68,

+  86,

+  56,

+  232,

+  90,

+  220,

+  137,

+  197,

+  200,

+  81,

+  104,

+  194,

+  5,

+  28,

+  229,

+  105,

+  147,

+  214,

+  12,

+  137,

+  190,

+  62,

+  103,

+  178,

+  164,

+  89,

+  160,

+  187,

+  127,

+  251,

+  175,

+  89,

+  55,

+  10,

+  42,

+  31,

+  72,

+  155,

+  237,

+  95,

+  45,

+  34,

+  72,

+  217,

+  243,

+  232,

+  113,

+  29,

+  205,

+  180,

+  70,

+  24,

+  211,

+  164,

+  52,

+  34,

+  11,

+  180,

+  100,

+  131,

+  135,

+  131,

+  63,

+  143,

+  247,

+  219,

+  243,

+  83,

+  94,

+  171,

+  223,

+  132,

+  38,

+  2,

+  9,

+  251,

+  57,

+  38,

+  223,

+  228,

+  19,

+  39,

+  83,

+  212,

+  225,

+  242,

+  141,

+  70,

+  237,

+  79,

+  115,

+  249,

+  188,

+  64,

+  76,

+  26,

+  73,

+  207,

+  165,

+  199,

+  51,

+  58,

+  59,

+  65,

+  253,

+  163,

+  46,

+  248,

+  8,

+  209,

+  243,

+  90,

+  161,

+  198,

+  1,

+  21,

+  85,

+  154,

+  194,

+  121,

+  0,

+  61,

+  50,

+  206,

+  126,

+  45,

+  211,

+  96,

+  31,

+  172,

+  146,

+  75,

+  145,

+  208,

+  55,

+  89,

+  38,

+  246,

+  125,

+  218,

+  79,

+  102,

+  228,

+  233,

+  145,

+  34,

+  179,

+  183,

+  217,

+  81,

+  96,

+  159,

+  101,

+  118,

+  162,

+  145,

+  175,

+  198,

+  215,

+  154,

+  0,

+  52,

+  61,

+  181,

+  55,

+  248,

+  221,

+  150,

+  217,

+  216,

+  99,

+  226,

+  160,

+  4,

+  111,

+  2,

+  253,

+  167,

+  246,

+  48,

+  157,

+  235,

+  151,

+  109,

+  190,

+  184,

+  157,

+  246,

+  15,

+  172,

+  155,

+  81,

+  230,

+  53,

+  64,

+  32,

+  71,

+  214,

+  181,

+  132,

+  156,

+  211,

+  119,

+  173,

+  201,

+  69,

+  37,

+  230,

+  229,

+  27,

+  193,

+  239,

+  87,

+  88,

+  97,

+  46,

+  195,

+  60,

+  251,

+  36,

+  106,

+  142,

+  143,

+  145,

+  189,

+  164,

+  28,

+  183,

+  173,

+  36,

+  191,

+  153,

+  75,

+  252,

+  45,

+  106,

+  194,

+  7,

+  235,

+  147,

+  158,

+  74,

+  247,

+  58,

+  138,

+  203,

+  164,

+  89,

+  228,

+  111,

+  75,

+  221,

+  182,

+  226,

+  240,

+  124,

+  123,

+  138,

+  84,

+  220,

+  215,

+  78,

+  229,

+  152,

+  136,

+  105,

+  188,

+  140,

+  29,

+  201,

+  229,

+  133,

+  96,

+  243,

+  116,

+  39,

+  145,

+  228,

+  139,

+  139,

+  220,

+  63,

+  50,

+  88,

+  250,

+  99,

+  223,

+  255,

+  124,

+  232,

+  140,

+  96,

+  68,

+  174,

+  102,

+  150,

+  156,

+  129,

+  121,

+  229,

+  95,

+  224,

+  34,

+  237,

+  95,

+  149,

+  153,

+  199,

+  192,

+  35,

+  192,

+  159,

+  252,

+  151,

+  128,

+  72,

+  175,

+  188,

+  41,

+  162,

+  223,

+  253,

+  90,

+  221,

+  237,

+  46,

+  189,

+  31,

+  126,

+  9,

+  81,

+  230,

+  243,

+  72,

+  119,

+  119,

+  152,

+  1,

+  29,

+  120,

+  239,

+  220,

+  71,

+  250,

+  94,

+  29,

+  64,

+  120,

+  113,

+  208,

+  169,

+  140,

+  244,

+  51,

+  52,

+  71,

+  141,

+  202,

+  93,

+  150,

+  53,

+  33,

+  190,

+  228,

+  220,

+  91,

+  252,

+  188,

+  27,

+  156,

+  62,

+  7,

+  255,

+  24,

+  219,

+  160,

+  168,

+  68,

+  4,

+  93,

+  191,

+  164,

+  33,

+  127,

+  95,

+  215,

+  111,

+  169,

+  235,

+  154,

+  6,

+  38,

+  196,

+  46,

+  44,

+  244,

+  83,

+  104,

+  120,

+  59,

+  56,

+  226,

+  102,

+  89,

+  179,

+  191,

+  16,

+  147,

+  50,

+  62,

+  203,

+  65,

+  135,

+  139,

+  34,

+  138,

+  60,

+  213,

+  20,

+  121,

+  72,

+  171,

+  22,

+  95,

+  239,

+  187,

+  74,

+  209,

+  196,

+  185,

+  253,

+  32,

+  43,

+  200,

+  135,

+  26,

+  114,

+  177,

+  225,

+  77,

+  29,

+  159,

+  212,

+  137,

+  239,

+  229,

+  131,

+  56,

+  106,

+  225,

+  124,

+  92,

+  169,

+  138,

+  254,

+  1,

+  107,

+  152,

+  63,

+  226,

+  134,

+  131,

+  69,

+  157,

+  216,

+  18,

+  234,

+  226,

+  134,

+  40,

+  24,

+  76,

+  111,

+  11,

+  46,

+  125,

+  198,

+  36,

+  28,

+  104,

+  88,

+  244,

+  190,

+  124,

+  8,

+  141,

+  229,

+  255,

+  224,

+  222,

+  175,

+  121,

+  68,

+  194,

+  73,

+  186,

+  77,

+  92,

+  59,

+  130,

+  90,

+  149,

+  107,

+  28,

+  42,

+  245,

+  109,

+  132,

+  180,

+  241,

+  16,

+  144,

+  153,

+  227,

+  98,

+  149,

+  239,

+  188,

+  32,

+  236,

+  149,

+  221,

+  166,

+  181,

+  242,

+  142,

+  96,

+  31,

+  65,

+  11,

+  230,

+  5,

+  149,

+  209,

+  67,

+  176,

+  205,

+  97,

+  23,

+  188,

+  86,

+  42,

+  245,

+  200,

+  143,

+  128,

+  47,

+  99,

+  134,

+  125,

+  243,

+  43,

+  159,

+  125,

+  140,

+  158,

+  173,

+  126,

+  109,

+  220,

+  40,

+  144,

+  94,

+  22,

+  184,

+  57,

+  248,

+  120,

+  167,

+  61,

+  63,

+  245,

+  124,

+  52,

+  215,

+  31,

+  11,

+  58,

+  24,

+  222,

+  53,

+  155,

+  160,

+  183,

+  158,

+  133,

+  149,

+  160,

+  130,

+  249,

+  251,

+  229,

+  146,

+  16,

+  195,

+  1,

+  128,

+  166,

+  154,

+  150,

+  171,

+  12,

+  253,

+  226,

+  225,

+  188,

+  159,

+  210,

+  176,

+  202,

+  72,

+  63,

+  205,

+  97,

+  63,

+  59,

+  207,

+  142,

+  96,

+  12,

+  53,

+  92,

+  238,

+  32,

+  68,

+  78,

+  111,

+  160,

+  195,

+  191,

+  115,

+  212,

+  253,

+  122,

+  250,

+  15,

+  21,

+  108,

+  216,

+  51,

+  227,

+  166,

+  33,

+  135,

+  181,

+  89,

+  158,

+  182,

+  244,

+  200,

+  19,

+  147,

+  200,

+  185,

+  39,

+  170,

+  63,

+  103,

+  46,

+  240,

+  149,

+  121,

+  255,

+  208,

+  165,

+  237,

+  105,

+  113,

+  72,

+  51,

+  171,

+  141,

+  247,

+  178,

+  140,

+  142,

+  27,

+  216,

+  97,

+  42,

+  245,

+  147,

+  1,

+  109,

+  19,

+  215,

+  189,

+  226,

+  143,

+  68,

+  25,

+  131,

+  170,

+  122,

+  222,

+  69,

+  219,

+  142,

+  79,

+  184,

+  169,

+  239,

+  126,

+  104,

+  166,

+  111,

+  45,

+  223,

+  229,

+  142,

+  133,

+  50,

+  174,

+  123,

+  150,

+  55,

+  170,

+  214,

+  217,

+  170,

+  251,

+  160,

+  8,

+  22,

+  204,

+  100,

+  30,

+  126,

+  167,

+  69,

+  185,

+  226,

+  10,

+  254,

+  146,

+  127,

+  11,

+  3,

+  95,

+  78,

+  253,

+  115,

+  112,

+  176,

+  165,

+  171,

+  57,

+  147,

+  249,

+  37,

+  9,

+  146,

+  21,

+  203,

+  6,

+  248,

+  82,

+  221,

+  148,

+  207,

+  212,

+  4,

+  11,

+  153,

+  118,

+  140,

+  223,

+  9,

+  242,

+  153,

+  227,

+  15,

+  200,

+  54,

+  6,

+  205,

+  243,

+  118,

+  197,

+  0,

+  248,

+  154,

+  250,

+  129,

+  20,

+  59,

+  43,

+  191,

+  66,

+  89,

+  211,

+  206,

+  154,

+  240,

+  160,

+  58,

+  29,

+  222,

+  32,

+  177,

+  58,

+  97,

+  157,

+  111,

+  167,

+  185,

+  66,

+  145,

+  215,

+  226,

+  123,

+  133,

+  50,

+  103,

+  154,

+  136,

+  164,

+  168,

+  190,

+  91,

+  18,

+  133,

+  71,

+  186,

+  173,

+  171,

+  225,

+  196,

+  61,

+  119,

+  239,

+  75,

+  166,

+  31,

+  138,

+  67,

+  139,

+  172,

+  158,

+  41,

+  101,

+  121,

+  34,

+  35,

+  147,

+  129,

+  149,

+  210,

+  209,

+  193,

+  236,

+  5,

+  23,

+  156,

+  3,

+  115,

+  244,

+  137,

+  39,

+  83,

+  180,

+  183,

+  25,

+  89,

+  202,

+  31,

+  56,

+  222,

+  75,

+  169,

+  214,

+  61,

+  208,

+  11,

+  225,

+  61,

+  55,

+  147,

+  198,

+  85,

+  87,

+  200,

+  155,

+  194,

+  35,

+  18,

+  18,

+  222,

+  102,

+  162,

+  138,

+  153,

+  185,

+  152,

+  111,

+  86,

+  19,

+  206,

+  94,

+  146,

+  25,

+  145,

+  194,

+  141,

+  155,

+  179,

+  157,

+  210,

+  45,

+  234,

+  22,

+  129,

+  148,

+  57,

+  115,

+  1,

+  103,

+  199,

+  165,

+  173,

+  230,

+  94,

+  123,

+  43,

+  61,

+  164,

+  56,

+  199,

+  116,

+  123,

+  135,

+  249,

+  141,

+  51,

+  233,

+  79,

+  158,

+  241,

+  230,

+  73,

+  37,

+  82,

+  128,

+  88,

+  243,

+  205,

+  142,

+  210,

+  222,

+  109,

+  12,

+  233,

+  4,

+  222,

+  44,

+  101,

+  224,

+  186,

+  206,

+  133,

+  75,

+  33,

+  4,

+  50,

+  232,

+  154,

+  47,

+  225,

+  239,

+  178,

+  103,

+  227,

+  109,

+  127,

+  157,

+  251,

+  110,

+  198,

+  60,

+  141,

+  61,

+  115,

+  42,

+  174,

+  131,

+  93,

+  182,

+  230,

+  120,

+  170,

+  0,

+  32,

+  159,

+  66,

+  143,

+  205,

+  154,

+  143,

+  190,

+  118,

+  117,

+  123,

+  166,

+  227,

+  84,

+  112,

+  18,

+  193,

+  82,

+  15,

+  117,

+  238,

+  187,

+  54,

+  159,

+  177,

+  106,

+  174,

+  126,

+  222,

+  40,

+  72,

+  43,

+  31,

+  79,

+  233,

+  193,

+  252,

+  235,

+  138,

+  108,

+  254,

+  170,

+  239,

+  5,

+  60,

+  241,

+  208,

+  40,

+  90,

+  205,

+  247,

+  112,

+  48,

+  193,

+  205,

+  159,

+  162,

+  126,

+  253,

+  244,

+  43,

+  71,

+  238,

+  57,

+  120,

+  128,

+  199,

+  52,

+  14,

+  6,

+  239,

+  68,

+  73,

+  97,

+  173,

+  138,

+  6,

+  82,

+  22,

+  96,

+  68,

+  45,

+  45,

+  7,

+  94,

+  174,

+  170,

+  166,

+  10,

+  82,

+  193,

+  202,

+  117,

+  49,

+  10,

+  79,

+  41,

+  248,

+  251,

+  81,

+  251,

+  36,

+  120,

+  240,

+  15,

+  63,

+  126,

+  137,

+  174,

+  57,

+  209,

+  24,

+  250,

+  96,

+  148,

+  139,

+  67,

+  122,

+  201,

+  105,

+  178,

+  89,

+  2,

+  149,

+  199,

+  132,

+  59,

+  214,

+  32,

+  229,

+  194,

+  163,

+  241,

+  47,

+  211,

+  242,

+  11,

+  143,

+  123,

+  238,

+  76,

+  30,

+  97,

+  68,

+  170,

+  29,

+  65,

+  92,

+  184,

+  175,

+  217,

+  0,

+  100,

+  170,

+  152,

+  107,

+  162,

+  209,

+  31,

+  117,

+  92,

+  20,

+  156,

+  69,

+  117,

+  208,

+  134,

+  204,

+  64,

+  158,

+  86,

+  41,

+  95,

+  100,

+  6,

+  141,

+  246,

+  3,

+  200,

+  25,

+  91,

+  160,

+  48,

+  103,

+  228,

+  136,

+  94,

+  150,

+  158,

+  145,

+  64,

+  219,

+  239,

+  55,

+  252,

+  90,

+  121,

+  64,

+  251,

+  147,

+  207,

+  133,

+  245,

+  201,

+  127,

+  190,

+  146,

+  172,

+  28,

+  87,

+  15,

+  243,

+  1,

+  139,

+  188,

+  223,

+  15,

+  223,

+  119,

+  41,

+  134,

+  19,

+  65,

+  148,

+  137,

+  254,

+  118,

+  215,

+  49,

+  77,

+  247,

+  236,

+  124,

+  172,

+  142,

+  246,

+  17,

+  59,

+  183,

+  196,

+  9,

+  255,

+  195,

+  119,

+  142,

+  131,

+  139,

+  134,

+  147,

+  21,

+  198,

+  142,

+  221,

+  241,

+  63,

+  112,

+  165,

+  87,

+  211,

+  205,

+  45,

+  84,

+  42,

+  181,

+  42,

+  214,

+  65,

+  5,

+  114,

+  153,

+  43,

+  92,

+  25,

+  122,

+  218,

+  89,

+  10,

+  226,

+  239,

+  104,

+  250,

+  213,

+  40,

+  3,

+  50,

+  101,

+  70,

+  62,

+  166,

+  177,

+  91,

+  232,

+  5,

+  139,

+  90,

+  156,

+  185,

+  8,

+  160,

+  98,

+  113,

+  83,

+  113,

+  27,

+  15,

+  168,

+  91,

+  240,

+  199,

+  46,

+  44,

+  202,

+  131,

+  33,

+  94,

+  139,

+  191,

+  50,

+  214,

+  33,

+  111,

+  221,

+  67,

+  153,

+  165,

+  70,

+  209,

+  136,

+  89,

+  191,

+  247,

+  17,

+  27,

+  75,

+  217,

+  93,

+  171,

+  45,

+  84,

+  238,

+  11,

+  209,

+  243,

+  214,

+  110,

+  230,

+  213,

+  48,

+  101,

+  40,

+  10,

+  47,

+  109,

+  129,

+  209,

+  149,

+  135,

+  190,

+  162,

+  147,

+  168,

+  231,

+  29,

+  203,

+  3,

+  253,

+  226,

+  201,

+  232,

+  222,

+  190,

+  143,

+  118,

+  169,

+  93,

+  240,

+  117,

+  128,

+  238,

+  7,

+  209,

+  248,

+  178,

+  68,

+  44,

+  197,

+  26,

+  98,

+  88,

+  65,

+  198,

+  143,

+  198,

+  21,

+  147,

+  167,

+  140,

+  194,

+  142,

+  172,

+  8,

+  173,

+  149,

+  2,

+  174,

+  251,

+  119,

+  168,

+  33,

+  132,

+  180,

+  174,

+  7,

+  195,

+  194,

+  11,

+  10,

+  100,

+  163,

+  163,

+  98,

+  53,

+  71,

+  4,

+  229,

+  99,

+  183,

+  242,

+  203,

+  54,

+  64,

+  66,

+  225,

+  199,

+  194,

+  163,

+  45,

+  110,

+  86,

+  136,

+  163,

+  138,

+  222,

+  135,

+  148,

+  200,

+  140,

+  198,

+  111,

+  107,

+  184,

+  28,

+  85,

+  180,

+  37,

+  3,

+  231,

+  155,

+  121,

+  130,

+  87,

+  78,

+  117,

+  108,

+  94,

+  215,

+  101,

+  102,

+  222,

+  236,

+  16,

+  199,

+  145,

+  188,

+  71,

+  190,

+  4,

+  24,

+  214,

+  35,

+  120,

+  60,

+  212,

+  69,

+  251,

+  52,

+  248,

+  149,

+  85,

+  6,

+  214,

+  245,

+  86,

+  48,

+  178,

+  139,

+  109,

+  51,

+  1,

+  145,

+  52,

+  221,

+  217,

+  158,

+  212,

+  13,

+  19,

+  78,

+  221,

+  76,

+  67,

+  157,

+  213,

+  126,

+  234,

+  86,

+  122,

+  24,

+  223,

+  204,

+  255,

+  173,

+  233,

+  109,

+  39,

+  116,

+  53,

+  238,

+  229,

+  104,

+  23,

+  147,

+  204,

+  247,

+  85,

+  34,

+  228,

+  38,

+  125,

+  244,

+  71,

+  188,

+  45,

+  169,

+  216,

+  99,

+  103,

+  4,

+  137,

+  183,

+  157,

+  217,

+  48,

+  2,

+  29,

+  51,

+  107,

+  7,

+  64,

+  155,

+  73,

+  169,

+  206,

+  196,

+  193,

+  193,

+  175,

+  226,

+  74,

+  139,

+  138,

+  248,

+  58,

+  197,

+  76,

+  247,

+  95,

+  89,

+  169,

+  113,

+  79,

+  244,

+  46,

+  33,

+  180,

+  47,

+  95,

+  177,

+  242,

+  209,

+  213,

+  112,

+  28,

+  60,

+  16,

+  97,

+  66,

+  167,

+  114,

+  213,

+  135,

+  153,

+  216,

+  1,

+  253,

+  32,

+  173,

+  29,

+  66,

+  44,

+  247,

+  166,

+  25,

+  65,

+  22,

+  239,

+  83,

+  49,

+  45,

+  75,

+  193,

+  49,

+  152,

+  194,

+  73,

+  97,

+  154,

+  109,

+  87,

+  246,

+  249,

+  133,

+  241,

+  209,

+  8,

+  238,

+  242,

+  38,

+  237,

+  15,

+  246,

+  199,

+  143,

+  173,

+  138,

+  249,

+  143,

+  20,

+  183,

+  106,

+  31,

+  214,

+  152,

+  228,

+  176,

+  25,

+  203,

+  238,

+  239,

+  3,

+  142,

+  54,

+  231,

+  12,

+  189,

+  42,

+  12,

+  23,

+  126,

+  81,

+  118,

+  4,

+  157,

+  181,

+  235,

+  164,

+  150,

+  29,

+  146,

+  94,

+  201,

+  209,

+  207,

+  151,

+  184,

+  153,

+  166,

+  211,

+  202,

+  46,

+  20,

+  137,

+  76,

+  238,

+  206,

+  89,

+  103,

+  242,

+  133,

+  40,

+  68,

+  250,

+  212,

+  190,

+  120,

+  16,

+  220,

+  118,

+  202,

+  250,

+  166,

+  73,

+  181,

+  126,

+  83,

+  201,

+  120,

+  114,

+  237,

+  185,

+  183,

+  194,

+  8,

+  180,

+  32,

+  28,

+  122,

+  20,

+  71,

+  13,

+  145,

+  15,

+  62,

+  95,

+  167,

+  249,

+  64,

+  215,

+  182,

+  204,

+  163,

+  121,

+  154,

+  28,

+  209,

+  94,

+  223,

+  252,

+  211,

+  152,

+  10,

+  183,

+  77,

+  134,

+  75,

+  166,

+  194,

+  79,

+  56,

+  64,

+  168,

+  107,

+  93,

+  17,

+  136,

+  26,

+  26,

+  39,

+  76,

+  78,

+  43,

+  181,

+  63,

+  172,

+  210,

+  227,

+  175,

+  60,

+  36,

+  158,

+  98,

+  144,

+  85,

+  93,

+  204,

+  182,

+  241,

+  140,

+  177,

+  225,

+  191,

+  149,

+  219,

+  16,

+  31,

+  51,

+  58,

+  5,

+  233,

+  227,

+  65,

+  33,

+  245,

+  174,

+  239,

+  7,

+  239,

+  179,

+  105,

+  97,

+  28,

+  122,

+  31,

+  73,

+  252,

+  79,

+  51,

+  40,

+  144,

+  211,

+  10,

+  9,

+  49,

+  205,

+  15,

+  142,

+  5,

+  16,

+  62,

+  82,

+  244,

+  142,

+  84,

+  133,

+  21,

+  189,

+  166,

+  174,

+  152,

+  101,

+  108,

+  119,

+  112,

+  143,

+  165,

+  191,

+  240,

+  57,

+  1,

+  221,

+  49,

+  142,

+  239,

+  139,

+  91,

+  252,

+  238,

+  47,

+  184,

+  243,

+  89,

+  102,

+  216,

+  35,

+  135,

+  156,

+  122,

+  209,

+  186,

+  49,

+  10,

+  177,

+  111,

+  241,

+  77,

+  18,

+  21,

+  65,

+  181,

+  56,

+  62,

+  99,

+  39,

+  132,

+  8,

+  137,

+  54,

+  157,

+  116,

+  108,

+  55,

+  151,

+  34,

+  121,

+  153,

+  63,

+  81,

+  142,

+  47,

+  11,

+  191,

+  104,

+  182,

+  19,

+  106,

+  172,

+  89,

+  20,

+  2,

+  190,

+  133,

+  52,

+  166,

+  54,

+  123,

+  114,

+  250,

+  24,

+  216,

+  163,

+  134,

+  44,

+  168,

+  224,

+  166,

+  178,

+  122,

+  91,

+  243,

+  205,

+  90,

+  49,

+  179,

+  18,

+  219,

+  150,

+  240,

+  34,

+  134,

+  14,

+  12,

+  235,

+  234,

+  39,

+  242,

+  196,

+  122,

+  186,

+  245,

+  121,

+  222,

+  187,

+  232,

+  214,

+  159,

+  142,

+  129,

+  111,

+  76,

+  34,

+  61,

+  170,

+  255,

+  166,

+  127,

+  24,

+  247,

+  208,

+  145,

+  19,

+  236,

+  176,

+  112,

+  76,

+  189,

+  110,

+  130,

+  91,

+  219,

+  228,

+  45,

+  51,

+  116,

+  168,

+  194,

+  20,

+  146,

+  57,

+  11,

+  103,

+  254,

+  56,

+  234,

+  1,

+  239,

+  240,

+  176,

+  145,

+  148,

+  30,

+  13,

+  12,

+  150,

+  117,

+  182,

+  9,

+  52,

+  125,

+  142,

+  52,

+  54,

+  48,

+  172,

+  154,

+  240,

+  226,

+  209,

+  182,

+  170,

+  251,

+  58,

+  32,

+  218,

+  172,

+  165,

+  21,

+  104,

+  110,

+  234,

+  178,

+  221,

+  206,

+  161,

+  207,

+  106,

+  109,

+  163,

+  227,

+  224,

+  102,

+  167,

+  47,

+  129,

+  121,

+  179,

+  228,

+  66,

+  241,

+  71,

+  222,

+  222,

+  61,

+  149,

+  244,

+  149,

+  242,

+  165,

+  227,

+  247,

+  4,

+  199,

+  212,

+  128,

+  198,

+  180,

+  191,

+  142,

+  223,

+  67,

+  231,

+  172,

+  146,

+  24,

+  168,

+  77,

+  127,

+  186,

+  109,

+  141,

+  166,

+  214,

+  111,

+  205,

+  89,

+  71,

+  227,

+  220,

+  88,

+  15,

+  57,

+  13,

+  161,

+  97,

+  35,

+  138,

+  213,

+  236,

+  145,

+  15,

+  201,

+  136,

+  164,

+  151,

+  25,

+  34,

+  198,

+  7,

+  1,

+  47,

+  137,

+  144,

+  138,

+  28,

+  203,

+  206,

+  19,

+  140,

+  5,

+  69,

+  57,

+  28,

+  85,

+  229,

+  193,

+  47,

+  41,

+  145,

+  34,

+  50,

+  87,

+  247,

+  161,

+  56,

+  28,

+  65,

+  197,

+  33,

+  18,

+  99,

+  31,

+  247,

+  246,

+  9,

+  211,

+  113,

+  64,

+  198,

+  30,

+  222,

+  122,

+  84,

+  254,

+  11,

+  74,

+  194,

+  14,

+  109,

+  222,

+  71,

+  87,

+  86,

+  82,

+  132,

+  78,

+  235,

+  210,

+  142,

+  149,

+  247,

+  207,

+  85,

+  21,

+  254,

+  25,

+  112,

+  223,

+  67,

+  187,

+  26,

+  241,

+  109,

+  231,

+  94,

+  113,

+  126,

+  246,

+  228,

+  80,

+  15,

+  180,

+  182,

+  151,

+  66,

+  33,

+  47,

+  101,

+  54,

+  69,

+  9,

+  244,

+  63,

+  24,

+  216,

+  208,

+  111,

+  207,

+  176,

+  141,

+  144,

+  38,

+  73,

+  223,

+  112,

+  117,

+  65,

+  225,

+  13,

+  201,

+  146,

+  160,

+  240,

+  178,

+  173,

+  198,

+  166,

+  77,

+  72,

+  155,

+  182,

+  83,

+  0,

+  185,

+  34,

+  25,

+  101,

+  188,

+  97,

+  244,

+  9,

+  111,

+  150,

+  82,

+  157,

+  94,

+  77,

+  232,

+  189,

+  154,

+  239,

+  230,

+  114,

+  152,

+  242,

+  91,

+  207,

+  80,

+  52,

+  80,

+  180,

+  34,

+  21,

+  111,

+  16,

+  12,

+  178,

+  196,

+  122,

+  164,

+  128,

+  255,

+  72,

+  103,

+  149,

+  151,

+  63,

+  165,

+  134,

+  39,

+  51,

+  255,

+  3,

+  137,

+  11,

+  16,

+  171,

+  228,

+  18,

+  208,

+  253,

+  194,

+  225,

+  137,

+  178,

+  87,

+  168,

+  200,

+  39,

+  121,

+  151,

+  167,

+  202,

+  57,

+  88,

+  80,

+  150,

+  32,

+  249,

+  239,

+  195,

+  161,

+  74,

+  47,

+  217,

+  222,

+  76,

+  213,

+  237,

+  13,

+  67,

+  248,

+  138,

+  75,

+  139,

+  86,

+  62,

+  72,

+  231,

+  200,

+  27,

+  123,

+  229,

+  68,

+  129,

+  31,

+  204,

+  218,

+  70,

+  141,

+  94,

+  31,

+  242,

+  44,

+  201,

+  44,

+  150,

+  186,

+  113,

+  77,

+  192,

+  178,

+  222,

+  223,

+  104,

+  107,

+  189,

+  173,

+  15,

+  227,

+  148,

+  52,

+  101,

+  63,

+  0,

+  227,

+  94,

+  215,

+  239,

+  15,

+  28,

+  125,

+  83,

+  159,

+  167,

+  14,

+  239,

+  114,

+  57,

+  213,

+  179,

+  10,

+  191,

+  46,

+  65,

+  36,

+  237,

+  203,

+  48,

+  172,

+  233,

+  191,

+  191,

+  215,

+  234,

+  143,

+  141,

+  213,

+  185,

+  121,

+  63,

+  16,

+  202,

+  7,

+  68,

+  211,

+  35,

+  187,

+  137,

+  175,

+  9,

+  242,

+  29,

+  66,

+  24,

+  81,

+  67,

+  86,

+  255,

+  237,

+  49,

+  164,

+  251,

+  103,

+  1,

+  76,

+  45,

+  38,

+  237,

+  137,

+  248,

+  150,

+  245,

+  69,

+  178,

+  117,

+  143,

+  107,

+  19,

+  190,

+  194,

+  22,

+  250,

+  168,

+  55,

+  194,

+  95,

+  199,

+  236,

+  67,

+  243,

+  246,

+  100,

+  182,

+  254,

+  62,

+  25,

+  84,

+  247,

+  16,

+  12,

+  63,

+  251,

+  148,

+  48,

+  69,

+  1,

+  184,

+  63,

+  221,

+  211,

+  251,

+  209,

+  202,

+  23,

+  73,

+  242,

+  159,

+  201,

+  234,

+  32,

+  100,

+  157,

+  110,

+  19,

+  118,

+  180,

+  224,

+  162,

+  156,

+  116,

+  168,

+  68,

+  163,

+  224,

+  246,

+  166,

+  189,

+  136,

+  0,

+  205,

+  130,

+  211,

+  43,

+  244,

+  166,

+  187,

+  240,

+  47,

+  151,

+  166,

+  214,

+  207,

+  127,

+  233,

+  15,

+  136,

+  106,

+  93,

+  206,

+  99,

+  132,

+  117,

+  170,

+  206,

+  14,

+  20,

+  50,

+  53,

+  71,

+  59,

+  66,

+  181,

+  113,

+  201,

+  227,

+  95,

+  216,

+  233,

+  53,

+  127,

+  171,

+  186,

+  167,

+  37,

+  140,

+  29,

+  177,

+  99,

+  108,

+  178,

+  172,

+  55,

+  46,

+  239,

+  72,

+  200,

+  33,

+  130,

+  29,

+  38,

+  56,

+  157,

+  191,

+  174,

+  38,

+  128,

+  100,

+  57,

+  241,

+  242,

+  199,

+  61,

+  30,

+  71,

+  210,

+  170,

+  248,

+  94,

+  255,

+  117,

+  123,

+  63,

+  252,

+  140,

+  0,

+  77,

+  207,

+  17,

+  118,

+  207,

+  170,

+  157,

+  143,

+  154,

+  155,

+  137,

+  4,

+  55,

+  252,

+  28,

+  255,

+  99,

+  141,

+  113,

+  50,

+  40,

+  95,

+  230,

+  172,

+  240,

+  117,

+  133,

+  131,

+  235,

+  52,

+  141,

+  200,

+  32,

+  81,

+  43,

+  76,

+  23,

+  85,

+  44,

+  74,

+  234,

+  177,

+  21,

+  59,

+  100,

+  106,

+  145,

+  2,

+  210,

+  143,

+  236,

+  201,

+  140,

+  184,

+  223,

+  6,

+  74,

+  184,

+  250,

+  180,

+  191,

+  24,

+  225,

+  160,

+  156,

+  12,

+  198,

+  48,

+  158,

+  218,

+  169,

+  205,

+  190,

+  211,

+  249,

+  43,

+  119,

+  38,

+  6,

+  253,

+  16,

+  130,

+  60,

+  55,

+  177,

+  33,

+  191,

+  172,

+  146,

+  221,

+  26,

+  101,

+  237,

+  205,

+  148,

+  120,

+  137,

+  209,

+  143,

+  212,

+  165,

+  143,

+  205,

+  75,

+  9,

+  27,

+  229,

+  175,

+  78,

+  232,

+  215,

+  180,

+  115,

+  135,

+  252,

+  56,

+  21,

+  64,

+  35,

+  97,

+  7,

+  159,

+  20,

+  55,

+  134,

+  209,

+  113,

+  241,

+  86,

+  159,

+  236,

+  223,

+  252,

+  228,

+  233,

+  229,

+  37,

+  68,

+  183,

+  111,

+  184,

+  155,

+  236,

+  17,

+  14,

+  218,

+  244,

+  160,

+  200,

+  12,

+  17,

+  179,

+  139,

+  255,

+  209,

+  31,

+  163,

+  218,

+  91,

+  218,

+  198,

+  115,

+  212,

+  191,

+  133,

+  158,

+  235,

+  121,

+  126,

+  225,

+  142,

+  186,

+  156,

+  193,

+  144,

+  126,

+  195,

+  108,

+  152,

+  176,

+  86,

+  97,

+  151,

+  168,

+  140,

+  119,

+  18,

+  99,

+  238,

+  83,

+  203,

+  138,

+  167,

+  130,

+  192,

+  45,

+  30,

+  12,

+  118,

+  216,

+  179,

+  163,

+  215,

+  113,

+  54,

+  41,

+  145,

+  17,

+  10,

+  29,

+  248,

+  221,

+  234,

+  177,

+  181,

+  79,

+  179,

+  78,

+  69,

+  248,

+  182,

+  168,

+  179,

+  238,

+  172,

+  113,

+  144,

+  17,

+  215,

+  184,

+  154,

+  169,

+  207,

+  169,

+  114,

+  92,

+  21,

+  70,

+  56,

+  32,

+  216,

+  191,

+  31,

+  39,

+  230,

+  115,

+  48,

+  63,

+  142,

+  77,

+  157,

+  252,

+  8,

+  91,

+  199,

+  107,

+  121,

+  214,

+  143,

+  84,

+  111,

+  22,

+  180,

+  198,

+  45,

+  125,

+  44,

+  21,

+  148,

+  158,

+  201,

+  38,

+  20,

+  33,

+  127,

+  200,

+  105,

+  220,

+  243,

+  170,

+  215,

+  243,

+  39,

+  250,

+  46,

+  230,

+  237,

+  33,

+  45,

+  134,

+  250,

+  63,

+  81,

+  133,

+  58,

+  71,

+  184,

+  19,

+  126,

+  234,

+  216,

+  110,

+  133,

+  55,

+  114,

+  112,

+  180,

+  155,

+  39,

+  96,

+  245,

+  171,

+  140,

+  223,

+  31,

+  40,

+  128,

+  226,

+  141,

+  27,

+  68,

+  24,

+  168,

+  189,

+  83,

+  95,

+  87,

+  77,

+  79,

+  63,

+  173,

+  149,

+  253,

+  87,

+  186,

+  218,

+  203,

+  24,

+  141,

+  67,

+  200,

+  208,

+  237,

+  214,

+  146,

+  210,

+  144,

+  178,

+  162,

+  195,

+  16,

+  178,

+  38,

+  212,

+  168,

+  209,

+  231,

+  167,

+  128,

+  77,

+  185,

+  222,

+  12,

+  15,

+  101,

+  172,

+  243,

+  214,

+  227,

+  187,

+  156,

+  204,

+  176,

+  219,

+  86,

+  208,

+  114,

+  19,

+  199,

+  13,

+  231,

+  70,

+  93,

+  198,

+  124,

+  237,

+  247,

+  42,

+  125,

+  189,

+  134,

+  159,

+  212,

+  71,

+  185,

+  82,

+  50,

+  230,

+  50,

+  206,

+  107,

+  193,

+  154,

+  234,

+  104,

+  135,

+  30,

+  134,

+  245,

+  124,

+  194,

+  59,

+  234,

+  231,

+  39,

+  146,

+  129,

+  108,

+  49,

+  212,

+  255,

+  88,

+  102,

+  49,

+  247,

+  121,

+  128,

+  122,

+  103,

+  62,

+  186,

+  22,

+  65,

+  202,

+  150,

+  250,

+  72,

+  153,

+  207,

+  248,

+  128,

+  41,

+  194,

+  50,

+  164,

+  247,

+  183,

+  237,

+  215,

+  123,

+  152,

+  106,

+  185,

+  190,

+  26,

+  39,

+  38,

+  66,

+  169,

+  41,

+  211,

+  164,

+  244,

+  150,

+  223,

+  89,

+  80,

+  32,

+  21,

+  119,

+  59,

+  121,

+  178,

+  202,

+  28,

+  23,

+  131,

+  182,

+  218,

+  240,

+  149,

+  98,

+  105,

+  35,

+  142,

+  158,

+  122,

+  52,

+  100,

+  152,

+  159,

+  233,

+  15,

+  142,

+  104,

+  246,

+  53,

+  80,

+  64,

+  176,

+  247,

+  139,

+  210,

+  218,

+  185,

+  222,

+  180,

+  172,

+  96,

+  243,

+  106,

+  104,

+  175,

+  7,

+  131,

+  158,

+  244,

+  208,

+  13,

+  244,

+  214,

+  197,

+  89,

+  239,

+  68,

+  44,

+  103,

+  54,

+  200,

+  125,

+  46,

+  52,

+  130,

+  95,

+  20,

+  16,

+  143,

+  97,

+  125,

+  220,

+  30,

+  11,

+  216,

+  118,

+  191,

+  209,

+  43,

+  53,

+  144,

+  48,

+  59,

+  201,

+  241,

+  77,

+  171,

+  160,

+  120,

+  60,

+  148,

+  8,

+  233,

+  113,

+  220,

+  159,

+  177,

+  222,

+  104,

+  84,

+  121,

+  25,

+  121,

+  12,

+  122,

+  31,

+  9,

+  22,

+  60,

+  250,

+  11,

+  243,

+  37,

+  118,

+  174,

+  151,

+  86,

+  181,

+  30,

+  164,

+  107,

+  252,

+  43,

+  56,

+  103,

+  248,

+  242,

+  39,

+  182,

+  183,

+  133,

+  244,

+  34,

+  101,

+  91,

+  197,

+  198,

+  114,

+  161,

+  78,

+  160,

+  211,

+  44,

+  86,

+  176,

+  7,

+  0,

+  138,

+  28,

+  159,

+  231,

+  38,

+  0,

+  76,

+  25,

+  179,

+  233,

+  191,

+  195,

+  45,

+  85,

+  52,

+  245,

+  79,

+  100,

+  240,

+  102,

+  192,

+  233,

+  12,

+  254,

+  177,

+  163,

+  167,

+  245,

+  96,

+  140,

+  32,

+  237,

+  247,

+  236,

+  20,

+  19,

+  106,

+  228,

+  62,

+  125,

+  213,

+  131,

+  138,

+  245,

+  242,

+  6,

+  133,

+  146,

+  21,

+  219,

+  6,

+  94,

+  242,

+  34,

+  72,

+  9,

+  106,

+  222,

+  51,

+  205,

+  38,

+  188,

+  203,

+  233,

+  44,

+  224,

+  155,

+  50,

+  66,

+  36,

+  145,

+  86,

+  213,

+  199,

+  38,

+  46,

+  143,

+  28,

+  127,

+  184,

+  212,

+  176,

+  141,

+  139,

+  190,

+  25,

+  255,

+  32,

+  114,

+  164,

+  173,

+  8,

+  162,

+  79,

+  117,

+  82,

+  135,

+  67,

+  205,

+  138,

+  236,

+  181,

+  55,

+  84,

+  184,

+  55,

+  142,

+  109,

+  132,

+  50,

+  29,

+  103,

+  131,

+  178,

+  80,

+  114,

+  56,

+  26,

+  193,

+  26,

+  53,

+  71,

+  227,

+  80,

+  169,

+  8,

+  95,

+  121,

+  86,

+  97,

+  178,

+  121,

+  96,

+  210,

+  221,

+  94,

+  240,

+  136,

+  74,

+  157,

+  230,

+  90,

+  56,

+  78,

+  146,

+  65,

+  255,

+  247,

+  137,

+  179,

+  126,

+  139,

+  146,

+  195,

+  225,

+  173,

+  162,

+  172,

+  111,

+  217,

+  185,

+  103,

+  93,

+  145,

+  96,

+  181,

+  232,

+  4,

+  238,

+  232,

+  180,

+  59,

+  71,

+  232,

+  229,

+  76,

+  85,

+  172,

+  62,

+  46,

+  148,

+  98,

+  116,

+  180,

+  35,

+  250,

+  196,

+  175,

+  201,

+  215,

+  231,

+  240,

+  51,

+  121,

+  199,

+  51,

+  206,

+  152,

+  200,

+  165,

+  2,

+  144,

+  188,

+  218,

+  103,

+  11,

+  181,

+  21,

+  228,

+  203,

+  64,

+  50,

+  10,

+  182,

+  158,

+  31,

+  79,

+  37,

+  198,

+  149,

+  224,

+  184,

+  164,

+  137,

+  94,

+  126,

+  9,

+  27,

+  67,

+  65,

+  82,

+  131,

+  242,

+  239,

+  197,

+  18,

+  20,

+  44,

+  140,

+  18,

+  145,

+  165,

+  73,

+  94,

+  77,

+  125,

+  82,

+  191,

+  118,

+  94,

+  164,

+  165,

+  177,

+  116,

+  220,

+  250,

+  18,

+  211,

+  144,

+  192,

+  210,

+  57,

+  12,

+  236,

+  174,

+  84,

+  80,

+  120,

+  38,

+  43,

+  168,

+  17,

+  195,

+  8,

+  165,

+  141,

+  241,

+  172,

+  101,

+  37,

+  254,

+  124,

+  223,

+  11,

+  237,

+  193,

+  122,

+  12,

+  193,

+  143,

+  80,

+  1,

+  92,

+  52,

+  75,

+  200,

+  185,

+  83,

+  136,

+  202,

+  232,

+  52,

+  43,

+  55,

+  181,

+  81,

+  63,

+  25,

+  97,

+  191,

+  177,

+  111,

+  127,

+  100,

+  203,

+  51,

+  205,

+  241,

+  112,

+  77,

+  31,

+  170,

+  249,

+  39,

+  183,

+  104,

+  173,

+  226,

+  248,

+  206,

+  74,

+  149,

+  78,

+  24,

+  78,

+  30,

+  92,

+  7,

+  64,

+  218,

+  220,

+  69,

+  75,

+  243,

+  60,

+  8,

+  182,

+  197,

+  199,

+  153,

+  129,

+  209,

+  75,

+  56,

+  164,

+  25,

+  147,

+  18,

+  0,

+  241,

+  40,

+  29,

+  175,

+  186,

+  183,

+  59,

+  195,

+  184,

+  132,

+  236,

+  224,

+  109,

+  85,

+  131,

+  157,

+  79,

+  79,

+  60,

+  117,

+  255,

+  242,

+  62,

+  227,

+  205,

+  74,

+  137,

+  31,

+  63,

+  12,

+  162,

+  220,

+  121,

+  96,

+  197,

+  180,

+  208,

+  61,

+  179,

+  44,

+  235,

+  37,

+  214,

+  169,

+  31,

+  169,

+  109,

+  97,

+  148,

+  195,

+  218,

+  96,

+  9,

+  98,

+  183,

+  156,

+  150,

+  223,

+  55,

+  88,

+  114,

+  5,

+  34,

+  21,

+  0,

+  109,

+  75,

+  76,

+  23,

+  98,

+  222,

+  226,

+  249,

+  179,

+  135,

+  179,

+  120,

+  80,

+  0,

+  56,

+  116,

+  248,

+  250,

+  73,

+  227,

+  189,

+  115,

+  159,

+  155,

+  98,

+  39,

+  41,

+  60,

+  40,

+  189,

+  97,

+  247,

+  7,

+  90,

+  101,

+  56,

+  75,

+  147,

+  133,

+  44,

+  205,

+  71,

+  209,

+  222,

+  26,

+  168,

+  24,

+  1,

+  78,

+  245,

+  247,

+  201,

+  186,

+  110,

+  98,

+  13,

+  89,

+  189,

+  161,

+  146,

+  39,

+  33,

+  100,

+  246,

+  97,

+  123,

+  8,

+  205,

+  220,

+  241,

+  193,

+  133,

+  40,

+  159,

+  135,

+  8,

+  252,

+  107,

+  204,

+  245,

+  7,

+  10,

+  76,

+  151,

+  196,

+  55,

+  178,

+  181,

+  208,

+  10,

+  135,

+  155,

+  198,

+  232,

+  245,

+  152,

+  227,

+  43,

+  165,

+  13,

+  252,

+  142,

+  64,

+  193,

+  51,

+  183,

+  115,

+  113,

+  9,

+  243,

+  40,

+  169,

+  196,

+  224,

+  157,

+  48,

+  46,

+  239,

+  144,

+  109,

+  137,

+  252,

+  132,

+  167,

+  129,

+  213,

+  27,

+  142,

+  213,

+  185,

+  97,

+  92,

+  179,

+  118,

+  148,

+  227,

+  101,

+  198,

+  27,

+  169,

+  117,

+  215,

+  240,

+  39,

+  129,

+  143,

+  183,

+  52,

+  248,

+  171,

+  234,

+  43,

+  5,

+  60,

+  56,

+  149,

+  40,

+  175,

+  39,

+  73,

+  99,

+  92,

+  38,

+  140,

+  112,

+  199,

+  199,

+  108,

+  68,

+  146,

+  138,

+  55,

+  91,

+  181,

+  221,

+  249,

+  40,

+  130,

+  212,

+  97,

+  49,

+  200,

+  109,

+  253,

+  192,

+  233,

+  104,

+  103,

+  65,

+  179,

+  24,

+  128,

+  6,

+  96,

+  125,

+  203,

+  45,

+  139,

+  42,

+  88,

+  210,

+  171,

+  211,

+  33,

+  166,

+  140,

+  25,

+  126,

+  153,

+  169,

+  165,

+  32,

+  182,

+  175,

+  72,

+  81,

+  83,

+  38,

+  147,

+  154,

+  134,

+  99,

+  67,

+  178,

+  18,

+  155,

+  249,

+  153,

+  100,

+  105,

+  26,

+  53,

+  185,

+  216,

+  215,

+  71,

+  136,

+  244,

+  90,

+  187,

+  232,

+  233,

+  23,

+  119,

+  222,

+  186,

+  93,

+  34,

+  67,

+  75,

+  113,

+  146,

+  138,

+  239,

+  81,

+  184,

+  142,

+  167,

+  73,

+  25,

+  78,

+  191,

+  94,

+  89,

+  182,

+  66,

+  13,

+  85,

+  10,

+  32,

+  102,

+  113,

+  160,

+  6,

+  141,

+  73,

+  177,

+  143,

+  90,

+  127,

+  71,

+  184,

+  119,

+  200,

+  216,

+  111,

+  70,

+  45,

+  62,

+  164,

+  187,

+  81,

+  156,

+  184,

+  25,

+  125,

+  84,

+  34,

+  20,

+  231,

+  97,

+  157,

+  53,

+  63,

+  67,

+  154,

+  148,

+  112,

+  178,

+  113,

+  167,

+  105,

+  161,

+  157,

+  183,

+  218,

+  185,

+  60,

+  176,

+  230,

+  204,

+  240,

+  34,

+  105,

+  25,

+  243,

+  205,

+  214,

+  33,

+  37,

+  123,

+  169,

+  78,

+  45,

+  154,

+  167,

+  121,

+  128,

+  156,

+  23,

+  233,

+  225,

+  143,

+  84,

+  40,

+  60,

+  179,

+  193,

+  26,

+  19,

+  200,

+  196,

+  162,

+  219,

+  232,

+  191,

+  21,

+  89,

+  72,

+  21,

+  118,

+  248,

+  150,

+  231,

+  234,

+  30,

+  27,

+  234,

+  5,

+  230,

+  33,

+  78,

+  117,

+  145,

+  55,

+  59,

+  99,

+  232,

+  200,

+  3,

+  87,

+  180,

+  122,

+  199,

+  9,

+  2,

+  221,

+  247,

+  32,

+  153,

+  213,

+  244,

+  236,

+  97,

+  2,

+  248,

+  91,

+  213,

+  36,

+  120,

+  162,

+  191,

+  69,

+  15,

+  206,

+  235,

+  80,

+  37,

+  182,

+  85,

+  74,

+  236,

+  120,

+  104,

+  248,

+  108,

+  253,

+  76,

+  150,

+  119,

+  66,

+  200,

+  207,

+  236,

+  93,

+  253,

+  100,

+  146,

+  226,

+  130,

+  197,

+  131,

+  141,

+  12,

+  5,

+  80,

+  180,

+  208,

+  136,

+  249,

+  220,

+  164,

+  86,

+  172,

+  80,

+  35,

+  198,

+  104,

+  224,

+  132,

+  202,

+  234,

+  145,

+  189,

+  68,

+  130,

+  118,

+  196,

+  214,

+  109,

+  143,

+  21,

+  63,

+  197,

+  109,

+  139,

+  253,

+  244,

+  94,

+  12,

+  46,

+  145,

+  94,

+  173,

+  129,

+  78,

+  151,

+  232,

+  24,

+  127,

+  49,

+  65,

+  27,

+  184,

+  248,

+  137,

+  78,

+  160,

+  254,

+  229,

+  103,

+  65,

+  44,

+  17,

+  71,

+  140,

+  173,

+  118,

+  71,

+  189,

+  145,

+  90,

+  211,

+  113,

+  200,

+  83,

+  172,

+  4,

+  108,

+  143,

+  65,

+  238,

+  8,

+  176,

+  30,

+  36,

+  168,

+  22,

+  112,

+  197,

+  73,

+  50,

+  247,

+  83,

+  17,

+  148,

+  230,

+  165,

+  251,

+  62,

+  10,

+  124,

+  248,

+  75,

+  151,

+  12,

+  205,

+  83,

+  108,

+  160,

+  64,

+  196,

+  110,

+  89,

+  19,

+  189,

+  229,

+  247,

+  95,

+  211,

+  84,

+  48,

+  225,

+  112,

+  223,

+  143,

+  249,

+  156,

+  167,

+  220,

+  137,

+  108,

+  63,

+  90,

+  254,

+  51,

+  240,

+  190,

+  249,

+  213,

+  106,

+  245,

+  167,

+  169,

+  93,

+  110,

+  246,

+  205,

+  20,

+  33,

+  34,

+  183,

+  210,

+  67,

+  251,

+  221,

+  24,

+  15,

+  137,

+  206,

+  195,

+  115,

+  212,

+  208,

+  104,

+  49,

+  177,

+  26,

+  238,

+  176,

+  116,

+  90,

+  106,

+  16,

+  7,

+  100,

+  157,

+  35,

+  165,

+  75,

+  161,

+  232,

+  179,

+  5,

+  140,

+  35,

+  61,

+  205,

+  18,

+  247,

+  97,

+  2,

+  23,

+  42,

+  94,

+  229,

+  197,

+  71,

+  45,

+  183,

+  213,

+  11,

+  242,

+  67,

+  40,

+  52,

+  168,

+  87,

+  71,

+  76,

+  254,

+  205,

+  236,

+  124,

+  190,

+  224,

+  46,

+  217,

+  12,

+  29,

+  44,

+  137,

+  242,

+  195,

+  233,

+  71,

+  205,

+  89,

+  97,

+  175,

+  189,

+  27,

+  181,

+  224,

+  1,

+  11,

+  166,

+  211,

+  243,

+  227,

+  254,

+  11,

+  10,

+  234,

+  89,

+  170,

+  203,

+  129,

+  74,

+  30,

+  147,

+  205,

+  21,

+  114,

+  163,

+  238,

+  164,

+  217,

+  187,

+  138,

+  64,

+  238,

+  244,

+  119,

+  18,

+  23,

+  223,

+  180,

+  35,

+  148,

+  24,

+  145,

+  105,

+  18,

+  83,

+  171,

+  214,

+  10,

+  32,

+  195,

+  233,

+  55,

+  235,

+  14,

+  193,

+  225,

+  227,

+  212,

+  210,

+  2,

+  158,

+  19,

+  87,

+  250,

+  216,

+  80,

+  113,

+  90,

+  85,

+  83,

+  133,

+  162,

+  10,

+  91,

+  189,

+  226,

+  212,

+  124,

+  6,

+  152,

+  55,

+  72,

+  50,

+  2,

+  108,

+  241,

+  220,

+  147,

+  108,

+  100,

+  125,

+  18,

+  48,

+  88,

+  180,

+  135,

+  93,

+  48,

+  239,

+  63,

+  141,

+  110,

+  34,

+  110,

+  247,

+  213,

+  199,

+  28,

+  100,

+  55,

+  247,

+  82,

+  246,

+  17,

+  173,

+  12,

+  75,

+  88,

+  231,

+  4,

+  140,

+  97,

+  254,

+  34,

+  117,

+  152,

+  90,

+  121,

+  215,

+  227,

+  178,

+  79,

+  234,

+  102,

+  36,

+  58,

+  152,

+  73,

+  209,

+  253,

+  222,

+  92,

+  9,

+  1,

+  229,

+  223,

+  23,

+  140,

+  159,

+  103,

+  47,

+  107,

+  73,

+  217,

+  36,

+  240,

+  9,

+  116,

+  72,

+  236,

+  52,

+  79,

+  210,

+  19,

+  159,

+  118,

+  199,

+  164,

+  244,

+  137,

+  188,

+  113,

+  50,

+  74,

+  110,

+  204,

+  169,

+  201,

+  123,

+  229,

+  204,

+  214,

+  251,

+  202,

+  179,

+  123,

+  242,

+  169,

+  65,

+  174,

+  207,

+  179,

+  116,

+  171,

+  53,

+  90,

+  230,

+  31,

+  153,

+  107,

+  157,

+  148,

+  143,

+  24,

+  128,

+  226,

+  146,

+  200,

+  208,

+  251,

+  169,

+  151,

+  105,

+  31,

+  34,

+  37,

+  201,

+  202,

+  164,

+  172,

+  30,

+  46,

+  187,

+  201,

+  14,

+  38,

+  238,

+  210,

+  10,

+  205,

+  174,

+  139,

+  176,

+  219,

+  246,

+  134,

+  170,

+  126,

+  249,

+  125,

+  221,

+  164,

+  142,

+  17,

+  75,

+  120,

+  41,

+  20,

+  234,

+  143,

+  133,

+  44,

+  121,

+  182,

+  93,

+  34,

+  60,

+  62,

+  180,

+  235,

+  84,

+  212,

+  237,

+  133,

+  138,

+  205,

+  48,

+  238,

+  181,

+  154,

+  144,

+  160,

+  58,

+  151,

+  192,

+  100,

+  165,

+  179,

+  100,

+  16,

+  180,

+  37,

+  121,

+  82,

+  61,

+  10,

+  222,

+  183,

+  196,

+  174,

+  223,

+  11,

+  253,

+  103,

+  185,

+  211,

+  238,

+  153,

+  222,

+  191,

+  108,

+  215,

+  91,

+  120,

+  18,

+  102,

+  246,

+  40,

+  179,

+  22,

+  124,

+  128,

+  29,

+  16,

+  158,

+  5,

+  167,

+  211,

+  51,

+  101,

+  17,

+  127,

+  127,

+  1,

+  77,

+  26,

+  90,

+  116,

+  240,

+  138,

+  221,

+  200,

+  23,

+  42,

+  126,

+  182,

+  126,

+  148,

+  99,

+  43,

+  116,

+  238,

+  88,

+  187,

+  53,

+  111,

+  242,

+  131,

+  110,

+  231,

+  186,

+  5,

+  134,

+  61,

+  180,

+  244,

+  252,

+  170,

+  133,

+  239,

+  128,

+  79,

+  121,

+  175,

+  102,

+  69,

+  53,

+  141,

+  132,

+  201,

+  235,

+  157,

+  71,

+  247,

+  207,

+  151,

+  131,

+  97,

+  233,

+  162,

+  153,

+  31,

+  229,

+  159,

+  152,

+  246,

+  118,

+  190,

+  158,

+  181,

+  192,

+  214,

+  217,

+  202,

+  13,

+  110,

+  214,

+  72,

+  87,

+  30,

+  14,

+  170,

+  141,

+  73,

+  127,

+  245,

+  237,

+  62,

+  47,

+  234,

+  40,

+  99,

+  165,

+  207,

+  145,

+  92,

+  89,

+  51,

+  108,

+  34,

+  107,

+  149,

+  251,

+  38,

+  57,

+  147,

+  108,

+  124,

+  99,

+  189,

+  14,

+  190,

+  112,

+  53,

+  27,

+  212,

+  129,

+  243,

+  248,

+  250,

+  244,

+  140,

+  229,

+  110,

+  129,

+  243,

+  180,

+  100,

+  11,

+  92,

+  251,

+  246,

+  133,

+  99,

+  214,

+  246,

+  8,

+  207,

+  235,

+  67,

+  18,

+  203,

+  159,

+  79,

+  82,

+  111,

+  42,

+  128,

+  60,

+  245,

+  44,

+  50,

+  73,

+  147,

+  237,

+  117,

+  155,

+  235,

+  142,

+  254,

+  220,

+  34,

+  158,

+  238,

+  239,

+  183,

+  61,

+  129,

+  112,

+  160,

+  234,

+  150,

+  180,

+  253,

+  7,

+  181,

+  149,

+  84,

+  14,

+  250,

+  106,

+  170,

+  138,

+  95,

+  182,

+  115,

+  106,

+  229,

+  22,

+  107,

+  113,

+  63,

+  235,

+  191,

+  79,

+  67,

+  105,

+  131,

+  162,

+  1,

+  211,

+  189,

+  117,

+  244,

+  191,

+  245,

+  58,

+  242,

+  138,

+  164,

+  152,

+  122,

+  23,

+  198,

+  171,

+  35,

+  40,

+  213,

+  57,

+  200,

+  57,

+  172,

+  47,

+  115,

+  96,

+  7,

+  107,

+  195,

+  81,

+  96,

+  189,

+  94,

+  206,

+  172,

+  41,

+  203,

+  90,

+  5,

+  217,

+  147,

+  101,

+  62,

+  69,

+  219,

+  190,

+  19,

+  182,

+  63,

+  156,

+  97,

+  236,

+  142,

+  86,

+  142,

+  88,

+  62,

+  189,

+  154,

+  228,

+  225,

+  230,

+  215,

+  46,

+  177,

+  123,

+  58,

+  127,

+  185,

+  54,

+  37,

+  241,

+  220,

+  39,

+  244,

+  76,

+  63,

+  191,

+  232,

+  244,

+  211,

+  156,

+  88,

+  21,

+  79,

+  49,

+  239,

+  122,

+  27,

+  231,

+  62,

+  161,

+  242,

+  162,

+  91,

+  134,

+  98,

+  118,

+  119,

+  146,

+  99,

+  81,

+  131,

+  231,

+  125,

+  219,

+  30,

+  237,

+  106,

+  140,

+  247,

+  255,

+  190,

+  130,

+  46,

+  42,

+  133,

+  216,

+  127,

+  216,

+  73,

+  232,

+  109,

+  187,

+  220,

+  13,

+  98,

+  97,

+  245,

+  125,

+  32,

+  237,

+  53,

+  210,

+  211,

+  115,

+  101,

+  248,

+  248,

+  178,

+  167,

+  203,

+  108,

+  18,

+  147,

+  18,

+  30,

+  247,

+  254,

+  221,

+  65,

+  126,

+  173,

+  98,

+  62,

+  170,

+  204,

+  147,

+  129,

+  93,

+  86,

+  90,

+  90,

+  154,

+  1,

+  157,

+  176,

+  255,

+  85,

+  108,

+  134,

+  87,

+  107,

+  183,

+  37,

+  149,

+  185,

+  181,

+  168,

+  249,

+  248,

+  102,

+  149,

+  169,

+  179,

+  89,

+  170,

+  42,

+  192,

+  113,

+  44,

+  97,

+  213,

+  3,

+  7,

+  42,

+  14,

+  151,

+  151,

+  90,

+  234,

+  206,

+  142,

+  248,

+  249,

+  37,

+  98,

+  111,

+  175,

+  16,

+  94,

+  207,

+  138,

+  63,

+  255,

+  20,

+  90,

+  247,

+  55,

+  255,

+  217,

+  231,

+  169,

+  6,

+  250,

+  82,

+  202,

+  67,

+  186,

+  138,

+  212,

+  229,

+  123,

+  82,

+  4,

+  233,

+  255,

+  190,

+  0,

+  223,

+  198,

+  141,

+  15,

+  149,

+  146,

+  254,

+  63,

+  250,

+  245,

+  201,

+  88,

+  82,

+  251,

+  98,

+  212,

+  224,

+  127,

+  253,

+  84,

+  223,

+  187,

+  153,

+  109,

+  226,

+  75,

+  86,

+  245,

+  255,

+  232,

+  95,

+  113,

+  182,

+  235,

+  178,

+  251,

+  132,

+  183,

+  127,

+  52,

+  88,

+  8,

+  32,

+  211,

+  19,

+  176,

+  14,

+  22,

+  38,

+  127,

+  119,

+  49,

+  12,

+  157,

+  59,

+  96,

+  155,

+  211,

+  38,

+  33,

+  71,

+  87,

+  196,

+  238,

+  32,

+  190,

+  244,

+  82,

+  253,

+  188,

+  89,

+  80,

+  4,

+  233,

+  253,

+  47,

+  233,

+  147,

+  5,

+  48,

+  34,

+  87,

+  55,

+  254,

+  143,

+  124,

+  176,

+  11,

+  45,

+  146,

+  130,

+  252,

+  153,

+  255,

+  247,

+  180,

+  209,

+  111,

+  147,

+  63,

+  70,

+  158,

+  26,

+  238,

+  95,

+  8,

+  130,

+  244,

+  232,

+  195,

+  23,

+  198,

+  64,

+  4,

+  20,

+  246,

+  53,

+  47,

+  98,

+  111,

+  172,

+  225,

+  100,

+  113,

+  47,

+  244,

+  19,

+  39,

+  65,

+  193,

+  187,

+  110,

+  123,

+  15,

+  180,

+  47,

+  241,

+  101,

+  152,

+  106,

+  23,

+  60,

+  165,

+  33,

+  95,

+  71,

+  255,

+  71,

+  154,

+  10,

+  253,

+  76,

+  182,

+  101,

+  245,

+  239,

+  51,

+  254,

+  47,

+  253,

+  204,

+  216,

+  241,

+  46,

+  28,

+  28,

+  11,

+  121,

+  27,

+  228,

+  122,

+  5,

+  168,

+  80,

+  63,

+  158,

+  57,

+  128,

+  63,

+  195,

+  105,

+  111,

+  212,

+  168,

+  27,

+  51,

+  8,

+  107,

+  195,

+  118,

+  197,

+  126,

+  188,

+  191,

+  204,

+  223,

+  95,

+  172,

+  198,

+  158,

+  38,

+  238,

+  111,

+  188,

+  175,

+  45,

+  140,

+  143,

+  238,

+  20,

+  35,

+  42,

+  102,

+  226,

+  128,

+  63,

+  251,

+  255,

+  166,

+  191,

+  155,

+  232,

+  187,

+  142,

+  135,

+  26,

+  253,

+  191,

+  180,

+  187,

+  139,

+  3,

+  16,

+  78,

+  175,

+  216,

+  17,

+  154,

+  251,

+  47,

+  32,

+  135,

+  180,

+  130,

+  79,

+  95,

+  174,

+  148,

+  152,

+  24,

+  107,

+  97,

+  158,

+  188,

+  200,

+  51,

+  177,

+  239,

+  23,

+  149,

+  233,

+  255,

+  179,

+  222,

+  61,

+  119,

+  27,

+  207,

+  133,

+  171,

+  23,

+  78,

+  127,

+  255,

+  69,

+  106,

+  238,

+  10,

+  193,

+  15,

+  222,

+  19,

+  24,

+  238,

+  195,

+  60,

+  126,

+  196,

+  184,

+  236,

+  236,

+  211,

+  127,

+  167,

+  191,

+  190,

+  226,

+  248,

+  165,

+  101,

+  137,

+  9,

+  108,

+  39,

+  234,

+  205,

+  101,

+  60,

+  209,

+  199,

+  112,

+  96,

+  170,

+  86,

+  29,

+  211,

+  253,

+  151,

+  167,

+  148,

+  251,

+  119,

+  90,

+  177,

+  51,

+  168,

+  254,

+  53,

+  220,

+  246,

+  88,

+  106,

+  178,

+  223,

+  207,

+  119,

+  223,

+  52,

+  246,

+  189,

+  63,

+  241,

+  123,

+  255,

+  189,

+  80,

+  59,

+  153,

+  45,

+  7,

+  111,

+  253,

+  215,

+  246,

+  72,

+  79,

+  178,

+  187,

+  206,

+  112,

+  55,

+  194,

+  106,

+  157,

+  207,

+  220,

+  93,

+  199,

+  90,

+  78,

+  175,

+  183,

+  253,

+  91,

+  203,

+  80,

+  199,

+  119,

+  171,

+  160,

+  8,

+  8,

+  126,

+  85,

+  60,

+  182,

+  81,

+  125,

+  87,

+  21,

+  93,

+  51,

+  117,

+  14,

+  38,

+  152,

+  231,

+  113,

+  220,

+  209,

+  36,

+  108,

+  123,

+  175,

+  247,

+  198,

+  194,

+  111,

+  87,

+  139,

+  153,

+  126,

+  104,

+  218,

+  173,

+  20,

+  62,

+  253,

+  116,

+  23,

+  127,

+  151,

+  217,

+  146,

+  27,

+  127,

+  143,

+  191,

+  103,

+  48,

+  121,

+  179,

+  114,

+  150,

+  195,

+  203,

+  213,

+  17,

+  94,

+  147,

+  154,

+  205,

+  34,

+  106,

+  76,

+  157,

+  28,

+  22,

+  92,

+  127,

+  127,

+  39,

+  241,

+  233,

+  167,

+  255,

+  245,

+  13,

+  213,

+  42,

+  70,

+  174,

+  1,

+  235,

+  255,

+  86,

+  67,

+  146,

+  139,

+  191,

+  225,

+  57,

+  239,

+  67,

+  23,

+  179,

+  177,

+  91,

+  226,

+  53,

+  253,

+  221,

+  65,

+  237,

+  79,

+  230,

+  151,

+  151,

+  118,

+  55,

+  60,

+  183,

+  157,

+  171,

+  96,

+  215,

+  233,

+  191,

+  219,

+  238,

+  249,

+  139,

+  105,

+  178,

+  13,

+  124,

+  236,

+  203,

+  74,

+  68,

+  158,

+  254,

+  230,

+  191,

+  113,

+  248,

+  35,

+  195,

+  202,

+  158,

+  115,

+  23,

+  159,

+  88,

+  5,

+  62,

+  152,

+  203,

+  112,

+  178,

+  229,

+  217,

+  47,

+  25,

+  88,

+  240,

+  27,

+  118,

+  20,

+  124,

+  49,

+  203,

+  231,

+  127,

+  241,

+  4,

+  3,

+  124,

+  41,

+  177,

+  234,

+  186,

+  101,

+  29,

+  118,

+  193,

+  251,

+  239,

+  238,

+  201,

+  151,

+  59,

+  195,

+  229,

+  216,

+  111,

+  237,

+  232,

+  201,

+  103,

+  89,

+  103,

+  113,

+  126,

+  225,

+  95,

+  139,

+  27,

+  47,

+  183,

+  54,

+  236,

+  239,

+  191,

+  110,

+  205,

+  180,

+  227,

+  32,

+  99,

+  110,

+  78,

+  208,

+  204,

+  34,

+  96,

+  249,

+  5,

+  2,

+  194,

+  121,

+  6,

+  191,

+  133,

+  63,

+  153,

+  88,

+  48,

+  93,

+  197,

+  18,

+  161,

+  119,

+  95,

+  104,

+  56,

+  52,

+  29,

+  61,

+  242,

+  126,

+  117,

+  128,

+  223,

+  127,

+  179,

+  159,

+  89,

+  150,

+  130,

+  53,

+  95,

+  50,

+  46,

+  28,

+  75,

+  93,

+  115,

+  127,

+  231,

+  223,

+  135,

+  15,

+  222,

+  247,

+  70,

+  190,

+  185,

+  199,

+  119,

+  225,

+  248,

+  139,

+  187,

+  105,

+  115,

+  246,

+  173,

+  159,

+  236,

+  228,

+  224,

+  32,

+  146,

+  145,

+  108,

+  253,

+  127,

+  247,

+  100,

+  170,

+  128,

+  224,

+  174,

+  127,

+  242,

+  230,

+  211,

+  147,

+  99,

+  239,

+  55,

+  9,

+  157,

+  100,

+  0,

+  2,

+  79,

+  87,

+  63,

+  151,

+  117,

+  78,

+  9,

+  77,

+  0,

+  80,

+  75,

+  3,

+  4,

+  20,

+  0,

+  0,

+  8,

+  8,

+  0,

+  187,

+  182,

+  42,

+  68,

+  34,

+  236,

+  10,

+  177,

+  219,

+  6,

+  0,

+  0,

+  221,

+  61,

+  0,

+  0,

+  12,

+  0,

+  0,

+  0,

+  97,

+  114,

+  105,

+  97,

+  108,

+  95,

+  52,

+  56,

+  46,

+  102,

+  110,

+  116,

+  189,

+  91,

+  219,

+  110,

+  227,

+  54,

+  16,

+  125,

+  223,

+  175,

+  16,

+  252,

+  188,

+  219,

+  112,

+  200,

+  225,

+  13,

+  72,

+  22,

+  232,

+  219,

+  254,

+  65,

+  31,

+  11,

+  213,

+  151,

+  68,

+  88,

+  71,

+  14,

+  98,

+  167,

+  221,

+  246,

+  235,

+  43,

+  138,

+  116,

+  162,

+  75,

+  168,

+  204,

+  72,

+  177,

+  177,

+  64,

+  214,

+  118,

+  116,

+  124,

+  56,

+  195,

+  153,

+  195,

+  225,

+  144,

+  185,

+  221,

+  29,

+  234,

+  211,

+  247,

+  47,

+  69,

+  113,

+  91,

+  213,

+  187,

+  67,

+  177,

+  43,

+  215,

+  219,

+  187,

+  213,

+  239,

+  207,

+  85,

+  185,

+  95,

+  21,

+  199,

+  234,

+  191,

+  230,

+  13,

+  186,

+  85,

+  241,

+  215,

+  97,

+  191,

+  185,

+  91,

+  137,

+  85,

+  81,

+  157,

+  202,

+  125,

+  181,

+  110,

+  95,

+  174,

+  31,

+  202,

+  231,

+  227,

+  246,

+  116,

+  183,

+  90,

+  21,

+  47,

+  117,

+  181,

+  62,

+  108,

+  182,

+  225,

+  229,

+  241,

+  244,

+  188,

+  61,

+  173,

+  31,

+  126,

+  220,

+  173,

+  64,

+  52,

+  15,

+  29,

+  31,

+  15,

+  135,

+  211,

+  67,

+  243,

+  102,

+  85,

+  148,

+  101,

+  251,

+  223,

+  83,

+  185,

+  217,

+  84,

+  245,

+  253,

+  221,

+  74,

+  126,

+  109,

+  255,

+  53,

+  207,

+  60,

+  149,

+  235,

+  246,

+  19,

+  241,

+  181,

+  65,

+  28,

+  94,

+  78,

+  251,

+  170,

+  222,

+  6,

+  138,

+  155,

+  118,

+  92,

+  235,

+  195,

+  227,

+  227,

+  161,

+  46,

+  194,

+  135,

+  63,

+  182,

+  213,

+  253,

+  67,

+  195,

+  168,

+  117,

+  51,

+  164,

+  242,

+  24,

+  6,

+  167,

+  26,

+  252,

+  186,

+  220,

+  111,

+  255,

+  104,

+  190,

+  16,

+  180,

+  77,

+  239,

+  26,

+  122,

+  244,

+  129,

+  235,

+  126,

+  123,

+  76,

+  172,

+  235,

+  159,

+  219,

+  205,

+  219,

+  151,

+  182,

+  191,

+  9,

+  175,

+  210,

+  235,

+  162,

+  138,

+  246,

+  237,

+  170,

+  125,

+  243,

+  173,

+  101,

+  176,

+  255,

+  79,

+  116,

+  191,

+  61,

+  213,

+  247,

+  9,

+  112,

+  243,

+  138,

+  184,

+  109,

+  13,

+  47,

+  214,

+  135,

+  151,

+  186,

+  25,

+  138,

+  135,

+  85,

+  250,

+  154,

+  240,

+  113,

+  251,

+  53,

+  190,

+  25,

+  197,

+  175,

+  102,

+  56,

+  171,

+  226,

+  223,

+  246,

+  231,

+  63,

+  213,

+  38,

+  184,

+  64,

+  54,

+  67,

+  125,

+  72,

+  6,

+  72,

+  211,

+  60,

+  114,

+  216,

+  237,

+  90,

+  255,

+  133,

+  7,

+  207,

+  175,

+  161,

+  121,

+  243,

+  171,

+  220,

+  252,

+  93,

+  214,

+  97,

+  30,

+  164,

+  141,

+  54,

+  36,

+  127,

+  215,

+  251,

+  230,

+  1,

+  29,

+  7,

+  212,

+  35,

+  116,

+  145,

+  208,

+  14,

+  25,

+  229,

+  27,

+  163,

+  210,

+  29,

+  70,

+  213,

+  97,

+  84,

+  115,

+  8,

+  125,

+  75,

+  168,

+  97,

+  130,

+  144,

+  106,

+  34,

+  146,

+  24,

+  219,

+  96,

+  106,

+  40,

+  173,

+  166,

+  218,

+  40,

+  23,

+  218,

+  8,

+  2,

+  90,

+  198,

+  96,

+  235,

+  149,

+  230,

+  17,

+  132,

+  108,

+  41,

+  33,

+  56,

+  165,

+  199,

+  217,

+  60,

+  253,

+  190,

+  149,

+  34,

+  103,

+  37,

+  40,

+  34,

+  165,

+  138,

+  148,

+  56,

+  53,

+  151,

+  234,

+  147,

+  205,

+  196,

+  200,

+  105,

+  70,

+  147,

+  9,

+  23,

+  10,

+  88,

+  16,

+  58,

+  82,

+  58,

+  55,

+  160,

+  212,

+  92,

+  70,

+  0,

+  34,

+  163,

+  137,

+  140,

+  126,

+  104,

+  36,

+  136,

+  55,

+  74,

+  236,

+  82,

+  126,

+  147,

+  139,

+  57,

+  147,

+  242,

+  8,

+  187,

+  220,

+  177,

+  212,

+  188,

+  76,

+  218,

+  163,

+  196,

+  213,

+  28,

+  235,

+  19,

+  227,

+  208,

+  72,

+  133,

+  153,

+  196,

+  84,

+  217,

+  136,

+  69,

+  65,

+  227,

+  4,

+  145,

+  20,

+  86,

+  77,

+  56,

+  150,

+  200,

+  73,

+  13,

+  89,

+  136,

+  250,

+  35,

+  189,

+  25,

+  114,

+  226,

+  197,

+  4,

+  8,

+  162,

+  0,

+  41,

+  41,

+  231,

+  44,

+  37,

+  51,

+  57,

+  163,

+  2,

+  41,

+  52,

+  115,

+  164,

+  125,

+  38,

+  103,

+  84,

+  32,

+  101,

+  135,

+  81,

+  11,

+  252,

+  24,

+  2,

+  67,

+  228,

+  140,

+  18,

+  164,

+  156,

+  161,

+  198,

+  16,

+  44,

+  94,

+  53,

+  33,

+  138,

+  16,

+  138,

+  225,

+  34,

+  6,

+  157,

+  69,

+  44,

+  228,

+  205,

+  187,

+  156,

+  56,

+  103,

+  65,

+  129,

+  168,

+  65,

+  56,

+  90,

+  195,

+  104,

+  169,

+  50,

+  75,

+  221,

+  33,

+  138,

+  16,

+  162,

+  157,

+  90,

+  171,

+  117,

+  206,

+  181,

+  179,

+  132,

+  15,

+  162,

+  12,

+  161,

+  29,

+  166,

+  138,

+  210,

+  25,

+  78,

+  145,

+  229,

+  12,

+  16,

+  10,

+  167,

+  140,

+  50,

+  164,

+  133,

+  167,

+  218,

+  41,

+  22,

+  219,

+  41,

+  163,

+  12,

+  105,

+  133,

+  19,

+  156,

+  234,

+  115,

+  125,

+  43,

+  163,

+  12,

+  105,

+  237,

+  167,

+  10,

+  204,

+  79,

+  229,

+  52,

+  49,

+  59,

+  181,

+  27,

+  42,

+  188,

+  82,

+  220,

+  210,

+  75,

+  73,

+  26,

+  99,

+  204,

+  77,

+  3,

+  195,

+  146,

+  36,

+  36,

+  199,

+  187,

+  140,

+  184,

+  148,

+  49,

+  166,

+  166,

+  25,

+  41,

+  173,

+  2,

+  66,

+  173,

+  55,

+  39,

+  98,

+  77,

+  76,

+  76,

+  99,

+  71,

+  19,

+  233,

+  217,

+  54,

+  18,

+  25,

+  99,

+  90,

+  90,

+  16,

+  215,

+  242,

+  170,

+  77,

+  59,

+  19,

+  229,

+  38,

+  214,

+  105,

+  26,

+  163,

+  244,

+  52,

+  198,

+  152,

+  146,

+  214,

+  12,

+  83,

+  82,

+  229,

+  106,

+  246,

+  108,

+  209,

+  165,

+  104,

+  10,

+  107,

+  99,

+  66,

+  90,

+  63,

+  178,

+  209,

+  94,

+  104,

+  30,

+  109,

+  172,

+  10,

+  220,

+  104,

+  83,

+  171,

+  185,

+  132,

+  196,

+  133,

+  203,

+  198,

+  146,

+  192,

+  141,

+  116,

+  14,

+  60,

+  65,

+  231,

+  230,

+  72,

+  142,

+  141,

+  146,

+  227,

+  180,

+  94,

+  158,

+  28,

+  196,

+  80,

+  141,

+  146,

+  227,

+  28,

+  185,

+  212,

+  194,

+  133,

+  27,

+  47,

+  27,

+  37,

+  199,

+  143,

+  210,

+  49,

+  43,

+  171,

+  89,

+  70,

+  98,

+  173,

+  110,

+  163,

+  228,

+  120,

+  212,

+  87,

+  11,

+  213,

+  40,

+  57,

+  222,

+  226,

+  148,

+  141,

+  52,

+  89,

+  165,

+  121,

+  213,

+  69,

+  201,

+  1,

+  49,

+  46,

+  4,

+  236,

+  133,

+  66,

+  199,

+  65,

+  162,

+  28,

+  201,

+  92,

+  119,

+  219,

+  21,

+  126,

+  249,

+  121,

+  86,

+  166,

+  110,

+  136,

+  24,

+  59,

+  86,

+  92,

+  104,

+  42,

+  93,

+  234,

+  134,

+  180,

+  187,

+  247,

+  190,

+  99,

+  29,

+  123,

+  46,

+  137,

+  142,

+  77,

+  205,

+  16,

+  80,

+  147,

+  148,

+  52,

+  225,

+  161,

+  173,

+  31,

+  46,

+  53,

+  67,

+  192,

+  152,

+  107,

+  229,

+  136,

+  75,

+  221,

+  144,

+  113,

+  59,

+  68,

+  201,

+  11,

+  213,

+  87,

+  206,

+  166,

+  102,

+  154,

+  28,

+  38,

+  9,

+  106,

+  174,

+  99,

+  145,

+  104,

+  165,

+  75,

+  148,

+  214,

+  92,

+  205,

+  202,

+  40,

+  62,

+  160,

+  198,

+  10,

+  123,

+  41,

+  74,

+  159,

+  212,

+  71,

+  33,

+  94,

+  43,

+  98,

+  85,

+  202,

+  75,

+  53,

+  146,

+  2,

+  115,

+  161,

+  114,

+  192,

+  161,

+  61,

+  155,

+  233,

+  134,

+  59,

+  60,

+  100,

+  147,

+  106,

+  90,

+  111,

+  75,

+  167,

+  201,

+  196,

+  201,

+  110,

+  154,

+  204,

+  48,

+  194,

+  28,

+  59,

+  149,

+  61,

+  83,

+  142,

+  218,

+  105,

+  93,

+  45,

+  176,

+  148,

+  98,

+  18,

+  105,

+  148,

+  58,

+  101,

+  9,

+  142,

+  178,

+  36,

+  183,

+  115,

+  94,

+  108,

+  165,

+  57,

+  119,

+  185,

+  71,

+  219,

+  187,

+  236,

+  46,

+  118,

+  233,

+  249,

+  1,

+  166,

+  213,

+  75,

+  139,

+  225,

+  130,

+  9,

+  157,

+  240,

+  1,

+  18,

+  37,

+  208,

+  178,

+  4,

+  83,

+  196,

+  106,

+  57,

+  116,

+  44,

+  200,

+  76,

+  207,

+  57,

+  223,

+  141,

+  165,

+  117,

+  181,

+  48,

+  149,

+  5,

+  26,

+  197,

+  181,

+  40,

+  125,

+  90,

+  189,

+  180,

+  158,

+  148,

+  159,

+  110,

+  99,

+  189,

+  215,

+  212,

+  194,

+  57,

+  147,

+  153,

+  226,

+  71,

+  187,

+  169,

+  46,

+  136,

+  84,

+  25,

+  51,

+  125,

+  143,

+  210,

+  209,

+  40,

+  147,

+  153,

+  102,

+  178,

+  119,

+  151,

+  11,

+  31,

+  57,

+  199,

+  179,

+  38,

+  77,

+  166,

+  145,

+  83,

+  86,

+  130,

+  166,

+  245,

+  238,

+  136,

+  102,

+  166,

+  194,

+  192,

+  160,

+  207,

+  139,

+  65,

+  86,

+  99,

+  231,

+  104,

+  1,

+  190,

+  158,

+  62,

+  77,

+  200,

+  15,

+  200,

+  79,

+  165,

+  76,

+  34,

+  107,

+  140,

+  154,

+  232,

+  55,

+  247,

+  202,

+  202,

+  197,

+  7,

+  123,

+  242,

+  108,

+  230,

+  168,

+  247,

+  130,

+  153,

+  196,

+  204,

+  47,

+  153,

+  180,

+  186,

+  64,

+  157,

+  25,

+  157,

+  158,

+  136,

+  88,

+  80,

+  36,

+  197,

+  163,

+  229,

+  165,

+  74,

+  11,

+  166,

+  21,

+  19,

+  11,

+  38,

+  141,

+  145,

+  38,

+  177,

+  6,

+  207,

+  132,

+  118,

+  162,

+  168,

+  164,

+  233,

+  29,

+  18,

+  107,

+  159,

+  36,

+  4,

+  118,

+  172,

+  119,

+  134,

+  27,

+  60,

+  68,

+  185,

+  83,

+  41,

+  41,

+  173,

+  155,

+  186,

+  196,

+  128,

+  57,

+  191,

+  138,

+  57,

+  87,

+  10,

+  146,

+  99,

+  221,

+  248,

+  236,

+  178,

+  179,

+  217,

+  107,

+  155,

+  238,

+  31,

+  23,

+  149,

+  196,

+  210,

+  39,

+  213,

+  33,

+  78,

+  78,

+  118,

+  39,

+  63,

+  115,

+  179,

+  7,

+  50,

+  45,

+  36,

+  206,

+  76,

+  157,

+  60,

+  33,

+  169,

+  118,

+  166,

+  30,

+  60,

+  201,

+  243,

+  217,

+  247,

+  168,

+  222,

+  186,

+  24,

+  167,

+  79,

+  43,

+  137,

+  243,

+  114,

+  234,

+  244,

+  27,

+  73,

+  101,

+  1,

+  109,

+  54,

+  125,

+  242,

+  172,

+  23,

+  72,

+  165,

+  132,

+  133,

+  148,

+  42,

+  149,

+  120,

+  30,

+  134,

+  142,

+  237,

+  48,

+  138,

+  92,

+  94,

+  186,

+  57,

+  11,

+  137,

+  203,

+  49,

+  94,

+  174,

+  142,

+  77,

+  18,

+  235,

+  71,

+  55,

+  68,

+  32,

+  71,

+  169,

+  23,

+  82,

+  106,

+  113,

+  190,

+  58,

+  97,

+  230,

+  156,

+  57,

+  205,

+  162,

+  76,

+  1,

+  235,

+  29,

+  92,

+  203,

+  177,

+  90,

+  166,

+  203,

+  26,

+  194,

+  80,

+  15,

+  14,

+  22,

+  91,

+  169,

+  18,

+  165,

+  146,

+  115,

+  172,

+  156,

+  83,

+  57,

+  107,

+  76,

+  148,

+  218,

+  94,

+  205,

+  177,

+  58,

+  81,

+  78,

+  174,

+  94,

+  189,

+  83,

+  239,

+  197,

+  86,

+  198,

+  5,

+  83,

+  130,

+  184,

+  158,

+  149,

+  233,

+  174,

+  15,

+  204,

+  155,

+  203,

+  89,

+  101,

+  65,

+  140,

+  216,

+  184,

+  114,

+  9,

+  150,

+  216,

+  17,

+  181,

+  238,

+  246,

+  166,

+  189,

+  92,

+  217,

+  190,

+  252,

+  185,

+  125,

+  174,

+  171,

+  250,

+  254,

+  237,

+  166,

+  165,

+  61,

+  223,

+  180,

+  76,

+  191,

+  41,

+  118,

+  213,

+  243,

+  49,

+  53,

+  68,

+  142,

+  219,

+  245,

+  161,

+  78,

+  199,

+  184,

+  229,

+  99,

+  4,

+  124,

+  83,

+  175,

+  38,

+  76,

+  32,

+  194,

+  142,

+  238,

+  21,

+  1,

+  36,

+  132,

+  167,

+  32,

+  130,

+  110,

+  158,

+  17,

+  216,

+  69,

+  96,

+  14,

+  17,

+  198,

+  126,

+  70,

+  4,

+  190,

+  143,

+  237,

+  232,

+  34,

+  122,

+  118,

+  144,

+  56,

+  66,

+  79,

+  150,

+  137,

+  176,

+  29,

+  132,

+  36,

+  33,

+  216,

+  150,

+  183,

+  151,

+  57,

+  62,

+  118,

+  111,

+  31,

+  226,

+  217,

+  144,

+  112,

+  173,

+  225,

+  99,

+  72,

+  232,

+  1,

+  190,

+  78,

+  98,

+  215,

+  193,

+  154,

+  132,

+  48,

+  92,

+  4,

+  45,

+  124,

+  67,

+  29,

+  247,

+  110,

+  160,

+  72,

+  10,

+  130,

+  22,

+  40,

+  61,

+  132,

+  97,

+  35,

+  44,

+  27,

+  225,

+  185,

+  136,

+  254,

+  20,

+  102,

+  77,

+  119,

+  34,

+  227,

+  44,

+  160,

+  32,

+  122,

+  147,

+  110,

+  72,

+  8,

+  195,

+  69,

+  244,

+  38,

+  61,

+  107,

+  186,

+  99,

+  107,

+  86,

+  15,

+  97,

+  216,

+  8,

+  203,

+  70,

+  144,

+  178,

+  48,

+  140,

+  157,

+  57,

+  31,

+  200,

+  77,

+  194,

+  30,

+  130,

+  148,

+  82,

+  61,

+  132,

+  225,

+  114,

+  104,

+  199,

+  70,

+  120,

+  46,

+  130,

+  24,

+  37,

+  29,

+  132,

+  101,

+  207,

+  135,

+  183,

+  220,

+  81,

+  121,

+  182,

+  29,

+  237,

+  189,

+  122,

+  46,

+  68,

+  147,

+  50,

+  189,

+  11,

+  1,

+  62,

+  11,

+  32,

+  159,

+  69,

+  243,

+  89,

+  44,

+  159,

+  197,

+  115,

+  67,

+  184,

+  175,

+  141,

+  121,

+  136,

+  201,

+  100,

+  22,

+  146,

+  16,

+  154,

+  205,

+  97,

+  184,

+  28,

+  189,

+  204,

+  146,

+  36,

+  132,

+  231,

+  34,

+  136,

+  153,

+  101,

+  50,

+  121,

+  66,

+  66,

+  244,

+  163,

+  94,

+  209,

+  32,

+  154,

+  148,

+  191,

+  38,

+  23,

+  245,

+  52,

+  22,

+  98,

+  212,

+  27,

+  126,

+  8,

+  207,

+  88,

+  171,

+  109,

+  38,

+  30,

+  21,

+  9,

+  65,

+  243,

+  151,

+  205,

+  196,

+  35,

+  137,

+  67,

+  59,

+  46,

+  135,

+  246,

+  92,

+  132,

+  209,

+  92,

+  95,

+  121,

+  203,

+  69,

+  244,

+  227,

+  17,

+  104,

+  144,

+  206,

+  184,

+  4,

+  9,

+  1,

+  124,

+  18,

+  64,

+  62,

+  196,

+  178,

+  33,

+  221,

+  112,

+  204,

+  155,

+  226,

+  217,

+  149,

+  138,

+  103,

+  87,

+  142,

+  62,

+  19,

+  191,

+  72,

+  66,

+  24,

+  46,

+  71,

+  47,

+  126,

+  21,

+  9,

+  225,

+  185,

+  8,

+  195,

+  182,

+  131,

+  168,

+  167,

+  62,

+  23,

+  191,

+  68,

+  8,

+  45,

+  175,

+  124,

+  46,

+  128,

+  105,

+  44,

+  32,

+  249,

+  16,

+  197,

+  135,

+  88,

+  238,

+  172,

+  244,

+  247,

+  213,

+  89,

+  72,

+  251,

+  55,

+  136,

+  111,

+  46,

+  35,

+  133,

+  125,

+  155,

+  180,

+  60,

+  221,

+  238,

+  67,

+  12,

+  13,

+  226,

+  184,

+  213,

+  74,

+  31,

+  98,

+  104,

+  16,

+  207,

+  183,

+  197,

+  179,

+  109,

+  9,

+  2,

+  196,

+  180,

+  165,

+  7,

+  121,

+  199,

+  150,

+  219,

+  155,

+  115,

+  199,

+  236,

+  251,

+  151,

+  219,

+  155,

+  246,

+  207,

+  186,

+  255,

+  7,

+  80,

+  75,

+  1,

+  2,

+  20,

+  0,

+  20,

+  0,

+  0,

+  8,

+  8,

+  0,

+  187,

+  182,

+  42,

+  68,

+  95,

+  169,

+  84,

+  175,

+  60,

+  66,

+  0,

+  0,

+  49,

+  67,

+  0,

+  0,

+  12,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  97,

+  114,

+  105,

+  97,

+  108,

+  95,

+  52,

+  56,

+  46,

+  112,

+  110,

+  103,

+  80,

+  75,

+  1,

+  2,

+  20,

+  0,

+  20,

+  0,

+  0,

+  8,

+  8,

+  0,

+  187,

+  182,

+  42,

+  68,

+  34,

+  236,

+  10,

+  177,

+  219,

+  6,

+  0,

+  0,

+  221,

+  61,

+  0,

+  0,

+  12,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  0,

+  102,

+  66,

+  0,

+  0,

+  97,

+  114,

+  105,

+  97,

+  108,

+  95,

+  52,

+  56,

+  46,

+  102,

+  110,

+  116,

+  80,

+  75,

+  5,

+  6,

+  0,

+  0,

+  0,

+  0,

+  2,

+  0,

+  2,

+  0,

+  116,

+  0,

+  0,

+  0,

+  107,

+  73,

+  0,

+  0,

+  0,

+  0

+];

diff --git a/image/lib/src/formats/decode_info.dart b/image/lib/src/formats/decode_info.dart
index 435c197..5d63063 100755
--- a/image/lib/src/formats/decode_info.dart
+++ b/image/lib/src/formats/decode_info.dart
@@ -1,11 +1,11 @@
-/**

- * Provides information about the image being decoded.

- */

+/// Provides information about the image being decoded.

 abstract class DecodeInfo {

   /// The width of the image canvas.

   int width = 0;

+

   /// The height of the image canvas.

   int height = 0;

+

   /// The suggested background color of the canvas.

   int backgroundColor = 0xffffffff;

 

diff --git a/image/lib/src/formats/decoder.dart b/image/lib/src/formats/decoder.dart
index 9556077..46a520e 100755
--- a/image/lib/src/formats/decoder.dart
+++ b/image/lib/src/formats/decoder.dart
@@ -3,68 +3,60 @@
 import '../hdr/hdr_image.dart';

 import 'decode_info.dart';

 

-/**

- * Base class for image format decoders.

- *

- * Image pixels are stored as 32-bit unsigned ints, so all formats, regardless

- * of their encoded color resolutions, decode to 32-bit RGBA images.  Encoders

- * can reduce the color resolution back down to their required formats.

- *

- * Some image formats support multiple frames, often for encoding animation.

- * In such cases, the [decodeImage] method will decode the first (or otherwise

- * specified with the [frame] parameter) frame of the file.  [decodeAnimation]

- * will decode all frames from the image.  [startDecode] will initiate

- * decoding of the file, and [decodeFrame] will then decode a specific frame

- * from the file, allowing for animations to be decoded one frame at a time.

- * Some formats, such as TIFF, may store multiple frames, but their use of

- * frames is for multiple page documents and not animation.  The terms

- * 'animation' and 'frames' simply refer to 'pages' in this case.

- *

- * If an image file does not have multiple frames, [decodeAnimation] and

- * [startDecode]/[decodeFrame] will return the single image of the

- * file. As such, if you are not sure if a file is animated or not, you can

- * use the animated functions and process it as a single frame image if it

- * has only 1 frame, and as an animation if it has more than 1 frame.

- *

- * Most animated formats do not store full images for frames, but rather

- * some frames will store full images and others will store partial 'change'

- * images. For these files, [decodeAnimation] will always return all images

- * fully composited, meaning full frame images.  Decoding frames individually

- * using [startDecode] and [decodeFrame] will return the potentially partial

- * image.  In this case, the [DecodeInfo] returned by [startDecode] will include

- * the width and height resolution of the animation canvas, and each [Image]

- * returned by [decodeFrame] will have x, y, width and height properties

- * indicating where in the canvas the frame image should be drawn.  It will

- * also have a disposeMethod property that specifies what should be done to

- * the canvas prior to drawing the frame: [Image.DISPOSE_NONE] indicates the

- * canvas should be left alone; [Image.DISPOSE_CLEAR] indicates the canvas

- * should be cleared.  For partial frame images,[Image.DISPOSE_NONE] is used

- * so that the partial-frame is drawn on top of the previous frame, applying

- * it's changes to the image.

- */

+/// Base class for image format decoders.

+///

+/// Image pixels are stored as 32-bit unsigned ints, so all formats, regardless

+/// of their encoded color resolutions, decode to 32-bit RGBA images.  Encoders

+/// can reduce the color resolution back down to their required formats.

+///

+/// Some image formats support multiple frames, often for encoding animation.

+/// In such cases, the [decodeImage] method will decode the first (or otherwise

+/// specified with the [frame] parameter) frame of the file.  [decodeAnimation]

+/// will decode all frames from the image.  [startDecode] will initiate

+/// decoding of the file, and [decodeFrame] will then decode a specific frame

+/// from the file, allowing for animations to be decoded one frame at a time.

+/// Some formats, such as TIFF, may store multiple frames, but their use of

+/// frames is for multiple page documents and not animation.  The terms

+/// 'animation' and 'frames' simply refer to 'pages' in this case.

+///

+/// If an image file does not have multiple frames, [decodeAnimation] and

+/// [startDecode]/[decodeFrame] will return the single image of the

+/// file. As such, if you are not sure if a file is animated or not, you can

+/// use the animated functions and process it as a single frame image if it

+/// has only 1 frame, and as an animation if it has more than 1 frame.

+///

+/// Most animated formats do not store full images for frames, but rather

+/// some frames will store full images and others will store partial 'change'

+/// images. For these files, [decodeAnimation] will always return all images

+/// fully composited, meaning full frame images.  Decoding frames individually

+/// using [startDecode] and [decodeFrame] will return the potentially partial

+/// image.  In this case, the [DecodeInfo] returned by [startDecode] will include

+/// the width and height resolution of the animation canvas, and each [Image]

+/// returned by [decodeFrame] will have x, y, width and height properties

+/// indicating where in the canvas the frame image should be drawn.  It will

+/// also have a disposeMethod property that specifies what should be done to

+/// the canvas prior to drawing the frame: [Image.DISPOSE_NONE] indicates the

+/// canvas should be left alone; [Image.DISPOSE_CLEAR] indicates the canvas

+/// should be cleared.  For partial frame images,[Image.DISPOSE_NONE] is used

+/// so that the partial-frame is drawn on top of the previous frame, applying

+/// it's changes to the image.

 abstract class Decoder {

-  /**

-   * A light-weight function to test if the given file is able to be decoded

-   * by this Decoder.

-   */

+  /// A light-weight function to test if the given file is able to be decoded

+  /// by this Decoder.

   bool isValidFile(List<int> bytes);

 

-  /**

-   * Decode the file and extract a single image from it. If the file is

-   * animated, the specified [frame] will be decoded. If there was a problem

-   * decoding the file, null is returned.

-   */

-  Image decodeImage(List<int> bytes, {int frame: 0});

+  /// Decode the file and extract a single image from it. If the file is

+  /// animated, the specified [frame] will be decoded. If there was a problem

+  /// decoding the file, null is returned.

+  Image decodeImage(List<int> bytes, {int frame = 0});

 

-  /**

-   * Decode the file and extract a single High Dynamic Range (HDR) image from

-   * it. HDR images are stored in floating-poing values. If the format of the

-   * file does not support HDR images, the regular image will be converted to

-   * an HDR image as (color / 255). If the file is animated, the specified

-   * [frame] will be decoded. If there was a problem decoding the file, null is

-   * returned.

-   */

-  HdrImage decodeHdrImage(List<int> bytes, {int frame: 0}) {

+  /// Decode the file and extract a single High Dynamic Range (HDR) image from

+  /// it. HDR images are stored in floating-poing values. If the format of the

+  /// file does not support HDR images, the regular image will be converted to

+  /// an HDR image as (color / 255). If the file is animated, the specified

+  /// [frame] will be decoded. If there was a problem decoding the file, null is

+  /// returned.

+  HdrImage decodeHdrImage(List<int> bytes, {int frame = 0}) {

     Image img = decodeImage(bytes, frame: frame);

     if (img == null) {

       return null;

@@ -72,43 +64,33 @@
     return new HdrImage.fromImage(img);

   }

 

-  /**

-   * Decode all of the frames from an animation.  If the file is not an

-   * animation, a single frame animation is returned.  If there was a problem

-   * decoding the file, null is returned.

-   */

+  /// Decode all of the frames from an animation.  If the file is not an

+  /// animation, a single frame animation is returned.  If there was a problem

+  /// decoding the file, null is returned.

   Animation decodeAnimation(List<int> bytes);

 

-  /**

-   * Start decoding the data as an animation sequence, but don't actually

-   * process the frames until they are requested with decodeFrame.

-   */

+  /// Start decoding the data as an animation sequence, but don't actually

+  /// process the frames until they are requested with decodeFrame.

   DecodeInfo startDecode(List<int> bytes);

 

-  /**

-   * How many frames are available to be decoded.  [startDecode] should have

-   * been called first. Non animated image files will have a single frame.

-   */

+  /// How many frames are available to be decoded.  [startDecode] should have

+  /// been called first. Non animated image files will have a single frame.

   int numFrames();

 

-  /**

-   * Decode a single frame from the data that was set with [startDecode].

-   * If [frame] is out of the range of available frames, null is returned.

-   * Non animated image files will only have [frame] 0. An [Image]

-   * is returned, which provides the image, and top-left coordinates of the

-   * image, as animated frames may only occupy a subset of the canvas.

-   */

+  /// Decode a single frame from the data that was set with [startDecode].

+  /// If [frame] is out of the range of available frames, null is returned.

+  /// Non animated image files will only have [frame] 0. An [Image]

+  /// is returned, which provides the image, and top-left coordinates of the

+  /// image, as animated frames may only occupy a subset of the canvas.

   Image decodeFrame(int frame);

 

-  /**

-   * Decode a single high dynamic range (HDR) frame from the data that was set

-   * with [startDecode]. If the format of the file does not support HDR images,

-   * the regular image will be converted to an HDR image as (color / 255).

-   * If [frame] is out of the range of available frames, null is returned.

-   * Non animated image files will only have [frame] 0. An [Image]

-   * is returned, which provides the image, and top-left coordinates of the

-   * image, as animated frames may only occupy a subset of the canvas.

-   */

+  /// Decode a single high dynamic range (HDR) frame from the data that was set

+  /// with [startDecode]. If the format of the file does not support HDR images,

+  /// the regular image will be converted to an HDR image as (color / 255).

+  /// If [frame] is out of the range of available frames, null is returned.

+  /// Non animated image files will only have [frame] 0. An [Image]

+  /// is returned, which provides the image, and top-left coordinates of the

+  /// image, as animated frames may only occupy a subset of the canvas.

   HdrImage decodeHdrFrame(int frame) {

     Image img = decodeFrame(frame);

     if (img == null) {

diff --git a/image/lib/src/formats/encoder.dart b/image/lib/src/formats/encoder.dart
index 769f5fc..ae146a4 100755
--- a/image/lib/src/formats/encoder.dart
+++ b/image/lib/src/formats/encoder.dart
@@ -1,24 +1,16 @@
 import '../animation.dart';

 import '../image.dart';

 

-/**

- * Base class for image format encoders.

- */

+/// Base class for image format encoders.

 abstract class Encoder {

-  /**

-   * Encode a single image.

-   */

+  /// Encode a single image.

   List<int> encodeImage(Image image);

 

-  /**

-   * Does this encoder support animation?

-   */

+  /// Does this encoder support animation?

   bool get supportsAnimation => false;

 

-  /**

-   * Encode an animation.  Not all formats support animation, and null

-   * will be returned if not.

-   */

+  /// Encode an animation.  Not all formats support animation, and null

+  /// will be returned if not.

   List<int> encodeAnimation(Animation anim) {

     return null;

   }

diff --git a/image/lib/src/formats/exr/exr_b44_compressor.dart b/image/lib/src/formats/exr/exr_b44_compressor.dart
index a7e3842..0475976 100755
--- a/image/lib/src/formats/exr/exr_b44_compressor.dart
+++ b/image/lib/src/formats/exr/exr_b44_compressor.dart
@@ -7,26 +7,25 @@
 import 'exr_part.dart';

 

 abstract class ExrB44Compressor extends ExrCompressor {

-  factory ExrB44Compressor(ExrPart header, int maxScanLineSize, int numScanLines,

-                           bool optFlatFields) = InternalExrB44Compressor;

+  factory ExrB44Compressor(ExrPart header, int maxScanLineSize,

+      int numScanLines, bool optFlatFields) = InternalExrB44Compressor;

 }

 

 @internal

-class InternalExrB44Compressor extends InternalExrCompressor implements ExrB44Compressor {

-  InternalExrB44Compressor(ExrPart header, int maxScanLineSize, this._numScanLines,

-                           bool optFlatFields) :

-    super(header) {

-  }

+class InternalExrB44Compressor extends InternalExrCompressor

+    implements ExrB44Compressor {

+  InternalExrB44Compressor(ExrPart header, int maxScanLineSize,

+      this._numScanLines, bool optFlatFields)

+      : super(header as InternalExrPart);

 

   int numScanLines() => _numScanLines;

 

-  Uint8List compress(InputBuffer inPtr, int x, int y,

-                     [int width, int height]) {

+  Uint8List compress(InputBuffer inPtr, int x, int y, [int width, int height]) {

     throw new ImageException('B44 compression not yet supported.');

   }

 

   Uint8List uncompress(InputBuffer inPtr, int x, int y,

-                       [int width, int height]) {

+      [int width, int height]) {

     throw new ImageException('B44 compression not yet supported.');

   }

 

diff --git a/image/lib/src/formats/exr/exr_channel.dart b/image/lib/src/formats/exr/exr_channel.dart
index 19ee809..039e8e7 100755
--- a/image/lib/src/formats/exr/exr_channel.dart
+++ b/image/lib/src/formats/exr/exr_channel.dart
@@ -11,28 +11,40 @@
 

   /// Luminance

   static const String Y = 'Y';

+

   /// Chroma RY

   static const String RY = 'RY';

+

   /// Chroma BY

   static const String BY = 'BY';

+

   /// Red for colored mattes

   static const String AR = 'AR';

+

   /// Green for colored mattes

   static const String AG = 'AG';

+

   /// Blue for colored mattes

   static const String AB = 'AB';

+

   /// Distance of the front of a sample from the viewer

   static const String Z = 'Z';

+

   /// Distance of the back of a sample from the viewer

   static const String ZBack = 'ZBack';

+

   /// Alpha/opacity

   static const String A = 'A';

+

   /// Red value of a sample

   static const String R = 'R';

+

   /// Green value of a sample

   static const String G = 'G';

+

   /// Blue value of a sample

   static const String B = 'B';

+

   /// A numerical identifier for the object represented by a sample.

   static const String ID = 'id';

 

diff --git a/image/lib/src/formats/exr/exr_compressor.dart b/image/lib/src/formats/exr/exr_compressor.dart
index 71e99b3..aa0bc8d 100755
--- a/image/lib/src/formats/exr/exr_compressor.dart
+++ b/image/lib/src/formats/exr/exr_compressor.dart
@@ -24,35 +24,35 @@
   int decodedHeight = 0;

 

   factory ExrCompressor(int type, ExrPart hdr, int maxScanLineSize,

-                        [int numScanLines]) {

+      [int numScanLines]) {

     switch (type) {

       case RLE_COMPRESSION:

         return new ExrRleCompressor(hdr, maxScanLineSize);

       case ZIPS_COMPRESSION:

-        return new ExrZipCompressor(hdr, maxScanLineSize,

-                                    numScanLines == null ? 1 : numScanLines);

+        return new ExrZipCompressor(

+            hdr, maxScanLineSize, numScanLines == null ? 1 : numScanLines);

       case ZIP_COMPRESSION:

-        return new ExrZipCompressor(hdr, maxScanLineSize,

-                                    numScanLines == null ? 16 : numScanLines);

+        return new ExrZipCompressor(

+            hdr, maxScanLineSize, numScanLines == null ? 16 : numScanLines);

       case PIZ_COMPRESSION:

-        return new ExrPizCompressor(hdr, maxScanLineSize,

-                                    numScanLines == null ? 32 : numScanLines);

+        return new ExrPizCompressor(

+            hdr, maxScanLineSize, numScanLines == null ? 32 : numScanLines);

       case PXR24_COMPRESSION:

-        return new ExrPxr24Compressor(hdr, maxScanLineSize,

-                                     numScanLines == null ? 16 : numScanLines);

+        return new ExrPxr24Compressor(

+            hdr, maxScanLineSize, numScanLines == null ? 16 : numScanLines);

       case B44_COMPRESSION:

         return new ExrB44Compressor(hdr, maxScanLineSize,

-                              numScanLines == null ? 32 : numScanLines, false);

+            numScanLines == null ? 32 : numScanLines, false);

       case B44A_COMPRESSION:

         return new ExrB44Compressor(hdr, maxScanLineSize,

-                              numScanLines == null ? 32 : numScanLines, true);

+            numScanLines == null ? 32 : numScanLines, true);

       default:

         throw new ImageException('Invalid compression type: $type');

     }

   }

 

-  factory ExrCompressor.tile(int type, int tileLineSize, int numTileLines,

-                             ExrPart hdr) {

+  factory ExrCompressor.tile(

+      int type, int tileLineSize, int numTileLines, ExrPart hdr) {

     switch (type) {

       case RLE_COMPRESSION:

         return new ExrRleCompressor(hdr, (tileLineSize * numTileLines));

@@ -76,13 +76,12 @@
 

   int numScanLines();

 

-  Uint8List compress(InputBuffer inPtr, int x, int y,

-                     [int width, int height]) {

+  Uint8List compress(InputBuffer inPtr, int x, int y, [int width, int height]) {

     throw new ImageException('Unsupported compression type');

   }

 

   Uint8List uncompress(InputBuffer inPtr, int x, int y,

-                       [int width, int height]) {

+      [int width, int height]) {

     throw new ImageException('Unsupported compression type');

   }

 

@@ -93,11 +92,11 @@
 abstract class InternalExrCompressor extends ExrCompressor {

   InternalExrCompressor(InternalExrPart header) : super._(header);

 

-  InternalExrPart get header => _header;

+  InternalExrPart get header => _header as InternalExrPart;

 

   int numSamples(int s, int a, int b) {

     int a1 = a ~/ s;

     int b1 = b ~/ s;

-    return  b1 - a1 + ((a1 * s < a) ? 0: 1);

+    return b1 - a1 + ((a1 * s < a) ? 0 : 1);

   }

 }

diff --git a/image/lib/src/formats/exr/exr_huffman.dart b/image/lib/src/formats/exr/exr_huffman.dart
index b5a0d3e..94d76e4 100755
--- a/image/lib/src/formats/exr/exr_huffman.dart
+++ b/image/lib/src/formats/exr/exr_huffman.dart
@@ -4,8 +4,8 @@
 import '../../util/input_buffer.dart';

 

 class ExrHuffman {

-  static void uncompress(InputBuffer compressed, int nCompressed,

-                         Uint16List raw, int nRaw) {

+  static void uncompress(

+      InputBuffer compressed, int nCompressed, Uint16List raw, int nRaw) {

     if (nCompressed == 0) {

       if (nRaw != 0) {

         throw new ImageException('Incomplete huffman data');

@@ -39,16 +39,15 @@
 

     if (nBits > 8 * (nCompressed - (compressed.offset - start))) {

       throw new ImageException("Error in header for Huffman-encoded data "

-                               "(invalid number of bits).");

+          "(invalid number of bits).");

     }

 

     buildDecTable(freq, im, iM, hdec);

     decode(freq, hdec, compressed, nBits, iM, nRaw, raw);

   }

 

-  static void decode(List<int> hcode, List<ExrHufDec> hdecod,

-                     InputBuffer input, int ni, int rlc, int no,

-                     Uint16List out) {

+  static void decode(List<int> hcode, List<ExrHufDec> hdecod, InputBuffer input,

+      int ni, int rlc, int no, Uint16List out) {

     List<int> c_lc = [0, 0];

     int ie = input.offset + (ni + 7) ~/ 8; // input byte size

     int oi = 0;

@@ -60,7 +59,8 @@
 

       // Access decoding table

       while (c_lc[1] >= HUF_DECBITS) {

-        ExrHufDec pl = hdecod[(c_lc[0] >> (c_lc[1] - HUF_DECBITS)) & HUF_DECMASK];

+        ExrHufDec pl =

+            hdecod[(c_lc[0] >> (c_lc[1] - HUF_DECBITS)) & HUF_DECMASK];

 

         if (pl.len != 0) {

           // Get short code

@@ -69,7 +69,7 @@
         } else {

           if (pl.p == null) {

             throw new ImageException("Error in Huffman-encoded data "

-                                     "(invalid code).");

+                "(invalid code).");

           }

 

           // Search long code

@@ -77,7 +77,8 @@
           for (j = 0; j < pl.lit; j++) {

             int l = hufLength(hcode[pl.p[j]]);

 

-            while (c_lc[1] < l && input.offset < ie) { // get more bits

+            while (c_lc[1] < l && input.offset < ie) {

+              // get more bits

               getChar(c_lc, input);

             }

 

@@ -94,7 +95,7 @@
 

           if (j == pl.lit) {

             throw new ImageException("Error in Huffman-encoded data "

-                                     "(invalid code).");

+                "(invalid code).");

           }

         }

       }

@@ -113,18 +114,18 @@
         oi = getCode(pl.lit, rlc, c_lc, input, out, oi, no);

       } else {

         throw new ImageException("Error in Huffman-encoded data "

-                                 "(invalid code).");

+            "(invalid code).");

       }

     }

 

     if (oi != no) {

       throw new ImageException("Error in Huffman-encoded data "

-                               "(decoded data are shorter than expected).");

+          "(decoded data are shorter than expected).");

     }

   }

 

   static int getCode(int po, int rlc, List<int> c_lc, InputBuffer input,

-                     Uint16List out, int oi, int oe) {

+      Uint16List out, int oi, int oe) {

     if (po == rlc) {

       if (c_lc[1] < 8) {

         getChar(c_lc, input);

@@ -136,7 +137,7 @@
 

       if (oi + cs > oe) {

         throw new ImageException("Error in Huffman-encoded data "

-                                 "(decoded data are longer than expected).");

+            "(decoded data are longer than expected).");

       }

 

       int s = out[oi - 1];

@@ -148,14 +149,13 @@
       out[oi++] = po;

     } else {

       throw new ImageException("Error in Huffman-encoded data "

-                               "(decoded data are longer than expected).");

+          "(decoded data are longer than expected).");

     }

     return oi;

   }

 

-

-  static void buildDecTable(List<int> hcode, int im, int iM,

-                            List<ExrHufDec> hdecod) {

+  static void buildDecTable(

+      List<int> hcode, int im, int iM, List<ExrHufDec> hdecod) {

     // Init hashtable & loop on all codes.

     // Assumes that hufClearDecTable(hdecod) has already been called.

     for (; im <= iM; im++) {

@@ -167,7 +167,7 @@
         // but c contains a value that is greater

         // than the largest l-bit number.

         throw new ImageException("Error in Huffman-encoded data "

-                                 "(invalid code table entry).");

+            "(invalid code table entry).");

       }

 

       if (l > HUF_DECBITS) {

@@ -178,7 +178,7 @@
           // Error: a short code has already

           // been stored in table entry *pl.

           throw new ImageException("Error in Huffman-encoded data "

-                                   "(invalid code table entry).");

+              "(invalid code table entry).");

         }

 

         pl.lit++;

@@ -206,7 +206,7 @@
             // Error: a short code or a long code has

             // already been stored in table entry *pl.

             throw new ImageException("Error in Huffman-encoded data "

-                                     "(invalid code table entry).");

+                "(invalid code table entry).");

           }

 

           pl.len = l;

@@ -216,15 +216,15 @@
     }

   }

 

-  static void unpackEncTable(InputBuffer p, int ni, int im, int iM,

-                             List<int> hcode) {

+  static void unpackEncTable(

+      InputBuffer p, int ni, int im, int iM, List<int> hcode) {

     int pcode = p.offset;

     List<int> c_lc = [0, 0];

 

     for (; im <= iM; im++) {

       if (p.offset - pcode > ni) {

         throw new ImageException("Error in Huffman-encoded data "

-                                 "(unexpected end of code table data).");

+            "(unexpected end of code table data).");

       }

 

       int l = hcode[im] = getBits(6, c_lc, p); // code length

@@ -232,14 +232,14 @@
       if (l == LONG_ZEROCODE_RUN) {

         if (p.offset - pcode > ni) {

           throw new ImageException("Error in Huffman-encoded data "

-                                   "(unexpected end of code table data).");

+              "(unexpected end of code table data).");

         }

 

         int zerun = getBits(8, c_lc, p) + SHORTEST_LONG_RUN;

 

         if (im + zerun > iM + 1) {

           throw new ImageException("Error in Huffman-encoded data "

-                                   "(code table is longer than expected).");

+              "(code table is longer than expected).");

         }

 

         while (zerun-- != 0) {

@@ -252,7 +252,7 @@
 

         if (im + zerun > iM + 1) {

           throw new ImageException("Error in Huffman-encoded data "

-                                   "(code table is longer than expected).");

+              "(code table is longer than expected).");

         }

 

         while (zerun-- != 0) {

@@ -325,16 +325,17 @@
 

   static const int MASK_32 = (1 << 32) - 1;

   static const int MASK_64 = (1 << 64) - 1;

-  static const int HUF_ENCBITS = 16;     // literal (value) bit length

-  static const int HUF_DECBITS = 14;     // decoding bit size (>= 8)

+  static const int HUF_ENCBITS = 16; // literal (value) bit length

+  static const int HUF_DECBITS = 14; // decoding bit size (>= 8)

 

   static const int HUF_ENCSIZE = (1 << HUF_ENCBITS) + 1; // encoding table size

-  static const int HUF_DECSIZE =  1 << HUF_DECBITS;  // decoding table size

+  static const int HUF_DECSIZE = 1 << HUF_DECBITS; // decoding table size

   static const int HUF_DECMASK = HUF_DECSIZE - 1;

 

   static const int SHORT_ZEROCODE_RUN = 59;

   static const int LONG_ZEROCODE_RUN = 63;

-  static const int SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN;

+  static const int SHORTEST_LONG_RUN =

+      2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN;

   static const int LONGEST_LONG_RUN = 255 + SHORTEST_LONG_RUN;

 }

 

diff --git a/image/lib/src/formats/exr/exr_image.dart b/image/lib/src/formats/exr/exr_image.dart
index 4c431e3..716c7c0 100755
--- a/image/lib/src/formats/exr/exr_image.dart
+++ b/image/lib/src/formats/exr/exr_image.dart
@@ -9,7 +9,6 @@
 import 'exr_compressor.dart';

 import 'exr_part.dart';

 

-

 class ExrImage extends DecodeInfo {

   /// An EXR image has one or more parts, each of which contains a framebuffer.

   List<InternalExrPart> _parts = [];

@@ -29,13 +28,13 @@
     flags = input.readUint24();

     if (!_supportsFlags(flags)) {

       throw new ImageException('The file format version number\'s flag field '

-                               'contains unrecognized flags.');

+          'contains unrecognized flags.');

     }

 

     if (!_isMultiPart()) {

       ExrPart part = InternalExrPart(_isTiled(), input);

       if (part.isValid) {

-        _parts.add(part);

+        _parts.add(part as InternalExrPart);

       }

     } else {

       while (true) {

@@ -43,7 +42,7 @@
         if (!part.isValid) {

           break;

         }

-        _parts.add(part);

+        _parts.add(part as InternalExrPart);

       }

     }

 

@@ -62,9 +61,7 @@
 

   int get numFrames => 1;

 

-  /**

-   * Parse just enough of the file to identify that it's an EXR image.

-   */

+  /// Parse just enough of the file to identify that it's an EXR image.

   static bool isValidFile(List<int> bytes) {

     InputBuffer input = InputBuffer(bytes);

 

@@ -90,7 +87,7 @@
 

   ExrPart getPart(int i) => _parts[i];

 

-  bool _isTiled()  {

+  bool _isTiled() {

     return (flags & TILED_FLAG) != 0;

   }

 

@@ -118,8 +115,8 @@
         if (!framebuffer.hasChannel(ch.name)) {

           width = part.width;

           height = part.height;

-          framebuffer.addSlice(new HdrSlice(ch.name, part.width, part.height,

-                                            ch.type));

+          framebuffer.addSlice(

+              new HdrSlice(ch.name, part.width, part.height, ch.type));

         }

       }

 

@@ -180,9 +177,8 @@
 

             Uint8List uncompressedData;

             if (compressor != null) {

-              uncompressedData = compressor.uncompress(data, tx, ty,

-                                                       part.tileWidth,

-                                                       part.tileHeight);

+              uncompressedData = compressor.uncompress(

+                  data, tx, ty, part.tileWidth, part.tileHeight);

               tileWidth = compressor.decodedWidth;

               tileHeight = compressor.decodedHeight;

             } else {

diff --git a/image/lib/src/formats/exr/exr_part.dart b/image/lib/src/formats/exr/exr_part.dart
index e0d7416..a700b5a 100755
--- a/image/lib/src/formats/exr/exr_part.dart
+++ b/image/lib/src/formats/exr/exr_part.dart
@@ -1,4 +1,4 @@
-import 'dart:math' as Math;

+import 'dart:math';

 import 'dart:typed_data';

 

 import '../../image_exception.dart';

@@ -12,16 +12,22 @@
 class ExrPart {

   /// The framebuffer for this exr part.

   HdrImage framebuffer = HdrImage();

+

   /// The channels present in this part.

   List<ExrChannel> channels = [];

+

   /// The extra attributes read from the part header.

   Map<String, ExrAttribute> attributes = {};

+

   /// The display window (see the openexr documentation).

   List<int> displayWindow;

+

   /// The data window (see the openexr documentation).

   List<int> dataWindow;

+

   /// width of the data window

   int width;

+

   /// Height of the data window

   int height;

   double pixelAspectRatio = 1.0;

@@ -73,14 +79,22 @@
           }

           break;

         case 'dataWindow':

-          dataWindow = [value.readInt32(), value.readInt32(),

-                        value.readInt32(), value.readInt32()];

+          dataWindow = [

+            value.readInt32(),

+            value.readInt32(),

+            value.readInt32(),

+            value.readInt32()

+          ];

           width = (dataWindow[2] - dataWindow[0]) + 1;

           height = (dataWindow[3] - dataWindow[1]) + 1;

           break;

         case 'displayWindow':

-          displayWindow = [value.readInt32(), value.readInt32(),

-                           value.readInt32(), value.readInt32()];

+          displayWindow = [

+            value.readInt32(),

+            value.readInt32(),

+            value.readInt32(),

+            value.readInt32()

+          ];

           break;

         case 'lineOrder':

           //_lineOrder = value.readByte();

@@ -127,18 +141,18 @@
       _numXTiles = List<int>(_numXLevels);

       _numYTiles = List<int>(_numYLevels);

 

-      _calculateNumTiles(_numXTiles, _numXLevels, left, right, _tileWidth,

-                         _tileRoundingMode);

+      _calculateNumTiles(

+          _numXTiles, _numXLevels, left, right, _tileWidth, _tileRoundingMode);

 

-      _calculateNumTiles(_numYTiles, _numYLevels, top, bottom, _tileHeight,

-                         _tileRoundingMode);

+      _calculateNumTiles(

+          _numYTiles, _numYLevels, top, bottom, _tileHeight, _tileRoundingMode);

 

       _bytesPerPixel = _calculateBytesPerPixel();

       _maxBytesPerTileLine = _bytesPerPixel * _tileWidth;

       //_tileBufferSize = _maxBytesPerTileLine * _tileHeight;

 

-      _compressor = ExrCompressor(_compressionType, this,

-                                      _maxBytesPerTileLine, _tileHeight);

+      _compressor = ExrCompressor(

+          _compressionType, this, _maxBytesPerTileLine, _tileHeight);

 

       _offsets = List<Uint32List>(_numXLevels * _numYLevels);

       for (int ly = 0, l = 0; ly < _numYLevels; ++ly) {

@@ -159,7 +173,7 @@
 

       int maxBytesPerLine = 0;

       for (int y = 0; y < height; ++y) {

-        maxBytesPerLine = Math.max(maxBytesPerLine, _bytesPerLine[y]);

+        maxBytesPerLine = max(maxBytesPerLine, _bytesPerLine[y]);

       }

 

       _compressor = ExrCompressor(_compressionType, this, maxBytesPerLine);

@@ -191,9 +205,7 @@
 

   int get bottom => dataWindow[3];

 

-  /**

-   * Was this part successfully decoded?

-   */

+  /// Was this part successfully decoded?

   bool get isValid => width != null;

 

   int _calculateNumXLevels(int minX, int maxX, int minY, int maxY) {

@@ -206,7 +218,7 @@
       case MIPMAP_LEVELS:

         int w = maxX - minX + 1;

         int h = maxY - minY + 1;

-        num = _roundLog2(Math.max(w, h), _tileRoundingMode) + 1;

+        num = _roundLog2(max(w, h), _tileRoundingMode) + 1;

         break;

       case RIPMAP_LEVELS:

         int w = maxX - minX + 1;

@@ -219,7 +231,6 @@
     return num;

   }

 

-

   int _calculateNumYLevels(int minX, int maxX, int minY, int maxY) {

     int num = 0;

 

@@ -230,7 +241,7 @@
       case MIPMAP_LEVELS:

         int w = (maxX - minX) + 1;

         int h = (maxY - minY) + 1;

-        num = _roundLog2(Math.max(w, h), _tileRoundingMode) + 1;

+        num = _roundLog2(max(w, h), _tileRoundingMode) + 1;

         break;

       case RIPMAP_LEVELS:

         int h = (maxY - minY) + 1;

@@ -251,14 +262,13 @@
     int y = 0;

 

     while (x > 1) {

-      y +=  1;

+      y += 1;

       x >>= 1;

     }

 

     return y;

   }

 

-

   int _ceilLog2(int x) {

     int y = 0;

     int r = 0;

@@ -268,7 +278,7 @@
         r = 1;

       }

 

-      y +=  1;

+      y += 1;

       x >>= 1;

     }

 

@@ -285,19 +295,19 @@
     return bytesPerPixel;

   }

 

-  void _calculateNumTiles(List<int> numTiles, int numLevels,

-                          int min, int max, int size, int rmode) {

+  void _calculateNumTiles(List<int> numTiles, int numLevels, int min, int max,

+      int size, int rmode) {

     for (int i = 0; i < numLevels; i++) {

       numTiles[i] = (_levelSize(min, max, i, rmode) + size - 1) ~/ size;

     }

   }

 

-  int _levelSize(int min, int max, int l, int rmode) {

+  int _levelSize(int _min, int _max, int l, int rmode) {

     if (l < 0) {

       throw new ImageException('Argument not in valid range.');

     }

 

-    int a = (max - min) + 1;

+    int a = (_max - _min) + 1;

     int b = (1 << l);

     int size = a ~/ b;

 

@@ -305,7 +315,7 @@
       size += 1;

     }

 

-    return Math.max(size, 1);

+    return max(size, 1);

   }

 

   static const int TYPE_SCANLINE = 0;

diff --git a/image/lib/src/formats/exr/exr_piz_compressor.dart b/image/lib/src/formats/exr/exr_piz_compressor.dart
index 3de8788..54d2d85 100755
--- a/image/lib/src/formats/exr/exr_piz_compressor.dart
+++ b/image/lib/src/formats/exr/exr_piz_compressor.dart
@@ -10,18 +10,19 @@
 import 'exr_part.dart';

 import 'exr_wavelet.dart';

 

-/**

- * Wavelet compression

- */

+/// Wavelet compression

 abstract class ExrPizCompressor extends ExrCompressor {

-  factory ExrPizCompressor(ExrPart header, int maxScanLineSize,

-                           int numScanLines) = InternalExrPizCompressor;

+  factory ExrPizCompressor(

+          ExrPart header, int maxScanLineSize, int numScanLines) =

+      InternalExrPizCompressor;

 }

 

 @internal

-class InternalExrPizCompressor extends InternalExrCompressor implements ExrPizCompressor {

-  InternalExrPizCompressor(ExrPart header, this._maxScanLineSize, this._numScanLines) :

-    super(header) {

+class InternalExrPizCompressor extends InternalExrCompressor

+    implements ExrPizCompressor {

+  InternalExrPizCompressor(

+      ExrPart header, this._maxScanLineSize, this._numScanLines)

+      : super(header as InternalExrPart) {

     _channelData = List<_PizChannelData>(header.channels.length);

     for (int i = 0; i < _channelData.length; ++i) {

       _channelData[i] = _PizChannelData();

@@ -33,13 +34,12 @@
 

   int numScanLines() => _numScanLines;

 

-  Uint8List compress(InputBuffer inPtr, int x, int y,

-                     [int width, int height]) {

+  Uint8List compress(InputBuffer inPtr, int x, int y, [int width, int height]) {

     throw new ImageException('Piz compression not yet supported.');

   }

 

   Uint8List uncompress(InputBuffer inPtr, int x, int y,

-                       [int width, int height]) {

+      [int width, int height]) {

     if (width == null) {

       width = header.width;

     }

@@ -86,7 +86,7 @@
 

     if (maxNonZero >= BITMAP_SIZE) {

       throw new ImageException("Error in header for PIZ-compressed data "

-                               "(invalid bitmap size).");

+          "(invalid bitmap size).");

     }

 

     Uint8List bitmap = Uint8List(BITMAP_SIZE);

@@ -109,7 +109,7 @@
       _PizChannelData cd = _channelData[i];

       for (int j = 0; j < cd.size; ++j) {

         ExrWavelet.decode(_tmpBuffer, cd.start + j, cd.nx, cd.size, cd.ny,

-                          cd.nx * cd.size, maxValue);

+            cd.nx * cd.size, maxValue);

       }

     }

 

@@ -117,8 +117,8 @@
     _applyLut(lut, _tmpBuffer, tmpBufferEnd);

 

     if (_output == null) {

-      _output = OutputBuffer(size: (_maxScanLineSize * _numScanLines) +

-                                       (65536 + 8192));

+      _output = OutputBuffer(

+          size: (_maxScanLineSize * _numScanLines) + (65536 + 8192));

     }

     _output.rewind();

 

@@ -138,7 +138,7 @@
       }

     }

 

-    return _output.getBytes();

+    return _output.getBytes() as Uint8List;

   }

 

   void _applyLut(List<int> lut, List<int> data, int nData) {

@@ -161,7 +161,7 @@
       lut[k++] = 0;

     }

 

-    return n;   // maximum k where lut[k] is non-zero,

+    return n; // maximum k where lut[k] is non-zero,

   }

 

   static const int USHORT_RANGE = 1 << 16;

diff --git a/image/lib/src/formats/exr/exr_pxr24_compressor.dart b/image/lib/src/formats/exr/exr_pxr24_compressor.dart
index b3cd998..b4e7d99 100755
--- a/image/lib/src/formats/exr/exr_pxr24_compressor.dart
+++ b/image/lib/src/formats/exr/exr_pxr24_compressor.dart
@@ -10,24 +10,25 @@
 import 'exr_part.dart';

 

 abstract class ExrPxr24Compressor extends ExrCompressor {

-  factory ExrPxr24Compressor(ExrPart header, int maxScanLineSize,

-                             int numScanLines) = InternalExrPxr24Compressor;

+  factory ExrPxr24Compressor(

+          ExrPart header, int maxScanLineSize, int numScanLines) =

+      InternalExrPxr24Compressor;

 }

 

-class InternalExrPxr24Compressor extends InternalExrCompressor implements ExrPxr24Compressor {

-  InternalExrPxr24Compressor(ExrPart header, this._maxScanLineSize, this._numScanLines) :

-    super(header) {

-  }

+class InternalExrPxr24Compressor extends InternalExrCompressor

+    implements ExrPxr24Compressor {

+  InternalExrPxr24Compressor(

+      ExrPart header, this._maxScanLineSize, this._numScanLines)

+      : super(header as InternalExrPart);

 

   int numScanLines() => _numScanLines;

 

-  Uint8List compress(InputBuffer inPtr, int x, int y,

-                     [int width, int height]) {

+  Uint8List compress(InputBuffer inPtr, int x, int y, [int width, int height]) {

     throw new ImageException('Pxr24 compression not yet supported.');

   }

 

   Uint8List uncompress(InputBuffer inPtr, int x, int y,

-                       [int width, int height]) {

+      [int width, int height]) {

     List<int> data = _zlib.decodeBytes(inPtr.toUint8List());

     if (data == null) {

       throw new ImageException('Error decoding pxr24 compressed data');

@@ -67,7 +68,6 @@
 

     int numChannels = header.channels.length;

     for (int yi = minY; yi <= maxY; ++yi) {

-

       for (int ci = 0; ci < numChannels; ++ci) {

         ExrChannel ch = header.channels[ci];

         if ((y % ch.ySampling) != 0) {

@@ -85,8 +85,8 @@
             tmpEnd = ptr[2] + n;

             for (int j = 0; j < n; ++j) {

               int diff = (data[ptr[0]++] << 24) |

-                         (data[ptr[1]++] << 16) |

-                         (data[ptr[2]++] << 8);

+                  (data[ptr[1]++] << 16) |

+                  (data[ptr[2]++] << 8);

               pixel[0] += diff;

               for (int k = 0; k < 4; ++k) {

                 _output.writeByte(pixelBytes[k]);

@@ -113,8 +113,8 @@
             tmpEnd = ptr[2] + n;

             for (int j = 0; j < n; ++j) {

               int diff = (data[ptr[0]++] << 24) |

-                         (data[ptr[1]++] << 16) |

-                         (data[ptr[2]++] << 8);

+                  (data[ptr[1]++] << 16) |

+                  (data[ptr[2]++] << 8);

               pixel[0] += diff;

               for (int k = 0; k < 4; ++k) {

                 _output.writeByte(pixelBytes[k]);

@@ -125,7 +125,7 @@
       }

     }

 

-    return _output.getBytes();

+    return _output.getBytes() as Uint8List;

   }

 

   ZLibDecoder _zlib = ZLibDecoder();

diff --git a/image/lib/src/formats/exr/exr_rle_compressor.dart b/image/lib/src/formats/exr/exr_rle_compressor.dart
index 3b537da..b5012a9 100755
--- a/image/lib/src/formats/exr/exr_rle_compressor.dart
+++ b/image/lib/src/formats/exr/exr_rle_compressor.dart
@@ -7,23 +7,23 @@
 import 'exr_part.dart';

 

 abstract class ExrRleCompressor extends ExrCompressor {

-  factory ExrRleCompressor(ExrPart header, int maxScanLineSize) = InternalExrRleCompressor;

+  factory ExrRleCompressor(ExrPart header, int maxScanLineSize) =

+      InternalExrRleCompressor;

 }

 

-class InternalExrRleCompressor extends InternalExrCompressor implements ExrRleCompressor {

-  InternalExrRleCompressor(ExrPart header, int maxScanLineSize) :

-    super(header) {

-  }

+class InternalExrRleCompressor extends InternalExrCompressor

+    implements ExrRleCompressor {

+  InternalExrRleCompressor(ExrPart header, int maxScanLineSize)

+      : super(header as InternalExrPart);

 

   int numScanLines() => 1;

 

-  Uint8List compress(InputBuffer inPtr, int x, int y,

-                     [int width, int height]) {

+  Uint8List compress(InputBuffer inPtr, int x, int y, [int width, int height]) {

     throw new ImageException('Rle compression not yet supported.');

   }

 

   Uint8List uncompress(InputBuffer inPtr, int x, int y,

-                       [int width, int height]) {

+      [int width, int height]) {

     OutputBuffer out = OutputBuffer(size: inPtr.length * 2);

 

     if (width == null) {

@@ -63,7 +63,7 @@
       }

     }

 

-    Uint8List data = out.getBytes();

+    Uint8List data = out.getBytes() as Uint8List;

 

     // Predictor

     for (int i = 1, len = data.length; i < len; ++i) {

diff --git a/image/lib/src/formats/exr/exr_wavelet.dart b/image/lib/src/formats/exr/exr_wavelet.dart
index 407daf3..897ed04 100755
--- a/image/lib/src/formats/exr/exr_wavelet.dart
+++ b/image/lib/src/formats/exr/exr_wavelet.dart
@@ -3,8 +3,8 @@
 import '../../internal/bit_operators.dart';

 

 class ExrWavelet {

-  static void decode(Uint16List input, int si, int nx, int ox, int ny, int oy,

-                     int mx) {

+  static void decode(

+      Uint16List input, int si, int nx, int ox, int ny, int oy, int mx) {

     bool w14 = (mx < (1 << 14));

     int n = (nx > ny) ? ny : nx;

     int p = 1;

@@ -38,8 +38,8 @@
 

         // X loop

         for (; px <= ex; px += ox2) {

-          int p01 = px  + ox1;

-          int p10 = px  + oy1;

+          int p01 = px + ox1;

+          int p10 = px + oy1;

           int p11 = p10 + ox1;

 

           // 2D wavelet decoding

@@ -60,7 +60,7 @@
             input[p10] = a_b[0];

             input[p11] = a_b[1];

           } else {

-            wdec16(input[px],  input[p10], a_b);

+            wdec16(input[px], input[p10], a_b);

             i00 = a_b[0];

             i10 = a_b[1];

 

@@ -104,7 +104,7 @@
         for (; px <= ex; px += ox2) {

           int p01 = px + ox1;

 

-          if (w14 != 0) {

+          if (w14) {

             wdec14(input[px], input[p01], a_b);

             i00 = a_b[0];

             input[p01] = a_b[1];

@@ -125,9 +125,9 @@
   }

 

   static const int NBITS = 16;

-  static const int A_OFFSET =  1 << (NBITS  - 1);

-  static const int M_OFFSET =  1 << (NBITS  - 1);

-  static const int MOD_MASK = (1 <<  NBITS) - 1;

+  static const int A_OFFSET = 1 << (NBITS - 1);

+  static const int M_OFFSET = 1 << (NBITS - 1);

+  static const int MOD_MASK = (1 << NBITS) - 1;

 

   static void wdec14(int l, int h, List<int> a_b) {

     int ls = uint16ToInt16(l);

diff --git a/image/lib/src/formats/exr/exr_zip_compressor.dart b/image/lib/src/formats/exr/exr_zip_compressor.dart
index 085aaf9..fda727e 100755
--- a/image/lib/src/formats/exr/exr_zip_compressor.dart
+++ b/image/lib/src/formats/exr/exr_zip_compressor.dart
@@ -8,27 +8,28 @@
 import 'exr_part.dart';

 

 abstract class ExrZipCompressor extends ExrCompressor {

-  factory ExrZipCompressor(ExrPart header, int maxScanLineSize,

-                           int numScanLines) = InternalExrZipCompressor;

+  factory ExrZipCompressor(

+          ExrPart header, int maxScanLineSize, int numScanLines) =

+      InternalExrZipCompressor;

 }

 

-class InternalExrZipCompressor extends InternalExrCompressor implements ExrZipCompressor {

+class InternalExrZipCompressor extends InternalExrCompressor

+    implements ExrZipCompressor {

   ZLibDecoder zlib = ZLibDecoder();

 

-  InternalExrZipCompressor(ExrPart header, int maxScanLineSize, this._numScanLines) :

-    super(header) {

-  }

+  InternalExrZipCompressor(

+      ExrPart header, int maxScanLineSize, this._numScanLines)

+      : super(header as InternalExrPart);

 

   int numScanLines() => _numScanLines;

 

-  Uint8List compress(InputBuffer input, int x, int y,

-                     [int width, int height]) {

+  Uint8List compress(InputBuffer input, int x, int y, [int width, int height]) {

     throw new ImageException('Zip compression not yet supported');

   }

 

   Uint8List uncompress(InputBuffer input, int x, int y,

-                       [int width, int height]) {

-    Uint8List data = zlib.decodeBytes(input.toUint8List());

+      [int width, int height]) {

+    var data = zlib.decodeBytes(input.toUint8List());

 

     if (width == null) {

       width = header.width;

diff --git a/image/lib/src/formats/exr_decoder.dart b/image/lib/src/formats/exr_decoder.dart
index ef5dc4c..0bd64e4 100755
--- a/image/lib/src/formats/exr_decoder.dart
+++ b/image/lib/src/formats/exr_decoder.dart
@@ -6,27 +6,26 @@
 import 'decoder.dart';

 import 'exr/exr_image.dart';

 

-/**

- * Decode an OpenEXR formatted image.

- *

- * OpenEXR is a format developed by Industrial Light & Magic, with collaboration

- * from other companies such as Weta and Pixar, for storing hight dynamic

- * range (HDR) images for use in digital visual effects production. It supports

- * a wide range of features, including 16-bit or 32-bit floating-point channels;

- * lossless and lossy data compression; arbitrary image channels for storing

- * any combination of data, such as red, green, blue, alpha, luminance and

- * chroma channels, depth, surface normal, motion vectors, etc. It can also

- * store images in scanline or tiled format; multiple views for stereo images;

- * multiple parts; etc.

- *

- * Because OpenEXR is a high-dynamic-range (HDR) format, it must be converted

- * to a low-dynamic-range (LDR) image for display, or for use as an OpenGL

- * texture (for example). This process is called tone-mapping. Currently only

- * a simple tone-mapping function is provided with a single [exposure]

- * parameter. More tone-mapping functionality will be added.

- */

+/// Decode an OpenEXR formatted image.

+///

+/// OpenEXR is a format developed by Industrial Light & Magic, with collaboration

+/// from other companies such as Weta and Pixar, for storing hight dynamic

+/// range (HDR) images for use in digital visual effects production. It supports

+/// a wide range of features, including 16-bit or 32-bit floating-point channels;

+/// lossless and lossy data compression; arbitrary image channels for storing

+/// any combination of data, such as red, green, blue, alpha, luminance and

+/// chroma channels, depth, surface normal, motion vectors, etc. It can also

+/// store images in scanline or tiled format; multiple views for stereo images;

+/// multiple parts; etc.

+///

+/// Because OpenEXR is a high-dynamic-range (HDR) format, it must be converted

+/// to a low-dynamic-range (LDR) image for display, or for use as an OpenGL

+/// texture (for example). This process is called tone-mapping. Currently only

+/// a simple tone-mapping function is provided with a single [exposure]

+/// parameter. More tone-mapping functionality will be added.

 class ExrDecoder extends Decoder {

   ExrImage exrImage;

+

   /// Exposure for tone-mapping the hdr image to an [Image], applied during

   /// [decodeFrame].

   double exposure;

@@ -35,7 +34,7 @@
   double bloomAmount;

   double bloomRadius;

 

-  ExrDecoder({this.exposure: 1.0});

+  ExrDecoder({this.exposure = 1.0});

 

   bool isValidFile(List<int> data) {

     return ExrImage.isValidFile(data);

@@ -53,8 +52,7 @@
       return null;

     }

 

-    return hdrToImage(exrImage.getPart(frame).framebuffer,

-                      exposure: exposure);

+    return hdrToImage(exrImage.getPart(frame).framebuffer, exposure: exposure);

   }

 

   HdrImage decodeHdrFrame(int frame) {

@@ -67,7 +65,7 @@
     return exrImage.parts[frame].framebuffer;

   }

 

-  Image decodeImage(List<int> bytes, {int frame: 0}) {

+  Image decodeImage(List<int> bytes, {int frame = 0}) {

     if (startDecode(bytes) == null) {

       return null;

     }

@@ -75,7 +73,7 @@
     return decodeFrame(frame);

   }

 

-  HdrImage decodeHdrImage(List<int> bytes, {int frame: 0}) {

+  HdrImage decodeHdrImage(List<int> bytes, {int frame = 0}) {

     if (startDecode(bytes) == null) {

       return null;

     }

diff --git a/image/lib/src/formats/formats.dart b/image/lib/src/formats/formats.dart
index 611864e..59b938e 100755
--- a/image/lib/src/formats/formats.dart
+++ b/image/lib/src/formats/formats.dart
@@ -17,10 +17,8 @@
 import 'tiff_decoder.dart';

 import 'webp_decoder.dart';

 

-/**

- * Find a [Decoder] that is able to decode the given image [data].

- * Use this is you don't know the type of image it is.

- */

+/// Find a [Decoder] that is able to decode the given image [data].

+/// Use this is you don't know the type of image it is.

 Decoder findDecoderForData(List<int> data) {

   // The various decoders will be creating a Uint8List for their InputStream

   // if the data isn't already that type, so do it once here to avoid having to

@@ -65,10 +63,8 @@
   return null;

 }

 

-/**

- * Decode the given image file bytes by first identifying the format of the

- * file and using that decoder to decode the file into a single frame [Image].

- */

+/// Decode the given image file bytes by first identifying the format of the

+/// file and using that decoder to decode the file into a single frame [Image].

 Image decodeImage(List<int> data) {

   Decoder decoder = findDecoderForData(data);

   if (decoder == null) {

@@ -77,11 +73,9 @@
   return decoder.decodeImage(data);

 }

 

-/**

- * Decode the given image file bytes by first identifying the format of the

- * file and using that decoder to decode the file into an [Animation]

- * containing one or more [Image] frames.

- */

+/// Decode the given image file bytes by first identifying the format of the

+/// file and using that decoder to decode the file into an [Animation]

+/// containing one or more [Image] frames.

 Animation decodeAnimation(List<int> data) {

   Decoder decoder = findDecoderForData(data);

   if (decoder == null) {

@@ -90,11 +84,9 @@
   return decoder.decodeAnimation(data);

 }

 

-/**

- * Return the [Decoder] that can decode image with the given [name],

- * by looking at the file extension.  See also [findDecoderForData] to

- * determine the decoder to use given the bytes of the file.

- */

+/// Return the [Decoder] that can decode image with the given [name],

+/// by looking at the file extension.  See also [findDecoderForData] to

+/// determine the decoder to use given the bytes of the file.

 Decoder getDecoderForNamedImage(String name) {

   String n = name.toLowerCase();

   if (n.endsWith('.jpg') || n.endsWith('.jpeg')) {

@@ -124,11 +116,9 @@
   return null;

 }

 

-/**

- * Identify the format of the image using the file extension of the given

- * [name], and decode the given file [bytes] to an [Animation] with one or more

- * [Image] frames.  See also [decodeAnimation].

- */

+/// Identify the format of the image using the file extension of the given

+/// [name], and decode the given file [bytes] to an [Animation] with one or more

+/// [Image] frames.  See also [decodeAnimation].

 Animation decodeNamedAnimation(List<int> bytes, String name) {

   Decoder decoder = getDecoderForNamedImage(name);

   if (decoder == null) {

@@ -137,11 +127,9 @@
   return decoder.decodeAnimation(bytes);

 }

 

-/**

- * Identify the format of the image using the file extension of the given

- * [name], and decode the given file [bytes] to a single frame [Image].  See

- * also [decodeImage].

- */

+/// Identify the format of the image using the file extension of the given

+/// [name], and decode the given file [bytes] to a single frame [Image].  See

+/// also [decodeImage].

 Image decodeNamedImage(List<int> bytes, String name) {

   Decoder decoder = getDecoderForNamedImage(name);

   if (decoder == null) {

@@ -150,10 +138,8 @@
   return decoder.decodeImage(bytes);

 }

 

-/**

- * Identify the format of the image and encode it with the appropriate

- * [Encoder].

- */

+/// Identify the format of the image and encode it with the appropriate

+/// [Encoder].

 List<int> encodeNamedImage(Image image, String name) {

   String n = name.toLowerCase();

   if (n.endsWith('.jpg') || n.endsWith('.jpeg')) {

@@ -171,167 +157,117 @@
   return null;

 }

 

-/**

- * Decode a JPG formatted image.

- */

-Image decodeJpg(List<int> bytes)  {

+/// Decode a JPG formatted image.

+Image decodeJpg(List<int> bytes) {

   return new JpegDecoder().decodeImage(bytes);

 }

 

-/**

- * Renamed to [decodeJpg], left for backward compatibility.

- */

+/// Renamed to [decodeJpg], left for backward compatibility.

 Image readJpg(List<int> bytes) => decodeJpg(bytes);

 

-

-/**

- * Encode an image to the JPEG format.

- */

-List<int> encodeJpg(Image image, {int quality: 100}) {

+/// Encode an image to the JPEG format.

+List<int> encodeJpg(Image image, {int quality = 100}) {

   return new JpegEncoder(quality: quality).encodeImage(image);

 }

 

-/**

- * Renamed to [encodeJpg], left for backward compatibility.

- */

-List<int> writeJpg(Image image, {int quality: 100}) =>

-  encodeJpg(image, quality: quality);

+/// Renamed to [encodeJpg], left for backward compatibility.

+List<int> writeJpg(Image image, {int quality = 100}) =>

+    encodeJpg(image, quality: quality);

 

-

-/**

- * Decode a PNG formatted image.

- */

+/// Decode a PNG formatted image.

 Image decodePng(List<int> bytes) {

   return new PngDecoder().decodeImage(bytes);

 }

 

-/**

- * Decode a PNG formatted animation.

- */

+/// Decode a PNG formatted animation.

 Animation decodePngAnimation(List<int> bytes) {

   return new PngDecoder().decodeAnimation(bytes);

 }

 

-/**

- * Renamed to [decodePng], left for backward compatibility.

- */

+/// Renamed to [decodePng], left for backward compatibility.

 Image readPng(List<int> bytes) => decodePng(bytes);

 

-/**

- * Encode an image to the PNG format.

- */

-List<int> encodePng(Image image, {int level: 6}) {

+/// Encode an image to the PNG format.

+List<int> encodePng(Image image, {int level = 6}) {

   return new PngEncoder(level: level).encodeImage(image);

 }

 

-/**

- * Encode an animation to the PNG format.

- */

-List<int> encodePngAnimation(Animation anim, {int level: 6}) {

+/// Encode an animation to the PNG format.

+List<int> encodePngAnimation(Animation anim, {int level = 6}) {

   return new PngEncoder(level: level).encodeAnimation(anim);

 }

 

-/**

- * Renamed to [encodePng], left for backward compatibility.

- */

-List<int> writePng(Image image, {int level: 6}) =>

+/// Renamed to [encodePng], left for backward compatibility.

+List<int> writePng(Image image, {int level = 6}) =>

     encodePng(image, level: level);

 

-/**

- * Decode a Targa formatted image.

- */

+/// Decode a Targa formatted image.

 Image decodeTga(List<int> bytes) {

   return new TgaDecoder().decodeImage(bytes);

 }

 

-/**

- * Renamed to [decodeTga], left for backward compatibility.

- */

+/// Renamed to [decodeTga], left for backward compatibility.

 Image readTga(List<int> bytes) => decodeTga(bytes);

 

-/**

- * Encode an image to the Targa format.

- */

+/// Encode an image to the Targa format.

 List<int> encodeTga(Image image) {

   return new TgaEncoder().encodeImage(image);

 }

 

-/**

- * Renamed to [encodeTga], left for backward compatibility.

- */

+/// Renamed to [encodeTga], left for backward compatibility.

 List<int> writeTga(Image image) => encodeTga(image);

 

-/**

- * Decode a WebP formatted image (first frame for animations).

- */

+/// Decode a WebP formatted image (first frame for animations).

 Image decodeWebP(List<int> bytes) {

   return new WebPDecoder().decodeImage(bytes);

 }

 

-/**

- * Decode an animated WebP file.  If the webp isn't animated, the animation

- * will contain a single frame with the webp's image.

- */

+/// Decode an animated WebP file.  If the webp isn't animated, the animation

+/// will contain a single frame with the webp's image.

 Animation decodeWebPAnimation(List<int> bytes) {

   return new WebPDecoder().decodeAnimation(bytes);

 }

 

-/**

- * Decode a GIF formatted image (first frame for animations).

- */

+/// Decode a GIF formatted image (first frame for animations).

 Image decodeGif(List<int> bytes) {

   return new GifDecoder().decodeImage(bytes);

 }

 

-/**

- * Decode an animated GIF file.  If the gif isn't animated, the animation

- * will contain a single frame with the gif's image.

- */

+/// Decode an animated GIF file.  If the gif isn't animated, the animation

+/// will contain a single frame with the gif's image.

 Animation decodeGifAnimation(List<int> bytes) {

   return new GifDecoder().decodeAnimation(bytes);

 }

 

-/**

- * Encode an image to the GIF format.

- */

+/// Encode an image to the GIF format.

 List<int> encodeGif(Image image) {

   return new GifEncoder().encodeImage(image);

 }

 

-/**

- * Encode an animation to the GIF format.

- */

+/// Encode an animation to the GIF format.

 List<int> encodeGifAnimation(Animation anim) {

   return new GifEncoder().encodeAnimation(anim);

 }

 

-/**

- * Decode a TIFF formatted image.

- */

+/// Decode a TIFF formatted image.

 Image decodeTiff(List<int> bytes) {

   return new TiffDecoder().decodeImage(bytes);

 }

 

-/**

- * Decode an multi-image (animated) TIFF file.  If the tiff doesn't have

- * multiple images, the animation will contain a single frame with the tiff's

- * image.

- */

+/// Decode an multi-image (animated) TIFF file.  If the tiff doesn't have

+/// multiple images, the animation will contain a single frame with the tiff's

+/// image.

 Animation decodeTiffAnimation(List<int> bytes) {

   return new TiffDecoder().decodeAnimation(bytes);

 }

 

-/**

- * Decode a Photoshop PSD formatted image.

- */

+/// Decode a Photoshop PSD formatted image.

 Image decodePsd(List<int> bytes) {

   return new PsdDecoder().decodeImage(bytes);

 }

 

-/**

- * Decode an OpenEXR formatted image, tone-mapped using the

- * given [exposure] to a low-dynamic-range [Image].

- */

-Image decodeExr(List<int> bytes, {double exposure: 1.0}) {

+/// Decode an OpenEXR formatted image, tone-mapped using the

+/// given [exposure] to a low-dynamic-range [Image].

+Image decodeExr(List<int> bytes, {double exposure = 1.0}) {

   return new ExrDecoder(exposure: exposure).decodeImage(bytes);

 }

diff --git a/image/lib/src/formats/gif/gif_color_map.dart b/image/lib/src/formats/gif/gif_color_map.dart
index 5325a42..e7bb341 100755
--- a/image/lib/src/formats/gif/gif_color_map.dart
+++ b/image/lib/src/formats/gif/gif_color_map.dart
@@ -8,15 +8,15 @@
   int transparent;

   final Uint8List colors;

 

-  GifColorMap(int numColors) :

-    this.numColors = numColors,

-    colors = Uint8List(numColors * 3) {

+  GifColorMap(int numColors)

+      : this.numColors = numColors,

+        colors = Uint8List(numColors * 3) {

     bitsPerPixel = _bitSize(numColors);

   }

 

-  int operator[](int index) => colors[index];

+  int operator [](int index) => colors[index];

 

-  operator[]=(int index, int value) => colors[index] = value;

+  operator []=(int index, int value) => colors[index] = value;

 

   int color(int index) {

     int ci = index * 3;

diff --git a/image/lib/src/formats/gif/gif_image_desc.dart b/image/lib/src/formats/gif/gif_image_desc.dart
index c4b0b88..28e48fc 100755
--- a/image/lib/src/formats/gif/gif_image_desc.dart
+++ b/image/lib/src/formats/gif/gif_image_desc.dart
@@ -28,8 +28,8 @@
       colorMap = GifColorMap(1 << bitsPerPixel);

 

       for (int i = 0; i < colorMap.numColors; ++i) {

-        colorMap.setColor(i, input.readByte(), input.readByte(),

-                          input.readByte());

+        colorMap.setColor(

+            i, input.readByte(), input.readByte(), input.readByte());

       }

     }

 

diff --git a/image/lib/src/formats/gif_decoder.dart b/image/lib/src/formats/gif_decoder.dart
index 57d9f78..df341c8 100755
--- a/image/lib/src/formats/gif_decoder.dart
+++ b/image/lib/src/formats/gif_decoder.dart
@@ -9,10 +9,8 @@
 import 'gif/gif_image_desc.dart';

 import 'gif/gif_info.dart';

 

-/**

- * A decoder for the GIF image format. This supports both single frame and

- * animated GIF files, and transparency.

- */

+/// A decoder for the GIF image format. This supports both single frame and

+/// animated GIF files, and transparency.

 class GifDecoder extends Decoder {

   GifInfo info;

 

@@ -22,27 +20,21 @@
     }

   }

 

-  /**

-   * Is the given file a valid Gif image?

-   */

+  /// Is the given file a valid Gif image?

   bool isValidFile(List<int> bytes) {

     _input = InputBuffer(bytes);

     info = GifInfo();

     return _getInfo();

   }

 

-  /**

-   * How many frames are available to decode?

-   *

-   * You should have prepared the decoder by either passing the file bytes

-   * to the constructor, or calling getInfo.

-   */

+  /// How many frames are available to decode?

+  ///

+  /// You should have prepared the decoder by either passing the file bytes

+  /// to the constructor, or calling getInfo.

   int numFrames() => (info != null) ? info.numFrames : 0;

 

-  /**

-   * Validate the file is a Gif image and get information about it.

-   * If the file is not a valid Gif image, null is returned.

-   */

+  /// Validate the file is a Gif image and get information about it.

+  /// If the file is not a valid Gif image, null is returned.

   GifInfo startDecode(List<int> bytes) {

     _input = InputBuffer(bytes);

 

@@ -80,6 +72,7 @@
         }

       }

     } catch (error) {

+      print(error);

     }

 

     //_numFrames = info.numFrames;

@@ -87,7 +80,7 @@
   }

 

   void _readApplicationExt(InputBuffer _input) {

-    int blockSize =  _input.readByte();

+    int blockSize = _input.readByte();

     String tag = _input.readString(blockSize);

     if (tag == "NETSCAPE2.0") {

       int b1 = _input.readByte();

@@ -101,7 +94,7 @@
   }

 

   void _readGraphicsControlExt(InputBuffer _input) {

-    /*int blockSize =*/  _input.readByte();

+    /*int blockSize =*/ _input.readByte();

     int b = _input.readByte();

     int duration = _input.readUint16();

     int transparent = _input.readByte();

@@ -143,13 +136,13 @@
     }

 

     //_frame = frame;

-    InternalGifImageDesc gifImage = info.frames[frame];

+    InternalGifImageDesc gifImage = info.frames[frame] as InternalGifImageDesc;

     _input.offset = gifImage.inputPosition;

 

     return _decodeImage(info.frames[frame]);

   }

 

-  Image decodeImage(List<int> bytes, {int frame: 0}) {

+  Image decodeImage(List<int> bytes, {int frame = 0}) {

     if (startDecode(bytes) == null) {

       return null;

     }

@@ -158,10 +151,8 @@
     return decodeFrame(frame);

   }

 

-  /**

-   * Decode all of the frames of an animated gif. For single image gifs,

-   * this will return an animation with a single frame.

-   */

+  /// Decode all of the frames of an animated gif. For single image gifs,

+  /// this will return an animation with a single frame.

   Animation decodeAnimation(List<int> bytes) {

     if (startDecode(bytes) == null) {

       return null;

@@ -187,9 +178,8 @@
         return null;

       }

 

-      GifColorMap colorMap = (frame.colorMap != null) ?

-                              frame.colorMap :

-                                info.globalColorMap;

+      GifColorMap colorMap =

+          (frame.colorMap != null) ? frame.colorMap : info.globalColorMap;

 

       if (lastImage != null) {

         if (frame.clearFrame) {

@@ -248,14 +238,12 @@
     int width = gifImage.width;

     int height = gifImage.height;

 

-    if (gifImage.x + width > info.width ||

-        gifImage.y + height > info.height) {

+    if (gifImage.x + width > info.width || gifImage.y + height > info.height) {

       return null;

     }

 

-    GifColorMap colorMap = (gifImage.colorMap != null) ?

-                           gifImage.colorMap :

-                             info.globalColorMap;

+    GifColorMap colorMap =

+        (gifImage.colorMap != null) ? gifImage.colorMap : info.globalColorMap;

 

     _pixelCount = width * height;

 

@@ -265,8 +253,9 @@
     if (gifImage.interlaced) {

       int row = gifImage.y;

       for (int i = 0, j = 0; i < 4; ++i) {

-        for (int y = row + INTERLACED_OFFSET[i]; y < row + height;

-             y += INTERLACED_JUMP[i], ++j) {

+        for (int y = row + INTERLACED_OFFSET[i];

+            y < row + height;

+            y += INTERLACED_JUMP[i], ++j) {

           if (!_getLine(line)) {

             return image;

           }

@@ -285,8 +274,7 @@
     return image;

   }

 

-  void _updateImage(Image image, int y, GifColorMap colorMap,

-                    Uint8List line) {

+  void _updateImage(Image image, int y, GifColorMap colorMap, Uint8List line) {

     if (colorMap != null) {

       for (int x = 0, width = line.length; x < width; ++x) {

         image.setPixel(x, y, colorMap.color(line[x]));

@@ -345,11 +333,9 @@
     return true;

   }

 

-  /**

-   * Continue to get the image code in compressed form. This routine should be

-   * called until NULL block is returned.

-   * The block should NOT be freed by the user (not dynamically allocated).

-   */

+  /// Continue to get the image code in compressed form. This routine should be

+  /// called until NULL block is returned.

+  /// The block should NOT be freed by the user (not dynamically allocated).

   bool _skipRemainder() {

     if (_input.isEOS) {

       return true;

@@ -365,12 +351,10 @@
     return true;

   }

 

-  /**

-   * The LZ decompression routine:

-   * This version decompress the given gif file into Line of length LineLen.

-   * This routine can be called few times (one per scan line, for example), in

-   * order the complete the whole image.

-   */

+  /// The LZ decompression routine:

+  /// This version decompress the given gif file into Line of length LineLen.

+  /// This routine can be called few times (one per scan line, for example), in

+  /// order the complete the whole image.

   bool _decompressLine(Uint8List line) {

     if (_stackPtr > LZ_MAX_CODE) {

       return false;

@@ -380,7 +364,7 @@
     int i = 0;

 

     if (_stackPtr != 0) {

-      // Let pop the stack off before continueing to read the gif file:

+      // Let pop the stack off before continuing to read the gif file:

       while (_stackPtr != 0 && i < lineLen) {

         line[i++] = _stack[--_stackPtr];

       }

@@ -431,10 +415,8 @@
             // exactly the prefix of last code!

             if (_currentCode == _runningCode - 2) {

               currentPrefix = _lastCode;

-              _suffix[_runningCode - 2] =

-                   _stack[_stackPtr++] = _getPrefixChar(_prefix,

-                                                        _lastCode,

-                                                        _clearCode);

+              _suffix[_runningCode - 2] = _stack[_stackPtr++] =

+                  _getPrefixChar(_prefix, _lastCode, _clearCode);

             } else {

               return false;

             }

@@ -449,7 +431,8 @@
           // loop more than that.

           int j = 0;

           while (j++ <= LZ_MAX_CODE &&

-                 currentPrefix > _clearCode && currentPrefix <= LZ_MAX_CODE) {

+              currentPrefix > _clearCode &&

+              currentPrefix <= LZ_MAX_CODE) {

             _stack[_stackPtr++] = _suffix[currentPrefix];

             currentPrefix = _prefix[currentPrefix];

           }

@@ -477,10 +460,10 @@
             // prefix code is last code and the suffix char is

             // exactly the prefix of last code!

             _suffix[_runningCode - 2] =

-                 _getPrefixChar(_prefix, _lastCode, _clearCode);

+                _getPrefixChar(_prefix, _lastCode, _clearCode);

           } else {

             _suffix[_runningCode - 2] =

-               _getPrefixChar(_prefix, _currentCode, _clearCode);

+                _getPrefixChar(_prefix, _currentCode, _clearCode);

           }

         }

 

@@ -491,11 +474,9 @@
     return true;

   }

 

-  /**

-   * The LZ decompression input routine:

-   * This routine is responsible for the decompression of the bit stream from

-   * 8 bits (bytes) packets, into the real codes.

-   */

+  /// The LZ decompression input routine:

+  /// This routine is responsible for the decompression of the bit stream from

+  /// 8 bits (bytes) packets, into the real codes.

   int _decompressInput() {

     int code;

 

@@ -521,7 +502,8 @@
     // however that codes above 4095 are used for special signaling.

     // If we're using LZ_BITS bits already and we're at the max code, just

     // keep using the table as it is, don't increment Private->RunningCode.

-    if (_runningCode < LZ_MAX_CODE + 2 && ++_runningCode > _maxCode1 &&

+    if (_runningCode < LZ_MAX_CODE + 2 &&

+        ++_runningCode > _maxCode1 &&

         _runningBits < LZ_BITS) {

       _maxCode1 <<= 1;

       _runningBits++;

@@ -530,12 +512,10 @@
     return code;

   }

 

-  /**

-   * Routine to trace the Prefixes linked list until we get a prefix which is

-   * not code, but a pixel value (less than ClearCode). Returns that pixel value.

-   * If image is defective, we might loop here forever, so we limit the loops to

-   * the maximum possible if image O.k. - LZ_MAX_CODE times.

-   */

+  /// Routine to trace the Prefixes linked list until we get a prefix which is

+  /// not code, but a pixel value (less than ClearCode). Returns that pixel value.

+  /// If image is defective, we might loop here forever, so we limit the loops to

+  /// the maximum possible if image O.k. - LZ_MAX_CODE times.

   int _getPrefixChar(Uint32List prefix, int code, int clearCode) {

     int i = 0;

     while (code > clearCode && i++ <= LZ_MAX_CODE) {

@@ -547,12 +527,10 @@
     return code;

   }

 

-  /**

-   * This routines read one gif data block at a time and buffers it internally

-   * so that the decompression routine could access it.

-   * The routine returns the next byte from its internal buffer (or read next

-   * block in if buffer empty) and returns null on failure.

-   */

+  /// This routines read one gif data block at a time and buffers it internally

+  /// so that the decompression routine could access it.

+  /// The routine returns the next byte from its internal buffer (or read next

+  /// block in if buffer empty) and returns null on failure.

   int _bufferedInput() {

     int nextByte;

     if (_buffer[0] == 0) {

@@ -566,8 +544,8 @@
         return null;

       }

 

-      _buffer.setRange(1, 1 + _buffer[0],

-          _input.readBytes(_buffer[0]).toUint8List());

+      _buffer.setRange(

+          1, 1 + _buffer[0], _input.readBytes(_buffer[0]).toUint8List());

 

       nextByte = _buffer[1];

       _buffer[1] = 2; // We use now the second place as last char read!

@@ -622,14 +600,24 @@
   static const int LZ_MAX_CODE = 4095;

   static const int LZ_BITS = 12;

 

-  static const int NO_SUCH_CODE = 4098;  // Impossible code, to signal empty.

+  static const int NO_SUCH_CODE = 4098; // Impossible code, to signal empty.

 

   static const List<int> CODE_MASKS = const [

-      0x0000, 0x0001, 0x0003, 0x0007,

-      0x000f, 0x001f, 0x003f, 0x007f,

-      0x00ff, 0x01ff, 0x03ff, 0x07ff,

-      0x0fff];

+    0x0000,

+    0x0001,

+    0x0003,

+    0x0007,

+    0x000f,

+    0x001f,

+    0x003f,

+    0x007f,

+    0x00ff,

+    0x01ff,

+    0x03ff,

+    0x07ff,

+    0x0fff

+  ];

 

-  static const List<int> INTERLACED_OFFSET = const [ 0, 4, 2, 1 ];

-  static const List<int> INTERLACED_JUMP = const [ 8, 8, 4, 2 ];

+  static const List<int> INTERLACED_OFFSET = const [0, 4, 2, 1];

+  static const List<int> INTERLACED_JUMP = const [8, 8, 4, 2];

 }

diff --git a/image/lib/src/formats/gif_encoder.dart b/image/lib/src/formats/gif_encoder.dart
index bc19f6e..d871244 100755
--- a/image/lib/src/formats/gif_encoder.dart
+++ b/image/lib/src/formats/gif_encoder.dart
@@ -6,12 +6,8 @@
 import '../util/output_buffer.dart';

 import 'encoder.dart';

 

-/**

- *

- */

 class GifEncoder extends Encoder {

-  GifEncoder({this.delay: 80}) :

-    _encodedFrames = 0;

+  GifEncoder({this.delay = 80}) : _encodedFrames = 0;

 

   void addFrame(Image image, {int duration}) {

     if (output == null) {

@@ -42,9 +38,7 @@
     _lastImage = _lastColorMap.getIndexMap(image);

   }

 

-  /**

-   * Encode the images that were added with [addFrame].

-   */

+  /// Encode the images that were added with [addFrame].

   List<int> finish() {

     List<int> bytes;

     if (output == null) {

@@ -71,22 +65,16 @@
     return bytes;

   }

 

-  /**

-   * Encode a single frame image.

-   */

+  /// Encode a single frame image.

   List<int> encodeImage(Image image) {

     addFrame(image);

     return finish();

   }

 

-  /**

-   * Does this encoder support animation?

-   */

+  /// Does this encoder support animation?

   bool get supportsAnimation => true;

 

-  /**

-   * Encode an animation.

-   */

+  /// Encode an animation.

   List<int> encodeAnimation(Animation anim) {

     repeat = anim.loopCount;

     for (Image f in anim) {

@@ -95,8 +83,8 @@
     return finish();

   }

 

-  void _addImage(Uint8List image, int width, int height,

-                 Uint8List colorMap, int numColors) {

+  void _addImage(Uint8List image, int width, int height, Uint8List colorMap,

+      int numColors) {

     // Image desc

     output.writeByte(IMAGE_DESC_RECORD_TYPE);

     output.writeUint16(0); // image position x,y = 0,0

@@ -139,7 +127,6 @@
     _clearFlag = false;

     _freeEnt = _clearCode + 2;

 

-

     int _nextPixel() {

       if (remaining == 0) {

         return EOF;

@@ -176,7 +163,8 @@
           ent = codeTab[i];

           c = _nextPixel();

           continue;

-        } else if (hTab[i] >= 0) { // non-empty slot

+        } else if (hTab[i] >= 0) {

+          // non-empty slot

           int disp = hSizeReg - i; // secondary hash (after G. Knott)

           if (i == 0) {

             disp = 1;

@@ -301,19 +289,17 @@
     int dispose = 0; // dispose = no action

 

     // packed fields

-    output.writeByte(0 |       // 1:3 reserved

-                     dispose | // 4:6 disposal

-                     0 |       // 7   user input - 0 = none

-                     transparency); // 8   transparency flag

+    output.writeByte(0 | // 1:3 reserved

+        dispose | // 4:6 disposal

+        0 | // 7   user input - 0 = none

+        transparency); // 8   transparency flag

 

     output.writeUint16(delay); // delay x 1/100 sec

     output.writeByte(0); // transparent color index

     output.writeByte(0); // block terminator

   }

 

-  /**

-   * GIF header and Logical Screen Descriptor

-   */

+  /// GIF header and Logical Screen Descriptor

   void _writeHeader(int width, int height) {

     output.writeBytes(GIF89_STAMP.codeUnits);

     output.writeUint16(width);

@@ -360,7 +346,22 @@
   static const int BITS = 12;

   static const int HSIZE = 5003; // 80% occupancy

   static const List<int> MASKS = const [

-    0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F,

-    0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF,

-    0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF];

+    0x0000,

+    0x0001,

+    0x0003,

+    0x0007,

+    0x000F,

+    0x001F,

+    0x003F,

+    0x007F,

+    0x00FF,

+    0x01FF,

+    0x03FF,

+    0x07FF,

+    0x0FFF,

+    0x1FFF,

+    0x3FFF,

+    0x7FFF,

+    0xFFFF

+  ];

 }

diff --git a/image/lib/src/formats/jpeg/jpeg.dart b/image/lib/src/formats/jpeg/jpeg.dart
index 73b4da5..1a2c174 100755
--- a/image/lib/src/formats/jpeg/jpeg.dart
+++ b/image/lib/src/formats/jpeg/jpeg.dart
@@ -1,35 +1,38 @@
 class Jpeg {

   static const dctZigZag = const [

-      0,  1,  8, 16,  9,  2,  3, 10,

-      17, 24, 32, 25, 18, 11,  4,  5,

-      12, 19, 26, 33, 40, 48, 41, 34,

-      27, 20, 13,  6,  7, 14, 21, 28,

-      35, 42, 49, 56, 57, 50, 43, 36,

-      29, 22, 15, 23, 30, 37, 44, 51,

-      58, 59, 52, 45, 38, 31, 39, 46,

-      53, 60, 61, 54, 47, 55, 62, 63,

-      63, 63, 63, 63, 63, 63, 63, 63, // extra entries for safety in decoder

-      63, 63, 63, 63, 63, 63, 63, 63 ];

+    0, 1, 8, 16, 9, 2, 3, 10,

+    17, 24, 32, 25, 18, 11, 4, 5,

+    12, 19, 26, 33, 40, 48, 41, 34,

+    27, 20, 13, 6, 7, 14, 21, 28,

+    35, 42, 49, 56, 57, 50, 43, 36,

+    29, 22, 15, 23, 30, 37, 44, 51,

+    58, 59, 52, 45, 38, 31, 39, 46,

+    53, 60, 61, 54, 47, 55, 62, 63,

+    63, 63, 63, 63, 63, 63, 63, 63, // extra entries for safety in decoder

+    63, 63, 63, 63, 63, 63, 63, 63

+  ];

 

   static const int DCTSIZE = 8; // The basic DCT block is 8x8 samples

-  static const int DCTSIZE2 = 64;  // DCTSIZE squared; # of elements in a block

+  static const int DCTSIZE2 = 64; // DCTSIZE squared; # of elements in a block

   static const int NUM_QUANT_TBLS = 4; // Quantization tables are numbered 0..3

   static const int NUM_HUFF_TBLS = 4; // Huffman tables are numbered 0..3

-  static const int NUM_ARITH_TBLS = 16;  // Arith-coding tables are numbered 0..15

-  static const int MAX_COMPS_IN_SCAN = 4; // JPEG limit on # of components in one scan

+  static const int NUM_ARITH_TBLS =

+      16; // Arith-coding tables are numbered 0..15

+  static const int MAX_COMPS_IN_SCAN =

+      4; // JPEG limit on # of components in one scan

   static const int MAX_SAMP_FACTOR = 4; // JPEG limit on sampling factors

 

-  static const int M_SOF0  = 0xc0;

-  static const int M_SOF1  = 0xc1;

-  static const int M_SOF2  = 0xc2;

-  static const int M_SOF3  = 0xc3;

+  static const int M_SOF0 = 0xc0;

+  static const int M_SOF1 = 0xc1;

+  static const int M_SOF2 = 0xc2;

+  static const int M_SOF3 = 0xc3;

 

-  static const int M_SOF5  = 0xc5;

-  static const int M_SOF6  = 0xc6;

-  static const int M_SOF7  = 0xc7;

+  static const int M_SOF5 = 0xc5;

+  static const int M_SOF6 = 0xc6;

+  static const int M_SOF7 = 0xc7;

 

-  static const int M_JPG   = 0xc8;

-  static const int M_SOF9  = 0xc9;

+  static const int M_JPG = 0xc8;

+  static const int M_SOF9 = 0xc9;

   static const int M_SOF10 = 0xca;

   static const int M_SOF11 = 0xcb;

 

@@ -37,38 +40,38 @@
   static const int M_SOF14 = 0xce;

   static const int M_SOF15 = 0xcf;

 

-  static const int M_DHT   = 0xc4;

+  static const int M_DHT = 0xc4;

 

-  static const int M_DAC   = 0xcc;

+  static const int M_DAC = 0xcc;

 

-  static const int M_RST0  = 0xd0;

-  static const int M_RST1  = 0xd1;

-  static const int M_RST2  = 0xd2;

-  static const int M_RST3  = 0xd3;

-  static const int M_RST4  = 0xd4;

-  static const int M_RST5  = 0xd5;

-  static const int M_RST6  = 0xd6;

-  static const int M_RST7  = 0xd7;

+  static const int M_RST0 = 0xd0;

+  static const int M_RST1 = 0xd1;

+  static const int M_RST2 = 0xd2;

+  static const int M_RST3 = 0xd3;

+  static const int M_RST4 = 0xd4;

+  static const int M_RST5 = 0xd5;

+  static const int M_RST6 = 0xd6;

+  static const int M_RST7 = 0xd7;

 

-  static const int M_SOI   = 0xd8;

-  static const int M_EOI   = 0xd9;

-  static const int M_SOS   = 0xda;

-  static const int M_DQT   = 0xdb;

-  static const int M_DNL   = 0xdc;

-  static const int M_DRI   = 0xdd;

-  static const int M_DHP   = 0xde;

-  static const int M_EXP   = 0xdf;

+  static const int M_SOI = 0xd8;

+  static const int M_EOI = 0xd9;

+  static const int M_SOS = 0xda;

+  static const int M_DQT = 0xdb;

+  static const int M_DNL = 0xdc;

+  static const int M_DRI = 0xdd;

+  static const int M_DHP = 0xde;

+  static const int M_EXP = 0xdf;

 

-  static const int M_APP0  = 0xe0; // JFIF, JFXX, CIFF, AVI1, Ocad

-  static const int M_APP1  = 0xe1; // EXIF, ExtendedXMP, XMP, QVCI, FLIR

-  static const int M_APP2  = 0xe2; // ICC_Profile, FPXR, MPF, PreviewImage

-  static const int M_APP3  = 0xe3; // Meta, Stim, PreviewImage

-  static const int M_APP4  = 0xe4; // Scalado, FPXR, PreviewImage

-  static const int M_APP5  = 0xe5; // RMETA, PreviewImage

-  static const int M_APP6  = 0xe6; // EPPIM, NITF, HP_TDHD, GoPro

-  static const int M_APP7  = 0xe7; // Pentax, Qualcomm

-  static const int M_APP8  = 0xe8; // SPIFF

-  static const int M_APP9  = 0xe9; // MediaJukebox

+  static const int M_APP0 = 0xe0; // JFIF, JFXX, CIFF, AVI1, Ocad

+  static const int M_APP1 = 0xe1; // EXIF, ExtendedXMP, XMP, QVCI, FLIR

+  static const int M_APP2 = 0xe2; // ICC_Profile, FPXR, MPF, PreviewImage

+  static const int M_APP3 = 0xe3; // Meta, Stim, PreviewImage

+  static const int M_APP4 = 0xe4; // Scalado, FPXR, PreviewImage

+  static const int M_APP5 = 0xe5; // RMETA, PreviewImage

+  static const int M_APP6 = 0xe6; // EPPIM, NITF, HP_TDHD, GoPro

+  static const int M_APP7 = 0xe7; // Pentax, Qualcomm

+  static const int M_APP8 = 0xe8; // SPIFF

+  static const int M_APP9 = 0xe9; // MediaJukebox

   static const int M_APP10 = 0xea; // Comment

   static const int M_APP11 = 0xeb; // Jpeg-HDR

   static const int M_APP12 = 0xec; // PictureInfo, Ducky

@@ -76,11 +79,11 @@
   static const int M_APP14 = 0xee; // ADOBE

   static const int M_APP15 = 0xef; // GraphicConverter

 

-  static const int M_JPG0  = 0xf0;

+  static const int M_JPG0 = 0xf0;

   static const int M_JPG13 = 0xfd;

-  static const int M_COM   = 0xfe;

+  static const int M_COM = 0xfe;

 

-  static const int M_TEM   = 0x01;

+  static const int M_TEM = 0x01;

 

   static const int M_ERROR = 0x100;

 }

diff --git a/image/lib/src/formats/jpeg/jpeg_component.dart b/image/lib/src/formats/jpeg/jpeg_component.dart
index 44b8221..0c2cb0e 100755
--- a/image/lib/src/formats/jpeg/jpeg_component.dart
+++ b/image/lib/src/formats/jpeg/jpeg_component.dart
@@ -15,6 +15,5 @@
   JpegComponent(this.hSamples, this.vSamples, this.quantizationTableList,

       this.quantizationIndex);

 

-  Int16List get quantizationTable =>

-      quantizationTableList[quantizationIndex];

+  Int16List get quantizationTable => quantizationTableList[quantizationIndex];

 }

diff --git a/image/lib/src/formats/jpeg/jpeg_data.dart b/image/lib/src/formats/jpeg/jpeg_data.dart
index f32f91f..3c0f75b 100755
--- a/image/lib/src/formats/jpeg/jpeg_data.dart
+++ b/image/lib/src/formats/jpeg/jpeg_data.dart
@@ -12,18 +12,18 @@
 import 'jpeg_jfif.dart';

 import 'jpeg_scan.dart';

 

-class JpegData  {

+class JpegData {

   InputBuffer input;

   JpegJfif jfif;

   JpegAdobe adobe;

   JpegFrame frame;

   int resetInterval;

-  ExifData exif = ExifData();

-  final List<Int16List> quantizationTables = List(Jpeg.NUM_QUANT_TBLS);

-  final List<JpegFrame> frames = [];

-  final List huffmanTablesAC = [];

-  final List huffmanTablesDC = [];

-  final List<_ComponentData> components = [];

+  final exif = ExifData();

+  final quantizationTables = List<Int16List>(Jpeg.NUM_QUANT_TBLS);

+  final frames = List<JpegFrame>();

+  final huffmanTablesAC = List<dynamic>();

+  final huffmanTablesDC = List<dynamic>();

+  final components = List<_ComponentData>();

 

   bool validate(List<int> bytes) {

     input = InputBuffer(bytes, bigEndian: true);

@@ -37,7 +37,8 @@
     bool hasSOS = false;

 

     marker = _nextMarker();

-    while (marker != Jpeg.M_EOI && !input.isEOS) { // EOI (End of image)

+    while (marker != Jpeg.M_EOI && !input.isEOS) {

+      // EOI (End of image)

       _skipBlock();

       switch (marker) {

         case Jpeg.M_SOF0: // SOF0 (Start of Frame, Baseline DCT)

@@ -71,7 +72,8 @@
     bool hasSOS = false;

 

     marker = _nextMarker();

-    while (marker != Jpeg.M_EOI && !input.isEOS) { // EOI (End of image)

+    while (marker != Jpeg.M_EOI && !input.isEOS) {

+      // EOI (End of image)

       switch (marker) {

         case Jpeg.M_SOF0: // SOF0 (Start of Frame, Baseline DCT)

         case Jpeg.M_SOF1: // SOF1 (Start of Frame, Extended DCT)

@@ -116,9 +118,12 @@
 

     for (int i = 0; i < frame.componentsOrder.length; ++i) {

       JpegComponent component = frame.components[frame.componentsOrder[i]];

-      components.add(_ComponentData(component.hSamples, frame.maxHSamples,

-                                    component.vSamples, frame.maxVSamples,

-                                    _buildComponentData(frame, component)));

+      components.add(_ComponentData(

+          component.hSamples,

+          frame.maxHSamples,

+          component.vSamples,

+          frame.maxVSamples,

+          _buildComponentData(frame, component)));

     }

   }

 

@@ -127,8 +132,6 @@
   int get height => frame.scanLines;

 

   Uint8List getData(int width, int height) {

-    num scaleX = 1;

-    num scaleY = 1;

     _ComponentData component1;

     _ComponentData component2;

     _ComponentData component3;

@@ -295,8 +298,9 @@
               K = component4Line[x4];

 

               C = 255 - _clamp8((Y + 1.402 * (Cr - 128)).toInt());

-              M = 255 - _clamp8((Y - 0.3441363 * (Cb - 128) -

-                                    0.71413636 * (Cr - 128)).toInt());

+              M = 255 -

+                  _clamp8((Y - 0.3441363 * (Cb - 128) - 0.71413636 * (Cr - 128))

+                      .toInt());

               Ye = 255 - _clamp8((Y + 1.772 * (Cb - 128)).toInt());

             }

 

@@ -316,7 +320,8 @@
 

   void _read() {

     int marker = _nextMarker();

-    if (marker != Jpeg.M_SOI) { // SOI (Start of Image)

+    if (marker != Jpeg.M_SOI) {

+      // SOI (Start of Image)

       throw new ImageException('Start Of Image marker not found.');

     }

 

@@ -365,7 +370,8 @@
         case Jpeg.M_SOF13:

         case Jpeg.M_SOF14:

         case Jpeg.M_SOF15:

-          throw new ImageException('Unhandled frame type ${marker.toRadixString(16)}');

+          throw new ImageException(

+              'Unhandled frame type ${marker.toRadixString(16)}');

 

         case Jpeg.M_DHT: // DHT (Define Huffman Tables)

           _readDHT(block);

@@ -394,8 +400,8 @@
           }

 

           if (marker != 0) {

-            throw new ImageException('Unknown JPEG marker ' +

-                marker.toRadixString(16));

+            throw new ImageException(

+                'Unknown JPEG marker ' + marker.toRadixString(16));

           }

           break;

       }

@@ -467,14 +473,15 @@
       case FMT_ULONG:

         return block.readUint32();

       case FMT_URATIONAL:

-      case FMT_SRATIONAL: {

-        int num = block.readInt32();

-        int den = block.readInt32();

-        if (den == 0) {

-          return 0.0;

+      case FMT_SRATIONAL:

+        {

+          int num = block.readInt32();

+          int den = block.readInt32();

+          if (den == 0) {

+            return 0.0;

+          }

+          return num / den;

         }

-        return num / den;

-      }

       case FMT_SSHORT:

         return block.readInt16();

       case FMT_SLONG:

@@ -529,7 +536,8 @@
       }

 

       switch (tag) {

-        case TAG_ORIENTATION: {

+        case TAG_ORIENTATION:

+          {

             num orientation = _readExifValue(block, format);

             exif.orientation = orientation.toInt();

           }

@@ -564,9 +572,11 @@
 

     // Exif Directory

     String alignment = block.readString(2);

-    if (alignment == 'II') { // Exif is in Intel order

+    if (alignment == 'II') {

+      // Exif is in Intel order

       block.bigEndian = false;

-    } else if (alignment == 'MM') { // Exif section in Motorola order

+    } else if (alignment == 'MM') {

+      // Exif section in Motorola order

       block.bigEndian = true;

     } else {

       return;

@@ -575,7 +585,7 @@
     block.skip(2);

 

     int offset = block.readUint32();

-    if (offset < 8 || offset > 16){

+    if (offset < 8 || offset > 16) {

       if (offset > block.length - 16) {

         // invalid offset for first Exif IFD value ;

         block.bigEndian = saveEndian;

@@ -597,8 +607,11 @@
 

     if (marker == Jpeg.M_APP0) {

       // 'JFIF\0'

-      if (appData[0] == 0x4A && appData[1] == 0x46 &&

-          appData[2] == 0x49 && appData[3] == 0x46 && appData[4] == 0) {

+      if (appData[0] == 0x4A &&

+          appData[1] == 0x46 &&

+          appData[2] == 0x49 &&

+          appData[3] == 0x46 &&

+          appData[4] == 0) {

         jfif = JpegJfif();

         jfif.majorVersion = appData[5];

         jfif.minorVersion = appData[6];

@@ -615,9 +628,12 @@
       _readExifData(appData);

     } else if (marker == Jpeg.M_APP14) {

       // 'Adobe\0'

-      if (appData[0] == 0x41 && appData[1] == 0x64 &&

-          appData[2] == 0x6F && appData[3] == 0x62 &&

-          appData[4] == 0x65 && appData[5] == 0) {

+      if (appData[0] == 0x41 &&

+          appData[1] == 0x64 &&

+          appData[2] == 0x6F &&

+          appData[3] == 0x62 &&

+          appData[4] == 0x65 &&

+          appData[5] == 0) {

         adobe = JpegAdobe();

         adobe.version = appData[6];

         adobe.flags0 = shiftL(appData[7], 8) | appData[8];

@@ -707,10 +723,12 @@
       }

 

       List ht;

-      if (index & 0x10 != 0) { // AC table definition

+      if (index & 0x10 != 0) {

+        // AC table definition

         index -= 0x10;

         ht = huffmanTablesAC;

-      } else { // DC table definition

+      } else {

+        // DC table definition

         ht = huffmanTablesDC;

       }

 

@@ -732,7 +750,7 @@
       throw new ImageException('Invalid SOS block');

     }

 

-    List components = List(n);

+    final components = List<dynamic>(n);

     for (int i = 0; i < n; i++) {

       int id = block.readByte();

       int c = block.readByte();

@@ -748,10 +766,10 @@
       int ac_tbl_no = c & 15;

 

       if (dc_tbl_no < huffmanTablesDC.length) {

-        component.huffmanTableDC = huffmanTablesDC[dc_tbl_no];

+        component.huffmanTableDC = huffmanTablesDC[dc_tbl_no] as List;

       }

       if (ac_tbl_no < huffmanTablesAC.length) {

-        component.huffmanTableAC = huffmanTablesAC[ac_tbl_no];

+        component.huffmanTableAC = huffmanTablesAC[ac_tbl_no] as List;

       }

     }

 

@@ -762,13 +780,14 @@
     int Ah = shiftR(successiveApproximation, 4) & 15;

     int Al = successiveApproximation & 15;

 

-    new JpegScan(input, frame, components, resetInterval,

-                  spectralStart, spectralEnd, Ah, Al).decode();

+    new JpegScan(input, frame, components, resetInterval, spectralStart,

+            spectralEnd, Ah, Al)

+        .decode();

   }

 

   List _buildHuffmanTable(Uint8List codeLengths, Uint8List values) {

     int k = 0;

-    List code = [];

+    final code = List<dynamic>();

     int length = 16;

 

     while (length > 0 && (codeLengths[length - 1] == 0)) {

@@ -777,18 +796,18 @@
 

     code.add(new _JpegHuffman());

 

-    _JpegHuffman p = code[0];

+    _JpegHuffman p = code[0] as _JpegHuffman;

     _JpegHuffman q;

 

     for (int i = 0; i < length; i++) {

       for (int j = 0; j < codeLengths[i]; j++) {

-        p = code.removeLast();

+        p = code.removeLast() as _JpegHuffman;

         if (p.children.length <= p.index) {

           p.children.length = p.index + 1;

         }

         p.children[p.index] = values[k];

         while (p.index > 0) {

-          p = code.removeLast();

+          p = code.removeLast() as _JpegHuffman;

         }

         p.index++;

         code.add(p);

@@ -816,11 +835,11 @@
       }

     }

 

-    return code[0].children;

+    return code[0].children as List;

   }

 

-  List<Uint8List> _buildComponentData(JpegFrame frame,

-                                      JpegComponent component) {

+  List<Uint8List> _buildComponentData(

+      JpegFrame frame, JpegComponent component) {

     final int blocksPerLine = component.blocksPerLine;

     final int blocksPerColumn = component.blocksPerColumn;

     int samplesPerLine = shiftL(blocksPerLine, 3);

@@ -837,8 +856,7 @@
 

       for (int blockCol = 0; blockCol < blocksPerLine; blockCol++) {

         _quantizeAndInverse(component.quantizationTable,

-                            component.blocks[blockRow][blockCol],

-                            r, R);

+            component.blocks[blockRow][blockCol] as Int32List, r, R);

 

         int offset = 0;

         int sample = shiftL(blockCol, 3);

@@ -864,18 +882,14 @@
 

   static Uint8List dctClip;

 

-  /**

-   * Quantize the coefficients and apply IDCT.

-   *

-   * A port of poppler's IDCT method which in turn is taken from:

-   * Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,

-   * "Practical Fast 1-D DCT Algorithms with 11 Multiplications",

-   * IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989, 988-991.

-   */

-  void _quantizeAndInverse(Int16List quantizationTable,

-                           Int32List coefBlock,

-                           Uint8List dataOut,

-                           Int32List dataIn) {

+  /// Quantize the coefficients and apply IDCT.

+  ///

+  /// A port of poppler's IDCT method which in turn is taken from:

+  /// Christoph Loeffler, Adriaan Ligtenberg, George S. Moschytz,

+  /// "Practical Fast 1-D DCT Algorithms with 11 Multiplications",

+  /// IEEE Intl. Conf. on Acoustics, Speech & Signal Processing, 1989, 988-991.

+  void _quantizeAndInverse(Int16List quantizationTable, Int32List coefBlock,

+      Uint8List dataOut, Int32List dataIn) {

     Int32List p = dataIn;

 

     const int dctClipOffset = 256;

@@ -895,13 +909,13 @@
     }

 

     // IDCT constants (20.12 fixed point format)

-    const int COS_1 = 4017;  // cos(pi/16)*4096

-    const int SIN_1 = 799;   // sin(pi/16)*4096

-    const int COS_3 = 3406;  // cos(3*pi/16)*4096

-    const int SIN_3 = 2276;  // sin(3*pi/16)*4096

-    const int COS_6 = 1567;  // cos(6*pi/16)*4096

-    const int SIN_6 = 3784;  // sin(6*pi/16)*4096

-    const int SQRT_2 = 5793;  // sqrt(2)*4096

+    const int COS_1 = 4017; // cos(pi/16)*4096

+    const int SIN_1 = 799; // sin(pi/16)*4096

+    const int COS_3 = 3406; // cos(3*pi/16)*4096

+    const int SIN_3 = 2276; // sin(3*pi/16)*4096

+    const int COS_6 = 1567; // cos(6*pi/16)*4096

+    const int SIN_6 = 3784; // sin(6*pi/16)*4096

+    const int SQRT_2 = 5793; // sqrt(2)*4096

     const int SQRT_1D2 = 2896; // sqrt(2) / 2

 

     // de-quantize

@@ -914,12 +928,12 @@
     for (int i = 0; i < 8; ++i, row += 8) {

       // check for all-zero AC coefficients

       if (p[1 + row] == 0 &&

-      p[2 + row] == 0 &&

-      p[3 + row] == 0 &&

-      p[4 + row] == 0 &&

-      p[5 + row] == 0 &&

-      p[6 + row] == 0 &&

-      p[7 + row] == 0) {

+          p[2 + row] == 0 &&

+          p[3 + row] == 0 &&

+          p[4 + row] == 0 &&

+          p[5 + row] == 0 &&

+          p[6 + row] == 0 &&

+          p[7 + row] == 0) {

         int t = shiftR((SQRT_2 * p[0 + row] + 512), 10);

         p[row + 0] = t;

         p[row + 1] = t;

@@ -987,12 +1001,12 @@
 

       // check for all-zero AC coefficients

       if (p[1 * 8 + col] == 0 &&

-      p[2 * 8 + col] == 0 &&

-      p[3 * 8 + col] == 0 &&

-      p[4 * 8 + col] == 0 &&

-      p[5 * 8 + col] == 0 &&

-      p[6 * 8 + col] == 0 &&

-      p[7 * 8 + col] == 0) {

+          p[2 * 8 + col] == 0 &&

+          p[3 * 8 + col] == 0 &&

+          p[4 * 8 + col] == 0 &&

+          p[5 * 8 + col] == 0 &&

+          p[6 * 8 + col] == 0 &&

+          p[7 * 8 + col] == 0) {

         int t = shiftR((SQRT_2 * dataIn[i] + 8192), 14);

         p[0 * 8 + col] = t;

         p[1 * 8 + col] = t;

@@ -1010,8 +1024,10 @@
       int v1 = shiftR((SQRT_2 * p[4 * 8 + col] + 2048), 12);

       int v2 = p[2 * 8 + col];

       int v3 = p[6 * 8 + col];

-      int v4 = shiftR((SQRT_1D2 * (p[1 * 8 + col] - p[7 * 8 + col]) + 2048), 12);

-      int v7 = shiftR((SQRT_1D2 * (p[1 * 8 + col] + p[7 * 8 + col]) + 2048), 12);

+      int v4 =

+          shiftR((SQRT_1D2 * (p[1 * 8 + col] - p[7 * 8 + col]) + 2048), 12);

+      int v7 =

+          shiftR((SQRT_1D2 * (p[1 * 8 + col] + p[7 * 8 + col]) + 2048), 12);

       int v5 = p[3 * 8 + col];

       int v6 = p[5 * 8 + col];

 

@@ -1061,112 +1077,1044 @@
   }

 

   static const CRR = const [

-    -179, -178, -177, -175, -174, -172, -171, -170, -168, -167, -165, -164, -163,

-    -161, -160, -158, -157, -156, -154, -153, -151, -150, -149, -147, -146, -144, -143,

-    -142, -140, -139, -137, -136, -135, -133, -132, -130, -129, -128, -126, -125,

-    -123, -122, -121, -119, -118, -116, -115, -114, -112, -111, -109, -108, -107,

-    -105, -104, -102, -101, -100, -98, -97, -95, -94, -93, -91, -90, -88, -87, -86,

-    -84, -83, -81, -80, -79, -77, -76, -74, -73, -72, -70, -69, -67, -66, -64, -63,

-    -62, -60, -59, -57, -56, -55, -53, -52, -50, -49, -48, -46, -45, -43, -42, -41,

-    -39, -38, -36, -35, -34, -32, -31, -29, -28, -27, -25, -24, -22, -21, -20, -18,

-    -17, -15, -14, -13, -11, -10, -8, -7, -6, -4, -3, -1, 0, 1, 3, 4, 6, 7, 8, 10,

-    11, 13, 14, 15, 17, 18, 20, 21, 22, 24, 25, 27, 28, 29, 31, 32, 34, 35, 36, 38,

-    39, 41, 42, 43, 45, 46, 48, 49, 50, 52, 53, 55, 56, 57, 59, 60, 62, 63, 64, 66,

-    67, 69, 70, 72, 73, 74, 76, 77, 79, 80, 81, 83, 84, 86, 87, 88, 90, 91, 93, 94,

-    95, 97, 98, 100, 101, 102, 104, 105, 107, 108, 109, 111, 112, 114, 115, 116, 118,

-    119, 121, 122, 123, 125, 126, 128, 129, 130, 132, 133, 135, 136, 137, 139, 140,

-    142, 143, 144, 146, 147, 149, 150, 151, 153, 154, 156, 157, 158, 160, 161, 163,

-    164, 165, 167, 168, 170, 171, 172, 174, 175, 177, 178

+    -179,

+    -178,

+    -177,

+    -175,

+    -174,

+    -172,

+    -171,

+    -170,

+    -168,

+    -167,

+    -165,

+    -164,

+    -163,

+    -161,

+    -160,

+    -158,

+    -157,

+    -156,

+    -154,

+    -153,

+    -151,

+    -150,

+    -149,

+    -147,

+    -146,

+    -144,

+    -143,

+    -142,

+    -140,

+    -139,

+    -137,

+    -136,

+    -135,

+    -133,

+    -132,

+    -130,

+    -129,

+    -128,

+    -126,

+    -125,

+    -123,

+    -122,

+    -121,

+    -119,

+    -118,

+    -116,

+    -115,

+    -114,

+    -112,

+    -111,

+    -109,

+    -108,

+    -107,

+    -105,

+    -104,

+    -102,

+    -101,

+    -100,

+    -98,

+    -97,

+    -95,

+    -94,

+    -93,

+    -91,

+    -90,

+    -88,

+    -87,

+    -86,

+    -84,

+    -83,

+    -81,

+    -80,

+    -79,

+    -77,

+    -76,

+    -74,

+    -73,

+    -72,

+    -70,

+    -69,

+    -67,

+    -66,

+    -64,

+    -63,

+    -62,

+    -60,

+    -59,

+    -57,

+    -56,

+    -55,

+    -53,

+    -52,

+    -50,

+    -49,

+    -48,

+    -46,

+    -45,

+    -43,

+    -42,

+    -41,

+    -39,

+    -38,

+    -36,

+    -35,

+    -34,

+    -32,

+    -31,

+    -29,

+    -28,

+    -27,

+    -25,

+    -24,

+    -22,

+    -21,

+    -20,

+    -18,

+    -17,

+    -15,

+    -14,

+    -13,

+    -11,

+    -10,

+    -8,

+    -7,

+    -6,

+    -4,

+    -3,

+    -1,

+    0,

+    1,

+    3,

+    4,

+    6,

+    7,

+    8,

+    10,

+    11,

+    13,

+    14,

+    15,

+    17,

+    18,

+    20,

+    21,

+    22,

+    24,

+    25,

+    27,

+    28,

+    29,

+    31,

+    32,

+    34,

+    35,

+    36,

+    38,

+    39,

+    41,

+    42,

+    43,

+    45,

+    46,

+    48,

+    49,

+    50,

+    52,

+    53,

+    55,

+    56,

+    57,

+    59,

+    60,

+    62,

+    63,

+    64,

+    66,

+    67,

+    69,

+    70,

+    72,

+    73,

+    74,

+    76,

+    77,

+    79,

+    80,

+    81,

+    83,

+    84,

+    86,

+    87,

+    88,

+    90,

+    91,

+    93,

+    94,

+    95,

+    97,

+    98,

+    100,

+    101,

+    102,

+    104,

+    105,

+    107,

+    108,

+    109,

+    111,

+    112,

+    114,

+    115,

+    116,

+    118,

+    119,

+    121,

+    122,

+    123,

+    125,

+    126,

+    128,

+    129,

+    130,

+    132,

+    133,

+    135,

+    136,

+    137,

+    139,

+    140,

+    142,

+    143,

+    144,

+    146,

+    147,

+    149,

+    150,

+    151,

+    153,

+    154,

+    156,

+    157,

+    158,

+    160,

+    161,

+    163,

+    164,

+    165,

+    167,

+    168,

+    170,

+    171,

+    172,

+    174,

+    175,

+    177,

+    178

   ];

 

   static const CRG = const [

-    5990656, 5943854, 5897052, 5850250, 5803448, 5756646, 5709844, 5663042, 5616240,

-    5569438, 5522636, 5475834, 5429032, 5382230, 5335428, 5288626, 5241824, 5195022,

-    5148220, 5101418, 5054616, 5007814, 4961012, 4914210, 4867408, 4820606, 4773804,

-    4727002, 4680200, 4633398, 4586596, 4539794, 4492992, 4446190, 4399388, 4352586,

-    4305784, 4258982, 4212180, 4165378, 4118576, 4071774, 4024972, 3978170, 3931368,

-    3884566, 3837764, 3790962, 3744160, 3697358, 3650556, 3603754, 3556952, 3510150,

-    3463348, 3416546, 3369744, 3322942, 3276140, 3229338, 3182536, 3135734, 3088932,

-    3042130, 2995328, 2948526, 2901724, 2854922, 2808120, 2761318, 2714516, 2667714,

-    2620912, 2574110, 2527308, 2480506, 2433704, 2386902, 2340100, 2293298, 2246496,

-    2199694, 2152892, 2106090, 2059288, 2012486, 1965684, 1918882, 1872080, 1825278,

-    1778476, 1731674, 1684872, 1638070, 1591268, 1544466, 1497664, 1450862, 1404060,

-    1357258, 1310456, 1263654, 1216852, 1170050, 1123248, 1076446, 1029644, 982842,

-    936040, 889238, 842436, 795634, 748832, 702030, 655228, 608426, 561624, 514822,

-    468020, 421218, 374416, 327614, 280812, 234010, 187208, 140406, 93604, 46802, 0,

-    -46802, -93604, -140406, -187208, -234010, -280812, -327614, -374416, -421218,

-    -468020, -514822, -561624, -608426, -655228, -702030, -748832, -795634, -842436,

-    -889238, -936040, -982842, -1029644, -1076446, -1123248, -1170050, -1216852,

-    -1263654, -1310456, -1357258, -1404060, -1450862, -1497664, -1544466, -1591268,

-    -1638070, -1684872, -1731674, -1778476, -1825278, -1872080, -1918882, -1965684,

-    -2012486, -2059288, -2106090, -2152892, -2199694, -2246496, -2293298, -2340100,

-    -2386902, -2433704, -2480506, -2527308, -2574110, -2620912, -2667714, -2714516,

-    -2761318, -2808120, -2854922, -2901724, -2948526, -2995328, -3042130, -3088932,

-    -3135734, -3182536, -3229338, -3276140, -3322942, -3369744, -3416546, -3463348,

-    -3510150, -3556952, -3603754, -3650556, -3697358, -3744160, -3790962, -3837764,

-    -3884566, -3931368, -3978170, -4024972, -4071774, -4118576, -4165378, -4212180,

-    -4258982, -4305784, -4352586, -4399388, -4446190, -4492992, -4539794, -4586596,

-    -4633398, -4680200, -4727002, -4773804, -4820606, -4867408, -4914210, -4961012,

-    -5007814, -5054616, -5101418, -5148220, -5195022, -5241824, -5288626, -5335428,

-    -5382230, -5429032, -5475834, -5522636, -5569438, -5616240, -5663042, -5709844,

-    -5756646, -5803448, -5850250, -5897052, -5943854

+    5990656,

+    5943854,

+    5897052,

+    5850250,

+    5803448,

+    5756646,

+    5709844,

+    5663042,

+    5616240,

+    5569438,

+    5522636,

+    5475834,

+    5429032,

+    5382230,

+    5335428,

+    5288626,

+    5241824,

+    5195022,

+    5148220,

+    5101418,

+    5054616,

+    5007814,

+    4961012,

+    4914210,

+    4867408,

+    4820606,

+    4773804,

+    4727002,

+    4680200,

+    4633398,

+    4586596,

+    4539794,

+    4492992,

+    4446190,

+    4399388,

+    4352586,

+    4305784,

+    4258982,

+    4212180,

+    4165378,

+    4118576,

+    4071774,

+    4024972,

+    3978170,

+    3931368,

+    3884566,

+    3837764,

+    3790962,

+    3744160,

+    3697358,

+    3650556,

+    3603754,

+    3556952,

+    3510150,

+    3463348,

+    3416546,

+    3369744,

+    3322942,

+    3276140,

+    3229338,

+    3182536,

+    3135734,

+    3088932,

+    3042130,

+    2995328,

+    2948526,

+    2901724,

+    2854922,

+    2808120,

+    2761318,

+    2714516,

+    2667714,

+    2620912,

+    2574110,

+    2527308,

+    2480506,

+    2433704,

+    2386902,

+    2340100,

+    2293298,

+    2246496,

+    2199694,

+    2152892,

+    2106090,

+    2059288,

+    2012486,

+    1965684,

+    1918882,

+    1872080,

+    1825278,

+    1778476,

+    1731674,

+    1684872,

+    1638070,

+    1591268,

+    1544466,

+    1497664,

+    1450862,

+    1404060,

+    1357258,

+    1310456,

+    1263654,

+    1216852,

+    1170050,

+    1123248,

+    1076446,

+    1029644,

+    982842,

+    936040,

+    889238,

+    842436,

+    795634,

+    748832,

+    702030,

+    655228,

+    608426,

+    561624,

+    514822,

+    468020,

+    421218,

+    374416,

+    327614,

+    280812,

+    234010,

+    187208,

+    140406,

+    93604,

+    46802,

+    0,

+    -46802,

+    -93604,

+    -140406,

+    -187208,

+    -234010,

+    -280812,

+    -327614,

+    -374416,

+    -421218,

+    -468020,

+    -514822,

+    -561624,

+    -608426,

+    -655228,

+    -702030,

+    -748832,

+    -795634,

+    -842436,

+    -889238,

+    -936040,

+    -982842,

+    -1029644,

+    -1076446,

+    -1123248,

+    -1170050,

+    -1216852,

+    -1263654,

+    -1310456,

+    -1357258,

+    -1404060,

+    -1450862,

+    -1497664,

+    -1544466,

+    -1591268,

+    -1638070,

+    -1684872,

+    -1731674,

+    -1778476,

+    -1825278,

+    -1872080,

+    -1918882,

+    -1965684,

+    -2012486,

+    -2059288,

+    -2106090,

+    -2152892,

+    -2199694,

+    -2246496,

+    -2293298,

+    -2340100,

+    -2386902,

+    -2433704,

+    -2480506,

+    -2527308,

+    -2574110,

+    -2620912,

+    -2667714,

+    -2714516,

+    -2761318,

+    -2808120,

+    -2854922,

+    -2901724,

+    -2948526,

+    -2995328,

+    -3042130,

+    -3088932,

+    -3135734,

+    -3182536,

+    -3229338,

+    -3276140,

+    -3322942,

+    -3369744,

+    -3416546,

+    -3463348,

+    -3510150,

+    -3556952,

+    -3603754,

+    -3650556,

+    -3697358,

+    -3744160,

+    -3790962,

+    -3837764,

+    -3884566,

+    -3931368,

+    -3978170,

+    -4024972,

+    -4071774,

+    -4118576,

+    -4165378,

+    -4212180,

+    -4258982,

+    -4305784,

+    -4352586,

+    -4399388,

+    -4446190,

+    -4492992,

+    -4539794,

+    -4586596,

+    -4633398,

+    -4680200,

+    -4727002,

+    -4773804,

+    -4820606,

+    -4867408,

+    -4914210,

+    -4961012,

+    -5007814,

+    -5054616,

+    -5101418,

+    -5148220,

+    -5195022,

+    -5241824,

+    -5288626,

+    -5335428,

+    -5382230,

+    -5429032,

+    -5475834,

+    -5522636,

+    -5569438,

+    -5616240,

+    -5663042,

+    -5709844,

+    -5756646,

+    -5803448,

+    -5850250,

+    -5897052,

+    -5943854

   ];

 

   static const CBG = const [

-    2919680, 2897126, 2874572, 2852018, 2829464, 2806910, 2784356, 2761802, 2739248, 2716694,

-    2694140, 2671586, 2649032, 2626478, 2603924, 2581370, 2558816, 2536262, 2513708,

-    2491154, 2468600, 2446046, 2423492, 2400938, 2378384, 2355830, 2333276, 2310722,

-    2288168, 2265614, 2243060, 2220506, 2197952, 2175398, 2152844, 2130290, 2107736,

-    2085182, 2062628, 2040074, 2017520, 1994966, 1972412, 1949858, 1927304, 1904750,

-    1882196, 1859642, 1837088, 1814534, 1791980, 1769426, 1746872, 1724318, 1701764,

-    1679210, 1656656, 1634102, 1611548, 1588994, 1566440, 1543886, 1521332, 1498778,

-    1476224, 1453670, 1431116, 1408562, 1386008, 1363454, 1340900, 1318346, 1295792,

-    1273238, 1250684, 1228130, 1205576, 1183022, 1160468, 1137914, 1115360,

-    1092806, 1070252, 1047698, 1025144, 1002590, 980036, 957482, 934928, 912374,

-    889820, 867266, 844712, 822158, 799604, 777050, 754496, 731942, 709388, 686834,

-    664280, 641726, 619172, 596618, 574064, 551510, 528956, 506402, 483848, 461294,

-    438740, 416186, 393632, 371078, 348524, 325970, 303416, 280862, 258308, 235754,

-    213200, 190646, 168092, 145538, 122984, 100430, 77876, 55322, 32768, 10214, -12340,

-    -34894, -57448, -80002, -102556, -125110, -147664, -170218, -192772, -215326,

-    -237880, -260434, -282988, -305542, -328096, -350650, -373204, -395758, -418312,

-    -440866, -463420, -485974, -508528, -531082, -553636, -576190, -598744, -621298,

-    -643852, -666406, -688960, -711514, -734068, -756622, -779176, -801730, -824284,

-    -846838, -869392, -891946, -914500, -937054, -959608, -982162, -1004716, -1027270,

-    -1049824, -1072378, -1094932, -1117486, -1140040, -1162594, -1185148, -1207702,

-    -1230256, -1252810, -1275364, -1297918, -1320472, -1343026, -1365580, -1388134,

-    -1410688, -1433242, -1455796, -1478350, -1500904, -1523458, -1546012, -1568566,

-    -1591120, -1613674, -1636228, -1658782, -1681336, -1703890, -1726444, -1748998,

-    -1771552, -1794106, -1816660, -1839214, -1861768, -1884322, -1906876, -1929430,

-    -1951984, -1974538, -1997092, -2019646, -2042200, -2064754, -2087308, -2109862,

-    -2132416, -2154970, -2177524, -2200078, -2222632, -2245186, -2267740, -2290294,

-    -2312848, -2335402, -2357956, -2380510, -2403064, -2425618, -2448172, -2470726,

-    -2493280, -2515834, -2538388, -2560942, -2583496, -2606050, -2628604, -2651158,

-    -2673712, -2696266, -2718820, -2741374, -2763928, -2786482, -2809036, -2831590

+    2919680,

+    2897126,

+    2874572,

+    2852018,

+    2829464,

+    2806910,

+    2784356,

+    2761802,

+    2739248,

+    2716694,

+    2694140,

+    2671586,

+    2649032,

+    2626478,

+    2603924,

+    2581370,

+    2558816,

+    2536262,

+    2513708,

+    2491154,

+    2468600,

+    2446046,

+    2423492,

+    2400938,

+    2378384,

+    2355830,

+    2333276,

+    2310722,

+    2288168,

+    2265614,

+    2243060,

+    2220506,

+    2197952,

+    2175398,

+    2152844,

+    2130290,

+    2107736,

+    2085182,

+    2062628,

+    2040074,

+    2017520,

+    1994966,

+    1972412,

+    1949858,

+    1927304,

+    1904750,

+    1882196,

+    1859642,

+    1837088,

+    1814534,

+    1791980,

+    1769426,

+    1746872,

+    1724318,

+    1701764,

+    1679210,

+    1656656,

+    1634102,

+    1611548,

+    1588994,

+    1566440,

+    1543886,

+    1521332,

+    1498778,

+    1476224,

+    1453670,

+    1431116,

+    1408562,

+    1386008,

+    1363454,

+    1340900,

+    1318346,

+    1295792,

+    1273238,

+    1250684,

+    1228130,

+    1205576,

+    1183022,

+    1160468,

+    1137914,

+    1115360,

+    1092806,

+    1070252,

+    1047698,

+    1025144,

+    1002590,

+    980036,

+    957482,

+    934928,

+    912374,

+    889820,

+    867266,

+    844712,

+    822158,

+    799604,

+    777050,

+    754496,

+    731942,

+    709388,

+    686834,

+    664280,

+    641726,

+    619172,

+    596618,

+    574064,

+    551510,

+    528956,

+    506402,

+    483848,

+    461294,

+    438740,

+    416186,

+    393632,

+    371078,

+    348524,

+    325970,

+    303416,

+    280862,

+    258308,

+    235754,

+    213200,

+    190646,

+    168092,

+    145538,

+    122984,

+    100430,

+    77876,

+    55322,

+    32768,

+    10214,

+    -12340,

+    -34894,

+    -57448,

+    -80002,

+    -102556,

+    -125110,

+    -147664,

+    -170218,

+    -192772,

+    -215326,

+    -237880,

+    -260434,

+    -282988,

+    -305542,

+    -328096,

+    -350650,

+    -373204,

+    -395758,

+    -418312,

+    -440866,

+    -463420,

+    -485974,

+    -508528,

+    -531082,

+    -553636,

+    -576190,

+    -598744,

+    -621298,

+    -643852,

+    -666406,

+    -688960,

+    -711514,

+    -734068,

+    -756622,

+    -779176,

+    -801730,

+    -824284,

+    -846838,

+    -869392,

+    -891946,

+    -914500,

+    -937054,

+    -959608,

+    -982162,

+    -1004716,

+    -1027270,

+    -1049824,

+    -1072378,

+    -1094932,

+    -1117486,

+    -1140040,

+    -1162594,

+    -1185148,

+    -1207702,

+    -1230256,

+    -1252810,

+    -1275364,

+    -1297918,

+    -1320472,

+    -1343026,

+    -1365580,

+    -1388134,

+    -1410688,

+    -1433242,

+    -1455796,

+    -1478350,

+    -1500904,

+    -1523458,

+    -1546012,

+    -1568566,

+    -1591120,

+    -1613674,

+    -1636228,

+    -1658782,

+    -1681336,

+    -1703890,

+    -1726444,

+    -1748998,

+    -1771552,

+    -1794106,

+    -1816660,

+    -1839214,

+    -1861768,

+    -1884322,

+    -1906876,

+    -1929430,

+    -1951984,

+    -1974538,

+    -1997092,

+    -2019646,

+    -2042200,

+    -2064754,

+    -2087308,

+    -2109862,

+    -2132416,

+    -2154970,

+    -2177524,

+    -2200078,

+    -2222632,

+    -2245186,

+    -2267740,

+    -2290294,

+    -2312848,

+    -2335402,

+    -2357956,

+    -2380510,

+    -2403064,

+    -2425618,

+    -2448172,

+    -2470726,

+    -2493280,

+    -2515834,

+    -2538388,

+    -2560942,

+    -2583496,

+    -2606050,

+    -2628604,

+    -2651158,

+    -2673712,

+    -2696266,

+    -2718820,

+    -2741374,

+    -2763928,

+    -2786482,

+    -2809036,

+    -2831590

   ];

 

   static const CBB = const [

-    -227, -225, -223, -222, -220, -218, -216, -214, -213, -211, -209, -207, -206,

-    -204, -202, -200, -198, -197, -195, -193, -191, -190, -188,

-    -186, -184, -183, -181, -179, -177, -175, -174, -172, -170, -168, -167, -165,

-    -163, -161, -159, -158, -156, -154, -152, -151, -149, -147, -145, -144, -142,

-    -140, -138, -136, -135, -133, -131, -129, -128, -126, -124, -122, -120, -119, -117,

-    -115, -113, -112, -110, -108, -106, -105, -103, -101, -99, -97, -96, -94, -92,

-    -90, -89, -87, -85, -83, -82, -80, -78, -76, -74, -73, -71, -69, -67, -66, -64,

-    -62, -60, -58, -57, -55, -53, -51, -50, -48, -46, -44, -43, -41, -39, -37, -35,

-    -34, -32, -30, -28, -27, -25, -23, -21, -19, -18, -16, -14, -12, -11, -9, -7,

-    -5, -4, -2, 0, 2, 4, 5, 7, 9, 11, 12, 14, 16, 18, 19, 21, 23, 25, 27, 28, 30, 32,

-    34, 35, 37, 39, 41, 43, 44, 46, 48, 50, 51, 53, 55, 57, 58, 60, 62, 64, 66, 67,

-    69, 71, 73, 74, 76, 78, 80, 82, 83, 85, 87, 89, 90, 92, 94, 96, 97, 99, 101, 103,

-    105, 106, 108, 110, 112, 113, 115, 117, 119, 120, 122, 124, 126, 128, 129, 131,

-    133, 135, 136, 138, 140, 142, 144, 145, 147, 149, 151, 152, 154, 156, 158, 159,

-    161, 163, 165, 167, 168, 170, 172, 174, 175, 177, 179, 181, 183, 184, 186, 188,

-    190, 191, 193, 195, 197, 198, 200, 202, 204, 206, 207, 209, 211, 213, 214, 216,

-    218, 220, 222, 223, 225

+    -227,

+    -225,

+    -223,

+    -222,

+    -220,

+    -218,

+    -216,

+    -214,

+    -213,

+    -211,

+    -209,

+    -207,

+    -206,

+    -204,

+    -202,

+    -200,

+    -198,

+    -197,

+    -195,

+    -193,

+    -191,

+    -190,

+    -188,

+    -186,

+    -184,

+    -183,

+    -181,

+    -179,

+    -177,

+    -175,

+    -174,

+    -172,

+    -170,

+    -168,

+    -167,

+    -165,

+    -163,

+    -161,

+    -159,

+    -158,

+    -156,

+    -154,

+    -152,

+    -151,

+    -149,

+    -147,

+    -145,

+    -144,

+    -142,

+    -140,

+    -138,

+    -136,

+    -135,

+    -133,

+    -131,

+    -129,

+    -128,

+    -126,

+    -124,

+    -122,

+    -120,

+    -119,

+    -117,

+    -115,

+    -113,

+    -112,

+    -110,

+    -108,

+    -106,

+    -105,

+    -103,

+    -101,

+    -99,

+    -97,

+    -96,

+    -94,

+    -92,

+    -90,

+    -89,

+    -87,

+    -85,

+    -83,

+    -82,

+    -80,

+    -78,

+    -76,

+    -74,

+    -73,

+    -71,

+    -69,

+    -67,

+    -66,

+    -64,

+    -62,

+    -60,

+    -58,

+    -57,

+    -55,

+    -53,

+    -51,

+    -50,

+    -48,

+    -46,

+    -44,

+    -43,

+    -41,

+    -39,

+    -37,

+    -35,

+    -34,

+    -32,

+    -30,

+    -28,

+    -27,

+    -25,

+    -23,

+    -21,

+    -19,

+    -18,

+    -16,

+    -14,

+    -12,

+    -11,

+    -9,

+    -7,

+    -5,

+    -4,

+    -2,

+    0,

+    2,

+    4,

+    5,

+    7,

+    9,

+    11,

+    12,

+    14,

+    16,

+    18,

+    19,

+    21,

+    23,

+    25,

+    27,

+    28,

+    30,

+    32,

+    34,

+    35,

+    37,

+    39,

+    41,

+    43,

+    44,

+    46,

+    48,

+    50,

+    51,

+    53,

+    55,

+    57,

+    58,

+    60,

+    62,

+    64,

+    66,

+    67,

+    69,

+    71,

+    73,

+    74,

+    76,

+    78,

+    80,

+    82,

+    83,

+    85,

+    87,

+    89,

+    90,

+    92,

+    94,

+    96,

+    97,

+    99,

+    101,

+    103,

+    105,

+    106,

+    108,

+    110,

+    112,

+    113,

+    115,

+    117,

+    119,

+    120,

+    122,

+    124,

+    126,

+    128,

+    129,

+    131,

+    133,

+    135,

+    136,

+    138,

+    140,

+    142,

+    144,

+    145,

+    147,

+    149,

+    151,

+    152,

+    154,

+    156,

+    158,

+    159,

+    161,

+    163,

+    165,

+    167,

+    168,

+    170,

+    172,

+    174,

+    175,

+    177,

+    179,

+    181,

+    183,

+    184,

+    186,

+    188,

+    190,

+    191,

+    193,

+    195,

+    197,

+    198,

+    200,

+    202,

+    204,

+    206,

+    207,

+    209,

+    211,

+    213,

+    214,

+    216,

+    218,

+    220,

+    222,

+    223,

+    225

   ];

 }

 

 class _JpegHuffman {

-  List children = [];

+  final children = List<dynamic>();

   int index = 0;

 }

 

@@ -1179,7 +2127,7 @@
   int hScaleShift;

   int vScaleShift;

   _ComponentData(this.hSamples, this.maxHSamples, this.vSamples,

-                 this.maxVSamples, this.lines)

-    : hScaleShift = (hSamples == 1 && maxHSamples == 2) ? 1 : 0

-    , vScaleShift = (vSamples == 1 && maxVSamples == 2) ? 1 : 0;

+      this.maxVSamples, this.lines)

+      : hScaleShift = (hSamples == 1 && maxHSamples == 2) ? 1 : 0,

+        vScaleShift = (vSamples == 1 && maxVSamples == 2) ? 1 : 0;

 }

diff --git a/image/lib/src/formats/jpeg/jpeg_frame.dart b/image/lib/src/formats/jpeg/jpeg_frame.dart
index 776f5db..d3099ea 100755
--- a/image/lib/src/formats/jpeg/jpeg_frame.dart
+++ b/image/lib/src/formats/jpeg/jpeg_frame.dart
@@ -27,16 +27,17 @@
 

     for (int componentId in components.keys) {

       JpegComponent component = components[componentId];

-      int blocksPerLine = ((samplesPerLine / 8).ceil() *

-                           component.hSamples / maxHSamples).ceil();

-      int blocksPerColumn = ((scanLines / 8).ceil() *

-                             component.vSamples / maxVSamples).ceil();

+      int blocksPerLine =

+          ((samplesPerLine / 8).ceil() * component.hSamples / maxHSamples)

+              .ceil();

+      int blocksPerColumn =

+          ((scanLines / 8).ceil() * component.vSamples / maxVSamples).ceil();

       int blocksPerLineForMcu = mcusPerLine * component.hSamples;

       int blocksPerColumnForMcu = mcusPerColumn * component.vSamples;

 

-      List blocks = List(blocksPerColumnForMcu);

+      final blocks = List<dynamic>(blocksPerColumnForMcu);

       for (int i = 0; i < blocksPerColumnForMcu; i++) {

-        List row = List(blocksPerLineForMcu);

+        final row = List<dynamic>(blocksPerLineForMcu);

         for (int j = 0; j < blocksPerLineForMcu; j++) {

           row[j] = Int32List(64);

         }

diff --git a/image/lib/src/formats/jpeg/jpeg_scan.dart b/image/lib/src/formats/jpeg/jpeg_scan.dart
index 50b2ccf..fa6ac1c 100755
--- a/image/lib/src/formats/jpeg/jpeg_scan.dart
+++ b/image/lib/src/formats/jpeg/jpeg_scan.dart
@@ -4,7 +4,6 @@
 import 'jpeg_component.dart';

 import 'jpeg_frame.dart';

 

-

 class JpegScan {

   InputBuffer input;

   JpegFrame frame;

@@ -28,9 +27,15 @@
   int successiveACState = 0;

   int successiveACNextValue;

 

-  JpegScan(this.input, this.frame, this.components,

-           this.resetInterval, this.spectralStart, this.spectralEnd,

-           this.successivePrev, this.successive) {

+  JpegScan(

+      this.input,

+      this.frame,

+      this.components,

+      this.resetInterval,

+      this.spectralStart,

+      this.spectralEnd,

+      this.successivePrev,

+      this.successive) {

     precision = frame.precision;

     samplesPerLine = frame.samplesPerLine;

     scanLines = frame.scanLines;

@@ -43,7 +48,7 @@
   void decode() {

     int componentsLength = components.length;

     JpegComponent component;

-    var decodeFn;

+    dynamic decodeFn;

 

     if (progressive) {

       if (spectralStart == 0) {

@@ -59,7 +64,8 @@
 

     int mcuExpected;

     if (componentsLength == 1) {

-      mcuExpected = (components[0].blocksPerLine * components[0].blocksPerColumn);

+      mcuExpected =

+          (components[0].blocksPerLine * components[0].blocksPerColumn) as int;

     } else {

       mcuExpected = (mcusPerLine * frame.mcusPerColumn);

     }

@@ -77,7 +83,7 @@
       eobrun = 0;

 

       if (componentsLength == 1) {

-        component = components[0];

+        component = components[0] as JpegComponent;

         for (int n = 0; n < resetInterval; n++) {

           _decodeBlock(component, decodeFn, mcu);

           mcu++;

@@ -85,7 +91,7 @@
       } else {

         for (int n = 0; n < resetInterval; n++) {

           for (int i = 0; i < componentsLength; i++) {

-            component = components[i];

+            component = components[i] as JpegComponent;

             h = component.hSamples;

             v = component.vSamples;

             for (int j = 0; j < v; j++) {

@@ -127,7 +133,7 @@
       int nextByte = input.readByte();

       if (nextByte != 0) {

         throw new ImageException('unexpected marker: ' +

-              ((bitsData << 8) | nextByte).toRadixString(16));

+            ((bitsData << 8) | nextByte).toRadixString(16));

       }

     }

 

@@ -135,8 +141,8 @@
     return (bitsData >> 7) & 1;

   }

 

-  int _decodeHuffman(tree) {

-    var node = tree;

+  int _decodeHuffman(dynamic tree) {

+    dynamic node = tree;

     int bit;

     while ((bit = _readBit()) != null) {

       node = node[bit];

@@ -149,7 +155,7 @@
   }

 

   int _receive(int length) {

-    int  n = 0;

+    int n = 0;

     while (length > 0) {

       int bit = _readBit();

       if (bit == null) {

@@ -238,7 +244,7 @@
     }

   }

 

-  void _decodeACSuccessive(JpegComponent component, zz) {

+  void _decodeACSuccessive(JpegComponent component, dynamic zz) {

     int k = spectralStart;

     int e = spectralEnd;

     int s = 0;

@@ -302,20 +308,20 @@
     }

   }

 

-  void _decodeMcu(JpegComponent component, decodeFn,

-                  int mcu, int row, int col) {

+  void _decodeMcu(

+      JpegComponent component, dynamic decodeFn, int mcu, int row, int col) {

     int mcuRow = (mcu ~/ mcusPerLine);

     int mcuCol = mcu % mcusPerLine;

     int blockRow = mcuRow * component.vSamples + row;

     int blockCol = mcuCol * component.hSamples + col;

-    if (blockRow >= component.blocks.length ||

-        blockCol >= component.blocks[blockRow].length) {

+    int numCols = component.blocks[blockRow].length as int;

+    if (blockRow >= component.blocks.length || blockCol >= numCols) {

       return;

     }

     decodeFn(component, component.blocks[blockRow][blockCol]);

   }

 

-  void _decodeBlock(JpegComponent component, decodeFn, int mcu) {

+  void _decodeBlock(JpegComponent component, dynamic decodeFn, int mcu) {

     int blockRow = mcu ~/ component.blocksPerLine;

     int blockCol = mcu % component.blocksPerLine;

     decodeFn(component, component.blocks[blockRow][blockCol]);

diff --git a/image/lib/src/formats/jpeg_decoder.dart b/image/lib/src/formats/jpeg_decoder.dart
index 284a4b4..0f13418 100755
--- a/image/lib/src/formats/jpeg_decoder.dart
+++ b/image/lib/src/formats/jpeg_decoder.dart
@@ -1,5 +1,3 @@
-import 'dart:typed_data';

-

 import '../animation.dart';

 import '../color.dart';

 import '../exif_data.dart';

@@ -11,16 +9,12 @@
 import 'jpeg/jpeg_data.dart';

 import 'jpeg/jpeg_info.dart';

 

-/**

- * Decode a jpeg encoded image.

- */

+/// Decode a jpeg encoded image.

 class JpegDecoder extends Decoder {

   JpegInfo info;

   InputBuffer input;

 

-  /**

-   * Is the given file a valid JPEG image?

-   */

+  /// Is the given file a valid JPEG image?

   bool isValidFile(List<int> data) {

     return new JpegData().validate(data);

   }

@@ -51,7 +45,7 @@
     return image;

   }

 

-  Image decodeImage(List<int> data, {int frame: 0}) {

+  Image decodeImage(List<int> data, {int frame = 0}) {

     JpegData jpeg = JpegData();

     jpeg.read(data);

 

diff --git a/image/lib/src/formats/jpeg_encoder.dart b/image/lib/src/formats/jpeg_encoder.dart
index 943867d..d68b49c 100755
--- a/image/lib/src/formats/jpeg_encoder.dart
+++ b/image/lib/src/formats/jpeg_encoder.dart
@@ -6,14 +6,12 @@
 import 'encoder.dart';

 import 'jpeg/jpeg.dart';

 

-/**

- * Encode an image to the JPEG format.

- *

- * Derived from:

- * https://github.com/owencm/javascript-jpeg-encoder

- */

+/// Encode an image to the JPEG format.

+///

+/// Derived from:

+/// https://github.com/owencm/javascript-jpeg-encoder

 class JpegEncoder extends Encoder {

-  JpegEncoder({int quality: 100}) {

+  JpegEncoder({int quality = 100}) {

     _initHuffmanTbl();

     _initCategoryNumber();

     _initRGBYUVTable();

@@ -21,10 +19,11 @@
   }

 

   void setQuality(int quality) {

-    quality = quality.clamp(0, 100);

+    quality = quality.clamp(0, 100).toInt();

 

     if (currentQuality == quality) {

-      return; // don't recalc if unchanged

+      // don't re-calc if unchanged

+      return;

     }

 

     int sf = 0;

@@ -115,8 +114,8 @@
 

     // Do the bit alignment of the EOI marker

     if (_bytepos >= 0) {

-      final fillbits = [(1 << (_bytepos + 1)) - 1, _bytepos + 1];

-      _writeBits(fp, fillbits);

+      final fillBits = [(1 << (_bytepos + 1)) - 1, _bytepos + 1];

+      _writeBits(fp, fillBits);

     }

 

     _writeMarker(fp, Jpeg.M_EOI);

@@ -184,10 +183,10 @@
     }

   }

 

-  List _computeHuffmanTbl(List nrcodes, List std_table) {

+  List<List<int>> _computeHuffmanTbl(List<int> nrcodes, List<int> std_table) {

     int codevalue = 0;

     int pos_in_table = 0;

-    List HT = List();

+    List<List<int>> HT = [];

     for (int k = 1; k <= 16; k++) {

       for (int j = 1; j <= nrcodes[k]; j++) {

         int index = std_table[pos_in_table];

@@ -224,7 +223,7 @@
         bitcode[32767 + nr] = [nr, cat];

       }

       // Negative numbers

-      for (int nrneg = -(nrupper-1); nrneg <= -nrlower; nrneg++) {

+      for (int nrneg = -(nrupper - 1); nrneg <= -nrlower; nrneg++) {

         category[32767 + nrneg] = cat;

         bitcode[32767 + nrneg] = [nrupper - 1 + nrneg, cat];

       }

@@ -405,20 +404,20 @@
 

   void _writeSOF0(OutputBuffer out, int width, int height) {

     _writeMarker(out, Jpeg.M_SOF0);

-    out.writeUint16(17);   // length, truecolor YUV JPG

-    out.writeByte(8);    // precision

+    out.writeUint16(17); // length, truecolor YUV JPG

+    out.writeByte(8); // precision

     out.writeUint16(height);

     out.writeUint16(width);

-    out.writeByte(3);    // nrofcomponents

-    out.writeByte(1);    // IdY

+    out.writeByte(3); // nrofcomponents

+    out.writeByte(1); // IdY

     out.writeByte(0x11); // HVY

-    out.writeByte(0);    // QTY

-    out.writeByte(2);    // IdU

+    out.writeByte(0); // QTY

+    out.writeByte(2); // IdU

     out.writeByte(0x11); // HVU

-    out.writeByte(1);    // QTU

-    out.writeByte(3);    // IdV

+    out.writeByte(1); // QTU

+    out.writeByte(3); // IdV

     out.writeByte(0x11); // HVV

-    out.writeByte(1);    // QTV

+    out.writeByte(1); // QTV

   }

 

   void _writeDQT(OutputBuffer out) {

@@ -487,9 +486,9 @@
   }

 

   int _processDU(OutputBuffer out, List<double> CDU, List<double> fdtbl,

-                 int DC, HTDC, HTAC) {

-    List EOB = HTAC[0x00];

-    List M16zeroes = HTAC[0xF0];

+                 int DC, List<List<int>> HTDC, List<List<int>> HTAC) {

+    List<int> EOB = HTAC[0x00];

+    List<int> M16zeroes = HTAC[0xF0];

     int pos;

     const I16 = 16;

     const I63 = 63;

@@ -525,7 +524,8 @@
     int lng;

     while (i <= end0pos) {

       int startpos = i;

-      for (; (DU[i] == 0) && (i <= end0pos); ++i);

+      for (; (DU[i] == 0) && (i <= end0pos); ++i) {

+      }

 

       int nrzeroes = i - startpos;

       if (nrzeroes >= I16) {

@@ -579,15 +579,15 @@
   final UVTable = Uint8List(64);

   final fdtbl_Y = Float32List(64);

   final fdtbl_UV = Float32List(64);

-  List YDC_HT;

-  List UVDC_HT;

-  List YAC_HT;

-  List UVAC_HT;

+  List<List<int>> YDC_HT;

+  List<List<int>> UVDC_HT;

+  List<List<int>> YAC_HT;

+  List<List<int>> UVAC_HT;

 

-  final bitcode = List(65535);

-  final category = List(65535);

+  final bitcode = List<List<int>>(65535);

+  final category = List<int>(65535);

   final outputfDCTQuant = List<int>(64);

-  final DU = List(64);

+  final DU = List<int>(64);

 

   final Float32List YDU = Float32List(64);

   final Float32List UDU = Float32List(64);

diff --git a/image/lib/src/formats/png/png_frame.dart b/image/lib/src/formats/png/png_frame.dart
index 407a34a..8e3d186 100755
--- a/image/lib/src/formats/png/png_frame.dart
+++ b/image/lib/src/formats/png/png_frame.dart
@@ -1,8 +1,6 @@
 import '../../internal/internal.dart';

 

-/**

- * Decodes a frame from a PNG animation.

- */

+/// Decodes a frame from a PNG animation.

 class PngFrame {

   // DisposeMode

   static const int APNG_DISPOSE_OP_NONE = 0;

diff --git a/image/lib/src/formats/png_decoder.dart b/image/lib/src/formats/png_decoder.dart
index e52f06f..365ea11 100755
--- a/image/lib/src/formats/png_decoder.dart
+++ b/image/lib/src/formats/png_decoder.dart
@@ -1,5 +1,3 @@
-//import 'dart:math' as Math;

-

 import 'package:archive/archive.dart';

 

 import '../animation.dart';

@@ -14,15 +12,11 @@
 import 'png/png_frame.dart';

 import 'png/png_info.dart';

 

-/**

- * Decode a PNG encoded image.

- */

+/// Decode a PNG encoded image.

 class PngDecoder extends Decoder {

   InternalPngInfo _info;

 

-  /**

-   * Is the given file a valid PNG image?

-   */

+  /// Is the given file a valid PNG image?

   bool isValidFile(List<int> data) {

     InputBuffer input = InputBuffer(data, bigEndian: true);

     InputBuffer pngHeader = input.readBytes(8);

@@ -38,10 +32,8 @@
 

   PngInfo get info => _info;

 

-  /**

-   * Start decoding the data as an animation sequence, but don't actually

-   * process the frames until they are requested with decodeFrame.

-   */

+  /// Start decoding the data as an animation sequence, but don't actually

+  /// process the frames until they are requested with decodeFrame.

   DecodeInfo startDecode(List<int> data) {

     _input = InputBuffer(data, bigEndian: true);

 

@@ -72,8 +64,8 @@
 

           // Validate some of the info in the header to make sure we support

           // the proposed image data.

-          if (![GRAYSCALE, RGB, INDEXED,

-                GRAYSCALE_ALPHA, RGBA].contains(_info.colorType)) {

+          if (![GRAYSCALE, RGB, INDEXED, GRAYSCALE_ALPHA, RGBA]

+              .contains(_info.colorType)) {

             return null;

           }

 

@@ -173,7 +165,7 @@
           break;

         case 'fdAT':

           /*int sequenceNumber =*/ _input.readUint32();

-          InternalPngFrame frame = _info.frames.last;

+          InternalPngFrame frame = _info.frames.last as InternalPngFrame;

           frame.fdat.add(inputPos);

           _input.skip(chunkSize - 4);

           _input.skip(4); // CRC

@@ -190,7 +182,7 @@
           } else if (_info.colorType == 0 || _info.colorType == 4) {

             /*int gray =*/ _input.readUint16();

             chunkSize -= 2;

-          } else if (_info.colorType == 2 || _info.colorType ==6) {

+          } else if (_info.colorType == 2 || _info.colorType == 6) {

             /*int r =*/ _input.readUint16();

             /*int g =*/ _input.readUint16();

             /*int b =*/ _input.readUint16();

@@ -227,14 +219,10 @@
     return _info;

   }

 

-  /**

-   * The number of frames that can be decoded.

-   */

+  /// The number of frames that can be decoded.

   int numFrames() => _info != null ? _info.numFrames : 0;

 

-  /**

-   * Decode the frame (assuming [startDecode] has already been called).

-   */

+  /// Decode the frame (assuming [startDecode] has already been called).

   Image decodeFrame(int frame) {

     if (_info == null) {

       return null;

@@ -263,7 +251,7 @@
         throw new ImageException('Invalid Frame Number: $frame');

       }

 

-      InternalPngFrame f = _info.frames[frame];

+      InternalPngFrame f = _info.frames[frame] as InternalPngFrame;

       width = f.width;

       height = f.height;

       for (int i = 0; i < f.fdat.length; ++i) {

@@ -281,7 +269,8 @@
 

     int format;

     if (_info.colorType == GRAYSCALE_ALPHA ||

-        _info.colorType == RGBA || _info.transparency != null) {

+        _info.colorType == RGBA ||

+        _info.transparency != null) {

       format = Image.RGBA;

     } else {

       format = Image.RGB;

@@ -337,14 +326,13 @@
     _info.width = origW;

     _info.height = origH;

 

-    image.iccProfile = ICCProfileData(_info.iCCPName,

-                                          ICCPCompression.deflate,

-                                          _info.iCCPData);

+    image.iccProfile =

+        ICCProfileData(_info.iCCPName, ICCPCompression.deflate, _info.iCCPData);

 

     return image;

   }

 

-  Image decodeImage(List<int> data, {int frame: 0}) {

+  Image decodeImage(List<int> data, {int frame = 0}) {

     if (startDecode(data) == null) {

       return null;

     }

@@ -387,8 +375,10 @@
             dispose == PngFrame.APNG_DISPOSE_OP_PREVIOUS) {

           lastImage.fill(_info.backgroundColor);

         }

-        copyInto(lastImage, image, dstX: frame.xOffset, dstY: frame.yOffset,

-                 blend: frame.blend == PngFrame.APNG_BLEND_OP_OVER);

+        copyInto(lastImage, image,

+            dstX: frame.xOffset,

+            dstY: frame.yOffset,

+            blend: frame.blend == PngFrame.APNG_BLEND_OP_OVER);

       } else {

         lastImage = image;

       }

@@ -401,15 +391,12 @@
     return anim;

   }

 

-  /**

-   * Process a pass of an interlaced image.

-   */

-  void _processPass(InputBuffer input, Image image,

-                    int xOffset, int yOffset, int xStep, int yStep,

-                    int passWidth, int passHeight) {

-    final int channels = (_info.colorType == GRAYSCALE_ALPHA) ? 2 :

-      (_info.colorType == RGB) ? 3 :

-        (_info.colorType == RGBA) ? 4 : 1;

+  /// Process a pass of an interlaced image.

+  void _processPass(InputBuffer input, Image image, int xOffset, int yOffset,

+      int xStep, int yStep, int passWidth, int passHeight) {

+    final int channels = (_info.colorType == GRAYSCALE_ALPHA)

+        ? 2

+        : (_info.colorType == RGB) ? 3 : (_info.colorType == RGBA) ? 4 : 1;

 

     final int pixelDepth = channels * _info.bits;

     final int bpp = (pixelDepth + 7) >> 3;

@@ -422,7 +409,8 @@
 

     //int pi = 0;

     for (int srcY = 0, dstY = yOffset, ri = 0;

-         srcY < passHeight; ++srcY, dstY += yStep, ri = 1 - ri, _progressY++) {

+        srcY < passHeight;

+        ++srcY, dstY += yStep, ri = 1 - ri, _progressY++) {

       int filterType = input.readByte();

       inData[ri] = input.readBytes(rowBytes).toUint8List();

 

@@ -444,8 +432,9 @@
 

       //int yMax = Math.min(dstY + blockHeight, _info.height);

 

-      for (int srcX = 0, dstX = xOffset; srcX < passWidth;

-           ++srcX, dstX += xStep) {

+      for (int srcX = 0, dstX = xOffset;

+          srcX < passWidth;

+          ++srcX, dstX += xStep) {

         _readPixel(rowInput, pixel);

         int c = _getColor(pixel);

         image.setPixel(dstX, dstY, c);

@@ -455,7 +444,7 @@
           //int xPixels = xMax - dstX;

           for (int i = 0; i < blockHeight; ++i) {

             for (int j = 0; j < blockWidth; ++j) {

-              image.setPixel(dstX + j, dstY + j, c);

+              image.setPixelSafe(dstX + j, dstY + j, c);

             }

           }

         }

@@ -464,9 +453,9 @@
   }

 

   void _process(InputBuffer input, Image image) {

-    final int channels = (_info.colorType == GRAYSCALE_ALPHA) ? 2 :

-                         (_info.colorType == RGB) ? 3 :

-                         (_info.colorType == RGBA) ? 4 : 1;

+    final int channels = (_info.colorType == GRAYSCALE_ALPHA)

+        ? 2

+        : (_info.colorType == RGB) ? 3 : (_info.colorType == RGBA) ? 4 : 1;

 

     final int pixelDepth = channels * _info.bits;

 

@@ -573,9 +562,7 @@
     return c << 4;

   }

 

-  /**

-   * Return the CRC of the bytes

-   */

+  /// Return the CRC of the bytes

   int _crc(String type, List<int> bytes) {

     int crc = getCrc32(type.codeUnits);

     return getCrc32(bytes, crc);

@@ -589,9 +576,7 @@
     _bitBufferLen = 0;

   }

 

-  /**

-   * Read a number of bits from the input stream.

-   */

+  /// Read a number of bits from the input stream.

   int _readBits(InputBuffer input, int numBits) {

     if (numBits == 0) {

       return 0;

@@ -620,11 +605,13 @@
     }

 

     // output byte

-    int mask = (numBits == 1) ? 1 :

-               (numBits == 2) ? 3 :

-               (numBits == 4) ? 0xf :

-               (numBits == 8) ? 0xff :

-               (numBits == 16) ? 0xffff : 0;

+    int mask = (numBits == 1)

+        ? 1

+        : (numBits == 2)

+            ? 3

+            : (numBits == 4)

+                ? 0xf

+                : (numBits == 8) ? 0xff : (numBits == 16) ? 0xffff : 0;

 

     int octet = (_bitBuffer >> (_bitBufferLen - numBits)) & mask;

 

@@ -633,9 +620,7 @@
     return octet;

   }

 

-  /**

-   * Read the next pixel from the input stream.

-   */

+  /// Read the next pixel from the input stream.

   void _readPixel(InputBuffer input, List<int> pixel) {

     switch (_info.colorType) {

       case GRAYSCALE:

@@ -664,9 +649,7 @@
     throw new ImageException('Invalid color type: ${_info.colorType}.');

   }

 

-  /**

-   * Get the color with the list of components.

-   */

+  /// Get the color with the list of components.

   int _getColor(List<int> raw) {

     switch (_info.colorType) {

       case GRAYSCALE:

@@ -750,8 +733,9 @@
       case INDEXED:

         int p = raw[0] * 3;

 

-        int a = _info.transparency != null &&

-            raw[0] < _info.transparency.length ? _info.transparency[raw[0]] : 255;

+        int a = _info.transparency != null && raw[0] < _info.transparency.length

+            ? _info.transparency[raw[0]]

+            : 255;

 

         if (p >= _info.palette.length) {

           return getColor(255, 255, 255, a);

diff --git a/image/lib/src/formats/png_encoder.dart b/image/lib/src/formats/png_encoder.dart
index 26df9da..f8daab3 100755
--- a/image/lib/src/formats/png_encoder.dart
+++ b/image/lib/src/formats/png_encoder.dart
@@ -9,14 +9,11 @@
 import '../util/output_buffer.dart';

 import 'encoder.dart';

 

-/**

- * Encode an image to the PNG format.

- */

+/// Encode an image to the PNG format.

 class PngEncoder extends Encoder {

-  PngEncoder({this.filter: FILTER_PAETH, this.level});

+  PngEncoder({this.filter = FILTER_PAETH, this.level});

 

   void addFrame(Image image) {

-

     xOffset = image.xOffset;

     yOffset = image.xOffset;

     delay = image.duration;

@@ -40,13 +37,12 @@
     }

 

     // Include room for the filter bytes (1 byte per row).

-    List<int> filteredImage = Uint8List((image.width * image.height *

-        image.format) + image.height);

+    List<int> filteredImage =

+        Uint8List((image.width * image.height * image.format) + image.height);

 

     _filter(image, filteredImage);

 

-    List<int> compressed = ZLibEncoder().encode(filteredImage,

-                                                        level: level);

+    List<int> compressed = ZLibEncoder().encode(filteredImage, level: level);

 

     if (isAnimated) {

       _writeFrameControlChunk();

@@ -82,14 +78,10 @@
     return bytes;

   }

 

-  /**

-   * Does this encoder support animation?

-   */

+  /// Does this encoder support animation?

   bool get supportsAnimation => true;

 

-  /**

-   * Encode an animation.

-   */

+  /// Encode an animation.

   List<int> encodeAnimation(Animation anim) {

     isAnimated = true;

     _frames = anim.frames.length;

@@ -101,9 +93,7 @@
     return finish();

   }

 

-  /**

-   * Encode a single frame image.

-   */

+  /// Encode a single frame image.

   List<int> encodeImage(Image image) {

     isAnimated = false;

     addFrame(image);

@@ -267,7 +257,8 @@
       if (image.format == Image.RGBA) {

         int ba = (row == 0) ? 0 : getAlpha(image.getPixel(x, row - 1));

         int xa = getAlpha(image.getPixel(x, row));

-        out[oi++] = (xa - ba) & 0xff;;

+        out[oi++] = (xa - ba) & 0xff;

+        ;

       }

     }

 

@@ -297,7 +288,8 @@
         int aa = (x == 0) ? 0 : getAlpha(image.getPixel(x - 1, row));

         int ba = (row == 0) ? 0 : getAlpha(image.getPixel(x, row - 1));

         int xa = getAlpha(image.getPixel(x, row));

-        out[oi++] = (xa - ((aa + ba) >> 1)) & 0xff;;

+        out[oi++] = (xa - ((aa + ba) >> 1)) & 0xff;

+        ;

       }

     }

 

@@ -329,9 +321,12 @@
       int bg = (row == 0) ? 0 : getGreen(image.getPixel(x, row - 1));

       int bb = (row == 0) ? 0 : getBlue(image.getPixel(x, row - 1));

 

-      int cr = (row == 0 || x == 0) ? 0 : getRed(image.getPixel(x - 1, row - 1));

-      int cg = (row == 0 || x == 0) ? 0 : getGreen(image.getPixel(x - 1, row - 1));

-      int cb = (row == 0 || x == 0) ? 0 : getBlue(image.getPixel(x - 1, row - 1));

+      int cr =

+          (row == 0 || x == 0) ? 0 : getRed(image.getPixel(x - 1, row - 1));

+      int cg =

+          (row == 0 || x == 0) ? 0 : getGreen(image.getPixel(x - 1, row - 1));

+      int cb =

+          (row == 0 || x == 0) ? 0 : getBlue(image.getPixel(x - 1, row - 1));

 

       int xr = getRed(image.getPixel(x, row));

       int xg = getGreen(image.getPixel(x, row));

@@ -347,19 +342,19 @@
       if (image.format == Image.RGBA) {

         int aa = (x == 0) ? 0 : getAlpha(image.getPixel(x - 1, row));

         int ba = (row == 0) ? 0 : getAlpha(image.getPixel(x, row - 1));

-        int ca = (row == 0 || x == 0) ? 0 : getAlpha(image.getPixel(x - 1, row - 1));

+        int ca =

+            (row == 0 || x == 0) ? 0 : getAlpha(image.getPixel(x - 1, row - 1));

         int xa = getAlpha(image.getPixel(x, row));

         int pa = _paethPredictor(aa, ba, ca);

-        out[oi++] = (xa - pa) & 0xff;;

+        out[oi++] = (xa - pa) & 0xff;

+        ;

       }

     }

 

     return oi;

   }

 

-  /**

-   * Return the CRC of the bytes

-   */

+  /// Return the CRC of the bytes

   int _crc(String type, List<int> bytes) {

     int crc = getCrc32(type.codeUnits);

     return getCrc32(bytes, crc);

diff --git a/image/lib/src/formats/psd/layer_data/psd_layer_additional_data.dart b/image/lib/src/formats/psd/layer_data/psd_layer_additional_data.dart
index 21f9732..f0686e0 100755
--- a/image/lib/src/formats/psd/layer_data/psd_layer_additional_data.dart
+++ b/image/lib/src/formats/psd/layer_data/psd_layer_additional_data.dart
@@ -4,7 +4,7 @@
 class PsdLayerAdditionalData extends PsdLayerData {

   InputBuffer data;

 

-  PsdLayerAdditionalData(String tag, InputBuffer data) :

-    this.data = data,

-    super.type(tag);

+  PsdLayerAdditionalData(String tag, InputBuffer data)

+      : this.data = data,

+        super.type(tag);

 }

diff --git a/image/lib/src/formats/psd/layer_data/psd_layer_section_divider.dart b/image/lib/src/formats/psd/layer_data/psd_layer_section_divider.dart
index 71ae146..ff9ad89 100755
--- a/image/lib/src/formats/psd/layer_data/psd_layer_section_divider.dart
+++ b/image/lib/src/formats/psd/layer_data/psd_layer_section_divider.dart
@@ -17,8 +17,7 @@
   String key;

   int subType = SUBTYPE_NORMAL;

 

-  PsdLayerSectionDivider(String tag, InputBuffer data) :

-    super.type(tag) {

+  PsdLayerSectionDivider(String tag, InputBuffer data) : super.type(tag) {

     int len = data.length;

 

     type = data.readUint32();

diff --git a/image/lib/src/formats/psd/psd_blending_ranges.dart b/image/lib/src/formats/psd/psd_blending_ranges.dart
index bb5e850..e62e544 100755
--- a/image/lib/src/formats/psd/psd_blending_ranges.dart
+++ b/image/lib/src/formats/psd/psd_blending_ranges.dart
@@ -36,4 +36,4 @@
       }

     }

   }

-}
\ No newline at end of file
+}

diff --git a/image/lib/src/formats/psd/psd_channel.dart b/image/lib/src/formats/psd/psd_channel.dart
index 7a95ce6..1c99881 100755
--- a/image/lib/src/formats/psd/psd_channel.dart
+++ b/image/lib/src/formats/psd/psd_channel.dart
@@ -24,14 +24,13 @@
   PsdChannel(this.id, this.dataLength);

 

   PsdChannel.read(InputBuffer input, this.id, int width, int height,

-                  int bitDepth, int compression, Uint16List lineLengths,

-                  int planeNumber) {

-    readPlane(input, width, height, bitDepth, compression, lineLengths,

-              planeNumber);

+      int bitDepth, int compression, Uint16List lineLengths, int planeNumber) {

+    readPlane(

+        input, width, height, bitDepth, compression, lineLengths, planeNumber);

   }

 

   void readPlane(InputBuffer input, int width, int height, int bitDepth,

-                 [int compression, Uint16List lineLengths, int planeNum = 0]) {

+      [int compression, Uint16List lineLengths, int planeNum = 0]) {

     if (compression == null) {

       compression = input.readUint16();

     }

@@ -44,8 +43,8 @@
         if (lineLengths == null) {

           lineLengths = _readLineLengths(input, height);

         }

-        _readPlaneRleCompressed(input, width, height, bitDepth, lineLengths,

-                                planeNum);

+        _readPlaneRleCompressed(

+            input, width, height, bitDepth, lineLengths, planeNum);

         break;

       default:

         throw new ImageException('Unsupported compression: $compression');

@@ -60,8 +59,8 @@
     return lineLengths;

   }

 

-  void _readPlaneUncompressed(InputBuffer input, int width, int height,

-                              int bitDepth) {

+  void _readPlaneUncompressed(

+      InputBuffer input, int width, int height, int bitDepth) {

     int len = width * height;

     if (bitDepth == 16) {

       len *= 2;

@@ -77,8 +76,7 @@
   }

 

   void _readPlaneRleCompressed(InputBuffer input, int width, int height,

-                               int bitDepth, Uint16List lineLengths,

-                               int planeNum) {

+      int bitDepth, Uint16List lineLengths, int planeNum) {

     int len = width * height;

     if (bitDepth == 16) {

       len *= 2;

diff --git a/image/lib/src/formats/psd/psd_image.dart b/image/lib/src/formats/psd/psd_image.dart
index b2a3ce7..f8e3f8d 100755
--- a/image/lib/src/formats/psd/psd_image.dart
+++ b/image/lib/src/formats/psd/psd_image.dart
@@ -1,4 +1,4 @@
-import 'dart:math' as Math;

+import 'dart:math';

 import 'dart:typed_data';

 

 import '../decode_info.dart';

@@ -58,10 +58,8 @@
   /// The number of frames that can be decoded.

   int get numFrames => 1;

 

-  /**

-   * Decode the raw psd structure without rendering the output image.

-   * Use [renderImage] to render the output image.

-   */

+  /// Decode the raw psd structure without rendering the output image.

+  /// Use [renderImage] to render the output image.

   bool decode() {

     if (!isValid || _input == null) {

       return false;

@@ -133,8 +131,8 @@
             int ab = pixels[di + 2];

             int aa = pixels[di + 3];

 

-            _blend(ar, ag, ab, aa, br, bg, bb, ba, blendMode, opacity,

-                   pixels, di);

+            _blend(

+                ar, ag, ab, aa, br, bg, bb, ba, blendMode, opacity, pixels, di);

           }

 

           di += 4;

@@ -145,10 +143,8 @@
     return mergedImage;

   }

 

-  void _blend(int ar, int ag, int ab, int aa,

-              int br, int bg, int bb, int ba,

-              int blendMode, double opacity,

-              Uint8List pixels, int di) {

+  void _blend(int ar, int ag, int ab, int aa, int br, int bg, int bb, int ba,

+      int blendMode, double opacity, Uint8List pixels, int di) {

     int r = br;

     int g = bg;

     int b = bb;

@@ -281,11 +277,11 @@
   }

 

   static int _blendLighten(int a, int b) {

-    return Math.max(a, b);

+    return max(a, b);

   }

 

   static int _blendDarken(int a, int b) {

-    return Math.min(a,  b);

+    return min(a, b);

   }

 

   static int _blendMultiply(int a, int b) {

@@ -302,11 +298,10 @@
     if (2.0 * x < aa) {

       z = 2.0 * y * x + y * (1.0 - aa) + x * (1.0 - ba);

     } else {

-      z = ba * aa - 2.0 * (aa - x) * (ba - y) +

-          y * (1.0 - aa) + x * (1.0 - ba);

+      z = ba * aa - 2.0 * (aa - x) * (ba - y) + y * (1.0 - aa) + x * (1.0 - ba);

     }

 

-    return (z * 255.0).toInt().clamp(0, 255);

+    return (z * 255.0).clamp(0, 255).toInt();

   }

 

   static int _blendColorBurn(int a, int b) {

@@ -314,22 +309,22 @@
       return 0; // We don't want to divide by zero

     }

     int c = (255.0 * (1.0 - (1.0 - (a / 255.0)) / (b / 255.0))).toInt();

-    return c.clamp(0, 255);

+    return c.clamp(0, 255).toInt();

   }

 

   static int _blendLinearBurn(int a, int b) {

-    return (a + b - 255).clamp(0, 255);

+    return (a + b - 255).clamp(0, 255).toInt();

   }

 

   static int _blendScreen(int a, int b) {

-    return (255 - ((255 - b) * (255 - a))).clamp(0, 255);

+    return (255 - ((255 - b) * (255 - a))).clamp(0, 255).toInt();

   }

 

   static int _blendColorDodge(int a, int b) {

     if (b == 255) {

       return 255;

     }

-    return (((a / 255) / (1.0 - (b / 255.0))) * 255.0).toInt().clamp(0, 255);

+    return (((a / 255) / (1.0 - (b / 255.0))) * 255.0).clamp(0, 255).toInt();

   }

 

   static int _blendLinearDodge(int a, int b) {

@@ -339,8 +334,9 @@
   static int _blendSoftLight(int a, int b) {

     double aa = a / 255.0;

     double bb = b / 255.0;

-    return (255.0 * ((1.0 - bb) * bb * aa +

-                     bb * (1.0 - (1.0 - bb) * (1.0 - aa)))).round();

+    return (255.0 *

+            ((1.0 - bb) * bb * aa + bb * (1.0 - (1.0 - bb) * (1.0 - aa))))

+        .round();

   }

 

   static int _blendHardLight(int bottom, int top) {

@@ -354,7 +350,7 @@
   }

 

   static int _blendVividLight(int bottom, int top) {

-    if ( top < 128) {

+    if (top < 128) {

       return _blendColorBurn(bottom, 2 * top);

     } else {

       return _blendColorDodge(bottom, 2 * (top - 128));

@@ -370,9 +366,9 @@
   }

 

   static int _blendPinLight(int bottom, int top) {

-    return (top < 128) ?

-           _blendDarken(bottom, 2 * top) :

-           _blendLighten(bottom, 2 * (top - 128));

+    return (top < 128)

+        ? _blendDarken(bottom, 2 * top)

+        : _blendLighten(bottom, 2 * (top - 128));

   }

 

   static int _blendHardMix(int bottom, int top) {

@@ -438,8 +434,8 @@
       }

 

       if (blockSignature == RESOURCE_BLOCK_SIGNATURE) {

-        imageResources[blockId] = PsdImageResource(blockId, blockName,

-                                                       blockData);

+        imageResources[blockId] =

+            PsdImageResource(blockId, blockName, blockData);

       }

     }

   }

@@ -504,23 +500,19 @@
     mergeImageChannels = [];

     for (int i = 0; i < channels; ++i) {

       mergeImageChannels.add(new PsdChannel.read(_imageData, i == 3 ? -1 : i,

-                                         width, height, depth, compression,

-                                         lineLengths, i));

+          width, height, depth, compression, lineLengths, i));

     }

 

-    mergedImage = createImageFromChannels(colorMode, depth,

-                                         width, height,

-                                         mergeImageChannels);

+    mergedImage = createImageFromChannels(

+        colorMode, depth, width, height, mergeImageChannels);

   }

 

   static int _ch(List<int> data, int si, int ns) {

-    return ns == 1 ? data[si] :

-           ((data[si] << 8) | data[si + 1]) >> 8;

+    return ns == 1 ? data[si] : ((data[si] << 8) | data[si + 1]) >> 8;

   }

 

   static Image createImageFromChannels(int colorMode, int bitDepth, int width,

-                                       int height,

-                                       List<PsdChannel> channelList) {

+      int height, List<PsdChannel> channelList) {

     Image output = Image(width, height);

     Uint8List pixels = output.getBytes();

 

@@ -548,8 +540,7 @@
             pixels[di++] = _ch(channel2.data, si, ns);

             pixels[di++] = _ch(channel1.data, si, ns);

             pixels[di++] = _ch(channel0.data, si, ns);

-            pixels[di++] = numChannels >= 4 ?

-                           _ch(channel_1.data, si, ns) : 255;

+            pixels[di++] = numChannels >= 4 ? _ch(channel_1.data, si, ns) : 255;

 

             var b = pixels[xi];

             var g = pixels[xi + 1];

@@ -568,8 +559,7 @@
             int L = _ch(channel0.data, si, ns) * 100 >> 8;

             int a = _ch(channel1.data, si, ns) - 128;

             int b = _ch(channel2.data, si, ns) - 128;

-            int alpha = numChannels >= 4 ?

-                        _ch(channel_1.data, si, ns) : 255;

+            int alpha = numChannels >= 4 ? _ch(channel_1.data, si, ns) : 255;

             List<int> rgb = labToRGB(L, a, b);

             pixels[di++] = rgb[2];

             pixels[di++] = rgb[1];

@@ -578,8 +568,7 @@
             break;

           case COLORMODE_GRAYSCALE:

             int gray = _ch(channel0.data, si, ns);

-            int alpha = numChannels >= 2 ?

-                       _ch(channel_1.data, si, ns) : 255;

+            int alpha = numChannels >= 2 ? _ch(channel_1.data, si, ns) : 255;

             pixels[di++] = gray;

             pixels[di++] = gray;

             pixels[di++] = gray;

@@ -590,8 +579,7 @@
             int m = _ch(channel1.data, si, ns);

             int y = _ch(channel2.data, si, ns);

             int k = _ch(channels[numChannels == 4 ? -1 : 3].data, si, ns);

-            int alpha = numChannels >= 5 ?

-                        _ch(channel_1.data, si, ns) : 255;

+            int alpha = numChannels >= 5 ? _ch(channel_1.data, si, ns) : 255;

             List<int> rgb = cmykToRGB(255 - c, 255 - m, 255 - y, 255 - k);

             pixels[di++] = rgb[2];

             pixels[di++] = rgb[1];

diff --git a/image/lib/src/formats/psd/psd_layer.dart b/image/lib/src/formats/psd/psd_layer.dart
index 9e25c12..59bda67 100755
--- a/image/lib/src/formats/psd/psd_layer.dart
+++ b/image/lib/src/formats/psd/psd_layer.dart
@@ -75,7 +75,6 @@
   static const int FLAG_PHOTOSHOP_5 = 8;

   static const int FLAG_PIXEL_DATA_IRRELEVANT_TO_APPEARANCE = 16;

 

-

   PsdLayer([InputBuffer input]) {

     if (input == null) {

       return;

@@ -99,7 +98,7 @@
     int sig = input.readUint32();

     if (sig != SIGNATURE) {

       throw new ImageException('Invalid PSD layer signature: '

-                               '${sig.toRadixString(16)}');

+          '${sig.toRadixString(16)}');

     }

 

     blendMode = input.readUint32();

@@ -145,7 +144,7 @@
         int sig = extra.readUint32();

         if (sig != SIGNATURE) {

           throw new ImageException('PSD invalid signature for layer additional '

-                                   'data: ${sig.toRadixString(16)}');

+              'data: ${sig.toRadixString(16)}');

         }

 

         String tag = extra.readString(4);

@@ -179,16 +178,24 @@
               fx.intensity = data.readUint32();

               fx.angle = data.readUint32();

               fx.distance = data.readUint32();

-              fx.color = [data.readUint16(), data.readUint16(),

-                          data.readUint16(), data.readUint16(),

-                          data.readUint16()];

+              fx.color = [

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16()

+              ];

               fx.blendMode = data.readString(8);

               fx.enabled = data.readByte() != 0;

               fx.globalAngle = data.readByte() != 0;

               fx.opacity = data.readByte();

-              fx.nativeColor = [data.readUint16(), data.readUint16(),

-                                data.readUint16(), data.readUint16(),

-                                data.readUint16()];

+              fx.nativeColor = [

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16()

+              ];

             } else if (fxTag == 'isdw') {

               var fx = PsdInnerShadowEffect();

               effects.add(fx);

@@ -197,32 +204,48 @@
               fx.intensity = data.readUint32();

               fx.angle = data.readUint32();

               fx.distance = data.readUint32();

-              fx.color = [data.readUint16(), data.readUint16(),

-                          data.readUint16(), data.readUint16(),

-                          data.readUint16()];

+              fx.color = [

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16()

+              ];

               fx.blendMode = data.readString(8);

               fx.enabled = data.readByte() != 0;

               fx.globalAngle = data.readByte() != 0;

               fx.opacity = data.readByte();

-              fx.nativeColor = [data.readUint16(), data.readUint16(),

-                                data.readUint16(), data.readUint16(),

-                                data.readUint16()];

+              fx.nativeColor = [

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16()

+              ];

             } else if (fxTag == 'oglw') {

               var fx = PsdOuterGlowEffect();

               effects.add(fx);

               fx.version = data.readUint32();

               fx.blur = data.readUint32();

               fx.intensity = data.readUint32();

-              fx.color = [data.readUint16(), data.readUint16(),

-                          data.readUint16(), data.readUint16(),

-                          data.readUint16()];

+              fx.color = [

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16()

+              ];

               fx.blendMode = data.readString(8);

               fx.enabled = data.readByte() != 0;

               fx.opacity = data.readByte();

               if (fx.version == 2) {

-                fx.nativeColor = [data.readUint16(), data.readUint16(),

-                                  data.readUint16(), data.readUint16(),

-                                  data.readUint16()];

+                fx.nativeColor = [

+                  data.readUint16(),

+                  data.readUint16(),

+                  data.readUint16(),

+                  data.readUint16(),

+                  data.readUint16()

+                ];

               }

             } else if (fxTag == 'iglw') {

               var fx = PsdInnerGlowEffect();

@@ -230,17 +253,25 @@
               fx.version = data.readUint32();

               fx.blur = data.readUint32();

               fx.intensity = data.readUint32();

-              fx.color = [data.readUint16(), data.readUint16(),

-                          data.readUint16(), data.readUint16(),

-                          data.readUint16()];

+              fx.color = [

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16()

+              ];

               fx.blendMode = data.readString(8);

               fx.enabled = data.readByte() != 0;

               fx.opacity = data.readByte();

               if (fx.version == 2) {

                 fx.invert = data.readByte() != 0;

-                fx.nativeColor = [data.readUint16(), data.readUint16(),

-                                  data.readUint16(), data.readUint16(),

-                                  data.readUint16()];

+                fx.nativeColor = [

+                  data.readUint16(),

+                  data.readUint16(),

+                  data.readUint16(),

+                  data.readUint16(),

+                  data.readUint16()

+                ];

               }

             } else if (fxTag == 'bevl') {

               var fx = PsdBevelEffect();

@@ -251,12 +282,20 @@
               fx.blur = data.readUint32();

               fx.highlightBlendMode = data.readString(8);

               fx.shadowBlendMode = data.readString(8);

-              fx.highlightColor = [data.readUint16(), data.readUint16(),

-                                   data.readUint16(), data.readUint16(),

-                                   data.readUint16()];

-              fx.shadowColor = [data.readUint16(), data.readUint16(),

-                                data.readUint16(), data.readUint16(),

-                                data.readUint16()];

+              fx.highlightColor = [

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16()

+              ];

+              fx.shadowColor = [

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16()

+              ];

               fx.bevelStyle = data.readByte();

               fx.highlightOpacity = data.readByte();

               fx.shadowOpacity = data.readByte();

@@ -264,26 +303,42 @@
               fx.globalAngle = data.readByte() != 0;

               fx.upOrDown = data.readByte();

               if (fx.version == 2) {

-                fx.realHighlightColor = [data.readUint16(), data.readUint16(),

-                                         data.readUint16(), data.readUint16(),

-                                         data.readUint16()];

-                fx.realShadowColor = [data.readUint16(), data.readUint16(),

-                                      data.readUint16(), data.readUint16(),

-                                      data.readUint16()];

+                fx.realHighlightColor = [

+                  data.readUint16(),

+                  data.readUint16(),

+                  data.readUint16(),

+                  data.readUint16(),

+                  data.readUint16()

+                ];

+                fx.realShadowColor = [

+                  data.readUint16(),

+                  data.readUint16(),

+                  data.readUint16(),

+                  data.readUint16(),

+                  data.readUint16()

+                ];

               }

             } else if (fxTag == 'sofi') {

               var fx = PsdSolidFillEffect();

               effects.add(fx);

               fx.version = data.readUint32();

               fx.blendMode = data.readString(4);

-              fx.color = [data.readUint16(), data.readUint16(),

-                          data.readUint16(), data.readUint16(),

-                          data.readUint16()];

+              fx.color = [

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16()

+              ];

               fx.opacity = data.readByte();

               fx.enabled = data.readByte() != 0;

-              fx.nativeColor = [data.readUint16(), data.readUint16(),

-                                data.readUint16(), data.readUint16(),

-                                data.readUint16()];

+              fx.nativeColor = [

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16(),

+                data.readUint16()

+              ];

             } else {

               data.skip(size);

             }

@@ -293,26 +348,21 @@
     }

   }

 

-  /**

-   * Is this layer visible?

-   */

+  /// Is this layer visible?

   bool isVisible() => flags & FLAG_HIDDEN == 0;

 

-  /**

-   * Is this layer a folder?

-   */

+  /// Is this layer a folder?

   int type() {

     if (additionalData.containsKey(PsdLayerSectionDivider.TAG)) {

-      PsdLayerSectionDivider section = additionalData[PsdLayerSectionDivider.TAG];

+      var section =

+          additionalData[PsdLayerSectionDivider.TAG] as PsdLayerSectionDivider;

       return section.type;

     }

     return PsdLayerSectionDivider.NORMAL;

   }

 

-  /**

-   * Get the channel for the given [id].

-   * Returns null if the layer does not have the given channel.

-   */

+  /// Get the channel for the given [id].

+  /// Returns null if the layer does not have the given channel.

   PsdChannel getChannel(int id) {

     for (int i = 0; i < channels.length; ++i) {

       if (channels[i].id == id) {

@@ -327,7 +377,7 @@
       channels[i].readPlane(input, width, height, psd.depth);

     }

 

-    layerImage = PsdImage.createImageFromChannels(psd.colorMode, psd.depth,

-                                                  width, height, channels);

+    layerImage = PsdImage.createImageFromChannels(

+        psd.colorMode, psd.depth, width, height, channels);

   }

 }

diff --git a/image/lib/src/formats/psd_decoder.dart b/image/lib/src/formats/psd_decoder.dart
index 1d9ef46..028f242 100755
--- a/image/lib/src/formats/psd_decoder.dart
+++ b/image/lib/src/formats/psd_decoder.dart
@@ -4,23 +4,17 @@
 import 'decode_info.dart';

 import 'psd/psd_image.dart';

 

-/**

- * Decode a Photoshop PSD image.

- */

+/// Decode a Photoshop PSD image.

 class PsdDecoder extends Decoder {

   PsdImage info;

 

-  /**

-   * A light-weight function to test if the given file is able to be decoded

-   * by this Decoder.

-   */

+  /// A light-weight function to test if the given file is able to be decoded

+  /// by this Decoder.

   bool isValidFile(List<int> bytes) {

     return new PsdImage(bytes).isValid;

   }

 

-  /**

-   * Decode a raw PSD image without rendering it to a flat image.

-   */

+  /// Decode a raw PSD image without rendering it to a flat image.

   PsdImage decodePsd(List<int> bytes) {

     PsdImage psd = PsdImage(bytes);

     if (!psd.decode()) {

@@ -29,21 +23,17 @@
     return psd;

   }

 

-  /**

-   * Decode the file and extract a single image from it.  If the file is

-   * animated, the specified [frame] will be decoded.  If there was a problem

-   * decoding the file, null is returned.

-   */

-  Image decodeImage(List<int> bytes, {int frame: 0}) {

+  /// Decode the file and extract a single image from it.  If the file is

+  /// animated, the specified [frame] will be decoded.  If there was a problem

+  /// decoding the file, null is returned.

+  Image decodeImage(List<int> bytes, {int frame = 0}) {

     startDecode(bytes);

     return decodeFrame(frame);

   }

 

-  /**

-   * Decode all of the frames from an animation.  If the file is not an

-   * animation, a single frame animation is returned.  If there was a problem

-   * decoding the file, null is returned.

-   */

+  /// Decode all of the frames from an animation.  If the file is not an

+  /// animation, a single frame animation is returned.  If there was a problem

+  /// decoding the file, null is returned.

   Animation decodeAnimation(List<int> bytes) {

     if (startDecode(bytes) == null) {

       return null;

@@ -64,28 +54,22 @@
     return anim;

   }

 

-  /**

-   * Start decoding the data as an animation sequence, but don't actually

-   * process the frames until they are requested with decodeFrame.

-   */

+  /// Start decoding the data as an animation sequence, but don't actually

+  /// process the frames until they are requested with decodeFrame.

   DecodeInfo startDecode(List<int> bytes) {

     info = PsdImage(bytes);

     return info;

   }

 

-  /**

-   * How many frames are available to be decoded.  [startDecode] should have

-   * been called first. Non animated image files will have a single frame.

-   */

+  /// How many frames are available to be decoded.  [startDecode] should have

+  /// been called first. Non animated image files will have a single frame.

   int numFrames() => info != null ? info.numFrames : 0;

 

-  /**

-   * Decode a single frame from the data stat was set with [startDecode].

-   * If [frame] is out of the range of available frames, null is returned.

-   * Non animated image files will only have [frame] 0.  An [AnimationFrame]

-   * is returned, which provides the image, and top-left coordinates of the

-   * image, as animated frames may only occupy a subset of the canvas.

-   */

+  /// Decode a single frame from the data stat was set with [startDecode].

+  /// If [frame] is out of the range of available frames, null is returned.

+  /// Non animated image files will only have [frame] 0.  An [AnimationFrame]

+  /// is returned, which provides the image, and top-left coordinates of the

+  /// image, as animated frames may only occupy a subset of the canvas.

   Image decodeFrame(int frame) {

     if (info == null) {

       return null;

diff --git a/image/lib/src/formats/pvrtc/pvrtc_bit_utility.dart b/image/lib/src/formats/pvrtc/pvrtc_bit_utility.dart
index 86cb522..47ce77c 100755
--- a/image/lib/src/formats/pvrtc/pvrtc_bit_utility.dart
+++ b/image/lib/src/formats/pvrtc/pvrtc_bit_utility.dart
@@ -5,183 +5,1621 @@
       (value >> shift) | (value << (32 - shift));

 

   static const List<int> BITSCALE_5_TO_8 = const [

-   0, 8, 16, 24, 32, 41, 49, 57, 65, 74,

-   82, 90, 98, 106, 115, 123, 131, 139, 148, 156,

-   164, 172, 180, 189, 197, 205, 213, 222, 230, 238,

-   246, 255];

+    0,

+    8,

+    16,

+    24,

+    32,

+    41,

+    49,

+    57,

+    65,

+    74,

+    82,

+    90,

+    98,

+    106,

+    115,

+    123,

+    131,

+    139,

+    148,

+    156,

+    164,

+    172,

+    180,

+    189,

+    197,

+    205,

+    213,

+    222,

+    230,

+    238,

+    246,

+    255

+  ];

 

   static const List<int> BITSCALE_4_TO_8 = const [

-   0, 17, 34, 51, 68, 85, 102, 119, 136, 153,

-   170, 187, 204, 221, 238, 255];

+    0,

+    17,

+    34,

+    51,

+    68,

+    85,

+    102,

+    119,

+    136,

+    153,

+    170,

+    187,

+    204,

+    221,

+    238,

+    255

+  ];

 

   static const List<int> BITSCALE_3_TO_8 = const [

-   0, 36, 72, 109, 145, 182, 218, 255];

+    0,

+    36,

+    72,

+    109,

+    145,

+    182,

+    218,

+    255

+  ];

 

   static const List<int> BITSCALE_8_TO_5_FLOOR = const [

-   0, 0, 0, 0, 0, 0, 0, 0, 0, 1,

-   1, 1, 1, 1, 1, 1, 1, 2, 2, 2,

-   2, 2, 2, 2, 2, 3, 3, 3, 3, 3,

-   3, 3, 3, 4, 4, 4, 4, 4, 4, 4,

-   4, 4, 5, 5, 5, 5, 5, 5, 5, 5,

-   6, 6, 6, 6, 6, 6, 6, 6, 7, 7,

-   7, 7, 7, 7, 7, 7, 8, 8, 8, 8,

-   8, 8, 8, 8, 8, 9, 9, 9, 9, 9,

-   9, 9, 9, 10, 10, 10, 10, 10, 10, 10,

-   10, 11, 11, 11, 11, 11, 11, 11, 11, 12,

-   12, 12, 12, 12, 12, 12, 12, 13, 13, 13,

-   13, 13, 13, 13, 13, 13, 14, 14, 14, 14,

-   14, 14, 14, 14, 15, 15, 15, 15, 15, 15,

-   15, 15, 16, 16, 16, 16, 16, 16, 16, 16,

-   17, 17, 17, 17, 17, 17, 17, 17, 17, 18,

-   18, 18, 18, 18, 18, 18, 18, 19, 19, 19,

-   19, 19, 19, 19, 19, 20, 20, 20, 20, 20,

-   20, 20, 20, 21, 21, 21, 21, 21, 21, 21,

-   21, 22, 22, 22, 22, 22, 22, 22, 22, 22,

-   23, 23, 23, 23, 23, 23, 23, 23, 24, 24,

-   24, 24, 24, 24, 24, 24, 25, 25, 25, 25,

-   25, 25, 25, 25, 26, 26, 26, 26, 26, 26,

-   26, 26, 26, 27, 27, 27, 27, 27, 27, 27,

-   27, 28, 28, 28, 28, 28, 28, 28, 28, 29,

-   29, 29, 29, 29, 29, 29, 29, 30, 30, 30,

-   30, 30, 30, 30, 30, 31];

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    16,

+    16,

+    16,

+    16,

+    16,

+    16,

+    16,

+    16,

+    17,

+    17,

+    17,

+    17,

+    17,

+    17,

+    17,

+    17,

+    17,

+    18,

+    18,

+    18,

+    18,

+    18,

+    18,

+    18,

+    18,

+    19,

+    19,

+    19,

+    19,

+    19,

+    19,

+    19,

+    19,

+    20,

+    20,

+    20,

+    20,

+    20,

+    20,

+    20,

+    20,

+    21,

+    21,

+    21,

+    21,

+    21,

+    21,

+    21,

+    21,

+    22,

+    22,

+    22,

+    22,

+    22,

+    22,

+    22,

+    22,

+    22,

+    23,

+    23,

+    23,

+    23,

+    23,

+    23,

+    23,

+    23,

+    24,

+    24,

+    24,

+    24,

+    24,

+    24,

+    24,

+    24,

+    25,

+    25,

+    25,

+    25,

+    25,

+    25,

+    25,

+    25,

+    26,

+    26,

+    26,

+    26,

+    26,

+    26,

+    26,

+    26,

+    26,

+    27,

+    27,

+    27,

+    27,

+    27,

+    27,

+    27,

+    27,

+    28,

+    28,

+    28,

+    28,

+    28,

+    28,

+    28,

+    28,

+    29,

+    29,

+    29,

+    29,

+    29,

+    29,

+    29,

+    29,

+    30,

+    30,

+    30,

+    30,

+    30,

+    30,

+    30,

+    30,

+    31

+  ];

 

   static const List<int> BITSCALE_8_TO_4_FLOOR = const [

-   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

-   0, 0, 0, 0, 0, 0, 0, 1, 1, 1,

-   1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

-   1, 1, 1, 1, 2, 2, 2, 2, 2, 2,

-   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

-   2, 3, 3, 3, 3, 3, 3, 3, 3, 3,

-   3, 3, 3, 3, 3, 3, 3, 3, 4, 4,

-   4, 4, 4, 4, 4, 4, 4, 4, 4, 4,

-   4, 4, 4, 4, 4, 5, 5, 5, 5, 5,

-   5, 5, 5, 5, 5, 5, 5, 5, 5, 5,

-   5, 5, 6, 6, 6, 6, 6, 6, 6, 6,

-   6, 6, 6, 6, 6, 6, 6, 6, 6, 7,

-   7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

-   7, 7, 7, 7, 7, 7, 8, 8, 8, 8,

-   8, 8, 8, 8, 8, 8, 8, 8, 8, 8,

-   8, 8, 8, 9, 9, 9, 9, 9, 9, 9,

-   9, 9, 9, 9, 9, 9, 9, 9, 9, 9,

-   10, 10, 10, 10, 10, 10, 10, 10, 10, 10,

-   10, 10, 10, 10, 10, 10, 10, 11, 11, 11,

-   11, 11, 11, 11, 11, 11, 11, 11, 11, 11,

-   11, 11, 11, 11, 12, 12, 12, 12, 12, 12,

-   12, 12, 12, 12, 12, 12, 12, 12, 12, 12,

-   12, 13, 13, 13, 13, 13, 13, 13, 13, 13,

-   13, 13, 13, 13, 13, 13, 13, 13, 14, 14,

-   14, 14, 14, 14, 14, 14, 14, 14, 14, 14,

-   14, 14, 14, 14, 14, 15];

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    15

+  ];

 

   static const List<int> BITSCALE_8_TO_3_FLOOR = const [

-   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

-   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

-   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

-   0, 0, 0, 0, 0, 0, 0, 1, 1, 1,

-   1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

-   1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

-   1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

-   1, 1, 1, 2, 2, 2, 2, 2, 2, 2,

-   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

-   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

-   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

-   3, 3, 3, 3, 3, 3, 3, 3, 3, 3,

-   3, 3, 3, 3, 3, 3, 3, 3, 3, 3,

-   3, 3, 3, 3, 3, 3, 3, 3, 3, 3,

-   3, 3, 3, 3, 3, 3, 4, 4, 4, 4,

-   4, 4, 4, 4, 4, 4, 4, 4, 4, 4,

-   4, 4, 4, 4, 4, 4, 4, 4, 4, 4,

-   4, 4, 4, 4, 4, 4, 4, 4, 4, 4,

-   4, 4, 4, 5, 5, 5, 5, 5, 5, 5,

-   5, 5, 5, 5, 5, 5, 5, 5, 5, 5,

-   5, 5, 5, 5, 5, 5, 5, 5, 5, 5,

-   5, 5, 5, 5, 5, 5, 5, 5, 5, 6,

-   6, 6, 6, 6, 6, 6, 6, 6, 6, 6,

-   6, 6, 6, 6, 6, 6, 6, 6, 6, 6,

-   6, 6, 6, 6, 6, 6, 6, 6, 6, 6,

-   6, 6, 6, 6, 6, 7];

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    0,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    7

+  ];

 

   static const List<int> BITSCALE_8_TO_5_CEIL = const [

-   0, 1, 1, 1, 1, 1, 1, 1, 1, 2,

-   2, 2, 2, 2, 2, 2, 2, 3, 3, 3,

-   3, 3, 3, 3, 3, 4, 4, 4, 4, 4,

-   4, 4, 4, 5, 5, 5, 5, 5, 5, 5,

-   5, 5, 6, 6, 6, 6, 6, 6, 6, 6,

-   7, 7, 7, 7, 7, 7, 7, 7, 8, 8,

-   8, 8, 8, 8, 8, 8, 9, 9, 9, 9,

-   9, 9, 9, 9, 9, 10, 10, 10, 10, 10,

-   10, 10, 10, 11, 11, 11, 11, 11, 11, 11,

-   11, 12, 12, 12, 12, 12, 12, 12, 12, 13,

-   13, 13, 13, 13, 13, 13, 13, 14, 14, 14,

-   14, 14, 14, 14, 14, 14, 15, 15, 15, 15,

-   15, 15, 15, 15, 16, 16, 16, 16, 16, 16,

-   16, 16, 17, 17, 17, 17, 17, 17, 17, 17,

-   18, 18, 18, 18, 18, 18, 18, 18, 18, 19,

-   19, 19, 19, 19, 19, 19, 19, 20, 20, 20,

-   20, 20, 20, 20, 20, 21, 21, 21, 21, 21,

-   21, 21, 21, 22, 22, 22, 22, 22, 22, 22,

-   22, 23, 23, 23, 23, 23, 23, 23, 23, 23,

-   24, 24, 24, 24, 24, 24, 24, 24, 25, 25,

-   25, 25, 25, 25, 25, 25, 26, 26, 26, 26,

-   26, 26, 26, 26, 27, 27, 27, 27, 27, 27,

-   27, 27, 27, 28, 28, 28, 28, 28, 28, 28,

-   28, 29, 29, 29, 29, 29, 29, 29, 29, 30,

-   30, 30, 30, 30, 30, 30, 30, 31, 31, 31,

-   31, 31, 31, 31, 31, 31];

+    0,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    16,

+    16,

+    16,

+    16,

+    16,

+    16,

+    16,

+    16,

+    17,

+    17,

+    17,

+    17,

+    17,

+    17,

+    17,

+    17,

+    18,

+    18,

+    18,

+    18,

+    18,

+    18,

+    18,

+    18,

+    18,

+    19,

+    19,

+    19,

+    19,

+    19,

+    19,

+    19,

+    19,

+    20,

+    20,

+    20,

+    20,

+    20,

+    20,

+    20,

+    20,

+    21,

+    21,

+    21,

+    21,

+    21,

+    21,

+    21,

+    21,

+    22,

+    22,

+    22,

+    22,

+    22,

+    22,

+    22,

+    22,

+    23,

+    23,

+    23,

+    23,

+    23,

+    23,

+    23,

+    23,

+    23,

+    24,

+    24,

+    24,

+    24,

+    24,

+    24,

+    24,

+    24,

+    25,

+    25,

+    25,

+    25,

+    25,

+    25,

+    25,

+    25,

+    26,

+    26,

+    26,

+    26,

+    26,

+    26,

+    26,

+    26,

+    27,

+    27,

+    27,

+    27,

+    27,

+    27,

+    27,

+    27,

+    27,

+    28,

+    28,

+    28,

+    28,

+    28,

+    28,

+    28,

+    28,

+    29,

+    29,

+    29,

+    29,

+    29,

+    29,

+    29,

+    29,

+    30,

+    30,

+    30,

+    30,

+    30,

+    30,

+    30,

+    30,

+    31,

+    31,

+    31,

+    31,

+    31,

+    31,

+    31,

+    31,

+    31

+  ];

 

   static const List<int> BITSCALE_8_TO_4_CEIL = const [

-   0, 1, 1, 1, 1, 1, 1, 1, 1, 1,

-   1, 1, 1, 1, 1, 1, 1, 1, 2, 2,

-   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

-   2, 2, 2, 2, 2, 3, 3, 3, 3, 3,

-   3, 3, 3, 3, 3, 3, 3, 3, 3, 3,

-   3, 3, 4, 4, 4, 4, 4, 4, 4, 4,

-   4, 4, 4, 4, 4, 4, 4, 4, 4, 5,

-   5, 5, 5, 5, 5, 5, 5, 5, 5, 5,

-   5, 5, 5, 5, 5, 5, 6, 6, 6, 6,

-   6, 6, 6, 6, 6, 6, 6, 6, 6, 6,

-   6, 6, 6, 7, 7, 7, 7, 7, 7, 7,

-   7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

-   8, 8, 8, 8, 8, 8, 8, 8, 8, 8,

-   8, 8, 8, 8, 8, 8, 8, 9, 9, 9,

-   9, 9, 9, 9, 9, 9, 9, 9, 9, 9,

-   9, 9, 9, 9, 10, 10, 10, 10, 10, 10,

-   10, 10, 10, 10, 10, 10, 10, 10, 10, 10,

-   10, 11, 11, 11, 11, 11, 11, 11, 11, 11,

-   11, 11, 11, 11, 11, 11, 11, 11, 12, 12,

-   12, 12, 12, 12, 12, 12, 12, 12, 12, 12,

-   12, 12, 12, 12, 12, 13, 13, 13, 13, 13,

-   13, 13, 13, 13, 13, 13, 13, 13, 13, 13,

-   13, 13, 14, 14, 14, 14, 14, 14, 14, 14,

-   14, 14, 14, 14, 14, 14, 14, 14, 14, 15,

-   15, 15, 15, 15, 15, 15, 15, 15, 15, 15,

-   15, 15, 15, 15, 15, 15];

+    0,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    8,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    9,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    10,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    11,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    12,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    13,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    14,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15,

+    15

+  ];

 

   static const List<int> BITSCALE_8_TO_3_CEIL = const [

-   0, 1, 1, 1, 1, 1, 1, 1, 1, 1,

-   1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

-   1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

-   1, 1, 1, 1, 1, 1, 1, 2, 2, 2,

-   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

-   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

-   2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

-   2, 2, 2, 3, 3, 3, 3, 3, 3, 3,

-   3, 3, 3, 3, 3, 3, 3, 3, 3, 3,

-   3, 3, 3, 3, 3, 3, 3, 3, 3, 3,

-   3, 3, 3, 3, 3, 3, 3, 3, 3, 3,

-   4, 4, 4, 4, 4, 4, 4, 4, 4, 4,

-   4, 4, 4, 4, 4, 4, 4, 4, 4, 4,

-   4, 4, 4, 4, 4, 4, 4, 4, 4, 4,

-   4, 4, 4, 4, 4, 4, 5, 5, 5, 5,

-   5, 5, 5, 5, 5, 5, 5, 5, 5, 5,

-   5, 5, 5, 5, 5, 5, 5, 5, 5, 5,

-   5, 5, 5, 5, 5, 5, 5, 5, 5, 5,

-   5, 5, 5, 6, 6, 6, 6, 6, 6, 6,

-   6, 6, 6, 6, 6, 6, 6, 6, 6, 6,

-   6, 6, 6, 6, 6, 6, 6, 6, 6, 6,

-   6, 6, 6, 6, 6, 6, 6, 6, 6, 7,

-   7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

-   7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

-   7, 7, 7, 7, 7, 7, 7, 7, 7, 7,

-   7, 7, 7, 7, 7, 7];

+    0,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    5,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7,

+    7

+  ];

 }

diff --git a/image/lib/src/formats/pvrtc/pvrtc_color.dart b/image/lib/src/formats/pvrtc/pvrtc_color.dart
index 3060cba..489c56c 100755
--- a/image/lib/src/formats/pvrtc/pvrtc_color.dart
+++ b/image/lib/src/formats/pvrtc/pvrtc_color.dart
@@ -6,14 +6,13 @@
   PvrtcColorRgb([this.r = 0, this.g = 0, this.b = 0]);

 

   PvrtcColorRgb.from(PvrtcColorRgb other)

-      : r = other.r

-      , g = other.g

-      , b = other.b;

+      : r = other.r,

+        g = other.g,

+        b = other.b;

 

   PvrtcColorRgb copy() => new PvrtcColorRgb.from(this);

 

-  PvrtcColorRgb operator *(int x) =>

-    new PvrtcColorRgb(r * x, g * x, b * x);

+  PvrtcColorRgb operator *(int x) => new PvrtcColorRgb(r * x, g * x, b * x);

 

   PvrtcColorRgb operator +(PvrtcColorRgb x) =>

       new PvrtcColorRgb(r + x.r, g + x.g, b + x.b);

@@ -57,15 +56,15 @@
   PvrtcColorRgba([this.r = 0, this.g = 0, this.b = 0, this.a = 0]);

 

   PvrtcColorRgba.from(PvrtcColorRgba other)

-      : r = other.r

-      , g = other.g

-      , b = other.b

-      , a = other.a;

+      : r = other.r,

+        g = other.g,

+        b = other.b,

+        a = other.a;

 

   PvrtcColorRgba copy() => new PvrtcColorRgba.from(this);

 

   PvrtcColorRgba operator *(int x) =>

-    new PvrtcColorRgba(r * x, g * x, b * x, a * x);

+      new PvrtcColorRgba(r * x, g * x, b * x, a * x);

 

   PvrtcColorRgba operator +(PvrtcColorRgba x) =>

       new PvrtcColorRgba(r + x.r, g + x.g, b + x.b, a + x.a);

diff --git a/image/lib/src/formats/pvrtc/pvrtc_color_bounding_box.dart b/image/lib/src/formats/pvrtc/pvrtc_color_bounding_box.dart
index 036a55c..9ea96c7 100755
--- a/image/lib/src/formats/pvrtc/pvrtc_color_bounding_box.dart
+++ b/image/lib/src/formats/pvrtc/pvrtc_color_bounding_box.dart
@@ -1,12 +1,12 @@
 class PvrtcColorBoundingBox {

-  var min;

-  var max;

+  dynamic min;

+  dynamic max;

 

-  PvrtcColorBoundingBox(min, max)

-      : this.min = min.copy()

-      , this.max = max.copy();

+  PvrtcColorBoundingBox(dynamic min, dynamic max)

+      : this.min = min.copy(),

+        this.max = max.copy();

 

-  void add(c) {

+  void add(dynamic c) {

     min.setMin(c);

     max.setMax(c);

   }

diff --git a/image/lib/src/formats/pvrtc/pvrtc_decoder.dart b/image/lib/src/formats/pvrtc/pvrtc_decoder.dart
index 1355e0d..1f05079 100755
--- a/image/lib/src/formats/pvrtc/pvrtc_decoder.dart
+++ b/image/lib/src/formats/pvrtc/pvrtc_decoder.dart
@@ -6,10 +6,8 @@
 import 'pvrtc_color.dart';

 import 'pvrtc_packet.dart';

 

-/**

- * Ported from Jeffrey Lim's PVRTC encoder/decoder,

- * https://bitbucket.org/jthlim/pvrtccompressor

- */

+/// Ported from Jeffrey Lim's PVRTC encoder/decoder,

+/// https://bitbucket.org/jthlim/pvrtccompressor

 class PvrtcDecoder {

   Image decodePvr(List<int> data) {

     // Use a heuristic to detect potential apple PVRTC formats

@@ -17,7 +15,7 @@
       // very likely to be apple PVRTC

       var image = decodeApplePVRTC(data);

       if (image != null) {

-         return image;

+        return image;

       }

     }

 

@@ -120,17 +118,17 @@
 

     const int HEADER_SIZE = 52;

     const int PVRTEX_CUBEMAP = (1 << 12);

-    const int PVR_PIXELTYPE_MASK  = 0xff;

-    const int PVR_TYPE_RGBA4444   = 0x10;

-    const int PVR_TYPE_RGBA5551   = 0x11;

-    const int PVR_TYPE_RGBA8888   = 0x12;

-    const int PVR_TYPE_RGB565     = 0x13;

-    const int PVR_TYPE_RGB555     = 0x14;

-    const int PVR_TYPE_RGB888     = 0x15;

-    const int PVR_TYPE_I8         = 0x16;

-    const int PVR_TYPE_AI8        = 0x17;

-    const int PVR_TYPE_PVRTC2     = 0x18;

-    const int PVR_TYPE_PVRTC4     = 0x19;

+    const int PVR_PIXELTYPE_MASK = 0xff;

+    const int PVR_TYPE_RGBA4444 = 0x10;

+    const int PVR_TYPE_RGBA5551 = 0x11;

+    const int PVR_TYPE_RGBA8888 = 0x12;

+    const int PVR_TYPE_RGB565 = 0x13;

+    const int PVR_TYPE_RGB555 = 0x14;

+    const int PVR_TYPE_RGB888 = 0x15;

+    const int PVR_TYPE_I8 = 0x16;

+    const int PVR_TYPE_AI8 = 0x17;

+    const int PVR_TYPE_PVRTC2 = 0x18;

+    const int PVR_TYPE_PVRTC4 = 0x19;

 

     if (length < HEADER_SIZE) {

       return null;

@@ -279,7 +277,7 @@
         Uint8List out = image.getBytes();

         int oi = 0;

         for (int y = 0; y < height; ++y) {

-          for(int x = 0; x < width; ++x) {

+          for (int x = 0; x < width; ++x) {

             int i = input.readByte();

             out[oi++] = i;

             out[oi++] = i;

@@ -293,7 +291,7 @@
         Uint8List out = image.getBytes();

         int oi = 0;

         for (int y = 0; y < height; ++y) {

-          for(int x = 0; x < width; ++x) {

+          for (int x = 0; x < width; ++x) {

             int i = input.readByte();

             int a = input.readByte();

             out[oi++] = i;

@@ -307,8 +305,9 @@
         // Currently unsupported

         return null;

       case PVR_TYPE_PVRTC4:

-        return amask == 0 ? decodeRgb4bpp(width, height, input.toUint8List()) :

-               decodeRgba4bpp(width, height, input.toUint8List());

+        return amask == 0

+            ? decodeRgb4bpp(width, height, input.toUint8List())

+            : decodeRgba4bpp(width, height, input.toUint8List());

     }

 

     // Unknown format

@@ -359,8 +358,12 @@
 

     /*int flags =*/ input.readUint32();

     var format = input.readUint32();

-    var order = [input.readByte(), input.readByte(),

-                 input.readByte(), input.readByte()];

+    var order = [

+      input.readByte(),

+      input.readByte(),

+      input.readByte(),

+      input.readByte()

+    ];

     /*int colorspace =*/ input.readUint32();

     /*int channeltype =*/ input.readUint32();

     int height = input.readUint32();

@@ -494,14 +497,14 @@
             p3.setBlock(x1, y1);

 

             var ca = p0.getColorRgbA() * factors[factorIndex][0] +

-                     p1.getColorRgbA() * factors[factorIndex][1] +

-                     p2.getColorRgbA() * factors[factorIndex][2] +

-                     p3.getColorRgbA() * factors[factorIndex][3];

+                p1.getColorRgbA() * factors[factorIndex][1] +

+                p2.getColorRgbA() * factors[factorIndex][2] +

+                p3.getColorRgbA() * factors[factorIndex][3];

 

             var cb = p0.getColorRgbB() * factors[factorIndex][0] +

-                     p1.getColorRgbB() * factors[factorIndex][1] +

-                     p2.getColorRgbB() * factors[factorIndex][2] +

-                     p3.getColorRgbB() * factors[factorIndex][3];

+                p1.getColorRgbB() * factors[factorIndex][1] +

+                p2.getColorRgbB() * factors[factorIndex][2] +

+                p3.getColorRgbB() * factors[factorIndex][3];

 

             var w = weights[weightIndex + mod & 3];

 

@@ -563,14 +566,14 @@
             p3.setBlock(x1, y1);

 

             var ca = p0.getColorRgbaA() * factors[factorIndex][0] +

-                     p1.getColorRgbaA() * factors[factorIndex][1] +

-                     p2.getColorRgbaA() * factors[factorIndex][2] +

-                     p3.getColorRgbaA() * factors[factorIndex][3];

+                p1.getColorRgbaA() * factors[factorIndex][1] +

+                p2.getColorRgbaA() * factors[factorIndex][2] +

+                p3.getColorRgbaA() * factors[factorIndex][3];

 

             var cb = p0.getColorRgbaB() * factors[factorIndex][0] +

-                     p1.getColorRgbaB() * factors[factorIndex][1] +

-                     p2.getColorRgbaB() * factors[factorIndex][2] +

-                     p3.getColorRgbaB() * factors[factorIndex][3];

+                p1.getColorRgbaB() * factors[factorIndex][1] +

+                p2.getColorRgbaB() * factors[factorIndex][2] +

+                p3.getColorRgbaB() * factors[factorIndex][3];

 

             var w = weights[weightIndex + mod & 3];

 

diff --git a/image/lib/src/formats/pvrtc/pvrtc_encoder.dart b/image/lib/src/formats/pvrtc/pvrtc_encoder.dart
index ca1241d..d4f4710 100755
--- a/image/lib/src/formats/pvrtc/pvrtc_encoder.dart
+++ b/image/lib/src/formats/pvrtc/pvrtc_encoder.dart
@@ -9,10 +9,8 @@
 import 'pvrtc_color_bounding_box.dart';

 import 'pvrtc_packet.dart';

 

-/**

- * Ported from Jeffrey Lim's PVRTC encoder/decoder,

- * https://bitbucket.org/jthlim/pvrtccompressor

- */

+/// Ported from Jeffrey Lim's PVRTC encoder/decoder,

+/// https://bitbucket.org/jthlim/pvrtccompressor

 class PvrtcEncoder {

   // PVR Format

   static const int PVR_AUTO = -1;

@@ -21,12 +19,12 @@
   static const int PVR_RGB_4BPP = 2;

   static const int PVR_RGBA_4BPP = 3;

 

-  Uint8List encodePvr(Image bitmap, {int format: PVR_AUTO}) {

+  Uint8List encodePvr(Image bitmap, {int format = PVR_AUTO}) {

     OutputBuffer output = OutputBuffer();

 

-    var pvrtc;

+    dynamic pvrtc;

     if (format == PVR_AUTO) {

-       if (bitmap.format == Image.RGB) {

+      if (bitmap.format == Image.RGB) {

         pvrtc = encodeRgb4Bpp(bitmap);

         format = PVR_RGB_4BPP;

       } else {

@@ -73,9 +71,9 @@
     output.writeUint32(mipmapCount);

     output.writeUint32(metaDataSize);

 

-    output.writeBytes(pvrtc);

+    output.writeBytes(pvrtc as List<int>);

 

-    return output.getBytes();

+    return output.getBytes() as Uint8List;

   }

 

   Uint8List encodeRgb4Bpp(Image bitmap) {

@@ -106,8 +104,8 @@
         packet.setBlock(x, y);

         packet.usePunchthroughAlpha = 0;

         var cbb = _calculateBoundingBoxRgb(bitmap, x, y);

-        packet.setColorRgbA(cbb.min);

-        packet.setColorRgbB(cbb.max);

+        packet.setColorRgbA(cbb.min as PvrtcColorRgb);

+        packet.setColorRgbB(cbb.max as PvrtcColorRgb);

       }

     }

 

@@ -125,7 +123,7 @@
           final int y0 = (y + yOffset) & blockMask;

           final int y1 = (y0 + 1) & blockMask;

 

-          for(int px = 0; px < 4; ++px) {

+          for (int px = 0; px < 4; ++px) {

             final int xOffset = (px < 2) ? -1 : 0;

             final int x0 = (x + xOffset) & blockMask;

             final int x1 = (x0 + 1) & blockMask;

@@ -136,14 +134,14 @@
             p3.setBlock(x1, y1);

 

             var ca = p0.getColorRgbA() * factors[factorIndex][0] +

-                     p1.getColorRgbA() * factors[factorIndex][1] +

-                     p2.getColorRgbA() * factors[factorIndex][2] +

-                     p3.getColorRgbA() * factors[factorIndex][3];

+                p1.getColorRgbA() * factors[factorIndex][1] +

+                p2.getColorRgbA() * factors[factorIndex][2] +

+                p3.getColorRgbA() * factors[factorIndex][3];

 

             var cb = p0.getColorRgbB() * factors[factorIndex][0] +

-                     p1.getColorRgbB() * factors[factorIndex][1] +

-                     p2.getColorRgbB() * factors[factorIndex][2] +

-                     p3.getColorRgbB() * factors[factorIndex][3];

+                p1.getColorRgbB() * factors[factorIndex][1] +

+                p2.getColorRgbB() * factors[factorIndex][2] +

+                p3.getColorRgbB() * factors[factorIndex][3];

 

             int pi = pixelIndex + ((py * size + px) * 4);

             int r = bitmapData[pi];

@@ -182,7 +180,6 @@
     return outputData;

   }

 

-

   Uint8List encodeRgba4Bpp(Image bitmap) {

     if (bitmap.width != bitmap.height) {

       throw new ImageException('PVRTC requires a square image.');

@@ -211,8 +208,8 @@
         packet.setBlock(x, y);

         packet.usePunchthroughAlpha = 0;

         var cbb = _calculateBoundingBoxRgba(bitmap, x, y);

-        packet.setColorRgbaA(cbb.min);

-        packet.setColorRgbaB(cbb.max);

+        packet.setColorRgbaA(cbb.min as PvrtcColorRgba);

+        packet.setColorRgbaB(cbb.max as PvrtcColorRgba);

       }

     }

 

@@ -230,7 +227,7 @@
           final int y0 = (y + yOffset) & blockMask;

           final int y1 = (y0 + 1) & blockMask;

 

-          for(int px = 0; px < 4; ++px) {

+          for (int px = 0; px < 4; ++px) {

             final int xOffset = (px < 2) ? -1 : 0;

             final int x0 = (x + xOffset) & blockMask;

             final int x1 = (x0 + 1) & blockMask;

@@ -241,14 +238,14 @@
             p3.setBlock(x1, y1);

 

             var ca = p0.getColorRgbaA() * factors[factorIndex][0] +

-                     p1.getColorRgbaA() * factors[factorIndex][1] +

-                     p2.getColorRgbaA() * factors[factorIndex][2] +

-                     p3.getColorRgbaA() * factors[factorIndex][3];

+                p1.getColorRgbaA() * factors[factorIndex][1] +

+                p2.getColorRgbaA() * factors[factorIndex][2] +

+                p3.getColorRgbaA() * factors[factorIndex][3];

 

             var cb = p0.getColorRgbaB() * factors[factorIndex][0] +

-                     p1.getColorRgbaB() * factors[factorIndex][1] +

-                     p2.getColorRgbaB() * factors[factorIndex][2] +

-                     p3.getColorRgbaB() * factors[factorIndex][3];

+                p1.getColorRgbaB() * factors[factorIndex][1] +

+                p2.getColorRgbaB() * factors[factorIndex][2] +

+                p3.getColorRgbaB() * factors[factorIndex][3];

 

             int pi = pixelIndex + ((py * size + px) * 4);

             int r = bitmapData[pi];

@@ -290,12 +287,11 @@
   }

 

   static PvrtcColorBoundingBox _calculateBoundingBoxRgb(Image bitmap,

-                                                        int blockX,

-                                                        int blockY) {

+      int blockX, int blockY) {

     int size = bitmap.width;

     int pi = (blockY * 4 * size + blockX * 4);

 

-    _pixel(i) {

+    _pixel(int i) {

       int c = bitmap[pi + i];

       return new PvrtcColorRgb(getRed(c), getGreen(c), getBlue(c));

     }

@@ -323,15 +319,15 @@
     return cbb;

   }

 

-  static PvrtcColorBoundingBox _calculateBoundingBoxRgba(Image bitmap,

-                                                         int blockX,

-                                                         int blockY) {

+  static PvrtcColorBoundingBox _calculateBoundingBoxRgba(

+      Image bitmap, int blockX, int blockY) {

     int size = bitmap.width;

     int pi = (blockY * 4 * size + blockX * 4);

 

-    _pixel(i) {

+    _pixel(int i) {

       int c = bitmap[pi + i];

-      return new PvrtcColorRgba(getRed(c), getGreen(c), getBlue(c), getAlpha(c));

+      return new PvrtcColorRgba(

+          getRed(c), getGreen(c), getBlue(c), getAlpha(c));

     }

 

     var cbb = PvrtcColorBoundingBox(_pixel(0), _pixel(0));

@@ -357,12 +353,22 @@
     return cbb;

   }

 

-  /*static void _getPacket(packet, packetData, index) {

-    index *= 2;

-    packet.modulationData = packetData[index];

-    packet.colorData = packetData[index + 1];

-  }*/

-

-  static const MODULATION_LUT =

-      const [ 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3 ];

+  static const MODULATION_LUT = const [

+    0,

+    0,

+    0,

+    1,

+    1,

+    1,

+    1,

+    1,

+    2,

+    2,

+    2,

+    2,

+    2,

+    3,

+    3,

+    3

+  ];

 }

diff --git a/image/lib/src/formats/pvrtc/pvrtc_packet.dart b/image/lib/src/formats/pvrtc/pvrtc_packet.dart
index 71fc51d..7a41312 100755
--- a/image/lib/src/formats/pvrtc/pvrtc_packet.dart
+++ b/image/lib/src/formats/pvrtc/pvrtc_packet.dart
@@ -3,16 +3,13 @@
 import 'pvrtc_bit_utility.dart';

 import 'pvrtc_color.dart';

 

-/**

- * Ported from Jeffrey Lim's PVRTC encoder/decoder,

- * https://bitbucket.org/jthlim/pvrtccompressor

- */

+/// Ported from Jeffrey Lim's PVRTC encoder/decoder,

+/// https://bitbucket.org/jthlim/pvrtccompressor

 class PvrtcPacket {

   Uint32List rawData;

   int index;

 

-  PvrtcPacket(TypedData data)

-      : rawData = Uint32List.view(data.buffer);

+  PvrtcPacket(TypedData data) : rawData = Uint32List.view(data.buffer);

 

   void setBlock(int x, int y) => setIndex(_getMortonNumber(x, y));

 

@@ -123,15 +120,13 @@
       var g = colorA >> 4 & 0x1f;

       var b = colorA & 0xf;

       return new PvrtcColorRgb(BitUtility.BITSCALE_5_TO_8[r],

-          BitUtility.BITSCALE_5_TO_8[g],

-          BitUtility.BITSCALE_4_TO_8[b]);

+          BitUtility.BITSCALE_5_TO_8[g], BitUtility.BITSCALE_4_TO_8[b]);

     } else {

       var r = (colorA >> 7) & 0xf;

       var g = (colorA >> 3) & 0xf;

       var b = colorA & 7;

       return new PvrtcColorRgb(BitUtility.BITSCALE_4_TO_8[r],

-          BitUtility.BITSCALE_4_TO_8[g],

-          BitUtility.BITSCALE_3_TO_8[b]);

+          BitUtility.BITSCALE_4_TO_8[g], BitUtility.BITSCALE_3_TO_8[b]);

     }

   }

 

@@ -141,15 +136,14 @@
       var g = colorA >> 4 & 0x1f;

       var b = colorA & 0xf;

       return new PvrtcColorRgba(BitUtility.BITSCALE_5_TO_8[r],

-          BitUtility.BITSCALE_5_TO_8[g],

-          BitUtility.BITSCALE_4_TO_8[b],

-          255);

+          BitUtility.BITSCALE_5_TO_8[g], BitUtility.BITSCALE_4_TO_8[b], 255);

     } else {

       var a = colorA >> 11 & 7;

       var r = (colorA >> 7) & 0xf;

       var g = (colorA >> 3) & 0xf;

       var b = colorA & 7;

-      return new PvrtcColorRgba(BitUtility.BITSCALE_4_TO_8[r],

+      return new PvrtcColorRgba(

+          BitUtility.BITSCALE_4_TO_8[r],

           BitUtility.BITSCALE_4_TO_8[g],

           BitUtility.BITSCALE_3_TO_8[b],

           BitUtility.BITSCALE_3_TO_8[a]);

@@ -162,15 +156,13 @@
       var g = colorB >> 5 & 0x1f;

       var b = colorB & 0x1f;

       return new PvrtcColorRgb(BitUtility.BITSCALE_5_TO_8[r],

-          BitUtility.BITSCALE_5_TO_8[g],

-          BitUtility.BITSCALE_5_TO_8[b]);

+          BitUtility.BITSCALE_5_TO_8[g], BitUtility.BITSCALE_5_TO_8[b]);

     } else {

       var r = colorB >> 8 & 0xf;

       var g = colorB >> 4 & 0xf;

       var b = colorB & 0xf;

       return new PvrtcColorRgb(BitUtility.BITSCALE_4_TO_8[r],

-          BitUtility.BITSCALE_4_TO_8[g],

-          BitUtility.BITSCALE_4_TO_8[b]);

+          BitUtility.BITSCALE_4_TO_8[g], BitUtility.BITSCALE_4_TO_8[b]);

     }

   }

 

@@ -180,15 +172,14 @@
       var g = colorB >> 5 & 0x1f;

       var b = colorB & 0x1f;

       return new PvrtcColorRgba(BitUtility.BITSCALE_5_TO_8[r],

-          BitUtility.BITSCALE_5_TO_8[g],

-          BitUtility.BITSCALE_5_TO_8[b],

-          255);

+          BitUtility.BITSCALE_5_TO_8[g], BitUtility.BITSCALE_5_TO_8[b], 255);

     } else {

       var a = colorB >> 12 & 7;

       var r = colorB >> 8 & 0xf;

       var g = colorB >> 4 & 0xf;

       var b = colorB & 0xf;

-      return new PvrtcColorRgba(BitUtility.BITSCALE_4_TO_8[r],

+      return new PvrtcColorRgba(

+          BitUtility.BITSCALE_4_TO_8[r],

           BitUtility.BITSCALE_4_TO_8[g],

           BitUtility.BITSCALE_4_TO_8[b],

           BitUtility.BITSCALE_3_TO_8[a]);

@@ -218,82 +209,305 @@
   }

 

   static int _getMortonNumber(int x, int y) {

-    return MORTON_TABLE[x >> 8] << 17 | MORTON_TABLE[y >> 8] << 16 |

-           MORTON_TABLE[x & 0xFF] << 1 | MORTON_TABLE[y & 0xFF];

+    return MORTON_TABLE[x >> 8] << 17 |

+        MORTON_TABLE[y >> 8] << 16 |

+        MORTON_TABLE[x & 0xFF] << 1 |

+        MORTON_TABLE[y & 0xFF];

   }

 

   static const BITS_14 = (1 << 14) - 1;

   static const BITS_15 = (1 << 15) - 1;

 

   static const BILINEAR_FACTORS = const [

-    const [ 4, 4, 4, 4 ],

-    const [ 2, 6, 2, 6 ],

-    const [ 8, 0, 8, 0 ],

-    const [ 6, 2, 6, 2 ],

-

-    const [ 2, 2, 6, 6 ],

-    const [ 1, 3, 3, 9 ],

-    const [ 4, 0, 12, 0 ],

-    const [ 3, 1, 9, 3 ],

-

-    const [ 8, 8, 0, 0 ],

-    const [ 4, 12, 0, 0 ],

-    const [ 16, 0, 0, 0 ],

-    const [ 12, 4, 0, 0 ],

-

-    const [ 6, 6, 2, 2 ],

-    const [ 3, 9, 1, 3 ],

-    const [ 12, 0, 4, 0 ],

-    const [ 9, 3, 3, 1 ],

+    const [4, 4, 4, 4],

+    const [2, 6, 2, 6],

+    const [8, 0, 8, 0],

+    const [6, 2, 6, 2],

+    const [2, 2, 6, 6],

+    const [1, 3, 3, 9],

+    const [4, 0, 12, 0],

+    const [3, 1, 9, 3],

+    const [8, 8, 0, 0],

+    const [4, 12, 0, 0],

+    const [16, 0, 0, 0],

+    const [12, 4, 0, 0],

+    const [6, 6, 2, 2],

+    const [3, 9, 1, 3],

+    const [12, 0, 4, 0],

+    const [9, 3, 3, 1],

   ];

 

   // Weights are { colorA, colorB, alphaA, alphaB }

   static const WEIGHTS = const [

     // Weights for Mode=0

-    const [ 8, 0, 8, 0 ],

-    const [ 5, 3, 5, 3 ],

-    const [ 3, 5, 3, 5 ],

-    const [ 0, 8, 0, 8 ],

+    const [8, 0, 8, 0],

+    const [5, 3, 5, 3],

+    const [3, 5, 3, 5],

+    const [0, 8, 0, 8],

 

     // Weights for Mode=1

-    const [ 8, 0, 8, 0 ],

-    const [ 4, 4, 4, 4 ],

-    const [ 4, 4, 0, 0 ],

-    const [ 0, 8, 0, 8 ],

+    const [8, 0, 8, 0],

+    const [4, 4, 4, 4],

+    const [4, 4, 0, 0],

+    const [0, 8, 0, 8],

   ];

 

   static const MORTON_TABLE = const [

-        0x0000, 0x0001, 0x0004, 0x0005, 0x0010, 0x0011, 0x0014, 0x0015,

-        0x0040, 0x0041, 0x0044, 0x0045, 0x0050, 0x0051, 0x0054, 0x0055,

-        0x0100, 0x0101, 0x0104, 0x0105, 0x0110, 0x0111, 0x0114, 0x0115,

-        0x0140, 0x0141, 0x0144, 0x0145, 0x0150, 0x0151, 0x0154, 0x0155,

-        0x0400, 0x0401, 0x0404, 0x0405, 0x0410, 0x0411, 0x0414, 0x0415,

-        0x0440, 0x0441, 0x0444, 0x0445, 0x0450, 0x0451, 0x0454, 0x0455,

-        0x0500, 0x0501, 0x0504, 0x0505, 0x0510, 0x0511, 0x0514, 0x0515,

-        0x0540, 0x0541, 0x0544, 0x0545, 0x0550, 0x0551, 0x0554, 0x0555,

-        0x1000, 0x1001, 0x1004, 0x1005, 0x1010, 0x1011, 0x1014, 0x1015,

-        0x1040, 0x1041, 0x1044, 0x1045, 0x1050, 0x1051, 0x1054, 0x1055,

-        0x1100, 0x1101, 0x1104, 0x1105, 0x1110, 0x1111, 0x1114, 0x1115,

-        0x1140, 0x1141, 0x1144, 0x1145, 0x1150, 0x1151, 0x1154, 0x1155,

-        0x1400, 0x1401, 0x1404, 0x1405, 0x1410, 0x1411, 0x1414, 0x1415,

-        0x1440, 0x1441, 0x1444, 0x1445, 0x1450, 0x1451, 0x1454, 0x1455,

-        0x1500, 0x1501, 0x1504, 0x1505, 0x1510, 0x1511, 0x1514, 0x1515,

-        0x1540, 0x1541, 0x1544, 0x1545, 0x1550, 0x1551, 0x1554, 0x1555,

-        0x4000, 0x4001, 0x4004, 0x4005, 0x4010, 0x4011, 0x4014, 0x4015,

-        0x4040, 0x4041, 0x4044, 0x4045, 0x4050, 0x4051, 0x4054, 0x4055,

-        0x4100, 0x4101, 0x4104, 0x4105, 0x4110, 0x4111, 0x4114, 0x4115,

-        0x4140, 0x4141, 0x4144, 0x4145, 0x4150, 0x4151, 0x4154, 0x4155,

-        0x4400, 0x4401, 0x4404, 0x4405, 0x4410, 0x4411, 0x4414, 0x4415,

-        0x4440, 0x4441, 0x4444, 0x4445, 0x4450, 0x4451, 0x4454, 0x4455,

-        0x4500, 0x4501, 0x4504, 0x4505, 0x4510, 0x4511, 0x4514, 0x4515,

-        0x4540, 0x4541, 0x4544, 0x4545, 0x4550, 0x4551, 0x4554, 0x4555,

-        0x5000, 0x5001, 0x5004, 0x5005, 0x5010, 0x5011, 0x5014, 0x5015,

-        0x5040, 0x5041, 0x5044, 0x5045, 0x5050, 0x5051, 0x5054, 0x5055,

-        0x5100, 0x5101, 0x5104, 0x5105, 0x5110, 0x5111, 0x5114, 0x5115,

-        0x5140, 0x5141, 0x5144, 0x5145, 0x5150, 0x5151, 0x5154, 0x5155,

-        0x5400, 0x5401, 0x5404, 0x5405, 0x5410, 0x5411, 0x5414, 0x5415,

-        0x5440, 0x5441, 0x5444, 0x5445, 0x5450, 0x5451, 0x5454, 0x5455,

-        0x5500, 0x5501, 0x5504, 0x5505, 0x5510, 0x5511, 0x5514, 0x5515,

-        0x5540, 0x5541, 0x5544, 0x5545, 0x5550, 0x5551, 0x5554, 0x5555

-    ];

+    0x0000,

+    0x0001,

+    0x0004,

+    0x0005,

+    0x0010,

+    0x0011,

+    0x0014,

+    0x0015,

+    0x0040,

+    0x0041,

+    0x0044,

+    0x0045,

+    0x0050,

+    0x0051,

+    0x0054,

+    0x0055,

+    0x0100,

+    0x0101,

+    0x0104,

+    0x0105,

+    0x0110,

+    0x0111,

+    0x0114,

+    0x0115,

+    0x0140,

+    0x0141,

+    0x0144,

+    0x0145,

+    0x0150,

+    0x0151,

+    0x0154,

+    0x0155,

+    0x0400,

+    0x0401,

+    0x0404,

+    0x0405,

+    0x0410,

+    0x0411,

+    0x0414,

+    0x0415,

+    0x0440,

+    0x0441,

+    0x0444,

+    0x0445,

+    0x0450,

+    0x0451,

+    0x0454,

+    0x0455,

+    0x0500,

+    0x0501,

+    0x0504,

+    0x0505,

+    0x0510,

+    0x0511,

+    0x0514,

+    0x0515,

+    0x0540,

+    0x0541,

+    0x0544,

+    0x0545,

+    0x0550,

+    0x0551,

+    0x0554,

+    0x0555,

+    0x1000,

+    0x1001,

+    0x1004,

+    0x1005,

+    0x1010,

+    0x1011,

+    0x1014,

+    0x1015,

+    0x1040,

+    0x1041,

+    0x1044,

+    0x1045,

+    0x1050,

+    0x1051,

+    0x1054,

+    0x1055,

+    0x1100,

+    0x1101,

+    0x1104,

+    0x1105,

+    0x1110,

+    0x1111,

+    0x1114,

+    0x1115,

+    0x1140,

+    0x1141,

+    0x1144,

+    0x1145,

+    0x1150,

+    0x1151,

+    0x1154,

+    0x1155,

+    0x1400,

+    0x1401,

+    0x1404,

+    0x1405,

+    0x1410,

+    0x1411,

+    0x1414,

+    0x1415,

+    0x1440,

+    0x1441,

+    0x1444,

+    0x1445,

+    0x1450,

+    0x1451,

+    0x1454,

+    0x1455,

+    0x1500,

+    0x1501,

+    0x1504,

+    0x1505,

+    0x1510,

+    0x1511,

+    0x1514,

+    0x1515,

+    0x1540,

+    0x1541,

+    0x1544,

+    0x1545,

+    0x1550,

+    0x1551,

+    0x1554,

+    0x1555,

+    0x4000,

+    0x4001,

+    0x4004,

+    0x4005,

+    0x4010,

+    0x4011,

+    0x4014,

+    0x4015,

+    0x4040,

+    0x4041,

+    0x4044,

+    0x4045,

+    0x4050,

+    0x4051,

+    0x4054,

+    0x4055,

+    0x4100,

+    0x4101,

+    0x4104,

+    0x4105,

+    0x4110,

+    0x4111,

+    0x4114,

+    0x4115,

+    0x4140,

+    0x4141,

+    0x4144,

+    0x4145,

+    0x4150,

+    0x4151,

+    0x4154,

+    0x4155,

+    0x4400,

+    0x4401,

+    0x4404,

+    0x4405,

+    0x4410,

+    0x4411,

+    0x4414,

+    0x4415,

+    0x4440,

+    0x4441,

+    0x4444,

+    0x4445,

+    0x4450,

+    0x4451,

+    0x4454,

+    0x4455,

+    0x4500,

+    0x4501,

+    0x4504,

+    0x4505,

+    0x4510,

+    0x4511,

+    0x4514,

+    0x4515,

+    0x4540,

+    0x4541,

+    0x4544,

+    0x4545,

+    0x4550,

+    0x4551,

+    0x4554,

+    0x4555,

+    0x5000,

+    0x5001,

+    0x5004,

+    0x5005,

+    0x5010,

+    0x5011,

+    0x5014,

+    0x5015,

+    0x5040,

+    0x5041,

+    0x5044,

+    0x5045,

+    0x5050,

+    0x5051,

+    0x5054,

+    0x5055,

+    0x5100,

+    0x5101,

+    0x5104,

+    0x5105,

+    0x5110,

+    0x5111,

+    0x5114,

+    0x5115,

+    0x5140,

+    0x5141,

+    0x5144,

+    0x5145,

+    0x5150,

+    0x5151,

+    0x5154,

+    0x5155,

+    0x5400,

+    0x5401,

+    0x5404,

+    0x5405,

+    0x5410,

+    0x5411,

+    0x5414,

+    0x5415,

+    0x5440,

+    0x5441,

+    0x5444,

+    0x5445,

+    0x5450,

+    0x5451,

+    0x5454,

+    0x5455,

+    0x5500,

+    0x5501,

+    0x5504,

+    0x5505,

+    0x5510,

+    0x5511,

+    0x5514,

+    0x5515,

+    0x5540,

+    0x5541,

+    0x5544,

+    0x5545,

+    0x5550,

+    0x5551,

+    0x5554,

+    0x5555

+  ];

 }

diff --git a/image/lib/src/formats/tga_decoder.dart b/image/lib/src/formats/tga_decoder.dart
index 1bf9053..f317657 100755
--- a/image/lib/src/formats/tga_decoder.dart
+++ b/image/lib/src/formats/tga_decoder.dart
@@ -6,20 +6,14 @@
 import 'decode_info.dart';

 import 'tga/tga_info.dart';

 

-/**

- * Decode a TGA image. This only supports the 24-bit uncompressed format.

- * TODO add more TGA support.

- */

+/// Decode a TGA image. This only supports the 24-bit uncompressed format.

 class TgaDecoder extends Decoder {

   TgaInfo info;

   InputBuffer input;

 

-  /**

-   * Is the given file a valid TGA image?

-   */

+  /// Is the given file a valid TGA image?

   bool isValidFile(List<int> data) {

-    InputBuffer input = InputBuffer(data,

-        bigEndian: true);

+    InputBuffer input = InputBuffer(data, bigEndian: true);

 

     InputBuffer header = input.readBytes(18);

     if (header[2] != 2) {

@@ -74,7 +68,7 @@
     return image;

   }

 

-  Image decodeImage(List<int> data, {int frame: 0}) {

+  Image decodeImage(List<int> data, {int frame = 0}) {

     if (startDecode(data) == null) {

       return null;

     }

diff --git a/image/lib/src/formats/tga_encoder.dart b/image/lib/src/formats/tga_encoder.dart
index 7143fbd..82ee682 100755
--- a/image/lib/src/formats/tga_encoder.dart
+++ b/image/lib/src/formats/tga_encoder.dart
@@ -3,9 +3,7 @@
 import '../util/output_buffer.dart';

 import 'encoder.dart';

 

-/**

- * Encode a TGA image.  This only supports the 24-bit uncompressed format.

- */

+/// Encode a TGA image.  This only supports the 24-bit uncompressed format.

 class TgaEncoder extends Encoder {

   List<int> encodeImage(Image image) {

     OutputBuffer out = OutputBuffer(bigEndian: true);

diff --git a/image/lib/src/formats/tiff/tiff_bit_reader.dart b/image/lib/src/formats/tiff/tiff_bit_reader.dart
index aa5822f..17f4bba 100755
--- a/image/lib/src/formats/tiff/tiff_bit_reader.dart
+++ b/image/lib/src/formats/tiff/tiff_bit_reader.dart
@@ -7,9 +7,7 @@
 

   int readByte() => readBits(8);

 

-  /**

-   * Read a number of bits from the input stream.

-   */

+  /// Read a number of bits from the input stream.

   int readBits(int numBits) {

     if (numBits == 0) {

       return 0;

@@ -36,7 +34,7 @@
       }

 

       value = (value << numBits) +

-              (_bitBuffer >> (_bitPos - numBits) & _BIT_MASK[numBits]);

+          (_bitBuffer >> (_bitPos - numBits) & _BIT_MASK[numBits]);

 

       _bitPos -= numBits;

     }

@@ -44,10 +42,8 @@
     return value;

   }

 

-  /**

-   * Flush the rest of the bits in the buffer so the next read starts at the

-   * next byte.

-   */

+  /// Flush the rest of the bits in the buffer so the next read starts at the

+  /// next byte.

   void flushByte() {

     _bitPos = 0;

   }

diff --git a/image/lib/src/formats/tiff/tiff_entry.dart b/image/lib/src/formats/tiff/tiff_entry.dart
index 348f397..4011124 100755
--- a/image/lib/src/formats/tiff/tiff_entry.dart
+++ b/image/lib/src/formats/tiff/tiff_entry.dart
@@ -93,18 +93,19 @@
   static const int TYPE_DOUBLE = 12;

 

   static const List<int> SIZE_OF_TYPE = const [

-      0, //  0 = n/a

-      1, //  1 = byte

-      1, //  2 = ascii

-      2, //  3 = short

-      4, //  4 = long

-      8, //  5 = rational

-      1, //  6 = sbyte

-      1, //  7 = undefined

-      2, //  8 = sshort

-      4, //  9 = slong

-      8, // 10 = srational

-      4, // 11 = float

-      8, // 12 = double

-      0];

+    0, //  0 = n/a

+    1, //  1 = byte

+    1, //  2 = ascii

+    2, //  3 = short

+    4, //  4 = long

+    8, //  5 = rational

+    1, //  6 = sbyte

+    1, //  7 = undefined

+    2, //  8 = sshort

+    4, //  9 = slong

+    8, // 10 = srational

+    4, // 11 = float

+    8, // 12 = double

+    0

+  ];

 }

diff --git a/image/lib/src/formats/tiff/tiff_fax_decoder.dart b/image/lib/src/formats/tiff/tiff_fax_decoder.dart
index 097be05..806ad26 100755
--- a/image/lib/src/formats/tiff/tiff_fax_decoder.dart
+++ b/image/lib/src/formats/tiff/tiff_fax_decoder.dart
@@ -29,9 +29,7 @@
     currChangingElems = List<int>(width);

   }

 

-  /**

-   * One-dimensional decoding methods

-   */

+  /// One-dimensional decoding methods

   void decode1D(InputBuffer out, InputBuffer compData, int startX, int height) {

     this.data = compData;

     bitPointer = 0;

@@ -65,20 +63,23 @@
         isT = entry & 0x0001;

         bits = (entry >> 1) & 0x0f;

 

-        if (bits == 12) {          // Additional Make up code

+        if (bits == 12) {

+          // Additional Make up code

           // Get the next 2 bits

           twoBits = _nextLesserThan8Bits(2);

           // Consolidate the 2 new bits and last 2 bits into 4 bits

           current = ((current << 2) & 0x000c) | twoBits;

           entry = ADDITIONAL_MAKEUP[current];

-          bits = (entry >> 1) & 0x07;     // 3 bits 0000 0111

-          code  = (entry >> 4) & 0x0fff;  // 12 bits

+          bits = (entry >> 1) & 0x07; // 3 bits 0000 0111

+          code = (entry >> 4) & 0x0fff; // 12 bits

           bitOffset += code; // Skip white run

 

           _updatePointer(4 - bits);

-        } else if (bits == 0) {     // ERROR

+        } else if (bits == 0) {

+          // ERROR

           throw new ImageException("TIFFFaxDecoder0");

-        } else if (bits == 15) {    // EOL

+        } else if (bits == 15) {

+          // EOL

           throw new ImageException("TIFFFaxDecoder1");

         } else {

           // 11 bits - 0000 0111 1111 1111 = 0x07ff

@@ -126,8 +127,8 @@
             _updatePointer(5);

             current = _nextLesserThan8Bits(4);

             entry = ADDITIONAL_MAKEUP[current];

-            bits = (entry >> 1) & 0x07;     // 3 bits 0000 0111

-            code  = (entry >> 4) & 0x0fff;  // 12 bits

+            bits = (entry >> 1) & 0x07; // 3 bits 0000 0111

+            code = (entry >> 4) & 0x0fff; // 12 bits

 

             _setToBlack(buffer, lineOffset, bitOffset, code);

             bitOffset += code;

@@ -182,12 +183,9 @@
     currChangingElems[changingElemSize++] = bitOffset;

   }

 

-  /**

-   * Two-dimensional decoding methods

-   */

-

+  /// Two-dimensional decoding methods

   void decode2D(InputBuffer out, InputBuffer compData, int startX, int height,

-                int tiffT4Options) {

+      int tiffT4Options) {

     this.data = compData;

     compression = 3;

 

@@ -331,7 +329,7 @@
   }

 

   void decodeT6(InputBuffer out, InputBuffer compData, int startX, int height,

-                int tiffT6Options) {

+      int tiffT6Options) {

     this.data = compData;

     compression = 4;

 

@@ -399,7 +397,8 @@
         code = (entry & 0x78) >> 3;

         bits = entry & 0x07;

 

-        if (code == 0) { // Pass

+        if (code == 0) {

+          // Pass

           // We always assume WhiteIsZero format for fax.

           if (!isWhite) {

             _setToBlack(out, lineOffset, bitOffset, b2 - bitOffset);

@@ -408,7 +407,8 @@
 

           // Set pointer to only consume the correct number of bits.

           _updatePointer(7 - bits);

-        } else if (code == 1) { // Horizontal

+        } else if (code == 1) {

+          // Horizontal

           // Set pointer to only consume the correct number of bits.

           _updatePointer(7 - bits);

 

@@ -437,15 +437,15 @@
           }

 

           a0 = bitOffset;

-        } else if (code <= 8) { // Vertical

+        } else if (code <= 8) {

+          // Vertical

           a1 = b1 + (code - 5);

           cce[currIndex++] = a1;

 

           // We write the current color till a1 - 1 pos,

           // since a1 is where the next color starts

           if (!isWhite) {

-            _setToBlack(out, lineOffset, bitOffset,

-            a1 - bitOffset);

+            _setToBlack(out, lineOffset, bitOffset, a1 - bitOffset);

           }

           bitOffset = a0 = a1;

           isWhite = !isWhite;

@@ -533,11 +533,7 @@
     }

   }

 

-

-

-  /**

-   * Returns run length

-   */

+  /// Returns run length

   int _decodeWhiteCodeWord() {

     int current, entry, bits, isT, twoBits, code = -1;

     int runLength = 0;

@@ -551,19 +547,22 @@
       isT = entry & 0x0001;

       bits = (entry >> 1) & 0x0f;

 

-      if (bits == 12) {           // Additional Make up code

+      if (bits == 12) {

+        // Additional Make up code

         // Get the next 2 bits

         twoBits = _nextLesserThan8Bits(2);

         // Consolidate the 2 new bits and last 2 bits into 4 bits

         current = ((current << 2) & 0x000c) | twoBits;

         entry = ADDITIONAL_MAKEUP[current];

-        bits = (entry >> 1) & 0x07;     // 3 bits 0000 0111

-        code = (entry >> 4) & 0x0fff;   // 12 bits

+        bits = (entry >> 1) & 0x07; // 3 bits 0000 0111

+        code = (entry >> 4) & 0x0fff; // 12 bits

         runLength += code;

         _updatePointer(4 - bits);

-      } else if (bits == 0) {     // ERROR

+      } else if (bits == 0) {

+        // ERROR

         throw new ImageException("TIFFFaxDecoder0");

-      } else if (bits == 15) {    // EOL

+      } else if (bits == 15) {

+        // EOL

         throw new ImageException("TIFFFaxDecoder1");

       } else {

         // 11 bits - 0000 0111 1111 1111 = 0x07ff

@@ -579,9 +578,7 @@
     return runLength;

   }

 

-  /**

-   * Returns run length

-   */

+  /// Returns run length

   int _decodeBlackCodeWord() {

     int current, entry, bits, isT, code = -1;

     int runLength = 0;

@@ -610,8 +607,8 @@
           _updatePointer(5);

           current = _nextLesserThan8Bits(4);

           entry = ADDITIONAL_MAKEUP[current];

-          bits = (entry >> 1) & 0x07;     // 3 bits 0000 0111

-          code  = (entry >> 4) & 0x0fff;  // 12 bits

+          bits = (entry >> 1) & 0x07; // 3 bits 0000 0111

+          code = (entry >> 4) & 0x0fff; // 12 bits

           runLength += code;

 

           _updatePointer(4 - bits);

@@ -722,7 +719,8 @@
     }

   }

 

-  void _setToBlack(InputBuffer buffer, int lineOffset, int bitOffset, int numBits) {

+  void _setToBlack(

+      InputBuffer buffer, int lineOffset, int bitOffset, int numBits) {

     int bitNum = 8 * lineOffset + bitOffset;

     int lastBit = bitNum + numBits;

 

@@ -808,7 +806,7 @@
     if (bitsFromNext2NextByte != 0) {

       i2 <<= bitsFromNext2NextByte;

       i3 = (next2next & TABLE2[bitsFromNext2NextByte]) >>

-           (8 - bitsFromNext2NextByte);

+          (8 - bitsFromNext2NextByte);

       i2 |= i3;

       bytePointer++;

       bitPointer = bitsFromNext2NextByte;

@@ -871,9 +869,7 @@
     return i1;

   }

 

-  /**

-   * Move pointer backwards by given amount of bits

-   */

+  /// Move pointer backwards by given amount of bits

   void _updatePointer(int bitsToMoveBack) {

     int i = bitPointer - bitsToMoveBack;

 

@@ -885,9 +881,7 @@
     }

   }

 

-  /**

-   * Move to the next byte boundary

-   */

+  /// Move to the next byte boundary

   bool _advancePointer() {

     if (bitPointer != 0) {

       bytePointer++;

@@ -906,7 +900,8 @@
     0x1f, // 5 bits are left in first byte

     0x3f, // 6 bits are left in first byte

     0x7f, // 7 bits are left in first byte

-    0xff];  // 8 bits are left in first byte

+    0xff

+  ]; // 8 bits are left in first byte

 

   static const List<int> TABLE2 = const [

     0x00, // 0

@@ -917,315 +912,556 @@
     0xf8, // 5

     0xfc, // 6

     0xfe, // 7

-    0xff];  // 8

+    0xff

+  ]; // 8

 

   // Table to be used when fillOrder = 2, for flipping bytes.

   static const List<int> FLIP_TABLE = const [

-     0,  -128,    64,   -64,    32,   -96,    96,   -32,

-    16,  -112,    80,   -48,    48,   -80,   112,   -16,

-     8,  -120,    72,   -56,    40,   -88,   104,   -24,

-    24,  -104,    88,   -40,    56,   -72,   120,    -8,

-     4,  -124,    68,   -60,    36,   -92,   100,   -28,

-    20,  -108,    84,   -44,    52,   -76,   116,   -12,

-    12,  -116,    76,   -52,    44,   -84,   108,   -20,

-    28,  -100,    92,   -36,    60,   -68,   124,    -4,

-     2,  -126,    66,   -62,    34,   -94,    98,   -30,

-    18,  -110,    82,   -46,    50,   -78,   114,   -14,

-    10,  -118,    74,   -54,    42,   -86,   106,   -22,

-    26,  -102,    90,   -38,    58,   -70,   122,    -6,

-     6,  -122,    70,   -58,    38,   -90,   102,   -26,

-    22,  -106,    86,   -42,    54,   -74,   118,   -10,

-    14,  -114,    78,   -50,    46,   -82,   110,   -18,

-    30,   -98,    94,   -34,    62,   -66,   126,    -2,

-     1,  -127,    65,   -63,    33,   -95,    97,   -31,

-    17,  -111,    81,   -47,    49,   -79,   113,   -15,

-     9,  -119,    73,   -55,    41,   -87,   105,   -23,

-    25,  -103,    89,   -39,    57,   -71,   121,    -7,

-     5,  -123,    69,   -59,    37,   -91,   101,   -27,

-    21,  -107,    85,   -43,    53,   -75,   117,   -11,

-    13,  -115,    77,   -51,    45,   -83,   109,   -19,

-    29,   -99,    93,   -35,    61,   -67,   125,    -3,

-     3,  -125,    67,   -61,    35,   -93,    99,   -29,

-    19,  -109,    83,   -45,    51,   -77,   115,   -13,

-    11,  -117,    75,   -53,    43,   -85,   107,   -21,

-    27,  -101,    91,   -37,    59,   -69,   123,    -5,

-     7,  -121,    71,   -57,    39,   -89,   103,   -25,

-    23,  -105,    87,   -41,    55,   -73,   119,    -9,

-    15,  -113,    79,   -49,    47,   -81,   111,   -17,

-    31,   -97,    95,   -33,    63,   -65,   127,    -1];

+    0,

+    -128,

+    64,

+    -64,

+    32,

+    -96,

+    96,

+    -32,

+    16,

+    -112,

+    80,

+    -48,

+    48,

+    -80,

+    112,

+    -16,

+    8,

+    -120,

+    72,

+    -56,

+    40,

+    -88,

+    104,

+    -24,

+    24,

+    -104,

+    88,

+    -40,

+    56,

+    -72,

+    120,

+    -8,

+    4,

+    -124,

+    68,

+    -60,

+    36,

+    -92,

+    100,

+    -28,

+    20,

+    -108,

+    84,

+    -44,

+    52,

+    -76,

+    116,

+    -12,

+    12,

+    -116,

+    76,

+    -52,

+    44,

+    -84,

+    108,

+    -20,

+    28,

+    -100,

+    92,

+    -36,

+    60,

+    -68,

+    124,

+    -4,

+    2,

+    -126,

+    66,

+    -62,

+    34,

+    -94,

+    98,

+    -30,

+    18,

+    -110,

+    82,

+    -46,

+    50,

+    -78,

+    114,

+    -14,

+    10,

+    -118,

+    74,

+    -54,

+    42,

+    -86,

+    106,

+    -22,

+    26,

+    -102,

+    90,

+    -38,

+    58,

+    -70,

+    122,

+    -6,

+    6,

+    -122,

+    70,

+    -58,

+    38,

+    -90,

+    102,

+    -26,

+    22,

+    -106,

+    86,

+    -42,

+    54,

+    -74,

+    118,

+    -10,

+    14,

+    -114,

+    78,

+    -50,

+    46,

+    -82,

+    110,

+    -18,

+    30,

+    -98,

+    94,

+    -34,

+    62,

+    -66,

+    126,

+    -2,

+    1,

+    -127,

+    65,

+    -63,

+    33,

+    -95,

+    97,

+    -31,

+    17,

+    -111,

+    81,

+    -47,

+    49,

+    -79,

+    113,

+    -15,

+    9,

+    -119,

+    73,

+    -55,

+    41,

+    -87,

+    105,

+    -23,

+    25,

+    -103,

+    89,

+    -39,

+    57,

+    -71,

+    121,

+    -7,

+    5,

+    -123,

+    69,

+    -59,

+    37,

+    -91,

+    101,

+    -27,

+    21,

+    -107,

+    85,

+    -43,

+    53,

+    -75,

+    117,

+    -11,

+    13,

+    -115,

+    77,

+    -51,

+    45,

+    -83,

+    109,

+    -19,

+    29,

+    -99,

+    93,

+    -35,

+    61,

+    -67,

+    125,

+    -3,

+    3,

+    -125,

+    67,

+    -61,

+    35,

+    -93,

+    99,

+    -29,

+    19,

+    -109,

+    83,

+    -45,

+    51,

+    -77,

+    115,

+    -13,

+    11,

+    -117,

+    75,

+    -53,

+    43,

+    -85,

+    107,

+    -21,

+    27,

+    -101,

+    91,

+    -37,

+    59,

+    -69,

+    123,

+    -5,

+    7,

+    -121,

+    71,

+    -57,

+    39,

+    -89,

+    103,

+    -25,

+    23,

+    -105,

+    87,

+    -41,

+    55,

+    -73,

+    119,

+    -9,

+    15,

+    -113,

+    79,

+    -49,

+    47,

+    -81,

+    111,

+    -17,

+    31,

+    -97,

+    95,

+    -33,

+    63,

+    -65,

+    127,

+    -1

+  ];

 

   // The main 10 bit white runs lookup table

   static const List<int> WHITE = const [

     // 0 - 7

-    6430,   6400,   6400,   6400,   3225,   3225,   3225,   3225,

+    6430, 6400, 6400, 6400, 3225, 3225, 3225, 3225,

     // 8 - 15

-    944,    944,    944,    944,    976,    976,    976,    976,

+    944, 944, 944, 944, 976, 976, 976, 976,

     // 16 - 23

-    1456,   1456,   1456,   1456,   1488,   1488,   1488,   1488,

+    1456, 1456, 1456, 1456, 1488, 1488, 1488, 1488,

     // 24 - 31

-    718,    718,    718,    718,    718,    718,    718,    718,

+    718, 718, 718, 718, 718, 718, 718, 718,

     // 32 - 39

-    750,    750,    750,    750,    750,    750,    750,    750,

+    750, 750, 750, 750, 750, 750, 750, 750,

     // 40 - 47

-    1520,   1520,   1520,   1520,   1552,   1552,   1552,   1552,

+    1520, 1520, 1520, 1520, 1552, 1552, 1552, 1552,

     // 48 - 55

-    428,    428,    428,    428,    428,    428,    428,    428,

+    428, 428, 428, 428, 428, 428, 428, 428,

     // 56 - 63

-    428,    428,    428,    428,    428,    428,    428,    428,

+    428, 428, 428, 428, 428, 428, 428, 428,

     // 64 - 71

-    654,    654,    654,    654,    654,    654,    654,    654,

+    654, 654, 654, 654, 654, 654, 654, 654,

     // 72 - 79

-    1072,   1072,   1072,   1072,   1104,   1104,   1104,   1104,

+    1072, 1072, 1072, 1072, 1104, 1104, 1104, 1104,

     // 80 - 87

-    1136,   1136,   1136,   1136,   1168,   1168,   1168,   1168,

+    1136, 1136, 1136, 1136, 1168, 1168, 1168, 1168,

     // 88 - 95

-    1200,   1200,   1200,   1200,   1232,   1232,   1232,   1232,

+    1200, 1200, 1200, 1200, 1232, 1232, 1232, 1232,

     // 96 - 103

-    622,    622,    622,    622,    622,    622,    622,    622,

+    622, 622, 622, 622, 622, 622, 622, 622,

     // 104 - 111

-    1008,   1008,   1008,   1008,   1040,   1040,   1040,   1040,

+    1008, 1008, 1008, 1008, 1040, 1040, 1040, 1040,

     // 112 - 119

-    44,     44,     44,     44,     44,     44,     44,     44,

+    44, 44, 44, 44, 44, 44, 44, 44,

     // 120 - 127

-    44,     44,     44,     44,     44,     44,     44,     44,

+    44, 44, 44, 44, 44, 44, 44, 44,

     // 128 - 135

-    396,    396,    396,    396,    396,    396,    396,    396,

+    396, 396, 396, 396, 396, 396, 396, 396,

     // 136 - 143

-    396,    396,    396,    396,    396,    396,    396,    396,

+    396, 396, 396, 396, 396, 396, 396, 396,

     // 144 - 151

-    1712,   1712,   1712,   1712,   1744,   1744,   1744,   1744,

+    1712, 1712, 1712, 1712, 1744, 1744, 1744, 1744,

     // 152 - 159

-    846,    846,    846,    846,    846,    846,    846,    846,

+    846, 846, 846, 846, 846, 846, 846, 846,

     // 160 - 167

-    1264,   1264,   1264,   1264,   1296,   1296,   1296,   1296,

+    1264, 1264, 1264, 1264, 1296, 1296, 1296, 1296,

     // 168 - 175

-    1328,   1328,   1328,   1328,   1360,   1360,   1360,   1360,

+    1328, 1328, 1328, 1328, 1360, 1360, 1360, 1360,

     // 176 - 183

-    1392,   1392,   1392,   1392,   1424,   1424,   1424,   1424,

+    1392, 1392, 1392, 1392, 1424, 1424, 1424, 1424,

     // 184 - 191

-    686,    686,    686,    686,    686,    686,    686,    686,

+    686, 686, 686, 686, 686, 686, 686, 686,

     // 192 - 199

-    910,    910,    910,    910,    910,    910,    910,    910,

+    910, 910, 910, 910, 910, 910, 910, 910,

     // 200 - 207

-    1968,   1968,   1968,   1968,   2000,   2000,   2000,   2000,

+    1968, 1968, 1968, 1968, 2000, 2000, 2000, 2000,

     // 208 - 215

-    2032,   2032,   2032,   2032,     16,     16,     16,     16,

+    2032, 2032, 2032, 2032, 16, 16, 16, 16,

     // 216 - 223

-    10257,  10257,  10257,  10257,  12305,  12305,  12305,  12305,

+    10257, 10257, 10257, 10257, 12305, 12305, 12305, 12305,

     // 224 - 231

-    330,    330,    330,    330,    330,    330,    330,    330,

+    330, 330, 330, 330, 330, 330, 330, 330,

     // 232 - 239

-    330,    330,    330,    330,    330,    330,    330,    330,

+    330, 330, 330, 330, 330, 330, 330, 330,

     // 240 - 247

-    330,    330,    330,    330,    330,    330,    330,    330,

+    330, 330, 330, 330, 330, 330, 330, 330,

     // 248 - 255

-    330,    330,    330,    330,    330,    330,    330,    330,

+    330, 330, 330, 330, 330, 330, 330, 330,

     // 256 - 263

-    362,    362,    362,    362,    362,    362,    362,    362,

+    362, 362, 362, 362, 362, 362, 362, 362,

     // 264 - 271

-    362,    362,    362,    362,    362,    362,    362,    362,

+    362, 362, 362, 362, 362, 362, 362, 362,

     // 272 - 279

-    362,    362,    362,    362,    362,    362,    362,    362,

+    362, 362, 362, 362, 362, 362, 362, 362,

     // 280 - 287

-    362,    362,    362,    362,    362,    362,    362,    362,

+    362, 362, 362, 362, 362, 362, 362, 362,

     // 288 - 295

-    878,    878,    878,    878,    878,    878,    878,    878,

+    878, 878, 878, 878, 878, 878, 878, 878,

     // 296 - 303

-    1904,   1904,   1904,   1904,   1936,   1936,   1936,   1936,

+    1904, 1904, 1904, 1904, 1936, 1936, 1936, 1936,

     // 304 - 311

     -18413, -18413, -16365, -16365, -14317, -14317, -10221, -10221,

     // 312 - 319

-    590,    590,    590,    590,    590,    590,    590,    590,

+    590, 590, 590, 590, 590, 590, 590, 590,

     // 320 - 327

-    782,    782,    782,    782,    782,    782,    782,    782,

+    782, 782, 782, 782, 782, 782, 782, 782,

     // 328 - 335

-    1584,   1584,   1584,   1584,   1616,   1616,   1616,   1616,

+    1584, 1584, 1584, 1584, 1616, 1616, 1616, 1616,

     // 336 - 343

-    1648,   1648,   1648,   1648,   1680,   1680,   1680,   1680,

+    1648, 1648, 1648, 1648, 1680, 1680, 1680, 1680,

     // 344 - 351

-    814,    814,    814,    814,    814,    814,    814,    814,

+    814, 814, 814, 814, 814, 814, 814, 814,

     // 352 - 359

-    1776,   1776,   1776,   1776,   1808,   1808,   1808,   1808,

+    1776, 1776, 1776, 1776, 1808, 1808, 1808, 1808,

     // 360 - 367

-    1840,   1840,   1840,   1840,   1872,   1872,   1872,   1872,

+    1840, 1840, 1840, 1840, 1872, 1872, 1872, 1872,

     // 368 - 375

-    6157,   6157,   6157,   6157,   6157,   6157,   6157,   6157,

+    6157, 6157, 6157, 6157, 6157, 6157, 6157, 6157,

     // 376 - 383

-    6157,   6157,   6157,   6157,   6157,   6157,   6157,   6157,

+    6157, 6157, 6157, 6157, 6157, 6157, 6157, 6157,

     // 384 - 391

     -12275, -12275, -12275, -12275, -12275, -12275, -12275, -12275,

     // 392 - 399

     -12275, -12275, -12275, -12275, -12275, -12275, -12275, -12275,

     // 400 - 407

-    14353,  14353,  14353,  14353,  16401,  16401,  16401,  16401,

+    14353, 14353, 14353, 14353, 16401, 16401, 16401, 16401,

     // 408 - 415

-    22547,  22547,  24595,  24595,  20497,  20497,  20497,  20497,

+    22547, 22547, 24595, 24595, 20497, 20497, 20497, 20497,

     // 416 - 423

-    18449,  18449,  18449,  18449,  26643,  26643,  28691,  28691,

+    18449, 18449, 18449, 18449, 26643, 26643, 28691, 28691,

     // 424 - 431

-    30739,  30739, -32749, -32749, -30701, -30701, -28653, -28653,

+    30739, 30739, -32749, -32749, -30701, -30701, -28653, -28653,

     // 432 - 439

     -26605, -26605, -24557, -24557, -22509, -22509, -20461, -20461,

     // 440 - 447

-    8207,   8207,   8207,   8207,   8207,   8207,   8207,   8207,

+    8207, 8207, 8207, 8207, 8207, 8207, 8207, 8207,

     // 448 - 455

-    72,     72,     72,     72,     72,     72,     72,     72,

+    72, 72, 72, 72, 72, 72, 72, 72,

     // 456 - 463

-    72,     72,     72,     72,     72,     72,     72,     72,

+    72, 72, 72, 72, 72, 72, 72, 72,

     // 464 - 471

-    72,     72,     72,     72,     72,     72,     72,     72,

+    72, 72, 72, 72, 72, 72, 72, 72,

     // 472 - 479

-    72,     72,     72,     72,     72,     72,     72,     72,

+    72, 72, 72, 72, 72, 72, 72, 72,

     // 480 - 487

-    72,     72,     72,     72,     72,     72,     72,     72,

+    72, 72, 72, 72, 72, 72, 72, 72,

     // 488 - 495

-    72,     72,     72,     72,     72,     72,     72,     72,

+    72, 72, 72, 72, 72, 72, 72, 72,

     // 496 - 503

-    72,     72,     72,     72,     72,     72,     72,     72,

+    72, 72, 72, 72, 72, 72, 72, 72,

     // 504 - 511

-    72,     72,     72,     72,     72,     72,     72,     72,

+    72, 72, 72, 72, 72, 72, 72, 72,

     // 512 - 519

-    104,    104,    104,    104,    104,    104,    104,    104,

+    104, 104, 104, 104, 104, 104, 104, 104,

     // 520 - 527

-    104,    104,    104,    104,    104,    104,    104,    104,

+    104, 104, 104, 104, 104, 104, 104, 104,

     // 528 - 535

-    104,    104,    104,    104,    104,    104,    104,    104,

+    104, 104, 104, 104, 104, 104, 104, 104,

     // 536 - 543

-    104,    104,    104,    104,    104,    104,    104,    104,

+    104, 104, 104, 104, 104, 104, 104, 104,

     // 544 - 551

-    104,    104,    104,    104,    104,    104,    104,    104,

+    104, 104, 104, 104, 104, 104, 104, 104,

     // 552 - 559

-    104,    104,    104,    104,    104,    104,    104,    104,

+    104, 104, 104, 104, 104, 104, 104, 104,

     // 560 - 567

-    104,    104,    104,    104,    104,    104,    104,    104,

+    104, 104, 104, 104, 104, 104, 104, 104,

     // 568 - 575

-    104,    104,    104,    104,    104,    104,    104,    104,

+    104, 104, 104, 104, 104, 104, 104, 104,

     // 576 - 583

-    4107,   4107,   4107,   4107,   4107,   4107,   4107,   4107,

+    4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107,

     // 584 - 591

-    4107,   4107,   4107,   4107,   4107,   4107,   4107,   4107,

+    4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107,

     // 592 - 599

-    4107,   4107,   4107,   4107,   4107,   4107,   4107,   4107,

+    4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107,

     // 600 - 607

-    4107,   4107,   4107,   4107,   4107,   4107,   4107,   4107,

+    4107, 4107, 4107, 4107, 4107, 4107, 4107, 4107,

     // 608 - 615

-    266,    266,    266,    266,    266,    266,    266,    266,

+    266, 266, 266, 266, 266, 266, 266, 266,

     // 616 - 623

-    266,    266,    266,    266,    266,    266,    266,    266,

+    266, 266, 266, 266, 266, 266, 266, 266,

     // 624 - 631

-    266,    266,    266,    266,    266,    266,    266,    266,

+    266, 266, 266, 266, 266, 266, 266, 266,

     // 632 - 639

-    266,    266,    266,    266,    266,    266,    266,    266,

+    266, 266, 266, 266, 266, 266, 266, 266,

     // 640 - 647

-    298,    298,    298,    298,    298,    298,    298,    298,

+    298, 298, 298, 298, 298, 298, 298, 298,

     // 648 - 655

-    298,    298,    298,    298,    298,    298,    298,    298,

+    298, 298, 298, 298, 298, 298, 298, 298,

     // 656 - 663

-    298,    298,    298,    298,    298,    298,    298,    298,

+    298, 298, 298, 298, 298, 298, 298, 298,

     // 664 - 671

-    298,    298,    298,    298,    298,    298,    298,    298,

+    298, 298, 298, 298, 298, 298, 298, 298,

     // 672 - 679

-    524,    524,    524,    524,    524,    524,    524,    524,

+    524, 524, 524, 524, 524, 524, 524, 524,

     // 680 - 687

-    524,    524,    524,    524,    524,    524,    524,    524,

+    524, 524, 524, 524, 524, 524, 524, 524,

     // 688 - 695

-    556,    556,    556,    556,    556,    556,    556,    556,

+    556, 556, 556, 556, 556, 556, 556, 556,

     // 696 - 703

-    556,    556,    556,    556,    556,    556,    556,    556,

+    556, 556, 556, 556, 556, 556, 556, 556,

     // 704 - 711

-    136,    136,    136,    136,    136,    136,    136,    136,

+    136, 136, 136, 136, 136, 136, 136, 136,

     // 712 - 719

-    136,    136,    136,    136,    136,    136,    136,    136,

+    136, 136, 136, 136, 136, 136, 136, 136,

     // 720 - 727

-    136,    136,    136,    136,    136,    136,    136,    136,

+    136, 136, 136, 136, 136, 136, 136, 136,

     // 728 - 735

-    136,    136,    136,    136,    136,    136,    136,    136,

+    136, 136, 136, 136, 136, 136, 136, 136,

     // 736 - 743

-    136,    136,    136,    136,    136,    136,    136,    136,

+    136, 136, 136, 136, 136, 136, 136, 136,

     // 744 - 751

-    136,    136,    136,    136,    136,    136,    136,    136,

+    136, 136, 136, 136, 136, 136, 136, 136,

     // 752 - 759

-    136,    136,    136,    136,    136,    136,    136,    136,

+    136, 136, 136, 136, 136, 136, 136, 136,

     // 760 - 767

-    136,    136,    136,    136,    136,    136,    136,    136,

+    136, 136, 136, 136, 136, 136, 136, 136,

     // 768 - 775

-    168,    168,    168,    168,    168,    168,    168,    168,

+    168, 168, 168, 168, 168, 168, 168, 168,

     // 776 - 783

-    168,    168,    168,    168,    168,    168,    168,    168,

+    168, 168, 168, 168, 168, 168, 168, 168,

     // 784 - 791

-    168,    168,    168,    168,    168,    168,    168,    168,

+    168, 168, 168, 168, 168, 168, 168, 168,

     // 792 - 799

-    168,    168,    168,    168,    168,    168,    168,    168,

+    168, 168, 168, 168, 168, 168, 168, 168,

     // 800 - 807

-    168,    168,    168,    168,    168,    168,    168,    168,

+    168, 168, 168, 168, 168, 168, 168, 168,

     // 808 - 815

-    168,    168,    168,    168,    168,    168,    168,    168,

+    168, 168, 168, 168, 168, 168, 168, 168,

     // 816 - 823

-    168,    168,    168,    168,    168,    168,    168,    168,

+    168, 168, 168, 168, 168, 168, 168, 168,

     // 824 - 831

-    168,    168,    168,    168,    168,    168,    168,    168,

+    168, 168, 168, 168, 168, 168, 168, 168,

     // 832 - 839

-    460,    460,    460,    460,    460,    460,    460,    460,

+    460, 460, 460, 460, 460, 460, 460, 460,

     // 840 - 847

-    460,    460,    460,    460,    460,    460,    460,    460,

+    460, 460, 460, 460, 460, 460, 460, 460,

     // 848 - 855

-    492,    492,    492,    492,    492,    492,    492,    492,

+    492, 492, 492, 492, 492, 492, 492, 492,

     // 856 - 863

-    492,    492,    492,    492,    492,    492,    492,    492,

+    492, 492, 492, 492, 492, 492, 492, 492,

     // 864 - 871

-    2059,   2059,   2059,   2059,   2059,   2059,   2059,   2059,

+    2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,

     // 872 - 879

-    2059,   2059,   2059,   2059,   2059,   2059,   2059,   2059,

+    2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,

     // 880 - 887

-    2059,   2059,   2059,   2059,   2059,   2059,   2059,   2059,

+    2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,

     // 888 - 895

-    2059,   2059,   2059,   2059,   2059,   2059,   2059,   2059,

+    2059, 2059, 2059, 2059, 2059, 2059, 2059, 2059,

     // 896 - 903

-    200,    200,    200,    200,    200,    200,    200,    200,

+    200, 200, 200, 200, 200, 200, 200, 200,

     // 904 - 911

-    200,    200,    200,    200,    200,    200,    200,    200,

+    200, 200, 200, 200, 200, 200, 200, 200,

     // 912 - 919

-    200,    200,    200,    200,    200,    200,    200,    200,

+    200, 200, 200, 200, 200, 200, 200, 200,

     // 920 - 927

-    200,    200,    200,    200,    200,    200,    200,    200,

+    200, 200, 200, 200, 200, 200, 200, 200,

     // 928 - 935

-    200,    200,    200,    200,    200,    200,    200,    200,

+    200, 200, 200, 200, 200, 200, 200, 200,

     // 936 - 943

-    200,    200,    200,    200,    200,    200,    200,    200,

+    200, 200, 200, 200, 200, 200, 200, 200,

     // 944 - 951

-    200,    200,    200,    200,    200,    200,    200,    200,

+    200, 200, 200, 200, 200, 200, 200, 200,

     // 952 - 959

-    200,    200,    200,    200,    200,    200,    200,    200,

+    200, 200, 200, 200, 200, 200, 200, 200,

     // 960 - 967

-    232,    232,    232,    232,    232,    232,    232,    232,

+    232, 232, 232, 232, 232, 232, 232, 232,

     // 968 - 975

-    232,    232,    232,    232,    232,    232,    232,    232,

+    232, 232, 232, 232, 232, 232, 232, 232,

     // 976 - 983

-    232,    232,    232,    232,    232,    232,    232,    232,

+    232, 232, 232, 232, 232, 232, 232, 232,

     // 984 - 991

-    232,    232,    232,    232,    232,    232,    232,    232,

+    232, 232, 232, 232, 232, 232, 232, 232,

     // 992 - 999

-    232,    232,    232,    232,    232,    232,    232,    232,

+    232, 232, 232, 232, 232, 232, 232, 232,

     // 1000 - 1007

-    232,    232,    232,    232,    232,    232,    232,    232,

+    232, 232, 232, 232, 232, 232, 232, 232,

     // 1008 - 1015

-    232,    232,    232,    232,    232,    232,    232,    232,

+    232, 232, 232, 232, 232, 232, 232, 232,

     // 1016 - 1023

-    232,    232,    232,    232,    232,    232,    232,    232];

+    232, 232, 232, 232, 232, 232, 232, 232

+  ];

 

   /// Additional make up codes for both White and Black runs

   static const List<int> ADDITIONAL_MAKEUP = const [

-    28679, 28679, 31752, -32759,

-    -31735, -30711, -29687, -28663,

-    29703, 29703, 30727, 30727,

-    -27639, -26615, -25591, -24567];

+    28679,

+    28679,

+    31752,

+    -32759,

+    -31735,

+    -30711,

+    -29687,

+    -28663,

+    29703,

+    29703,

+    30727,

+    30727,

+    -27639,

+    -26615,

+    -25591,

+    -24567

+  ];

 

   /// Initial black run look up table, uses the first 4 bits of a code

   static const List<int> INIT_BLACK = const [

     // 0 - 7

-    3226,  6412,    200,    168,    38,     38,    134,    134,

+    3226, 6412, 200, 168, 38, 38, 134, 134,

     // 8 - 15

-    100,    100,    100,    100,    68,     68,     68,     68];

+    100, 100, 100, 100, 68, 68, 68, 68

+  ];

 

   //

   static const List<int> TWO_BIT_BLACK = const [292, 260, 226, 226]; // 0 - 3

@@ -1233,165 +1469,167 @@
   // Main black run table, using the last 9 bits of possible 13 bit code

   static const List<int> BLACK = const [

     // 0 - 7

-    62,     62,     30,     30,     0,      0,      0,      0,

+    62, 62, 30, 30, 0, 0, 0, 0,

     // 8 - 15

-    0,      0,      0,      0,      0,      0,      0,      0,

+    0, 0, 0, 0, 0, 0, 0, 0,

     // 16 - 23

-    0,      0,      0,      0,      0,      0,      0,      0,

+    0, 0, 0, 0, 0, 0, 0, 0,

     // 24 - 31

-    0,      0,      0,      0,      0,      0,      0,      0,

+    0, 0, 0, 0, 0, 0, 0, 0,

     // 32 - 39

-    3225,   3225,   3225,   3225,   3225,   3225,   3225,   3225,

+    3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,

     // 40 - 47

-    3225,   3225,   3225,   3225,   3225,   3225,   3225,   3225,

+    3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,

     // 48 - 55

-    3225,   3225,   3225,   3225,   3225,   3225,   3225,   3225,

+    3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,

     // 56 - 63

-    3225,   3225,   3225,   3225,   3225,   3225,   3225,   3225,

+    3225, 3225, 3225, 3225, 3225, 3225, 3225, 3225,

     // 64 - 71

-    588,    588,    588,    588,    588,    588,    588,    588,

+    588, 588, 588, 588, 588, 588, 588, 588,

     // 72 - 79

-    1680,   1680,  20499,  22547,  24595,  26643,   1776,   1776,

+    1680, 1680, 20499, 22547, 24595, 26643, 1776, 1776,

     // 80 - 87

-    1808,   1808, -24557, -22509, -20461, -18413,   1904,   1904,

+    1808, 1808, -24557, -22509, -20461, -18413, 1904, 1904,

     // 88 - 95

-    1936,   1936, -16365, -14317,    782,    782,    782,    782,

+    1936, 1936, -16365, -14317, 782, 782, 782, 782,

     // 96 - 103

-    814,    814,    814,    814, -12269, -10221,  10257,  10257,

+    814, 814, 814, 814, -12269, -10221, 10257, 10257,

     // 104 - 111

-    12305,  12305,  14353,  14353,  16403,  18451,   1712,   1712,

+    12305, 12305, 14353, 14353, 16403, 18451, 1712, 1712,

     // 112 - 119

-    1744,   1744,  28691,  30739, -32749, -30701, -28653, -26605,

+    1744, 1744, 28691, 30739, -32749, -30701, -28653, -26605,

     // 120 - 127

-    2061,   2061,   2061,   2061,   2061,   2061,   2061,   2061,

+    2061, 2061, 2061, 2061, 2061, 2061, 2061, 2061,

     // 128 - 135

-    424,    424,    424,    424,    424,    424,    424,    424,

+    424, 424, 424, 424, 424, 424, 424, 424,

     // 136 - 143

-    424,    424,    424,    424,    424,    424,    424,    424,

+    424, 424, 424, 424, 424, 424, 424, 424,

     // 144 - 151

-    424,    424,    424,    424,    424,    424,    424,    424,

+    424, 424, 424, 424, 424, 424, 424, 424,

     // 152 - 159

-    424,    424,    424,    424,    424,    424,    424,    424,

+    424, 424, 424, 424, 424, 424, 424, 424,

     // 160 - 167

-    750,    750,    750,    750,   1616,   1616,   1648,   1648,

+    750, 750, 750, 750, 1616, 1616, 1648, 1648,

     // 168 - 175

-    1424,   1424,   1456,   1456,   1488,   1488,   1520,   1520,

+    1424, 1424, 1456, 1456, 1488, 1488, 1520, 1520,

     // 176 - 183

-    1840,   1840,   1872,   1872,   1968,   1968,   8209,   8209,

+    1840, 1840, 1872, 1872, 1968, 1968, 8209, 8209,

     // 184 - 191

-    524,    524,    524,    524,    524,    524,    524,    524,

+    524, 524, 524, 524, 524, 524, 524, 524,

     // 192 - 199

-    556,    556,    556,    556,    556,    556,    556,    556,

+    556, 556, 556, 556, 556, 556, 556, 556,

     // 200 - 207

-    1552,   1552,   1584,   1584,   2000,   2000,   2032,   2032,

+    1552, 1552, 1584, 1584, 2000, 2000, 2032, 2032,

     // 208 - 215

-    976,    976,   1008,   1008,   1040,   1040,   1072,   1072,

+    976, 976, 1008, 1008, 1040, 1040, 1072, 1072,

     // 216 - 223

-    1296,   1296,   1328,   1328,    718,    718,    718,    718,

+    1296, 1296, 1328, 1328, 718, 718, 718, 718,

     // 224 - 231

-    456,    456,    456,    456,    456,    456,    456,    456,

+    456, 456, 456, 456, 456, 456, 456, 456,

     // 232 - 239

-    456,    456,    456,    456,    456,    456,    456,    456,

+    456, 456, 456, 456, 456, 456, 456, 456,

     // 240 - 247

-    456,    456,    456,    456,    456,    456,    456,    456,

+    456, 456, 456, 456, 456, 456, 456, 456,

     // 248 - 255

-    456,    456,    456,    456,    456,    456,    456,    456,

+    456, 456, 456, 456, 456, 456, 456, 456,

     // 256 - 263

-    326,    326,    326,    326,    326,    326,    326,    326,

+    326, 326, 326, 326, 326, 326, 326, 326,

     // 264 - 271

-    326,    326,    326,    326,    326,    326,    326,    326,

+    326, 326, 326, 326, 326, 326, 326, 326,

     // 272 - 279

-    326,    326,    326,    326,    326,    326,    326,    326,

+    326, 326, 326, 326, 326, 326, 326, 326,

     // 280 - 287

-    326,    326,    326,    326,    326,    326,    326,    326,

+    326, 326, 326, 326, 326, 326, 326, 326,

     // 288 - 295

-    326,    326,    326,    326,    326,    326,    326,    326,

+    326, 326, 326, 326, 326, 326, 326, 326,

     // 296 - 303

-    326,    326,    326,    326,    326,    326,    326,    326,

+    326, 326, 326, 326, 326, 326, 326, 326,

     // 304 - 311

-    326,    326,    326,    326,    326,    326,    326,    326,

+    326, 326, 326, 326, 326, 326, 326, 326,

     // 312 - 319

-    326,    326,    326,    326,    326,    326,    326,    326,

+    326, 326, 326, 326, 326, 326, 326, 326,

     // 320 - 327

-    358,    358,    358,    358,    358,    358,    358,    358,

+    358, 358, 358, 358, 358, 358, 358, 358,

     // 328 - 335

-    358,    358,    358,    358,    358,    358,    358,    358,

+    358, 358, 358, 358, 358, 358, 358, 358,

     // 336 - 343

-    358,    358,    358,    358,    358,    358,    358,    358,

+    358, 358, 358, 358, 358, 358, 358, 358,

     // 344 - 351

-    358,    358,    358,    358,    358,    358,    358,    358,

+    358, 358, 358, 358, 358, 358, 358, 358,

     // 352 - 359

-    358,    358,    358,    358,    358,    358,    358,    358,

+    358, 358, 358, 358, 358, 358, 358, 358,

     // 360 - 367

-    358,    358,    358,    358,    358,    358,    358,    358,

+    358, 358, 358, 358, 358, 358, 358, 358,

     // 368 - 375

-    358,    358,    358,    358,    358,    358,    358,    358,

+    358, 358, 358, 358, 358, 358, 358, 358,

     // 376 - 383

-    358,    358,    358,    358,    358,    358,    358,    358,

+    358, 358, 358, 358, 358, 358, 358, 358,

     // 384 - 391

-    490,    490,    490,    490,    490,    490,    490,    490,

+    490, 490, 490, 490, 490, 490, 490, 490,

     // 392 - 399

-    490,    490,    490,    490,    490,    490,    490,    490,

+    490, 490, 490, 490, 490, 490, 490, 490,

     // 400 - 407

-    4113,   4113,   6161,   6161,    848,    848,    880,    880,

+    4113, 4113, 6161, 6161, 848, 848, 880, 880,

     // 408 - 415

-    912,    912,    944,    944,    622,    622,    622,    622,

+    912, 912, 944, 944, 622, 622, 622, 622,

     // 416 - 423

-    654,    654,    654,    654,   1104,   1104,   1136,   1136,

+    654, 654, 654, 654, 1104, 1104, 1136, 1136,

     // 424 - 431

-    1168,   1168,   1200,   1200,   1232,   1232,   1264,   1264,

+    1168, 1168, 1200, 1200, 1232, 1232, 1264, 1264,

     // 432 - 439

-    686,    686,    686,    686,   1360,   1360,   1392,   1392,

+    686, 686, 686, 686, 1360, 1360, 1392, 1392,

     // 440 - 447

-    12,     12,     12,     12,     12,     12,     12,     12,

+    12, 12, 12, 12, 12, 12, 12, 12,

     // 448 - 455

-    390,    390,    390,    390,    390,    390,    390,    390,

+    390, 390, 390, 390, 390, 390, 390, 390,

     // 456 - 463

-    390,    390,    390,    390,    390,    390,    390,    390,

+    390, 390, 390, 390, 390, 390, 390, 390,

     // 464 - 471

-    390,    390,    390,    390,    390,    390,    390,    390,

+    390, 390, 390, 390, 390, 390, 390, 390,

     // 472 - 479

-    390,    390,    390,    390,    390,    390,    390,    390,

+    390, 390, 390, 390, 390, 390, 390, 390,

     // 480 - 487

-    390,    390,    390,    390,    390,    390,    390,    390,

+    390, 390, 390, 390, 390, 390, 390, 390,

     // 488 - 495

-    390,    390,    390,    390,    390,    390,    390,    390,

+    390, 390, 390, 390, 390, 390, 390, 390,

     // 496 - 503

-    390,    390,    390,    390,    390,    390,    390,    390,

+    390, 390, 390, 390, 390, 390, 390, 390,

     // 504 - 511

-    390,    390,    390,    390,    390,    390,    390,    390];

+    390, 390, 390, 390, 390, 390, 390, 390

+  ];

 

   static const List<int> TWO_D_CODES = const [

     // 0 - 7

-    80,     88,     23,     71,     30,     30,     62,     62,

+    80, 88, 23, 71, 30, 30, 62, 62,

     // 8 - 15

-    4,      4,      4,      4,      4,      4,      4,      4,

+    4, 4, 4, 4, 4, 4, 4, 4,

     // 16 - 23

-    11,     11,     11,     11,     11,     11,     11,     11,

+    11, 11, 11, 11, 11, 11, 11, 11,

     // 24 - 31

-    11,     11,     11,     11,     11,     11,     11,     11,

+    11, 11, 11, 11, 11, 11, 11, 11,

     // 32 - 39

-    35,     35,     35,     35,     35,     35,     35,     35,

+    35, 35, 35, 35, 35, 35, 35, 35,

     // 40 - 47

-    35,     35,     35,     35,     35,     35,     35,     35,

+    35, 35, 35, 35, 35, 35, 35, 35,

     // 48 - 55

-    51,     51,     51,     51,     51,     51,     51,     51,

+    51, 51, 51, 51, 51, 51, 51, 51,

     // 56 - 63

-    51,     51,     51,     51,     51,     51,     51,     51,

+    51, 51, 51, 51, 51, 51, 51, 51,

     // 64 - 71

-    41,     41,     41,     41,     41,     41,     41,     41,

+    41, 41, 41, 41, 41, 41, 41, 41,

     // 72 - 79

-    41,     41,     41,     41,     41,     41,     41,     41,

+    41, 41, 41, 41, 41, 41, 41, 41,

     // 80 - 87

-    41,     41,     41,     41,     41,     41,     41,     41,

+    41, 41, 41, 41, 41, 41, 41, 41,

     // 88 - 95

-    41,     41,     41,     41,     41,     41,     41,     41,

+    41, 41, 41, 41, 41, 41, 41, 41,

     // 96 - 103

-    41,     41,     41,     41,     41,     41,     41,     41,

+    41, 41, 41, 41, 41, 41, 41, 41,

     // 104 - 111

-    41,     41,     41,     41,     41,     41,     41,     41,

+    41, 41, 41, 41, 41, 41, 41, 41,

     // 112 - 119

-    41,     41,     41,     41,     41,     41,     41,     41,

+    41, 41, 41, 41, 41, 41, 41, 41,

     // 120 - 127

-    41,     41,     41,     41,     41,     41,     41,     41];

+    41, 41, 41, 41, 41, 41, 41, 41

+  ];

 }

diff --git a/image/lib/src/formats/tiff/tiff_image.dart b/image/lib/src/formats/tiff/tiff_image.dart
index 5c3a8e3..3c93a0f 100755
--- a/image/lib/src/formats/tiff/tiff_image.dart
+++ b/image/lib/src/formats/tiff/tiff_image.dart
@@ -40,10 +40,13 @@
   int t6Options = 0;

   int extraSamples;

   List<int> colorMap;

+

   /// Starting index in the [colorMap] for the red channel.

   int colorMapRed;

+

   /// Starting index in the [colorMap] for the green channel.

   int colorMapGreen;

+

   /// Starting index in the [colorMap] for the blue channel.

   int colorMapBlue;

   Image image;

@@ -93,8 +96,10 @@
       }

     }

 

-    if (width == null || height == null ||

-        bitsPerSample == null || compression == null) {

+    if (width == null ||

+        height == null ||

+        bitsPerSample == null ||

+        compression == null) {

       return;

     }

 

@@ -178,8 +183,7 @@
         break;

       case 3: // RGB Palette

         if (samplesPerPixel == 1 &&

-            (bitsPerSample == 4 || bitsPerSample == 8 ||

-             bitsPerSample == 16)) {

+            (bitsPerSample == 4 || bitsPerSample == 8 || bitsPerSample == 16)) {

           imageType = TYPE_PALETTE;

         }

         break;

@@ -190,7 +194,8 @@
         break;

       case 6: // YCbCr

         if (compression == COMPRESSION_JPEG &&

-            bitsPerSample == 8 && samplesPerPixel == 3) {

+            bitsPerSample == 8 &&

+            samplesPerPixel == 3) {

           imageType = TYPE_RGB;

         } else {

           if (hasTag(TAG_YCBCR_SUBSAMPLING)) {

@@ -217,10 +222,12 @@
     }

   }

 

-  bool get isValid => width != null && height != null &&

-                      samplesPerPixel != null &&

-                      bitsPerSample != null &&

-                      compression != null;

+  bool get isValid =>

+      width != null &&

+      height != null &&

+      samplesPerPixel != null &&

+      bitsPerSample != null &&

+      compression != null;

 

   Image decode(InputBuffer p) {

     image = Image(width, height);

@@ -234,13 +241,13 @@
 

   HdrImage decodeHdr(InputBuffer p) {

     hdrImage = HdrImage.create(width, height, 4, HdrImage.HALF);

-      for (int tileY = 0, ti = 0; tileY < tilesY; ++tileY) {

-        for (int tileX = 0; tileX < tilesX; ++tileX, ++ti) {

-          _decodeTile(p, tileX, tileY);

-        }

+    for (int tileY = 0, ti = 0; tileY < tilesY; ++tileY) {

+      for (int tileX = 0; tileX < tilesX; ++tileX, ++ti) {

+        _decodeTile(p, tileX, tileY);

       }

-      return hdrImage;

     }

+    return hdrImage;

+  }

 

   bool hasTag(int tag) => tags.containsKey(tag);

 

@@ -268,14 +275,14 @@
     if (bitsPerSample == 8 || bitsPerSample == 16) {

       if (compression == COMPRESSION_NONE) {

         bdata = p;

-

       } else if (compression == COMPRESSION_LZW) {

         bdata = InputBuffer(new Uint8List(bytesInThisTile));

         LzwDecoder decoder = LzwDecoder();

         try {

           decoder.decode(new InputBuffer.from(p, offset: 0, length: byteCount),

-                         bdata.buffer);

+              bdata.buffer);

         } catch (e) {

+          print(e);

         }

         // Horizontal Differencing Predictor

         if (predictor == 2) {

@@ -283,7 +290,8 @@
           for (int j = 0; j < tileHeight; j++) {

             count = samplesPerPixel * (j * tileWidth + 1);

             for (int i = samplesPerPixel, len = tileWidth * samplesPerPixel;

-                 i < len; i++) {

+                i < len;

+                i++) {

               bdata[count] += bdata[count - samplesPerPixel];

               count++;

             }

@@ -292,12 +300,10 @@
       } else if (compression == COMPRESSION_PACKBITS) {

         bdata = InputBuffer(new Uint8List(bytesInThisTile));

         _decodePackbits(p, bytesInThisTile, bdata.buffer);

-

       } else if (compression == COMPRESSION_DEFLATE) {

         List<int> data = p.toList(0, byteCount);

         List<int> outData = Inflate(data).getBytes();

         bdata = InputBuffer(outData);

-

       } else if (compression == COMPRESSION_ZIP) {

         List<int> data = p.toList(0, byteCount);

         List<int> outData = ZLibDecoder().decodeBytes(data);

@@ -353,9 +359,10 @@
             if (image != null) {

               int c;

               if (photometricType == 3 && colorMap != null) {

-                c = getColor(colorMap[colorMapRed + gray],

-                             colorMap[colorMapGreen + gray],

-                             colorMap[colorMapBlue + gray]);

+                c = getColor(

+                    colorMap[colorMapRed + gray],

+                    colorMap[colorMapGreen + gray],

+                    colorMap[colorMapBlue + gray]);

               } else {

                 c = getColor(gray, gray, gray, 255);

               }

@@ -461,8 +468,8 @@
     }

   }

 

-  void _jpegToImage(Image tile, Image image, int outX, int outY,

-                    int tileWidth, int tileHeight) {

+  void _jpegToImage(Image tile, Image image, int outX, int outY, int tileWidth,

+      int tileHeight) {

     int width = tileWidth;

     int height = tileHeight;

     for (int y = 0; y < height; y++) {

@@ -562,24 +569,21 @@
     } else if (compression == COMPRESSION_CCITT_RLE) {

       bdata = InputBuffer(new Uint8List(tileWidth * tileHeight));

       try {

-        new TiffFaxDecoder(fillOrder, tileWidth, tileHeight).

-            decode1D(bdata, p, 0, tileHeight);

-      } catch (_) {

-      }

+        new TiffFaxDecoder(fillOrder, tileWidth, tileHeight)

+            .decode1D(bdata, p, 0, tileHeight);

+      } catch (_) {}

     } else if (compression == COMPRESSION_CCITT_FAX3) {

       bdata = InputBuffer(new Uint8List(tileWidth * tileHeight));

       try {

-        new TiffFaxDecoder(fillOrder, tileWidth, tileHeight).

-            decode2D(bdata, p, 0, tileHeight, t4Options);

-      } catch (_) {

-      }

+        new TiffFaxDecoder(fillOrder, tileWidth, tileHeight)

+            .decode2D(bdata, p, 0, tileHeight, t4Options);

+      } catch (_) {}

     } else if (compression == COMPRESSION_CCITT_FAX4) {

       bdata = InputBuffer(new Uint8List(tileWidth * tileHeight));

       try {

-        new TiffFaxDecoder(fillOrder, tileWidth, tileHeight).

-            decodeT6(bdata, p, 0, tileHeight, t6Options);

-      } catch (_) {

-      }

+        new TiffFaxDecoder(fillOrder, tileWidth, tileHeight)

+            .decodeT6(bdata, p, 0, tileHeight, t6Options);

+      } catch (_) {}

     } else if (compression == COMPRESSION_ZIP) {

       List<int> data = p.toList(0, byteCount);

       List<int> outData = ZLibDecoder().decodeBytes(data);

@@ -614,9 +618,7 @@
     }

   }

 

-  /**

-   * Uncompress packbits compressed image data.

-   */

+  /// Uncompress packbits compressed image data.

   void _decodePackbits(InputBuffer data, int arraySize, List<int> dst) {

     int srcCount = 0;

     int dstCount = 0;

@@ -734,7 +736,7 @@
   static const int TAG_T4_OPTIONS = 292;

   static const int TAG_T6_OPTIONS = 293;

   static const int TAG_THRESHOLDING = 263;

-  static const int TAG_TILE_WIDTH  = 322;

+  static const int TAG_TILE_WIDTH = 322;

   static const int TAG_TILE_LENGTH = 323;

   static const int TAG_TILE_OFFSETS = 324;

   static const int TAG_TILE_BYTE_COUNTS = 325;

diff --git a/image/lib/src/formats/tiff/tiff_lzw_decoder.dart b/image/lib/src/formats/tiff/tiff_lzw_decoder.dart
index aaf0a6e..19b9ff2 100755
--- a/image/lib/src/formats/tiff/tiff_lzw_decoder.dart
+++ b/image/lib/src/formats/tiff/tiff_lzw_decoder.dart
@@ -8,7 +8,7 @@
     this._out = out;

     int outLen = out.length;

     _outPointer = 0;

-    _data = p.buffer;

+    _data = p.buffer as Uint8List;

     _dataLength = _data.length;

     _bytePointer = p.offset;

 

@@ -88,9 +88,7 @@
     }

   }

 

-  /**

-   * Returns the next 9, 10, 11 or 12 bits

-   */

+  /// Returns the next 9, 10, 11 or 12 bits

   int _getNextCode() {

     if (_bytePointer >= _dataLength) {

       return 257;

@@ -110,9 +108,7 @@
     return code;

   }

 

-  /**

-   * Initialize the string table.

-   */

+  /// Initialize the string table.

   void _initializeStringTable() {

     _table = Uint8List(LZ_MAX_CODE + 1);

     _prefix = Uint32List(LZ_MAX_CODE + 1);

diff --git a/image/lib/src/formats/tiff_decoder.dart b/image/lib/src/formats/tiff_decoder.dart
index 12ef08f..ff16b0b 100755
--- a/image/lib/src/formats/tiff_decoder.dart
+++ b/image/lib/src/formats/tiff_decoder.dart
@@ -11,36 +11,28 @@
 class TiffDecoder extends Decoder {

   TiffInfo info;

 

-  /**

-   * Is the given file a valid TIFF image?

-   */

+  /// Is the given file a valid TIFF image?

   bool isValidFile(List<int> data) {

     return _readHeader(new InputBuffer(data)) != null;

   }

 

-  /**

-   * Validate the file is a Gif image and get information about it.

-   * If the file is not a valid Gif image, null is returned.

-   */

+  /// Validate the file is a Gif image and get information about it.

+  /// If the file is not a valid Gif image, null is returned.

   TiffInfo startDecode(List<int> bytes) {

     _input = InputBuffer(new Uint8List.fromList(bytes));

     info = _readHeader(_input);

     return info;

   }

 

-  /**

-   * How many frames are available to be decoded.  [startDecode] should have

-   * been called first. Non animated image files will have a single frame.

-   */

+  /// How many frames are available to be decoded.  [startDecode] should have

+  /// been called first. Non animated image files will have a single frame.

   int numFrames() => info != null ? info.images.length : 0;

 

-  /**

-   * Decode a single frame from the data stat was set with [startDecode].

-   * If [frame] is out of the range of available frames, null is returned.

-   * Non animated image files will only have [frame] 0.  An [AnimationFrame]

-   * is returned, which provides the image, and top-left coordinates of the

-   * image, as animated frames may only occupy a subset of the canvas.

-   */

+  /// Decode a single frame from the data stat was set with [startDecode].

+  /// If [frame] is out of the range of available frames, null is returned.

+  /// Non animated image files will only have [frame] 0.  An [AnimationFrame]

+  /// is returned, which provides the image, and top-left coordinates of the

+  /// image, as animated frames may only occupy a subset of the canvas.

   Image decodeFrame(int frame) {

     if (info == null) {

       return null;

@@ -49,12 +41,10 @@
     return info.images[frame].decode(_input);

   }

 

-  /**

-   * Decode the file and extract a single image from it.  If the file is

-   * animated, the specified [frame] will be decoded.  If there was a problem

-   * decoding the file, null is returned.

-   */

-  Image decodeImage(List<int> data, {int frame: 0}) {

+  /// Decode the file and extract a single image from it.  If the file is

+  /// animated, the specified [frame] will be decoded.  If there was a problem

+  /// decoding the file, null is returned.

+  Image decodeImage(List<int> data, {int frame = 0}) {

     InputBuffer ptr = InputBuffer(new Uint8List.fromList(data));

 

     TiffInfo info = _readHeader(ptr);

@@ -65,7 +55,7 @@
     return info.images[frame].decode(ptr);

   }

 

-  HdrImage decodeHdrImage(List<int> data, {int frame: 0}) {

+  HdrImage decodeHdrImage(List<int> data, {int frame = 0}) {

     InputBuffer ptr = InputBuffer(new Uint8List.fromList(data));

 

     TiffInfo info = _readHeader(ptr);

@@ -76,11 +66,9 @@
     return info.images[frame].decodeHdr(ptr);

   }

 

-  /**

-   * Decode all of the frames from an animation.  If the file is not an

-   * animation, a single frame animation is returned.  If there was a problem

-   * decoding the file, null is returned.

-   */

+  /// Decode all of the frames from an animation.  If the file is not an

+  /// animation, a single frame animation is returned.  If there was a problem

+  /// decoding the file, null is returned.

   Animation decodeAnimation(List<int> data) {

     if (startDecode(data) == null) {

       return null;

@@ -101,14 +89,11 @@
     return anim;

   }

 

-  /**

-   * Read the TIFF header and IFD blocks.

-   */

+  /// Read the TIFF header and IFD blocks.

   TiffInfo _readHeader(InputBuffer p) {

     TiffInfo info = TiffInfo();

     int byteOrder = p.readUint16();

-    if (byteOrder != TIFF_LITTLE_ENDIAN &&

-        byteOrder != TIFF_BIG_ENDIAN) {

+    if (byteOrder != TIFF_LITTLE_ENDIAN && byteOrder != TIFF_BIG_ENDIAN) {

       return null;

     }

 

@@ -153,7 +138,7 @@
       }

     }

 

-    return info.images.length > 0 ? info : null;

+    return info.images.isNotEmpty ? info : null;

   }

 

   InputBuffer _input;

diff --git a/image/lib/src/formats/webp/vp8.dart b/image/lib/src/formats/webp/vp8.dart
index 9d27dfd..50392ec 100755
--- a/image/lib/src/formats/webp/vp8.dart
+++ b/image/lib/src/formats/webp/vp8.dart
@@ -8,15 +8,12 @@
 import 'webp_alpha.dart';

 import 'webp_info.dart';

 

-/**

- * WebP lossy format.

- */

+/// WebP lossy format.

 class VP8 {

   InputBuffer input;

   InternalWebPInfo _webp;

 

-  VP8(InputBuffer input, this._webp) :

-    this.input = input;

+  VP8(InputBuffer input, this._webp) : this.input = input;

 

   WebPInfo get webp => _webp;

 

@@ -120,7 +117,7 @@
     _parseQuant();

 

     // Frame buffer marking

-    br.get();   // ignore the value of update_proba_

+    br.get(); // ignore the value of update_proba_

 

     _parseProba();

 

@@ -131,7 +128,8 @@
     hdr.useSegment = br.get() != 0;

     if (hdr.useSegment) {

       hdr.updateMap = br.get() != 0;

-      if (br.get() != 0) {   // update data

+      if (br.get() != 0) {

+        // update data

         hdr.absoluteDelta = br.get() != 0;

         for (int s = 0; s < NUM_MB_SEGMENTS; ++s) {

           hdr.quantizer[s] = br.get() != 0 ? br.getSignedValue(7) : 0;

@@ -159,7 +157,8 @@
     hdr.sharpness = br.getValue(3);

     hdr.useLfDelta = br.get() != 0;

     if (hdr.useLfDelta) {

-      if (br.get() != 0) {   // update lf-delta?

+      if (br.get() != 0) {

+        // update lf-delta?

         for (int i = 0; i < NUM_REF_LF_DELTAS; ++i) {

           if (br.get() != 0) {

             hdr.refLfDelta[i] = br.getSignedValue(6);

@@ -179,16 +178,14 @@
     return true;

   }

 

-  /**

-   * This function returns VP8_STATUS_SUSPENDED if we don't have all the

-   * necessary data in 'buf'.

-   * This case is not necessarily an error (for incremental decoding).

-   * Still, no bitreader is ever initialized to make it possible to read

-   * unavailable memory.

-   * If we don't even have the partitions' sizes, than VP8_STATUS_NOT_ENOUGH_DATA

-   * is returned, and this is an unrecoverable error.

-   * If the partitions were positioned ok, VP8_STATUS_OK is returned.

-   */

+  /// This function returns VP8_STATUS_SUSPENDED if we don't have all the

+  /// necessary data in 'buf'.

+  /// This case is not necessarily an error (for incremental decoding).

+  /// Still, no bitreader is ever initialized to make it possible to read

+  /// unavailable memory.

+  /// If we don't even have the partitions' sizes, than VP8_STATUS_NOT_ENOUGH_DATA

+  /// is returned, and this is an unrecoverable error.

+  /// If the partitions were positioned ok, VP8_STATUS_OK is returned.

   bool _parsePartitions(InputBuffer input) {

     int sz = 0;

     int bufEnd = input.length;

@@ -215,8 +212,8 @@
       sz += 3;

     }

 

-    InputBuffer pin = input.subset(bufEnd - partStart,

-                                   position: input.position + partStart);

+    InputBuffer pin =

+        input.subset(bufEnd - partStart, position: input.position + partStart);

     _partitions[lastPart] = VP8BitReader(pin);

 

     // Init is ok, but there's not enough data

@@ -251,7 +248,7 @@
 

       VP8QuantMatrix m = _dqm[i];

       m.y1Mat[0] = DC_TABLE[_clip(q + dqy1_dc, 127)];

-      m.y1Mat[1] = AC_TABLE[_clip(q + 0,       127)];

+      m.y1Mat[1] = AC_TABLE[_clip(q + 0, 127)];

 

       m.y2Mat[0] = DC_TABLE[_clip(q + dqy2_dc, 127)] * 2;

       // For all x in [0..284], x*155/100 is bitwise equal to (x*101581) >> 16.

@@ -265,7 +262,7 @@
       m.uvMat[0] = DC_TABLE[_clip(q + dquv_dc, 117)];

       m.uvMat[1] = AC_TABLE[_clip(q + dquv_ac, 127)];

 

-      m.uvQuant = q + dquv_ac;   // for dithering strength evaluation

+      m.uvQuant = q + dquv_ac; // for dithering strength evaluation

     }

   }

 

@@ -275,9 +272,10 @@
       for (int b = 0; b < NUM_BANDS; ++b) {

         for (int c = 0; c < NUM_CTX; ++c) {

           for (int p = 0; p < NUM_PROBAS; ++p) {

-            final int v = br.getBit(COEFFS_UPDATE_PROBA[t][b][c][p]) != 0 ?

-                br.getValue(8) : COEFFS_PROBA_0[t][b][c][p];

-                proba.bands[t][b].probas[c][p] = v;

+            final int v = br.getBit(COEFFS_UPDATE_PROBA[t][b][c][p]) != 0

+                ? br.getValue(8)

+                : COEFFS_PROBA_0[t][b][c][p];

+            proba.bands[t][b].probas[c][p] = v;

           }

         }

       }

@@ -289,10 +287,8 @@
     }

   }

 

-  /**

-   * Precompute the filtering strength for each segment and each i4x4/i16x16

-   * mode.

-   */

+  /// Precompute the filtering strength for each segment and each i4x4/i16x16

+  /// mode.

   void _precomputeFilterStrengths() {

     if (_filterType > 0) {

       VP8FilterHeader hdr = _filterHeader;

@@ -341,7 +337,7 @@
             info.fLimit = 2 * level + ilevel;

             info.hevThresh = (level >= 40) ? 2 : (level >= 15) ? 1 : 0;

           } else {

-            info.fLimit = 0;  // no filtering

+            info.fLimit = 0; // no filtering

           }

 

           info.fInner = i4x4 != 0;

@@ -377,13 +373,13 @@
     final int extra_uv = (extra_rows ~/ 2) * _cacheUVStride;

 

     _cacheY = InputBuffer(new Uint8List(16 * _cacheYStride + extra_y),

-                         offset: extra_y);

+        offset: extra_y);

 

     _cacheU = InputBuffer(new Uint8List(8 * _cacheUVStride + extra_uv),

-                         offset: extra_uv);

+        offset: extra_uv);

 

     _cacheV = InputBuffer(new Uint8List(8 * _cacheUVStride + extra_uv),

-                         offset: extra_uv);

+        offset: extra_uv);

 

     _tmpY = InputBuffer(new Uint8List(webp.width));

 

@@ -536,12 +532,14 @@
       }

 

       // predict and add residuals

-      if (block.isIntra4x4) {   // 4x4

+      if (block.isIntra4x4) {

+        // 4x4

         InputBuffer topRight = InputBuffer.from(y_dst, offset: -BPS + 16);

         Uint32List topRight32 = topRight.toUint32List();

 

         if (mb_y > 0) {

-          if (mb_x >= _mbWidth - 1) { // on rightmost border

+          if (mb_x >= _mbWidth - 1) {

+            // on rightmost border

             topRight.memset(0, 4, top_yuv.y[15]);

           } else {

             topRight.memcpy(0, 4, _yuvT[mb_x + 1].y);

@@ -562,7 +560,8 @@
 

           _doTransform(bits, new InputBuffer(coeffs, offset: n * 16), dst);

         }

-      } else { // 16x16

+      } else {

+        // 16x16

         int predFunc = _checkMode(mb_x, mb_y, block.imodes[0]);

 

         VP8Filter.PredLuma16[predFunc](y_dst);

@@ -615,10 +614,23 @@
   }

 

   static const List<int> kScan = const [

-    0 +  0 * BPS,  4 +  0 * BPS, 8 +  0 * BPS, 12 +  0 * BPS,

-    0 +  4 * BPS,  4 +  4 * BPS, 8 +  4 * BPS, 12 +  4 * BPS,

-    0 +  8 * BPS,  4 +  8 * BPS, 8 +  8 * BPS, 12 +  8 * BPS,

-    0 + 12 * BPS,  4 + 12 * BPS, 8 + 12 * BPS, 12 + 12 * BPS ];

+    0 + 0 * BPS,

+    4 + 0 * BPS,

+    8 + 0 * BPS,

+    12 + 0 * BPS,

+    0 + 4 * BPS,

+    4 + 4 * BPS,

+    8 + 4 * BPS,

+    12 + 4 * BPS,

+    0 + 8 * BPS,

+    4 + 8 * BPS,

+    8 + 8 * BPS,

+    12 + 8 * BPS,

+    0 + 12 * BPS,

+    4 + 12 * BPS,

+    8 + 12 * BPS,

+    12 + 12 * BPS

+  ];

 

   static int _checkMode(int mb_x, int mb_y, int mode) {

     if (mode == B_DC_PRED) {

@@ -648,8 +660,10 @@
   }

 

   void _doUVTransform(int bits, InputBuffer src, InputBuffer dst) {

-    if (bits & 0xff != 0) { // any non-zero coeff at all?

-      if (bits & 0xaa != 0) { // any non-zero AC coefficient?

+    if (bits & 0xff != 0) {

+      // any non-zero coeff at all?

+      if (bits & 0xaa != 0) {

+        // any non-zero AC coefficient?

         // note we don't use the AC3 variant for U/V

         _dsp.transformUV(src, dst);

       } else {

@@ -661,14 +675,12 @@
   // vertical position of a MB

   int MACROBLOCK_VPOS(int mb_y) => mb_y * 16;

 

-  /**

-   * kFilterExtraRows[] = How many extra lines are needed on the MB boundary

-   * for caching, given a filtering level.

-   * Simple filter:  up to 2 luma samples are read and 1 is written.

-   * Complex filter: up to 4 luma samples are read and 3 are written. Same for

-   *                U/V, so it's 8 samples total (because of the 2x upsampling).

-   */

-  static const List<int> kFilterExtraRows = const [ 0, 2, 8 ];

+  /// kFilterExtraRows[] = How many extra lines are needed on the MB boundary

+  /// for caching, given a filtering level.

+  /// Simple filter:  up to 2 luma samples are read and 1 is written.

+  /// Complex filter: up to 4 luma samples are read and 3 are written. Same for

+  ///                U/V, so it's 8 samples total (because of the 2x upsampling).

+  static const List<int> kFilterExtraRows = const [0, 2, 8];

 

   void _doFilter(int mbX, int mbY) {

     final int yBps = _cacheYStride;

@@ -680,7 +692,8 @@
       return;

     }

 

-    if (_filterType == 1) {   // simple

+    if (_filterType == 1) {

+      // simple

       if (mbX > 0) {

         _dsp.simpleHFilter16(yDst, yBps, limit + 4);

       }

@@ -693,7 +706,8 @@
       if (fInfo.fInner) {

         _dsp.simpleVFilter16i(yDst, yBps, limit);

       }

-    } else {    // complex

+    } else {

+      // complex

       final int uvBps = _cacheUVStride;

       InputBuffer uDst = InputBuffer.from(_cacheU, offset: mbX * 8);

       InputBuffer vDst = InputBuffer.from(_cacheV, offset: mbX * 8);

@@ -718,31 +732,25 @@
     }

   }

 

-  /**

-   * Filter the decoded macroblock row (if needed)

-   */

+  /// Filter the decoded macroblock row (if needed)

   void _filterRow() {

     for (int mbX = _tlMbX; mbX < _brMbX; ++mbX) {

       _doFilter(mbX, _mbY);

     }

   }

 

-  void _ditherRow() {

-  }

+  void _ditherRow() {}

 

-

-  /**

-   * This function is called after a row of macroblocks is finished decoding.

-   * It also takes into account the following restrictions:

-   *

-   * * In case of in-loop filtering, we must hold off sending some of the bottom

-   *    pixels as they are yet unfiltered. They will be when the next macroblock

-   *    row is decoded. Meanwhile, we must preserve them by rotating them in the

-   *    cache area. This doesn't hold for the very bottom row of the uncropped

-   *    picture of course.

-   *  * we must clip the remaining pixels against the cropping area. The VP8Io

-   *    struct must have the following fields set correctly before calling put():

-   */

+  /// This function is called after a row of macroblocks is finished decoding.

+  /// It also takes into account the following restrictions:

+  ///

+  /// * In case of in-loop filtering, we must hold off sending some of the bottom

+  ///    pixels as they are yet unfiltered. They will be when the next macroblock

+  ///    row is decoded. Meanwhile, we must preserve them by rotating them in the

+  ///    cache area. This doesn't hold for the very bottom row of the uncropped

+  ///    picture of course.

+  ///  * we must clip the remaining pixels against the cropping area. The VP8Io

+  ///    struct must have the following fields set correctly before calling put():

   bool _finishRow(bool useFilter) {

     final int extraYRows = kFilterExtraRows[_filterType];

     final int ySize = extraYRows * _cacheYStride;

@@ -780,7 +788,7 @@
     }

 

     if (yEnd > _cropBottom) {

-      yEnd = _cropBottom;    // make sure we don't overflow on last row.

+      yEnd = _cropBottom; // make sure we don't overflow on last row.

     }

 

     _a = null;

@@ -866,16 +874,21 @@
     rgba[3] = 0xff;

   }

 

-  void _upsample(InputBuffer topY, InputBuffer bottomY,

-                 InputBuffer topU, InputBuffer topV,

-                 InputBuffer curU, InputBuffer curV,

-                 InputBuffer topDst, InputBuffer bottomDst,

-                 int len) {

+  void _upsample(

+      InputBuffer topY,

+      InputBuffer bottomY,

+      InputBuffer topU,

+      InputBuffer topV,

+      InputBuffer curU,

+      InputBuffer curV,

+      InputBuffer topDst,

+      InputBuffer bottomDst,

+      int len) {

     int LOAD_UV(int u, int v) => ((u) | ((v) << 16));

 

     final int lastPixelPair = (len - 1) >> 1;

     int tl_uv = LOAD_UV(topU[0], topV[0]); // top-left sample

-    int l_uv  = LOAD_UV(curU[0], curV[0]); // left-sample

+    int l_uv = LOAD_UV(curU[0], curV[0]); // left-sample

 

     final int uv0 = (3 * tl_uv + l_uv + 0x00020002) >> 2;

     _yuvToRgba(topY[0], uv0 & 0xff, (uv0 >> 16), topDst);

@@ -887,7 +900,7 @@
 

     for (int x = 1; x <= lastPixelPair; ++x) {

       final int t_uv = LOAD_UV(topU[x], topV[x]); // top sample

-      final int uv   = LOAD_UV(curU[x], curV[x]); // sample

+      final int uv = LOAD_UV(curU[x], curV[x]); // sample

       // precompute invariant values associated with first and second diagonals

       final int avg = tl_uv + t_uv + l_uv + uv + 0x00080008;

       final int diag_12 = (avg + 2 * (t_uv + l_uv)) >> 3;

@@ -900,7 +913,7 @@
           new InputBuffer.from(topDst, offset: (2 * x - 1) * 4));

 

       _yuvToRgba(topY[2 * x - 0], uv1 & 0xff, (uv1 >> 16),

-              new InputBuffer.from(topDst, offset: (2 * x - 0) * 4));

+          new InputBuffer.from(topDst, offset: (2 * x - 0) * 4));

 

       if (bottomY != null) {

         uv0 = (diag_03 + l_uv) >> 1;

@@ -910,7 +923,7 @@
             new InputBuffer.from(bottomDst, offset: (2 * x - 1) * 4));

 

         _yuvToRgba(bottomY[2 * x], uv1 & 0xff, (uv1 >> 16),

-                new InputBuffer.from(bottomDst, offset: (2 * x + 0) * 4));

+            new InputBuffer.from(bottomDst, offset: (2 * x + 0) * 4));

       }

 

       tl_uv = t_uv;

@@ -920,12 +933,12 @@
     if ((len & 1) == 0) {

       final int uv0 = (3 * tl_uv + l_uv + 0x00020002) >> 2;

       _yuvToRgba(topY[len - 1], uv0 & 0xff, (uv0 >> 16),

-           new InputBuffer.from(topDst, offset: (len - 1) * 4));

+          new InputBuffer.from(topDst, offset: (len - 1) * 4));

 

       if (bottomY != null) {

         final int uv0 = (3 * l_uv + tl_uv + 0x00020002) >> 2;

         _yuvToRgba(bottomY[len - 1], uv0 & 0xff, (uv0 >> 16),

-             new InputBuffer.from(bottomDst, offset: (len - 1) * 4));

+            new InputBuffer.from(bottomDst, offset: (len - 1) * 4));

       }

     }

   }

@@ -953,7 +966,8 @@
       alpha.offset -= webp.width;

     }

 

-    InputBuffer dst = InputBuffer(output.getBytes(), offset: startY * stride + 3);

+    InputBuffer dst =

+        InputBuffer(output.getBytes(), offset: startY * stride + 3);

 

     if (_cropTop + mbY + mbH == _cropBottom) {

       // If it's the very last call, we process all the remaining rows!

@@ -971,10 +985,10 @@
     }

   }

 

-

   int _emitFancyRGB(int mbY, int mbW, int mbH) {

-    int numLinesOut = mbH;   // a priori guess

-    InputBuffer dst = InputBuffer(output.getBytes(), offset: mbY * webp.width * 4);

+    int numLinesOut = mbH; // a priori guess

+    InputBuffer dst =

+        InputBuffer(output.getBytes(), offset: mbY * webp.width * 4);

     InputBuffer curY = InputBuffer.from(_y);

     InputBuffer curU = InputBuffer.from(_u);

     InputBuffer curV = InputBuffer.from(_v);

@@ -991,7 +1005,7 @@
     } else {

       // We can finish the left-over line from previous call.

       _upsample(_tmpY, curY, topU, topV, curU, curV,

-                new InputBuffer.from(dst, offset: -stride), dst, mbW);

+          new InputBuffer.from(dst, offset: -stride), dst, mbW);

       ++numLinesOut;

     }

 

@@ -1005,9 +1019,16 @@
       curV.offset += _cacheUVStride;

       dst.offset += 2 * stride;

       curY.offset += 2 * _cacheYStride;

-      _upsample(new InputBuffer.from(curY, offset: -_cacheYStride), curY,

-          topU, topV, curU, curV,

-          new InputBuffer.from(dst, offset: -stride), dst, mbW);

+      _upsample(

+          new InputBuffer.from(curY, offset: -_cacheYStride),

+          curY,

+          topU,

+          topV,

+          curU,

+          curV,

+          new InputBuffer.from(dst, offset: -stride),

+          dst,

+          mbW);

     }

 

     // move to last row

@@ -1036,7 +1057,7 @@
     final int height = webp.height;

 

     if (row < 0 || numRows <= 0 || row + numRows > height) {

-      return null;    // sanity check.

+      return null; // sanity check.

     }

 

     if (row == 0) {

@@ -1064,9 +1085,9 @@
     // to decode more than 1 keyframe.

     if (_segmentHeader.updateMap) {

       // Hardcoded tree parsing

-      _segment = br.getBit(_proba.segments[0]) == 0 ?

-            br.getBit(_proba.segments[1]) :

-            2 + br.getBit(_proba.segments[2]);

+      _segment = br.getBit(_proba.segments[0]) == 0

+          ? br.getBit(_proba.segments[1])

+          : 2 + br.getBit(_proba.segments[2]);

     }

 

     skip = _useSkipProba ? br.getBit(_skipP) != 0 : false;

@@ -1084,7 +1105,8 @@
       block.nonZeroUV = 0;

     }

 

-    if (_filterType > 0) {  // store filter info

+    if (_filterType > 0) {

+      // store filter info

       _fInfo[_mbX] = _fStrengths[_segment][block.isIntra4x4 ? 1 : 0];

       VP8FInfo finfo = _fInfo[_mbX];

       finfo.fInner = finfo.fInner || !skip;

@@ -1111,14 +1133,17 @@
 

     dst.memset(0, dst.length, 0);

 

-    if (!block.isIntra4x4) {    // parse DC

+    if (!block.isIntra4x4) {

+      // parse DC

       InputBuffer dc = InputBuffer(new Int16List(16));

       final int ctx = mb.nzDc + leftMb.nzDc;

       final int nz = _getCoeffs(tokenBr, bands[1], ctx, q.y2Mat, 0, dc);

       mb.nzDc = leftMb.nzDc = (nz > 0) ? 1 : 0;

-      if (nz > 1) {   // more than just the DC -> perform the full transform

+      if (nz > 1) {

+        // more than just the DC -> perform the full transform

         _transformWHT(dc, dst);

-      } else {        // only DC is non-zero -> inlined simplified transform

+      } else {

+        // only DC is non-zero -> inlined simplified transform

         final int dc0 = (dc[0] + 3) >> 3;

         for (int i = 0; i < 16 * 16; i += 16) {

           dst[i] = dc0;

@@ -1199,21 +1224,21 @@
     int oi = 0;

     for (int i = 0; i < 4; ++i) {

       final int a0 = src[0 + i] + src[12 + i];

-      final int a1 = src[4 + i] + src[ 8 + i];

-      final int a2 = src[4 + i] - src[ 8 + i];

+      final int a1 = src[4 + i] + src[8 + i];

+      final int a2 = src[4 + i] - src[8 + i];

       final int a3 = src[0 + i] - src[12 + i];

-      tmp[0  + i] = a0 + a1;

-      tmp[8  + i] = a0 - a1;

-      tmp[4  + i] = a3 + a2;

+      tmp[0 + i] = a0 + a1;

+      tmp[8 + i] = a0 - a1;

+      tmp[4 + i] = a3 + a2;

       tmp[12 + i] = a3 - a2;

     }

 

     for (int i = 0; i < 4; ++i) {

-      final int dc = tmp[0 + i * 4] + 3;    // w/ rounder

-      final int a0 = dc             + tmp[3 + i * 4];

+      final int dc = tmp[0 + i * 4] + 3; // w/ rounder

+      final int a0 = dc + tmp[3 + i * 4];

       final int a1 = tmp[1 + i * 4] + tmp[2 + i * 4];

       final int a2 = tmp[1 + i * 4] - tmp[2 + i * 4];

-      final int a3 = dc             - tmp[3 + i * 4];

+      final int a3 = dc - tmp[3 + i * 4];

       out[oi + 0] = (a0 + a1) >> 3;

       out[oi + 16] = (a3 + a2) >> 3;

       out[oi + 32] = (a0 - a1) >> 3;

@@ -1230,20 +1255,62 @@
   }

 

   static const List<int> kBands = const [

-     0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0];

+    0,

+    1,

+    2,

+    3,

+    6,

+    4,

+    5,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    6,

+    7,

+    0

+  ];

 

-  static const List<int> kCat3 = const [ 173, 148, 140 ];

-  static const List<int> kCat4 = const [ 176, 155, 140, 135 ];

-  static const List<int> kCat5 = const [ 180, 157, 141, 134, 130 ];

-  static const List<int> kCat6 = const [ 254, 254, 243, 230, 196, 177, 153,

-                                         140, 133, 130, 129 ];

-  static const List<List<int>> kCat3456 = const [ kCat3, kCat4, kCat5, kCat6 ];

-  static const List<int> kZigzag = const [ 0, 1, 4, 8,  5, 2, 3, 6,  9, 12,

-                                           13, 10,  7, 11, 14, 15 ];

+  static const List<int> kCat3 = const [173, 148, 140];

+  static const List<int> kCat4 = const [176, 155, 140, 135];

+  static const List<int> kCat5 = const [180, 157, 141, 134, 130];

+  static const List<int> kCat6 = const [

+    254,

+    254,

+    243,

+    230,

+    196,

+    177,

+    153,

+    140,

+    133,

+    130,

+    129

+  ];

+  static const List<List<int>> kCat3456 = const [kCat3, kCat4, kCat5, kCat6];

+  static const List<int> kZigzag = const [

+    0,

+    1,

+    4,

+    8,

+    5,

+    2,

+    3,

+    6,

+    9,

+    12,

+    13,

+    10,

+    7,

+    11,

+    14,

+    15

+  ];

 

-  /**

-   * See section 13-2: http://tools.ietf.org/html/rfc6386#section-13.2

-   */

+  /// See section 13-2: http://tools.ietf.org/html/rfc6386#section-13.2

   int _getLargeValue(VP8BitReader br, List<int> p) {

     int v;

     if (br.getBit(p[3]) == 0) {

@@ -1275,27 +1342,26 @@
     return v;

   }

 

-

-  /**

-   * Returns the position of the last non-zero coeff plus one

-   */

-  int _getCoeffs(VP8BitReader br, List<VP8BandProbas> prob,

-                 int ctx, List<int> dq, int n, InputBuffer out) {

+  /// Returns the position of the last non-zero coeff plus one

+  int _getCoeffs(VP8BitReader br, List<VP8BandProbas> prob, int ctx,

+      List<int> dq, int n, InputBuffer out) {

     // n is either 0 or 1 here. kBands[n] is not necessary for extracting '*p'.

     List<int> p = prob[n].probas[ctx];

     for (; n < 16; ++n) {

       if (br.getBit(p[0]) == 0) {

-        return n;  // previous coeff was last non-zero coeff

+        return n; // previous coeff was last non-zero coeff

       }

 

-      while (br.getBit(p[1]) == 0) { // sequence of zero coeffs

+      while (br.getBit(p[1]) == 0) {

+        // sequence of zero coeffs

         p = prob[kBands[++n]].probas[0];

         if (n == 16) {

           return 16;

         }

       }

 

-      { // non zero coeff

+      {

+        // non zero coeff

         List<Uint8List> p_ctx = prob[kBands[n + 1]].probas;

         int v;

         if (br.getBit(p[2]) == 0) {

@@ -1324,10 +1390,9 @@
     block.isIntra4x4 = br.getBit(145) == 0;

     if (!block.isIntra4x4) {

       // Hardcoded 16x16 intra-mode decision tree.

-      final int ymode =

-          br.getBit(156) != 0 ?

-              (br.getBit(128) != 0 ? TM_PRED : H_PRED) :

-              (br.getBit(163) != 0 ? V_PRED : DC_PRED);

+      final int ymode = br.getBit(156) != 0

+          ? (br.getBit(128) != 0 ? TM_PRED : H_PRED)

+          : (br.getBit(163) != 0 ? V_PRED : DC_PRED);

       block.imodes[0] = ymode;

 

       top.fillRange(ti, ti + 4, ymode);

@@ -1360,9 +1425,9 @@
     }

 

     // Hardcoded UVMode decision tree

-    block.uvmode = br.getBit(142) == 0 ? DC_PRED

-        : br.getBit(114) == 0 ? V_PRED

-            : br.getBit(183) != 0 ? TM_PRED : H_PRED;

+    block.uvmode = br.getBit(142) == 0

+        ? DC_PRED

+        : br.getBit(114) == 0 ? V_PRED : br.getBit(183) != 0 ? TM_PRED : H_PRED;

   }

 

   // Main data source

@@ -1385,6 +1450,7 @@
 

   /// Width in macroblock units.

   int _mbWidth;

+

   /// Height in macroblock units.

   int _mbHeight;

 

@@ -1414,18 +1480,22 @@
   // Boundary data cache and persistent buffers.

   /// top intra modes values: 4 * _mbWidth

   Uint8List _intraT;

+

   /// left intra modes values

   Uint8List _intraL = Uint8List(4);

 

   /// uint8, segment of the currently parsed block

   int _segment;

+

   /// top y/u/v samples

   List<VP8TopSamples> _yuvT;

 

   /// contextual macroblock info (mb_w_ + 1)

   List<VP8MB> _mbInfo;

+

   /// filter strength info

   List<VP8FInfo> _fInfo;

+

   /// main block for Y/U/V (size = YUV_SIZE)

   Uint8List _yuvBlock;

 

@@ -1452,19 +1522,23 @@
   /// current position, in macroblock units

   int _mbX = 0;

   int _mbY = 0;

+

   /// parsed reconstruction data

   List<VP8MBData> _mbData;

 

   /// 0=off, 1=simple, 2=complex

   int _filterType;

+

   /// precalculated per-segment/type

   List<List<VP8FInfo>> _fStrengths;

 

   // Alpha

   /// alpha-plane decoder object

   WebPAlpha _alpha;

+

   /// compressed alpha data (if present)

   InputBuffer _alphaData;

+

   /// true if alpha_data_ is decoded in alpha_plane_

   //int _isAlphaDecoded;

   /// output. Persistent, contains the whole data.

@@ -1479,442 +1553,549 @@
     return v < 0 ? 0 : v > M ? M : v;

   }

 

-  static const List<int> kYModesIntra4 = const [

-    -B_DC_PRED, 1,

-    -B_TM_PRED, 2,

-    -B_VE_PRED, 3,

-    4, 6,

-    -B_HE_PRED, 5,

-    -B_RD_PRED, -B_VR_PRED,

-    -B_LD_PRED, 7,

-    -B_VL_PRED, 8,

-    -B_HD_PRED, -B_HU_PRED ];

+  static const kYModesIntra4 = [

+    -B_DC_PRED,

+    1,

+    -B_TM_PRED,

+    2,

+    -B_VE_PRED,

+    3,

+    4,

+    6,

+    -B_HE_PRED,

+    5,

+    -B_RD_PRED,

+    -B_VR_PRED,

+    -B_LD_PRED,

+    7,

+    -B_VL_PRED,

+    8,

+    -B_HD_PRED,

+    -B_HU_PRED

+  ];

 

-  static const List<List<List<int>>> kBModesProba = const [

-     const [ const [ 231, 120, 48, 89, 115, 113, 120, 152, 112 ],

-       const [ 152, 179, 64, 126, 170, 118, 46, 70, 95 ],

-       const [ 175, 69, 143, 80, 85, 82, 72, 155, 103 ],

-       const [ 56, 58, 10, 171, 218, 189, 17, 13, 152 ],

-       const [ 114, 26, 17, 163, 44, 195, 21, 10, 173 ],

-       const [ 121, 24, 80, 195, 26, 62, 44, 64, 85 ],

-       const [ 144, 71, 10, 38, 171, 213, 144, 34, 26 ],

-       const [ 170, 46, 55, 19, 136, 160, 33, 206, 71 ],

-       const [ 63, 20, 8, 114, 114, 208, 12, 9, 226 ],

-       const [ 81, 40, 11, 96, 182, 84, 29, 16, 36 ] ],

-       const [ const [ 134, 183, 89, 137, 98, 101, 106, 165, 148 ],

-         const [ 72, 187, 100, 130, 157, 111, 32, 75, 80 ],

-         const [ 66, 102, 167, 99, 74, 62, 40, 234, 128 ],

-         const [ 41, 53, 9, 178, 241, 141, 26, 8, 107 ],

-         const [ 74, 43, 26, 146, 73, 166, 49, 23, 157 ],

-         const [ 65, 38, 105, 160, 51, 52, 31, 115, 128 ],

-         const [ 104, 79, 12, 27, 217, 255, 87, 17, 7 ],

-         const [ 87, 68, 71, 44, 114, 51, 15, 186, 23 ],

-         const [ 47, 41, 14, 110, 182, 183, 21, 17, 194 ],

-         const [ 66, 45, 25, 102, 197, 189, 23, 18, 22 ] ],

-         const [ const [ 88, 88, 147, 150, 42, 46, 45, 196, 205 ],

-           const [ 43, 97, 183, 117, 85, 38, 35, 179, 61 ],

-           const [ 39, 53, 200, 87, 26, 21, 43, 232, 171 ],

-           const [ 56, 34, 51, 104, 114, 102, 29, 93, 77 ],

-           const [ 39, 28, 85, 171, 58, 165, 90, 98, 64 ],

-           const [ 34, 22, 116, 206, 23, 34, 43, 166, 73 ],

-           const [ 107, 54, 32, 26, 51, 1, 81, 43, 31 ],

-           const [ 68, 25, 106, 22, 64, 171, 36, 225, 114 ],

-           const [ 34, 19, 21, 102, 132, 188, 16, 76, 124 ],

-           const [ 62, 18, 78, 95, 85, 57, 50, 48, 51 ] ],

-           const [ const [ 193, 101, 35, 159, 215, 111, 89, 46, 111 ],

-             const [ 60, 148, 31, 172, 219, 228, 21, 18, 111 ],

-             const [ 112, 113, 77, 85, 179, 255, 38, 120, 114 ],

-             const [ 40, 42, 1, 196, 245, 209, 10, 25, 109 ],

-             const [ 88, 43, 29, 140, 166, 213, 37, 43, 154 ],

-             const [ 61, 63, 30, 155, 67, 45, 68, 1, 209 ],

-             const [ 100, 80, 8, 43, 154, 1, 51, 26, 71 ],

-             const [ 142, 78, 78, 16, 255, 128, 34, 197, 171 ],

-             const [ 41, 40, 5, 102, 211, 183, 4, 1, 221 ],

-             const [ 51, 50, 17, 168, 209, 192, 23, 25, 82 ] ],

-             const [ const [ 138, 31, 36, 171, 27, 166, 38, 44, 229 ],

-               const [ 67, 87, 58, 169, 82, 115, 26, 59, 179 ],

-               const [ 63, 59, 90, 180, 59, 166, 93, 73, 154 ],

-               const [ 40, 40, 21, 116, 143, 209, 34, 39, 175 ],

-               const [ 47, 15, 16, 183, 34, 223, 49, 45, 183 ],

-               const [ 46, 17, 33, 183, 6, 98, 15, 32, 183 ],

-               const [ 57, 46, 22, 24, 128, 1, 54, 17, 37 ],

-               const [ 65, 32, 73, 115, 28, 128, 23, 128, 205 ],

-               const [ 40, 3, 9, 115, 51, 192, 18, 6, 223 ],

-               const [ 87, 37, 9, 115, 59, 77, 64, 21, 47 ] ],

-               const [ const [ 104, 55, 44, 218, 9, 54, 53, 130, 226 ],

-                 const [ 64, 90, 70, 205, 40, 41, 23, 26, 57 ],

-                 const [ 54, 57, 112, 184, 5, 41, 38, 166, 213 ],

-                 const [ 30, 34, 26, 133, 152, 116, 10, 32, 134 ],

-                 const [ 39, 19, 53, 221, 26, 114, 32, 73, 255 ],

-                 const [ 31, 9, 65, 234, 2, 15, 1, 118, 73 ],

-                 const [ 75, 32, 12, 51, 192, 255, 160, 43, 51 ],

-                 const [ 88, 31, 35, 67, 102, 85, 55, 186, 85 ],

-                 const [ 56, 21, 23, 111, 59, 205, 45, 37, 192 ],

-                 const [ 55, 38, 70, 124, 73, 102, 1, 34, 98 ] ],

-                 const [ const [ 125, 98, 42, 88, 104, 85, 117, 175, 82 ],

-                   const [ 95, 84, 53, 89, 128, 100, 113, 101, 45 ],

-                   const [ 75, 79, 123, 47, 51, 128, 81, 171, 1 ],

-                   const [ 57, 17, 5, 71, 102, 57, 53, 41, 49 ],

-                   const [ 38, 33, 13, 121, 57, 73, 26, 1, 85 ],

-                   const [ 41, 10, 67, 138, 77, 110, 90, 47, 114 ],

-                   const [ 115, 21, 2, 10, 102, 255, 166, 23, 6 ],

-                   const [ 101, 29, 16, 10, 85, 128, 101, 196, 26 ],

-                   const [ 57, 18, 10, 102, 102, 213, 34, 20, 43 ],

-                   const [ 117, 20, 15, 36, 163, 128, 68, 1, 26 ] ],

-                   const [ const [ 102, 61, 71, 37, 34, 53, 31, 243, 192 ],

-                     const [ 69, 60, 71, 38, 73, 119, 28, 222, 37 ],

-                     const [ 68, 45, 128, 34, 1, 47, 11, 245, 171 ],

-                     const [ 62, 17, 19, 70, 146, 85, 55, 62, 70 ],

-                     const [ 37, 43, 37, 154, 100, 163, 85, 160, 1 ],

-                     const [ 63, 9, 92, 136, 28, 64, 32, 201, 85 ],

-                     const [ 75, 15, 9, 9, 64, 255, 184, 119, 16 ],

-                     const [ 86, 6, 28, 5, 64, 255, 25, 248, 1 ],

-                     const [ 56, 8, 17, 132, 137, 255, 55, 116, 128 ],

-                     const [ 58, 15, 20, 82, 135, 57, 26, 121, 40 ] ],

-                     const [ const [ 164, 50, 31, 137, 154, 133, 25, 35, 218 ],

-                       const [ 51, 103, 44, 131, 131, 123, 31, 6, 158 ],

-                       const [ 86, 40, 64, 135, 148, 224, 45, 183, 128 ],

-                       const [ 22, 26, 17, 131, 240, 154, 14, 1, 209 ],

-                       const [ 45, 16, 21, 91, 64, 222, 7, 1, 197 ],

-                       const [ 56, 21, 39, 155, 60, 138, 23, 102, 213 ],

-                       const [ 83, 12, 13, 54, 192, 255, 68, 47, 28 ],

-                       const [ 85, 26, 85, 85, 128, 128, 32, 146, 171 ],

-                       const [ 18, 11, 7, 63, 144, 171, 4, 4, 246 ],

-                       const [ 35, 27, 10, 146, 174, 171, 12, 26, 128 ] ],

-                       const [ const [ 190, 80, 35, 99, 180, 80, 126, 54, 45 ],

-                         const [ 85, 126, 47, 87, 176, 51, 41, 20, 32 ],

-                         const [ 101, 75, 128, 139, 118, 146, 116, 128, 85 ],

-                         const [ 56, 41, 15, 176, 236, 85, 37, 9, 62 ],

-                         const [ 71, 30, 17, 119, 118, 255, 17, 18, 138 ],

-                         const [ 101, 38, 60, 138, 55, 70, 43, 26, 142 ],

-                         const [ 146, 36, 19, 30, 171, 255, 97, 27, 20 ],

-                         const [ 138, 45, 61, 62, 219, 1, 81, 188, 64 ],

-                         const [ 32, 41, 20, 117, 151, 142, 20, 21, 163 ],

-                         const [ 112, 19, 12, 61, 195, 128, 48, 4, 24 ] ] ];

+  static const kBModesProba = [

+    [

+      [231, 120, 48, 89, 115, 113, 120, 152, 112],

+      [152, 179, 64, 126, 170, 118, 46, 70, 95],

+      [175, 69, 143, 80, 85, 82, 72, 155, 103],

+      [56, 58, 10, 171, 218, 189, 17, 13, 152],

+      [114, 26, 17, 163, 44, 195, 21, 10, 173],

+      [121, 24, 80, 195, 26, 62, 44, 64, 85],

+      [144, 71, 10, 38, 171, 213, 144, 34, 26],

+      [170, 46, 55, 19, 136, 160, 33, 206, 71],

+      [63, 20, 8, 114, 114, 208, 12, 9, 226],

+      [81, 40, 11, 96, 182, 84, 29, 16, 36]

+    ],

+    [

+      [134, 183, 89, 137, 98, 101, 106, 165, 148],

+      [72, 187, 100, 130, 157, 111, 32, 75, 80],

+      [66, 102, 167, 99, 74, 62, 40, 234, 128],

+      [41, 53, 9, 178, 241, 141, 26, 8, 107],

+      [74, 43, 26, 146, 73, 166, 49, 23, 157],

+      [65, 38, 105, 160, 51, 52, 31, 115, 128],

+      [104, 79, 12, 27, 217, 255, 87, 17, 7],

+      [87, 68, 71, 44, 114, 51, 15, 186, 23],

+      [47, 41, 14, 110, 182, 183, 21, 17, 194],

+      [66, 45, 25, 102, 197, 189, 23, 18, 22]

+    ],

+    [

+      [88, 88, 147, 150, 42, 46, 45, 196, 205],

+      [43, 97, 183, 117, 85, 38, 35, 179, 61],

+      [39, 53, 200, 87, 26, 21, 43, 232, 171],

+      [56, 34, 51, 104, 114, 102, 29, 93, 77],

+      [39, 28, 85, 171, 58, 165, 90, 98, 64],

+      [34, 22, 116, 206, 23, 34, 43, 166, 73],

+      [107, 54, 32, 26, 51, 1, 81, 43, 31],

+      [68, 25, 106, 22, 64, 171, 36, 225, 114],

+      [34, 19, 21, 102, 132, 188, 16, 76, 124],

+      [62, 18, 78, 95, 85, 57, 50, 48, 51]

+    ],

+    [

+      [193, 101, 35, 159, 215, 111, 89, 46, 111],

+      [60, 148, 31, 172, 219, 228, 21, 18, 111],

+      [112, 113, 77, 85, 179, 255, 38, 120, 114],

+      [40, 42, 1, 196, 245, 209, 10, 25, 109],

+      [88, 43, 29, 140, 166, 213, 37, 43, 154],

+      [61, 63, 30, 155, 67, 45, 68, 1, 209],

+      [100, 80, 8, 43, 154, 1, 51, 26, 71],

+      [142, 78, 78, 16, 255, 128, 34, 197, 171],

+      [41, 40, 5, 102, 211, 183, 4, 1, 221],

+      [51, 50, 17, 168, 209, 192, 23, 25, 82]

+    ],

+    [

+      [138, 31, 36, 171, 27, 166, 38, 44, 229],

+      [67, 87, 58, 169, 82, 115, 26, 59, 179],

+      [63, 59, 90, 180, 59, 166, 93, 73, 154],

+      [40, 40, 21, 116, 143, 209, 34, 39, 175],

+      [47, 15, 16, 183, 34, 223, 49, 45, 183],

+      [46, 17, 33, 183, 6, 98, 15, 32, 183],

+      [57, 46, 22, 24, 128, 1, 54, 17, 37],

+      [65, 32, 73, 115, 28, 128, 23, 128, 205],

+      [40, 3, 9, 115, 51, 192, 18, 6, 223],

+      [87, 37, 9, 115, 59, 77, 64, 21, 47]

+    ],

+    [

+      [104, 55, 44, 218, 9, 54, 53, 130, 226],

+      [64, 90, 70, 205, 40, 41, 23, 26, 57],

+      [54, 57, 112, 184, 5, 41, 38, 166, 213],

+      [30, 34, 26, 133, 152, 116, 10, 32, 134],

+      [39, 19, 53, 221, 26, 114, 32, 73, 255],

+      [31, 9, 65, 234, 2, 15, 1, 118, 73],

+      [75, 32, 12, 51, 192, 255, 160, 43, 51],

+      [88, 31, 35, 67, 102, 85, 55, 186, 85],

+      [56, 21, 23, 111, 59, 205, 45, 37, 192],

+      [55, 38, 70, 124, 73, 102, 1, 34, 98]

+    ],

+    [

+      [125, 98, 42, 88, 104, 85, 117, 175, 82],

+      [95, 84, 53, 89, 128, 100, 113, 101, 45],

+      [75, 79, 123, 47, 51, 128, 81, 171, 1],

+      [57, 17, 5, 71, 102, 57, 53, 41, 49],

+      [38, 33, 13, 121, 57, 73, 26, 1, 85],

+      [41, 10, 67, 138, 77, 110, 90, 47, 114],

+      [115, 21, 2, 10, 102, 255, 166, 23, 6],

+      [101, 29, 16, 10, 85, 128, 101, 196, 26],

+      [57, 18, 10, 102, 102, 213, 34, 20, 43],

+      [117, 20, 15, 36, 163, 128, 68, 1, 26]

+    ],

+    [

+      [102, 61, 71, 37, 34, 53, 31, 243, 192],

+      [69, 60, 71, 38, 73, 119, 28, 222, 37],

+      [68, 45, 128, 34, 1, 47, 11, 245, 171],

+      [62, 17, 19, 70, 146, 85, 55, 62, 70],

+      [37, 43, 37, 154, 100, 163, 85, 160, 1],

+      [63, 9, 92, 136, 28, 64, 32, 201, 85],

+      [75, 15, 9, 9, 64, 255, 184, 119, 16],

+      [86, 6, 28, 5, 64, 255, 25, 248, 1],

+      [56, 8, 17, 132, 137, 255, 55, 116, 128],

+      [58, 15, 20, 82, 135, 57, 26, 121, 40]

+    ],

+    [

+      [164, 50, 31, 137, 154, 133, 25, 35, 218],

+      [51, 103, 44, 131, 131, 123, 31, 6, 158],

+      [86, 40, 64, 135, 148, 224, 45, 183, 128],

+      [22, 26, 17, 131, 240, 154, 14, 1, 209],

+      [45, 16, 21, 91, 64, 222, 7, 1, 197],

+      [56, 21, 39, 155, 60, 138, 23, 102, 213],

+      [83, 12, 13, 54, 192, 255, 68, 47, 28],

+      [85, 26, 85, 85, 128, 128, 32, 146, 171],

+      [18, 11, 7, 63, 144, 171, 4, 4, 246],

+      [35, 27, 10, 146, 174, 171, 12, 26, 128]

+    ],

+    [

+      [190, 80, 35, 99, 180, 80, 126, 54, 45],

+      [85, 126, 47, 87, 176, 51, 41, 20, 32],

+      [101, 75, 128, 139, 118, 146, 116, 128, 85],

+      [56, 41, 15, 176, 236, 85, 37, 9, 62],

+      [71, 30, 17, 119, 118, 255, 17, 18, 138],

+      [101, 38, 60, 138, 55, 70, 43, 26, 142],

+      [146, 36, 19, 30, 171, 255, 97, 27, 20],

+      [138, 45, 61, 62, 219, 1, 81, 188, 64],

+      [32, 41, 20, 117, 151, 142, 20, 21, 163],

+      [112, 19, 12, 61, 195, 128, 48, 4, 24]

+    ]

+  ];

 

-  static const List COEFFS_PROBA_0 = const [

-  const [ const [ const [ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 ],

-      const [ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 ],

-      const [ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 ]

+  static const COEFFS_PROBA_0 = [

+    [

+      [

+        [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],

+        [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],

+        [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]

+      ],

+      [

+        [253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128],

+        [189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128],

+        [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128]

+      ],

+      [

+        [1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128],

+        [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128],

+        [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128],

+      ],

+      [

+        [1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128],

+        [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128],

+        [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128],

+      ],

+      [

+        [1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128],

+        [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128],

+        [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128]

+      ],

+      [

+        [1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128],

+        [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128],

+        [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128]

+      ],

+      [

+        [1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128],

+        [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128],

+        [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128]

+      ],

+      [

+        [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],

+        [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],

+        [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]

+      ]

     ],

-    const [ const [ 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 ],

-      const [ 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 ],

-      const [ 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 ]

+    [

+      [

+        [198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62],

+        [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1],

+        [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128]

+      ],

+      [

+        [1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128],

+        [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128],

+        [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128]

+      ],

+      [

+        [1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128],

+        [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128],

+        [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128]

+      ],

+      [

+        [1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128],

+        [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128],

+        [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128]

+      ],

+      [

+        [1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128],

+        [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128],

+        [22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128]

+      ],

+      [

+        [1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128],

+        [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128],

+        [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128]

+      ],

+      [

+        [1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128],

+        [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128],

+        [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128]

+      ],

+      [

+        [1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128],

+        [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128],

+        [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128]

+      ]

     ],

-    const [ const [ 1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128 ],

-      const [ 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 ],

-      const [ 78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 ],

+    [

+      [

+        [253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128],

+        [175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128],

+        [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128]

+      ],

+      [

+        [1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128],

+        [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128],

+        [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128]

+      ],

+      [

+        [1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128],

+        [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128],

+        [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128]

+      ],

+      [

+        [1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128],

+        [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128],

+        [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128]

+      ],

+      [

+        [1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128],

+        [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128],

+        [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]

+      ],

+      [

+        [1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128],

+        [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128],

+        [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128]

+      ],

+      [

+        [1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128],

+        [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128],

+        [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128]

+      ],

+      [

+        [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],

+        [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],

+        [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128]

+      ]

     ],

-    const [ const [ 1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 ],

-      const [ 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 ],

-      const [ 77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 ],

-    ],

-    const [ const [ 1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 ],

-      const [ 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 ],

-      const [ 37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 ],

-      const [ 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 ],

-      const [ 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 ],

-      const [ 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 ],

-      const [ 80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 ],

-      const [ 246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 ],

-      const [ 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 ]

+    [

+      [

+        [202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255],

+        [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128],

+        [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128]

+      ],

+      [

+        [1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128],

+        [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128],

+        [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128]

+      ],

+      [

+        [1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128],

+        [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128],

+        [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128]

+      ],

+      [

+        [1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128],

+        [149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128],

+        [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128]

+      ],

+      [

+        [1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128],

+        [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128],

+        [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128]

+      ],

+      [

+        [1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128],

+        [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128],

+        [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128]

+      ],

+      [

+        [1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128],

+        [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128],

+        [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128]

+      ],

+      [

+        [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],

+        [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],

+        [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128]

+      ]

     ]

-  ],

-  const [ const [ const [ 198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62 ],

-      const [ 131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1 ],

-      const [ 68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128 ]

-    ],

-    const [ const [ 1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 ],

-      const [ 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 ],

-      const [ 81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128 ]

-    ],

-    const [ const [ 1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 ],

-      const [ 99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 ],

-      const [ 23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128 ]

-    ],

-    const [ const [ 1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 ],

-      const [ 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 ],

-      const [ 44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 ],

-      const [ 94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 ],

-      const [ 22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 ],

-      const [ 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 ],

-      const [ 35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 ],

-      const [ 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 ],

-      const [ 45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128 ],

-      const [ 203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128 ],

-      const [ 137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128 ]

-    ]

-  ],

-  const [ const [ const [ 253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128 ],

-      const [ 175, 13, 224, 243, 193, 185, 249, 198, 255, 255, 128 ],

-      const [ 73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128 ]

-    ],

-    const [ const [ 1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128 ],

-      const [ 239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128 ],

-      const [ 155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128 ],

-      const [ 201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128 ],

-      const [ 69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 ],

-      const [ 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 ],

-      const [ 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 16, 248, 255, 255, 128, 128, 128, 128, 128, 128 ],

-      const [ 190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128 ],

-      const [ 149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 ],

-      const [ 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 ],

-      const [ 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 ],

-      const [ 213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128 ],

-      const [ 55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128 ]

-    ],

-    const [ const [ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 ],

-      const [ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 ],

-      const [ 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 ]

-    ]

-  ],

-  const [ const [ const [ 202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255 ],

-      const [ 126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128 ],

-      const [ 61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128 ]

-    ],

-    const [ const [ 1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 ],

-      const [ 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 ],

-      const [ 39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128 ]

-    ],

-    const [ const [ 1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128 ],

-      const [ 124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128 ],

-      const [ 24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128 ]

-    ],

-    const [ const [ 1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 ],

-      const [ 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 ],

-      const [ 28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 ]

-    ],

-    const [ const [ 1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128 ],

-      const [ 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 ],

-      const [ 20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 ],

-      const [ 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 ],

-      const [ 47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 ],

-      const [ 141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128 ],

-      const [ 42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128 ]

-    ],

-    const [ const [ 1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 ],

-      const [ 244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 ],

-      const [ 238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128 ]

-    ]

-  ] ];

+  ];

 

-

-  static const List COEFFS_UPDATE_PROBA = const [

-    const [ const [ const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

+  static const COEFFS_UPDATE_PROBA = [

+    [

+      [

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255],

+        [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255],

+        [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255],

+        [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255],

+        [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ]

     ],

-    const [ const [ 176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 223, 241, 252, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 ]

+    [

+      [

+        [217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255],

+        [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255]

+      ],

+      [

+        [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],

+        [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ]

     ],

-    const [ const [ 255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

+    [

+      [

+        [186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255],

+        [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255],

+        [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255]

+      ],

+      [

+        [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ]

     ],

-    const [ const [ 255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255 ],

-      const [ 250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255 ],

-      const [ 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

+    [

+      [

+        [248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255],

+        [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],

+        [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],

+        [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255],

+        [248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],

+        [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255],

+        [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255],

+        [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ],

+      [

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],

+        [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]

+      ]

     ]

-    ],

-    const [ const [ const [ 217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 225, 252, 241, 253, 255, 255, 254, 255, 255, 255, 255 ],

-      const [ 234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ]

-    ],

-    const [ const [ const [ 186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ]

-    ],

-    const [ const [ const [ 248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 248, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 255, 253, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ],

-    const [ const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ],

-      const [ 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255 ]

-    ] ] ];

+  ];

 

   // Paragraph 14.1

-  static const List<int> DC_TABLE = const [ // uint8

-      4,     5,   6,   7,   8,   9,  10,  10,

-      11,   12,  13,  14,  15,  16,  17,  17,

-      18,   19,  20,  20,  21,  21,  22,  22,

-      23,   23,  24,  25,  25,  26,  27,  28,

-      29,   30,  31,  32,  33,  34,  35,  36,

-      37,   37,  38,  39,  40,  41,  42,  43,

-      44,   45,  46,  46,  47,  48,  49,  50,

-      51,   52,  53,  54,  55,  56,  57,  58,

-      59,   60,  61,  62,  63,  64,  65,  66,

-      67,   68,  69,  70,  71,  72,  73,  74,

-      75,   76,  76,  77,  78,  79,  80,  81,

-      82,   83,  84,  85,  86,  87,  88,  89,

-      91,   93,  95,  96,  98, 100, 101, 102,

-      104, 106, 108, 110, 112, 114, 116, 118,

-      122, 124, 126, 128, 130, 132, 134, 136,

-      138, 140, 143, 145, 148, 151, 154, 157];

+  static const DC_TABLE = [

+    // uint8

+    4, 5, 6, 7, 8, 9, 10, 10,

+    11, 12, 13, 14, 15, 16, 17, 17,

+    18, 19, 20, 20, 21, 21, 22, 22,

+    23, 23, 24, 25, 25, 26, 27, 28,

+    29, 30, 31, 32, 33, 34, 35, 36,

+    37, 37, 38, 39, 40, 41, 42, 43,

+    44, 45, 46, 46, 47, 48, 49, 50,

+    51, 52, 53, 54, 55, 56, 57, 58,

+    59, 60, 61, 62, 63, 64, 65, 66,

+    67, 68, 69, 70, 71, 72, 73, 74,

+    75, 76, 76, 77, 78, 79, 80, 81,

+    82, 83, 84, 85, 86, 87, 88, 89,

+    91, 93, 95, 96, 98, 100, 101, 102,

+    104, 106, 108, 110, 112, 114, 116, 118,

+    122, 124, 126, 128, 130, 132, 134, 136,

+    138, 140, 143, 145, 148, 151, 154, 157

+  ];

 

-  static const List<int> AC_TABLE = const [ // uint16

-       4,     5,   6,   7,   8,   9,  10,  11,

-       12,   13,  14,  15,  16,  17,  18,  19,

-       20,   21,  22,  23,  24,  25,  26,  27,

-       28,   29,  30,  31,  32,  33,  34,  35,

-       36,   37,  38,  39,  40,  41,  42,  43,

-       44,   45,  46,  47,  48,  49,  50,  51,

-       52,   53,  54,  55,  56,  57,  58,  60,

-       62,   64,  66,  68,  70,  72,  74,  76,

-       78,   80,  82,  84,  86,  88,  90,  92,

-       94,   96,  98, 100, 102, 104, 106, 108,

-       110, 112, 114, 116, 119, 122, 125, 128,

-       131, 134, 137, 140, 143, 146, 149, 152,

-       155, 158, 161, 164, 167, 170, 173, 177,

-       181, 185, 189, 193, 197, 201, 205, 209,

-       213, 217, 221, 225, 229, 234, 239, 245,

-       249, 254, 259, 264, 269, 274, 279, 284];

+  static const AC_TABLE = [

+    // uint16

+    4, 5, 6, 7, 8, 9, 10, 11,

+    12, 13, 14, 15, 16, 17, 18, 19,

+    20, 21, 22, 23, 24, 25, 26, 27,

+    28, 29, 30, 31, 32, 33, 34, 35,

+    36, 37, 38, 39, 40, 41, 42, 43,

+    44, 45, 46, 47, 48, 49, 50, 51,

+    52, 53, 54, 55, 56, 57, 58, 60,

+    62, 64, 66, 68, 70, 72, 74, 76,

+    78, 80, 82, 84, 86, 88, 90, 92,

+    94, 96, 98, 100, 102, 104, 106, 108,

+    110, 112, 114, 116, 119, 122, 125, 128,

+    131, 134, 137, 140, 143, 146, 149, 152,

+    155, 158, 161, 164, 167, 170, 173, 177,

+    181, 185, 189, 193, 197, 201, 205, 209,

+    213, 217, 221, 225, 229, 234, 239, 245,

+    249, 254, 259, 264, 269, 274, 279, 284

+  ];

 

-  /**

-   * FILTER_EXTRA_ROWS = How many extra lines are needed on the MB boundary

-   * for caching, given a filtering level.

-   * Simple filter:  up to 2 luma samples are read and 1 is written.

-   * Complex filter: up to 4 luma samples are read and 3 are written. Same for

-   *               U/V, so it's 8 samples total (because of the 2x upsampling).

-   */

-  static const List<int> FILTER_EXTRA_ROWS = const [ 0, 2, 8 ];

+  /// FILTER_EXTRA_ROWS = How many extra lines are needed on the MB boundary

+  /// for caching, given a filtering level.

+  /// Simple filter:  up to 2 luma samples are read and 1 is written.

+  /// Complex filter: up to 4 luma samples are read and 3 are written. Same for

+  ///               U/V, so it's 8 samples total (because of the 2x upsampling).

+  static const FILTER_EXTRA_ROWS = [0, 2, 8];

 

   static const int VP8_SIGNATURE = 0x2a019d;

 

   static const int MB_FEATURE_TREE_PROBS = 3;

   static const int NUM_MB_SEGMENTS = 4;

   static const int NUM_REF_LF_DELTAS = 4;

-  static const int NUM_MODE_LF_DELTAS = 4;    // I4x4, ZERO, *, SPLIT

+  static const int NUM_MODE_LF_DELTAS = 4; // I4x4, ZERO, *, SPLIT

   static const int MAX_NUM_PARTITIONS = 8;

 

-  static const int B_DC_PRED = 0;   // 4x4 modes

+  static const int B_DC_PRED = 0; // 4x4 modes

   static const int B_TM_PRED = 1;

   static const int B_VE_PRED = 2;

   static const int B_HE_PRED = 3;

@@ -1963,12 +2144,13 @@
   static const int XOR_YUV_MASK2 = (-YUV_MASK2 - 1);

 

   // These constants are 14b fixed-point version of ITU-R BT.601 constants.

-  static const int kYScale = 19077;    // 1.164 = 255 / 219

-  static const int kVToR = 26149;    // 1.596 = 255 / 112 * 0.701

-  static const int kUToG = 6419;    // 0.391 = 255 / 112 * 0.886 * 0.114 / 0.587

-  static const int kVToG = 13320;    // 0.813 = 255 / 112 * 0.701 * 0.299 / 0.587

-  static const int kUToB = 33050;    // 2.018 = 255 / 112 * 0.886

+  static const int kYScale = 19077; // 1.164 = 255 / 219

+  static const int kVToR = 26149; // 1.596 = 255 / 112 * 0.701

+  static const int kUToG = 6419; // 0.391 = 255 / 112 * 0.886 * 0.114 / 0.587

+  static const int kVToG = 13320; // 0.813 = 255 / 112 * 0.701 * 0.299 / 0.587

+  static const int kUToB = 33050; // 2.018 = 255 / 112 * 0.886

   static const int kRCst = (-kYScale * 16 - kVToR * 128 + YUV_HALF2);

-  static const int kGCst = (-kYScale * 16 + kUToG * 128 + kVToG * 128 + YUV_HALF2);

+  static const int kGCst =

+      (-kYScale * 16 + kUToG * 128 + kVToG * 128 + YUV_HALF2);

   static const int kBCst = (-kYScale * 16 - kUToB * 128 + YUV_HALF2);

 }

diff --git a/image/lib/src/formats/webp/vp8_bit_reader.dart b/image/lib/src/formats/webp/vp8_bit_reader.dart
index 70bc97b..e5e5f76 100755
--- a/image/lib/src/formats/webp/vp8_bit_reader.dart
+++ b/image/lib/src/formats/webp/vp8_bit_reader.dart
@@ -80,7 +80,7 @@
       _value = bits | (_value << BITS);

       _bits += (BITS);

     } else {

-      _loadFinalBytes();    // no need to be inlined

+      _loadFinalBytes(); // no need to be inlined

     }

   }

 

@@ -102,31 +102,264 @@
 

   // Read a bit with proba 'prob'. Speed-critical function!

   static const List<int> LOG_2_RANGE = const [

-      7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,

-      3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,

-      2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

-      2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,

-      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

-      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

-      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

-      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

-      0];

+    7,

+    6,

+    6,

+    5,

+    5,

+    5,

+    5,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    4,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    3,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    2,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    1,

+    0

+  ];

 

   static const List<int> NEW_RANGE = const [

-      127, 127, 191, 127, 159, 191, 223, 127,

-      143, 159, 175, 191, 207, 223, 239, 127,

-      135, 143, 151, 159, 167, 175, 183, 191,

-      199, 207, 215, 223, 231, 239, 247, 127,

-      131, 135, 139, 143, 147, 151, 155, 159,

-      163, 167, 171, 175, 179, 183, 187, 191,

-      195, 199, 203, 207, 211, 215, 219, 223,

-      227, 231, 235, 239, 243, 247, 251, 127,

-      129, 131, 133, 135, 137, 139, 141, 143,

-      145, 147, 149, 151, 153, 155, 157, 159,

-      161, 163, 165, 167, 169, 171, 173, 175,

-      177, 179, 181, 183, 185, 187, 189, 191,

-      193, 195, 197, 199, 201, 203, 205, 207,

-      209, 211, 213, 215, 217, 219, 221, 223,

-      225, 227, 229, 231, 233, 235, 237, 239,

-      241, 243, 245, 247, 249, 251, 253, 127];

+    127,

+    127,

+    191,

+    127,

+    159,

+    191,

+    223,

+    127,

+    143,

+    159,

+    175,

+    191,

+    207,

+    223,

+    239,

+    127,

+    135,

+    143,

+    151,

+    159,

+    167,

+    175,

+    183,

+    191,

+    199,

+    207,

+    215,

+    223,

+    231,

+    239,

+    247,

+    127,

+    131,

+    135,

+    139,

+    143,

+    147,

+    151,

+    155,

+    159,

+    163,

+    167,

+    171,

+    175,

+    179,

+    183,

+    187,

+    191,

+    195,

+    199,

+    203,

+    207,

+    211,

+    215,

+    219,

+    223,

+    227,

+    231,

+    235,

+    239,

+    243,

+    247,

+    251,

+    127,

+    129,

+    131,

+    133,

+    135,

+    137,

+    139,

+    141,

+    143,

+    145,

+    147,

+    149,

+    151,

+    153,

+    155,

+    157,

+    159,

+    161,

+    163,

+    165,

+    167,

+    169,

+    171,

+    173,

+    175,

+    177,

+    179,

+    181,

+    183,

+    185,

+    187,

+    189,

+    191,

+    193,

+    195,

+    197,

+    199,

+    201,

+    203,

+    205,

+    207,

+    209,

+    211,

+    213,

+    215,

+    217,

+    219,

+    221,

+    223,

+    225,

+    227,

+    229,

+    231,

+    233,

+    235,

+    237,

+    239,

+    241,

+    243,

+    245,

+    247,

+    249,

+    251,

+    253,

+    127

+  ];

 }

diff --git a/image/lib/src/formats/webp/vp8_filter.dart b/image/lib/src/formats/webp/vp8_filter.dart
index 2ab6f3a..c1b2e76 100755
--- a/image/lib/src/formats/webp/vp8_filter.dart
+++ b/image/lib/src/formats/webp/vp8_filter.dart
@@ -46,19 +46,19 @@
   }

 

   // on macroblock edges

-  void vFilter16(InputBuffer p, int stride, int thresh, int ithresh,

-                 int hev_thresh) {

+  void vFilter16(

+      InputBuffer p, int stride, int thresh, int ithresh, int hev_thresh) {

     _filterLoop26(p, stride, 1, 16, thresh, ithresh, hev_thresh);

   }

 

-  void hFilter16(InputBuffer p, int stride, int thresh, int ithresh,

-                 int hev_thresh) {

+  void hFilter16(

+      InputBuffer p, int stride, int thresh, int ithresh, int hev_thresh) {

     _filterLoop26(p, 1, stride, 16, thresh, ithresh, hev_thresh);

   }

 

   // on three inner edges

-  void vFilter16i(InputBuffer p, int stride, int thresh, int ithresh,

-                  int hev_thresh) {

+  void vFilter16i(

+      InputBuffer p, int stride, int thresh, int ithresh, int hev_thresh) {

     InputBuffer p2 = InputBuffer.from(p);

     for (int k = 3; k > 0; --k) {

       p2.offset += 4 * stride;

@@ -66,8 +66,8 @@
     }

   }

 

-  void hFilter16i(InputBuffer p, int stride, int thresh, int ithresh,

-                  int hev_thresh) {

+  void hFilter16i(

+      InputBuffer p, int stride, int thresh, int ithresh, int hev_thresh) {

     InputBuffer p2 = InputBuffer.from(p);

     for (int k = 3; k > 0; --k) {

       p2.offset += 4;

@@ -75,31 +75,29 @@
     }

   }

 

-  /**

-   * 8-pixels wide variant, for chroma filtering

-   */

-  void vFilter8(InputBuffer u, InputBuffer v, int stride, int thresh, int ithresh,

-                int hev_thresh) {

+  /// 8-pixels wide variant, for chroma filtering

+  void vFilter8(InputBuffer u, InputBuffer v, int stride, int thresh,

+      int ithresh, int hev_thresh) {

     _filterLoop26(u, stride, 1, 8, thresh, ithresh, hev_thresh);

     _filterLoop26(v, stride, 1, 8, thresh, ithresh, hev_thresh);

   }

 

-  void hFilter8(InputBuffer u, InputBuffer v, int stride, int thresh, int ithresh,

-                int hev_thresh) {

+  void hFilter8(InputBuffer u, InputBuffer v, int stride, int thresh,

+      int ithresh, int hev_thresh) {

     _filterLoop26(u, 1, stride, 8, thresh, ithresh, hev_thresh);

     _filterLoop26(v, 1, stride, 8, thresh, ithresh, hev_thresh);

   }

 

-  void vFilter8i(InputBuffer u, InputBuffer v, int stride, int thresh, int ithresh,

-                 int hev_thresh) {

+  void vFilter8i(InputBuffer u, InputBuffer v, int stride, int thresh,

+      int ithresh, int hev_thresh) {

     InputBuffer u2 = InputBuffer.from(u, offset: 4 * stride);

     InputBuffer v2 = InputBuffer.from(v, offset: 4 * stride);

     _filterLoop24(u2, stride, 1, 8, thresh, ithresh, hev_thresh);

     _filterLoop24(v2, stride, 1, 8, thresh, ithresh, hev_thresh);

   }

 

-  void hFilter8i(InputBuffer u, InputBuffer v, int stride, int thresh, int ithresh,

-                 int hev_thresh) {

+  void hFilter8i(InputBuffer u, InputBuffer v, int stride, int thresh,

+      int ithresh, int hev_thresh) {

     InputBuffer u2 = InputBuffer.from(u, offset: 4);

     InputBuffer v2 = InputBuffer.from(v, offset: 4);

     _filterLoop24(u2, 1, stride, 8, thresh, ithresh, hev_thresh);

@@ -107,7 +105,7 @@
   }

 

   void _filterLoop26(InputBuffer p, int hstride, int vstride, int size,

-                     int thresh, int ithresh, int hev_thresh) {

+      int thresh, int ithresh, int hev_thresh) {

     InputBuffer p2 = InputBuffer.from(p);

     while (size-- > 0) {

       if (_needsFilter2(p2, hstride, thresh, ithresh)) {

@@ -122,7 +120,7 @@
   }

 

   void _filterLoop24(InputBuffer p, int hstride, int vstride, int size,

-                     int thresh, int ithresh, int hev_thresh) {

+      int thresh, int ithresh, int hev_thresh) {

     InputBuffer p2 = InputBuffer.from(p);

     while (size-- > 0) {

       if (_needsFilter2(p2, hstride, thresh, ithresh)) {

@@ -136,9 +134,7 @@
     }

   }

 

-  /**

-   * 4 pixels in, 2 pixels out

-   */

+  /// 4 pixels in, 2 pixels out

   void _doFilter2(InputBuffer p, int step) {

     final int p1 = p[-2 * step];

     final int p0 = p[-step];

@@ -151,9 +147,7 @@
     p[0] = clip1[255 + q0 - a1];

   }

 

-  /**

-   * 4 pixels in, 4 pixels out

-   */

+  /// 4 pixels in, 4 pixels out

   void _doFilter4(InputBuffer p, int step) {

     final int p1 = p[-2 * step];

     final int p0 = p[-step];

@@ -169,9 +163,7 @@
     p[step] = clip1[255 + q1 - a3];

   }

 

-  /**

-   * 6 pixels in, 6 pixels out

-   */

+  /// 6 pixels in, 6 pixels out

   void _doFilter6(InputBuffer p, int step) {

     final int p2 = p[-3 * step];

     final int p1 = p[-2 * step];

@@ -182,7 +174,7 @@
     final int a = sclip1[1020 + 3 * (q0 - p0) + sclip1[1020 + p1 - q1]];

     final int a1 = shiftR(27 * a + 63, 7); // eq. to ((3 * a + 7) * 9) >> 7

     final int a2 = shiftR(18 * a + 63, 7); // eq. to ((2 * a + 7) * 9) >> 7

-    final int a3 = shiftR(9  * a + 63, 7); // eq. to ((1 * a + 7) * 9) >> 7

+    final int a3 = shiftR(9 * a + 63, 7); // eq. to ((1 * a + 7) * 9) >> 7

     p[-3 * step] = clip1[255 + p2 + a3];

     p[-2 * step] = clip1[255 + p1 + a2];

     p[-step] = clip1[255 + p0 + a1];

@@ -220,9 +212,12 @@
       return false;

     }

 

-    return abs0[255 + p3 - p2] <= it && abs0[255 + p2 - p1] <= it &&

-           abs0[255 + p1 - p0] <= it && abs0[255 + q3 - q2] <= it &&

-           abs0[255 + q2 - q1] <= it && abs0[255 + q1 - q0] <= it;

+    return abs0[255 + p3 - p2] <= it &&

+        abs0[255 + p2 - p1] <= it &&

+        abs0[255 + p1 - p0] <= it &&

+        abs0[255 + q3 - q2] <= it &&

+        abs0[255 + q2 - q1] <= it &&

+        abs0[255 + q1 - q0] <= it;

   }

 

   void transformOne(InputBuffer src, InputBuffer dst) {

@@ -230,15 +225,18 @@
     int si = 0;

     int di = 0;

     int tmp = 0;

-    for (int i = 0; i < 4; ++i) { // vertical pass

+    for (int i = 0; i < 4; ++i) {

+      // vertical pass

       final int a = src[si] + src[si + 8]; // [-4096, 4094]

       final int b = src[si] - src[si + 8]; // [-4095, 4095]

-      final int c = _mul(src[si + 4], kC2) - _mul(src[si + 12], kC1); // [-3783, 3783]

-      final int d = _mul(src[si + 4], kC1) + _mul(src[si + 12], kC2); // [-3785, 3781]

-      C[tmp++] = a + d;   // [-7881, 7875]

-      C[tmp++] = b + c;   // [-7878, 7878]

-      C[tmp++] = b - c;   // [-7878, 7878]

-      C[tmp++] = a - d;   // [-7877, 7879]

+      final int c =

+          _mul(src[si + 4], kC2) - _mul(src[si + 12], kC1); // [-3783, 3783]

+      final int d =

+          _mul(src[si + 4], kC1) + _mul(src[si + 12], kC2); // [-3785, 3781]

+      C[tmp++] = a + d; // [-7881, 7875]

+      C[tmp++] = b + c; // [-7878, 7878]

+      C[tmp++] = b - c; // [-7878, 7878]

+      C[tmp++] = a - d; // [-7877, 7879]

       si++;

     }

 

@@ -250,10 +248,11 @@
     // In the worst case scenario, the input to clip_8b() can be as large as

     // [-60713, 60968].

     tmp = 0;

-    for (int i = 0; i < 4; ++i) { // horizontal pass

+    for (int i = 0; i < 4; ++i) {

+      // horizontal pass

       final int dc = C[tmp] + 4;

-      final int a =  dc +  C[tmp + 8];

-      final int b =  dc -  C[tmp + 8];

+      final int a = dc + C[tmp + 8];

+      final int b = dc - C[tmp + 8];

       final int c = _mul(C[tmp + 4], kC2) - _mul(C[tmp + 12], kC1);

       final int d = _mul(C[tmp + 4], kC1) + _mul(C[tmp + 12], kC2);

       _store(dst, di, 0, 0, a + d);

@@ -265,19 +264,18 @@
     }

   }

 

-

   void transform(InputBuffer src, InputBuffer dst, bool doTwo) {

     transformOne(src, dst);

     if (doTwo) {

       transformOne(new InputBuffer.from(src, offset: 16),

-                   new InputBuffer.from(dst, offset: 4));

+          new InputBuffer.from(dst, offset: 4));

     }

   }

 

   void transformUV(InputBuffer src, InputBuffer dst) {

     transform(src, dst, true);

     transform(new InputBuffer.from(src, offset: 2 * 16),

-              new InputBuffer.from(dst, offset: 4 * VP8.BPS), true);

+        new InputBuffer.from(dst, offset: 4 * VP8.BPS), true);

   }

 

   void transformDC(InputBuffer src, InputBuffer dst) {

@@ -295,21 +293,19 @@
     }

     if (src[1 * 16] != 0) {

       transformDC(new InputBuffer.from(src, offset: 1 * 16),

-                  new InputBuffer.from(dst, offset: 4));

+          new InputBuffer.from(dst, offset: 4));

     }

     if (src[2 * 16] != 0) {

       transformDC(new InputBuffer.from(src, offset: 2 * 16),

-                  new InputBuffer.from(dst, offset: 4 * VP8.BPS));

+          new InputBuffer.from(dst, offset: 4 * VP8.BPS));

     }

     if (src[3 * 16] != 0) {

       transformDC(new InputBuffer.from(src, offset: 3 * 16),

-                  new InputBuffer.from(dst, offset: 4 * VP8.BPS + 4));

+          new InputBuffer.from(dst, offset: 4 * VP8.BPS + 4));

     }

   }

 

-  /**

-   * Simplified transform when only in[0], in[1] and in[4] are non-zero

-   */

+  /// Simplified transform when only in[0], in[1] and in[4] are non-zero

   void transformAC3(InputBuffer src, InputBuffer dst) {

     final int a = src[0] + 4;

     final int c4 = _mul(src[4], kC2);

@@ -322,16 +318,17 @@
     _store2(dst, 3, a - d4, d1, c1);

   }

 

-  static int AVG3(a, b, c) => shiftR(((a) + 2 * (b) + (c) + 2), 2);

-  static int AVG2(a, b) => shiftR(((a) + (b) + 1), 1);

+  static int AVG3(int a, int b, int c) => shiftR(((a) + 2 * (b) + (c) + 2), 2);

+  static int AVG2(int a, int b) => shiftR(((a) + (b) + 1), 1);

 

   static void VE4(InputBuffer dst) {

     int top = -VP8.BPS; // dst +

     final List<int> vals = [

-       AVG3(dst[top - 1], dst[top],     dst[top + 1]),

-       AVG3(dst[top],     dst[top + 1], dst[top + 2]),

-       AVG3(dst[top + 1], dst[top + 2], dst[top + 3]),

-       AVG3(dst[top + 2], dst[top + 3], dst[top + 4])];

+      AVG3(dst[top - 1], dst[top], dst[top + 1]),

+      AVG3(dst[top], dst[top + 1], dst[top + 2]),

+      AVG3(dst[top + 1], dst[top + 2], dst[top + 3]),

+      AVG3(dst[top + 2], dst[top + 3], dst[top + 4])

+    ];

 

     for (int i = 0; i < 4; ++i) {

       dst.memcpy(i * VP8.BPS, 4, vals);

@@ -356,7 +353,8 @@
     d2.toUint32List()[0] = 0x01010101 * AVG3(D, E, E);

   }

 

-  static void DC4(InputBuffer dst) {   // DC

+  static void DC4(InputBuffer dst) {

+    // DC

     int dc = 4;

     for (int i = 0; i < 4; ++i) {

       dc += dst[i - VP8.BPS] + dst[-1 + i * VP8.BPS];

@@ -394,11 +392,9 @@
     trueMotion(dst, 16);

   }

 

-  static int DST(x, y) => x + y * VP8.BPS;

+  static int DST(int x, int y) => x + y * VP8.BPS;

 

-  /**

-   * Down-right

-   */

+  /// Down-right

   static void RD4(InputBuffer dst) {

     final int I = dst[-1 + 0 * VP8.BPS];

     final int J = dst[-1 + 1 * VP8.BPS];

@@ -413,15 +409,14 @@
     dst[DST(0, 3)] = AVG3(J, K, L);

     dst[DST(0, 2)] = dst[DST(1, 3)] = AVG3(I, J, K);

     dst[DST(0, 1)] = dst[DST(1, 2)] = dst[DST(2, 3)] = AVG3(X, I, J);

-    dst[DST(0, 0)] = dst[DST(1, 1)] = dst[DST(2, 2)] = dst[DST(3, 3)] = AVG3(A, X, I);

+    dst[DST(0, 0)] =

+        dst[DST(1, 1)] = dst[DST(2, 2)] = dst[DST(3, 3)] = AVG3(A, X, I);

     dst[DST(1, 0)] = dst[DST(2, 1)] = dst[DST(3, 2)] = AVG3(B, A, X);

     dst[DST(2, 0)] = dst[DST(3, 1)] = AVG3(C, B, A);

     dst[DST(3, 0)] = AVG3(D, C, B);

   }

 

-  /**

-   * Down-Left

-   */

+  /// Down-Left

   static void LD4(InputBuffer dst) {

     final int A = dst[0 - VP8.BPS];

     final int B = dst[1 - VP8.BPS];

@@ -434,15 +429,14 @@
     dst[DST(0, 0)] = AVG3(A, B, C);

     dst[DST(1, 0)] = dst[DST(0, 1)] = AVG3(B, C, D);

     dst[DST(2, 0)] = dst[DST(1, 1)] = dst[DST(0, 2)] = AVG3(C, D, E);

-    dst[DST(3, 0)] = dst[DST(2, 1)] = dst[DST(1, 2)] = dst[DST(0, 3)] = AVG3(D, E, F);

+    dst[DST(3, 0)] =

+        dst[DST(2, 1)] = dst[DST(1, 2)] = dst[DST(0, 3)] = AVG3(D, E, F);

     dst[DST(3, 1)] = dst[DST(2, 2)] = dst[DST(1, 3)] = AVG3(E, F, G);

     dst[DST(3, 2)] = dst[DST(2, 3)] = AVG3(F, G, H);

     dst[DST(3, 3)] = AVG3(G, H, H);

   }

 

-  /**

-   * Vertical-Right

-   */

+  /// Vertical-Right

   static void VR4(InputBuffer dst) {

     final int I = dst[-1 + 0 * VP8.BPS];

     final int J = dst[-1 + 1 * VP8.BPS];

@@ -465,9 +459,7 @@
     dst[DST(3, 1)] = AVG3(B, C, D);

   }

 

-  /**

-   * Vertical-Left

-   */

+  /// Vertical-Left

   static void VL4(InputBuffer dst) {

     final int A = dst[0 - VP8.BPS];

     final int B = dst[1 - VP8.BPS];

@@ -490,9 +482,7 @@
     dst[DST(3, 3)] = AVG3(F, G, H);

   }

 

-  /**

-   * Horizontal-Up

-   */

+  /// Horizontal-Up

   static void HU4(InputBuffer dst) {

     final int I = dst[-1 + 0 * VP8.BPS];

     final int J = dst[-1 + 1 * VP8.BPS];

@@ -504,13 +494,11 @@
     dst[DST(1, 0)] = AVG3(I, J, K);

     dst[DST(3, 0)] = dst[DST(1, 1)] = AVG3(J, K, L);

     dst[DST(3, 1)] = dst[DST(1, 2)] = AVG3(K, L, L);

-    dst[DST(3, 2)] = dst[DST(2, 2)] = dst[DST(0, 3)] = dst[DST(1, 3)] =

-                     dst[DST(2, 3)] = dst[DST(3, 3)] = L;

+    dst[DST(3, 2)] = dst[DST(2, 2)] =

+        dst[DST(0, 3)] = dst[DST(1, 3)] = dst[DST(2, 3)] = dst[DST(3, 3)] = L;

   }

 

-  /**

-   * Horizontal-Down

-   */

+  /// Horizontal-Down

   static void HD4(InputBuffer dst) {

     final int I = dst[-1 + 0 * VP8.BPS];

     final int J = dst[-1 + 1 * VP8.BPS];

@@ -534,13 +522,15 @@
     dst[DST(1, 3)] = AVG3(L, K, J);

   }

 

-  static void VE16(InputBuffer dst) { // vertical

+  static void VE16(InputBuffer dst) {

+    // vertical

     for (int j = 0; j < 16; ++j) {

       dst.memcpy(j * VP8.BPS, 16, dst, -VP8.BPS);

     }

   }

 

-  static void HE16(InputBuffer dst) { // horizontal

+  static void HE16(InputBuffer dst) {

+    // horizontal

     int di = 0;

     for (int j = 16; j > 0; --j) {

       dst.memset(di, 16, dst[di - 1]);

@@ -554,7 +544,8 @@
     }

   }

 

-  static void DC16(InputBuffer dst) { // DC

+  static void DC16(InputBuffer dst) {

+    // DC

     int DC = 16;

     for (int j = 0; j < 16; ++j) {

       DC += dst[-1 + j * VP8.BPS] + dst[j - VP8.BPS];

@@ -562,9 +553,7 @@
     Put16(DC >> 5, dst);

   }

 

-  /**

-   * DC with top samples not available

-   */

+  /// DC with top samples not available

   static void DC16NoTop(InputBuffer dst) {

     int DC = 8;

     for (int j = 0; j < 16; ++j) {

@@ -573,9 +562,7 @@
     Put16(DC >> 4, dst);

   }

 

-  /**

-   * DC with left samples not available

-   */

+  /// DC with left samples not available

   static void DC16NoLeft(InputBuffer dst) {

     int DC = 8;

     for (int i = 0; i < 16; ++i) {

@@ -584,9 +571,7 @@
     Put16(DC >> 4, dst);

   }

 

-  /**

-   * DC with no top and left samples

-   */

+  /// DC with no top and left samples

   static void DC16NoTopLeft(InputBuffer dst) {

     Put16(0x80, dst);

   }

@@ -605,9 +590,7 @@
     }

   }

 

-  /**

-   * helper for chroma-DC predictions

-   */

+  /// helper for chroma-DC predictions

   static void Put8x8uv(int value, InputBuffer dst) {

     for (int j = 0; j < 8; ++j) {

       dst.memset(j * VP8.BPS, 8, value);

@@ -622,9 +605,7 @@
     Put8x8uv(dc0 >> 4, dst);

   }

 

-  /**

-   * DC with no left samples

-   */

+  /// DC with no left samples

   static void DC8uvNoLeft(InputBuffer dst) {

     int dc0 = 4;

     for (int i = 0; i < 8; ++i) {

@@ -633,9 +614,7 @@
     Put8x8uv(dc0 >> 3, dst);

   }

 

-  /**

-   * DC with no top samples

-   */

+  /// DC with no top samples

   static void DC8uvNoTop(InputBuffer dst) {

     int dc0 = 4;

     for (int i = 0; i < 8; ++i) {

@@ -644,22 +623,43 @@
     Put8x8uv(dc0 >> 3, dst);

   }

 

-  /**

-   * DC with nothing

-   */

+  /// DC with nothing

   static void DC8uvNoTopLeft(InputBuffer dst) {

     Put8x8uv(0x80, dst);

   }

 

-  static const List PredLuma4 = const [

-      DC4, TM4, VE4, HE4, RD4, VR4, LD4, VL4, HD4, HU4 ];

+  static const PredLuma4 = [

+    DC4,

+    TM4,

+    VE4,

+    HE4,

+    RD4,

+    VR4,

+    LD4,

+    VL4,

+    HD4,

+    HU4

+  ];

 

-  static const List PredLuma16 = const [

-      DC16, TM16, VE16, HE16, DC16NoTop, DC16NoLeft, DC16NoTopLeft ];

+  static const PredLuma16 = [

+    DC16,

+    TM16,

+    VE16,

+    HE16,

+    DC16NoTop,

+    DC16NoLeft,

+    DC16NoTopLeft

+  ];

 

-  static const List PredChroma8 = const [

-      DC8uv, TM8uv, VE8uv, HE8uv, DC8uvNoTop, DC8uvNoLeft, DC8uvNoTopLeft ];

-

+  static const PredChroma8 = [

+    DC8uv,

+    TM8uv,

+    VE8uv,

+    HE8uv,

+    DC8uvNoTop,

+    DC8uvNoLeft,

+    DC8uvNoTopLeft

+  ];

 

   static const int kC1 = 20091 + (1 << 16);

   static const int kC2 = 35468;

@@ -682,12 +682,16 @@
 

   /// abs(i)

   static Uint8List abs0 = Uint8List(255 + 255 + 1);

+

   /// abs(i)>>1

   static Uint8List abs1 = Uint8List(255 + 255 + 1);

+

   /// clips [-1020, 1020] to [-128, 127]

   static Int8List sclip1 = Int8List(1020 + 1020 + 1);

+

   /// clips [-112, 112] to [-16, 15]

   static Int8List sclip2 = Int8List(112 + 112 + 1);

+

   /// clips [-255,510] to [0,255]

   static Uint8List clip1 = Uint8List(255 + 510 + 1);

 

diff --git a/image/lib/src/formats/webp/vp8_types.dart b/image/lib/src/formats/webp/vp8_types.dart
index de08bd1..06c53ae 100755
--- a/image/lib/src/formats/webp/vp8_types.dart
+++ b/image/lib/src/formats/webp/vp8_types.dart
@@ -18,24 +18,24 @@
   int clampType; // uint8

 }

 

-/**

- * Segment features

- */

+/// Segment features

 class VP8SegmentHeader {

   bool useSegment = false;

+

   /// whether to update the segment map or not

   bool updateMap = false;

+

   /// absolute or delta values for quantizer and filter

   bool absoluteDelta = true;

+

   /// quantization changes

   Int8List quantizer = Int8List(VP8.NUM_MB_SEGMENTS);

+

   /// filter strength for segments

   Int8List filterStrength = Int8List(VP8.NUM_MB_SEGMENTS);

 }

 

-/**

- * All the probas associated to one band

- */

+/// All the probas associated to one band

 class VP8BandProbas {

   List<Uint8List> probas = List<Uint8List>(VP8.NUM_CTX);

   VP8BandProbas() {

@@ -45,11 +45,10 @@
   }

 }

 

-/**

- * Struct collecting all frame-persistent probabilities.

- */

+/// Struct collecting all frame-persistent probabilities.

 class VP8Proba {

   Uint8List segments = Uint8List(VP8.MB_FEATURE_TREE_PROBS);

+

   /// Type: 0:Intra16-AC  1:Intra16-DC   2:Chroma   3:Intra4

   List<List<VP8BandProbas>> bands = List(VP8.NUM_TYPES);

 

@@ -65,9 +64,7 @@
   }

 }

 

-/**

- * Filter parameters

- */

+/// Filter parameters

 class VP8FilterHeader {

   bool simple; // 0=complex, 1=simple

   int level; // [0..63]

@@ -80,9 +77,7 @@
 //------------------------------------------------------------------------------

 // Informations about the macroblocks.

 

-/**

- * filter specs

- */

+/// filter specs

 class VP8FInfo {

   int fLimit = 0; // uint8_t, filter limit in [3..189], or 0 if no filtering

   int fInnerLevel = 0; // uint8_t, inner limit in [1..63]

@@ -90,17 +85,14 @@
   int hevThresh = 0; // uint8_t, high edge variance threshold in [0..2]

 }

 

-/**

- * Top/Left Contexts used for syntax-parsing

- */

-class VP8MB{

-  int nz = 0; // uint8_t, non-zero AC/DC coeffs (4bit for luma + 4bit for chroma)

+/// Top/Left Contexts used for syntax-parsing

+class VP8MB {

+  int nz =

+      0; // uint8_t, non-zero AC/DC coeffs (4bit for luma + 4bit for chroma)

   int nzDc = 0; // uint8_t, non-zero DC coeff (1bit)

 }

 

-/**

- * Dequantization matrices

- */

+/// Dequantization matrices

 class VP8QuantMatrix {

   Int32List y1Mat = Int32List(2);

   Int32List y2Mat = Int32List(2);

@@ -110,15 +102,14 @@
   int dither; // dithering amplitude (0 = off, max=255)

 }

 

-/**

- * Data needed to reconstruct a macroblock

- */

+/// Data needed to reconstruct a macroblock

 class VP8MBData {

   /// 384 coeffs = (16+4+4) * 4*4

   Int16List coeffs = Int16List(384);

   bool isIntra4x4; // true if intra4x4

   /// one 16x16 mode (#0) or sixteen 4x4 modes

   Uint8List imodes = Uint8List(16);

+

   /// chroma prediction mode

   int uvmode;

   // bit-wise info about the content of each sub-4x4 blocks (in decoding order).

@@ -130,13 +121,12 @@
   // This allows to call specialized transform functions.

   int nonZeroY;

   int nonZeroUV;

+

   /// uint8_t, local dithering strength (deduced from non_zero_*)

   int dither;

 }

 

-/**

- * Saved top samples, per macroblock. Fits into a cache-line.

- */

+/// Saved top samples, per macroblock. Fits into a cache-line.

 class VP8TopSamples {

   Uint8List y = Uint8List(16);

   Uint8List u = Uint8List(8);

@@ -149,23 +139,21 @@
   Uint32List _table = Uint32List(RANDOM_TABLE_SIZE);

   int _amplitude;

 

-  /**

-   * Initializes random generator with an amplitude 'dithering' in range [0..1].

-   */

+  /// Initializes random generator with an amplitude 'dithering' in range [0..1].

   VP8Random(double dithering) {

     _table.setRange(0, RANDOM_TABLE_SIZE, _RANDOM_TABLE);

     _index1 = 0;

     _index2 = 31;

-    _amplitude = (dithering < 0.0) ? 0 :

-                 (dithering > 1.0) ? (1 << RANDOM_DITHER_FIX) :

-                 ((1 << RANDOM_DITHER_FIX) * dithering).toInt();

+    _amplitude = (dithering < 0.0)

+        ? 0

+        : (dithering > 1.0)

+            ? (1 << RANDOM_DITHER_FIX)

+            : ((1 << RANDOM_DITHER_FIX) * dithering).toInt();

   }

 

-  /**

-   * Returns a centered pseudo-random number with 'num_bits' amplitude.

-   * (uses D.Knuth's Difference-based random generator).

-   * 'amp' is in RANDOM_DITHER_FIX fixed-point precision.

-   */

+  /// Returns a centered pseudo-random number with 'num_bits' amplitude.

+  /// (uses D.Knuth's Difference-based random generator).

+  /// 'amp' is in RANDOM_DITHER_FIX fixed-point precision.

   int randomBits2(int numBits, int amp) {

     int diff = _table[_index1] - _table[_index2];

     if (diff < 0) {

@@ -201,14 +189,60 @@
 

   // 31b-range values

   static const List<int> _RANDOM_TABLE = const [

-    0x0de15230, 0x03b31886, 0x775faccb, 0x1c88626a, 0x68385c55, 0x14b3b828,

-    0x4a85fef8, 0x49ddb84b, 0x64fcf397, 0x5c550289, 0x4a290000, 0x0d7ec1da,

-    0x5940b7ab, 0x5492577d, 0x4e19ca72, 0x38d38c69, 0x0c01ee65, 0x32a1755f,

-    0x5437f652, 0x5abb2c32, 0x0faa57b1, 0x73f533e7, 0x685feeda, 0x7563cce2,

-    0x6e990e83, 0x4730a7ed, 0x4fc0d9c6, 0x496b153c, 0x4f1403fa, 0x541afb0c,

-    0x73990b32, 0x26d7cb1c, 0x6fcc3706, 0x2cbb77d8, 0x75762f2a, 0x6425ccdd,

-    0x24b35461, 0x0a7d8715, 0x220414a8, 0x141ebf67, 0x56b41583, 0x73e502e3,

-    0x44cab16f, 0x28264d42, 0x73baaefb, 0x0a50ebed, 0x1d6ab6fb, 0x0d3ad40b,

-    0x35db3b68, 0x2b081e83, 0x77ce6b95, 0x5181e5f0, 0x78853bbc, 0x009f9494,

-    0x27e5ed3c];

+    0x0de15230,

+    0x03b31886,

+    0x775faccb,

+    0x1c88626a,

+    0x68385c55,

+    0x14b3b828,

+    0x4a85fef8,

+    0x49ddb84b,

+    0x64fcf397,

+    0x5c550289,

+    0x4a290000,

+    0x0d7ec1da,

+    0x5940b7ab,

+    0x5492577d,

+    0x4e19ca72,

+    0x38d38c69,

+    0x0c01ee65,

+    0x32a1755f,

+    0x5437f652,

+    0x5abb2c32,

+    0x0faa57b1,

+    0x73f533e7,

+    0x685feeda,

+    0x7563cce2,

+    0x6e990e83,

+    0x4730a7ed,

+    0x4fc0d9c6,

+    0x496b153c,

+    0x4f1403fa,

+    0x541afb0c,

+    0x73990b32,

+    0x26d7cb1c,

+    0x6fcc3706,

+    0x2cbb77d8,

+    0x75762f2a,

+    0x6425ccdd,

+    0x24b35461,

+    0x0a7d8715,

+    0x220414a8,

+    0x141ebf67,

+    0x56b41583,

+    0x73e502e3,

+    0x44cab16f,

+    0x28264d42,

+    0x73baaefb,

+    0x0a50ebed,

+    0x1d6ab6fb,

+    0x0d3ad40b,

+    0x35db3b68,

+    0x2b081e83,

+    0x77ce6b95,

+    0x5181e5f0,

+    0x78853bbc,

+    0x009f9494,

+    0x27e5ed3c

+  ];

 }

diff --git a/image/lib/src/formats/webp/vp8l.dart b/image/lib/src/formats/webp/vp8l.dart
index 84c6736..87b5ac2 100755
--- a/image/lib/src/formats/webp/vp8l.dart
+++ b/image/lib/src/formats/webp/vp8l.dart
@@ -11,20 +11,17 @@
 import 'webp_huffman.dart';

 import 'webp_info.dart';

 

-/**

- * WebP lossless format.

- */

+/// WebP lossless format.

 class VP8L {

   InputBuffer input;

   VP8LBitReader br;

   WebPInfo webp;

   Image image;

 

-  VP8L(InputBuffer input, WebPInfo webp) :

-    this.input = input,

-    this.webp = webp,

-    this.br = VP8LBitReader(input) {

-  }

+  VP8L(InputBuffer input, WebPInfo webp)

+      : this.input = input,

+        this.webp = webp,

+        this.br = VP8LBitReader(input);

 

   bool decodeHeader() {

     int signature = br.readBits(8);

@@ -58,8 +55,8 @@
 

     image = Image(webp.width, webp.height);

 

-    if (!_decodeImageData(_pixels, webp.width, webp.height,

-                          webp.height, _processRows)) {

+    if (!_decodeImageData(

+        _pixels, webp.width, webp.height, webp.height, _processRows)) {

       return null;

     }

 

@@ -116,14 +113,15 @@
       case VP8LTransform.CROSS_COLOR_TRANSFORM:

         transform.bits = br.readBits(3) + 2;

         transform.data = _decodeImageStream(

-                _subSampleSize(transform.xsize, transform.bits),

-                _subSampleSize(transform.ysize, transform.bits), false);

+            _subSampleSize(transform.xsize, transform.bits),

+            _subSampleSize(transform.ysize, transform.bits),

+            false);

         break;

       case VP8LTransform.COLOR_INDEXING_TRANSFORM:

         final int numColors = br.readBits(8) + 1;

-        final int bits = (numColors > 16) ? 0 :

-                         (numColors > 4) ? 1 :

-                         (numColors > 2) ? 2 : 3;

+        final int bits = (numColors > 16)

+            ? 0

+            : (numColors > 4) ? 1 : (numColors > 2) ? 2 : 3;

         transformSize[0] = _subSampleSize(transform.xsize, bits);

         transform.bits = bits;

         transform.data = _decodeImageStream(numColors, 1, false);

@@ -165,8 +163,8 @@
     }

 

     // Read the Huffman codes (may recurse).

-    if (!_readHuffmanCodes(transformXsize, transformYsize,

-                           colorCacheBits, isLevel0)) {

+    if (!_readHuffmanCodes(

+        transformXsize, transformYsize, colorCacheBits, isLevel0)) {

       throw new ImageException('Invalid Huffman Codes');

     }

 

@@ -194,8 +192,8 @@
     Uint32List data = Uint32List(totalSize);

 

     // Use the Huffman trees to decode the LZ77 encoded data.

-    if (!_decodeImageData(data, transformXsize, transformYsize,

-                          transformYsize, null)) {

+    if (!_decodeImageData(

+        data, transformXsize, transformYsize, transformYsize, null)) {

       throw new ImageException('Failed to decode image data.');

     }

 

@@ -205,8 +203,8 @@
     return data;

   }

 

-  bool _decodeImageData(data, int width, int height,

-                        int lastRow, processFunc) {

+  bool _decodeImageData(dynamic data, int width, int height, int lastRow,

+                        dynamic processFunc) {

     int row = _lastPixel ~/ width;

     int col = _lastPixel % width;

 

@@ -234,7 +232,8 @@
       br.fillBitWindow();

       int code = htreeGroup.htrees[_GREEN].readSymbol(br);

 

-      if (code < NUM_LITERAL_CODES) {  // Literal

+      if (code < NUM_LITERAL_CODES) {

+        // Literal

         int red = htreeGroup.htrees[_RED].readSymbol(br);

         int green = code;

         br.fillBitWindow();

@@ -256,12 +255,13 @@
 

           if (colorCache != null) {

             while (lastCached < src) {

-              colorCache.insert(data[lastCached]);

+              colorCache.insert(data[lastCached] as int);

               lastCached++;

             }

           }

         }

-      } else if (code < lenCodeLimit) {  // Backward reference

+      } else if (code < lenCodeLimit) {

+        // Backward reference

         final int lengthSym = code - NUM_LITERAL_CODES;

         final int length = _getCopyLength(lengthSym);

         final int distSymbol = htreeGroup.htrees[_DIST].readSymbol(br);

@@ -292,16 +292,17 @@
           }

           if (colorCache != null) {

             while (lastCached < src) {

-              colorCache.insert(data[lastCached]);

+              colorCache.insert(data[lastCached] as int);

               lastCached++;

             }

           }

         }

-      } else if (code < colorCacheLimit) {  // Color cache

+      } else if (code < colorCacheLimit) {

+        // Color cache

         final int key = code - lenCodeLimit;

 

         while (lastCached < src) {

-          colorCache.insert(data[lastCached]);

+          colorCache.insert(data[lastCached] as int);

           lastCached++;

         }

 

@@ -319,12 +320,13 @@
 

           if (colorCache != null) {

             while (lastCached < src) {

-              colorCache.insert(data[lastCached]);

+              colorCache.insert(data[lastCached] as int);

               lastCached++;

             }

           }

         }

-      } else {  // Not reached

+      } else {

+        // Not reached

         return false;

       }

     }

@@ -343,10 +345,8 @@
     return true;

   }

 

-  /**

-   * Row-processing for the special case when alpha data contains only one

-   * transform (color indexing), and trivial non-green literals.

-   */

+  /// Row-processing for the special case when alpha data contains only one

+  /// transform (color indexing), and trivial non-green literals.

   bool _is8bOptimizable() {

     if (_colorCacheSize > 0) {

       return false;

@@ -368,19 +368,17 @@
     return true;

   }

 

-  /**

-   * Special row-processing that only stores the alpha data.

-   */

+  /// Special row-processing that only stores the alpha data.

   void _extractAlphaRows(int row) {

     final int numRows = row - _lastRow;

     if (numRows <= 0) {

-      return;  // Nothing to be done.

+      return; // Nothing to be done.

     }

 

     _applyInverseTransforms(numRows, webp.width * _lastRow);

 

     // Extract alpha (which is stored in the green plane).

-    final int width = webp.width;      // the final width (!= dec->width_)

+    final int width = webp.width; // the final width (!= dec->width_)

     final int cachePixs = width * numRows;

 

     final int di = width * _lastRow;

@@ -413,7 +411,8 @@
       br.fillBitWindow();

 

       int code = htreeGroup.htrees[_GREEN].readSymbol(br);

-      if (code < NUM_LITERAL_CODES) {  // Literal

+      if (code < NUM_LITERAL_CODES) {

+        // Literal

         _pixels8[pos] = code;

         ++pos;

         ++col;

@@ -424,7 +423,8 @@
             _extractPalettedAlphaRows(row);

           }

         }

-      } else if (code < lenCodeLimit) {  // Backward reference

+      } else if (code < lenCodeLimit) {

+        // Backward reference

         final int lengthSym = code - NUM_LITERAL_CODES;

         final int length = _getCopyLength(lengthSym);

         final int distSymbol = htreeGroup.htrees[_DIST].readSymbol(br);

@@ -457,7 +457,8 @@
         if (pos < last && (col & mask) != 0) {

           htreeGroup = _getHtreeGroupForPos(col, row);

         }

-      } else {  // Not reached

+      } else {

+        // Not reached

         return false;

       }

     }

@@ -479,9 +480,7 @@
     _lastRow = row;

   }

 

-  /**

-   * Special method for paletted alpha data.

-   */

+  /// Special method for paletted alpha data.

   void _applyInverseTransformsAlpha(int numRows, InputBuffer rows) {

     final int startRow = _lastRow;

     final int endRow = startRow + numRows;

@@ -491,17 +490,15 @@
     transform.colorIndexInverseTransformAlpha(startRow, endRow, rows, rowsOut);

   }

 

-  /**

-   * Processes (transforms, scales & color-converts) the rows decoded after the

-   * last call.

-   */

+  /// Processes (transforms, scales & color-converts) the rows decoded after the

+  /// last call.

   //static int __count = 0;

   void _processRows(int row) {

     int rows = webp.width * _lastRow; // offset into _pixels

     final int numRows = row - _lastRow;

 

     if (numRows <= 0) {

-      return;  // Nothing to be done.

+      return; // Nothing to be done.

     }

 

     _applyInverseTransforms(numRows, rows);

@@ -537,14 +534,14 @@
 

     while (n-- > 0) {

       VP8LTransform transform = _transforms[n];

-      transform.inverseTransform(startRow, endRow, _pixels, rowsIn,

-                                 _pixels, rowsOut);

+      transform.inverseTransform(

+          startRow, endRow, _pixels, rowsIn, _pixels, rowsOut);

       rowsIn = rowsOut;

     }

   }

 

-  bool _readHuffmanCodes(int xsize, int ysize, int colorCacheBits,

-                         bool allowRecursion) {

+  bool _readHuffmanCodes(

+      int xsize, int ysize, int colorCacheBits, bool allowRecursion) {

     Uint32List huffmanImage;

     int numHtreeGroups = 1;

 

@@ -620,12 +617,11 @@
         codeLengths[1] = numSymbols - 1;

       }

 

-      ok = tree.buildExplicit(codeLengths, codes, symbols,

-                              alphabetSize, numSymbols);

+      ok = tree.buildExplicit(

+          codeLengths, codes, symbols, alphabetSize, numSymbols);

     } else {

       // Decode Huffman-coded code lengths.

-      Int32List codeLengthCodeLengths =

-          new Int32List(_NUM_CODE_LENGTH_CODES);

+      Int32List codeLengthCodeLengths = new Int32List(_NUM_CODE_LENGTH_CODES);

 

       final int numCodes = br.readBits(4) + 4;

       if (numCodes > _NUM_CODE_LENGTH_CODES) {

@@ -638,8 +634,8 @@
         codeLengthCodeLengths[_CODE_LENGTH_CODE_ORDER[i]] = br.readBits(3);

       }

 

-      ok = _readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSize,

-                                   codeLengths);

+      ok = _readHuffmanCodeLengths(

+          codeLengthCodeLengths, alphabetSize, codeLengths);

 

       if (ok) {

         ok = tree.buildImplicit(codeLengths, alphabetSize);

@@ -649,8 +645,8 @@
     return ok;

   }

 

-  bool _readHuffmanCodeLengths(List<int> codeLengthCodeLengths,

-                               int numSymbols, List<int> codeLengths) {

+  bool _readHuffmanCodeLengths(

+      List<int> codeLengthCodeLengths, int numSymbols, List<int> codeLengths) {

     //bool ok = false;

     int symbol;

     int max_symbol;

@@ -661,7 +657,8 @@
       return false;

     }

 

-    if (br.readBits(1) != 0) {    // use length

+    if (br.readBits(1) != 0) {

+      // use length

       final int length_nbits = 2 + 2 * br.readBits(3);

       max_symbol = 2 + br.readBits(length_nbits);

       if (max_symbol > numSymbols) {

@@ -735,17 +732,13 @@
     }

   }

 

-  /**

-   * Computes sampled size of 'size' when sampling using 'sampling bits'.

-   */

+  /// Computes sampled size of 'size' when sampling using 'sampling bits'.

   static int _subSampleSize(int size, int samplingBits) {

     return (size + (1 << samplingBits) - 1) >> samplingBits;

   }

 

-  /**

-   * For security reason, we need to remap the color map to span

-   * the total possible bundled values, and not just the num_colors.

-   */

+  /// For security reason, we need to remap the color map to span

+  /// the total possible bundled values, and not just the num_colors.

   bool _expandColorMap(int numColors, VP8LTransform transform) {

     final int finalNumColors = 1 << (8 >> transform.bits);

     Uint32List newColorMap = Uint32List(finalNumColors);

@@ -779,8 +772,8 @@
   }

 

   HTreeGroup _getHtreeGroupForPos(int x, int y) {

-    int metaIndex = _getMetaIndex(_huffmanImage, _huffmanXsize,

-                                  _huffmanSubsampleBits, x, y);

+    int metaIndex = _getMetaIndex(

+        _huffmanImage, _huffmanXsize, _huffmanSubsampleBits, x, y);

     if (_htreeGroups[metaIndex] == null) {

       _htreeGroups[metaIndex] = HTreeGroup();

     }

@@ -798,32 +791,163 @@
   static const int _NUM_CODE_LENGTH_CODES = 19;

 

   static const List<int> _CODE_LENGTH_CODE_ORDER = const [

-      17, 18, 0, 1, 2, 3, 4, 5, 16, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];

+    17,

+    18,

+    0,

+    1,

+    2,

+    3,

+    4,

+    5,

+    16,

+    6,

+    7,

+    8,

+    9,

+    10,

+    11,

+    12,

+    13,

+    14,

+    15

+  ];

 

   static const int _CODE_TO_PLANE_CODES = 120;

   static const List<int> _CODE_TO_PLANE = const [

-      0x18, 0x07, 0x17, 0x19, 0x28, 0x06, 0x27, 0x29, 0x16, 0x1a,

-      0x26, 0x2a, 0x38, 0x05, 0x37, 0x39, 0x15, 0x1b, 0x36, 0x3a,

-      0x25, 0x2b, 0x48, 0x04, 0x47, 0x49, 0x14, 0x1c, 0x35, 0x3b,

-      0x46, 0x4a, 0x24, 0x2c, 0x58, 0x45, 0x4b, 0x34, 0x3c, 0x03,

-      0x57, 0x59, 0x13, 0x1d, 0x56, 0x5a, 0x23, 0x2d, 0x44, 0x4c,

-      0x55, 0x5b, 0x33, 0x3d, 0x68, 0x02, 0x67, 0x69, 0x12, 0x1e,

-      0x66, 0x6a, 0x22, 0x2e, 0x54, 0x5c, 0x43, 0x4d, 0x65, 0x6b,

-      0x32, 0x3e, 0x78, 0x01, 0x77, 0x79, 0x53, 0x5d, 0x11, 0x1f,

-      0x64, 0x6c, 0x42, 0x4e, 0x76, 0x7a, 0x21, 0x2f, 0x75, 0x7b,

-      0x31, 0x3f, 0x63, 0x6d, 0x52, 0x5e, 0x00, 0x74, 0x7c, 0x41,

-      0x4f, 0x10, 0x20, 0x62, 0x6e, 0x30, 0x73, 0x7d, 0x51, 0x5f,

-      0x40, 0x72, 0x7e, 0x61, 0x6f, 0x50, 0x71, 0x7f, 0x60, 0x70];

+    0x18,

+    0x07,

+    0x17,

+    0x19,

+    0x28,

+    0x06,

+    0x27,

+    0x29,

+    0x16,

+    0x1a,

+    0x26,

+    0x2a,

+    0x38,

+    0x05,

+    0x37,

+    0x39,

+    0x15,

+    0x1b,

+    0x36,

+    0x3a,

+    0x25,

+    0x2b,

+    0x48,

+    0x04,

+    0x47,

+    0x49,

+    0x14,

+    0x1c,

+    0x35,

+    0x3b,

+    0x46,

+    0x4a,

+    0x24,

+    0x2c,

+    0x58,

+    0x45,

+    0x4b,

+    0x34,

+    0x3c,

+    0x03,

+    0x57,

+    0x59,

+    0x13,

+    0x1d,

+    0x56,

+    0x5a,

+    0x23,

+    0x2d,

+    0x44,

+    0x4c,

+    0x55,

+    0x5b,

+    0x33,

+    0x3d,

+    0x68,

+    0x02,

+    0x67,

+    0x69,

+    0x12,

+    0x1e,

+    0x66,

+    0x6a,

+    0x22,

+    0x2e,

+    0x54,

+    0x5c,

+    0x43,

+    0x4d,

+    0x65,

+    0x6b,

+    0x32,

+    0x3e,

+    0x78,

+    0x01,

+    0x77,

+    0x79,

+    0x53,

+    0x5d,

+    0x11,

+    0x1f,

+    0x64,

+    0x6c,

+    0x42,

+    0x4e,

+    0x76,

+    0x7a,

+    0x21,

+    0x2f,

+    0x75,

+    0x7b,

+    0x31,

+    0x3f,

+    0x63,

+    0x6d,

+    0x52,

+    0x5e,

+    0x00,

+    0x74,

+    0x7c,

+    0x41,

+    0x4f,

+    0x10,

+    0x20,

+    0x62,

+    0x6e,

+    0x30,

+    0x73,

+    0x7d,

+    0x51,

+    0x5f,

+    0x40,

+    0x72,

+    0x7e,

+    0x61,

+    0x6f,

+    0x50,

+    0x71,

+    0x7f,

+    0x60,

+    0x70

+  ];

 

   static const int _CODE_LENGTH_LITERALS = 16;

   static const int _CODE_LENGTH_REPEAT_CODE = 16;

   static const List<int> _CODE_LENGTH_EXTRA_BITS = const [2, 3, 7];

-  static const List<int> _CODE_LENGTH_REPEAT_OFFSETS = const [ 3, 3, 11 ];

+  static const List<int> _CODE_LENGTH_REPEAT_OFFSETS = const [3, 3, 11];

 

   static const List<int> ALPHABET_SIZE = const [

     NUM_LITERAL_CODES + NUM_LENGTH_CODES,

-    NUM_LITERAL_CODES, NUM_LITERAL_CODES,

-    NUM_LITERAL_CODES, NUM_DISTANCE_CODES];

+    NUM_LITERAL_CODES,

+    NUM_LITERAL_CODES,

+    NUM_LITERAL_CODES,

+    NUM_DISTANCE_CODES

+  ];

 

   static const int VP8L_MAGIC_BYTE = 0x2f;

   static const int VP8L_VERSION = 0;

@@ -832,7 +956,7 @@
   int _lastRow = 0;

 

   int _colorCacheSize = 0;

-  VP8LColorCache  _colorCache;

+  VP8LColorCache _colorCache;

 

   int _huffmanMask = 0;

   int _huffmanSubsampleBits = 0;

@@ -880,7 +1004,8 @@
   int get ioHeight => _ioHeight;

   set ioHeight(int height) => _ioHeight = height;

 

-  bool decodeImageData(data, int width, int height, int lastRow, processFunc) =>

+  bool decodeImageData(dynamic data, int width, int height, int lastRow,

+                       dynamic processFunc) =>

       _decodeImageData(data, width, height, lastRow, processFunc);

 

   Uint32List decodeImageStream(int xsize, int ysize, bool isLevel0) =>

@@ -897,5 +1022,6 @@
 

   void extractAlphaRows(int row) => _extractAlphaRows(row);

 

-  static int subSampleSize(int size, int samplingBits) => VP8L._subSampleSize(size, samplingBits);

+  static int subSampleSize(int size, int samplingBits) =>

+      VP8L._subSampleSize(size, samplingBits);

 }

diff --git a/image/lib/src/formats/webp/vp8l_bit_reader.dart b/image/lib/src/formats/webp/vp8l_bit_reader.dart
index 0a6359b..84f1911 100755
--- a/image/lib/src/formats/webp/vp8l_bit_reader.dart
+++ b/image/lib/src/formats/webp/vp8l_bit_reader.dart
@@ -18,14 +18,12 @@
     _buffer8[7] = _input.readByte();

   }

 

-  /**

-   * Return the prefetched bits, so they can be looked up.

-   */

+  /// Return the prefetched bits, so they can be looked up.

   int prefetchBits() {

     int b2 = 0;

     if (bitPos < 32) {

       b2 = (_buffer[0] >> bitPos) +

-           ((_buffer[1] & BIT_MASK[bitPos]) * (BIT_MASK[32 - bitPos] + 1));

+          ((_buffer[1] & BIT_MASK[bitPos]) * (BIT_MASK[32 - bitPos] + 1));

     } else if (bitPos == 32) {

       b2 = _buffer[1];

     } else {

@@ -36,18 +34,14 @@
 

   bool get isEOS => (_input.isEOS && bitPos >= LBITS);

 

-  /**

-   * Advances the read buffer by 4 bytes to make room for reading next 32 bits.

-   */

+  /// Advances the read buffer by 4 bytes to make room for reading next 32 bits.

   void fillBitWindow() {

     if (bitPos >= WBITS) {

       _shiftBytes();

     }

   }

 

-  /**

-   * Reads the specified number of bits from Read Buffer.

-   */

+  /// Reads the specified number of bits from Read Buffer.

   int readBits(int numBits) {

     // Flag an error if end_of_stream or n_bits is more than allowed limit.

     if (!isEOS && numBits < MAX_NUM_BIT_READ) {

@@ -61,9 +55,7 @@
     }

   }

 

-  /**

-   * If not at EOS, reload up to LBITS byte-by-byte

-   */

+  /// If not at EOS, reload up to LBITS byte-by-byte

   void _shiftBytes() {

     while (bitPos >= 8 && !_input.isEOS) {

       int b = _input.readByte();

@@ -83,16 +75,49 @@
   /// The number of bytes used for the bit buffer.

   static const int VALUE_SIZE = 8;

   static const int MAX_NUM_BIT_READ = 25;

+

   /// Number of bits prefetched.

   static const int LBITS = 64;

+

   /// Minimum number of bytes needed after fillBitWindow.

   static const int WBITS = 32;

+

   /// Number of bytes needed to store WBITS bits.

   static const int LOG8_WBITS = 4;

 

   static const List<int> BIT_MASK = const [

-      0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383,

-      32767, 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607,

-      16777215, 33554431, 67108863, 134217727, 268435455, 536870911,

-      1073741823, 2147483647, 4294967295];

+    0,

+    1,

+    3,

+    7,

+    15,

+    31,

+    63,

+    127,

+    255,

+    511,

+    1023,

+    2047,

+    4095,

+    8191,

+    16383,

+    32767,

+    65535,

+    131071,

+    262143,

+    524287,

+    1048575,

+    2097151,

+    4194303,

+    8388607,

+    16777215,

+    33554431,

+    67108863,

+    134217727,

+    268435455,

+    536870911,

+    1073741823,

+    2147483647,

+    4294967295

+  ];

 }

diff --git a/image/lib/src/formats/webp/vp8l_color_cache.dart b/image/lib/src/formats/webp/vp8l_color_cache.dart
index 2b3c41a..38175c6 100755
--- a/image/lib/src/formats/webp/vp8l_color_cache.dart
+++ b/image/lib/src/formats/webp/vp8l_color_cache.dart
@@ -4,9 +4,9 @@
   final Uint32List colors; // color entries

   final int hashShift; // Hash shift: 32 - hash_bits.

 

-  VP8LColorCache(int hashBits) :

-    colors = Uint32List(1 << hashBits),

-    hashShift = 32 - hashBits;

+  VP8LColorCache(int hashBits)

+      : colors = Uint32List(1 << hashBits),

+        hashShift = 32 - hashBits;

 

   void insert(int argb) {

     final int a = (argb * _HASH_MUL) & 0xffffffff;

diff --git a/image/lib/src/formats/webp/vp8l_transform.dart b/image/lib/src/formats/webp/vp8l_transform.dart
index 340a83f..97aeed4 100755
--- a/image/lib/src/formats/webp/vp8l_transform.dart
+++ b/image/lib/src/formats/webp/vp8l_transform.dart
@@ -6,7 +6,7 @@
 

 class VP8LTransform {

   // enum VP8LImageTransformType

-  static const int PREDICTOR_TRANSFORM  = 0;

+  static const int PREDICTOR_TRANSFORM = 0;

   static const int CROSS_COLOR_TRANSFORM = 1;

   static const int SUBTRACT_GREEN = 2;

   static const int COLOR_INDEXING_TRANSFORM = 3;

@@ -17,17 +17,14 @@
   Uint32List data;

   int bits = 0;

 

-  void inverseTransform(int rowStart, int rowEnd,

-                        Uint32List inData,

-                        int rowsIn,

-                        Uint32List outData,

-                        int rowsOut) {

+  void inverseTransform(int rowStart, int rowEnd, Uint32List inData, int rowsIn,

+      Uint32List outData, int rowsOut) {

     final int width = xsize;

 

     switch (type) {

       case SUBTRACT_GREEN:

-        addGreenToBlueAndRed(outData, rowsOut,

-                             rowsOut + (rowEnd - rowStart) * width);

+        addGreenToBlueAndRed(

+            outData, rowsOut, rowsOut + (rowEnd - rowStart) * width);

         break;

       case PREDICTOR_TRANSFORM:

         predictorInverseTransform(rowStart, rowEnd, outData, rowsOut);

@@ -51,24 +48,24 @@
           // the effective width of VP8LSubSampleSize(xsize_, bits_). All other

           // transforms work on effective width of xsize_.

           final int outStride = (rowEnd - rowStart) * width;

-          final int inStride = (rowEnd - rowStart) *

-              InternalVP8L.subSampleSize(xsize, bits);

+          final int inStride =

+              (rowEnd - rowStart) * InternalVP8L.subSampleSize(xsize, bits);

 

           int src = rowsOut + outStride - inStride;

           outData.setRange(src, src + inStride, inData, rowsOut);

 

-          colorIndexInverseTransform(rowStart, rowEnd, inData, src,

-                                      outData, rowsOut);

+          colorIndexInverseTransform(

+              rowStart, rowEnd, inData, src, outData, rowsOut);

         } else {

-          colorIndexInverseTransform(rowStart, rowEnd, inData, rowsIn,

-                                      outData, rowsOut);

+          colorIndexInverseTransform(

+              rowStart, rowEnd, inData, rowsIn, outData, rowsOut);

         }

         break;

     }

   }

 

-  void colorIndexInverseTransformAlpha(int yStart, int yEnd,

-                                           InputBuffer src, InputBuffer dst) {

+  void colorIndexInverseTransformAlpha(

+      int yStart, int yEnd, InputBuffer src, InputBuffer dst) {

     final int bitsPerPixel = 8 >> bits;

     final int width = xsize;

     Uint32List colorMap = this.data;

@@ -87,7 +84,8 @@
             packed_pixels = _getAlphaIndex(src[0]);

             src.offset++;

           }

-          int p = _getAlphaValue(colorMap[packed_pixels & bit_mask]);;

+          int p = _getAlphaValue(colorMap[packed_pixels & bit_mask]);

+          ;

           dst[0] = p;

           dst.offset++;

           packed_pixels >>= bitsPerPixel;

@@ -105,9 +103,8 @@
     }

   }

 

-  void colorIndexInverseTransform(int yStart, int yEnd,

-                                  Uint32List inData, int src,

-                                  Uint32List outData, int dst) {

+  void colorIndexInverseTransform(int yStart, int yEnd, Uint32List inData,

+      int src, Uint32List outData, int dst) {

     final int bitsPerPixel = 8 >> bits;

     final int width = xsize;

     Uint32List colorMap = this.data;

@@ -132,17 +129,16 @@
     } else {

       for (int y = yStart; y < yEnd; ++y) {

         for (int x = 0; x < width; ++x) {

-          outData[dst++] = _getARGBValue(colorMap[_getARGBIndex(inData[src++])]);

+          outData[dst++] =

+              _getARGBValue(colorMap[_getARGBIndex(inData[src++])]);

         }

       }

     }

   }

 

-  /**

-   * Color space inverse transform.

-   */

-  void colorSpaceInverseTransform(int yStart, int yEnd, Uint32List outData,

-                                  int data) {

+  /// Color space inverse transform.

+  void colorSpaceInverseTransform(

+      int yStart, int yEnd, Uint32List outData, int data) {

     final int width = xsize;

     final int mask = (1 << bits) - 1;

     final int tilesPerRow = InternalVP8L.subSampleSize(width, bits);

@@ -165,18 +161,18 @@
       ++y;

 

       if ((y & mask) == 0) {

-        predRow += tilesPerRow;;

+        predRow += tilesPerRow;

+        ;

       }

     }

   }

 

-  /**

-   * Inverse prediction.

-   */

-  void predictorInverseTransform(int yStart, int yEnd, Uint32List outData,

-                                 int data) {

+  /// Inverse prediction.

+  void predictorInverseTransform(

+      int yStart, int yEnd, Uint32List outData, int data) {

     final int width = xsize;

-    if (yStart == 0) {  // First Row follows the L (mode=1) mode.

+    if (yStart == 0) {

+      // First Row follows the L (mode=1) mode.

       final int pred0 = _predictor0(outData, outData[data - 1], 0);

       _addPixelsEq(outData, data, pred0);

       for (int x = 1; x < width; ++x) {

@@ -204,7 +200,8 @@
 

       var predFunc = PREDICTORS[k];

       for (int x = 1; x < width; ++x) {

-        if ((x & mask) == 0) {    // start of tile. Read predictor function.

+        if ((x & mask) == 0) {

+          // start of tile. Read predictor function.

           int k = ((this.data[predModeSrc++]) >> 8) & 0xf;

           predFunc = PREDICTORS[k];

         }

@@ -216,16 +213,15 @@
       data += width;

       ++y;

 

-      if ((y & mask) == 0) {   // Use the same mask, since tiles are squares.

+      if ((y & mask) == 0) {

+        // Use the same mask, since tiles are squares.

         predModeBase += tilesPerRow;

       }

     }

   }

 

-  /**

-   * Add green to blue and red channels (i.e. perform the inverse transform of

-   * 'subtract green').

-   */

+  /// Add green to blue and red channels (i.e. perform the inverse transform of

+  /// 'subtract green').

   void addGreenToBlueAndRed(Uint32List pixels, int data, int dataEnd) {

     while (data < dataEnd) {

       final int argb = pixels[data];

@@ -253,9 +249,7 @@
     return (val >> 8) & 0xff;

   }

 

-  /**

-   * In-place sum of each component with mod 256.

-   */

+  /// In-place sum of each component with mod 256.

   static void _addPixelsEq(Uint32List pixels, int a, int b) {

     int pa = pixels[a];

     final int alphaAndGreen = (pa & 0xff00ff00) + (b & 0xff00ff00);

@@ -275,10 +269,8 @@
     return _average2(_average2(a0, a1), _average2(a2, a3));

   }

 

-  /**

-   * Return 0, when a is a negative integer.

-   * Return 255, when a is positive.

-   */

+  /// Return 0, when a is a negative integer.

+  /// Return 255, when a is positive.

   static int _clip255(int a) {

     if (a < 0) {

       return 0;

@@ -293,15 +285,12 @@
     return _clip255(a + b - c);

   }

 

-

   static int _clampedAddSubtractFull(int c0, int c1, int c2) {

     final int a = _addSubtractComponentFull(c0 >> 24, c1 >> 24, c2 >> 24);

-    final int r = _addSubtractComponentFull((c0 >> 16) & 0xff,

-        (c1 >> 16) & 0xff,

-        (c2 >> 16) & 0xff);

-    final int g = _addSubtractComponentFull((c0 >> 8) & 0xff,

-        (c1 >> 8) & 0xff,

-        (c2 >> 8) & 0xff);

+    final int r = _addSubtractComponentFull(

+        (c0 >> 16) & 0xff, (c1 >> 16) & 0xff, (c2 >> 16) & 0xff);

+    final int g = _addSubtractComponentFull(

+        (c0 >> 8) & 0xff, (c1 >> 8) & 0xff, (c2 >> 8) & 0xff);

     final int b = _addSubtractComponentFull(c0 & 0xff, c1 & 0xff, c2 & 0xff);

     return (a << 24) | (r << 16) | (g << 8) | b;

   }

@@ -313,9 +302,12 @@
   static int _clampedAddSubtractHalf(int c0, int c1, int c2) {

     final int avg = _average2(c0, c1);

     final int a = _addSubtractComponentHalf(avg >> 24, c2 >> 24);

-    final int r = _addSubtractComponentHalf((avg >> 16) & 0xff, (c2 >> 16) & 0xff);

-    final int g = _addSubtractComponentHalf((avg >> 8) & 0xff, (c2 >> 8) & 0xff);

-    final int b = _addSubtractComponentHalf((avg >> 0) & 0xff, (c2 >> 0) & 0xff);

+    final int r =

+        _addSubtractComponentHalf((avg >> 16) & 0xff, (c2 >> 16) & 0xff);

+    final int g =

+        _addSubtractComponentHalf((avg >> 8) & 0xff, (c2 >> 8) & 0xff);

+    final int b =

+        _addSubtractComponentHalf((avg >> 0) & 0xff, (c2 >> 0) & 0xff);

     return (a << 24) | (r << 16) | (g << 8) | b;

   }

 

@@ -326,11 +318,10 @@
   }

 

   static int _select(int a, int b, int c) {

-    final int pa_minus_pb =

-        _sub3((a >> 24)       , (b >> 24)       , (c >> 24)       ) +

+    final int pa_minus_pb = _sub3((a >> 24), (b >> 24), (c >> 24)) +

         _sub3((a >> 16) & 0xff, (b >> 16) & 0xff, (c >> 16) & 0xff) +

-        _sub3((a >>  8) & 0xff, (b >>  8) & 0xff, (c >>  8) & 0xff) +

-        _sub3((a      ) & 0xff, (b      ) & 0xff, (c      ) & 0xff);

+        _sub3((a >> 8) & 0xff, (b >> 8) & 0xff, (c >> 8) & 0xff) +

+        _sub3((a) & 0xff, (b) & 0xff, (c) & 0xff);

     return (pa_minus_pb <= 0) ? a : b;

   }

 

@@ -354,7 +345,7 @@
   }

 

   static int _predictor4(Uint32List pixels, int left, int top) {

-    return pixels[top -1];

+    return pixels[top - 1];

   }

 

   static int _predictor5(Uint32List pixels, int left, int top) {

@@ -370,7 +361,7 @@
   }

 

   static int _predictor8(Uint32List pixels, int left, int top) {

-    return _average2(pixels[top -1], pixels[top]);

+    return _average2(pixels[top - 1], pixels[top]);

   }

 

   static int _predictor9(Uint32List pixels, int left, int top) {

@@ -378,7 +369,7 @@
   }

 

   static int _predictor10(Uint32List pixels, int left, int top) {

-    return _average4(left, pixels[top -1], pixels[top], pixels[top + 1]);

+    return _average4(left, pixels[top - 1], pixels[top], pixels[top + 1]);

   }

 

   static int _predictor11(Uint32List pixels, int left, int top) {

@@ -393,16 +384,28 @@
     return _clampedAddSubtractHalf(left, pixels[top], pixels[top - 1]);

   }

 

-  static final List PREDICTORS = [

-    _predictor0, _predictor1, _predictor2, _predictor3,

-    _predictor4, _predictor5, _predictor6, _predictor7,

-    _predictor8, _predictor9, _predictor10, _predictor11,

-    _predictor12, _predictor13,

-    _predictor0, _predictor0 ];

+  static final PREDICTORS = [

+    _predictor0,

+    _predictor1,

+    _predictor2,

+    _predictor3,

+    _predictor4,

+    _predictor5,

+    _predictor6,

+    _predictor7,

+    _predictor8,

+    _predictor9,

+    _predictor10,

+    _predictor11,

+    _predictor12,

+    _predictor13,

+    _predictor0,

+    _predictor0

+  ];

 }

 

 class _VP8LMultipliers {

-  final Uint8List data = Uint8List(3);

+  final data = Uint8List(3);

 

   // Note: the members are uint8_t, so that any negative values are

   // automatically converted to "mod 256" values.

@@ -424,16 +427,13 @@
     data[2] = 0;

   }

 

-  void set colorCode(int colorCode) {

+  set colorCode(int colorCode) {

     data[0] = (colorCode >> 0) & 0xff;

     data[1] = (colorCode >> 8) & 0xff;

     data[2] = (colorCode >> 16) & 0xff;

   }

 

-  int get colorCode => 0xff000000 |

-      (data[2] << 16) |

-      (data[1] << 8) |

-      data[0];

+  int get colorCode => 0xff000000 | (data[2] << 16) | (data[1] << 8) | data[0];

 

   int transformColor(int argb, bool inverse) {

     final int green = (argb >> 8) & 0xff;

@@ -445,7 +445,8 @@
       int g = colorTransformDelta(greenToRed, green);

       newRed = (newRed + g) & 0xffffffff;

       newRed &= 0xff;

-      newBlue = (newBlue + colorTransformDelta(greenToBlue, green)) & 0xffffffff;

+      newBlue =

+          (newBlue + colorTransformDelta(greenToBlue, green)) & 0xffffffff;

       newBlue = (newBlue + colorTransformDelta(redToBlue, newRed)) & 0xffffffff;

       newBlue &= 0xff;

     } else {

@@ -469,4 +470,3 @@
     return d >> 5;

   }

 }

-

diff --git a/image/lib/src/formats/webp/webp_alpha.dart b/image/lib/src/formats/webp/webp_alpha.dart
index 7767232..89182d1 100755
--- a/image/lib/src/formats/webp/webp_alpha.dart
+++ b/image/lib/src/formats/webp/webp_alpha.dart
@@ -55,14 +55,13 @@
       return false;

     }

 

-    var unfilterFunc = WebPFilters.UNFILTERS[filter];

+    dynamic unfilterFunc = WebPFilters.UNFILTERS[filter];

 

     if (method == ALPHA_NO_COMPRESSION) {

       final int offset = row * width;

       final int numPixels = numRows * width;

 

-      output.setRange(offset, numPixels, input.buffer,

-                      input.position + offset);

+      output.setRange(offset, numPixels, input.buffer, input.position + offset);

     } else {

       if (!_decodeAlphaImageStream(row + numRows, output)) {

         return false;

@@ -86,23 +85,26 @@
     return true;

   }

 

-  bool _dequantizeLevels(Uint8List data, int width, int height,

-                         int row, int num_rows) {

-    if (data == null || width <= 0 || height <= 0 || row < 0 || num_rows < 0 ||

+  bool _dequantizeLevels(

+      Uint8List data, int width, int height, int row, int num_rows) {

+    if (data == null ||

+        width <= 0 ||

+        height <= 0 ||

+        row < 0 ||

+        num_rows < 0 ||

         row + num_rows > height) {

       return false;

     }

     return true;

   }

 

-

   bool _decodeAlphaImageStream(int lastRow, Uint8List output) {

     _vp8l.opaque = output;

     // Decode (with special row processing).

-    return _use8bDecode ?

-        _vp8l.decodeAlphaData(_vp8l.webp.width, _vp8l.webp.height, lastRow) :

-        _vp8l.decodeImageData(_vp8l.pixels, _vp8l.webp.width, _vp8l.webp.height,

-                               lastRow, _vp8l.extractAlphaRows);

+    return _use8bDecode

+        ? _vp8l.decodeAlphaData(_vp8l.webp.width, _vp8l.webp.height, lastRow)

+        : _vp8l.decodeImageData(_vp8l.pixels, _vp8l.webp.width,

+            _vp8l.webp.height, lastRow, _vp8l.extractAlphaRows);

   }

 

   bool _decodeAlphaHeader() {

@@ -133,6 +135,7 @@
   }

 

   InternalVP8L _vp8l;

+

   /// Although alpha channel

   /// requires only 1 byte per

   /// pixel, sometimes VP8LDecoder may need to allocate

diff --git a/image/lib/src/formats/webp/webp_filters.dart b/image/lib/src/formats/webp/webp_filters.dart
index e16e883..deab4d5 100755
--- a/image/lib/src/formats/webp/webp_filters.dart
+++ b/image/lib/src/formats/webp/webp_filters.dart
@@ -8,60 +8,59 @@
   static const int FILTER_HORIZONTAL = 1;

   static const int FILTER_VERTICAL = 2;

   static const int FILTER_GRADIENT = 3;

-  static const int FILTER_LAST = FILTER_GRADIENT + 1;  // end marker

+  static const int FILTER_LAST = FILTER_GRADIENT + 1; // end marker

   static const int FILTER_BEST = 5;

   static const int FILTER_FAST = 6;

 

-  static const List FILTERS = const [

-      null,              // WEBP_FILTER_NONE

-      horizontalFilter,  // WEBP_FILTER_HORIZONTAL

-      verticalFilter,    // WEBP_FILTER_VERTICAL

-      gradientFilter     // WEBP_FILTER_GRADIENT

+  static const FILTERS = [

+    null, // WEBP_FILTER_NONE

+    horizontalFilter, // WEBP_FILTER_HORIZONTAL

+    verticalFilter, // WEBP_FILTER_VERTICAL

+    gradientFilter // WEBP_FILTER_GRADIENT

   ];

 

-

-  static const List UNFILTERS = const [

-      null,                // WEBP_FILTER_NONE

-      horizontalUnfilter,  // WEBP_FILTER_HORIZONTAL

-      verticalUnfilter,    // WEBP_FILTER_VERTICAL

-      gradientUnfilter     // WEBP_FILTER_GRADIENT

+  static const UNFILTERS = [

+    null, // WEBP_FILTER_NONE

+    horizontalUnfilter, // WEBP_FILTER_HORIZONTAL

+    verticalUnfilter, // WEBP_FILTER_VERTICAL

+    gradientUnfilter // WEBP_FILTER_GRADIENT

   ];

 

   static void horizontalFilter(Uint8List data, int width, int height,

-                               int stride, Uint8List filteredData) {

-    _doHorizontalFilter(data, width, height, stride, 0, height, false,

-                        filteredData);

+      int stride, Uint8List filteredData) {

+    _doHorizontalFilter(

+        data, width, height, stride, 0, height, false, filteredData);

   }

 

-  static void horizontalUnfilter(int width, int height, int stride, int row,

-                                 int numRows, Uint8List data) {

+  static void horizontalUnfilter(

+      int width, int height, int stride, int row, int numRows, Uint8List data) {

     _doHorizontalFilter(data, width, height, stride, row, numRows, true, data);

   }

 

-  static void verticalFilter(Uint8List data, int width, int height,

-                             int stride, Uint8List filteredData) {

-    _doVerticalFilter(data, width, height, stride, 0, height, false,

-                      filteredData);

+  static void verticalFilter(Uint8List data, int width, int height, int stride,

+      Uint8List filteredData) {

+    _doVerticalFilter(

+        data, width, height, stride, 0, height, false, filteredData);

   }

 

   static void verticalUnfilter(int width, int height, int stride, int row,

-                               int num_rows, Uint8List data) {

+      int num_rows, Uint8List data) {

     _doVerticalFilter(data, width, height, stride, row, num_rows, true, data);

   }

 

-  static void gradientFilter(Uint8List data, int width, int height,

-                             int stride, Uint8List filteredData) {

-    _doGradientFilter(data, width, height, stride, 0, height, false,

-                      filteredData);

+  static void gradientFilter(Uint8List data, int width, int height, int stride,

+      Uint8List filteredData) {

+    _doGradientFilter(

+        data, width, height, stride, 0, height, false, filteredData);

   }

 

   static void gradientUnfilter(int width, int height, int stride, int row,

-                               int num_rows, Uint8List data) {

+      int num_rows, Uint8List data) {

     _doGradientFilter(data, width, height, stride, row, num_rows, true, data);

   }

 

-  static void _predictLine(InputBuffer src, InputBuffer pred, InputBuffer dst, int length,

-                           bool inverse) {

+  static void _predictLine(InputBuffer src, InputBuffer pred, InputBuffer dst,

+      int length, bool inverse) {

     if (inverse) {

       for (int i = 0; i < length; ++i) {

         dst[i] = src[i] + pred[i];

@@ -73,10 +72,8 @@
     }

   }

 

-  static void _doHorizontalFilter(Uint8List src,

-                                  int width, int height, int stride,

-                                  int row, int numRows,

-                                  bool inverse, Uint8List out) {

+  static void _doHorizontalFilter(Uint8List src, int width, int height,

+      int stride, int row, int numRows, bool inverse, Uint8List out) {

     final int startOffset = row * stride;

     final int lastRow = row + numRows;

     InputBuffer s = InputBuffer(src, offset: startOffset);

@@ -87,7 +84,7 @@
       // Leftmost pixel is the same as input for topmost scanline.

       o[0] = s[0];

       _predictLine(new InputBuffer.from(s, offset: 1), preds,

-                   new InputBuffer.from(o, offset: 1), width - 1, inverse);

+          new InputBuffer.from(o, offset: 1), width - 1, inverse);

       row = 1;

       preds.offset += stride;

       s.offset += stride;

@@ -97,9 +94,10 @@
     // Filter line-by-line.

     while (row < lastRow) {

       // Leftmost pixel is predicted from above.

-      _predictLine(s, new InputBuffer.from(preds, offset: -stride), o, 1, inverse);

+      _predictLine(

+          s, new InputBuffer.from(preds, offset: -stride), o, 1, inverse);

       _predictLine(new InputBuffer.from(s, offset: 1), preds,

-                   new InputBuffer.from(o, offset: 1), width - 1, inverse);

+          new InputBuffer.from(o, offset: 1), width - 1, inverse);

       ++row;

       preds.offset += stride;

       s.offset += stride;

@@ -107,10 +105,8 @@
     }

   }

 

-  static void _doVerticalFilter(Uint8List src,

-                               int width, int height, int stride,

-                               int row, int numRows,

-                               bool inverse, Uint8List out) {

+  static void _doVerticalFilter(Uint8List src, int width, int height,

+      int stride, int row, int numRows, bool inverse, Uint8List out) {

     final int startOffset = row * stride;

     final int last_row = row + numRows;

     InputBuffer s = InputBuffer(src, offset: startOffset);

@@ -122,8 +118,7 @@
       o[0] = s[0];

       // Rest of top scan-line is left-predicted.

       _predictLine(new InputBuffer.from(s, offset: 1), preds,

-                   new InputBuffer.from(o, offset: 1), width - 1,

-                   inverse);

+          new InputBuffer.from(o, offset: 1), width - 1, inverse);

       row = 1;

       s.offset += stride;

       o.offset += stride;

@@ -144,13 +139,11 @@
 

   static int _gradientPredictor(int a, int b, int c) {

     final int g = a + b - c;

-    return ((g & ~0xff) == 0) ? g : (g < 0) ? 0 : 255;  // clip to 8bit

+    return ((g & ~0xff) == 0) ? g : (g < 0) ? 0 : 255; // clip to 8bit

   }

 

-  static void _doGradientFilter(Uint8List src,

-                                int width, int height, int stride,

-                                int row, int numRows,

-                                bool inverse, Uint8List out) {

+  static void _doGradientFilter(Uint8List src, int width, int height,

+      int stride, int row, int numRows, bool inverse, Uint8List out) {

     final int startOffset = row * stride;

     final int lastRow = row + numRows;

     InputBuffer s = InputBuffer(src, offset: startOffset);

@@ -161,7 +154,7 @@
     if (row == 0) {

       o[0] = s[0];

       _predictLine(new InputBuffer.from(s, offset: 1), preds,

-                   new InputBuffer.from(o, offset: 1), width - 1, inverse);

+          new InputBuffer.from(o, offset: 1), width - 1, inverse);

       row = 1;

       preds.offset += stride;

       s.offset += stride;

@@ -171,12 +164,11 @@
     // Filter line-by-line.

     while (row < lastRow) {

       // leftmost pixel: predict from above.

-      _predictLine(s, new InputBuffer.from(preds, offset: -stride),

-                   o, 1, inverse);

+      _predictLine(

+          s, new InputBuffer.from(preds, offset: -stride), o, 1, inverse);

       for (int w = 1; w < width; ++w) {

-        final int pred = _gradientPredictor(preds[w - 1],

-            preds[w - stride],

-            preds[w - stride - 1]);

+        final int pred = _gradientPredictor(

+            preds[w - 1], preds[w - stride], preds[w - stride - 1]);

         o[w] = s[w] + (inverse ? pred : -pred);

       }

       ++row;

diff --git a/image/lib/src/formats/webp/webp_frame.dart b/image/lib/src/formats/webp/webp_frame.dart
index ab1dd9e..7f3c327 100755
--- a/image/lib/src/formats/webp/webp_frame.dart
+++ b/image/lib/src/formats/webp/webp_frame.dart
@@ -1,20 +1,23 @@
 import '../../internal/internal.dart';

 import '../../util/input_buffer.dart';

 

-/**

- * Decodes a frame from a WebP animation.

- */

+/// Decodes a frame from a WebP animation.

 class WebPFrame {

   /// The x coordinate of the upper left corner of the frame.

   int x;

+

   /// The y coordinate of the upper left corner of the frame.

   int y;

+

   /// The width of the frame.

   int width;

+

   /// The height of the frame.

   int height;

+

   /// How long the frame should be displayed, in milliseconds.

   int duration;

+

   /// Indicates how the current frame is to be treated after it has been

   /// displayed (before rendering the next frame) on the canvas.

   /// If true, the frame is cleared to the background color.  If false,

diff --git a/image/lib/src/formats/webp/webp_huffman.dart b/image/lib/src/formats/webp/webp_huffman.dart
index 7ae311f..1ad9dbd 100755
--- a/image/lib/src/formats/webp/webp_huffman.dart
+++ b/image/lib/src/formats/webp/webp_huffman.dart
@@ -4,9 +4,7 @@
 import 'vp8l.dart';

 import 'vp8l_bit_reader.dart';

 

-/**

- * Huffman Tree.

- */

+/// Huffman Tree.

 @internal

 class HuffmanTree {

   static const int HUFF_LUT_BITS = 7;

@@ -19,8 +17,10 @@
   /// all the nodes, starting at root, stored as a single int array, where

   /// each node occupies two ints as [symbol, children].

   Int32List tree;

+

   /// max number of nodes

   int maxNodes = 0;

+

   /// number of currently occupied nodes

   int numNodes = 0;

 

@@ -92,11 +92,8 @@
     return _isFull();

   }

 

-  bool buildExplicit(List<int> codeLengths,

-                     List<int> codes,

-                     List<int> symbols,

-                     int maxSymbol,

-                     int numSymbols) {

+  bool buildExplicit(List<int> codeLengths, List<int> codes, List<int> symbols,

+      int maxSymbol, int numSymbols) {

     // Initialize the tree. Will fail if num_symbols = 0.

     if (!_init(numSymbols)) {

       return false;

@@ -118,11 +115,9 @@
     return _isFull();

   }

 

-  /**

-   * Decodes the next Huffman code from bit-stream.

-   * input.fillBitWindow() needs to be called at minimum every second call

-   * to ReadSymbol, in order to pre-fetch enough bits.

-   */

+  /// Decodes the next Huffman code from bit-stream.

+  /// input.fillBitWindow() needs to be called at minimum every second call

+  /// to ReadSymbol, in order to pre-fetch enough bits.

   int readSymbol(VP8LBitReader br) {

     int node = 0;

     int bits = br.prefetchBits();

@@ -165,8 +160,8 @@
         lutBits[idx] = codeLength;

       }

     } else {

-      baseCode = _reverseBitsShort((code >> (codeLength - HUFF_LUT_BITS)),

-                                   HUFF_LUT_BITS);

+      baseCode = _reverseBitsShort(

+          (code >> (codeLength - HUFF_LUT_BITS)), HUFF_LUT_BITS);

     }

 

     while (codeLength-- > 0) {

@@ -209,8 +204,23 @@
 

   // Pre-reversed 4-bit values.

   static const List<int> _REVERSED_BITS = const [

-    0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe,

-    0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf];

+    0x0,

+    0x8,

+    0x4,

+    0xc,

+    0x2,

+    0xa,

+    0x6,

+    0xe,

+    0x1,

+    0x9,

+    0x5,

+    0xd,

+    0x3,

+    0xb,

+    0x7,

+    0xf

+  ];

 

   int _reverseBitsShort(int bits, int numBits) {

     int v = (_REVERSED_BITS[bits & 0xf] << 4) | _REVERSED_BITS[bits >> 4];

@@ -251,15 +261,13 @@
     _nodeSetChildren(children + 1, -1);

   }

 

-  bool _huffmanCodeLengthsToCodes(List<int> codeLengths, int codeLengthsSize,

-                                  List<int> huffCodes) {

+  bool _huffmanCodeLengthsToCodes(

+      List<int> codeLengths, int codeLengthsSize, List<int> huffCodes) {

     int symbol;

     int codeLen;

-    Int32List codeLengthHist =

-        new Int32List(VP8L.MAX_ALLOWED_CODE_LENGTH + 1);

+    Int32List codeLengthHist = new Int32List(VP8L.MAX_ALLOWED_CODE_LENGTH + 1);

     int currCode;

-    Int32List nextCodes =

-        new Int32List(VP8L.MAX_ALLOWED_CODE_LENGTH + 1);

+    Int32List nextCodes = new Int32List(VP8L.MAX_ALLOWED_CODE_LENGTH + 1);

     int maxCodeLength = 0;

 

     // Calculate max code length.

@@ -305,9 +313,7 @@
   }

 }

 

-/**

- * A group of huffman trees.

- */

+/// A group of huffman trees.

 @internal

 class HTreeGroup {

   final List<HuffmanTree> htrees =

@@ -319,7 +325,7 @@
     }

   }

 

-  HuffmanTree operator[](int index) {

+  HuffmanTree operator [](int index) {

     if (htrees[index] == null) {

       htrees[index] = HuffmanTree();

     }

diff --git a/image/lib/src/formats/webp/webp_info.dart b/image/lib/src/formats/webp/webp_info.dart
index f8b9305..df19c0c 100755
--- a/image/lib/src/formats/webp/webp_info.dart
+++ b/image/lib/src/formats/webp/webp_info.dart
@@ -3,9 +3,7 @@
 import '../decode_info.dart';

 import 'webp_frame.dart';

 

-/**

- * Features gathered from the bitstream

- */

+/// Features gathered from the bitstream

 class WebPInfo extends DecodeInfo {

   // enum Format

   static const int FORMAT_UNDEFINED = 0;

@@ -15,18 +13,25 @@
 

   /// True if the bitstream contains an alpha channel.

   bool hasAlpha = false;

+

   /// True if the bitstream is an animation.

   bool hasAnimation = false;

+

   /// 0 = undefined (/mixed), 1 = lossy, 2 = lossless, 3 = animated

   int format = FORMAT_UNDEFINED;

+

   /// ICCP data string.

   String iccp = '';

+

   /// EXIF data string.

   String exif = '';

+

   /// XMP data string.

   String xmp = '';

+

   /// How many times the animation should loop.

   int animLoopCount = 0;

+

   /// Information about each animation frame.

   List<WebPFrame> frames = [];

 

diff --git a/image/lib/src/formats/webp_decoder.dart b/image/lib/src/formats/webp_decoder.dart
index 672928c..a1fd78c 100755
--- a/image/lib/src/formats/webp_decoder.dart
+++ b/image/lib/src/formats/webp_decoder.dart
@@ -9,10 +9,8 @@
 import 'webp/webp_frame.dart';

 import 'webp/webp_info.dart';

 

-/**

- * Decode a WebP formatted image. This supports lossless (vp8l), lossy (vp8),

- * lossy+alpha, and animated WebP images.

- */

+/// Decode a WebP formatted image. This supports lossless (vp8l), lossy (vp8),

+/// lossy+alpha, and animated WebP images.

 class WebPDecoder extends Decoder {

   InternalWebPInfo _info;

 

@@ -24,9 +22,7 @@
 

   WebPInfo get info => _info;

 

-  /**

-   * Is the given file a valid WebP image?

-   */

+  /// Is the given file a valid WebP image?

   bool isValidFile(List<int> bytes) {

     _input = InputBuffer(bytes);

     if (!_getHeader(_input)) {

@@ -35,18 +31,14 @@
     return true;

   }

 

-  /**

-   * How many frames are available to decode?

-   *

-   * You should have prepared the decoder by either passing the file bytes

-   * to the constructor, or calling getInfo.

-   */

+  /// How many frames are available to decode?

+  ///

+  /// You should have prepared the decoder by either passing the file bytes

+  /// to the constructor, or calling getInfo.

   int numFrames() => (_info != null) ? _info.numFrames : 0;

 

-  /**

-   * Validate the file is a WebP image and get information about it.

-   * If the file is not a valid WebP image, null is returned.

-   */

+  /// Validate the file is a WebP image and get information about it.

+  /// If the file is not a valid WebP image, null is returned.

   WebPInfo startDecode(List<int> bytes) {

     _input = InputBuffer(bytes);

 

@@ -91,44 +83,40 @@
         return null;

       }

 

-      InternalWebPFrame f = _info.frames[frame];

-      InputBuffer frameData = _input.subset(f.frameSize,

-                                            position: f.framePosition);

+      InternalWebPFrame f = _info.frames[frame] as InternalWebPFrame;

+      InputBuffer frameData =

+          _input.subset(f.frameSize, position: f.framePosition);

 

       return _decodeFrame(frameData, frame: frame);

     }

 

     if (_info.format == WebPInfo.FORMAT_LOSSLESS) {

-      InputBuffer data = _input.subset(_info.vp8Size,

-                                       position: _info.vp8Position);

+      InputBuffer data =

+          _input.subset(_info.vp8Size, position: _info.vp8Position);

       return new VP8L(data, _info).decode();

     } else if (_info.format == WebPInfo.FORMAT_LOSSY) {

-      InputBuffer data = _input.subset(_info.vp8Size,

-                                       position: _info.vp8Position);

+      InputBuffer data =

+          _input.subset(_info.vp8Size, position: _info.vp8Position);

       return new VP8(data, _info).decode();

     }

 

     return null;

   }

 

-  /**

-   * Decode a WebP formatted file stored in [bytes] into an Image.

-   * If it's not a valid webp file, null is returned.

-   * If the webp file stores animated frames, only the first image will

-   * be returned.  Use [decodeAnimation] to decode the full animation.

-   */

-  Image decodeImage(List<int> bytes, {int frame: 0}) {

+  /// Decode a WebP formatted file stored in [bytes] into an Image.

+  /// If it's not a valid webp file, null is returned.

+  /// If the webp file stores animated frames, only the first image will

+  /// be returned.  Use [decodeAnimation] to decode the full animation.

+  Image decodeImage(List<int> bytes, {int frame = 0}) {

     startDecode(bytes);

     _info.frame = 0;

     _info.numFrames = 1;

     return decodeFrame(frame);

   }

 

-  /**

-   * Decode all of the frames of an animated webp. For single image webps,

-   * this will return an animation with a single frame.

-   */

-Animation decodeAnimation(List<int> bytes) {

+  /// Decode all of the frames of an animated webp. For single image webps,

+  /// this will return an animation with a single frame.

+  Animation decodeAnimation(List<int> bytes) {

     if (startDecode(bytes) == null) {

       return null;

     }

@@ -180,8 +168,7 @@
     return anim;

   }

 

-

-  Image _decodeFrame(InputBuffer input, {int frame: 0}) {

+  Image _decodeFrame(InputBuffer input, {int frame = 0}) {

     InternalWebPInfo webp = InternalWebPInfo();

     if (!_getInfo(input, webp)) {

       return null;

@@ -198,14 +185,13 @@
       if (frame >= webp.frames.length || frame < 0) {

         return null;

       }

-      InternalWebPFrame f = webp.frames[frame];

-      InputBuffer frameData = input.subset(f.frameSize,

-                                           position: f.framePosition);

+      InternalWebPFrame f = webp.frames[frame] as InternalWebPFrame;

+      InputBuffer frameData =

+          input.subset(f.frameSize, position: f.framePosition);

 

       return _decodeFrame(frameData, frame: frame);

     } else {

-      InputBuffer data = input.subset(webp.vp8Size,

-                                      position: webp.vp8Position);

+      InputBuffer data = input.subset(webp.vp8Size, position: webp.vp8Position);

       if (webp.format == WebPInfo.FORMAT_LOSSLESS) {

         return new VP8L(data, webp).decode();

       } else if (webp.format == WebPInfo.FORMAT_LOSSY) {

@@ -261,8 +247,8 @@
           found = true;

           break;

         case 'ALPH':

-          webp.alphaData = InputBuffer(input.buffer,

-                                           bigEndian: input.bigEndian);

+          webp.alphaData =

+              InputBuffer(input.buffer, bigEndian: input.bigEndian);

           webp.alphaData.offset = input.offset;

           webp.alphaSize = size;

           input.skip(diskSize);

diff --git a/image/lib/src/formats/webp_encoder.dart b/image/lib/src/formats/webp_encoder.dart
index 5f4f8af..a38f9f2 100755
--- a/image/lib/src/formats/webp_encoder.dart
+++ b/image/lib/src/formats/webp_encoder.dart
@@ -5,9 +5,7 @@
 import '../util/output_buffer.dart';

 import 'encoder.dart';

 

-/**

- * Encode an image to the PNG format.

- */

+/// Encode an image to the PNG format.

 class WebPEncoder extends Encoder {

   static const int LOSSLESS = 0;

   static const int LOSSY = 1;

@@ -15,19 +13,14 @@
   int format;

   num quality;

 

-  /**

-   * [format] can be [LOSSY] or [LOSSLESS].

-   * [quality] is controls lossy compression, in the range

-   * 0 (smallest file) and 100 (biggest).

-   */

-  WebPEncoder({this.format: LOSSY,

-               this.quality: 100});

+  /// [format] can be [LOSSY] or [LOSSLESS].

+  /// [quality] is controls lossy compression, in the range

+  /// 0 (smallest file) and 100 (biggest).

+  WebPEncoder({this.format = LOSSY, this.quality = 100});

 

-  /**

-   * Add a frame to be encoded. Call [finish] to encode the added frames.

-   * If only one frame is added, a single-image WebP is encoded; otherwise

-   * if there are more than one frame, a multi-frame animated WebP is encoded.

-   */

+  /// Add a frame to be encoded. Call [finish] to encode the added frames.

+  /// If only one frame is added, a single-image WebP is encoded; otherwise

+  /// if there are more than one frame, a multi-frame animated WebP is encoded.

   void addFrame(Image image, {int duration}) {

     if (output == null) {

       output = OutputBuffer();

@@ -55,9 +48,7 @@
     _lastImage = _encodeImage(image);

   }

 

-  /**

-   * Encode the images that were added with [addFrame].

-   */

+  /// Encode the images that were added with [addFrame].

   List<int> finish() {

     List<int> bytes;

     if (output == null) {

@@ -83,22 +74,16 @@
     return bytes;

   }

 

-  /**

-   * Encode a single frame image.

-   */

+  /// Encode a single frame image.

   List<int> encodeImage(Image image) {

     addFrame(image);

     return finish();

   }

 

-  /**

-   * Does this encoder support animation?

-   */

+  /// Does this encoder support animation?

   bool get supportsAnimation => true;

 

-  /**

-   * Encode an animation.

-   */

+  /// Encode an animation.

   List<int> encodeAnimation(Animation anim) {

     for (Image f in anim) {

       addFrame(f, duration: f.duration);

@@ -110,12 +95,9 @@
     return null;

   }

 

-  void _writeHeader(int width, int height) {

+  void _writeHeader(int width, int height) {}

 

-  }

-

-  void _addImage(Uint8List image, int width, int height) {

-  }

+  void _addImage(Uint8List image, int width, int height) {}

 

   OutputBuffer output;

   int delay;

diff --git a/image/lib/src/hdr/half.dart b/image/lib/src/hdr/half.dart
index 36b7b85..c0138d8 100755
--- a/image/lib/src/hdr/half.dart
+++ b/image/lib/src/hdr/half.dart
@@ -2,14 +2,12 @@
 

 import '../internal/bit_operators.dart';

 

-/**

- * A 16-bit floating-point number, used by high-dynamic-range image formats

- * as a more efficient storage for floating-point values that don't require

- * full 32-bit precision. A list of Half floats can be stored in a [Uint16List],

- * and converted to a double using the [HalfToDouble] static method.

- *

- * This class is derived from the OpenEXR library.

- */

+/// A 16-bit floating-point number, used by high-dynamic-range image formats

+/// as a more efficient storage for floating-point values that don't require

+/// full 32-bit precision. A list of Half floats can be stored in a [Uint16List],

+/// and converted to a double using the [HalfToDouble] static method.

+///

+/// This class is derived from the OpenEXR library.

 class Half {

   Half([num f]) {

     if (f != null) {

@@ -17,8 +15,7 @@
     }

   }

 

-  Half.fromBits(int bits) :

-    _h = bits {

+  Half.fromBits(int bits) : _h = bits {

     if (_toFloatFloat32 == null) {

       _initialize();

     }

@@ -31,12 +28,12 @@
     return _toFloatFloat32[bits];

   }

 

-  static int DoubleToHalf(num f) {

+  static int DoubleToHalf(num n) {

     if (_toFloatFloat32 == null) {

       _initialize();

     }

 

-    f = f.toDouble();

+    double f = n.toDouble();

     int x_i = float32ToUint32(f);

     if (f == 0.0) {

       // Common special case - zero.

@@ -74,38 +71,34 @@
 

   double toDouble() => _toFloatFloat32[_h];

 

-  /**

-   * Unary minus

-   */

-  Half operator-() => new Half.fromBits(_h ^ 0x8000);

+  /// Unary minus

+  Half operator -() => new Half.fromBits(_h ^ 0x8000);

 

-  /**

-   * Addition operator for Half or num left operands.

-   */

-  Half operator+(f) {

-    return new Half(toDouble() + f.toDouble());

+  /// Addition operator for Half or num left operands.

+  Half operator +(dynamic f) {

+    double d = (f is Half) ? f.toDouble() : (f is num) ? f.toDouble() : 0;

+    return new Half(toDouble() + d);

   }

 

-  /**

-   * Subtraction operator for Half or num left operands.

-   */

-  Half operator-(f) {

-    return new Half(toDouble() - f.toDouble());

+  /// Subtraction operator for Half or num left operands.

+  Half operator -(dynamic f) {

+    double d = (f is Half) ? f.toDouble() : (f is num) ? f.toDouble() : 0;

+    return new Half(toDouble() - d.toDouble());

   }

 

-  Half operator*(f) {

-    return new Half(toDouble() * f.toDouble());

+  Half operator *(dynamic f) {

+    double d = (f is Half) ? f.toDouble() : (f is num) ? f.toDouble() : 0;

+    return new Half(toDouble() * d.toDouble());

   }

 

-  Half operator/(f) {

-    return new Half(toDouble() / f.toDouble());

+  Half operator /(dynamic f) {

+    double d = (f is Half) ? f.toDouble() : (f is num) ? f.toDouble() : 0;

+    return new Half(toDouble() / d.toDouble());

   }

 

-  /**

-   * Round to n-bit precision (n should be between 0 and 10).

-   * After rounding, the significand's 10-n least significant

-   * bits will be zero.

-   */

+  /// Round to n-bit precision (n should be between 0 and 10).

+  /// After rounding, the significand's 10-n least significant

+  /// bits will be zero.

   Half round(int n) {

     if (n >= 10) {

       return this;

@@ -122,7 +115,7 @@
     // up causes the significand to overflow.

 

     e >>= 9 - n;

-    e  += e & 1;

+    e += e & 1;

     e <<= 9 - n;

 

     // Check for exponent overflow.

@@ -138,81 +131,59 @@
     return new Half.fromBits(s | e);

   }

 

-  /**

-   * Returns true if h is a normalized number, a denormalized number or zero.

-   */

+  /// Returns true if h is a normalized number, a denormalized number or zero.

   bool isFinite() {

     int e = (_h >> 10) & 0x001f;

     return e < 31;

   }

 

-  /**

-   * Returns true if h is a normalized number.

-   */

+  /// Returns true if h is a normalized number.

   bool isNormalized() {

     int e = (_h >> 10) & 0x001f;

     return e > 0 && e < 31;

   }

 

-  /**

-   * Returns true if h is a denormalized number.

-   */

+  /// Returns true if h is a denormalized number.

   bool isDenormalized() {

     int e = (_h >> 10) & 0x001f;

-    int m =  _h & 0x3ff;

+    int m = _h & 0x3ff;

     return e == 0 && m != 0;

   }

 

-  /**

-   * Returns true if h is zero.

-   */

+  /// Returns true if h is zero.

   bool isZero() {

     return (_h & 0x7fff) == 0;

   }

 

-  /**

-   * Returns true if h is a NAN.

-   */

+  /// Returns true if h is a NAN.

   bool isNan() {

     int e = (_h >> 10) & 0x001f;

-    int m =  _h & 0x3ff;

+    int m = _h & 0x3ff;

     return e == 31 && m != 0;

   }

 

-  /**

-   * Returns true if h is a positive or a negative infinity.

-   */

+  /// Returns true if h is a positive or a negative infinity.

   bool isInfinity() {

     int e = (_h >> 10) & 0x001f;

-    int m =  _h & 0x3ff;

+    int m = _h & 0x3ff;

     return e == 31 && m == 0;

   }

 

-  /**

-   * Returns true if the sign bit of h is set (negative).

-   */

+  /// Returns true if the sign bit of h is set (negative).

   bool isNegative() {

     return (_h & 0x8000) != 0;

   }

 

-  /**

-   * Returns +infinity.

-   */

+  /// Returns +infinity.

   static Half posInf() => new Half.fromBits(0x7c00);

 

-  /**

-   * Returns -infinity.

-   */

+  /// Returns -infinity.

   static Half negInf() => new Half.fromBits(0xfc00);

 

-  /**

-   * Returns a NAN with the bit pattern 0111111111111111.

-   */

+  /// Returns a NAN with the bit pattern 0111111111111111.

   static Half qNan() => new Half.fromBits(0x7fff);

 

-  /**

-   * Returns a NAN with the bit pattern 0111110111111111.

-   */

+  /// Returns a NAN with the bit pattern 0111110111111111.

   static Half sNan() => new Half.fromBits(0x7dff);

 

   int bits() => _h;

@@ -229,9 +200,9 @@
     // resulting half number.

     // Adjust e, accounting for the different exponent bias

     // of float and half (127 versus 15).

-    int s =  (i >> 16) & 0x00008000;

+    int s = (i >> 16) & 0x00008000;

     int e = ((i >> 23) & 0x000000ff) - (127 - 15);

-    int m =   i        & 0x007fffff;

+    int m = i & 0x007fffff;

 

     // Now reassemble s, e and m into a half:

     if (e <= 0) {

@@ -294,14 +265,14 @@
       m = m + 0x00000fff + ((m >> 13) & 1);

 

       if (m & 0x00800000 != 0) {

-        m =  0;   // overflow in significand,

-        e += 1;   // adjust exponent

+        m = 0; // overflow in significand,

+        e += 1; // adjust exponent

       }

 

       // Handle exponent overflow

 

       if (e > 30) {

-        return s | 0x7c00;  // if this returns, the half becomes an

+        return s | 0x7c00; // if this returns, the half becomes an

       } // infinity with the same sign as f.

 

       // Assemble the half from s, e and m.

@@ -323,11 +294,11 @@
 

       if (e <= 0 || e >= 30) {

         // Special case

-        _eLut[i]         = 0;

+        _eLut[i] = 0;

         _eLut[i | 0x100] = 0;

       } else {

         // Common case - normalized half, no exponent overflow possible

-        _eLut[i]         =  (e << 10);

+        _eLut[i] = (e << 10);

         _eLut[i | 0x100] = ((e << 10) | 0x8000);

       }

     }

@@ -342,7 +313,7 @@
   static int _halfToFloat(int y) {

     int s = (y >> 15) & 0x00000001;

     int e = (y >> 10) & 0x0000001f;

-    int m =  y        & 0x000003ff;

+    int m = y & 0x000003ff;

 

     if (e == 0) {

       if (m == 0) {

@@ -352,7 +323,7 @@
         // Denormalized number -- renormalize it

         while ((m & 0x00000400) == 0) {

           m <<= 1;

-          e -=  1;

+          e -= 1;

         }

 

         e += 1;

diff --git a/image/lib/src/hdr/hdr_bloom.dart b/image/lib/src/hdr/hdr_bloom.dart
index 8580117..1b8bd5d 100755
--- a/image/lib/src/hdr/hdr_bloom.dart
+++ b/image/lib/src/hdr/hdr_bloom.dart
@@ -1,25 +1,23 @@
-import 'dart:math' as Math;

+import 'dart:math';

 import 'dart:typed_data';

 

 import 'hdr_image.dart';

 

-/**

- * Applies an HDR bloom filter to the image, in-place.

- */

-HdrImage hdrBloom(HdrImage hdr, {double radius: 0.01, double weight: 0.1}) {

+/// Applies an HDR bloom filter to the image, in-place.

+HdrImage hdrBloom(HdrImage hdr, {double radius = 0.01, double weight = 0.1}) {

   double _lerp(double t, double a, double b) => (1.0 - t) * a + t * b;

 

   //int nPix = xResolution * yResolution;

   // Possibly apply bloom effect to image

   if (radius > 0.0 && weight > 0.0) {

     // Compute image-space extent of bloom effect

-    int bloomSupport = (radius * Math.max(hdr.width, hdr.height)).ceil();

+    int bloomSupport = (radius * max(hdr.width, hdr.height)).ceil();

     int bloomWidth = bloomSupport ~/ 2;

     // Initialize bloom filter table

     Float32List bloomFilter = Float32List(bloomWidth * bloomWidth);

     for (int i = 0; i < bloomWidth * bloomWidth; ++i) {

-      double dist = Math.sqrt(i / bloomWidth);

-      bloomFilter[i] = Math.pow(Math.max(0.0, 1.0 - dist), 4.0);

+      double dist = sqrt(i / bloomWidth);

+      bloomFilter[i] = pow(max(0.0, 1.0 - dist), 4.0).toDouble();

     }

 

     // Apply bloom filter to image pixels

@@ -28,10 +26,10 @@
       for (int x = 0; x < hdr.width; ++x, ++offset) {

         // Compute bloom for pixel _(x,y)_

         // Compute extent of pixels contributing bloom

-        int x0 = Math.max(0, x - bloomWidth);

-        int x1 = Math.min(x + bloomWidth, hdr.width - 1);

-        int y0 = Math.max(0, y - bloomWidth);

-        int y1 = Math.min(y + bloomWidth, hdr.height - 1);

+        int x0 = max(0, x - bloomWidth);

+        int x1 = min(x + bloomWidth, hdr.width - 1);

+        int y0 = max(0, y - bloomWidth);

+        int y1 = min(y + bloomWidth, hdr.height - 1);

 

         double sumWt = 0.0;

         for (int by = y0; by <= y1; ++by) {

@@ -66,8 +64,10 @@
     for (int y = 0, offset = 0; y < hdr.height; ++y) {

       for (int x = 0; x < hdr.width; ++x, offset += 3) {

         hdr.setRed(x, y, _lerp(weight, hdr.getRed(x, y), bloomImage[offset]));

-        hdr.setGreen(x, y, _lerp(weight, hdr.getGreen(x, y), bloomImage[offset + 1]));

-        hdr.setBlue(x, y, _lerp(weight, hdr.getBlue(x, y), bloomImage[offset + 2]));

+        hdr.setGreen(

+            x, y, _lerp(weight, hdr.getGreen(x, y), bloomImage[offset + 1]));

+        hdr.setBlue(

+            x, y, _lerp(weight, hdr.getBlue(x, y), bloomImage[offset + 2]));

       }

     }

   }

diff --git a/image/lib/src/hdr/hdr_gamma.dart b/image/lib/src/hdr/hdr_gamma.dart
index caa92d3..3439b21 100755
--- a/image/lib/src/hdr/hdr_gamma.dart
+++ b/image/lib/src/hdr/hdr_gamma.dart
@@ -1,16 +1,14 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

 import 'hdr_image.dart';

 

-/**

- * Apply gamma scaling to the HDR image, in-place.

- */

-HdrImage hdrGamma(HdrImage hdr, {double gamma: 2.2}) {

+/// Apply gamma scaling to the HDR image, in-place.

+HdrImage hdrGamma(HdrImage hdr, {double gamma = 2.2}) {

   for (int y = 0; y < hdr.height; ++y) {

     for (int x = 0; x < hdr.width; ++x) {

-      double r = Math.pow(hdr.getRed(x, y), 1.0 / gamma);

-      double g = Math.pow(hdr.getGreen(x, y), 1.0 / gamma);

-      double b = Math.pow(hdr.getBlue(x, y), 1.0 / gamma);

+      var r = pow(hdr.getRed(x, y), 1.0 / gamma);

+      var g = pow(hdr.getGreen(x, y), 1.0 / gamma);

+      var b = pow(hdr.getBlue(x, y), 1.0 / gamma);

 

       hdr.setRed(x, y, r);

       hdr.setGreen(x, y, g);

diff --git a/image/lib/src/hdr/hdr_image.dart b/image/lib/src/hdr/hdr_image.dart
index d95299c..2cc4df0 100755
--- a/image/lib/src/hdr/hdr_image.dart
+++ b/image/lib/src/hdr/hdr_image.dart
@@ -3,10 +3,8 @@
 import '../image.dart';

 import 'hdr_slice.dart';

 

-/**

- * A high dynamic range RGBA image stored in 16-bit or 32-bit floating-point

- * channels.

- */

+/// A high dynamic range RGBA image stored in 16-bit or 32-bit floating-point

+/// channels.

 class HdrImage {

   static const int HALF = 1;

   static const int FLOAT = 2;

@@ -14,14 +12,19 @@
 

   /// Red value of a sample

   static const String R = 'R';

+

   /// Green value of a sample

   static const String G = 'G';

+

   /// Blue value of a sample

   static const String B = 'B';

+

   /// Alpha/opacity

   static const String A = 'A';

+

   /// Distance of the front of a sample from the viewer

   static const String Z = 'Z';

+

   /// A numerical identifier for the object represented by a sample.

   static const String ID = 'id';

 

@@ -32,12 +35,9 @@
   HdrSlice alpha;

   HdrSlice depth;

 

-  HdrImage() {

-  }

+  HdrImage();

 

-  /**

-   * Create an RGB[A] image.

-   */

+  /// Create an RGB[A] image.

   HdrImage.create(int width, int height, int channels, int format) {

     if (channels < 0 || channels > 4) {

       return;

@@ -52,9 +52,7 @@
     }

   }

 

-  /**

-   * Create a copy of the [other] HdrImage.

-   */

+  /// Create a copy of the [other] HdrImage.

   HdrImage.from(HdrImage other) {

     for (String ch in other.slices.keys) {

       HdrSlice slice = other.slices[ch];

@@ -62,10 +60,8 @@
     }

   }

 

-  /**

-   * Create an HDR image from a LDR [Image] by transforming the channel values

-   * to the range [0, 1].

-   */

+  /// Create an HDR image from a LDR [Image] by transforming the channel values

+  /// to the range [0, 1].

   HdrImage.fromImage(Image other) {

     addSlice(new HdrSlice(R, other.width, other.height, HALF));

     addSlice(new HdrSlice(G, other.width, other.height, HALF));

@@ -86,42 +82,28 @@
     }

   }

 

-  /**

-   * Does the image have any color channels?

-   */

+  /// Does the image have any color channels?

   bool get hasColor => red != null || green != null || blue != null;

 

-  /**

-   * Does the image have an alpha channel?

-   */

+  /// Does the image have an alpha channel?

   bool get hasAlpha => alpha != null;

 

-  /**

-   * Does the image have a depth channel?

-   */

+  /// Does the image have a depth channel?

   bool get hasDepth => depth != null;

 

-  /**

-   * The width of the framebuffer.

-   */

+  /// The width of the framebuffer.

   int get width => slices.isEmpty ? 0 : slices.values.first.width;

 

-  /**

-   * The height of the framebuffer.

-   */

+  /// The height of the framebuffer.

   int get height => slices.isEmpty ? 0 : slices.values.first.height;

 

-  /**

-   * Get the value of the red channel at the given pixel coordinates [x], [y].

-   */

+  /// Get the value of the red channel at the given pixel coordinates [x], [y].

   double getRed(int x, int y) {

     return red != null ? red.getFloat(x, y) : 0.0;

   }

 

-  /**

-   * Set the value of the red channel at the given pixel coordinates [x], [y].

-   */

-  void setRed(int x, int y, double c) {

+  /// Set the value of the red channel at the given pixel coordinates [x], [y].

+  void setRed(int x, int y, num c) {

     if (red != null) {

       red.setFloat(x, y, c);

     }

@@ -129,21 +111,17 @@
 

   void setRedInt(int x, int y, int c) {

     if (red != null) {

-      red.setInt(x,  y, c);

+      red.setInt(x, y, c);

     }

   }

 

-  /**

-   * Get the value of the green channel at the given pixel coordinates [x], [y].

-   */

+  /// Get the value of the green channel at the given pixel coordinates [x], [y].

   double getGreen(int x, int y) {

     return green != null ? green.getFloat(x, y) : 0.0;

   }

 

-  /**

-   * Set the value of the green channel at the given pixel coordinates [x], [y].

-   */

-  void setGreen(int x, int y, double c) {

+  /// Set the value of the green channel at the given pixel coordinates [x], [y].

+  void setGreen(int x, int y, num c) {

     if (green != null) {

       green.setFloat(x, y, c);

     }

@@ -151,21 +129,17 @@
 

   void setGreenInt(int x, int y, int c) {

     if (green != null) {

-      green.setInt(x,  y, c);

+      green.setInt(x, y, c);

     }

   }

 

-  /**

-   * Get the value of the blue channel at the given pixel coordinates [x], [y].

-   */

+  /// Get the value of the blue channel at the given pixel coordinates [x], [y].

   double getBlue(int x, int y) {

     return blue != null ? blue.getFloat(x, y) : 0.0;

   }

 

-  /**

-   * Set the value of the blue channel at the given pixel coordinates [x], [y].

-   */

-  void setBlue(int x, int y, double c) {

+  /// Set the value of the blue channel at the given pixel coordinates [x], [y].

+  void setBlue(int x, int y, num c) {

     if (blue != null) {

       blue.setFloat(x, y, c);

     }

@@ -177,16 +151,12 @@
     }

   }

 

-  /**

-   * Get the value of the alpha channel at the given pixel coordinates [x], [y].

-   */

+  /// Get the value of the alpha channel at the given pixel coordinates [x], [y].

   double getAlpha(int x, int y) {

     return alpha != null ? alpha.getFloat(x, y) : 0.0;

   }

 

-  /**

-   * Set the value of the alpha channel at the given pixel coordinates [x], [y].

-   */

+  /// Set the value of the alpha channel at the given pixel coordinates [x], [y].

   void setAlpha(int x, int y, double c) {

     if (alpha != null) {

       alpha.setFloat(x, y, c);

@@ -199,35 +169,25 @@
     }

   }

 

-  /**

-   * Get the value of the depth channel at the given pixel coordinates [x], [y].

-   */

+  /// Get the value of the depth channel at the given pixel coordinates [x], [y].

   double getDepth(int x, int y) {

     return depth != null ? depth.getFloat(x, y) : 0.0;

   }

 

-  /**

-   * Set the value of the depth channel at the given pixel coordinates [x], [y].

-   */

+  /// Set the value of the depth channel at the given pixel coordinates [x], [y].

   void setDepth(int x, int y, double c) {

     if (depth != null) {

       depth.setFloat(x, y, c);

     }

   }

 

-  /**

-   * Does this image contain the given channel?

-   */

+  /// Does this image contain the given channel?

   bool hasChannel(String ch) => slices.containsKey(ch);

 

-  /**

-   * Access a framebuffer slice by name.

-   */

-  HdrSlice operator[](String ch) => slices[ch];

+  /// Access a framebuffer slice by name.

+  HdrSlice operator [](String ch) => slices[ch];

 

-  /**

-   * Add a channel [slice] to the

-   */

+  /// Add a channel [slice] to the

   void addSlice(HdrSlice slice) {

     String ch = slice.name;

     slices[ch] = slice;

@@ -250,10 +210,8 @@
     }

   }

 

-  /**

-   * Convert the framebuffer to an floating-point image, as a sequence of

-   * floats in RGBA order.

-   */

+  /// Convert the framebuffer to an floating-point image, as a sequence of

+  /// floats in RGBA order.

   Float32List toFloatRgba() {

     Float32List rgba = Float32List(width * height * 4);

     int w = width;

@@ -270,4 +228,3 @@
     return rgba;

   }

 }

-

diff --git a/image/lib/src/hdr/hdr_slice.dart b/image/lib/src/hdr/hdr_slice.dart
index 2da0002..20e20ee 100755
--- a/image/lib/src/hdr/hdr_slice.dart
+++ b/image/lib/src/hdr/hdr_slice.dart
@@ -3,67 +3,62 @@
 import 'half.dart';

 import 'hdr_image.dart';

 

-/**

- * A slice is the data for an image framebuffer for a single channel.

- */

+/// A slice is the data for an image framebuffer for a single channel.

 class HdrSlice {

   final String name;

   final int width;

   final int height;

+

   /// Indicates the type of data stored by the slice, either [HdrImage.HALF],

   /// [HdrImage.FLOAT], or [HdrImage.UINT].

   final int type;

+

   /// [data] will be either Uint16List, Float32List, or Uint32List depending

   /// on the type being HALF, FLOAT or UINT respectively.

-  final data;

+  final dynamic data;

 

-  HdrSlice(this.name, int width, int height, int type) :

-    this.width = width,

-    this.height = height,

-    this.type = type,

-    data = type == HdrImage.HALF ? new Uint16List(width * height) :

-           type == HdrImage.FLOAT ? new Float32List(width * height) :

-           new Uint32List(width * height);

+  HdrSlice(this.name, int width, int height, int type)

+      : this.width = width,

+        this.height = height,

+        this.type = type,

+        data = type == HdrImage.HALF

+            ? new Uint16List(width * height)

+            : type == HdrImage.FLOAT

+                ? new Float32List(width * height)

+                : new Uint32List(width * height);

 

-  /**

-   * Create a copy of the [other] HdrSlice.

-   */

-  HdrSlice.from(HdrSlice other) :

-    name = other.name ,

-    width = other.width,

-    height = other.height,

-    type = other.type,

-    data = other.type == HdrImage.HALF ? new Uint16List.fromList(other.data) :

-      other.type == HdrImage.FLOAT ? new Float32List.fromList(other.data) :

-      new Uint32List.fromList(other.data);

+  /// Create a copy of the [other] HdrSlice.

+  HdrSlice.from(HdrSlice other)

+      : name = other.name,

+        width = other.width,

+        height = other.height,

+        type = other.type,

+        data = other.type == HdrImage.HALF

+            ? new Uint16List.fromList(other.data as List<int>)

+            : other.type == HdrImage.FLOAT

+                ? new Float32List.fromList(other.data as List<double>)

+                : new Uint32List.fromList(other.data as List<int>);

 

-  /**

-   * Get the raw bytes of the data buffer.

-   */

-  Uint8List getBytes() => new Uint8List.view(data.buffer);

+  /// Get the raw bytes of the data buffer.

+  Uint8List getBytes() => new Uint8List.view(data.buffer as ByteBuffer);

 

-  /**

-   * Does this channel store floating-point data?

-   */

+  /// Does this channel store floating-point data?

   bool get isFloat => type == HdrImage.FLOAT || type == HdrImage.HALF;

 

-  /**

-   * Get the float value of the sample at the coordinates [x],[y].

-   * [Half] samples are converted to double.

-   * An exception will occur if the slice stores UINT data.

-   */

+  /// Get the float value of the sample at the coordinates [x],[y].

+  /// [Half] samples are converted to double.

+  /// An exception will occur if the slice stores UINT data.

   double getFloat(int x, int y) {

     int pi = y * width + x;

-    double s = (type == HdrImage.HALF) ?

-               Half.HalfToDouble(data[pi]) : data[pi];

+    var s = (type == HdrImage.HALF)

+        ? Half.HalfToDouble(data[pi] as int)

+        : data[pi] as double;

     return s;

   }

 

-  /**

-   * Set the float value of the sample at the coordinates [x],[y] for

-   * [FLOAT] or [HALF] slices.

-   */

-  void setFloat(int x, int y, double v) {

+  /// Set the float value of the sample at the coordinates [x],[y] for

+  ///[FLOAT] or [HALF] slices.

+  void setFloat(int x, int y, num v) {

     int pi = y * width + x;

     if (type == HdrImage.FLOAT) {

       data[pi] = v;

@@ -72,19 +67,15 @@
     }

   }

 

-  /**

-   * Get the int value of the sample at the coordinates [x],[y].

-   * An exception will occur if the slice stores FLOAT or HALF data.

-   */

+  /// Get the int value of the sample at the coordinates [x],[y].

+  ///An exception will occur if the slice stores FLOAT or HALF data.

   int getInt(int x, int y) {

     int pi = y * width + x;

-    return data[pi];

+    return data[pi] as int;

   }

 

-  /**

-   * Set the int value of the sample at the coordinates [x],[y] for [UINT]

-   * slices.

-   */

+  /// Set the int value of the sample at the coordinates [x],[y] for [UINT]

+  /// slices.

   void setInt(int x, int y, int v) {

     int pi = y * width + x;

     data[pi] = v;

diff --git a/image/lib/src/hdr/hdr_to_image.dart b/image/lib/src/hdr/hdr_to_image.dart
index 00d3da9..e90e98d 100755
--- a/image/lib/src/hdr/hdr_to_image.dart
+++ b/image/lib/src/hdr/hdr_to_image.dart
@@ -1,27 +1,25 @@
-import 'dart:math' as Math;

+import 'dart:math' as math;

 import 'dart:typed_data';

 

 import '../image.dart';

 import '../image_exception.dart';

 import 'hdr_image.dart';

 

-/**

- * Convert a high dynamic range image to a low dynamic range image,

- * with optional exposure control.

- */

-Image hdrToImage(HdrImage hdr, {double exposure}) {

-  double _knee(double x, double f) {

-    return Math.log(x * f + 1.0) / f;

+/// Convert a high dynamic range image to a low dynamic range image,

+/// with optional exposure control.

+Image hdrToImage(HdrImage hdr, {num exposure}) {

+  num _knee(num x, num f) {

+    return math.log(x * f + 1.0) / f;

   }

 

-  double _gamma(double h, double m) {

-    double x = Math.max(0.0, h * m);

+  num _gamma(num h, num m) {

+    num x = math.max(0, h * m);

 

     if (x > 1.0) {

       x = 1.0 + _knee(x - 1, 0.184874);

     }

 

-    return (Math.pow(x, 0.4545) * 84.66);

+    return math.pow(x, 0.4545) * 84.66;

   }

 

   Image image = Image(hdr.width, hdr.height);

@@ -31,9 +29,9 @@
     throw new ImageException('Only RGB[A] images are currently supported.');

   }

 

-  double m = exposure != null ?

-             Math.pow(2.0, (exposure + 2.47393).clamp(-20.0, 20.0)) :

-             1.0;

+  num m = (exposure != null)

+      ? math.pow(2.0, (exposure + 2.47393).clamp(-20.0, 20.0))

+      : 1.0;

 

   for (int y = 0, di = 0; y < hdr.height; ++y) {

     for (int x = 0; x < hdr.width; ++x) {

@@ -51,7 +49,7 @@
         b = 0.0;

       }

 

-      double ri, gi, bi;

+      num ri, gi, bi;

       if (exposure != null) {

         ri = _gamma(r, m);

         gi = _gamma(g, m);

@@ -63,23 +61,23 @@
       }

 

       // Normalize the color

-      double mi = Math.max(ri, Math.max(gi, bi));

+      num mi = math.max(ri, math.max(gi, bi));

       if (mi > 255.0) {

         ri = 255.0 * (ri / mi);

         gi = 255.0 * (gi / mi);

         bi = 255.0 * (bi / mi);

       }

 

-      pixels[di++] = ri.toInt().clamp(0, 255);

-      pixels[di++] = gi.toInt().clamp(0, 255);

-      pixels[di++] = bi.toInt().clamp(0, 255);

+      pixels[di++] = ri.clamp(0, 255).toInt();

+      pixels[di++] = gi.clamp(0, 255).toInt();

+      pixels[di++] = bi.clamp(0, 255).toInt();

 

       if (hdr.alpha != null) {

         double a = hdr.alpha.getFloat(x, y);

         if (a.isInfinite || a.isNaN) {

           a = 1.0;

         }

-        pixels[di++] = (a * 255.0).toInt().clamp(0, 255);

+        pixels[di++] = (a * 255.0).clamp(0, 255).toInt();

       } else {

         pixels[di++] = 255;

       }

diff --git a/image/lib/src/hdr/reinhard_tone_map.dart b/image/lib/src/hdr/reinhard_tone_map.dart
index b32400e..c673aef 100755
--- a/image/lib/src/hdr/reinhard_tone_map.dart
+++ b/image/lib/src/hdr/reinhard_tone_map.dart
@@ -1,12 +1,10 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

 import 'hdr_image.dart';

 

-/**

- * Applies Reinhard tone mapping to the hdr image, in-place.

- */

+/// Applies Reinhard tone mapping to the hdr image, in-place.

 HdrImage reinhardToneMap(HdrImage hdr) {

-  const List<double> yw = const [0.212671, 0.715160, 0.072169 ];

+  const List<double> yw = const [0.212671, 0.715160, 0.072169];

 

   // Compute world adaptation luminance, _Ywa_

   double Ywa = 0.0;

@@ -18,12 +16,12 @@
 

       double lum = yw[0] * r + yw[1] * g + yw[2] * b;

       if (lum > 1.0e-4) {

-        Ywa += Math.log(lum);

+        Ywa += log(lum);

       }

     }

   }

 

-  Ywa = Math.exp(Ywa / (hdr.width * hdr.height));

+  Ywa = exp(Ywa / (hdr.width * hdr.height));

 

   double invY2 = 1.0 / (Ywa * Ywa);

 

diff --git a/image/lib/src/icc_profile_data.dart b/image/lib/src/icc_profile_data.dart
index 823cceb..c06d946 100755
--- a/image/lib/src/icc_profile_data.dart
+++ b/image/lib/src/icc_profile_data.dart
@@ -1,14 +1,9 @@
 import 'dart:typed_data';

 import 'package:archive/archive.dart';

 

-enum ICCPCompression {

-  none,

-  deflate

-}

+enum ICCPCompression { none, deflate }

 

-/**

- * ICC Profile data stored with an image.

- */

+/// ICC Profile data stored with an image.

 class ICCProfileData {

   String name = "";

   ICCPCompression compression;

@@ -27,7 +22,7 @@
     if (compression == ICCPCompression.deflate) {

       return data;

     }

-    data = ZLibEncoder().encode(data);

+    data = ZLibEncoder().encode(data) as Uint8List;

     compression = ICCPCompression.deflate;

     return data;

   }

@@ -38,7 +33,7 @@
     if (compression == ICCPCompression.deflate) {

       return data;

     }

-    data = ZLibDecoder().decodeBytes(data);

+    data = ZLibDecoder().decodeBytes(data) as Uint8List;

     compression = ICCPCompression.none;

     return data;

   }

diff --git a/image/lib/src/image.dart b/image/lib/src/image.dart
index d190340..e4c72fa 100755
--- a/image/lib/src/image.dart
+++ b/image/lib/src/image.dart
@@ -1,4 +1,4 @@
-import 'dart:math' as Math;

+import 'dart:math';

 import 'dart:typed_data';

 

 import 'color.dart';

@@ -7,149 +7,146 @@
 import 'image_exception.dart';

 import 'util/interpolation.dart';

 

-/**

- * A 32-bit image buffer where pixels are encoded into 32-bit unsigned ints.

- * You can use the methods in color to encode/decode the RGBA channels of a

- * color for a pixel.

- *

- * Pixels are stored in 32-bit unsigned integers in aabbggrr format.

- * This is to be consistent with HTML canvas data.  You can use

- * [getBytes] to access the pixel at the byte (channel) level, where there

- * are four bytes per pixel in red, green, blue, and alpha order.

- *

- * If this image is a frame of an animation as decoded by the [decodeFrame]

- * method of [Decoder], then the [xOffset], [yOffset], [width] and [height]

- * coordinates determine area of the canvas this image should be drawn into,

- * as some frames of an animation only modify part of the canvas (recording

- * the part of the frame that actually changes).  The [decodeAnimation] method

- * will always return the fully composed animation, so these coordinate

- * properties are not used.

- */

+/// A 32-bit image buffer where pixels are encoded into 32-bit unsigned ints.

+/// You can use the methods in color to encode/decode the RGBA channels of a

+/// color for a pixel.

+///

+/// Pixels are stored in 32-bit unsigned integers in aabbggrr format.

+/// This is to be consistent with HTML canvas data.  You can use

+/// [getBytes] to access the pixel at the byte (channel) level, where there

+/// are four bytes per pixel in red, green, blue, and alpha order.

+///

+/// If this image is a frame of an animation as decoded by the [decodeFrame]

+/// method of [Decoder], then the [xOffset], [yOffset], [width] and [height]

+/// coordinates determine area of the canvas this image should be drawn into,

+/// as some frames of an animation only modify part of the canvas (recording

+/// the part of the frame that actually changes).  The [decodeAnimation] method

+/// will always return the fully composed animation, so these coordinate

+/// properties are not used.

 class Image {

   /// 24-bit RGB image.

   static const int RGB = 3;

+

   /// 32-bit RGBA image.

   static const int RGBA = 4;

 

   /// When drawing this frame, the canvas should be left as it is.

   static const int DISPOSE_NONE = 0;

+

   /// When drawing this frame, the canvas should be cleared first.

   static const int DISPOSE_CLEAR = 1;

+

   /// When drawing this frame, the canvas should be reverted to how it was before drawing it.

   static const int DISPOSE_PREVIOUS = 2;

 

   /// No alpha blending should be done when drawing this frame (replace

   /// pixels in canvas).

   static const int BLEND_SOURCE = 0;

+

   /// Alpha blending should be used when drawing this frame (composited over

   /// the current canvas image).

   static const int BLEND_OVER = 1;

 

   /// Width of the image.

   final int width;

+

   /// Height of the image.

   final int height;

+

   /// x position at which to render the frame.

   int xOffset = 0;

+

   /// y position at which to render the frame.

   int yOffset = 0;

+

   /// How long this frame should be displayed, in milliseconds.

   /// A duration of 0 indicates no delay and the next frame will be drawn

   /// as quickly as it can.

   int duration = 0;

+

   /// Defines what should be done to the canvas when drawing this frame.

   int disposeMethod = DISPOSE_CLEAR;

+

   /// Defines the blending method (alpha compositing) to use when drawing this

   /// frame.

   int blendMethod = BLEND_OVER;

+

   /// Pixels are encoded into 4-byte integers, where each byte is an RGBA

   /// channel.

   final Uint32List data;

   ExifData exif;

   ICCProfileData iccProfile;

 

-  /**

-   * Create an image with the given dimensions and format.

-   */

-  Image(int width, int height, [this._format = RGBA, ExifData exif,

-        ICCProfileData iccp]) :

-    this.width = width,

-    this.height = height,

-    data = Uint32List(width * height),

-    exif = ExifData.from(exif),

-    iccProfile = iccp;

+  /// Create an image with the given dimensions and format.

+  Image(int width, int height,

+      [this._format = RGBA, ExifData exif, ICCProfileData iccp])

+      : this.width = width,

+        this.height = height,

+        data = Uint32List(width * height),

+        exif = ExifData.from(exif),

+        iccProfile = iccp;

 

-  /**

-   * Create a copy of the image [other].

-   */

-  Image.from(Image other) :

-    width = other.width,

-    height = other.height,

-    xOffset = other.xOffset,

-    yOffset = other.yOffset,

-    duration = other.duration,

-    disposeMethod = other.disposeMethod,

-    blendMethod = other.blendMethod,

-    _format = other._format,

-    data = Uint32List.fromList(other.data),

-    exif = ExifData.from(other.exif),

-    iccProfile = other.iccProfile;

+  /// Create a copy of the image [other].

+  Image.from(Image other)

+      : width = other.width,

+        height = other.height,

+        xOffset = other.xOffset,

+        yOffset = other.yOffset,

+        duration = other.duration,

+        disposeMethod = other.disposeMethod,

+        blendMethod = other.blendMethod,

+        _format = other._format,

+        data = Uint32List.fromList(other.data),

+        exif = ExifData.from(other.exif),

+        iccProfile = other.iccProfile;

 

-  /**

-   * Create an image from [bytes].

-   *

-   * [bytes] should be in RGB<A> format with a byte [0,255] for each channel.

-   * The length of [bytes] should be <3|4> * (width * height).

-   * [format] determines if there are 3 or 4 channels per pixel.

-   *

-   * For example, given an Html Canvas, you could create an image:

-   * var bytes = canvas.getContext('2d').getImageData(0, 0,

-   *   canvas.width, canvas.height).data;

-   * Image image = Image.fromBytes(canvas.width, canvas.height, bytes);

-   */

+  /// Create an image from [bytes].

+  ///

+  /// [bytes] should be in RGB<A> format with a byte [0,255] for each channel.

+  /// The length of [bytes] should be <3|4> * (width * height).

+  /// [format] determines if there are 3 or 4 channels per pixel.

+  ///

+  /// For example, given an Html Canvas, you could create an image:

+  /// var bytes = canvas.getContext('2d').getImageData(0, 0,

+  ///   canvas.width, canvas.height).data;

+  /// Image image = Image.fromBytes(canvas.width, canvas.height, bytes);

   Image.fromBytes(int width, int height, List<int> bytes,

-                  [this._format = RGBA, ExifData exif, ICCProfileData iccp]) :

-    this.width = width,

-    this.height = height,

-    // Create a uint32 view of the byte buffer.

-    // This assumes the system architecture is little-endian...

-    data = bytes is Uint8List ? new Uint32List.view(bytes.buffer) :

-            bytes is Uint8ClampedList ? new Uint32List.view(bytes.buffer) :

-            bytes is Uint32List ? new Uint32List.view(bytes.buffer) :

-            new Uint32List.view(new Uint8List.fromList(bytes).buffer),

-    exif = ExifData.from(exif),

-    iccProfile = iccp;

+      [this._format = RGBA, ExifData exif, ICCProfileData iccp])

+      : this.width = width,

+        this.height = height,

+        // Create a uint32 view of the byte buffer.

+        // This assumes the system architecture is little-endian...

+        data = bytes is Uint8List

+            ? new Uint32List.view(bytes.buffer)

+            : bytes is Uint8ClampedList

+                ? new Uint32List.view(bytes.buffer)

+                : bytes is Uint32List

+                    ? new Uint32List.view(bytes.buffer)

+                    : new Uint32List.view(new Uint8List.fromList(bytes).buffer),

+        exif = ExifData.from(exif),

+        iccProfile = iccp;

 

-  /**

-   * Clone this image.

-   */

+  /// Clone this image.

   Image clone() => new Image.from(this);

 

-  /**

-   * Get the RGBA bytes from the image.  You can use this to access the

-   * RGBA color channels directly, or to pass it to something like an

-   * Html canvas context.

-   *

-   * For example, given an Html Canvas, you could draw this image into the

-   * canvas:

-   * Html.ImageData d = context2D.createImageData(image.width, image.height);

-   * d.data.setRange(0, image.length, image.getBytes());

-   * context2D.putImageData(data, 0, 0);

-   */

-  Uint8List getBytes() =>

-    new Uint8List.view(data.buffer);

+  /// Get the RGBA bytes from the image.  You can use this to access the

+  /// RGBA color channels directly, or to pass it to something like an

+  /// Html canvas context.

+  ///

+  /// For example, given an Html Canvas, you could draw this image into the

+  /// canvas:

+  /// Html.ImageData d = context2D.createImageData(image.width, image.height);

+  /// d.data.setRange(0, image.length, image.getBytes());

+  /// context2D.putImageData(data, 0, 0);

+  Uint8List getBytes() => new Uint8List.view(data.buffer);

 

-  /**

-   * Get the format of the image, either [RGB] or [RGBA].

-   */

+  /// Get the format of the image, either [RGB] or [RGBA].

   int get format => _format;

 

-  /**

-   * Set the format of the image, either [RGB] or [RGBA].  The format is used

-   * for informational purposes and has no effect on the actual stored data,

-   * which is always in 4-byte RGBA format.

-   */

-  void set format(int f) {

+  /// Set the format of the image, either [RGB] or [RGBA].  The format is used

+  /// for informational purposes and has no effect on the actual stored data,

+  /// which is always in 4-byte RGBA format.

+  set format(int f) {

     if (f == _format) {

       return;

     }

@@ -159,26 +156,20 @@
     _format = f;

   }

 

-  /**

-   * How many color channels does the image have, 3 or 4?

-   * Note that internally, images always have 4 8-bit channels.

-   */

+  /// How many color channels does the image have, 3 or 4?

+  /// Note that internally, images always have 4 8-bit channels.

   int get numChannels => _format;

 

-  /**

-   * Set all of the pixels of the image to the given [color].

-   */

+  /// Set all of the pixels of the image to the given [color].

   Image fill(int color) {

     data.fillRange(0, data.length, color);

     return this;

   }

 

-  /**

-   * Add the colors of [other] to the pixels of this image.

-   */

-  Image operator+(Image other) {

-    int h = Math.min(height, other.height);

-    int w = Math.min(width, other.width);

+  /// Add the colors of [other] to the pixels of this image.

+  Image operator +(Image other) {

+    int h = min(height, other.height);

+    int w = min(width, other.width);

     for (int y = 0; y < h; ++y) {

       for (int x = 0; x < w; ++x) {

         int c1 = getPixel(x, y);

@@ -199,12 +190,10 @@
     return this;

   }

 

-  /**

-   * Subtract the colors of [other] from the pixels of this image.

-   */

-  Image operator-(Image other) {

-    int h = Math.min(height, other.height);

-    int w = Math.min(width, other.width);

+  /// Subtract the colors of [other] from the pixels of this image.

+  Image operator -(Image other) {

+    int h = min(height, other.height);

+    int w = min(width, other.width);

     for (int y = 0; y < h; ++y) {

       for (int x = 0; x < w; ++x) {

         int c1 = getPixel(x, y);

@@ -225,12 +214,10 @@
     return this;

   }

 

-  /**

-   * Multiply the colors of [other] with the pixels of this image.

-   */

-  Image operator*(Image other) {

-    int h = Math.min(height, other.height);

-    int w = Math.min(width, other.width);

+  /// Multiply the colors of [other] with the pixels of this image.

+  Image operator *(Image other) {

+    int h = min(height, other.height);

+    int w = min(width, other.width);

     for (int y = 0; y < h; ++y) {

       for (int x = 0; x < w; ++x) {

         int c1 = getPixel(x, y);

@@ -251,12 +238,10 @@
     return this;

   }

 

-  /**

-   * OR the colors of [other] to the pixels of this image.

-   */

-  Image operator|(Image other) {

-    int h = Math.min(height, other.height);

-    int w = Math.min(width, other.width);

+  /// OR the colors of [other] to the pixels of this image.

+  Image operator |(Image other) {

+    int h = min(height, other.height);

+    int w = min(width, other.width);

     for (int y = 0; y < h; ++y) {

       for (int x = 0; x < w; ++x) {

         int c1 = getPixel(x, y);

@@ -277,12 +262,10 @@
     return this;

   }

 

-  /**

-   * AND the colors of [other] with the pixels of this image.

-   */

-  Image operator&(Image other) {

-    int h = Math.min(height, other.height);

-    int w = Math.min(width, other.width);

+  /// AND the colors of [other] with the pixels of this image.

+  Image operator &(Image other) {

+    int h = min(height, other.height);

+    int w = min(width, other.width);

     for (int y = 0; y < h; ++y) {

       for (int x = 0; x < w; ++x) {

         int c1 = getPixel(x, y);

@@ -303,12 +286,10 @@
     return this;

   }

 

-  /**

-   * Modula the colors of [other] with the pixels of this image.

-   */

-  Image operator%(Image other) {

-    int h = Math.min(height, other.height);

-    int w = Math.min(width, other.width);

+  /// Modula the colors of [other] with the pixels of this image.

+  Image operator %(Image other) {

+    int h = min(height, other.height);

+    int w = min(width, other.width);

     for (int y = 0; y < h; ++y) {

       for (int x = 0; x < w; ++x) {

         int c1 = getPixel(x, y);

@@ -329,54 +310,34 @@
     return this;

   }

 

-  /**

-   * The size of the image buffer.

-   */

+  /// The size of the image buffer.

   int get length => data.length;

 

-  /**

-   * Get a pixel from the buffer.

-   */

-  int operator[](int index) => data[index];

+  /// Get a pixel from the buffer.

+  int operator [](int index) => data[index];

 

-  /**

-   * Set a pixel in the buffer.

-   */

-  void operator[]=(int index, int color) {

+  /// Set a pixel in the buffer.

+  void operator []=(int index, int color) {

     data[index] = color;

   }

 

-  /**

-   * Get the buffer index for the [x], [y] pixel coordinates.

-   */

+  /// Get the buffer index for the [x], [y] pixel coordinates.

   int index(int x, int y) => y * width + x;

 

-  /**

-   * Is the given pixel coordinates within the resolution of the image.

-   */

-  bool boundsSafe(int x, int y) =>

-    x >= 0 && x < width && y >= 0 && y < height;

+  /// Is the given pixel coordinates within the resolution of the image.

+  bool boundsSafe(int x, int y) => x >= 0 && x < width && y >= 0 && y < height;

 

-  /**

-   * Get the pixel from the given [x], [y] coordinate.

-   */

-  int getPixel(int x, int y) =>

-    boundsSafe(x, y) ? data[y * width + x] : 0;

+  /// Get the pixel from the given [x], [y] coordinate.

+  int getPixel(int x, int y) => boundsSafe(x, y) ? data[y * width + x] : 0;

 

-  /**

-   * Get the pixel from the given [x], [y] coordinate without check the bounds.

-   */

+  /// Get the pixel from the given [x], [y] coordinate without check the bounds.

   int getUnsafePixel(int x, int y) => data[y * width + x];

 

-  /**

-   * Get the pixel from the given [offset], index.

-   */

+  /// Get the pixel from the given [offset], index.

   int getUnsafePixel_(int offset) => data[offset];

 

-  /**

-   * Get the pixel using the given [interpolation] type for non-integer pixel

-   * coordinates.

-   */

+  /// Get the pixel using the given [interpolation] type for non-integer pixel

+  /// coordinates.

   int getPixelInterpolate(num fx, num fy, [int interpolation = LINEAR]) {

     if (interpolation == CUBIC) {

       return getPixelCubic(fx, fy);

@@ -386,21 +347,21 @@
     return getPixel(fx.toInt(), fy.toInt());

   }

 

-  /**

-   * Get the pixel using linear interpolation for non-integer pixel

-   * coordinates.

-   */

+  /// Get the pixel using linear interpolation for non-integer pixel

+  /// coordinates.

   int getPixelLinear(num fx, num fy) {

     int x = fx.toInt() - (fx >= 0 ? 0 : 1);

     int nx = x + 1;

     int y = fy.toInt() - (fy >= 0 ? 0 : 1);

     int ny = y + 1;

-    double dx = fx - x;

-    double dy = fy - y;

+    num dx = fx - x;

+    num dy = fy - y;

 

     int _linear(int Icc, int Inc, int Icn, int Inn) {

-      return (Icc + dx * (Inc - Icc + dy * (Icc + Inn - Icn - Inc)) +

-              dy * (Icn - Icc)).toInt();

+      return (Icc +

+              dx * (Inc - Icc + dy * (Icc + Inn - Icn - Inc)) +

+              dy * (Icn - Icc))

+          .toInt();

     }

 

     int Icc = getPixel(x, y);

@@ -415,10 +376,8 @@
         _linear(getAlpha(Icc), getAlpha(Inc), getAlpha(Icn), getAlpha(Inn)));

   }

 

-  /**

-   * Get the pixel using cubic interpolation for non-integer pixel

-   * coordinates.

-   */

+  /// Get the pixel using cubic interpolation for non-integer pixel

+  /// coordinates.

   int getPixelCubic(num fx, num fy) {

     int x = fx.toInt() - (fx >= 0.0 ? 0 : 1);

     int px = x - 1;

@@ -432,100 +391,106 @@
     var dx = fx - x;

     var dy = fy - y;

 

-    double _cubic(num dx, num Ipp, num Icp, num Inp, num Iap) =>

+    num _cubic(num dx, num Ipp, num Icp, num Inp, num Iap) =>

         Icp + 0.5 * (dx * (-Ipp + Inp) +

-        dx * dx * (2 * Ipp - 5 * Icp + 4 * Inp - Iap) +

-        dx * dx * dx * (-Ipp + 3 * Icp - 3 * Inp + Iap));

+                dx * dx * (2 * Ipp - 5 * Icp + 4 * Inp - Iap) +

+                dx * dx * dx * (-Ipp + 3 * Icp - 3 * Inp + Iap));

 

     int Ipp = getPixel(px, py);

     int Icp = getPixel(x, py);

     int Inp = getPixel(nx, py);

     int Iap = getPixel(ax, py);

-    double Ip0 = _cubic(dx, getRed(Ipp), getRed(Icp), getRed(Inp), getRed(Iap));

-    double Ip1 = _cubic(dx, getGreen(Ipp), getGreen(Icp), getGreen(Inp), getGreen(Iap));

-    double Ip2 = _cubic(dx, getBlue(Ipp), getBlue(Icp), getBlue(Inp), getBlue(Iap));

-    double Ip3 = _cubic(dx, getAlpha(Ipp), getAlpha(Icp), getAlpha(Inp), getAlpha(Iap));

+    num Ip0 = _cubic(dx, getRed(Ipp), getRed(Icp), getRed(Inp), getRed(Iap));

+    num Ip1 =

+        _cubic(dx, getGreen(Ipp), getGreen(Icp), getGreen(Inp), getGreen(Iap));

+    num Ip2 =

+        _cubic(dx, getBlue(Ipp), getBlue(Icp), getBlue(Inp), getBlue(Iap));

+    num Ip3 =

+        _cubic(dx, getAlpha(Ipp), getAlpha(Icp), getAlpha(Inp), getAlpha(Iap));

 

     int Ipc = getPixel(px, y);

     int Icc = getPixel(x, y);

     int Inc = getPixel(nx, y);

     int Iac = getPixel(ax, y);

-    double Ic0 = _cubic(dx, getRed(Ipc), getRed(Icc), getRed(Inc), getRed(Iac));

-    double Ic1 = _cubic(dx, getGreen(Ipc), getGreen(Icc), getGreen(Inc), getGreen(Iac));

-    double Ic2 = _cubic(dx, getBlue(Ipc), getBlue(Icc), getBlue(Inc), getBlue(Iac));

-    double Ic3 = _cubic(dx, getAlpha(Ipc), getAlpha(Icc), getAlpha(Inc), getAlpha(Iac));

+    num Ic0 = _cubic(dx, getRed(Ipc), getRed(Icc), getRed(Inc), getRed(Iac));

+    num Ic1 =

+        _cubic(dx, getGreen(Ipc), getGreen(Icc), getGreen(Inc), getGreen(Iac));

+    num Ic2 =

+        _cubic(dx, getBlue(Ipc), getBlue(Icc), getBlue(Inc), getBlue(Iac));

+    num Ic3 =

+        _cubic(dx, getAlpha(Ipc), getAlpha(Icc), getAlpha(Inc), getAlpha(Iac));

 

     int Ipn = getPixel(px, ny);

     int Icn = getPixel(x, ny);

     int Inn = getPixel(nx, ny);

     int Ian = getPixel(ax, ny);

-    double In0 = _cubic(dx, getRed(Ipn), getRed(Icn), getRed(Inn), getRed(Ian));

-    double In1 = _cubic(dx, getGreen(Ipn), getGreen(Icn), getGreen(Inn), getGreen(Ian));

-    double In2 = _cubic(dx, getBlue(Ipn), getBlue(Icn), getBlue(Inn), getBlue(Ian));

-    double In3 = _cubic(dx, getAlpha(Ipn), getAlpha(Icn), getAlpha(Inn), getAlpha(Ian));

+    num In0 = _cubic(dx, getRed(Ipn), getRed(Icn), getRed(Inn), getRed(Ian));

+    num In1 =

+        _cubic(dx, getGreen(Ipn), getGreen(Icn), getGreen(Inn), getGreen(Ian));

+    num In2 =

+        _cubic(dx, getBlue(Ipn), getBlue(Icn), getBlue(Inn), getBlue(Ian));

+    num In3 =

+        _cubic(dx, getAlpha(Ipn), getAlpha(Icn), getAlpha(Inn), getAlpha(Ian));

 

     int Ipa = getPixel(px, ay);

     int Ica = getPixel(x, ay);

     int Ina = getPixel(nx, ay);

     int Iaa = getPixel(ax, ay);

-    double Ia0 = _cubic(dx, getRed(Ipa), getRed(Ica), getRed(Ina), getRed(Iaa));

-    double Ia1 = _cubic(dx, getGreen(Ipa), getGreen(Ica), getGreen(Ina), getGreen(Iaa));

-    double Ia2 = _cubic(dx, getBlue(Ipa), getBlue(Ica), getBlue(Ina), getBlue(Iaa));

-    double Ia3 = _cubic(dx, getAlpha(Ipa), getAlpha(Ica), getAlpha(Ina), getAlpha(Iaa));

+    num Ia0 = _cubic(dx, getRed(Ipa), getRed(Ica), getRed(Ina), getRed(Iaa));

+    num Ia1 =

+        _cubic(dx, getGreen(Ipa), getGreen(Ica), getGreen(Ina), getGreen(Iaa));

+    num Ia2 =

+        _cubic(dx, getBlue(Ipa), getBlue(Ica), getBlue(Ina), getBlue(Iaa));

+    num Ia3 =

+        _cubic(dx, getAlpha(Ipa), getAlpha(Ica), getAlpha(Ina), getAlpha(Iaa));

 

-    double c0 = _cubic(dy, Ip0, Ic0, In0, Ia0);

-    double c1 = _cubic(dy, Ip1, Ic1, In1, Ia1);

-    double c2 = _cubic(dy, Ip2, Ic2, In2, Ia2);

-    double c3 = _cubic(dy, Ip3, Ic3, In3, Ia3);

+    num c0 = _cubic(dy, Ip0, Ic0, In0, Ia0);

+    num c1 = _cubic(dy, Ip1, Ic1, In1, Ia1);

+    num c2 = _cubic(dy, Ip2, Ic2, In2, Ia2);

+    num c3 = _cubic(dy, Ip3, Ic3, In3, Ia3);

 

     return getColor(c0.toInt(), c1.toInt(), c2.toInt(), c3.toInt());

   }

 

-  /**

-   * Set the pixel at the given [x], [y] coordinate to the [color].

-   *

-   * This simply replaces the existing color, it does not do any alpha

-   * blending.  Use [drawPixel] for that.

-   */

+  /// Set the pixel at the given [x], [y] coordinate to the [color].

+  ///

+  /// This simply replaces the existing color, it does not do any alpha

+  /// blending.  Use [drawPixel] for that.

   void setPixel(int x, int y, int color) {

+    data[y * width + x] = color;

+  }

+

+  void setPixelSafe(int x, int y, int color) {

     if (boundsSafe(x, y)) {

       data[y * width + x] = color;

     }

   }

 

-  /**

-   * Set the pixel at the given [x], [y] coordinate to the [color] without check the bounds.

-   *

-   * This simply replaces the existing color, it does not do any alpha

-   * blending.  Use [drawPixel] for that.

-   */

-  void setUnsafePixel(int x, int y, int color){

+  /// Set the pixel at the given [x], [y] coordinate to the [color] without

+  /// check the bounds.

+  ///

+  /// This simply replaces the existing color, it does not do any alpha

+  /// blending. Use [drawPixel] for that.

+  void setUnsafePixel(int x, int y, int color) {

     data[y * width + x] = color;

   }

 

-  /**

-   * Set the pixel at the given [offset] index to the [color] without check the bounds.

-   */

-  void setUnsafePixel_(int offset, int color){

+  /// Set the pixel at the given [offset] index to the [color] without check

+  /// the bounds.

+  void setUnsafePixel_(int offset, int color) {

     data[offset] = color;

   }

 

-  /**

-   * Set the pixel at the given [x], [y] coordinate to the color

-   * [r], [g], [b], [a].

-   *

-   * This simply replaces the existing color, it does not do any alpha

-   * blending.  Use [drawPixel] for that.

-   */

+  /// Set the pixel at the given [x], [y] coordinate to the color

+  /// [r], [g], [b], [a].

+  ///

+  /// This simply replaces the existing color, it does not do any alpha

+  /// blending.  Use [drawPixel] for that.

   void setPixelRGBA(int x, int y, int r, int g, int b, [int a = 0xff]) {

-    if (boundsSafe(x, y)) {

-      data[y * width + x] = getColor(r, g, b, a);

-    }

+    data[y * width + x] = getColor(r, g, b, a);

   }

 

-  /**

-   * Return the average gray value of the image.

-   */

+  /// Return the average gray value of the image.

   int getWhiteBalance() {

     final len = data.length;

     int r = 0;

diff --git a/image/lib/src/image_exception.dart b/image/lib/src/image_exception.dart
index e4d094c..bfaaffe 100755
--- a/image/lib/src/image_exception.dart
+++ b/image/lib/src/image_exception.dart
@@ -1,6 +1,4 @@
-/**

- * An exception thrown when there was a problem in the image library.

- */

+/// An exception thrown when there was a problem in the image library.

 class ImageException implements Exception {

   /// A message describing the error.

   final String message;

diff --git a/image/lib/src/internal/bit_operators.dart b/image/lib/src/internal/bit_operators.dart
index e5eae4a..53fde64 100755
--- a/image/lib/src/internal/bit_operators.dart
+++ b/image/lib/src/internal/bit_operators.dart
@@ -17,68 +17,69 @@
 }

 

 const List<int> SHIFT_BITS = const [

-  1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384,

-  32768, 65536];

+  1,

+  2,

+  4,

+  8,

+  16,

+  32,

+  64,

+  128,

+  256,

+  512,

+  1024,

+  2048,

+  4096,

+  8192,

+  16384,

+  32768,

+  65536

+];

 

-

-/**

- * Binary conversion of a uint8 to an int8.  This is equivalent in C to

- * typecasting an unsigned char to a char.

- */

+/// Binary conversion of a uint8 to an int8.  This is equivalent in C to

+/// typecasting an unsigned char to a char.

 int uint8ToInt8(int d) {

   __uint8[0] = d;

   return __uint8ToInt8[0];

 }

 

-/**

- * Binary conversion of a uint16 to an int16.  This is equivalent in C to

- * typecasting an unsigned short to a short.

- */

+/// Binary conversion of a uint16 to an int16.  This is equivalent in C to

+/// typecasting an unsigned short to a short.

 int uint16ToInt16(int d) {

   __uint16[0] = d;

   return __uint16ToInt16[0];

 }

 

-/**

- * Binary conversion of a uint32 to an int32.  This is equivalent in C to

- * typecasting an unsigned int to signed int.

- */

+/// Binary conversion of a uint32 to an int32.  This is equivalent in C to

+/// typecasting an unsigned int to signed int.

 int uint32ToInt32(int d) {

   __uint32[0] = d;

   return __uint32ToInt32[0];

 }

 

-/**

- * Binary conversion of a uint32 to an float32.  This is equivalent in C to

- * typecasting an unsigned int to float.

- */

+/// Binary conversion of a uint32 to an float32.  This is equivalent in C to

+/// typecasting an unsigned int to float.

 double uint32ToFloat32(int d) {

   __uint32[0] = d;

   return __uint32ToFloat32[0];

 }

 

-/**

- * Binary conversion of a uint64 to an float64.  This is equivalent in C to

- * typecasting an unsigned long long to double.

- */

+/// Binary conversion of a uint64 to an float64.  This is equivalent in C to

+/// typecasting an unsigned long long to double.

 double uint64ToFloat64(int d) {

   __uint64[0] = d;

   return __uint64ToFloat64[0];

 }

 

-/**

- * Binary conversion of an int32 to a uint32. This is equivalent in C to

- * typecasting an int to an unsigned int.

- */

+/// Binary conversion of an int32 to a uint32. This is equivalent in C to

+/// typecasting an int to an unsigned int.

 int int32ToUint32(int d) {

   __int32[0] = d;

   return __int32ToUint32[0];

 }

 

-/**

- * Binary conversion of a float32 to an uint32.  This is equivalent in C to

- * typecasting a float to unsigned int.

- */

+/// Binary conversion of a float32 to an uint32.  This is equivalent in C to

+/// typecasting a float to unsigned int.

 int float32ToUint32(double d) {

   __float32[0] = d;

   return __float32ToUint32[0];

@@ -101,4 +102,4 @@
 final Uint32List __float32ToUint32 = Uint32List.view(__float32.buffer);

 

 final Uint64List __uint64 = Uint64List(1);

-final Float64List __uint64ToFloat64 = Float64List.view(__uint64.buffer);
\ No newline at end of file
+final Float64List __uint64ToFloat64 = Float64List.view(__uint64.buffer);

diff --git a/image/lib/src/internal/clamp.dart b/image/lib/src/internal/clamp.dart
index 554bc6f..fc175a4 100755
--- a/image/lib/src/internal/clamp.dart
+++ b/image/lib/src/internal/clamp.dart
@@ -1,3 +1,3 @@
-int clamp(int x, int a, int b) => x.clamp(a, b);

+int clamp(int x, int a, int b) => x.clamp(a, b).toInt();

 

-int clamp255(int x) => x.clamp(0, 255);

+int clamp255(int x) => x.clamp(0, 255).toInt();

diff --git a/image/lib/src/transform/bake_orientation.dart b/image/lib/src/transform/bake_orientation.dart
index 13392e2..c57942c 100755
--- a/image/lib/src/transform/bake_orientation.dart
+++ b/image/lib/src/transform/bake_orientation.dart
@@ -3,12 +3,10 @@
 import 'flip.dart';

 import 'copy_rotate.dart';

 

-/**

- * If [image] has an orientation value in its exif data, this will rotate the

- * image so that it physically matches its orientation. This can be used to

- * bake the orientation of the image for image formats that don't support exif

- * data.

- */

+/// If [image] has an orientation value in its exif data, this will rotate the

+/// image so that it physically matches its orientation. This can be used to

+/// bake the orientation of the image for image formats that don't support exif

+/// data.

 Image bakeOrientation(Image image) {

   Image bakedImage = Image.from(image);

   if (!image.exif.hasOrientation || image.exif.orientation == 1) {

diff --git a/image/lib/src/transform/copy_crop.dart b/image/lib/src/transform/copy_crop.dart
index 4c03c09..5d6cbdb 100755
--- a/image/lib/src/transform/copy_crop.dart
+++ b/image/lib/src/transform/copy_crop.dart
@@ -1,8 +1,6 @@
 import '../image.dart';

 

-/**

- * Returns a cropped copy of [src].

- */

+/// Returns a cropped copy of [src].

 Image copyCrop(Image src, int x, int y, int w, int h) {

   Image dst = Image(w, h, src.format, src.exif, src.iccProfile);

 

diff --git a/image/lib/src/transform/copy_into.dart b/image/lib/src/transform/copy_into.dart
index b604fcc..396b30c 100755
--- a/image/lib/src/transform/copy_into.dart
+++ b/image/lib/src/transform/copy_into.dart
@@ -1,24 +1,27 @@
 import '../image.dart';

 import '../draw/draw_pixel.dart';

 

-/**

- * Copies a rectangular portion of one image to another image. [dst] is the

- * destination image, [src] is the source image identifier.

- *

- * In other words, copyInto will take an rectangular area from src of

- * width [src_w] and height [src_h] at position ([src_x],[src_y]) and place it

- * in a rectangular area of [dst] of width [dst_w] and height [dst_h] at

- * position ([dst_x],[dst_y]).

- *

- * If the source and destination coordinates and width and heights differ,

- * appropriate stretching or shrinking of the image fragment will be performed.

- * The coordinates refer to the upper left corner. This function can be used to

- * copy regions within the same image (if [dst] is the same as [src])

- * but if the regions overlap the results will be unpredictable.

- */

+/// Copies a rectangular portion of one image to another image. [dst] is the

+/// destination image, [src] is the source image identifier.

+///

+/// In other words, copyInto will take an rectangular area from src of

+/// width [src_w] and height [src_h] at position ([src_x],[src_y]) and place it

+/// in a rectangular area of [dst] of width [dst_w] and height [dst_h] at

+/// position ([dst_x],[dst_y]).

+///

+/// If the source and destination coordinates and width and heights differ,

+/// appropriate stretching or shrinking of the image fragment will be performed.

+/// The coordinates refer to the upper left corner. This function can be used to

+/// copy regions within the same image (if [dst] is the same as [src])

+/// but if the regions overlap the results will be unpredictable.

 Image copyInto(Image dst, Image src,

-               {int dstX, int dstY, int srcX, int srcY,

-                int srcW, int srcH, bool blend: true}) {

+    {int dstX,

+    int dstY,

+    int srcX,

+    int srcY,

+    int srcW,

+    int srcH,

+    bool blend = true}) {

   if (dstX == null) {

     dstX = 0;

   }

diff --git a/image/lib/src/transform/copy_rectify.dart b/image/lib/src/transform/copy_rectify.dart
index 6eebcdb..1ad7c65 100755
--- a/image/lib/src/transform/copy_rectify.dart
+++ b/image/lib/src/transform/copy_rectify.dart
@@ -1,12 +1,14 @@
 import '../image.dart';

 import '../util/point.dart';

 

-/**

- * Returns a copy of the [src] image, where the given rectangle

- * has been mapped to the full image.

- */

-Image copyRectify(Image src, {Point topLeft, Point topRight, Point bottomLeft,

-                  Point bottomRight, Image toImage = null}) {

+/// Returns a copy of the [src] image, where the given rectangle

+/// has been mapped to the full image.

+Image copyRectify(Image src,

+    {Point topLeft,

+    Point topRight,

+    Point bottomLeft,

+    Point bottomRight,

+    Image toImage}) {

   Image dst = toImage == null ? Image.from(src) : toImage;

   for (int y = 0; y < dst.height; ++y) {

     double v = y / (dst.height - 1);

@@ -14,9 +16,9 @@
       double u = x / (dst.width - 1);

       // bilinear interpolation

       Point srcPixelCoord = topLeft * (1 - u) * (1 - v) +

-                            topRight * (u) * (1 - v) +

-                            bottomLeft * (1 - u) * (v) +

-                            bottomRight * (u) * (v);

+          topRight * (u) * (1 - v) +

+          bottomLeft * (1 - u) * (v) +

+          bottomRight * (u) * (v);

       var srcPixel = src.getPixel(srcPixelCoord.xi, srcPixelCoord.yi);

       dst.setPixel(x, y, srcPixel);

     }

diff --git a/image/lib/src/transform/copy_resize.dart b/image/lib/src/transform/copy_resize.dart
index 03df52e..c5fb0a2 100755
--- a/image/lib/src/transform/copy_resize.dart
+++ b/image/lib/src/transform/copy_resize.dart
@@ -6,15 +6,13 @@
 import '../util/interpolation.dart';

 import 'bake_orientation.dart';

 

-/**

- * Returns a resized copy of the [src] image.

- * If [height] is -1, then it will be determined by the aspect

- * ratio of [src] and [width].

- * If [width] is -1, then it will be determined by the aspect ratio

- * of [src] and [height].

- */

-Image copyResize(Image src, int width, [int height = -1,

-                 int interpolation = NEAREST]) {

+/// Returns a resized copy of the [src] image.

+/// If [height] is -1, then it will be determined by the aspect

+/// ratio of [src] and [width].

+/// If [width] is -1, then it will be determined by the aspect ratio

+/// of [src] and [height].

+Image copyResize(Image src, int width,

+    [int height = -1, int interpolation = NEAREST]) {

   if (width <= 0 && height <= 0) {

     throw new ImageException('Invalid size');

   }

@@ -83,11 +81,11 @@
   } else {

     // Copy the pixels from this image to the new image.

     for (int y = 0; y < height; ++y) {

-     double y2 = (y * dy);

-     for (int x = 0; x < width; ++x) {

-       double x2 = (x * dx);

-       dst.setPixel(x, y, src.getPixelInterpolate(x2, y2, interpolation));

-     }

+      double y2 = (y * dy);

+      for (int x = 0; x < width; ++x) {

+        double x2 = (x * dx);

+        dst.setPixel(x, y, src.getPixelInterpolate(x2, y2, interpolation));

+      }

     }

   }

 

diff --git a/image/lib/src/transform/copy_resize_crop_square.dart b/image/lib/src/transform/copy_resize_crop_square.dart
new file mode 100755
index 0000000..c7080eb
--- /dev/null
+++ b/image/lib/src/transform/copy_resize_crop_square.dart
@@ -0,0 +1,42 @@
+import 'dart:typed_data';

+

+import '../image.dart';

+import '../image_exception.dart';

+

+/// Returns a resized and square cropped copy of the [src] image of [size] size.

+Image copyResizeCropSquare(Image src, int size) {

+  if (size <= 0) {

+    throw new ImageException('Invalid size');

+  }

+

+  int height = size;

+  int width = size;

+  if (src.width < src.height){

+    height = (size * (src.height / src.width)).toInt();

+  }

+  else if (src.width > src.height){

+    width = (size * (src.width / src.height)).toInt();

+  }

+

+  Image dst = Image(size, size, src.format, src.exif, src.iccProfile);

+

+  double dy = src.height / height;

+  double dx = src.width / width;

+

+  int xOffset = ((width - size) ~/ 2);

+  int yOffset = ((height - size) ~/ 2);

+

+  final scaleX = Int32List(size);

+  for (int x = 0; x < size; ++x) {

+    scaleX[x] = ((x + xOffset) * dx).toInt();

+  }

+

+  for (int y = 0; y < size; ++y) {

+    int y2 = ((y + yOffset) * dy).toInt();

+    for (int x = 0; x < size; ++x) {

+      dst.setPixel(x, y, src.getPixel(scaleX[x], y2));

+    }

+  }

+

+  return dst;

+}

diff --git a/image/lib/src/transform/copy_rotate.dart b/image/lib/src/transform/copy_rotate.dart
index 31e3c2f..124dfcb 100755
--- a/image/lib/src/transform/copy_rotate.dart
+++ b/image/lib/src/transform/copy_rotate.dart
@@ -1,13 +1,11 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

 import '../image.dart';

 import '../util/interpolation.dart';

 

-/**

- * Returns a copy of the [src] image, rotated by [angle] degrees.

- */

-Image copyRotate(Image src, num angle, {int interpolation: LINEAR}) {

-  double nangle = angle % 360.0;

+/// Returns a copy of the [src] image, rotated by [angle] degrees.

+Image copyRotate(Image src, num angle, {int interpolation = LINEAR}) {

+  num nangle = angle % 360.0;

 

   // Optimized version for orthogonal angles.

   if ((nangle % 90.0) == 0.0) {

@@ -17,8 +15,8 @@
     int iangle = nangle ~/ 90.0;

     switch (iangle) {

       case 1: // 90 deg.

-        Image dst = Image(src.height, src.width, src.format, src.exif,

-                              src.iccProfile);

+        Image dst =

+            Image(src.height, src.width, src.format, src.exif, src.iccProfile);

         for (int y = 0; y < dst.height; ++y) {

           for (int x = 0; x < dst.width; ++x) {

             dst.setPixel(x, y, src.getPixel(y, hm1 - x));

@@ -26,8 +24,8 @@
         }

         return dst;

       case 2: // 180 deg.

-        Image dst = Image(src.width, src.height, src.format, src.exif,

-                              src.iccProfile);

+        Image dst =

+            Image(src.width, src.height, src.format, src.exif, src.iccProfile);

         for (int y = 0; y < dst.height; ++y) {

           for (int x = 0; x < dst.width; ++x) {

             dst.setPixel(x, y, src.getPixel(wm1 - x, hm1 - y));

@@ -35,8 +33,8 @@
         }

         return dst;

       case 3: // 270 deg.

-        Image dst = Image(src.height, src.width, src.format, src.exif,

-                              src.iccProfile);

+        Image dst =

+            Image(src.height, src.width, src.format, src.exif, src.iccProfile);

         for (int y = 0; y < dst.height; ++y) {

           for (int x = 0; x < dst.width; ++x) {

             dst.setPixel(x, y, src.getPixel(wm1 - y, x));

@@ -49,9 +47,9 @@
   }

 

   // Generic angle.

-  double rad = (nangle * Math.pi / 180.0);

-  double ca = Math.cos(rad);

-  double sa = Math.sin(rad);

+  double rad = (nangle * pi / 180.0);

+  double ca = cos(rad);

+  double sa = sin(rad);

   double ux = (src.width * ca).abs();

   double uy = (src.width * sa).abs();

   double vx = (src.height * sa).abs();

@@ -61,14 +59,13 @@
   double dw2 = 0.5 * (ux + vx);

   double dh2 = 0.5 * (uy + vy);

 

-  Image dst = Image((ux + vx).toInt(), (uy + vy).toInt(), Image.RGBA,

-                        src.exif, src.iccProfile);

+  Image dst = Image((ux + vx).toInt(), (uy + vy).toInt(), Image.RGBA, src.exif,

+      src.iccProfile);

 

   for (int y = 0; y < dst.height; ++y) {

     for (int x = 0; x < dst.width; ++x) {

       int c = src.getPixelInterpolate(w2 + (x - dw2) * ca + (y - dh2) * sa,

-                                      h2 - (x - dw2) * sa + (y - dh2) * ca,

-                                      interpolation);

+          h2 - (x - dw2) * sa + (y - dh2) * ca, interpolation);

       dst.setPixel(x, y, c);

     }

   }

diff --git a/image/lib/src/transform/flip.dart b/image/lib/src/transform/flip.dart
index 8cb81fa..1c9be85 100755
--- a/image/lib/src/transform/flip.dart
+++ b/image/lib/src/transform/flip.dart
@@ -9,10 +9,8 @@
 /// Flip the image both horizontally and vertically.

 const int FLIP_BOTH = 3;

 

-/**

- * Flips the [src] image using the given [mode], which can be one of:

- * [FLIP_HORIZONTAL], [FLIP_VERTICAL], or [FLIP_BOTH].

- */

+/// Flips the [src] image using the given [mode], which can be one of:

+/// [FLIP_HORIZONTAL], [FLIP_VERTICAL], or [FLIP_BOTH].

 Image flip(Image src, int mode) {

   if (mode < 1 || mode > 3) {

     return src;

@@ -34,9 +32,7 @@
   return src;

 }

 

-/**

- * Flip the [src] image vertically.

- */

+/// Flip the [src] image vertically.

 Image flipVertical(Image src) {

   int w = src.width;

   int h = src.height;

@@ -53,9 +49,7 @@
   return src;

 }

 

-/**

- * Flip the src image horizontally.

- */

+/// Flip the src image horizontally.

 Image flipHorizontal(Image src) {

   int w = src.width;

   int h = src.height;

diff --git a/image/lib/src/transform/trim.dart b/image/lib/src/transform/trim.dart
index 1fa9f54..8c45129 100755
--- a/image/lib/src/transform/trim.dart
+++ b/image/lib/src/transform/trim.dart
@@ -5,10 +5,12 @@
 /// Trim an image to the top-left and bottom-right most non-transparent pixels,

 /// used by [findTrim] and [trim].

 const int TRIM_TRANSPARENT = 0;

+

 /// Trim an image to the top-left and bottom-right most pixels that are not the

 /// same as the top-left most pixel of the image,

 /// used by [findTrim] and [trim].

 const int TRIM_TOP_LEFT_COLOR = 1;

+

 /// Trim an image to the top-left and bottom-right most pixels that are not the

 /// same as the bottom-right most pixel of the image,

 /// used by [findTrim] and [trim].

@@ -17,31 +19,34 @@
 /// Trim the image down from the top,

 /// used by [findTrim] and [trim].

 const int TRIM_TOP = 1;

+

 /// Trim the image up from the bottom,

 /// used by [findTrim] and [trim].

 const int TRIM_BOTTOM = 2;

+

 /// Trim the left edge of the image,

 /// used by [findTrim] and [trim].

 const int TRIM_LEFT = 4;

+

 /// Trim the right edge of the image,

 /// used by [findTrim] and [trim].

 const int TRIM_RIGHT = 8;

+

 /// Trim all edges of the image,

 /// used by [findTrim] and [trim].

 const int TRIM_ALL = TRIM_TOP | TRIM_BOTTOM | TRIM_LEFT | TRIM_RIGHT;

 

-/**

- * Find the crop area to be used by the trim function. Returns the

- * coordinates as [x, y, width, height]. You could pass these coordinates

- * to the [copyCrop] function to crop the image.

- */

-List<int> findTrim(Image src, {int mode: TRIM_TRANSPARENT, sides: TRIM_ALL}) {

+/// Find the crop area to be used by the trim function. Returns the

+/// coordinates as [x, y, width, height]. You could pass these coordinates

+/// to the [copyCrop] function to crop the image.

+List<int> findTrim(Image src, {int mode = TRIM_TRANSPARENT,

+                   int sides = TRIM_ALL}) {

   int h = src.height;

   int w = src.width;

 

-  int bg = (mode == TRIM_TOP_LEFT_COLOR) ? src.getPixel(0, 0) :

-           (mode == TRIM_BOTTOM_RIGHT_COLOR) ? src.getPixel(w - 1, h - 1) :

-           0;

+  int bg = (mode == TRIM_TOP_LEFT_COLOR)

+      ? src.getPixel(0, 0)

+      : (mode == TRIM_BOTTOM_RIGHT_COLOR) ? src.getPixel(w - 1, h - 1) : 0;

 

   int xmin = w;

   int xmax = 0;

@@ -92,18 +97,16 @@
   return [xmin, ymin, w, h];

 }

 

-/**

- * Automatically crops the image by finding the corners of the image that

- * meet the [mode] criteria (not transparent or a different color).

- *

- * [mode] can be either [TRIM_TRANSPARENT], [TRIM_TOP_LEFT_CORNER] or

- * [TRIM_BOTTOM_RIGHT_CORNER].

- *

- * [sides] can be used to control which sides of the image get trimmed,

- * and can be any combination of [TRIM_TOP], [TRIM_BOTTOM], [TRIM_LEFT],

- * and [TRIM_RIGHT].

- */

-Image trim(Image src, {int mode: TRIM_TRANSPARENT, sides: TRIM_ALL}) {

+/// Automatically crops the image by finding the corners of the image that

+/// meet the [mode] criteria (not transparent or a different color).

+///

+/// [mode] can be either [TRIM_TRANSPARENT], [TRIM_TOP_LEFT_CORNER] or

+/// [TRIM_BOTTOM_RIGHT_CORNER].

+///

+/// [sides] can be used to control which sides of the image get trimmed,

+/// and can be any combination of [TRIM_TOP], [TRIM_BOTTOM], [TRIM_LEFT],

+/// and [TRIM_RIGHT].

+Image trim(Image src, {int mode = TRIM_TRANSPARENT, int sides = TRIM_ALL}) {

   if (mode == TRIM_TRANSPARENT && src.format == Image.RGB) {

     return new Image.from(src);

   }

@@ -111,8 +114,8 @@
   List<int> crop = findTrim(src, mode: mode, sides: sides);

 

   Image dst = Image(crop[2], crop[3], Image.RGBA, src.exif, src.iccProfile);

-  copyInto(dst, src, srcX: crop[0], srcY: crop[1],

-           srcW: crop[2], srcH: crop[3], blend: false);

+  copyInto(dst, src,

+      srcX: crop[0], srcY: crop[1], srcW: crop[2], srcH: crop[3], blend: false);

 

   return dst;

 }

diff --git a/image/lib/src/util/clip_line.dart b/image/lib/src/util/clip_line.dart
index 5456f4f..6ca7f46 100755
--- a/image/lib/src/util/clip_line.dart
+++ b/image/lib/src/util/clip_line.dart
@@ -1,11 +1,9 @@
-/**

- * Clip a line to a rectangle using the Cohen–Sutherland clipping algorithm.

- * [line] is a list of 4 ints <x1, y1, x2, y2>.

- * [rect] is a list of 4 ints <x1, y1, x2, y2>.

- * Results are stored in [line].

- * If [line] falls completely outside of [rect], false is returned, otherwise

- * true is returned.

- */

+/// Clip a line to a rectangle using the Cohen–Sutherland clipping algorithm.

+/// [line] is a list of 4 ints <x1, y1, x2, y2>.

+/// [rect] is a list of 4 ints <x1, y1, x2, y2>.

+/// Results are stored in [line].

+/// If [line] falls completely outside of [rect], false is returned, otherwise

+/// true is returned.

 bool clipLine(List<int> line, List<int> rect) {

   int x0 = line[0];

   int y0 = line[1];

@@ -17,24 +15,28 @@
   int ymax = rect[3];

 

   const int INSIDE = 0; // 0000

-  const int LEFT = 1;   // 0001

-  const int RIGHT = 2;  // 0010

+  const int LEFT = 1; // 0001

+  const int RIGHT = 2; // 0010

   const int BOTTOM = 4; // 0100

-  const int TOP = 8;    // 1000

+  const int TOP = 8; // 1000

 

   // Compute the bit code for a point (x, y) using the clip rectangle

   // bounded diagonally by (xmin, ymin), and (xmax, ymax)

   int _computeOutCode(int x, int y) {

     int code = INSIDE; // initialised as being inside of clip window

-    if (x < xmin) { // to the left of clip window

+    if (x < xmin) {

+      // to the left of clip window

       code |= LEFT;

-    } else if (x > xmax) { // to the right of clip window

+    } else if (x > xmax) {

+      // to the right of clip window

       code |= RIGHT;

     }

 

-    if (y < ymin) { // below the clip window

+    if (y < ymin) {

+      // below the clip window

       code |= BOTTOM;

-    } else if (y > ymax) { // above the clip window

+    } else if (y > ymax) {

+      // above the clip window

       code |= TOP;

     }

 

diff --git a/image/lib/src/util/input_buffer.dart b/image/lib/src/util/input_buffer.dart
index ba5338e..f064405 100755
--- a/image/lib/src/util/input_buffer.dart
+++ b/image/lib/src/util/input_buffer.dart
@@ -3,9 +3,7 @@
 import '../image_exception.dart';

 import '../internal/bit_operators.dart';

 

-/**

- * A buffer that can be read as a stream of bytes.

- */

+/// A buffer that can be read as a stream of bytes.

 class InputBuffer {

   List<int> buffer;

   final int start;

@@ -13,104 +11,83 @@
   int offset;

   bool bigEndian;

 

-  /**

-   * Create a InputStream for reading from a List<int>

-   */

-  InputBuffer(buffer, {this.bigEndian: false, int offset: 0, int length}) :

-    this.buffer = buffer,

-    this.start = offset,

-    this.offset = offset,

-    this.end = (length == null ? buffer.length : offset + length);

+  /// Create a InputStream for reading from a List<int>

+  InputBuffer(List<int> buffer, {this.bigEndian = false, int offset = 0,

+              int length})

+      : this.buffer = buffer,

+        this.start = offset,

+        this.offset = offset,

+        this.end = (length == null) ? buffer.length : offset + length;

 

-  /**

-   * Create a copy of [other].

-   */

-  InputBuffer.from(InputBuffer other, {int offset: 0, int length}) :

-    this.buffer = other.buffer,

-    this.offset = other.offset + offset,

-    this.start = other.start,

-    this.end = (length == null) ? other.end : other.offset + offset + length,

-    this.bigEndian = other.bigEndian;

+  /// Create a copy of [other].

+  InputBuffer.from(InputBuffer other, {int offset = 0, int length})

+      : this.buffer = other.buffer,

+        this.offset = other.offset + offset,

+        this.start = other.start,

+        this.end =

+            (length == null) ? other.end : other.offset + offset + length,

+        this.bigEndian = other.bigEndian;

 

-  /**

-   *  The current read position relative to the start of the buffer.

-   */

+  ///  The current read position relative to the start of the buffer.

   int get position => offset - start;

 

-  /**

-   * How many bytes are left in the stream.

-   */

+  /// How many bytes are left in the stream.

   int get length => end - offset;

 

-  /**

-   * Is the current position at the end of the stream?

-   */

+  /// Is the current position at the end of the stream?

   bool get isEOS => offset >= end;

 

-  /**

-   * Reset to the beginning of the stream.

-   */

+  /// Reset to the beginning of the stream.

   void rewind() {

     offset = start;

   }

 

-  /**

-   * Access the buffer relative from the current position.

-   */

-  int operator[](int index) => buffer[offset + index];

+  /// Access the buffer relative from the current position.

+  int operator [](int index) => buffer[offset + index];

 

-  /**

-   * Set a buffer element relative to the current position.

-   */

-  operator[]=(int index, int value) => buffer[offset + index] = value;

+  /// Set a buffer element relative to the current position.

+  operator []=(int index, int value) => buffer[offset + index] = value;

 

-  /**

-   * Copy data from [other] to this buffer, at [start] offset from the

-   * current read position, and [length] number of bytes.  [offset] is

-   * the offset in [other] to start reading.

-   */

-  void memcpy(int start, int length, other, [int offset = 0]) {

+  /// Copy data from [other] to this buffer, at [start] offset from the

+  /// current read position, and [length] number of bytes. [offset] is

+  /// the offset in [other] to start reading.

+  void memcpy(int start, int length, dynamic other, [int offset = 0]) {

     if (other is InputBuffer) {

       buffer.setRange(this.offset + start, this.offset + start + length,

-                      other.buffer, other.offset + offset);

+          other.buffer, other.offset + offset);

     } else {

       buffer.setRange(this.offset + start, this.offset + start + length,

-                      other, offset);

+          other as List<int>, offset);

     }

   }

 

-  /**

-   * Set a range of bytes in this buffer to [value], at [start] offset from the

-   * current read poisiton, and [length] number of bytes.

-   */

+  /// Set a range of bytes in this buffer to [value], at [start] offset from the

+  ///current read position, and [length] number of bytes.

   void memset(int start, int length, int value) {

     buffer.fillRange(offset + start, offset + start + length, value);

   }

 

-  /**

-   * Return a InputStream to read a subset of this stream.  It does not

-   * move the read position of this stream.  [position] is specified relative

-   * to the start of the buffer.  If [position] is not specified, the current

-   * read position is used. If [length] is not specified, the remainder of this

-   * stream is used.

-   */

-  InputBuffer subset(int count, {int position, int offset: 0}) {

+  /// Return a InputStream to read a subset of this stream.  It does not

+  /// move the read position of this stream.  [position] is specified relative

+  /// to the start of the buffer.  If [position] is not specified, the current

+  /// read position is used. If [length] is not specified, the remainder of this

+  /// stream is used.

+  InputBuffer subset(int count, {int position, int offset = 0}) {

     int pos = position != null ? start + position : this.offset;

     pos += offset;

 

-    return new InputBuffer(buffer, bigEndian: bigEndian, offset: pos,

-                           length: count);

+    return new InputBuffer(buffer,

+        bigEndian: bigEndian, offset: pos, length: count);

   }

 

-  /**

-   * Returns the position of the given [value] within the buffer, starting

-   * from the current read position with the given [offset].  The position

-   * returned is relative to the start of the buffer, or -1 if the [value]

-   * was not found.

-   */

+  /// Returns the position of the given [value] within the buffer, starting

+  /// from the current read position with the given [offset].  The position

+  /// returned is relative to the start of the buffer, or -1 if the [value]

+  /// was not found.

   int indexOf(int value, [int offset = 0]) {

     for (int i = this.offset + offset, end = this.offset + length;

-         i < end; ++i) {

+        i < end;

+        ++i) {

       if (buffer[i] == value) {

         return i - this.start;

       }

@@ -118,24 +95,18 @@
     return -1;

   }

 

-  /**

-   * Read [count] bytes from an [offset] of the current read position, without

-   * moving the read position.

-   */

+  /// Read [count] bytes from an [offset] of the current read position, without

+  /// moving the read position.

   InputBuffer peekBytes(int count, [int offset = 0]) {

     return subset(count, offset: offset);

   }

 

-  /**

-   * Move the read position by [count] bytes.

-   */

+  /// Move the read position by [count] bytes.

   void skip(int count) {

     offset += count;

   }

 

-  /**

-   * Read a single byte.

-   */

+  /// Read a single byte.

   int readByte() {

     return buffer[offset++];

   }

@@ -144,19 +115,15 @@
     return uint8ToInt8(readByte());

   }

 

-  /**

-   * Read [count] bytes from the stream.

-   */

+  /// Read [count] bytes from the stream.

   InputBuffer readBytes(int count) {

     InputBuffer bytes = subset(count);

     offset += bytes.length;

     return bytes;

   }

 

-  /**

-   * Read a null-terminated string, or if [len] is provided, that number of

-   * bytes returned as a string.

-   */

+  /// Read a null-terminated string, or if [len] is provided, that number of

+  /// bytes returned as a string.

   String readString([int len]) {

     if (len == null) {

       List<int> codes = [];

@@ -176,9 +143,7 @@
     return str;

   }

 

-  /**

-   * Read a 16-bit word from the stream.

-   */

+  /// Read a 16-bit word from the stream.

   int readUint16() {

     int b1 = buffer[offset++] & 0xff;

     int b2 = buffer[offset++] & 0xff;

@@ -188,16 +153,12 @@
     return (b2 << 8) | b1;

   }

 

-  /**

-   * Read a 16-bit word from the stream.

-   */

+  /// Read a 16-bit word from the stream.

   int readInt16() {

     return uint16ToInt16(readUint16());

   }

 

-  /**

-   * Read a 24-bit word from the stream.

-   */

+  /// Read a 24-bit word from the stream.

   int readUint24() {

     int b1 = buffer[offset++] & 0xff;

     int b2 = buffer[offset++] & 0xff;

@@ -208,9 +169,7 @@
     return b1 | (b2 << 8) | (b3 << 16);

   }

 

-  /**

-   * Read a 32-bit word from the stream.

-   */

+  /// Read a 32-bit word from the stream.

   int readUint32() {

     int b1 = buffer[offset++] & 0xff;

     int b2 = buffer[offset++] & 0xff;

@@ -222,30 +181,22 @@
     return (b4 << 24) | (b3 << 16) | (b2 << 8) | b1;

   }

 

-  /**

-   * Read a signed 32-bit integer from the stream.

-   */

+  /// Read a signed 32-bit integer from the stream.

   int readInt32() {

     return uint32ToInt32(readUint32());

   }

 

-  /**

-   * Read a 32-bit float.

-   */

+  /// Read a 32-bit float.

   double readFloat32() {

     return uint32ToFloat32(readUint32());

   }

 

-  /**

-   * Read a 64-bit float.

-   */

+  /// Read a 64-bit float.

   double readFloat64() {

     return uint64ToFloat64(readUint64());

   }

 

-  /**

-   * Read a 64-bit word form the stream.

-   */

+  /// Read a 64-bit word form the stream.

   int readUint64() {

     int b1 = buffer[offset++] & 0xff;

     int b2 = buffer[offset++] & 0xff;

@@ -256,11 +207,23 @@
     int b7 = buffer[offset++] & 0xff;

     int b8 = buffer[offset++] & 0xff;

     if (bigEndian) {

-      return (b1 << 56) | (b2 << 48) | (b3 << 40) | (b4 << 32) |

-             (b5 << 24) | (b6 << 16) | (b7 << 8) | b8;

+      return (b1 << 56) |

+          (b2 << 48) |

+          (b3 << 40) |

+          (b4 << 32) |

+          (b5 << 24) |

+          (b6 << 16) |

+          (b7 << 8) |

+          b8;

     }

-    return (b8 << 56) | (b7 << 48) | (b6 << 40) | (b5 << 32) |

-           (b4 << 24) | (b3 << 16) | (b2 << 8) | b1;

+    return (b8 << 56) |

+        (b7 << 48) |

+        (b6 << 40) |

+        (b5 << 32) |

+        (b4 << 24) |

+        (b3 << 16) |

+        (b2 << 8) |

+        b1;

   }

 

   List<int> toList([int offset = 0, int length = 0]) {

@@ -275,20 +238,19 @@
   Uint8List toUint8List([int offset = 0, int length]) {

     int len = length != null ? length : this.length - offset;

     if (buffer is Uint8List) {

-      Uint8List b = buffer;

-      return new Uint8List.view(b.buffer,

-                                b.offsetInBytes + this.offset + offset,

-                                len);

+      Uint8List b = buffer as Uint8List;

+      return new Uint8List.view(

+          b.buffer, b.offsetInBytes + this.offset + offset, len);

     }

-    return new Uint8List.fromList(buffer.sublist(this.offset + offset,

-                                                 this.offset + offset + len));

+    return new Uint8List.fromList(

+        buffer.sublist(this.offset + offset, this.offset + offset + len));

   }

 

   Uint32List toUint32List([int offset = 0]) {

     if (buffer is Uint8List) {

-      Uint8List b = buffer;

-      return new Uint32List.view(b.buffer,

-                                 b.offsetInBytes + this.offset + offset);

+      Uint8List b = buffer as Uint8List;

+      return new Uint32List.view(

+          b.buffer, b.offsetInBytes + this.offset + offset);

     }

     return new Uint32List.view(toUint8List().buffer);

   }

diff --git a/image/lib/src/util/interpolation.dart b/image/lib/src/util/interpolation.dart
index 3012b50..8d20784 100755
--- a/image/lib/src/util/interpolation.dart
+++ b/image/lib/src/util/interpolation.dart
@@ -2,9 +2,12 @@
 

 /// Nearest interopolation.

 const int NEAREST = 0;

+

 /// Linear interpolation.

 const int LINEAR = 1;

+

 /// Cubic interpolation.

 const int CUBIC = 2;

+

 /// Averaging interpolation

 const int AVERAGE = 3;

diff --git a/image/lib/src/util/min_max.dart b/image/lib/src/util/min_max.dart
index 913afd4..ddf68cc 100755
--- a/image/lib/src/util/min_max.dart
+++ b/image/lib/src/util/min_max.dart
@@ -1,10 +1,8 @@
 import '../color.dart';

 import '../image.dart';

 

-/**

- * Find the minimum and maximum color value in the image.

- * Returns a list as <[min], [max]>.

- */

+/// Find the minimum and maximum color value in the image.

+/// Returns a list as <[min], [max]>.

 List<int> minMax(Image image) {

   int min = 255;

   int max = 0;

@@ -45,4 +43,4 @@
   }

 

   return [min, max];

-}
\ No newline at end of file
+}

diff --git a/image/lib/src/util/neural_quantizer.dart b/image/lib/src/util/neural_quantizer.dart
index 1551bec..cb662e0 100755
--- a/image/lib/src/util/neural_quantizer.dart
+++ b/image/lib/src/util/neural_quantizer.dart
@@ -29,14 +29,12 @@
  * Dart port by Brendan Duncan.

  */

 

-/**

- * Compute a color map with a given number of colors that best represents

- * the given image.

- */

+/// Compute a color map with a given number of colors that best represents

+/// the given image.

 class NeuralQuantizer extends Quantizer {

   Uint8List colorMap;

 

-  NeuralQuantizer(Image image, {int numberOfColors=256}) {

+  NeuralQuantizer(Image image, {int numberOfColors = 256}) {

     if (image.width * image.height < MAX_PRIME) {

       throw new ImageException('Image is too small');

     }

@@ -47,9 +45,7 @@
     addImage(image);

   }

 

-  /**

-   * Add an image to the quantized color table.

-   */

+  /// Add an image to the quantized color table.

   void addImage(Image image) {

     _learn(image);

     _fix();

@@ -57,21 +53,14 @@
     _copyColorMap();

   }

 

-  /**

-   * How many colors are in the [colorMap]?

-   */

+  /// How many colors are in the [colorMap]?

   int get numColors => NET_SIZE;

 

-  /**

-   * Get a color from the [colorMap].

-   */

-  int color(int index) => getColor(colorMap[index * 3],

-                                   colorMap[index * 3 + 1],

-                                   colorMap[index * 3 + 2]);

+  /// Get a color from the [colorMap].

+  int color(int index) => getColor(

+      colorMap[index * 3], colorMap[index * 3 + 1], colorMap[index * 3 + 2]);

 

-  /**

-   * Find the index of the closest color to [c] in the [colorMap].

-   */

+  /// Find the index of the closest color to [c] in the [colorMap].

   int lookup(int c) {

     int r = getRed(c);

     int g = getGreen(c);

@@ -79,16 +68,12 @@
     return _inxSearch(b, g, r);

   }

 

-  /**

-     * Find the index of the closest color to [r],[g],[b] in the [colorMap].

-     */

+  /// Find the index of the closest color to [r],[g],[b] in the [colorMap].

   int lookupRGB(int r, int g, int b) {

     return _inxSearch(b, g, r);

   }

 

-  /**

-   * Find the color closest to [c] in the [colorMap].

-   */

+  /// Find the color closest to [c] in the [colorMap].

   int getQuantizedColor(int c) {

     int r = getRed(c);

     int g = getGreen(c);

@@ -99,9 +84,7 @@
     return getColor(colorMap[i], colorMap[i + 1], colorMap[i + 2], a);

   }

 

-  /**

-   * Convert the [image] to an index map, mapping to this [colorMap].

-   */

+  /// Convert the [image] to an index map, mapping to this [colorMap].

   Uint8List getIndexMap(Image image) {

     Uint8List map = Uint8List(image.width * image.height);

     for (int i = 0, len = image.length; i < len; ++i) {

@@ -136,15 +119,15 @@
 

   int _inxSearch(int b, int g, int r) {

     // Search for BGR values 0..255 and return colour index

-    int bestd = 1000;   // biggest possible dist is 256*3

+    int bestd = 1000; // biggest possible dist is 256*3

     int best = -1;

-    int i = _netIndex[g];  // index on g

-    int j = i - 1;    // start at netindex[g] and work outwards

+    int i = _netIndex[g]; // index on g

+    int j = i - 1; // start at netindex[g] and work outwards

 

     while ((i < NET_SIZE) || (j >= 0)) {

       if (i < NET_SIZE) {

         int p = i * 4;

-        int dist = _colorMap[p + 1] - g;    // inx key

+        int dist = _colorMap[p + 1] - g; // inx key

         if (dist >= bestd) {

           i = NET_SIZE; // stop iter

         } else {

@@ -220,9 +203,7 @@
     }

   }

 

-  /**

-   * Insertion sort of network and building of netindex[0..255]

-   */

+  /// Insertion sort of network and building of netindex[0..255]

   void _inxBuild() {

     int previouscol = 0;

     int startpos = 0;

@@ -233,9 +214,10 @@
 

       // find smallest in i..netsize-1

       for (int j = i + 1, q = p + 4; j < NET_SIZE; j++, q += 4) {

-        if (_colorMap[q + 1] < smallval) {    // index on g

+        if (_colorMap[q + 1] < smallval) {

+          // index on g

           smallpos = j;

-          smallval = _colorMap[q + 1];  // index on g

+          smallval = _colorMap[q + 1]; // index on g

         }

       }

 

@@ -267,13 +249,13 @@
           _netIndex[j] = i;

         }

         previouscol = smallval;

-         startpos = i;

+        startpos = i;

       }

     }

 

     _netIndex[previouscol] = (startpos + MAX_NET_POS) >> 1;

     for (int j = previouscol + 1; j < 256; j++) {

-       _netIndex[j] = MAX_NET_POS; // really 256

+      _netIndex[j] = MAX_NET_POS; // really 256

     }

   }

 

@@ -310,15 +292,16 @@
     int i = 0;

     while (i < samplePixels) {

       int p = image[pos];

-      int red   = getRed(p);

+      int red = getRed(p);

       int green = getGreen(p);

-      int blue  = getBlue(p);

+      int blue = getBlue(p);

 

       double b = blue.toDouble();

       double g = green.toDouble();

       double r = red.toDouble();

 

-      if (i == 0) {   // remember background colour

+      if (i == 0) {

+        // remember background colour

         _network[BG_COLOR * 3] = b;

         _network[BG_COLOR * 3 + 1] = g;

         _network[BG_COLOR * 3 + 2] = r;

@@ -327,11 +310,12 @@
       int j = _specialFind(b, g, r);

       j = j < 0 ? _contest(b, g, r) : j;

 

-      if (j >= SPECIALS) {   // don't learn for specials

+      if (j >= SPECIALS) {

+        // don't learn for specials

         double a = (1.0 * alpha) / INIT_ALPHA;

         _alterSingle(a, j, b, g, r);

         if (rad > 0) {

-          _alterNeighbors(a, rad, j, b, g, r);   // alter neighbours

+          _alterNeighbors(a, rad, j, b, g, r); // alter neighbours

         }

       }

 

@@ -356,12 +340,12 @@
     // Move neuron i towards biased (b,g,r) by factor alpha

     int p = i * 3;

     _network[p] -= (alpha * (_network[p] - b));

-    _network[p + 1] -= (alpha*(_network[p + 1] - g));

-    _network[p + 2] -= (alpha*(_network[p + 2] - r));

+    _network[p + 1] -= (alpha * (_network[p + 1] - g));

+    _network[p + 2] -= (alpha * (_network[p + 2] - r));

   }

 

-  void _alterNeighbors(double alpha, int rad, int i,

-                       double b, double g, double r) {

+  void _alterNeighbors(

+      double alpha, int rad, int i, double b, double g, double r) {

     int lo = i - rad;

     if (lo < SPECIALS - 1) {

       lo = SPECIALS - 1;

@@ -450,11 +434,11 @@
   }

 

   void _setupArrays() {

-    _network[0] = 0.0;  // black

+    _network[0] = 0.0; // black

     _network[1] = 0.0;

     _network[2] = 0.0;

 

-    _network[3] = 255.0;  // white

+    _network[3] = 255.0; // white

     _network[4] = 255.0;

     _network[5] = 255.0;

 

@@ -497,7 +481,7 @@
   static const double BETA_GAMMA = BETA * GAMMA;

 

   /// the network itself

-  List<double> _network ;

+  List<double> _network;

   Int32List _colorMap;

   Int32List _netIndex = Int32List(256);

   // bias and freq arrays for learning

@@ -507,10 +491,10 @@
   // four primes near 500 - assume no image has a length so large

   // that it is divisible by all four primes

 

-  static const int PRIME1  = 499;

-  static const int PRIME2  = 491;

-  static const int PRIME3  = 487;

-  static const int PRIME4  = 503;

+  static const int PRIME1 = 499;

+  static const int PRIME2 = 491;

+  static const int PRIME3 = 487;

+  static const int PRIME4 = 503;

   static const int MAX_PRIME = PRIME4;

 

   int _sampleFac = 1;

diff --git a/image/lib/src/util/octree_quantizer.dart b/image/lib/src/util/octree_quantizer.dart
index ee1ed43..f9f4a7a 100755
--- a/image/lib/src/util/octree_quantizer.dart
+++ b/image/lib/src/util/octree_quantizer.dart
@@ -7,7 +7,7 @@
 class OctreeQuantizer extends Quantizer {

   _OctreeNode _root;

 

-  OctreeQuantizer(Image image, {int numberOfColors=256}) {

+  OctreeQuantizer(Image image, {int numberOfColors = 256}) {

     _root = _OctreeNode(0, 0, null);

 

     _HeapNode heap = _HeapNode();

@@ -33,9 +33,7 @@
     }

   }

 

-  /**

-   * Find the index of the closest color to [c] in the [colorMap].

-   */

+  /// Find the index of the closest color to [c] in the [colorMap].

   int getQuantizedColor(int c) {

     int r = getRed(c);

     int g = getGreen(c);

@@ -44,8 +42,8 @@
 

     for (int bit = 1 << 7; bit != 0; bit >>= 1) {

       int i = ((g & bit) != 0 ? 1 : 0) * 4 +

-              ((r & bit) != 0 ? 1 : 0) * 2 +

-              ((b & bit) != 0 ? 1 : 0);

+          ((r & bit) != 0 ? 1 : 0) * 2 +

+          ((b & bit) != 0 ? 1 : 0);

       if (root.children[i] == null) {

         break;

       }

@@ -71,12 +69,12 @@
     return (ac < bc) ? -1 : (ac > bc) ? 1 : 0;

   }

 

-

   _OctreeNode _nodeInsert(_OctreeNode root, int r, int g, int b) {

     int depth = 0;

     for (int bit = 1 << 7; ++depth < 8; bit >>= 1) {

       int i = ((g & bit) != 0 ? 1 : 0) * 4 +

-          ((r & bit) != 0 ? 1 : 0) * 2 + ((b & bit) != 0 ? 1 : 0);

+          ((r & bit) != 0 ? 1 : 0) * 2 +

+          ((b & bit) != 0 ? 1 : 0);

       if (root.children[i] == null) {

         root.children[i] = _OctreeNode(i, depth, root);

       }

@@ -185,7 +183,7 @@
   int count = 0;

   int heap_idx = 0;

   List<_OctreeNode> children = List<_OctreeNode>(8);

-  _OctreeNode parent = null;

+  _OctreeNode parent;

   int childCount = 0;

   int childIndex = 0;

   int flags = 0;

diff --git a/image/lib/src/util/output_buffer.dart b/image/lib/src/util/output_buffer.dart
index 8de0a06..4d50e08 100755
--- a/image/lib/src/util/output_buffer.dart
+++ b/image/lib/src/util/output_buffer.dart
@@ -6,35 +6,27 @@
   int length;

   final bool bigEndian;

 

-  /**

-   * Create a byte buffer for writing.

-   */

-  OutputBuffer({int size: _BLOCK_SIZE, this.bigEndian: false}) :

-    _buffer = Uint8List(size == null ? _BLOCK_SIZE : size),

-    length = 0;

+  /// Create a byte buffer for writing.

+  OutputBuffer({int size = _BLOCK_SIZE, this.bigEndian = false})

+      : _buffer = Uint8List(size == null ? _BLOCK_SIZE : size),

+        length = 0;

 

   void rewind() {

     length = 0;

   }

 

-  /**

-   * Get the resulting bytes from the buffer.

-   */

+  /// Get the resulting bytes from the buffer.

   List<int> getBytes() {

     return new Uint8List.view(_buffer.buffer, 0, length);

   }

 

-  /**

-   * Clear the buffer.

-   */

+  /// Clear the buffer.

   void clear() {

     _buffer = Uint8List(_BLOCK_SIZE);

     length = 0;

   }

 

-  /**

-   * Write a byte to the end of the buffer.

-   */

+  /// Write a byte to the end of the buffer.

   void writeByte(int value) {

     if (length == _buffer.length) {

       _expandBuffer();

@@ -42,9 +34,7 @@
     _buffer[length++] = value & 0xff;

   }

 

-  /**

-   * Write a set of bytes to the end of the buffer.

-   */

+  /// Write a set of bytes to the end of the buffer.

   void writeBytes(List<int> bytes, [int len]) {

     if (len == null) {

       len = bytes.length;

@@ -64,9 +54,7 @@
     length += bytes.length;

   }

 

-  /**

-   * Write a 16-bit word to the end of the buffer.

-   */

+  /// Write a 16-bit word to the end of the buffer.

   void writeUint16(int value) {

     if (bigEndian) {

       writeByte((value >> 8) & 0xff);

@@ -77,9 +65,7 @@
     writeByte((value >> 8) & 0xff);

   }

 

-  /**

-   * Write a 32-bit word to the end of the buffer.

-   */

+  /// Write a 32-bit word to the end of the buffer.

   void writeUint32(int value) {

     if (bigEndian) {

       writeByte((value >> 24) & 0xff);

@@ -94,12 +80,10 @@
     writeByte((value >> 24) & 0xff);

   }

 

-  /**

-   * Return the subset of the buffer in the range [start:end].

-   * If [start] or [end] are < 0 then it is relative to the end of the buffer.

-   * If [end] is not specified (or null), then it is the end of the buffer.

-   * This is equivalent to the python list range operator.

-   */

+  /// Return the subset of the buffer in the range [start:end].

+  /// If [start] or [end] are < 0 then it is relative to the end of the buffer.

+  /// If [end] is not specified (or null), then it is the end of the buffer.

+  /// This is equivalent to the python list range operator.

   List<int> subset(int start, [int end]) {

     if (start < 0) {

       start = (length) + start;

@@ -114,12 +98,11 @@
     return new Uint8List.view(_buffer.buffer, start, end - start);

   }

 

-  /**

-   * Grow the buffer to accommodate additional data.

-   */

+  /// Grow the buffer to accommodate additional data.

   void _expandBuffer([int required]) {

-    int blockSize = (required != null) ? required :

-                    (_buffer.length == 0) ? _BLOCK_SIZE : (_buffer.length * 2);

+    int blockSize = (required != null)

+        ? required

+        : (_buffer.isEmpty) ? _BLOCK_SIZE : (_buffer.length * 2);

     Uint8List newBuffer = Uint8List(_buffer.length + blockSize);

     newBuffer.setRange(0, _buffer.length, _buffer);

     _buffer = newBuffer;

diff --git a/image/lib/src/util/point.dart b/image/lib/src/util/point.dart
index 8378713..49e20eb 100755
--- a/image/lib/src/util/point.dart
+++ b/image/lib/src/util/point.dart
@@ -1,22 +1,28 @@
 

+/// 2-dimensional point

 class Point {

   num x;

   num y;

 

-  get xi { return x.toInt(); }

-  get yi { return y.toInt(); }

+  int get xi {

+    return x.toInt();

+  }

+

+  int get yi {

+    return y.toInt();

+  }

 

   Point([this.x = 0, this.y = 0]);

 

   Point.from(Point other)

-    : x = other.x

-    , y = other.y;

+      : x = other.x,

+        y = other.y;

 

-  Point operator*(double s) {

+  Point operator *(double s) {

     return Point(x * s, y * s);

   }

 

-  Point operator+(Point rhs) {

+  Point operator +(Point rhs) {

     return Point(x + rhs.x, y + rhs.y);

   }

 }

diff --git a/image/lib/src/util/quantizer.dart b/image/lib/src/util/quantizer.dart
index 0770797..ed4252f 100755
--- a/image/lib/src/util/quantizer.dart
+++ b/image/lib/src/util/quantizer.dart
@@ -1,7 +1,4 @@
-

 abstract class Quantizer {

-  /**

-   * Find the index of the closest color to [c] in the [colorMap].

-   */

+  /// Find the index of the closest color to [c] in the [colorMap].

   int getQuantizedColor(int c);

 }

diff --git a/image/lib/src/util/random.dart b/image/lib/src/util/random.dart
index 9ce006f..020235a 100755
--- a/image/lib/src/util/random.dart
+++ b/image/lib/src/util/random.dart
@@ -1,17 +1,13 @@
-import 'dart:math' as Math;

+import 'dart:math';

 

-/**

- * Return a random variable between [-1,1].

- */

-double crand(Math.Random rand) {

+/// Return a random variable between [-1,1].

+double crand(Random rand) {

   return 1.0 - 2.0 * rand.nextDouble();

 }

 

-/**

- * Return a random variable following a gaussian distribution and a standard

- * deviation of 1.

- */

-double grand(Math.Random rand) {

+/// Return a random variable following a gaussian distribution and a standard

+/// deviation of 1.

+double grand(Random rand) {

   double x1, w;

   do {

     double x2 = 2.0 * rand.nextDouble() - 1.0;

@@ -19,21 +15,19 @@
     w = x1 * x1 + x2 * x2;

   } while (w <= 0.0 || w >= 1.0);

 

-  return x1 * Math.sqrt((-2.0 * Math.log(w))  /w);

+  return x1 * sqrt((-2.0 * log(w)) / w);

 }

 

-/**

- * Return a random variable following a Poisson distribution of parameter [z].

- */

-int prand(Math.Random rand, double z) {

+/// Return a random variable following a Poisson distribution of parameter [z].

+int prand(Random rand, double z) {

   if (z <= 1.0e-10) {

     return 0;

   }

   if (z > 100) {

-    return ((Math.sqrt(z) * grand(rand)) + z).toInt();

+    return ((sqrt(z) * grand(rand)) + z).toInt();

   }

   int k = 0;

-  double y = Math.exp(-z);

+  double y = exp(-z);

   for (double s = 1.0; s >= y; ++k) {

     s *= rand.nextDouble();

   }

diff --git a/image/pubspec.yaml b/image/pubspec.yaml
index 08b84c2..d771c52 100755
--- a/image/pubspec.yaml
+++ b/image/pubspec.yaml
@@ -1,5 +1,5 @@
 name: image

-version: 2.0.8

+version: 2.0.9

 author: Brendan Duncan <brendanduncan@gmail.com>

 description: Provides server and web apps the ability to load, manipulate, and save images with various image file formats including PNG, JPEG, GIF, WebP, TIFF, TGA, PSD, PVR, and OpenEXR.

 homepage: https://github.com/brendan-duncan/image

@@ -11,3 +11,4 @@
   xml: '>=3.2.5 <4.0.0'

 dev_dependencies:

   test: '>=0.12.42 <2.0.0'

+  pedantic: ^1.0.0

diff --git a/image/web/filter_lab.dart b/image/web/filter_lab.dart
index c56498e..445253a 100755
--- a/image/web/filter_lab.dart
+++ b/image/web/filter_lab.dart
@@ -1,16 +1,16 @@
-import 'dart:html' as Html;

+import 'dart:html';

 import 'package:image/image.dart';

 

-Html.ImageData filterImageData;

-Html.CanvasElement canvas;

-Html.DivElement logDiv;

+ImageData filterImageData;

+CanvasElement canvas;

+DivElement logDiv;

 Image origImage;

 

-void _addControl(String label, String value, Html.DivElement parent,

-                 callback) {

-  Html.LabelElement amountLabel = Html.LabelElement();

+void _addControl(String label, String value, DivElement parent,

+                 dynamic callback) {

+  LabelElement amountLabel = LabelElement();

   amountLabel.text = label + ':';

-  var amountEdit = Html.InputElement();

+  var amountEdit = InputElement();

   amountEdit.value = value;

   amountEdit.id = label + '_edit';

   amountEdit.onChange.listen((e) {

@@ -18,24 +18,24 @@
       double d = double.parse(amountEdit.value);

       callback(d);

     } catch (e) {

+      print(e);

     }

   });

   amountLabel.htmlFor = label + '_edit';

   parent.append(amountLabel);

   parent.append(amountEdit);

-  parent.append(new Html.ParagraphElement());

+  parent.append(new ParagraphElement());

 }

 

-

 void testSepia() {

-  Html.DivElement sidebar = Html.document.querySelector('#sidebar');

+  var sidebar = document.querySelector('#sidebar') as DivElement;

   sidebar.children.clear();

 

-  var label = Html.Element.tag('h1');

+  var label = Element.tag('h1');

   label.text = 'Sepia';

   sidebar.children.add(label);

 

-  double amount = 1.0;

+  num amount = 1.0;

 

   void _apply() {

     Stopwatch t = Stopwatch();

@@ -44,8 +44,8 @@
     image = sepia(image, amount: amount);

 

     // Fill the buffer with our image data.

-    filterImageData.data.setRange(0, filterImageData.data.length,

-                                  image.getBytes());

+    filterImageData.data

+        .setRange(0, filterImageData.data.length, image.getBytes());

     // Draw the buffer onto the canvas.

     canvas.context2D.clearRect(0, 0, canvas.width, canvas.height);

     canvas.context2D.putImageData(filterImageData, 0, 0);

@@ -53,7 +53,7 @@
     print(t.elapsedMilliseconds / 1000.0);

   }

 

-  _addControl('Amount', amount.toString(), sidebar, (v) {

+  _addControl('Amount', amount.toString(), sidebar, (num v) {

     amount = v;

     _apply();

   });

@@ -62,14 +62,14 @@
 }

 

 void testSobel() {

-  Html.DivElement sidebar = Html.document.querySelector('#sidebar');

+  var sidebar = document.querySelector('#sidebar') as DivElement;

   sidebar.children.clear();

 

-  var label = Html.Element.tag('h1');

+  var label = Element.tag('h1');

   label.text = 'Sepia';

   sidebar.children.add(label);

 

-  double amount = 1.0;

+  num amount = 1.0;

 

   void _apply() {

     Stopwatch t = Stopwatch();

@@ -78,8 +78,8 @@
     image = sobel(image, amount: amount);

 

     // Fill the buffer with our image data.

-    filterImageData.data.setRange(0, filterImageData.data.length,

-                                  image.getBytes());

+    filterImageData.data

+        .setRange(0, filterImageData.data.length, image.getBytes());

     // Draw the buffer onto the canvas.

     canvas.context2D.clearRect(0, 0, canvas.width, canvas.height);

     canvas.context2D.putImageData(filterImageData, 0, 0);

@@ -87,7 +87,7 @@
     print(t.elapsedMilliseconds / 1000.0);

   }

 

-  _addControl('Amount', amount.toString(), sidebar, (v) {

+  _addControl('Amount', amount.toString(), sidebar, (num v) {

     amount = v;

     _apply();

   });

@@ -96,10 +96,10 @@
 }

 

 void testGaussian() {

-  Html.DivElement sidebar = Html.document.querySelector('#sidebar');

+  var sidebar = document.querySelector('#sidebar') as DivElement;

   sidebar.children.clear();

 

-  var label = Html.Element.tag('h1');

+  var label = Element.tag('h1');

   label.text = 'Gaussian Blur';

   sidebar.children.add(label);

 

@@ -112,8 +112,8 @@
     image = gaussianBlur(image, radius);

 

     // Fill the buffer with our image data.

-    filterImageData.data.setRange(0, filterImageData.data.length,

-                                  image.getBytes());

+    filterImageData.data

+        .setRange(0, filterImageData.data.length, image.getBytes());

     // Draw the buffer onto the canvas.

     canvas.context2D.clearRect(0, 0, canvas.width, canvas.height);

     canvas.context2D.putImageData(filterImageData, 0, 0);

@@ -121,7 +121,7 @@
     print(t.elapsedMilliseconds / 1000.0);

   }

 

-  _addControl('Radius', radius.toString(), sidebar, (v) {

+  _addControl('Radius', radius.toString(), sidebar, (num v) {

     radius = v.toInt();

     _apply();

   });

@@ -130,16 +130,16 @@
 }

 

 void testVignette() {

-  Html.DivElement sidebar = Html.document.querySelector('#sidebar');

+  var sidebar = document.querySelector('#sidebar') as DivElement;

   sidebar.children.clear();

 

-  var label = Html.Element.tag('h1');

+  var label = Element.tag('h1');

   label.text = 'Vignette';

   sidebar.children.add(label);

 

-  double start = 0.3;

-  double end = 0.75;

-  double amount = 1.0;

+  num start = 0.3;

+  num end = 0.75;

+  num amount = 1.0;

 

   void _apply() {

     Stopwatch t = Stopwatch();

@@ -149,7 +149,7 @@
 

     // Fill the buffer with our image data.

     filterImageData.data.setRange(0, filterImageData.data.length,

-                                  image.getBytes());

+        image.getBytes());

     // Draw the buffer onto the canvas.

     canvas.context2D.clearRect(0, 0, canvas.width, canvas.height);

     canvas.context2D.putImageData(filterImageData, 0, 0);

@@ -157,29 +157,29 @@
     print(t.elapsedMilliseconds / 1000.0);

   }

 

-  _addControl('Start', start.toString(), sidebar, (v) {

+  _addControl('Start', start.toString(), sidebar, (num v) {

     start = v;

     _apply();

   });

 

-  _addControl('End', end.toString(), sidebar, (v) {

-      end = v;

-      _apply();

-    });

+  _addControl('End', end.toString(), sidebar, (num v) {

+    end = v;

+    _apply();

+  });

 

-  _addControl('Amount', amount.toString(), sidebar, (v) {

-      amount = v;

-      _apply();

-    });

+  _addControl('Amount', amount.toString(), sidebar, (num v) {

+    amount = v;

+    _apply();

+  });

 

   _apply();

 }

 

 void testPixelate() {

-  Html.DivElement sidebar = Html.document.querySelector('#sidebar');

+  var sidebar = document.querySelector('#sidebar') as DivElement;

   sidebar.children.clear();

 

-  var label = Html.Element.tag('h1');

+  var label = Element.tag('h1');

   label.text = 'Pixelate';

   sidebar.children.add(label);

 

@@ -193,7 +193,7 @@
 

     // Fill the buffer with our image data.

     filterImageData.data.setRange(0, filterImageData.data.length,

-                                  image.getBytes());

+        image.getBytes());

     // Draw the buffer onto the canvas.

     canvas.context2D.clearRect(0, 0, canvas.width, canvas.height);

     canvas.context2D.putImageData(filterImageData, 0, 0);

@@ -201,7 +201,7 @@
     print(t.elapsedMilliseconds / 1000.0);

   }

 

-  _addControl('blockSize', blockSize.toString(), sidebar, (v) {

+  _addControl('blockSize', blockSize.toString(), sidebar, (num v) {

     blockSize = v.toInt();

     _apply();

   });

@@ -210,10 +210,10 @@
 }

 

 void testColorOffset() {

-  Html.DivElement sidebar = Html.document.querySelector('#sidebar');

+  var sidebar = document.querySelector('#sidebar') as DivElement;

   sidebar.children.clear();

 

-  var label = Html.Element.tag('h1');

+  var label = Element.tag('h1');

   label.text = 'Pixelate';

   sidebar.children.add(label);

 

@@ -230,7 +230,7 @@
 

     // Fill the buffer with our image data.

     filterImageData.data.setRange(0, filterImageData.data.length,

-                                  image.getBytes());

+        image.getBytes());

     // Draw the buffer onto the canvas.

     canvas.context2D.clearRect(0, 0, canvas.width, canvas.height);

     canvas.context2D.putImageData(filterImageData, 0, 0);

@@ -238,57 +238,62 @@
     print(t.elapsedMilliseconds / 1000.0);

   }

 

-  _addControl('red', red.toString(), sidebar, (v) {

+  _addControl('red', red.toString(), sidebar, (num v) {

     red = v.toInt();

     _apply();

   });

 

-  _addControl('green', red.toString(), sidebar, (v) {

-      green = v.toInt();

-      _apply();

-    });

+  _addControl('green', red.toString(), sidebar, (num v) {

+    green = v.toInt();

+    _apply();

+  });

 

-  _addControl('blue', red.toString(), sidebar, (v) {

-      blue = v.toInt();

-      _apply();

-    });

+  _addControl('blue', red.toString(), sidebar, (num v) {

+    blue = v.toInt();

+    _apply();

+  });

 

-  _addControl('alpha', red.toString(), sidebar, (v) {

-      alpha = v.toInt();

-      _apply();

-    });

+  _addControl('alpha', red.toString(), sidebar, (num v) {

+    alpha = v.toInt();

+    _apply();

+  });

 

   _apply();

 }

 

 void testAdjustColor() {

-  Html.DivElement sidebar = Html.document.querySelector('#sidebar');

+  var sidebar = document.querySelector('#sidebar') as DivElement;

   sidebar.children.clear();

 

-  var label = Html.Element.tag('h1');

+  var label = Element.tag('h1');

   label.text = 'Adjust Color';

   sidebar.children.add(label);

 

-  double contrast = 1.0;

-  double saturation = 1.0;

-  double brightness = 1.0;

-  double gamma = 0.8;

-  double exposure = 0.3;

-  double hue = 0.0;

-  double amount = 1.0;

+  num contrast = 1.0;

+  num saturation = 1.0;

+  num brightness = 1.0;

+  num gamma = 0.8;

+  num exposure = 0.3;

+  num hue = 0.0;

+  num amount = 1.0;

 

   void _apply() {

     Stopwatch t = Stopwatch();

     t.start();

     Image image = Image.from(origImage);

 

-    image = adjustColor(image, contrast: contrast, saturation: saturation,

-        brightness: brightness, gamma: gamma, exposure: exposure,

-        hue: hue, amount: amount);

+    image = adjustColor(image,

+        contrast: contrast,

+        saturation: saturation,

+        brightness: brightness,

+        gamma: gamma,

+        exposure: exposure,

+        hue: hue,

+        amount: amount);

 

     // Fill the buffer with our image data.

-    filterImageData.data.setRange(0, filterImageData.data.length,

-                                  image.getBytes());

+    filterImageData.data

+        .setRange(0, filterImageData.data.length, image.getBytes());

     // Draw the buffer onto the canvas.

     canvas.context2D.clearRect(0, 0, canvas.width, canvas.height);

     canvas.context2D.putImageData(filterImageData, 0, 0);

@@ -297,37 +302,37 @@
     print(t.elapsedMilliseconds / 1000.0);

   }

 

-  _addControl('Contrast', contrast.toString(), sidebar, (v) {

+  _addControl('Contrast', contrast.toString(), sidebar, (num v) {

     contrast = v;

     _apply();

   });

 

-  _addControl('Saturation', saturation.toString(), sidebar, (v) {

-      saturation = v;

-      _apply();

-    });

+  _addControl('Saturation', saturation.toString(), sidebar, (num v) {

+    saturation = v;

+    _apply();

+  });

 

-  _addControl('Brightness', brightness.toString(), sidebar, (v) {

-      brightness = v;

-      _apply();

-    });

+  _addControl('Brightness', brightness.toString(), sidebar, (num v) {

+    brightness = v;

+    _apply();

+  });

 

-  _addControl('Gamma', gamma.toString(), sidebar, (v) {

-      gamma = v;

-      _apply();

-    });

+  _addControl('Gamma', gamma.toString(), sidebar, (num v) {

+    gamma = v;

+    _apply();

+  });

 

-  _addControl('Exposure', exposure.toString(), sidebar, (v) {

-      exposure = v;

-      _apply();

-    });

+  _addControl('Exposure', exposure.toString(), sidebar, (num v) {

+    exposure = v;

+    _apply();

+  });

 

-  _addControl('Hue', hue.toString(), sidebar, (v) {

-      hue = v;

-      _apply();

-    });

+  _addControl('Hue', hue.toString(), sidebar, (num v) {

+    hue = v;

+    _apply();

+  });

 

-  _addControl('Amount', amount.toString(), sidebar, (v) {

+  _addControl('Amount', amount.toString(), sidebar, (num v) {

     amount = v;

     _apply();

   });

@@ -336,10 +341,10 @@
 }

 

 void main() {

-  canvas = Html.document.querySelector('#filter_canvas');

-  logDiv = Html.document.querySelector('#log');

+  canvas = document.querySelector('#filter_canvas') as CanvasElement;

+  logDiv = document.querySelector('#log') as DivElement;

 

-  Html.SelectElement menu = Html.document.querySelector('#FilterType');

+  var menu = document.querySelector('#FilterType') as SelectElement;

   menu.onChange.listen((e) {

     if (menu.value == 'Pixelate') {

       testPixelate();

@@ -358,10 +363,10 @@
     }

   });

 

-  Html.ImageElement img = Html.ImageElement();

+  ImageElement img = ImageElement();

   img.src = 'res/big_buck_bunny.jpg';

   img.onLoad.listen((e) {

-    var c = Html.CanvasElement();

+    var c = CanvasElement();

     c.width = img.width;

     c.height = img.height;

     c.context2D.drawImage(img, 0, 0);

diff --git a/image/web/image_http_input.dart b/image/web/image_http_input.dart
index 4b5d991..5f14a61 100755
--- a/image/web/image_http_input.dart
+++ b/image/web/image_http_input.dart
@@ -1,39 +1,35 @@
-import 'dart:html' as Html;

+import 'dart:html';

 

 import 'package:image/image.dart';

 import 'dart:convert';

 

-Html.InputElement fileInput;

+InputElement fileInput;

 

 void main() {

   // There are at least two ways to get a file into an html dart app:

   // using a file Input element, or an AJAX HttpRequest.

 

   // This example demonstrates using a file Input element.

-  fileInput = Html.querySelector("#file");

+  fileInput = querySelector("#file") as InputElement;

 

   fileInput.addEventListener("change", onFileChanged);

 }

 

-/**

- * Called when the user has selected a file.

- */

-void onFileChanged(Html.Event event) {

-  Html.FileList files = fileInput.files;

+/// Called when the user has selected a file.

+void onFileChanged(Event event) {

+  var files = fileInput.files as FileList;

   var file = files.item(0);

 

-  Html.FileReader reader = Html.FileReader();

+  FileReader reader = FileReader();

   reader.addEventListener("load", onFileLoaded);

   reader.readAsArrayBuffer(file);

 }

 

-/**

- * Called when the file has been read.

- */

-void onFileLoaded(Html.Event event) {

-  Html.FileReader reader = event.currentTarget;

+/// Called when the file has been read.

+void onFileLoaded(Event event) {

+  FileReader reader = event.currentTarget as FileReader;

 

-  var bytes = reader.result;

+  var bytes = reader.result as List<int>;

 

   // Find a decoder that is able to decode the given file contents.

   Decoder decoder = findDecoderForData(bytes);

@@ -51,29 +47,28 @@
   // a canvas.

   if (image != null) {

     // Add a separator to the html page

-    Html.document.body.append(new Html.ParagraphElement());

+    document.body.append(new ParagraphElement());

 

     // Draw the image into a canvas.  First create a canvas at the correct

     // resolution.

-    var c = Html.CanvasElement();

-    Html.document.body.append(c);

+    var c = CanvasElement();

+    document.body.append(c);

     c.width = image.width;

     c.height = image.height;

 

     // Create a buffer that the canvas can draw.

-    Html.ImageData d = c.context2D.createImageData(c.width, c.height);

+    ImageData d = c.context2D.createImageData(c.width, c.height);

     // Fill the buffer with our image data.

     d.data.setRange(0, d.data.length, image.getBytes());

     // Draw the buffer onto the canvas.

     c.context2D.putImageData(d, 0, 0);

 

-

     // OR we could use an IMG element to display the image.

     // This requires encoding it to a common format (like PNG), base64 encoding

     // the encoded image, and using a data url for the img src.

 

-    var img = Html.ImageElement();

-    Html.document.body.append(img);

+    var img = ImageElement();

+    document.body.append(img);

     // encode the image to a PNG

     var png = encodePng(image);

     // base64 encode the png

diff --git a/image/web/image_server.dart b/image/web/image_server.dart
index ae1b0ea..a2ecc78 100755
--- a/image/web/image_server.dart
+++ b/image/web/image_server.dart
@@ -1,15 +1,15 @@
-import 'dart:io' as Io;

+import 'dart:io';

 import 'package:image/image.dart';

 

 void main(List<String> argv) {

-  if (argv.length < 1) {

+  if (argv.isEmpty) {

     print('Usage: image_server <image_file>');

     return;

   }

 

   String filename = argv[0];

 

-  Io.File file = Io.File(filename);

+  File file = File(filename);

   if (!file.existsSync()) {

     print('File does not exist: ${filename}');

     return;

@@ -30,5 +30,5 @@
   // Save the image as a PNG

   List<int> png = PngEncoder().encodeImage(image);

   // Write the PNG to disk

-  new Io.File(filename + '.png').writeAsBytesSync(png);

+  new File(filename + '.png').writeAsBytesSync(png);

 }

diff --git a/image/web/mandelbrot.dart b/image/web/mandelbrot.dart
index 5ef0d6c..e58a887 100755
--- a/image/web/mandelbrot.dart
+++ b/image/web/mandelbrot.dart
@@ -1,4 +1,4 @@
-import 'dart:html' as Html;

+import 'dart:html';

 import 'dart:math';

 import 'package:image/image.dart';

 

@@ -6,16 +6,14 @@
   return log(x) / div;

 }

 

-/**

- * Render the Mandelbrot Set into an Image and display it.

- */

+/// Render the Mandelbrot Set into an Image and display it.

 void main() {

   const int width = 1024;

   const int height = 1024;

 

   // Create a canvas to put our decoded image into.

-  var c = Html.CanvasElement(width: width, height: height);

-  Html.document.body.append(c);

+  var c = CanvasElement(width: width, height: height);

+  document.body.append(c);

 

   double zoom = 1.0;

   double moveX = -0.5;

@@ -55,8 +53,9 @@
         image.setPixelRGBA(x, y, 0, 0, 0);

       } else {

         double z = sqrt(newRe * newRe + newIm * newIm);

-        double b = 256.0 * logN(1.75 + i -

-                   logN(logN(z, log2), log2), log2) / Log2MaxIterations;

+        double b = 256.0 *

+            logN(1.75 + i - logN(logN(z, log2), log2), log2) /

+            Log2MaxIterations;

         int brightness = b.toInt();

         image.setPixelRGBA(x, y, brightness, brightness, 255);

       }

@@ -64,7 +63,7 @@
   }

 

   // Create a buffer that the canvas can draw.

-  Html.ImageData d = c.context2D.createImageData(image.width, image.height);

+  ImageData d = c.context2D.createImageData(image.width, image.height);

   // Fill the buffer with our image data.

   d.data.setRange(0, d.data.length, image.getBytes());

   // Draw the buffer onto the canvas.

diff --git a/image/web/test_formats.dart b/image/web/test_formats.dart
index 7005f75..66674f6 100755
--- a/image/web/test_formats.dart
+++ b/image/web/test_formats.dart
@@ -1,44 +1,51 @@
-import 'dart:html' as Html;

-import 'dart:async' as Async;

+import 'dart:html';

+import 'dart:async';

+import 'dart:html' as prefix0;

 import 'dart:typed_data';

 import 'package:image/image.dart';

 

-/**

- * Decode and display various image formats.  This is used as a visual

- * unit-test to indentify problems that may occur after the translation to

- * javascript.

- */

+/// Decode and display various image formats. This is used as a visual

+/// unit-test to identify problems that may occur after the translation to

+/// javascript.

 void main() {

   // An img on the html page is used to establish the path to the images

   // directory.  It's removed after we get the path since we'll be populating

   // the page with our own decoded images.

-  Html.ImageElement img = Html.querySelectorAll('img')[0];

+  var img = querySelectorAll('img')[0] as prefix0.ImageElement;

   String path = img.src.substring(0, img.src.lastIndexOf('/'));

   img.remove();

 

   // The list of images we'll be decoding, representing a wide range

   // of formats and sub-formats.

-  List<String> images = ['penguins.jpg', '1_webp_ll.webp', '1.webp', '3_webp_a.webp',

-                         'puppies.jpg', 'cars.gif', 'trees.png',

-                         'animated.png', 'BladeRunner_lossy.webp'];

+  List<String> images = [

+    'penguins.jpg',

+    '1_webp_ll.webp',

+    '1.webp',

+    '3_webp_a.webp',

+    'puppies.jpg',

+    'cars.gif',

+    'trees.png',

+    'animated.png',

+    'BladeRunner_lossy.webp'

+  ];

 

   for (String name in images) {

     // Use an http request to get the image file from disk.

-    var req = Html.HttpRequest();

+    var req = HttpRequest();

     req.open('GET', path + '/' + name);

     req.responseType = 'arraybuffer';

     req.onLoadEnd.listen((e) {

       if (req.status == 200) {

         // Convert the text to binary byte list.

-        List<int> bytes = Uint8List.view(req.response);

+        List<int> bytes = Uint8List.view(req.response as ByteBuffer);

 

-        var label = Html.DivElement();

-        Html.document.body.append(label);

+        var label = DivElement();

+        document.body.append(label);

         label.text = name;

 

         // Create a canvas to put our decoded image into.

-        var c = Html.CanvasElement();

-        Html.document.body.append(c);

+        var c = CanvasElement();

+        document.body.append(c);

 

         // Find the best decoder for the image.

         Decoder decoder = findDecoderForData(bytes);

@@ -64,7 +71,7 @@
           c.height = newImage.height;

 

           // Create a buffer that the canvas can draw.

-          Html.ImageData d = c.context2D.createImageData(c.width, c.height);

+          ImageData d = c.context2D.createImageData(c.width, c.height);

           // Fill the buffer with our image data.

           d.data.setRange(0, d.data.length, newImage.getBytes());

           // Draw the buffer onto the canvas.

@@ -81,10 +88,10 @@
         c.width = anim.frames[0].width;

         c.height = anim.frames[0].height;

         // Create a buffer that the canvas can draw.

-        Html.ImageData d = c.context2D.createImageData(c.width, c.height);

+        ImageData d = c.context2D.createImageData(c.width, c.height);

 

         int frame = 0;

-        new Async.Timer.periodic(new Duration(milliseconds: 40), (t) {

+        new Timer.periodic(new Duration(milliseconds: 40), (t) {

           Image image = anim.frames[frame++];

           if (frame >= anim.numFrames) {

             frame = 0;

@@ -96,7 +103,7 @@
           c.context2D.putImageData(d, 0, 0);

         });

       }

-   });

-   req.send('');

+    });

+    req.send('');

   }

 }

diff --git a/image/web/test_jpeg_encoder.dart b/image/web/test_jpeg_encoder.dart
index fdad554..5358177 100755
--- a/image/web/test_jpeg_encoder.dart
+++ b/image/web/test_jpeg_encoder.dart
@@ -1,16 +1,16 @@
-import 'dart:html' as Html;

+import 'dart:html';

 import 'dart:convert';

 import 'package:image/image.dart';

 

 void main() {

-  var theImg = Html.document.getElementById('testimage') as Html.ImageElement;

-  var cvs = Html.document.createElement('canvas') as Html.CanvasElement;

+  var theImg = document.getElementById('testimage') as ImageElement;

+  var cvs = document.createElement('canvas') as CanvasElement;

   cvs.width = theImg.width;

   cvs.height = theImg.height;

 

-  var ctx = cvs.getContext("2d") as Html.CanvasRenderingContext2D;

+  var ctx = cvs.getContext("2d") as CanvasRenderingContext2D;

 

-  ctx.drawImage(theImg,0,0);

+  ctx.drawImage(theImg, 0, 0);

 

   var bytes = ctx.getImageData(0, 0, cvs.width, cvs.height).data;

   Image image = Image.fromBytes(cvs.width, cvs.height, bytes);

@@ -18,7 +18,7 @@
   var jpg = encodeJpg(image, quality: 25);

 

   var jpg64 = base64Encode(jpg);

-  var img = Html.document.createElement('img') as Html.ImageElement;

+  var img = document.createElement('img') as ImageElement;

   img.src = 'data:image/png;base64,${jpg64}';

-  Html.document.body.append(img);

+  document.body.append(img);

 }

diff --git a/image/web/webp_viewer.dart b/image/web/webp_viewer.dart
index 26aa389..4d92c53 100755
--- a/image/web/webp_viewer.dart
+++ b/image/web/webp_viewer.dart
@@ -1,25 +1,27 @@
-import 'dart:html' as Html;

+import 'dart:html';

 import 'dart:convert';

 import 'package:image/image.dart';

 

-/**

- * Convert all .webp IMG elements on the page to PNG so that they can be viewed

- * by browsers like FireFox and IE.

- */

+/// Convert all .webp IMG elements on the page to PNG so that they can be viewed

+/// by browsers like FireFox and IE.

 void main() {

-  var images = Html.querySelectorAll('img');

+  var images = querySelectorAll('img');

 

   for (var _img in images) {

-    var img = _img as Html.ImageElement;

+    var img = _img as ImageElement;

     if (img.src.toLowerCase().endsWith('.webp')) {

-      var req = Html.HttpRequest();

+      var req = HttpRequest();

       req.open('GET', img.src);

       req.overrideMimeType('text\/plain; charset=x-user-defined');

       req.onLoadEnd.listen((e) {

         if (req.status == 200) {

-          var bytes = req.responseText.split('').map((e){

-            return new String.fromCharCode(e.codeUnitAt(0) & 0xff);

-           }).join('').codeUnits;

+          var bytes = req.responseText

+              .split('')

+              .map((e) {

+                return new String.fromCharCode(e.codeUnitAt(0) & 0xff);

+              })

+              .join('')

+              .codeUnits;

 

           Image image = decodeWebP(bytes);

           List<int> png = encodePng(image);