PageRenderTime 120ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 1ms

/zbar_update_to_617889f8f73.patch

#
Patch | 12235 lines | 12142 code | 93 blank | 0 comment | 0 complexity | bec7532f513f4040726f95b8d12b2056 MD5 | raw file
Possible License(s): LGPL-2.1
  1. diff --git a/COPYING b/COPYING
  2. --- a/COPYING
  3. +++ b/COPYING
  4. @@ -1,4 +1,4 @@
  5. -The ZBar Bar Code Reader is Copyright (C) 2007-2009 Jeff Brown
  6. +The ZBar Bar Code Reader is Copyright (C) 2007-2010 Jeff Brown
  7. <spadix@users.sourceforge.net>
  8. The QR Code reader is Copyright (C) 1999-2009 Timothy B. Terriberry
  9. <tterribe@xiph.org>
  10. diff --git a/Makefile.am b/Makefile.am
  11. --- a/Makefile.am
  12. +++ b/Makefile.am
  13. @@ -1,6 +1,3 @@
  14. -AM_CPPFLAGS = -I$(srcdir)/include
  15. -AM_CFLAGS = -Wall -Wno-parentheses
  16. -AM_CXXFLAGS = $(AM_CFLAGS)
  17. ACLOCAL_AMFLAGS = -I config
  18. bin_PROGRAMS =
  19. check_PROGRAMS =
  20. @@ -9,8 +6,10 @@ lib_LTLIBRARIES =
  21. pyexec_LTLIBRARIES =
  22. CLEANFILES =
  23. DISTCLEANFILES =
  24. +MAINTAINERCLEANFILES =
  25. BUILT_SOURCES =
  26. EXTRA_DIST =
  27. +SUBDIRS = .
  28. pkgconfigdir = $(libdir)/pkgconfig
  29. pkgconfig_DATA = zbar.pc
  30. @@ -39,6 +38,9 @@ if HAVE_QT
  31. include $(srcdir)/qt/Makefile.am.inc
  32. pkgconfig_DATA += zbar-qt.pc
  33. endif
  34. +if HAVE_JAVA
  35. +SUBDIRS += java
  36. +endif
  37. if HAVE_NPAPI
  38. include $(srcdir)/plugin/Makefile.am.inc
  39. endif
  40. @@ -47,11 +49,8 @@ include $(srcdir)/doc/Makefile.am.inc
  41. EXTRA_DIST += zbar.ico zbar.nsi
  42. -EXTRA_DIST += examples/upcrpc.pl examples/upcrpc.py examples/paginate.pl \
  43. - examples/barcode.png examples/processor.pl examples/processor.py \
  44. - examples/read_one.py examples/read_one.pl \
  45. - examples/scan_image.c examples/scan_image.cpp examples/scan_image.pl \
  46. - examples/scan_image.py examples/scan_image.vcproj
  47. +EXTRA_DIST += examples/barcode.png examples/upcrpc.py examples/upcrpc.pl \
  48. + examples/scan_image.c examples/scan_image.cpp examples/scan_image.vcproj
  49. EXTRA_DIST += perl/MANIFEST perl/README perl/Changes perl/COPYING.LIB \
  50. perl/Makefile.PL perl/typemap perl/ZBar.xs perl/ppport.h \
  51. diff --git a/configure.ac b/configure.ac
  52. --- a/configure.ac
  53. +++ b/configure.ac
  54. @@ -46,6 +46,13 @@ AC_DEFINE_UNQUOTED([LIB_VERSION_REVISION
  55. [[`echo "$LIB_VERSION" | sed -e 's/^[^:]*:\([^:]*\):.*$/\1/'`]],
  56. [Library revision])
  57. +AM_CPPFLAGS="-I$srcdir/include"
  58. +AM_CFLAGS="-Wall -Wno-parentheses"
  59. +AM_CXXFLAGS="$AM_CFLAGS"
  60. +AC_SUBST([AM_CPPFLAGS])
  61. +AC_SUBST([AM_CFLAGS])
  62. +AC_SUBST([AM_CXXFLAGS])
  63. +
  64. dnl windows build
  65. AC_CANONICAL_HOST
  66. @@ -73,13 +80,36 @@ documentation generation])
  67. AC_ARG_VAR([XMLTOFLAGS], [additional arguments for xmlto])
  68. AC_CHECK_PROGS([XMLTO], [xmlto], [:])
  69. +have_java="maybe"
  70. +AC_ARG_VAR([JAVA_HOME], [root location of JDK])
  71. +AS_IF([test "x$JAVA_HOME" = "x"],
  72. + [JAVA_PATH="$PATH"],
  73. + [JAVA_PATH="$JAVA_HOME/bin$PATH_SEPARATOR$PATH"])
  74. +
  75. +AC_ARG_VAR([JAVAC], [location of Java language compiler])
  76. +AC_PATH_PROGS([JAVAC], [javac jikes ecj gcj], [:], [$JAVA_PATH])
  77. +AS_IF([test "x$JAVAC" = "x:"], [have_java="no"])
  78. +
  79. +AC_ARG_VAR([JAVAH], [location of Java header generator])
  80. +AC_PATH_PROGS([JAVAH], [javah], [/bin/false], [$JAVA_PATH])
  81. +
  82. +AC_ARG_VAR([JAR], [location of Java archive tool])
  83. +AC_PATH_PROGS([JAR], [jar], [:], [$JAVA_PATH])
  84. +AS_IF([test "x$JAR" = "x:"], [have_java="no"])
  85. +
  86. +AC_ARG_VAR([JAVA], [location of Java application launcher])
  87. +AC_PATH_PROGS([JAVA], [java], [/bin/false], [$JAVA_PATH])
  88. +
  89. +AC_ARG_VAR([CLASSPATH], [Java class path (include JUnit to run java tests)])
  90. +AS_IF([test "x$CLASSPATH" = "x"], [CLASSPATH="."])
  91. +
  92. dnl symbologies
  93. AC_ARG_ENABLE([codes],
  94. [AS_HELP_STRING([--enable-codes=SYMS],
  95. - [select symbologies to compile [default=ean,i25,code39,code128,qrcode]])],
  96. + [select symbologies to compile [default=ean,databar,code128,code93,code39,i25,qrcode]])],
  97. [],
  98. - [enable_codes="ean,code39,code128,i25,qrcode"]) dnl pdf417
  99. + [enable_codes="ean,databar,code128,code93,code39,i25,qrcode"])
  100. AC_DEFUN([ZBAR_CHK_CODE], [
  101. AC_MSG_CHECKING([whether to build $2])
  102. @@ -97,11 +127,13 @@ AC_DEFUN([ZBAR_CHK_CODE], [
  103. ])dnl
  104. ZBAR_CHK_CODE([ean], [EAN symbologies])
  105. +ZBAR_CHK_CODE([databar], [DataBar symbology])
  106. ZBAR_CHK_CODE([code128], [Code 128 symbology])
  107. +ZBAR_CHK_CODE([code93], [Code 93 symbology])
  108. ZBAR_CHK_CODE([code39], [Code 39 symbology])
  109. -ZBAR_CHK_CODE([pdf417], [PDF417 symbology])
  110. ZBAR_CHK_CODE([i25], [Interleaved 2 of 5 symbology])
  111. ZBAR_CHK_CODE([qrcode], [QR Code])
  112. +ZBAR_CHK_CODE([pdf417], [PDF417 symbology])
  113. dnl libraries
  114. @@ -255,7 +287,7 @@ AM_CONDITIONAL([HAVE_JPEG], [test "x$wit
  115. dnl ImageMagick
  116. AC_ARG_WITH([imagemagick],
  117. [AS_HELP_STRING([--without-imagemagick],
  118. - [disable support for scanning images using ImageMagick])],
  119. + [disable support for scanning images with ImageMagick])],
  120. [],
  121. [with_imagemagick="yes"])
  122. @@ -296,7 +328,7 @@ AM_CONDITIONAL([HAVE_MAGICK], [test "x$w
  123. dnl Mozilla NPAPI
  124. AC_ARG_WITH([npapi],
  125. [AS_HELP_STRING([--with-npapi],
  126. - [enable support for Firefox/Mozilla/OpenOffice NPAPI plugin])],
  127. + [enable support for Firefox/Mozilla/OpenOffice plugin])],
  128. [],
  129. [with_npapi="no"])
  130. @@ -383,13 +415,38 @@ AS_IF([test "x$with_qt" != "xno"],
  131. AM_CONDITIONAL([HAVE_QT], [test "x$with_qt" = "xyes"])
  132. +dnl Java
  133. +AC_ARG_WITH([java],
  134. + [AS_HELP_STRING([--without-java],
  135. + [disable support for Java interface])],
  136. + [],
  137. + [with_java="check"])
  138. +
  139. +AC_ARG_VAR([JAVA_CFLAGS], [compiler flags for building JNI extensions])
  140. +AS_IF([test "x$JAVA_CFLAGS" = "x" && test "x$JAVA_HOME" != "x"],
  141. + [JAVA_CFLAGS="-I$JAVA_HOME/include"])
  142. +
  143. +AS_IF([test "x$with_java" != "xno"],
  144. + [CPPFLAGS_save="$CPPFLAGS"
  145. + CPPFLAGS="$CPPFLAGS $JAVA_CFLAGS"
  146. + AC_CHECK_HEADER([jni.h], [], [have_java="no"])
  147. + CPPFLAGS="$CPPFLAGS_save"
  148. + AS_IF([test "x$have_java" != "xno"],
  149. + [with_java="yes"],
  150. + [test "x$with_java" = "xyes"],
  151. + [AC_MSG_FAILURE([unable to find Java JNI! ensure CFLAGS are set
  152. +appropriately or configure --without-java])],
  153. + [with_java="no"])
  154. +])
  155. +AM_CONDITIONAL([HAVE_JAVA], [test "x$with_java" = "xyes"])
  156. +
  157. dnl header files
  158. dnl FIXME switches for shm, mmap
  159. AC_HEADER_ASSERT
  160. -AC_CHECK_HEADERS([fcntl.h features.h inttypes.h stdlib.h string.h unistd.h \
  161. - sys/ioctl.h sys/time.h sys/times.h sys/ipc.h sys/shm.h sys/mman.h])
  162. +AC_CHECK_HEADERS([errno.h fcntl.h features.h inttypes.h stdlib.h string.h \
  163. + unistd.h sys/ioctl.h sys/time.h sys/times.h sys/ipc.h sys/shm.h sys/mman.h])
  164. dnl types
  165. @@ -428,6 +485,7 @@ AC_CONFIG_COMMANDS([doc/reldate.xml],
  166. AC_CONFIG_FILES([
  167. Makefile
  168. +java/Makefile
  169. zbar.pc
  170. zbar-gtk.pc
  171. zbar-qt.pc
  172. @@ -460,6 +518,9 @@ AS_IF([test "x$with_gtk" != "xyes"],
  173. echo "Qt4 --with-qt=$with_qt"
  174. AS_IF([test "x$with_qt" != "xyes"],
  175. [echo " => the Qt4 widget will *NOT* be built"])
  176. +echo "Java --with-java=$with_java"
  177. +AS_IF([test "x$with_java" != "xyes"],
  178. + [echo " => the Java interface will *NOT* be built"])
  179. #echo "NPAPI Plugin --with-npapi=$with_npapi"
  180. #AS_IF([test "x$with_mozilla" != "xyes"],
  181. # [echo " => the Mozilla/Firefox/OpenOffice plugin will *NOT* be built"])
  182. diff --git a/doc/Makefile.am.inc b/doc/Makefile.am.inc
  183. --- a/doc/Makefile.am.inc
  184. +++ b/doc/Makefile.am.inc
  185. @@ -2,6 +2,7 @@
  186. DOCSOURCES = doc/manual.xml doc/version.xml doc/reldate.xml \
  187. doc/ref/zbarimg.xml doc/ref/zbarcam.xml doc/ref/commonoptions.xml
  188. +MAINTAINERCLEANFILES += doc/man/man.stamp doc/version.xml doc/reldate.xml
  189. # man page targets to distribute and install
  190. dist_man_MANS =
  191. diff --git a/doc/api/footer.html b/doc/api/footer.html
  192. --- a/doc/api/footer.html
  193. +++ b/doc/api/footer.html
  194. @@ -9,9 +9,12 @@
  195. <address><a href="mailto:spadix@users.sourceforge.net">spadix@users.sourceforge.net</a></address>
  196. -<p>Copyright 2008-2009 (c) Jeff Brown - All Rights Reserved.</p>
  197. -<p>Verbatim copying and distribution of this entire article are
  198. - permitted worldwide, without royalty, in any medium, provided this
  199. - notice, and the copyright notice, are preserved.</p>
  200. +<p>Copyright 2008-2010 (c) Jeff Brown</p>
  201. +<p>This documentation is part of the ZBar Barcode Reader; you can
  202. +redistribute it and/or modify it under the terms of the
  203. +<a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">GNU
  204. +Lesser General Public License</a> as published by the Free Software
  205. +Foundation; either version 2.1 of the License, or (at your option) any
  206. +later version.</p>
  207. </body></html>
  208. diff --git a/doc/manual.xml b/doc/manual.xml
  209. --- a/doc/manual.xml
  210. +++ b/doc/manual.xml
  211. @@ -29,10 +29,10 @@
  212. <year>2007</year>
  213. <year>2008</year>
  214. <year>2009</year>
  215. + <year>2010</year>
  216. <holder>Jeff Brown</holder>
  217. </copyright>
  218. <legalnotice><para>All Rights Reserved</para></legalnotice>
  219. - <!-- <legalnotice><para>insert GNU FDL header?</para></legalnotice> -->
  220. </bookinfo>
  221. <chapter id="intro">
  222. @@ -47,7 +47,4 @@
  223. &refzbarimg;
  224. </reference>
  225. -
  226. - <!-- insert GNU FDL? -->
  227. -
  228. </book>
  229. diff --git a/doc/ref/commonoptions.xml b/doc/ref/commonoptions.xml
  230. --- a/doc/ref/commonoptions.xml
  231. +++ b/doc/ref/commonoptions.xml
  232. @@ -47,8 +47,9 @@
  233. <option>ean13</option>, <option>ean8</option>,
  234. <option>upca</option>, <option>upce</option>,
  235. <option>isbn13</option>, <option>isbn10</option>,
  236. - <option>i25</option>, <option>code39</option>,
  237. - <option>code128</option> or the special value <option>*</option>.
  238. + <option>i25</option>, <option>code39</option>, <option>code93</option>,
  239. + <option>code128</option>, <option>qrcode</option>
  240. + or the special value <option>*</option>.
  241. If <replaceable class="parameter">symbology</replaceable> is
  242. omitted or <option>*</option>, the <replaceable
  243. class="parameter">config</replaceable> will be set for all
  244. diff --git a/doc/ref/zbarcam.xml b/doc/ref/zbarcam.xml
  245. --- a/doc/ref/zbarcam.xml
  246. +++ b/doc/ref/zbarcam.xml
  247. @@ -60,9 +60,10 @@
  248. <filename>/dev/video0</filename></para>
  249. <para>The underlying library currently supports EAN-13 (including
  250. - UPC and ISBN subsets), EAN-8, Code 128, Code 39, and Interleaved
  251. - 2 of 5 symbologies. The specific type of each detected symbol is
  252. - printed with the decoded data.</para>
  253. + UPC and ISBN subsets), EAN-8, DataBar, DataBar Expanded, Code 128,
  254. + Code 93, Code 39, Interleaved 2 of 5 and QR Code symbologies. The
  255. + specific type of each detected symbol is printed with the decoded
  256. + data.</para>
  257. </refsection>
  258. @@ -160,6 +161,37 @@
  259. </refsection>
  260. <refsection>
  261. + <title>Exit Status</title>
  262. +
  263. + <para><command>zbarcam</command> returns an exit code to indicate the
  264. + status of the program execution. Current exit codes are:</para>
  265. +
  266. + <variablelist>
  267. + <varlistentry>
  268. + <term>0</term>
  269. + <listitem>
  270. + <para>Successful program completion.</para>
  271. + </listitem>
  272. + </varlistentry>
  273. +
  274. + <varlistentry>
  275. + <term>1</term>
  276. + <listitem>
  277. + <para>An error occurred. This includes bad arguments and I/O
  278. + errors.</para>
  279. + </listitem>
  280. + </varlistentry>
  281. +
  282. + <varlistentry>
  283. + <term>2</term>
  284. + <listitem>
  285. + <para>A fatal error occurred.</para>
  286. + </listitem>
  287. + </varlistentry>
  288. + </variablelist>
  289. + </refsection>
  290. +
  291. + <refsection>
  292. <title>See Also</title>
  293. <para><xref linkend="zbarimg"/></para>
  294. <para><link xlink:href="http://zbar.sf.net/"/></para>
  295. diff --git a/doc/ref/zbarimg.xml b/doc/ref/zbarimg.xml
  296. --- a/doc/ref/zbarimg.xml
  297. +++ b/doc/ref/zbarimg.xml
  298. @@ -59,9 +59,10 @@
  299. displayed to the screen.</para>
  300. <para>The underlying library currently supports EAN-13 (including
  301. - UPC and ISBN subsets), EAN-8, Code 128, Code 39, and Interleaved
  302. - 2 of 5 symbologies. The specific type of each detected symbol is
  303. - printed with the decoded data.</para>
  304. + UPC and ISBN subsets), EAN-8, DataBar, DataBar Expanded, Code 128,
  305. + Code 93, Code 39, Interleaved 2 of 5 and QR Code symbologies. The
  306. + specific type of each detected symbol is printed with the decoded
  307. + data.</para>
  308. <para>Note that "<filename><replaceable>image</replaceable></filename>"
  309. @@ -166,6 +167,56 @@
  310. </refsection>
  311. <refsection>
  312. + <title>Exit Status</title>
  313. +
  314. + <para><command>zbarimg</command> returns an exit code to indicate the
  315. + status of the program execution. Current exit codes are:</para>
  316. +
  317. + <variablelist>
  318. + <varlistentry>
  319. + <term>0</term>
  320. + <listitem>
  321. + <para>Barcodes successfully detected in all images. Warnings may
  322. + have been generated, but no errors.</para>
  323. + </listitem>
  324. + </varlistentry>
  325. +
  326. + <varlistentry>
  327. + <term>1</term>
  328. + <listitem>
  329. + <para>An error occurred while processing some image(s). This
  330. + includes bad arguments, I/O errors and image handling errors from
  331. + ImageMagick.</para>
  332. + </listitem>
  333. + </varlistentry>
  334. +
  335. + <varlistentry>
  336. + <term>2</term>
  337. + <listitem>
  338. + <para>ImageMagick fatal error.</para>
  339. + </listitem>
  340. + </varlistentry>
  341. +
  342. + <varlistentry>
  343. + <term>3</term>
  344. + <listitem>
  345. + <para>The user quit the program before all images were scanned.
  346. + Only applies when running in interactive mode
  347. + (with <option>--display</option>)</para>
  348. + </listitem>
  349. + </varlistentry>
  350. +
  351. + <varlistentry>
  352. + <term>4</term>
  353. + <listitem>
  354. + <para>No barcode was detected in one or more of the images. No
  355. + other errors occurred.</para>
  356. + </listitem>
  357. + </varlistentry>
  358. + </variablelist>
  359. + </refsection>
  360. +
  361. + <refsection>
  362. <title>See Also</title>
  363. <para><xref linkend="zbarcam"/></para>
  364. <para><link xlink:href="http://zbar.sf.net/"/></para>
  365. diff --git a/examples/paginate.pl b/examples/paginate.pl
  366. deleted file mode 100755
  367. --- a/examples/paginate.pl
  368. +++ /dev/null
  369. @@ -1,71 +0,0 @@
  370. -#!/usr/bin/perl
  371. -#------------------------------------------------------------------------
  372. -# Copyright 2009 (c) Jeff Brown <spadix@users.sourceforge.net>
  373. -#
  374. -# This file is part of the ZBar Bar Code Reader.
  375. -#
  376. -# The ZBar Bar Code Reader is free software; you can redistribute it
  377. -# and/or modify it under the terms of the GNU Lesser Public License as
  378. -# published by the Free Software Foundation; either version 2.1 of
  379. -# the License, or (at your option) any later version.
  380. -#
  381. -# The ZBar Bar Code Reader is distributed in the hope that it will be
  382. -# useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  383. -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  384. -# GNU Lesser Public License for more details.
  385. -#
  386. -# You should have received a copy of the GNU Lesser Public License
  387. -# along with the ZBar Bar Code Reader; if not, write to the Free
  388. -# Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  389. -# Boston, MA 02110-1301 USA
  390. -#
  391. -# http://sourceforge.net/projects/zbar
  392. -#------------------------------------------------------------------------
  393. -use warnings;
  394. -use strict;
  395. -
  396. -use Barcode::ZBar;
  397. -use Image::Magick;
  398. -
  399. -warn("no input files specified?\n") if(!@ARGV);
  400. -
  401. -# running output document
  402. -my $out = undef;
  403. -
  404. -# barcode scanner
  405. -my $scanner = Barcode::ZBar::ImageScanner->new();
  406. -
  407. -foreach my $file (@ARGV) {
  408. - print "scanning from \"$file\"\n";
  409. - my $imseq = Image::Magick->new();
  410. - my $err = $imseq->Read($file);
  411. - warn($err) if($err);
  412. -
  413. - foreach my $page (@$imseq) {
  414. - # convert ImageMagick page to ZBar image
  415. - my $zimg = Barcode::ZBar::Image->new();
  416. - $zimg->set_format('Y800');
  417. - $zimg->set_size($page->Get(qw(columns rows)));
  418. - $zimg->set_data($page->Clone()->ImageToBlob(magick => 'GRAY', depth => 8));
  419. -
  420. - # scan for barcodes
  421. - if($scanner->scan_image($zimg)) {
  422. - # write out previous document
  423. - $out->write() if($out);
  424. -
  425. - # use first symbol found to name next image (FIXME sanitize)
  426. - my $data = ($zimg->get_symbols())[0]->get_data();
  427. - my $idx = $page->Get('scene') + 1;
  428. - print "splitting $data from page $idx\n";
  429. -
  430. - # create new output document
  431. - $out = Image::Magick->new(filename => $data);
  432. - }
  433. -
  434. - # append this page to current output
  435. - push(@$out, $page) if($out);
  436. - }
  437. -
  438. - # write out final document
  439. - $out->write() if($out);
  440. -}
  441. diff --git a/examples/processor.c b/examples/processor.c
  442. new file mode 100644
  443. --- /dev/null
  444. +++ b/examples/processor.c
  445. @@ -0,0 +1,47 @@
  446. +#include <stdio.h>
  447. +#include <zbar.h>
  448. +
  449. +static void my_handler (zbar_image_t *image,
  450. + const void *userdata)
  451. +{
  452. + /* extract results */
  453. + const zbar_symbol_t *symbol = zbar_image_first_symbol(image);
  454. + for(; symbol; symbol = zbar_symbol_next(symbol)) {
  455. + /* do something useful with results */
  456. + zbar_symbol_type_t typ = zbar_symbol_get_type(symbol);
  457. + const char *data = zbar_symbol_get_data(symbol);
  458. + printf("decoded %s symbol \"%s\"\n",
  459. + zbar_get_symbol_name(typ), data);
  460. + }
  461. +}
  462. +
  463. +int main (int argc, char **argv)
  464. +{
  465. + const char *device = "/dev/video0";
  466. +
  467. + /* create a Processor */
  468. + zbar_processor_t *proc = zbar_processor_create(1);
  469. +
  470. + /* configure the Processor */
  471. + zbar_processor_set_config(proc, 0, ZBAR_CFG_ENABLE, 1);
  472. +
  473. + /* initialize the Processor */
  474. + if(argc > 1)
  475. + device = argv[1];
  476. + zbar_processor_init(proc, device, 1);
  477. +
  478. + /* setup a callback */
  479. + zbar_processor_set_data_handler(proc, my_handler, NULL);
  480. +
  481. + /* enable the preview window */
  482. + zbar_processor_set_visible(proc, 1);
  483. + zbar_processor_set_active(proc, 1);
  484. +
  485. + /* keep scanning until user provides key/mouse input */
  486. + zbar_processor_user_wait(proc, -1);
  487. +
  488. + /* clean up */
  489. + zbar_processor_destroy(proc);
  490. +
  491. + return(0);
  492. +}
  493. diff --git a/examples/processor.cpp b/examples/processor.cpp
  494. new file mode 100644
  495. --- /dev/null
  496. +++ b/examples/processor.cpp
  497. @@ -0,0 +1,45 @@
  498. +#include <iostream>
  499. +#include <zbar.h>
  500. +
  501. +using namespace std;
  502. +using namespace zbar;
  503. +
  504. +class MyHandler : public Image::Handler
  505. +{
  506. + void image_callback (Image &image)
  507. + {
  508. + for(SymbolIterator symbol = image.symbol_begin();
  509. + symbol != image.symbol_end();
  510. + ++symbol)
  511. + cout << "decoded " << symbol->get_type_name() << " symbol "
  512. + << "\"" << symbol->get_data() << "\"" << endl;
  513. + }
  514. +};
  515. +
  516. +int main (int argc, char **argv)
  517. +{
  518. + // create and initialize a Processor
  519. + const char *device = "/dev/video0";
  520. + if(argc > 1)
  521. + device = argv[1];
  522. + Processor proc(true, device);
  523. +
  524. + // configure the Processor
  525. + proc.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
  526. +
  527. + // setup a callback
  528. + MyHandler my_handler;
  529. + proc.set_handler(my_handler);
  530. +
  531. + // enable the preview window
  532. + proc.set_visible();
  533. + proc.set_active();
  534. +
  535. + try {
  536. + // keep scanning until user provides key/mouse input
  537. + proc.user_wait();
  538. + }
  539. + catch(ClosedError &e) {
  540. + }
  541. + return(0);
  542. +}
  543. diff --git a/examples/processor.pl b/examples/processor.pl
  544. deleted file mode 100755
  545. --- a/examples/processor.pl
  546. +++ /dev/null
  547. @@ -1,35 +0,0 @@
  548. -#!/usr/bin/env perl
  549. -use warnings;
  550. -use strict;
  551. -require Barcode::ZBar;
  552. -
  553. -# create a Processor
  554. -my $proc = Barcode::ZBar::Processor->new();
  555. -
  556. -# configure the Processor
  557. -$proc->parse_config("enable");
  558. -
  559. -# initialize the Processor
  560. -$proc->init($ARGV[0] || '/dev/video0');
  561. -
  562. -# setup a callback
  563. -sub my_handler {
  564. - my ($proc, $image, $closure) = @_;
  565. -
  566. - # extract results
  567. - foreach my $symbol ($proc->get_results()) {
  568. - # do something useful with results
  569. - print('decoded ' . $symbol->get_type() .
  570. - ' symbol "' . $symbol->get_data() . "\"\n");
  571. - }
  572. -}
  573. -$proc->set_data_handler(\&my_handler);
  574. -
  575. -# enable the preview window
  576. -$proc->set_visible();
  577. -
  578. -# initiate scanning
  579. -$proc->set_active();
  580. -
  581. -# keep scanning until user provides key/mouse input
  582. -$proc->user_wait();
  583. diff --git a/examples/read_one.pl b/examples/read_one.pl
  584. deleted file mode 100755
  585. --- a/examples/read_one.pl
  586. +++ /dev/null
  587. @@ -1,29 +0,0 @@
  588. -#!/usr/bin/env perl
  589. -use warnings;
  590. -use strict;
  591. -require Barcode::ZBar;
  592. -
  593. -# create a Processor
  594. -my $proc = Barcode::ZBar::Processor->new();
  595. -
  596. -# configure the Processor
  597. -$proc->parse_config("enable");
  598. -
  599. -# initialize the Processor
  600. -$proc->init($ARGV[0] || '/dev/video0');
  601. -
  602. -# enable the preview window
  603. -$proc->set_visible();
  604. -
  605. -# read at least one barcode (or until window closed)
  606. -$proc->process_one();
  607. -
  608. -# hide the preview window
  609. -$proc->set_visible(0);
  610. -
  611. -# extract results
  612. -foreach my $symbol ($proc->get_results()) {
  613. - # do something useful with results
  614. - print('decoded ' . $symbol->get_type() .
  615. - ' symbol "' . $symbol->get_data() . "\"\n");
  616. -}
  617. diff --git a/examples/scan_image.c b/examples/scan_image.c
  618. --- a/examples/scan_image.c
  619. +++ b/examples/scan_image.c
  620. @@ -65,7 +65,7 @@ int main (int argc, char **argv)
  621. /* wrap image data */
  622. zbar_image_t *image = zbar_image_create();
  623. - zbar_image_set_format(image, *(int*)"Y800");
  624. + zbar_image_set_format(image, zbar_fourcc('Y','8','0','0'));
  625. zbar_image_set_size(image, width, height);
  626. zbar_image_set_data(image, raw, width * height, zbar_image_free_data);
  627. diff --git a/examples/scan_image.pl b/examples/scan_image.pl
  628. deleted file mode 100755
  629. --- a/examples/scan_image.pl
  630. +++ /dev/null
  631. @@ -1,37 +0,0 @@
  632. -#!/usr/bin/perl
  633. -use warnings;
  634. -use strict;
  635. -require Image::Magick;
  636. -require Barcode::ZBar;
  637. -
  638. -$ARGV[0] || die;
  639. -
  640. -# create a reader
  641. -my $scanner = Barcode::ZBar::ImageScanner->new();
  642. -
  643. -# configure the reader
  644. -$scanner->parse_config("enable");
  645. -
  646. -# obtain image data
  647. -my $magick = Image::Magick->new();
  648. -$magick->Read($ARGV[0]) && die;
  649. -my $raw = $magick->ImageToBlob(magick => 'GRAY', depth => 8);
  650. -
  651. -# wrap image data
  652. -my $image = Barcode::ZBar::Image->new();
  653. -$image->set_format('Y800');
  654. -$image->set_size($magick->Get(qw(columns rows)));
  655. -$image->set_data($raw);
  656. -
  657. -# scan the image for barcodes
  658. -my $n = $scanner->scan_image($image);
  659. -
  660. -# extract results
  661. -foreach my $symbol ($image->get_symbols()) {
  662. - # do something useful with results
  663. - print('decoded ' . $symbol->get_type() .
  664. - ' symbol "' . $symbol->get_data() . "\"\n");
  665. -}
  666. -
  667. -# clean up
  668. -undef($image);
  669. diff --git a/examples/upcrpc.pl b/examples/upcrpc.pl
  670. --- a/examples/upcrpc.pl
  671. +++ b/examples/upcrpc.pl
  672. @@ -3,7 +3,7 @@ use warnings;
  673. use strict;
  674. use Frontier::Client;
  675. use Data::Dumper;
  676. -my $s = Frontier::Client->new('url' => 'http://dev.upcdatabase.com/rpc');
  677. +my $s = Frontier::Client->new('url' => 'http://www.upcdatabase.com/rpc');
  678. $| = 1; # autoflush
  679. diff --git a/examples/upcrpc.py b/examples/upcrpc.py
  680. --- a/examples/upcrpc.py
  681. +++ b/examples/upcrpc.py
  682. @@ -2,7 +2,7 @@
  683. from xmlrpclib import ServerProxy
  684. import sys, re
  685. -server = ServerProxy("http://dev.upcdatabase.com/rpc")
  686. +server = ServerProxy("http://www.upcdatabase.com/rpc")
  687. ean_re = re.compile(r'^(UPC-A:|EAN-13:)?(\d{11,13})$', re.M)
  688. def lookup(decode):
  689. diff --git a/gtk/zbargtk.c b/gtk/zbargtk.c
  690. --- a/gtk/zbargtk.c
  691. +++ b/gtk/zbargtk.c
  692. @@ -1,5 +1,5 @@
  693. /*------------------------------------------------------------------------
  694. - * Copyright 2008-2009 (c) Jeff Brown <spadix@users.sourceforge.net>
  695. + * Copyright 2008-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  696. *
  697. * This file is part of the ZBar Bar Code Reader.
  698. *
  699. @@ -35,11 +35,6 @@
  700. #define DEFAULT_WIDTH 640
  701. #define DEFAULT_HEIGHT 480
  702. -/* adapted from v4l2 spec */
  703. -#define fourcc(a, b, c, d) \
  704. - ((long)(a) | ((long)(b) << 8) | \
  705. - ((long)(c) << 16) | ((long)(d) << 24))
  706. -
  707. enum {
  708. DECODED,
  709. DECODED_TEXT,
  710. @@ -88,15 +83,15 @@ gboolean zbar_gtk_image_from_pixbuf (zba
  711. /* these are all guesses... */
  712. if(nchannels == 3 && bps == 8)
  713. - type = fourcc('R','G','B','3');
  714. + type = zbar_fourcc('R','G','B','3');
  715. else if(nchannels == 4 && bps == 8)
  716. - type = fourcc('B','G','R','4'); /* FIXME alpha flipped?! */
  717. + type = zbar_fourcc('B','G','R','4'); /* FIXME alpha flipped?! */
  718. else if(nchannels == 1 && bps == 8)
  719. - type = fourcc('Y','8','0','0');
  720. + type = zbar_fourcc('Y','8','0','0');
  721. else if(nchannels == 3 && bps == 5)
  722. - type = fourcc('R','G','B','R');
  723. + type = zbar_fourcc('R','G','B','R');
  724. else if(nchannels == 3 && bps == 4)
  725. - type = fourcc('R','4','4','4'); /* FIXME maybe? */
  726. + type = zbar_fourcc('R','4','4','4'); /* FIXME maybe? */
  727. else {
  728. g_warning("unsupported combination: nchannels=%d bps=%d\n",
  729. nchannels, bps);
  730. @@ -142,10 +137,6 @@ static inline gboolean zbar_gtk_video_op
  731. gdk_threads_enter();
  732. - zbar->req_width = DEFAULT_WIDTH;
  733. - zbar->req_height = DEFAULT_HEIGHT;
  734. - gtk_widget_queue_resize(GTK_WIDGET(self));
  735. -
  736. zbar->video_opened = FALSE;
  737. if(zbar->thread)
  738. g_object_notify(G_OBJECT(self), "video-opened");
  739. @@ -184,6 +175,10 @@ static inline gboolean zbar_gtk_video_op
  740. */
  741. gdk_threads_enter();
  742. + if(zbar->video_width && zbar->video_height)
  743. + zbar_video_request_size(zbar->video,
  744. + zbar->video_width, zbar->video_height);
  745. +
  746. video_opened = !zbar_negotiate_format(zbar->video, zbar->window);
  747. if(video_opened) {
  748. @@ -209,7 +204,7 @@ static inline int zbar_gtk_process_image
  749. if(!image)
  750. return(-1);
  751. - zbar_image_t *tmp = zbar_image_convert(image, fourcc('Y','8','0','0'));
  752. + zbar_image_t *tmp = zbar_image_convert(image, zbar_fourcc('Y','8','0','0'));
  753. if(!tmp)
  754. return(-1);
  755. @@ -560,6 +555,19 @@ gboolean zbar_gtk_get_video_opened (ZBar
  756. return(zbar->video_opened);
  757. }
  758. +void zbar_gtk_request_video_size (ZBarGtk *self,
  759. + int width,
  760. + int height)
  761. +{
  762. + if(!self->_private || width < 0 || height < 0)
  763. + return;
  764. + ZBarGtkPrivate *zbar = ZBAR_GTK_PRIVATE(self->_private);
  765. +
  766. + zbar->req_width = zbar->video_width = width;
  767. + zbar->req_height = zbar->video_height = height;
  768. + gtk_widget_queue_resize(GTK_WIDGET(self));
  769. +}
  770. +
  771. static void zbar_gtk_set_property (GObject *object,
  772. guint prop_id,
  773. const GValue *value,
  774. @@ -613,8 +621,8 @@ static void zbar_gtk_init (ZBarGtk *self
  775. zbar->window = zbar_window_create();
  776. g_assert(zbar->window);
  777. - zbar->req_width = DEFAULT_WIDTH;
  778. - zbar->req_height = DEFAULT_HEIGHT;
  779. + zbar->req_width = zbar->video_width = DEFAULT_WIDTH;
  780. + zbar->req_height = zbar->video_width = DEFAULT_HEIGHT;
  781. /* spawn a thread to handle decoding and video */
  782. zbar->queue = g_async_queue_new();
  783. diff --git a/gtk/zbargtkprivate.h b/gtk/zbargtkprivate.h
  784. --- a/gtk/zbargtkprivate.h
  785. +++ b/gtk/zbargtkprivate.h
  786. @@ -71,6 +71,7 @@ typedef struct _ZBarGtkPrivate
  787. * protected by main gui lock
  788. */
  789. unsigned req_width, req_height;
  790. + unsigned video_width, video_height;
  791. gboolean video_opened;
  792. /* window is shared: owned by main gui thread.
  793. diff --git a/include/zbar.h b/include/zbar.h
  794. --- a/include/zbar.h
  795. +++ b/include/zbar.h
  796. @@ -1,5 +1,5 @@
  797. /*------------------------------------------------------------------------
  798. - * Copyright 2007-2009 (c) Jeff Brown <spadix@users.sourceforge.net>
  799. + * Copyright 2007-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  800. *
  801. * This file is part of the ZBar Bar Code Reader.
  802. *
  803. @@ -93,9 +93,12 @@ typedef enum zbar_symbol_type_e {
  804. ZBAR_EAN13 = 13, /**< EAN-13 */
  805. ZBAR_ISBN13 = 14, /**< ISBN-13 (from EAN-13). @since 0.4 */
  806. ZBAR_I25 = 25, /**< Interleaved 2 of 5. @since 0.4 */
  807. + ZBAR_DATABAR = 34, /**< GS1 DataBar (RSS). @since 0.11 */
  808. + ZBAR_DATABAR_EXP = 35, /**< GS1 DataBar Expanded. @since 0.11 */
  809. ZBAR_CODE39 = 39, /**< Code 39. @since 0.4 */
  810. ZBAR_PDF417 = 57, /**< PDF417. @since 0.6 */
  811. ZBAR_QRCODE = 64, /**< QR Code. @since 0.10 */
  812. + ZBAR_CODE93 = 93, /**< Code 93. @since 0.11 */
  813. ZBAR_CODE128 = 128, /**< Code 128 */
  814. ZBAR_SYMBOL = 0x00ff, /**< mask for base symbol type */
  815. ZBAR_ADDON2 = 0x0200, /**< 2-digit add-on flag */
  816. @@ -103,6 +106,17 @@ typedef enum zbar_symbol_type_e {
  817. ZBAR_ADDON = 0x0700, /**< add-on flag mask */
  818. } zbar_symbol_type_t;
  819. +/** decoded symbol coarse orientation.
  820. + * @since 0.11
  821. + */
  822. +typedef enum zbar_orientation_e {
  823. + ZBAR_ORIENT_UNKNOWN = -1, /**< unable to determine orientation */
  824. + ZBAR_ORIENT_UP, /**< upright, read left to right */
  825. + ZBAR_ORIENT_RIGHT, /**< sideways, read top to bottom */
  826. + ZBAR_ORIENT_DOWN, /**< upside-down, read right to left */
  827. + ZBAR_ORIENT_LEFT, /**< sideways, read bottom to top */
  828. +} zbar_orientation_t;
  829. +
  830. /** error codes. */
  831. typedef enum zbar_error_e {
  832. ZBAR_OK = 0, /**< no error */
  833. @@ -133,12 +147,33 @@ typedef enum zbar_config_e {
  834. ZBAR_CFG_MIN_LEN = 0x20, /**< minimum data length for valid decode */
  835. ZBAR_CFG_MAX_LEN, /**< maximum data length for valid decode */
  836. + ZBAR_CFG_UNCERTAINTY = 0x40,/**< required video consistency frames */
  837. +
  838. ZBAR_CFG_POSITION = 0x80, /**< enable scanner to collect position data */
  839. ZBAR_CFG_X_DENSITY = 0x100, /**< image scanner vertical scan density */
  840. ZBAR_CFG_Y_DENSITY, /**< image scanner horizontal scan density */
  841. } zbar_config_t;
  842. +/** decoder symbology modifier flags.
  843. + * @since 0.11
  844. + */
  845. +typedef enum zbar_modifier_e {
  846. + /** barcode tagged as GS1 (EAN.UCC) reserved
  847. + * (eg, FNC1 before first data character).
  848. + * data may be parsed as a sequence of GS1 AIs
  849. + */
  850. + ZBAR_MOD_GS1 = 0,
  851. +
  852. + /** barcode tagged as AIM reserved
  853. + * (eg, FNC1 after first character or digit pair)
  854. + */
  855. + ZBAR_MOD_AIM,
  856. +
  857. + /** number of modifiers */
  858. + ZBAR_MOD_NUM,
  859. +} zbar_modifier_t;
  860. +
  861. /** retrieve runtime library version information.
  862. * @param major set to the running major version (unless NULL)
  863. * @param minor set to the running minor version (unless NULL)
  864. @@ -171,6 +206,28 @@ extern const char *zbar_get_symbol_name(
  865. */
  866. extern const char *zbar_get_addon_name(zbar_symbol_type_t sym);
  867. +/** retrieve string name for configuration setting.
  868. + * @param config setting to name
  869. + * @returns static string name for config,
  870. + * or the empty string if value is not a known config
  871. + */
  872. +extern const char *zbar_get_config_name(zbar_config_t config);
  873. +
  874. +/** retrieve string name for modifier.
  875. + * @param modifier flag to name
  876. + * @returns static string name for modifier,
  877. + * or the empty string if the value is not a known flag
  878. + */
  879. +extern const char *zbar_get_modifier_name(zbar_modifier_t modifier);
  880. +
  881. +/** retrieve string name for orientation.
  882. + * @param orientation orientation encoding
  883. + * @returns the static string name for the specified orientation,
  884. + * or "UNKNOWN" if the orientation is not recognized
  885. + * @since 0.11
  886. + */
  887. +extern const char *zbar_get_orientation_name(zbar_orientation_t orientation);
  888. +
  889. /** parse a configuration string of the form "[symbology.]config[=value]".
  890. * the config must match one of the recognized names.
  891. * the symbology, if present, must match one of the recognized names.
  892. @@ -184,6 +241,30 @@ extern int zbar_parse_config(const char
  893. zbar_config_t *config,
  894. int *value);
  895. +/** consistently compute fourcc values across architectures
  896. + * (adapted from v4l2 specification)
  897. + * @since 0.11
  898. + */
  899. +#define zbar_fourcc(a, b, c, d) \
  900. + ((unsigned long)(a) | \
  901. + ((unsigned long)(b) << 8) | \
  902. + ((unsigned long)(c) << 16) | \
  903. + ((unsigned long)(d) << 24))
  904. +
  905. +/** parse a fourcc string into its encoded integer value.
  906. + * @since 0.11
  907. + */
  908. +static inline unsigned long zbar_fourcc_parse (const char *format)
  909. +{
  910. + unsigned long fourcc = 0;
  911. + if(format) {
  912. + int i;
  913. + for(i = 0; i < 4 && format[i]; i++)
  914. + fourcc |= ((unsigned long)format[i]) << (i * 8);
  915. + }
  916. + return(fourcc);
  917. +}
  918. +
  919. /** @internal type unsafe error API (don't use) */
  920. extern int _zbar_error_spew(const void *object,
  921. int verbosity);
  922. @@ -229,6 +310,20 @@ extern void zbar_symbol_ref(const zbar_s
  923. */
  924. extern zbar_symbol_type_t zbar_symbol_get_type(const zbar_symbol_t *symbol);
  925. +/** retrieve symbology boolean config settings.
  926. + * @returns a bitmask indicating which configs were set for the detected
  927. + * symbology during decoding.
  928. + * @since 0.11
  929. + */
  930. +extern unsigned int zbar_symbol_get_configs(const zbar_symbol_t *symbol);
  931. +
  932. +/** retrieve symbology modifier flag settings.
  933. + * @returns a bitmask indicating which characteristics were detected
  934. + * during decoding.
  935. + * @since 0.11
  936. + */
  937. +extern unsigned int zbar_symbol_get_modifiers(const zbar_symbol_t *symbol);
  938. +
  939. /** retrieve data decoded from symbol.
  940. * @returns the data string
  941. */
  942. @@ -284,6 +379,14 @@ extern int zbar_symbol_get_loc_x(const z
  943. extern int zbar_symbol_get_loc_y(const zbar_symbol_t *symbol,
  944. unsigned index);
  945. +/** retrieve general orientation of decoded symbol.
  946. + * @returns a coarse, axis-aligned indication of symbol orientation or
  947. + * ZBAR_ORIENT_UNKNOWN if unknown
  948. + * @since 0.11
  949. + */
  950. +extern zbar_orientation_t
  951. +zbar_symbol_get_orientation(const zbar_symbol_t *symbol);
  952. +
  953. /** iterate the set to which this symbol belongs (there can be only one).
  954. * @returns the next symbol in the set, or
  955. * @returns NULL when no more results are available
  956. @@ -357,6 +460,14 @@ extern int zbar_symbol_set_get_size(cons
  957. extern const zbar_symbol_t*
  958. zbar_symbol_set_first_symbol(const zbar_symbol_set_t *symbols);
  959. +/** raw result iterator.
  960. + * @returns the first decoded symbol result in a set, *before* filtering
  961. + * @returns NULL if the set is empty
  962. + * @since 0.11
  963. + */
  964. +extern const zbar_symbol_t*
  965. +zbar_symbol_set_first_unfiltered(const zbar_symbol_set_t *symbols);
  966. +
  967. /*@}*/
  968. /*------------------------------------------------------------*/
  969. @@ -456,6 +567,25 @@ extern unsigned zbar_image_get_width(con
  970. */
  971. extern unsigned zbar_image_get_height(const zbar_image_t *image);
  972. +/** retrieve both dimensions of the image.
  973. + * fills in the width and height in samples
  974. + */
  975. +extern void zbar_image_get_size(const zbar_image_t *image,
  976. + unsigned *width,
  977. + unsigned *height);
  978. +
  979. +/** retrieve the crop rectangle.
  980. + * fills in the image coordinates of the upper left corner and size
  981. + * of an axis-aligned rectangular area of the image that will be scanned.
  982. + * defaults to the full image
  983. + * @since 0.11
  984. + */
  985. +extern void zbar_image_get_crop(const zbar_image_t *image,
  986. + unsigned *x,
  987. + unsigned *y,
  988. + unsigned *width,
  989. + unsigned *height);
  990. +
  991. /** return the image sample data. the returned data buffer is only
  992. * valid until zbar_image_destroy() is called
  993. */
  994. @@ -505,12 +635,24 @@ extern void zbar_image_set_sequence(zbar
  995. unsigned sequence_num);
  996. /** specify the pixel size of the image.
  997. + * @note this also resets the crop rectangle to the full image
  998. + * (0, 0, width, height)
  999. * @note this does not affect the data!
  1000. */
  1001. extern void zbar_image_set_size(zbar_image_t *image,
  1002. unsigned width,
  1003. unsigned height);
  1004. +/** specify a rectangular region of the image to scan.
  1005. + * the rectangle will be clipped to the image boundaries.
  1006. + * defaults to the full image specified by zbar_image_set_size()
  1007. + */
  1008. +extern void zbar_image_set_crop(zbar_image_t *image,
  1009. + unsigned x,
  1010. + unsigned y,
  1011. + unsigned width,
  1012. + unsigned height);
  1013. +
  1014. /** specify image sample data. when image data is no longer needed by
  1015. * the library the specific data cleanup handler will be called
  1016. * (unless NULL)
  1017. @@ -1148,6 +1290,14 @@ static inline int zbar_decoder_parse_con
  1018. zbar_decoder_set_config(decoder, sym, cfg, val));
  1019. }
  1020. +/** retrieve symbology boolean config settings.
  1021. + * @returns a bitmask indicating which configs are currently set for the
  1022. + * specified symbology.
  1023. + * @since 0.11
  1024. + */
  1025. +extern unsigned int zbar_decoder_get_configs(const zbar_decoder_t *decoder,
  1026. + zbar_symbol_type_t symbology);
  1027. +
  1028. /** clear all decoder state.
  1029. * any partial symbols are flushed
  1030. */
  1031. @@ -1195,6 +1345,20 @@ zbar_decoder_get_data_length(const zbar_
  1032. extern zbar_symbol_type_t
  1033. zbar_decoder_get_type(const zbar_decoder_t *decoder);
  1034. +/** retrieve modifier flags for the last decoded symbol.
  1035. + * @returns a bitmask indicating which characteristics were detected
  1036. + * during decoding.
  1037. + * @since 0.11
  1038. + */
  1039. +extern unsigned int zbar_decoder_get_modifiers(const zbar_decoder_t *decoder);
  1040. +
  1041. +/** retrieve last decode direction.
  1042. + * @returns 1 for forward and -1 for reverse
  1043. + * @returns 0 if the decode direction is unknown or does not apply
  1044. + * @since 0.11
  1045. + */
  1046. +extern int zbar_decoder_get_direction(const zbar_decoder_t *decoder);
  1047. +
  1048. /** setup data handler callback.
  1049. * the registered function will be called by the decoder
  1050. * just before zbar_decode_width() returns a non-zero value.
  1051. diff --git a/include/zbar/Decoder.h b/include/zbar/Decoder.h
  1052. --- a/include/zbar/Decoder.h
  1053. +++ b/include/zbar/Decoder.h
  1054. @@ -1,5 +1,5 @@
  1055. //------------------------------------------------------------------------
  1056. -// Copyright 2007-2009 (c) Jeff Brown <spadix@users.sourceforge.net>
  1057. +// Copyright 2007-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  1058. //
  1059. // This file is part of the ZBar Bar Code Reader.
  1060. //
  1061. @@ -149,6 +149,14 @@ class Decoder {
  1062. return(zbar_decoder_get_data_length(_decoder));
  1063. }
  1064. + /// retrieve last decode direction.
  1065. + /// see zbar_decoder_get_direction()
  1066. + /// @since 0.11
  1067. + int get_direction() const
  1068. + {
  1069. + return(zbar_decoder_get_direction(_decoder));
  1070. + }
  1071. +
  1072. /// setup callback to handle result data.
  1073. void set_handler (Handler &handler)
  1074. {
  1075. diff --git a/include/zbar/Image.h b/include/zbar/Image.h
  1076. --- a/include/zbar/Image.h
  1077. +++ b/include/zbar/Image.h
  1078. @@ -1,5 +1,5 @@
  1079. //------------------------------------------------------------------------
  1080. -// Copyright 2007-2009 (c) Jeff Brown <spadix@users.sourceforge.net>
  1081. +// Copyright 2007-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  1082. //
  1083. // This file is part of the ZBar Bar Code Reader.
  1084. //
  1085. @@ -67,7 +67,12 @@ public:
  1086. {
  1087. if(userdata) {
  1088. Image *image = (Image*)zbar_image_get_userdata(zimg);
  1089. - ((Handler*)userdata)->image_callback(*image);
  1090. + if(image)
  1091. + ((Handler*)userdata)->image_callback(*image);
  1092. + else {
  1093. + Image tmp(zimg, 1);
  1094. + ((Handler*)userdata)->image_callback(tmp);
  1095. + }
  1096. }
  1097. }
  1098. };
  1099. @@ -110,6 +115,8 @@ public:
  1100. ~Image ()
  1101. {
  1102. + set_data(NULL, 0);
  1103. + zbar_image_set_userdata(_img, NULL);
  1104. zbar_image_ref(_img, -1);
  1105. }
  1106. @@ -143,12 +150,7 @@ public:
  1107. /// see zbar_image_set_format()
  1108. void set_format (const std::string& format)
  1109. {
  1110. - if(format.length() != 4)
  1111. - throw FormatError();
  1112. - unsigned long fourcc = ((format[0] & 0xff) |
  1113. - ((format[1] & 0xff) << 8) |
  1114. - ((format[2] & 0xff) << 16) |
  1115. - ((format[3] & 0xff) << 24));
  1116. + unsigned long fourcc = zbar_fourcc_parse(format.c_str());
  1117. zbar_image_set_format(_img, fourcc);
  1118. }
  1119. @@ -183,6 +185,15 @@ public:
  1120. return(zbar_image_get_height(_img));
  1121. }
  1122. + /// retrieve both dimensions of the image.
  1123. + /// see zbar_image_get_size()
  1124. + /// @since 0.11
  1125. + void get_size (unsigned &width,
  1126. + unsigned &height) const
  1127. + {
  1128. + zbar_image_get_size(_img, &width, &height);
  1129. + }
  1130. +
  1131. /// specify the pixel size of the image.
  1132. /// see zbar_image_set_size()
  1133. void set_size (unsigned width,
  1134. @@ -191,6 +202,26 @@ public:
  1135. zbar_image_set_size(_img, width, height);
  1136. }
  1137. + /// retrieve the scan crop rectangle.
  1138. + /// see zbar_image_get_crop()
  1139. + void get_crop (unsigned &x,
  1140. + unsigned &y,
  1141. + unsigned &width,
  1142. + unsigned &height) const
  1143. + {
  1144. + zbar_image_get_crop(_img, &x, &y, &width, &height);
  1145. + }
  1146. +
  1147. + /// set the scan crop rectangle.
  1148. + /// see zbar_image_set_crop()
  1149. + void set_crop (unsigned x,
  1150. + unsigned y,
  1151. + unsigned width,
  1152. + unsigned height)
  1153. + {
  1154. + zbar_image_set_crop(_img, x, y, width, height);
  1155. + }
  1156. +
  1157. /// return the image sample data.
  1158. /// see zbar_image_get_data()
  1159. const void *get_data () const
  1160. diff --git a/include/zbar/Processor.h b/include/zbar/Processor.h
  1161. --- a/include/zbar/Processor.h
  1162. +++ b/include/zbar/Processor.h
  1163. @@ -1,5 +1,5 @@
  1164. //------------------------------------------------------------------------
  1165. -// Copyright 2007-2009 (c) Jeff Brown <spadix@users.sourceforge.net>
  1166. +// Copyright 2007-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  1167. //
  1168. // This file is part of the ZBar Bar Code Reader.
  1169. //
  1170. @@ -183,8 +183,8 @@ class Processor {
  1171. void force_format (std::string& input_format,
  1172. std::string& output_format)
  1173. {
  1174. - unsigned long ifourcc = *(unsigned long*)input_format.c_str();
  1175. - unsigned long ofourcc = *(unsigned long*)output_format.c_str();
  1176. + unsigned long ifourcc = zbar_fourcc_parse(input_format.c_str());
  1177. + unsigned long ofourcc = zbar_fourcc_parse(output_format.c_str());
  1178. if(zbar_processor_force_format(_processor, ifourcc, ofourcc))
  1179. throw_exception(_processor);
  1180. }
  1181. diff --git a/include/zbar/QZBarImage.h b/include/zbar/QZBarImage.h
  1182. --- a/include/zbar/QZBarImage.h
  1183. +++ b/include/zbar/QZBarImage.h
  1184. @@ -1,5 +1,5 @@
  1185. //------------------------------------------------------------------------
  1186. -// Copyright 2008-2009 (c) Jeff Brown <spadix@users.sourceforge.net>
  1187. +// Copyright 2008-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  1188. //
  1189. // This file is part of the ZBar Bar Code Reader.
  1190. //
  1191. @@ -53,7 +53,7 @@ public:
  1192. unsigned width = bpl / 4;
  1193. unsigned height = qimg.height();
  1194. set_size(width, height);
  1195. - set_format('B' | ('G' << 8) | ('R' << 16) | ('4' << 24));
  1196. + set_format(zbar_fourcc('B','G','R','4'));
  1197. unsigned long datalen = qimg.numBytes();
  1198. set_data(qimg.bits(), datalen);
  1199. diff --git a/include/zbar/Symbol.h b/include/zbar/Symbol.h
  1200. --- a/include/zbar/Symbol.h
  1201. +++ b/include/zbar/Symbol.h
  1202. @@ -1,5 +1,5 @@
  1203. //------------------------------------------------------------------------
  1204. -// Copyright 2007-2009 (c) Jeff Brown <spadix@users.sourceforge.net>
  1205. +// Copyright 2007-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  1206. //
  1207. // This file is part of the ZBar Bar Code Reader.
  1208. //
  1209. @@ -64,6 +64,21 @@ public:
  1210. ref(-1);
  1211. }
  1212. + /// assignment.
  1213. + SymbolSet& operator= (const SymbolSet& syms)
  1214. + {
  1215. + syms.ref();
  1216. + ref(-1);
  1217. + _syms = syms._syms;
  1218. + return(*this);
  1219. + }
  1220. +
  1221. + /// truth testing.
  1222. + bool operator! () const
  1223. + {
  1224. + return(!_syms || !get_size());
  1225. + }
  1226. +
  1227. /// manipulate reference count.
  1228. void ref (int delta = 1) const
  1229. {
  1230. @@ -77,7 +92,7 @@ public:
  1231. return(_syms);
  1232. }
  1233. - int get_size ()
  1234. + int get_size () const
  1235. {
  1236. return((_syms) ? zbar_symbol_set_get_size(_syms) : 0);
  1237. }
  1238. @@ -112,9 +127,16 @@ public:
  1239. /// copy constructor.
  1240. Point (const Point& pt)
  1241. + : x(pt.x),
  1242. + y(pt.y)
  1243. + { }
  1244. +
  1245. + /// assignment.
  1246. + Point& operator= (const Point& pt)
  1247. {
  1248. x = pt.x;
  1249. y = pt.y;
  1250. + return(*this);
  1251. }
  1252. };
  1253. @@ -135,7 +157,7 @@ public:
  1254. _index = -1;
  1255. }
  1256. - /// constructor.
  1257. + /// copy constructor.
  1258. PointIterator (const PointIterator& iter)
  1259. : _sym(iter._sym),
  1260. _index(iter._index)
  1261. @@ -149,6 +171,22 @@ public:
  1262. _sym->ref(-1);
  1263. }
  1264. + /// assignment.
  1265. + PointIterator& operator= (const PointIterator& iter)
  1266. + {
  1267. + iter._sym->ref();
  1268. + _sym->ref(-1);
  1269. + _sym = iter._sym;
  1270. + _index = iter._index;
  1271. + return(*this);
  1272. + }
  1273. +
  1274. + /// truth testing.
  1275. + bool operator! () const
  1276. + {
  1277. + return(!_sym || _index < 0);
  1278. + }
  1279. +
  1280. /// advance iterator to next Point.
  1281. PointIterator& operator++ ()
  1282. {
  1283. @@ -161,7 +199,9 @@ public:
  1284. /// retrieve currently referenced Point.
  1285. const Point operator* () const
  1286. {
  1287. - assert(_index >= 0);
  1288. + assert(!!*this);
  1289. + if(!*this)
  1290. + return(Point());
  1291. return(Point(zbar_symbol_get_loc_x(*_sym, _index),
  1292. zbar_symbol_get_loc_y(*_sym, _index)));
  1293. }
  1294. @@ -213,6 +253,32 @@ public:
  1295. ref(-1);
  1296. }
  1297. + /// assignment.
  1298. + Symbol& operator= (const Symbol& sym)
  1299. + {
  1300. + sym.ref(1);
  1301. + ref(-1);
  1302. + _sym = sym._sym;
  1303. + _type = sym._type;
  1304. + _data = sym._data;
  1305. + return(*this);
  1306. + }
  1307. +
  1308. + Symbol& operator= (const zbar_symbol_t *sym)
  1309. + {
  1310. + if(sym)
  1311. + zbar_symbol_ref(sym, 1);
  1312. + ref(-1);
  1313. + init(sym);
  1314. + return(*this);
  1315. + }
  1316. +
  1317. + /// truth testing.
  1318. + bool operator! () const
  1319. + {
  1320. + return(!_sym);
  1321. + }
  1322. +
  1323. void ref (int delta = 1) const
  1324. {
  1325. if(_sym)
  1326. @@ -311,6 +377,13 @@ public:
  1327. return((_sym) ? zbar_symbol_get_loc_y(_sym, index) : -1);
  1328. }
  1329. + /// see zbar_symbol_get_orientation().
  1330. + /// @since 0.11
  1331. + int get_orientation () const
  1332. + {
  1333. + return(zbar_symbol_get_orientation(_sym));
  1334. + }
  1335. +
  1336. /// see zbar_symbol_xml().
  1337. const std::string xml () const
  1338. {
  1339. @@ -320,9 +393,6 @@ public:
  1340. }
  1341. protected:
  1342. -
  1343. - friend class SymbolIterator;
  1344. -
  1345. /// (re)initialize Symbol from C symbol object.
  1346. void init (const zbar_symbol_t *sym = NULL)
  1347. {
  1348. @@ -361,7 +431,7 @@ public:
  1349. {
  1350. const zbar_symbol_set_t *zsyms = _syms;
  1351. if(zsyms)
  1352. - _sym.init(zbar_symbol_set_first_symbol(zsyms));
  1353. + _sym = zbar_symbol_set_first_symbol(zsyms);
  1354. }
  1355. /// copy constructor.
  1356. @@ -370,25 +440,33 @@ public:
  1357. {
  1358. const zbar_symbol_set_t *zsyms = _syms;
  1359. if(zsyms)
  1360. - _sym.init(zbar_symbol_set_first_symbol(zsyms));
  1361. + _sym = zbar_symbol_set_first_symbol(zsyms);
  1362. }
  1363. ~SymbolIterator ()
  1364. {
  1365. - _sym.init();
  1366. + }
  1367. +
  1368. + /// assignment.
  1369. + SymbolIterator& operator= (const SymbolIterator& iter)
  1370. + {
  1371. + _syms = iter._syms;
  1372. + _sym = iter._sym;
  1373. + return(*this);
  1374. + }
  1375. +
  1376. + bool operator! () const
  1377. + {
  1378. + return(!_syms || !_sym);
  1379. }
  1380. /// advance iterator to next Symbol.
  1381. SymbolIterator& operator++ ()
  1382. {
  1383. - const zbar_symbol_t *zsym = _sym;
  1384. - if(zsym)
  1385. - _sym.init(zbar_symbol_next(zsym));
  1386. - else {
  1387. - const zbar_symbol_set_t *zsyms = _syms;
  1388. - if(zsyms)
  1389. - _sym.init(zbar_symbol_set_first_symbol(zsyms));
  1390. - }
  1391. + if(!!_sym)
  1392. + _sym = zbar_symbol_next(_sym);
  1393. + else if(!!_syms)
  1394. + _sym = zbar_symbol_set_first_symbol(_syms);
  1395. return(*this);
  1396. }
  1397. diff --git a/include/zbar/Video.h b/include/zbar/Video.h
  1398. --- a/include/zbar/Video.h
  1399. +++ b/include/zbar/Video.h
  1400. @@ -1,5 +1,5 @@
  1401. //------------------------------------------------------------------------
  1402. -// Copyright 2007-2009 (c) Jeff Brown <spadix@users.sourceforge.net>
  1403. +// Copyright 2007-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  1404. //
  1405. // This file is part of the ZBar Bar Code Reader.
  1406. //
  1407. @@ -92,7 +92,7 @@ public:
  1408. /// see zbar_video_init()
  1409. void init (std::string& format)
  1410. {
  1411. - unsigned int fourcc = *(unsigned int*)format.c_str();
  1412. + unsigned int fourcc = zbar_fourcc_parse(format.c_str());
  1413. if(zbar_video_init(_video, fourcc))
  1414. throw_exception(_video);
  1415. }
  1416. diff --git a/include/zbar/zbargtk.h b/include/zbar/zbargtk.h
  1417. --- a/include/zbar/zbargtk.h
  1418. +++ b/include/zbar/zbargtk.h
  1419. @@ -136,7 +136,7 @@ struct _ZBarGtkClass {
  1420. GType zbar_gtk_get_type(void) G_GNUC_CONST;
  1421. -/**
  1422. +/**
  1423. * zbar_gtk_new:
  1424. * create a new barcode reader widget instance.
  1425. * initially has no associated video device or image.
  1426. @@ -189,7 +189,17 @@ void zbar_gtk_set_video_enabled(ZBarGtk
  1427. */
  1428. gboolean zbar_gtk_get_video_opened(ZBarGtk *zbar);
  1429. -/**
  1430. +/** set video camera resolution.
  1431. + * @width: width in pixels
  1432. + * @height: height in pixels
  1433. + *
  1434. + * @note this call must be made before video is initialized
  1435. + */
  1436. +void zbar_gtk_request_video_size(ZBarGtk *zbar,
  1437. + int width,
  1438. + int height);
  1439. +
  1440. +/**
  1441. * utility function to populate a zbar_image_t from a GdkPixbuf.
  1442. * @image: the zbar library image destination to populate
  1443. * @pixbuf: the GdkPixbuf source
  1444. diff --git a/iphone/ChangeLog b/iphone/ChangeLog
  1445. new file mode 100644
  1446. --- /dev/null
  1447. +++ b/iphone/ChangeLog
  1448. @@ -0,0 +1,70 @@
  1449. +version 1.0.1:
  1450. + * hotfix broken ZBarHelpController back button
  1451. + * release updates
  1452. + - update docs
  1453. + * fix support for GS1 AIs
  1454. + * fix simulated camera image orientation/scaling
  1455. + * cleanup and expose ZBarHelpController
  1456. + * expose enable for reader capture processing
  1457. + * workaround iOS 4.2 hang
  1458. + - update to use latest SDK
  1459. + * add support for Code 93 symbology
  1460. +
  1461. +version 1.0:
  1462. + * update to SDK 4.1, clean out LLVM warnings
  1463. + * fix camera simulation gesture
  1464. +
  1465. +version 0.1.2:
  1466. + * fix missing header dependency
  1467. + * doc enhancements
  1468. + * force controls to front when showsZBarControls is enabled
  1469. + * fix initial zoom crop (performance bug)
  1470. + * workaround iPhone quartz access past image data
  1471. +
  1472. +version 0.1.1:
  1473. + * migrate to binary iPhone SDK distribution (NB backward incompatibilities!)
  1474. + - restructure headers
  1475. +
  1476. +version 0.1:
  1477. + * workaround for iPhone simulator builds
  1478. + - refactor ZBarReaderView for capture/simulator specific implementations
  1479. + - fix tracking calculations
  1480. + - fix captured video frame color conversion
  1481. + * fix for poor iPhone 4 performance
  1482. + * enable torch for iPhone 4
  1483. + * fix iPhone circular ref bug
  1484. + * add iPhone cache flush, change new libs to weak refs
  1485. + * fix iPhone async ref bug
  1486. + * enhance iPhone readertest w/more options
  1487. + * add iPhone zoom support, integrate with crop
  1488. + * add iPhone OS 4.0 video capture support
  1489. + - replacement view controller for new camera reader
  1490. + - separate view for use without controller
  1491. + - separate capture delegate for use standalone
  1492. + - add continuous autofocus
  1493. + * cleanup and expose iphone help display API
  1494. + * fixes to new iphone help display
  1495. + * migrate iphone help display to integrated web page (NB resource updates!)
  1496. + - allows easier customization
  1497. + - local links open directly, external links confirm and jump out to Safari
  1498. + - JavaScript hook for help context customization
  1499. + - also enhanced default help (note this changes the required resources)
  1500. + - fix to disable scanning during help overlay
  1501. + - thanks to iafanasyev and others for detailed suggestions
  1502. + * fix iphone custom overlay response (bug #2959617)
  1503. + - thanks to an anonymous user for the patch!
  1504. + * iphone widget performance tuning enhancements
  1505. + - fix crop calculation bug in ZBarImage
  1506. + - add properties to control pre-scan image cropping and scaling
  1507. + - add property for scanner cache control
  1508. + - enable some scanner density control (FIXME should be property)
  1509. + - fix ifdef for quality control (FIXME should be property)
  1510. + - add "sequence" mode test (not actually so useful)
  1511. + * realtime scanning for iphone widget
  1512. + - uses UIGetScreenImage() (NB private)
  1513. + - ZBarImage from CGImage (instead of UIImage)
  1514. + - add crop to scaling step
  1515. + - expose symbol set unfiltered results
  1516. + * iphone widget back compat updates, add basic test app
  1517. + * add Obj-C wrapper
  1518. + * first pass working iPhone "widget"
  1519. diff --git a/iphone/README b/iphone/README
  1520. new file mode 100644
  1521. --- /dev/null
  1522. +++ b/iphone/README
  1523. @@ -0,0 +1,59 @@
  1524. +ZBar iPhone SDK
  1525. +===============
  1526. +
  1527. +ZBar Bar Code Reader is an open source software suite for reading bar
  1528. +codes from various sources, such as video streams, image files and raw
  1529. +intensity sensors. It supports EAN-13/UPC-A, UPC-E, EAN-8, DataBar,
  1530. +Code 128, Code 93, Code 39, Interleaved 2 of 5 and QR Code. These are
  1531. +the Objective C wrappers and integrated widget for developing with the
  1532. +library on the iPhone platform.
  1533. +
  1534. +Check the ZBar project home page for the latest release, forums, etc.
  1535. +
  1536. +* http://zbar.sourceforge.net/iphone
  1537. +
  1538. +Installation
  1539. +------------
  1540. +
  1541. +If you are migrating from a pre-SDK source version of the library,
  1542. +first make sure you remove all of the old references to zbar.xcodeproj
  1543. +and libzbar.a and revert any related build settings.
  1544. +
  1545. +To add the SDK to an Xcode project:
  1546. +
  1547. + 1. Drag ZBarSDK into your Xcode project.
  1548. + 3. Add these system frameworks to your project:
  1549. + * AVFoundation.framework (weak)
  1550. + * CoreMedia.framework (weak)
  1551. + * CoreVideo.framework (weak)
  1552. + * QuartzCore.framework
  1553. + * libiconv.dylib
  1554. +
  1555. +Documentation
  1556. +-------------
  1557. +
  1558. +See Documentation.html for complete SDK documentation.
  1559. +
  1560. +Examples
  1561. +--------
  1562. +
  1563. +A tutorial that walks through installing and using the SDK is
  1564. +available in the documentation. The SDK disk image also contains the
  1565. +resulting Xcode project at Examples/ReaderSample.
  1566. +
  1567. +Examples/readertest demonstrates most of the configuration options
  1568. +available for the reader.
  1569. +
  1570. +You should be able to open and build the examples directly from the
  1571. +disk image. If not, please copy them to your local drive and build
  1572. +from there.
  1573. +
  1574. +Copyright and License
  1575. +---------------------
  1576. +
  1577. +Licensed under the GNU Lesser General Public License, version 2.1.
  1578. +http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
  1579. +
  1580. +Copyright 2008-2010 Š Jeff Brown <spadix@users.sourceforge.net> et al
  1581. +
  1582. +See the included files COPYING and LICENSE for details
  1583. diff --git a/iphone/ZBarCVImage.h b/iphone/ZBarCVImage.h
  1584. new file mode 100644
  1585. --- /dev/null
  1586. +++ b/iphone/ZBarCVImage.h
  1587. @@ -0,0 +1,43 @@
  1588. +//------------------------------------------------------------------------
  1589. +// Copyright 2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  1590. +//
  1591. +// This file is part of the ZBar Bar Code Reader.
  1592. +//
  1593. +// The ZBar Bar Code Reader is free software; you can redistribute it
  1594. +// and/or modify it under the terms of the GNU Lesser Public License as
  1595. +// published by the Free Software Foundation; either version 2.1 of
  1596. +// the License, or (at your option) any later version.
  1597. +//
  1598. +// The ZBar Bar Code Reader is distributed in the hope that it will be
  1599. +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  1600. +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  1601. +// GNU Lesser Public License for more details.
  1602. +//
  1603. +// You should have received a copy of the GNU Lesser Public License
  1604. +// along with the ZBar Bar Code Reader; if not, write to the Free
  1605. +// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  1606. +// Boston, MA 02110-1301 USA
  1607. +//
  1608. +// http://sourceforge.net/projects/zbar
  1609. +//------------------------------------------------------------------------
  1610. +
  1611. +#import <ZBarSDK/ZBarImage.h>
  1612. +#import <CoreVideo/CoreVideo.h>
  1613. +
  1614. +// ZBarImage referring to a CVPixelBuffer. used internally to handle
  1615. +// asynchronous conversion to UIImage
  1616. +
  1617. +@interface ZBarCVImage
  1618. + : ZBarImage
  1619. +{
  1620. + CVPixelBufferRef pixelBuffer;
  1621. + void *rgbBuffer;
  1622. + NSInvocationOperation *conversion;
  1623. +}
  1624. +
  1625. +- (void) waitUntilConverted;
  1626. +
  1627. +@property (nonatomic) CVPixelBufferRef pixelBuffer;
  1628. +@property (nonatomic, readonly) void *rgbBuffer;
  1629. +
  1630. +@end
  1631. diff --git a/iphone/ZBarCVImage.m b/iphone/ZBarCVImage.m
  1632. new file mode 100644
  1633. --- /dev/null
  1634. +++ b/iphone/ZBarCVImage.m
  1635. @@ -0,0 +1,195 @@
  1636. +//------------------------------------------------------------------------
  1637. +// Copyright 2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  1638. +//
  1639. +// This file is part of the ZBar Bar Code Reader.
  1640. +//
  1641. +// The ZBar Bar Code Reader is free software; you can redistribute it
  1642. +// and/or modify it under the terms of the GNU Lesser Public License as
  1643. +// published by the Free Software Foundation; either version 2.1 of
  1644. +// the License, or (at your option) any later version.
  1645. +//
  1646. +// The ZBar Bar Code Reader is distributed in the hope that it will be
  1647. +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  1648. +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  1649. +// GNU Lesser Public License for more details.
  1650. +//
  1651. +// You should have received a copy of the GNU Lesser Public License
  1652. +// along with the ZBar Bar Code Reader; if not, write to the Free
  1653. +// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  1654. +// Boston, MA 02110-1301 USA
  1655. +//
  1656. +// http://sourceforge.net/projects/zbar
  1657. +//------------------------------------------------------------------------
  1658. +
  1659. +#import "ZBarCVImage.h"
  1660. +#define MODULE ZBarCVImage
  1661. +#import "debug.h"
  1662. +
  1663. +static NSOperationQueue *conversionQueue;
  1664. +
  1665. +static const void*
  1666. +asyncProvider_getBytePointer (void *info)
  1667. +{
  1668. + // block until data is available
  1669. + ZBarCVImage *image = info;
  1670. + assert(image);
  1671. + [image waitUntilConverted];
  1672. + void *buf = image.rgbBuffer;
  1673. + assert(buf);
  1674. + return(buf);
  1675. +}
  1676. +
  1677. +static const CGDataProviderDirectCallbacks asyncProvider = {
  1678. + .version = 0,
  1679. + .getBytePointer = asyncProvider_getBytePointer,
  1680. + .releaseBytePointer = NULL,
  1681. + .getBytesAtPosition = NULL,
  1682. + .releaseInfo = (void*)CFRelease,
  1683. +};
  1684. +
  1685. +@implementation ZBarCVImage
  1686. +
  1687. +@synthesize pixelBuffer, rgbBuffer;
  1688. +
  1689. +- (void) dealloc
  1690. +{
  1691. + self.pixelBuffer = NULL;
  1692. + if(rgbBuffer) {
  1693. + free(rgbBuffer);
  1694. + rgbBuffer = NULL;
  1695. + }
  1696. + [conversion release];
  1697. + conversion = nil;
  1698. + [super dealloc];
  1699. +}
  1700. +
  1701. +- (void) setPixelBuffer: (CVPixelBufferRef) newbuf
  1702. +{
  1703. + CVPixelBufferRef oldbuf = pixelBuffer;
  1704. + if(newbuf)
  1705. + CVPixelBufferRetain(newbuf);
  1706. + pixelBuffer = newbuf;
  1707. + if(oldbuf)
  1708. + CVPixelBufferRelease(oldbuf);
  1709. +}
  1710. +
  1711. +- (void) waitUntilConverted
  1712. +{
  1713. + // operation will at least have been queued already
  1714. + NSOperation *op = [conversion retain];
  1715. + if(!op)
  1716. + return;
  1717. + [op waitUntilFinished];
  1718. + [op release];
  1719. +}
  1720. +
  1721. +- (UIImage*) UIImageWithOrientation: (UIImageOrientation) orient
  1722. +{
  1723. + if(!conversion && !rgbBuffer) {
  1724. + // start format conversion in separate thread
  1725. + NSOperationQueue *queue = conversionQueue;
  1726. + if(!queue) {
  1727. + queue = conversionQueue = [NSOperationQueue new];
  1728. + queue.maxConcurrentOperationCount = 1;
  1729. + }
  1730. + else
  1731. + [queue waitUntilAllOperationsAreFinished];
  1732. +
  1733. + conversion = [[NSInvocationOperation alloc]
  1734. + initWithTarget: self
  1735. + selector: @selector(convertCVtoRGB)
  1736. + object: nil];
  1737. + [queue addOperation: conversion];
  1738. + [conversion release];
  1739. + }
  1740. +
  1741. + // create UIImage before converted data is available
  1742. + CGSize size = self.size;
  1743. + int w = size.width;
  1744. + int h = size.height;
  1745. +
  1746. + CGDataProviderRef datasrc =
  1747. + CGDataProviderCreateDirect([self retain], 3 * w * h, &asyncProvider);
  1748. + CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
  1749. + CGImageRef cgimg =
  1750. + CGImageCreate(w, h, 8, 24, 3 * w, cs,
  1751. + kCGBitmapByteOrderDefault, datasrc,
  1752. + NULL, YES, kCGRenderingIntentDefault);
  1753. + CGColorSpaceRelease(cs);
  1754. + CGDataProviderRelease(datasrc);
  1755. +
  1756. + UIImage *uiimg =
  1757. + [UIImage imageWithCGImage: cgimg
  1758. + scale: 1
  1759. + orientation: orient];
  1760. + CGImageRelease(cgimg);
  1761. +
  1762. + return(uiimg);
  1763. +}
  1764. +
  1765. +// convert video frame to a CGImage compatible RGB format
  1766. +// FIXME this is temporary until we can find the native way...
  1767. +- (void) convertCVtoRGB
  1768. +{
  1769. + timer_start;
  1770. + unsigned long format = self.format;
  1771. + assert(format == zbar_fourcc('C','V','2','P'));
  1772. + if(format != zbar_fourcc('C','V','2','P'))
  1773. + return;
  1774. +
  1775. + CVPixelBufferLockBaseAddress(pixelBuffer, kCVPixelBufferLock_ReadOnly);
  1776. + int w = CVPixelBufferGetWidth(pixelBuffer);
  1777. + int h = CVPixelBufferGetHeight(pixelBuffer);
  1778. + int dy = CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, 0);
  1779. + int duv = CVPixelBufferGetBytesPerRowOfPlane(pixelBuffer, 1);
  1780. + uint8_t *py = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0);
  1781. + uint8_t *puv = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 1);
  1782. + if(!py || !puv || dy < w || duv < w)
  1783. + goto error;
  1784. +
  1785. + int datalen = 3 * w * h;
  1786. + // Quartz accesses some undocumented amount past allocated data?
  1787. + // ...allocate extra to compensate
  1788. + uint8_t *pdst = rgbBuffer = malloc(datalen + 3 * w);
  1789. + if(!pdst)
  1790. + goto error;
  1791. + [self setData: rgbBuffer
  1792. + withLength: datalen];
  1793. +
  1794. + for(int y = 0; y < h; y++) {
  1795. + const uint8_t *qy = py;
  1796. + const uint8_t *quv = puv;
  1797. + for(int x = 0; x < w; x++) {
  1798. + int Y1 = *(qy++) - 16;
  1799. + int Cb = *(quv) - 128;
  1800. + int Cr = *(quv + 1) - 128;
  1801. + Y1 *= 4769;
  1802. + quv += (x & 1) << 1;
  1803. + int r = (Y1 + 6537 * Cr + 2048) / 4096;
  1804. + int g = (Y1 - 1604 * Cb - 3329 * Cr + 2048) / 4096;
  1805. + int b = (Y1 + 8263 * Cb + 2048) / 4096;
  1806. +
  1807. + r = (r | -!!(r >> 8)) & -((r >> 8) >= 0);
  1808. + g = (g | -!!(g >> 8)) & -((g >> 8) >= 0);
  1809. + b = (b | -!!(b >> 8)) & -((b >> 8) >= 0);
  1810. +
  1811. + *(pdst++) = r;
  1812. + *(pdst++) = g;
  1813. + *(pdst++) = b;
  1814. + }
  1815. + py += dy;
  1816. + if(y & 1)
  1817. + puv += duv;
  1818. + }
  1819. +
  1820. +error:
  1821. + CVPixelBufferUnlockBaseAddress(pixelBuffer, kCVPixelBufferLock_ReadOnly);
  1822. + zlog(@"convert time %gs", timer_elapsed(t_start, timer_now()));
  1823. +
  1824. + // release buffer as soon as conversion is complete
  1825. + self.pixelBuffer = NULL;
  1826. +
  1827. + conversion = nil;
  1828. +}
  1829. +
  1830. +@end
  1831. diff --git a/iphone/ZBarCaptureReader.m b/iphone/ZBarCaptureReader.m
  1832. new file mode 100644
  1833. --- /dev/null
  1834. +++ b/iphone/ZBarCaptureReader.m
  1835. @@ -0,0 +1,355 @@
  1836. +//------------------------------------------------------------------------
  1837. +// Copyright 2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  1838. +//
  1839. +// This file is part of the ZBar Bar Code Reader.
  1840. +//
  1841. +// The ZBar Bar Code Reader is free software; you can redistribute it
  1842. +// and/or modify it under the terms of the GNU Lesser Public License as
  1843. +// published by the Free Software Foundation; either version 2.1 of
  1844. +// the License, or (at your option) any later version.
  1845. +//
  1846. +// The ZBar Bar Code Reader is distributed in the hope that it will be
  1847. +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  1848. +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  1849. +// GNU Lesser Public License for more details.
  1850. +//
  1851. +// You should have received a copy of the GNU Lesser Public License
  1852. +// along with the ZBar Bar Code Reader; if not, write to the Free
  1853. +// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  1854. +// Boston, MA 02110-1301 USA
  1855. +//
  1856. +// http://sourceforge.net/projects/zbar
  1857. +//------------------------------------------------------------------------
  1858. +
  1859. +#import <libkern/OSAtomic.h>
  1860. +#import <AVFoundation/AVFoundation.h>
  1861. +#import <CoreMedia/CoreMedia.h>
  1862. +#import <CoreVideo/CoreVideo.h>
  1863. +#import <ZBarSDK/ZBarCaptureReader.h>
  1864. +#import <ZBarSDK/ZBarImageScanner.h>
  1865. +#import "ZBarCVImage.h"
  1866. +
  1867. +#define MODULE ZBarCaptureReader
  1868. +#import "debug.h"
  1869. +
  1870. +@implementation ZBarCaptureReader
  1871. +
  1872. +@synthesize captureOutput, captureDelegate, scanner, scanCrop, size,
  1873. + framesPerSecond, enableCache;
  1874. +@dynamic enableReader;
  1875. +
  1876. +- (void) initResult
  1877. +{
  1878. + [result release];
  1879. + result = [ZBarCVImage new];
  1880. + result.format = [ZBarImage fourcc: @"CV2P"];
  1881. +}
  1882. +
  1883. +- (id) initWithImageScanner: (ZBarImageScanner*) _scanner
  1884. +{
  1885. + self = [super init];
  1886. + if(!self)
  1887. + return(nil);
  1888. +
  1889. + t_fps = t_frame = timer_now();
  1890. + enableCache = YES;
  1891. +
  1892. + scanner = [_scanner retain];
  1893. + scanCrop = CGRectMake(0, 0, 1, 1);
  1894. + image = [ZBarImage new];
  1895. + image.format = [ZBarImage fourcc: @"Y800"];
  1896. + [self initResult];
  1897. +
  1898. + captureOutput = [AVCaptureVideoDataOutput new];
  1899. + captureOutput.alwaysDiscardsLateVideoFrames = YES;
  1900. +
  1901. +#ifdef FIXED_8697526
  1902. + /* iOS 4.2 introduced a bug that causes [session startRunning] to
  1903. + * hang if the session has a preview layer and this property is
  1904. + * specified at the output. As this happens to be the default
  1905. + * setting for the currently supported devices, it can be omitted
  1906. + * without causing a functional problem (for now...). Of course,
  1907. + * we still have no idea what the real problem is, or how robust
  1908. + * this is as a workaround...
  1909. + */
  1910. + captureOutput.videoSettings =
  1911. + [NSDictionary
  1912. + dictionaryWithObject:
  1913. + [NSNumber numberWithInt:
  1914. + kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange]
  1915. + forKey: (NSString*)kCVPixelBufferPixelFormatTypeKey];
  1916. +#endif
  1917. +
  1918. + queue = dispatch_queue_create("ZBarCaptureReader", NULL);
  1919. + [captureOutput setSampleBufferDelegate:
  1920. + (id<AVCaptureVideoDataOutputSampleBufferDelegate>)self
  1921. + queue: queue];
  1922. +
  1923. + return(self);
  1924. +}
  1925. +
  1926. +- (id) init
  1927. +{
  1928. + self = [self initWithImageScanner:
  1929. + [[ZBarImageScanner new]
  1930. + autorelease]];
  1931. + if(!self)
  1932. + return(nil);
  1933. +
  1934. + [scanner setSymbology: 0
  1935. + config: ZBAR_CFG_X_DENSITY
  1936. + to: 3];
  1937. + [scanner setSymbology: 0
  1938. + config: ZBAR_CFG_Y_DENSITY
  1939. + to: 3];
  1940. + return(self);
  1941. +}
  1942. +
  1943. +- (void) dealloc
  1944. +{
  1945. + captureDelegate = nil;
  1946. +
  1947. + // queue continues to run after stopping (NB even after DidStopRunning!);
  1948. + // ensure released delegate is not called. (also NB that the queue
  1949. + // may not be null, even in this case...)
  1950. + [captureOutput setSampleBufferDelegate: nil
  1951. + queue: queue];
  1952. + [captureOutput release];
  1953. + captureOutput = nil;
  1954. + dispatch_release(queue);
  1955. +
  1956. + [image release];
  1957. + image = nil;
  1958. + [result release];
  1959. + result = nil;
  1960. + [scanner release];
  1961. + scanner = nil;
  1962. + [super dealloc];
  1963. +}
  1964. +
  1965. +- (BOOL) enableReader
  1966. +{
  1967. + return(!OSAtomicCompareAndSwap32Barrier(0, 0, &running));
  1968. +}
  1969. +
  1970. +- (void) setEnableReader: (BOOL) enable
  1971. +{
  1972. + if(!enable)
  1973. + OSAtomicAnd32OrigBarrier(0, (void*)&running);
  1974. + else if(OSAtomicCompareAndSwap32Barrier(0, 1, &running))
  1975. + @synchronized(scanner) {
  1976. + scanner.enableCache = enableCache;
  1977. + }
  1978. +}
  1979. +
  1980. +- (void) willStartRunning
  1981. +{
  1982. + self.enableReader = YES;
  1983. +}
  1984. +
  1985. +- (void) willStopRunning
  1986. +{
  1987. + self.enableReader = NO;
  1988. +}
  1989. +
  1990. +- (void) flushCache
  1991. +{
  1992. + @synchronized(scanner) {
  1993. + scanner.enableCache = enableCache;
  1994. + }
  1995. +}
  1996. +
  1997. +- (void) setCaptureDelegate: (id<ZBarCaptureDelegate>) delegate
  1998. +{
  1999. + @synchronized(scanner) {
  2000. + captureDelegate = delegate;
  2001. + }
  2002. +}
  2003. +
  2004. +- (void) cropUpdate
  2005. +{
  2006. + @synchronized(scanner) {
  2007. + image.crop = CGRectMake(scanCrop.origin.x * width,
  2008. + scanCrop.origin.y * height,
  2009. + scanCrop.size.width * width,
  2010. + scanCrop.size.height * height);
  2011. + }
  2012. +}
  2013. +
  2014. +- (void) setScanCrop: (CGRect) crop
  2015. +{
  2016. + if(CGRectEqualToRect(scanCrop, crop))
  2017. + return;
  2018. + scanCrop = crop;
  2019. + [self cropUpdate];
  2020. +}
  2021. +
  2022. +- (void) didTrackSymbols: (ZBarSymbolSet*) syms
  2023. +{
  2024. + [captureDelegate
  2025. + captureReader: self
  2026. + didTrackSymbols: syms];
  2027. +}
  2028. +
  2029. +- (void) didReadNewSymbolsFromImage: (ZBarImage*) img
  2030. +{
  2031. + timer_start;
  2032. + [captureDelegate
  2033. + captureReader: self
  2034. + didReadNewSymbolsFromImage: img];
  2035. + OSAtomicCompareAndSwap32Barrier(2, 1, &running);
  2036. + zlog(@"latency: delegate=%gs total=%gs",
  2037. + timer_elapsed(t_start, timer_now()),
  2038. + timer_elapsed(t_scan, timer_now()));
  2039. +}
  2040. +
  2041. +- (void) setFramesPerSecond: (CGFloat) fps
  2042. +{
  2043. + framesPerSecond = fps;
  2044. +}
  2045. +
  2046. +- (void) updateFPS: (NSNumber*) val
  2047. +{
  2048. + [self setFramesPerSecond: val.doubleValue];
  2049. +}
  2050. +
  2051. +- (void) setSize: (CGSize) _size
  2052. +{
  2053. + size = _size;
  2054. +}
  2055. +
  2056. +- (void) updateSize: (CFDictionaryRef) val
  2057. +{
  2058. + CGSize _size;
  2059. + if(CGSizeMakeWithDictionaryRepresentation(val, &_size))
  2060. + [self setSize: _size];
  2061. +}
  2062. +
  2063. +- (void) captureOutput: (AVCaptureOutput*) output
  2064. + didOutputSampleBuffer: (CMSampleBufferRef) samp
  2065. + fromConnection: (AVCaptureConnection*) conn
  2066. +{
  2067. + // queue is apparently not flushed when stopping;
  2068. + // only process when running
  2069. + if(!OSAtomicCompareAndSwap32Barrier(1, 1, &running))
  2070. + return;
  2071. +
  2072. + NSAutoreleasePool *pool = [NSAutoreleasePool new];
  2073. + image.sequence = framecnt++;
  2074. +
  2075. + uint64_t now = timer_now();
  2076. + double dt = timer_elapsed(t_frame, now);
  2077. + t_frame = now;
  2078. + if(dt > 2) {
  2079. + t_fps = now;
  2080. + dt_frame = 0;
  2081. + }
  2082. + else if(!dt_frame)
  2083. + dt_frame = dt;
  2084. + dt_frame = (dt_frame + dt) / 2;
  2085. + if(timer_elapsed(t_fps, now) >= 1) {
  2086. + [self performSelectorOnMainThread: @selector(updateFPS:)
  2087. + withObject: [NSNumber numberWithDouble: 1 / dt_frame]
  2088. + waitUntilDone: NO];
  2089. + t_fps = now;
  2090. + }
  2091. +
  2092. + CVImageBufferRef buf = CMSampleBufferGetImageBuffer(samp);
  2093. + if(CMSampleBufferGetNumSamples(samp) != 1 ||
  2094. + !CMSampleBufferIsValid(samp) ||
  2095. + !CMSampleBufferDataIsReady(samp) ||
  2096. + !buf) {
  2097. + zlog(@"ERROR: invalid sample");
  2098. + goto error;
  2099. + }
  2100. +
  2101. + OSType format = CVPixelBufferGetPixelFormatType(buf);
  2102. + int planes = CVPixelBufferGetPlaneCount(buf);
  2103. +
  2104. + if(format != kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange ||
  2105. + !planes) {
  2106. + zlog(@"ERROR: invalid buffer format");
  2107. + goto error;
  2108. + }
  2109. +
  2110. + int w = CVPixelBufferGetBytesPerRowOfPlane(buf, 0);
  2111. + int h = CVPixelBufferGetHeightOfPlane(buf, 0);
  2112. + CVReturn rc =
  2113. + CVPixelBufferLockBaseAddress(buf, kCVPixelBufferLock_ReadOnly);
  2114. + if(!w || !h || rc) {
  2115. + zlog(@"ERROR: invalid buffer data");
  2116. + goto error;
  2117. + }
  2118. +
  2119. + void *data = CVPixelBufferGetBaseAddressOfPlane(buf, 0);
  2120. + if(data) {
  2121. + [image setData: data
  2122. + withLength: w * h];
  2123. +
  2124. + BOOL doTrack = NO;
  2125. + int ngood = 0;
  2126. + ZBarSymbolSet *syms = nil;
  2127. + @synchronized(scanner) {
  2128. + if(width != w || height != h) {
  2129. + width = w;
  2130. + height = h;
  2131. + CGSize _size = CGSizeMake(w, h);
  2132. + CFDictionaryRef sized =
  2133. + CGSizeCreateDictionaryRepresentation(_size);
  2134. + if(sized) {
  2135. + [self performSelectorOnMainThread: @selector(updateSize:)
  2136. + withObject: (id)sized
  2137. + waitUntilDone: NO];
  2138. + CFRelease(sized);
  2139. + }
  2140. + image.size = _size;
  2141. + [self cropUpdate];
  2142. + }
  2143. +
  2144. + ngood = [scanner scanImage: image];
  2145. + syms = scanner.results;
  2146. + doTrack = [captureDelegate respondsToSelector:
  2147. + @selector(captureReader:didTrackSymbols:)];
  2148. + }
  2149. + now = timer_now();
  2150. +
  2151. + if(ngood >= 0) {
  2152. + // return unfiltered results for tracking feedback
  2153. + syms.filterSymbols = NO;
  2154. + int nraw = syms.count;
  2155. + if(nraw > 0)
  2156. + zlog(@"scan image: %dx%d crop=%@ ngood=%d nraw=%d",
  2157. + w, h, NSStringFromCGRect(image.crop), ngood, nraw);
  2158. +
  2159. + if(ngood) {
  2160. + // copy image data so we can release the buffer
  2161. + result.size = CGSizeMake(w, h);
  2162. + result.pixelBuffer = buf;
  2163. + result.symbols = syms;
  2164. + t_scan = now;
  2165. + OSAtomicCompareAndSwap32Barrier(1, 2, &running);
  2166. + [self performSelectorOnMainThread:
  2167. + @selector(didReadNewSymbolsFromImage:)
  2168. + withObject: result
  2169. + waitUntilDone: NO];
  2170. + [self initResult];
  2171. + }
  2172. +
  2173. + if(nraw && doTrack)
  2174. + [self performSelectorOnMainThread:
  2175. + @selector(didTrackSymbols:)
  2176. + withObject: syms
  2177. + waitUntilDone: NO];
  2178. + }
  2179. + [image setData: NULL
  2180. + withLength: 0];
  2181. + }
  2182. + else
  2183. + zlog(@"ERROR: invalid data");
  2184. + CVPixelBufferUnlockBaseAddress(buf, kCVPixelBufferLock_ReadOnly);
  2185. +
  2186. + error:
  2187. + [pool release];
  2188. +}
  2189. +
  2190. +@end
  2191. diff --git a/iphone/ZBarHelpController.m b/iphone/ZBarHelpController.m
  2192. new file mode 100644
  2193. --- /dev/null
  2194. +++ b/iphone/ZBarHelpController.m
  2195. @@ -0,0 +1,271 @@
  2196. +//------------------------------------------------------------------------
  2197. +// Copyright 2009-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  2198. +//
  2199. +// This file is part of the ZBar Bar Code Reader.
  2200. +//
  2201. +// The ZBar Bar Code Reader is free software; you can redistribute it
  2202. +// and/or modify it under the terms of the GNU Lesser Public License as
  2203. +// published by the Free Software Foundation; either version 2.1 of
  2204. +// the License, or (at your option) any later version.
  2205. +//
  2206. +// The ZBar Bar Code Reader is distributed in the hope that it will be
  2207. +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  2208. +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  2209. +// GNU Lesser Public License for more details.
  2210. +//
  2211. +// You should have received a copy of the GNU Lesser Public License
  2212. +// along with the ZBar Bar Code Reader; if not, write to the Free
  2213. +// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  2214. +// Boston, MA 02110-1301 USA
  2215. +//
  2216. +// http://sourceforge.net/projects/zbar
  2217. +//------------------------------------------------------------------------
  2218. +
  2219. +#import <ZBarSDK/ZBarHelpController.h>
  2220. +
  2221. +@implementation ZBarHelpController
  2222. +
  2223. +@synthesize delegate;
  2224. +
  2225. +- (id) initWithReason: (NSString*) _reason
  2226. +{
  2227. + self = [super init];
  2228. + if(!self)
  2229. + return(nil);
  2230. +
  2231. + if(!_reason)
  2232. + _reason = @"INFO";
  2233. + reason = [_reason retain];
  2234. + orientations = ((1 << UIInterfaceOrientationPortrait) |
  2235. + (1 << UIInterfaceOrientationPortraitUpsideDown) |
  2236. + (1 << UIInterfaceOrientationLandscapeLeft) |
  2237. + (1 << UIInterfaceOrientationLandscapeRight));
  2238. +
  2239. + return(self);
  2240. +}
  2241. +
  2242. +- (id) init
  2243. +{
  2244. + return([self initWithReason: nil]);
  2245. +}
  2246. +
  2247. +- (void) cleanup
  2248. +{
  2249. + [toolbar release];
  2250. + toolbar = nil;
  2251. + [webView release];
  2252. + webView = nil;
  2253. + [doneBtn release];
  2254. + doneBtn = nil;
  2255. + [backBtn release];
  2256. + backBtn = nil;
  2257. + [space release];
  2258. + space = nil;
  2259. +}
  2260. +
  2261. +- (void) dealloc
  2262. +{
  2263. + [self cleanup];
  2264. + [reason release];
  2265. + reason = nil;
  2266. + [linkURL release];
  2267. + linkURL = nil;
  2268. + [super dealloc];
  2269. +}
  2270. +
  2271. +- (void) layoutSubviewsForOrientation: (UIInterfaceOrientation) orient
  2272. +{
  2273. + CGFloat h;
  2274. + if(orient == UIInterfaceOrientationPortrait ||
  2275. + orient == UIInterfaceOrientationPortraitUpsideDown)
  2276. + h = 44;
  2277. + else
  2278. + h = 32;
  2279. + CGRect r = self.view.bounds;
  2280. + r.origin.y += r.size.height - h;
  2281. + r.size.height = h;
  2282. + toolbar.frame = r;
  2283. +
  2284. + r = self.view.bounds;
  2285. + r.size.height -= h;
  2286. + webView.frame = r;
  2287. +}
  2288. +
  2289. +- (void) viewDidLoad
  2290. +{
  2291. + [super viewDidLoad];
  2292. +
  2293. + UIView *view = self.view;
  2294. + view.backgroundColor = [UIColor colorWithWhite: .125f
  2295. + alpha: 1];
  2296. + view.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
  2297. + UIViewAutoresizingFlexibleHeight);
  2298. +
  2299. + webView = [UIWebView new];
  2300. + webView.delegate = self;
  2301. + webView.backgroundColor = [UIColor colorWithWhite: .125f
  2302. + alpha: 1 ];
  2303. + webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
  2304. + UIViewAutoresizingFlexibleHeight);
  2305. +
  2306. + toolbar = [UIToolbar new];
  2307. + toolbar.barStyle = UIBarStyleBlackOpaque;
  2308. + toolbar.autoresizingMask = (UIViewAutoresizingFlexibleWidth |
  2309. + UIViewAutoresizingFlexibleTopMargin);
  2310. +
  2311. + doneBtn = [[UIBarButtonItem alloc]
  2312. + initWithBarButtonSystemItem: UIBarButtonSystemItemDone
  2313. + target: self
  2314. + action: @selector(dismiss)];
  2315. +
  2316. + backBtn = [[UIBarButtonItem alloc]
  2317. + initWithImage: [UIImage imageNamed: @"zbar-back.png"]
  2318. + style: UIBarButtonItemStylePlain
  2319. + target: webView
  2320. + action: @selector(goBack)];
  2321. +
  2322. + space = [[UIBarButtonItem alloc]
  2323. + initWithBarButtonSystemItem:
  2324. + UIBarButtonSystemItemFlexibleSpace
  2325. + target: nil
  2326. + action: nil];
  2327. +
  2328. + toolbar.items = [NSArray arrayWithObjects: space, doneBtn, nil];
  2329. +
  2330. + [view addSubview: toolbar];
  2331. +
  2332. + UIInterfaceOrientation orient = self.interfaceOrientation;
  2333. + if(!((orientations >> orient) & 1))
  2334. + for(orient = UIInterfaceOrientationPortrait;
  2335. + (orientations >> orient) && !((orientations >> orient) & 1);
  2336. + orient++);
  2337. + [self layoutSubviewsForOrientation: orient];
  2338. +
  2339. + NSString *path = [[NSBundle mainBundle]
  2340. + pathForResource: @"zbar-help"
  2341. + ofType: @"html"];
  2342. +
  2343. + NSURLRequest *req = nil;
  2344. + if(path) {
  2345. + NSURL *url = [NSURL fileURLWithPath: path
  2346. + isDirectory: NO];
  2347. + if(url)
  2348. + req = [NSURLRequest requestWithURL: url];
  2349. + }
  2350. + if(req)
  2351. + [webView loadRequest: req];
  2352. + else
  2353. + NSLog(@"ERROR: unable to load zbar-help.html from bundle");
  2354. +}
  2355. +
  2356. +- (void) viewDidUnload
  2357. +{
  2358. + [self cleanup];
  2359. + [super viewDidUnload];
  2360. +}
  2361. +
  2362. +- (void) viewWillAppear: (BOOL) animated
  2363. +{
  2364. + assert(webView);
  2365. + if(webView.loading)
  2366. + [webView removeFromSuperview];
  2367. + [super viewWillAppear: animated];
  2368. +}
  2369. +
  2370. +- (void) viewWillDisappear: (BOOL) animated
  2371. +{
  2372. + [webView stopLoading];
  2373. + webView.delegate = nil;
  2374. + [super viewWillDisappear: animated];
  2375. +}
  2376. +
  2377. +- (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) orient
  2378. +{
  2379. + return([self isInterfaceOrientationSupported: orient]);
  2380. +}
  2381. +
  2382. +- (void) willAnimateRotationToInterfaceOrientation: (UIInterfaceOrientation) orient
  2383. + duration: (NSTimeInterval) duration
  2384. +{
  2385. + [self layoutSubviewsForOrientation: orient];
  2386. + [webView reload];
  2387. +}
  2388. +
  2389. +- (BOOL) isInterfaceOrientationSupported: (UIInterfaceOrientation) orient
  2390. +{
  2391. + return((orientations >> orient) & 1);
  2392. +}
  2393. +
  2394. +- (void) setInterfaceOrientation: (UIInterfaceOrientation) orient
  2395. + supported: (BOOL) supported
  2396. +{
  2397. + NSUInteger mask = 1 << orient;
  2398. + if(supported)
  2399. + orientations |= mask;
  2400. + else
  2401. + orientations &= ~mask;
  2402. +}
  2403. +
  2404. +- (void) dismiss
  2405. +{
  2406. + if([delegate respondsToSelector: @selector(helpControllerDidFinish:)])
  2407. + [delegate helpControllerDidFinish: self];
  2408. + else
  2409. + [self dismissModalViewControllerAnimated: YES];
  2410. +}
  2411. +
  2412. +- (void) webViewDidFinishLoad: (UIWebView*) view
  2413. +{
  2414. + if(!view.superview) {
  2415. + [view stringByEvaluatingJavaScriptFromString:
  2416. + [NSString stringWithFormat:
  2417. + @"onZBarHelp({reason:\"%@\"});", reason]];
  2418. + [UIView beginAnimations: @"ZBarHelp"
  2419. + context: nil];
  2420. + [self.view addSubview: webView];
  2421. + [UIView commitAnimations];
  2422. + }
  2423. +
  2424. + BOOL canGoBack = [view canGoBack];
  2425. + NSArray *items = toolbar.items;
  2426. + if(canGoBack != ([items objectAtIndex: 0] == backBtn)) {
  2427. + if(canGoBack)
  2428. + items = [NSArray arrayWithObjects: backBtn, space, doneBtn, nil];
  2429. + else
  2430. + items = [NSArray arrayWithObjects: space, doneBtn, nil];
  2431. + [toolbar setItems: items
  2432. + animated: YES];
  2433. + }
  2434. +}
  2435. +
  2436. +- (BOOL) webView: (UIWebView*) view
  2437. + shouldStartLoadWithRequest: (NSURLRequest*) req
  2438. + navigationType: (UIWebViewNavigationType) nav
  2439. +{
  2440. + NSURL *url = [req URL];
  2441. + if([url isFileURL])
  2442. + return(YES);
  2443. +
  2444. + linkURL = [url retain];
  2445. + UIAlertView *alert =
  2446. + [[UIAlertView alloc]
  2447. + initWithTitle: @"Open External Link"
  2448. + message: @"Close this application and open link in Safari?"
  2449. + delegate: nil
  2450. + cancelButtonTitle: @"Cancel"
  2451. + otherButtonTitles: @"OK", nil];
  2452. + alert.delegate = self;
  2453. + [alert show];
  2454. + [alert release];
  2455. + return(NO);
  2456. +}
  2457. +
  2458. +- (void) alertView: (UIAlertView*) view
  2459. + clickedButtonAtIndex: (NSInteger) idx
  2460. +{
  2461. + if(idx)
  2462. + [[UIApplication sharedApplication]
  2463. + openURL: linkURL];
  2464. +}
  2465. +
  2466. +@end
  2467. diff --git a/iphone/ZBarImage.m b/iphone/ZBarImage.m
  2468. new file mode 100644
  2469. --- /dev/null
  2470. +++ b/iphone/ZBarImage.m
  2471. @@ -0,0 +1,306 @@
  2472. +//------------------------------------------------------------------------
  2473. +// Copyright 2009-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  2474. +//
  2475. +// This file is part of the ZBar Bar Code Reader.
  2476. +//
  2477. +// The ZBar Bar Code Reader is free software; you can redistribute it
  2478. +// and/or modify it under the terms of the GNU Lesser Public License as
  2479. +// published by the Free Software Foundation; either version 2.1 of
  2480. +// the License, or (at your option) any later version.
  2481. +//
  2482. +// The ZBar Bar Code Reader is distributed in the hope that it will be
  2483. +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  2484. +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  2485. +// GNU Lesser Public License for more details.
  2486. +//
  2487. +// You should have received a copy of the GNU Lesser Public License
  2488. +// along with the ZBar Bar Code Reader; if not, write to the Free
  2489. +// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  2490. +// Boston, MA 02110-1301 USA
  2491. +//
  2492. +// http://sourceforge.net/projects/zbar
  2493. +//------------------------------------------------------------------------
  2494. +
  2495. +#import <UIKit/UIKit.h>
  2496. +#import <ZBarSDK/ZBarImage.h>
  2497. +#import "debug.h"
  2498. +
  2499. +static void image_cleanup(zbar_image_t *zimg)
  2500. +{
  2501. + ZBarImage *image = zbar_image_get_userdata(zimg);
  2502. + [image cleanup];
  2503. +}
  2504. +
  2505. +@implementation ZBarImage
  2506. +
  2507. +@dynamic format, sequence, size, crop, data, dataLength, symbols, zbarImage,
  2508. + UIImage;
  2509. +
  2510. ++ (unsigned long) fourcc: (NSString*) format
  2511. +{
  2512. + return(zbar_fourcc_parse([format UTF8String]));
  2513. +}
  2514. +
  2515. +- (id) initWithImage: (zbar_image_t*) image
  2516. +{
  2517. + if(!image) {
  2518. + [self release];
  2519. + return(nil);
  2520. + }
  2521. + if(self = [super init]) {
  2522. + zimg = image;
  2523. + zbar_image_ref(image, 1);
  2524. + zbar_image_set_userdata(zimg, self);
  2525. + }
  2526. + return(self);
  2527. +}
  2528. +
  2529. +- (id) init
  2530. +{
  2531. + zbar_image_t *image = zbar_image_create();
  2532. + self = [self initWithImage: image];
  2533. + zbar_image_ref(image, -1);
  2534. + return(self);
  2535. +}
  2536. +
  2537. +- (void) dealloc
  2538. +{
  2539. + if(zimg) {
  2540. + zbar_image_ref(zimg, -1);
  2541. + zimg = NULL;
  2542. + }
  2543. + [super dealloc];
  2544. +}
  2545. +
  2546. +- (id) initWithCGImage: (CGImageRef) image
  2547. + crop: (CGRect) crop
  2548. + size: (CGSize) size
  2549. +{
  2550. + if(!(self = [self init]))
  2551. + return(nil);
  2552. + uint64_t t_start = timer_now();
  2553. +
  2554. + unsigned int w = size.width + 0.5;
  2555. + unsigned int h = size.height + 0.5;
  2556. +
  2557. + unsigned long datalen = w * h;
  2558. + uint8_t *raw = malloc(datalen);
  2559. + if(!raw) {
  2560. + [self release];
  2561. + return(nil);
  2562. + }
  2563. +
  2564. + zbar_image_set_data(zimg, raw, datalen, zbar_image_free_data);
  2565. + zbar_image_set_format(zimg, zbar_fourcc('Y','8','0','0'));
  2566. + zbar_image_set_size(zimg, w, h);
  2567. +
  2568. + // scale and crop simultaneously
  2569. + CGFloat scale = size.width / crop.size.width;
  2570. + crop.origin.x *= -scale;
  2571. + crop.size.width = scale * (CGFloat)CGImageGetWidth(image);
  2572. + scale = size.height / crop.size.height;
  2573. + CGFloat height = CGImageGetHeight(image);
  2574. + // compensate for wacky origin
  2575. + crop.origin.y = height - crop.origin.y - crop.size.height;
  2576. + crop.origin.y *= -scale;
  2577. + crop.size.height = scale * height;
  2578. +
  2579. + // generate grayscale image data
  2580. + CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
  2581. + CGContextRef ctx =
  2582. + CGBitmapContextCreate(raw, w, h, 8, w, cs, kCGImageAlphaNone);
  2583. + CGColorSpaceRelease(cs);
  2584. + CGContextSetAllowsAntialiasing(ctx, 0);
  2585. +
  2586. + CGContextDrawImage(ctx, crop, image);
  2587. +
  2588. +#if 0
  2589. + zlog(@"convert image %dx%d: crop %g,%g %gx%g size %gx%g (%dx%d)",
  2590. + CGImageGetWidth(image), CGImageGetHeight(image),
  2591. + crop.origin.x, crop.origin.y, crop.size.width, crop.size.height,
  2592. + size.width, size.height, w, h);
  2593. + CGImageRef cgdump = CGBitmapContextCreateImage(ctx);
  2594. + UIImage *uidump = [[UIImage alloc]
  2595. + initWithCGImage: cgdump];
  2596. + CGImageRelease(cgdump);
  2597. + UIImageWriteToSavedPhotosAlbum(uidump, nil, nil, NULL);
  2598. + [uidump release];
  2599. +#endif
  2600. +
  2601. + CGContextRelease(ctx);
  2602. +
  2603. + t_convert = timer_elapsed(t_start, timer_now());
  2604. + return(self);
  2605. +}
  2606. +
  2607. +- (id) initWithCGImage: (CGImageRef) image
  2608. + size: (CGSize) size
  2609. +{
  2610. + CGRect crop = CGRectMake(0, 0,
  2611. + CGImageGetWidth(image),
  2612. + CGImageGetHeight(image));
  2613. + return([self initWithCGImage: image
  2614. + crop: crop
  2615. + size: size]);
  2616. +}
  2617. +
  2618. +- (id) initWithCGImage: (CGImageRef) image
  2619. +{
  2620. + CGRect crop = CGRectMake(0, 0,
  2621. + CGImageGetWidth(image),
  2622. + CGImageGetHeight(image));
  2623. + return([self initWithCGImage: image
  2624. + crop: crop
  2625. + size: crop.size]);
  2626. +}
  2627. +
  2628. +- (zbar_image_t*) image
  2629. +{
  2630. + return(zimg);
  2631. +}
  2632. +
  2633. +- (unsigned long) format
  2634. +{
  2635. + return(zbar_image_get_format(zimg));
  2636. +}
  2637. +
  2638. +- (void) setFormat: (unsigned long) format
  2639. +{
  2640. + zbar_image_set_format(zimg, format);
  2641. +}
  2642. +
  2643. +- (unsigned) sequence
  2644. +{
  2645. + return(zbar_image_get_sequence(zimg));
  2646. +}
  2647. +
  2648. +- (void) setSequence: (unsigned) seq
  2649. +{
  2650. + zbar_image_set_sequence(zimg, seq);
  2651. +}
  2652. +
  2653. +- (CGSize) size
  2654. +{
  2655. + unsigned w, h;
  2656. + zbar_image_get_size(zimg, &w, &h);
  2657. + return(CGSizeMake(w, h));
  2658. +}
  2659. +
  2660. +- (void) setSize: (CGSize) size
  2661. +{
  2662. + zbar_image_set_size(zimg, size.width + .5, size.height + .5);
  2663. +}
  2664. +
  2665. +- (CGRect) crop
  2666. +{
  2667. + unsigned x, y, w, h;
  2668. + zbar_image_get_crop(zimg, &x, &y, &w, &h);
  2669. + return(CGRectMake(x, y, w, h));
  2670. +}
  2671. +
  2672. +- (void) setCrop: (CGRect) crop
  2673. +{
  2674. + zbar_image_set_crop(zimg, crop.origin.x + .5, crop.origin.y + .5,
  2675. + crop.size.width + .5, crop.size.height + .5);
  2676. +}
  2677. +
  2678. +- (ZBarSymbolSet*) symbols
  2679. +{
  2680. + return([[[ZBarSymbolSet alloc]
  2681. + initWithSymbolSet: zbar_image_get_symbols(zimg)]
  2682. + autorelease]);
  2683. +}
  2684. +
  2685. +- (void) setSymbols: (ZBarSymbolSet*) symbols
  2686. +{
  2687. + zbar_image_set_symbols(zimg, [symbols zbarSymbolSet]);
  2688. +}
  2689. +
  2690. +- (const void*) data
  2691. +{
  2692. + return(zbar_image_get_data(zimg));
  2693. +}
  2694. +
  2695. +- (unsigned long) dataLength
  2696. +{
  2697. + return(zbar_image_get_data_length(zimg));
  2698. +}
  2699. +
  2700. +- (void) setData: (const void*) data
  2701. + withLength: (unsigned long) length
  2702. +{
  2703. + zbar_image_set_data(zimg, data, length, image_cleanup);
  2704. +}
  2705. +
  2706. +- (zbar_image_t*) zbarImage
  2707. +{
  2708. + return(zimg);
  2709. +}
  2710. +
  2711. +- (UIImage*) UIImageWithOrientation: (UIImageOrientation) orient
  2712. +{
  2713. + unsigned long format = self.format;
  2714. + size_t bpc, bpp;
  2715. + switch(format)
  2716. + {
  2717. + case zbar_fourcc('R','G','B','3'):
  2718. + bpc = 8;
  2719. + bpp = 24;
  2720. + break;
  2721. + case zbar_fourcc('R','G','B','4'):
  2722. + bpc = 8;
  2723. + bpp = 32;
  2724. + break;
  2725. + case zbar_fourcc('R','G','B','Q'):
  2726. + bpc = 5;
  2727. + bpp = 16;
  2728. + break;
  2729. + default:
  2730. + NSLog(@"ERROR: format %.4s(%08lx) is unsupported",
  2731. + (char*)&format, format);
  2732. + assert(0);
  2733. + return(nil);
  2734. + };
  2735. +
  2736. + unsigned w = zbar_image_get_width(zimg);
  2737. + unsigned h = zbar_image_get_height(zimg);
  2738. + const void *data = zbar_image_get_data(zimg);
  2739. + size_t datalen = zbar_image_get_data_length(zimg);
  2740. + CGDataProviderRef datasrc =
  2741. + CGDataProviderCreateWithData(self, data, datalen, (void*)CFRelease);
  2742. + CGColorSpaceRef cs = CGColorSpaceCreateDeviceRGB();
  2743. + CGImageRef cgimg =
  2744. + CGImageCreate(w, h, bpc, bpp, ((bpp + 7) >> 3) * w, cs,
  2745. + kCGBitmapByteOrderDefault |
  2746. + kCGImageAlphaNoneSkipFirst,
  2747. + datasrc, NULL, YES, kCGRenderingIntentDefault);
  2748. + CGColorSpaceRelease(cs);
  2749. + CGDataProviderRelease(datasrc);
  2750. +
  2751. + UIImage *uiimg =
  2752. + [UIImage imageWithCGImage: cgimg
  2753. + scale: 1
  2754. + orientation: orient];
  2755. + CGImageRelease(cgimg);
  2756. + return(uiimg);
  2757. +}
  2758. +
  2759. +- (UIImage*) UIImage
  2760. +{
  2761. + return([self UIImageWithOrientation: UIImageOrientationUp]);
  2762. +}
  2763. +
  2764. +- (void) cleanup
  2765. +{
  2766. +}
  2767. +
  2768. +#if 0
  2769. +- (ZBarImage*) convertToFormat: (unsigned long) format
  2770. +{
  2771. + zbar_image_t *zdst = zbar_image_convert(zimg, format);
  2772. + ZBarImage *image = ;
  2773. + return([[[ZBarImage alloc] initWithImage: zdst] autorelease]);
  2774. +}
  2775. +#endif
  2776. +
  2777. +@end
  2778. diff --git a/iphone/ZBarImageScanner.m b/iphone/ZBarImageScanner.m
  2779. new file mode 100644
  2780. --- /dev/null
  2781. +++ b/iphone/ZBarImageScanner.m
  2782. @@ -0,0 +1,85 @@
  2783. +//------------------------------------------------------------------------
  2784. +// Copyright 2009 (c) Jeff Brown <spadix@users.sourceforge.net>
  2785. +//
  2786. +// This file is part of the ZBar Bar Code Reader.
  2787. +//
  2788. +// The ZBar Bar Code Reader is free software; you can redistribute it
  2789. +// and/or modify it under the terms of the GNU Lesser Public License as
  2790. +// published by the Free Software Foundation; either version 2.1 of
  2791. +// the License, or (at your option) any later version.
  2792. +//
  2793. +// The ZBar Bar Code Reader is distributed in the hope that it will be
  2794. +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  2795. +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  2796. +// GNU Lesser Public License for more details.
  2797. +//
  2798. +// You should have received a copy of the GNU Lesser Public License
  2799. +// along with the ZBar Bar Code Reader; if not, write to the Free
  2800. +// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  2801. +// Boston, MA 02110-1301 USA
  2802. +//
  2803. +// http://sourceforge.net/projects/zbar
  2804. +//------------------------------------------------------------------------
  2805. +
  2806. +#import <ZBarSDK/ZBarImageScanner.h>
  2807. +#import "debug.h"
  2808. +
  2809. +@implementation ZBarImageScanner
  2810. +
  2811. +@dynamic enableCache, results;
  2812. +
  2813. +- (id) init
  2814. +{
  2815. + if(self = [super init]) {
  2816. + scanner = zbar_image_scanner_create();
  2817. + }
  2818. + return(self);
  2819. +}
  2820. +
  2821. +- (void) dealloc
  2822. +{
  2823. + if(scanner) {
  2824. + zbar_image_scanner_destroy(scanner);
  2825. + scanner = NULL;
  2826. + }
  2827. + [super dealloc];
  2828. +}
  2829. +
  2830. +- (BOOL) enableCache
  2831. +{
  2832. + assert(0); // FIXME
  2833. + return(NO);
  2834. +}
  2835. +
  2836. +- (void) setEnableCache: (BOOL) enable
  2837. +{
  2838. + zbar_image_scanner_enable_cache(scanner, enable);
  2839. +}
  2840. +
  2841. +- (ZBarSymbolSet*) results
  2842. +{
  2843. + const zbar_symbol_set_t *set = zbar_image_scanner_get_results(scanner);
  2844. + return([[[ZBarSymbolSet alloc] initWithSymbolSet: set] autorelease]);
  2845. +}
  2846. +
  2847. +// image scanner config wrappers
  2848. +- (void) parseConfig: (NSString*) cfg
  2849. +{
  2850. + zbar_image_scanner_parse_config(scanner, [cfg UTF8String]);
  2851. + // FIXME throw errors
  2852. +}
  2853. +
  2854. +- (void) setSymbology: (zbar_symbol_type_t) sym
  2855. + config: (zbar_config_t) cfg
  2856. + to: (int) val
  2857. +{
  2858. + zbar_image_scanner_set_config(scanner, sym, cfg, val);
  2859. + // FIXME throw errors
  2860. +}
  2861. +
  2862. +- (NSInteger) scanImage: (ZBarImage*) image
  2863. +{
  2864. + return(zbar_scan_image(scanner, image.zbarImage));
  2865. +}
  2866. +
  2867. +@end
  2868. diff --git a/iphone/ZBarReaderController.m b/iphone/ZBarReaderController.m
  2869. new file mode 100644
  2870. --- /dev/null
  2871. +++ b/iphone/ZBarReaderController.m
  2872. @@ -0,0 +1,747 @@
  2873. +//------------------------------------------------------------------------
  2874. +// Copyright 2009-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  2875. +//
  2876. +// This file is part of the ZBar Bar Code Reader.
  2877. +//
  2878. +// The ZBar Bar Code Reader is free software; you can redistribute it
  2879. +// and/or modify it under the terms of the GNU Lesser Public License as
  2880. +// published by the Free Software Foundation; either version 2.1 of
  2881. +// the License, or (at your option) any later version.
  2882. +//
  2883. +// The ZBar Bar Code Reader is distributed in the hope that it will be
  2884. +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  2885. +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  2886. +// GNU Lesser Public License for more details.
  2887. +//
  2888. +// You should have received a copy of the GNU Lesser Public License
  2889. +// along with the ZBar Bar Code Reader; if not, write to the Free
  2890. +// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  2891. +// Boston, MA 02110-1301 USA
  2892. +//
  2893. +// http://sourceforge.net/projects/zbar
  2894. +//------------------------------------------------------------------------
  2895. +
  2896. +#import <ZBarSDK/ZBarReaderController.h>
  2897. +#import <ZBarSDK/ZBarHelpController.h>
  2898. +#import "debug.h"
  2899. +
  2900. +/* the use of UIGetScreenImage() may no longer be sanctioned, even
  2901. + * though it was previously "allowed". define this to 0 to rip it out
  2902. + * and fall back to cameraMode=Default (manual capture)
  2903. + */
  2904. +#ifndef USE_PRIVATE_APIS
  2905. +# define USE_PRIVATE_APIS 0
  2906. +#endif
  2907. +
  2908. +#ifndef MIN_QUALITY
  2909. +# define MIN_QUALITY 10
  2910. +#endif
  2911. +
  2912. +NSString* const ZBarReaderControllerResults = @"ZBarReaderControllerResults";
  2913. +
  2914. +#if USE_PRIVATE_APIS
  2915. +// expose undocumented API
  2916. +CF_RETURNS_RETAINED
  2917. +CGImageRef UIGetScreenImage(void);
  2918. +#endif
  2919. +
  2920. +@implementation ZBarReaderController
  2921. +
  2922. +@synthesize scanner, readerDelegate, cameraMode, scanCrop, maxScanDimension,
  2923. + showsHelpOnFail, takesPicture, enableCache, tracksSymbols;
  2924. +@dynamic showsZBarControls;
  2925. +
  2926. +- (id) init
  2927. +{
  2928. + if(self = [super init]) {
  2929. + showsHelpOnFail = YES;
  2930. + hasOverlay = showsZBarControls =
  2931. + [self respondsToSelector: @selector(cameraOverlayView)];
  2932. + enableCache = tracksSymbols = YES;
  2933. + scanCrop = CGRectMake(0, 0, 1, 1);
  2934. + maxScanDimension = 640;
  2935. +
  2936. + scanner = [ZBarImageScanner new];
  2937. + [scanner setSymbology: 0
  2938. + config: ZBAR_CFG_X_DENSITY
  2939. + to: 2];
  2940. + [scanner setSymbology: 0
  2941. + config: ZBAR_CFG_Y_DENSITY
  2942. + to: 2];
  2943. +
  2944. + if([UIImagePickerController
  2945. + isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera])
  2946. + self.sourceType = UIImagePickerControllerSourceTypeCamera;
  2947. +
  2948. +#if USE_PRIVATE_APIS
  2949. + cameraMode = ZBarReaderControllerCameraModeSampling;
  2950. +#else
  2951. + cameraMode = ZBarReaderControllerCameraModeDefault;
  2952. +#endif
  2953. + }
  2954. + return(self);
  2955. +}
  2956. +
  2957. +- (void) initOverlay
  2958. +{
  2959. + CGRect bounds = self.view.bounds;
  2960. + overlay = [[UIView alloc] initWithFrame: bounds];
  2961. + overlay.backgroundColor = [UIColor clearColor];
  2962. +
  2963. + CGRect r = bounds;
  2964. + r.size.height -= 54;
  2965. + boxView = [[UIView alloc] initWithFrame: r];
  2966. +
  2967. + boxLayer = [CALayer new];
  2968. + boxLayer.frame = r;
  2969. + boxLayer.borderWidth = 1;
  2970. + boxLayer.borderColor = [UIColor greenColor].CGColor;
  2971. + [boxView.layer addSublayer: boxLayer];
  2972. +
  2973. + toolbar = [UIToolbar new];
  2974. + toolbar.barStyle = UIBarStyleBlackOpaque;
  2975. + r.origin.y = r.size.height;
  2976. + r.size.height = 54;
  2977. + toolbar.frame = r;
  2978. +
  2979. + cancelBtn = [[UIBarButtonItem alloc]
  2980. + initWithBarButtonSystemItem: UIBarButtonSystemItemCancel
  2981. + target: self
  2982. + action: @selector(cancel)];
  2983. + cancelBtn.width = r.size.width / 4 - 16;
  2984. +
  2985. + scanBtn = [[UIBarButtonItem alloc]
  2986. + initWithTitle: @"Scan!"
  2987. + style: UIBarButtonItemStyleDone
  2988. + target: self
  2989. + action: @selector(scan)];
  2990. + scanBtn.width = r.size.width / 2 - 16;
  2991. +
  2992. + for(int i = 0; i < 2; i++)
  2993. + space[i] = [[UIBarButtonItem alloc]
  2994. + initWithBarButtonSystemItem:
  2995. + UIBarButtonSystemItemFlexibleSpace
  2996. + target: nil
  2997. + action: nil];
  2998. +
  2999. + space[2] = [[UIBarButtonItem alloc]
  3000. + initWithBarButtonSystemItem:
  3001. + UIBarButtonSystemItemFixedSpace
  3002. + target: nil
  3003. + action: nil];
  3004. + space[2].width = r.size.width / 4 - 16;
  3005. +
  3006. + infoBtn = [[UIButton buttonWithType: UIButtonTypeInfoLight] retain];
  3007. + r.origin.x = r.size.width - 54;
  3008. + r.size.width = 54;
  3009. + infoBtn.frame = r;
  3010. + [infoBtn addTarget: self
  3011. + action: @selector(info)
  3012. + forControlEvents: UIControlEventTouchUpInside];
  3013. +}
  3014. +
  3015. +- (void) viewDidLoad
  3016. +{
  3017. + [super viewDidLoad];
  3018. + [super setDelegate: self];
  3019. + if(hasOverlay)
  3020. + [self initOverlay];
  3021. +}
  3022. +
  3023. +- (void) cleanup
  3024. +{
  3025. + [overlay release];
  3026. + overlay = nil;
  3027. + [boxView release];
  3028. + boxView = nil;
  3029. + [boxLayer release];
  3030. + boxLayer = nil;
  3031. + [toolbar release];
  3032. + toolbar = nil;
  3033. + [cancelBtn release];
  3034. + cancelBtn = nil;
  3035. + [scanBtn release];
  3036. + scanBtn = nil;
  3037. + for(int i = 0; i < 3; i++) {
  3038. + [space[i] release];
  3039. + space[i] = nil;
  3040. + }
  3041. + [infoBtn release];
  3042. + infoBtn = nil;
  3043. + [help release];
  3044. + help = nil;
  3045. +}
  3046. +
  3047. +- (void) viewDidUnload
  3048. +{
  3049. + [self cleanup];
  3050. + [super viewDidUnload];
  3051. +}
  3052. +
  3053. +- (void) dealloc
  3054. +{
  3055. + [self cleanup];
  3056. + [scanner release];
  3057. + scanner = nil;
  3058. + [super dealloc];
  3059. +}
  3060. +
  3061. +- (void) scan
  3062. +{
  3063. + scanBtn.enabled = NO;
  3064. + self.view.userInteractionEnabled = NO;
  3065. + [self takePicture];
  3066. +}
  3067. +
  3068. +- (void) cancel
  3069. +{
  3070. + [self performSelector: @selector(imagePickerControllerDidCancel:)
  3071. + withObject: self
  3072. + afterDelay: 0.1];
  3073. +}
  3074. +
  3075. +- (void) reenable
  3076. +{
  3077. + scanBtn.enabled = YES;
  3078. + self.view.userInteractionEnabled = YES;
  3079. +}
  3080. +
  3081. +- (void) initScanning
  3082. +{
  3083. + if(hasOverlay &&
  3084. + self.sourceType == UIImagePickerControllerSourceTypeCamera) {
  3085. + if(showsZBarControls || ![self cameraOverlayView])
  3086. + [self setCameraOverlayView: overlay];
  3087. +
  3088. + UIView *activeOverlay = [self cameraOverlayView];
  3089. +
  3090. + if(showsZBarControls) {
  3091. + if(!toolbar.superview) {
  3092. + [overlay addSubview: toolbar];
  3093. + [overlay addSubview: infoBtn];
  3094. + }
  3095. + [self setShowsCameraControls: NO];
  3096. + }
  3097. + else {
  3098. + [toolbar removeFromSuperview];
  3099. + [infoBtn removeFromSuperview];
  3100. + if(activeOverlay == overlay)
  3101. + [self setShowsCameraControls: YES];
  3102. + }
  3103. +
  3104. + self.view.userInteractionEnabled = YES;
  3105. +
  3106. + sampling = (cameraMode == ZBarReaderControllerCameraModeSampling ||
  3107. + cameraMode == ZBarReaderControllerCameraModeSequence);
  3108. +
  3109. + if(sampling) {
  3110. + toolbar.items = [NSArray arrayWithObjects:
  3111. + cancelBtn, space[0], nil];
  3112. +
  3113. + t_frame = timer_now();
  3114. + dt_frame = 0;
  3115. + boxLayer.opacity = 0;
  3116. + if(boxView.superview != activeOverlay)
  3117. + [boxView removeFromSuperview];
  3118. + if(!boxView.superview)
  3119. + [activeOverlay insertSubview: boxView atIndex:0];
  3120. + scanner.enableCache = enableCache;
  3121. +
  3122. + SEL meth = nil;
  3123. + if(cameraMode == ZBarReaderControllerCameraModeSampling) {
  3124. + // ensure crop rect does not include controls
  3125. + if(scanCrop.origin.x + scanCrop.size.width > .8875)
  3126. + scanCrop.size.width = .8875 - scanCrop.origin.x;
  3127. +
  3128. + meth = @selector(scanScreen);
  3129. + }
  3130. + else
  3131. + meth = @selector(takePicture);
  3132. +
  3133. + [self performSelector: meth
  3134. + withObject: nil
  3135. + afterDelay: 2];
  3136. +#ifdef DEBUG_OBJC
  3137. + [self performSelector: @selector(dumpFPS)
  3138. + withObject: nil
  3139. + afterDelay: 4];
  3140. +#endif
  3141. + }
  3142. + else {
  3143. + scanBtn.enabled = NO;
  3144. + toolbar.items = [NSArray arrayWithObjects:
  3145. + cancelBtn, space[0], scanBtn, space[1], space[2], nil];
  3146. +
  3147. + [self performSelector: @selector(reenable)
  3148. + withObject: nil
  3149. + afterDelay: .5];
  3150. +
  3151. + [boxView removeFromSuperview];
  3152. + }
  3153. + }
  3154. +}
  3155. +
  3156. +- (void) viewWillAppear: (BOOL) animated
  3157. +{
  3158. + [self initScanning];
  3159. + [super viewWillAppear: animated];
  3160. +}
  3161. +
  3162. +- (void) viewWillDisappear: (BOOL) animated
  3163. +{
  3164. + sampling = NO;
  3165. + scanner.enableCache = NO;
  3166. + [super viewWillDisappear: animated];
  3167. +}
  3168. +
  3169. +- (BOOL) showsZBarControls
  3170. +{
  3171. + return(showsZBarControls);
  3172. +}
  3173. +
  3174. +- (void) setCameraMode: (ZBarReaderControllerCameraMode) mode
  3175. +{
  3176. +#if !USE_PRIVATE_APIS
  3177. + if(mode == ZBarReaderControllerCameraModeSampling)
  3178. + [NSException raise: NSInvalidArgumentException
  3179. + format: @"ZBarReaderController cannot set cameraMode=Sampling"
  3180. + @" when USE_PRIVATE_APIS=0"];
  3181. +#endif
  3182. + cameraMode = mode;
  3183. +}
  3184. +
  3185. +- (void) setShowsZBarControls: (BOOL) show
  3186. +{
  3187. + if(show && !hasOverlay)
  3188. + [NSException raise: NSInvalidArgumentException
  3189. + format: @"ZBarReaderController cannot set showsZBarControls=YES for OS<3.1"];
  3190. +
  3191. + showsZBarControls = show;
  3192. +}
  3193. +
  3194. +// intercept delegate as readerDelegate
  3195. +
  3196. +- (void) setDelegate: (id <UINavigationControllerDelegate,
  3197. + UIImagePickerControllerDelegate>) delegate
  3198. +{
  3199. + self.readerDelegate = (id <ZBarReaderDelegate>)delegate;
  3200. +}
  3201. +
  3202. +
  3203. +#ifdef DEBUG_OBJC
  3204. +- (void) dumpFPS
  3205. +{
  3206. + if(!sampling)
  3207. + return;
  3208. + [self performSelector: @selector(dumpFPS)
  3209. + withObject: nil
  3210. + afterDelay: 2];
  3211. + zlog(@"fps=%g", 1 / dt_frame);
  3212. +}
  3213. +#endif
  3214. +
  3215. +- (NSInteger) scanImage: (CGImageRef) image
  3216. + withScaling: (CGFloat) scale
  3217. +{
  3218. + uint64_t now = timer_now();
  3219. + if(dt_frame)
  3220. + dt_frame = (dt_frame + timer_elapsed(t_frame, now)) / 2;
  3221. + else
  3222. + dt_frame = timer_elapsed(t_frame, now);
  3223. + t_frame = now;
  3224. +
  3225. + int w = CGImageGetWidth(image);
  3226. + int h = CGImageGetHeight(image);
  3227. + CGRect crop;
  3228. + if(w >= h)
  3229. + crop = CGRectMake(scanCrop.origin.x * w, scanCrop.origin.y * h,
  3230. + scanCrop.size.width * w, scanCrop.size.height * h);
  3231. + else
  3232. + crop = CGRectMake(scanCrop.origin.y * w, scanCrop.origin.x * h,
  3233. + scanCrop.size.height * w, scanCrop.size.width * h);
  3234. +
  3235. + CGSize size;
  3236. + if(crop.size.width >= crop.size.height &&
  3237. + crop.size.width > maxScanDimension)
  3238. + size = CGSizeMake(maxScanDimension,
  3239. + crop.size.height * maxScanDimension / crop.size.width);
  3240. + else if(crop.size.height > maxScanDimension)
  3241. + size = CGSizeMake(crop.size.width * maxScanDimension / crop.size.height,
  3242. + maxScanDimension);
  3243. + else
  3244. + size = crop.size;
  3245. +
  3246. + if(scale) {
  3247. + size.width *= scale;
  3248. + size.height *= scale;
  3249. + }
  3250. +
  3251. + if(self.sourceType != UIImagePickerControllerSourceTypeCamera ||
  3252. + cameraMode == ZBarReaderControllerCameraModeDefault) {
  3253. + // limit the maximum number of scan passes
  3254. + int density;
  3255. + if(size.width > 720)
  3256. + density = (size.width / 240 + 1) / 2;
  3257. + else
  3258. + density = 1;
  3259. + [scanner setSymbology: 0
  3260. + config: ZBAR_CFG_X_DENSITY
  3261. + to: density];
  3262. +
  3263. + if(size.height > 720)
  3264. + density = (size.height / 240 + 1) / 2;
  3265. + else
  3266. + density = 1;
  3267. + [scanner setSymbology: 0
  3268. + config: ZBAR_CFG_Y_DENSITY
  3269. + to: density];
  3270. + }
  3271. +
  3272. + ZBarImage *zimg = [[ZBarImage alloc]
  3273. + initWithCGImage: image
  3274. + crop: crop
  3275. + size: size];
  3276. + int nsyms = [scanner scanImage: zimg];
  3277. + [zimg release];
  3278. +
  3279. + return(nsyms);
  3280. +}
  3281. +
  3282. +- (ZBarSymbol*) extractBestResult: (BOOL) filter
  3283. +{
  3284. + ZBarSymbol *sym = nil;
  3285. + ZBarSymbolSet *results = scanner.results;
  3286. + results.filterSymbols = filter;
  3287. + for(ZBarSymbol *s in results)
  3288. + if(!sym || sym.quality < s.quality)
  3289. + sym = s;
  3290. + return(sym);
  3291. +}
  3292. +
  3293. +- (void) updateBox: (ZBarSymbol*) sym
  3294. + imageSize: (CGSize) size
  3295. +{
  3296. + [CATransaction begin];
  3297. + [CATransaction setAnimationDuration: .3];
  3298. + [CATransaction setAnimationTimingFunction:
  3299. + [CAMediaTimingFunction functionWithName:
  3300. + kCAMediaTimingFunctionLinear]];
  3301. +
  3302. + CGFloat alpha = boxLayer.opacity;
  3303. + if(sym) {
  3304. + CGRect r = sym.bounds;
  3305. + if(r.size.width > 16 && r.size.height > 16) {
  3306. + r.origin.x += scanCrop.origin.y * size.width;
  3307. + r.origin.y += scanCrop.origin.x * size.height;
  3308. + r = CGRectInset(r, -16, -16);
  3309. + if(alpha > .25) {
  3310. + CGRect frame = boxLayer.frame;
  3311. + r.origin.x = (r.origin.x * 3 + frame.origin.x) / 4;
  3312. + r.origin.y = (r.origin.y * 3 + frame.origin.y) / 4;
  3313. + r.size.width = (r.size.width * 3 + frame.size.width) / 4;
  3314. + r.size.height = (r.size.height * 3 + frame.size.height) / 4;
  3315. + }
  3316. + boxLayer.frame = r;
  3317. + boxLayer.opacity = 1;
  3318. + }
  3319. + }
  3320. + else {
  3321. + if(alpha > .1)
  3322. + boxLayer.opacity = alpha / 2;
  3323. + else if(alpha)
  3324. + boxLayer.opacity = 0;
  3325. + }
  3326. + [CATransaction commit];
  3327. +}
  3328. +
  3329. +#if USE_PRIVATE_APIS
  3330. +
  3331. +- (void) scanScreen
  3332. +{
  3333. + if(!sampling)
  3334. + return;
  3335. +
  3336. + // FIXME ugly hack: use private API to sample screen
  3337. + CGImageRef image = UIGetScreenImage();
  3338. +
  3339. + [self scanImage: image
  3340. + withScaling: 0];
  3341. + CGSize size = CGSizeMake(CGImageGetWidth(image), CGImageGetHeight(image));
  3342. + CGImageRelease(image);
  3343. +
  3344. + ZBarSymbol *sym = [self extractBestResult: NO];
  3345. +
  3346. + if(sym && !sym.count) {
  3347. + SEL cb = @selector(imagePickerController:didFinishPickingMediaWithInfo:);
  3348. + if(takesPicture) {
  3349. + symbol = [sym retain];
  3350. + [self takePicture];
  3351. + }
  3352. + else if([readerDelegate respondsToSelector: cb]) {
  3353. + symbol = [sym retain];
  3354. +
  3355. + [CATransaction begin];
  3356. + [CATransaction setDisableActions: YES];
  3357. + boxLayer.opacity = 0;
  3358. + [CATransaction commit];
  3359. +
  3360. + // capture preview image and send to delegate
  3361. + // after box has been hidden
  3362. + [self performSelector: @selector(captureScreen)
  3363. + withObject: nil
  3364. + afterDelay: 0.001];
  3365. + return;
  3366. + }
  3367. + }
  3368. +
  3369. + // reschedule
  3370. + [self performSelector: @selector(scanScreen)
  3371. + withObject: nil
  3372. + afterDelay: 0.001];
  3373. +
  3374. + if(tracksSymbols)
  3375. + [self updateBox: sym
  3376. + imageSize: size];
  3377. +}
  3378. +
  3379. +- (void) captureScreen
  3380. +{
  3381. + CGImageRef screen = UIGetScreenImage();
  3382. +
  3383. + CGRect r = CGRectMake(0, 0,
  3384. + CGImageGetWidth(screen), CGImageGetHeight(screen));
  3385. + if(r.size.width > r.size.height)
  3386. + r.size.width -= 54;
  3387. + else
  3388. + r.size.height -= 54;
  3389. + CGImageRef preview = CGImageCreateWithImageInRect(screen, r);
  3390. + CGImageRelease(screen);
  3391. +
  3392. + UIImage *image = [UIImage imageWithCGImage: preview];
  3393. + CGImageRelease(preview);
  3394. +
  3395. + [readerDelegate
  3396. + imagePickerController: self
  3397. + didFinishPickingMediaWithInfo:
  3398. + [NSDictionary dictionaryWithObjectsAndKeys:
  3399. + image, UIImagePickerControllerOriginalImage,
  3400. + [NSArray arrayWithObject: symbol],
  3401. + ZBarReaderControllerResults,
  3402. + nil]];
  3403. + [symbol release];
  3404. + symbol = nil;
  3405. +
  3406. + // continue scanning until dismissed
  3407. + [self performSelector: @selector(scanScreen)
  3408. + withObject: nil
  3409. + afterDelay: 0.001];
  3410. +}
  3411. +
  3412. +#endif /* USE_PRIVATE_APIS */
  3413. +
  3414. +- (void) scanSequence: (UIImage*) image
  3415. +{
  3416. + if(!sampling) {
  3417. + [image release];
  3418. + return;
  3419. + }
  3420. +
  3421. + int nsyms = [self scanImage: image.CGImage
  3422. + withScaling: 0];
  3423. +
  3424. + ZBarSymbol *sym = nil;
  3425. + if(nsyms)
  3426. + [self extractBestResult: NO];
  3427. +
  3428. + SEL cb = @selector(imagePickerController:didFinishPickingMediaWithInfo:);
  3429. + if(sym && !sym.count &&
  3430. + [readerDelegate respondsToSelector: cb])
  3431. + [readerDelegate
  3432. + imagePickerController: self
  3433. + didFinishPickingMediaWithInfo:
  3434. + [NSDictionary dictionaryWithObjectsAndKeys:
  3435. + image, UIImagePickerControllerOriginalImage,
  3436. + [NSArray arrayWithObject: sym],
  3437. + ZBarReaderControllerResults,
  3438. + nil]];
  3439. + CGSize size = image.size;
  3440. + [image release];
  3441. +
  3442. + // reschedule
  3443. + [self performSelector: @selector(takePicture)
  3444. + withObject: nil
  3445. + afterDelay: 0.001];
  3446. +
  3447. + if(tracksSymbols)
  3448. + [self updateBox: sym
  3449. + imageSize: size];
  3450. +}
  3451. +
  3452. +- (void) showHelpWithReason: (NSString*) reason
  3453. +{
  3454. + if(help) {
  3455. + [help.view removeFromSuperview];
  3456. + [help release];
  3457. + }
  3458. + help = [[ZBarHelpController alloc]
  3459. + initWithReason: reason];
  3460. + help.delegate = (id<ZBarHelpDelegate>)self;
  3461. +
  3462. + if(self.sourceType != UIImagePickerControllerSourceTypeCamera) {
  3463. + [self presentModalViewController: help
  3464. + animated: YES];
  3465. + return;
  3466. + }
  3467. +
  3468. + // show help as overlay view to workaround controller bugs
  3469. + sampling = NO;
  3470. + scanner.enableCache = NO;
  3471. + help.wantsFullScreenLayout = YES;
  3472. + help.view.alpha = 0;
  3473. +
  3474. + UIView *activeOverlay = [self cameraOverlayView];
  3475. + help.view.frame = [activeOverlay
  3476. + convertRect: CGRectMake(0, 0, 320, 480)
  3477. + fromView: nil];
  3478. + [activeOverlay addSubview: help.view];
  3479. + [UIView beginAnimations: @"ZBarHelp"
  3480. + context: nil];
  3481. + help.view.alpha = 1;
  3482. + [UIView commitAnimations];
  3483. +}
  3484. +
  3485. +- (void) info
  3486. +{
  3487. + [self showHelpWithReason: @"INFO"];
  3488. +}
  3489. +
  3490. +- (void) imagePickerController: (UIImagePickerController*) picker
  3491. + didFinishPickingMediaWithInfo: (NSDictionary*) info
  3492. +{
  3493. + UIImage *img = [info objectForKey: UIImagePickerControllerOriginalImage];
  3494. +
  3495. + id results = nil;
  3496. + if(self.sourceType == UIImagePickerControllerSourceTypeCamera &&
  3497. + cameraMode == ZBarReaderControllerCameraModeSequence) {
  3498. + if(sampling)
  3499. + [self performSelector: @selector(scanSequence:)
  3500. + withObject: [img retain]
  3501. + afterDelay: 0.001];
  3502. + return;
  3503. + }
  3504. + else if(!sampling)
  3505. + results = [self scanImage: img.CGImage];
  3506. + else {
  3507. + results = [NSArray arrayWithObject: symbol];
  3508. + [symbol release];
  3509. + symbol = nil;
  3510. + }
  3511. +
  3512. + [self performSelector: @selector(reenable)
  3513. + withObject: nil
  3514. + afterDelay: .25];
  3515. +
  3516. + if(results) {
  3517. + NSMutableDictionary *newinfo = [info mutableCopy];
  3518. + [newinfo setObject: results
  3519. + forKey: ZBarReaderControllerResults];
  3520. + SEL cb = @selector(imagePickerController:didFinishPickingMediaWithInfo:);
  3521. + if([readerDelegate respondsToSelector: cb])
  3522. + [readerDelegate imagePickerController: self
  3523. + didFinishPickingMediaWithInfo: newinfo];
  3524. + else
  3525. + [self dismissModalViewControllerAnimated: YES];
  3526. + [newinfo release];
  3527. + return;
  3528. + }
  3529. +
  3530. + BOOL camera = (self.sourceType == UIImagePickerControllerSourceTypeCamera);
  3531. + BOOL retry = !camera || (hasOverlay && ![self showsCameraControls]);
  3532. + if(showsHelpOnFail && retry)
  3533. + [self showHelpWithReason: @"FAIL"];
  3534. +
  3535. + SEL cb = @selector(readerControllerDidFailToRead:withRetry:);
  3536. + if([readerDelegate respondsToSelector: cb])
  3537. + // assume delegate dismisses controller if necessary
  3538. + [readerDelegate readerControllerDidFailToRead: self
  3539. + withRetry: retry];
  3540. + else if(!retry)
  3541. + // must dismiss stock controller
  3542. + [self dismissModalViewControllerAnimated: YES];
  3543. +}
  3544. +
  3545. +- (void) imagePickerControllerDidCancel: (UIImagePickerController*) picker
  3546. +{
  3547. + SEL cb = @selector(imagePickerControllerDidCancel:);
  3548. + if([readerDelegate respondsToSelector: cb])
  3549. + [readerDelegate imagePickerControllerDidCancel: self];
  3550. + else
  3551. + [self dismissModalViewControllerAnimated: YES];
  3552. +}
  3553. +
  3554. +// ZBarHelpDelegate
  3555. +
  3556. +- (void) helpControllerDidFinish: (ZBarHelpController*) hlp
  3557. +{
  3558. + if(self.sourceType == UIImagePickerControllerSourceTypeCamera) {
  3559. + [UIView beginAnimations: @"ZBarHelp"
  3560. + context: nil];
  3561. + hlp.view.alpha = 0;
  3562. + [UIView commitAnimations];
  3563. + [self initScanning];
  3564. + }
  3565. + else
  3566. + [hlp dismissModalViewControllerAnimated: YES];
  3567. +}
  3568. +
  3569. +- (id <NSFastEnumeration>) scanImage: (CGImageRef) image
  3570. +{
  3571. + timer_start;
  3572. +
  3573. + int nsyms = [self scanImage: image
  3574. + withScaling: 0];
  3575. +
  3576. + if(!nsyms &&
  3577. + CGImageGetWidth(image) >= 640 &&
  3578. + CGImageGetHeight(image) >= 640)
  3579. + // make one more attempt for close up, grainy images
  3580. + nsyms = [self scanImage: image
  3581. + withScaling: .5];
  3582. +
  3583. + NSMutableArray *syms = nil;
  3584. + if(nsyms) {
  3585. + // quality/type filtering
  3586. + int max_quality = MIN_QUALITY;
  3587. + for(ZBarSymbol *sym in scanner.results) {
  3588. + zbar_symbol_type_t type = sym.type;
  3589. + int quality;
  3590. + if(type == ZBAR_QRCODE)
  3591. + quality = INT_MAX;
  3592. + else
  3593. + quality = sym.quality;
  3594. +
  3595. + if(quality < max_quality) {
  3596. + zlog(@" type=%d quality=%d < %d\n",
  3597. + type, quality, max_quality);
  3598. + continue;
  3599. + }
  3600. +
  3601. + if(max_quality < quality) {
  3602. + max_quality = quality;
  3603. + if(syms)
  3604. + [syms removeAllObjects];
  3605. + }
  3606. + zlog(@" type=%d quality=%d\n", type, quality);
  3607. + if(!syms)
  3608. + syms = [NSMutableArray arrayWithCapacity: 1];
  3609. +
  3610. + [syms addObject: sym];
  3611. + }
  3612. + }
  3613. +
  3614. + zlog(@"read %d filtered symbols in %gs total\n",
  3615. + (!syms) ? 0 : [syms count], timer_elapsed(t_start, timer_now()));
  3616. + return(syms);
  3617. +}
  3618. +
  3619. +@end
  3620. diff --git a/iphone/ZBarReaderView.m b/iphone/ZBarReaderView.m
  3621. new file mode 100644
  3622. --- /dev/null
  3623. +++ b/iphone/ZBarReaderView.m
  3624. @@ -0,0 +1,408 @@
  3625. +//------------------------------------------------------------------------
  3626. +// Copyright 2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  3627. +//
  3628. +// This file is part of the ZBar Bar Code Reader.
  3629. +//
  3630. +// The ZBar Bar Code Reader is free software; you can redistribute it
  3631. +// and/or modify it under the terms of the GNU Lesser Public License as
  3632. +// published by the Free Software Foundation; either version 2.1 of
  3633. +// the License, or (at your option) any later version.
  3634. +//
  3635. +// The ZBar Bar Code Reader is distributed in the hope that it will be
  3636. +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  3637. +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  3638. +// GNU Lesser Public License for more details.
  3639. +//
  3640. +// You should have received a copy of the GNU Lesser Public License
  3641. +// along with the ZBar Bar Code Reader; if not, write to the Free
  3642. +// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  3643. +// Boston, MA 02110-1301 USA
  3644. +//
  3645. +// http://sourceforge.net/projects/zbar
  3646. +//------------------------------------------------------------------------
  3647. +
  3648. +#import <ZBarSDK/ZBarReaderView.h>
  3649. +
  3650. +#define MODULE ZBarReaderView
  3651. +#import "debug.h"
  3652. +
  3653. +// silence warning
  3654. +@interface ZBarReaderViewImpl : NSObject
  3655. +@end
  3656. +
  3657. +@implementation ZBarReaderView
  3658. +
  3659. +@synthesize readerDelegate, tracksSymbols, torchMode, showsFPS, zoom, scanCrop,
  3660. + previewTransform;
  3661. +@dynamic scanner, allowsPinchZoom, enableCache, device, session, captureReader;
  3662. +
  3663. ++ (id) alloc
  3664. +{
  3665. + if(self == [ZBarReaderView class]) {
  3666. + // this is an abstract wrapper for implementation selected
  3667. + // at compile time. replace with concrete subclass.
  3668. + return([ZBarReaderViewImpl alloc]);
  3669. + }
  3670. + return([super alloc]);
  3671. +}
  3672. +
  3673. +- (void) initSubviews
  3674. +{
  3675. + assert(preview);
  3676. +
  3677. + CGRect r = preview.bounds;
  3678. + overlay = [CALayer new];
  3679. + overlay.frame = r;
  3680. + overlay.backgroundColor = [UIColor clearColor].CGColor;
  3681. + [preview addSublayer: overlay];
  3682. +
  3683. + tracking = [CALayer new];
  3684. + tracking.frame = r;
  3685. + tracking.opacity = 0;
  3686. + tracking.borderWidth = 1;
  3687. + tracking.backgroundColor = [UIColor clearColor].CGColor;
  3688. + tracking.borderColor = [UIColor greenColor].CGColor;
  3689. + [overlay addSublayer: tracking];
  3690. +
  3691. + r.origin.x = 3 * r.size.width / 4;
  3692. + r.origin.y = r.size.height - 32;
  3693. + r.size.width = r.size.width - r.origin.x + 12;
  3694. + r.size.height = 32 + 12;
  3695. + fpsView = [[UIView alloc]
  3696. + initWithFrame: r];
  3697. + fpsView.backgroundColor = [UIColor colorWithWhite: 0
  3698. + alpha: .333];
  3699. + fpsView.layer.cornerRadius = 12;
  3700. + fpsView.hidden = YES;
  3701. + [self addSubview: fpsView];
  3702. +
  3703. + fpsLabel = [[UILabel alloc]
  3704. + initWithFrame: CGRectMake(0, 0,
  3705. + r.size.width - 12,
  3706. + r.size.height - 12)];
  3707. + fpsLabel.backgroundColor = [UIColor clearColor];
  3708. + fpsLabel.textColor = [UIColor colorWithRed: .333
  3709. + green: .666
  3710. + blue: 1
  3711. + alpha: 1];
  3712. + fpsLabel.font = [UIFont systemFontOfSize: 18];
  3713. + fpsLabel.textAlignment = UITextAlignmentRight;
  3714. + [fpsView addSubview: fpsLabel];
  3715. +
  3716. + self.zoom = 1.25;
  3717. +}
  3718. +
  3719. +- (id) initWithImageScanner: (ZBarImageScanner*) scanner
  3720. +{
  3721. + self = [super initWithFrame: CGRectMake(0, 0, 320, 426)];
  3722. + if(!self)
  3723. + return(nil);
  3724. +
  3725. + self.backgroundColor = [UIColor blackColor];
  3726. + self.contentMode = UIViewContentModeScaleAspectFill;
  3727. + self.autoresizingMask =
  3728. + UIViewAutoresizingFlexibleWidth |
  3729. + UIViewAutoresizingFlexibleHeight;
  3730. +
  3731. + tracksSymbols = YES;
  3732. + torchMode = 2; // AVCaptureTorchModeAuto
  3733. + scanCrop = zoomCrop = CGRectMake(0, 0, 1, 1);
  3734. + imageScale = 1;
  3735. + previewTransform = CGAffineTransformIdentity;
  3736. +
  3737. + pinch = [[UIPinchGestureRecognizer alloc]
  3738. + initWithTarget: self
  3739. + action: @selector(handlePinch)];
  3740. + [self addGestureRecognizer: pinch];
  3741. +
  3742. + return(self);
  3743. +}
  3744. +
  3745. +- (id) init
  3746. +{
  3747. + ZBarImageScanner *scanner =
  3748. + [[ZBarImageScanner new]
  3749. + autorelease];
  3750. + self = [self initWithImageScanner: scanner];
  3751. + if(!self)
  3752. + return(nil);
  3753. +
  3754. + [scanner setSymbology: 0
  3755. + config: ZBAR_CFG_X_DENSITY
  3756. + to: 3];
  3757. + [scanner setSymbology: 0
  3758. + config: ZBAR_CFG_Y_DENSITY
  3759. + to: 3];
  3760. + return(self);
  3761. +}
  3762. +
  3763. +- (void) dealloc
  3764. +{
  3765. + [preview removeFromSuperlayer];
  3766. + [preview release];
  3767. + preview = nil;
  3768. + [overlay release];
  3769. + overlay = nil;
  3770. + [tracking release];
  3771. + tracking = nil;
  3772. + [fpsLabel release];
  3773. + fpsLabel = nil;
  3774. + [fpsView release];
  3775. + fpsView = nil;
  3776. + [pinch release];
  3777. + pinch = nil;
  3778. + [super dealloc];
  3779. +}
  3780. +
  3781. +- (void) resetTracking
  3782. +{
  3783. + [tracking removeAllAnimations];
  3784. + [CATransaction begin];
  3785. + [CATransaction setDisableActions: YES];
  3786. + CGSize size = overlay.bounds.size;
  3787. + CGRect crop = zoomCrop;
  3788. + tracking.frame = CGRectMake(crop.origin.x * size.width,
  3789. + crop.origin.y * size.height,
  3790. + crop.size.width * size.width,
  3791. + crop.size.height * size.height);
  3792. + tracking.opacity = 0;
  3793. + [CATransaction commit];
  3794. +}
  3795. +
  3796. +- (void) setImageSize: (CGSize) size
  3797. +{
  3798. + CGSize psize = preview.bounds.size;
  3799. + CGFloat scalex = size.width / psize.height;
  3800. + CGFloat scaley = size.height / psize.width;
  3801. + imageScale = (scalex > scaley) ? scalex : scaley;
  3802. +
  3803. + // match overlay to preview image
  3804. + overlay.bounds = CGRectMake(0, 0, size.width, size.height);
  3805. + CGFloat scale = 1 / imageScale;
  3806. + CATransform3D xform = CATransform3DMakeRotation(M_PI / 2, 0, 0, 1);
  3807. + overlay.transform = CATransform3DScale(xform, scale, scale, 1);
  3808. + tracking.borderWidth = imageScale / zoom;
  3809. +
  3810. + zlog(@"scaling: layer=%@ image=%@ scale=%g %c %g = 1/%g",
  3811. + NSStringFromCGSize(psize), NSStringFromCGSize(size),
  3812. + scalex, (scalex > scaley) ? '>' : '<', scaley, scale);
  3813. + [self resetTracking];
  3814. +}
  3815. +
  3816. +- (void) cropUpdate
  3817. +{
  3818. + CGAffineTransform xfrm =
  3819. + CGAffineTransformMakeTranslation(.5, .5);
  3820. + CGFloat z = 1 / zoom;
  3821. + xfrm = CGAffineTransformScale(xfrm, z, z);
  3822. + xfrm = CGAffineTransformTranslate(xfrm, -.5, -.5);
  3823. + zoomCrop = CGRectApplyAffineTransform(scanCrop, xfrm);
  3824. + [self resetTracking];
  3825. +}
  3826. +
  3827. +- (void) setScanCrop: (CGRect) r
  3828. +{
  3829. + if(CGRectEqualToRect(scanCrop, r))
  3830. + return;
  3831. + scanCrop = r;
  3832. + [self cropUpdate];
  3833. +}
  3834. +
  3835. +- (void) setTracksSymbols: (BOOL) track
  3836. +{
  3837. + if(track == tracksSymbols)
  3838. + return;
  3839. + tracksSymbols = track;
  3840. + [self resetTracking];
  3841. +}
  3842. +
  3843. +- (BOOL) allowsPinchZoom
  3844. +{
  3845. + return(pinch.enabled);
  3846. +}
  3847. +
  3848. +- (void) setAllowsPinchZoom: (BOOL) enabled
  3849. +{
  3850. + pinch.enabled = enabled;
  3851. +}
  3852. +
  3853. +- (void) setShowsFPS: (BOOL) show
  3854. +{
  3855. + if(show == showsFPS)
  3856. + return;
  3857. + fpsView.hidden = !show;
  3858. +}
  3859. +
  3860. +- (void) setZoom: (CGFloat) z
  3861. +{
  3862. + if(z < 1.0)
  3863. + z = 1.0;
  3864. + if(z > 2.0)
  3865. + z = 2.0;
  3866. + if(z == zoom)
  3867. + return;
  3868. + zoom = z;
  3869. +
  3870. + [CATransaction begin];
  3871. + [CATransaction setAnimationDuration: .1];
  3872. + [CATransaction setAnimationTimingFunction:
  3873. + [CAMediaTimingFunction functionWithName:
  3874. + kCAMediaTimingFunctionLinear]];
  3875. + [preview setAffineTransform:
  3876. + CGAffineTransformScale(previewTransform, z, z)];
  3877. + tracking.borderWidth = imageScale / zoom;
  3878. + [CATransaction commit];
  3879. +
  3880. + [self cropUpdate];
  3881. +}
  3882. +
  3883. +- (void) setPreviewTransform: (CGAffineTransform) xfrm
  3884. +{
  3885. + previewTransform = xfrm;
  3886. + [preview setAffineTransform:
  3887. + CGAffineTransformScale(previewTransform, zoom, zoom)];
  3888. +}
  3889. +
  3890. +- (void) start
  3891. +{
  3892. + if(started)
  3893. + return;
  3894. + started = YES;
  3895. +
  3896. + [self resetTracking];
  3897. + fpsLabel.text = @"--- fps ";
  3898. +
  3899. + [[UIDevice currentDevice]
  3900. + beginGeneratingDeviceOrientationNotifications];
  3901. +}
  3902. +
  3903. +- (void) stop
  3904. +{
  3905. + if(!started)
  3906. + return;
  3907. + started = NO;
  3908. +
  3909. + [[UIDevice currentDevice]
  3910. + endGeneratingDeviceOrientationNotifications];
  3911. +}
  3912. +
  3913. +- (void) flushCache
  3914. +{
  3915. +}
  3916. +
  3917. +// UIGestureRecognizer callback
  3918. +
  3919. +- (void) handlePinch
  3920. +{
  3921. + if(pinch.state == UIGestureRecognizerStateBegan)
  3922. + zoom0 = zoom;
  3923. + CGFloat z = zoom0 * pinch.scale;
  3924. + self.zoom = z;
  3925. +
  3926. + if((zoom < 1.5) != (z < 1.5)) {
  3927. + int d = (z < 1.5) ? 3 : 2;
  3928. + ZBarImageScanner *scanner = self.scanner;
  3929. + @synchronized(scanner) {
  3930. + [scanner setSymbology: 0
  3931. + config: ZBAR_CFG_X_DENSITY
  3932. + to: d];
  3933. + [scanner setSymbology: 0
  3934. + config: ZBAR_CFG_Y_DENSITY
  3935. + to: d];
  3936. + }
  3937. + }
  3938. +}
  3939. +
  3940. +- (void) updateTracking: (CALayer*) trk
  3941. + withSymbol: (ZBarSymbol*) sym
  3942. +{
  3943. + if(!sym)
  3944. + return;
  3945. +
  3946. + CGRect r = sym.bounds;
  3947. + if(r.size.width <= 32 && r.size.height <= 32)
  3948. + return;
  3949. + r = CGRectInset(r, -24, -24);
  3950. +
  3951. + CALayer *current = trk.presentationLayer;
  3952. + CGPoint cp = current.position;
  3953. + CGPoint p = CGPointMake(CGRectGetMidX(r), CGRectGetMidY(r));
  3954. + p = CGPointMake((p.x * 3 + cp.x) / 4, (p.y * 3 + cp.y) / 4);
  3955. +
  3956. + CGRect cr = current.bounds;
  3957. + r.origin = cr.origin;
  3958. + r.size.width = (r.size.width * 3 + cr.size.width) / 4;
  3959. + r.size.height = (r.size.height * 3 + cr.size.height) / 4;
  3960. +
  3961. + CAMediaTimingFunction *linear =
  3962. + [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear];
  3963. +
  3964. + CABasicAnimation *resize =
  3965. + [CABasicAnimation animationWithKeyPath: @"bounds"];
  3966. + resize.fromValue = [NSValue valueWithCGRect: cr];
  3967. + resize.toValue = [NSValue valueWithCGRect: r];
  3968. + resize.duration = .2;
  3969. + resize.timingFunction = linear;
  3970. + resize.fillMode = kCAFillModeForwards;
  3971. + resize.removedOnCompletion = NO;
  3972. +
  3973. + CABasicAnimation *move =
  3974. + [CABasicAnimation animationWithKeyPath: @"position"];
  3975. + move.fromValue = [NSValue valueWithCGPoint: cp];
  3976. + move.toValue = [NSValue valueWithCGPoint: p];
  3977. + move.duration = .2;
  3978. + move.timingFunction = linear;
  3979. + move.fillMode = kCAFillModeForwards;
  3980. + move.removedOnCompletion = NO;
  3981. +
  3982. + CABasicAnimation *on =
  3983. + [CABasicAnimation animationWithKeyPath: @"opacity"];
  3984. + on.fromValue = [NSNumber numberWithDouble: current.opacity];
  3985. + on.toValue = [NSNumber numberWithDouble: 1];
  3986. + on.duration = .2;
  3987. + on.timingFunction = linear;
  3988. + on.fillMode = kCAFillModeForwards;
  3989. + on.removedOnCompletion = NO;
  3990. +
  3991. + CABasicAnimation *off = nil;
  3992. + if(!TARGET_IPHONE_SIMULATOR) {
  3993. + off = [CABasicAnimation animationWithKeyPath: @"opacity"];
  3994. + off.fromValue = [NSNumber numberWithDouble: 1];
  3995. + off.toValue = [NSNumber numberWithDouble: 0];
  3996. + off.beginTime = .5;
  3997. + off.duration = .5;
  3998. + off.timingFunction = linear;
  3999. + }
  4000. +
  4001. + CAAnimationGroup *group = [CAAnimationGroup animation];
  4002. + group.animations = [NSArray arrayWithObjects: resize, move, on, off, nil];
  4003. + group.duration = 1;
  4004. + group.fillMode = kCAFillModeForwards;
  4005. + group.removedOnCompletion = !TARGET_IPHONE_SIMULATOR;
  4006. + [trk addAnimation: group
  4007. + forKey: @"tracking"];
  4008. +}
  4009. +
  4010. +- (void) didTrackSymbols: (ZBarSymbolSet*) syms
  4011. +{
  4012. + if(!tracksSymbols)
  4013. + return;
  4014. +
  4015. + int n = syms.count;
  4016. + assert(n);
  4017. + if(!n)
  4018. + return;
  4019. +
  4020. + ZBarSymbol *sym = nil;
  4021. + for(ZBarSymbol *s in syms)
  4022. + if(!sym || s.type == ZBAR_QRCODE || s.quality > sym.quality)
  4023. + sym = s;
  4024. + assert(sym);
  4025. + if(!sym)
  4026. + return;
  4027. +
  4028. + [self updateTracking: tracking
  4029. + withSymbol: sym];
  4030. +}
  4031. +
  4032. +@end
  4033. diff --git a/iphone/ZBarReaderViewController.m b/iphone/ZBarReaderViewController.m
  4034. new file mode 100644
  4035. --- /dev/null
  4036. +++ b/iphone/ZBarReaderViewController.m
  4037. @@ -0,0 +1,383 @@
  4038. +//------------------------------------------------------------------------
  4039. +// Copyright 2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  4040. +//
  4041. +// This file is part of the ZBar Bar Code Reader.
  4042. +//
  4043. +// The ZBar Bar Code Reader is free software; you can redistribute it
  4044. +// and/or modify it under the terms of the GNU Lesser Public License as
  4045. +// published by the Free Software Foundation; either version 2.1 of
  4046. +// the License, or (at your option) any later version.
  4047. +//
  4048. +// The ZBar Bar Code Reader is distributed in the hope that it will be
  4049. +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  4050. +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  4051. +// GNU Lesser Public License for more details.
  4052. +//
  4053. +// You should have received a copy of the GNU Lesser Public License
  4054. +// along with the ZBar Bar Code Reader; if not, write to the Free
  4055. +// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  4056. +// Boston, MA 02110-1301 USA
  4057. +//
  4058. +// http://sourceforge.net/projects/zbar
  4059. +//------------------------------------------------------------------------
  4060. +
  4061. +#import <ZBarSDK/ZBarReaderViewController.h>
  4062. +#import <ZBarSDK/ZBarReaderView.h>
  4063. +#import <ZBarSDK/ZBarHelpController.h>
  4064. +
  4065. +#define MODULE ZBarReaderViewController
  4066. +#import "debug.h"
  4067. +
  4068. +@implementation ZBarReaderViewController
  4069. +
  4070. +@synthesize scanner, readerDelegate, showsZBarControls, tracksSymbols,
  4071. + enableCache, cameraOverlayView, cameraViewTransform, readerView, scanCrop;
  4072. +@dynamic sourceType, allowsEditing, allowsImageEditing, showsCameraControls,
  4073. + showsHelpOnFail, cameraMode, takesPicture, maxScanDimension;
  4074. +
  4075. ++ (BOOL) isSourceTypeAvailable: (UIImagePickerControllerSourceType) sourceType
  4076. +{
  4077. + if(sourceType != UIImagePickerControllerSourceTypeCamera)
  4078. + return(NO);
  4079. + return(TARGET_IPHONE_SIMULATOR ||
  4080. + [UIImagePickerController isSourceTypeAvailable: sourceType]);
  4081. +}
  4082. +
  4083. +- (id) init
  4084. +{
  4085. + if(!TARGET_IPHONE_SIMULATOR &&
  4086. + !NSClassFromString(@"AVCaptureSession")) {
  4087. + // fallback to old interface
  4088. + zlog(@"Falling back to ZBarReaderController");
  4089. + [self release];
  4090. + return([ZBarReaderController new]);
  4091. + }
  4092. +
  4093. + self = [super init];
  4094. + if(!self)
  4095. + return(nil);
  4096. +
  4097. + self.wantsFullScreenLayout = YES;
  4098. +
  4099. + showsZBarControls = tracksSymbols = enableCache = YES;
  4100. + scanCrop = CGRectMake(0, 0, 1, 1);
  4101. + cameraViewTransform = CGAffineTransformIdentity;
  4102. +
  4103. + // create our own scanner to store configuration,
  4104. + // independent of whether view is loaded
  4105. + scanner = [ZBarImageScanner new];
  4106. + [scanner setSymbology: 0
  4107. + config: ZBAR_CFG_X_DENSITY
  4108. + to: 3];
  4109. + [scanner setSymbology: 0
  4110. + config: ZBAR_CFG_Y_DENSITY
  4111. + to: 3];
  4112. +
  4113. + return(self);
  4114. +}
  4115. +
  4116. +- (void) cleanup
  4117. +{
  4118. + readerView.readerDelegate = nil;
  4119. + [readerView release];
  4120. + readerView = nil;
  4121. + [controls release];
  4122. + controls = nil;
  4123. +}
  4124. +
  4125. +- (void) dealloc
  4126. +{
  4127. + [self cleanup];
  4128. + [cameraOverlayView release];
  4129. + cameraOverlayView = nil;
  4130. + [scanner release];
  4131. + scanner = nil;
  4132. + [super dealloc];
  4133. +}
  4134. +
  4135. +- (void) initControls
  4136. +{
  4137. + if(!showsZBarControls && controls) {
  4138. + [controls removeFromSuperview];
  4139. + [controls release];
  4140. + controls = nil;
  4141. + }
  4142. + if(!showsZBarControls)
  4143. + return;
  4144. +
  4145. + UIView *view = self.view;
  4146. + if(controls) {
  4147. + assert(controls.superview == view);
  4148. + [view bringSubviewToFront: controls];
  4149. + return;
  4150. + }
  4151. +
  4152. + CGRect r = view.bounds;
  4153. + r.origin.y = r.size.height - 54;
  4154. + r.size.height = 54;
  4155. + controls = [[UIView alloc]
  4156. + initWithFrame: r];
  4157. + controls.backgroundColor = [UIColor blackColor];
  4158. +
  4159. + UIToolbar *toolbar =
  4160. + [UIToolbar new];
  4161. + r.origin.y = 0;
  4162. + toolbar.frame = r;
  4163. + toolbar.barStyle = UIBarStyleBlackOpaque;
  4164. +
  4165. + toolbar.items =
  4166. + [NSArray arrayWithObjects:
  4167. + [[[UIBarButtonItem alloc]
  4168. + initWithBarButtonSystemItem: UIBarButtonSystemItemCancel
  4169. + target: self
  4170. + action: @selector(cancel)]
  4171. + autorelease],
  4172. + [[[UIBarButtonItem alloc]
  4173. + initWithBarButtonSystemItem: UIBarButtonSystemItemFlexibleSpace
  4174. + target: nil
  4175. + action: nil]
  4176. + autorelease],
  4177. + nil];
  4178. + [controls addSubview: toolbar];
  4179. + [toolbar release];
  4180. +
  4181. + UIButton *info =
  4182. + [UIButton buttonWithType: UIButtonTypeInfoLight];
  4183. + r.origin.x = r.size.width - 54;
  4184. + r.size.width = 54;
  4185. + info.frame = r;
  4186. + [info addTarget: self
  4187. + action: @selector(info)
  4188. + forControlEvents: UIControlEventTouchUpInside];
  4189. + [controls addSubview: info];
  4190. +
  4191. + [view addSubview: controls];
  4192. +}
  4193. +
  4194. +- (void) initSimulator
  4195. +{
  4196. + // simulator specific hooks
  4197. +}
  4198. +
  4199. +- (void) loadView
  4200. +{
  4201. + self.view = [[UIView alloc]
  4202. + initWithFrame: CGRectMake(0, 0, 320, 480)];
  4203. +}
  4204. +
  4205. +- (void) viewDidLoad
  4206. +{
  4207. + [super viewDidLoad];
  4208. + UIView *view = self.view;
  4209. + view.backgroundColor = [UIColor blackColor];
  4210. +
  4211. + readerView = [[ZBarReaderView alloc]
  4212. + initWithImageScanner: scanner];
  4213. + readerView.readerDelegate = (id<ZBarReaderViewDelegate>)self;
  4214. + readerView.scanCrop = scanCrop;
  4215. + readerView.previewTransform = cameraViewTransform;
  4216. + readerView.tracksSymbols = tracksSymbols;
  4217. + readerView.enableCache = enableCache;
  4218. + [view addSubview: readerView];
  4219. +
  4220. + if(cameraOverlayView) {
  4221. + assert(!cameraOverlayView.superview);
  4222. + [cameraOverlayView removeFromSuperview];
  4223. + [view addSubview: cameraOverlayView];
  4224. + }
  4225. +
  4226. + [self initControls];
  4227. + [self initSimulator];
  4228. +}
  4229. +
  4230. +- (void) viewDidUnload
  4231. +{
  4232. + [cameraOverlayView removeFromSuperview];
  4233. + [self cleanup];
  4234. + [super viewDidUnload];
  4235. +}
  4236. +
  4237. +- (void) viewWillAppear: (BOOL) animated
  4238. +{
  4239. + [self initControls];
  4240. + [super viewWillAppear: animated];
  4241. +
  4242. + [readerView start];
  4243. +
  4244. + UIApplication *app = [UIApplication sharedApplication];
  4245. + BOOL willHideStatusBar =
  4246. + !didHideStatusBar && self.wantsFullScreenLayout && !app.statusBarHidden;
  4247. + if(willHideStatusBar)
  4248. + [app setStatusBarHidden: YES
  4249. + withAnimation: UIStatusBarAnimationFade];
  4250. + didHideStatusBar = didHideStatusBar || willHideStatusBar;
  4251. +}
  4252. +
  4253. +- (void) dismissModalViewControllerAnimated: (BOOL) animated
  4254. +{
  4255. + if(didHideStatusBar) {
  4256. + [[UIApplication sharedApplication]
  4257. + setStatusBarHidden: NO
  4258. + withAnimation: UIStatusBarAnimationFade];
  4259. + didHideStatusBar = NO;
  4260. + }
  4261. + [super dismissModalViewControllerAnimated: animated];
  4262. +}
  4263. +
  4264. +- (void) viewWillDisappear: (BOOL) animated
  4265. +{
  4266. + [readerView stop];
  4267. +
  4268. + if(didHideStatusBar) {
  4269. + [[UIApplication sharedApplication]
  4270. + setStatusBarHidden: NO
  4271. + withAnimation: UIStatusBarAnimationFade];
  4272. + didHideStatusBar = NO;
  4273. + }
  4274. +
  4275. + [super viewWillDisappear: animated];
  4276. +}
  4277. +
  4278. +- (ZBarReaderView*) readerView
  4279. +{
  4280. + // force view to load
  4281. + (void)self.view;
  4282. + assert(readerView);
  4283. + return(readerView);
  4284. +}
  4285. +
  4286. +- (void) setTracksSymbols: (BOOL) track
  4287. +{
  4288. + tracksSymbols = track;
  4289. + if(readerView)
  4290. + readerView.tracksSymbols = track;
  4291. +}
  4292. +
  4293. +- (void) setEnableCache: (BOOL) enable
  4294. +{
  4295. + enableCache = enable;
  4296. + if(readerView)
  4297. + readerView.enableCache = enable;
  4298. +}
  4299. +
  4300. +- (void) setScanCrop: (CGRect) r
  4301. +{
  4302. + scanCrop = r;
  4303. + if(readerView)
  4304. + readerView.scanCrop = r;
  4305. +}
  4306. +
  4307. +- (void) setCameraOverlayView: (UIView*) newview
  4308. +{
  4309. + UIView *oldview = cameraOverlayView;
  4310. + [oldview removeFromSuperview];
  4311. +
  4312. + cameraOverlayView = [newview retain];
  4313. + if([self isViewLoaded] && newview)
  4314. + [self.view addSubview: newview];
  4315. +
  4316. + [oldview release];
  4317. +}
  4318. +
  4319. +- (void) setCameraViewTransform: (CGAffineTransform) xfrm
  4320. +{
  4321. + cameraViewTransform = xfrm;
  4322. + if(readerView)
  4323. + readerView.previewTransform = xfrm;
  4324. +}
  4325. +
  4326. +- (void) cancel
  4327. +{
  4328. + if(!readerDelegate)
  4329. + return;
  4330. + SEL cb = @selector(imagePickerControllerDidCancel:);
  4331. + if([readerDelegate respondsToSelector: cb])
  4332. + [readerDelegate
  4333. + imagePickerControllerDidCancel: (UIImagePickerController*)self];
  4334. + else
  4335. + [self dismissModalViewControllerAnimated: YES];
  4336. +}
  4337. +
  4338. +- (void) info
  4339. +{
  4340. + [self showHelpWithReason: @"INFO"];
  4341. +}
  4342. +
  4343. +- (void) showHelpWithReason: (NSString*) reason
  4344. +{
  4345. + ZBarHelpController *help =
  4346. + [[ZBarHelpController alloc]
  4347. + initWithReason: reason];
  4348. + help.delegate = (id<ZBarHelpDelegate>)self;
  4349. + help.wantsFullScreenLayout = YES;
  4350. + UIView *helpView = help.view;
  4351. + helpView.alpha = 0;
  4352. + [self.view addSubview: helpView];
  4353. + [UIView beginAnimations: @"ZBarHelp"
  4354. + context: nil];
  4355. + help.view.alpha = 1;
  4356. + [UIView commitAnimations];
  4357. +}
  4358. +
  4359. +// ZBarHelpDelegate
  4360. +
  4361. +- (void) helpControllerDidFinish: (ZBarHelpController*) help
  4362. +{
  4363. + [UIView beginAnimations: @"ZBarHelp"
  4364. + context: help];
  4365. + [UIView setAnimationDelegate: self];
  4366. + [UIView setAnimationDidStopSelector: @selector(removeHelp:done:context:)];
  4367. + help.view.alpha = 0;
  4368. + [UIView commitAnimations];
  4369. +}
  4370. +
  4371. +- (void) removeHelp: (NSString*) id
  4372. + done: (NSNumber*) done
  4373. + context: (void*) ctx
  4374. +{
  4375. + if([id isEqualToString: @"ZBarHelp"]) {
  4376. + ZBarHelpController *help = ctx;
  4377. + [help.view removeFromSuperview];
  4378. + [help release];
  4379. + }
  4380. +}
  4381. +
  4382. +// ZBarReaderViewDelegate
  4383. +
  4384. +- (void) readerView: (ZBarReaderView*) view
  4385. + didReadSymbols: (ZBarSymbolSet*) syms
  4386. + fromImage: (UIImage*) image
  4387. +{
  4388. + [readerDelegate
  4389. + imagePickerController: (UIImagePickerController*)self
  4390. + didFinishPickingMediaWithInfo:
  4391. + [NSDictionary dictionaryWithObjectsAndKeys:
  4392. + image, UIImagePickerControllerOriginalImage,
  4393. + syms, ZBarReaderControllerResults,
  4394. + nil]];
  4395. +}
  4396. +
  4397. +// "deprecated" properties
  4398. +
  4399. +#define DEPRECATED_PROPERTY(getter, setter, type, val, ignore) \
  4400. + - (type) getter \
  4401. + { \
  4402. + return(val); \
  4403. + } \
  4404. + - (void) setter: (type) v \
  4405. + { \
  4406. + NSAssert2(ignore || v == val, \
  4407. + @"attempt to set unsupported value (%d)" \
  4408. + @" for %@ property", val, @#getter); \
  4409. + }
  4410. +
  4411. +DEPRECATED_PROPERTY(sourceType, setSourceType, UIImagePickerControllerSourceType, UIImagePickerControllerSourceTypeCamera, NO)
  4412. +DEPRECATED_PROPERTY(allowsEditing, setAllowsEditing, BOOL, NO, NO)
  4413. +DEPRECATED_PROPERTY(allowsImageEditing, setAllowsImageEditing, BOOL, NO, NO)
  4414. +DEPRECATED_PROPERTY(showsCameraControls, setShowsCameraControls, BOOL, NO, NO)
  4415. +DEPRECATED_PROPERTY(showsHelpOnFail, setShowsHelpOnFail, BOOL, NO, YES)
  4416. +DEPRECATED_PROPERTY(cameraMode, setCameraMode, ZBarReaderControllerCameraMode, ZBarReaderControllerCameraModeSampling, NO)
  4417. +DEPRECATED_PROPERTY(takesPicture, setTakesPicture, BOOL, NO, NO)
  4418. +DEPRECATED_PROPERTY(maxScanDimension, setMaxScanDimension, NSInteger, 640, YES)
  4419. +
  4420. +@end
  4421. diff --git a/iphone/ZBarReaderViewImpl_Capture.m b/iphone/ZBarReaderViewImpl_Capture.m
  4422. new file mode 100644
  4423. --- /dev/null
  4424. +++ b/iphone/ZBarReaderViewImpl_Capture.m
  4425. @@ -0,0 +1,355 @@
  4426. +//------------------------------------------------------------------------
  4427. +// Copyright 2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  4428. +//
  4429. +// This file is part of the ZBar Bar Code Reader.
  4430. +//
  4431. +// The ZBar Bar Code Reader is free software; you can redistribute it
  4432. +// and/or modify it under the terms of the GNU Lesser Public License as
  4433. +// published by the Free Software Foundation; either version 2.1 of
  4434. +// the License, or (at your option) any later version.
  4435. +//
  4436. +// The ZBar Bar Code Reader is distributed in the hope that it will be
  4437. +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  4438. +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  4439. +// GNU Lesser Public License for more details.
  4440. +//
  4441. +// You should have received a copy of the GNU Lesser Public License
  4442. +// along with the ZBar Bar Code Reader; if not, write to the Free
  4443. +// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  4444. +// Boston, MA 02110-1301 USA
  4445. +//
  4446. +// http://sourceforge.net/projects/zbar
  4447. +//------------------------------------------------------------------------
  4448. +
  4449. +#import <AVFoundation/AVFoundation.h>
  4450. +#import <CoreMedia/CoreMedia.h>
  4451. +#import <CoreVideo/CoreVideo.h>
  4452. +#import <ZBarSDK/ZBarReaderView.h>
  4453. +#import <ZBarSDK/ZBarCaptureReader.h>
  4454. +
  4455. +#define MODULE ZBarReaderView
  4456. +#import "debug.h"
  4457. +
  4458. +// protected APIs
  4459. +@interface ZBarReaderView()
  4460. +- (void) initSubviews;
  4461. +- (void) cropUpdate;
  4462. +- (void) setImageSize: (CGSize) size;
  4463. +- (void) didTrackSymbols: (ZBarSymbolSet*) syms;
  4464. +@end
  4465. +
  4466. +@interface ZBarReaderViewImpl
  4467. + : ZBarReaderView
  4468. +{
  4469. + AVCaptureSession *session;
  4470. + AVCaptureDevice *device;
  4471. + AVCaptureInput *input;
  4472. + ZBarCaptureReader *captureReader;
  4473. +}
  4474. +
  4475. +@end
  4476. +
  4477. +@implementation ZBarReaderViewImpl
  4478. +
  4479. +@synthesize device, session, captureReader;
  4480. +
  4481. +- (id) initWithImageScanner: (ZBarImageScanner*) scanner
  4482. +{
  4483. + self = [super initWithImageScanner: scanner];
  4484. + if(!self)
  4485. + return(nil);
  4486. +
  4487. + session = [AVCaptureSession new];
  4488. + NSNotificationCenter *notify =
  4489. + [NSNotificationCenter defaultCenter];
  4490. + [notify addObserver: self
  4491. + selector: @selector(onVideoError:)
  4492. + name: AVCaptureSessionRuntimeErrorNotification
  4493. + object: session];
  4494. + [notify addObserver: self
  4495. + selector: @selector(onVideoStart:)
  4496. + name: AVCaptureSessionDidStartRunningNotification
  4497. + object: session];
  4498. + [notify addObserver: self
  4499. + selector: @selector(onVideoStop:)
  4500. + name: AVCaptureSessionDidStopRunningNotification
  4501. + object: session];
  4502. + [notify addObserver: self
  4503. + selector: @selector(onVideoStop:)
  4504. + name: AVCaptureSessionWasInterruptedNotification
  4505. + object: session];
  4506. + [notify addObserver: self
  4507. + selector: @selector(onVideoStart:)
  4508. + name: AVCaptureSessionInterruptionEndedNotification
  4509. + object: session];
  4510. +
  4511. + self.device = [AVCaptureDevice
  4512. + defaultDeviceWithMediaType: AVMediaTypeVideo];
  4513. +
  4514. + captureReader = [[ZBarCaptureReader alloc]
  4515. + initWithImageScanner: scanner];
  4516. + captureReader.captureDelegate = (id<ZBarCaptureDelegate>)self;
  4517. + [session addOutput: captureReader.captureOutput];
  4518. +
  4519. + if([session canSetSessionPreset: AVCaptureSessionPreset640x480])
  4520. + session.sessionPreset = AVCaptureSessionPreset640x480;
  4521. +
  4522. + [captureReader addObserver: self
  4523. + forKeyPath: @"size"
  4524. + options: 0
  4525. + context: NULL];
  4526. +
  4527. + [self initSubviews];
  4528. + [self cropUpdate];
  4529. + return(self);
  4530. +}
  4531. +
  4532. +- (void) initSubviews
  4533. +{
  4534. + AVCaptureVideoPreviewLayer *videoPreview =
  4535. + [[AVCaptureVideoPreviewLayer
  4536. + layerWithSession: session]
  4537. + retain];
  4538. + videoPreview.videoGravity = AVLayerVideoGravityResizeAspectFill;
  4539. + preview = videoPreview;
  4540. + preview.frame = self.bounds;
  4541. + [self.layer addSublayer: preview];
  4542. +
  4543. + [super initSubviews];
  4544. +
  4545. + // camera image is rotated
  4546. + overlay.transform = CATransform3DMakeRotation(M_PI / 2, 0, 0, 1);
  4547. +}
  4548. +
  4549. +- (void) dealloc
  4550. +{
  4551. + [[NSNotificationCenter defaultCenter]
  4552. + removeObserver: self];
  4553. + if(showsFPS) {
  4554. + @try {
  4555. + [captureReader removeObserver: self
  4556. + forKeyPath: @"framesPerSecond"];
  4557. + }
  4558. + @catch(...) { }
  4559. + }
  4560. + @try {
  4561. + [captureReader removeObserver: self
  4562. + forKeyPath: @"size"];
  4563. + }
  4564. + @catch(...) { }
  4565. + captureReader.captureDelegate = nil;
  4566. + [captureReader release];
  4567. + captureReader = nil;
  4568. + [device release];
  4569. + device = nil;
  4570. + [input release];
  4571. + input = nil;
  4572. + [session release];
  4573. + session = nil;
  4574. + [super dealloc];
  4575. +}
  4576. +
  4577. +- (void) cropUpdate
  4578. +{
  4579. + [super cropUpdate];
  4580. + captureReader.scanCrop = zoomCrop;
  4581. +}
  4582. +
  4583. +- (ZBarImageScanner*) scanner
  4584. +{
  4585. + return(captureReader.scanner);
  4586. +}
  4587. +
  4588. +- (void) setDevice: (AVCaptureDevice*) newdev
  4589. +{
  4590. + id olddev = device;
  4591. + AVCaptureInput *oldinput = input;
  4592. + assert(!olddev == !oldinput);
  4593. +
  4594. + NSError *error = nil;
  4595. + device = [newdev retain];
  4596. + if(device) {
  4597. + assert([device hasMediaType: AVMediaTypeVideo]);
  4598. + input = [[AVCaptureDeviceInput alloc]
  4599. + initWithDevice: newdev
  4600. + error: &error];
  4601. + assert(input);
  4602. + }
  4603. + else
  4604. + input = nil;
  4605. +
  4606. + [session beginConfiguration];
  4607. + if(oldinput)
  4608. + [session removeInput: input];
  4609. + if(input)
  4610. + [session addInput: input];
  4611. + [session commitConfiguration];
  4612. +
  4613. + [olddev release];
  4614. + [oldinput release];
  4615. +}
  4616. +
  4617. +- (BOOL) enableCache
  4618. +{
  4619. + return(captureReader.enableCache);
  4620. +}
  4621. +
  4622. +- (void) setEnableCache: (BOOL) enable
  4623. +{
  4624. + captureReader.enableCache = enable;
  4625. +}
  4626. +
  4627. +- (void) setTorchMode: (NSInteger) mode
  4628. +{
  4629. + [super setTorchMode: mode];
  4630. + if(running && [device isTorchModeSupported: mode])
  4631. + @try {
  4632. + device.torchMode = mode;
  4633. + }
  4634. + @catch(...) { }
  4635. +}
  4636. +
  4637. +- (void) setShowsFPS: (BOOL) show
  4638. +{
  4639. + [super setShowsFPS: show];
  4640. + @try {
  4641. + if(show)
  4642. + [captureReader addObserver: self
  4643. + forKeyPath: @"framesPerSecond"
  4644. + options: 0
  4645. + context: NULL];
  4646. + else
  4647. + [captureReader removeObserver: self
  4648. + forKeyPath: @"framesPerSecond"];
  4649. + }
  4650. + @catch(...) { }
  4651. +}
  4652. +
  4653. +- (void) start
  4654. +{
  4655. + if(started)
  4656. + return;
  4657. + [super start];
  4658. +
  4659. + [session startRunning];
  4660. + captureReader.enableReader = YES;
  4661. +}
  4662. +
  4663. +- (void) stop
  4664. +{
  4665. + if(!started)
  4666. + return;
  4667. + [super stop];
  4668. +
  4669. + captureReader.enableReader = NO;
  4670. + [session stopRunning];
  4671. +}
  4672. +
  4673. +- (void) flushCache
  4674. +{
  4675. + [captureReader flushCache];
  4676. +}
  4677. +
  4678. +// AVCaptureSession notifications
  4679. +
  4680. +- (void) onVideoStart: (NSNotification*) note
  4681. +{
  4682. + zlog(@"onVideoStart: running=%d %@", running, note);
  4683. + if(running)
  4684. + return;
  4685. + running = YES;
  4686. +
  4687. + // lock device and set focus mode
  4688. + NSError *error = nil;
  4689. + if([device lockForConfiguration: &error]) {
  4690. + if([device isFocusModeSupported: AVCaptureFocusModeContinuousAutoFocus])
  4691. + device.focusMode = AVCaptureFocusModeContinuousAutoFocus;
  4692. + if([device isTorchModeSupported: torchMode])
  4693. + device.torchMode = torchMode;
  4694. + }
  4695. + else
  4696. + zlog(@"failed to lock device: %@", error);
  4697. +}
  4698. +
  4699. +- (void) onVideoStop: (NSNotification*) note
  4700. +{
  4701. + zlog(@"onVideoStop: %@", note);
  4702. + if(!running)
  4703. + return;
  4704. +
  4705. + [device unlockForConfiguration];
  4706. + running = NO;
  4707. +}
  4708. +
  4709. +- (void) onVideoError: (NSNotification*) note
  4710. +{
  4711. + zlog(@"onVideoError: %@", note);
  4712. + if(running) {
  4713. + // FIXME does session always stop on error?
  4714. + running = started = NO;
  4715. + [device unlockForConfiguration];
  4716. + }
  4717. + NSError *err =
  4718. + [note.userInfo objectForKey: AVCaptureSessionErrorKey];
  4719. + NSLog(@"ZBarReaderView: ERROR during capture: %@: %@",
  4720. + [err localizedDescription],
  4721. + [err localizedFailureReason]);
  4722. +}
  4723. +
  4724. +// NSKeyValueObserving
  4725. +
  4726. +- (void) observeValueForKeyPath: (NSString*) path
  4727. + ofObject: (id) obj
  4728. + change: (NSDictionary*) info
  4729. + context: (void*) ctx
  4730. +{
  4731. + if(obj == captureReader &&
  4732. + [path isEqualToString: @"size"])
  4733. + // adjust preview to match image size
  4734. + [self setImageSize: captureReader.size];
  4735. + else if(obj == captureReader &&
  4736. + [path isEqualToString: @"framesPerSecond"])
  4737. + fpsLabel.text = [NSString stringWithFormat: @"%.2ffps ",
  4738. + captureReader.framesPerSecond];
  4739. +}
  4740. +
  4741. +// ZBarCaptureDelegate
  4742. +
  4743. +- (void) captureReader: (ZBarCaptureReader*) reader
  4744. + didTrackSymbols: (ZBarSymbolSet*) syms
  4745. +{
  4746. + [self didTrackSymbols: syms];
  4747. +}
  4748. +
  4749. +- (void) captureReader: (ZBarCaptureReader*) reader
  4750. + didReadNewSymbolsFromImage: (ZBarImage*) zimg
  4751. +{
  4752. + zlog(@"scanned %d symbols: %@", zimg.symbols.count, zimg);
  4753. + if(!readerDelegate)
  4754. + return;
  4755. +
  4756. + UIImageOrientation orient;
  4757. + switch([UIDevice currentDevice].orientation)
  4758. + {
  4759. + case UIDeviceOrientationPortraitUpsideDown:
  4760. + orient = UIImageOrientationLeft;
  4761. + break;
  4762. + case UIDeviceOrientationLandscapeLeft:
  4763. + orient = UIImageOrientationUp;
  4764. + break;
  4765. + case UIDeviceOrientationLandscapeRight:
  4766. + orient = UIImageOrientationDown;
  4767. + break;
  4768. + default:
  4769. + orient = UIImageOrientationRight;
  4770. + break;
  4771. + }
  4772. +
  4773. + UIImage *uiimg = [zimg UIImageWithOrientation: orient];
  4774. + [readerDelegate
  4775. + readerView: self
  4776. + didReadSymbols: zimg.symbols
  4777. + fromImage: uiimg];
  4778. +}
  4779. +
  4780. +@end
  4781. diff --git a/iphone/ZBarReaderViewImpl_Simulator.m b/iphone/ZBarReaderViewImpl_Simulator.m
  4782. new file mode 100644
  4783. --- /dev/null
  4784. +++ b/iphone/ZBarReaderViewImpl_Simulator.m
  4785. @@ -0,0 +1,223 @@
  4786. +//------------------------------------------------------------------------
  4787. +// Copyright 2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  4788. +//
  4789. +// This file is part of the ZBar Bar Code Reader.
  4790. +//
  4791. +// The ZBar Bar Code Reader is free software; you can redistribute it
  4792. +// and/or modify it under the terms of the GNU Lesser Public License as
  4793. +// published by the Free Software Foundation; either version 2.1 of
  4794. +// the License, or (at your option) any later version.
  4795. +//
  4796. +// The ZBar Bar Code Reader is distributed in the hope that it will be
  4797. +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  4798. +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  4799. +// GNU Lesser Public License for more details.
  4800. +//
  4801. +// You should have received a copy of the GNU Lesser Public License
  4802. +// along with the ZBar Bar Code Reader; if not, write to the Free
  4803. +// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  4804. +// Boston, MA 02110-1301 USA
  4805. +//
  4806. +// http://sourceforge.net/projects/zbar
  4807. +//------------------------------------------------------------------------
  4808. +
  4809. +#import <ZBarSDK/ZBarReaderView.h>
  4810. +#import <ZBarSDK/ZBarReaderViewController.h>
  4811. +
  4812. +#define MODULE ZBarReaderView
  4813. +#import "debug.h"
  4814. +
  4815. +// hack around missing simulator support for AVCapture interfaces
  4816. +
  4817. +@interface ZBarReaderViewController(Simulator)
  4818. +@end
  4819. +
  4820. +@implementation ZBarReaderViewController(Simulator)
  4821. +
  4822. +- (void) initSimulator
  4823. +{
  4824. + UILongPressGestureRecognizer *press =
  4825. + [[UILongPressGestureRecognizer alloc]
  4826. + initWithTarget: self
  4827. + action: @selector(didLongPress:)];
  4828. + [self.view addGestureRecognizer: press];
  4829. + press.numberOfTouchesRequired = 2;
  4830. + [press release];
  4831. +}
  4832. +
  4833. +- (void) takePicture
  4834. +{
  4835. + UIImagePickerController *picker =
  4836. + [UIImagePickerController new];
  4837. + picker.delegate = (id<UINavigationControllerDelegate,
  4838. + UIImagePickerControllerDelegate>)self;
  4839. + [self presentModalViewController: picker
  4840. + animated: YES];
  4841. + [picker release];
  4842. +}
  4843. +
  4844. +- (void) didLongPress: (UIGestureRecognizer*) press
  4845. +{
  4846. + if(press.state == UIGestureRecognizerStateBegan)
  4847. + [self takePicture];
  4848. +}
  4849. +
  4850. +- (void) imagePickerController: (UIImagePickerController*) picker
  4851. + didFinishPickingMediaWithInfo: (NSDictionary*) info
  4852. +{
  4853. + UIImage *image = [info objectForKey: UIImagePickerControllerOriginalImage];
  4854. + [picker dismissModalViewControllerAnimated: YES];
  4855. + [readerView performSelector: @selector(scanImage:)
  4856. + withObject: image
  4857. + afterDelay: .1];
  4858. +}
  4859. +
  4860. +- (void) imagePickerControllerDidCancel: (UIImagePickerController*) picker
  4861. +{
  4862. + [picker dismissModalViewControllerAnimated: YES];
  4863. +}
  4864. +
  4865. +@end
  4866. +
  4867. +// protected APIs
  4868. +@interface ZBarReaderView()
  4869. +- (void) initSubviews;
  4870. +- (void) setImageSize: (CGSize) size;
  4871. +- (void) didTrackSymbols: (ZBarSymbolSet*) syms;
  4872. +@end
  4873. +
  4874. +@interface ZBarReaderViewImpl
  4875. + : ZBarReaderView
  4876. +{
  4877. + ZBarImageScanner *scanner;
  4878. + UIImage *scanImage;
  4879. + CALayer *previewImage;
  4880. + BOOL enableCache;
  4881. +}
  4882. +@end
  4883. +
  4884. +@implementation ZBarReaderViewImpl
  4885. +
  4886. +@synthesize scanner, enableCache;
  4887. +
  4888. +- (id) initWithImageScanner: (ZBarImageScanner*) _scanner
  4889. +{
  4890. + self = [super initWithImageScanner: _scanner];
  4891. + if(!self)
  4892. + return(nil);
  4893. +
  4894. + scanner = [_scanner retain];
  4895. +
  4896. + [self initSubviews];
  4897. + return(self);
  4898. +}
  4899. +
  4900. +- (void) initSubviews
  4901. +{
  4902. + UILabel *label =
  4903. + [[UILabel alloc]
  4904. + initWithFrame: CGRectMake(16, 165, 288, 96)];
  4905. + label.backgroundColor = [UIColor clearColor];
  4906. + label.textColor = [UIColor whiteColor];
  4907. + label.font = [UIFont boldSystemFontOfSize: 20];
  4908. + label.numberOfLines = 4;
  4909. + label.textAlignment = UITextAlignmentCenter;
  4910. + label.text = @"Camera Simulation\n\n"
  4911. + @"Tap and hold with two \"fingers\" to select image";
  4912. + [self addSubview: label];
  4913. + [label release];
  4914. +
  4915. + preview = [CALayer new];
  4916. + preview.frame = self.bounds;
  4917. + [self.layer addSublayer: preview];
  4918. +
  4919. + previewImage = [CALayer new];
  4920. + previewImage.frame = self.bounds;
  4921. + [preview addSublayer: previewImage];
  4922. +
  4923. + [super initSubviews];
  4924. +}
  4925. +
  4926. +- (void) dealloc
  4927. +{
  4928. + [scanner release];
  4929. + scanner = nil;
  4930. + [previewImage release];
  4931. + previewImage = nil;
  4932. + [super dealloc];
  4933. +}
  4934. +
  4935. +- (void) start
  4936. +{
  4937. + if(started)
  4938. + return;
  4939. + [super start];
  4940. + running = YES;
  4941. +}
  4942. +
  4943. +- (void) stop
  4944. +{
  4945. + if(!started)
  4946. + return;
  4947. + [super stop];
  4948. + running = NO;
  4949. +}
  4950. +
  4951. +- (void) scanImage: (UIImage*) image
  4952. +{
  4953. + // strip EXIF info
  4954. + CGImageRef cgimage = image.CGImage;
  4955. + image = [[UIImage alloc]
  4956. + initWithCGImage: cgimage
  4957. + scale: 1.0
  4958. + orientation: UIImageOrientationUp];
  4959. +
  4960. + [self setImageSize: image.size];
  4961. +
  4962. + [CATransaction begin];
  4963. + [CATransaction setDisableActions: YES];
  4964. + previewImage.contentsScale = imageScale;
  4965. + previewImage.contentsGravity = kCAGravityCenter;
  4966. + previewImage.transform = CATransform3DMakeRotation(M_PI_2, 0, 0, 1);
  4967. + previewImage.contents = (id)cgimage;
  4968. + [CATransaction commit];
  4969. +
  4970. + ZBarImage *zimg =
  4971. + [[ZBarImage alloc]
  4972. + initWithCGImage: cgimage];
  4973. +
  4974. + CGSize size = zimg.size;
  4975. + zimg.crop = CGRectMake(zoomCrop.origin.x * size.width,
  4976. + zoomCrop.origin.y * size.height,
  4977. + zoomCrop.size.width * size.width,
  4978. + zoomCrop.size.height * size.height);
  4979. +
  4980. + int nsyms = [scanner scanImage: zimg];
  4981. + zlog(@"scan image: %@ crop=%@ nsyms=%d",
  4982. + NSStringFromCGSize(size), NSStringFromCGRect(zimg.crop), nsyms);
  4983. + [zimg release];
  4984. +
  4985. + if(nsyms > 0) {
  4986. + scanImage = [image retain];
  4987. + ZBarSymbolSet *syms = scanner.results;
  4988. + [self performSelector: @selector(didReadSymbols:)
  4989. + withObject: syms
  4990. + afterDelay: .4];
  4991. + [self performSelector: @selector(didTrackSymbols:)
  4992. + withObject: syms
  4993. + afterDelay: .001];
  4994. + }
  4995. + [image release];
  4996. +}
  4997. +
  4998. +- (void) didReadSymbols: (ZBarSymbolSet*) syms
  4999. +{
  5000. + [readerDelegate
  5001. + readerView: self
  5002. + didReadSymbols: syms
  5003. + fromImage: scanImage];
  5004. + [scanImage release];
  5005. + scanImage = nil;
  5006. +}
  5007. +
  5008. +@end
  5009. diff --git a/iphone/ZBarSymbol.m b/iphone/ZBarSymbol.m
  5010. new file mode 100644
  5011. --- /dev/null
  5012. +++ b/iphone/ZBarSymbol.m
  5013. @@ -0,0 +1,197 @@
  5014. +//------------------------------------------------------------------------
  5015. +// Copyright 2009-2010 (c) Jeff Brown <spadix@users.sourceforge.net>
  5016. +//
  5017. +// This file is part of the ZBar Bar Code Reader.
  5018. +//
  5019. +// The ZBar Bar Code Reader is free software; you can redistribute it
  5020. +// and/or modify it under the terms of the GNU Lesser Public License as
  5021. +// published by the Free Software Foundation; either version 2.1 of
  5022. +// the License, or (at your option) any later version.
  5023. +//
  5024. +// The ZBar Bar Code Reader is distributed in the hope that it will be
  5025. +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  5026. +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  5027. +// GNU Lesser Public License for more details.
  5028. +//
  5029. +// You should have received a copy of the GNU Lesser Public License
  5030. +// along with the ZBar Bar Code Reader; if not, write to the Free
  5031. +// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  5032. +// Boston, MA 02110-1301 USA
  5033. +//
  5034. +// http://sourceforge.net/projects/zbar
  5035. +//------------------------------------------------------------------------
  5036. +
  5037. +#import <ZBarSDK/ZBarSymbol.h>
  5038. +
  5039. +@implementation ZBarSymbol
  5040. +
  5041. +@dynamic type, typeName, configMask, modifierMask, data, quality, count,
  5042. + zbarSymbol;
  5043. +
  5044. ++ (NSString*) nameForType: (zbar_symbol_type_t) type
  5045. +{
  5046. + return([NSString stringWithUTF8String: zbar_get_symbol_name(type)]);
  5047. +}
  5048. +
  5049. +- (id) initWithSymbol: (const zbar_symbol_t*) sym
  5050. +{
  5051. + if(self = [super init]) {
  5052. + symbol = sym;
  5053. + zbar_symbol_ref(sym, 1);
  5054. + }
  5055. + return(self);
  5056. +}
  5057. +
  5058. +- (void) dealloc
  5059. +{
  5060. + if(symbol) {
  5061. + zbar_symbol_ref(symbol, -1);
  5062. + symbol = NULL;
  5063. + }
  5064. + [super dealloc];
  5065. +}
  5066. +
  5067. +- (zbar_symbol_type_t) type
  5068. +{
  5069. + return(zbar_symbol_get_type(symbol));
  5070. +}
  5071. +
  5072. +- (NSString*) typeName
  5073. +{
  5074. + return([[self class] nameForType: zbar_symbol_get_type(symbol)]);
  5075. +}
  5076. +
  5077. +- (NSUInteger) configMask
  5078. +{
  5079. + return(zbar_symbol_get_configs(symbol));
  5080. +}
  5081. +
  5082. +- (NSUInteger) modifierMask
  5083. +{
  5084. + return(zbar_symbol_get_modifiers(symbol));
  5085. +}
  5086. +
  5087. +- (NSString*) data
  5088. +{
  5089. + return([NSString stringWithUTF8String: zbar_symbol_get_data(symbol)]);
  5090. +}
  5091. +
  5092. +- (int) quality
  5093. +{
  5094. + return(zbar_symbol_get_quality(symbol));
  5095. +}
  5096. +
  5097. +- (int) count
  5098. +{
  5099. + return(zbar_symbol_get_count(symbol));
  5100. +}
  5101. +
  5102. +- (zbar_orientation_t) orientation
  5103. +{
  5104. + return(zbar_symbol_get_orientation(symbol));
  5105. +}
  5106. +
  5107. +- (const zbar_symbol_t*) zbarSymbol
  5108. +{
  5109. + return(symbol);
  5110. +}
  5111. +
  5112. +- (ZBarSymbolSet*) components
  5113. +{
  5114. + return([[[ZBarSymbolSet alloc]
  5115. + initWithSymbolSet: zbar_symbol_get_components(symbol)]
  5116. + autorelease]);
  5117. +}
  5118. +
  5119. +- (CGRect) bounds
  5120. +{
  5121. + int n = zbar_symbol_get_loc_size(symbol);
  5122. + if(!n)
  5123. + return(CGRectNull);
  5124. +
  5125. + int xmin = INT_MAX, xmax = INT_MIN;
  5126. + int ymin = INT_MAX, ymax = INT_MIN;
  5127. +
  5128. + for(int i = 0; i < n; i++) {
  5129. + int t = zbar_symbol_get_loc_x(symbol, i);
  5130. + if(xmin > t) xmin = t;
  5131. + if(xmax < t) xmax = t;
  5132. + t = zbar_symbol_get_loc_y(symbol, i);
  5133. + if(ymin > t) ymin = t;
  5134. + if(ymax < t) ymax = t;
  5135. + }
  5136. + return(CGRectMake(xmin, ymin, xmax - xmin, ymax - ymin));
  5137. +}
  5138. +
  5139. +@end
  5140. +
  5141. +
  5142. +@implementation ZBarSymbolSet
  5143. +
  5144. +@dynamic count, zbarSymbolSet;
  5145. +@synthesize filterSymbols;
  5146. +
  5147. +- (id) initWithSymbolSet: (const zbar_symbol_set_t*) s
  5148. +{
  5149. + if(!s) {
  5150. + [self release];
  5151. + return(nil);
  5152. + }
  5153. + if(self = [super init]) {
  5154. + set = s;
  5155. + zbar_symbol_set_ref(s, 1);
  5156. + filterSymbols = YES;
  5157. + }
  5158. + return(self);
  5159. +}
  5160. +
  5161. +- (void) dealloc
  5162. +{
  5163. + if(set) {
  5164. + zbar_symbol_set_ref(set, -1);
  5165. + set = NULL;
  5166. + }
  5167. + [super dealloc];
  5168. +}
  5169. +
  5170. +- (int) count
  5171. +{
  5172. + if(filterSymbols)
  5173. + return(zbar_symbol_set_get_size(set));
  5174. +
  5175. + int n = 0;
  5176. + const zbar_symbol_t *sym = zbar_symbol_set_first_unfiltered(set);
  5177. + for(; sym; sym = zbar_symbol_next(sym))
  5178. + n++;
  5179. + return(n);
  5180. +}
  5181. +
  5182. +- (const zbar_symbol_set_t*) zbarSymbolSet
  5183. +{
  5184. + return(set);
  5185. +}
  5186. +
  5187. +- (NSUInteger) countByEnumeratingWithState: (NSFastEnumerationState*) state
  5188. + objects: (id*) stackbuf
  5189. + count: (NSUInteger) len
  5190. +{
  5191. + const zbar_symbol_t *sym = (void*)state->state; // FIXME
  5192. + if(sym)
  5193. + sym = zbar_symbol_next(sym);
  5194. + else if(set && filterSymbols)
  5195. + sym = zbar_symbol_set_first_symbol(set);
  5196. + else if(set)
  5197. + sym = zbar_symbol_set_first_unfiltered(set);
  5198. +
  5199. + if(sym)
  5200. + *stackbuf = [[[ZBarSymbol alloc]
  5201. + initWithSymbol: sym]
  5202. + autorelease];
  5203. +
  5204. + state->state = (unsigned long)sym; // FIXME
  5205. + state->itemsPtr = stackbuf;
  5206. + state->mutationsPtr = (void*)self;
  5207. + return((sym) ? 1 : 0);
  5208. +}
  5209. +
  5210. +@end
  5211. diff --git a/iphone/bin/BuildUniversal.sh b/iphone/bin/BuildUniversal.sh
  5212. new file mode 100755
  5213. --- /dev/null
  5214. +++ b/iphone/bin/BuildUniversal.sh
  5215. @@ -0,0 +1,23 @@
  5216. +#!/bin/sh
  5217. +set -ux
  5218. +SUBTARGET=${1:?}
  5219. +OUTDIR=${2:-$TARGET_BUILD_DIR}
  5220. +
  5221. +# build library for device and simulator
  5222. +xcodebuild -target $SUBTARGET -configuration $CONFIGURATION -sdk iphoneos \
  5223. + || exit 1
  5224. +xcodebuild -target $SUBTARGET -configuration $CONFIGURATION -sdk iphonesimulator \
  5225. + || exit 1
  5226. +
  5227. +mkdir -p $OUTDIR
  5228. +
  5229. +# combine device and simulator libs into single fat lib.
  5230. +# others have indicated that this approach is "wrong", but for us
  5231. +# the ease of including the universal lib in a project without complicated
  5232. +# changes to build settings outweighs any lack of purity in the approach
  5233. +# ...we can always fix things later, if necessary
  5234. +lipo -create \
  5235. + $BUILD_DIR/$CONFIGURATION-iphoneos/$SUBTARGET.a \
  5236. + $BUILD_DIR/$CONFIGURATION-iphonesimulator/$SUBTARGET.a \
  5237. + -output $OUTDIR/$SUBTARGET.a \
  5238. + || exit 1
  5239. diff --git a/iphone/bin/CreateDMG.sh b/iphone/bin/CreateDMG.sh
  5240. new file mode 100755
  5241. --- /dev/null
  5242. +++ b/iphone/bin/CreateDMG.sh
  5243. @@ -0,0 +1,35 @@
  5244. +#!/bin/sh
  5245. +set -ux
  5246. +VOLNAME=${1:?}
  5247. +shift
  5248. +RES=$SOURCE_ROOT/res
  5249. +BUDDY=$(xcrun -find PlistBuddy) \
  5250. + || exit 1
  5251. +VERSION=$($BUDDY -c 'Print :CFBundleVersion' $RES/$VOLNAME-Info.plist) \
  5252. + || exit 1
  5253. +DMG=$VOLNAME-$VERSION
  5254. +
  5255. +mkdir -p $TARGET_BUILD_DIR/.background \
  5256. + || exit 1
  5257. +cp -af $RES/$VOLNAME.DS_Store $TARGET_BUILD_DIR/.DS_Store
  5258. +cp -af $RES/$VOLNAME-bg.png $TARGET_BUILD_DIR/.background/
  5259. +
  5260. +# copy remaining arguments to image directly
  5261. +for content
  5262. +do
  5263. + cp -af $content $TARGET_BUILD_DIR/ \
  5264. + || exit 1
  5265. +done
  5266. +
  5267. +# prepare examples for distribution
  5268. +for example in $(find $TARGET_BUILD_DIR/Examples -depth 1)
  5269. +do
  5270. + rm -rf $example/{*.xcodeproj/*.{mode1v3,pbxuser},ZBarSDK}
  5271. + cp -af $BUILT_PRODUCTS_DIR/ZBarSDK $example/
  5272. +done
  5273. +
  5274. +hdiutil create -ov -fs HFS+ -format UDZO -imagekey zlib-level=9 \
  5275. + -volname $VOLNAME \
  5276. + -srcdir $TARGET_BUILD_DIR \
  5277. + $BUILT_PRODUCTS_DIR/$DMG.dmg \
  5278. + || exit 1
  5279. diff --git a/iphone/bin/CreateDSStore.pl b/iphone/bin/CreateDSStore.pl
  5280. new file mode 100755
  5281. --- /dev/null
  5282. +++ b/iphone/bin/CreateDSStore.pl
  5283. @@ -0,0 +1,72 @@
  5284. +#!/usr/bin/perl
  5285. +
  5286. +# Quick hack script to generate the .DS_Store for the DMG, which
  5287. +# * allows us to precisely position the window and icons
  5288. +# * is more usefully versioned
  5289. +# * avoids references to my local HD(!?)
  5290. +
  5291. +use warnings;
  5292. +use strict;
  5293. +
  5294. +BEGIN {
  5295. + use File::Spec::Functions qw(rel2abs splitpath);
  5296. + use lib (splitpath(rel2abs($0)))[1];
  5297. +}
  5298. +
  5299. +use Data::Plist::BinaryWriter;
  5300. +use Mac::Finder::DSStore qw(writeDSDBEntries makeEntries);
  5301. +use Mac::Finder::AliasRecord;
  5302. +
  5303. +$Mac::Finder::DSStore::Entry::types{bwsp} = 'blob';
  5304. +$Mac::Finder::DSStore::Entry::types{icvp} = 'blob';
  5305. +
  5306. +writeDSDBEntries($ARGV[0] || "DS_Store",
  5307. + makeEntries(".",
  5308. + bwsp => Data::Plist::BinaryWriter->new(serialize => 0)->write([
  5309. + dict => {
  5310. + WindowBounds => [
  5311. + string => sprintf('{{%d, %d}, {%d, %d}}',
  5312. + 512, 128, 512, 608 + 22)
  5313. + ],
  5314. + SidebarWidth => [integer => 0],
  5315. + ShowToolbar => [false => 0],
  5316. + ShowSidebar => [false => 0],
  5317. + ShowPathbar => [false => 0],
  5318. + ShowStatusBar => [false => 0],
  5319. + }
  5320. + ]),
  5321. + icvp => Data::Plist::BinaryWriter->new(serialize => 0)->write([
  5322. + dict => {
  5323. + viewOptionsVersion => [integer => 0],
  5324. + arrangeBy => [string => "none"],
  5325. + iconSize => [real => 64],
  5326. + textSize => [real => 12],
  5327. + labelOnBottom => [true => 1],
  5328. + gridSpacing => [real => 100],
  5329. + gridOffsetX => [real => 0],
  5330. + gridOffsetY => [real => 0],
  5331. + showItemInfo => [false => 0],
  5332. + showIconPreview => [false => 0],
  5333. + backgroundType => [integer => 2],
  5334. + backgroundColorRed => [real => 0],
  5335. + backgroundColorGreen => [real => 0],
  5336. + backgroundColorBlue => [real => .5],
  5337. + backgroundImageAlias => [
  5338. + data => Mac::Finder::AliasRecord->new(
  5339. + path => 'ZBarSDK:.background:ZBarSDK-bg.png',
  5340. + volumeFS => 'HFS+')->write()
  5341. + ],
  5342. + },
  5343. + ]),
  5344. + vstl => "icnv",
  5345. + ),
  5346. + makeEntries("README", Iloc_xy => [ 4.5 * 32, 2.5 * 32 ]),
  5347. + makeEntries("ZBarSDK", Iloc_xy => [ 4.5 * 32, 7.5 * 32 ]),
  5348. + makeEntries("ChangeLog", Iloc_xy => [ 4 * 32, 12.5 * 32 ]),
  5349. + makeEntries("Documentation.html",
  5350. + Iloc_xy => [ 8 * 32, 12.5 * 32 ]),
  5351. + makeEntries("Examples", Iloc_xy => [ 12 * 32, 12.5 * 32 ]),
  5352. + makeEntries("COPYING", Iloc_xy => [ 4 * 32, 16 * 32 ]),
  5353. + makeEntries("LICENSE", Iloc_xy => [ 8 * 32, 16 * 32 ]),
  5354. + makeEntries("Documentation",Iloc_xy => [ 12 * 32, 16 * 32 ]),
  5355. +);
  5356. diff --git a/iphone/bin/Mac/Finder/AliasRecord.pm b/iphone/bin/Mac/Finder/AliasRecord.pm
  5357. new file mode 100644
  5358. --- /dev/null
  5359. +++ b/iphone/bin/Mac/Finder/AliasRecord.pm
  5360. @@ -0,0 +1,169 @@
  5361. +package Mac::Finder::AliasRecord;
  5362. +
  5363. +# Generate(/Parse) a Mac "alias record" binary string/file.
  5364. +#
  5365. +# Currently just enough is implemented to satisfy immediate requirements
  5366. +# (ie, write backgroundImageAlias to .DS_Store for DMG)
  5367. +#
  5368. +# based on these documents:
  5369. +# http://www.geocities.com/xhelmboyx/quicktime/formats/alias-layout.txt
  5370. +# http://sebastien.kirche.free.fr/python_stuff/MacOS-aliases.txt
  5371. +#
  5372. +# FIXME interface is very poor...
  5373. +
  5374. +use warnings;
  5375. +use strict;
  5376. +use DateTime;
  5377. +use File::Spec;
  5378. +use File::Spec::Mac;
  5379. +use Encode qw(encode);
  5380. +require Exporter;
  5381. +
  5382. +our $VERSION = '0.1';
  5383. +our @ISA = qw(Exporter);
  5384. +
  5385. +my %FSEncodings = (
  5386. + MacFS => ['RW', ''],
  5387. + MFS => ['RW', ''],
  5388. + HFS => ['BD', ''],
  5389. + 'HFS+' => ['H+', ''],
  5390. +
  5391. + AudioCD => ['', 'JH'],
  5392. + ISO9660 => ['', 'AG'],
  5393. + FAT => ['', 'IS'],
  5394. + Joliet => ['', 'Jo'],
  5395. + 'ISO9660+Joliet' => ['', 'Jo'],
  5396. +);
  5397. +
  5398. +my %DiskEncodings = (
  5399. + HD => 0,
  5400. + FixedHD => 0,
  5401. + Network => 1,
  5402. + NetworkDisk => 1,
  5403. + Floppy => 4,
  5404. + Floppy1440 => 4,
  5405. + Other => 5,
  5406. + OtherDisk => 5,
  5407. +);
  5408. +
  5409. +my %RecordEncodings = (
  5410. + parentDir => 0x00,
  5411. + absolutePath => 0x02,
  5412. + unicodeFile => 0x0e,
  5413. + unicodeVolume => 0x0f,
  5414. + volumePath => 0x12,
  5415. +);
  5416. +
  5417. +sub new {
  5418. + my $class = shift || __PACKAGE__;
  5419. + my $self = {
  5420. + aliasCreator => '',
  5421. + aliasVersion => 2,
  5422. + aliasType => 'file',
  5423. + volume => '',
  5424. + volumeCreated => 0,
  5425. + volumeFS => 'HFS',
  5426. + volumeDisk => undef,
  5427. + volumeAttrs => 0,
  5428. + directoryID => 0,
  5429. + file => '',
  5430. + fileID => 0,
  5431. + fileCreated => 0,
  5432. + fileType => '',
  5433. + fileCreator => '',
  5434. + nlvlFrom => -1,
  5435. + nlvlTo => -1,
  5436. + records => { },
  5437. + @_
  5438. + };
  5439. + if(exists($self->{path})) {
  5440. + my $path = $self->{path};
  5441. + my ($vol, $dir, $file) = File::Spec::Mac->splitpath($path);
  5442. + $vol =~ s/:$//;
  5443. + my @dir = File::Spec::Mac->splitdir($dir);
  5444. + while(@dir && !$dir[0]) {
  5445. + shift(@dir);
  5446. + }
  5447. + while(@dir && !$dir[-1]) {
  5448. + pop(@dir);
  5449. + }
  5450. + $self->{volume} ||= $vol;
  5451. + $self->{records}{unicodeVolume} ||=
  5452. + pack('na*', length($vol), encode('utf-16be', $vol));
  5453. +
  5454. + $self->{file} ||= $file;
  5455. + $self->{records}{parentDir} ||= $dir[-1]
  5456. + if(@dir);
  5457. + $self->{records}{absolutePath} ||= $path;
  5458. + $self->{records}{volumePath} ||= File::Spec->catfile('', @dir, $file);
  5459. + $self->{records}{unicodeFile} ||=
  5460. + pack('na*', length($file), encode('utf-16be', $file));
  5461. + }
  5462. + return(bless($self, ref($class) || $class));
  5463. +}
  5464. +
  5465. +sub toFSTime {
  5466. + my $val = shift;
  5467. + if(ref($val) && $val->isa("DateTime")) {
  5468. + $val = $val->epoch - DateTime->new(year => 1904)->epoch();
  5469. + }
  5470. + return($val);
  5471. +}
  5472. +
  5473. +sub write {
  5474. + my ($self, $out) = @_;
  5475. +
  5476. + my $aliasType = $self->{aliasType};
  5477. + $aliasType = (($aliasType =~ /^d(ir(ectory)?)?$/i && 1) ||
  5478. + ($aliasType !~ /^f(ile)?$/ && $aliasType) || 0);
  5479. +
  5480. + my $volumeCreated = toFSTime($self->{volumeCreated});
  5481. + my $volumeFS = $self->{volumeFS};
  5482. + if(ref($volumeFS) ne 'ARRAY') {
  5483. + $volumeFS = $FSEncodings{$volumeFS} || ['', ''];
  5484. + }
  5485. +
  5486. + my $volumeDisk = $self->{volumeDisk};
  5487. + if(!defined($volumeDisk)) {
  5488. + if($volumeFS->[0] eq 'H+') {
  5489. + $volumeDisk = 'Floppy';
  5490. + }
  5491. + elsif($volumeFS->[0]) {
  5492. + $volumeDisk = 'HD';
  5493. + }
  5494. + else {
  5495. + $volumeDisk = 'Other';
  5496. + }
  5497. + }
  5498. + $volumeDisk = (exists($DiskEncodings{$volumeDisk})
  5499. + ? $DiskEncodings{$volumeDisk}
  5500. + : $volumeDisk);
  5501. +
  5502. + my $fileCreated = toFSTime($self->{fileCreated});
  5503. +
  5504. + my $buf =
  5505. + pack('nn (C/a @28)Na2n N(C/a @64)NNa4a4 n!n!Na2 x10 (n!n/ax!2)*',
  5506. + $self->{aliasVersion}, $aliasType,
  5507. + $self->{volume}, $volumeCreated, $volumeFS->[0], $volumeDisk,
  5508. + $self->{directoryID}, $self->{file}, $self->{fileID}, $fileCreated,
  5509. + $self->{fileType}, $self->{fileCreator}, $self->{nlvlFrom},
  5510. + $self->{nlvlTo}, $self->{volumeAttrs}, $volumeFS->[1],
  5511. + map(((exists($RecordEncodings{$_}) ? $RecordEncodings{$_} : $_)
  5512. + => $self->{records}{$_}),
  5513. + keys(%{$self->{records}})),
  5514. + (-1, ''));
  5515. + $buf = pack('a4n', $self->{aliasCreator}, length($buf) + 6) . $buf;
  5516. +
  5517. + if(!$out) {
  5518. + return($buf);
  5519. + }
  5520. + elsif(ref($out) eq 'GLOB') {
  5521. + print $out $buf;
  5522. + }
  5523. + else {
  5524. + open(my $outfh, '>', $out) || die;
  5525. + print $outfh $buf;
  5526. + }
  5527. +}
  5528. +
  5529. +1;
  5530. diff --git a/iphone/debug.h b/iphone/debug.h
  5531. new file mode 100644
  5532. --- /dev/null
  5533. +++ b/iphone/debug.h
  5534. @@ -0,0 +1,53 @@
  5535. +//------------------------------------------------------------------------
  5536. +// Copyright 2009 (c) Jeff Brown <spadix@users.sourceforge.net>
  5537. +//
  5538. +// This file is part of the ZBar Bar Code Reader.
  5539. +//
  5540. +// The ZBar Bar Code Reader is free software; you can redistribute it
  5541. +// and/or modify it under the terms of the GNU Lesser Public License as
  5542. +// published by the Free Software Foundation; either version 2.1 of
  5543. +// the License, or (at your option) any later version.
  5544. +//
  5545. +// The ZBar Bar Code Reader is distributed in the hope that it will be
  5546. +// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
  5547. +// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  5548. +// GNU Lesser Public License for more details.
  5549. +//
  5550. +// You should have received a copy of the GNU Lesser Public License
  5551. +// along with the ZBar Bar Code Reader; if not, write to the Free
  5552. +// Software Foundation, Inc., 51 Franklin St, Fifth Floor,
  5553. +// Boston, MA 02110-1301 USA
  5554. +//
  5555. +// http://sourceforge.net/projects/zbar
  5556. +//------------------------------------------------------------------------
  5557. +
  5558. +#include <mach/mach_time.h>
  5559. +#define xNSSTR(s) @#s
  5560. +#define NSSTR(s) xNSSTR(s)
  5561. +
  5562. +#ifdef DEBUG_OBJC
  5563. +# ifndef MODULE
  5564. +# define MODULE ZBarReaderController
  5565. +# endif
  5566. +# define zlog(fmt, ...) \
  5567. + NSLog(NSSTR(MODULE) @": " fmt , ##__VA_ARGS__)
  5568. +
  5569. +#define timer_start \
  5570. + uint64_t t_start = timer_now();
  5571. +
  5572. +#else
  5573. +# define zlog(...) while(0)
  5574. +# define timer_start
  5575. +#endif
  5576. +
  5577. +static inline uint64_t timer_now ()
  5578. +{
  5579. + return(mach_absolute_time());
  5580. +}
  5581. +
  5582. +static inline double timer_elapsed (uint64_t start, uint64_t end)
  5583. +{
  5584. + mach_timebase_info_data_t info;
  5585. + mach_timebase_info(&info);
  5586. + return((double)(end - start) * info.numer / (info.denom * 1000000000.));
  5587. +}
  5588. diff --git a/iphone/doc/Documentation.html b/iphone/doc/Documentation.html
  5589. new file mode 100644
  5590. --- /dev/null
  5591. +++ b/iphone/doc/Documentation.html
  5592. @@ -0,0 +1,11 @@
  5593. +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  5594. + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5595. +<html xmlns="http://www.w3.org/1999/xhtml">
  5596. +<head>
  5597. +<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5598. +<meta http-equiv="Refresh" content="0; url=Documentation/index.html"/>
  5599. +</head>
  5600. +<body>
  5601. +<p>redirecting to <a href="Documentation/index.html">Documentation/index.html</a></p>
  5602. +</body>
  5603. +</html>
  5604. diff --git a/iphone/doc/ReaderSample.png b/iphone/doc/ReaderSample.png
  5605. new file mode 100644
  5606. index 0000000000000000000000000000000000000000..a71b5a4af2dbf6a6122b24e085b868d07b5ec8bb
  5607. GIT binary patch
  5608. literal 131381
  5609. zc$@$_K*hg_P)<h;3K|Lk000e1NJLTq00Eu=00ROD1^@s6Sx2BA000*rX+uL$Nkc;*
  5610. zP;zf(X>4Tx0C)k_S$Q~BZP&l|KBMCt^E@82%=0|Y^E^i!^E}ItF;b|MDMcwNqM|}l
  5611. zNeD#<QBhF|rBV`Q`Zhg1&--2P_x|%;-#_1dUFY7vv(~!Tz0O{1?|ZFv0AOFBL`H_f
  5612. zbO3~f$41*3>ycet-N?8X00$sI4`3ij@rjAlwXv}P|8e{nLu8RLBDt;WKZ^a&40>O`
  5613. z7#{#28-(rc8{-p(;6?yoJ)g+vSO8F~2z@9%HWI<;UIa5mBL*UPavKNy#*5q7dk16C
  5614. zJ2DP-`T$_q0KgL|l;{8eNP-BRyw@iH(L*u-0Lu{W8x#%zqYHwyd;%%H0I-)LG7@27
  5615. z5!<*6!J^*(q9@>AFooj%w@wNr;BWl<w;(H#jSYfgB10*OJ74}Ur?AjC<bLf824p6N
  5616. zhgxm>h6VY|`BDtbkt-MS*^CU`@fjimarlKh+9R}WED`Q)W&Ib{@{cyMLol)yvWbk<
  5617. z+s4Q}gZv|7Z5;lhrzQpJTOpW;(2M+H4FBjk8%#0V_8ARAzaAZD=ZIiI1h>cRwKqgC
  5618. z5>e2*q(BGfzhu7q`WgI1hhhI9Bh%k9FhfwR>Gobsh|l>$BFwjKK=y)_fH?>SejpA+
  5619. zBXc;A1QtLa82mL$0)Ie3IC~LZ3<v@55gdlBh(OjvAej7@oc_O2jCR%qAnX3SMl$e0
  5620. zWaIwc^Y?CKWY0f3gMcrB|IjJO9^1Ta>tZ~E_W!fzABk;!JJ!h5$;`{F|FH=zjFv+y
  5621. zqV>?4Xf3oVAfs8(96%DSfL1~4qP5ZL2u~Flfp>`JfIl{F>kqr`zqd3ZQOzk3;cowS
  5622. z?>}7Nv?Cq#_xFFZ00a#z++6r$0RXXn3CME*fPO?|VsubIU@Tb|d2;<E$fn^wQW9i2
  5623. z8CjWa_Wzr){m%Mr?2_Hiy9i<#{D<bV0Dvk#0Jy$?Xko~MS*Hd7Z|^@ep=ba&FCg?&
  5624. zK5@}|f9peUUoe0GXpsnI2RuLkh$8n{4k!V2paTqn8L$Qpz!mI4;wKP^!DtW<l0gQ@
  5625. z26^BZC<doM1*ifw;0m}7Zh|}DKIjI0U<f<~6JQF=fRA7i`~YhZ1mPeO#0arNypRwi
  5626. z4#`0(kQQVJSwMD>E93<QK;cjvlniA;c~Aj#3OWZ}g04Zgp!?86=n3>3nug|~Z_qCo
  5627. z1ruQ=m>U*`rC}9V7dD3-U=KI|j)IfmEchr~3Rl9H;b!<g+y_5}r{It9G76xmQ7kAv
  5628. zlq5<8rH`^kxuN_~(Wq2ZE~*4oiMonvMfIRYP*bP{)K4@P&4?zWC6PEaK|7*-&{61A
  5629. z^kMWVbPc*0-Gv@OPoo#nn-~&?3nPwE!<b@RFael&Og5$ja}m>od4PF}nZf+PVzDe(
  5630. z5v(%S1nY_o#_q!&#-7I3W81M$uy3);I2?{0Cyvv^S>q_USX?&lB<?cq9&Q*ngImQ@
  5631. z<9YFNcq6<UJ{-RvUxKg2x8aBJv-mYCIw~P5H7aW=U#di^e5&(QtyF_lGgNB?dV&Z+
  5632. zli)xICS(vw30DaZ2$O^*YHDhJYE^1m>LBWL>Qd?k>R#$;>Yqdgq8L%1=uV6y9wk;2
  5633. z+lkMKOC%CWn508;BgK-Ak}i=tNv}w&G>kM-G^RAZG-)(tG|e=_G@ogyXoYBXY4^}3
  5634. z(U#EOpdF-LprfJ_rqidR(52Fq(cPjOr(33Hq?e_)rVpb(OkYd?kbaH<#~{pL$l%M6
  5635. z#Zbl2$?%pD#VEk2&*;OL$#|ae0pko4mPv%klqr}gkLe220MjBf1G56N6LSJ{8S`D{
  5636. zDHarqFpDWmC`&%eb(S%fU##4$x~zVzIjmP%hgnzHIN5aA{Md5Y>e-&M{bDDx8?uM6
  5637. zA7{VG{*nXDA;w|L5zldk;{nG4CljYSrw?Z?=XK5(TrigymmSwWt}3p6u4Qf>Ze#99
  5638. z?vvb|+zUJ`JUTqVJViWhJoCJayjr|LyhXhCct4Pt$-3lFaw)lsyvWDJXTlf9caCp>
  5639. zZ;fAs-;sYme?9+80fK;vfWJVIK!?DhAg`dMV6tGH;0qxtAr+xOp%X$qLMy@|!p_16
  5640. zg>MSaiLi;7iX@5DiA;);M72euL@Px{cVTy_><Za+de@K`ET$+HC{`vmC=QD&i3f?F
  5641. z7Jnjvkx-Qgm#CB&mn2H+O74}clbn`fk+P85FLhJuv$UYJoAhz%9_dXPMVU~U^D+~%
  5642. z46<gj`(;~YzsZTo`N);YjmnecjpWnhTjakgh%5LhoKbkD$f#(kcu=uJaYIR2DO%~O
  5643. z(!8>uvX^qX^0*3<ijB%)m0nehs-9|^>K)aeYD#LcYS-1is7tDcsMo5`X^3d}X`I)1
  5644. ztI4lP(LAR)rA5~A(mJa(rOl^J(XP~fqa&c>t8-CjR(F?fu<m8u&w4U?(RxjKEBb2s
  5645. zDf;aOC<9}IT!R5a217@~Q--gM_>BUL>WmhR6^-{9x0_&0%uSA)jGJ<s`j}oaT{KfR
  5646. zOEK#*Cz{)vpE7@AA!ZS6(P{}>npqZFPFe|Bg<IXU2G*w5h1M@^L~NpLZrfsQZEVYI
  5647. z-`mOBCENAbGunIF*V_MZ&~wOlm~a$zjC1U8qIGh2y5zLtY~WnrJmn(olH$_m%HbO1
  5648. z+Tw<Db8@@rw!GVLck%8ScSZMX_c0F<j|7j0dpP!l?z!tp>q+sv;f3*X_Nw(-r&v=e
  5649. zDa+ob-sRqlKKec<d_MZ>_!jxj`)T?W_|5uj`WN`m1!x8o2FwR)2bKgb1nCEz3i=vs
  5650. z5?m3y5@H=v9kLbb99kcS5AzDU70wVI65bWT6Oj<{BvL#wJ8~*YEvh(bG1@%(Vhj}H
  5651. z5z`XOgd~UkaiVbt;->d%?Je888t)W;BY{34JfS~PEHNi>HpwXI!anpqpM4$4e90Nf
  5652. z(<!<s=Tf0m@6?VofwZi&nRMgynhZilNXFy+GW!emf6sKzY|Y}%O3!+G!1zF2HcfVP
  5653. z_V_{dgB6F+hk_0b<jCio%-PKK&3%+7lUI_re%R;mqa(6MN{?(E^*=h0uatl081`8B
  5654. zv9aUY$7>4c3z7=n7FrfI7m<r{i@q0o7C$UeD5*F>I1zVZs??&i<)q-rV<*>71)h3Z
  5655. zrdL*9&Q+dMzH-|4^za#-Ggm9PEAlFSoeets?40qr=1Sqpk}7P~-m3TKozC}MP`PmF
  5656. zBFDwNiyPJ9)l)TgHC>mKFI}qTs?D#1>*DI>FS}nJx?*sp<*MY>bM-9sc@3Z;uHnNq
  5657. zuWMu1&98UdP`PonQK+%JiLoiS8EQ^!Uc4E2bE?I)<;g9xTOF<HtxdP3Zdc#oyHj?T
  5658. z`EGt2p)IRz>t52m<@U(-h5G^b-*$L*Omw<*j&|904LmS^(A#a)-PxntbFWvk_s&DL
  5659. zhqoT7Ji6JZ)Ysgv*x&S6@p03D(m?Z|@?gu5>QL(wjVEox+Qaup3`V*~O-K8lT0MO-
  5660. z<~a6j+<koNneVf?=b_KPzS#R>Z6bXVGnxC6?q$g<u2+?>cfGEkQkuFuZ7|*c#{SL3
  5661. zTc5Wd-^ILJpUHYpdS5cjJ9}wPZtl*!(frVd-5+K?Mt)pd$o@qCsr<9(=f*EOU-}na
  5662. z7H7Ujf8F|ac!_<f`n$sSj%AzWS3kmjtgYm(vai<sRQcKS%lX&rTKqb0y>w&OM(d{e
  5663. z=Hyn`)>b4XnzEA%ppY5%_XprxHBv*kBDKR10EG76HN}nuQm#OV%udF@4m3a%XhF_&
  5664. zXQ&=#fsdg$QMb`i7&R;{jvCKJWlqSYo+a(3c}JJYpv<_yT+f=oZpew^>f}ivbMn;-
  5665. zNDEdA6Gc2l%XU2xM@z^{?vXks-6iu&PD<Wep-}OG(hn60Rd=-<^=6GZEf#HEolxCk
  5666. zy*B-MLq;PlV;_?vrcGwg%x5iTEN89et!HgM*e=>F+y8O|PB>>87baIWH@@A%?&2O&
  5667. zd!#%iy(B4O-a<aSzU+SV{)7M!@FQ?B=wt9q$m`G-VdLRXBSs^KqsF2qW2R&0<Cf#$
  5668. z1lmM$lKei?Wbc%u)WWoe^v;Y&`v)^evtAsS&YnH^<<LsbW*+7+?Ge_a<b3gCO2_pI
  5669. zEDBwUe2ZgB(oY;MEk9Xz>Q>p~@~P85E11v9pL3{;t13U=ec@X*e~s;>{k4sC^H+GU
  5670. zI@IShv|n4fA>QcGl-68)v%aPO*4x&NJFItQ+RX0xw`bn3=(yE6*0t2l&?DVz{V@Dd
  5671. zZeMl(gU9a&@k2sSbcUTq!bbN$Ef}j9zx=G}`Rx}S6Frl?FZ*6SemyibGX4C`^xOG&
  5672. zZ)RHG=gd0J@yxxSulo@CQT*flLd7S$&*;w$UtGRyEmnNh{yO<Beu;jm=DYUyvE`uU
  5673. z^&j~wd@BvB+N%RUJ$^3yN?gOOomdxHZ`m;4nA(in!f$16Z6W?gBej+UutT!IUWf_u
  5674. zgl@uI@NpCqsupdB<VJJYQQR>82SJYd5OI?xnU043He(1gndLQG8HWMqJa+~!AgAz6
  5675. zAu-@DlqGyZq*AnYSEE>m_^8C36p&_=5tY@GbCi!#IHFjkbXWO>%90vUT~I?+(^@M)
  5676. zJ58rh_kv!l{$qm)!(pRV<8vmtrjcgO<^~p0maJANt1s3QHodk@c2)L84q1+IPJYf#
  5677. zE+($(Zc@AX+?hS7J+}7Dcs}sDK*{p<_R;d?^j-BE_iqX)3fvpy7OWW}5K0RD8TLMW
  5678. zJfc6cGpa4RHRfh)OWd`+XXEn{5)y-wT=!WdYo^Gjil%X;Gi4C=!~54Vm$DWPyvcrc
  5679. z@X4W`oVMH>c{PVCkJKH#lmF=0<nhHqbP;E<Y>CB*kkY)9*G|1C$DUR?6H;;E?3+q~
  5680. zs-W|Y7dEO5Yoab4s;#PPzx?dVQaxRR#5MElp*M~-HaAV)#I(rX@@hSHyZg?1n+y^a
  5681. zXYY@9Y<BTH(C+r?$?CoIaNyC`e(uLc1CfL0hK7fs5#`Z{r!`~mo(Vkndr>_xG5Pi7
  5682. zuh-BNcAD^p<}K+Rafa|7{eEM1dG6!<s}I8;I~STiUHn}7C1)|=tNAzhTk}%LcfRk>
  5683. zmXG|<`>~2df&WjgpToa$*L2rb*RO2^ZIU;~w<31@4<i)=D-r=FNNsuoJc6*06;y#_
  5684. z=OOSsDiO_wevB!?#^A#6$yDWp38FaZIL!)OApHcRK2sI*GOIdU1bZ<@HD@JPK6ea{
  5685. zJ+Bg(k^F^kkpHT{F~L|Ndtn6;W|1Y)@m(!q#p1CN&XTH9%u*}TBQiH+i{;|wT@_Rm
  5686. zd6j_DOXUkHo~kUWkJM6-{N%O9QB8HtS*=2CZS5JI!@Bai&-K#u1@(Ik!VQ@WTa75j
  5687. zRL0j$JWNTZ-DcV578WFn0m~y+7S?#{PMcI)CEKrdb@qM^JV>rk>g4Fm;{43zw5y++
  5688. zq}$KkUGBLa1|I8snmwbuB)mRQE_ny~i2BU?*7=3`OZ$HdXbMaUQVUuSZVO2b)ehYV
  5689. zyAz%ip%SqY*%GxcS|<h<GZ<SM=et)v9vwfHP?wmI<g!mLnUp-A(vx~2Ej!&O!(hKq
  5690. zCN^^+Yy80d?D~Ue4;AF(<Ywh%9L_kBaWpIc;IaJU#|usso-L{>zF1Ow;zsG{$?s*%
  5691. z<w~dB&ZJeGKihL|sfz2o(S`VnHPz#nNVSG_sh3-?{H#}RNV#_J2ENgusjB%$i_NY2
  5692. z+w^ym?#|zHZy)Wj>l}ID*!{AX@^GOq_AwYZI7IuTbVPjg-q`N(wdXYxelKNTW2Qd6
  5693. z`8Wg3iq9v0oc<i~RrEW&!uZQ$V{qI5zk5sDX989UfD=vtIBx=A{|<mWq`x725$P|T
  5694. z1i*#_fP*T4Cq)75kOZI;gul-ZI;6_f296*Yq=O=)db|w=!5gp);UP{)3etrfka}<*
  5695. zln+%wEzo1=4YUf=!XmIX>;gx_N8nnx7oJ5?p~O)(sCd*_)ML~JS_(};mmqP6#%N&T
  5696. zF!h*^SW#>Mwi-K+lfXsbns6I<WBhUaB$XId5>+38hY&+}NKK|rq#hy4BDK&bk~OK3
  5697. zMuet<mWei>j!1Wi9z%Zssb6v#X&FnH$V^w5RhS>L>}L7On#(4_*2V76LF8!U^yDIO
  5698. z-9;i;l;<UH3E75^#Mj54CtxN>Bltw9K-gJ?TjY)C#a-cIN@5%04<wFAI!ckH7NnbH
  5699. z4#@_{naj&5a45oxUz8@4`&4eLHmF@tKc!Kuc~mP`J6q>~ZjN4_{xO3h!*ZjGNZj5t
  5700. z9W<LT|7fvlg|eo#;j|U9legD&Fm$wWa&h)@33ZKk%i5jqUhYx1=eFl#uh*1sKGeQK
  5701. ze)|520k;Cb2TO%Sh29AJ5uqJ<Fls1<Bi1+WdOSM8F|j7;SF&BorPR&z-5Iwtxw29Y
  5702. zygI0Hs5+M}@8IF}qw)DG$I}aGiz-S~PfVOlD&sF7K9hb{?%Zru`30M5R8325?&XVD
  5703. z-(8cwk=69R#iMolZdSW`Cw({SA#1<k;KAW{V`k4sUV2Sazk4v3z2Leiu=IK5@><Bw
  5704. z`-27PFjyk}pLFEyaTPoOFTfWF4Y5HIi0>VtU?>$TgleERXcYPYLogdGi`4mka0YxD
  5705. zz6-yEH<4Q21QmrkjT%Iwkv>xbQk#Fr$YWwKjY#dSj?KXK;OKE~xbwJgcwPK4{4|v!
  5706. zRW8*uL7h-S_(p9*-9Tg_CJ<kdj1iy9)7+$0r|qJ%rh85wK)=e6!^p$f$YjYh$DGN+
  5707. z$8w+5myL?8p52)P=BVfN;39I}=RU+^%ge+2h1|tg&c9c{PEbyWUT9HxM5I}?WLJ`y
  5708. zySSzVkHn_rE2$3YbBL$Y<dWt0Da0!#D8(x$t0b#ts^zI4*EpkDqt&9_tuv|nL!V?I
  5709. zZfI&0Zd`2AYC2^0%6!QZYsGFYWutHFVi#?Hz@gOfiql=^0hd><pWJ@AV?1d0uz8Zb
  5710. zgel_QQa(z)>VBp>US0~842cMB2wRL$j7*BU6TKCy8<)AaH-S3QGAV!GU<zZZO<I2X
  5711. z$bQyLx2*C5Zw{&-s?0^_MI9bLs-0hRoS`7IaK6}~q@z^kWYMY3^3c;G6&h#HR}!mY
  5712. z&Og7XRekOfRc-cV(JOE2E3XCJP;A_4e%8{|T6ia=Ev((EV|SNlw@+{Mqm=&QftsQ2
  5713. z;kl<x&k80YURg{lzY~}xd_XO%fBF7xb@}`1<~qZU|91f!q?1$t8o*;P2f+{*q=cLx
  5714. z0Z<xL3SEc#q4zKh^TJw4XD1y#k92aDQT!-J)KOGFnig%3E<?Y^$YC-tLs&s<5_T9T
  5715. zh0DQxz+2(3Q?XMWp!!PiA&gR+P`43PiPuT8q$V0inswS*Ixl)Q`U!?g#z-a;W+4_l
  5716. z@+?oYjj%uB=;CbWYT>TrImjDJ4&bBkQv?D8<AgGWOGU1U_U@Vy2NIl;3R2e6figL=
  5717. zJ@P~aTg8(~Qz~Mr@oL=~teT-(4|I5RGxg>SoD6%6bxrP>>6>?3np!=wv9KMmw|3}v
  5718. zGIQ>B)pxt^uHkXZQ`xK8Tfyg!pQe9Lpmorr5X;cMaN~%sD2?cbSb@0Wc<O|d#Bck&
  5719. zlV7IVrS)Z4?jOo>I`HCu;j8Gnu`4Q9PuBmu=5oEMk*dkFxv2$z%el4k_NTk5ZRz(q
  5720. z?-M#KI}5s=cC++&_MUtAwokM_`f=mH=8)NwlHs?bQcq*YZassZ>%BNI(ftyBrTp4|
  5721. zs$lviQkQJbu)mj{)tfV)xBX!I(Q3i$lj>*TFQhNaiz8nfzGW>rBN@bp<%S<ID+(*0
  5722. zRxkc^{)PS3xaPXHxn8wlxG}dSu<idCe|fp>(*r<6J*55kYHMpr80lXY0I+d<Yiq4?
  5723. zYipwlDK?P*K-xop|6j2!j756x<-500yF*v{_Vr)Ke*vxLjr0nzX50V(010qNS#tmY
  5724. z3ljhU3ljkVnw%H_0qMO-L_t(|+U&gtoZZ)5Cwj`gGn&!NNE%62msM=J*ErRwkV;5_
  5725. z6w(MR1U8V*?!LDV2(Zgy2uWDVE)RH+EFU0bm)(5<ULYZr^y(yb++xQ?a+TG~NE*#(
  5726. z=H7G8`_*&K|IVF}?8u3o%p_yY+_~jn&iQ?R<@@{oY)Z*2el312el312el31|x4zus
  5727. zC0P7g{9624{96241fIpO#jnM$#jnM$@7u4|;w4!8TKro4I$K{Bz8>$#m=@~`-}`m4
  5728. zcn=o87QYt1&LX(jC*Ucau@PJZtwrEj{9624{QBO3jQu_UoJR^qX%U1LfoJi{JTX!m
  5729. zi(gON<@G25$38}Y^jI0I^a%cz7J+CHcz)20{37TqetkFBl>QA#Nn`NcKFw?9dpw@S
  5730. z$RnNx9QwVs-}B=FpQHZ<`0n;RH!XtDBmY_?7d$d>v5#}Zu#nfexDgh=zLWJ<|BHZg
  5731. z{<?MNzIveTE*M|A^2FHKayKwI7+Y;`y!Z6PZU_MoDs?-s^jt(QH+DKP;!^Z&OTUK%
  5732. zMjRhWUD$ihv|8T8m}n=$pJ!9D(+=JwMtWK|cDpCRrsFZ#+1W1qo@SDbXy#$(#xyfC
  5733. z({awrUXH2l+9?QTSnpE@{vHK6@ja)fXW@wO1A~PhQalBJhL?9baAfd_r%s(RCr?h}
  5734. z&v-gJ;bjNmdlJ5n_3Wv}9;?mBA_y%4&zS(tnWPu$$L$$-Yw0X){(i>5E$~^35z*q;
  5735. z*#sSpcG{~}t=e+&#XH{e@ZSAnD_5>F?e>6i-WltxA;WJYpc9}0{Mho=AXLDg%+N3z
  5736. zVgMaL6Wn>u5y+6C_5eJ|CX?uO9<U0YX?^l7XTa#26akBDiVhC}-XoDkx3u2zb7Sbj
  5737. zb3*j3mPw8*KD;L!g$;7xv|S^gP%;5t9wWXUJ}7qazwlU00G)IU2uvp@PnrV<A2yT6
  5738. zPR5fbCucg{*$*B%bl|=47N_95Q$<i|J_oO#FZ+WIMn7=Ca~hzrr`dR}`Zrd;+tUD!
  5739. zmFL@@zomIzYpd_n=NR#G(XAU0?{h%DTRmV@gJWE@qd#z8XKLI|=UCZZM{8hUU>L3E
  5740. zEJOsI&MC0r0dax=z#!0o(YCQ#%!D!!vLtxCn-CKic&wxNCF0K*7{P-bSgJlEV0lFg
  5741. zgP{@r3@>+vUh6n0qIf1M5J~P00mmb-Fo@wX#l#nbpsSov-dynEDd2kq0w6XM3C=B=
  5742. zF2KudcNX5aYtK7x`^!3=nNJ@(c5HV~+AdbV_wMyMfYfV-e$asE2LgC{z-GRmU9~t|
  5743. zkAe4ct(L$y_-tkn_g<^jTH^iSQi$MTk9ZFslfW|z-7ZGu;S~IfUeT<4V{Uk+`Z-jK
  5744. zv|gaTItHhoRecXFS+ZoP-EM=Yxq9XL_3KxRjE$}vUAk=Z;F7@&!%K&Ty=xD`E^1?P
  5745. zqvdQ1HmL)zv4bT&@<`!0yPYnsbU1KlWP2tf#sI!8Y;;eC!LzNwz1xM&8@j=?!K1bC
  5746. zIN1Wro3z`-4bFxG-zNm#-PVY!8+n^!+5|V5gOo~w=cE+#sXN!wO_;YT|2^rAgyU(^
  5747. z?+LwI_I2TNF+J0jXC?Yf^m@tIq{v1NJ~+lepOGZ_;v62ioN%I}%PT@x3>r`)7l!=n
  5748. zY({K;JRheOgUA++44AXx16W7L*y~2%ySJRnr%3mL3}0EE;P%ta2ynr@<HyiY<7u$H
  5749. z!t?T}e%A<}=lR6(Bp~etuf;$FqY*eKG|FVm$!I&g7Kv|@9H7Hn?D-ZtzK^h`6WwQT
  5750. zA?h$oPEJpctlO~BEM2<PJ9u+USmAog_t5Zqz-xl%gHa1#F9rb!F7UqKg%wMk^4~k1
  5751. z4uTu~9Ob%41rm&m;I**7ECHNEPgd?egAA{sDEGopvMkbC#C4#bA5%VKxE_Jhe0ZGQ
  5752. zS%`pOQQ&KamJDJlFbxj0%(CUn2A7SGuLR(^1YR;Nk<Ur^o|1jtk-Z(Ny&Wt2k`_~Q
  5753. z-^b*FGXR_3Xhp$AqljeyEaQMDBcr3EE62yjN7k%aH@;@gnr*{NN7jvwjI0?R8D2d&
  5754. zIJ5?g!XR#-78pf<ozMZ?nVFqAGCMPK_~g{&!Kvw~Bd4ZL9Y1z_;=ttO<bh*Hk4`}@
  5755. zI!sPZgZ1xr0__7bhF~vS?ZLr8G~sS|cz6&#dpSI|Y}txsYgevVwF0na!`QOr8{4h+
  5756. zD$Jz=0I{h7BaWMhHY#pLGF0F>qR{{=6}=Us$s4=XVk585l@(7r0gzKtCS;J<z*9n^
  5757. zfJE)ZqR|fUKKOh(4g3eJBEK$?VNJ5nk{Ady$oPJ^(Z#u>V~UB5fky+G)OcIov6zk#
  5758. zBc;a85uosE>htr?Wy6lIk8nH|^FE1<yRA37yvEpaUSufIfWbGWkQ5-*6IKr!KR<D@
  5759. zhMaTj%C*A3<2}li=`I7FC$MKwL!;^P$4jK(80-o3@K~HJ*vpqx%ora-stmS1kB&L=
  5760. zwF_Wq5vbaf0^_x!;AV3@gbi<rP@JT|5SQp;&|0D6!S{r7L8qey>ks@aa7y5wfiqzv
  5761. zUlUvp;EEBr>2>DoW$Au#Dl3^bULOT$_&=6_$m5BT909!B1YD+EQ~kX%)ETIq-gjEp
  5762. zyi(Nx2;^Sz1;R~7YrFs;0kk#Zh{4YY^obo5Gc|P*z&q0Ygll@@#PJgkA31hx|Ea0T
  5763. zJ(DLU??14A@7}``6VoRqCXT`0J`A;?33%xd0i;e3AoXTFdZW|y{SHFkSHSZKz(%9J
  5764. zwnQ-qHfzApuUoNV#i}h^wyavcX5H4cYu8-5V%hkXB}0Q7hn5UE^y*q(^S`j!I)MyY
  5765. zlF%Ow1sMWdzyb<XXeE!@l1HZo0XO7KXBKnPlz6agI52Q>E%5XrEpj$$Ex<%K;ApdV
  5766. z02I354JJ7w*kJ7ZhF}>eJQ@0Kl;eUkhIgdnC9gFl*;;J;0~%B^8m(+_*sBynR)qlc
  5767. z9@a7t$hr|5A>Mv=F6G$RAmBB?*JhBRBe8s)tjpHas=-3Ai&f-7203NG!1woRFe$gs
  5768. zUaRC_GFas(DW3}8BLWt9O>m~1kCCV)v7xu}K2|;KQ~(l<nv;8zS6nK|8>g=oa3w%V
  5769. zF@v5HP{sdwiq>KQm&D-g#9&%iA_RKhC^Zo|b~54$IC2m0qcBqC>&>s%<BVcx_2c;5
  5770. z<eCsjMRFwQWtP{hI_oKx$dfP&BSr#&#Az+^?eW816VD}*)8BRdBw1e!79|q#92Rr*
  5771. zl}ZgL>Ed$YAS7N9IYKt&^P;R3b#O8m8IFGGdGchvrsN2vK(BFf&!f@n9AIC0x+faV
  5772. z=6#<ul7gDhNpLk!Og?zz$f3Iq9X$B$hxhDx2>y3$YU;!R0Hi(e;-fv8kFIG3z<ukr
  5773. z-){i)eE~f408YOGd|OgilrkG09=l-8nw4v}Z{NOk-NucVu3ow7((x55w+}8^0%3le
  5774. zJ;iR!##u82;Mvit1LI@Ca9CSK2JLo>4LllYc$PyZO}9&%7J!J7I{}l)06cB@4D|9l
  5775. z2tc?Y!9Zhyb*4K@&xfDkwH@4;iS{ac!MNG2IInQ-EjoKlO(0OQ;U=#PSw*yT2L=b&
  5776. zTSWsQ=_mEnF*Smb(I7m>iM!4opS-`b+2ByLl8W1%VW|e9>NX^Ky*}5ZlBIG2Jjvu>
  5777. zqj<)&1ye~~$?@cfqvx}YL>p0#T_dvQaTa8>rW~(EIjN@{Vg>ASh#}x)Q>xCl`kXoz
  5778. z)aTfgqeUm5tytdl*yXXrr=3gz&V0>H&kJ+aPyt-7c}{UjD4J}(CMlJ&A_b>i1}2I^
  5779. zjDS%rE}Bi{-lPngPNEq0YWQQT`y&Qi@1+w*#t2B{YptMaY<{g!(<(5p7L1&;UUxbc
  5780. zU1QbVBjN&qDo6jET8%l4Nsfgk<*XG@vN@HfSK3L0g;7sH;sM_n+AEONKt~TU#b6mC
  5781. zMeSDZ6ghwB#Nnwy^1_^)nl=y~O&>XQ==MWL4}bfi2Y284&;t)1oR~Pg8=|6}0z#+c
  5782. z-_S!=_`U_9Cp7S!25?;UJ*3~`<EyVe|NQgTZ`!o!stp@AUbS-N%1fbUV%aNC8nHkb
  5783. zAX3U74Zz^w5(}v<+X7H&wK+0Cz@X=fA;$$cJ3CAH;ZrlG%nTG=agol>cHs9}GXsy|
  5784. zb1=l8nV!byCbc#*Gqc%Xptr{x*JUeApr*NhIXx>zCF<W3XX}z@&yFH9%vXa4C+Pv&
  5785. zL{2<2MGz<T1!qgyBK50JbIyUPyJ~WiMia40TVu^9Novda%BahB&t80G(6fC>5*?Hj
  5786. zI2l#>U$iL$pMItlKq#rg#OV@!uIa;h)pVOgR-EeT1yH$8P9p|e6~rw8xT`^xuShmt
  5787. z2>xvRN_s8{2-K_*{Rr_QC~ZY_V?X!WWfPl9no-X#S%%)oHTZl#HPvJcM>F_*D%z*W
  5788. z?sYWzerWxqzGAkj*RXSB>6rD{Xg%fV!8Pt#%Be|Pz$QB?B|_%(9fMb@Qmb_BT$3Av
  5789. z*N_i486_DcS#wsSIQhJOY%*fcNwkc0MvSg8MUFJ?0bu4~>JWir5S+pR_!+YgZTNj?
  5790. zXo#FN-@@NLM@@2!lxhr^iRhA(iF=#xW5jcD6cyt0DMi@<rrgxzzP)>Id+4FvH$Cvc
  5791. zuG{Xv|Ni?R8oEmWNb5$XPg?H#27sQBz*7NEzkh92uNgtGf#T=+mtK1L#TQ?A;j=ex
  5792. zI`{IC(WTql;Nd6oUf2jjM?l2fG60K(sKpKp3{s?k9vd#s4lXPJmPw#j9zJ~79G^U4
  5793. zjvYGz-VA&nKWShs0f5XvE_lYwc4h!vW-vQ#0<dB_n3fB(@EIN2AXH=(575}+#dDga
  5794. zCJ`~1XtrA!J5}wy>|QUG)MSg%om0lNx!6p_dBPG7ostRS>G^^o4PP?m)B+W+g<@2S
  5795. z=}it^f=JP}B)x@?;YOs7@^k7c1ZZ`gCf`vjX$=4|0@XmbmH@3rNqj4;VFiwq$cb&0
  5796. z=p*SC_L1v6l_4V&NtQG4v1wWk&zG21PD?r^!cvfPN`MFq;)w|i^fT4aVoshUN+aRp
  5797. zQnyI15$Q-Kkkgi2wBz$c!w$v_jU*)#G4hUFtF}H$P~(hsB?8K!c?b*)<S_8>2BYDY
  5798. z&mTmNljGV3J0NAHX_|>%OV>!AXPbE~^3YP3NDBBItvMm>8Q;aipDa3R+=&A}mwS+6
  5799. z^>+HGm3kVTgq&L@n^1oaT$7Z+gQF%)1GngJDU}X`V&CN6Cutm_XspF`9f|s^oCb1S
  5800. zJVYx4@EC&3;1Fa$0C<+d_t@yD866!lBTJXUzoTY+#d0$OzmJWLnx(@_(Mcue6hXdA
  5801. zAk=~H8R#$SAbHy+=8{t#3-`|Plarl82ln6o&_fU2aQ9tzedF%C@4gWZ?U2-lPR>&o
  5802. zdcp(H6AF0xL^%Bb2UBUIm`;OUgQq<G>DOMnW5)&0S+;!nj**d(HX6&>4idZ^g)89A
  5803. zP|^SyH00I5Lc_@A`0?ZLea!6JcfjmFaL^n&e9%lx95<6Erp?r;8A^}g7Hhe-aj?)Z
  5804. zQW;z_0A3OU)>2H@wU?0RG&t0z!YiiImJAMN4~scfmi~rmGW1}{*gIRi^^~d<6Q>2D
  5805. zrhK%<Q5C(jr>NP9sLUqW$y#^NR94R_whg1=Dua;7c#`3_B{enYmgIDfBQUe3)Nr&g
  5806. zoKswCOz?c8$*DIzB5RAci!}tRDL=;>H%T49N;D=5TC#MBAB(YZj(Dx;wFO}+Z(rD3
  5807. zQiRs$mULCh1^3!g1|=RCC+EpEJ||IANia#oYI}n8%!;$+KJrZ_#{l2oN$p9~W%N!d
  5808. z7UmnJ#;l~~q-KG&C?N+}WdJrlTZtM8?`jpHluN_)6wAOFQ?3Q2o=7;-F{+y$33Mox
  5809. zWl~;)9Mx3sp`csYAS;ehXwXYDWsRa<BhG?GHJTRHB!Nb!$rM5iz7IH;<QULe(kKwX
  5810. z8239mjR+L@jZLHYJqwQFsmUobjlaXsGc){m%w8lRieU6OIM@be->?~7HeyzfuP|VD
  5811. z%sJ<*GHcFRV<4kK0EPA54%TSlv!<q}Q)hO@=#s|0k7@B^6UUG3-+$ot`ybf#FW>mu
  5812. z*RF?p(cKjQb*g&MoK)Ns4Sb#uz_UO~tp*&d+bqL>&pmhBwa<Irb6&ZA{f29XhnKD!
  5813. z99Y7AV~!X-i9H-|5d@&ynpj*%CytnXd-oX#f6artcbmh94ny=Z%cc_+*8qUZ@W2p+
  5814. zPvH5C44Y+R?D>r1f`f$x3}^Tr1Yp5X9KZ&CMlixK-2*TosNf={9I)r&B{Q11KBPv+
  5815. zDxX=5VE(-)60rR*R4<J5q|ADLPdy1WE$FJZS*KYV{Lhl|E5@_}tjbt4fV23a*%)gY
  5816. z#-{ols>k(E>q>QR{;cs(YFwSvr@36&c4`>wE1G)F-^_CbQ_s2Bszy;N#i?2Q(K?Q)
  5817. z=+dd@=xm?Qw$(N2O&?VZ2d;ZGuRxSqNb}m3wP7p#U1+r|u!@>Nb<fJH?@2#P(|;Y8
  5818. zdZ5Xv)Slz+NkTT)mT9iAoGO$wr7h`7B^^Yr;nFJ*1cFejDPqA42BgEMr%#z_sM#Ec
  5819. ztOu~#4B&)0di0o?I0FApOqgSnlV)o6qzOR9Msho_Q_b>aqh{@zRc7PH_3*vXY}~NH
  5820. z0D*~8^|Lb!LZ<-qAoD`WQgnJ|JF{`($kF@n*|qbtU;e`9KL*t8+YGBEOje|Xz7fz9
  5821. z1%Mv+z%x%;t)@U@goC<KOV2&`+-qO_;+Ou^=5se)0UpLOr<Bkf0$94?gH&t}=HZ7Q
  5822. zHuv1K)7<~yLuUWJgJwE(;O`K%fR{N8(a*AF%VCj>o8{wUw15z3mX0hXfEmKvFXn_>
  5823. z9KBE-#d!i7Cjf)Yrxx|R2;ev?nI$j(QZ}AhRGQvmj%x#W8Y!M!;J1D8rO|P!H493Y
  5824. zq`6$p%G=NBBTdt!>aj)@d|tah#{k&{ATU#PHSgaSMCO0*dB0M6M9*39J*!+;IrZEv
  5825. z@|bB5HLshkIMjWB=QQtAQg62LQrpk$+n)12Q#3le`@I)W&)!#c-&0k;vK4ux;b3Vx
  5826. zQfU2207}zn6#YO1b7~r8b*9Y3vE$~@(Ie)_A#h^%9X1CJAAp~anxlu0n3*_h1|ZY1
  5827. zY;@Rc*s#`Y-@4U6Gpbp;b{(iW40G-0<P@ajW-StmuttOgr4z>|58b<K*C#&v*-w1{
  5828. z()xG8;T$(C*HiZiJ>dZ8aSJ@BNvk<ws9{PCT5MKd`m$HN?5DSH+x|R=FqUwWB<ntL
  5829. z^P?pO8G0~>4jnRg-g&3F<L<lR=Oa{&A6qsCATw&lmM=5Q#}H)j_ht0&(%~U$WW!LI
  5830. z$ORD1VC2%0)EO2kIZY;DQ+-op<*m>&RVKt{N@r&MNP5KO6h!e`3n<zCHlnr#XS!2+
  5831. z?s*M1sRAHVMLTl<sCJd-jl9m_xxH@pBe5e3onJ5eZ4Th3dA<3@YZiDfyTI$_drrUS
  5832. zH`1Inz|3LZ&2#U2qRoEy!S-J3K7UJdjDH`epniRtOGB}}kI#2b^Q_tVoRx*HbKm2d
  5833. zZ%xg23>vLgj$T7%L?R+05=pOIkjN+mPT>*BK-wKJIywP$;3G#T%)Wz%%$|Mw%%0u&
  5834. z{jfQ5<S0fpkQHf}4Qtn!i!Zv+KmppUU$>qzCYairJb4n*eKQHtfOI%hQ_~Z--g4XD
  5835. zeE##F{zv$XJyjiOUMAe*8GIg>z_UP<qiHo{sEq>~ZR_)2@S>MpdHGd84+X#_nCTs0
  5836. z=9yz4uoQ_*O-&i_8q6)X-DV!zy@!g7%U7;8tHxIWzzmz^%a>C`vjTtz>OfTML9jtU
  5837. z@dPph9MxcSqqP_T6Z%;}#%d3U%k*Ha+hn@1)OGaCoV877wkN{T^qXBE3aB@bUC1%5
  5838. zSX&KHQP9!HDo-!<08Tn%PkrIzoiAl`Chu+LiNI`+C)*2v^S-{1;ZE~-%e7%mr%PsP
  5839. zq}k6H_qhiP8dFmke0Cwg@A<qr%&vY8%mRSd_qgYCDi%ls&gUT1tVG)n#2!Ud(+^x5
  5840. zYpA}a)!&IFsQWnA+nVWLB><J4J!Q2f0v_(~>r&4hG2H@3MhHa5frxbA;6cc=>@^QO
  5841. zxEsFrn*9g&LoIp241;64ZQEvZ<rSBiOE12JYC{<LARQa(%@HFZ?^|}_=#f2N`N~&*
  5842. z_oka}ydDl{AADn@>Wpdj06p#j=y3-;J)l$ntV}hm<E%aZ{0pD_BQO1tUs=0m-8RU<
  5843. zMg$6oL>w+2?7_jWqeqXLyY9N%+<wQm%@N4QjxAeZ)}6B+WG_Y`<Q;)fX*sb{uttOF
  5844. zw^myK20~)&sBTeh#uJcmRAY1GVuZHK>LQXZb2bwObOC4C7@;1Up43V2=HiHl4ORxK
  5845. z+UvH>tajhc+0S_N7?IR#XlszEKqxb$=7|!{_LmygR2hZ_L2sTknf77SDaPKqOH66r
  5846. zYte{s%v@2uIfm;r-v1*y--S|6{Zgo>0i68WI>lP88!LaSjeo!QOLa8RXKg7sEOcG0
  5847. zuA$yz>`evtyBG5u|96_c?DwUhqYk7xg~YftJq}@?eN;PeQKX<S8tM=L1?sbd{vWC*
  5848. zV@>A-fzV;|AOO&P_ufZ9v}f;L0Gg9PN?2*0bj9W7>Z`9d>o=^U_dPLrG98<kfM#*)
  5849. z2Y@+u*PVBM{KFsp@cWJ(IdU`n`LHPp2~UXV=Wzo(r-^dV(j$3b913<jUh>i({qd`=
  5850. zy!z+4*C7UI_yksE%W7}U!Gi}Vop$Hl_dqjdGHZcdvTD^hc8o&JW|>(HKVy^wY6Oxt
  5851. z<Nh3Eo005C70qx&Q#_y?)kqpl57A}-N*Q#LP*LkB$Ie$@>DgSV+O&<oR|a7|BUBsQ
  5852. zMg*|H#%UP+3W%~tT7zG0+~!GT*`8ERn$JV7J<|$|&tzSuUcl)AnmOm*&)`=eS6`QT
  5853. zfoFl^>W#KeL+zMz&W{F^>_Xr)4<PlscMC;YrVkkRMog(sYOYq%T_{bq&~eOnJ?92G
  5854. z>5<n1d)AuEiVL#eU6JM~5s=MI(V3xHktbB)f_t<|RHUi74n#x9Y{O^<nX#v!?cx|P
  5855. zX!inp_P+b>H+Sv27l7yiAS@gO;?khG?6Ql^GoJo*vwhoEqJbZsIF^ncoruFA$q2-R
  5856. zWB>A*PyP0d*I)l7__#e%|EU{M8xhds349(Gz_S48XagwKazGIC+E=~mwQt+7Y2(#+
  5857. z^MI8`ZT#5ih3vG$M-CI<+<nhIK!uEE^=hUwBL9AT#i&^Y6vt(wV-yj2&lG2haDce)
  5858. zynu}Yj^%WkQ9^*#sKsRfAvp0ivzlsVnzdEbW28@@HpaFFFEeN1b037MD7NMAweir6
  5859. zQ>WzW*Yq;2)KIf>LFyZAXmrq|R-bwODD~6{9!X(3)eNM5?{k{h%?DbkC%WtRy!jqq
  5860. z=)L+q|4f1NObhMx?+tCe1&nC#<Bh+4htb1AwK}`NHLD$=GXkETb6P0n+&9AMlX~vU
  5861. zvh3X>J%20UQK!~o<8MhMg=&E6m8Vc`!U8}u6bWH_2hzED1j8YSejYM+0|?!7*FEN8
  5862. zC=HAOi}vcPFEh`&_F8l9xtoCrcM5COz;TFBVs4vTZn^1yed1#u{ohbhxLu;3Y1358
  5863. ze%yi2_Z)Z@NUb?Ztu2S|mCty_vtIIo7rfxthDVkz2Nh0Ct$|#PwL>uA0}FMx-~KIg
  5864. z&(56&XHJcdtuV_WeKv;av=w7!)#_Dn^G2Wxxy_^l>Z56qh@t90ab1SV0F+u2+Ou`c
  5865. zSj&+Sy{-@nxCX@RG*nK`Y_+P+(?<fm=i9JORb_PXn<<?!drUDF%_)7X{#);3_<A)~
  5866. z`m?@2%{Qs;eH5ln{iTo9$B!GO_c^hu39(Xjw{fi6R5>q*RR*#5IC_C+J|Idd%{TWX
  5867. z|BJ^y-}}|Y^kmKqAbVwM<~!yEYY__oU%z8bmD5l=9SZ^QBdwM6Td(u|y*>`!7py&3
  5868. zJ2nd)XTNJU-?6tuPq1HfO@HeFUVN<A!Scc|?R}jNufyMoNF@IvB^uNC<-1J;BYhwJ
  5869. zOk}zRVY)HNpp$Dps!`ZT$5rG6?jwTl*%?wbL5AF+BS*|`0G+#_HhtIKJBfk23;^ia
  5870. z&v=@7_H&*M_2_Z4Z~xu|H6V+2=fQ^_xb>qS`p6$0Jh<;G0zQ)hKJoFGdi$ON&pe=`
  5871. zeacv<S%vkSm%ZYZZ+`mIp8ks%mB5Wm1FZp)uNj1z4Bn7izjYh(;eqNr3Vk*sL=ad7
  5872. zwVQJQa7KatthE}VHcR>pqn$R91z0Krl?;#`O$&<}LYbVPz@!G2B-4@Vi1}J69OA-3
  5873. zzCU^~(4|bjlSk8;m4-9+Z1gdHKK~6RHgLgm4mjk0`E%HStFhOA6_9GcQ6Q<oO2I}S
  5874. ztNlUR5OT3=psVFklBfaK#)4EAdOYyj(CFvY1}CQ<Qh%e<NWGD)NO%5Ry!Tmwd!aAw
  5875. znxD_}?!!;W^lk-AU5wNqslPin2YB)CuKrzKV-`BbKEP8Ovfj^datytnzwogb9krQ_
  5876. z?!x=s_GH)kgL!=n^|7fjo(~jzqqg}ZZTdL|jptW-dA)ycL`OYY0iM(28po)BqiJ;o
  5877. zPjxb}bplmPhJf9QEf&xhNcIK4k@-3{#thgMkh+H^b$EP~R18SLpv8`8SN1p7cCh)h
  5878. zGuxrZl8&dqdJtr2K+T??1FSY=wqd>JFfeZ)0w&z9o%fk<@4UwxK5)pKyJ@|7;R}A)
  5879. zTmeJ`BrWXSzn`>=j)PkE7eDvecinpHt^Z<JjCA7h3O?U6;OPT8b$ShZb5_BP+xio)
  5880. zfBnC??9$6$fyN#poCF|YQFa8qky~%M8N$*BVKIz?q{Xlq0`CNCIcp%Lh6|%D(Fw`l
  5881. zfVYAj#w`y7f`OKd1xRG%kb!avfM6QfZ<CWKgEI;LPNLE*eIqMw8h{PEnepdY(O$#H
  5882. zrsQ!7nF(+@^sPMq(;3Jggs+lf;SP2!+G^jtjZMfft`|f~%|L%3yS`xkN90}dd$7z;
  5883. z{dY3P)-`fIc)NV{K4DI^qCOJVsS(w?{I`Y>XsXnTDudq4EH}aKJ1Lx3@@IXDE6wp2
  5884. zePAc+yJZp0#q~SymnYSNL8=`WFdC!YKTPqTbIv(H4%lEetY2?noC-Zgc8NwwutLHV
  5885. z*q3Pln^{s$2t_>sL5S=P$Z>%^It(?Rhrr3+x$^;YH`cB@)8^^dTxnkPq8CCl`*HxM
  5886. z-4S#k9oVwz8@}<i|N7}qfBFN4Dc2K1I*5;_y3h9ncuoU4NFq3AaB%pdpM3M1e{Jiw
  5887. ztxrR(DgcTEA+ALa1aHVUZ@Q7teq?kRUBTtxWvl~EJPc~0!A<CKpvtt$&SNBkAcBB0
  5888. z0bRz(c*C9^V2TjUaq=W|9YcsqQW+xlsUdMka<KS#?-v3ZdOKt2^^A{`q5(4H&=Uf>
  5889. zH$+?`<Ru{!rQK$a5S0xmdIL{qP#RG&KRhtNVuZa#+Efj>vI}eiR~ym!8b}tXytdk&
  5890. zsOG6wHLzz|tX<&EQxk*+aqdplMc<z)-CO83{k7*z>d~U(7njqn^%mxS&_dOYT9vt1
  5891. z@mgP<s{i&dDe_-TrACl!KQabt=Ov1M=ib26r^*&27|c^k(JRug<)-v1vwCxvB5m9M
  5892. zgR7sDP>Or6QSU)%oe}q&=~?F{r9Nr|hW6h=AZV*~g4qWhM5xgdrp7U|(cANeufrNk
  5893. zl&k<5eo22#f?Z&TbB62&suLg^4Q<9z`Nq0Tnx|iAP-M6en9v>|@N57eg0U;`y%p*;
  5894. zn*fm30vIi&bR2%xarsQmiePj!Md`Om_}e59rw*CjpssTFz4w|2?|;awU%%S?*vnsT
  5895. z&OiTr^T6)i2~-n+WaYXy+;HPxeB>h^{wu?jYn%(DY6tQ006yP!;F$+>G`)uXIp@I5
  5896. zy5x;-`d9DRvUT$%5RpWrNu!s5B7CTsb_+y01B2LWvxJKC=d1<KV$Et0?i(SJ0n!=q
  5897. zMxmJJ0nk}HeE1MFZ5;to&*Sj;32eq952GUyiPCJXq;l|@%+6v&!}?8ajHCcmww!ye
  5898. z*|K$u*$NA1+m>_9+I4H8ezY2ZW(75xwg-nvT#yM1oYq6N0-8l{SssordY>I!TSdEo
  5899. zF3dtU{|OTUq4Ft4Hmab>;*uuSz*+rGe?ODwoz1UDS_wbXzt4vp)_xZ*{=8j7XYu}?
  5900. z!F5S}E>xBgN@w8=3*gm?;C)k+B9f{jA(VB`!xfoSfWX93I*=iObotEmNm42}GI0#j
  5901. zVF#o)=RvazsL}TVGws2L9wG;~PEV>MjJFw`V^l_23r(Zjwr?}%ZQo9Sw07-U(tVqm
  5902. z?Qq5gGAuKq9Y+8J+Hr?L3E>b(dOZjLbo=dhkSgL!Uh+cojAuN<96WT;96fddCJVRX
  5903. z4L5w_uRit3kNqWl{KEo1;qgK`_^txa8Gz0j2t_aZ$v6M2cdlKxZU+bxMjVWWJvJl5
  5904. zBM?qLXzuv-w}Cvcj26ZasK#yuFu(`{7X=Le1F4F=@VyTrnj_?;;E00GsSeFd#~KTc
  5905. zAMVPqs|NKJRvmga=vl!`YqN3FCZIB2X0CbC)$s47(A>3!ypuKn9`^arIQYcs*2;1r
  5906. zk1W%X`)tHCH^tKMX4BlcFpuEkJ|^~J@oVubJ)$S3M`8~i^+C*m&qj~u{DMw)p2eOT
  5907. zf^`**yQd9;M;zE@y9L#rdF%)_jLuA-F#GrKH}?W9`nGR<%iQ?Qn+()lfGqGZrRp&|
  5908. zf!PqQx$)SNHi!$40^@f5x^-qd0ue+on>KHT49XY*pQimW8bUBS0Tk>5AjfkEoa#I7
  5909. zxYHa22m4vid<p>2OCT~jX$~Gfm~i;{tvBELzE6JgBYy#hzWeb6KHoLqISuG65zx8f
  5910. zO>aWbS#v(fkq3ulK?skrsCN%gq<7uB3lw0Nll?wt^-8lIyaTMY?Af!|?1knl6#7K(
  5911. z0K<K*xy(q>e>RW%4LU%I3gwa5C-__piD6EUdFC^pX`c7oXPYNoeT7-MY7HD6O7OD`
  5912. z22!|#Mn_dKbD@Iocil*Q|Bq{5{CWa@WzpC<sn;hkAlJQaRns-qm2s{QrqF2=Loi1n
  5913. z61n-d+szlg@I~{5FMi3~1}Z8*1|Sey0yXHCOe@BW3xXS#6fkuU`jh5@9XrhCO`Cx@
  5914. zHB9wr1R#{-p%E=m`@x#@x9_|QT1oCQPlmeBtA6~)N#_kn2Q-fB)|<ci*Pr^-zr6SH
  5915. z6#0Btfaf%zgJY-HVom2QZ~57GuUWhHVmPP(`Q8jVJ9nXw=lzgMTShl|)yfs5G_YsS
  5916. z9!jN6!;L`c_}JwkZ0HrBcptH&bSAwia_N{mMKS?O-fxD;=DE*%u6gN?{0KB^J;jWS
  5917. zjgu^UXO>9>%D_>^QEl9<Mku+<UTY3#Df(D|_4C-@Go8cuC^qCmx;UpvLoG&KkNjHO
  5918. z^w=BNvz4}-13dG^_^GE(XV36BQe$B0qdbRLE#gPF59`(jEA^iCl3{XWBiNQ3Zob9*
  5919. z^FM#oeDdR;px(nth+>eafRPZE6)=jTTCim$7F4vxH2?N(=RtqsYI;vhy`7lkk^+Ly
  5920. z&RzGJJ8r+zTzJ7Y^AoRq6-{5=yZ->t=ThtDn{Il~XFl_(zc$=xT7%E`q~`OO1J4<N
  5921. z4zkzIf6H5b?sqnA-27x54TY1P2S`nzZSMT`oe<6Jqeuq<V{icF#HRu2kK|%MMl>i_
  5922. zj(N}-k{AzFH-3pu@bAcxUkb&(E3dl3y!>S^H?MfvOU<S&+xdM?;V`#pnsP|02r9J_
  5923. zQ%;LnnplY8c8hK-J?7mb+<|Aj<LA}^PG`N(aC0tr95N^E(WL!SD)a99YUQWC59SSC
  5924. z<msz})gfo}Zx6Wlj)hLWf9v@eS3MYQ&vmV81HJF<Dt16W9)(N&|K=)7Sl>FE3Tk9a
  5925. znVM+Q`}dv;&5g~@^uO56lmHw+<G*hG`OZ|-<2>-MH-FWnXUus!+vol3d{^JYv2{+l
  5926. zJZAf>g}xrkLg#p<d#)c9BQ@7$YW9ES(cQU6E>Vh18%lL?ma*M-K_DWA?eHi)ZyI#k
  5927. zKK#*-nZN&se=uMC;+LsLg8&4>D~Y<<CRXl%Og?s0UI6DD>dafsI!Mc*jYLNq?IDsi
  5928. zcHVoxx%sAB%mwFfF|T>`tEuLE@bDp=YUsXp{a1ePOJDlp2LybM%?CbDc;Gn==pdgN
  5929. z!V9zQjc<JOFJE-wg)fCVO@bk67K`(3sH4C%KC^r89y7djj0ggWm}Y^1h8h*&U(A^z
  5930. zS%3j2=BXc91_M9=Q)v?uM}clVWS;q~XPVc){`KZ%Kl&20baVxc9GsdwCS##pZh+&d
  5931. zl7Nh@LE}&`l<3!9EHX0WKyL{OeF$Vz;C0NLng;GYdLSn$98NTF3I|1%Sv6=w0#SCm
  5932. zMmtT&RwYZRJX-oX)sh%Cp)s-mpD=T3HjiYs+QgX3JQl1|MVjmg;3-owvsWww%|cI8
  5933. zTXV27Z$N5(3!(B-F|RF5t(;!a8OS=7l8do3r#b@EoYstaOmX4n#Z)3I9?HfOAZOwD
  5934. zyV@&cE8~<>!=>e+VtGb{*k_e8X|m4Ba2l15k=M)Hx;c1kO`g=#PhLi5@>$!YYFW9y
  5935. zIJ7O&eUw3MR^CsIo2rke`hBa>1xXJ#W!*3x%|N4`lR83>k^#0PHa+tQZ<%6R%|vP_
  5936. zzBzsjhZUNvM^-c2R8vhQp4juJ25D)CE);T^cq?<$>lNfl_slg$kJFw;4aKM<@%Rge
  5937. zCt}SsPjba`rkck<o`9?8i)tgRsU~2VxG$%6{7@tqjV)df>c_*TZg?$44>a;R(Ozb<
  5938. z4^MbSHYc=|OU*_`ocNY7P<f0>dqBrw50FhU)>j#UK(;AjdY=eO9lF<=De3nW0{7$%
  5939. z4UHH-FhuY1nNNMjy#M|0Hy``NCn<_qj&pn99B@)Hk8|OkBJ3~3>w_%0O`Dk+hu8P`
  5940. zac%|K3ALr0A)?y8eY1JpYhHs!FdaI4#G>8#+^0YDtDto7QTV|9hMP>grca;GV+}sv
  5941. z4dCfVnZ~<@VxOB{`qG#G^fgbu<`;C14ZdU;7-Bo`xtkiNTChp(zxP3d^K)??j+2Hg
  5942. z>Y+I~MaDiiK4x`g-k`Y7CV(~#J*VdB&v>eN^P7Llyz-SV1Hf4hX*uT58)KxW$53hx
  5943. z-vMuMd&$!5`eQB@yNLJh-EDRQh4BF(IqU@j!vRp11>GcbVgjhxr;sTJOceOH3yaDH
  5944. z5jbqwJX0R6Q5VMt!|~Vv$JatbZE32a1%;)Azr*ugWciJN5kSJBQrbMoeI_`zx=W-m
  5945. zOY0x!N4gFhfKHla|4YX}dp79k+~Z?iLVQF(_Tm#cJ-iV;9-q_ckNB=p24cf~2{;&<
  5946. zt#lVRg1Ad~KO){vY`jCpkKw704m9#oOBO;42h&?J%)}tVP1&W16l_q@jKJUVd1O3c
  5947. zgUlj%qbr47$0MJuvfA)S@MJ;(u9i!DlJurQ%mMyd508WA1x8|geHZ>lW0~>XandLC
  5948. zu>f_y>uHK+62s!!=t#i%(fh--Z%HuI70ic^#MjV7OV8uVlNaEE&uim*c?P<O*If>g
  5949. z2Ex)+?dE6@_dtj#2X8I<0ghGY7dd`^MgdRi8&*?8_)kkdC(>Qbr0xjkYm<x&mjQVA
  5950. zSuMDiv#7$6)XDG^q<OgZfff;@dc5T;8u;?Y#DHbH!Uk(8T1Glw95Eizc$Z#dHo)HM
  5951. zJVtmc1~6>kCT9!pBTnYVb%vkO@&c}C8a=%yo)2ASctKktU?fI%J@26wTt@8C!;O#r
  5952. zUduB8;(3uo7VejpxO{Mu2v|7keW2}&gcgB~r}5kfKp=V#j_)v}{Gl}hS~tdk05G<E
  5953. z3?_}PWJc@Carj;ZATUnq_P({G1k_+-$dSU4_d-ONlhl(@<^!M`IRG{XU-QwAf6~17
  5954. zJ?}A}1R%nQW(Blru!4vY04l8_2u$PSOw)$>Fhp)Rd2$+rk?%A&Lu37A7o2Zi{i;`)
  5955. zle4pF^4Kv8j_Kq-eei?7ym#-zUx1I_3*V>asrfvnDYwTAcq-5_rm4GzO9!p`+H0?U
  5956. z*2{kAc`v*U^gY|q!-D5&mq1PD!3Q6JMk$uRxo_vaG^1kG%H`zAAq^TEJ(1agsW#>I
  5957. zXAeB_&A|xhD1@Kq?>OK5?9cv;dChBo0z%XEaAWcHC!`42Ccwg*ii>O*x{hgOg7Mx3
  5958. z`O<IQb_cLhZli{+dx0jo|G-{z;@AlStQm|5s3nmNVP=A&rv!9i@}|@<;oNwgMehw8
  5959. zS@L{68OsEpM~c@tOCA*y0&jRUDjnP=)RW)|IlKT!$ni1J>%i#qk7(FkYKsv7SP?Ba
  5960. z4;wQ`WaMSj^7vpma9^@i82uq&A#T8=c+<8BEf@)UHhgFy@a^F_KJsyO;QiXs8MgnC
  5961. zZL7X#R6kk5FB2r?!wVzS*)m_)hIpPyK(l@yG%UgLMev44B_qfoFyV6;a3Zm`osOqQ
  5962. z+eLpzu=iv*13nXv9{}Iv_ZD!Do<Nsy%j57bGV}ZzLIf|LkH^R#8m(^@8Z6&OT$gCz
  5963. zJpA63OW^6)9JRUPLWzvv6fFd{Nc4FGu#xW_IWL~COGKlJbYGloONSpzRAc#C;E51x
  5964. z9UTY+*}(T2uN~btx%GIyWTT@t^;Q!@Q)&#OOV-MY7ZfseZ<35g4;*Qu<K!u7!w!8f
  5965. z(n*d!i}wYNV8_wk3VJ+3gimdjfFT72*aR00_Y*pkQA{NNTt(sVTm)W>)V;VyL6s<S
  5966. zhPFh{<cy`cX*@iNu0v%KC+`BFXFX*vkSs8O=`S$;IKU0(c%kqxMjac@-C(wFf>w)j
  5967. zx0rL!JI|a8(a6Z?a#<1`szsx%as5Du?r|4D1==!}i~wEwp!x3*{ru7Y{l}o!_As?>
  5968. zMCov5<&`#pB7zVp@`JNHzG@}VvDbh$<x<K5-T2L$$!=Y8$qp(jOirInP;RgX_8;E;
  5969. zkN@xwzjpHE@vj^1^O-es6%HO#@OeytXMq%(m%7e6;H*FIb+3Kne}-J<DBgVt6)i>@
  5970. zs4RUGgo&6ky7#^Zz{6My#k6rs{UBqFDAMq6Q{JVJ2M~0QK$wcV@6B&|gZcTl{%g4K
  5971. zmry7?4cvQ7fjQTfbP_eDnxPS191q>U3s@&#GS`3gYvwlK$M4?#kU4zx2(jbv^#N)+
  5972. zE!1%nL(OtCIAIhvMMRIXZMuR$&anp=1rV&*p;#wwXoqnzGr0l?YC{4U5j1dc%wQA(
  5973. zSQw8z1&!W%G2OVBW8@?V0Tx{7!2SD)?G@QrjQ$*0VLQNm{1$%3IEDRgsbxglXtS~8
  5974. z2e-%rrq6egA^?*!FYLpjM~VPMsg)=v;uxCQuw$d7BTzuYiFVX=A{`fX{*&=#VO>hm
  5975. zsSyp10ErAFQP=DG4@Sv>qbUNuNM12sFIQ<B1VK4GUybH+H(io*z$it+O5d9r(Q7E5
  5976. z>k?bQ=&Nf$Z=n$*0|OdIylz&WND2yGF7ra707zy*V6iFJw!GdO^*6d=Jmr{^XV5~!
  5977. zJ0SO6cVcK%9vr6yZ78=e$(ssV;~Gb&$D{K^o{lA~#d{FI8n?;uYB$y(uK5mmKLW@M
  5978. ztJ&%BkzF<VC|O(-#NwJnDC58;m-7(tyQzL1N80%8=mqQ@gSG2Mx<|>X@`Okxk%W+?
  5979. z*xkt+(`(>;0|Auo!zis_yeCsT@_GuK4p*fNj7Gie*$$pbN9Yj_o5{Ud+8#0^07h%p
  5980. zt%BO|7IX0>7n!RsyV_j+q$|z3^_%Egb!JYICR@KKh{;UJEP)i919183SFbnke8)S?
  5981. z$3OW=A{8L<fK%YC0D|=&1VHfI>Ai-B&|acy!dg;4`0DjHn0*KK!<dCj%u9ek1x@n_
  5982. zMm5;`@7wj|5B<|W{SMf`JA`b|DPd~?pC=6PEC4zx`neha=CYsr*KhsZHRqgj5v~<5
  5983. z<{0u&)8=PC`#CcODXWKf@22o}6<kCd3p*p-!_>i?Qlmhr0)=?f4#J?NOE10H{Oa4^
  5984. zZeIN2m%w`rfb=-0<Mbxef`gxju*L(P)%DkZ-F)buKV+`|%Gb?(_umKUxk+jg3+TC%
  5985. zQnkvh^meMdoR0Ex%Cm-n$)-S?o;HkQLq=&b*#`7%pUBQytsTi0jpBV8*|@Yx=va)@
  5986. zXe|Am{^lYXjgD;Ej4}!(Xt3xQtazMqa{}hE6B`GO3Jj-m5>dz_foTMgc8VNcJw*7e
  5987. z!yA@UeUgU3D?!IzBB3Zd77bRL>;QV-Ug}tZQ#DQuR5Tf=jb>O9rvUlw*sphvO?X!s
  5988. zNP$n8rRZC1k;RS*3Q+onfy<MZi~!{<-#z_IPoL>1WfN@7Ktb2b={RJQ&xtn>8gK?O
  5989. zQ!@SnY@R>|Vqm&w^nQ8ikSUaFVCeqP^Q@esM0l7UOIDM9vF2ULYVnjdLeRH?BkB-)
  5990. zWP1!>$0S~UlJ&)BFB)zgL+Ln<v<<OD)%(EoB)*oe3Ec<2Z|ttXLlQB@z>#P>AE|2`
  5991. zZ5u(^vVYM<hXkYZ$QPIEe1W2HihI=aVKy>cN5{@xka<{~gQIt*(elA^G)mWw0W><<
  5992. z3gQF=-M!9LGEJ7&JifQqBdJDL)w7%&3p$w?d2wme5iqt$AhZShuS>_-!gMyRXBHA3
  5993. z9%_TC%DCCIX`{IcS~Q;XoF6vNefCo!-M`9oXMqqkJqgFyGRE0C07PjuAR!=g_xFGA
  5994. z-R3=i{@)<&x0IM~u^Lr@={S50ze&Ux01KPx&xIy;RCoFESHDga>}Os3RC6sTT<_kq
  5995. zmoo4-ee*_Ox_#z-@D>li_lZ9Bp2rM)9xLGKM<&p^&UvqV<*R@G>L)$vO`(ee+}aMC
  5996. zr|>5I^G7}cy*S5Nh5|O*npLYPXL;%r7Vu9};jS^HOg9xQJdA>{?(>rn<^0kw{j%A-
  5997. zc>@7X3?WmKIV=xw^OlhT|LkWzWB&GU|EKx-4c~+)324~>ZeccNqeX(0A!IeK%3)+f
  5998. zD^ZN|a<{acU^x$usj?*H6x$<Pi5@U-^duJtp9@3?@j^LuR*6}XH=QUY<2sUR!FNTr
  5999. zjP0Wxre3gYCyma~%SC`_B`1><T?PyG_=1+Xjo2Z0e*r;ph@)g#tdsh=3JMhGoD1ik
  6000. zffkFSPSSlCjp4Nk4Ux=p+?2*aPt!$m!Mr>VH-EyE4c-^a=}5Zf6z#AJpvneO8EABk
  6001. zBO7q}3??B|VWr%(M8}l~m`G023K}K3g5vd(=%b_n#oo#|2}U_*D{tE*xvz3f*rO1K
  6002. zgwchz3nV&h+cYD&vbu}^?x<8o#tof`4n>~2!Sufxk@Eea-(&46nH-CF>DG^qlV=De
  6003. z_!^8_DNWofE<uL9E%mlQ5tgOs*vU2K#gJ@=0iGhXUY1u*x>DM)9gV5tt_G1qAHht5
  6004. zY0Z*@g$@nZw8R;c{pBSRVxVWTg@QA#8QbCY!{iNK$moa$&4_Y5L*xQFI&rp`%fK>H
  6005. zobu)LAVz^!)_SW;VH>5jIb!3`D`+YYGci;z0<lr35nXuxHuL=FKi|COm9I1#x1PtX
  6006. z8xjG{8OZ?uBA|5O7~lUle`Bt@?zbrWgLUvI-i0dSW4a9{F`Fe|Pc03^95Cmdw+)(1
  6007. zC(Ji)yqO}_m%Q-#X6yFzfo8oA^xitNpZ>(h-+u4Tou91gJ+V*P?X0KV&MNRMP}fln
  6008. zwvAU@cEt-`{$sEHJxE<af0a*A9J5%k`}oH{X70Rer&$6QbPD8d&H<rMZ2FuAkv!z9
  6009. zBU7y2kY#w2B_;<J)_&tRe%-wGwXdgKI#I0~(<dWK?0`t<jo<jH`LjQJuldqfzCx_D
  6010. z4)p%acGWfJ!?qlrWFi};YFrRzkK@Dz0zr^1pBzRPEv~HwUWid*nIJAF5(#XNN{k|M
  6011. zRz+4f)v2&B7H`1>ciIFn&J;E=8Fj;+nr>>|7>+lFSJM|WK%nKdvyxsAubfNiHKr!5
  6012. zTIEN{DB^KMjq{osW<jEYVvK>AWCBMecrMI_U_t^J_aNi~@v|(ytCh5t5#2dQ7F1G(
  6013. zT;5?rAqFQ(T1WyPjubo_Y>g(cmVzul@>Y$2w>Sq@(u-Jl4y8=dh)jjJ#hy1<eX5~(
  6014. zjx?Rt8^{m_83@RpGs-1}(8p)7T<F&|fN6kkmD}u1k>LrWAx9(F$!RQ!yq(nrCTJh&
  6015. z+>j$lqdRg+FXToV{CliwTN&z{yk`_HoaeepX52~ijn_4zQza`;Q)-GBc+M@U%NWhX
  6016. z#zf~CMG{BXY{-o9;viW~jdm~{5(L!Q8KLwVA!0`&QbYGM=yf5i!&<0sfLK}6C8Wm3
  6017. z1|;H%Cg)MrucT`cjI>KwN!7*b8ah57d>kFQ5V_vRH7{lRahkP5w-??6>dG{30Z?EQ
  6018. z5CUMRrFrvDzR7IfvdwfM1y_$RDYlNw14wxK;0OP~y#4LJPT3!9GOb-=WxFi_q5_sJ
  6019. zkSu|Kv~Alq$mD>&+s<8P9HuY7;$=Sysl1_h@W^3z^w_ccKlJy1|I6UCe-qx~fSmec
  6020. zPB!q@U3cAgqppK%ZWU^<z5Wev_${DJFNb_EXnzKWpmY1}x0^3te?184Eh7=WmE$XD
  6021. zaU*MOYI=$QXs)^=Q&Nw?4Y=~M%guj#?|aOPAhk9Np(_>eR2Ch<2Z;lq^Y-wbedhPy
  6022. z{Vwxczx_Mr4rtoK^c~iHD6cA%PTF_00W25fX=z!mpIA1!+W$ag1}voFW|Z7Dlaqux
  6023. zD+`c3|G;cDIwmimgH{xobV57B*E#E|@zZ?#6rJEE@KWryQiCDpoVce{SCR~5TNrhT
  6024. z8Dz?OZb?eV3+2{}J{Wmcf`D|`(dNw)$sDMs=*aC4D(0AYb`ho~JW;fml}1LAz&c5!
  6025. zWhjDWJV|WOlCZj*L<_iKDHL)X4YlOCGI)#AF>=fl$#D4_0fYDsL>S-#Jb@1q4uo<Z
  6026. z@Ps|n*d3%bd?>!Z4h$nwU@}TIlUhQ_7SSuLm_=g4G0TlubzTU<-sUD{X5PWE;ISgu
  6027. zOI?Vs0&fdiUsCIibWKXCE6NT+55J|%w8%z~u6q>c!AV_C)6bsMe^yBsq0pky_#<ml
  6028. z`Stp;(8e^F^!3m&GMsol7mPA&%F#J`_OY0KF?`5sOq9mLT2H|DuiBF=QNC@a$0ubo
  6029. zQmvved6QE56Gxb|t}(*EJ=N9FUs7Z(Bjg<M1xda}sOvHl%cqi22<#zp+7ah+3BpHe
  6030. zb5MP8&->l+9=7bA(=pI`rm`Y41KB4M#}>zVVCqm9l2nUS!bI1}K4sz!jX#0!<B<OP
  6031. z#@BB!AOG;jpyo4ac3gN7h#ZemJ3({g13Q#m=rO$FswbI?FTT)x{_|fT<$`v*)o5s~
  6032. zN1%Aeo*fDzZ`iQjoCI5X=<rceJ=k&Hc@*mn4GfHfi0SOTyLR0z^y<!hHvVj3#aWGb
  6033. z=1H+B@QlIt*4Mn|C*F4D<yXC7rZWSrB*~AA4iiJ{fB)SFh@U<MeKAXy4iOh00S9MN
  6034. zP``<pJ2VO}Fh)WzdeIBaAN;`|n03G^nLKtRQ?m8EFibrK>9dc1<iqCo|KJaSrhPwn
  6035. z8_rD5Oi|wtHfT}IkhG913yQo~$3<0}D(00X4@6a*H6s%!Rl$C_=KYI@S^6@9FvPOw
  6036. zC21Qk-a9dKk{0f}lC)uuFJ&jh=M7KHC|ml!oY1qIgV%g<U}||}Lt{K-Zi|-)fHUDq
  6037. zUlN$1M^$Es=s23{VL>D|G95`uaE?LSi^NyX&5InCMDZNySX&GpXc^{C(W!<GI2~Jn
  6038. zbn_NPADY@Ae>sPjPCH;T^NH_?$)0l*t<l76Wj;2~DbCo){9x4P@?thZdLW0}H`7NH
  6039. z8Me5-BF;V;K!O^ruQ_IUkkk@6Jc+=8!Ar>1&Psi!M3m919;)Xwmz)bfBao5q3M0#g
  6040. z(sNqMT&_`hiAC6~Dlgbvk-_MlqIg^rp6fA@3hS0B)yjPHL5LPy`(iRe%+Z=Nh4GfW
  6041. z=g%(eaqjsMQjAk@FiJOfJe8{o8$;HN<+@f$5{k1SBoQZ37O@30E3zc<=(&<Q$jLuR
  6042. zZ!3w0fX52}#xgQPGHbc7EmFO-OBsz^FcmU>y_S)3A3aBl8dtP{kkA6wF503iFTc$E
  6043. z(!c*d%=3Quhk?@Vh)mV1l7Mz^WZAg++~+=P{>|I|E$Fo!BK2#m-`2jr&Jx1t$2e9$
  6044. zSPFHYyYAja*`TLA1qcsUU7hwFIA~{~hW@!v{mZ}GwQJX>4a@4xJk}{Ucb20a(-ZYL
  6045. z!%JrcXbxSyef#-uI5Bw~_97?~4Dzg;&wugrgz%?;P~Zl56gA2~U{Nf^G^c-=3?(tt
  6046. zrp+5(|2p#*?|rXX3v(|{96KzHVFh%CA)4B~=YYBHH~*vg#ee(nKuY{R@+>E2PUPB9
  6047. zkcu(AcVMs3sTUqg8Y!8o5!6z49K0G!-d`Yt5!q-bTjjNbwpYkQmZAaXMR?88l)new
  6048. zNW>y)iLneWlTElKp_NlWiHhM-TOHYhjqDL?QQaubJQUEWJH=w;)C5@r(`5z^Zp<K2
  6049. ziT9FvYH@+tEBS?sw|ciJ|4y&th`{8CscxE+Rovm@bCQ-KBi`i*je2CV(zMG>uTjYv
  6050. zlp#ao-=%0E3ZFMBfKa-zF$h8a9>jx=Oy3pbMfGc`5wK`>Vv~_i&WjK1^O9!JNqMq8
  6051. z-7i^3m{RoJ!hOM%Ef&?CY>A}#yjB$IxPVR&l7|%5qw`g&g=;8uWN1t^DyG~{%mWJ@
  6052. z^}(d7Fz$pf!s#$t0_dnzUA2i;lO<|A$DB-;x2_`&h$BzlNYNk9m03cZMxwqboSw^#
  6053. zW77Lmk`gwX8KGGR*+$rRW29M|XxvK2U`N5pJ`CD~n@Zo9k9^&toFlCci7*iHqtjdw
  6054. zJPySXye4%0yp<Golp3usO9UgFHs2cps3f%$d}`MSalz3wv{C!l)JY1oCTleZBJ+r+
  6055. z#hDB2(UX&xQv#AKq*$SbjaePI9yi^3i+SrWzKvLH`+-m}41J5-tQ;Hl?8%9P=DE-P
  6056. zA@e7H`p1+VLM49fMbs~>jZce`3vL|jC&E^g4eQquv-Q?nZ!`P$?y+Mdqu{sN^pvMv
  6057. z`wQ?MNV^-A<cRCjgL&4z&ZfHMe2t=bBCCJs`7iiclCpt@7Wmhq^!FWie9PPiv&FHK
  6058. zx*KNAFd+X4xQI9cHsvaUsy%Z@G%nOhh?0Kl%|B`W%YXTO>L#8%b`+Q$18hizy*3Pt
  6059. zwQqd=8|D|@`d0Ivzx+$0riN)AE$cLefZ;5GTgZ83swrSDmPiRqThx$S`xZDI$JW+U
  6060. zZNf;Lz%`&GRO_y;#S9)PUmYvCY11G_t9*MZpyeorVq+N@T$EpDrN+=ow(5h4Ic+BG
  6061. z;GBnWQG<XvE66EeSk2f+iB4n_Cu!DH8nG%3ga!|XCzg8Gkf3q4fMn?vN%TupB16or
  6062. z|2!F07-h5uY^eN4K8;j?332JvqYVPkhI@D@=@K~rLn|MGYV3K5V6B+uz@RP62piaJ
  6063. z+1%u*g>y;!c>zo(^_Q5XAs7hwu%%v=Sgj(Zsy4?suVlfb)eWM`bFITib^?TRo*7xx
  6064. zzohF`QgU>T(o~AqPUDtP={L~5qxa*UB&{7}I(gu=roCb8&Ty}j-X8)EWCGIEOze?y
  6065. zC5FN%j)1T9GSR*Ag*wfSl_aH;#MYE<4Sdh=o(3Ugcuw*9auS?ErRM9zEJi2F@RBOd
  6066. zswGiaYg8BWl7~<<63fz(i*E&palgloT-(ezV220oL`PBpBFE5iMq(}Tk6cX)NmM>d
  6067. z67opmlG1sx%H9NV0Pv0@yNzb=K)v}-{_M}p+W>&RdE+;sw{Qhzaaip{z^4Uva^etZ
  6068. zO#Tq``TP-0K*bUTsx8!1Mzn?4*iQBoJ_}11O9rqfa@-sRm4lmZxdkcu4tpqvMu#ta
  6069. z@{^zX40zc}2^Q-5e75WMEQv+BvlQ+0OR*_^dc~DjUj5WH=d8UFaRUloB>stc#~Xl6
  6070. z)`AopX|O?h4Ur#FSt^8Cg+NIHSi8ZQIzRI>KW*Oq?st;MH;rfy7n8;z!-XblA+Xl|
  6071. z`NRKc-uer_2vowaLIJT&B7C@7i8_io>&QkwNs}WLqCGbhV&4d*NQxK&c}+p8+G^){
  6072. z(>Awvo+hb<*i^^}y}DT~1U;c0H+8E@#8RZJ*q{e+r$g$|aIxCBZX06;LzbZOWO$Pn
  6073. zk4<V0FT=&}l{;l}2YayGeeQ{REA@m_;w4)t0+5P#Hg`5hRjrN_g@H`x<8-FB-`bc-
  6074. z21%&XJ{96cS!l%r=S$>sJ;2fW2pN@<fWMX$+NvFwBSkhC$#PE=rZy?q?U-CAF;bh0
  6075. zGAvCJGdY3_ro4aD`jDhrBB>NO)4WLXp03o}Ob|w)e59tNoKc#4IbJWoZ*9qb_@)F~
  6076. zZhw?`D3cHreHBDeiGguINFq{|=Rn)a=G8dQ=ZtM5|6ny0YjZ^6b9b^jBDg0VYnsUc
  6077. zQM{g1ZYN|?2u4hro=$S@`P?*T8S*ehjSBM`u~t%=9AS7Y#!DSG%DuGJ>+_CH(pzRz
  6078. zA#*qdB3IVAi@9%)*KXwinI>(W*9&K52&gr+ZB22o@|xlci~kM+c>w=1HF=822cP}?
  6079. z7tJsJ+}p^Gp*?E@F)CJL=P|;WI&sLn@P#ijfB1*LPpU3BJ=r>zJ5qg09HNP3i`fnj
  6080. zx5VcAu@$3c>Btx~>ECbed*FT?L}x>%o6bA`yte`qZX3M)a#NP%oM`84fX~_1^REw7
  6081. zqn)+aJo%|VhnIN(beXVzgAvIsx7=!u9Gd`%iWYe-0cVn*n#~(YHJYfXiJ$|U2T}b^
  6082. zZ+fHo?cctRHWx-Oq@hM54gxh%4Gxc)_rLFb=KuQlzf41!@UG5+7l8~P-UzZmqy`bS
  6083. zNz*gMIb@%Q3!mh1OCb~sm0fBI<<ts#WkFPPIlIIjZ%Uem5$&y<-m;?CC7sH~N-f3J
  6084. zq<Km^(L8q5siGQ?=(-8G5UVKhw#1^Rt@By5PeUo6r^1A@L3T{4ASxJchBKNH3b``C
  6085. zJtUE8Q$bigHWiOB8&t8oP6<}>*<H_hd)4i7wxr=~(esvIkPFFl$S#O3rxQwT=?UTP
  6086. zk#2rZR)r|?D7`zSn|WD28zDC2F>ATa8cyw$_*YV;UhZMnie4RGTatal#gmvkAVryC
  6087. zh{fPJaa7cUa6!oy+7zU_CDLal>EoeerIfBjmdM0Iqtf*hvAODc^GNX^aPMX4H?KvF
  6088. zU{Y0Zz;*7Z;nz_8GWYJQD6<uvxK#R<DDC9sF}^_pG|EVCrp0X-5ay?(urrO@<WyAF
  6089. zq%#t}<=Hn<r;@a`=IuzPN7#1cuo#n5dsJVIOwtK?0i>*9S2PDp4`AIuoM=_Cx8iMc
  6090. zGOd$hAeTHvFw|Czy&Sp9agg)DbuU{fbWlH@Rz0oOer@gnBtU@&Po6wQ^}oCC-D&>M
  6091. zUwXUwAOHP*U^`)C_Fxly5XMiPoG>qc`76!4-}O#l0<Q*!ZkJPYRZ~5_2Az7;xWs9z
  6092. z2+HH2wt(K|Ew_9NAGb@FEJ^Kw!PVD3>sdc6Z7+jj!yl8Bn>)+VP7OL3t}TD^lb`mK
  6093. z<;#~Ng(88#o<m6p6zsg~?mI~;9CghQ4LY4pao<u+n?`vo4yoVxhS!<j`mO6AI%-pI
  6094. zk8AlHQeqS}Ff?lZ;xFH8uKQ2FX%6f=NEB>jkI+=nAXHwFAR$_@_C6%0O7rJ(=Qa@x
  6095. zg1U9K48lw<%aUka#aLlvB{hIHhy3b&lAxz4o|TcDdPM%ebfZUUI>ll;7W6ZrHwqIf
  6096. zaqgRrJ&L6W+)$cQ-EWboMqs7zOg#pc1y;LGj@L@Riqt4nbTLp0g}q(%kVC9GN~DfN
  6097. zJrniFiHcsGVo5o~Y+w1fyGine+Eat|izF#c67Gz7b8@h2MSN4vC-8fyN#zWeV=p?H
  6098. zEJ&KN`@)PuVNZ)58-q1UqA<Ho8ZhyAlPXg1`>1D|<eDb|d1Rz@Wi46tqLXN;l_U*m
  6099. zvlWPEPoHFoRCU{NWJ(cNmbT#IjnYm+(EySTV#?ZcQG`~t*|aX>Ybsdlb$Q%`D~?9g
  6100. z)S?2LEm5l0Ba`$=aX)ULmV`3$!c%>-2vyr`e3PjLs#3I|^tpU+5~W*Vr&{R)<5zNf
  6101. zn+W8FN`fe`c(1bIG<r-q>{J;gTh*~R6&r*h$~~~fJE3cCZQYQ->(+BLr_Ngzl(n3a
  6102. zcBFe}vPWf;)CiNDk1`AcX93XIhgRb*H5#|0){<c{V9yV-EYaCM2sP^8_>KQ${^C7<
  6103. zPFij_4Y|mKaXoAn2G70rHLo(i`YXQ#GsU)oj@uwByO<&ti@%?O2K`QVRx(U&(41Qa
  6104. zb)Ex2xVi^=8;8i6uUWJHHNZYTzpC{-CQ;90QRC4R8w{T?Yp%HBsy7h2W8vSha32nJ
  6105. zn>>CJeg@!~ovGw+>aw>b!-k>bGC=1ad&SGmum9SwnsJb$z;F>q5@gi^>F|C3-@MPf
  6106. z`yKD1akK$aGq|Xb`Zz1yHr}!?7^L?B!N`!TOknD5<lYBgX?8_LoS4KLlEynRShkvn
  6107. z5@NLzyl7;lQng_V9&)Hp?nKw;G=sC{c2MmpNG(A&QM4-eQ3NLG|0$U)b!?3E`y`35
  6108. zG;!kCd$ct_%ZY#Q@+QEVl{2X^E!A??ozsdf_Ri63_PJoe>5-O>8BRt>*jm4mx{>zh
  6109. zPy?wK!>BxNA#N)jI<Kf81c+GJcE(FbzW_c)1`<IyDUqAXFnckuo>*Bar>vYe;<;MV
  6110. z*CVmf801=T`cUr`k^Zm`2%~f7Wm*GQpSda5aj`l_or&dMD)}}o^pkHx5-nUra)y~<
  6111. zj?zc`f^JM=e8r!yyl}3$u|j}H_L;1&uJ+W#s^?AKBUmMx$g!Yf6*(QGZ9b_w*4nGb
  6112. zdlQn&`W%dgF-IW!8tU6g+EhKuWEGvO6N|NBy+2cGVu78#XgMR0B$cWRNV-<kPQcCw
  6113. zM~#u&6B4HjsfMd*?Yt%fr7K&BqZmB@;3WmkE(j1o98>Nke@$yDL{XD)lGaYyDYT}V
  6114. zA%qKM*5(Q?Z%3u2Gds0IpXVeks|1oH*$S6SgWSB#!oalVHL?bhz~PA#=6BxxZfF@n
  6115. z@EIn1SIdN<(~cRVSN+&4&FfzGT2OAe1O{cUCUTaxeh|n)+6`rNPR-8Hbq6Xn_Vbu;
  6116. z-SKU6d~(wIHms(B)@sO5JzapO{a8gk?kq<;bunt}qDwEoa@qK@ZPbwq?hWoGl>5H(
  6117. zt~((*0h%+-zKMP3z96dOXoM{wwD&_W5%jG;_ZG7r7#R#YE`tsp#u6Bt@Zk@A(7fZF
  6118. z?*Qe4qbxZdM4luuEt<@WNPl31DQP_kIIvJ+;ILgSO=RsUl7tGpOv@}6%gmR^j4>iT
  6119. z<3@4f<;rSGu9niblt0Gf@-hikx*|x|tS#!zTJ%k#2pmPKq^q(gQ6mshmKIWg4yB{w
  6120. zeOD;YRs=~iCIw>Rm8jB6t;C9QGM*~~aFWJFGIFUTvRSB5njOi5<jrh_S;ogJ>7~Ff
  6121. zpLeR=Cg&J?=jDjCN?cPSFH}C4VBSe#Sqv4WGL#%-wGNP|X2DxuhzQchm14*@f`L2=
  6122. zAX}~WaMVP#1*a`9k~#?zt+JQvMUg1w9Ev07!6hsFFpQ3UPN$%oL0}iyK_ImV#}s8L
  6123. zKybYxrCg&>*`vq}V6w5IdKFSw=YFbSyUhM1xt1iP6?Tkb;JA^bk|Z5X0MKG~6d_F}
  6124. z>q+%P3iX*IAb<1H*GBK-1Z2c<<M6ByK(z5cNS(-53`^>Zi`>(uvI|7lS7u?gJd>_F
  6125. z@3I;Or4ohIL2Dr}9ELVKAC&#Hk_x4L$p@o=i}&7B1Fy@}cot`6<#5(sbfRMzB`VUI
  6126. zqRDCMDC|m&aAT~}cwz%^9pgRmnl`Lbew<y6bbNtGgOZAMdL08XN~z8`8^BRNVczx5
  6127. zcR||i{nTVnitV|H-VvbS6y+cNk(ZcjuDKfYDK7?@o(=T36br`_<;S`+GZgjUIWGZ{
  6128. z*90`+-+Rwae7(cxuV26Z6;kV2+5<f9Y(+ipEJr(<X2Ss!%dfcX@)rXWZLp2h3F?oD
  6129. z=Gy=|$6(9=%8z%6r(O(Ws?uvX1LL9#F95FjRpzBHeTli~q8-%m*$YuaBO~U9Z+y-C
  6130. z$KSjT=8hlcSu^66MWWk!-XJ6eBIWN?WmZvqGZasgwKihzDkm8Xs_$s?SK|HVY(wrw
  6131. zYb!AnO))F<)DQ|&fYMtr=3;SDDyJ*71O&0Jgz6$T0A5?*9T2#=El3B07bz1>*C8N~
  6132. z0zH5a8Xjiv2>T#t<QAnDD&@jId4Fxg;-=DAm!z~z9)04}6ncYQ5ccXOR<P#F7;^fL
  6133. zsj8Nm<_KVumvfZsRdt6WfKbslvR4?YoH}E8Vbet`p1aWtMNllpO*Gzu$#pMId!(!}
  6134. zrvY3La+8hB(&~`32^YM*P|vyO9GJaDYSDb{Y^=77q-`=C+65&e=lOEP=o1T0DKZHy
  6135. zqL2shoVtO5oBbag)ez`!9GR85M5wJt@9u-7b2-v-R--#M>RoZhq7p`kyuy@l?_Cyc
  6136. zqw6H~9qPSNfgh>~uwOxua3}-`N*lVOabcD6P5NX-9FFUrEY3;kQ{q627MtO5B}uAv
  6137. z<iO>~N|K{K<>-Rw;{^KLpT^Erl8D!ddU>D}l}Z=UXS77oJ8>N-O0AYP5M55gk(1>`
  6138. zX<f7dm7X73j^&|3CGQ~V4FWGMf}z9Yg+OGP_&{2K%Dc48kko>b6*(OOmB9NI6F4E1
  6139. z0eV~llhidTQOtHhU3${|=5PMC`S?dZK_JsG<On`sPd9AbXrA}n=YSIb8kj_SAt+>T
  6140. z7AM2x<}OUP;ruX)8sW2tpx0;Du6v<gbduJ{z>*~!F1zB2%cTFZ7j(`_)Z-q5Xa`s0
  6141. z$eJ~4u3o!l&83`P0|5)sQ@iV~yGYIf`Q_HzIp~EO0vn$Yu`jyl0uuau@-<Ip-?NgF
  6142. zph<pEY}@_N9`m2zX50s345-<!n{q>$rpUaIZQ7<%zE#aJ6!7#iz{;>NB`e<eJeNjg
  6143. z{I#)@f~6>aHqtRI7pC!F1_J4&A+0n96{38KiZpfq*Mg6d^TvEFVw5LFOcaWz`ty}C
  6144. zO7t1zBpuGB(a5yXD7s#Fph1i_dA*K{%uLt`MK~mJ9|`KQSkW!xlo?Z3i4-Tp=e&_r
  6145. zByOt6DGHvH5Lr!tq5|O}wXBewxbRMC443janLx(UXWDFwv6MHxmw>>BLiv``xe-H@
  6146. z#E6@~eN-+}!+8D;sTv54mP~*X;Zvcy2JN{I3<@1}L?TNS=?DssL;b|)Yf+mUeWeeo
  6147. z$`T{H&ZSbh_R?#mh-+n?AwAbg8jzYYUGaN@m5$=X4iVP0u%5(BYL|=q6x~vE0{5xK
  6148. zYp@mVoEe_v<V3BPSYdHR0c^fER>bx~ViJMP&Y;#+l4i!ZF;ZTaJUc-|X~4mS7}1AH
  6149. zu|OI(RRIC(ML{BZ+yy!Hl}arq3Dpf90#szzw3ZJwwLRqCohZdHs)@=u1f@O;C0$xq
  6150. zr7mT~A(VAS=asl-DQU`}Cu^jER9Y{RtXY#-=T7TY6lGf(yhyDJ{2WTP;(qsh54qGO
  6151. zjo!Ei;aa!zm<NuoIlA*XHSNU(neG6q7np0m`fLAz2E7eI<Wu)^VwMP5!A}Bb{nAS=
  6152. zrN+|j+qW6$p``xEOsYUp;SNSVvoP`m6t1a_WeVn=-EW4M41vIe9oTg4mKPfy)H&QI
  6153. z-S)WX<LTGCGxDS-U2`GGb)Q3_9{dHR9Ug`;14yIB34Yz~tn`Cd#p%RD*e--fXUBQx
  6154. zn^iDh;;B!0D$KiB&OlW~b~LvH7Q&zY$)B1ped#Ok{vMj7I$-N;?wqblrMw`bbh=wE
  6155. zMCQS2lFq0}&s{GOhh-JvC|<C~ji%EKqzIg~5S6_npWjvLtgzOoe+-)mMX8u3rn;h!
  6156. zW?Yek)L)`1|H=kHPzp+?aa`n%;ztKk1Yi+OHB#QjJUu!@VXj%;G(i-SgQTtSc)7`w
  6157. z;VY5sKQ}!Jry?&w(ijV-0Bv3gi8dLf9lIO}klvg$NG9FLnxfH?ffrB;k^5rE(-f4n
  6158. zCB>nIWV)_+eqAYEOVcY2p))1AQRPh^>n3Ewo!+VJ0#8Nl#3@*9?@dOeX*jYB67_Tw
  6159. zrxPi{(^N}vB2y#xLehaWM@IUAl2Fm8s_5i3!o?;)BN-QoGDO)xyG0rre;ScQjVxsR
  6160. zhEXqCKwQWUsnyJC8mXiB5LK6k>QTaf%QceNm>6v(Gv_i>%V^W9H$o2Ko*c>2=D9+6
  6161. zuu%vVyodQ5G0nult~ETNqbH@PGugs&QHDiQF{*P~Ph}^F&ecf-A6eeYRc&)F&ld8c
  6162. z;2uPOmmMB5T9WEQ@m*b&DLaxfqsMb!Sh881gHy9PRm18Ikvpyl%!5c=IhAKsQmc%@
  6163. z!)JFj;tfudGgXAm-U|YlgJxK)iSOCB$Nb8#{|8VlI70o4z4e|J^fo^G+0Udp4=T58
  6164. zhH}M5h=iz>q#7kN+nu5Pg2#=F;Ct@77loKD*5OA-M|W)AvgL{@-DdmMdLC`M%{|I!
  6165. z$1D)>EQS2w*3Fx@Jj+U+9W{dxjd7GUiuW;yh)X1SQS>$toObNkZq7e%I~2VDfG)Ve
  6166. zT!<+)?Cq(^yKr{~LH^;RANi>HtM~miG)1+6f;bD2RhzR(mF9`lzA>5U!G&Q<3pa}F
  6167. zJVnwN`Jk5@oTNS2V8<W=BU11S++`}BcOVJ+sPkK7E=!O`$P(5w;IJKal18&R86GqL
  6168. zOQvg*_s;Lh^%|G!PKFE(#|d8hsU_v%<T$9juIc+!B>XdSBw@2f?#=PSieko3BtS``
  6169. zeHE?C6kL*o3!K8FA!S~TsO0Kt1aN7H?RtqEsHn;zOeDH%${W>*C|9h8kP(2=`$qz?
  6170. zAnDIMr^vJDX=bRg#GA>JigcQ%WSU6BOPU<<_mD+c6JJvs1z5$<dpV!TDhxqN(JYqg
  6171. zME)j9#HCU|a(vN|qv4X^VW|3PtR6R;9529_<i18C97MLnmZLUy^KI7MilP<ARN`1_
  6172. zKVJHxq~_7(SeNB!h|S26Nsx0^^>CL7B&<?RgWe)X1YT-!6j5NI+j5Oc$#+2o9%Q~c
  6173. zF)0hpj;<3oxr*cv0+0(i4Xq6^shUX>MQPkxd0x<zcp2jDq~;ZcWI*?wh(wWQ7LhW0
  6174. z<<<sqT7ot;*i<wJT!{_6r2TnJxsyS4jCfZ38?E_q3f!_@VvvX~ux=rpH>Ia}q)JjC
  6175. zRc$w2%a%J&DV}sm+77Jf3<{MWH)2<mEdV%XXS?+B8^7^Q^Skf<T}aUlWFS%SnTF_P
  6176. zGekMpJn1T64iD16xDD$!(2zK1OKk|(TL)@Bcw7T8N@4QElsSB09}M1XV|sMu#h7+t
  6177. z;BkFG=X(<I*m>A&_&v0B>-KHS$H%uPF3Kj1dJY~uWFFe{Fw_wojhJ?tQ;|X_QV6%e
  6178. z{D^H^x6vH=70Z{yg}a&>rFiUXNwKvcD#EeY@BYufM;8yp@4V;qRc`mtq*`ot*VAf^
  6179. z<?p1)W}NiM#7w_oPb#X4Q+A<!gR^gPC>{hi$Z(|6PR6RoG3!0)Rd+!pMx1znE;rLz
  6180. z9lH>;D<d)>3eg}+nWHOQ=P06Nv8s`kPDiPDsU}wB`7^O41#_dKg0YY`d?oXfbCyiL
  6181. zP?7@HBB*;^<YlzZ9G%HRn4F$dun<`lCuu~(qMKIgUCvAQzBHHC)ZfIlU8&88`nM>e
  6182. zdc&j+p9c|WYEAn!yhL*x5gM79;+2lBh4?5x<9m0Vc%p$ul{*<Y<RzN*^>mzAb=PZ7
  6183. zKdWO(>d=d+3`y!50!q3>MHQ6Pq`NYR%m|AN8!$1-#gs9Lj&djwbZVeFN7^T4VwSa`
  6184. zuB^oOM*<DTG#*te5nL37bBU}|$U_V@8L1;Mm_VUpNgR)_5O+PwzM|S^j3VX4&A>Rq
  6185. z+=f&Pg=L3=L08ha*2sIvcmi=0&`HU4IT{4V=|?M$0@ra}uIopk<CB6z)aZ}*mx~PS
  6186. zA$Vbo%BT^FQj(1I;A3i`Mq`vLfMgS>;n*8VOP0=IK39_^ktp4)#~h5PaWIjAN3-}G
  6187. z_1Rb$=5!rB*O0Y2Jt&hC)8y!fz-aHO$>XLCzyGff{GIv7|L^ZfrA6ydSu7MHpQk+K
  6188. z8XyX+foKM%m4YL`9wsnj7AZ?gQ9ZBAZWTsla8Vz;{{b_ALa*?ol`B_29fF800zR$z
  6189. z0O-*~J?<<3S6z6*GRnxs7hQ589PqF#P>UY<u3bA#w==_%HhP@MR*@C6e%(5=6@X_c
  6190. zs7Pby?gcw`KzO*xoSHh-NU@=G1oGM612f6*x#w;o6QI_cRfbFt(3E1dsWzv{bqY-@
  6191. zwZv-<>iI^O#UdMeV?x=j;3z-O*U=WK^m3|0Gd|Q^9mNZ+Uhk^{A$k0f4Mr3_4j;XE
  6192. z=~cMyv?j|F8Z|FM`S!?$IQSye>C~|5Bu*@*8?JZw<Qjv<a^FrYqLLv$qZ~Io=dlcu
  6193. zi84BkA{)JU%*b<^E)<c^Km+XLn5;DA#+av<>i7p5S8XKHWa2TuR-lpkajYJn7bSBe
  6194. zAj?rAPq1XoD^im%TH`Sd@kfF_$A#Y*OQT_6i_DRo(fV8w4h=HtQbksXrd-)38mebi
  6195. zpvz<jBGl_sXuv@{nJDx{x}Qmhs|%YdiPo501ulh&V<G9|qN5i}N=Y0pbRdGJczLQ`
  6196. z);%*y>ZtzaRp&yBinfT4ve7bGm0AXhmwgy{Tm;uv9Ix%Jrl+LdnKSM#kNWJ=y-20W
  6197. z)(EMB8mmLzBg8z#&+B?goAaIIW=+0k1Rm0u8>7!cv@y$gMh2z8`@u@CFu5{2D9LqX
  6198. zCb$#8=Esz=iK4YMdPADRZHyXPbK21G;6^99S6P&YoEOn2v8)b=Ai%Y&BAZL<<j~-Q
  6199. zY~SN2j!_i)2fz16RKgelyQw55w3k><U$JtPx$?>@X)X_nFe4#h4MaVoBcmK$Csl3X
  6200. zbB7T%W*_uFP8>Ud<7!aAbla9~+qMeun0e|vkA14G52>Jzcn}eR7Cy9X^Tu<p#uI@P
  6201. zO6bXU0ev3;X$J3FG{lGutTdnDMPIRE9138YK*nK&@{?m@W9G8UFB2mi8j{~bOP8Bl
  6202. zZobic;Q#$Qh=vA8p?Uy-Drrh7)u&c#+Lt5NdWQZn)>lvfN9(w$F_tElDaoeN`i=D*
  6203. z8!i?rxM;H%36EA{f2=cQB+3y<!&n4igLLBuBL>u&(l{2%P-mYN%VHMSR6QuK6FUtL
  6204. z>tdr=KqDxY>88{G$Hm-A*UWLMa)9LM)nK`D&10qZWh4dHs$or28`0zlFAAVKS7xz9
  6205. z+0djpn#Wk%+{`CrqAd7W+VYi1CN+zs=`q(-dx@3XAVz>m1y$Q!;5rhql$;f&ozx7a
  6206. z)>jvHoi4c~_f6{;l9%EU)v2mMnu@H#lS7Sys(>#uuDE%a21Mtb=XeB!)asJnSm}Uu
  6207. znYH3_$GmP2Zi<akCgk<yvXORqj#SpL?k1_x=)RDYApCtcD;MzkEzCcc(~(J)q80d1
  6208. zp*?y@5AwODJc3rPtK&g$D(q@imrl+{!JC0dMGRdgQ&4FnmB<@az&WiO^5G?yCw=5H
  6209. zqLV_JvgLFXH??BO`#KqJ6;%L)fQv~bPI~Y{PLfDEIhH*a1+<)J$Af!SrJj{yu92y1
  6210. zI6JPvs2C}Ye1Ir<3WSvJfAC)O$AA3CB&p-8lqE@wLBr^kS6psZ!$3`R=CKYwJTweV
  6211. zqN^zd7o=dtMAt5@fey5yJoNBG(u`!6Zr{Fr$2<{_`%Y4B-$}&NZ_4QKs#R;&FIzc!
  6212. zVOId74Qz^o2M++L;D`W7qKJn!AvQ4q3UA)Lk-!F(3^3)kb?X+hal<-7?Rq9T71ts4
  6213. z_W%6(d(5$k2{ScylAa%B!+KNbj%wMoZ`_qSYLO3#uI8;ZLYpKiwY4&g7mBH-ZfdFd
  6214. zSWjA%7o}Jhs73&`ZV<JcS9i^(7Cuj7a;l0_RIz6!Q7oEaNoyE3X8Da!Wy$iKdjZIL
  6215. z&Ww?o172sBqZBsuO7o4?=r<K*?lqjI7V*@9Z;?SGb0K0$Q<jF0m<?piDbE5*P7%s6
  6216. zd0H>8m$@oYr;BP{(A76nqCQE*S*Z_k*M2i{<1NJ}+)|gq+uY9*V~Gm9GPa`DkW8+H
  6217. zAVDCs%8d-Qwp-+Axg`y~d9-#Fi91!yPPu=UjjLtDP9$=vn^AqC)@>n&P7{IU1_v8+
  6218. zWUZdQ6(*RCWj%TsOHoES=<NwianJJs3UIeFMV}*fuc)V^5uD9Ma<5m=nLOJ@Z?Dpg
  6219. zqoRN<j|pBIwcf#&#T;vgNa^Y+3BjX8>@+f4;WY2XNcT+J9+c@5lquIEf=kh^FPV=_
  6220. zjLG-kSC5t~Kol~OjGdzEWTP(Em>ocu`=8hq_0&tq$C&S*<8woTRzO-bq{==5lbgSG
  6221. z{g<J&WEqt)6nJJp@gE0dUJ9iew3CBS!oWH@Mm*!=%UMROF<g^bw}%fL;?^v<P%Fn*
  6222. zUI7u)M#F<V=ZknAG0DK4CD76A)!;=JU9=t|ktJ{euy+TwUr2~<2D@uXVVV=h<Q>6D
  6223. zqQ20I<tqT7S~N2PDS#JWd=Yt=HB}JnJQ(eK6{d!M_A{RY=5LoIaf&GqS;4oYu<CSJ
  6224. z%C?)u1ykM}wlWSTXKPs@H@P~^Cakb1I$i4BSB?HbI!t<FP-V*a)F6-Zps-4lS~o^1
  6225. z8`P19ZJ<sbJ}0TQmPToF?rNlZmCx)?mlty|wP7`-307teWx0Dg(H2pCRdFkYVqm;V
  6226. z#2D2uGlgv@#>!DXyg3!dRX=OJggezuk+>Ip>iQyu!-m*YpDp#BSWEFs@!sd&a+dS4
  6227. z&FE88fEq1iu&DBJ<e-cEeyD0_jd~iTY-7n)#=@>7)}BU{;-xD<cjfx3t3>O)6-}74
  6228. zewynxHrATUH<7_Y(}I;|ov$S`V&neP@mO8kbt;PK^-Ru*eT@c_Omy9fx_fUP+LWj(
  6229. zN_{QgKUWATS&%zP8-f738fxwMEH%?4vNKN7%&uDht|zTl-K(6B1TeR(gQw9S->YcU
  6230. z)p1okk7KTL&!46%t<R&?lT0gCFSq`$mC;z5xrkzyoX}!pY_26GN;z?Eg4D;HWJ5j7
  6231. zOP>XO%Y6qAn!oz1zaiilKw?0pI)Zi+l?+D5Mk(q+8;k#fj2X=5Sz03pIT+{^O-vl8
  6232. z(KKyT`Cq#9!j&smo-4hX_G~E_oH6k9u-W>757H~nS-WoC4i8GJtSF65P19!Y!@C(E
  6233. zG=VBYnq#A*Q0!Vo7Xx#UNF-RdcCFdGX(I`SHV6eRPYr8-`#=6CDO6)KsUPq~<ge2E
  6234. z(1n+KWn3kH+z^RQ)jST96`C_RgrfaegGF!pDbyNlhP%*<{CPADU0++75z7CUZlUJ8
  6235. z7n%K5^^rFD2B7G%aqi#bF81mpjP~~D8EI<bGNU<Gk(+CrTrHMpgw2%;&bCA*`7G2D
  6236. zTi;_g6L0X4$}z}hN;<ep(-)TeNHWhmmO#>)(BoWGqlX&Rxbm}={*|t&#{?Vg7Bo6%
  6237. zh1qk}wT|T)w?b}%A*q<ucuv_$+0gscxQeD*Cg9{20-=Rl+cQ5%8}s!sS9^GT9zpfQ
  6238. zGGj~Y359}9eM?=_cu!{9MI}(?skQYL^VK!1Y-q!Y%U0Kw5fJ(8lg+eXTim`TAt#jW
  6239. zm)8&V%7ko$ZF3@D<GvQZfm2T|PsXXOcdWASvC%tcvM8<+0LrWK`J~vWYZgZ;<P<xP
  6240. z;|OzuqZliGNz7^P5KNB^VHRPm6vgu@(P%rwhAetcS;~VmFz)5c;E;dui(dvsn6W%U
  6241. z0l@$fK<>X36$+rAl89UQJJx&9mLko1Ib@m8;crywvC$r0GjaH^r9p(=Ejw?=jukx-
  6242. z&v(pld!!N1eBeU^-ymAqykY&i%h;QVq*j1}phqChM)SwD0~$^U=jg12xeyrPv>^Am
  6243. zWDtR;O$|@j%M&UUR`d`s+PV4WZ<;TC^~>f|XSz%kGnFc`6l84dxw%oMfY=&!s(OJ$
  6244. zK}ig2x0s8%;kR6{RBbZVz{=rjl&OZcG9|VGsX8TBeZD%PsVAtE@yL0**i@Udyi!x)
  6245. zm^7Ay?eUpYwc(R(0->wffXU8zbt>)Uz2em6n6niPIV8yX4qe@7A}$(BIw{6Fbg&I2
  6246. zi$+?{RdPG2>S;<f%=US4(ouF*FcNabhYs7zp?6caSde7$Fu#7Wr>P>gJdjVNjH-yF
  6247. zH78lXW35f~_tbN}RpHxI%%@!GN<8?@Hf~dFc+3<n_n=0ov<2xfwP0D9f>2*4jbIyV
  6248. zPnd_5jdv9-*_tvnp}?g+R*jdiz1Ojy4U0_zPCuiR)1axbD0`=em`a${)RE$X)=tvQ
  6249. zPQctYkIS~yfsAu!U8Opc;*=LDM3Hh`n}ulUm6AHDPWmoxP0DP>;tzI#6tK^H=))f(
  6250. zupEGTPu;JB{X0n3;yTX&Ir!MT577+S-=w`=R_N)l7mpk{iuN)E=#yKsX6<%qCLJ*S
  6251. z$0a;scH5&#we_p*;MWoe$(F(QmT90j1Jlf+Fz7)D1E(SCaXKSH)P^zi!(3wv(l?-5
  6252. zO&0}!M~R18p&&16`2FJ_{g~OmcRvht>#__)9Vv+WPBhp&l%=_V8-j*;EOU}zC~*Ng
  6253. zv6PEWzRVrmsiHmF`J*4*)s57M8sKUgwdqs1@1`;uVUCGQ^`xKbon!CKadYt?-!6{K
  6254. zY9LjG;@a$YO{GGdML%7^sM>hR+t;APeDJdE)$6sY$0eF=-t=WJh#Q&unxRlR8(Eao
  6255. zg?vwl6_*;9O`c!&2}|On|DU}#f41$a>PP38YwvSzf0LW$0ttbHK(GO6M4s{lr34hU
  6256. zY|-*-sn4#;(pOq#`GaNiAE>4Npq5stRaW^d`(6P>It2uYAOw&;0g@2X+}zymoW16F
  6257. zb98f#wRUrwyU$H7nIpAx&)IvQy;nQN9AkXO=QB7EzSJ{;iPvgyxvTuL?K$4`mDvFK
  6258. z*bP3HRTZ2g46gB<x-iU?JexGS;|#+K2Y0x|ds}Hw>f~%U`dgFD<^YAs=VF61QZmZE
  6259. zayUa6Rt{2Mi9d(imIiYK-5`g?;27TK;*P%ydYAbH*A+#}OdMcChW=sh%3?nH<U^sz
  6260. zoOpNG4P0U@C9f`pQN|Q%DN`j5Ak^#L=E?eU>{Hnz3m@n~JUB$omTW9(MFow(s;XYu
  6261. zv7_(4l<9Qd_0D&O58g#Qn8%80sZe9}j2OQ5+H1M5L-1;9d5F(F${7$-Md@e(Q2{-Y
  6262. zC2O*XTt;cn!gbeQ|NLB*yGc>Y3xm#HGoSrtJmYMK;{M@G&2a7E!$)8%Q!(Tn1lr;I
  6263. z@4sI-!=UoIPO~o0i7ZP^)Hnp&qYQ@{xzz7Dl@E@e+o81a@R4KTp)cGY-ukw;W|Giz
  6264. zLG=oY4v4W48%gs7!CkJZ>w|6;RA|tlP<4RPod*~?{c_(IhYbY>k6OM<PF)n-s?Y9n
  6265. zpDh^iF<Mrj^&f;P32Zd`g_10o!lDbDI>;tc&s4_h=SoZqqGGKzYb3R)a9GewFm~di
  6266. z9b*R~%*S=F(-JTZGB)NEa}E*IgY@G|%ZBDBV8rrakt@Qv93KW)&%UsHFV0Ye1aufZ
  6267. z`*HA7$axJ)MHfTMdueceOq0OgJKIV(Id8{}_Z{mow^@#|PsvDZLkZvralzfUT=pJE
  6268. z!Kd~?D$;7WD3a_2j0bJ-Ax=OKee#$_-{)j?OSXy&HZ_&izjq;nD;8n#?y7iJUp_Y0
  6269. zcnm&!4NToL*bkm15+`M7@ibpZ)}EW?X*gg&>2dxj^Kt7Xl*~F`lrweJdM)*%(s*4*
  6270. zq_U3foN8=v>aavbwLO8s{n8mnpMC=MBR}@Pp9uf)_P5C$rVDcmJOti)dTwDbJ4|kC
  6271. zP>GEyQin5H^O3{SzKN!^oCDB>^A|EP>7(rI^80T+cI?;<K{R?`LAmW<N^K5Cy(sH3
  6272. zDD`!>+;Yq9bP;5|?>rNiMT&AC<_iygVbHgrPdb)UJVLW&HBxPOZ3cS(%{Se|$hPER
  6273. z$8@81o8cYrdRLy?`B<j(-clk<M^7HQLjR2_6DBn9(NWy{rFl(5OJ+qnFXh&Qx<+!O
  6274. z)ZlJd(2^l)S*<7^V;DDBoDNSdzkzYTO<YFg`beE^<0K4Lz;<tfl@2kf$duq(OJfm-
  6275. zx5>-`W?7X&?LI-hNle~AN<6Uy&f@l2sBZB#DaXuQ4O^(|twe_dH(#gOupIW%qpIq7
  6276. z!H@xi+iyfJn^YgDt_N%Q!tpBF0t+s2+-|cBR5H#6XxI-*Ur`1(W!j|HPf?E-*f|9O
  6277. ztw<Y4MVXUk5K&N=z3V|Z>9o1UCE_?}4i^x0h<3^95y1sV7-SxErB0|>6DWaYvg^9A
  6278. zE~Drx1q<2|@H#JvYds&F&uZq%rM_Nliys~I23Nr-!KdtMR~8B2?xWt()(n{AU8FXq
  6279. zgH#0g7Om%D5V&izvhx24<2yKQs6~EtxSZmvr>qKUMMnTP<33=0ov*L_VUOl4<?V0(
  6280. z_sl@>aMt7*mfNVjcH1*=WmFseOjJAMb16U(+ciB`7U0>aH+1&QS>W-PX?N_FXWe?#
  6281. z1)dldkJKC}sx2-kx8=%Lciriy-SlkARu~<TcZ5oAXEU8Q7(G25fT<wYq}DhU2=zp=
  6282. zo~J$Ssodc8pn@q;LgeS(@s9t<LF^%A^9R*H2}MaW>CZ_eb(wKjdnzUw5HL81v~vtP
  6283. zOx(F9NGZ*rIx?qR7z#|&1su?(xLro5%mOefb>X~&vpO}f!f7Ze5cm}{*2v~_Dl9bX
  6284. zabA+G^0<ql6G$1+f<!DqN760s`)g`tpM_AJKiKb+1-`HZcy!$MLyCJ;1k|9mU@#_=
  6285. zG`3YX)J)L48?zCY3OSZ?X}u-wxY@Dp2Mz3Ud^8x8Ql$&l;Et=E+<|ZxS|G>5z!2uL
  6286. zGZ&R<)jSz4I%?TaG=S1*t_PiDW?5XhIxV`i54CJK*Mq})bI$-&n`zkd3SOzxFIdo@
  6287. z4R`)r)&yao5>h4NQ|~IK!oS9gK-77jQ6}iGQIpA?mHui!s=)f}9K&2~!nglQK2tR=
  6288. zV3z7`C%-<dtk>2CvNvMyv#@%UdF>U!Ev~BMy4|DTgxKav$)o-0%2fDp(KA%&9UW}D
  6289. z+b8md?fm?m|MR}^p%49UrqbCQpn~aV@~<S3P5yNw`&?>Q5VZSHUifcpOv*xAuCbIs
  6290. zT#t}sHqvO!Gj6{5#!v}Emm%AB4XeH!aDo5Q%wn^7%?;OGf5&#_Riow<1r?gL@v}Iz
  6291. zO_b?SkRe?824_1PjDEZ3<jIUJzjgpBpgQGd9(a1-f&0UqcfOy8MZ1aM?k$sH(E?hD
  6292. zDOR4E&%Hu%$G!jqmZ33a@>i6K4%GF@H9}F#QHsI0Ra%lkKGRGu7cJI{50n{~1*VD&
  6293. zw!DW+>b;a(K)J6(V;)%ApetoHpF+8Qj?*h)ti4GXV5)jKnljHoE+81K_CW(pl@CFc
  6294. zfDu{{&IJ1!48b{n(B2o80NWS2o}ha3*!NmOs;I3Jl>Cm^_ROF}CSiTXDzq2O(JGsA
  6295. zq4#qNspeFzS_-wq8I)UWGPq!c@RIw2UEP!t$lUkV-jJ0YV=z5bJzJ$$h`6Bqt>rV}
  6296. zM0HZ%AOw>ThJjCMrV6uiDF=bic6D0c%Dd>|w}vW&`GqL>+EovO9+fX<qU}3|dj2dB
  6297. zS>Urph{0v_`%+hNDSU70wLb%;nz2$g42ym>B^Avmxh$j0#2pyNjx`2X)^no~R`S+s
  6298. z$}&trV%B3l1E={T^{e6HY=lI`P#dHZ*X!?#A_Nu$rGudk`kleI1ppMVVWl}cr&zN%
  6299. z>s>=tXmv2i!L>??%=diyp71|8_;A&vtA3ZNNY`Y=(HpM6K}y5f_fl_%XRm0+CkGz@
  6300. zsJCXe$1<dP`{E_8Gv0W^>1XHn-4N=nwD11TUIWiEL>tfV<Qn4f>#w`+=*1iy48KMJ
  6301. zqwf{kN6q9MWeLVdJ3QT(aL}OxK*xusYbhwDgacqf&hx@uANsJ!9%yaZoQ#yZj4%-k
  6302. z@02X61z=fpEkGTq-T-t>&%k)M#EEq}3t=jVGe~-)LuoXcR(vVEq~Ll(;N+YuvW=y*
  6303. zgX-E?X-(<bYZF=U{04DGCq;~!0%Mol#U_rkbES?7xRL#x^rICnN`T_t4NBlEy|kkK
  6304. zp|E$Yk3e6u)tOQ1qn=@v4+kxA&4Lhs3fvltQ$<#A)bDpU5g%vPS?P<4DRyDlYtx&N
  6305. z5kRwAzL|mb?<!~l{PLX7v&eG?)fhs3P1uEPiE6MlOO2p}lEMg0!L_8$Ndvp}4ndtD
  6306. zC@97J9SjP$G1N@cNG0WOQG%`S|3OV>O2?!uwv#~uoKmO|<rU`yt`tXA2CUl^?6`NK
  6307. z>_1<x;GAJh73QtSt%vIT1DH&Lm2aJM)$_sElTx>%s`fG?07C6?A`E(;sHHSHmso-u
  6308. zmhv{1@)qbl0mAvh`#=jGK4vrBZVgoC%=wx^kJ_lpy?#L@3j_!_aH&wM6<C2pg<t?j
  6309. zS*=|I7KLZvQ^``7fTGL`?!19R)j|ofVCdN%9Z<ngnTaJ1&S!#9l1#Wr{FRfb423E(
  6310. zn0)V3Gc_6YcDh`0n@*-&Z6bOe@yk=!OU`7YIf*!*69*ERJ9_Nst%s)5YaGDfvQ$ZT
  6311. z3_J_^JByHQhfbe<>T$|sNLCdHSdi1RhaY~#-R#KJ+Z1dl!qU$ZhWAOG@rF#{%`iWx
  6312. zsi8H<?)tz7!sj#lfyiMixgbrhC+TrWfblH1I%HM=3d)P648}5<CcIrqC6Ngs#cZ%j
  6313. zMIw~%(clTSF{*6F!8CbdEq{nQCpbuwsa4j@ii=`V%W}QQ+cK0JRCiuiKM8%$whq(w
  6314. zTIv%<<K%*u>e3`B0bm(4jH7mFC&ZCfe`ZBVp^^ukuL5SJ7ItI{6mo;~CE(f0yf|qT
  6315. zijvM)0aERT$;7^6B*tzy-4R_!1}sSFDj@~c@e#qbPH)t*4`31oeQls8D9FGrSr7+V
  6316. za0Hiq0+zte&K9r`Cfa2rnQ1I!q9rHL3=DN1rzjZP5pkM4!AYd!01Jw>wXRYNWhJkY
  6317. z0A-O|&`nV?S<B`MG||e!RYm|(#b76=LJ6fLj3qna#er)1M6`2UzhmN><t(<Q0mRBf
  6318. zbuq3gu`aNrfigP|`a7l4Y1-HrOTRO!l4w~sDZf}PMcMXil|mU8u)|t@8wA~wxbu<k
  6319. zR1yG;eL;Ws6$QX5oL9;u7F030^1I&4q1UWRkbcQh^v;e)S1J!8vuzazteJf12mRr?
  6320. zs8p0~tU-!r$~d5_=zCu1e<({?-*^85+P87eJ|Cacr*Bjr969(<pPi9z?31UOg~>oI
  6321. zQJrOW7&w=M+0i4%ZaZ}R_%&g%6!sOF<MCf+sQ6<~eah)m6i_lvLr?H%(uFv4_EA}t
  6322. z=;P2-gAO6tDClUNkpkAKJkx`&InMo^e1NvL&Sy>VyLgfox=y)Qbdp&G$7Bdhr%=jF
  6323. zhY*m8!e3>TrVD!}nucZG2V?MByRM9ur1q+Wlbw-%ps6S(A>K$v+b&YLsWd5j=Qtu$
  6324. zyhD#e7^?B(Ai61<B+8QI=CvEi(V@gRfF9R!K)o46v&0-?Qsm6A&0bd6OxD>|iRfA6
  6325. zAkSzW6eZ0G#Imwe-7t+WSa|n>1Gmle28>EYgD^x>@w9?wCY%AP7K@2e+j=-Lv1hM=
  6326. zPDvo42D0A4kRyPqeWo%8kxIFy-Y+rWXzIjZ%&~$fOrWi=nJpw6(TSzJf)PsPDry74
  6327. z2s}kuR!gD0paAWWqxOnKvxg4d#Pz<QOyH~ZgObgns3Itva_wYThT0W~JQf$h*QrUN
  6328. zE5s@lOie1QY0)y%h9_3&75dUn-xtT*n-U%-x7s)L8ebwrWy02H-7HKjtP?nZ?ika!
  6329. zFazku#5kDl?@J@lm*Iw)LsB9M07V?3pU@LcAJsc3zhfCL3swI~la_uk=^b@U#QJ%$
  6330. zECTG9$7p?6EaHlmE%9#Az0p;$0-Ep;)Y1;ia->qnFQqjZK8K3B<!a$1d@?gk-<OB>
  6331. zNx~aoIB=e;Qn|-|l(QUSCZLuFE%50aQ|kjFs5)>yb{SYet&-g5q2n?=b>hU~5wdL=
  6332. zwE94MJRa|HJWH<L%H^2MA4E~~?Af!KS^8Y5Gj<wL1wX#YWj89h5wYFT3^pKm^#El?
  6333. ztE`;*-FNQ;;o~3s7(=XiRURGmu`~WDP{Kx`AxUX8r@~GsGBpQXt`nn+iK1a+M1#q_
  6334. z-^8~d)r+$JEHc2MAcu@vUKwb+PzJ$*HdmRt-@36XIf~K9J(I&ONhmc<cmq!K4hfXp
  6335. zO0?I%2USyr=mex<D18&#79-fSMtYA>C}((ek5<r-=UBWh|1C>0W6c=E^J5vP<zp3x
  6336. zvk2XwgW!kWQbi5Az64-}qgolQ=;V~3sHHXsqU#(l7H4IB-ImIbQfuf?niAkU+@n%z
  6337. zm4_IVE6beFkPvBNwEw+9retP?sppLc%mPDK!5AFOgIt^FhCB<4cuf^b9|ueYG-!Fx
  6338. z^|)|^TI*|wA2h&impiBn7`lFEm77KxIKUw;6EBoz%#sa4hTFx#i7$e5u53l`6G2t1
  6339. zP;=+_!B6-UY3Wc(f1SNwiCB%9q_ZBR-W$CJchDf0)UWg3U{cm-EmRsAXK6d8K_{Q2
  6340. zCi*z^lAX$Vb5FALl=?by3%1A*ZXB>{)&jGs*Xs5{A8S_T+cvR|YoIcdcUr}mIRH_w
  6341. zW$yZUfqm+O4?Gw?@u^SN1x4wZhj22_Po6w^oU=pnuY_#tH24_UAQ}8WpUmxx7xP%m
  6342. z42kCHw%cz%rhzA}==1CfV6fjFkAD!N?O2|{xota3v(9D-D8)OUGnB1NQfGBm-bqdC
  6343. zHo3PWus+(+j1kYl=g<I!AzL>IpUWCPpSkBAU6FNRBx@u8Pa=9HOvdVN6s+GV@gR|U
  6344. zns^v%)5oe)lQe^hoY_dZjo+{T3W=tJwx(2Z_Q~X|LvXU{p-@_==oWnj(~rkGXx1yS
  6345. zVKULGSlMu8Ns2{=frF(oD?|+vy!wYuX={>-snr{^OtUb|S7#1Tf-@L5ncifBTS$91
  6346. zm5!!vXL5ay)Q=#%4*A<z22o_f)1cvAf@2D<hhPJHb|lLYm42Sqt9z`>+w2-KdPWh}
  6347. zN3r=A%c^4ZVq!fXi{8^FmA)VrMsJp}4yjatg3Dk)^py+9QD#0owiwFs?LuuKsfxPv
  6348. zWw3WtNwHj7og31X#7iBw&H_oPrLt%UBFj!da_xqya@p&OrPqxH@N_>=IMwL9&B}cx
  6349. zW$3ZH5czYxPI^@;E!U<yXLd7mBEw+E--3%F%lc#}P+iHZOm~-jnNjaE?q~E4*=ENM
  6350. z>+ok3VYPbDl^7L_POEcpWTSwJ0sP!ggtCxCR|SDos}H@E2m4s%&u!lnSkz;xtO_dG
  6351. zP?(u)LR2+0Ai3Elv`nurf#1+?Hdhx5s?`mR=j}ds>3o)<`FIw2n`!S3%RO``FY-@j
  6352. zAQvt8CsRoTCakdAaS)<`eh%E~x2b18ySSAo!@cpw8&4{-4Z>yew#9t}oiHl3O>*!!
  6353. zly~Na?X0&$gQMiSY4Vk(UaiSafrfEFIrz}fXw=Esn0J&3>^3$Afya<=q&4wChEa1Q
  6354. zPJMM?jv<#Xnq;!W(KX%rIhH5MT4E59$y6xmja8R!%~?#!L~U9d;?z@Ag3LH<I(Eqo
  6355. zMpE`vN^`L=Cqt1o5N2!RqB5PBpur{?f-d%sIXIRcmG!JF4}yYYjhgNG&^)Ad<eQ8{
  6356. zw2T5Jy8c4w^}enpDi-WjRn_F886=yGS1IUHLK6)XP_8PUd8(+U%5Mj!6sx3(n3S_h
  6357. z&LyNeXi-_J<p54ByGlvV2`D&0GSx}nmEq4|{W1zjMaV7|M{IHwe*QLsQqE%3q0Uqt
  6358. zr5@9n2BV~zD=$_;U--48?~_WO$F8To)3Q?^wQTDU`le)?RCh<8n_$JI$H9<MUwFa#
  6359. zVR}~vQ>#{#EP6T>CPRlqNm_0$v!;D4L8B0EYGt6a@1x@#!Blbzt8;Ihd&(+3v%XrY
  6360. z@MuF!^7R^mil!wkAsXYlG7w}R!tCOyx*QJ1$%#IWW^865Ip&~LyNLs8EYw*blT%4<
  6361. zP&$<W)7#?R=}uu+d8cN2Uv}j>wj?JNx%H@v-QJ>;`VpaL3WWt%IBA6yzpMD3T8vCW
  6362. z%ajn6=r@I;N?Vpp$kH>P`qZa#f98^uv7J#l?b?&qD4LBPz)aUHLdaQA$8<Wj-BfCO
  6363. zELW~*CNukZf>a+}GRL#_QXA}0Zkyz0)v0T)z4n?*TLPt~XnF43xjaa!s4$g5pqeA~
  6364. ze>lQ+kux6p_e92)8wF0;uuh0ZK7IG6Gpz4iL3BvNG?kS&OHB9GA%d28O8q`Ym4sI6
  6365. z|Jc=&nX2<OmBUUQy+1OY1~XKmzoZV?r^a2V(#aMGAi4T_RNDNQibLnmjWr-yFfht`
  6366. zbLObEVo22?Kv6AKWzAH%pHixiSZ){vLg?*}!Ge_V*i4G>T`WY1+zaa+bFoHy+Gf_u
  6367. zQRZj?6ezWbHtNmcnG-P)IxZ>2S`J4OyYrJ0QDwr5BzN5}lN!Ks4#Y`xZr(-$jDrd%
  6368. zE6K$YK;)RpvGz16Tsd+SL5f3>02@sJPCyP^ZDrB7+O<l3MLgOHy#iarq4?}MnIu5b
  6369. zh>>7wnL7t_R_d&JH_3GaZI;BYD;o#s%lv&()@Usq2W7)W?O`hLqj%dwIx*z*>jDXw
  6370. zpx2Il<-Nvo&9ihyU$4RFO58~+2G&>QVO#aeoyO)#sb5sp+N3>@6l!0WnX|S3WrG5#
  6371. zmt&I@M8Wz=$w^y7oTFz-%1(`1{V;Aczo3;21B*sbVc&2IO}>{w7mrbb0sYM9En54g
  6372. z*9t<aWTa4;;(aA$qUUnvDS(`Sl*xXho;O;>M6D5shLL1jq|kis++*Cc@v}UWd^{=R
  6373. zvHm&_k<#_1(CVn=Hq;S|t(-OGtPKbymjPh6Qg!RV!3CpQ-LmL5$pfLASzxHUkcEjT
  6374. zxR8!FVZgZ+%)Y<lAVbP|l=;{W^8{^v5IwgK%#3KuWwxyh<NM4#pXI0v+C7VLFg{tQ
  6375. zlvA%X7jsvbE(+^OHw_do_!dmWs`Tw+=~Y1TLubRnuW6Jd4GOF{8l&qQ$@87As=9(Q
  6376. zau<B65^8p1+65UyMI~_$v=dP>-tN*%Qlwl=1H^|h2!mG8gJw?FyXe$41(gKm8oELl
  6377. zAZaG2H0+aDr4%giTVV>Sq>g3;s?Mn^z)I8aG>lw2MCAh!TSHY(mCptZhS3FPF3G97
  6378. z8fQj)gM;3zex}=klJ>T$xQwiz6%AG738EtRR0Y+S8Do_1=t3<0Hi;6clt`1Rv1-*-
  6379. z0z$IykDBp-lx{(?=jfXLs1CJeymcW`1m?8#8+CDH;F#n<1*sI+lE`HwHzwfA#bp#U
  6380. zmYycsvF3~{>1W!)MsvlO+@JMj(G*i%P+6v4`mVOfDOqAHi;7@@(XwO<mLZgk!B+LM
  6381. zP>HovtWqbP(@Cnqt5f-UIZqZ4XI)j|?G=n<!EY8*xk9-d53vM?E)@FuIyG<iZJ+df
  6382. zny8$X>Oljqiuze*WEtsz3Ejl+Y;g(ocyytPB?hNznqnO2D<#b)sg8Qz{htr#GPsKt
  6383. z`F<duq9oDhOgE<-WY`DC2?r$d%M%Se3<x7XLxE?DBxo`m`|y#c=J#y6A=0qltY@!1
  6384. z9#{aSp5z^w5W95Fa4@6QfM~TZ<l3MOXIayVcg&D&)ZZZ(A2Au^AyF{en-cU0pl~7F
  6385. zpIKM=29Hvst+$K02U9~7U7J$An%l_=C}wu#E|f;3*G=iQ4xUmP5eB+tkRfF>Q23G(
  6386. zX|-31`sjvN6ECOxSe?nFABw19tOz~3`Kqe5A*Yge8AUzH0%R3k^<<&RiMd7YkNCi9
  6387. zH!c=uQbmEqQAnC^ILf{XOqQ}+2-YJDPTEu@58QXy@v^dEKd6QFu8itM$5J7IG59N3
  6388. zFG5Q=Ni&z^vf;X##3E?NQrTtrPX!6h**hA3E0vgvY_uZ0I@qfAUCT=5g?&$g0+3}m
  6389. zcEwg^Z`G;sI&LsLcc8&&z+9}0mfixmqP>#kvtAJv>jEh`*7jZjIX=_rT%eWD#6nS1
  6390. zyKc6yvTP6wxphA(ZbNdJf0Sd|7r{0+qM!g0(0=ViGnU@<NvS-RH0!fq8dX?t7Hc^z
  6391. zYIaE+kADC9(m#u(XNjt$TI3)|gf9+fKka%4C3))uxU4xi{=2%+?6o2w<xVMK+kVeR
  6392. z9qOWO6-0%U7BNM!BWj6urX{sl(=J}9*_DzMK?g#-OMRM0@+b>2OjD_C+&e#dJX4l!
  6393. zX38><*-9#{QIMH*QW2tlkHFa@OVV#&x(GDSlY`WW{5UjXFF5c4(q&O?Bd2bMHVHz#
  6394. zwT-l++ZlehMe{sb9+T@>u;LbkqBgWB03F`k9D;;Y=!r^f_h)wNWCz!MZ6Bee`Jk(s
  6395. zt~9mdfNCZcq*PKEFu3T1ZZ4oJP~lEh3|Yn)lcT9f#Q_R+hOSQaJ$-OoV=8DC%Y33b
  6396. zP1V%sA(TEqGN(+)8A!F9XAoVzQBz-6f|AzD%Ez*osC^Gx$wP_*iDv!`RE1G>?7hoC
  6397. zqLmUHawv>~5Ey7fGn-Bk4F&S6pGW-+@Il7uve<c}wJag#X6D!;YFWdyU`#q(pz4#}
  6398. zdNjgFY_FRXGhYJ(jUWYj=<1s?ze#VxfPE=Rg63~CPYkJILl|qe8x;vz+tcd!%ZfRc
  6399. zQl#|?q~%`Ar-kO;_rdg>@ik*TLY2@qCv5$wS*(3Y%ivM_23;xd>H?=rMg3GfJd~c3
  6400. z2%%xgDs5vp(2}z!XVh09h-9HqN>82jFR;Wv-fz_HwCmBv8BAh<?x!w*E`}@{)axTc
  6401. zStxl2Z)HTzK07QZRF+ony8`f$g_s2VPSrjO{znzmOii|wU#)6E+tk-<y)2~4@wf4S
  6402. zSb`!rWn=3X$K=3EI&RT9Qd2|XSdUaPmskK5Ryq%(MOmli^wd|uJ-goIQl0U=6u8xK
  6403. zHaz&ygN3=k+u=McN&};OUZVPAS|IQv`@e||h)Y40Do&&@kca+{A3JvBnlL1D-xsoN
  6404. zui%1l_QS)YnQr?yp&n+r#6~CPQZA8Q$_&+pa}S!jacW16EUqca;3x|dZEns*WpXs<
  6405. z&p#F(e&mcgg^G{0W^5|+VM!TaM-04<Zo>d49Xk3$fDp&U#E2@k)p2v#AdtbRZ4l>=
  6406. zbnp1<-HbvJpt6_T#IX${_NDWh3O<-_EX&M-)o-!Pzn7}IvD=~sq!g-?FO=%&vK};;
  6407. zZYnoDpa)*WL4t=mXJjj@!pIy2x=I6hg1$*kc3bKO6x_PL;K~$L=k#Ryy1EuAX)W_5
  6408. z7|6<)OmT1f1LkPexu;rovR+0)S-sNsNrpMp;px3Dq$0thD>F*T3shED^9W4Z7qC83
  6409. z1(2AtuTsXTyv|G-eJwp1xCHuCdL?L}nZAMn7>U>o=AqT;RZvRNc}cO9Z&K_^A2K<4
  6410. zZ7lObD00dw{p^7}sbocR48ay9>X?#WtW#ycz%Y;;NTfEyxdNf*J~^GBu1Ig!W7TWs
  6411. zIniJkjgTs0349o;dZ!JF_P(U9*)h1qXzFVw$_ot~y1#Nx(?AQYWNYY#uzA=VdqtYo
  6412. zl48<pAO+W>3$bL=Q3G)rNkG(|p@-^r1qyB%Tb)yL?9~Q)#+o;Q${$l@h`<03J@{Z4
  6413. z5<Y6+$^Q0mCI&T7L03?18iX`Uvg5s-hf=pLT_C^RW#!UEnmkv8By<d`-njPKjCLTX
  6414. z=d4ExDx?ldQ?DF7SpZIVjvH8l8J|Q6K+H}(osN1-vVuAP*x5`n`lwDD_e}j=DgDbl
  6415. zRpm8Px{orapu8V|m9Ve3f!2cRsY6*sCD7=~K_~egtp;cS3g9l%vN1zijH1cr$u7YQ
  6416. zwdouNR8lN<l06j4kU|CHC`*bG4Cs7Ds>64J+DVmC1sqrbDs+iU18B1gwRSd?2Y}im
  6417. z(@e)M7@GfJ`2o`(ii*lZom1f8))hd4htYO!*u;8o2p)k|LpS$*O6jnxGaSA@SFnt+
  6418. zXroBYN*ozW73<157Cc4gw3S>gYyB?E@<4iM29h%rdg){6Z9nOaXd$}(ONH-4NQ1!M
  6419. z57>>M^bzezaz0j~Wa;O^6QzabqW$ccn!#ZCQPweis^!ZlGe%K`_(G_3QAIFQvm(>K
  6420. z@`yIeU^*==f-51zK;StAPg~2RzsdBEs^{p(1#t~75`=Vslzc~m(pQBtZw3sZ2V?4h
  6421. zN+!y)LQzX@ps;n&?1=ACtqo|IEjsk4T@QV<zM@LDyVQgHhs^<&(S;%#KP)-(-)m2+
  6422. z(uG!OZYx3B$OI_MN6>!JL|2gvUWn3jidx^6KA`z5lkcegoLL@idF0_U#;#L(JT{n5
  6423. zatPE%r?On9*-jiiY(P8vle|vKOG!c?A3r%+(&ITWRNFG_c6a2+@l!UPO%Fo1WoZPa
  6424. zbKn6m00k6u1vN3zo=@kRU*oSOWE}O1svAto%?3lQ6XSeBEVWo1iAa~E0dXk21eM0a
  6425. zX1~F)-gMxUN+Hbg#V2F3_Ueq$e>A$0NOPJv*Z@R_SxBDjF_eK0nKA3-Z(}Udyi%%z
  6426. z0jXh8J}TT)NgbEXgAa)(HCnmRG?|B=;1Wff-iG!1@)uH4GS-5s<I>Md<0$;v@hQ7=
  6427. z=_QC!Wq}#m+-rX)Ib~t&E9_MjNqN2q1+tvS-uMw5jF+{cxG3SS5yU}N1JYnurP;pV
  6428. znki*G=k#mO(PhRE${?&|EYURVz`5;CoxT-jT!z8)PcfE~VOSta7PQd~+Gqm^s$CTZ
  6429. z@M>c`vz0sc75L%HWRQmRB&iH(hBD+i3DE^=>z&FDCpQq9+`^;Be!y*JSa2(87RhTb
  6430. z`salAFjNFXfnS$%XMNt`jat91%1}dEtX>5pWLxiMxcK^|%)==|dW2$c_W||==zt}Q
  6431. z72!EZHcYF?IJY2)4iMEt8hON2A@7PdWXO4}S-2!a9SL!U&*zM1HuHURg-I(ZsQ1ZT
  6432. zCsirSeqw=<YXvL!?P;HLg(`-{T0DE|_e}QD)A2!wF0*MawQVGA{?QJcKYyN?2Feg$
  6433. zsUr$g0SB8-c1}=ki{szf3<sq8V&^gxmeB6~;2)F;X;emN&|$mc&;Uo0jS?(OE&&F@
  6434. z_x&Jq>0L(SlBnu1p-!O>9aohbz>ywe@<i#z)?l1oy1h|nBry3CAkQ%!zXo+gbVR0=
  6435. z$|Km29aIOG^!SxtJ)nlcUUz>ejMWbh8NWY;P_w?0Ep{Wv(UsCjl_8h3FBS&vP`L3z
  6436. z?`AyQ_&s20NtA#VR41j5=>X3jh<Bd%BzBIfXkbN7mHt5juh~^eS<Bx*rPIMac#aZV
  6437. zqztrF=Co5RSl4O9UI{vT=T5D>+4~G0Wmb#dH&e+Fnu<?p#PpE{K~axvsF$L0;i1!!
  6438. z0U;vt<zXn)mGyd0cAfftB08EbRtao-uD6>ajY47=(<->@XSfT-VlfFSKLM#ML_~F?
  6439. zAKv>;%A!^Wly@;0PzLKg3`0E+$*ii6h)y{apiqTy`8KK3>>YV&`M+kbe9ab~NGT(8
  6440. zP)~h5s=YEDDre+ij<-U4<Xk9`te;P|Kqw2Zt}Lu9yCXO>iDr6jGxImpS0`y2p52*9
  6441. zpNFba9?cfqb;W(f+`pe~Z$U1#ZH6J)`@SI6lU+iomm%92f}d~vlY;(}!_7fQq0drg
  6442. zi*=Sq%WqV6Guj5y<{2W|<g3qT6+DWx#<l|BJH|#Sj>9XizFPB)K{_zh#ql+}N>5^X
  6443. zHsG|Vl>Jv_o6)@=U|5|pG+)Vhco0t6ZIuWTyylNz^+V;D8ff<vhf>$l;J?RBaszn%
  6444. zcXZry;FYt>iYz$?V3a0R*sZdG2RD5_;M~GGlVK#LfCFV9^>a8Zup}e*gfj4nP+570
  6445. zn~QP`^?)-lB|}0Flc?Zylk3$um&wWYu#iRJyh}RJhf2<>01nSwPwrF&{`@f*I9@#w
  6446. z395bzmIX@XBS`v(5uH#Se;*d-1iBO%3a|N<yENSUt!<tpr+Y$(J3%4j##{i77Dii-
  6447. zUhl{;>O(C7Na~V?*Hx8>&}{)Not0yZoGF1-AcBBm`rw$A5nQ(8haez0KJIdD3{>Ul
  6448. zy8zsR$}fxT%0f3NZ2M|tLN$_=TpqlpjVpKeZUs?LY<7QEKVbLJY{hV+<3e!4?<gF1
  6449. zWx-ZuB$#Gw(id5AbR|VEwOg3b_2hW(jCRzGP*^X3$8xKJNJF~-gGCTa(9<CQM6w%U
  6450. zsD=Trrd#PV1H#4JI+<<vSw8!kLk?W9Z=3A$eT$-7>BZ#?=1|`!1rS7)LP$dNsB=6P
  6451. zc(}9x`Y#2bE>?|<VQl6AHux&6caGiUriNH9M;NU_T#E0r0t^HC=fc@k231WL$5x8~
  6452. z^>TvB;Rj)OvmnBN^GSxkyjIWfn!*yiAXF*tSV6CYg$@iz6U)lnUd8#<B%%wDqt}?r
  6453. zs{~L_HVDHYZ4RLi18owp0(U8)KslFKG~q_FT^4k0MOm1)p^{h*bhA9Au+RieGV12o
  6454. z@spXV{fN}2K^i+zRawDpBh}mOxsnwd<qJx$D(Pp(;6&IuD6Hc#f%0bJ5NoSb^wF|T
  6455. z5v(uoW7SB?FhSX=6FQKJKh_isCz`!h?lsFBZHA4R5Ar?nSgr(|$#B_OufwZO?Nf$X
  6456. zhum%Ej?l?@5A;lXbPFs9!HcL3(4jEkj;nW(f?&{HHtsx*?-Kwo$`@R=ZP%5Z^JuFR
  6457. zcYNzA0K7tJxn2ehC{IW277&)9;2;o|dn!S>fKA51$Wn_=j`uKV+D=f}SAEa{A1<M&
  6458. zwOUxk9$ax*r82+;fAdR-!-ZxF?(E9`7;^@_^`VCzVHShQG*(7%6w=<qn}^Eqs3imJ
  6459. zk6n+as4M5|mU>3pd69VZ=&?gCZY<MhgRn}UeV2g;R(uH|9Hz&PpE%Tu@+c6R>0(B-
  6460. zNyZa3g{uGq*}+&+yBOo*ObtbT75l!j%?=0)U8Z27W=_Mx<fak*1zr<#1iv!V2CtoT
  6461. z|6OH?h;`+UFzO*yX9}a5GB{aaBj7ZWN<>`Tp2NOq@`U1`wN_4L7EGm_P_nmjp_-0J
  6462. zrOponM%|%oLkUps*bR<LIkr%wgt62W(!BB}R`3O?UJ5#t1%%=GC>!q2jlBk4p{cik
  6463. zMAy%e9CQvHJ6f157&|c|=&s2Jn<O|C0m?yEk+6_~#$aXH3{c45myGeZ^v0kx+Cj^+
  6464. zDb+zkBe`TW6?0~a%r|FuP9QAU>OEm0bYc04UP@-9oifXVdJtuJngkJPzJeRSA*#bb
  6465. zUf2<#?li+;AH45=9@Ykkg>@MQg5T9yBUZ&Y2;O-Ir}u)+N8@lIHh29v%^au06Gman
  6466. zJM~&dgW)34YxD%aK<ib`0_wsLhi(a-C?qQ9j_;9{GP#pHMPu%s`9;pK>}Q{g?p^^`
  6467. z)<#!;wxkmKTK)iEo&@tNb{$|v-GU2TZe?1I+n_vHmkj8fOj)dGkdOu<a-V&S7UpY>
  6468. z<gO2G7Mh$0)hDxGHsV&4dyB5c$dV_R!3Fu^TLW{!WRLH+FCiG(>HK(lPSc)#^zh-M
  6469. zeV=qb26^bH(9dhoakqlh5Tj&1)v?W6o(tlJ77T(Y)Rj9pwMrNu2!;Rxtd4ka(!;!Z
  6470. zvp=;p&cIMcwm9_4w(Bz(aI31hLk9~K*wL$Vh5@l(@GDmw6b?%73O%;L>E)WfP4HQq
  6471. z-C%=@++qE(9uWX1wXM!;P*Wc-Z@~3ToPsO3meL>>wQUch(qt)F^`j`B^*4@)f-Pmk
  6472. zbn#xy*V^pDwxH2ERDGqyPJnZmu2OnO*P=BRUJ6!;Z#LCViCTZRk{c=@Jcd$6GBG$g
  6473. z(E`;aiYKOP@yEsjud+Et?R^+iHiJZp_Kajk(T-hIE{jx;VeF*DxRIU4k)ub#b*E2<
  6474. z`!b1cz$!xM7Zqh&uqu_7Y|Yh&!GUf7u%5BHv>)ClqeWa@!#J@t{TwKnLaim&rK4o9
  6475. z*0TYCVL2cS5i@|UUyC)Eqaz(P)!0Q>s8bp!U<=Py?!%)`ZL0L#P-?pdGq;Gr;6(jg
  6476. zb*3!b{O=0&ffQV=d#*n?$RJDb3j-BwK)?0kBS@NtdxS8VCtxPTXD12)qJt)_k5UBU
  6477. z>#?4WT;9ctd0~`ifUeyyl5M}>0{<Yso;yyQxaR-ld+wIAkDk5uDOuUh)DL^r?BJlI
  6478. z4XXe(&<N5ky4My}+K_3vQ%XL@hu~ZFmXi9_xm(^B#Xf)0xeK65=gvFr;8uIJ$uiW^
  6479. zC>P`iEr(&SG;=`?M*8h;6*j&uOlBBd2m|K`a9C#ZHwO&h2(|HPtF5v+HV0zmM1}5+
  6480. zZoxr70szOBJ8a4eo)}Be8)k8XTy%h*D~<0#hBi9JEajVTlw2Y(Xzn>0Y|BK5^z*cn
  6481. z8%Ht?kQ)h1`7=L9WQb*j8eQp4=aeF9ZwyodS&qNOEgnd;>`g^h5@jG3K=_(=r6APi
  6482. zPpU9`S=CbJkMgwj=$wOxSWAw)T^%!g=}b^=7;jzV8993XNT#<x{@97|$RiJDZIunj
  6483. zcI|@@jPe72Re0CDV1WR^RT6x!#RF?_)PDr`$Ab^4JrnTPO&Vo6{%0I!EdDwIul8A0
  6484. z_5g-uT}wyGwF>n!-KFMAd9FwX!-cDjW_W^NSNAW#8yEo}s(4};4Rm7F)EO-pYDN`R
  6485. z%c=J2U~a`+R~1|uO!6I<^8F!6z`WV~jtq@<OcvTj*9M_~QKa5!JYzd=!*(v)ZEhTz
  6486. zF3EJpWww>&wzvXVu!@Ukdg8>XJ6`z0|LdFYxcy6>clYN$H@$S}BCW_+d6Y_Ie3Eol
  6487. z$50Z{vK+3)$C}<P**L?U!w41T9kHqQh2XQ2Dkf(R6J16CRhV#)iFhq@48uksc>K1O
  6488. z%tDbV9#qWhg^e{<mm>=3w%?q$uT{fvv577y;b6my3aH6gqbqWt&#X)$++>f-@=<SA
  6489. zD>GVoGSp16I3<THv;c~uB}viHajjz$!2&?nGa4)u>(Z^L=G9~D7bZ+Dn^$MX7))G#
  6490. z)Ss9b8mE_XKvepB)Zty`%1Sa6nb41#s9I)}%mR~0mRnL&#BbD@7y%<Fsa|I<+X_5k
  6491. zm8<6FdksW&s8NuLG1bO((Z)$u3RLg|U}cyF&E`n7D?0)L8Ei~8vZTlf?ezA#NP*!1
  6492. zbx|7~LhXaQMr$U4gC@0Qy&l6;)m&>y)#Se!9ac(Dbx_)8LmmW*Md`FUQ(GL?>#tS=
  6493. zs)V(>msS29N(K??HC+^DM|~l5y;Uux*3vc%q`a+qVZF)0K)Ua^0F;1=BP3|u>>-*J
  6494. zy?`BJk;xu-YfL)+SA7xstjLusQ3u?tEPOt5XZE=i8%I2t%(~yn0Dmc~S+7Th8KL-X
  6495. z(K4DuoA1KQDzWXg$20f1<(8XIe#<w#COvxQ(f;!f-#@wU{`-J-hSIw-J?v6g#vH|p
  6496. z9>ejZKa9{RAr#qI+$o`(gG<k6PYXtH=F4G&w8J6XaFnix(KPT}U2nL$3?4E&*B=^A
  6497. z%HW{!J`jQ&rul>X4_rXTL57CIA*R9K57xXcm@PWKI2wv_Jzm$(8sOOK5x~(_ml7OQ
  6498. z2Q{eK;qYi;L9y^~q|KCsq&i7lW`i>LNRB&dZ@Sl>LP9LMm`o+daI{|a<xnY7VnJZR
  6499. zAeEDu^N4k^lY+69tD~jTM677Eve-~5@yd7+tNx1hj|^U?%BFOGOiMmsD`F5Xqa>6q
  6500. zjJl(;TSkOZcIV}!!{C%#AFy`u%C!KlYJlK8zgu*fLmzn5P=aRdfq=ruVW3H4NYH_^
  6501. z9|Rw8B`_BdVg8mxH@4uf(-bfaV-&c4tYy{pegFu=5}nJKaO4UQ+~OU_h*%t6w*UpG
  6502. zgM$Sx4ocaG-~uJO``ja5hoeqmaDFT}ySuEE>N^>?pfdD@OIba%_keb-IOQHs7Ui5w
  6503. zqH<`0q5+k=5a;I+ViAcSBr7X}5G62(iyJ9%7eQxX$?fE|*I*_G#SE{@{$K+4-unfX
  6504. zT}7n@w;icyt5{YNWd#jT29;p$YmrNKI0{Ph<)5+RUlMy30v~bC@h&f28aTiey$2o>
  6505. z7JQdm9~D*|xAw$wd|b4ju*05(0hP~OK$#z-U4FQhTtYq(8P8ApwgI~00*;1z(PcU{
  6506. zusb(7NX%`;IvUo^KOfE|C1TR00XUl5xiq`Pf>w-ZOBDz~i<YFrgywvNbwCx+Snomk
  6507. zDw386ZSd2yS!{8qsS*#S@+wLN&<uwFGC0l1FPeE!HVV;zL8X#0scOv%_4huR!Wfq9
  6508. zIWZkgE^Q<kRE$OBO-LQLvdV8z;>doM7GC9x?~Bpm$Vt5~e&6ug^2ku@WjMIh;94ID
  6509. zjiP_T^#gH$cN}apqR%g2xXr^=*kDmKSYmoe|DaOf0;yfM7#1!~%l6}7`8fB^8dOHh
  6510. zCcr`U1|7yzAkrf@=H|w%4+>bp1vvIAr3C60Cw3iSn)4pk4v9QJIVtm%R$j9~rqY`S
  6511. z8Qi6Q`&KUTf(%`DyZ0V@&v;-(<`c6X_vGF0eIE&Pheyw!38$_-rG1B3v`iS~1C?8*
  6512. z1ezEfY#x_J3Z@$;diJhcyfwJP)+4NNz{}>Bf*Z0M-;TKCGjRFF!Q$99%zIXC+b-TU
  6513. zXiDz9lE5X$X2-<Qm)d-)k7HK_OPttl&&1;3m<QMbv7m2Zo=t#hc-Ae?4tIUz{kg~S
  6514. zU^sU41PcrT!IDKFrD(?&1u)0*EVV5Sl0;^Tl4(TF&|^t57@gS}C5dw)UDT{54J4Z<
  6515. zT5<}iONB7(gAq~<6KJl4d;=z(eL_XX<>(?MGNN?pwM?bG(}(lE9?ht}+wb_Y%<6HT
  6516. z2dt41aNQ1z6L6)OFc0W~ieMRcAz?utzb{A<F1vRZ-7h#y_eTqpVO7HaA?|U*a97LK
  6517. zl{<vH*ykl*JHizWDg`AJt=!Dv^0dZDSXjZRaBWi!7|!olN!<bts2VEko{4-%+yPXu
  6518. z7UqIQr8bUuXU?8E^3Hd>4Z7(RZ@lqTxc<6RDm8CNDs7ZjecpP(V;#;~wVesmLXx{(
  6519. z#E-!WWmhq3Q4+PA%XHzBxZ`%>UatS$-Y~H9vB4D?A}+bgce?Iz?oC)B>o`0XFqeJe
  6520. z5T3K-o9Tw2p3b=o=fbVGeo1)b?Ah>wFMm;Z)vLcLyz4!04|m^vPuR|-1xBn9{}hFZ
  6521. zNsxX|5*;JvlIvxzCuv~d0MJQBqX4xWk2(nix`L&wLWOIC@lHs;MWNKa-jv+GF#tj>
  6522. z7a5S78Mb+FG|9bzqDwQOcMuhQZv~fFh+iu@F4Nf`-3-rv!B>R;`)gknzVL;I!uvk>
  6523. z-rPVw&sovbkdRAH7S8+XW!cgEY1`jry6Y7O?)<m7hXop}jtK*JUfAyr!RlKQSKL3N
  6524. z;dLAq<M;0C#-&Kainv__pbd4#j%O@mto?WGb4AN;l_{G<J%vdGFB{ReF!1aGSit$q
  6525. zM#kWsJAVnb&Yi_;PoB_y?HM~xkJ3%Y+Hgx)(O5=mxH9mhespc@@6yM8zP|f!gVkBj
  6526. zPEZfr(?=~Ssq7_M?q*rKs!WMX52Bw*ACRyuXe<wg_ICJYnRV&HXFhvRc>2?C4KI4Z
  6527. z3&Y0Y&G4Kr{qpeDU-Pwrz%A#q6Q;;9%`-7Ju*|yi^k4p43OEy#1r3$PqB`qd$w;{z
  6528. zJQLa{*5m0!*R<Dph+YFA0cM!rOzB0?1s+CYQ>ly@8M-pd!9Am>_dt^2XwKv(Dg<b=
  6529. zL_u_LP$e^HTAX`6-A0B{9}35h9S`?C@C8P;QFisnBM&hgcD|Rl_=v)iTzhe53M(_#
  6530. z-CS&YS@g~IkirgC@MRy2z8|~b%l7C(7T?LZa@$weLwsJd-{80SJLa>~#peT+Ojj5S
  6531. zVyN(Lcl{_DnOQLMqUch-&Np$o3emPUaKSQSP?&BU>fqcquMSxiGnfbh6tq<(WRALn
  6532. z!O=$G4#k$BtH-bi+`E2*<^Fu-wKZBPF1r$Or|WaYO#yfrdye~fBP{z)+|irhIIUT*
  6533. zavs;TcYk7X;K&>HpYM8WIC1jYyz+l#c=WMH!^MoEBo*6@%_FjMGdbuST&4sYrR#4p
  6534. zQMP2$theD&RH=X{(A6X-VFHnP!sxXlhmHuvKF{O`=T--mi`n?CXjMpot?NQ%Lk^)R
  6535. zO46K8XXqu$x+u_4kW;`(r<{E@Kf%L*otENyf>LjX&*q>*@*@vF`e1nf``%r$!7-w9
  6536. zL3+8gz`Oj&@3pXot1stW++(|X4d+YaJN-Qb2)NG-2Nz^J^T%d!d3`Wb=ejtnVkoRA
  6537. zugwKPz=by#7)2E>Ybk)v?I?^of@*&$IuEc&#wa0&ES?ZAJKNc9k7v;=PnU`2qMb-C
  6538. zIncDMp*jYXE8+mW{3?tgE8~XYsGbbr3d9>+L#(=-xVS7eUvXnWIG|9xQ=r=^MZ~>t
  6539. z9q#58MGDdN_Rp{X>u~SApAN75`qzY;Z+TW8aN7>saVD^6<%-+L3;@Y88W1v3MqGBF
  6540. zOarm#st8C<7Ds88crIv`Bs1F185H+aspOEE*W*+I$808pqoDE-%<4=Za7pKMSeFQ^
  6541. z>P3|6e>?x(2Hh`&x=UJSW99_l-f$O<@td60j00Niru;AFOzDH~e^2<EKl}eOd;6oA
  6542. zukMhrd+h3<;_faU9CjM^bD`lu+@s6NOS@SA?=^(NZhDZb%IkA&Alzj(wAvr}UR_v#
  6543. zG%SPd4iX1TFM&8v1}KBX1qoO;ipt6Tvg>TkfoECfBll|Rg}c4C+O@K&3QR~*61sW=
  6544. zL%cf*7>I)*u!RVbbbuModSk_Yui%|O7q86Cy%vXnd&`dYcg)4XAIeC!JOArH!~5=h
  6545. zPk72rH;1P^<*7O2*_1LBfl_!rhf35cLdOfFP8_|JdZ}90>AXUzc}q~@+P6)|YYM{+
  6546. zeiFb_d1@M{>!zK~v7kV+X|>qP=m2Fi9N-joESVUHyf~VE4;0E0&VqV@ct`E^7*8Jc
  6547. zuFgMtF5LaePlV6j`x#O6C34;UI)lBeEO1R13GVN<z{lb4#>>5z@p8X+*_YwU&qrJh
  6548. zMk+jlU~@b6h+&{57OF6$Bnw0+IvD|nmL@Cv4m>;dcrIMHG>xhZDK|SRgjHB&CGvKr
  6549. zuUDeA@mk?1NDqiYZSV_6EYeq_;g$6K2bu@%eb)|XQ<%{=ulzR;ALg>x=kB?iA5Rt|
  6550. z)m{pQxW*OemA*)D-Ix8<elPFg%jN)nO9MJCAI2#CoiO6!tBDjSNhtM3yJ=KLkNpRm
  6551. zy=FX%N^N;|C*xUpD3nTtxsJXeSa3{&$tlyXu39``(I{hIihUmxHKUGC;7WM!lit?R
  6552. zIlYQ+RCBz<-NqS;quEDS@_;c>F)Y5o2b_O?jfgO0><<fZO@m?HK`jVi?(>3UogRSu
  6553. z{5Fk7zCibx`czj%(D`EU|4;P&A19~aFQQn~VHdh}6NZC<?uYWFr!ruRr2-|{{yNqM
  6554. zlYL}68hqkZZhkjlMyXo|Me;!UuS(0IlC$MrL`N6nG9IJ3F;q{BJI!{J0f`jHLEYx?
  6555. z1pd5c&Aju*`Ss|M_t_%f23wP+I?VEcm8%k!eM1JDaaF9?wGG1I67jc1fvF>!0_IsV
  6556. zx_cWuQvS7|b?YLCX{34jnnA1Ur1R*jRgD?fEM0Rzq;D6k$!<4qHn!Tl+1NbUwr#t%
  6557. znrypvvukr3Hruvse%0^$f95{-dG9&ry_#AsusrNAjye>X^dE^kFV$%hnY&98@g}A=
  6558. zs~M9@7{V1AFJ#&d7@#K=hbrGc`^%Fa0`AR)#a1YR(s?eQTHQLf4N00<3L&nmuPNFe
  6559. zf~jY>Pg8HI%Cfpts#a4Uu{bY>QXr1i27-mqYlIgrQ<M?!gO9h9P-Dfsah)M>P5jhh
  6560. z7DZ{F0va$?6lX~ZD6SI%LUENe>{~$MPM?6X%C+DVq^R?qQCKWyO6TdB33jD7nI3BY
  6561. zW~ZY*wU8s`>-%3I3flOY_R{1x7HZml!x>#$U8+e*<_-*1_PfwjqBe;UX4r?IYF-ED
  6562. zVI@M`D(Qo%!k|cHwYV{C&|<a)95J~}{!5NAPN~!${L6g1!-elG^SMt~x;3hC)gW5V
  6563. z3aujNQ+T2XP*=`T&`6aZ!mPaMrv&vEEU{B%f_IPNc;etl|85Q-f;*pES8xQ%6cS@R
  6564. zN&f8ZAU2@OxM=3l_7ih1I#f-MaayO$z16)sm7{DDLHc$u!VkwN5-(-swM#Uq>v%o4
  6565. zAyZ>KoO(<WGCu7-hi^aOB%dvzmAq9)9F_O5nV%w~sjxO*c6F_}$I=9m>k3236{+p6
  6566. zOxYJk$Bxd*MR|{`m+i>G>x);J9hCWIhjq~csQ$&>mYvR=|JzHH>VjG4X|ic3RA7RS
  6567. zgHEyRVG7}*#T@_(ivo^C`s>6DfM^Yc!V7I-Z;u?cGMnN6xUZiNX~OOGwT|`ujxUz;
  6568. zs8K)B)N{e0OUm)QR9R+&+Ng((A0|8f5uAr6nH<$iiYoUw=U~3HqpLIjbaJ|KGoS-z
  6569. zgOku3d5K!e6{)>l?I!7Y&3a`knM?CJ4EV1KR>IDnL9(W@e5X%a&WhD|hXq=G8%1w|
  6570. z<9D9fLN5-A2^$b-g&7jd^t$nrdOZG1a`T4~0>`fMYBV4<@}{vuXjLnf{kdGIeNmi@
  6571. zBJ7NA-17_ZcnxEPAZo$5>ECRDe6OIO2G|&?<c`zypZX~;-BdSZlfP_c-e76$!K5m(
  6572. z7)o(r>=sii6(Jt{Tn^|VyP%pB_^!2hbIi8c2^GUssLg~;QzKoZFf0!=5micqaiWZ+
  6573. z6bXbnn!HpzDx3Px4lMgkJ4OIs5I>g14CxCyl;STyj46t|b+|vgK~pruoA$XsX_|*i
  6574. z#l!`D`mt-68iwee2!<IAZX121dP?ThUwP>7iI!WRv2UxsX7+AUYf&aQu|8SWv{@0@
  6575. z$VLb2M-ok$e}`L(E+$|SsZ`vU^}Jz7M+)&!E6voxGJ&?yn?H1J8=FV|ec&f-W)foc
  6576. z?%n)ndSrUcVqCosMByvClQGAm+6p*{@3<)<fV|^m22$lSGkBqso`&c$jwQXkhpJbe
  6577. z*KM!*bMOoURfq-jdEAol|AEYEYne1ua~cBZ);}Bz_{k}<k@{SAvuS0UmGs)m^G%6n
  6578. z!uRL;029^_RQA#a_!o+Wh33HTnY{RH$oM;0x&L5s|2R4hIAweC_exc6WCsSxHNFQi
  6579. zRV%Zg2lXHp790kTmVh&9$sUD}VtJunceS8?X?1?3*^v>Cvl^~p)j7?+j=FSV4k3P8
  6580. zk>yWLD58?g2@qBU%L|Q7QR9Ox%tdN9rO^S-tgCVoc(iTUDGx(kiiE~$rd5N*^<O)u
  6581. z>k*^HMz0B9&O%<dhURP9J)Z8)`P>E+WI~S1=%CTbMx1jCt^8ww;>3dq1K?l@?b<&d
  6582. zEShKE_+wFzf(!lmwFT+SAct-f9&=O!6Q3ohFRU1;B)%85TsNu@hUnGx?&a~+M`6|G
  6583. z^_k~($-zXdpVfaunk+%!NA*AP?ue0d$b_DgfIXKY@@TU|aB@o=*$=P3t*XuNhjfi&
  6584. zR*Hh#N=!VplXbsBUXXyzJGbN8))QoL&l9f&lB<oTJk5<nNpd`MY8ty>Pt7>&1aRX0
  6585. zES;48mx>%0EFoy(DG;te02^6c_CbxT%cEquVv<_LF+4r0;E7E=*>nwxIN0z-lBBeA
  6586. zqKyH!S&=9zCl>m2k!{Po9MU+69*|HGWL~~J959b@Ly(+699ARhgR016qyPhYe$u(|
  6587. zzeGP1zX+6wG>c+D%X8cATWDffUd2d^O)X>(otp**W`0k-lQIYduu~yUi%wVmh!Sg8
  6588. zbN*mzY8mq$WW}r0GrpCZYKaxqbc%g_o;k$+Kx`mAf-p5U%|iC%7q`#>x+-=&Ojdch
  6589. z%HI+NU46llpAgIXCf}KLSfA5Jx5xU|Pn|!ZYh-9@Yc-6DNM@!Q$_`7Tf$0%Em!Tir
  6590. zglW0oPlR_Q1mWO>0h`2z1-d)pYkaPb(!9k7J1vHt@HEvu$hPnI)QQsh*u_BX280A%
  6591. z2{}VJFsZ1R35zTa#I`KguBNUmr0pV@X^fjy=BK79WyR&e<Z}p?5c%&waAug7L1N&Z
  6592. ziQ?T0{kFS`6NV?$UbjN_Rz-&^B!8>P5gyO4hRNrp`4NU_^3{(5YTM2Lda4aFhefy8
  6593. z`ojyD<V$pylkNO~!%hd?>;olqLTz^D%hB^}=pSPJ^+vCSb`-+6Q`>v&Y1fDuGTLjy
  6594. zbMUkYlT>M?N0_^gJMlfu*RF4F%vf68gCIVsemC*8W}g2df#^;f@ESKvjgnG6NPb%1
  6595. zS3`?!wnKWhpO0$pci^NhKN$i=6edrPUAEwx2>+qt3l|vzQDXiw)%h^LZa|+xb1!?y
  6596. zJkZY8V1Bq@gbJr4bBz6sxCEhXQL8|sZT*|&)i2OHBPKViFcBdvs{3%^2#kpkD^%h&
  6597. z<Ke0m@nJC;LH3*>1G#`_;*?`AqR&Q0HSt-vM|LvUW>boUQgr@mU)b5-otII$lUU(v
  6598. z7tq-nH6egpnC{}^O)h}rU;#+9*KoSb&dt0am{B1GYP8r3+J>WAZJStd`^}yOXWq{x
  6599. zgR|O{fgzJ&=Ll0|>~<FL!&w&Bf4tusI*}{pi;KY)@`o^41+sVDaq1C+AgqFkHT8Hh
  6600. zjle@;ZN?x2iGFHBB#jrZPAU`zv<MY=!^%_CCIi4R1%J^Un*Ar>-!<<`X`c*=!TgH@
  6601. zUgWJ0Qhb>AEfl`s9hcNi5NfV<W+)(GxymCEOH@eDBcfVzCauICtHNLaQE8aLCwEx5
  6602. zojw%J&oqAxP`qZ=iI9Eo9l{IkoppcP9m3`&bD7PYDY9Kx;HIId&p|s>$n+<mNv+4P
  6603. z|H{?VNqWC2$;&No=))6M^#p<hoyOC0au!&40^isliXrJ;&Lhsqff?>eDU1I0X=k-?
  6604. zTO-x!<?{3l+7(G)!r&6)mQMOq!A;cie|rl*NCSiEr<hsj+e)Sts=JjV?&Z2wt$}4Q
  6605. zPTLymXJYg~LCP_a{@DvgcK|O!wV;A7mS2UcF=^zWbd1sb<6&?$8fk86X+;&8BJk_c
  6606. zcYKm7jx=Yg_l^D8rw1}|J0go$A2G#7jp2(`Ee`racPdY)^#u0(jarrp**{6v4jVXr
  6607. zYD}qNJoRRZQmwi=T!~{?VF18Kcas)WMTB9D^GoTPoVdC=tyYfh?sCQ;&IupkXG{(E
  6608. zd^2N){ftmC8=#h$H4oM{8-+GIEOT1o7MFSNl-wj-Pb;G2orpJoWsP91DPBf*NU@B#
  6609. zG`)US(zuK3{hLFKjbF?rG!msYo2L17HM~janr+BLOYv76=M{@9rd5VTaRG{h9T@e=
  6610. z+;JI&4jC$=vFZ~WTU2l|gcd~4JF5T1ormu29CaD2PZUT(&DHHHf>%Xbo7cuNX<)%S
  6611. z2>g67H_l0+{&%^F?`kPae85nA?P4e-f(}}9m4gu@rgBPS!sZW^ROmH=$VYc%i^@P0
  6612. zt7s*b`p$O0#{ctJ-|{_4BwH8P+!AlvwSO6h>AnwX=g)YpY$$ZywiL?w2Fz)AsyNFw
  6613. ziUv303yT3;CL8#>lM1wo<FO=<0LXYD1=)8ppx}v<QqNSGHWYfLo=|P68=Pb!W9&fi
  6614. zaM-h?H=dLXKo!{|<k+Yfyn!(jukfUNP$)x8Hp4h2#leJNfF~nknd5UZm|)JU;)#Fk
  6615. zGufDms=@G5TQ(>r1qs<3WTKW`waa$7>AJEe$%eIHb1P9+rX~~HkXnp7z9SqOL=S^c
  6616. zIhL)hjEboZkkw{)zi7szXLijw{VgN>4t}10QmT*)cq6=3hlL0<!i^Jua0w~Qp=eUs
  6617. zzWgJ+QpNtQmf1^Vy$>d7Rmq(Nz^W`CjjHe*P{_QvO83$Q1)>&djSK~n^yN})t#Y9n
  6618. zrb%_`^HA)e$lw{%Pkoa>-cCfZPqz%---7j_P?~MKPWWb_qVs;u_!}3Shufj~lrA#s
  6619. z!2R{^^^JKk2XRYv&tH}C0(xJIK@BvK>bbfBuU9XonY`u$+05K&ar+BQna}YHN4E+(
  6620. zw*xkJIW0z`#|<WkIfa}=dBdSaND6v{Kj1lhKXIlred#a~pZ32hML105{-DQizC*@U
  6621. z*h_FfNt;j5ZYWd92GR8be67HpABEXA5qeyY*OE2I5$f6~sP5mh0O0^&Zz!SL4zu;2
  6622. z{k!$N5ax(4W{Dy0^f3>ds7ifY;?F<@)+rt=(>h-S)Wo8|IVy)#t%8}`=f<B5l(^~W
  6623. zh0S|TueXmvbgUL^r|RUt)rffF@T=MhNMVhT7g$S1i@bTBuQC9m1F?%WS<kedBgYLP
  6624. zY9p@oCb|5a>yAUk^+tVaQDR}ct|m?}DaF<(IHLlKMSRcu7njVL=Mmoy4(&WV(sGio
  6625. z<`x!cK%n3eHYP<c2ZuPq$^9utSxxfa9iCo1XB`mhOHB?(wNdz7nB}cE>MIRK0viZA
  6626. zcU^1Gl(LyyUX*#8LRl{78$A~fPP1AK@;)z@S+7so1iWd(1FPB&!>pd%gl=0gw(DI`
  6627. z-p~Cpq%D#4Jhv+zHXJ)evRNay)A=0ZzlToRU%lIm>1UDgIseXf2>d0b^0ZP<97Hju
  6628. zT%)WdL;=tw@2n;*3&F&k2SVYX@X>2FqVqm=Mg^Mi?55oJqLx?~rz^(-!6x=cj2hFS
  6629. zK6ORrxDzWq;3W=d6S$OLxsKR8_1eT|`5e!BTNO-#EV$vql{;bT2FPJtU!Lx5*=GZF
  6630. zE@G1c7caZ~@Q9yfL_yJb8-2VtRc9}^?R?x1dwEB+6@?u_0$XYA_i5cKo;@mOk*}Gz
  6631. zEtD;f%csbcGU=*!FCm29$*ZqVyL?#?jIFnPua|s-kNZu84>^SJqn<m=_q(qzr?1Gb
  6632. z4;8OptXs}|3l`79+wa0XH4i1wy8HNE&d+pSuXWaaUUq%DN)(E^T)cN(g0WinM4lcr
  6633. zRxU8ThmTZzu2lvZU&~e>%IerFja6p6uf%*<xOX{5n~p~BS6`o3&u)EQZ())#aHM67
  6634. z7<B=@@=gOJSxNO!&aD&`ElC~B{7pth2w4wPlwEy%4`F8p4NrVHrfln0BqmaIB6^y8
  6635. zP`ar4ermJPxiRPw&h(KWsB$EMs&d2-yr}>b-u|x&_ABVV{rAxZ+DREa9&G6x4#Dl4
  6636. zcjucH%R2U{TSMA+U0A^t55Follpfi$fr&!MaiBf~?K6OL2jRn5$erhyg{))V(N>7h
  6637. zT}U^+%hD&_yG|7QLVkhmoiv*rUA?|!z}a}7*!}hCW7{dhsK?4>ml*HGrxCWcZH+c^
  6638. z&-d8fwXQz$c(0DW9F1OZylheO{hMF=t$qE=c95<iu>Iw*onCF6DUV2~Gac|)*0A!W
  6639. z?bf3`3E~UBLOXVLwkUWMCf@fYTZk+y_ckL=l?u7B9H`P;W)Ie8l>G;;VqXJp%b;eY
  6640. zuXjWuF-<wE-yLj<(xhgTGg6P3#%Mh)ZFFF>{+v3*R#LM<+<fNA%LQvW0s=eyh^d{?
  6641. zHQCqVO&V~J=Y>#s(A%B{+qpd-8+^Em+6>VHU$$gl0$;UM&fI#wYJbwcA5aNyfBe&q
  6642. zK=`~THrw1@J5cC*X{2*wbToC+_IP4D%5!V07D`}<{$v0As)&z=``AntVf9LS^{-4K
  6643. z05u^ub5C?P*dLkWiSK2TZ--y-@o*Gnc?jL{<j*Ou_LAqnBu}_gzA_r>AHbC3!Zhm*
  6644. zFn+&aOt4e0Q;+Vn)hFYZmaMz5thLkZ+i`$lf?T}_0%o-d&!O7-V%zcJosHMp`#+EF
  6645. z>r3NJ1E4^ObIx4N*CGv<TVHw`R~UPTohZ@tY5P21d(g|#xl|OQ0w2$EYDEMS)P)Ep
  6646. z5F2~X6Ph|8z`}z?u;2m#!&_sKlBfr8k|b9xcJY~vj-1q1$cp;VXKR2&RV{DRiB!^2
  6647. zZx8mZe4VEatdP??(CHd&hy-2yJkR6&C^FxD93Rfh8Om#PM))-#qSs%!DPC#pS3)`h
  6648. zl%~Bt`rpilsiNw*Jb6qg$N~Gk=l9=?cHyp^L6@H|x+v_2rlaD2v(I)sA0G|pbx=~i
  6649. zs7`8)P|<V5<3003IfKuVV86<?qI^6u;Ts%DBN+8MahNxo3{bwQ)p|pygZ`s{K)OG~
  6650. zF{Kfj@|V0_>c_h`rXuiSzHz_(->3pnuE7t1kZKZjAkg`u!RN8T6S==sN_>_xBP}Ch
  6651. z<Qo*L`!}de)UKr#D66kfE}RvLJNXuIn2?UgEEdM#p%PU#9*c|4&)=t#!X%p(q^Q9f
  6652. zkpM=SO#O%`e*r{0E3)d}a4x;wxyjF9k&tQJrCD%e{h{tKHdKMGb!6-eSa#tT%bJ*>
  6653. z7PD<DlEIsi{zDDkhYc5_=!X5&G0SfPyk1w~W#zgrsq^LKKI=6l1K}Fb9|i>GL<A}S
  6654. zL#J(feQeL-+toUC$C~xtf8H`JJ`&+m0Osimfqwc!aQyBg@Q8r;d<`&FvVIPFyPD5t
  6655. z!ddQUt(Ar$I{O~8DTYjz?C+O~mxGF(<AOC4H9QWU=KhjCA*6|lr-6zsg1^(cwKQZN
  6656. z*S~eNQeSJMY}_Z)T-(h)=|=h>)Eo0%kn(l)r9}86wT6tq@a&nuOF80?nE>03pKimC
  6657. zEZTM~?oLY_CAPVl)YDz_F5iyAp=cHL+da1N@j&1n{`veSo$hxfSq~*V(3#{&j!7Em
  6658. zSc95r6Fyk$GXER{Z4?#=l4o|KZkhTv2d&Yu1JiNI(t(aaf~llYAP9-w8tN6-7uk~5
  6659. z&Z_(opXKf2y=I_!VqLVt87M>f*AxuHqaWcNIDH(DP2kk$eo$vbAjBV~Ecf3%@P=Ov
  6660. ztySi?-LGQ>S$}WJBH4Ka9<c)a0b#1_v4iw45%I&(LItBw@7f!b)f6WOmh&b+k?ABk
  6661. zMxI$Ac;An^ts0gw-^ltB0I@gy+40VQ#(;k$b08ai>0Jl7JfCNMyj)iwSNagXa5|I!
  6662. zE{tf!G7@Rlrkc##eAZgM)>>LCIts>oV>tELq@W+KM?+sA7@l!Fo!pIx(V(5E^z7#h
  6663. zmjTz3mhZ?i!<kE>1@)}}Pt3z}#o2+j<Q-bHUn8L5Co=k0@-Q*P_LYMMW^vPYHn0op
  6664. zwW&(7yE8i?UcyDy+@Y1wI3jeb)*0x6TG1u*U}Mr9aQ;EJ0a!(b9RLK$nvr1dZQ435
  6665. zJh$^jA7vsQ?=e<FE)}lZ^P$e@ND!(#Ix6=?*oqMH;Rx5MVTeg*G;fmfmf~zt`}wLQ
  6666. zxNqu~&l!wQ$Lg(Q`;}z6Uh8GXspehEA4ZzN))S|S&1@m$sQNS}-0C6WPE!VWUi9QQ
  6667. zd4D<j)huAP+D~ObDkj^PNDx0g-jw~!ve&rWAFm|8^8<&LXKxNT8syG+)e!IYawYr9
  6668. z!Y4KlcfGpTw47{|6K|$YXcaT=mc1!cz{@%6%$v%}{Cd5P;^XQ?xYw(N*kpVwq+{$+
  6669. z`I*7Qw$qR~FMcy2M4|g>l*pc)A}2KfDJEdTC*#J4%Dy^SXaZl(lRcOQp@Ey~lx~xw
  6670. zm;*1ZE_;*=M&AqFo)_Jf3L>W(;aO%4!rr!)M%!>}s}J0tDPJVg!-7nn;UPiiKB3cs
  6671. z?Xv2K*@X$7DsUt>nDaQ!i!ULr_*}Zb{CnGZq{=dq`AEh<Xgn)0no$=#<Lg(-iBU(y
  6672. zl9p=+zFP-R1%(@l-I>&9$0xH-=K*|o0Z)%yE9aoI-M3U>TXoWH1#Vx=Z=eH;%j&z4
  6673. ziXvuy`@HmP@qFCxsruEq>LU@{9I`AaHI#4t$s46;<v72L)gA+>2K!fa{32kS7qIfw
  6674. zv#0f;eu?vp`GRM6=bMhAi$fyN-%M_kQp_Z*M?~UbWT4v%Z=v?bV1M~3p*Pi7_yV4w
  6675. z-*5JOWAn=PJ<sPp$;a)C;|k~5|KF-nE5IXDLb%qx&_H@sS`B2RH^}SoUDPkgpE}`*
  6676. zN{BSC4cQ1x#bAs$@5tYu_qxE84;GKVK*ati5$Sm@>KS|V+w*?bi`m_f32!$7G(aBc
  6677. z17bo+Ez2>GM!@0Rz0w}!_j&5`@dVauVoi)P;SC7(6*L;FRE)D;G4owAM-94Q^`<2h
  6678. zu!(;e!z?F)co`4mDuGXc7+c@Z8G^&AdHusQ1T_dKN?agQIjk}6b_8$>OW;aH@pB@p
  6679. zA%YtIR0un62gG|X0zQMp1%--XHtpC3T#FrrfLl6uK{{(pSl5E4BR$Z_R$y^>gi!eY
  6680. z#2U6MHoDoP#6>@(&ER3t*We~)k*}j(_M&F0ZQ|EaJr|j%1W!L9-kaCI|GDiAf?*5o
  6681. z%T#%Zybdd4Ti3^1o0lCM>>a7jB!YOPPpAQyc#hmdz1_ZwE1H<DmW{~|tb;>sS>^cf
  6682. zzKUP+4}Z4J4itOF)vIOxo+#FF;Q*Syay<Sn1UI2Y&{6nFp%83L1Y#WC(iWG`AOMhw
  6683. z#itA&<2iz42(#oDiNJCW&ZLTc@}gV3XH+IQjEd;Ftprd%v*qWTuRL^`>HS@?z<11O
  6684. z_s9!ofkHi~K&4HIz=PtT3LsPP@vSC0=pGwo3lSIzOz&&tFomT>P=7ITkHjOoMxzS-
  6685. zWa}5PR=*>R<+bA-0f<B@(K;6BW13ohUS8dn3MpshG$!bhN*Q5a%)V7{7WVV6me8Ob
  6686. z^Y3PcKbqm*GfWwGy8=Id&vT(G-g9H`%N3QX=WU&r?aha0t^MCo-E!Bf1@=86l>1F4
  6687. z2hs}4UzL8b96}+wbWF@vhJ!(Jv(TXZkV+e_v-#|sw+pAoPyRh^fBcHxHMzDrPa8>;
  6688. zGQ|7|QmZf)frG*xxRMit=60yDI#3};u@$L1XFxiI&C??H4@6+BcuEN)Yzes1s&&`7
  6689. zPI;_zN~Fl5GA^iFUZ`%<tT9%}>x_l-a;$LB5Qh2DRM8#utK3j%2B7y)&x)CS17DOW
  6690. zIqQ!czyz%+02$j17wVg9iX(CXZbG@{J42LZY77}aXjvqF^Zcc3A?>}-z?3If!bC2D
  6691. zd8mnq(qY>Hmx{+;(JrE!1Zy#fwlR{{wBeFy9UX}g?N^zi99m0ZNi;NViUWe)$UwCU
  6692. zouiL`Z+mft!sg#2y3YU(=65+T6_9mDq;mNelMVU!)HH%<w0o5U&K^UP7bCzSi6C?S
  6693. zCgzc|=ZwW<2}oM~ELL_*qef$GjrlOMXG;p_%OrOxRS-YNenSNou}C3<Oiq(?*=*`S
  6694. zk3tU-yF52!A?v_hTnvLg4<TtIb=%3}hHWjk2LCuI(ug-R`)<Xf+K??g6Q*(^Wk{Rp
  6695. zB3W0P(cS|x8*7L$X_rB$q@lZ(OVzfM9!U+^Z?9S*6;7h8<C1f}NtcI+cF7XhE1QH8
  6696. zEpL0^LRI(tH2UiKr~JLelVAIKx%qlJFuN(Jh^t0}@Hl`^N?tedB<G8L6^nnx-40<f
  6697. zx!qiPW~6#%{n_oJ&L4)#OA?XcOxP(qlC~G5!7`I%$4C9qW@lYgC}%z^!&V{~?kw%p
  6698. zonhsV0SKi3r4(I@$q46oPL-HPGD@Bb<!@3`n#6@7HJvgHgyhT?`1mT9Z8tnEn3YrX
  6699. z=t)4wFF$p%t8drG1yQlPi-jEE{&nOKNf@r!Ec|6(63n1wjs+9=iC6-^Ci$7WJLKjG
  6700. z3t$S^q5ld;wD>Tkp|fOn5434vjOm=h``mv>;hvIgnoA`)`jB#Wz>1MW|Mkq$#PWN1
  6701. z=Q)u)D3#etcza<juoI$54r<SK9T*~-!`6UlY(sMS(cc?Jrh@dFh}F|eia`&-F>%M`
  6702. z7qQAJJx%*oGeyCZN!7{dh;ulMR#`G~E?iEmtPkv|O9?C?*|eSS`~J}p5BT9BRXeF4
  6703. z&Th1BEc7XubWdO?J#8}mKA%!>ZJkN?+fV^F%fNw?ymL*q9vC2$bqk#~ZPYyxDwB<W
  6704. z;r;waNd(;{2LB#>V0=~W4>CO>LQn>xhCE7EEK!N|rwJ<_vYe!tb29pp^Wf?()*nRn
  6705. zRRC33WDG{RoT+Rhc2zi<4jzjkmJe5efY8WlM4jSeq(FF<%APhVX!Pj1k&EbxQ$fwi
  6706. z`ePpu<>}PA)FFLf0j4THd1ZlT?^>NVm7!I75fdD4c>QgcVNt@uM_=5hzBVA|$&$t^
  6707. z`sW4}l?bSE95!4aNnD6B-LP_OH`U(n8K$xYN+ZQDMSQ!s1yczc9FiDZq6$fFz|54v
  6708. zeDZL-|BoVrevjXOGlL|oxG|(N2fh$M%!6T^M0C2Zc3M@lV`!8^Ng43<Hzth<C#qr}
  6709. zq*HmH-AmxFaZ-Ukf#2Qwsv4wlR{u@OxJM{!TI#6a90ilRhoImdbM3i@A@Y|o^oz93
  6710. zmR#lkekrmf2NR+GjUi_fDI%9yO82ca-)Z=xy$-KR%ONZ0TNn|dWGOF>DF3Z_?CLUq
  6711. z5mq6&)Cu8+&^6vG8<C7$diF|ZAQ+xQ#!)@b7ef%KEce54l^JwVd_1odCWSQr+TlCk
  6712. z4)fr1#_<#%BVhF0pzngsi99=+43IG6j$RE6-Yt0o?^8DT+5!Jt8$_g9nmPLcFX#0o
  6713. z15KGHl$lxapbnfmn5?POUKu7l#TkGq>B3<(Kz1}{e0X~cKqRhPL&9d|tw#wahWIOG
  6714. zg6M{xodH|@zwyyc+GOcZv;+zT0yxQ4lZhUZ&(b|?66kC-fKD{>GhILKn&L4jr$0)N
  6715. zGLtOCxt9wlIh8rks%hC;|FKq@A0AL*Oe`xa<|_ypZ5#__^urH*qtRVNI0rY%V{N@G
  6716. z!&-`^8c-vTR_V(`aB^-dj-<v9E0}Q!*Q?;G>WY~9G3-cSgsOx)NCre+m@+{iP5(-c
  6717. z6z$cfdWsHTSy(~F`lj8Y?+2su<jr`!@6V7Xnxokt&1Eey|Ccr#Ud@<vfg6}yqT*!h
  6718. zm|Fh{>tkBs7eqvWt;B$h6k6>_35CZ%KP+=CPU=vvWyX^!0=_riH^O^!AGr^GZ8OG{
  6719. zWXRP;NKg39k9sCU37nvkcf?dj3RLHZ@PXFWUQW|4I#Oo(QpjlbxvQW;&c`D~rCct8
  6720. zr>s)CGbv@rRHaq^rhZxr7S9(`(R%43g&jt627y_T!fr-T7Coo2IqC$5pB{pHSLlJV
  6721. zNR#o$tg->GQ`I1`ZBln~!SZ`O;9{v{)wsz5Clc<U1iy6zW5Bi7Lp17GjKFQ{gfs-j
  6722. zAPGlO;oF+O=@dJ2f^1}BbqSd)rGQDoMR8y3e>&l1$ab`%C#FK5o91^_R<Kp5N8z*)
  6723. zg2s$hI*WBmeimV&qk&?~<^9C|IRn7oN6wn+e2lT&3&A7Ry#}-r|DrC~iS!#q>aB8n
  6724. zpP$XokIo%CREpDBN%L9wWGdyMjqf;WY6pN!?R{T^xM!LDuFn+u2InB)xt~iEX5~@C
  6725. z;>1;;6LUWeLLu=71!%m$s6Mh+k~G#<erVw1s2k>^l9jEkY!Mc(v|z2@FOV_Q7(wk~
  6726. zEZWZwZ~Ug$xN_esR{FD7-oyD3zuh*W5EMRmMV&znay+YMJ4NOQ41NXz0udxZv(Ye>
  6727. z{~+hX?oSft`%qz8;KWoTq(l=!Md5laDnrXwWM{SCp)G0kvMaf`xM*Tr<9NE$n}g?K
  6728. z?4LP;%QI;1G$%QLiLMH?MPD<+)71kecEr!j^#3<Z8Sx{HC*U%F<pDklX%Kk@*V^6F
  6729. z-Jbk2hNo3c5?dL@Ln(JX5j<J;TwAb^368K80;7dxwU7tb4XcLI%Q>2E!A0;#D3?M{
  6730. z`+)O`ebD&EN;9Eq(xYZdwJ7)JU1NPUNRq)6<1A@1@OAjS1=}lzKWF1n-d7G1Qp5Ae
  6731. zNprQ{R0qyEBWLJ$+EkkSMq*+(vXvcEA2h!?SyBnDw-fodRpx<SiFLmZJFp0iNTa*4
  6732. z`^3Vifaabe!Z)iMcaM~-Jq%J1EFRz3fZ@CA6#J&Nkh}J|1d}~Xlp#q`6CHXEfYC!?
  6733. zHKE($_y{`(qpx%8q~oHS<#ls3e-`z67qy=CvY*v8nR!!thO~Nyv|hhxjqrN$?X@dv
  6734. zm-n{mX=#75s2g|nPSktJ=k<AgJ%kYX`?8~g>++#CR@<&e8)eJ=u+7fxs?)62lX`G%
  6735. z(y8lsxc1*uw_^*P!4`=t*He$x!PUnc6fdfl1Eq?M)5e#F!~42_`I+7in(l;Ng{`M&
  6736. z>)lVh&1=0kekh*4tFI$2ZE>rTK0=F<i_bApp84Fj=TScCSsu54R)@2sqg2`-rd#;F
  6737. zdF@M@K}WQA(>FzV9T_||Rrov~-ZLMuk3SZ}NmM*{^F0amBM`jMa+Vucxb}R#b9k$4
  6738. z+vB4?d7WNn-g3W0C=|&g>=L-Hfxj#wV9^g9&t7J|dh!OZ-bJpej&#3WrY}n%OQd~r
  6739. zcgcQ`?rDiR>wd@{dEevsZo$DB*{1E@_(gM}?R)FKbby2F%afaTBtgTfHy0sFE@jo>
  6740. zHd@x5u<KsVdq;J3GN2sIo$wf;HHzSN*@duuv>eO5Wt+}se)8IWH^b%P{CXAv-(unP
  6741. zwq=)R8?SALwPL;9>z|~y{K)!yyKDt?+y45zy)@^HdXd1pS!Uy9aUX%ze%G_jeB`?9
  6742. zb-UbxLMf9@HOrmB_3-3z+S-u*n$&t^)MDkbWGB{?c+5U_dbKd9^J4#!Qa@V0&TKLg
  6743. zf6KFpGrD#=-gGsKaQyw5tBvj3>>hy!$+n;o2*wbanew}5lw3#ZUvc`1ZGIsuv~6oN
  6744. z+Z%AG%r%3*+#O(IIAc9;619g{pv!T>4~l1B%oJeq2d;!E8Yzz72{0c0l{)L`myzx>
  6745. zu&@aC&=pk>_@3_rG9tflX!7YDT?}|Me(?5)MAub=QjW|##lSS{1HBZq7t9_pV-EkA
  6746. z-v#j*%yU$Z793aJPPYHftg$LQt$fzGZhB##x7ak;yj}IFST*4)zgfyP*p140j%-~8
  6747. zh4F~_oJPg@jQAw2_8RSuY2QAYKU&O&Kl9{>_U(@Ow6~txmt(cB)=P);cE6UjxAmRk
  6748. z626{0G4KX&di?->A3PnsTR2;l_0#vH#nL+5e6*e4^=3?1Fl>-tA3&rD0!ybNg24<{
  6749. zM`LL!a!3?5p)=vGd9rCJwA8K6;@>CGaAclS{A%}fCSD|pKB*|V5Dd%@mI!0;cdXrr
  6750. zeZJEtMJ+%`v8GTrn(U^xbq6W8)OHo@O36PhH94$T^$~0;kv>bE=8a~j1-xWx*US#@
  6751. zIqY3m<rR+R&F(Qzd<Jm46Iwxd)xSm<?eHbN)PV_Qt+x+mUOpN;w(oHrC67JsJM_u;
  6752. z)<^PYX%~%NJo53DUlDMXU#0VvUuBQt;I>*n+Vm~(c4y*ded7vQ8DF?vbfM!6xoNg4
  6753. z>hB%Z`Bq=yJoL<QH5=V(^KCY~)n@v-dJpfxK)?RTiz1_C?@ptV;1uE><MG9gsNSL*
  6754. zl=NoLT)=R?%h(h7xo-XTFx<^|xpuq}OV+5t5aLxZraP$7Q}c%-`a>9lTEJc@zT?`t
  6755. z+9*vlcnF38ZL$odChk$dS|>v2uv5(e92Am-op|ZX2Isl6!9&7*eRbPI+E8X*TBtRu
  6756. zL-ERbnow@v+&KsW((8sqjB$nSLDOT^y5>7!@e#)ZqQ{6$1qbFSi}S;hU3Tqp{%G|m
  6757. zGcF9QkERvtQG<cp+WDi+?qI#k_%3Ml@D6Xm<=$ZvqBf&jBpmR{yEs!NRA<?FV=;Zr
  6758. z#H$@%j^%@V%u0y;#IZEoRCRlQX<nfQtoAy4lrW-Sm=zHS;5C>(&poX<v{owQ<*nFs
  6759. zxa-mTt%eYLy{NQRwkzs2a>Q|m`ez8UJ*ro~*}9oIW<mQwHYujP$)_Mnh`nCYbHjZi
  6760. z5ch;z!Ukp;-soC}jJWjwi!ao5_et<##)8K!yHX|;>gHn>1vJEQK@$E9D3E_X`<dWW
  6761. zBc;%UpjzIKGu~4s%$2qjnsZA{70!cLJwLMzIesjT3Afb%(7|J=(aFIX{7sYyMSdw8
  6762. z3FA^CpogMrG1;B@!MMa-|A5Xjt%rS3NSTtOvq>g}O6V-W^!&(kp8ZVZvNS#Gz}vun
  6763. z3D({jZpZ$+W<6+E@XZd?=M0lNYoSj}X|=Cg_s^2E1&9~v$d%L<5cNwHB@gJ_{V<*%
  6764. zyLkHb|NOoT9Bx_%Mv1`aS`Iu6T$Gprn6>=1ll2q!U-njgoYCr16J*N{cALo+y-YTd
  6765. zGALZk9zhu_!EJMmmjY?bocH(LjFr0P?|_G`G!KD#yB)NkEV^~6DJWCa1g0GC`g$u>
  6766. zY**W=KAliYh|Rw_d&%GJJuG^;P~(bYa`Tvjbl2F5e2~UytUhuX5u^|n<9SZe>H>+q
  6767. zi2i{5jhsz&1fboj#<8R|_5dQvEVzI|?OME;*x&3>u7CoKw*PjS>X?+w!o5+~uvneQ
  6768. zcE=<zqy|(Gh$B2O9=P{90=_b3ta~(y7Wcz$U-;=RIM0-i#{e@(mhCRbuY>=~W>)|a
  6769. ze$ANdR%xpOGVo+(YlcM4mi`emmJyzVkeoQWmGnKn|9D@ZcMXIyt#|zB451Y)G#Mi}
  6770. z1uLIndi<0AP2%Mzii{;5f26Y8yKIurzjJ4bLr9~jP%Vs^V96ihq!J(`A?5{O2s9Hv
  6771. zjY9_nh$<{n-XPS=O=Jj$Kr{-1fooj-w*)vC>aVl}e^05fVXD|Q^ko1CRiI?ku*{Mv
  6772. z31NU<Lx7x3t_FddJCy~^pX_30FP1y)tP_f{NPnQ}42Jaso2-;VI~L)962usP|MozL
  6773. zYy%^C@UYH><mOo>B(kXmd@NY%(knr<0WbWs@#&j}C#`7e2_DLy{}o6V)zBjNzZEEE
  6774. z{PXEz=^roQq{2{q(L#7l_)sSoLeplMgCzoTOR!46v;IOyp*MuW{&l7C&%qVOwTP$=
  6775. z>?0H^-231shr-jqZW8iOfw9Ad+QlKVFZi<sy)}g$5RgRu!_<0ICmbT-y`wvUYw*#s
  6776. zn_~kJFjdsiY#&QYhFrb$-34stJ&-r4#k$&rfmWF-V!8olH>X++Io(CF@f`sq;rukd
  6777. zQ-^xFKvb&`f2;;~62Xp`Mpk+dSHSw@|I_t!<NdF1@?UJ>Q+!&eHiRu~<y%lL=f<uk
  6778. zsL!LprZ)Q`?if!@YCsi=ZkRi$>q<GU4=Qx8+_<YH(frsT9Hgs&1Sp~=B`h^|6*jAv
  6779. ziU$HdlM=RiiBIY0cnDs*R>t?5lHyoq+aBymSQR)LSGUfbnuSS!tSVLE!IrINW-$A~
  6780. z=hjOK>%|v{HkqK9^>&8poX#}hAHs3Niqy&GE6TCB#h0kp1^|<BemzBt$CbmHL^frA
  6781. zu*t~Deqw=;;!`9!c<4{_yjjIt3QL*q_EAL|Nytm7Yf~%?3j!&d>&pjEAc}2c<`!4S
  6782. z$%61nd<5P9f@t40#IQ;2o$M2f30F*F*7eg80=>|DX9e<}r}yjcz8awi3U0o@&^7fO
  6783. zB#{4=Ew}C$DY6k&LGZ*4GWC#;3Udbc=Nt@ayrrmjWKdTGqpn<^uDoG~s($R)wN+oU
  6784. z?)(==3b)OAa#P<4({6t=6}-SwOx+JD8CF&lvGZosDg4@5JZP=~Nr9g<-Hhz280_gv
  6785. z;y>2NE8B{xm^O6!17aXHr8+5`#$1ApQs1WYUw0&5gVul549>cV*@+PEV()z`noJGv
  6786. z)uKkq9S78o_sDA(E#FKrW@Taor8!Ykty36jL0GFF6dqoYJ3T#J-bruae?62#7ChRQ
  6787. zX@ozYuml_bMIkcw6G3e0$qxY7C{&am+_7*_N^)-sOwjNw{LD^m+xtj9(aHq=rvey1
  6788. z`4ye2Q!=_JNQLt7d>d&naP+0MxdmMHV*)3jYY3u@sR2c7H)hz|oE=m@4b%ChUp@j>
  6789. z9vZfWi`mK&pr|3kpKj^9Q*Rc^qL95Uw(g)2R{=U)NEse3frrEKF_V8j$puiJnU><9
  6790. zK;zx`{dX+5F{i{D9@!r_Ie_d0qG@c%59$j?QG(R%ic6HHB{qZNYc!FlkOm$0Ir$!6
  6791. z7>bhe7z}C798)6|jHUt{*|@fkEy#c{zK*D3ZM=lo)Y>U{Cy=qQ+%g04(gs@ol(VUW
  6792. z!zF5X2bA77C<ayB#{SRoUlr?Gg=oI@7{Q?gL(`kS8yG}kM#zG&2r)H_^tis~OB;-!
  6793. z3E^+IF|^8LIh<9tSd?7zgYx-fH%QljmuXlFah0qO?TuT3GWvIiC=jZo$P`Y|JeUL#
  6794. z=Kp)!7Hq0yi#v+!aU&-{BRByyxMFfZiDD&tH}PjM^E6u)_a`QT*J0cuS-x$>q;1p-
  6795. z->)|{Rs#I6NOh=zxsZgT=L)&B$F7!GKRzfGv(z`NDq$zF<W^)<M<08!N2ZVor$;3`
  6796. zrS0V{wYgxcYlj7HtoE2yzdnZV!o92Pzj9rZ;(MBF?o1i5Vm1{?uxuQK;r?mPaP5O2
  6797. zMD{tlkl8^+>d+DepGe|4<DXGgn?~DQ7o^GD*ncSE9wE-u>pJeuRT+#n*}iz5oc<L&
  6798. zNKu>z<xz*h5@T0NH~Kn*8y!lcwETY&_Y^LH2K}F&!&ph8Vw~6$tC0ZrK{wAsz^H2?
  6799. z6mCuAki6~FM1kaN2A>aocggq88gT?uFp<fe&`$CEI+Sqm1;mejDi6Ur%<pJcOz4z!
  6800. zOfubA6K~!x&8qwccG5`q%eHl$vAYzrnhwL#8X6juk2s7;68ojHX1?Z|r6Px+1uex>
  6801. z3yr<vbN|U7i4wL6J{Wy;Kaj5^;<Gq1Riq4=76E1$X~O>3D07Xe)08FKZlvWDW)suy
  6802. z3CGlefZU-=+muMNx=U*(#?U9w4>Hy4FtEHRtCA1L$`}h$9DZX=6?!?N=6`w3L$tyJ
  6803. z*>{B9;Lt|${PW8E+BXgTHFK5S?P6=)VV8hZn=l{$6SNgAI7KkA<HDL{LLFG0aU+<i
  6804. zZw_4N2j0Ih6IAf0I)<VvX7>K&lnZ$+%Mpq`EGrw*<ezKk)AL0ajoL3!m`&$>o#Pl8
  6805. zFy=9KKEOG2c7T*t*Q*(Vrrnx5Wq2^f!_V%OS^n6`j7JvF&Gt^T$5(*dvz*JK^l~ql
  6806. zhfC;rfQQMfdMgKAx+h06-O!mjh!8qI<(W~+IZ%YMjJP+e8kF8R^2b;Wl70G*hemyg
  6807. z+xUoj{o^T;@tL5Ddd4p}=&sRZZn_u~yrX8?egr5-XEvF*8R>H)W^*@|X&ji%G62cZ
  6808. z0|5Z-o(ElP&_dELA*n7CT}Pz<ba<`Qkq7K2VtusV&Ke-b%V|Qn^~ZuRG?p!Gs-uM@
  6809. z`V9hozXmE>Lw$V(F$d(rnOf?$04XsXMw6l<i8-yi(0K3<@WYT^s5IS}Vv)R$K8i`a
  6810. zUja`h@JCt<jIcBplE+~y1VU#@2a+EWnD~o3Pnt6ap#%H%v)nwD?+^wJIs%j-QD+~^
  6811. zAFnH>w%}a;W}*S|>FfX2avz6m60;Y`?w($cyo{m^2ko4cmNVxmc^H{%dN3EO4K?bG
  6812. zf*ESM&$?0dLb`{BhV+mPu#G~<HINyZ-#+oQvY4^2aXtNSNTH#y!Nhs(#Ijx1EmNI~
  6813. zdD-jUcx8y&jVaB_I77_JX`l)UfuA6}_Ma}gGxqL$b<e%b1$XA9_iJyBiA(O3eepjE
  6814. z{7PcgLaQ&{mGXmO8**{8E_lcxo1cC2*07<)<BC~-4nX>;sz1Z<|2+JnvFJoI%AL7O
  6815. zR$A|xaj0E{vN8ou9&X=w$9+sgifzZ~k!(dU&yI)OSJET+qW~$x-Dy58Sm94b*$srA
  6816. zFJ~CbY32ds#PfsBCP~U?)+fpF$T<4hayPN`=*q9P;w6z9$LR^9BDU;!AO$BL1)Tzx
  6817. zr^O#f#L2~l&ldFh9$$ye3!^6a7d(TDKLfid&By}aoG)x>tco1T>N%;Lgi}=_*1@tA
  6818. zx>o$`kwd!Ilc(>qPd~G{gNvpCOE~D%F%VIuvQ67dKaDjRH5wx2dw7F3Q56rE#aU{w
  6819. z9VzYWNfaY8ScGns)-i?i4uk3<#bW~^GW{LioSB!iH;I~`(uqLF1i%!K8?+stoCF@@
  6820. zm=xi&P1j>`-49ekd=G{Cry58L$X+_xakPv#Ux#dzmx^DUu<ptG^5zSBtFDRp9+n#u
  6821. znu{?9*<65+p@rl%zZqjzhBls&LidWhtfr-vS^G#bd23=2Ad|c<k)0(}(L8^Nq`*#M
  6822. zk>kyRt!6~=jxR%(yt$hDH?hMSye^g^F)^)hZviC45k=9oC$A>%x=@o<D%0I1ndLLa
  6823. z^fJBV+CMu>Y~1o;?ue06sFU$R=;Xonu(z9?(eLI0iz(GeOQ4~K1eIRYvGa;+#ZkdG
  6824. zz@dBSehE5h(i*EdagH0$MlNW9J{Qu}I|Wqw6^k)0Q1=#{h<g3b^>dr7maT&45#aQj
  6825. z$|HGy*nA{3an{Dkp%AoXlxZ?F=dv@R6HT_*W%XX0AiDeo2{wOz>rK=RprU$CTOalh
  6826. z=K;vw2R20%(+{jc@pM^Ql)Wg~)Fg@@_ymA3qt(4ikxe*es$ferW5;KAIkN3IBpQ3&
  6827. zgqn&kKXnPuNQ`7+2rCF;bRIJ}jc~r%FgS_c0h1)aO_4Ufn41DKtgugKl2h#hTJSAu
  6828. z1V|C_3`0+N;g12QC4Osbu&Y>b8<4wWrMWME4>iVR_zR)en%}!JnEB&9*x|nM^bF1v
  6829. zGSc~Uus=9E6f9lF!}4u~ZP6h%g3qtW9Y(_4^Ec~a5!O60yK{rh5aI@@C-?{E1s+bP
  6830. z5Pya_4-^;U0%wXAmxwvuXaE<%b!4|RT5p~zAq*d=*)h*8APhFeLH5Y;Gg2&rQvYU{
  6831. zJi;{<A~%;B+alJyCK`#hVM0Hh;dv;dhJmVKVrHOIfF(XWNbDWY?4Kp(Z{f7n9h6CO
  6832. zso<F<oYA=2LZw}5)Ni6G*M}t!Tmw5P%y}8rf6|GADuFQ_Y_+q03UO(IO6!)=<K809
  6833. zPEWzvRLz!LQ+tBHP8@(94D<R4<yBM;Bv2S_9lD7_x2$aFo)Ks`Jm|bqFU4Yx!5e8s
  6834. zV-ZW6E5`bEyd6z>ACn9nKf_{~!x-%^oI0}D5=A6^0Rof7U^I?QLjs1MiLwbp<+R_G
  6835. zvg%DKQ+26eqC~4p4AOkDa!n@RqkN^GIVXW{9;ZYU|N1LFMH(NUA&pXlwwCx)R5VGo
  6836. za`8m2^+L8ihjLYH=#OikjZ8;_T6Wn~;al+<Gnx^Tp7+OTr!~Y0q5dUOJ&%BO-mp=`
  6837. zA_%U_SYepW31b1z;o)G)g2$xtVMN~|N1ZPpZ>ke{u7ok3LKLgd%w$meTW#<8ozdo-
  6838. zxb#6SXw68(%2g4miArGi=0SqnvPs<jlFqkf+nh3_ahNeq#kM8sgV<%j_HvI`LlU~g
  6839. zPUVxT_TRDO4AwBHZwjz`*MyiG1euLYySxMAh)Bfn3>YW=UnMC-5(Y6742xubanx-h
  6840. z)29Lhh;2%242*bRrEMawfAQqG>D#iUy|a%j9-&1eLJO}nGjIA~q8~;us~&b&YS=g-
  6841. zy<0P;E9|$3qi?h-wult{cXQU%A4Y{j2i#?h@YqoJw1;b;e{aDA9l8#*otkmd_2e`W
  6842. zN5Yi4O_^T@G{LpBWAA)zEQ&i#9bQl~HBA!R_Brgb>IbGB<6FXNvP~a6i)q}Jd<Y62
  6843. z66299RA_DAKY(8;AWh%FVHcnOv!t4+p^b{%9<eo86aRxVje}K@d`XX5HW*Yzay03X
  6844. zhw0QCF@g*CXI2~zQs1nkmur~!+*p>@n{E^01CkQ4FG>VDRF9wRmr%C>W&{cMTn2Ls
  6845. zD>Gvhvg_(4T{#>Iv_*RhTeI98@2X)tguMSxt!P>~mMvIxa;(--qc)pJKBwaaIi{W^
  6846. z)KQ>6O@0%+mlK(Fc1JEnIb`3-NeBjK3mET@)vudI5l@p-7PwKf@=kwe-TDzuC2Y2f
  6847. z-^<cnQXoq_d@AR{uAF)Ei+*zqT#uShAQN=t#+%xmwtI?w)5DoEVUwBzvm0??i4n#>
  6848. zV)pL=9fxC;<k33d*+Gsdh<GI@SA;ni0~Ur|7GtHSPb=g9wU(~yStuoIo~H=O17uhI
  6849. zW40XwqQTO|IcuDT?EQhCbSU54c|(_2!|-FRc;ZQp4x|9{KW%|9sLxM(b6@0&K&BMa
  6850. zwTn`lt}<J$d-UD8Oay_)4AAporU9<WG6;IxV6~jG*M$Xvjail;9j<rE(H7J12!KlV
  6851. z?r_4*1I1CV^>p%b)Y))|(VNkC(GEQcO~*Ci`xKg0Frc*tptZfrEQ0MCUd+Cl`Tg4C
  6852. zCSX{MW=3xck_sBD{eBTPu4eUSk<p{S<`uWVBWs`e>bgU@fx{I4-l8-IIWT*Z+O$rK
  6853. zVQsFAv?9qVfd0=>b!A{&6+YEgXjC(VTwG8j;fhDaWnRX<i_5zh*#QpQR$Wc17lcEs
  6854. zU@^Zs79j6mRY6ZKm^K&h*B=LkWoKyrtr>yqiSoS4gYx3mt<fVG<+m}T4~mJLDr55b
  6855. z=@E=thVsd&JW6KpCh(mQc=L^Eh$G&Z_*>uRP7Fa{!hq`N@o=0RKjldqsys^@t64q~
  6856. z)~%vF*OAMlyLFyZ_f^|r3vB{x+h^Qh2bByolbjwJ2OetmJ7txcAIi7XXmMrn0l5Mn
  6857. zILA6)yRD|ikeUR<8W+bR@nb`0@B)u-K>71KNWGvVTSP*yMXr^XtpN<5%b6LVqiuAF
  6858. zyh#Ql4c_;(Yt%B30((lW>ud2lYnj^7Su-#<v`GN&Oah+=f%(+^yyR$rN;t@(E!UYI
  6859. zf-`DDk5iA;>tvU<%M2f_JiM?2_(gRXB(qpkFsD^m>4pV7AV+3{^LvH_MeD+`R;Dk+
  6860. zIcR8Mz{lC)AN24&9*CL19(>PRgmE6v%6GYnGBx|>m&uY+5=Xzr26aw)fV*tU9ArVo
  6861. zbnP7V$!P4E8_#<z<c2)p(Djjb3?stEXo&ABVv%Fb8^qy^L=8NbLW?+Z$R6fd(KQZa
  6862. z3>R}cH6<pKLA^TR_|v(!^<TlKS=c()-z5>&4cU89g6P-?&!Ftl)W8hy`qUtjB9ZG)
  6863. z(Shp&_I8U(`7mc_KM_d?wX@K*P_8X}FnBLHBIob411N#%hBO$b-HkUhmqN7*`kIG6
  6864. z@r<RLr9mQZMVPlaX;oec=AJFP>iIePRLLMOeNCyI@IzGCKcqzbK?(}WSKyK2%cv;D
  6865. z8goi4yG7v9Q}esL8juoD?Ujt=2hOE9S#13?A2sMtbXO2#K@6X-r^`5nljH~_H3x;@
  6866. zuv}fzCjIgA;w*IfC77e;BGC?9aGhpBI^Zym-g{3ZH^01KYarp*|53FQ+l5J9DV#bM
  6867. z3;#;fq<iSt5A`Vg{V-h?T~ERFZ>Dhcpdx4@dbFkF_=jbcw5FZ+I7^@=+0@(PF^&xU
  6868. zvGkMELo5`kRi5=H5iF{(i-Lz6QA&VHOCZ`06+GF*le}b@c`A&A!QqUpY-Tr-6qrbc
  6869. z6UNAQ(6GSNWPwLbD*FC#u7X7AWjyH}kLO+>YRvZ&;dmCXJ?w{y){K@Gs0`LmjD|L(
  6870. z6-51c4g8}sm^zI)O!S`GY?9~>Yl1yWX1<KjD%PBd()M@K@GC`eD(}{)29}kDt8UIy
  6871. zHgixNFxD@~i{e?T5I3nx<ZU5M7IVQl%S%?7UCPrw&bo3_yo=oZMrNV1@vBiyEnSeY
  6872. z!6z2x0<-!uz26c$M}fb~8};i20Ak0RYGv0`EV{}oLXnov4ra`Mf)v4QQo<*Y^!GCk
  6873. z2*m!Zu3sF0-g$*0^ku{a-L85iE}MCO`bK%?3yR2hy^U|HEAS>GmLW~eI-uV&t(4Og
  6874. zQ{4SDisDcu=lrd@W37Kj$Va>wdKb~Rk5-Y={t$m8>+EW^HGRIfDTUMLaC8qT$u_&9
  6875. zl}i(ro%{<Xc{h2A6~~949vl_bS3tmD;ajllzQMmFG8E?Wa21CZ2P~G?&ABuwQmjAN
  6876. z4h}OnBA;pxzR19eP>=)W4{@cTtn7z<$AZi><UnuXxg=ogA#Y7CbHJ++PPYvAWHK;?
  6877. zw;pXpD~QNxT{ky(sKlqPKEeo%#rBS#dlCXRUGs0UrWb}`lR0rnXZc>xi&nl0UrZLO
  6878. zyJuXH$#8UU6D7CZC>^jjL~5ML#=(O+a8_GQ!gr&@Y)#&i4J_h~u(JMgCgaKfk#H3Z
  6879. zQMFB!2C1cUmu~4;mhO}Wm6mRBDOtK3mXz)W=@Jl>UXT!^JC+WCmsCJM@%sUL_qp?&
  6880. zIcH|>%xsjOM$+U`5X4Tk@UL=}`{8l#&YU4R@Bf(Wk|nr(1ZL_bkVF<nyw1B@IIk(s
  6881. zMOf>f&;L5qBlK8)GEhfyA1}5dDL6qt=O^u9kso#SzJoIEXpJt7diguOKR#Wh4Sbsk
  6882. zRgQ7#n^Oi_@A1~@L#wuudg#@&UplQkxwzfx47BKb2nUrzOwkt=)^OWE1z;LJ>Bv!e
  6883. ztAUJmmn+3B<}b7QGPGES4i(FzUA4LwV6gi~@Qp=zOsRayOVmD_&NaTLAZ(g=Cb9&J
  6884. z*?s9tzbc_PR<2)8;}S#6X$VXwdW}2E_iCA<<<wG->)Im^XG;*Zcm@SGU;q2E7XJM^
  6885. zmiOzVVo!*6AnwCl=PuXOEUm*#kv(+%3Qen>)noO{V2DnnCA*LfqAd%nGY-(}5%cC2
  6886. zux2pLA(YLjSoc0H3krRrPDj52E5!!GoB%dM*P#*fA;^5*N=pdeve_gB&Um`hhnYhg
  6887. z)nwiC1cK15vL^6*yXNKQ`TBHt(NU#V=DVj5KQx?1^)wO{Y9>=I&HzG-24^}*WsU9X
  6888. z9WDsDE^)(E4Dg(O09dIZMNNLg9P2G^ds!<EFH@G=L8F}=f}u}Nof^Zg@lNb&;xSq5
  6889. z!=!^_HTa(U<lc&yuim52{T;u642Qq4mp_6AaPQCN-X-YN;bYox`UI#z?tRpRcDr!a
  6890. zerlJm944mcYe3_GwAw;@{Fax>d({^>COo4!7+3#UaOB|=3)U3OdRsYuEu7i;#O+<=
  6891. z9Tb%+{^Q+~0jY*TQLu@VmI`&VI83}gRr4V<bXSIQF^a=HuIQ+}X<^b2t`%+!r#?Jf
  6892. znmj-I^2U9=Qt`bYOvU<FJ;1fLe;In{DG#HtR<3Y-T-{`e9#I{_Bf&T;Guv5@Dce47
  6893. zS)&^K-UO#&C~9M<vrG*yX54YQOl!}yXZRneC%)9S&Ab06T{CTWO&1?k7CXzPqQ6vB
  6894. z7Fp$_PSz#{$EKz6MxVYj@?POj!{!xkZ!cKv=KhlQUmrQp=f#s|twJs6KP}r`l-*#9
  6895. zhZ&~MB8S|P)Urk#VyQP_!{Nuul|NvcP+3P>C63uB9BOUjD&Kq`+c-_8LKuI`L>lxd
  6896. zmhl-OtuO~oDyq(4e5YbRjyDFlbj`xrzq{mS?5zz{;m4L-)6M$zGkJf9?AfX3T&;Zd
  6897. z^GRdf&wAYcCoo34;bijH(W^)2KoKJJI=80fz^bw^0p=>hs7@NbeMg4V9Oa>{EHCh7
  6898. z<U_*bMz(>+AS0+M3n`HF#4=+Y)-fxXIjRcAAZePmi!YzC(zSHXss+V#%H^_HroUA{
  6899. z3Rt!l1y4?X9856~x{rZ(CU!oegEaMaoqV{T43GlUmi)5SqA62_NlWfcmw;i1+V7B7
  6900. zEJ4wXLX)Q>L<NpD4WTQDnVjc&HX7l<p1Q22=laNNGA<P985H<*e<vKr->p(62P+bB
  6901. z=O88#=?2;}9_~{$@L!cjp6W08ri_2@K?;h5fDwktO7jLj<E<+$+f!s4eJi+441VMP
  6902. zZV}a)+M#?*R*f>aDfF!p4hB>{W#T^Ly*!El9L#2!##BI3ag-k6xTos5MjSJyB*>;A
  6903. zs6vMKU6{`D)FDEo#Si%OA{d{#*|w*nbmPJ)#tfBq0|c~^$?~*9(=1AUb93)BtBKJ4
  6904. z)OMV4ET#n}3iN3$^j!A5{Nzd#-LqG;E4iZeSKturMf*#L9m@8X?M*mxD+;V#DL5Q(
  6905. zHlK<OY6?8+_~gr|re&hq;w((@Hkfw2n@xew0aF2$2@X}A^*rK@#NP*WXSFW-9o*44
  6906. zl9Z<>jO-XXP0G`8rr7XA4K5!R%9Rs}b6HvglkSK$7zn81`PE}9uNktZDktB?@POmq
  6907. z;m?-(l_Q>1UTO93DJqtmM|Tttb9a&_vkW4Ysos)+SVm3N*6d4JJc-&=<($gs1`0$*
  6908. zw3IwWtA&SV!9T_Q2LBmz?F^%(XPB45-kLBb)$U*=v~<*)BdKc2MuWjDLTJT)cKB@^
  6909. zl6cvC%`j#18IadTLNDu8?swP!#3oHnao+wbSYhv?na8$)Vy&!le)Gcn(9oynt67?8
  6910. zG*0>%%L&xmira-;T&v08S{-%_gYsGgUa8ZU>iZ!jV6i&Ow%CkZ36>`zwHs{tk~USJ
  6911. zDR_OMdS-hPA-iHB%ozW^jC;3pcG-?Lo}u+qqd|?Au9JCV_FBJBxWdtav+?0!y3T@<
  6912. zE*<U@!9PqBRp7)78tHzSkvjh<2UVA-PnmS<7|vGec*x0g&9KoDs8Afon*fAuVVTk2
  6913. zY&ithT=te-l6x8+gA&rJK~L2fRaKCBYpdQfFa_iAUO-u)m(D=`HdEe;QPkSn8WA{h
  6914. z4va5OVcA(rSf(r-KO~HlV>yZ=plWW^viGATEsa0MtN}gwczCqY>tX)3Fsq5*K+`m_
  6915. zaebLcU&lz~RuRHz&zhcZZ&{8wX+Zh4z2M-YeEX{}u@6Q*OhaS=Sk+G)&5a-h{HJ;p
  6916. z&@9eC@|ooii#lep^(Q&Px=CcU?(i^v7_G_&nNSv;;K?!IvQD^hIteQ}?3+!U$}pb&
  6917. zrCxUy?fw&CUoylAri)omD;!<c$n)q<5pfel|7lJj%c@Sa$66ue<0$aNk3X$3)}dAF
  6918. zOGpMX{YjIw6ntaCTw+xl+Yvlos>GKR{gj}(Rh3Ss(^e|lbCFMpk?9Lo1uxaa3433K
  6919. z#6(Vprd2Kv>msV=|E#<>r}MO*uMD5kly5Ej!d|*J1ZH6TaRysG`{(mol?xWU6xV|e
  6920. zN0_DXwv_bT^A8`)zB#^XU%=l%o48MGPMHJn_^_^3P>bZ-sVLHFM3lUAl9Kvi_OAdV
  6921. znN*`ec@JnkGG)$AAv?AZp^IlqhH<^$0=v8&L+MO}O1jF8mQX`78I8BT&O&R|3=qtQ
  6922. z#Lsg=9In)#BEIn?n0cAdqv?&!`&LXg&63Hb^bcuj$02pyvU^U8Km;?17;D@|7a?Cg
  6923. zmnKt}X{}lE3bpz^@8zdI-|onN95JaG0@vVu%>(o{E!;f1^kmH$^7#xye|+^6DHYKk
  6924. z6vE3lwmS`Jqi7LMwnFMZb6wYpNwdp^=|14^DUM2?Ogt5_&{~s;7osGg;H9t3WO%kh
  6925. zU&^*zxJ;Y*)RjLdOL~g*j+f14*nD@W#^jg{SR{`F>G;7?uT}~a7!TXgxg=TdS}~qn
  6926. zjc1#4|B>Z7zm~+#6}lfsbdV(?^3jm2<&1V4#v<c@{w@RjE9d)46D@>{2Z0p?k#3H;
  6927. z-@*Uu(*D9be__E6mD=r1R%KV%uizc1E}O9zUhexc<|#4()~;|ZFfh^2rZ|HvbH5#J
  6928. z;QWvnR;XJ_|I@wkGu<uE6JruLYA?sswhJcqPJ$ctov(DAu8eRj)%M}WWWtoCesmt8
  6929. zN^A~vyLqBox@N~vF|IzTC&|fk8e~pGYbL=L{;HPfonT(@d0Hh;fBq(GC`9io)&w$z
  6930. zC1>aNY%$ri3m#LV{sEh2PsntN;#<v@C#wN3f8}=s=dUiC*6It(W}$!sLdLUqKE!Fn
  6931. zM;+2l3@5pNF1dGss~{LTgycssjPm3Crl}z7#gy63Y3lzRk&kz_@NEhK=bOf1sI>gA
  6932. zu>8p;ffbgmS4OU5?%@Zsf*C7+gHHL72~%V73FSA@5Y0~o6&4>?w|<WFvH$l3-6mvc
  6933. z8*x%cR;o!&qGOxwBj^Zo+V1KqFst8gr4DzFmYIacWxH)+K85YOFnL>qU2?zqKIvgZ
  6934. zoXGp(OH+6Ek53$Xi7n66>oUo1%$KB7a~v#|O(eTcDtKBDNx09@kmxS?HG;}D&q+5)
  6935. z*Q-JlnA%a?P4YP8;339pquueuYpc9_AwC9e4111>^6g@h{Wc192q#%V=ep&a{QUf-
  6936. zc9((}#F6Mg5eC}GKE^>?Isf!^!jE|sspK`fo4Lw=Nqa1TC*@&lba1g=ZYa2EDmK2i
  6937. zD}V$$#Tol>K3mDQ&6TQC_Lq+=Z<RT5EzV1c2~B7{e<qbC7rSMYcB<}@k|9(&{wbl{
  6938. zQ#^5!T;`z3?a8n}`Oj`dlwc{wym55dC)RviApKSHM(E&V0&%}2F(4<Y>)}ltI7Qe5
  6939. zy&8nte!^kD`k>?4_nf%op79CCqtAvow;iR#<?PS6>sCX%CJj|9GGf$z!)HyVr6)T1
  6940. z3stK$Kcq<(YXm&!iDj#e5m_hP;Jo*n-abKl`uUi$O5j~4oo+6gD*^vko9ApkY&&Qb
  6941. zhY%h&{7({}a>*|^LK$e48e-n%j_lc_`#BX5ogqHQgK;l-hMJ?MhtYS<pOjO}B72}r
  6942. zQj-VliaTLY*?ukyOjA@YpZlxRUM})=mo7XtQX34rXs~Y){rZ}1#h**7g<lF%Q8+r$
  6943. zv`sH;S3$^r^oBo`&fuLTbag(B(;I_wb#K{MS{<s#Oga^Zllt{4BRRhRjU}v!Z8*6;
  6944. zg(x!%Gfl_K3k$a{!`n0T>QF(FtaN3En@^7*?V$A(&v#0w)?=0sp?ROv^WHi;M_uR(
  6945. zmBFY5w|hIxB7-K0e@WJtDiOkvb}YPBp`h$vjW#BrY<t<M_pda|J-8PVH}}qfrFBGj
  6946. zdf3i-qZ~hkbOH!kj=ep$xBW_^=O*-0)~@NkbO-NwzMm<sQW7(f&Wf75<)h@ZAiU}N
  6947. z@_-+rUHt^Op*UDYr=6|#;J|n6=9kv~4G!u&Sj;|-+S=Z_mUyoGLfOZ@PLkJc<R1qb
  6948. zd&-3mDOMQ0XicaVoUx5wXj46W{r4d(E+`J(Bp@hP>QBDgL4N!;RwV1d+qO(t@A!^Z
  6949. zB$SL+N`25eP=eFQh4i??02G;67)_EJw&KOGEsa1pOFsFo{S|W>hT@#j7=yeJM?Mel
  6950. z&21Hugh(x+U!@9OmC)ikD#=Pg%aD%9=l=l@Os=%@@)C7y(DRNJsHIPk#od%9z4{mE
  6951. zY5WPFH6omm#c1m*<s9ERw59>swhfq=tf(t5QX$g3t@S5R;gJte@xsG>gDMS><{^Wj
  6952. z!#@p;-*bK?yrPaUCmn4O)aps&K@Or6HK#k9;OEVm?)eoM(5j-X68}^nR??4kiCV;v
  6953. zqh7947QM%e{8t$$o)HjQ@ld@%pK)2*tHyM`RIAz6K=P{3AqC^RCrtw-Tc)Z-`lmZ3
  6954. zYNo-b2NtD(h;q?hR8A%B8rePH1#uzmrl-3YUDL{@az6Q%Lf@i}RGnhb!a>%xeX)07
  6955. zEvyBDydQSIE3>+&4x*31&}aU{R{V|yG8ufJz9{4UJpBv)iSj7{=ZJau(sBD%z$aA<
  6956. zS=Od@)TUc=?>DJ)e0k^1%h-~gj@P;rv(}^@#*c-$L>l`YAN)n4YS_f|1MDk0QJ%>Y
  6957. zIN4)iwZ5|jcf0N~l%9}NnOp?3QB{h9f5q%FTC;<R-Gb=gg$0sm3F9&~F@?=bavnB2
  6958. zU8br`YeagS^zvPb&OhP$#kr;+Rg$Ue;iiUI_R_v<N_I8%A_AJf+_j*JQ<SDf!Zr=t
  6959. zqnu|)>_3QS)zS%<$M#W#O>7kNJ4nvPNo_vmKBO2DV6)cBwrNz$Wi2>qnkHu6P|?^Y
  6960. zwRGHBJ-*|8ehSOgvKVY+y{F-PmA$A=5`npaGAt89%#sxspZ3mVJ^Bm9Es*73wMFEs
  6961. zE;CJKa&(VadBpdZOO}}e2X*ZaA4=nB4ii#+)kPW?!2%(^{3bO#Sqbe4&Gj!P+-H{v
  6962. z9gQ&!U0F4M*x+#GdiJLNKO-YmmO6cD__?VAds?pbigwX;c3F78?1q{|T<z$B^;@Yq
  6963. zzy4q;W^VDMONgF`FhyhWws-<Hqc`0zV)3fI#9PmWb+e-<BYTQJ53aBx1Zvt)@W!3;
  6964. zf=GGYfdDF3HUGeEHpjNU&J*sGKPF&Zv9*WAINfQcf+-Pp$7df-=$ZU_|B4LU%K3#O
  6965. zA7ULz;)2HM%BPBP=dVr%X#1+2J$}Yu&h?@!{27LADOTT0zK*|%^{NAm1j9(*@xUNd
  6966. zPpw%Ggp;{I>FxqnJPZHlGI_m~C(l9#AIavNoYOGk67*-9z>zi>Jh-g)BU-GK+&=HX
  6967. z+}qXLMJDk=@^9iZgd$Wx&daVGU`H~OhHj_#RY;eJOD4K(1B}VYH~&7uF`=8?C`W*g
  6968. z#HULQ1N5uDu`!0?I>H-=L>g6fnM;NBYg{Qtf!UU?Kib<@%X<QE*m@v~)5T{6ZFc2F
  6969. zS3Nu7n@^#bRip&PVfvn-Vp5&MjhYpJHX}p*@XJ*5>$`-;bX{?y@ohmZx{F?4oqP6u
  6970. zvpL5Wb5M#)d{Z?Ty7!TvV;eIm^XX$EoR+B8w`w64#W?nxaxURKZ=Au3g?LVC4B8OQ
  6971. zo2vYZCK7~frTMF#_P<eO|L_N9!bVaHrIBRD4{HoL)HJuBs46XL*2>UJIS|z{Kwrz7
  6972. zKgXVaH2ZT6g%hZ37*omZ5jkpEj9qF0?1Cg*@(sM-2TI=n*?YnpdlJnH2>$xfgsN1z
  6973. zSC{gKty%X)h4R;c_+G~{ibYM}f306Ms@`-x87s9igyA~hinB#e-FZ(X!<FT5tZEL2
  6974. zPB~3%zyOs$)wZh_Wi)T?{Nnky$$c{WXNSq?8009|`CY|Q-h4}v1(#T$tn|sB%=M)b
  6975. zbV)hVjPSI9((-tC$2WnDJsncV3Vp%<dZ(-yUrNMKNQD~r2vmcsFAQ)C@NrA*6T3*o
  6976. zD4A&&Q90J2jM;9KuYajnXBiMkF8x(GxZ_)EQxoJ}M1o(fN;LS@cx#+}4p-Z6jo}rN
  6977. zM{x`C%yOP0@k(PsHICfzD^q@jey!5Hx+Bh}EhZ-W@J+8@4!9a^YPZghu48_xZOP;d
  6978. zT?ZGW>FQF6SV>=hwNSn-`Q3x6%?|1zmT6dbdHj#Ci}?N;bQ5KE`!gu_b>^7s=P7Z*
  6979. zWq9~a@HM2|yz1R<R(;Sd|5%4k#DYvygPV1*+q^5H>(Oj&Asnt2oN)iGuHOFIPmL1<
  6980. zBe)4R`N((NUixRX3)#8x`zrX$l=ysp+MM%ZK48XS$PlwnnK3J$+@3TixyAT0mM987
  6981. zCIGieM6B87+H^6(*&SCjA7v608De>IJ4}Vk!<h5`kl5wkL%jz?8hj_9x1Tno@+5qC
  6982. z1MUXs3F-gbAqEKE!Umv8{;SM+VxDZPKi+-B0|eg<47j>^=0b<aUysCh%;f)I;Uh!!
  6983. zMXnzxi{chOj1~gj0+6)PpVm&@ww4z@x0B(#CYa=LbB{kyj+RuM_d!Uk>&~}rOaN9l
  6984. zu|#ohJHG|)cotr%6_VBauN|w)P|ka&<*q8ud)GOeJzxDV<0C%6Zz_Bz(B*kX@SppQ
  6985. zH@`o(wRx|<+w^>zI2l-Ku^;F;3w*nD``h#5m&elqX1a?Q=)S~;QHIal%hzpZ>&ND|
  6986. zxF35?T?f4DJwamThFI_g&9{E~OK-V-e0)R$c9`i?P8W@4@S}IFmom-XWdp}lr2k9#
  6987. zZ_Q-m*StUcSgzyYzp)juoi6CZg(x@raj)25yA^#S2%^0Bx`6gXXmX%3_*doFZ6iML
  6988. z_<sHNb93+mu$~fl{Io)d@M$d(JfOz{^cZ9*aeo}Sf8GZOYRvQGrf<NO+(g~aA23-v
  6989. zdbMQ<@Hg!EIq`OVlHhZ+t)&a@q=fW0+f4}4&;sPsb8NONapu2qzw-vDkQe+AA2`&$
  6990. z<q4rk3c4!Y%^7G*ygkrpN-F$SUC4FZ`|a+QfB*Q;8N1Q(1Sgm;5ng3@8I;$oky?xk
  6991. z))cQX*J{Rb{PeraY{vC<#NS}Ot1reYN}Pj3mlzvf`u$v|sKgc3S^jYT6#`YC&m6+{
  6992. zGj<OK9T<QOF!bq|BWV_rbAiL>ggzbNs|ozSU=80o&CmQ6(!TX=o;xN*?eO|^#&cgX
  6993. zATFn(r42G-zge15dPwqzb@W*-Hn|00V?8_WTAFZU!y-BE`(?4ySO?p>T-2iKp4&xA
  6994. zKp7UXx({F-GW-UHfCSPER?i}Qenmsx8{#O+jY#GJk49eJOoYh(WvNpwJr>zMY83GX
  6995. z!skNj1Uqrla+2{TZQtP<*dG&gVojfR+XOIVZ!f%8M}&W~d~+d|2MDP5k?f#o<OK#p
  6996. zy3)+~0(1@=C~HX(D3hpTz0PZ5gZqtUUgwa{clh;kR1y$6Q@(D(j-cA``;chN?&#hB
  6997. zr07UbuqU6_OXZmqympfSirr8nFjp47+{VVtj+nUO<~70J&#@7gBua5S!d#9Vl=I05
  6998. zOzP2!SqD4h;3_cyH5II;cWJB!&-M98IFaEZdHtCg9St^<Y$#Z$e5;BbjOQ2#JZe!Y
  6999. zH)uC+I$R7Fnzprvm>9ZfHKa_S#s|1bua4Y-Rw5|%Nnrp{bHHi<e}N&^&F<4mgLyah
  7000. z1d4Tp2NZevjCLba+<c9&`<wT+;iiuZc19u|<?-+g??=GK?#(vD%y;+we^LQA;q(th
  7001. zwc(phgTE{dEKHjue<zA!Cy=(|4O2zYt|WT*%39~cE~vK8hHy&^`F;=iTo?sJUFkfm
  7002. z(g*(_okR^9{%vj2Snpk3{nDay(f$N`=54omBj3W8-`BhLE~FW;l)rz60s>^2SSqR;
  7003. zdHDB!K{HJv25`#1m>(3Kmnig$|CE(gnflUUYD%i{5|#g^!>$p(7H=QzxKG-a_A18K
  7004. z$^^v}0Npd>YcMlUlVnG!CvXAW&@P~bIHPPJ+9Hr)uEXN)1sx5Nd!}?5Nv=a8SJO#B
  7005. z2JMM_kPp8NgP9cICZh8+f;OZ0&64$VRqRGy%t$9Jp1?t%X1fN67{{t{W9+L7?RP9r
  7006. z%HE;P{ywE@^vy6Z$n~vSqRMYV*CIvv>mAE&tjh%l2g}X%%YxgH7lg(=jqat$YC68C
  7007. zdrt@*cj=cUgF!x#-;(XIoOw^fZ622w%8|vTO_dj6O_2g&x&uL*%BQ6m=3ZXSchU*i
  7008. z=KL72t+)K#uq~?Y+n%%cwp%_f^o3qc=Bp2j6w>8KtpnUE3Bq4LZ9M+4i}7cMBV(%Y
  7009. zqGHF4DYGv)DX{SFBPa{JntJ%b395}jwb+O1K<0;d*WuenLg4d<__N-r8`0+=U3y2$
  7010. z&c$eCp2F|Mv7u&*4)^Xu*-qCxV50ap^o+T;D^918$Nil{pRGC#u}YQbM8)L_UIfrB
  7011. z5WxwYnIRPXCy+B!Ks_^e5+eORgtDHmp0cnM*}MM}M2D^X>P~W!_9l~%_?FZh!VbCZ
  7012. z&iEC$d(jWRWQ<zD-;X)#xBO2Wig7$z45<QN+w<&X3AR<tQ>Ym^=T%bFrI2yf8urYQ
  7013. zco(=!zgpq8uWZHPIsBqVzHh|~7AzjoV#A#r>ae4c&->jOk>dV_A!;TxG`cU~GIs;G
  7014. z{+IfN(Zh1n9LY@&x<`MpBaqVNQ?OfgfbeF=Qimo?FOqRzlh8WMwU1!jA#{>-csKtn
  7015. zptAedGFGVwFa7<1FhyaW<AEjr`UTu4;z<FT2_Ep*5jX!iW@~o@ltj6Q7KhCEA!#={
  7016. z+S|h(`vn^(_)Q-LUnKz&aPt}3G566n`g}UI&{h%ygBCum&pBy8J%ooLukO~ntb_|o
  7017. z057l(M^QfPL)WBHAiR)FuLDVJ{xS%=aM`^p-a_>5mZY^9WW8JZkiqzD^{aOT^7iKA
  7018. zmmaAqhQP>g(ENms*YveiKP~d1OomwP)GK4E)QI*!l3$WMLrw>Sgw{r8x#kD1*gzEY
  7019. zPE8Y4)>}Ezr32p<u^@&gd~~wV$H4vt?^nmW${ZulTToaeY-g0q3Evn<qzTRFfQ^{G
  7020. zPmVbB&ChW>eocA{M^e|6rYJLaRvjw|rZN(jM=4Dzf&su!Fne{HoR2+&s6_fg9n|Yr
  7021. z6{3-^ySK@=>fQ!^c$oA;b5oRd|8n%QA$3*MW4i;DS6M4t7th>q<N2GP>b^&%)Aq}F
  7022. zqRa`D?YWBKc+?s{gz|9n^y#Gp2r$qiks;nfGT*EtuKQu#KfD{#e&ONv8}empM~7SE
  7023. zFk>TzVw$w^==M7L?s^R^>EApay^f~r-o$K{+_}_!eJ~RxTm_@&JE2V!rDK355NQ_u
  7024. z7-09KS&1hA@&WZ-=;54jP$^~wBWfNgmC>xydC9;@s58j|TK&+|+~}4PpI-`4Me?zf
  7025. zuKCAu)aBEnE#9%=pP`pU=-~p0&i-3>UiX0W^ClYKZ7O6}xI*wn{2T6LB~9Em8lZwS
  7026. z2GQyp>5k1v+s&56w|M{{b}|IYw`CkA)Q7iExDNyn-2u%L<U3EE=+47+bCD5E#h7US
  7027. zmXx+hlXOl`<@H%;kJf0xrCdH8tI2!8<MSLRQV%&2Q5NEFSku*v<pdsmT7ii)apg=*
  7028. zUaK;{(uy@uHHC+jxOM}S<vP87V~esoi+A)E{+C`ElQJ+v#cNj)>}MbHZ98zUU>|FK
  7029. zhyxo7S*;yd^FU}Fkp~X4!zB<EEX=rA?~?TS<2A|tng(m$u+e4jN7MSg%%7iI7fHe0
  7030. zR5BE97j)9-){&IBix4ahhZ)X#PssqTAEh}1KvD66h3-8OtAm2Sp;YWvxci{kaU#=v
  7031. z^lg(g6_3mFNqX};!ga(u3kml;3x_7{%3WBa8C3jfncWa{rgPKOg8tBJljTAv;ZG18
  7032. z`yP8B-uk};dr1X2&*GavAvR`^cmccAq1t~^rq2Uwh!=zsM5!&IY!L0CxamiMD1}~;
  7033. z%YMqwI`stn%TNuY(&Ny;P2YhaMq|Xgk{{vGMBLbXKy-+(d8Q#<eVu6c7Qxfrxw;ef
  7034. zpeX%5pC-+OhYPV<><vWV5xi1Z+*{a=HvUwQs)(-|QH}5jwbM<0R?8dlF~j>;Z)bi>
  7035. zt`aX%Xs7Ya()x17<ifiilNfey`eWqb;|uN&{g~qd%5(T#7-r-A>*I1rH4^18C09Ld
  7036. z_a@{Szj?=|W$T46Md|GeQV=D7%_7^Xg%>|eKDuQ9Jblq?Ay9`g5Pr6`7d35FOuLeF
  7037. zCe#y^OE!tVvH!V`XtQGI8wAUgFM%RM$&MT(Txf1t)#yT{KygYf(8qzo&%$4%8gG${
  7038. zLq*Kp!k2fuk1-ZOTG}@}BXC1LoD@~#qjSfN&v8RMiG{%Xvz=w>`<HnrSE6=NKIkqE
  7039. zc}aG-K_^f;+#3HBNe>WjQ*Cu1vj#>|mAiSJ!Y)IY<+!L2SXy*&jD6edElfm&HwZ}k
  7040. zK(LQ;%nIecV+j3bL2D#BC}!)5xj+TP%zHK|Q@zSkT`P!n0dk=Qa;l+JF>f(qjoEP#
  7041. z+<%(|{}9ugbSK!3w7rCFNhw<;e7>Omz5z(nlEH-%G}Ealv))8rb5@7|6lBHnVeB`&
  7042. zBS7LMXCrmSz7lFOIjl>WPO=Y=i?`}i2^l)X;E{`wu<sd!lw6(u;@^X@!7Sv`j?sIe
  7043. zi1!Zc?+SkD5#wgLZKkpH2kAslr}fJ7xe=Or-QgDwy7wWKb5<@IL-4FIi*S;>*Uo}&
  7044. z)4Xup47)9oEn_Um48ubi%M~Jo7(XP4K2N|iA1@R_>y;ij*i?=Z2onkkl~>1WHROJ=
  7045. z$3K@#tcCLB)<t5zyOEHJg$m#zBpqF8T!!4lz!998Cy(mHcVVBzyCI$CxVexINed_L
  7046. z|H6M@<1Ek<6Kn}-GSB-og967);7@=|vI2cK^w9^f_Rq)drS%KW-5>6M)1n~I5Fjj?
  7047. z1x(P=q;z-}6yJ!x&(Gb>;*PjHOj?tn3(<yx9csIE89>#mfIlDas&W<jt^aUqnZ49Q
  7048. zhK>5Z@;uPA1$JQ>-p2X>zis+sC{r&g&H@Ak&@TwW$?F-#>GDML-iW_&0T_9DqOG9r
  7049. z!(EZ+wDpcIc$189RHNivl#$iJdar_PXC_;5Cn;&;4I6F6k&1UkfmzplB|1`X!1iE7
  7050. zxYvq@N}+hF_h9|y=V_d6rVpg06QR#}ZWrx>-jr-J%oukssbMRFu%il;yi7wnsG-QM
  7051. zy<W_uc%os_!a`C*=_T)uD)&oE5PwyN*ivTLX;jK)8ap#kujX}VE@>37@buoy0)H#O
  7052. zp~}L+0tjmv;A|2_Kel}>Q7Q#gs8BzbE+ld1-hwsKJ;YbKHdlA#+mv5xmn}+Dy##vZ
  7053. zQC7S>_mRe_r8rZ|9To_49|C)VxZMV-n=8Vs-KmBrfll9S*!u5~hR8@{9A!K0J`I2f
  7054. z+PJ8F;=jT1Vm}faA3}EmSl?(6jnzJmA#D0~$DN0P4?f~N=sD6aFl4KD<p!*TB30F;
  7055. z=ZF08>On5(?U`lCc+_Uy0OrIfBk=A`Ef^xC?B8LRMYr>Niw@b;f4%sDY17l|An?eW
  7056. zcav&6U{ieXW^1Sw3@4b$@ako;H5F`Dz~?C+%$7VY?9Wk2H*#{<71DcAcYLM!$CjI^
  7057. zfmt6*2YZ<Xp<nj8H7ftQf;f)#-YaavBe__?{p*M9u<M`i^Wdh?XG3U9pU{(Ox_*&O
  7058. zZnHTym2sVo3)8e?-^-tuMbF~l^Zm^P-cj+dI=~pOQ3oQcFtn476FdM^_>w)vlOeh2
  7059. zlUN%AGt4)DvjL8QV$05sCJQp1v(V`iT1a*YQlGxMQKPMo0qV<dXow{pO-s%P!IHcf
  7060. zVAKUi4ueD`aLAuFQVgLKJA*btQ~CwoU`pH=*&u#fWZ!YaX^%A__BIMB)IK!50?M;7
  7061. z)(UJ?B><pMGf`9i;_YwPP4C85<H41CHxXkW=ZTLdk|y-B&tvJs05<2}xZZz}j++z_
  7062. zLr{BS-+#NfgZ~$PwC30%3)|gH*0L}0ZcZ$+HOf;pN3n@2g4`3J(%Cdvv1kj7^_+h(
  7063. zFEvxH(O2g`CC<568FgymkJ*krEn3f>$DT)dLR)=a1}juPh0g6Of<L4;v#+tGBs?bU
  7064. z1>2PkYURTBm@1U}hV3)w=LKHN^2a0lLW(*f&6CU3*J9G9^Eo%SE*Lo+IYe92b9C=s
  7065. z5iVNBPf*62$|AxGN2iQ>psLwJLot<t(x{;J1!NT*Ta<e~Iv%8*&(F}Iw&XRk3}AI3
  7066. zJce0B6kg`-#|ZSs>#;1#RBSZ5)R6YNZ^lw7qus{^Mh}GOpMU_Pc>ElT(s~w6fn|2c
  7067. zJF8BZ+<c^R79tbVU7U_=QunwQyxqdx-{2_;wPAVPh#jpIcp{WQo{?xB!EO&Jm=Pp|
  7068. zMi|ojx84~foZ8?<S2KOTeoY?$t#yYVwx0L@4n15D-MdMVoTLT;J|p(N&p9WKneM|H
  7069. zdG6?P!<JUC20m$_InG@$*lPZgVMe|2ZEA?t5EZ9$0RRE(3UL5F65Mm?Ji?&p?-=Hk
  7070. zGZ*}}FL0&lR-rPRe*O0yH_$c4)WP<1)BJYip#yqdY@xJji)M~_9Jtl9YPPK}9bXT@
  7071. zANdQ_Ng66CQq0<RI}r;j`w8W|26=tFVdY4flDkUVE;HA`?eyariKQ(`Q@}(i3thAh
  7072. z4K`}s#~fV7Ht!&IFQrRA>h-vYh@(xaW;5+p72Q0f)Zpi~mf0F!4>^zRcq<)&Iy@vF
  7073. zn-bpD{xeV#g!Er@TiwyvYEm8w69!^uOmHNt<KATsV$aeV>NBZ@w4q9~BF|s~bA!mC
  7074. zJ-yZ5lVrq2=s;f@&u_S^MGi3{PV_415J)5X?$8sYnkZ-$kpfZg!oSBW4ZFldAN0gQ
  7075. zM2bHHo?A{b&abG@JPr`vQ0nrSLzfp{L#AJ5P<>9a?i;~8OG9bgKqsFB=r`Vz_utd8
  7076. zRAj;m8sB(Hx_AuvmzmICHFneko^7y75Z)5sPzRR+2}?KTjowZ)Ky?g7Y2B(HmG@y&
  7077. z7wk=_`$V_Q^O3d}z<$dUAHvQ*hFJIcRjDD?-y6^uXy}-rNhy6kzjzTWp5kIar}oHK
  7078. zZ~3g^TFQ673W}1T-3w9Tm76KVdzJ#fad<4}NGqfgtYpYyB@GzlSuG9Aiz$nXgBcru
  7079. z{N&V$nIjjQ%ELpWY@$@J=Ghi|2-q>K<0%Uop%<X^+sYe?4DBr?Dm=+PeXI!GuSb|k
  7080. zw%b^&-n63h_;XxC?<aD`qt8C_K-sz(8%<pR`DhZuhcE}KkwL2<(29n*NC^&E-xkMt
  7081. z;0fOKAar00X0?&L!p=-sIN)RHa&C4)8^nerM9>~Hr=YC#p$TL1H6;wpBB0#ozTAN0
  7082. z{?Ev_>8X7eMYscUz3y^0(VjTr8-)tewSUb4&^H;B-p*0rI%MVZjpYW6DF+e{L+37Z
  7083. zvb^*6)`C(b=Vw%mkI4%B$(^~3&m{sji^{&K;T{@j_xkpsqv};d51{R;ltM~hqj^jh
  7084. z?g)>gyMI$t&-gYt-PK7%*N$E-2Xz3T<4x<{`;FSp+rI{zdPSD-=B*?wX&Yr!Wp1j$
  7085. zir1BN7aFEvQ$F<!N7;0DFPQzvmmTzLdH0eTh`Lm#_*8R|FvX^#d5>Yg{%FQ*<4|P?
  7086. zRJA;9jSzguI~=RzZeBA1oA>lxC>5tOP1dkZ7EjDY$4XYF9>!Bf8>XP7muR^aLg|?D
  7087. zSEJfHwN&)4&h=&#Yn$1`aJNLZ1bp9}q5d3wJAx7}U~ACy>q^;=t3dEVI-{?0zaT}$
  7088. zTB%gSmjX!ZA~YikA%sX9V!Mf-kb<}~qG>yW{ZyO?bP3!HTttDif73`xID0#2C1&^~
  7089. zH)(H^^+kqq(%NNAjA6?`5+eawB1!f7qP@5_ccJo*JTc&#Wnow(^YCvS_pL_9_v;p^
  7090. z9`JPX@1hV<$Rt!8W?`fW0x7@TV(=IYT5yyx4uR(qW|t-YK78b`7XIa2Q`wxBjm;i`
  7091. zO=`-wXs<5Q1Xi7Ajpc*@G@f0GBLvSoUyA>98XU-3J`yYQ8xG<k_8RGKZvv_lZHcqB
  7092. z5Z+>{;RN7FxFSeRH1`5B_+8$WQB|eOlr+z$F7ZF))@_t8pGRI@&qjv`y1|htn2e%X
  7093. zUcccs)3s{thQg$@x_(ZK?>jdV>DP%rFbX<Z2Wrs<)Sz2%5U0)vY{mj9+3@LkT>=O@
  7094. z?M)jyhyZ@y%V!A>Gq?wv30pP-s49k`;oGr9gqTsF<8WfcH~#Mlk~(;O_FH8-fBG~d
  7095. zyl*-KzK(2O8nS1E=LWW|<gJWW$gZBl1P4i(-Td^-mM$Z#!#A2-YLhTu>DU{o^u<34
  7096. zdI=iRdEP9#amSx9?p$6-Fl#*|1lmMk?qefDaZnMVX2&1yd$odU<Xg0&cBQtSX(#XY
  7097. zPBkb~L`y|~Na?p!<4&MyDugyeune&Z?ow|0L?Dz(g)6Igk@d>HJ=PXBo{ak*i`m+y
  7098. z(#`>}WCaD`5_I5e;UcR-_qr<#a?>{qsl9Sr4<(ja3nWAG7bVT8_2`hyaHfUF9|J+-
  7099. z{c;C05dk>6Ulu9M<6*j-4|<D&x^xaD{PSbX`+>qn?cceM@4T8vrv(K~dNR`$p~0Ii
  7100. zRr_xfkZOtC1qn=2<P})X9Oddn_ptPxS2hOyKLZjxM!BTDB>DUKM><e12E*`ZL~*=Z
  7101. zVHf=uQ(5L!?caTdFR^TSb{OO_K>$7ej^rk-Zj1EAhiL0qLfC3v_p?QlLGiH~q+CSk
  7102. z8Pf5s3?lqA64}?qVf%dnsOnvD!0Zp&<ba+)azaGHf^;ZBfLw*9(>v<1{)zZqhWF2y
  7103. zhtMQ2nJ$*rFM2tJz8ZT=!ul>YrB2Y>Nhh%#yAe`9+_z%214>T*pwr*=DiBM(`esQV
  7104. z2;4m^Y-4x91Aa>@e6SI-Q(d!=kh|Gzl6HKH17co^x!3LYALRg}(%X>@THey$Yp8=K
  7105. zd182AMGC?pO~8&xC@-|WL*uV&w?M^{{ANpca+qQxuO|_bdjeaI+WtAF5-^L^w-Wo1
  7106. zXqzodnPk0z&pLsqW0rrY^vd&`70J(M2>d6XKO87%&y(dSO4t5TwC+*6nsK5d5!=dd
  7107. zRc)EuwlC3N2ujQ<=haudwf6uDB68d63@aQ|)@etyAZM~>HA}~Vym`J>R8mw9RQgoV
  7108. zGL$N8W!pFNYB$fBZXU5zdMu49ivlDaR}<{~<_Qj~AEj&QUO=#wDLST&Y|Pf);Yu~{
  7109. zM;s~&!aH0)=*#+A_xCnB5`EEktNio8<((e|2R%Srp^_SJo7U$RI#pj;{2{tYQbyUw
  7110. zI4=MCF1Q=|;D9qaC6VARH7RDQnQxVAsk0?}p@WV-?8OcOFz1V<XBbgc*7OBk1y?w!
  7111. z6(ib$7~A#-6eYTYENd@NuvOx*v81yYXl!pR+McDQFy=Gfgs!x8CEWoVB0Ik^>UX&S
  7112. zdc{hu(D$+3f!H_b`+x<$-$OmV%W!sM9i1?^GKXc3a!$W+O6yr}dLP(0fikMureWB{
  7113. zY0e$|Npgk(@_r<_+kaY|Fb0!}2KOhvb;Glb-j2Ykd(}3T61x0dPfpMz9lH~z-zp2N
  7114. zYZ!Av%m0Q-hYPzJ&D6Am8uEP4%9WA;X{k?h4|=gTZh6=ER#l+ypw3MKZ?P=q%)ZEo
  7115. zDs#`$8LK=(%1w)kno7Je3Sygvg}HHT8v@D19_uBDuT+Bg0N=R13FiLQg^`3e2@*NA
  7116. z7$+K?(iIGBsfW88FVH1X)-yUyZY^6KkzEszK=x8^?ahc6IB134AM3yWF*-*GL|@qG
  7117. zU#T7Ty0BEt)A=Ew(pwhpZ@1`5+*Z20uiL7noy_M-KV^X<22p1>HzhB6Lyj|eP&HI$
  7118. z1a2B$2+(rutHH9T@$JgruR6CYO#%r{*4Rr4u2Y4VuN)NnC9I$4yF?+Iawa=~N*a@2
  7119. zh39U|qzE*c5`WvR3w%u|AXyL+d{udyxBhI*e{ZpO^S}NQ#@;kSkv^zyieAqzGBD*9
  7120. z>X>clUjpKWHp^<_+HY9TQf}Q_x@p9_528CRN;SGr(QD-oYDPZ}?yEt1o2zig)9K*o
  7121. z&Jc)JhZ?79>~2aB9=gf|A2;@y_0pm?__){}yYP6%6Q-+>P_4Uqo<4(Ux60i-ulgF|
  7122. zip-<V6QYu<kwu<i>!$2uy`LaHwV>5)2_v>c=OG}U>odZT8C4))#^k1tO7nDuf>OFs
  7123. zd#UwGldrt#7LX*=h6{2>WD96Vo{L!GG!W3km_Iy00{*&)jwX7aaaY-nC1c_sk<54A
  7124. zgfGg>!YN%)XBBKia6T1sMRQjELW&ee^Re7Expq&BpuL2&_(f4z!cj}2pmB)zT`hQ7
  7125. zoyndxb(I0ZTozU`Oi+t`V&K%GKM_lIUDRp9`5SC1@0%BnFIE2X+#sAb>S!u&_}M_8
  7126. zo8u~x&9W&zLV^4ZS)L_XmUfgtbTLCBX)tqfk?8ixYev@h`Y$Y3?}KvZIB=C|sv!ZC
  7127. z+SUA2chYW>+=argskDS`n>z_NEW?>z*1DgZiv<+ypg~Zm%ufK{$zWeqBILsrNif}R
  7128. zf>!Q!;=5(s+ydx2gC)hRd!Y4(qWCoJ#7h2o&k28o3k^06G!1qtz9pCT7nocV-^^oV
  7129. zQb>#qzo_~z(KE&Y9nnJnhA{jc36EGFcAj=E-m&dkav44vA?kvJtv9qAYDWJNvMxhb
  7130. zjP+~?clCuv<u-7$YukII2?*s%V1a586KtC@nO!d;q}v_Q(SYwmgD-qd6$0N(<lQo6
  7131. zCm90h;;O<X(iux<HM6j1k4{S-92H5JsTFTtYyHAXjilL@C&#ZTo^13k7kr;4UgB)p
  7132. z0uBzoTHS*bl#pO<2Ph6%Oyz%lVXHOr<68ezl`fgTp|&t6FjmivyZ;7`9fc=~Q;1&;
  7133. z!bBe*L7}AEzZfT2y@HkWr%86*TGnO{_me)qoGjBtUgohp!|r=l8em+CWE9Cb9C(>r
  7134. zlW1GQOoti3<uky~|Mr_7F6TNwiOrvDVx0FR9BJs$gVJ=|fL~^+Jy)D`@E~){cJzA{
  7135. z1o|FOdhA(dEub%X`@z!eL@w;2|6MP~whx4k>So4@&hnAJADRahto@YoYLX+AlNDl+
  7136. zhe#7IFqZ=Dqb&%}&n(bwK0r0yNx0xVv|>reFxc;{onD5rnWA658=mO<-wHTrytybh
  7137. zmxrWcoQVNkF#f)aViHUdEcZt<{9QD0x|`i(jlru8%bCqeYXsXwTTjhwvB=HHJ3tz5
  7138. zu5fIWt~8Tbx-Z%1rW%myki+NMGj3u43l#-x-cn6?Em4haq8o!GCC}GG!T<iUC*Ib)
  7139. zzzU0q%?7R3(nYdeY&_L)vIm!jlI4maX&(W>9<Kc-Q+$h_GCm|H9vpy$7L~0pZ$xU@
  7140. zijMwSyf^+n%64ln!g^~K;Vp_cA8*@xC(A&7T-m}T5ksnN3DhNv7AR^5%}4HrTPn(9
  7141. znY(Zg`RESx`7rD}L-u>^M#5PWiSa4%wHgu<PQ#c(Tei?q^N91P+drLcF}wg27Mi?#
  7142. zU|{c6HgQ33Pt*F$9-cfd_kA$3cN)Y$^*9pyd)4|2af<XdagqaJh0HwJ){cl*vFG$L
  7143. zPP0tKnJtq5%Gf3jR!xMp8L)7|bw@R_;AleGIM15Mk1BL4@@(_L+Lw%Q=w~-o3(W9K
  7144. zS>R$BG0whBN3N4x-f!0$%<q-@X6nr&(G%qdi1DGE7cF*G%8GI{k|!r8ZWNueehJO%
  7145. zz_FCb4@@>~R>+2H4D#cIm#AI+mEo5O>w`RB464B{e7rV)HKv-#Oedu2%oKqqx?WQ@
  7146. zx(bg@ccsyC!7E4>>k1XT?Rd7u;dhw(TP<M&A<dXtj9hx#10ghIn~TVv-<(ws$kc9B
  7147. z9ovLm<zGRg?s)MD^&l`S+d!Pc@Rt717lx@l?-(~>10mavG%E}HR~JGhAn{i&^eXb!
  7148. zYj?Z}q}c0C$-&0eV2IfXyFI#YpsWettFPnG00})5xHaNyz98@sCS@JGB!RiVCc$Sa
  7149. z1KaAj>GHo9qpQW!!bRlizC43feTh0oUs-sbVqLf(^5*tSntSXuzu8wB)_tC>Re_iB
  7150. zmpz4f-+@cX1tZPXML1Q$|CzY9PSEdKKy1owx;dEXY`-W4$vEo>7?0Zf`#%qOI3fR=
  7151. zN+ruG=zs6rtsmKywU?j?W%!Y8x0clT<Ilt~h2N;2Yj=?YhU57K%P5=tszt}N1te)j
  7152. zDTqu(wVhI;l~WIgdEn}qo5m`Pzv8$(R{P@}FUV+vugR^)z=I(aZET0&8yY`8nF@IW
  7153. z#bLFu>`xe%;{d9KgvI8$nR+}Byrxtq7*N=w9>@q98~8xKhN6;4=^w~}3_q38<X_(2
  7154. z(I%03WfZSsyOLrP8XfjhtoV0dxCb9g#Z`+l)q5SRBl%_s(0VeRDq{(7iTr#m^-6>B
  7155. zzn=A_`cgYjlg^$yNoVo9Y^Nz0fB#=#IkvA~m`V|SN-${1Rq&8|U(r7jUS}~qbv3oY
  7156. z#Jp%byY<0Sog@*7YMDl(%9^Fd#DoptT*tPqi(bU)7r3aZ7P0Li$ivg!W=--yN$6Y$
  7157. zbU5nZ8P*9|oSc<=B-a{U9Wb}xmD{55e=4}HwFf!&z^u$MnX(H&ZS)-HoyM0Ctt9lq
  7158. zanz|)z`YULB!K&Qw-#*-(YZJ`$3QTn4l(uQ{-Jj8FHD(l1~vdiQid=fW;bCqQzM~E
  7159. zfHZewp1sWd(*9%q^u$qH@Kl$KK=D#pUzvN!beRxn%tA;h-qA5kbHtscPWAPdPa{ld
  7160. zJlQpZfDf)2808T&?^PMJ(PQQ4sK^J(oMcCVlDo1fvlulZ-;ddl*FPnmS{d_Dlva%6
  7161. zz~L0{Qyi@w%Nh`QqiA4>q4^DFUD4SO<t~M;dHs?ib;94|oqia;bDK5YDx&Q=dVv<6
  7162. z`=e+_?}jku(`+aBsZVqnTS6&c^&q`Mg0orP-&sK{J6nFHIzT$xzxN=zPW-tOp61r4
  7163. z7Liwz%~TqSi!{P-a}nGTVGf@$oaR1geT~3}Jm<wY&i8(5H+NZAIXRk|I}lWoE#FBg
  7164. z-%GP0%CjxYIc@JI&x-oQb<x_hSdeHb8IKGNxar)5pH7wOFbs8+xkYh`5@Rcg^U^eR
  7165. zWqGXB1cYKgH3GYP+yli*Dq8pNZQf-E{+`o0wh5)cYP2a~Dn|X4H0BQexn~3fI0=uX
  7166. zY8vp;_V`(SxS|%GL<8_#J%0?DzX4E7v;K_yw?N~aWNdXyY}2c8Mx)H6?hToHO8)i#
  7167. zcI=`o83Sc}SIc}Qb?wDeQJrT~=EtdVXL!7<8`wp;gOiiejuw=}hXx~~HVdBm#^DqM
  7168. zS9@ab!fN#K;$w*&gkBK((`07DpO;fQ)b&W3Tsmw{kY0F=<7`DFb$!YvJ1j%rD$8xx
  7169. zkf6GEf96l++V^j#fjiol88*c5_g`G-o*F|;1^rz9j;VIjM=}Yi=U;T$Q~)gm`+1`m
  7170. zvKU^LH8aNDsegvQ+eu8#oH(+%5>z-wP7mXZ;Qbq;H*jd_xK<%th7`o7ba-SjG3W|3
  7171. z5|fs`SJ69im;q;zo++IAr76F`yQY2dbw-Dg+7Yz$QNPu4zT0_w_7l02_oe!pocq(Q
  7172. zx#uN4%e3PFl!5Q+sx1`*x9S|ce>S~bmGGt(hJW3UyEb);LH6NeJK|~@SE=V1&ZJa7
  7173. zCoD@=F>?`jJPZ7l?@{>A$e!Xomm%u-tZ`oz(|B#%vQy!9^Ih{9s}FE)=Z}J!NVeFB
  7174. zxULJqZ2Olo=-E+qmW<{fo91gXO1oyj48_T!pSc_kDF4kW(wa>%T{-5m7;{Tb#f$(`
  7175. zU+(DAExouBJT?<@v2ULo2`CWb*GA{ea<0i>&Tm*6+%=%EZy2$B?xD06c+tHdt55kp
  7176. z+GqdiOza7PR;0Fb`03BSH;-=o;=!ZU9Q{a<4J06>aAa)g)c8-*)Yfl2bQOB@(a!SI
  7177. z>1eyRK2byn!&*y^aht%pUS-+Q>whPDe!@8&g*y!9?o0R3q2qk@lix94Zod*U^)ris
  7178. z&c)R8Z>J8Q#w#FnF6TdfEXElP9Z8k?&Qlq$Xr+zmddLYn9#8hfw8YLw9A!RD*aO$r
  7179. z&QS}AwH-u!ng&j&-mi~wcM3<~H6341XG_vhF?hE1o|HAp9nF#q53Le-HIKe)gOM+c
  7180. zHzYqMF0YWT5I1Lz`&-29Oq4#MV8^02BKKZQrTDqOa8H&-vm9%zQeqIvH9of<6?48)
  7181. zdZ#lj5;i&4$=26pM*I_l`YM8e-UL*68bG=Oub6%%^GRi{=ylCa@;`iU`Le}x)u4;d
  7182. zroh=S<`=Q&90qVOAm!5zi#*2an!A3r7|oUf-+ITgog}HMKb4<=U6^)iT2gSj4#S!~
  7183. zGwjpZ*r;X80^;TamJReSf2vG9P4ZBJM;V3hpKl8|n59e~70)<7&sQ{RH0}waCRBeT
  7184. z=RI+LD7?{e_SccGX5VF)@g;HSP|o1wyprq8o3-&eFkF&z4uuQwNlrfvTp*so*y6l|
  7185. zZeZshx%F(U9okx$S;xn1-AxlohSc@t7ANdQozXb$3>DOix!aI9x|$9yJ+YHmfSj9%
  7186. z;5^B%?<!qDZPT>APff)vy4pYb3oUvijo4GRw}N7v!dsf+Sq)TQ;R#-6nFgzz2I=|>
  7187. z@_jkc$fao{hDWz_2^{69V`}0EYi&`7)8l^MA{F0atk<cSW8B@0ed1Aw`D}~T2`PC^
  7188. zUAJz9`Bxjxs#Gy{&C_?yd-_)|f1K<rS-tnAQGE`2`yx(1%K-5i=*{tX^$9$-BFRgu
  7189. z*wUHp5D=&HUqOZbzc%%WQ~Z9XT)U$3GJNaV>9oXdidda=)v|;7EnTBgNFP_B$&Y!D
  7190. zuaoAnEu<FUx^~Y`pX!1uUuUpon*JA6PFXlZEnWRg7f^8^oAYK}|H0$Q%NcdUGz0B+
  7191. z?exlCrAf8|QlS>9g332XS0Z)q$*RT5R>92MYEw=t_4iHX1nT)@3c~Fn3B7Kg=(&Tb
  7192. zXpv!_z8(UuvpXVmPj4#MJM&_Y>Jy|j7S+E(9%0k)o-LU614E#s;HzTQ*%oRzdugP7
  7193. zt=Cc6cF}pvXhn4MjlO)^4BU1*Io>W=w?;vwe0ZZWJ@1Xe6M$`IG?-9CWNxee=zpxU
  7194. z?w}r(1?fz?807fzf8%a{U-Z}b2-Bm<N%*O@qj|gGqP||H$Jm}usyK7vyVQwu&a`wb
  7195. zdZB-7Cpg%A8`2tC^v27Ka=Q{HzRd5;Sm0vkKl0M3Y(C~2e|f_zs+2FzNsFdgI{nUz
  7196. zq;!k}h0`|Vx3xB@9&v?|OLgZ^E7IRe`Jer1SUe&*m-}A$y^CX=o!a43SZ^Ii6-2|q
  7197. zQLihA8a`AE{q@_5I0G3qRjr>PR#U^8$^PE)ppCK1GD%B<E*3rt*-@Q)9}6+-7anSj
  7198. z=&`~0_fRk!Rqe@iSkXKX*QROu<$S_no8Z!h>X1`1K`rCKIFYD5k*St3vYIhz+&SdP
  7199. zv3{;f(9lJ+su8$D!GFd`lPFI9L(#3vr7oDFkQz~O)c!w~t~svm@BdfJE!#F0Z(g?R
  7200. z*5a0N!_tjw*|u#h*RpMME!$lFeQw|1-#zZD_c`a~^E%I`)vtZj?`{%qBN|y)ujg;C
  7201. zpVn@FxuQZQfO}5uTw8^+-Je$flD!^xzB0ER8=NCAwyxjyNRVB{Trg%|F`mA7zbtyA
  7202. zLME5*4F-G3?yBEMfq$-7Ms!0!=Qjx_-K78hSC8VIxeW>ieR{k4gr02RqVx3p&L6PH
  7203. z+xgJ8yS7bskBI(b<HO>wZTCsfum2!KXcxUA&%K*LylqBLPnus0aI-D~=mQ{F{#d$y
  7204. z_W(^u5DG5>$N=-%!{@uxQWY=IJHx<420!+hV{+@zeq-apG5^c$w>R+bQ`_&vWDi3!
  7205. zS@&d7{Z3ie85eo@?F?&Mcuk1tKQH`OU&+Bb!OOo;GRcFtkC2lD@p!~TlRinj2syGb
  7206. z;+E0sY3e!`+>)6!><WLZd0Yk!mdhoTSWuIwi~tNvUYmG6db;TE;3<as*dX2V;Eng?
  7207. zl{Ojf_!*8XaN-*uJm2gUtQu}WSYW^2U1r_4S^OLAd>*}k3^8x=dSCPQwx5ANJ&Zy4
  7208. zcQ2?#uBaW2FL{3;NS}>%oQ(F||CqcVvUuJ7_Db8fFMPgy-_yK2ZnyC9T;*j>Wtfxv
  7209. z!UrJ$vV^T0NbVW<-<FB2Z4YfQG&VKevm7gQ>?kY<WI<*oH}SnM@p~bI*7kQN%fib0
  7210. z!9Ndzdm#K}_D!vSl#mnb#oumJ-f&+3MZalhz+|4IKX;)IJ-K#1{n@>a_I}>pz4h$8
  7211. z_uRJ~TwT9wynuZ8CWPQ|!U^w-zJt`i#_vx6hcf$w_gn3n=ab1-8@B@qa*y>!^7@Ki
  7212. zn?<9E=w1h&$$B01-LI>RkJdzJr9TK^0<pk87BrD9&S(k*CXQ7s%=xxDPws%8ONLKS
  7213. z&E1vNde=Vr0k+Endg(9?F9lxwHA>{We@!U2Z3UFgr0gxQq4J+sJ6~2eArsOBr^IU;
  7214. z@K;UbZ<plw`%ors54*|15Dwks`;CNO4w2Tfa~BX+xy`??r+@o?|A7p;zg?ieRlAV>
  7215. zTMPbtlY2p!eMxxr^!7aYCTn{2pTZw+cHFmDJ)e5N-Fx?bdYSnYxY%*mfaL&v{+}+t
  7216. z)A@$wHybACMqYh-?)g-a*y$7h&ItS8AAT0|t4mTs{`;qieaOb`e)qnj_ojLp@al(q
  7217. zgb+(^Lgv+bI^Ui;gCPvNag#6qX}yKpF7r3StcNiR`TJ`DLqfhN?Y&AnFtZL`)S=3M
  7218. z=M(P#-v?BA9hi}tx1u@yB#9~q&tZGmzLh4+%p-yR2wzjW0%fp^NirHP)8Rge%VMZ&
  7219. zN5Wk>`b&S?9x%|-O5cGQ<>MzJXw2p2Z%m=aUB2T>z$zxh>=&BSP982QR)VHN<_nY&
  7220. zd7L)>4Mp&4@?~u@v9t5_whCY3{>-&gF9NV`G87I(^C^COx%fRO%+|I;`w0m`?7BQ7
  7221. zZf_2GsE|GjO?F!%6G;9tO>V0O7XhH6Ea*e~z=Cbn^Zj4YcfRxX<j&{axSqUO=rixP
  7222. zr{MJUo1$7YDCsxNDi2M!K5DY*s1Fmf5M>?hFeZfke7}kA{hNPCGegi-IWKndv0@Ud
  7223. zxYx{U8s96Hoi>(J@T3;4&VZg@1Z{AhacjApQ#HkMHh8k+SLu{+s;=0YhV>u|S!6`g
  7224. z?K)8-o1PKLx1JD$4zu$0-&V|_&dS_L=_e>@QCGkzrc#HB+g369RmxlQ?5QtVB|hmm
  7225. zmt6<Y<+mhr`cQM)8x)^UXFn^=@InYsX#_mZJ^wP7W)S~5kbWXkl4OyE^ICNE`ofjQ
  7226. z-o_pWp#))wf?;GR=#Po=%cWa?m~cJPkQ6p|D=WtKgZ`@I-hN{C3B~)~)f@lkHt$b~
  7227. zh32sDZ+G8CqRY{PAOBN1mBtTUfFHBGUbF6uLURfi7=CF;zK@tb3F|GEA6I=)o_^l9
  7228. z{>|$A`?%0#S6bK0cFevCC*z!Py=|{g+OBf$vC{#VN&0vk0GH(HH6ofQ{Lv<Uw$!GH
  7229. z>$bt^u1uQy_fC|IOj%lqzWnTt0AG^8px7+GL-w|DnwY)pa)89{{StwrgMS7(br^)t
  7230. z#ghty4|d~yNHyF8E^P7dW945W$a@n7VK^x}f~Oa%-``&5za`SYPCm6wT6_D~bze%z
  7231. zqw>)3VG^hkXiMspm>Ie|Q~V<xz(zxv*oQF9($Ef`z8=VkFx{3`y{uII_fv2b!m7ga
  7232. z+4<|Q3gRdP<r9dV?w-ri|J?oZb2sa}n=ofDApGfC<n0>WOVJ_2=lI*(qvvZB5q{oh
  7233. zX`SG1qo!lN{lU%Ox<SGk`y(_9BsNQWJa5(0HfvuzE5Nyy0(LcM*OCHk^IFMLYe^?v
  7234. z0|hGsAQD&C$x!^jY(gF`KJeJyjEYQ(K2pCpO6hF3`K1kA;G?o@OMHPT*>%cbNWLf$
  7235. zA`kf-vLVgzqc|#z%8@;dTMIlA^aRvxFt`D!U@-<>JhCVna6kZIg_TgZE)f&DtBFn&
  7236. z=!f_Y1yIx>lcYiC6>}$51NEHoh9L&)f2Q@KuSd2XEcPwgSP$U@{Uay*bNdF|C&bC0
  7237. zcXf+D&*W4*)c+-Yf50<}g-~gx;M}645P0QS99$lLY{-n~t~hNnkP(LHJ!+r^^ok^3
  7238. zT?0RFAgExu{&N*=j6=n4<WUHQEY9&mtX=96oy)Ps<XJ{#qj?t5<nW&_e`<Hnq9hp!
  7239. z!YRB21XO^tc7StAK&|tOJ^)=17WI}7pUT4FYkHFLvF{_w$GO?;S7*knzpr;q$>Mx7
  7240. zqO#qTw1GWB2U83i*bEVG3*TR~++MG<{~jUrL0s#I>z7%jiff-=ks<#7TB@D|7+ZP?
  7241. zHyB@?KJPp2NOh_C5Pg*A%z#su)Bf~ziLPi5Lf~9Kgsjb4Mr|uKcsKu_HpL<Lxm*k*
  7242. zjXwMr_skgoQ4>8zo&Spx#+)_EB=)hDTq#F5V)a@%tLC$8je7Tj7S-7I(!#zK023no
  7243. z`2Kneucf~%QF0;{p)Be0X}vsbt7!Yb+KeSgRKO%Csl7_`Fyn;sWNJh3&F&k9=RS%Q
  7244. ziU19T{`JH>WQ6{(FJ?u)5>6lBtk_#GdS*EygpgPGjO@h?eW1NYK8h;sp}%gR_rzyE
  7245. z?+6E>s%+=n|NPI6@7<5Z#mEm(UZAL;31(1md(=?;wxJ)OZa?09c-i>x7w*{-VQ8cN
  7246. z9|F{*BMXWdsgJ}!=+ijrK-oXOMIVcZ8!?~22@J&u>i*7n!m290cX1tF+WP;k&I7W#
  7247. z;?+a)zw^*aGs$!YbhgaHbO@4%l{N}fYExM3IW=Z#-Xg6|Y%JH!sPYZ0{^LJW90LWA
  7248. zDH~G-r|F^`hg1m@z_BobV4ElvY__E~eZdGe<P*ysQ&VW4#6WsioW3fj%;TZIh6kQG
  7249. zU6IZcAZ)ss&$7(ErHx_ff1meig?^ZW1!JU50(^A)1qK7pyVa-)Z^r*Vk8klk;&=Kx
  7250. zQ%10XWDn3`#EfuDZVd$q`6=?c8Z-M2p=6zm_?;19!``}DK4<yc=bj22Jvi|F3JL{q
  7251. zoT?8pX10cE%*9XjO04Tm8;X9-+}`>fkf%P61!M`TL=AN_6|9r}R8XdvsgNaL9~X<@
  7252. z7i8lsNks(W@{mr4_7yQt3Y1?P60<Lfrtp9wB|M?8o>Y|)ZQrH;xkcZHNh#1h3y9#Q
  7253. zf}6wGV3<<y>meyw5{_Y$IJL~|_NV>_A)RK7qDF-c<49A+OwFN#xrKoe7CF#(fRKXA
  7254. zwHpbSylotkD<iE2GK9Xcms_z(k~%YdyMX&fu^I;MBFy89W`K%<RzoKtoYACE-|#9R
  7255. zUgTFSKtTUcfDIvy0uo7gH%jb4bACv3jHRPCxnSoTb0NKb<|Fy?bWpt5$+9v<g<7Dd
  7256. zX`C0iF;*lmJij~*)cspY1-<W*tXXJo>5)Oa>4uSK#$B&<Cs7Y1w45nbeC4W%t=GOW
  7257. zA=B(XE=kgjp#N%~?#xSXNV93E`WwL$xwF?T_tp0+@rLeVOVS+L&(p=9tk2WrFR^V<
  7258. zb4(Y1I-;Oc3HT8B5?*|Qq<^4AL4gsWlwnlvc$<fnc3i9HHYi>%$=}p6^2|l!B`prl
  7259. zM36TQRG%LHbGT0K4m$RhIUXN!Og~rx`mJ$GK9Me5LY2_wq9aFPqv0G&oMWi_$Ut0h
  7260. zHN*u!QZ?x+dj?s=mtaPQm-gq37utJ>hNl4A1vq>Nrr5ad3`&#NFDd5Xn;R?SbEVls
  7261. zFpBUP;Q_RTJUX&3g+B$%lKgilSgtv3()7{n|BJGE5rXPG3@y}}_3|8j8Uj0JkXI_Q
  7262. zn`A(v7zC|UJ$rSPA6wYy`s8`I>~$Sm%pFv1myzESfS4c_iFh3KeN<@@Sp>H&8K7VN
  7263. z-=jw@-yuVuegv5?0StygZM-|w(WCI^5J}m}&ny@Ql#aSjids!?PaWq^1;L2ZXc2E>
  7264. zj8!j5;H6W66Nu_A)F?;9_c9iaFA-Y#<Xipb;j*sHQ9GPtLd<FWJz^g;`biM`vq%3R
  7265. zFXOycp<_=i4}EvPY3jDY%7lf6pe+lELMx>%5ps!V&Fx9w*txB_3S7js(Gd~5dHHzJ
  7266. zAY8_r*O^l`3Xv<{0KX466|s&A%F>{w`QQG&jQ{p^i6)qf$1h3QoWE52TKi6DHd-vy
  7267. z5G7Y@Rg{m3WX`*>i|=dHramoxMEZ;<Q)^w|-n4O)X7d&&UasP_@_~hfHV49g<=&qb
  7268. zuF<`Sz6V2@!7=@eZ*uPqz?cfDP{r^c0URuEy6)6g0`lhhs5Q4Ql1|3UFhQn~g?0ZT
  7269. z`0@PCzD!;AZNgUWmxOhL{vH(Ql5X|UFFF($saz}HK-<3qw|+Egz>ibpSuv<yhi_=t
  7270. zDUOcw%aAznc&>Xk8<PJw;vO$4Zas~Z=hUpI?BbaE5@L;Vy2X7?$#DuGB?f=h^Ot$Y
  7271. ze|?Uz*xhG&i90zqLQ%-e-&7=fTCp4;;XcX)Z71KhZY$bsyHjP2b&F5KirDr_XyHy9
  7272. znygbj>}Yjy%FvoN^7Tto{e>z`*qW6g{jZ*PJ4i&~u1l!oEe7k;l_SBW>Fw=BOydDt
  7273. z442litm>PW2I}~-M#~cX7%&s2t^$`*fpJo-vr(zAnP)<p<%x>Ir_NK|lJAfV%G?+W
  7274. zM^SQVksVTbsbV&_Q{xJ&y+QHlhkZU+6Jw3;{|TzIm@NH>#^}b+TSaL5vnj}VDS8gR
  7275. z6RH1GkyV0ts^n>c0i>A~m7goTdEIpP2@x(YGqoa>e8o1xS(L`IJztG39@K~$RSbwZ
  7276. z%c?Z3hB$PP%5W;zYMcnr51LdC5J@rrgjssp(#x-8Qq9AaOuR`EFph@={!i$*^c=rs
  7277. zA%0g41w~(yS)2m^k4P*RiixX~=gI;XBk=_I@<bIl+GuimyqW`CJ!}3`t&z?cKFkt=
  7278. zBLS3yFWpR`iSoc9Zbe>5zrDmM+6kkjkt)jNtAYUOL}6YgaP!0{7hcV9bMe#wy``x=
  7279. zSd?(;@hy^0G)J~#3?nC_t^+^Ny9m{0f>#lCkdBo@S{d@KUSW?@cpgq=#{t4n_R9Q8
  7280. z%H#~%UL|bbtufcGA>E{D>a3JQhYE8OWm#g;aG{IqbEzXCF%Np;{!#63&XS0DTYP`}
  7281. zd<dzsScuyL{C#CAKB=FX9$;u#V9o2~;E%4je?N+;*K={V8<hKBQygI~1=bc%A8#v3
  7282. zXnV0jgHuVVv?2UH)$%K-9--z?!t1Tp+76=`ig=QguoA^32S7Zh*s8oJH_$!wL)tq2
  7283. z+|?#bR=FAS(BItWRtarIS64SquAx+es|`Dih^8oZfnsa>OBSk=+3Mc32!Yy<6=amu
  7284. z6dh`^vBNzIN^1Ow?h$Rec8Z#~(5XU#)(iTUSqQ>IJdq2EK})O<z?U1j#xTuY+O~17
  7285. zw4T;UKFyK1%$6L3a+k2_eCKCzfEj6CqS6P3R4nC25+j!QLCxsiMCSNB)$Q>e5^fR_
  7286. zy=w@*7atn>EPYDW_Hx@~&`7D7`ic(ngWbPoNn-cPmn2m-zSg?(hDW3L`W2TXO<V5a
  7287. zv%IqWS<Eo*7~|pq-u3zerupxP8b;*;1OmlNR;LN6eFu=H7dFS%VY(C{ROI~n(T-0$
  7288. z`rAw|wLF*nUD%9ksvfYu1kIx2`a4B*BS#cMLfan!Jfjl*^SEJBUXLs*Xft>LTJ^!4
  7289. zc*mi*h*8-g+&?U??`9kqQe2m}=g-Ndp!F>q=;%z4adT%`EFyDrz!0cz>a0WrD2gs-
  7290. zN@fFk<g$bptR^KYlRjFN*AT<vFH;bu$Ag5zdRkPIGQsDN7QBqiVFF58J1+Q8EkBJj
  7291. z4O>3R-PpSj9$p|z+TxZ1lXu~9c!7Nkz(X-!gE+R>9dy26B(~HHm!X={C#q1qfl--C
  7292. z@3@9>9qB-6)m&r=)o;CM4MDv(@gP_B3}2urvjG@k;*(k_p<{R|e*q91h`{8+6zm5r
  7293. z1T>4q@wb9|U6KWBy-~P-7O_RuXe&!enxsE;eSj&2x9`J_ccMxLp(?(62+kODlUDiJ
  7294. zu?la!5|V~xebPuD1_qb*WD|TGpM$_jGz^ZAYt+4r{!1SUd!5X|c7seb7j$t)0ZJag
  7295. z7pAB5rBMkrJ62=4P8R3&3#UUOWe5nBgL68G;~;g`&yj&D^N0M8ME|%sj`>Q*N>Y{O
  7296. z{mRv5YMrlZdAl!J8XG^T2Z!sPFrJJe#goNIIu8)50MK&X%}uIsF-!dCB<x^6ERMY^
  7297. zWOL4I@mDOF5sHD<3A!bc@uvhk&f*_MD=vsI^<PusA0y(~piKR0=j?46P1G8aE!gQ`
  7298. z#T)3fEVx6l7)i<w8)OHh7WG?Jq>drJtd}}&bN+TufhE8>O|^^%gMpu^U%*9?uk>&S
  7299. zPl$!dgujq8-LX5A6rIMYY}Cqu$ZfqhN0}aR-*e?y^BWZxr45^8t!Y8^@)-4#B&08#
  7300. z(vK2qZ^;OtX9dk#vPS}jrRU!$ZWN97YqU*)nG@PcV3_U+n}8}Esw_-2I%#4iAU8p8
  7301. zRL*FFbBhh$g%lb-a*Jy!$<@~}yR>BpGD;Nxb2MLC6b;3l*0pVq8#XGJ=BJpI=;sQx
  7302. zSPZNn)I5#vg<MQtCY!5<oU8F?Dwb$NE*vMR;q*?y@<U2u4Gftp)bH);7XM)lL4|_~
  7303. zR&{HWB1f^<P^ceWDwz@?oFq|qE#|dJCMg<SHc9X^4r`k2<l7-AtfIKiJze}ljOp=_
  7304. zw(G7OxF8ae+^Aj$!Uqc4=yy2Ne??xkxgZaY1I2XFy2~Z)Z=W*4&HIjRP+wNQBe69s
  7305. zxU*Z^N{~bYJkL(D;yos-2~79>7;}_akcAN~C7DW~YntcycIOT!ihu@f(eF1ea5Y_-
  7306. zN1crtAUPB6y=tu11SqWm<35<vyT#4SX>LHQi{8QgR<&4Eu|QmZHSJc8c$nR^9?}B(
  7307. z3W-V$RZ_{9Z4@0O#89bUQ{^R(a1g||LFtSk-K`L&4>~&z1?^^*FM_7H;k~hp&~lzk
  7308. zwkJF%*ApqdibT2Bd}NXW_Uw5daB8toOzT0lpEKtiL$T{vLyP}Zh7~uL!{ZW%RvIY&
  7309. z`~&g&m(?@kOkbr=?Z#%cZ88`054qg}Sh{_c>39-(Z@;-8l;06!T>2oYezTa!z})9@
  7310. z>GK_W+Zyp{BCrYY+atV%!U5|ezN{TWM9KAJYV~ZK_vR=uneb98aVe=S4UbmL!luD}
  7311. zDzijYiM@NQRXBDtwR833Y$%-AV2#Y8%dcXsln#?zpB?9plnr66Ag<rw@yLQiIc2g-
  7312. zMOM~|TiGCFNocjCQZy?CVFjAfQTV=4jWX}m$~!)>YSyuM>-55C3)g1me2gS8#TrdR
  7313. z4EHTwWk>#e86aH-5w8bjQD_^>UB*e0mI>({Wt<+xLwC3*FM9^Qw=|EqSY%OcW+9w#
  7314. zC4!7eKi?bSvQHaO;ERK19-?PdKCv@^7PZY6X|PLn?||D@eo|eAlLOD45(ct!(v1ht
  7315. zyx&j^)hHwHk55c@kj)No&--<s)W0U|bQ;fMA*U-~;>>+ZYHj7IYv6D`8bPdb2Si9|
  7316. z!X3@|35}B~qwxmKB&bqLbhIR!Oz%wtvgw!B5IcXqtKzisy+Y_hq6un24`_SoSbZge
  7317. z8(v2KQC?hDd!Zsp`)Suvg9IH|s`(vNFyMez&El7nxVFY|R)ax8b~$~|eL*fGQzg+3
  7318. z%(S<Y?mMtOHQ5mJU0upp{rF0a8$-=0Eq+~ZnpK#ZwMcgnijC2PE^D~Wx9zKO2O;-T
  7319. zq3?hGvV7#F1*Ra3>+Ty_*qleD%Y#&@U@RABj^pvzu-*ZVYESk>+7t+>j|gm3%Qe*F
  7320. z2nfDQ@Hz$8O&jJX^OV!h%5q#dX^>3To<WgFaS!HaR%vLI0G(&%if7@s6DiK5#oJYN
  7321. zd*gt<Bl^!s|Jn0D$#Ay`C*JWLi;qVv0PlK9OxS*H*v6WWAE`I`pj^|K;ll9c5V$&i
  7322. zvibapo)F8{RPIc=NO`N<>uI_TsaV5}CCx-PABnOoKF_ju<uPBg(kp%tV%pOOwo_Os
  7323. zkuDeZWQ|}Ae_9yuhK0sJ!cA|ZL@hwHPioB%uvIE&J)hUjmy9aHUOqMfQ)1?Xub>z7
  7324. zc7rATEMeT=<wZqwo9osQ&T(3T^uQh9QuKcWOiZavI082E-1H~`Vwt#ZBO!hmm-^s&
  7325. z&Gb#TIQC_DLeEJ1N*tyPUC$DZ0u2%YWp}lfZ;Y%fR<}8M9(K)gu7dCC6JnqdF2zQL
  7326. zm}a{|NFODQjc%(6rZ!$BnG}<RiBl~z(I2a|;woH;yE#V;A73l~hpn+!gkQKXX3Ay%
  7327. zSw)N0-*iSG;YiD3XAuI9nbF0U&U%W_iA!h_X$S@WH%;)p#%rx3p*|O(Yz|ze#8(HV
  7328. z8=GGg3Ey5`CrU8v`Z?VqL2G_^Oc*5P)PdC_SBIV^Q~7PsJaP|!Ear+A22b{mo5<mp
  7329. zIfc5GfQgtdCE6bX%Ra%h(PlZH!^uytNWrSr+4M>di*HqQHljl^scBJFLY!F0taUJ#
  7330. za{!JMJW0`9aX#ETopV4|Uqu3t+f_9}n1A?`aZV00xFm%rY<227w6{r4Yrc`+#j2<8
  7331. zC7K%%4Q51q)$cJ|)k{Qa6e|Vr&73l&Qcnz~V6Pyph5{5<oHDQK1t_faI0J$62*{jV
  7332. zJ<V|MrAkThn^LnifYs1P9h@MoW~R>EjS_PRP&#7?lYsfG8w%H&o~KXo3Jq66)M#We
  7333. z12YDQv@4(=tgkmoCW#oRhOdEA4DH)=$fUnUDu4)7UyNssH?4`p=o+xvBU~qRuD0Yr
  7334. z;z~K<P>z=^PyBV)jx_|T+JldjVo#hsLh80r81Gh0vo1`)d%B<q$@ws2V~Y_hK#vJ#
  7335. zFjG-^Uo{%S=X!d=N3E6vi`puVIHe3Qi?~`TXWDt+w51&3_f|~`91q*k)C3fB!f^I8
  7336. z&}JD62T?;vpZK{A5l737@-SU;(p-uyE2m!_sebwjL@!BCWCKi0*;f7lHpdG_ViK8(
  7337. zh$K*z(t|Jr-MQFTX;igsR3j~PP*fFG+1*ruRq6#R+z1%c`_fTv>;?b<Ca@N#7w)xN
  7338. zBc3wHJ8+>u4%SH4I*u8M#z&k|0O{QV3C=pY&IvmrqBu-Bnnh~|&7Vf3D498A^#fz#
  7339. z(^=?nC0YWTV5i)LMl@fPX?0Mum&Q-tpU~!YNxui(-xZu8Ciua!l&3rspZX&Ws3x^?
  7340. z_o7L;-3Q>&#EHfpM!ydU`L@L?`t=69s)FD0$8Xu_GPxKDBy*$jX_Ktaqqw<fr#~{0
  7341. zj_W3%2<W~S18B$gEE%C0HStBAqrIJxEz&+vF3<&&WiVhQ=Im%48y@Mu5%UixEBaXq
  7342. zXKou%uC4>s{)f(qtdv>v;<!xeGSWhOro_GDXfSBX^`-eo1xNL*yECNkYyyHyjCtCs
  7343. zJq5C=5lfmm{04Dw@ZC5cr4PIN&TTnGqejG&N~}KWSuK4Wj6dL!U?-~Q#{xtr)$*Ei
  7344. zAbn6Tlj=4Eq9-WMLkWJi`F?u%@;->OnFl?Uz3h$sMLd_`!=^N@8T=oQAu7DEvG}RB
  7345. zS}e3aD=D5U0?#@<Ia3Q)Ub?LstK186_q3dN*1#l?$svsq`*5&%xZQ?aFGlGMhHS60
  7346. z)za!JBnOX@(7CmGWe7~KQ~KGsEXc3B5d+jLQk+KRRIbs8lfxos?EzOgd1Yop&Z`d}
  7347. zqev5>zDqX1t~U<@U6HMrhg#{7w?ubTOuN<-z>5^D|F9MLu%8?U*#%Cb9ILYo$!VkX
  7348. zGWpCtz;VhkDBlTWV~iB!Y@Al2hL8%>1r^j`{}OW5jEn#TDjS$NPJDGQ9CP$BRd!;r
  7349. zgs<#Wh>o(dxBgs{ViUFCc+pP6Gfr0uh&^4m-O7E>%+vnLc}jeEu|64~B5+bNznFVV
  7350. zT4*CTX>`ec6trBRJ*1h*)!o4y&%YiE{M@`<Du#xlToXE0SUr-5)=tfl2&^DEn*UG~
  7351. zGhn9(!{F1KGz-Cd-d-9IE@O={m5(-7YLF8_F{#v!iQ&W0<({YoB$#jio}Z-bcOkU7
  7352. z`b~)~8%w>`Vzc^hlTOS+JbQYlo|t@1`l|xDiqYrk0#e0a=`7)XRR1q^$TIDNmO?au
  7353. zRrJJq29YjZ$<CG)km}5`Vo|z17nb0U%=M*rV9w1iN=$YRvDOb*Pe89*f~QWuJp~?)
  7354. z%IB|?<HH&MysYtF5VOeA<V$N);hEJeuaRPZ2+Wt8hYk!x3yim<+h3T8v(<8`om<s$
  7355. zju}AB)u85axjWH0?%h;8H;q+HDR45b?ur(yD&=RR)<v}h#!{d>yu<tLgviWTSd9RX
  7356. z6m+@d3k5K4E+p&vr?+708zbm&()cBmwGqJl(m?I8ZC7(5FVqfK?8k~+Jtidwfg#o3
  7357. zhO=!vu_Ze&`Fix_2s#7|?ZQ;6215PsV>x%9#Vn?r#~%csMGxmI=QMyhqEr;ji8N(o
  7358. z5$4Ik6xgz^uDqsX(H`Bopa&Kn`R==@!a!%*bJRCorYIN$X>I~rfv?=k(q|riLc8w*
  7359. z?S=f-mJRtZ!Ax@WxpGz#vR}&ss`Dmf73)#=#<*-(gfP+DEWn>PJmbrX>)g0Ii-^fJ
  7360. zn^!Eoy4%VX+pV3bF_4Scd4%7&8)&kE)pK$_%3_tl!%OHhs8NWCXcQy&am%$ee0MVT
  7361. znJUACwnfe)vNPrmk~AqPy;F&ZH}*|vif9-}i<ag~vy-TxU+3NvzKnfG5!`mk<0q-S
  7362. zr2)h&v@IhB$Mdv>;@CERmY-UJZ)}3C#2*f@DjEJrEY3D1%<aW<W@C*;O0$A_$5%QX
  7363. zrvluy8s~^giVN?lXBco9UB<S79EyH*f8h%meR^8|*^xe3reEgVR|%z}*CrcBegP>_
  7364. zLi^smo68}z`AmYb%^_=5X}BfO==7Yj(k(DdPwHV)u}+So+@9_?+RmYdE!h*qi(p3Z
  7365. zhw9moq27oIDB%#~NJCY{-`437T;XB2{_NX~NJ?8RorQ5RJGq4)-wsXsN?eDA8rP_n
  7366. z4#JNNS|pKEJK~lS*A(MviV3Mdnsc{^_JV9;bu842M7>yg^RlWHVPv-@oPVjRo}dB-
  7367. zwOtrT&G1o#A!BcBs_i<-AT}^wDKACLbYBuIkV?d}Y*UkNH&|01$|*<-DE6OZ4Px!|
  7368. zfe2iBEl%Nds%I2J=6>E6&?{bIAc~BrJ!l-}JH$vM#dGwnPP}#ELZ!$YygbRvZ`gaI
  7369. zx$^zcV}nqzO5?179<La~rW(>Mt?#sMz{VLQ>nbo%H2aRoYXS?)kusY?7bZ`|T8>8i
  7370. z5sX9!Hdovk;y{`<O#_1>C8g{&dy8cEd<+l<<E0*@soQKe^%a$98S3}c<T}+9=j#0&
  7371. zGt4iwy)0b!%Y<X|--F1u1I@3)fgDPNer2_~ZpBJCTZY64T!gMr^chQ}Ft|}OQg@Ba
  7372. zx#}+V->8JJ2sYnsM?WJO2sp#!rqV!<;{PJc-ZNnA6t<K_RB2yI3pjgLhfv#4=O)a2
  7373. zO--eXHDMkwt^1rUb~rOLf~EPXt_pb=su{GJ%+r-JikH1~>9f#Ipl(u1c@+v+*S#;(
  7374. zPPVB>D#+w5v}o8$0=1X=udICDK75}*i!xFvogaIUr%glCOG=AOv8Wk0;j7~Trngp;
  7375. zDKsq4Ex@YTgv!khfp$@;@K4S%xX{xhg)oY(^5YG8G*?z8d+f^91xGn~9wbdnB3czD
  7376. z-+^d3a?!7ozQ%LPHf~AR4@|4gmyY9^z!Rz4%@CQSwrKN3a)*PuC(hs*@grJ8wBfOn
  7377. z{m&*TK1K8t2{3uO`IX{X&Xz_>#N=2sak9?M266m0eNR3SX=C{Q3>Xr7{^l>P=}1=^
  7378. zXx6qD^#YV=%FM3@u*y`K={}3xt;3GhmJ6U8cxHQ+m(hc*vk+)7urTYoC~PpytD)%u
  7379. z@DbzJI9SF{aK?%!ecRVgSo=oUgG+t0*BJB;WG;#XaD4<l6!5+@F;gtuE=?X;t>rCc
  7380. zXTqMHw^a>y&BbNqdIp-stteJ6Ka$ISU9QixKZ#gZdcV9OW8r_yy@mH&xr$xeCrC?~
  7381. z|2jpsD&!4H2g4=a7iyU{PT5}VLk2lnns-8zJd=p`34o%U+Z=`9+6AH_0nJcKRu1Id
  7382. z!5gY{QF^=nNIAR7uu?Zs_LS?7I#{Sz6&{JZhh6=mP98lO-$1MlaUuB9(%|8?)eWSb
  7383. z_kM-;R&zv28c-aAdsFAmQ8rRUA<ZXaxb4v|!B@Lt?1D$mPkuZxXm~JTl-bX1j!W5~
  7384. zl%q`?iDu=p1p5254N?6_-OhBy-*}q?+7~IchTK^#z2*H%h<<3p-&#8Qur?!3OOkra
  7385. zniEA%eEU;4*DS*s4#L4~z?_X?byCH=^<Xa85-YF#ON_0q_B~s&?pD>nUcPF|BWyQ0
  7386. zFiBZJThhg$l5RES76j>ABn6ow*aT{P**ouUW3S`Kv(!W7O7{r~!0OV-F!RI1!u=bA
  7387. z{6}Vwi2RO=i;LOc&1d;gC$f@m{P>rj7R!tviyzO-zd1t`MUEqKDznJ$S+m)Zv6EW)
  7388. z`{xHp-lD*_1XlZ|DB|Q$gtjFwym17_pN>1BH}*rEh)`%-NV$5BlF2_u+rmK*<I_aq
  7389. z49LF%>a=l23wzLN=8846ymaI|=3FaP3Z%nSsPEz`-OFOt8jCeqV(9$d%aBkRkMpI&
  7390. z<8x;iWXnJV!IB$>XdK%ZXc@)1RK&m=;0~thPgvA%xZM_h<(Pm=bo&=#KY8UEM%}RX
  7391. z-60VrX|r<o8?^&9C(85^OL&pEdSw^o_g09(80SpP)vz3|3KhrMX`qrekiF?BIZb^(
  7392. zx_uJZ=Ww+)E!bp9@=?h;tvHHwbs@SJa1Xh-jMdg`So*cBON`7bbYbdJRP*3XOBt#b
  7393. zQ^ipXzYINdONWSi!3BxoHFHkOx;Ck4T4@!P?75Q5zBOFD{)oRV3Bt>4Bs`=3Am?27
  7394. zEbHr>pz1o`$~&-$8s$aJ`AWgtG#mDoP$ft8=NbZ!r!3Pg3hK}zRls;u*YJ>{pM|uU
  7395. z-{h8E3;GL2jW1$%bt!qG^Hkvx<;N)QS6!~@xVSG1RM6Yevdn$WqS72G^Iej^7Wn2%
  7396. z$m7;?PA+3W-O*Qz99N-@+GR$<UI4Q9rvNjS#m#OixtD_xfSw^hmspD>E>r5bN}W>b
  7397. zW4%<}5+x%|pJ3gVaQ3U4O#N(ZS!5WkvPP?F9f_{<7LIN!f498IZ#Xecv4+xRzqFan
  7398. zr=yi@NN>6ZwnTPR-)Lw|*!{<}j4C}-8ijR%Jal*1ho9xGLXQtAGI$m|p7o?znFexn
  7399. zxeez0Lm#G3wUNB6Gt`vQc$58alV!ZBV=f{yO8Q$xSHO@2Q=93jL`pgJd_(aUzlsbD
  7400. zZ{62_)(p;g`FqgB0O|wV1Wu6JbR6N}z92J95UEs*OCE@r_?$ycwy)#{net;7Yx-<`
  7401. z3qFmLd_&nJ{5Q~Xjtxtk$b%bJU?3!PB<Z~X9RUg@#5z4uID*=HzCTtHY|Yrn6-V$+
  7402. zP9{KDEBIx)9DN!Ji5jT^E%?mso&;YTmej;I<vFd?^kUo_hK)5iS2G#T=1|}U-?N$D
  7403. zgfiQemDd5nq{7(^T)4IFTkP98alYZc9_G4nqFT*gOq_x)<^CwqmtpgRKYGzc=B|~}
  7404. zxrKZ&vDQ<ZX-%6??Fz7|RZ^h6W#j!UkQz7c`Rx8~Y0_GQ(Eq+2ofKiHn+=SQ&<!Vv
  7405. z2P2)+pGt<NM~u7vv)-5w@&;~iGZ$`69{?Q+_b75*wlalW(r*!)6H?Li3H`K0+}M%)
  7406. zE<^YN<j=5zj3~|Ufe@;jnbhFPncR$0K35Z`{_NA9&iWOmKa*DOrsgxG3K)`;6Bjyk
  7407. z3}Yc$A1}wo6q%_3XCHL-g_C|1lcS95B{)rAQOHYL=ZB)Sd;nT}X@FQ)9EzWzg*AV8
  7408. z{zy?_CbuLn(}+6>a|2s1VHOH>>OYE<6Cw^Cc4PywBz_tv!rwVPKFW3NkvwL08oX%p
  7409. zHJJM4ZMqR+l*PY>vE=*_$5wIQiDr|eg=h>4B#VeQj-=iU!o$)~d<xzM<~v$;O?hm8
  7410. zIn$}H-Uk*;FB-63Ig1N@07S=+NKvmdtY)H_<p!@r!Bu{<v*mTqX}teX3><5_*@qmI
  7411. z3FDBd+=QIPDbE+~UQXBKysi`H+F$?B`x{yo>UbFiC6`adc(^wTUtdYk$2F9NH0%4O
  7412. z<!5CjYNqjwd>=4jH4aGChDyp{5@RtiD4Fy;<K9)(aa;n_Re{X&xyXIoj3F_Sk6`Fg
  7413. z-m(vN+5C)3P!xeFmNf~~ismk45Gg9a|L1s_a{MFDGwQu($}QQKMEP>F+=Tl1q;W=E
  7414. z%M8`s?1nNHN4XvpHa1A!R5+uoRhpF1fyri*nBoJ-Zkopvww~XmI2M^dr7$<(-X)*j
  7415. z7dM2#Rnb?&MJFD+G-pPnM`blm{N5tFg63T3n<y->e9Ga~06z?;Bbmssu<^f$!$h+a
  7416. z39P1dA}fVr3gyGdlS^yP4}aC!yV(+<hWQjrX5ATvgedbkH)eF_q$h?{aO9{f&rK?M
  7417. z2ye5%-KxG>kKCpDnS6$!f+2Yz!{P$sS87A(%iqj&C{QIbPv=VU!Z3aH%s?h57ls30
  7418. zl@C=}z=rO4J9I{wy>@4My#6?&KSb^P`@VjmBkFqkhYDtMSQlqlUNEd{#zvf^D_qy7
  7419. z*Apdu<a&=}U3?gbhI4AA9txj>yySS$BdLT${aM4pD2DfseJ6IzUgP!P(}#9SZ`a7q
  7420. zUAOqBBAvt<b;hAarTBS_Vg7_E4P<Cdrx+O+<=G^mfy{%0g$?f-q=4S<3`JWL+v?~s
  7421. zNTp^s&|acb93f*rZdj7qGh@=6p)2~j<Yj2)x&^eK@k|oF%3NojF_Cd4jh0FhALy+e
  7422. z3+OPFhCLOu<Jtb4#U7lqJX=Uy<NhT6;@9>UlJ6=6lI5r+i8(MG;~?0<w<v@rs6~qS
  7423. z)Dwj@S;{vW+QDrd;@Rv6`+qJ6!AX7F&T`BYpVyuwDY50?*4yJnN<2CV_Dix$WD7$J
  7424. z`oLwbAg+a!W)q`|h9X<_et)$l<5a^gVU7B|@Sj=(ha{}=TE<wbQpIH0TYVAS5Q%Jl
  7425. zfz{E)+z7H?xi+mYYrdu39HVtq(@3En$D-+`z4>SQZ^7prxWvz^@VBZ@vE6!*!nTIQ
  7426. zFzS~ENs><>kj91v&u)M!7lbRTwHrcHQPR!+W(0PeuX4_)r3yjl0QIIluD!*_P_P&2
  7427. z?8{D8n_eUYl429(G!gXuMr#_``&{ck!cuPZ&c~>2n#h$$`qG4m%;e<H0oJt<9I?M<
  7428. zO@ch;DJ78Z_d9vJAVj^?uF8KRX#IzTD>IAASxa`~dkDp>2eW?got^1iTCwbH7H2j=
  7429. z!bBb6jd!2ye?lepf_3sL<q~@_Q0Ev^%a#%b)qa!|KG0p0%l?v^|6T&4t_nvovA@Z(
  7430. zsALq#5|c-iUb%??RM2mriQZFls<dtTv!~rAqF9PVz%)kkXmVvSG=2wpQpAU+cPSfl
  7431. zKq4)F)PU#5xZK5ZVH{4^8P$X6i-Lp{8sEqLap%EHN1#Ep8Lj$cM9!e@n15c5n-Lr$
  7432. z&)dUV6sPJ0zr8aMNaW!}`Ax?Zi&p;zRvq%iXio>VKNo1dcg_;bW~QjikuZj-(}e?n
  7433. z?5v@ssS?GNMFj>p7X2dO7JT4mL7I{=yv{Hc1~`;YI2~uKEy(c-%Iko4)m*(yR}%lc
  7434. zQ;8<^exBh6B@763`a0{{<*`q>3;c$Ifr*f#z|;5(_|uJ}0d;0Md}XOCHod6HL+4K~
  7435. zSMk9l3}=$X*%Elmow`6VB~PdY#Bb&!rl}jheCLv8X`(>{?1xGVQQ#u|EI%>9Jt%Gz
  7436. z%37OB^Z?2KRU$3Tp9pSQp*$_x8ZJ}ymu#t>6SPW{`zQ`diXEYflU)>d5K^tlX87b-
  7437. z{SXs0%>Mv!3XT(dD`{$}BMqH9cIIOq9*!90iKz{9HXn*OV0^%Yh~X9zvn++b1O*ZV
  7438. zDalxf=1Vam8YXNo=3ztWP(9<>NURi41%*n2AKNgAO;kEi5;f{g)w3@ll8uiug1|dI
  7439. z2sJsN?$mU*TUzv4OO_s3jlz+MLtR}P76a_N;k{!zH107z1}6AkJ0b4mDiF3<deN%c
  7440. zF^bmRfrcQ=YTL4L4M?>g`qtxxu1Ti0+jBnFTlD=!$T!L<9M~1}QM`36{9JqzGvipG
  7441. zLVDTqlGWtSbhx;qs9E#!znQNm=J6KGef|@Kafd--+hxo(Q*7b6g*NGWN4S(QOxg0i
  7442. z?ieqI=u7I?wR-O%Qk^+V{SZp?0BQK(S0SxbxQHc2GR$G^{2UIV$G@Zdpszq*7;pOu
  7443. zUCKV{foyTUK%<5-xypVugLy0FWyfVlEI8s562F8%CT7HL=65r&JH<|?ol#pzCF`92
  7444. z!K2v<Uz1F-bur39%7k*Ln8fMR)VrosZu@YP$i0}09;j=e;Hfkw79STL0z1;7OlEtD
  7445. zc#KP}R_&ltTbt?&{z{{u@NTglr`R*HL;Y`Ow{sXc%@&M$RL-+r$V7+;p<snIToxmb
  7446. z`J>B;n}M2ea*hq(#6JDxT;-5G`!e(FT%n6v99`>Xt^hj{?~g9bh&6E@#lK11@*%e`
  7447. zNfLq{x!*!HQ&-k~?DH5R8<1zH1(}d8A0npZ*vXYr-$eD;feouChN7j!+kSTDLc(WH
  7448. zyJeg_#5_P9JUJfk;(1T%c*FEKr2r)0ab_%nAm`G1Z+1%!hCe=|II*Hul!e{KODqXf
  7449. z21qqxPQ`>Ehzy6)qpZu9`@2NoND@q4jCZxuJ*)i<PZniWnmUu=wMbKfPs-kB(%L9_
  7450. zK41a|jtG7q7vck0!rdd}=W<t4O4#M*ytNehv`wIwO>1+M!|O2bGs+?qum-8devxb)
  7451. z`U8L4E~LEe0I$}azaVrL@|GEMV~M>5zL2ul&?GH1a##oKya(~CC{$L};hk8|h^1ZA
  7452. z$dYceH;OU!jeAX~FMe2aZ1i*TnDzob#w<aJc_0(x)JlunUuf3Yn6ioHqYCm=xjTY5
  7453. zAEs^iF^AlIN^(w~O<(j+*#APfShJk_Of;2ezw{_a$p!VVE1HWGY<{0^130*SDMT+6
  7454. zk#ONrnqJTpo099Nwwn>!M|#Qnjn>5`(^J94gCe(_l-$+9WX~lGCi{cLGs%cP{=YZ?
  7455. zG?jDI5>afv2!^&)jc(Mo!o*niB60^!!x|k(?-C`MVGVEzq*5vx#)@?|iC?*yE^~FM
  7456. z8_AmS7pr5#P*Tq0!@7Ty3pHf`F1W>L379%S%kzies6rzt73PXKK{BvIp6D<X=Mp1&
  7457. zJEX0OG?X_<DNcjX7Hu5`3kjuejGJpKTK5K8y3C>8GRufmbv;<S@3l2{3kanhc5<1e
  7458. zg&#@emy7)ZT%6xWcal`ExpOmi|H}0l<j+CjVwRUFJpxMu`llJ>l*{N){nH62Dn4$-
  7459. zj?f+WOAJlL&;yms{8_&LGLMte4^I)V@CBY0(dIC*&8P+&B!E`|F`r@}M3OToSrqus
  7460. z(^om+D(T3mW1qNs%;-Y1iSL+bA1SP9X(|QEUF^*jjGc8UQ3^PdhfmcfQUHh1Rl#6v
  7461. z|33_f;s6BDi-&{q?mdE)7M&1SW8;5`Cqk?Kl-_*4KX|B!`A`|tDp+oxPiz*hqD8Ko
  7462. zW(gy(zu;T2H!6bh(HfjU%~)w!$I1GTAycF*B5`$OsxRSWWQGRqr5??X*tq~S;zpiE
  7463. zlfj@yo%eYWT3jL15gz%*(fESi1e@4eNw7RU^5v3!TqzF*+n|1wYmG>}raE2ax;zJx
  7464. zR23>0>9S0j&F6e_t?1?)u1uS;biG<Dw^q51CLNxHbLzT@ce|P?mD%Snqhd=>Sn)j?
  7465. z*7T+sKat}b6#HCY+msNFyd079uz;><p}VcjM8+_!z8sf`5To1XTrlrkCl8{{WVc<Y
  7466. zO8kh(!d1AE%?r^g$$D-pank1I>d6&Qk6jd;i`JfGr9m?%J`pbZKmL?O@+=*(3Ahb8
  7467. zIk2n;v!n(I67sYukwZ-VuJ$l|cxKo&8T)TPJ~1l1vJsSb*QeaB(V}vy@UxF>XWBiY
  7468. zf0{^(U#wLtvcXb8Gh!vTwj}-Q_rm&>0`by7Q;bLoTb^*~p#?o_E94W~n7I!xEmM{Q
  7469. zX3g9OpH)KGAcSmDh4`>E$ULa7*!Tcq*Nr@KEKs;C#@{jdeKD}zNPziR7K(478iIA|
  7470. zflo)?+NTmK$HHd8Zs)DsfEKuNcR#7Bl`J%}-$2>Y7!5%2k&v#bE_6z2YVPo`Tv}$P
  7471. zS$vysLdLQJXK-&hGK-cY?$r7HGL3u0LWPdR_V#x1Ym^iiYCM;FH7^Xs7;weD>p&`{
  7472. zOe)o0B;|jmopzgAx@PYF#fhCj{R?pcDMmD?)!(v%c-QBkLxIYQld~4yxQ-Y(+;;hm
  7473. z5Y&%j+YRJ3Q)w?lm8|oA`$;*-{Oh+LTk8p@Zo5ar+J9R3Atfy>Zk0M(NF4q1znly(
  7474. zF~A0cN}zC!y0W1K6SS)znP7uuo$34-@BEriiKv4!!joarrw^Pwu~aBDaBl$5R3CH5
  7475. zMO<qg|62-}uuxQ@MDG}`K{JN}jmiOM&WE@cMk=;`s$waqT*h17pZ&SX*cS@^)x4L+
  7476. zFRb$4sWC9%=UZfg@r2(VCW{5n+v4roZ?y!@+paB*jkj>t>uOhw=TmJj5Hv^>5SWf_
  7477. zitU*Ao;vlnY~!AtB3d=J+W@okU%h#g`1LP8#@Zlk4fRJ-B<pDPCN%FNGU?TXeA~rh
  7478. zlRcky-WD?eru$AYcHP`?+pac7etj7EGQ*Yqph!;&>Famt_;PJGRC%%5F4s!28LC{8
  7479. z&Wr??5PHjov)(J#0_Lvy%j|R)zuqvLO=FR^>XM>YAE3+KB2#8Dxc*RG6#tCHV5%;3
  7480. zNK>?Sg<LD*vkdS7#V>t8C9V~h3qD=Z=od`c^l|Puf9i;y5PAFIP0LRbCAFR5G?5Fz
  7481. zDWBmH8+`@N3p#SB2p}UZgvQl1ras@$C_(MpvzF%PKCH(`NPO+3^hU+TumNi!Ueb);
  7482. z?#aTkZ{_^bTN8Mz!Uz-1<A9DN8Z$u-m){pEX2&x6+u^0owjKK3EP!LvpDr6rb!3_j
  7483. znRTq(%TaT69jS@n`W>vC$Qa|~q-BxXAmJz+Ge09~vdt{3Tsb}eBUpz<HCzLX{aauw
  7484. zMXQx5r402jzlJCtD0p&S;t8(5TN|b)uV12|=~8?z#!xb7Ee*s7J=M!eS6}Ba;a%+O
  7485. zKZc}aqt9k2c%JBn5ti5-Tbd}BQT^~1AB;TCD`_<Ejk<djOuL+OO!jP-AIfk1YJ@9&
  7486. zh)#P*k<wEM1h7|(a_|~SnSy?6Oj}8a;2rT~AO2^KY(90c7RU=6%65s^1yCWhxpaC6
  7487. z@;x(5sf7~iIj?D;WPc{aeK6}Z62M}z%;i|Dbgb<6ro2Nj+pg}$@>unRQlft_l;bcX
  7488. z&mA8Tvc;og%_7p>W<~9_&|_$^@qqtV7Mj`roYFL|eNjdkzX}N0D;)rg5UT_7YR=8$
  7489. zV-ojT&nCS|L0OcU#4KT8@(M{Gf~q=+w~QRc7)uis8UJ##8BvTTSplVXg8b%<gNKog
  7490. zVQgmTuJOVi=71y^c>kiJdN&WS_%!SrGyELG6?s_C!+FK<-e8!`FLZz+JXL)cp6)b~
  7491. zIVA&m2Mxo`V~O21dpkZxyu(wO7%I^g+=;Qu?DMejT84V{n~o;k2HfyksAfui)LFLy
  7492. zSh1vY_Bbeo^yxo0WH%s$!7X%IMluL@TTC#C(u*#y=Buli>Y;LTed0{H3kxL3K0yRj
  7493. z%VHId)}}?2H%|XWR@6<qm2#rEVRxL$Fc5tjim$W*y=JAErbd@xf|awfr1cp0H*D9q
  7494. zSHWh~|5o9am%+NnNh+=IkWxsWHD4g4YYPqHavjiNW#;HV?ZT4V%tjJv`W3aiG~TPA
  7495. zE+2L+3asNlp}nO+TOE>qUb`A9V6!^1gp*L^D#x}a1&ZbVYkv=hp$K*T^Gm4;H2al`
  7496. zwvH+jAlv>!o$wy$4C>r046p9h$oLOAd}sOCJQ^BD102P~TZb~X4Z~RKwQ@>8dJ47Q
  7497. zsRdR4UQ@nK8e`|lKZK2^KeQ&|KxUBaS(2Qj6`s2*hHiXpT@&IeD-Xmw`84RuBe1Xv
  7498. zZd+A_=00e#-K#!SP;A9Iq8^24(@cZPBN3*mFp^ikzd|+l(ZY@&$stKJt(+-x!BJg#
  7499. zylcG&Qxn_9e2pj{b?JEVuNRry@c=>wNB1Q!qGn68N-3Ioxnb*)Z}JBHPA=j?ANW%9
  7500. z3<l84YRS`CRT=0<U2>+}8qA2iY<}3_Cc6lG#Y7UMx6MPE1fwPHBkpMtKl(K24tD6T
  7501. zGGvf5m<|VjTbAgU`f$iJ7W^jDRO*X#t_o_d^O;blK{lM#HRpP6RE`7#n1}-UXt`ec
  7502. zHslczvwvNcFenlse&Ou6^{i`JA;~mJsyZU`vf;H|Z&bm{`o#a{+;Y>y^@6_bCaxv4
  7503. zC2M}PIl@GaSWqL%WKbedW*qrA^R+xR(!=Dr#wZoN^zrvdTJgeh$>IXi<y-^P;sAy3
  7504. z9&G_rG!=S)+n6?+-fx2`eb}tGY6?npvr=wz*4LYEwvF38dlu~Me`};SPj9z%^-hzy
  7505. z{N&zun)uVL>yPp+dm|{%(K~KElssaKD_doKK`Ss@OgzYeWl*HdgsvC(nn^UMhClz7
  7506. z+oaa#XVgc{;BwDG_xNbfSphSUo%;$Eaw{`PKeol3Q#7N~{XyBwE4$6<ohE#}SGu3B
  7507. zYQHx@J<Moy@%yIuc+>f^K7KR#c78wGo9^;JK5_}`o7r^t)16t|pP&Khi_M5529F+=
  7508. zl|ya9^i=(ZWRnf3@$j&h+22k64TDT{BL*61tHzvcX-1SvD`5f~mPBkfofL1g%ncZ6
  7509. zT=+Y&c>v{o^-8>ZN_f0D^|#~P_GY=$1K;bi%G>w#&*TerbBiE1kA(N5NXLOU!ytCB
  7510. z>liavK<tRpR^=v|L<8N2IV~K?hLKn=vZpjd3&9ESf5kx7?)@Wk!93lVnJ~9iYQtmL
  7511. zKW&2@_x|>-gzvfIT?JkPYf+K}n!#v;S8P%L`2SrLWnR6ywr`X=KlEFSK6(AbY~M3m
  7512. zoLcO7K>YJ|;gXh>YHjUzbny0a{Ao%U-7en?0ev=b-zI0V{h7$)^mfvwjCO<TTSxNe
  7513. zyXEg!Czj}y2Exjd9*=>}r(B;3lRFO%#~0h~KZ!`_HJ%rryWN@HB!o}qMgMqoX}Nx7
  7514. zy#iPLK4bFOtYf==Q;j-vD=sx3JDyFFWe!tf*N-J<|0BDkXMirvFEm|-Jd-&xg~B8+
  7515. z`v>?TbIgs3DI+%#JhW%0YXQPa8;cbvq!OqW5eIr^7J+J;Rkfj~7o+IWE}n(%D`qW6
  7516. zqh4-?C;!S#Ha{ABFk(*y&CZb>F8;mrlKC;&M7As@@?!mFfLLtE?ES{-`dQvpq&o5E
  7517. zWpT%s&v#$QADCXwykEyM&inV@9=DsO1b?3F-o$@*tNC$Kv`Utg-E21a*~5NY8IS*9
  7518. z?HUtL;KzoySLXT)N>%Zf_8rh$^zK394x^BomUiCRZq5kiJq*kJm$Y^+lDR8gOlwkt
  7519. z&)W>-aUodZwL3G3@uFo&r39k4&0wwJg>ts|vSKknVLC2{9OLh2!8G$WGFl8C*d2T4
  7520. zz(t2dn2oNt$ooH{RnMXKGwI%UlLt+2HySsQt-Pd{w-nehXlzkG@8~<ye{Ng6Q3~(o
  7521. z)$KTWKMhySnym7yp%g$1-4o)^W<RgK`M=)qdMB_6eE0uxvdv<if(}$E33#2YdSmzc
  7522. zJDR=x<2mT<Md>Yi=YZ_=_`V{%KvND$w3qdWNTI*1k?5ym5-cmshjfJD&<H8-*H@!6
  7523. z^Z4TUFqu68MTWXtmJC3+_L?@UHMck$O2Kl1?X&b&E$!55AEJ@u=Lw-Gv`Y<<|0C%t
  7524. z*y3oKEfOF=kU;Ro-GjTk>*5yNZGqqk?u)wycXxM(#R=~2?r`&d_YX|>%u`c!PSxqt
  7525. z*ZS;ZkcqCAE$p-`phGtT(Hdz}*VggwkrGd`?~{cA`DkMW-@~k?!!NDQi;1eXB;VIN
  7526. z=D3HdP3$Fy_i5@qAL&|%R#%$u<vb+uSJ!Ef5~eoivg^rW1x5=eUHKC?s1N^{>*7^v
  7527. zrqt^S#9ZV>yv+2lRde?8CKQ*q;xE-qwIp98ZXi{n*UuFn7uMNtF8OUZ$W&C8+{`Jp
  7528. z?}Tb<l#~cvp`r&x0ZK1_s(#9N%!*gSTF2oLcCMDzhI8!)g}5U(uMgq%&9UL@<ImZZ
  7529. z^;dnDF~aDX3I4^WXMKVK80hmIJP4%g1@^W_=+SDq-qqp82jYJGH1VQ&^YZJC&mr>$
  7530. zBqGnXe$DtihUP0_&PmX8x)o89N1&tcG_nNR7dyyk(FiRnWAF+wQIs1i&1el1{VsyL
  7531. zY^Qf7-cV{zHEb-0UaOO&9a*2T@^?CcEkjq=r0khK#67ouiGn1NSd6lilg#>TdpFoG
  7532. zy*yJHDUT$g(CnuLxVigZ>Osf(!ch0KeIxIp^}fUzR+!bY<IfsAOHT({P0VJu`b|f%
  7533. z0a)h<v~sTh@$O*e3!CBkjNkgsSDF77QW*3XyEhGJ@=o0Ev^`A|*Z>tH<2i4WxrAkl
  7534. zOhE{hhap2^mpOagQA`qypNs-K9Vjuog=Ez*5+I7z_tSEi)(gXG4Fld(ts%(#+@y{u
  7535. zLgcf&`ZpJBbz_|XzCd2y{(U>Iqq~m-;;|P8pB>j*$gkVyeGpC^2)Z<h^}w(ExxH?&
  7536. zsq?4d%{zDv;YjS)uk`kh(quh}m7j#R(g$ZkZUS$+Xq{SF2VIX@XivmzPT}<4wRO#A
  7537. z&3XuGs6#3&MiKd!vw+^`@kwiM;z+1tKw1X7lb0?nV*WMyvHSoH0%L%Yzd+f7`ow~C
  7538. z@xcsh{Z>w<^clA9efZEco-otNg8c9c32Ob{aBJt6N>~Q$=7y)`vMTQEy#<Tu{^rJS
  7539. zg5!oleQc!a3LhIoorBlM1V_w*mz2Dj4}Lk)^uLXun5R1Q7=7-`9+qbRX7_{DB={wA
  7540. z63@J&taZ&RSyOjVRT*Spw8ejf7X69K)X3`Od`I`kH;vb-3Jj;V`uLuT+l~F>4lI`#
  7541. zzbj$0BLB=0^%E6a#_PVJ(Ah?<QBwd6HVEu`W!sSJx+NBr_j*v8Uh&<lvNSHI9&-$#
  7542. zvPi2E<8Zmhv)OxVdhNsc-s7!pE>vX<w^|y;vfS_x1LT9`%xZ_D)QCWrW|T1rC3m`?
  7543. z1mtd0w0xFRXt;39u#IFGp8Hv0;V{4fpV`DKOBqjq<zy*c^n};=7+nW=`rDVfgr#~V
  7544. zUSaF`3gsDfTgi|ROog-+${Q0Y5%pVq)gqd^0f{&y54ruBFI(i|X@G0kk@$CQMa(38
  7545. z*3RqLuWQ-oBVrG$o4b$Gkgf>dSA<Tn^=y9rm6%B(&w;wb#f^7fkB=aTZ+QKpQC9$A
  7546. zX7sOf#aQ4+?~1`1IwY!zfAg33(8$m$dDGrJJW$ggvtfZx0f6GomL8?%QC9Q0K(U)=
  7547. zoj{j#8)n396Gsauai^UZ`wvde)ijDNWi@mK4wn17V3=#k(38*+G)?k??XT8WQN4K3
  7548. zKAN1o?2s?E<RM><{6UMe5(imKOz{6IcF=>xuWPK^1+I=jqUC0}enh2%@WT32r1h&E
  7549. z=AvxhF}Wim1N<Ozk*C*mL$9-ps+W_8_gT1$*_Zb!;`@*9U`)fe-M<vKIm*9bMHuL|
  7550. zF(NW&hCL*oWD-ZeLvQL*jy7UZ6rq+UNw<@;oX+c<{bQBs8X5Q>+3ILACYp8prCKF(
  7551. zyxQ><vFg#Kf+2Zoo4Nbm*k~CW80Y|Gk~j-PpJ|pZc#6C7GNx;xN|U{B{5s3HVe0!G
  7552. z*aXC!c_dCOF^C;u-TA22;ek0=Xde!d$PsA=S03L_ci&yfn4rAwOJ)D6Vw?_>h1S*{
  7553. ze0hMY`>JviBGVUaBuiy*Bo%zR`#+*6lx#QtW0a#HIv=?}g}FPfy!$W|c0dF_=_a)c
  7554. z4J7N$NJsb?HD%<Qq?}<aBaIN*JXM-5X*cR&C{S|Fo|OHJqvALF4m7fiD;;XFOp_Jp
  7555. zHuXR8kc-Azy68k8EUPwTS=(P51ayYfW(~xlqtnSw{Fbf&3CnWV4WL%!NgOB|e+^`F
  7556. z?<wBb(8=Vu=G~*3Us1O+H8Y5V<QaxuS0=pzt%hZc+}Ku}ep>%S^@pKBr`(Bk_*ph$
  7557. zGNg&AUh26=51x{W`+CC5*74$g1_@@fTU$qoYF9B51jV-M2OK;cFSQdeYT9NPRFkrD
  7558. z&}xO~1oQ}Y^q$fG>qG~z_D=muxkTQH4*im4JqMOc!u}l&PbsWSeZ0JXH=QsN8%7&s
  7559. zU+Sl5&Tqm{v*Ps#Maa)z0*pyCr`Vylo*}N4DX)X;hf`^|Q`pil4iQz`{vW3)>Bm%`
  7560. zFjxFnhF9h|sO0AS01eHTT)F_#v~p~yq)IA_`>i7@oi*Yj{x;EjcXM;|-u28jtBK=z
  7561. z7sqQ71rTlUlcK~x2xHA=j>bzcx)d5l!t(RkUNmbFC;!rXG4nGI08HJxWZYs7-NwDA
  7562. zNzPTFnrxNX60afdR)L0qKO)U$9-3sp+ZVp)TDCBSZ@}}n)=G~0XBF&$|F`?oRSC6d
  7563. zqTId!XuFNh%)!B-0pT`v-jYTHYWq($vG*m(mMkmNaFh+U+#Fu~0!)-eg@u-P$Mf&9
  7564. zPTYV@C<~;?r1){ZGfXWpo+s%Ft;}G~blEZ)Tae3jtVFEdt%GA;&mr}7DU@LIQBR2F
  7565. z*<bGLC>ss<t4&|~jhgtvBGlQzsOXv2yAw-WV?EhAbXoS^&@0%)Q$p4n5w#au!mv-|
  7566. ziD;SXw=X`_ME__x&()?a&k`24InS~+@<hGB5%nEFGMV<SnQx%?JHGNnkeF@e$YH<2
  7567. z?cn#*KZL9Eybl>~^{zK2nX6rUWy>kw(N5FzY3*xzY?(9?@mON+KUZYa$hZ|-{$m%#
  7568. zi21{ac{G8`!J4XXnWp=A1O$0fL>~Qyw5TC@Y@6~uOU|`l(~Qz`<not#E&MB*Vp@`c
  7569. zvN8iecxw|G0LrmeOa+Fg?TrR6H%9|&D1tX@4;BpjW_$=LNVg)%PHWm9;q2>VscmjO
  7570. zh7?+LD55H^#J#DmZ@4+03x=QUK@S2kVCnh4?kekl4UW+?4jaWD=HwY+a{<-Q(wkIn
  7571. zG<VO2Uoz@=8Yu~XO3N#;qba6OlZPP8PxT*%O@6Kq2oLEo?K9|dw%CIftxZ-JhI%3-
  7572. z1FEHNXyIFhR`gQ;jT{n3{9Bp$V^OBkor;PopSA5~lJ5=c-#?#(l0nI>Ht2EgW1T{+
  7573. zvuR$T!Z8qrUq>hxMa7dh(!QLlA>-|<If4WmtFC$NdrX5v>UMJ(mm1VK+O9k<2&7&|
  7574. zuLknwEh(lcP0O~hUhzKB)u9k@PT4iBN$NJ)-)TnmZE3N(o&FVRTK6o=pe@Q@&TV{4
  7575. zNevWb>7JbHS(d5Yhm0iz{D`|xH!8*xpurCGJOu>Xh{)3SxBOnpxCt2SZy?c0;^(z6
  7576. zj!+}=mEB*HjIz$<&K)cdzk0$$FR~8#Cf3ac;g1)58c`a>{EwAmBkMJ<JNBWtta}_}
  7577. zy8P%_wR!yhP-?go{QYlij$*8e&7Yhfjyhj^)<{BB1eJ0}d4JNI`mv|t<3F%0q07>9
  7578. zM=1`x^r>F6Cn{;Q0aD?j`ak7$Dcj9Ym83QpEr5F9aHgmQuMk^zz<l2O|J~<)(SA?|
  7579. zV=-7H^kzj$Sbw2}=#PkSt@pq}v-aFU^6x7q#h)oHcoLDbkg!L*=6zS}C(X}wKY=0~
  7580. zE~z2m{l_{BemzN!P(?F|v!tq-@UG2=T_?&cu`S*VbK??cE%y;Ar64o6$DDUO7_`2e
  7581. zw;hGkSLTc{waH75>@EC@O(<up)f|I>7$~+(HI1W4_YklxfdmhzMiXx+ZlrYH26Nrc
  7582. zlV}A=zA*usJY9=on4a=kr;I2@uCZWxYPh7XU||c@!i$7*RnZHKjk21X+AQ4SUizDQ
  7583. za>*iFVYWTK-f2hDbJGvOvilfJ>TvCewd=?|mDcM_Gl@jgxlm>J>$o%{2s}CE8{Z$U
  7584. zO~uvnXmZ?%7Whe<9d6mGSC9G#nrW>pp|#^zCVI5EVIEin$?A*L<+-C4*R<G=cjAJY
  7585. zIBAr#z;<-q?B!z%O8(UU(xpnj79GwHav+M79O9IlUJ^e?q>R7oLVsCBI7YPo<Ti~J
  7586. z4EIKxlhL90yarx!Zt3(M`NUSNHd+_#mY=%7ajjh&-+s7BkLc35?DawTf8|I0p<e|N
  7587. zodL0x8)vf}uI`pZbQr^s9EH{?V?^P(xHyTl0nELjDGgH+BcVJaGZH5i(1JZB{grUk
  7588. zh^{~BM;08`gpKar_ad$T$q=_s2sw}@mepq`we2GEjzhFrKg9_0%9o5wnXZ$MnxLx|
  7589. zfO59gJB&l6ObF-{n&@q51M{yCKKo#nxH7fyZxYw##urd>)T$M!GhVQ73}y5FHwCdA
  7590. zrKLMoR$Tpy%O)3%H~@q4q>xlOryM82*hppi@+`_;00f3ztb~&iF_4s~PS7Qq^5f?P
  7591. z>sqiCqMA>jrxEJBpw1eZ%0S`tmd10f{jcaqwTVx&1EZLphr$KSACoBIa;zr}BBjHV
  7592. zv<`T+0jBxJ#?DCCyO<iX=z63Cx1T{vi-^{<Br{f>^R7Ga%eb`-Z8l3VB;i2t;kNS`
  7593. zgz&%F3R0Ycg=izHx;2LM-Hpn!-La~I!gq`MKq!{zSQpj1iE`_xx)J&?_bFLq?9A{X
  7594. ztyDPlq<A_fw(kQvg@wIV+tp(B_u{Vb`MYo$RMFl4jaLSeVJK%9l7Y%+R9pU?`>yC%
  7595. zIEUp@;)W%hu)i55*;sL8=kosnG^#|6mUNwh_-xe`!b;HEF3)Elk}IZv5L&n0wZ;^^
  7596. z2$p}?jlut!u%2R(>HGgCUo%Q40(R+J@~F+lL%yh@>(wx7EO?Y_3g29H>y1fDP5d$-
  7597. zs!!^3^6E)pisDPas#;&N_7%FeyyNLX*Yrk6?N|96^TvRt>3zW->|}I3@%siI&w>9J
  7598. z-i-xnt3g%An+V#XW2ZP!q3XMoD^Dk^Wtux1TfqVgS_J6}w^arLrt%sWMC-w1Beq3J
  7599. ztd-3R4S5nk*Y8MOOlG-BKS@3Q|6z>oM!n^wTd@G%_>$S($oT;kQnLCve@bLrzRgw1
  7600. zlPJ$tmo&|AzJ~9{?0BxFj9ZGWVKZXiu+2pMC*(<qt%#2$<Iz=g2@KAa$#+2ii_S??
  7601. zkj(;RqPn|uVxJ`)uyx81gvGx56|uZ~_h!VLk0tur3u6Qi49Y6SV&Cb>D>t^R-`Qhq
  7602. zR)Gn8gf&h#QEgO?EE<>~fw25h95`WY5&-^BSkx}<<dR!jOcI@>8OJ*+?P_wA+1I0d
  7603. zR6+~m--7#%)VX2<r#1DLi`v!PQoC<%f@7^exp@A^LLi^XnrZMK+&2nF7}7j!5r5m!
  7604. z1y=0vitwSM|7B{Y>J|46o^6F&EV|6HMKJ}0L(obE1mwYuBW}}xwUuVul%m^^#(OY1
  7605. z9-FMhKc4b7Z$cHTSc^vxL0N3s7xhz3V7bt)lZSpOr2{PeF;jx#|DV+WHO#ScuGJip
  7606. z)INuHyhO-r7eys2I`XZ!aa7PRJfFW!(zY<Xs`JG$he(;l%PxZ^?}F7mh&3v;f71L`
  7607. zc~iy7kl5hxmxA^OC8-CDvGHl*o0k7Krj3z+@Yfp5_Dmj@8n`{vD+FQZ)~IoF^*D(P
  7608. z5;<04Cl!YWDN122)&7FnI6CSRE89o<k<gfG#y@wL;mo|e80YOfr#2@fTN`p__CGNJ
  7609. zLZV0g(UtBrt_4CA$X>aB(yU^@zjbT8ZOXx1l&%OY!M>m}U6(-|KeiJNecYhMmYQPC
  7610. zUp!)=YLg)nH}xrXWw_9m(^v#oWy)1;It4*ZHQ^gimHU5Nou)ZAbzRU3*v1F|t8b^I
  7611. zb!&Y3qZ$Fo7!nJsq&;Bb@S$#ipQ1Vat1EIoXWTz^QNrhHCJ{ab89rk#b?&C2)phB$
  7612. z3{(GdX6nRVEb%a`Jd`c+Uy^b^u9<bEm>S(5q58^+>u1XG0YH6x6IoM^tl!qzuB=7K
  7613. zzvrX3^kcs<Dy_5u)|t8TqA<=#^Q3Y^O8;2C3$<`-7x6SGSjvOixBv4-7!Zv%c1^)P
  7614. zAz0B4!%$HxspTfc{j)ESl{%QfBV$o|<(!lY4F`AXtS;Q>k1ZX`!}R(&K-pwT6i<|?
  7615. z*pz{ebayJhFU&Z1BuaW9dSzeS;D7QTC;eBote<-O9t`=};(ou)-bam5KNB|cj@)%U
  7616. z+D^)#DF3vX`V^T%|25K8?TSHnULy%yYLM-iO+t4VJ9<e|tS?pz1>~@<>*hMc4-fEL
  7617. z=BlR?&sFJ%St1T4b{7C#65A(<IyAh7HnpFfy+{6wHYFV+acF{cPdCr=AWwU>=vLLf
  7618. z1}LoPjQKizASPvRA@xC{hWM&^nU(t8@XwP-8kL_7-L+v-t2mDalZDW+l&c(Lc@tW4
  7619. zBeW@_3a`R>lOD#ke>91%z{lTv0SklW#rx2Iw*p=)-yW^g;V7@&GWxdMuY2mPS2@$O
  7620. zR{KC{c=llv6_TQ$!d}wCT=RW{J1b755$__&6NX6H0QEWBM`xFLipZik|B~Z?`c}kU
  7621. zZQp_T?-`|u!g1>+6ONxp(|F`OxMJW`D|J-u^F5bj#TAGYq6Ea~2x@PPHRu~}vX;8C
  7622. zsmfS%I^N}vfd5G#;!(AMeX}9=vwu4HO5_!mCt;RgxavZi5_G;_<2oM{$JM1LOMboN
  7623. z95&u%*w2}kF8bnLyPP#(aC&?GvsM`2L`lEIOyye=SK=FCv#g&#nKlw_l)UH_2|XJQ
  7624. zqeR4MPLg<gUZi`sO8iUXY>eDk4bVnG1?Mg7(2+X}kOBJuEvOVS8*=y^6KxyCC`gPw
  7625. zEiyR;Pe3f5;SPuGz_#vQ@8l6SNaSl^kg0@--BDitIlLCd07G$^(cvCuw0!_l%_oxq
  7626. zE!MU=)=C=6Q@;Uj)v^&{Xn71t6d9)$!5Li(bwT*Gk5u0JXmeEJIX?9Ewf%n!GmPiG
  7627. zk)a0zx`qy4#mBg$-I(&E51oc+rs^{aV6_fHj~T&q`S~Vak9tMmsAIW$M0Yeon}vzp
  7628. z=eV<MJ<vGA{83_7H-aM=SNPJd851dpFqIEtS$9(O{H?=Q?3b=7{?m!e^z+X=m4GE+
  7629. z@M}#fIFWb6=P~C>@a^qr5A_i0K(qkI&<GBZwc;4s(oed1_8KXgD_Tm(?LY8U@r<ne
  7630. zERI8S7@PD=7yd|>=z@#L-(2M)eQX22mi?zLi-(V9W}<h722ocJWKbMI>5b;gmXDLs
  7631. zuTn$~&cKnS61dhk+b965HP(@?tudov%*RG^t0=ucgED6n*^>Qvo4#3IyJ}Es?-h?J
  7632. zKEJ7=1Z^_1|Az)-73TEDZ8T}q4oNu3W0v>1wEJPzRiz4afwrP!DunqGQenk;>VaSe
  7633. zP;-&SN|s`EW`-q8S-~@6%eaLOhLtWCW4d4sw@%*iNUFEr|D=oZLeA@wBXiTS;%IE?
  7634. zEE+g<Uw9;TuZ5>MZ3{$CXv9nN^O4_KcY0FC$rHmhLNy79CLO<*)$$J)MBs2?@nz)5
  7635. z$p%SO<bDmVkR>~^e4kYp{GV(M;Gb2|GVIUz&YR9tm%_r<7rGcZ_gThVf;*4$vq-X6
  7636. zedOmeyx4P<g?d&0&FUdGaq|ad2Apj`QE)i}zNnmGB@*J3&KFCHyUO~-;u7%x4t0!&
  7637. zhm1A{j92sM-~yVKtna1)y`?#nM9R}5_GI=nD@0b2nH+zTHmrBDr%v)_L|8O&VD0JB
  7638. z8@4TU&K)&0Vy`Rc8hP_%i>gsS(`Zv<{7<knDv%e+u7WP5-(MA?gC&yAkzz*AI__<3
  7639. zIh}YepM+~mT8Ya`;OmlW9l*e=?oA-Nt`{*NYFXMz;@qyY&o!;5JYN(QZl_o{c*9PC
  7640. zMVrHXG`^$twQ6lArPwV|ZQIdB?=o_|$rY=-CI5T<p^8n9jJl}(umr<cctv572u9`_
  7641. z7H`cso-iFs@+{qwaWoyZYAwogvBno;%NXOl=Fi7u6h1@3({#i$rL^u0{yTFRDEUP-
  7642. z%{G7_y?w2OadH}J@}UybOmlOC>k1i*GsGmGTK-WEQT($!@rZgEr`uN)Neu}<fC(4m
  7643. z2$hb=eDsHPC=0cj912!AYga6eX{N1|RH8jyOQrn40^L^r)HG54mr!q|A*Z<ELIw8F
  7644. zXUllSmz$wdck2ibVjW4~lP5LlkWA3|p4wO3?kEyuFL6u)3a5BzSX0#o9mWucr8O&w
  7645. zxo-!@))I^{lG@^>+Dl2Bc;6V9u+SP2z2(S+yVr>DF;Bi(ii>+Tq_AI*>LyR<+JWQM
  7646. z*M5@>4h^LrkV%`nxw)aH0xI@2q~VT9u1I#9OfqZ?OAF)tW~f+0cKZ3VUC*<OXSHqa
  7647. z=>sHY)N7dOIQ5><Fk$$CgGuG3CCevCjTrIqyu|s57!f2wpO}laY#T~Q<F&pVZz^Z1
  7648. zv2CkrH@qj}SLiNyGHKIs`l5P<+Y6s@s{{rdSaxmT<aT!<1o)wg%M49KtR~Ta0veQ)
  7649. zsqHPo`yzxEtBdUY<O5J|rmnRbL-MW>#-XKbY)E@dzfI?=xOoKYz?iyH6`R=i@{iTA
  7650. z@3N*Eic~a0Yw|VUoFPOT<TOq{hC66Q^DoE!LnthRD(S)apsZETZs6&u2ruA9rU)H1
  7651. z)X3U;v|QZTLa0k!0g8^g{``_p1?cztlBMc5fI8`Sq>GDy;g{6u*iugwjBK`KZVZ|D
  7652. zvBk(vxC3Tpi(`lkZ#IPIr@8)=%m6GNhqIe7YusMcU4HqlKMpqkD*UT)`~+cyTujB^
  7653. z4BcP3bB~Bv!FL+zc{aV!(3|kRsTmoz!&~AX2I^|fezsIpRR8sw6ySCpU7}(lbals`
  7654. zSP#3zDvo~$gf!I6UCJD3$+)4JUzG|bDQT`v(D9KH>2;Xl*H9Vgl?Wtke{4xm@m{Sm
  7655. zEb46hL%pQ7)3hyV6HYL{VTmamYd>4`M6kbi6jv+T`FUS9j>iGOn5wtq^q9ALmEyuA
  7656. zOy&)f90U6drFoGVgPas`PvFnp++TCf3-LqO_&Z5fszmlM5|BYUwtk_@!3~1a-+V|@
  7657. z5RO;xB~gQl)$jJ5t%scHqg40GbsA(*AH_mYGg)V>U=t^M0uc5XmmSO|=YVaHttlM8
  7658. zCAqP<@Vlf_z#xf$u5`vXajL}Nh3?+`Cy!J!Uqfkn7k1D^{&wsi28XU(w9rkGX@9Xw
  7659. zoUg~hd(#YpLdJrNyJYIeunAIMk^HWQllV@+F%ifBIZDEMxbW65A>KNEO9~-q#7U^o
  7660. zrNmZp>CHVBLSQo-z9blB>&SeLC~q=t>7xBqloHe2#MJ;+J2dQ|7`d`i@_w+v-g8Xw
  7661. zA@ahuDM{sg?N=KZ*tR%K<J=j0Ol^_a-qbpg__VWan4wx}gv3w7<^}3JQn2R)%fEzm
  7662. zXU-fM4&;dlvq#Li8WYe$VAPpaaNbYmh~kS)zLWyW8!4O^NI)e9Kl(AFzHaG<XJ#3-
  7663. z@ybLB&w~_noCX_5bMV>Kb88~<l#%{iS^am?g~88dR1sCjCZ))`ZPj5_Q=LD^ThDz{
  7664. z>-wg|-DotZYw1_G9`E(DT$QOYGTdB=cjf|buRszNVR~`8J##QG-!eg)ZG<N9OxSXi
  7665. z4PDj#-fK=+ox-Q0lnSRe)(g8q;K-37&SlB~_Go;3+<Qd;zJA?tV{CP3WT-}Kd}Qid
  7666. zcDm`!4aEUypg%sQPYmA-bJp@fKKe>)l^r+|d`ul{cU2z4PZVcu{=LaHr^JCgIB--U
  7667. z7sygKtrbZ22h~wxzP5-GI)8yEp=kv$B*kl12;2MQMv)1#`XDMuqUzAbgZ<`7Qb#tH
  7668. z7x6rulutNTJJxp&*J96Is=$<I48z2}rUAW%4ne2-Q{vH0`9i9N8{4cF;2s!Fck(An
  7669. zG}u`=A`{y}ZpVI?Yu6Ew?(+NIdB2J85?A?57-ro!5_RY*S+GSNW>8$F4F7cR6V|W2
  7670. z@;1}u47wX)3`~_8H=D^TRe=hUZIz#m%lq1N?6_8?t|C^$;9_Of{z4R~33;gp_hTwF
  7671. zy@_SdJ@qT<m>nk_WNV)QoT=N}Tg+hjX*YT%WYi(DY~eI-!gw>NZ<IAaf$vsHdsCL%
  7672. zFai;B4e^nd&L!@beg;2(RuMQsV<7`Dv9wBy|5nB7*z^g1Lqo4<H2Nbts*uJ>F`z&b
  7673. zCr}2ayN(;WYDQo;CvE=0{UKiZWwh4j%KN5t$SEV)IPa%g*ljncD5(iwBrjjJ&JIiw
  7674. zgFT>IhJ}#mR9*Z@U5LfCNqb49%+3<yc&hb9`=%{|!%}u)F~L-I>8NCEUDWGGku^#y
  7675. z0BoYkr-jbwyh}}1W4y0+9}58QP!i80?rI$64*4`jawUE{S<0lWu8VU`E~GTuAd{*C
  7676. z3b0g>I6*I4P+@5rkL;UUI}2)40M&9NsfiSfl$-u)n|VpGR`og6i?z`F)ws@@bXM6H
  7677. zNcrJ0zr#JL83J}!wGj+ZjN?{)xbyh-UB)8*VClz=K(F-lf<fGwMVfN?h6S9S1Dy7L
  7678. zzlO$7Yxb!;4~6<;%CJ5E1-@-*C{dUl>^S^XUge^Ah9S&2m+-cmraJ#KcRvp$at~K-
  7679. z@Bzn+Z|QEVPK5^%oW8-N+qA~AL(jdBc%TuTZ42;E-G~%5wO8$gX2jo`{OMTICR6@=
  7680. zo!-s-1hFpsaROQ8)#@uN*s)$7jz`;}D{kS28}YB00JLd;BbB>H`{*6_GNSryNhZ5#
  7681. z^?otA-&6|0imgJl0kM|p`9COVnfx5%w%AVhv+i0w-1CM>+G$)cH3BwWxTuGRNZP0(
  7682. zU?jaz{mM)`?RgLIrd{GuzYe$AgUM01a*YF&Hp6<IOCvC+F>IKVcmdHvJUUq4&>BsL
  7683. ztZ3%_!4lySeiFu9zUF)1lFWgO_|>GLA+0TkVVNDmdD`sCbj0;I*-19dZESjX>OH5&
  7684. zIpoQIfb0vvJ6-T|huQF+YqSaJ=B2<_Moy=N>WDlyj3Z+Q>QcsFB#4Coc<2`yr0wx5
  7685. z@%Yqrw|bBt_vj~-qfdB$N@F2~#d&DozRK7X>QNt;E}R!`vmE#ZTd547OG|=0F5SsD
  7686. zj@UCAIRE_PXorZjC_nU>*X?7|2z4z0Ln>J|l*1J^A|mV|QP=)KCbz0nNv=Qb9>b8(
  7687. z<O=o<p2vr-9s#C^7JqkS6iy4J%VGg2F97-oe1zZAco`ftl?&!TO-SQ<Es+ukcl<4<
  7688. zpLo;29G@}pn%W$}b>}rzf>r+nSsI}1F+?rpb-IKK<qYFI4xNQVLZr@@nTCyjRIcBa
  7689. zWbn|sI1S2v(c`@tXT$NS-Vr=oX^K8?-a&o-&j9}7r-Gn_!J8>MkUQz8Fv5|@5nKni
  7690. z>a4UhNgA_x0<SKO0@2wI$(NranqpVVXfga#6PPXO`s(NkSokJW>{3`2eqtPTCkz(%
  7691. zfwi`y9_v_#)Yhh)xXsCoAAa@o`}sR5zlxK)*-yc)3cSgNzC3R;%x@U_uJb@uV0~Hk
  7692. zj&F@_*?H?pWu9i|b>crN*p+_X`EtJh)5WhbprOxcZV@?AkMK=1i3i^BQqvkb95Uey
  7693. zr@v@EANi$$ze%E8kxzs04_2}!`qizmtrZkIJxBdA)IhFo$FJ@}G2h>qte2x?OJ#{3
  7694. zGH?j!6zYO&P7Jqtb)34ISb=&pSIE|H&v&=<UDx!YynJq_IS`+7kjtX}&(!GoD*>DW
  7695. zYYXG{{WP1y=aVWNvX}pC(4SkfUwD>VKo%B>N=ZfoI=;!`qkPajVDGrdNVYv&a1@>*
  7696. zb1917ZhpaZXR)|b3cO;rng?n`$>(wdp8kMided}>IEq)@QPTZ(-RK?sK>Jr;I}&R1
  7697. zb)s+Zl(y3K+s~8@Xi9|0IiX0cM3r4f3J$sSRqb({4(sw=Z!292P3xW~alaNU1aI)3
  7698. zw{g0pFFY694r!G<klv=y-q7EAh+jpD`eA#a5%~a873~CmB6Q9$f)O>FhALh7Hnu6X
  7699. zwCmr;zEW9BR3}HIB{*NrFz5=5ov^yxk&JlHi!QmKNK6-w6L?f};9?)y6abY)%POj#
  7700. z1bCu#2wvY31vU@)^1=5vk;QcaNur-Db@jc@8m=$?+ZWah?YpI1$Cicnp%^g+3zRQs
  7701. zAQC>xjDo8w9Z`tM7WKm+JclkOmzYkECOW>+d%&Wq-Nx^P-*hQ~t+Xz4R#eNS^5;~P
  7702. z6%i%^ToHMu8a$E!mcXwimtx%PJZ7|uVu?p^cknPW^V^CF_YHYnddAv@m%`i^fWO{F
  7703. zW1PA@X36@J2N@vLvyHB7`<A_={RcmqBxm~Or~PyZJ;y;ji>Uz|!_}vayy9g&oipxh
  7704. zMA63KsxtbP(|RoiQ6y2a)gb)PNF58|3f#bjpsxBnyZ707t5xj*waU)gk?Y+*fvf#h
  7705. z+c;<G{K6qMRz!61MvK>pK#ptYGPw-V**tmmc(!O0^*=5g`ONb}!6*dyiMZufqdlDf
  7706. zRVdjs8Xe=JOt<BXjU~A7UdUF;%PV<JQ!HD{>BX>2S#Vk_U5VR7%)4Af#e60m6DuW=
  7707. zuJg9)RBDWU>?CcdB_jQMraJ#<q&Y)Kr7pYLoII#f`QbvSo2gfA#&Aw3c(k10$W>Oo
  7708. zw@WNJ*J%h727|^O=G54@ESrGu@GN-WnuRkWzh)=P$x2S@LV^$M{%%&HQ>(qPYuw5}
  7709. z9wR$3Vd{}!mr`iH3rY;L?N_SfFHj}o85wRjpnDD&5@C;)6PNQ?*e55ZIV-N;jTOYJ
  7710. zw~A}R<baTB>l#@*r`?~fNdeL1`EB=keQsyBEMn?tw?}VBbw8sXx2tmNtdyQ40qbyT
  7711. zK55@y<-}ZKE~T#2)Q3yiWK6ka3JalQtLKX{WmE^GYFCaH+5KeIwqc5aE8z$dXA<Pq
  7712. zLL9c*Xb<p^Q99i-VA@J1GOA1g)Ft#|z(`?3B`XBu%poPZoh=PK2#xH-K#{$BL*QE^
  7713. zm{ho&1(`hnpcMn^Z72r_sP+Bn=9m4V(1*CX8rb0@qW-!axnu@3$1uVUXGG(d@q%`E
  7714. zNN&u<RN~B-?pYC|%z`ig=^f8XR+x@3xW`yi&8{&M_?E0UTYi=WHf|5*%t0x&6-+Gm
  7715. zrhV({ShbH2qT~-%=aS84C6`r5@b5|iP$#b{itl|lbaW)6Bih(;0$i<<$oVHx|Fkrn
  7716. zcg!AC|72IE?{z;TuU{tT$FDTfyDk~RKly_vyylm7m{-rHllvdgcIt;%JPUCWsPLtu
  7717. z)D=!c+o`aQK#Mg220p?C0ZrjrIU#wY*4$4HQ7iwCcIKDb|5i<PZ!MMF*R-Tob=?o=
  7718. z91?|uIbml?<H!ydX-L*I;<+&vS-_JqK*1Kz%Fjsnx;m-lne*M>(d^G=K#sN?@2jx@
  7719. zW1icLP37GWi*;;$Z<v@nq7frRIr~@n`=w}Z$SE(UOKr(S>&;=$9V~w;e=L-7;`L*P
  7720. z*r2PhGm|oV18(R-F@a|;Z*@wh$dD~=sz<0OpgNgVl8D!K#L|uoWZlQhQV6o*r9qK1
  7721. z!3jt~FSpZ)`5~`c_F<0J&&E%QoPWbsQn02GvSnLI7Y2lj7A~Yty8r-7lkd8P7wv`}
  7722. zh<#o1aD)B5tqrQj%zbpUt9XT}bhb7U|APJz-5olo0!`I_SQg5z-gmx8u<G-!I=1wD
  7723. zLC#RfCHvSbv4>^6xPjPTEbA*H%*6C@*YF{8cF>e(%9AZ>?M47$3VB!&h{x48Bbr_t
  7724. z^;p0JsC4htT@Ac?`l`(#{z=S3S@p}+L8I-OET7wXt`ny*fc1((tyYHSYYDw8V*BXQ
  7725. zEH+^U^(i85el`toWrTz%`+|F4fOPj%BHgZBXu<K5ApTR#+0_s!-QP|SUsqLU$ej_5
  7726. zHlHftkD^)}{0q*8c@;I4jB&lIge6}=Bq6|J{F}Sszz|uEl|kG}0N>w>XgGd!9>5e=
  7727. zfGAlCAIGxYYYUO4gqM5zOXbUXqHWd}Kj_{N^e;GfOh2gD1qFL*Pu3CnYysdF&9FN}
  7728. zES!wb*H-O~?YYj8l`gv|8XBG^0{Y|0czl(oOHTnGKXDC0BzQ6;t>rTMR8A*EF^3UH
  7729. zMa`8?<&q%Zgp$#wdrKQ71Q3(Ga(5C(+u6875m-3k;pblhQvz)%bsM*^hNb$w$E(o<
  7730. zA4v$g-Gya)uRTN98iq?%Fq~7hJ|TmtUnKM_*RzW0UoktzKxD%`WrRci5JcV4MH=ub
  7731. zO~`;!@CV8deAC%!Q9il%REFr>QRpXAec!>1&%1CATtpXu&8qa=mYQtj4o1k^D%Mr~
  7732. zFOfzhdpGWKiz_}21^G`ga;Ck-_&hGytTSbT20F&~{RfQ~t0E5qkLbT{%46cCpZvAm
  7733. zZn|Fd&Tj3vhPP-`ps3?q6io+qD7Lsgn6Zg~kynuj+b}#o16*=qhA`bTSl9#-60t`l
  7734. z$SXYKT=S8DM)jz)4KxWY7~iw|*YfH1#mB10cnr2jqHkJ0RfnM64N>==3d5_|4ryQw
  7735. zDVOXk56bWbY~(g^3kc+_bb4@|nVG>2{E>doUCPNlYqUS3Lr-n`3II(Nkb^wzdqi66
  7736. z`&zv_6SKpb^x+p1>2)9LTWtJxh7UNL;?8+>1ZrfXAHSz9ec}0sRB!Xo?{i)f;PEe$
  7737. z7`AoxZ*>r5yrbIFZyrDKss%_rW}k&0SW3uH_k-%Ki(b<WRjj&W5jaB0!eVl;FB)g8
  7738. z<>X~qcSfF}u70SqMcXaOrZ?GI040vt(sKQE?aMSOwpQp=EFb4{^L#el1a4O9EYJvf
  7739. zU8Hl7(S15rIW?XP0>?;4zM21dB&6QH*u*ghlV=fd8@6nR0hQ{e{4)nw_kSx)CYYae
  7740. z=i>#&>rNgIuu#LN_8{m&AKyK*v!$$?_s2&ESUPL=*KJA=lJe3N_?(`$IozeqkBW;W
  7741. z$|n1os12gT4-$80M};8>iVzU5jH6kSh?M7AB3oAl;G9|&Rggc}fWGBebAJ_$XVh(+
  7742. zGKm(Tl9i<hNwT&q(dI8e@>m)(pfYW=Tj6{nr1lTQiH|vUch*bU8rO$dSVY4?kIX@g
  7743. z0kZhRJRX*^j7}84)!g(=zZhFtZ=2?rL$J0B3e53Mwo|jxf<+D~qIB%!1T&INFm!xb
  7744. zJU`FQvW5IqBtgh3jif8sc1wfrmayTQ>n(o-JcHeTSC22X+VK&l@!BF6HR!nAaQVA)
  7745. z+H$W|9Rfh5p^Y6g&S<M~76E-PWrlC1>Qp3Ii(T(`px4TzxS<<Zp-b4?ndDCO;p@V5
  7746. z``p}nz4M!v&kQc}oBb0VfDJHX<Mg!mzP82KfR6`QE%l;0*Y2Y8O_YiCy_zPC)LigY
  7747. z9luV1XbL6E#M|CNaE$z$^Xv2PT)QOj>Yg4uBB4Wyl))xWLX-Qx5>ZBm=V5PYtF>)=
  7748. zvW2;YrSW{TxbBHEGTM~$b_>32p`O@n&!m3a5y?x_w8ufOZiw|eE>7sGx$XopZ^(Fs
  7749. z$j9&ZRnM8OYEwk81p)WeO30%#?6lz9k<u(%*43BRf1v#^%E6nw<1&ajKZM9rdS7Tr
  7750. z*DUcRxcNkmsYRTQ=F`~Q+r~$SzBi*C(X6j+0Y={+vcafM>rI+7YL~djC$7!->syo)
  7751. zvt$b$x^3A^gywXY-)z%v7b`Y68oV$)mg4&tEG3%hXE1PO>tco$0<*Jf?l2HQ-h|sK
  7752. zC~KX?K%Bvo`<Qa?)$ltHpFjs<E{wWB9osBJh@cpoXN;bdDQXeb3hb<8)cM*NHm}#u
  7753. zi+${s#M<sa>!L}z3BiMmI{cSRjIc9zXIS7!qLNn{_i?TOCl60cIbnvgMCipwozM&0
  7754. zlLxcsbj0EH7;{lsWvjIeh2JIDD?nZ4<E-nA>*>Kcv?c~c+Kv#C!_<B$D)_1J2--mA
  7755. zl7w4owsWRg*+Y>;g=<ve*AlIQs4xPW{B^3AaySe+IE5Dh3p<cERLpYeqNI6(lZ|cM
  7756. zq=UuV2)RoVRV(DgQbO7SODR^KSfMJjVuOn(B~##c*%XJ(f(FgO<tFI>L18OyQ>u?x
  7757. z5`wPhYzP(FY~$IA>2Of}XOAoAiNzD8DUSm~60r)~B)%+`i!)As2lGdgU+XtnQc4}$
  7758. zNK3uz1A}#KkK21tUC~Hpz8o&?yRd#e+3!c$Gf`aY(u;Z^luX~}qlikHOa6hk=9@{r
  7759. zqw}^41807YP6Xft?u;A{>D_7FWNzJKFojw>YUk}9b6f62%~X8qpmu`mInM#opTisG
  7760. z@ULvUb7}}^*X8DML9mT_;mAJj=Cw4o!-jlRf;`@W0o_^|jwwI~8Y=kNI<(6ZYoVwl
  7761. zsc1>Tp*wNI)4dtd4uRDdE8iaCtgW)@e{cRh*7o3B2bJsrkS3Wy-0i3wHVt@Pe3k+7
  7762. z*m?=0IV_LA2*B2i`vnmurF*`1GjC-)&n{FHbReL5$n{L?&HtHcIh~P{;Bez59<|8y
  7763. zC`89tb$dA5U<Td_x(x}t21byePwx=UC@^O@U35H*Rv_o{8_dvRp)7;kQAoiA{Y`$v
  7764. z<a3#nK3GByLtsMZ8v(8%QH0y$`LaXXO82?!3Jo9u*vh`)Y_%<bD%E|VQb2cdH=&#$
  7765. z=pc!q;qW9M$Hi4d&s0OnQSRhY^8K>Y0}B#Ynz=)n6;zsa&z#gr%&CLs^ve$|fFocC
  7766. z{&Od?kGXt3-evdJ<?KSl&YLWox8-c%(BEdTOvK9PWmPqkY2-;ELj!MVMwE3`$4$hQ
  7767. zS?D7-L3bzaou?o=1O(Pkv^ZCwLo#~_Kik3-cd93(3n)$2Vsl~nM+0xP^-1bH%q^X2
  7768. z^h<vt3kxtyXHOOSXp`&7LRbPp1v|Pz>eg@D%g0ej-$T#I6dx2g&-K%!zzqX$_Q8(#
  7769. zyi%zdvT^&Dr&|+UqMZX@h4y{1za8p+;rb~93s;jCpalJK^lGX)n;}l=l84#Y@W!D1
  7770. zk4#N|mjuJl*t@8GJul5okNo{**T!hf3C>%bd~3~FvQ`$YP6<C_iND*na0xUj44a`e
  7771. zeXUkOHc_EjS7yr1eyczry0u6&QFN_#+L3HcKzQVCUx`Rd@kx+1;UM0$Y4PMvW;a3)
  7772. zt}m{(NQn`aEuIn)mj01|O(-2{*i2GrDyF#-BY1vXNHghplKLVEsZ|k<#PrUdYK3aq
  7773. z+%S0+gzvp3<4VN0KMR^wJ=?Lk8pxEc^J(0%goWU>W0RcnUigEK#@Qg~1v=F{Au$-#
  7774. zF#Ok3CUlRiD;a6oAXu5t(i3sC_q60>--OXmA6G9l`(P37$wLmlGoI?i;4~kO>Z3zM
  7775. zkApb-M3x$VT3cU3`^NG+L?R*}bT7{?%!u5ZL?kUU9wSmE$iCq|qQ&pR)%zUSFSmQp
  7776. z>$@#cjvLY3(_LZmp55NP))Xl}_C`t7ivg6*OAkmiSuI-xqJrQ_qRD_vtR}0wm-b<*
  7777. zmmD^a-G)P^>RC!2>p!AbgaKX%&sXXIE^7rBTRh)j+;oXa%Nim9@~`cgAXq$^eRV)b
  7778. zPTcbJnEYsI<CCeHVA7eB(CcB|^|JG}6NAfDzyY3m;>i=4FLt7{JZq;g9O$xJ&@+(S
  7779. z>T<OtLYDO?JmRtKC_>bL6&<_!nDMTRr4qK+WR<b|T`^Xb*e=@QskCvY*v-;lpf0(J
  7780. zj0?iL<Gez$Z3J}^tls&#k#v<=zI6zeEl029)kWxGkJ$YZI;pl(SP;j{nzPk>UdQu!
  7781. zw#v5BI@1Mk<~ARICM1vJC=rR2J1(@0Lp|}wj=2_2KbO%;W!R5CoNNPaFGxEJw6`H1
  7782. zRo?aH`=rgT<WmxRAsJXJE|78KHTGr;`F_9;Ib+%4_`NhwRe9S!u&-5&4AnjVF<K-T
  7783. zrQ5utIxnSB`$Nj5o%pb(B6@moBE4WVsY6yRfNH7YOO(GB>KR?=*X~jvCOe-12*(g$
  7784. zSJcACp9=0U2c5pONzZ5>YG51{HYc(Syfu2`Ka`;n@uqm$t|%u;+v?&5$rJ~oZVhNP
  7785. zRzCTydq6T*1B6za^LoR*A`Oi+4Lm3_CqL~+ID?=1*+xL=2t@9}RqqF}3M(V6Yw$LF
  7786. zUlJh6+Ol?7Xgbby#oniHe`xm{<41?>Cl;IRLH|-RW@nK;W#Y?JtB_O&#5{!{D*yar
  7787. zp((%h2KoC?duLMP%;VWnk;5j(Z+gU*T=(;%YfFrvtB!|t2+mW8IIXrW95ckr1t~2{
  7788. zALGIwC~x$4*YB^{M^*>gjfLBkUceM3BbW&1YW!q&Z>YqxT8n+8Fgv<jyDb==jSa8g
  7789. zU(k(4Glqu)iQEU8`p0_M6%Y_#EtA08Q7rrARlMI==nTnVu<bB+KYVt}vT2oQZvit9
  7790. z9=8=jo%-})a0r?<XGPZD2z0jjRR!ePq7iCK`v8>>U>|&BU>^bQ-j{d!BZ%1;$KBeO
  7791. zofy==8c899JQXDCjh`J9T{B>Ar}`bv`8R+Z+TJ*I4<W1@J+V4yao?auKIyx%$4@Dn
  7792. zWz6z(;+?K`z*;x<4XNw_9!NXB{XEV~)G_KC(h_h%aM|Jij1qzd300M<eDrUHLNUUn
  7793. zv-;`g8jdh@&l_E%dhq^o9v>ha(t=gL<1!70<J@*us^YMUI6Q4FvjwwX*>;|5wL)m4
  7794. zV|Rmkn+FuR5n7B9O*aLL8c3~TKQF`izJEQdzkjpxQQ(|eg4mtBoOf;bECGfr8;(GS
  7795. z$7NN8$PghV@9!#mMqC&;^j>afxoz%M<wBfHIIo^b&hjYq8_GMODZHi%w0oQcle-3J
  7796. z8`+%$dFTva#imx>BV39(yemN2vP^{=L8t{6eJR&Jg5+_?<Xi1dk6NOlYi;~3jr~F7
  7797. zdENc*t7bs$_Wp`}tOS*l)LvC)YU-Xqu<L&|3%b7Gu1f%N!|L~!=8zEtNZ#O3)S;7%
  7798. zIjN{t=of4d-!dfSqbBdG;tM?s&0ylOetTqifjZ7NZm=6PeECl1(1Fm$6B%Tvyo1~M
  7799. zw%N`N@`hH8YY{RzrXZ+~22`Kb1IQreYg<l%oO9VR|BiRO0=!KP20#po?s^g{#-RsV
  7800. ziHcs6Y!hgqgpO`X*{*|lKOpD&9#|h=mzi--FUKdp6bw*d2p)Bt{n*yMXijgeoor{;
  7801. ztQ7eK?+EmH2W5*L+$csb@`CeX(dG<N9)z6%<Gg|Un0+v3l_m|HNnT#7*^BS(StJua
  7802. z=c%mc2Inxs9S4k@L;fMoVXgaga4$B@o?FN%F2UQXzi*X8TOFs-UJ8$v{9H062XjUw
  7803. zaoqwzMM%Vk4W20Gi9hE5YIT^bEQCD9I~EMm6cmyJ?Vg-?O~<H+bbi}fu4f8sz}`%r
  7804. zdwK1c<faLaH2Eb9$Bw{;s3(B>@B<bpG*I1FtLO0!sy1q^5PWVb+a%Ou;!p<*3k#3Z
  7805. zEc7HGn;5Ej)tSBkWW%eTT=Shm1@<0I*P3yxm3fJ$<-Gbfu*M$X!iRg|VdCi#W?sR|
  7806. zmx2jiKIhW7EjsK#T+){>3m4*}&I;L^oC0bJWF{A&4NIUf9XchQue4=%I?rl)pz@O9
  7807. z-1Kr>js*t(O1b4pZnz7UH8P$*&Oo4nALO)O>%@}Fi?6u(<y&UgQ+gnd4tdqk_0ZMj
  7808. zX+#8Nm5k8dr|1wj+OCNnWO)&l1zL}sVY{x7gh`;jn;!?__YXidrFY(=EPdCUS2CB`
  7809. zB;~!yU^}Ed#cv0niS0)3I5H^T<uJOwoHdQLql2MTo&JgtfklO-VkBM~Lz8q*BBGx_
  7810. z(Hsw?n7ldGUXQU-hhPWax+Mi?ZtO~T7blmq<=MmeDqoJMiWy2(CO7wJ3yo!at~#-2
  7811. zvDL5L?T#s`@%(f*_tMx%MM4hV8L+$0-l{hsFiuI=NE3o(LQg!nXnq0lN~`PK@(KB@
  7812. z7TEzoBgt;P(`RT7FQcf=>?Wywi@o7ck%vpjDk-D~uuc9euyi^ndN%Xtnp`yhb&TE>
  7813. z3J7C?=(_wMv8p|b$?Ssjv8AQEy9RwK&0mNh_cJGGPi?s9GwQN+U9HrtMx~0J7W#qD
  7814. z8z6C|eI=uczBkZ~Z{qX!`e7?l30)^X_dv8T2k#vMvZebL@Xi(Z5|Kzv&uL)qcCE^t
  7815. zXDs}|3SMUl3;X-jkkD1vu1T@m@V(n6LjdsYTe&_0%=WPbiq}yNu*q}caeRM*;Nrm0
  7816. zv3TBG4msmVE>4}<Y>+Mc_YBNgV+G&O^S^p`bI^BFyCRL9JcipCqq(y&#N798mk2cY
  7817. zS>Yejd~WBPo8{>Py2bfNgqxeWzZ@rks(0l&b)(rf;5^ZIyHs!c&QzjpxLIRuwhv=U
  7818. zCiFjqCF+}F$36fRmWGkSnA!FSzLsbbqSNEm=esJoyZ!tf_l#WO1>iG)^k#X{mpP;>
  7819. zlN?Os4n}d$f|a;hdstO6d|PIGbuANb21ZbRJN*+E-mHu~C*r?xd81LG9nZ5JJm~c%
  7820. z#pPg*slZ4vqcXhzS=&``vebx&E$cpmx@p<YXt+Wz*T-Yy9rmbvRtYVd|Mt5;lvi|J
  7821. zA0CFGvPSvVnIktn8%fO<(wqKmoIRY*Ti|k|3Bg@nFxJRHYWc566o;Ifzg;MMIm`*X
  7822. zU<tucwXVAbT?tX79KxC@n_T_1ZzJ#1;-9Z*n)1$`>gjXbznP`u{u-t7h~p%+Z-@u)
  7823. zaQ{9S$G0!gcie)z-RJ6vMZGxq-9*QUN~8?4aaj``(Un~&82?v<RO1slvi2NvC6OLn
  7824. zRF%Jj5pfBO)rOy#;Z}B6qL6D2@QlLKyDejqJ}YQAMCWII<I2>q#myuk-+f=J@5}vJ
  7825. zZ>L3;D-{9Tq%3|`$E)cF%mQjFRu%>9wl7s_mG|CQ+*tf$aMeba1zN}D0CWBc&k)fm
  7826. zVctUr;gEe>B4Kuw(_Mg3W9_&e>U&-|awxA#1K|}&w`t}*K$|8PU~fD>{r0f2vHCM)
  7827. zM@yK%jj(Cp@?OEg8&-dug%sg$L`ALm?}oC)nE*6_-lL}MIOLi?e|Jnv0{eSu53dNn
  7828. zDq%{S3)(DZOUCPcF4u3c{_uHNQ!C93l0Mk2Uj~~@szJ&;@2}4~JG>q?xCi9&ciw!L
  7829. zZ-*s4dyoxC?6_hi74gkb%IuqAA@XGk0{g-tPjAsa*J|~NA^n&FiqH@hb$gCqui0<2
  7830. zP0p?BEg9Oip5TD0z8dtW9G`};0|CR=Z5%Tr!&DO&me2a-o_0?9P2|7ao;r%V9XC1$
  7831. zDjJxteEL8g%{qL5Xas&a4JXA(tYkykk4I`>|NFD$%6UcqG&bpmn;taZ7*4@PVCfk&
  7832. z#18eQ9Pq<|JLihSIdAo|)*!V;0nG?>A3;$e>YB~LV+>euL))dGZdHR|x_8@Ol>e`@
  7833. zfbwG9gY8D6Ph4LsjDG`D%c(PO)I3gxM(KVCNp?=Bts3?+r5(H=?s@Bh$n!W(*BmZG
  7834. z?pw`Ax3A|UTegVM>ppRu7@TG`6T2h-`WCbO!s&?{ThqFI>k*YU_dt(OSM8y5$bsej
  7835. zH)*t{%#5_>0cM}D&Pg&D{s$*RJ=QbsO6w5FFp5P+k6j&U#}1)G5!<8|Ge|*i3a#0h
  7836. z$F9%Hh1hUv_3}!|`WxT2a5Gf5ryLf;0Ul&pRutxOe9t;0EIj!Uw&|Se;)hm*ou|Qo
  7837. z+U&I1+>pSAwsqN=W&SJ`arG`y=URss<eV8~$a2X~ZMRd_isL<m+}zNuf(TTy!~ecz
  7838. zTx9*FeafpmeqU7B<zMW72ne)4sR&XSo46w=JS%nFQ6FhTe6cYhe`Ce;LQMY9i>qV4
  7839. z>Mf0*w`ae+9vop){n>`kVL7|{EakVS!Mo@4dfNGQ%-$aF*PV@F9<yWnJ?G@YHQi7R
  7840. zZjR5FF!oy4%3n`%M|VP(Z}rK9#+$6ab>Lwb&%aN<d_2Fk&j#CTqr*ATD6uqujH$87
  7841. z@YYk@UtS;eAJ3Qg8_LTX?jy6IL(V<s6)o%<3pDtV8<w3<P?LDj>NgM&0#Y4pR~miH
  7842. zIUWEPoiC`Z&%}D<r{P=7rdY;9j6y8o?ViJ*5<;{qk-F|GLJk9n|F5)f4DQ5-+O2Kd
  7843. zcDL5AcDJ^<wY#;swcD+2+qTVLZQH#2zccsiop<KVw>&dB$vJtFoaaN5F9`b$q7-Z<
  7844. z3LJ-Ty$Rc9gU=$rsk+s3%8Q8*sF<O~Z3iQ$)S&OrwHY{Ak~wsrTQYOIj8LZKvfO{n
  7845. z#IaWzvp4P^AUM94^Ne+vs8KaW8Zl<hC6VAc-e5af@q1ip^%|t76=o~7N)gTJOP)<_
  7846. zP58<o?iR+nN451QnRar5R;szZXFGSsm*J8sbqsZ~*qh99+qy-ZUz<Jv8(fgiuvHpd
  7847. zpewlBR|On?2Gku1FjRfLOg`+o8-9N^`i!`?KY6UoFLno2YA=YA3=Bl0v=7}A`o{OS
  7848. zAi5&w9>s3nxVh|O+oO$<1VhEMc~g}j&HZL>PuY5%&as7Rln2BNsZxj^LZS7-W7^j6
  7849. zt)e4RK#+>uLfVx40c=&FV0B{)f-fyyc0xp)9no*>4OGJ7uu<EFnba{hH=$tE;=O42
  7850. zU1FcgxL)M|_$g<2CPy?HmJkEEzF%g(*-CgD5<Ozg)BdzbnA2K%MY{}1MhOp<rp;)|
  7851. zN64FW`I?5@j;x_H>RmSK*ubX+F_leGVf#<mG-1|<-(OK&u}AQg0u9T2R+=w?20mMD
  7852. z*p<7s7a#f9df0Z~Z??K)nhE&_hWGyT8oUtj3m=juB1Vy60v*ruey<fhc_jjmaGv8u
  7853. zsnW7YekWt#(5E>c`^094!=ex7eqY#5nEv##_Bz~HvO>K?b^&!uiTo`re+8n^2^@p)
  7854. z(6Ko+{janj(Iv1=?gAw-0oJJN7we>q{K5Ev-ZK8AqZ7NDo{_dRGZUg=Nb|t$Ta|~<
  7855. zm7aK{D?Sou!a-tHIg*k(>64uAA%l6uoEMC$bWK|}mnkm#^NF?ot@2!Tvx=4K@sCU-
  7856. zYmFMfLsLeNC$^tej~ai`dRgq8v5wOaI+m!a(c(+YlT<#coEb$Z@bBjE<)vr0K(ama
  7857. ze{ZDuS$W&=3m$vSz`uLYK1>*V!P)L$x7aL-Y+;*5hi_L|7*BE2uc%AI+kN+aK9CDO
  7858. zNW6JeJE-64num66-Q0z>8m3>m`5qBo7smP?kc$}q<G^88?>Ucj5t^m#+|p$^6waZ{
  7859. zY4w^Ri-l7`K95<4Veg!H5jZCEdLOg7TVT(}z2JUsGhm7+TS<#u5Lp3OE8GdUeP?2C
  7860. z_IUJ*_q=k!OrWS9V&1|yFd~gw{Lw5Cp83hlBrMIr@Vi^E?Yi5`e$N0pk^lyNN1esm
  7861. z9@^D9aW1nNXiT3iKIMMY1dO3%Db;a9>*~*P7xEVOpq3<r-~?1Mx9)iJ#y)!@DJVEC
  7862. zK9<IbEFjuJFQ{0R1@*0@b6B5{SI)i+mH;T_D+J)#()Z{me^-p0x_#wro62TsjQiy}
  7863. zMhd%frv&aLhsu;nW#>WlLn4;rs{SaAaTs`iSw#>;zUBBUnsV)&oL*1?PpWGeB$oX;
  7864. zX?^16`@ZR2*Bzr{6Gn=xXbBk6-S>FG|GsKjo%-;Vx7i|TAWY&K^LA1(JGL$?RxBHS
  7865. zd(`yH#Dv_Pw)Z*zg1*Siw#wSPbOnkG=X%f<HdyTO$V^0Ikz~075nJ@UfxI}AUz>en
  7866. zq79h~=xb*Jg3;vKhZ*O2$p*q7A#tH2=)~!~?BZc->XJVw{zmzJBY*t`c<rY$?9j;M
  7867. z(^4#BXZvw>U3c{i=!@6HeJdJ=YP`q97G${Uq7q`zx{#*cT`R-#%yG9<WzEBNKP14P
  7868. zJo`Qi&Ms*Hl9}C~WZXt4p+f%pehYq*`WzH+-6VXi@wQ8Oq8bpCpoTEo(y=Hdz*p)H
  7869. z>FYLG89#N~Z+^NRDc5=hlpksG@yib9hnF<Twa)?+x`c+<8l4c4FTMs;!nS56@^`nq
  7870. zuFQ({#gCms2MyKrcaIYA76qm9YnsZ_j(~Vy+Ak=d@7r&&50AheQej7nmffaquWO?A
  7871. zgFxp~g{^0=hxC<h38KYxHEZv_#a#z)okXNPW2W{K{<p4eFXpZnK7ATzDXg9IFGN4Y
  7872. zOrx(6=r8Keu<w`mMxz1G@R%~|MCn8*tCV>XYXX0m7LgtJvMtTk9=GfFHm9EL>Ekqy
  7873. z<0p}W1_mYJRLq$<ZQIKTXfA|GSC)n?E&-nx+0NOK180SQv6AKfHWK;LoV$wom}~rF
  7874. z;_=9k8lSlL%Rjhlv%_t!=k@tIuj9IBW&S?cm*Vo_f=!`7@O9vMF1GVflAFGB=9`pr
  7875. zbmqU0qwTSG0&xRV)GE{)+U`6asQn(o9wJixS~4Ar;70gwU0lC=POS}$LV!KV1q8{+
  7876. z{hRe4H5inj%YT2sqs92Qg3KFcYdL6~$RZ1V?D%k}o=OS#)s<(N5tmPpX75*djw24x
  7877. zKA>>j+09JxAh!XVc`nx5*bIDM50&vk|2{xtrEtn7_R0N(Ze3q%vCm;p5NP&*{~WgO
  7878. z3?urb(6W0G1wi4(zcD`JuGszB_uBgTy+`<+`7IjNQ0)Ug6Hb@&{+|c%^8x8j#x|G&
  7879. zpJx*%JzuGUCD-0#zZ*?fILChp@=Z9MvAyKKH3RJma$eKi>d{94PrpRNsH6ME@cA--
  7880. z{819XiKYE96X~G$y=sy{)RhJw5ber@e3Z2^QtoQecF;hvm!_dlSaD{#ePdW$RoD^4
  7881. zNCZ#}*}C|r)gZYRz30TSWhq>v)`KRC*`VD-#e%(Wg81)+%i262={(){3mz(ZzB14d
  7882. z`Pukr{WO)D>c%z~7lq$e1izghww^z*^hU`-9~ndkpG~QW!v^ZWl=wg7j~kEb>Ht0~
  7883. zkK4l6-`C$+*^Wy~jT!V=`WF*&_=7IIItLq1Q@~SO!B5xqPDgmJ=BlIfr#x?fjyObi
  7884. z*(G;#HV#_OS|M*(pN&9=*T^*T4X$@s*2uzrc~*K1xgRz2Kn(-KqgO0hRW@_Y6|jo2
  7885. zZaA9S(1lflcBZDhuI0&-wfn+sWg!TeUk=#p>`8G!d?SgFj*Ch<1k)}U5G#IVlI?t?
  7886. zm7wZ5-F7@%^EKf%&z3VZx4OUDf|F{5r)~2R`+{=)+WGG0n+kYtW3ENn_4ig_4P&tX
  7887. z?}IbdxSu>>4s!^PSM9$mPDgz27$4vT-<?%w>H~gU^WHIpy4i6nhd$1lS8faCy!RiU
  7888. z5?+63$naWg$Z|<C%?1$-;6Y=Wk`jBpI8>@1r~cXefn~VtS7*PSt@9emrPahHO8)v#
  7889. z89#dgR@GuAUCKwAjrBSiPLfCd?0J-kY$xU1;ct(9NBr@Y)PK%ZTetap#fN(H_j^{O
  7890. z`L*2{sWbJ8Hc`T`;eZDwP?5Hx6vUQ2#eBh2p4(>yxGll#F$VwlbLG}=(D7BY;6Zo9
  7891. z%=+M2@MSl4-r(!dFWDPwbryNBr!@T@;=c>OiNf5jzIRpmtbi~Shw$17zsJby{A-V)
  7892. z=lN_xJ}uoLLJ}-c(=8oSW)4^T(*;TU7n;xhnQz|9^#+}M<odzkIE!VcGO$+h;PF3d
  7893. z){S<byx}7LxjQ7xo6bY`c|Py1ela}=5_UQ-uC3zS4eV~_=6PLNX5nz{6h!Hg{B`2|
  7894. zOG<yBTVT8O`ddmIUS=yiV6V-Nv)t@_|EVI3?lB`x8z!p>&o~W}cXiRdK#z{47p`r2
  7895. zL6abh4WrMS*zLPtZ(l22>C28q3+8vY$Cr9*8<*nxrMzLTHb7zGx0|rj0WNRd3nka9
  7896. zjiT=WZDmbr(y#%?d>Cli5%FxngX&3codAKu`p8p6`#0gYG`}Ymm*q6`Syw=bsUL!o
  7897. zt#@BnfH;KW!&iym3%PntS1LWO>xyQBYvDR#du7lIPG-=bzq?FmdXLE2@?l8w#!yMf
  7898. zgn!`(gzsN{pr3ssdiIUFZ5y$G7fOH3yX&hOIDz%y$K2)Ft`oN16`+9TQ2W%|OQ)?c
  7899. zcgAnhny#0<$aCwOuI9intPL;ZJ7T0FGF^>1U+`;HT1BPb1+n2mg%RJgDv4pIX4@Ww
  7900. zpR2K*0o6x?DykBzr)fJ?1|R?A!k|^Pf3w}XT+ZtU_Q^Hi(Xu^FwBK+CW~^CL`mdu2
  7901. zr&?BG+<#B!&%&WsPyz}(b$1Qh(2v)OQg!9F-_x)2h~MX0X797Vy_-RSlF*tYltk9L
  7902. zhn2sa0+cV$2|~Vfu3z=uZY1sE=%6n-7#LD7tX`_s_9ReRlU@JVI;b!F-u7Vh(w?6E
  7903. zbn~moPR}e~z5K>{a(su_&I)^Zf;lz*HVnW5dWQv0S7b4To9C5NH<xF>GPd|e`Y+#I
  7904. zDt8MA{CF+gy-7<oaMk+U!|rNL=lA||)pl&RKG-!`=eP-#dY9-&F>E2A>}JjKJy_1#
  7905. zUA2olO`+%A2l)`R{q6H0P~(Z~Wm|<BzN<YA+K+-{+w%DFg%d_|xz-eG*RwDGwx`ie
  7906. zCK2zp>Bwcf-KO_b#w2r}Xyc2I2bYH+W~9Pq{6Ye22R#@R{L3xJhnl%Wqw5Uw;ZyMC
  7907. z^CADZN3or^!|f8~oYG>hHYrLCr81`T+a4g)^Dh_64<qvZD+zC2_gf`tE!s}tjGy}c
  7908. zd4=Ce=;Vk}fhR}*t^E9CHe2)|8Q;F_nUG&~sUe8ZJ>(Ew(`>innWil4NUowkZQGcy
  7909. z*t#!*B-=z)AWxkCG6m>;*Jqm*KcmL_)Du>;Jkxp8A36WH(!*Y@*OUG)b0^%u>yY)u
  7910. zhM}QEWPwu*EVKw}3_#dk&T5v|vHxhA@qFTVNa6Yb5xC}A`IFe^U&Fq9=QsQN+s|wJ
  7911. zi(<tw%dP!-5>VS4NTClQd;=N>CjFN(5EVCBEs0zw|0053%{6%<`NO2_BaZm8enPN_
  7912. zuB?z?Nd6!}PPU#V98Fr00u*oqg%vy0ee8P7-|>!gRF@0m1nQa?l$Dj$=1lA}<2LQq
  7913. z?Tl9xCV)X2cPupZP<nepd7xUhIoR`cp3$m4F|%{IaNX;XWUEskdD^wKFAeqzw*e}n
  7914. zGOf}@e_px|8f|6qcR(f{afqx@6Mqd_yLzW6RX=#8=b6|07`Yp9M&OwMOb)!IEbU^Q
  7915. zE@M<{(waH{6VFimbNhRTct`L%^?N+)6}I+i4~@lCZLOK-^kFQ}Qo9aUD{t!x*ZnnF
  7916. z<>stKzK`-k?(_R=MKH`-mWzMAtHr?#<V^0SI&k_9rAj?;8p}m(^j2StF9-j|Cdla?
  7917. za+4Fu8%x*;Kz+04gPdq+u-)Tl@c#B}U{B<CMAP|t#JsEVeMhBViWy~d<WaGKB*ItY
  7918. zdFirKyMKm&Rfv`gqGC?uON^cK9y^)`aQ=|ilqlo)-MbZyozTC`<GsxwQ*~U+1{Ts2
  7919. z#As>h_tj77e%!UdAi*8&?{YL5CiSVer=9=!xTN}*j!_N5T-J~lKUtn{r0>nE#Gv`P
  7920. zjn)_2J0%u=)Ya8w@0tSWB8tdfsn*7^(1~3T=uT)LLBVE)bVN`$>1}KX<4)vhikkho
  7921. z-f#n5(*;%I^UmS^H3+-<JPK$&uh4v|t84Ff!DVIbz{WQ8F~LlobqD`?tNDWZx()k=
  7922. z&|uaxId+G-UkXT>q6kP%kS;XV8FDp-updz%2utmG{6XNcr^I~^Y`EF~eouVb8>*Nx
  7923. zG&xVr$f)?n7Zi#|I&`u72|`$~*56gQdWCrtRj?tGtg|-Mj?A;orZR6=%JWVB;Q<#Z
  7924. zG~oAgFL+OF;7jCtf8MflnbQSnKI1*kZ^5=-#H^H5o5;5le-_QHrW~;Yxfw|`i06UP
  7925. z>b2b$`F-s7=5wT87V<efj1{yB<|?MyOY<j*oUIiDy!vMzX>uY8Zh#f6Kq7r<$@fWt
  7926. zf`eXi>`s43q{G#RM>SP<xM5?bH$Kl2ran({`>3%2@0c`XbW|po*^eoZYH;)?8SOgh
  7927. z_VIMd5a-;04a~IchPm$zgxbCkkVqeAn!Z_C`*4(gfwuU_HHd*n%a5!r1qOcLwC|e6
  7928. zx@CoI$%^C1Vq!)UI7<=w5+>Q$d$_z8PI6lqGI3}kbxxQ@&n;c1_btVGI`teBW38SD
  7929. zi6Q0{7H`XETIk_|^WUIu`HFet>R0=(tDZh&zZdetcjkh5+t7|0f2_dy!ICwF_$4YZ
  7930. zjC?}=-xt!{9%mE;K4+|rVThSN$D%K%_&xm`Gu3a=k4s#0P@lw*gas=I7MyT9xV<O+
  7931. zb6z5KK3BbLAx`umP>3!=Py-QM`I|9&``pbBUs%na?uY^rH=EZ!E1z3jelvPKZ4lUi
  7932. zP8j>oi&O_fL|?yOSfyqbFv|Pj!dN_DfJjCxeGZ3{UQjz`$6K@rO!X8c{~N{^1;1N!
  7933. z98kgm3jLiXRTvCUsePpba_KHegb=UEv2~dwRl&h6#83IiWztau2eK-YX9zID1WT0?
  7934. zW4WU~#tW>D5D+oQDh!#0bVl~m_1U|^VtzEn<DXlojL$#mVU=+<jg{klwI@D%ZQsa`
  7935. zQOo|Myy(60-}W`K=r8sx+zVa)xS<yR6!!S_PuTiGGb)oe$sydKi+t(%Hzz+^*n)i5
  7936. z<iuaX%l)Y9&4~v47-EO(Y=lg$r}dUPra9_DRF6P*h>VT%a4cXoxdrHV(hct24>cpS
  7937. z>3!*fVM4y&b?JFWkoVH|X5suoHEm_n?yBHcot9xB<qRc-?#+yTim`CQ__NHq_S^Bu
  7938. z@+9*>oT@}@%BB@>ricJh*|<w0eNeeRr@e&XN-sDF`gtG#99k*)iQOBKJi|mm05;ZW
  7939. zW>imeel9n9wLdwL>$JPri)|i{Ti`;<|8wOgU@Bqv(rr70`1`)6H+Jg<cbUaE@T`II
  7940. zmrD9@(Hqgay*?lG<<J{d(|np}`oE3uYw_M;=f?NKSjg3kaJti(s{8TYZGVY=<zx8h
  7941. zO|U7big=gQ8$`K6W!^eNG?%T?(E6Hk$W_7L9PC9-r5#blz5~;nNHXi4wy^#S1JU??
  7942. zUe+LX`|HciA&tARU8?T3;(2$o#V_()xw7DydEUAtbe<M*Fj^b<6Dp}BRv>z!<0>>(
  7943. z@Czr!o@oG{Iwxr5`)0e3o;fGb2l?7e$Vf<NAIPE+iC!%@Fy0D~5K+|;JJ(VCL<Ys<
  7944. z+9=pSRzULZ+IBd;80M!)=VwxJun|)Y*%OP)m(Yfw>#cWWKeM822w3Kl<j}HG6lFhO
  7945. zxMR0m!kg29<wU3*Egi}AAu;wv8J(55aCS*VR4uk6>3zp3x<?OS^h3IH!{^3vNTxR*
  7946. zG}gn1sz7niAsFpfcj+dda*I+O1I-O7lR-h-NZjA~JXo^A9LITpvw&B&L0}EC!G&an
  7947. zo)M@<If2%Jm9hXreASJv;93Of5km?<In`=A+=>BF&|8a#nk@|G0&<@dmEuBU8|oKX
  7948. zd|MXGNHD4E?uXTtE%74ek=JWLeaxfWG*vt$E950tcE$<vaxgsZIhJ34WwcD$IH?lx
  7949. z)db;(CyCCO!HdZ*-1-BNAX@ule#>GHcJo%RmhhJ=p40<YP6!oWhM(g~6p-@uyx-}w
  7950. z?AyZ<_xA|5Q}b0H*J;?SwwBo@goQ+#el)CB50^FYL;|Te7%&U2MTF<|8FmVpXiOzt
  7951. z3$&Y8utCvyLR6U>I97Lfgb#`1v0E^Tb0uF13U9W*FL7UP@dbxqj*lJQx{zn3^+tRy
  7952. zcaNLn_Ii@5!zPncYFI(%OeBedj_an6R~r=ivn8Kye!#TM^%WiRPG<w~w|&li+z!{3
  7953. zBQHn4ya*61Ue6RTUF>3Wmy2mvuV_y;WOo8+U$cLSO_xM@pYUL&0b*i(xLM`*#NK2(
  7954. z!?Cm7@1&DRe39S0-n<u3{WCqT5xk=wfQ$@rPMv!u<j0e+j}m;f($?jbCUvycG#+57
  7955. zCfpAvMp6DueQUAPy$oPu@XY+sHJvVS*?hMQ{Gq#dVDdlYk)bdsOHqwYcKH>WB?L&0
  7956. zoiW6$_!3MOC={ybacqMr_5)e<pM*nD<+1aY%q+)B(~V=J5({HG?FOhD5~3pQX3(Mu
  7957. zXQq3R^6gff1(HAzN<lTwqJYI-e7!bInMJdv=K#96Q=-w5TY@s3tB`k-ohK+MIE+_!
  7958. z;n=+0p0*P>YJ*<pE@nChuD@<@@>ftCQk{~3UnUtxb&8=E6=<XPtndzAY%aR@C~R4p
  7959. zs}iYEx-`>T6%r^9t*31I8m<VQ^4{xEZa($ZkA$_e_e7@KgPQ9j2Y4Mnh@4RG)`&QJ
  7960. z0N+Dv*o9go?_#KRUD*VwU|_9N5$V?L3i<jl0Fc!DKzGRxLy}8V;kv)~KEJBn?TSUC
  7961. zvTR2m!Mc5wBKuC=jId;OV}h8d3Gdz3mWp}A;5{*S<P`9kpXsg*pzAB`8#pPB$bQ#M
  7962. z8^ygd!u>>9y0u?B6+VW5p9g~0A!abBlR@<gML%U_%IlMXzl(Fa|A4`;+vtXEaVVP2
  7963. zA({R7ME*kE@;qlhO4G=TeKLU}TqnBvejCP9d4vF52q}NcZ-Zkl33~0}Wb!_e5db_f
  7964. zVg-7e@K<)AnCzovI81dpcY@pm{hzl!P|Q}jG&rH~{UWE4%4(}=Zz?f`*cixY3bN`v
  7965. zvSu=jJIs68FdlpVddG&@nFmQbol6R9UwGU4x?U-8HaEvy_8;Z=J&e?hjKmW6dCsQ<
  7966. z816sec|UAvy}VrT=oX$sd8OAaNf+mFh>K;M+|J_(cCcDL_ruQ&te{vlJ76v#1Kf!-
  7967. zVzW(1c-~%&xMTDha=g!AxnqRfZf1R_F{kRWDY?8@W+-HsHSeFgKqCn~`*8WLoqdI)
  7968. zjk+Uso8OfRh|?#37ECGoq;fjEdi+S4#zZQsuF=PF1djYYOI!s0URRx!#)ub(*icn$
  7969. zKEJ@Z0D2Pihxbb;XXj=Y;_y<p<x7C1**o0vK9cA~Kn(HJTH?Ti&)>w*-VArzL($zq
  7970. z;w6_U-TpFi8QYFqDVrXKgK*DJ&0*9OvRqM|#!vLX7(+Y6gv1-1HRr?bBNI)9&wOnl
  7971. zJsiL}fqQ_p95KFo61FsEeSkucH*Kh6Z?dW+<-<nUIl`wzP&OZ^?gGo;X1$6z3D{b2
  7972. zV$hE(F!k1>Qk)<e#a@{?-xf(%`C%~R2m|YKuq`1Z(0-6)s(9<YCG^gL2WK`KX~`s>
  7973. zp28~0p0@fs&O`#ZR+`H{4nj5AO}^2v%+`5BF@<T&l{9DATyPATYizilc{i+4&5*}(
  7974. z3I<^6ukpJ_`T$#M)nGOVs#vMM=RE!u&(r6VBb*^_e()B3UhDLZwXpA_tC!Y$M01pD
  7975. z;Eh_=QIaEsx=6-gU&(?f>1vIRPgT=wUE5wqB>1}1$@jUi;IO~^h|HREFX(vR*a_Oy
  7976. z+Xj<(IB#Yi$U;>E{!F*t_K!w^PC=+UYz*8d3ZtJF8aF%vO2g8bAlpTqlPd;qp6-Vk
  7977. z+Ya}U_jU_;3Be-gQy>#7_9lDZV7f0S1m&}K`K^XOOR=;|M7*$3mqdMlqoN*1xCe4M
  7978. zegTxR8GplGA3jP}+aJloh6OSWy`C6)^Masvd%r$!P?~ey58}g&1VguwceQaE#kd@s
  7979. z2REm0jEw}2f)GttBiYIadWEBN>8bee`I{)`$jFL(B+SS&=N04lC%m13_ziiJ0RQU^
  7980. zQ&yf<7n7nM$gbZ@Uf81P<Oy*I9EG~_cY%l`mPMN5v8c(rg)DARueSi@)K$!s8tA$7
  7981. zJ&u<2caZ@$l(*r0HeToyXg0W|VJy2KJNN0Z5Rw%Q+V16PVjrw^0#a^JB13XAcFPM8
  7982. zBaGT6>tlWuLXj27q8UyPV#YABY2ljqp&hAR?#RZAt06s`%z{9c8k-1UpLWv)Ay+!z
  7983. zgTQq9V;w4m9&{y(0*9%Y7iMt+<_Qm&+RjfB;FylPUgQvMTz;QjplS<WxcrCW%!VOq
  7984. zIGE6d_9w#DTqZ$H&bS2N(!P-g{Q%D^`eF?~;g9}w8;I%RG1l)RZ^JbDV2r7b`8?+|
  7985. zeV6K}{JUws=x)79)V#xQv=BtxP7hqr2$#SEdCTtRbT>WGqu{&N2@B$s+JW)cd+b-o
  7986. z-95;cN8t6|4E<>LhN*UoB@1)#y%F+sSeu8{A>|Z+mf9QLR)yHIc_559ggQ=y?`;s(
  7987. z{bEki2vrL=9eDyqiYsnNOH`+&xoLX(Vg1ZgS8}$^>9*bPn7YK0a)Wq>@D3jn73D-X
  7988. zD{caJDZmrQWk+Ax#sK36LB-Ave`f(d!ux^)qke$Yn_zIHZte9|uy61a^~YDu2T)^R
  7989. zVTRbb!}WO+PaY=1{}(H0Yg0F*>`Kbc`XObK(e_cf{#kHsVD<n=7rJ_GUY?Gg*6vs>
  7990. zOACHB?-vA0mL!STurXxcDU>>T&CYR3-Pj49zBd};?7@|_d>8`EVZhNXYlZSvb|4CF
  7991. z6;YM;T8>e{0Xr`ZErWhK7BvqjwU@}*DdbcW27q)ye4{I`P#8{;Ucf6-`R~lK)ByD>
  7992. z7e)34TItx!e6-|{jebkm`_MaUl3U&knt#Jo$;VFwTDL(S{HX(HyWq|Ri71%ES{N5~
  7993. zjTN)h+fN9x&aR)H-9tcgQH5{Yrp$&2I&YSs$zj7;E3#~K9X!TA3&Zc?9w?8seVCpi
  7994. zk$6jN3Pjb+Cv=e7D=$gJ@a~E_rcpP-Nm2t!*+(y$I`okKs;wI($xfJmr2mq^TIE@I
  7995. z$Um@COXXu$ednHw9>=FV7?PXCQ@6z4fvM}NEZ=z7txVyUY~wRmsd#>L?tYR(`v)}F
  7996. zJ-x(yOSD1%_+XdB+r$#gRKP&<kyqEYeGov*q4&&!<bs&)qMBiS%S`k^t9>}-&|lX_
  7997. zZ2O}PwV^Txfu(djOES6<&#xZWCRAgMl;ZrmO0m6@NrU{I(W5Tq7{N9N2ae7MhF6f5
  7998. z+3Yyc@_}(|3WW|0-<U^aye1A@v<*W$A*66(anqEL??lD!5NjPQ|H+>8QoK2&H$V&`
  7999. zi9TJ}UrUIu7XGr=&PDrJv8%b3Wdw<C2_Nb#D|F?pHxK+~QAM)$a%Et4phtYNjj<+z
  8000. z*Ojo(HtX5GH|BnP7_Zn4%JJ|h;`^XWVfVtze7efEQYlF^3&uhqOZKIe2jWMDNq%Nu
  8001. zVdnII8lLAyZtS@gc85*I-LOZ;+}g9#pX<yh)9D+4w7!L|KoI?XgkQ2ZXA<iX;d^2n
  8002. zf8aU81PVH)ftC}oK|}Sh?Cz7JlewYOHzw|VaaRR&AQUyevpA(Hkgr>$wnPS4WI3l3
  8003. zxHQZS9^(sRIwlPg)=r{Q!#_!r6^#jXncVG+Nx>$Ha4q)2xM!Ez(sO0OlcgQu)1Jvx
  8004. zn#zY<8m-4c+KPqEMpyeMX0>OsN$ER~OM96QOPHsl*URM7R(adW(DmzJ2{WZx5ALfj
  8005. zz>%6MQ=HnrBC}qQWwV?yR)p#P*y{BFMKxy!P*;x8G!OTk-%6#+gU0)_9F)c(7N<V5
  8006. z<QOOi$E}c##YYiHk{mdbdR@z`-FPY<HDR~i<aQ*MO>Ka#w&E4D=%DI1>M9hgW{;l+
  8007. zm4Unl%Q6M{%CH~7v3AhC2sI1aCmx?YzKiVPi}#&YrpVZH*<%m{gdXX?JcySp7VzRj
  8008. zkfrxhqeMi@jvPj#QP!G_h>`O`aeNT48vBeqhaYlII*!E~4+sn}SQTEwoUu4y0A)A?
  8009. z1Eg7mQ36C4i<Cs9^gu@INJ)}{-~9=Zu*wzX<NYOjfLpRWIO?Q)ZCgq>fGsK-nELzt
  8010. z=O28`qzCIlU3F3$b4U;eWI;K+X!4%b@i+mhcJT13kqt2Kada7y9l}b?bN3xj7YWY6
  8011. z_rZABGneTB9`)oe>rjE?ymZ?Z@v>leSZ(e+TO9n<I`|Yw!W_WiUz%-AN7V+cSJT~o
  8012. zt`3Le$={&$nSDUKL(Q;Lqgh-??gBi&P-Zljf1L7`xWT37r|Gj$I^`PwCOCaQmd}ki
  8013. zL4KcNuv#aMrPk+0MJD7q8H-cgixD{@3T=cSU>mJVILhYjm#GGc-V_1}?7aDH!zYYx
  8014. zNEmR=35RWGl++js$E$)hHwE66DP?!_*cRd;@9;F|FnyVz20}Xr2-2rV`CYihe;K6d
  8015. zsSg=9aEkjt!J{CwBbH5ZiM~~6gi;?LUGM5Co8(_sB~rXsneC6TjYZ!GMlE`1ABP<b
  8016. zS0z)wgp*+YchP`s?$`JPnqaZN3MHO7$X_s}R}NwF0D9WRq!?$Y)?6Vinn{_fO?_AC
  8017. zc&cG4%|!Ljtx^vPS)oXG`CcX~r(w%(p<b<&g<N0+sLDMv>f~}qCJZzrhb%8XC59|!
  8018. z-U9NOz*-VygS^0RR9>lrLLNLQ!ijKLm{&uLSXrg8WRThrIfAl<jd&Zz6IR}2es(yd
  8019. zAQX=4yb)r^4P^-l(6MDRN89P2^V=3oEp%lir8G8UuSk$pn6KJcJb5(n)YN@G3>FMs
  8020. zDVG+XZi_m@=k=56XJa~4kT{ZFam~q0Xj$~KCfd=s;#VOQlor0R)jU(upjrYZN^gbI
  8021. zMwth=YvLqoy5y)?JUmL*j!@1D<;_}Z)1-#EKU}d2(mXmxu<Ha5z`!Q<vOTW+d!WfT
  8022. zUPH8)G)ug=S#Z{Uiu+MJB{E>xxmabiDUTp75jUN4;k3|%@>bw<l&+!01`l=UujWfq
  8023. zH`~}W+1y{p1$WH<DD#zg5ach}MdvO^z{0p9oOqM=I;ZZiF}=|WmuQFyLJ7qdq&5)?
  8024. z#MuuocZop}LxRQ&oy_ivR&xoSulMoVC@U*dCaC6eL`vk)K>R!J6rKz{$xaK$O=hz3
  8025. z^k8Zvd=dwo^Pxt2?ekp{MBMT>{&*HVFW{Z>uVrB*r`6dc1v*+8cAhtINnvE+-e+Ss
  8026. z5zuNU@RN>5n|b{Gv9hoHC616dX>S`x1f)QS2$5SsTgQ!~c*RdXwtI!bvWg)Gf0O?q
  8027. z_45FNrmH7BA8Y^G1>8~-XK??ZG+HPMVOL1Y_s&L*1cm1eUhWVU2kuzGVpPBCUR#tR
  8028. zG{cgwXp|exh9mz*B%}7$@J&8{NX-T3gytRLL>qjmoL}p3L|P3~bXt)nPBun%8eB5c
  8029. zGX@vp(HmFqMDABLnloFWFeJDHz8R&4RE5;~wzpE0#iDgWXGbXsv1((2F=-tT?gD`y
  8030. z?@+5zHYW1W22aI}C-pu|rl^ffMy^7QuIpTnN%I%o1V_3C93Cr8bg?lK)BsIV-9j5i
  8031. z6HGe5oJX{HkiFhEX^XupL}_Nj9^Sq?Ae<QIZ|9M`Ssq(Vw=uxa=D{QnXvEWSWlsJ+
  8032. zj*<6uFoTLYJ+vxNENi)qKfS=)jeL6khm72+@!Gt12Biz8QpS4GgWwN!>FXHi!tkQ7
  8033. zS?(bmMv)SJ=1+)pM3?zx=>CM8PgWGi3D1qa=ee!D*Kq3ze54S#tNt`+hux15gPr$n
  8034. z#oX6Mkj!W>MXE!mVUEuaWuaqu@a!2F042<nP|LOstekWDHz`OzhwleDjz{N3`d0;8
  8035. zLuucLarI}|a|<-F-y$=h@nqBxQr-$${tV8?zk_7~<~k<PIwf(>XZL`|=ptC>TAIjI
  8036. zqAd7?A~;5RjgkVZ=T}nLGTK39KsDoFlc2tUVqzr}DB?9AQL(oM5~`fUPW0P+`H{^*
  8037. zR59A(K0);I?oA!lm{s@K0+Hv>Zb@mlj5(JGmz2QdUSW&BNt&Fnb*U#M;Y^gCLCoXi
  8038. zRjo+{!Bj=DUGoa8;u2JAu5X(Ulp-%p-I_!K5iTTjKE}t(%UQ?QEoT`Z;(G9)`4=W8
  8039. zokeW8ZctXW!TdCkcwL@1@ik3Kmc_vZA@Jf<TjM+~5-#Z<+Ir^}?<H9)iEoNE6523x
  8040. zlqB^8aV`A0U^#~s3HK;b^+}P&{&YF;bP{t?^AOB$&!uRN8oGY3dKR1|lwcCE0nW4r
  8041. zfBj~D-29DM$UotvB^`oQmiC-n8LB8^*`}Vzb+$_&?~{0DJL8*w7Z<=$qks<QPk9xF
  8042. zT*1;V8r@h-I4ec0?Ed-O6O!p>%s~OzHq~m1FlcSI=|zBB_=E9TaMrv@aPw^2l#oH@
  8043. zur3r4Pva32HP|P7ah_*sm2ppO;O}hCWLT0^lw*i`Hgl_!DzrS^R_>AcNUBKtUTKRI
  8044. zFckxy#f;&81?K$$b8{Ly`n`Hz3_=p&|5OIDO9D3Lc#z$*sd!3_<#*-dZck$QAPP<7
  8045. z+Th$^Lp4foIp817<`zn+<X^o?9j+Y}Gdh$fy_LARulDKgp*6*NV;$2)S<R{xJAN*r
  8046. zpf$ekYPB##QZB?DaXgb-WR1)klH0oz*$x$d#tVrr5)rp3SgmNm!_qF(b%=sS36<V(
  8047. zieb-p0-|qdCk0#-yJdNWa?ygjXv-d=7)Ih1@hl2E;Kt8>u2x+1NX*lTPEb>&qRf6O
  8048. zHXc|lZZEQElBAlUJ3P=A_+4}$LT8r@S>M}Etl9U+Exg<%&iXf;rNa2FI}Q1CrzeHi
  8049. zy|iu?Ek7uV2Fw74P&AXOn3Q;5dI?(k)R{@<SJL_Dt;FJn!k<@O{J$9s=q3@>cl>O)
  8050. zYzMrwhnr%zMZLS?Tehc2B}iyIXtwia7DKo>#PVXhA1qp7bA~ZB=nF-l^K|`v`Rsr&
  8051. zsv_(gWbvvv5kqxPsG>n*xy1vaXL_8(Tz(Vwl_AT~5G2`}n>exNgmRCAHXdnK7YuI#
  8052. z#)XfC(X@Lh2$pq52zEa?_D6sJkN~L&KiU#tf`48zkzKENi>At`%rwe-b+|zJtJd~S
  8053. zk^$g(>@Zq3wfe)s+WHe56H#}$JyT~^FW=J|#vO`0LIhg$H!mNUOSi+$E5Z&N-5V~Y
  8054. z2u@6lD?NyS2oFgT`;{=q+;xGM3j{SA+}_c~o~W16c6S)r?*_Z0cU?Ye#$O_L=|6YL
  8055. z$BQK3M3)lKNa~y<sX4bfkud(GPfGKR4g(}UJC+jMpWfE?5oEMVTWGV{a6OcQJtDz$
  8056. z>EP8A*ky(F_WG+Z^u%DiZIsXu_KMo`siY9p70zQ54q9mrWJ4QHlBqbDqw!V@o9VE#
  8057. zsN((6%M-*=v-+Pm?&$)G10*>6^=H&n6|v$tr7M?LU#M_tpw&h5Z^bcko5`;{QsIcv
  8058. ze_FnRbq*_aP_WqI0L9eSDs3@G^<)lYeXwNXni_<iur7R<j@e%L^oo~)sceSmsdpoe
  8059. z@cwo$;!&crYD&w{6rRhIukFa)YA%jAC<t~{D^;WGm7<92?iEprMyv`K*wgzy$~f{?
  8060. zl~`rTB>cAfbteBL5R70Wf|j1{l)HVnu<=tlPJ+xSQii)nd?opw)fUX4TR}+Vc$oeW
  8061. zCqLz+)FLo4c#72eaqC`Wjt&PaSr#`lpIc>G$N+TRsjwLdNBYvDg|i<Eo<K<Fr)`;G
  8062. zpjxWfaXC((1=m@G;OsOh&gP$1^h7IFL3b}p4*d=%v;FbIiDSEM{a4oP0kf%H2HKqs
  8063. zBJ`oC`~?Yd9zG<OZj7C^;zdv0hlQv=E}o+O!FN1OrM^;S+-IO}g<NbMHQSS&!Ctk*
  8064. zWs3r<sCjGAKSkV3t|?Oh(^5a;t<xz*99faLsu1uj#gwK>`$wsGaY)i`Z<!Wo?&|VS
  8065. z8s;+C{h5P8cAIC)dUGvkWXJ;ZSEqFZIX7kQX0r~M@Gfx;Ie30nAMBolCfl-Z$5r8~
  8066. zPaTV~87iUg&w;u`fJ6ElKcr(Yn{Lt$!k_6?B&`+BR#q<DW3v^l?A3IU<gT=9I=nE^
  8067. zPOXAKi34a<T^o`0#Z8-=eK6=)hV66$N<*@2a`Wjx^y;JWG|Qj?1ZG<FWL>6m_a4BJ
  8068. zTo3rvYtNq+?$O>1U~tXebwmah2c4X7+ClQ9HLggtI1{g?lO|4w1@5m95tduh7*p)#
  8069. zaj&D>xT>AAqpoceL9uk*aX!S{kk5+2V?VKSRK!T&_}1NERrn`f@xx&(GNPBTLHYO?
  8070. zF>*_;R24xSSt~vZWyKeP={@T3p@%qu`ta9Ic`ge_C(G1U8rRS|bH$kcd7qC7<w?&8
  8071. zh3OXcG(&9^XlRIJMf^Hv<`n!Sfpb)U4|JT8>yoX^v+}(Ok_5@1gYE{bxioa5>{3#z
  8072. zw>mw&9*>w&a;s@q8R(N;gXWXT#Xt*$ezjgsmC_u`#>-uE@1%hN>=0g}lzWotT8;ei
  8073. zVp5(?Oj^L^P;Fkqymjs|0D=)qWAENQS`@ekV6GgiA$Ox~oA>P?SrlpoQf<ny%tz&O
  8074. z;)v>;M8RM`)RY!19gQm>MM_@7d3)ga>h8mJ%d*SxjBXyq#B=!N>p1cZrxp=zi9?em
  8075. z^kF+bGR~9eJ0KK{8;y?>O@{&%D2%}NlO~sCEx7b7jOP-ljx{T1H1{j}H>pX3>CY0!
  8076. zm#O2{p_A`!cgMBIL<`A8mJ6^kU#5@qU1{E&_zH#sDT-t%vn2?ZAxVVRs<?~o5TmnK
  8077. zN{JfJRS!kiyYbH&Y~M);p&vd07F+%NUbbweka=>X&1FoqEy1)l9_?k7F=e?8x(tPT
  8078. z@_meSeYogCPraC%&}6|*zOF*-3%MK7WTh89xgb;0mS|b$xhGwHF`@odM`S(>Oj!>)
  8079. z&i$EYn8HabL1nO)3?wiQs$cTkGxFL|gu}f@B%<2*Q(Q7iWQ}{=hI^rwT>*;;N{rQF
  8080. zsmo1Z0(HZs`W8tEk)1>{AVu@^G-d;Deb%zFD}sGU5avqk4S9ynDh26gK2Z}>NkR)T
  8081. zAO)^+No;Tq-Kw*%$^qsGFTI?lElRyVkm5f6JkMIg!-?FN$9N%Fqhcvqu!NP@5By<$
  8082. zpL-$dEe=6889CeR^yb72o1T*LqtreryYBOr`+<VDHA2I$b?2`#EU1}NZL=pz$}1%h
  8083. zslwJ0*HN#v7G@?Qn<rxA*HNX0HbBlLkFW`t6upiXSL61|%mb<x86JkJYA!H2*@doY
  8084. zJ@#o2SU4*gsE-_Tz{Bw}E%<I>Mw3MXY>`ORs#AZePcRL-5iFogruJZXHhxV1<s<m5
  8085. zZ1OANC+FsG!d!lpYUeIp-a5Nd6<3Bkag1>HNQo)dS$?%LDcP)}PF>Nl3JhyDOQPYT
  8086. zjd%$|)^C0Jatb<F#YXe9X7S5rHTw3cB4b@Osykt+t=YE=ai!q{6IZlXnRUfXR4>^^
  8087. zPBC!<(Hycfn8SMYI0)3X)HZ@&JDNGpp;(^*Px}o_L?BGh+Ixi5;yDu%Do!2iP@-h~
  8088. zOi6ZaRF=+!`0iD<x+DD$^s7Z*bSW0Py-vvEGnJ)M{zB$I1Ad9yFYK05%7Okhs!fxq
  8089. z>XQe}VkZ1AL6T?!;zEk}!uXGe5ray|JBxIvX0p`Gq0c*f<?j0uQIuaW?o{3VxgHXL
  8090. zk@vc-BaT#gHfCR>Uc%Q1;Zh#D>{9dBnJZA(6`WZbc8f}u-SDKl9pk}Sv3(^rX%Wp2
  8091. z0-LNX1{+TyVOdlz+{nf{eeK_Ix710zRCtQ$qO@10G-IvOQ;Pio2h6;LE|f@4Lvh)p
  8092. zGAY`wX3wWD5GyD)c8tn8%5HuXfm1A9)V2JK1Q_U{fcjS>-Nv{TkuBJLXuH&0xqdm(
  8093. zb)VRbn3?w#m6AON$wK37qWo~pX_J4SurmcETy+t5!Q}Ich9q&ltpS2oq4z0RSZ`X6
  8094. zYPl?qibQPi(qVRMqnH%;#%gZm!svpA0%NsV&Yccx!uXDyuOQ79hAh9-$y%m6VamfO
  8095. z4xKGjs39l!4W)m2p;OLl)J^VDagyk7t*>hKUqR6`Hc_Q!wN}bBGD4>RE}G^1eLp~g
  8096. zE&(FFreaI5ilAb}hv(u7aT5iSBi#=!NC|f*3c~)e&H}Qw9h!Qc9dd;y>=T`U^~gH%
  8097. zg-`7O<NW6A&T)*Q8aHisbi2fpw0IR0?T5j7ipqY}z~F8zb_Bm{E}M8-$D&R}sy+k2
  8098. zi)9|W+To24a}qCWW~Hp>5U!jHTJq$E$pTm_N|m4D>s0V-AkSiyfXNfsO2bJkY5x+s
  8099. z@L5|7mKTscx=s{`p2l#<N><jpDp3;?oYTrH8BL>H$@&?iBpw<q7gR`9#v`)NpGtqQ
  8100. zeNb*CKUVf*-04S^bfu46uEBEphUG(JS+Rx{)p`-i+tm6u{ylChlXx#pYjsjb!$*M3
  8101. zr}AbDI40@~1s~EhCJ35x$wj?FPGs85y{<iEx$(j}C8j9_YKT&{IJi~@GwwPg*-gmS
  8102. zkK!0?+(yJucT@y^U!@C3jU)uI<Z2F9@kY}4;Sh|BW~NOI4`9%T&-~;Vt`g2X6Le%k
  8103. z6^)h&t+`U8{)$AlN!d@$e!aFo<BdQ~<ffSIrclE`1?clXoagz4c9&7r6?+#c63k{?
  8104. zCsX;$#SnqQpeO@M;|`5%AL|q{ww3;d)B)2mpxN7`Z~v_iFq~+x?A<W>d{P6&8#6*B
  8105. zTq8vK^IsfJ>qUl3K}r?Tpc}E)Tq{K*u2-ej0e*n{wX!^exf9bWkXU6Utk65ALo{$j
  8106. zoNp(iCZ$;E-i7`XGx&8@;QE}>bPQy+t(f3IMS9Ex<SQ!%kp0GyJUdk|j2NUK)z2cd
  8107. z*&te!@b`uw35EpDyHOAl3$G=y#0P>&uQ^7X99a79#!o(~{<ZjjcA&ChcfiSo3^6R&
  8108. zRr2$dYC2#^Akh6wHi%b;XD&TUIqFLbV!Vi9hhb}ezVXP@Vo8ee@8>7D;*($ugG|?I
  8109. z+Y-=RNzJa+^*UqE#b%(C*&NTwfn;@ryGwimVBM__R3r)c67BG@mwNyHG1eYrL-JmS
  8110. zeE@RT!m0S%kAP46fbxs(fTJUPamQIuiAmVW4L0b_ra_4<kY#r~PM`hjdj{FCxXT{z
  8111. zW{_5ChWiFrGBFygSQ;2<^5i%Y^j~w8eBxCoNY1O0CAT+L61ES5D=>FM1e8ltf5+#t
  8112. zyi$^{*UTC?se%Bg|BFL%!WkMOyvTv4*S%w3W1IL2g3ern2o>aG34-eK%gyXZfoHwr
  8113. zy8r7KY{qmaz!pT<|I{N#dIzl;)b5#aXQQRJ;U`EStkO7p9*7ON4G5KrP2y7pm?Git
  8114. zi%A$qK7Vi)ffY6c5s(E)*!_HJ_c)N_Zs=@S5C|Yhn6y%4Pvi`^jlr0DKuHYm74pu1
  8115. zeu9`|fPmV>mg8e@@}v0Q_kzs8fTTk~0YQ_07zffCvYmQS3)B?E@VZi=4E>uZmh7hp
  8116. z2XlehMi|TaC*Ey*Vhoc{63`h8kaR3mTkK4UfT`BYMT`H;f0sfJgFr-i*mmTiwZOU~
  8117. zW9+P+2sp5nwMywB;PKsVaDp7z-E(n_mlec7Gry(b#7BYVN!R!l^&SPpxHsd%{sa%Z
  8118. z6ys(A{R5D7Q2{NF;q88bG4HqzSMj&Ndy#`|dQoE?HlW;TlO@4}hRC6;FY{NHBt(W1
  8119. zvc*<xe$0MR<LEXp+gXD`@lj`aWe`&7EBohz{Gu~gPB_p<K;1+q;MfhMpaU`rj_&v3
  8120. z?M}eL;InF6S?|3Wm`b$kS?PY?A5Xek)t!H%<Na6jCG5@)<o%BhymU8<N|J=X7nS}C
  8121. s;{OzZ<Ny7?K>pt_{(s2D&h0no;CX(KtH}H!$iE^jE-zLsVi@>;0N;%18~^|S
  8122. diff --git a/iphone/doc/ZBarImage.rst b/iphone/doc/ZBarImage.rst
  8123. new file mode 100644
  8124. --- /dev/null
  8125. +++ b/iphone/doc/ZBarImage.rst
  8126. @@ -0,0 +1,150 @@
  8127. +ZBarImage Class Reference
  8128. +=========================
  8129. +
  8130. +.. class:: ZBarImage
  8131. +
  8132. + :Inherits from: :class:`NSObject`
  8133. +
  8134. + A :class:`ZBarImage` is a wrapper for images passed to the barcode reader.
  8135. + It encapsulates raw image data with the format and size metadata necessary
  8136. + to interpret it.
  8137. +
  8138. + An image must be wrapped in a :class:`ZBarImage` in order to be scanned by
  8139. + the library. At least the format, size and data must be set. There are
  8140. + also initialization methods for automatically extracting the data and
  8141. + format from a `CGImage`.
  8142. +
  8143. + This class is a wrapper around a :type:`zbar_image_t` C object (q.v.)
  8144. +
  8145. +
  8146. +Properties
  8147. +----------
  8148. +
  8149. + .. member:: unsigned long format
  8150. +
  8151. + The image format four-charcter code (fourcc) as a 4-byte integer. Use
  8152. + :ref:`fourcc:` to create a fourcc value from a string.
  8153. +
  8154. + .. member:: unsigned sequence
  8155. +
  8156. + A "sequence number" associated with the image. This reference value is
  8157. + unused by the library.
  8158. +
  8159. + .. member:: CGSize size
  8160. +
  8161. + The size of the image in pixels.
  8162. +
  8163. + .. note::
  8164. +
  8165. + There is no separate "bytesPerLine" property, the width must match
  8166. + the image data (which is not always the logical image width).
  8167. +
  8168. + .. member:: CGRect crop
  8169. +
  8170. + Optionally limit the scan region to this rectangle without having to
  8171. + generate a cropped image.
  8172. +
  8173. + .. member:: const void *data
  8174. +
  8175. + Obtain a pointer to the raw image data. This property is read-only, use
  8176. + :ref:`setData:withLength:` to set the image data.
  8177. +
  8178. + .. member:: unsigned long dataLength
  8179. +
  8180. + Byte length of the raw image data. This property is read-only, use
  8181. + :ref:`setData:withLength:` to set the image data.
  8182. +
  8183. + .. member:: ZBarSymbolSet *symbols
  8184. +
  8185. + Barcode results from the last scan.
  8186. +
  8187. + .. member:: zbar_image_t *zbarImage
  8188. +
  8189. + Retrieve the underlying C object instance. (read-only)
  8190. +
  8191. + .. member:: UIImage *UIImage
  8192. +
  8193. + Convert the image to a UIImage. Only certain image formats are
  8194. + supported for conversion (read-only)
  8195. +
  8196. + :See also: :ref:`UIImageWithOrientation:`
  8197. +
  8198. +
  8199. +Class Methods
  8200. +-------------
  8201. +
  8202. + .. _`fourcc:`:
  8203. + .. describe:: + (unsigned long) fourcc:(NSString*)format
  8204. +
  8205. + Parse the integer four-character code from a string. Alternatively use
  8206. + the :func:`zbar_fourcc` macro to create a constant expression.
  8207. +
  8208. + :format: A four character string representing an image format.
  8209. + :Returns: The corresponding 4-byte integer format code.
  8210. +
  8211. +
  8212. +Instance Methods
  8213. +----------------
  8214. +
  8215. + .. _`initWithImage:`:
  8216. + .. describe:: - (id) initWithImage:(zbar_image_t*)image
  8217. +
  8218. + Initialize an image wrapper, given the C object to wrap.
  8219. +
  8220. + :image: The C object to wrap.
  8221. + :Returns: The initialized :class:`ZBarImage`.
  8222. +
  8223. + .. _`initWithCGImage:`:
  8224. + .. describe:: - (id) initWithCGImage:(CGImageRef)image
  8225. +
  8226. + Initialize a :class:`ZBarImage` from the data and metadata extracted
  8227. + from a `CGImage`. The image is converted to `Y800` (grayscale) format.
  8228. +
  8229. + :image: A `CGImage` to source the data and metadata.
  8230. + :Returns: The initialized :class:`ZBarImage`.
  8231. + :See also: :ref:`initWithCGImage:size:`
  8232. +
  8233. + .. _`initWithCGImage:size:`:
  8234. + .. describe:: - (id) initWithCGImage:(CGImageRef)image size:(CGSize)size
  8235. +
  8236. + Initialize a :class:`ZBarImage` from the data and metadata extracted
  8237. + from a `CGImage`. The image is converted to `Y800` (grayscale) format
  8238. + and scaled to the specified size.
  8239. +
  8240. + :image: A `CGImage` to source the data and metadata.
  8241. + :size: The pixel size of the resulting ZBarImage.
  8242. + :Returns: The initialized :class:`ZBarImage`.
  8243. + :See also: :ref:`initWithCGImage:crop:size:`
  8244. +
  8245. + .. _`initWithCGImage:crop:size:`:
  8246. + .. describe:: - (id) initWithCGImage:(CGImageRef)image crop:(CGRect)crop size:(CGSize)size
  8247. +
  8248. + Initialize a :class:`ZBarImage` from the data and metadata extracted
  8249. + from a `CGImage`. The image is simultaneously converted to `Y800`
  8250. + (grayscale) format, cropped and scaled to the specified size.
  8251. +
  8252. + :image: A `CGImage` to source the data and metadata.
  8253. + :crop: The region to convert, in image coordinates.
  8254. + :size: The pixel size of the resulting ZBarImage.
  8255. + :Returns: The initialized :class:`ZBarImage`.
  8256. +
  8257. + .. _`setData:withLength:`:
  8258. + .. describe:: - (void) setData:(const void*)data withLength:(unsigned long)length
  8259. +
  8260. + Specify a pointer to the raw image data, for the image format and size.
  8261. + The length of the data must also be provided. Note that the data must
  8262. + remain valid as long as the image has a reference to it. Set data to
  8263. + ``NULL`` to clear a previous reference.
  8264. +
  8265. + :data: A pointer to a raw image data buffer.
  8266. + :length: The size of the image data buffer.
  8267. +
  8268. + .. _`UIImageWithOrientation:`:
  8269. + .. describe:: - (UIImage*) UIImageWithOrientation:(UIImageOrientation)orient
  8270. +
  8271. + Convert the image to a UIImage with the specified orientation. Only
  8272. + certain image formats are supported for conversion. (currently
  8273. + ``RGB3``, ``RGB4``, ``RGBQ``)
  8274. +
  8275. + :orient: Desired orientation of the image.
  8276. + :Returns: A new :class:`UIImage`, or ``nil`` in case of error.
  8277. diff --git a/iphone/doc/ZBarImageScanner.rst b/iphone/doc/ZBarImageScanner.rst
  8278. new file mode 100644
  8279. --- /dev/null
  8280. +++ b/iphone/doc/ZBarImageScanner.rst
  8281. @@ -0,0 +1,99 @@
  8282. +ZBarImageScanner Class Reference
  8283. +================================
  8284. +
  8285. +.. class:: ZBarImageScanner
  8286. +
  8287. + :Inherits from: :class:`NSObject`
  8288. +
  8289. + This is a low-level interface for programmatically scanning images without
  8290. + a user interface. If you want to scan images manually selected by the user
  8291. + (from the photo library or using the camera), you may prefer to use a
  8292. + :class:`ZBarReaderController` instead.
  8293. +
  8294. + This class is a wrapper around a :type:`zbar_image_scanner_t` C object
  8295. + (q.v.)
  8296. +
  8297. +
  8298. +Properties
  8299. +----------
  8300. +
  8301. + .. member:: BOOL enableCache
  8302. +
  8303. + Enable the inter-frame consistency cache. Set to ``YES`` for scanning
  8304. + video or ``NO`` for scanning images.
  8305. +
  8306. + .. member:: ZBarSymbolSet results
  8307. +
  8308. + Decoded symbols resulting from the last scan.
  8309. +
  8310. +
  8311. +Instance Methods
  8312. +----------------
  8313. +
  8314. + .. _`parseConfig:`:
  8315. + .. describe:: - (void) parseConfig:(NSString*)config
  8316. +
  8317. + Apply scanner/decoder configuration parsed from a string.
  8318. +
  8319. + :config: A configuration setting of the form: `symbology.config[=value]`.
  8320. +
  8321. + .. _`setSymbology:config:to:`:
  8322. + .. describe:: - (void) setSymbology:(zbar_symbol_type_t)symbology config:(zbar_config_t)config to:(int)value
  8323. +
  8324. + Apply generic scanner/decoder configuration.
  8325. +
  8326. + :symbology: The symbology to effect, or 0 for all.
  8327. + :config: The configuration setting to adjust.
  8328. + :value: The value to set for the specific configuration/symbology.
  8329. +
  8330. + .. _`scanImage:`:
  8331. + .. describe:: - (NSInteger) scanImage:(ZBarImage*)image
  8332. +
  8333. + Scan an image for barcodes using the current configuration. The image
  8334. + must be in ``Y800`` format (8-bpp graysale).
  8335. +
  8336. + :image: The :class:`ZBarImage` to scan.
  8337. + :Returns: The number of barcode symbols decoded in the image.
  8338. +
  8339. +
  8340. +Constants
  8341. +---------
  8342. +
  8343. +.. type:: zbar_config_t
  8344. +
  8345. + ZBAR_CFG_ENABLE
  8346. + Control whether specific symbologies will be recognized. Disabling
  8347. + unused symbologies improves performance and prevents bad scans.
  8348. +
  8349. + ZBAR_CFG_EMIT_CHECK
  8350. + Whether to include the check digit in the result data string. This
  8351. + value may be set individually for symbologies where it makes sense.
  8352. +
  8353. + ZBAR_CFG_MIN_LEN
  8354. + The minimum data length for a symbol to be valid, set to 0 to disable.
  8355. + Use with eg, I2/5 to avoid short scans. This value may be set
  8356. + individually for variable-length symbologies.
  8357. +
  8358. + ZBAR_CFG_MAX_LEN
  8359. + The maximum data length for which a symbol is valid, set to 0 to
  8360. + disable. Use with eg, I2/5 to enforce a specific range of data lengths.
  8361. + This value may be set individually for variable-length symbologies.
  8362. +
  8363. + ZBAR_CFG_UNCERTAINTY
  8364. + Number of "nearby" frames that must contain a symbol before it will be
  8365. + considered valid. This value may be set for individual symbologies.
  8366. +
  8367. + ZBAR_CFG_POSITION
  8368. + Whether to track position information.
  8369. +
  8370. + ZBAR_CFG_X_DENSITY
  8371. + The stride to use for scanning vertical columns of the image. This many
  8372. + pixel columns will be skipped between vertical scan passes. Useful for
  8373. + trading off between resolution and performance. This is a scanner
  8374. + setting (use 0 for the symbology).
  8375. +
  8376. + ZBAR_CFG_Y_DENSITY
  8377. + The stride to use for scanning horizontal columns of the image. This
  8378. + many pixel rows will be skipped between horizontal scan passes. Useful
  8379. + for trading off between resolution and performance. This is a scanner
  8380. + setting (use 0 for the symbology).
  8381. diff --git a/iphone/doc/ZBarReaderController.rst b/iphone/doc/ZBarReaderController.rst
  8382. new file mode 100644
  8383. --- /dev/null
  8384. +++ b/iphone/doc/ZBarReaderController.rst
  8385. @@ -0,0 +1,156 @@
  8386. +ZBarReaderController Class Reference
  8387. +====================================
  8388. +
  8389. +.. class:: ZBarReaderController
  8390. +
  8391. + :Inherits from: :class:`UIImagePickerController`
  8392. +
  8393. + This is the controller to use for scanning images selected by a
  8394. + :class:`UIImagePickerController` either captured manually using the camera,
  8395. + or selected from the Photo Library. For more information, see
  8396. + :doc:`picker`.
  8397. +
  8398. + It can support automatic capture from the camera only if the library is
  8399. + re-built to use private APIs (see :doc:`compat`).
  8400. +
  8401. +
  8402. +Properties
  8403. +----------
  8404. +
  8405. + .. member:: ZBarImageScanner *scanner
  8406. +
  8407. + Access to the image scanner for configuration. (read-only)
  8408. +
  8409. + .. member:: id<ZBarReaderDelegate> readerDelegate
  8410. +
  8411. + The delegate that will be notified when new barcode results are
  8412. + available.
  8413. +
  8414. + .. member:: BOOL showsZBarControls
  8415. +
  8416. + Whether to display a default control set consisting of cancel, scan and
  8417. + info buttons. Disable these if you provide your own controls using the
  8418. + :member:`cameraOverlayView`. Enabling this automatically disables the
  8419. + system controls :member:`showsCameraControls`. (Default ``YES``).
  8420. +
  8421. + .. member:: BOOL showsHelpOnFail
  8422. +
  8423. + Whether to automatically display the integrated help viewer when an
  8424. + image fails to decode. Even if this is disabled, the integrated help
  8425. + may still be presented manually using ``showHelpWithReason:``.
  8426. + (Default ``YES``)
  8427. +
  8428. + .. member:: ZBarReaderControllerCameraMode cameraMode
  8429. +
  8430. + Scanning mode to use with the camera. It is generally appropriate to
  8431. + leave this at the default.
  8432. +
  8433. + .. member:: BOOL tracksSymbols
  8434. +
  8435. + Whether to display the tracking rectangle around detected barcodes.
  8436. +
  8437. + .. member:: BOOL takesPicture
  8438. +
  8439. + Whether to take a full picture (with ``takePicture``) when a barcode
  8440. + is detected with ``ZBarReaderControllerCameraModeSampling``. The
  8441. + resulting image will be delayed from the actual decode.
  8442. +
  8443. + .. member:: BOOL enableCache
  8444. +
  8445. + This property is deprecated and should not be modified.
  8446. +
  8447. + .. member:: CGRect scanCrop
  8448. +
  8449. + Crop images before scanning. The original image will be cropped to this
  8450. + rectangle, which should be in normalized image coordinates, x-axis
  8451. + major. Defaults to the full image ``{{0, 0}, {1, 1}}``.
  8452. +
  8453. + .. member:: NSInteger maxScanDimension
  8454. +
  8455. + Scale image to scan. After cropping, the image will be scaled if
  8456. + necessary, such that neither of its dimensions exceed this value.
  8457. + Defaults to 640.
  8458. +
  8459. + .. note::
  8460. +
  8461. + The remaining properties are inherited from
  8462. + :class:`UIImagePickerController`.
  8463. +
  8464. + .. member:: UIImagePickerControllerSourceType sourceType
  8465. +
  8466. + Image source. Use to select between the camera and photo library.
  8467. +
  8468. + .. member:: BOOL showsCameraControls
  8469. +
  8470. + Whether to display the system camera controls. Overridden to ``NO``
  8471. + when :member:`showsZBarControls` is ``YES``.
  8472. +
  8473. + .. member:: UIView *cameraOverlayView
  8474. +
  8475. + A custom view to display over the camera preview. The tracking layer
  8476. + and default controls will be added to this view if they are enabled.
  8477. +
  8478. + .. member:: CGAffineTransform cameraViewTransform
  8479. +
  8480. + A transform to apply to the camera preview. Ignored by the reader.
  8481. + Possibly useful for eg, a digital zoom effect.
  8482. +
  8483. + .. member:: BOOL allowsEditing
  8484. +
  8485. + Whether to enable the system image editing dialog after a picture is
  8486. + taken. Possibly useful to improve reader results in some cases using
  8487. + manual intervention.
  8488. +
  8489. +
  8490. +Instance Methods
  8491. +----------------
  8492. +
  8493. + .. _`showHelpWithReason:`:
  8494. + .. describe:: - (void) showHelpWithReason:(NSString*)reason
  8495. +
  8496. + Display the integrated help browser. Use this with custom overlays if
  8497. + you don't also want to create your own help view. Should only be called
  8498. + when the reader is displayed. The ``reason`` argument will be passed to
  8499. + the :func:`onZBarHelp` javascript function.
  8500. +
  8501. + :reason: A string parameter passed to javascript.
  8502. +
  8503. + .. _`scanImage:`:
  8504. + .. describe:: - (id <NSFastEnumeration>) scanImage:(CGImageRef)image
  8505. +
  8506. + Scan an image for barcodes. This is a wrapper around
  8507. + ``scanner.scanImage`` that applies scanCrop and maxScanDimension. Some
  8508. + additional result filtering is also performed.
  8509. +
  8510. + :image: A :class:`CGImage` to scan.
  8511. + :Returns: The result set containing :class:`ZBarSymbol` objects.
  8512. +
  8513. +
  8514. +Constants
  8515. +---------
  8516. +
  8517. +.. type:: ZBarReaderControllerCameraMode
  8518. +
  8519. + The scanning mode to use with the camera.
  8520. +
  8521. + ZBarReaderControllerCameraModeDefault
  8522. + The standard mode provided by UIImagePickerController - the user
  8523. + manually captures an image by tapping a control. This is the default
  8524. + unless private APIs are enabled.
  8525. +
  8526. + ZBarReaderControllerCameraModeSampling
  8527. + Automatically capture by taking screenshots with
  8528. + :func:`UIGetScreenImage`. Resolution is limited to the screen
  8529. + resolution, so this mode is inappropriate for longer codes. Only
  8530. + available when private APIs are enabled, and becomes the default mode in
  8531. + that case.
  8532. +
  8533. + ZBarReaderControllerCameraModeSequence
  8534. + Experimental mode that automatically scans by "rapidly" scanning
  8535. + pictures captured with ``takePicture``. Not recommended for serious
  8536. + use.
  8537. +
  8538. +.. c:var:: NSString *ZBarReaderControllerResults
  8539. +
  8540. + The info dictionary key used to return decode results to
  8541. + ``imagePickerController:didFinishPickingMediaWithInfo:``
  8542. diff --git a/iphone/doc/ZBarReaderDelegate.rst b/iphone/doc/ZBarReaderDelegate.rst
  8543. new file mode 100644
  8544. --- /dev/null
  8545. +++ b/iphone/doc/ZBarReaderDelegate.rst
  8546. @@ -0,0 +1,70 @@
  8547. +ZBarReaderDelegate Protocol Reference
  8548. +=====================================
  8549. +
  8550. +.. class:: ZBarReaderDelegate
  8551. +
  8552. + :Inherits from: :class:`UIImagePickerControllerDelegate`
  8553. +
  8554. + This protocol must be implemented by the
  8555. + :member:`~ZBarReaderViewController::readerDelegate` provided to a
  8556. + :class:`ZBarReaderViewController` or :class:`ZBarReaderController`. It is
  8557. + used to notify the delegate of new decode results, when an image fails to
  8558. + decode, or when the user dismisses the reader with the built-in controls.
  8559. +
  8560. +
  8561. +Instance Methods
  8562. +----------------
  8563. +
  8564. + .. describe:: - (void) imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
  8565. +
  8566. + This inherited delegate method is called when a barcode is successfully
  8567. + decoded. The decoded symbols are available from the dictionary as a
  8568. + :class:`ZBarSymbolSet` using the :c:data:`ZBarReaderControllerResults`
  8569. + key. The image from which the barcodes were scanned is available using
  8570. + the :c:data:`UIImagePickerControllerOriginalImage` key. No other keys
  8571. + are guaranteed to be valid.
  8572. +
  8573. + .. note::
  8574. +
  8575. + The ``picker`` parameter will be the reader controller instance that
  8576. + read the barcodes - not necessarily a
  8577. + :class:`UIImagePickerController` instance. You should cast it to the
  8578. + correct type for anything other than basic view controller access.
  8579. +
  8580. + :picker: The reader controller that scanned the barcode(s).
  8581. + :info: A dictionary containing the image and decode results.
  8582. +
  8583. + .. describe:: - (void) imagePickerControllerDidCancel:(UIImagePickerController*)picker
  8584. +
  8585. + Called when the user taps the "Cancel" button provided by the built-in
  8586. + controls (when :member:`showsZBarControls`\ ``=YES``). The default
  8587. + implementation dismisses the reader. If this method is implemented, it
  8588. + should do the same.
  8589. +
  8590. + .. note::
  8591. +
  8592. + The ``picker`` parameter will be the reader controller instance that
  8593. + read the barcodes - not necessarily a
  8594. + :class:`UIImagePickerController` instance. You should cast it to the
  8595. + correct type for anything other than basic view controller access.
  8596. +
  8597. + :picker: The reader controller that scanned the barcode(s).
  8598. +
  8599. + .. describe:: - (void) readerControllerDidFailToRead:(ZBarReaderController*)reader withRetry:(BOOL)retry
  8600. +
  8601. + Called when an image, manually captured or selected from the photo
  8602. + library, is scanned and no barcodes were detected.
  8603. +
  8604. + If the ``retry`` parameter is ``NO``, the controller must be dismissed
  8605. + before this method returns. Otherwise, another scan may be attempted
  8606. + without re-presenting the controller.
  8607. +
  8608. + If the :member:`~ZBarReaderController::showsHelpOnFail` is ``YES`` *and*
  8609. + ``retry`` is ``YES``, the integrated help viewer will already be
  8610. + presenting.
  8611. +
  8612. + If this method is not implemented, the controller will be dismissed iff
  8613. + ``retry`` is ``NO``.
  8614. +
  8615. + :reader: The :class:`ZBarReaderController` that scanned the barcode(s).
  8616. + :retry: Whether another scan may be attempted.
  8617. diff --git a/iphone/doc/ZBarReaderView.rst b/iphone/doc/ZBarReaderView.rst
  8618. new file mode 100644
  8619. --- /dev/null
  8620. +++ b/iphone/doc/ZBarReaderView.rst
  8621. @@ -0,0 +1,104 @@
  8622. +ZBarReaderView Class Reference
  8623. +==============================
  8624. +
  8625. +.. class:: ZBarReaderView
  8626. +
  8627. + :Inherits from: :class:`UIView`
  8628. +
  8629. + This is a barcode reader encapsulted in a UIView. It manages an
  8630. + :class:`AVCaptureSession` with a camera device and a
  8631. + :class:`ZBarCaptureReader`, presents the video preview and optionally
  8632. + tracks detected barcode symbols. A delegate will usually be assigned for
  8633. + notification of new decode results.
  8634. +
  8635. +
  8636. +Properties
  8637. +----------
  8638. +
  8639. + .. member:: id<ZBarReaderViewDelegate> readerDelegate
  8640. +
  8641. + The delegate that will be notified of new decode results.
  8642. +
  8643. + .. member:: ZBarImageScanner *scanner
  8644. +
  8645. + Access to the image scanner is provided for configuration. (read-only)
  8646. +
  8647. + .. member:: BOOL tracksSymbols
  8648. +
  8649. + Whether to display the tracking annotation (default ``YES``).
  8650. +
  8651. + .. member:: BOOL allowsPinchZoom
  8652. +
  8653. + Enable pinch gesture recognition for manually zooming the preview/decode
  8654. + (default ``YES``).
  8655. +
  8656. + .. member:: NSInteger torchMode
  8657. +
  8658. + An :type:`AVCaptureTorchMode` value that will be applied if/when
  8659. + appropriate. (default Auto)
  8660. +
  8661. + .. member:: BOOL showsFPS
  8662. +
  8663. + Overlay the decode frame rate on the preview to help with performance
  8664. + optimization. This is for *debug only* and should not be set for
  8665. + production. (default ``NO``)
  8666. +
  8667. + .. member:: CGFloat zoom
  8668. +
  8669. + Zoom scale factor applied to the video preview *and* scanCrop. This
  8670. + value is also updated by the pinch-zoom gesture. Valid values are in
  8671. + the range [1,2]. (default 1.25)
  8672. +
  8673. + .. member:: CGRect scanCrop
  8674. +
  8675. + The region of the video image that will be scanned, in normalized image
  8676. + coordinates. Note that the video image is in landscape mode (default
  8677. + {{0, 0}, {1, 1}})
  8678. +
  8679. + .. member:: CGAffineTransform previewTransform
  8680. +
  8681. + Additional transform that will be applied to the video preview. Note
  8682. + that this transform is *not* applied to scanCrop.
  8683. +
  8684. + .. member:: AVCaptureDevice *device
  8685. +
  8686. + The capture device may be manipulated or replaced.
  8687. +
  8688. + .. member:: AVCaptureSession *session
  8689. +
  8690. + Direct access to the capture session. Warranty void if opened.
  8691. + (read-only)
  8692. +
  8693. + .. member:: ZBarCaptureReader *captureReader
  8694. +
  8695. + Direct access to the capture reader. Warranty void if opened.
  8696. + (read-only)
  8697. +
  8698. + .. member:: BOOL enableCache
  8699. +
  8700. + :Deprecated:
  8701. +
  8702. + Whether to use the inter-frame consistency cache. This should always be
  8703. + set to ``YES``.
  8704. +
  8705. +
  8706. +Instance Methods
  8707. +----------------
  8708. +
  8709. + .. describe:: - (id) initWithImageScanner:(ZBarImageScanner*)imageScanner
  8710. +
  8711. + :imageScanner: A pre-configured :class:`ZBarImageScanner` to use for scanning
  8712. + :Returns: The initialized :class:`ZBarReaderView`
  8713. +
  8714. + .. describe:: - (void) start
  8715. +
  8716. + Begin/resume scanning after a call to ``stop``.
  8717. +
  8718. + .. describe:: - (void) stop
  8719. +
  8720. + Stop scanning and pause the video feed.
  8721. +
  8722. + .. describe:: - (void) flushCache
  8723. +
  8724. + Flush the inter-frame consistency cache. Any barcodes in the frame will
  8725. + be re-recognized in subsequent frames.
  8726. diff --git a/iphone/doc/ZBarReaderViewController.rst b/iphone/doc/ZBarReaderViewController.rst
  8727. new file mode 100644
  8728. --- /dev/null
  8729. +++ b/iphone/doc/ZBarReaderViewController.rst
  8730. @@ -0,0 +1,128 @@
  8731. +ZBarReaderViewController Class Reference
  8732. +========================================
  8733. +
  8734. +.. class:: ZBarReaderViewController
  8735. +
  8736. + :Inherits from: :class:`UIViewController`
  8737. +
  8738. + This is the controller to use for live scanning from the camera feed with
  8739. + automatic capture. For scanning from image files or with manual capture,
  8740. + see :class:`ZBarReaderController`.
  8741. +
  8742. +
  8743. +Properties
  8744. +----------
  8745. +
  8746. + .. member:: ZBarImageScanner *scanner
  8747. +
  8748. + Access to the image scanner for configuration. (read-only)
  8749. +
  8750. + .. member:: id <ZBarReaderDelegate> readerDelegate
  8751. +
  8752. + The delegate that will be notified when new barcode results are
  8753. + available.
  8754. +
  8755. + .. member:: BOOL showsZBarControls
  8756. +
  8757. + Whether to display a default control set consisting of cancel, scan and
  8758. + info buttons. Disable these if you provide your own controls using the
  8759. + :member:`cameraOverlayView`. (Default ``YES``).
  8760. +
  8761. + .. member:: BOOL tracksSymbols
  8762. +
  8763. + Whether to display the tracking rectangle around detected barcodes.
  8764. +
  8765. + .. member:: CGRect scanCrop
  8766. +
  8767. + Crop images before scanning. The original image will be cropped to this
  8768. + rectangle, which should be in normalized image coordinates (NB the
  8769. + camera image x-axis is *vertical* on the screen). Defaults to the full
  8770. + image ``{{0, 0}, {1, 1}}``.
  8771. +
  8772. + .. member:: UIView *cameraOverlayView
  8773. +
  8774. + A custom view to display over the camera preview.
  8775. +
  8776. + .. member:: CGAffineTransform cameraViewTransform
  8777. +
  8778. + A transform to apply to the camera preview. Ignored by the reader.
  8779. +
  8780. + .. member:: ZBarReaderView *readerView
  8781. +
  8782. + View that presents the camera preview and performs the scanning. This
  8783. + view has other properties you may use to control the appearance and
  8784. + behavior of the reader.
  8785. +
  8786. + Note that this view may be released when it is not displayed (eg, under
  8787. + low memory conditions). You should apply any configuration just before
  8788. + you present the reader.
  8789. +
  8790. + .. member:: BOOL enableCache
  8791. +
  8792. + This property is deprecated and should not be modified.
  8793. +
  8794. + .. warning::
  8795. +
  8796. + The remaining properties are deprecated, they are only present for
  8797. + backward compatibility with :class:`ZBarReaderController` and will raise
  8798. + an exception if inappropriate/unsupported values are set.
  8799. +
  8800. + .. member:: UIImagePickerControllerSourceType sourceType
  8801. +
  8802. + Raises an exception if anything other than
  8803. + ``UIImagePickerControllerSourceTypeCamera`` is set. If you want to scan
  8804. + images, use a :class:`ZBarReaderController` instead of this class.
  8805. +
  8806. + .. member:: BOOL allowsEditing
  8807. +
  8808. + Raises an exception if anything other than ``NO`` is set.
  8809. +
  8810. + .. member:: BOOL showsCameraControls
  8811. +
  8812. + Raises an exception if anything other than ``NO`` is set. Use
  8813. + :member:`showsZBarControls` to disable the buit-in overlay.
  8814. +
  8815. + .. member:: BOOL showsHelpOnFail
  8816. +
  8817. + Any value set to this property is ignored. It is only useful for
  8818. + scanning images, for which you should use :class:`ZBarReaderController`.
  8819. +
  8820. + .. member:: ZBarReaderControllerCameraMode cameraMode
  8821. +
  8822. + This reader only supports scanning from the camera feed. If you want to
  8823. + scan manually captured images, use a :class:`ZBarReaderController`
  8824. + instead of this class.
  8825. +
  8826. + .. member:: BOOL takesPicture
  8827. +
  8828. + Raises an exception if anything other than ``NO`` is set. This
  8829. + controller automatically returns the scanned camera frame and does not
  8830. + support capturing a separate image.
  8831. +
  8832. + .. member:: NSInteger maxScanDimension
  8833. +
  8834. + Any value set to this property is ignored. It is only useful for
  8835. + scanning images, for which you should use :class:`ZBarReaderController`.
  8836. +
  8837. +
  8838. +Class Methods
  8839. +-------------
  8840. +
  8841. + .. describe:: + (BOOL) isSourceTypeAvailable:(UIImagePickerControllerSourceType)source
  8842. +
  8843. + Returns ``YES`` only if ``source`` is ``Camera`` and the
  8844. + :class:`UImagePickerController` method of the same name also returns
  8845. + ``YES``.
  8846. +
  8847. +Instance Methods
  8848. +----------------
  8849. +
  8850. + .. _`showHelpWithReason:`:
  8851. + .. describe:: - (void) showHelpWithReason:(NSString*)reason
  8852. +
  8853. + Display the integrated help browser. Use this with custom overlays if
  8854. + you don't also want to create your own help view. Should only be called
  8855. + when the reader is displayed. The ``reason`` argument will be passed to
  8856. + the :func:`onZBarHelp` javascript function.
  8857. +
  8858. + :reason: A string parameter passed to javascript.
  8859. diff --git a/iphone/doc/ZBarReaderViewDelegate.rst b/iphone/doc/ZBarReaderViewDelegate.rst
  8860. new file mode 100644
  8861. --- /dev/null
  8862. +++ b/iphone/doc/ZBarReaderViewDelegate.rst
  8863. @@ -0,0 +1,26 @@
  8864. +ZBarReaderViewDelegate Protocol Reference
  8865. +=========================================
  8866. +
  8867. +.. class:: ZBarReaderViewDelegate
  8868. +
  8869. + :Inherits from: :class:`NSObject`
  8870. +
  8871. + This protocol, which must be implemented by the `readerDelegate` provided
  8872. + to a :class:`ZBarReaderView`, is used to notify the delegate of new decode
  8873. + results.
  8874. +
  8875. +
  8876. +Instance Methods
  8877. +----------------
  8878. +
  8879. + .. describe:: - (void) readerView:(ZBarReaderView*)readerView didReadSymbols:(ZBarSymbolSet*)symbols fromImage:(UIImage*)image
  8880. +
  8881. + Called to notify the delegate of new decode results.
  8882. +
  8883. + Note that the referenced image is a proxy for a video buffer that is
  8884. + asynchronously being converted to a :class:`UIImage`, attempting to
  8885. + access the data will block until the conversion is complete.
  8886. +
  8887. + :readerView: :class:`ZBarReaderView` that scanned the barcode(s).
  8888. + :symbols: :class:`ZBarSymbolSet` containing the decode results.
  8889. + :image: :class:`UIImage` from which the barcode(s) were scanned.
  8890. diff --git a/iphone/doc/ZBarSymbol.rst b/iphone/doc/ZBarSymbol.rst
  8891. new file mode 100644
  8892. --- /dev/null
  8893. +++ b/iphone/doc/ZBarSymbol.rst
  8894. @@ -0,0 +1,166 @@
  8895. +ZBarSymbol Class Reference
  8896. +==========================
  8897. +
  8898. +.. class:: ZBarSymbol
  8899. +
  8900. + :Inherits from: :class:`NSObject`
  8901. +
  8902. + A symbol wraps all of the information the library has about a decoded
  8903. + barcode. Use the available properties to retrieve the barcode data, the
  8904. + symbology (type of barcode), location and more.
  8905. +
  8906. + This class is a simple wrapper around a :type:`zbar_symbol_t` C object
  8907. + (q.v.)
  8908. +
  8909. +
  8910. +Properties
  8911. +----------
  8912. +
  8913. + .. member:: zbar_symbol_type_t type
  8914. +
  8915. + The type of symbology that was decoded. (read-only)
  8916. +
  8917. + .. member:: NSString *typeName
  8918. +
  8919. + The canonical name used by the library to represent the symbology.
  8920. + (read-only)
  8921. +
  8922. + .. member:: NSUInteger configMask
  8923. +
  8924. + Bitmask of symbology config settings used during decode.
  8925. +
  8926. + .. member:: NSUInteger modifierMask
  8927. +
  8928. + Bitmask of symbology characteristics detected during decode.
  8929. +
  8930. + .. member:: NSString *data
  8931. +
  8932. + The raw decoded barcode data. (read-only)
  8933. +
  8934. + .. member:: int quality
  8935. +
  8936. + A relative metric indicating rough confidence in the decoded value.
  8937. + Larger values are better than smaller values. (read-only)
  8938. +
  8939. + .. member:: zbar_orientation_t orientation
  8940. +
  8941. + The general, axis-aligned orientation of the symbol, or
  8942. + ZBAR_ORIENT_UNKNOWN if unknown. (read-only)
  8943. +
  8944. + .. member:: ZBarSymbolSet *components
  8945. +
  8946. + The components of a composite symbol. (read-only)
  8947. +
  8948. + .. member:: const zbar_symbol_t *zbarSymbol
  8949. +
  8950. + Retrieve the underlying C object instance. (read-only)
  8951. +
  8952. + .. member:: CGRect bounds
  8953. +
  8954. + Calculate a rough bounding box for the symbol. (read-only)
  8955. +
  8956. + .. note::
  8957. +
  8958. + Coordinates are relative to the image *data*, which may not match a
  8959. + displayed UIImage. Make sure to account for the UIImage orientation
  8960. + when using these values.
  8961. +
  8962. +
  8963. +Class Methods
  8964. +-------------
  8965. +
  8966. + .. _`nameForType:`:
  8967. + .. describe:: + (NSString*) nameForType:(zbar_symbol_type_t)type
  8968. +
  8969. + Retrieve the canonical name for a symbology used by the library, given
  8970. + its enumerated value.
  8971. +
  8972. + :type: The :type:`zbar_symbol_type_t` enumerated symbology value.
  8973. + :Returns: A short string name for the symbology.
  8974. +
  8975. +
  8976. +Instance Methods
  8977. +----------------
  8978. +
  8979. + .. _`initWithSymbol:`:
  8980. + .. describe:: - (id) initWithSymbol:(const zbar_symbol_t*)symbol
  8981. +
  8982. + Initialize a symbol wrapper, given the C object to wrap.
  8983. +
  8984. + :symbol: The C object to wrap.
  8985. + :Returns: The initialized symbol, or nil if an error occurred.
  8986. +
  8987. +
  8988. +Constants
  8989. +---------
  8990. +
  8991. +.. type:: zbar_symbol_type_t
  8992. +
  8993. + Symbology identifiers.
  8994. +
  8995. + ZBAR_NONE
  8996. + No symbol was decoded.
  8997. +
  8998. + ZBAR_PARTIAL
  8999. + Intermediate status.
  9000. +
  9001. + ZBAR_EAN8
  9002. + EAN-8
  9003. +
  9004. + ZBAR_UPCE
  9005. + UPC-E
  9006. +
  9007. + ZBAR_ISBN10
  9008. + ISBN-10, converted from EAN-13
  9009. +
  9010. + ZBAR_UPCA
  9011. + UPC-A
  9012. +
  9013. + ZBAR_EAN13
  9014. + EAN-13
  9015. +
  9016. + ZBAR_ISBN13
  9017. + ISBN-13, converted from EAN-13
  9018. +
  9019. + ZBAR_I25
  9020. + Interleaved 2 of 5
  9021. +
  9022. + ZBAR_DATABAR
  9023. + GS1 DataBar (RSS)
  9024. +
  9025. + ZBAR_DATABAR_EXP
  9026. + GS1 DataBar Expanded
  9027. +
  9028. + ZBAR_CODE39
  9029. + Code 39 (3 of 9)
  9030. +
  9031. + ZBAR_QRCODE
  9032. + QR Code
  9033. +
  9034. + ZBAR_CODE128
  9035. + Code 128
  9036. +
  9037. +.. type:: zbar_orientation_t
  9038. +
  9039. + The coarse orientation of a symbol.
  9040. +
  9041. + .. note::
  9042. +
  9043. + Orientation is relative to the image *data*, which may not match a
  9044. + displayed UIImage. Make sure to account for the UIImage orientation
  9045. + when using these values.
  9046. +
  9047. + ZBAR_ORIENT_UNKNOWN
  9048. + Unable to determine orientation.
  9049. +
  9050. + ZBAR_ORIENT_UP
  9051. + Upright, read left to right
  9052. +
  9053. + ZBAR_ORIENT_RIGHT
  9054. + Sideways, read top to bottom
  9055. +
  9056. + ZBAR_ORIENT_DOWN
  9057. + Upside-down, read right to left
  9058. +
  9059. + ZBAR_ORIENT_LEFT
  9060. + Sideways, read bottom to top
  9061. diff --git a/iphone/doc/ZBarSymbolSet.rst b/iphone/doc/ZBarSymbolSet.rst
  9062. new file mode 100644
  9063. --- /dev/null
  9064. +++ b/iphone/doc/ZBarSymbolSet.rst
  9065. @@ -0,0 +1,43 @@
  9066. +ZBarSymbolSet Class Reference
  9067. +=============================
  9068. +
  9069. +.. class:: ZBarSymbolSet
  9070. +
  9071. + :Inherits from: :class:`NSObject`
  9072. + :Conforms to: :class:`NSFastEnumeration`
  9073. +
  9074. + A symbol set is a simple container for the symbols scanned from an image.
  9075. + It supports :class:`NSFastEnumeration`, and not much else... Use it to
  9076. + iterate through the :class:`ZBarSymbol` objects in a decode result set::
  9077. +
  9078. + ZBarSymbolSet *symbols = image.symbols;
  9079. + for(ZBarSymbol *symbol in symbols) {
  9080. + // process result
  9081. + }
  9082. +
  9083. + This class is a simple wrapper around a :type:`zbar_symbol_set_t` C object
  9084. + (q.v.)
  9085. +
  9086. +
  9087. +Properties
  9088. +----------
  9089. +
  9090. + .. member:: int count
  9091. +
  9092. + The number of symbols in the set. (read-only)
  9093. +
  9094. + .. member:: const zbar_symbol_set_t *zbarSymbolSet
  9095. +
  9096. + Retrieve the underlying C object instance. (read-only)
  9097. +
  9098. +
  9099. +Instance Methods
  9100. +----------------
  9101. +
  9102. + .. _`initWithSymbolSet:`:
  9103. + .. describe:: - (id) initWithSymbolSet:(const zbar_symbol_set_t*)set
  9104. +
  9105. + Initialize a symbol set wrapper, given the C object to wrap.
  9106. +
  9107. + :set: The C object to wrap.
  9108. + :Returns: The initialized symbol set, or nil if an error occurred.
  9109. diff --git a/iphone/doc/apiref.rst b/iphone/doc/apiref.rst
  9110. new file mode 100644
  9111. --- /dev/null
  9112. +++ b/iphone/doc/apiref.rst
  9113. @@ -0,0 +1,16 @@
  9114. +*******************
  9115. + API Reference
  9116. +*******************
  9117. +
  9118. +.. toctree::
  9119. + :maxdepth: 1
  9120. +
  9121. + ZBarImage
  9122. + ZBarImageScanner
  9123. + ZBarReaderController
  9124. + ZBarReaderDelegate
  9125. + ZBarReaderView
  9126. + ZBarReaderViewController
  9127. + ZBarReaderViewDelegate
  9128. + ZBarSymbol
  9129. + ZBarSymbolSet
  9130. diff --git a/iphone/doc/camera.rst b/iphone/doc/camera.rst
  9131. new file mode 100644
  9132. --- /dev/null
  9133. +++ b/iphone/doc/camera.rst
  9134. @@ -0,0 +1,129 @@
  9135. +Scanning From the Camera Feed
  9136. +=============================
  9137. +
  9138. +Many iPhone developers want their application to support automatic recognition
  9139. +of barcodes from the camera feed in real-time. ZBar makes this easy!
  9140. +
  9141. +There are three levels that you may choose to integrate at, from least complex
  9142. +(recommended) to most complex these are:
  9143. +
  9144. +* Use the fully integrated view controller - this is very easy to implement
  9145. + and is the recommended approach.
  9146. +* Use the reader view with your own controller - this is not recommended, it
  9147. + does not give you much more flexibility than using the full controller.
  9148. +* Use the capture component with your own AVCapture session - this is not
  9149. + supported and only provided for advanced developers with special needs who
  9150. + are already familiar with AVCapture.
  9151. +
  9152. +
  9153. +Using a ZBarReaderViewController
  9154. +--------------------------------
  9155. +
  9156. +This is the fastest, easiest and recommend way to get the barcode reader into
  9157. +your application. It is also the only way to support :doc:`automatic fallback
  9158. +for iOS 3.1 <compat>`. The procedure is the same as using a
  9159. +UIImagePickerController to take a picture with the camera, so it will help if
  9160. +you are familiar with that. Basically you:
  9161. +
  9162. +1. Create the reader.
  9163. +
  9164. + This is as simple as creating a new :class:`ZBarReaderViewController`::
  9165. +
  9166. + ZBarReaderViewController *reader = [ZBarReaderViewController new];
  9167. +
  9168. +2. Setup a delegate to receive the results.
  9169. +
  9170. + The delegate should implement the :class:`ZBarReaderDelegate` protocol,
  9171. + which inherits from :class:`UIImagePickerControllerDelegate`::
  9172. +
  9173. + reader.readerDelegate = self;
  9174. +
  9175. +3. Configure the reader.
  9176. +
  9177. + Aside from the properties of the reader itself, you can configure the
  9178. + decoder via the :member:`~ZBarReaderViewController::scanner` property and
  9179. + further customize the view via the
  9180. + :member:`~ZBarReaderViewController::readerView` property::
  9181. +
  9182. + [reader.scanner setSymbology: ZBAR_QRCODE
  9183. + config: ZBAR_CFG_ENABLE
  9184. + to: 0];
  9185. + reader.readerView.zoom = 1.0;
  9186. +
  9187. + See :doc:`custom` and :doc:`optimizing` for more details.
  9188. +
  9189. +4. Present the reader to the user.
  9190. +
  9191. + Typically the controller is presented modally, although the new controller
  9192. + does not require it (note that modal presentation is the only option if you
  9193. + want to support :doc:`iOS 3.1 fallback <compat>`)::
  9194. +
  9195. + [self presentModalViewController: reader
  9196. + animated: YES];
  9197. +
  9198. +5. Process the results.
  9199. +
  9200. + The controller will call the
  9201. + :member:`imagePickerController:didFinishPickingMediaWithInfo:` method of
  9202. + your delegate every time new results become available. The barcode data
  9203. + can be obtained using the :c:data:`ZBarReaderControllerResults` key of the
  9204. + info dictionary. This key will return "something enumerable"; keep in mind
  9205. + that there may be multiple results. You may also retrieve the
  9206. + corresponding image with :c:data:`UIImagePickerControllerOriginalImage` as
  9207. + usual::
  9208. +
  9209. + - (void) imagePickerController: (UIImagePickerController*) reader
  9210. + didFinishPickingMediaWithInfo: (NSDictionary*) info
  9211. + {
  9212. + id<NSFastEnumeration> results =
  9213. + [info objectForKey: ZBarReaderControllerResults];
  9214. + UIImage *image =
  9215. + [info objectForKey: UIImagePickerControllerOriginalImage];
  9216. + ...
  9217. +
  9218. + The ``reader`` parameter will be the actual type of the reader (not
  9219. + necessarily a :class:`UIImagePickerController`).
  9220. +
  9221. + .. note::
  9222. +
  9223. + The delegate method should queue the interface response and return as
  9224. + soon as possible; any processing of the results should be deferred until
  9225. + later, otherwise the user will experience unacceptable latency between
  9226. + the actual scan completion and the visual interface feedback.
  9227. +
  9228. +6. Dismiss the reader (or not).
  9229. +
  9230. + Once you have the results you may dismiss the reader::
  9231. +
  9232. + [reader dismissModalViewControllerAnimated: YES];
  9233. +
  9234. + .. warning::
  9235. +
  9236. + It is very important to dismiss from the *reader* (not the presenting
  9237. + controller) to avoid corrupting the interface.
  9238. +
  9239. + Alternatively, you may choose to continue scanning and provide visual
  9240. + feedback another way (eg, maybe by updating your custom overlay with the
  9241. + results). The "continuous" mode of the readertest example does this.
  9242. +
  9243. +
  9244. +Using a ZBarReaderView
  9245. +----------------------
  9246. +
  9247. +:class:`ZBarReaderViewController` is a relatively thin wrapper around a
  9248. +:class:`ZBarReaderView`; it is possible to use the view directly. You will
  9249. +lose the automatic fallback for iOS 3.1 and some of the simulator hooks, so
  9250. +this approach is not currently recommended (or well tested).
  9251. +
  9252. +
  9253. +Using the ZBarCaptureReader
  9254. +---------------------------
  9255. +
  9256. +If you have special requirements for the capture session or just want to use
  9257. +your own preview, you can add your own :class:`ZBarCaptureReader` to your
  9258. +session. You must have a solid understanding of the AVCapture infrastructure
  9259. +if you plan to use this approach.
  9260. +
  9261. +.. admonition:: TBD
  9262. +
  9263. + sorry, you're on your own here - UTSL :)
  9264. diff --git a/iphone/doc/compat.rst b/iphone/doc/compat.rst
  9265. new file mode 100644
  9266. --- /dev/null
  9267. +++ b/iphone/doc/compat.rst
  9268. @@ -0,0 +1,183 @@
  9269. +Backward Compatibility
  9270. +======================
  9271. +
  9272. +Generally speaking, we take great care to ensure that each release of the
  9273. +library is backward compatible with previous versions - upgrading the library
  9274. +should not require any changes to your code and will continue to provide
  9275. +equivalent functionality. The notable exception to this is the iOS 4 upgrade
  9276. +and associated "deprecation" of the former automatic capture method by our
  9277. +vendor.
  9278. +
  9279. +
  9280. +The Private API
  9281. +---------------
  9282. +
  9283. +The API that we use for automatic capture with iOS 3.x (namely
  9284. +:func:`UIGetScreenImage`) has an interesting history. It has changed status
  9285. +several times, starting with "Private, unless we like you" moving to
  9286. +"reluctantly Public but undocumeted" by popular demand and reverting to
  9287. +"strictly Private" as of iOS 4. The current story: if you want to distribute
  9288. +on the App Store, you had better not be using it - IOW, no automatic capture
  9289. +for you with iOS 3.x.
  9290. +
  9291. +Since App Store distribution is the most common use for the library, the
  9292. +default configuration, and thus the binary SDK, does *not* use any private
  9293. +APIs.
  9294. +
  9295. +Users targeting ad-hoc or enterprise distribution may not care about the
  9296. +status of the API and may prefer to continue supporting automatic capture for
  9297. +iOS 3.x. To do this you will need to rebuild the library with the following
  9298. +define set for all configurations:
  9299. +
  9300. +.. sourcecode:: sh
  9301. +
  9302. + USE_PRIVATE_APIS=1
  9303. +
  9304. +For reference, you can check whether your app refers to the offensive function
  9305. +with this command:
  9306. +
  9307. +.. sourcecode:: sh
  9308. +
  9309. + $ otool -vI MyApp.app/MyApp | grep UIGetScreenImage
  9310. +
  9311. +If there is any output, then the executable includes the private API and is
  9312. +bound to be rejected if submitted for review. Otherwise it is "clean" as far
  9313. +as this library is concerned.
  9314. +
  9315. +
  9316. +Upgrading to iOS 4
  9317. +------------------
  9318. +
  9319. +If you were using the reader before iOS 4 was introduced, you will want to
  9320. +upgrade to the new reader controller. The performance has improved quite a
  9321. +bit, and you can continue to support automatic capture on the App Store.
  9322. +
  9323. +.. note::
  9324. +
  9325. + This discussion only applies to automatic capture from the camera. If you
  9326. + are only scanning image files, or prefer/need to use manual capture, you
  9327. + should not change anything.
  9328. +
  9329. +Basically just replace your old :class:`ZBarReaderController` with a new
  9330. +:class:`ZBarReaderViewController` and you're done! See the reference and the
  9331. +next section for compatibility between the two classes.
  9332. +
  9333. +Also see the :doc:`install` instructions for details about upgrading the
  9334. +header references to use the SDK.
  9335. +
  9336. +
  9337. +Supporting iOS 3.x
  9338. +------------------
  9339. +
  9340. +The new :class:`ZBarReaderViewController` is intentionally designed to be
  9341. +compatible with the old :class:`ZBarReaderController` in most aspects that
  9342. +relate to reading barcodes. When a :class:`ZBarReaderViewController` is
  9343. +initialized under iOS 3.x, it will *replace* itself with a
  9344. +:class:`ZBarReaderController`. You can leverage the compatibility of these
  9345. +controllers to continue supporting iOS 3.x.
  9346. +
  9347. +The following properties and methods should be equivalent across
  9348. +implementations. You may use them without regard for the actual instance
  9349. +type.
  9350. +
  9351. +======================================================== ====
  9352. +Equivalent Members
  9353. +======================================================== ====
  9354. +:member:`~ZBarReaderViewController::cameraOverlayView`
  9355. +:member:`~ZBarReaderViewController::cameraViewTransform`
  9356. +:member:`~ZBarReaderViewController::enableCache`
  9357. +:member:`~ZBarReaderViewController::scanner`
  9358. +:member:`~ZBarReaderViewController::readerDelegate`
  9359. +:member:`~ZBarReaderViewController::scanCrop`
  9360. +``showHelpWithReason:``
  9361. +:member:`~ZBarReaderViewController::showsZBarControls`
  9362. +:member:`~ZBarReaderViewController::tracksSymbols`
  9363. +======================================================== ====
  9364. +
  9365. +Some properties are available with :class:`ZBarReaderViewController` only for
  9366. +backward compatibility. If these are configured, they must be set as
  9367. +indicated; attempts to set another value will raise an exception.
  9368. +
  9369. +==================================================== =======================================
  9370. +:class:`ZBarReaderController` Property :class:`ZBarReaderViewController` Value
  9371. +==================================================== =======================================
  9372. +:member:`~ZBarReaderController::allowsEditing` ``NO``
  9373. +:member:`~ZBarReaderController::cameraMode` ``Sampling``
  9374. +:member:`~ZBarReaderController::maxScanDimension` (ignored)
  9375. +:member:`~ZBarReaderController::showsCameraControls` ``NO``
  9376. +:member:`~ZBarReaderController::showsHelpOnFail` (ignored)
  9377. +:member:`~ZBarReaderController::sourceType` ``Camera``
  9378. +:member:`~ZBarReaderController::takesPicture` ``NO``
  9379. +==================================================== =======================================
  9380. +
  9381. +Also, the ``isSourceTypeAvailable:`` class method of
  9382. +:class:`ZBarReaderViewController` will return ``YES`` only for the ``Camera``
  9383. +source.
  9384. +
  9385. +All other members of :class:`ZBarReaderController`, including those inherited
  9386. +from :class:`UIImagePickerController` are not supported by
  9387. +:class:`ZBarReaderViewController`. This includes ``takePicture`` and
  9388. +``scanImage:``, among others.
  9389. +
  9390. +Remaining members of :class:`ZBarReaderViewController`: are only available
  9391. +with the new implementation. At the moment this is only
  9392. +:member:`~ZBarReaderViewController::readerView`, but any new properties or
  9393. +methods not listed here will also fall in this category.
  9394. +
  9395. +To access settings that may not be available in a potential fallback
  9396. +environment, you must verify that they exist and may be set as desired - eg,
  9397. +by testing the specific reader subtype.
  9398. +
  9399. +Weak Linking
  9400. +^^^^^^^^^^^^
  9401. +
  9402. +When leveraging fallbacks to iOS 3.x, it is important that features introduced
  9403. +in iOS 4 are referenced using *weak* links. You must configure your project
  9404. +correctly to support this:
  9405. +
  9406. +* Make sure the iOS 4 frameworks are set to *Weak*. Specifically, these are
  9407. + AVCapture, CoreMedia and CoreVideo.
  9408. +
  9409. +* Build with the latest SDK - do *not* use the "Base SDK" setting to target
  9410. + earlier devices.
  9411. +
  9412. +* Set the correct iOS 3.x version for the "iPhone OS Deployment Target"
  9413. + build setting.
  9414. +
  9415. +
  9416. +Example: Fallback to Manual Capture
  9417. +-----------------------------------
  9418. +
  9419. +This code example will configure the reader for automatic capture from the
  9420. +camera for iOS 4 and fall back to manual or automatic capture for iOS 3.x,
  9421. +depending on whether the library was compiled to use private APIs::
  9422. +
  9423. + if(![ZBarReaderController isSourceTypeAvailable:
  9424. + UIImagePickerControllerSoureTypeCamera]) {
  9425. + // camera unavailable: display warning and abort
  9426. + // or resort to keypad entry, etc...
  9427. + return;
  9428. + }
  9429. +
  9430. + ZBarReaderViewController *reader = [ZBarReaderViewController new];
  9431. + // reader will be a ZBarReaderController for iOS 3.x
  9432. + // or a ZBarReaderViewController for iOS 4
  9433. +
  9434. + reader.readerDelegate = self;
  9435. + reader.sourceType = UIImagePickerControllerSoureTypeCamera;
  9436. + reader.showsZBarControls = YES;
  9437. +
  9438. + if(reader.cameraMode == ZBarReaderControllerCameraModeSampling) {
  9439. + // additional automatic capture configuration here
  9440. + }
  9441. + else {
  9442. + // additional manual capture configuration here
  9443. + }
  9444. +
  9445. + [self presentModalViewController: reader
  9446. + animated: YES];
  9447. +
  9448. +If you are using a custom control set
  9449. +(:member:`~ZBarReaderViewController::showsZBarControls`\ ``=NO``), you will
  9450. +want to provide a button attached to ``takePicture`` for the manual capture
  9451. +case. The built-in controls do this automatically.
  9452. diff --git a/iphone/doc/conf.py b/iphone/doc/conf.py
  9453. new file mode 100644
  9454. --- /dev/null
  9455. +++ b/iphone/doc/conf.py
  9456. @@ -0,0 +1,77 @@
  9457. +import sys, os
  9458. +from plistlib import readPlist
  9459. +
  9460. +# General configuration
  9461. +
  9462. +extensions = []
  9463. +templates_path = ['ext']
  9464. +source_suffix = '.rst'
  9465. +master_doc = 'index'
  9466. +exclude_patterns = ['.#*']
  9467. +
  9468. +project = u'ZBar iPhone SDK'
  9469. +copyright = u'2010, Jeff Brown et al'
  9470. +
  9471. +today_fmt = '%Y-%m-%d'
  9472. +info = readPlist('../res/ZBarSDK-Info.plist')
  9473. +version = 'X.Y'
  9474. +if info:
  9475. + version = info['CFBundleVersion']
  9476. +release = version
  9477. +
  9478. +#add_module_names = False
  9479. +
  9480. +pygments_style = 'sphinx'
  9481. +highlight_language = 'objc'
  9482. +primary_domain = 'cpp'
  9483. +
  9484. +# Options for HTML output
  9485. +
  9486. +html_theme = 'default'
  9487. +html_theme_options = {
  9488. + 'bgcolor': 'white',
  9489. + 'textcolor': 'black',
  9490. + 'linkcolor': '#247',
  9491. + 'headbgcolor': '#edeff0',
  9492. + 'headtextcolor': '#247',
  9493. + 'headlinkcolor': '#c11',
  9494. + 'sidebarbgcolor': '#247',
  9495. + 'sidebartextcolor': 'white',
  9496. + 'sidebarlinkcolor': '#cde',
  9497. + 'relbarbgcolor': '#247',
  9498. + 'relbartextcolor': '#ccc',
  9499. + 'relbarlinkcolor': 'white',
  9500. + 'footerbgcolor': 'white',
  9501. + 'footertextcolor': 'black',
  9502. + 'codebgcolor': '#dfe',
  9503. + 'codetextcolor': 'black',
  9504. +}
  9505. +
  9506. +html_short_title = 'ZBarSDK ' + version
  9507. +html_title = 'ZBar iPhone SDK Documentation'
  9508. +html_static_path = ['static']
  9509. +html_favicon = '../../zbar.ico'
  9510. +html_style = 'style.css'
  9511. +html_use_modindex = False
  9512. +html_use_index = False
  9513. +html_copy_source = False
  9514. +html_show_sourcelink = False
  9515. +htmlhelp_basename = 'doc'
  9516. +
  9517. +# Options for LaTeX output
  9518. +
  9519. +latex_paper_size = 'letter'
  9520. +latex_font_size = '10pt'
  9521. +
  9522. +# Grouping the document tree into LaTeX files. List of tuples
  9523. +# (source start file, target name, title, author, documentclass [howto/manual])
  9524. +latex_documents = [
  9525. + ('index', 'ZBarSDK.tex', u'ZBar iPhone SDK Documentation',
  9526. + u'Jeff Brown', 'manual'),
  9527. +]
  9528. +
  9529. +#latex_logo = ''
  9530. +#latex_use_parts = False
  9531. +#latex_preamble = ''
  9532. +#latex_appendices = []
  9533. +#latex_use_modindex = False
  9534. diff --git a/iphone/doc/custom.rst b/iphone/doc/custom.rst
  9535. new file mode 100644
  9536. --- /dev/null
  9537. +++ b/iphone/doc/custom.rst
  9538. @@ -0,0 +1,72 @@
  9539. +Customizing the Interface
  9540. +=========================
  9541. +
  9542. +The reader supports customization of the camera overlay and the integrated
  9543. +help that is displayed.
  9544. +
  9545. +
  9546. +Customizing the Overlay
  9547. +-----------------------
  9548. +
  9549. +If you are scanning with the camera, whether using a
  9550. +:class:`ZBarReaderViewController` for automatic capture or manually with
  9551. +:class:`ZBarReaderController`, you may want to customize the appearance of the
  9552. +reader. You do this mainly by setting a
  9553. +:member:`~ZBarReaderViewController::cameraOverlayView`.
  9554. +
  9555. +Note that if you are scanning images from the photo library, there is no
  9556. +customization - you are limited to the system picker interface provided by the
  9557. +:class:`UIImagePickerController`.
  9558. +
  9559. +If you are using a :class:`ZBarReaderViewController`, are *only* planning to
  9560. +support iOS 4 and just want to add to the existing controls, you can simply
  9561. +set your overlay to include the additional view hierarchy::
  9562. +
  9563. + reader.cameraOverlayView = myLogoImageView;
  9564. +
  9565. +Otherwise, if you are using a :class:`ZBarReaderController`, still need the
  9566. +iOS 3.1 fallback or prefer to completely replace the default controls, you
  9567. +should disable those first. Note that you will need to provide your own
  9568. +controls, which should at least include a way to dismiss the reader::
  9569. +
  9570. + reader.showsCameraControls = NO; // for UIImagePickerController
  9571. + reader.showsZBarControls = NO;
  9572. + reader.cameraOverlayView = myControlView;
  9573. +
  9574. +For manual capture with :class:`ZBarReaderController`, you should also include
  9575. +a control connected to :member:`~ZBarReaderController::takePicture`.
  9576. +
  9577. +See :doc:`compat` for more information about iOS 3.1 fallbacks.
  9578. +
  9579. +In either case, the overlay view may be loaded from a NIB, or simply created
  9580. +programmatically.
  9581. +
  9582. +You can also disable the tracking rectangle that highlights barcodes with
  9583. +:member:`~ZBarReaderViewController::tracksSymbols`.
  9584. +
  9585. +
  9586. +Presenting Help
  9587. +---------------
  9588. +
  9589. +If you have set ``showsZBarControls = NO`` and replaced the default controls,
  9590. +you may still present the built-in help viewer. Just hook your custom control
  9591. +to the ``showsHelpWithReason:`` method of the controller. You should only
  9592. +call this method when the reader is actually presented.
  9593. +
  9594. +The default reader controls invoke ``showsHelpWithReason:`` with a reason
  9595. +parameter of ``"INFO"`` when the info button is tapped.
  9596. +
  9597. +
  9598. +Customizing the Help Content
  9599. +----------------------------
  9600. +
  9601. +Whether you use the default controls or provide your own, you can still
  9602. +customize the content of the help that is displayed. The integrated viewer
  9603. +uses a UIWebView to display the contents of :file:`zbar-help.html` that we
  9604. +copied into your Resources. You should hack this up as you see fit to give
  9605. +your users the best help experience.
  9606. +
  9607. +To allow for runtime customization based on the reason for presenting help,
  9608. +the javascript function ``onZBarHelp`` will be called just before the page is
  9609. +displayed, with the ``reason`` argument set as provided to
  9610. +``showsHelpWithReason:``.
  9611. diff --git a/iphone/doc/devguide.rst b/iphone/doc/devguide.rst
  9612. new file mode 100644
  9613. --- /dev/null
  9614. +++ b/iphone/doc/devguide.rst
  9615. @@ -0,0 +1,13 @@
  9616. +***********************
  9617. + Developer's Guide
  9618. +***********************
  9619. +
  9620. +.. toctree::
  9621. + :maxdepth: 2
  9622. +
  9623. + camera
  9624. + picker
  9625. + custom
  9626. + optimizing
  9627. + compat
  9628. + licensing
  9629. diff --git a/iphone/doc/faq.rst b/iphone/doc/faq.rst
  9630. new file mode 100644
  9631. --- /dev/null
  9632. +++ b/iphone/doc/faq.rst
  9633. @@ -0,0 +1,113 @@
  9634. +Frequently Asked Questions (FAQ)
  9635. +================================
  9636. +
  9637. +This is the ever-growing list of answers to commonly asked questions. Please
  9638. +feel free to post you question in our `iPhone Developers forum`_ if you do not
  9639. +find the information you need in this documentation.
  9640. +
  9641. +.. _`iPhone Developers Forum`:
  9642. + http://sourceforge.net/projects/zbar/forums/forum/1072195
  9643. +
  9644. +
  9645. +General
  9646. +-------
  9647. +
  9648. +This looks great... Where can I get it?
  9649. + You can download the latest version of the SDK from
  9650. + http://zbar.sf.net/iphone
  9651. +
  9652. +
  9653. +Compatibility
  9654. +-------------
  9655. +
  9656. +Which iPhone devices does this library support?
  9657. + The library works *only* with the iPhone 3GS and iPhone 4.
  9658. +
  9659. +Will you make it work with the iPhone 3G?
  9660. + *No* - the 3G it is not supported and is unlikely to ever be supported.
  9661. +
  9662. + To be fair, you *can* use the 3G to scan image files, as long as they're in
  9663. + focus (ie, *not* images taken by the built-in fixed-focus camera). There
  9664. + is at least one application that found a use for this...
  9665. +
  9666. +What target iOS versions does this library work with?
  9667. + iOS 4 is fully supported, including the latest video streaming interfaces.
  9668. + Since Apple has dropped support for earlier versions of iOS on the App
  9669. + Store, we recommend that you target only iOS 4 for reading barcodes.
  9670. +
  9671. + iOS 3.1 is also supported, but you will have to resort to manual capture if
  9672. + you intend to distribute on the App Store.
  9673. +
  9674. + The library should work all the way back to iOS 3.0, although we no longer
  9675. + test with it. For most cases we recommend you use at least iOS 3.1, which
  9676. + introduced several must-have enhancements for the UIImagePickerController
  9677. + (ie, :member:`~ZBarReaderController::cameraOverlayView` and ``takePicture``)
  9678. +
  9679. + In all cases you will need at least a 4.0 SDK to build.
  9680. +
  9681. + See :doc:`compat` for details about iOS version fallbacks.
  9682. +
  9683. +Are any private APIs in use?
  9684. + No - the binary release of the SDK does not use any private APIs.
  9685. +
  9686. + OTOH, if you do not care about private APIs (for instance, you are
  9687. + targeting AdHoc or enterprise distribution) and you want to enable
  9688. + automatic capture with iOS 3.1, you can build a version that uses
  9689. + UIGetScreenImage (which is again a private API).
  9690. +
  9691. + See :doc:`compat` for details.
  9692. +
  9693. +Does this support "automatic" barcode capture?
  9694. + Yes - if you use iOS 4, the default configuration will capture barcodes
  9695. + automatically from the video stream.
  9696. +
  9697. + Again, automatic capture is no longer supported with iOS 3.1 for apps
  9698. + distributed on the App Store.
  9699. +
  9700. +
  9701. +Building
  9702. +--------
  9703. +
  9704. +I get "Undefined symbols" errors when I try to build?
  9705. + Most likely you did not add all of the necessary framework dependencies.
  9706. + See :doc:`tutorial` or :doc:`install` for the list of frameworks you need
  9707. + to link against.
  9708. +
  9709. +
  9710. +Licensing
  9711. +---------
  9712. +
  9713. +Please refer to :doc:`licensing` for questions about licensing.
  9714. +
  9715. +
  9716. +Barcodes
  9717. +--------
  9718. +
  9719. +Why do my UPC barcodes have an extra 0 at the front?
  9720. + The UPC-A_ symbology is the subset of EAN-13_ that starts with a leading 0.
  9721. + The ZBar decoder enables only EAN-13_ by default, so GTIN-13_ product codes
  9722. + are consistently reported. You can choose to receive the 12-digit results
  9723. + instead by explicitly enabling UPC-A_.
  9724. +
  9725. + The :member:`~ZBarSymbol::type` property of the symbol can be used to see
  9726. + which type of barcode is reported.
  9727. +
  9728. + See EAN-13_ and UPC-A_ for more information.
  9729. +
  9730. +Why does my UPC-E (short version) barcode data look completely wrong?
  9731. + UPC-E_ is a "zero compressed" version of UPC-A_; certain of the zeros are
  9732. + removed from the UPC-A_ data to generate the UPC-E_ barcode. The ZBar
  9733. + decoder *expands* this compression by default, again to consistently report
  9734. + GTIN-13_ product codes. You can choose to receive the compressed 8-digit
  9735. + results instead by explicitly enabling UPC-E_.
  9736. +
  9737. + The :member:`~ZBarSymbol::type` property of the symbol can be used to see
  9738. + which type of barcode is reported.
  9739. +
  9740. + See UPC-E_ for more information.
  9741. +
  9742. +.. _GTIN-13:
  9743. +.. _GTIN: http://wikipedia.org/wiki/GTIN
  9744. +.. _EAN-13: http://wikipedia.org/wiki/EAN-13
  9745. +.. _UPC-A: http://wikipedia.org/wiki/UPC-A
  9746. +.. _UPC-E: http://wikipedia.org/wiki/UPC-E#Zero-compressed_UPC-E
  9747. diff --git a/iphone/doc/getstarted.rst b/iphone/doc/getstarted.rst
  9748. new file mode 100644
  9749. --- /dev/null
  9750. +++ b/iphone/doc/getstarted.rst
  9751. @@ -0,0 +1,12 @@
  9752. +*********************
  9753. + Getting Started
  9754. +*********************
  9755. +
  9756. +.. toctree::
  9757. + :maxdepth: 2
  9758. + :numbered:
  9759. +
  9760. + install
  9761. + tutorial
  9762. + faq
  9763. + support
  9764. diff --git a/iphone/doc/index.rst b/iphone/doc/index.rst
  9765. new file mode 100644
  9766. --- /dev/null
  9767. +++ b/iphone/doc/index.rst
  9768. @@ -0,0 +1,20 @@
  9769. +###################
  9770. + ZBar iPhone SDK
  9771. +###################
  9772. +
  9773. +Welcome to the ZBar SDK for iPhone!
  9774. +
  9775. +This documentation covers all aspects of developing with the SDK: from adding
  9776. +the SDK to your project, to writing code that uses it, even licensing the
  9777. +library with your app.
  9778. +
  9779. +Please let us know if you find anything inaccurate or lacking (even better,
  9780. +send doc patches!)
  9781. +
  9782. +.. toctree::
  9783. + :maxdepth: 2
  9784. + :numbered:
  9785. +
  9786. + getstarted
  9787. + devguide
  9788. + apiref
  9789. diff --git a/iphone/doc/install.rst b/iphone/doc/install.rst
  9790. new file mode 100644
  9791. --- /dev/null
  9792. +++ b/iphone/doc/install.rst
  9793. @@ -0,0 +1,135 @@
  9794. +Installing the SDK
  9795. +==================
  9796. +
  9797. +These are the basic instructions for obtaining the SDK and adding it to an
  9798. +Xcode project.
  9799. +
  9800. +You may want to try things out with the :doc:`tutorial` before hacking at your
  9801. +own project.
  9802. +
  9803. +
  9804. +Requirements
  9805. +------------
  9806. +
  9807. +You will need *all* of the following to develop iPhone applications
  9808. +using this SDK:
  9809. +
  9810. +* Mac OS X >= 10.6.x (Snow Leopard)
  9811. +* Xcode >= 3.2.3
  9812. +* iPhone SDK >= 4.0
  9813. +* An iPhone 3GS or iPhone 4
  9814. +* iOS >= 3.1 running on the device (>= 4.0 is preferred)
  9815. +
  9816. +.. warning::
  9817. +
  9818. + *Only* the iPhone 3GS and iPhone 4 are supported, as they have a camera
  9819. + with auto-focus. The ZBar library does not support the iPhone 3G and is
  9820. + unlikely to ever support it.
  9821. +
  9822. +
  9823. +Downloading
  9824. +-----------
  9825. +
  9826. +Download the latest binary release of the ZBar SDK from
  9827. +
  9828. +http://zbar.sourceforge.net/iphone
  9829. +
  9830. +
  9831. +Integration
  9832. +-----------
  9833. +
  9834. +The recommended installation method is to simply copy the SDK into your
  9835. +Xcode project:
  9836. +
  9837. +1. Open ZBarSDK-|version|.dmg in the Finder.
  9838. +
  9839. +2. Drag the :file:`ZBarSDK` folder into your Xcode project. In the dialog
  9840. + that appears, you should choose to **copy** the SDK into your project by
  9841. + checking the box. The target that you want to link with the library should
  9842. + also be selected in the target list.
  9843. +
  9844. +4. Link the following additional frameworks to any targets that link with the
  9845. + ZBarSDK. You should set the first three to use weak references and
  9846. + configure an appropriate deployment target if you still need to support
  9847. + iOS 3.1:
  9848. +
  9849. + * :file:`AVFoundation.framework` (weak)
  9850. + * :file:`CoreMedia.framework` (weak)
  9851. + * :file:`CoreVideo.framework` (weak)
  9852. + * :file:`QuartzCore.framework`
  9853. + * :file:`libiconv.dylib`
  9854. +
  9855. + If you check "Link Binary With Libraries" for the target(s), you should see
  9856. + all of these frameworks along with :file:`libzbar.a`.
  9857. +
  9858. +5. Import the SDK header from your prefix header to make the barcode reader
  9859. + APIs available::
  9860. +
  9861. + #import "ZBarSDK.h"
  9862. +
  9863. +Proceed to :doc:`camera` or :doc:`picker` to learn about using the reader APIs
  9864. +to scan barcodes. Use the :doc:`apiref` for specific interface details.
  9865. +
  9866. +
  9867. +Upgrading from an Older Version
  9868. +-------------------------------
  9869. +
  9870. +If you are using an older version of the *SDK* (NB, skip to the next section
  9871. +if you are currently using Mercurial), upgrading is straightforward:
  9872. +
  9873. +1. Delete the current ZBarSDK group from your project. You should choose
  9874. + to delete the files if you copied them into your project.
  9875. +2. Drag the new ZBarSDK from the DMG into your project.
  9876. +
  9877. +Clean out and rebuild your project with the new version.
  9878. +
  9879. +
  9880. +Upgrading a Pre-SDK Integration
  9881. +-------------------------------
  9882. +
  9883. +If your project was using the library directly from the Mercurial repository,
  9884. +before the SDK was introduced, there are a few incompatibilities that
  9885. +you must resolve in order to upgrade. Don't worry - all of you source stays
  9886. +the same, you just need to update how the library is included in the project
  9887. +and how the headers are imported.
  9888. +
  9889. +Switching to the Binary Distribution
  9890. +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  9891. +
  9892. +This approach is recommended - the binary releases provide you with a stable
  9893. +development platform, isolating you from temporary instability and transient
  9894. +problems that may occur at the bleeding edge.
  9895. +
  9896. +The first task is to reverse the previous ZBar integration:
  9897. +
  9898. +1. Remove the reference to zbar.xcodeproj from your project.
  9899. +2. Remove any :file:`zbar-*` files from your Resources.
  9900. +3. In the target build settings, remove any "Header Search Paths" that
  9901. + reference zbar.
  9902. +4. Remove any references to zbar headers in your :file:`prefix.pch` or source
  9903. + files.
  9904. +
  9905. +Now just continue with the `integration`_ instructions above and you should be
  9906. +back up and running!
  9907. +
  9908. +Continuing with Mercurial
  9909. +^^^^^^^^^^^^^^^^^^^^^^^^^
  9910. +
  9911. +Alternatively, you may still prefer to select Mercurial revisions. You have a
  9912. +few choices for this:
  9913. +
  9914. +* You may build your own ZBarSDK and copy/link it into your project. This is
  9915. + the same as `Switching to the Binary Distribution`_, except that you use
  9916. + your own version of the SDK. In this case you need to manually rebuild the
  9917. + SDK when you update it.
  9918. +* You may leave zbar.xcodeproj as a project dependency and pull the SDK into
  9919. + your project. This is not well tested, so ymmv.
  9920. +* You may leave zbar.xcodeproj as a project dependency and just link libzbar.a
  9921. + into your project, as before. You will need to update the target dependency
  9922. + (the library target changed names to libzbar) and add the
  9923. + :file:`iphone/include/ZBarSDK` directory to "Header Search Paths"
  9924. +
  9925. +In any case, you should remove the references to the zbar headers from
  9926. +:file:`prefix.pch` (or your source files) and replace them with::
  9927. +
  9928. + #import "ZBarSDK.h"
  9929. diff --git a/iphone/doc/licensing.rst b/iphone/doc/licensing.rst
  9930. new file mode 100644
  9931. --- /dev/null
  9932. +++ b/iphone/doc/licensing.rst
  9933. @@ -0,0 +1,187 @@
  9934. +Licensing the Library
  9935. +=====================
  9936. +
  9937. +First of all, the big disclaimer:
  9938. +
  9939. +.. warning::
  9940. +
  9941. + We are *not* lawyers; we cannot help you decide if you should use the
  9942. + library or how to apply the license, only your lawyer can advise you
  9943. + concerning legal matters.
  9944. +
  9945. +That said, it should also be noted that we have neither the resources (time,
  9946. +cash, etc) nor the patience to enforce the license (at all); the reality is
  9947. +that all of this is left to your discretion.
  9948. +
  9949. +If you prefer to leave the lawyers out of it, the rest of this section will
  9950. +help you apply the license to your application.
  9951. +
  9952. +
  9953. +Licensing FAQ
  9954. +-------------
  9955. +
  9956. +Can I use this library with my proprietary (closed source) application?
  9957. + Yes, that is our intent and we do not believe there is any problem
  9958. + regarding the license.
  9959. +
  9960. +Will I need to open source my entire app?
  9961. + No, it is not required by the license.
  9962. +
  9963. +Will I need to distribute all of my "object files" on the App Store?
  9964. + No, this is also not required by the license, although you should offer to
  9965. + provide them upon request. See below for more detail.
  9966. +
  9967. +But I read somewhere that "iPhone apps may not use LGPL code"?
  9968. + That statement is an over-generalization that does not apply in this case.
  9969. + Most likely your source is either:
  9970. +
  9971. + * referring to the GPL, which is significantly different from the
  9972. + *L*\ GPL
  9973. + * referring to a different version of the LGPL; we intentionally use
  9974. + version 2.1, which has specific static linking exceptions.
  9975. + * not a lawyer either and too lazy to read the whole license
  9976. +
  9977. + Basically, if you leverage the appropriate sections of the license, it
  9978. + should be fully compatible with the App Store restrictions and
  9979. + requirements.
  9980. +
  9981. +This is too complicated, can I just pay for an easier license?
  9982. + No, it is not possible. There are multiple problems with this approach,
  9983. + some brief highlights:
  9984. +
  9985. + * Most open source projects (including this one) do not have a single
  9986. + author. Tracking down every contributor and getting their approval could
  9987. + be quite a challenge.
  9988. + * The license is meant to protect users' rights to the software. Giving
  9989. + you special treatment bypasses the protection we offered them,
  9990. + effectively revoking their rights. This would be a violation of their
  9991. + trust and completely defeats the purpose of the license.
  9992. +
  9993. + You may think of this as the "price" you pay for using our open source
  9994. + library. If you want to make your life easier, you should be petitioning
  9995. + Apple for shared library support...
  9996. +
  9997. +What if you add a clause that lets me do whatever I want?
  9998. + No, also not possible. In addition to the problems mentioned above, there
  9999. + are even more problems with this:
  10000. +
  10001. + * Sourceforge requires an OSI approved license for hosting our project;
  10002. + an altered license would no longer be approved.
  10003. + * Again we are not lawyers and therefore not qualified to change the
  10004. + license, we would have to pay one of those slimy buggers to do it.
  10005. +
  10006. +Do I need to add an "about" dialog to display your copyright/license?
  10007. + No, not as such. We won't discourage you from plugging the library if you
  10008. + like, but it is not a requirement. You should think of our license as a
  10009. + supplement to your own software license, therefore it is appropriate to
  10010. + display it where (and only where) you display your own:
  10011. +
  10012. + * If you follow Apple's recommendation, the App Store is the only place
  10013. + that the user accesses your license, so it should also be the only place
  10014. + where the library supplement is available.
  10015. + * If your app already has some kind of "about" view that displays your
  10016. + copyright/license information, it is also appropriate to display the same
  10017. + information for the library.
  10018. +
  10019. +Do I need to include the entire library in my application bundle?
  10020. + No, it is not necessary:
  10021. +
  10022. + * If you have not modified the library, it is sufficient to provide a link
  10023. + to the project and the version information.
  10024. + * If you are using a modified version, you may provide a link to download
  10025. + that instead of including it in the bundle.
  10026. +
  10027. +
  10028. +Modifications
  10029. +-------------
  10030. +
  10031. +What is a "modification"? Again, we leave it to your discretion with this
  10032. +guidance:
  10033. +
  10034. +* If you use the distributed binary SDK you have certainly not modified the
  10035. + library.
  10036. +* If you are working from Mercurial, *any* change you have made to the
  10037. + "source code" of the library is a modification, it does not matter how
  10038. + trivial. You can see what changes have been made by running
  10039. + ``hg status -mard``; if this command outputs anything, you have modified
  10040. + the library.
  10041. +
  10042. +If you find that you have made changes to the library, you should carefully
  10043. +consider how far you want to proceed down that path. Once you publish your
  10044. +changes you have created a "fork" of the project which you now need to
  10045. +maintain. Are you prepared to merge every time the library is updated?
  10046. +
  10047. +If your change adds a useful feature to the library, we absolutely encourage
  10048. +you to submit patches. Assuming you can get your patch into the project, then
  10049. +you will no longer need to use a modified version! When submitting patches,
  10050. +ensure that your changes are appropriate for all of our users. Specifically,
  10051. +we are not interested in patches that simply hack up the library to work the
  10052. +way you want. Compare a patch that changes the default behavior to your
  10053. +preference (probably not acceptable), to a patch that adds a new configuration
  10054. +to support the feature you have added (probably fine).
  10055. +
  10056. +
  10057. +Object File Distribution
  10058. +------------------------
  10059. +
  10060. +Section 6 of the LGPL v2.1 specifically permits static linking with the
  10061. +library. If your project is not open source, this section does require that
  10062. +you make your object files available to your users. The intent, as indicated
  10063. +in the license, is that a user who has obtained your software may exercise
  10064. +their right to modify the library and then re-link their modified version into
  10065. +your application.
  10066. +
  10067. +We recommend that you apply Subsection 6c, which only requires that you make a
  10068. +written offer to provide the object files. Now...if you consider the actual
  10069. +utility of this mechanism - that it is only applicable to developers, and only
  10070. +those with in depth knowledge of the tools, the time required for development
  10071. +- all to have a new barcode reader in a specific version of your application
  10072. +that only they can use, the reality is that no one is going to request this.
  10073. +You probably should not even waste time preparing for it until a request is
  10074. +made.
  10075. +
  10076. +Additionally, to avoid "casual requests" from nefarious types that just want
  10077. +to inconvenience you, also consider charging a fee for the distribution of
  10078. +this material (as permitted by the license); just add up the cost of burning
  10079. +and shipping a disk. If this cost is "large" compared to the price of your
  10080. +app, the likelyhood of a request is reduced even further.
  10081. +
  10082. +
  10083. +Using the Unmodified Library
  10084. +----------------------------
  10085. +
  10086. +Applying the license in this case is somewhat simpler. These are the basic
  10087. +steps you can follow:
  10088. +
  10089. +1. Verify that the rest of your software license is compatible with the LGPL.
  10090. + You cannot use the library if they are incompatible.
  10091. +
  10092. + For those using the default App Store license, we have reviewed this and
  10093. + believe it is compatible with the LGPL.
  10094. +
  10095. +2. At the end of your license text, in an annex or supplement, start by
  10096. + declaring your use of the library and offering a link to the project.
  10097. + Something like this:
  10098. +
  10099. + This software uses the open source ZBar Barcode Reader library, version
  10100. + |version|, which is available from http://zbar.sourceforge.net/iphone
  10101. +
  10102. + If you built your own version of the library, replace the version callout
  10103. + with eg, "cloned from Mercurial revision xxxxxxxx"
  10104. +
  10105. +3. Then append the contents of the text file COPYING, included with the
  10106. + library. This is all of the copyright information for the library.
  10107. +
  10108. +4. Then append the contents of the text file LICENSE, also included with the
  10109. + library. This is just the LGPL version 2.1 which you may also obtain from
  10110. + http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
  10111. +
  10112. +5. You may choose to make the written offer for the object files explicit.
  10113. + Provide some text and whatever link or email address is appropriate.
  10114. +
  10115. +
  10116. +Using a Modified Library
  10117. +------------------------
  10118. +
  10119. +We intentionally leave this option vague and force you to refer to the license
  10120. +as an underhanded way of encouraging you to contribute back to the project ;)
  10121. diff --git a/iphone/doc/optimizing.rst b/iphone/doc/optimizing.rst
  10122. new file mode 100644
  10123. --- /dev/null
  10124. +++ b/iphone/doc/optimizing.rst
  10125. @@ -0,0 +1,437 @@
  10126. +Optimizing the Reader
  10127. +=====================
  10128. +
  10129. +As good as the iPhone performance is for a mobile device, the reality from an
  10130. +image processing perspective is that it represents a lower performance target.
  10131. +While the default configuration of the iPhone reader has been carefully tuned
  10132. +for the general case, you can often obtain much better results if you optimize
  10133. +for your specific application.
  10134. +
  10135. +.. note::
  10136. +
  10137. + Performance is a complex topic. The only way to tune performance is by
  10138. + changing settings and comparing measured results. If you are not
  10139. + comfortable with the concepts presented here, it is recommended that you
  10140. + leave the settings at the defaults and avoid compromising reliability.
  10141. +
  10142. +Performance of the barcode reader is generally evaluated by two factors:
  10143. +
  10144. +* The **latency** - how quickly it "recognizes" a barcode. Specifically this
  10145. + is the time from when the user puts a barcode in the frame or selects an
  10146. + image until a response is indicated back to the them.
  10147. +
  10148. +* The **reliability** - it does not matter how quickly an image is scanned if
  10149. + an incorrect result is returned. That may seem obvious, but bad decodes
  10150. + *are* possible and you need to keep this in mind when changing settings that
  10151. + affect the reliability of the reader.
  10152. +
  10153. +Basically our goal is to optimize the latency without sacrificing reliability.
  10154. +There are several factors that contribue to latency:
  10155. +
  10156. +* The **quality** of the barcode image. Quality includes the available
  10157. + resolution, focus, lighting, noise, etc. We have more control over some of
  10158. + these than others.
  10159. +
  10160. +* The **camera**. When scanning from the camera, the time for the
  10161. + autoexposure and autofocus to converge on an image that can be decoded is a
  10162. + significant contribution to the overall latency.
  10163. +
  10164. +* The **frame rate** of the reader - this translates to the time it takes the
  10165. + scanner to process an image.
  10166. +
  10167. +* The **effort level** of the reader - some of the available settings control
  10168. + "how hard" the reader tries to find barcodes in each frame.
  10169. +
  10170. +* The **delegate latency** - the time spent in your application after a
  10171. + barcode has been detected until the user is notified.
  10172. +
  10173. +Most of these factors are interrelated. We will discuss those we can control
  10174. +in detail, as well the settings you use to affect them. Then we will provide
  10175. +a few specific case examples.
  10176. +
  10177. +
  10178. +Measuring Performance
  10179. +---------------------
  10180. +
  10181. +Subjective response times are a good place to start (does it "feel" responsive
  10182. +to you?), and possibly the only way to evaluate the overall experience, but to
  10183. +compare incremental changes to interrelated settings and have meaningful
  10184. +performance discussions with others, we need a more quantitative approach.
  10185. +
  10186. +The :func:`mach_absolute_time` function is a good tool for accurately
  10187. +measuring small delays. Research this function and learn how to apply it. As
  10188. +when measuring any real-world value, keep in mind that some variance is to be
  10189. +expected - even if you perform exactly the same operation multiple times, you
  10190. +will not see exactly the same measurement. You should collect several
  10191. +samples, discard any obvious outliers, and average the remaining measurements.
  10192. +
  10193. +One way that the overall reader latency may be evaluated is by manually
  10194. +marking the time when the barcode is presented to the reader. Add a control
  10195. +to your overlay that captures the start time when tapped and compare this to
  10196. +the end time, just before your delegate returns.
  10197. +
  10198. +The reader continually monitors the frame rate at which it is running. The
  10199. +measured value may be displayed for debugging purposes by enabling the
  10200. +:member:`~ZBarReaderView::showsFPS` property. The readertest example does
  10201. +this and also provides control over many of the available settings, so you can
  10202. +quickly test how each setting affects the frame rate. You should target your
  10203. +optimization efforts to achieve a frame rate of at least 8-10fps, although
  10204. +12-15fps is preferable.
  10205. +
  10206. +You can measure the latency of your delegate using :func:`mach_absolute_time`.
  10207. +The measured value should be less than about 100ms, the smaller the better, to
  10208. +avoid noticeable lag.
  10209. +
  10210. +The readertest is a good tool for testing the performance of the reader. You
  10211. +can tune the settings appropriately for your application and evaluate the
  10212. +effect each change has on the performance.
  10213. +
  10214. +
  10215. +Delegate Latency
  10216. +----------------
  10217. +
  10218. +This latency contributor is the easiest for you to effect (and sometimes the
  10219. +easiest to overlook). You delegate method should update the interface -
  10220. +dismiss the controller or update your overlay to indicate success - and
  10221. +*nothing* else. All other processing should be deferred until after the
  10222. +animations have started.
  10223. +
  10224. +
  10225. +Image Quality
  10226. +-------------
  10227. +
  10228. +Resolution
  10229. +^^^^^^^^^^
  10230. +
  10231. +One might think that "more is better" in terms of resolution, but this is not
  10232. +necessarily the case. Given average image quality, the ideal resolution for
  10233. +scanning is right around three pixels per barcode "module" (the width of the
  10234. +smallest bar or space). Note that this measure is not an absolute image size
  10235. +or even a measure of the physical dimensions represented by a pixel sample, it
  10236. +*only* describes the sampled size of the barcode in the image.
  10237. +
  10238. +As the resolution decreases below about two pixels per module, edge fidelity
  10239. +is lost and the bars and spaces start to merge together, making it impossible
  10240. +(for this library) to scan. This affects the density (feature size) and
  10241. +maximum size (data capacity) of the barcodes that can be detected.
  10242. +Conversely, as the resolution increases above about 4 pixels per module, noise
  10243. +can interfere with the edge detection and images will take longer to process.
  10244. +
  10245. +Other quality factors, such as poor focus, bad lighting or even excessive
  10246. +noise, can increase (or decrease) the resolution requirement.
  10247. +
  10248. +When scanning from the camera, the reader defaults to 640x480, which is good
  10249. +for most applications. On the iPhone 4, you can increase this using a capture
  10250. +:member:`~ZBarReaderView::session` preset. The iPhone 3GS does not have a
  10251. +higher resolution option available.
  10252. +
  10253. +For scanning images, you can use
  10254. +:member:`~ZBarReaderController::maxScanDimension` to control the scaled size
  10255. +of the converted image, or resort to converting them yourself.
  10256. +
  10257. +If you want to read long linear barcodes or dense 2-D symbols, you will
  10258. +probably want to increase the resolution by adjusting these settings.
  10259. +
  10260. +Keep in mind that more pixels will take longer to scan, refer to the `frame
  10261. +rate`_ discussion for ways to compensate.
  10262. +
  10263. +Focus
  10264. +^^^^^
  10265. +
  10266. +Ideally we would fix the focus at a calculated optimum distance and optimize
  10267. +the aperture selection to maximize the depth of field. Unfortunately the APIs
  10268. +do not currently give us control over any of these settings, the best we can
  10269. +do (as of iOS 4) is continuous auto-focus mode - this mode is configured by
  10270. +the reader automatically. It can still take the device as long as 1-2 seconds
  10271. +to find the appropriate macro focus setting, but there just isn't much we can
  10272. +do about that.
  10273. +
  10274. +Lighting and Exposure
  10275. +^^^^^^^^^^^^^^^^^^^^^
  10276. +
  10277. +An image that is too bright or overexposed can completely wash out any
  10278. +barcodes. An image that is too dark or underexposed will not provide
  10279. +sufficient contrast for the scanner. Low light levels also tend to produce
  10280. +noisier images, possibly because the driver uses a faster "ISO" setting to
  10281. +compensate for the lighting.
  10282. +
  10283. +The camera defaults to continuous automatic exposure and white balance. Since
  10284. +there are no other useful values, the reader leaves these unchanged from their
  10285. +default setting.
  10286. +
  10287. +For the iPhone 4 device, the "torch" can be enabled to provide additional
  10288. +illumination for the camera in low-light conditions. The reader sets the
  10289. +torch to automatic by default, so it should turn on only when needeed...
  10290. +There have been some reports that the torch turns on inappropriately, washing
  10291. +out the image. If you find that this occurs, you should instead set the
  10292. +:member:`~ZBarReaderView::torchMode` property of the :class:`ZBarReaderView`
  10293. +to ``Off``.
  10294. +
  10295. +For scanning images from another source, you are again stuck with the
  10296. +available image quality. If you have any control over the image source, you
  10297. +should do what you can to fix quality problems there.
  10298. +
  10299. +Noise
  10300. +^^^^^
  10301. +
  10302. +Some level of noise is filtered by the reader, but excessive noise levels
  10303. +create additional edges in the image which corrupt barcodes and increase
  10304. +scanning time (decreasing the frame rate).
  10305. +
  10306. +As mentioned with `lighting and exposure`_, noise mostly becomes a problem
  10307. +when the light-level is too low, but high-resolution images may also increase
  10308. +exposure to sensor noise.
  10309. +
  10310. +We compensate for noise by *reducing* the `resolution`_ from the sensor
  10311. +maximum. Scaling the image down has the effect of averaging several pixels
  10312. +into one value, filtering out the high-frequency noise component.
  10313. +
  10314. +
  10315. +Frame Rate
  10316. +----------
  10317. +
  10318. +The time it takes to scan and decode an image/frame is roughly proportional to
  10319. +the number of pixels that are processed. The number and type of enabled
  10320. +symbologies and image noise can also affect the processing time.
  10321. +
  10322. +We have several knobs available that affect the frame rate. Most of these are
  10323. +geared toward reducing the number of image pixels that are scanned.
  10324. +
  10325. +Decrease the Resolution
  10326. +^^^^^^^^^^^^^^^^^^^^^^^
  10327. +
  10328. +Adjusting the resolution of the image is an easy way to quickly reduce the
  10329. +number of pixels. Smaller images also mean there is less data to carry
  10330. +around, which helps performance in other ways. For example, reducing each
  10331. +image dimension by 30% (eg, from 640x480 to 448x336) will about double the
  10332. +speed of the reader (to a point). [FIXME verify!]
  10333. +
  10334. +Adjusting the resolution is `described above <resolution>`_. As mentioned
  10335. +there, reducing the resolution will negatively impact the minimum feature size
  10336. +and maximum barcode size that can be scanned, but it will help filter noise.
  10337. +
  10338. +Crop the Scan Region
  10339. +^^^^^^^^^^^^^^^^^^^^
  10340. +
  10341. +It may not always be necessary for an application to scan all the way to the
  10342. +edges of the image. By cropping the scan area, you can get most of the
  10343. +benefits of reduced resolution without sacrificing the minimum feature size.
  10344. +Cropping will also not affect image noise, but similar to decreasing the
  10345. +resolution, it does affect the maximum size barcode that can be scanned.
  10346. +
  10347. +For all cases you set the crop rectangle
  10348. +:class:`~ZBarReaderViewController::scanCrop` property. Note that the
  10349. +rectangle provided to the controller is *normalized* across image size and
  10350. +rotation. This means that the coordinates range from 0 to 1 and the axes will
  10351. +be arranged such that the x-axis of the crop rectangle corresponds to the
  10352. +major (longer) image axis.
  10353. +
  10354. +Your interface will typically need to indicate the cropped scan area to the
  10355. +user with visual queues. Use the
  10356. +:class:`~ZBarReaderViewController::cameraOverlayView` to provide this.
  10357. +
  10358. +By default, the :class:`ZBarReaderView` recognizes a pinch gesture to
  10359. +digitally zoom the preview around the center of the image. This zoom does not
  10360. +affect the resolution of the image, but it does crop the scan region to the
  10361. +visible area. You can also disable the pinch gesture and set the
  10362. +:class:`~ZBarReaderView::zoom` programmatically.
  10363. +
  10364. +Limit the Scan Density
  10365. +^^^^^^^^^^^^^^^^^^^^^^
  10366. +
  10367. +The scanner works by making scan passes across the pixel rows and colums of
  10368. +the image. The density of the passes is configured at the scanner as a pixel
  10369. +stride for each axis. ``ZBAR_CFG_Y_DENSITY`` (``ZBAR_CFG_X_DENSITY``)
  10370. +controls the number of pixel rows (columns) that are skipped between
  10371. +successive horizontal (vertical) scan passes. (Note that "density" is really
  10372. +not a good name for the configuation settings... "stride" might be more
  10373. +appropriate.)
  10374. +
  10375. +Decreasing the scan density (by increasing the stride setting) is a great way
  10376. +to limit the processing (increasing the frame rate) without sacrificing scan
  10377. +resolution - each scan pass is still made at full image resolution, there are
  10378. +just fewer passes (less redundancy).
  10379. +
  10380. +Setting the stride value to 0 completely disables scanning in that direction.
  10381. +This is very useful when reading linear codes with a visual alignment guide -
  10382. +scanning parallel to the bars is a waste of cycles which may be better applied
  10383. +to support higher resolution or increased density of scans across the symbol.
  10384. +Note that some 2-D symbologies (QR Code) require scans in both directions.
  10385. +
  10386. +Setting the stride to a very large value will generate a single scan pass
  10387. +through the center of the image. Note that some symbologies will not be
  10388. +detected without multiple successful passes; it is usually better to combine
  10389. +this setting with cropping to generate a number of closely clustered scan
  10390. +passes in the target area.
  10391. +
  10392. +Note that the density also affects the aspect ratio and rotation that can be
  10393. +tolerated. If you set it too large, some barcodes will become more difficult
  10394. +to read.
  10395. +
  10396. +In general, 2 to 4 is a good target for the stride setting, unless you have
  10397. +very high or low resolution images.
  10398. +
  10399. +Disable unused symbologies
  10400. +^^^^^^^^^^^^^^^^^^^^^^^^^^
  10401. +
  10402. +Limiting the symbologies to the set of interest should provide a small
  10403. +performance boost. It also improves decode reliability - it is impossible to
  10404. +receive an incorrect or unexpected decode result from a symbology that is
  10405. +disabled.
  10406. +
  10407. +The reader does support full auto-discrimination among the supported
  10408. +symbologies, but with all of them enabled you may need to compensate elsewhere
  10409. +to get a good frame rate.
  10410. +
  10411. +For example, if you are only interested in QR codes, disable the others. The
  10412. +robust way to do this is by disabling *all* symbologies and then reenabling
  10413. +only those you want. This helps isolate you from encountering new symbologies
  10414. +that may be added in future versions of the library until you are ready to
  10415. +handle them::
  10416. +
  10417. + [scanner setSymbology: 0
  10418. + config: ZBAR_CFG_ENABLE
  10419. + to: 0];
  10420. + [scanner setSymbology: ZBAR_QRCODE
  10421. + config: ZBAR_CFG_ENABLE
  10422. + to: 1];
  10423. +
  10424. +Even if you would like your application to support multiple symbologies, you
  10425. +may consider if there is a way to limit the enabled subset based on the
  10426. +scanning context, etc...
  10427. +
  10428. +
  10429. +Examples
  10430. +--------
  10431. +
  10432. +These examples demonstrate several scenarios for scanning from the camera with
  10433. +automatic capture using iOS 4. You can try them yourself using the
  10434. +readertest. For each example, start with the default settings (by tapping the
  10435. +``ZBarReaderViewController`` class), then enable continuous mode and the
  10436. +custom overlay (by disabling
  10437. +:member:`~ZBarReaderViewController::showsZBarControls`). You should also use
  10438. +a release build and avoid running in the debugger.
  10439. +
  10440. +Frame rates are approximate, measured on an iPhone 3GS running iOS 4.0.1 in a
  10441. +well lit room. Two measurements are taken for each sample: the rate with the
  10442. +camera pointed at a blank white page such that it fills the frame, and the
  10443. +rate while continuously decoding the provided example. For best results, it
  10444. +is recommended that you print the examples rather than scanning them from the
  10445. +screen.
  10446. +
  10447. +For reference, the base frame rates with default settings are 12fps for a
  10448. +blank white page, 7.5fps for this `basic EAN symbol`_ and 2.2fps for this
  10449. +`basic QR symbol`_.
  10450. +
  10451. +.. _`basic EAN symbol`:
  10452. + http://zbar.sf.net/test/ean13/9876543210128.png
  10453. +.. _`basic QR symbol`:
  10454. + http://chart.apis.google.com/chart?cht=qr&chs=512x512&chl=http://zbar.sf.net/iphone
  10455. +
  10456. +Long Linear Symbols
  10457. +^^^^^^^^^^^^^^^^^^^
  10458. +
  10459. +For this example, we will use a relatively `long Code 128 barcode`_.
  10460. +
  10461. +.. _`long Code 128 barcode`:
  10462. + http://zbar.sf.net/test/code128/ALPHA.png
  10463. +
  10464. +While it should be possible to read this symbol with the default settings, you
  10465. +may notice that it is not very reliable. You will have to stretch the symbol
  10466. +across the entire screen, and even then the default settings will only give
  10467. +you about 1.6 pixels per module, well below the ideal target of 3. To improve
  10468. +these results, we want to maximize scanning resolution for the long image
  10469. +axis.
  10470. +
  10471. +1. Disable the default zoom/crop - zoom all the way out by hitting "Scan" and
  10472. + pinching the preview; the frame rate immediately drops to 8fps / 4.8fps.
  10473. +
  10474. +We should compensate for this reduction in the frame rate:
  10475. +
  10476. +2. Crop the image to a long, skinny rectangle - set the
  10477. + :member:`~ZBarReaderViewController::scanCrop` setting to
  10478. + ``{{0, 0.3}, {1, 0.4}}``; The frame rate jumps up to 18fps / 8.7fps.
  10479. +
  10480. +3. Disable scans across the short image axis - set the ``CFG_X_DENSITY``
  10481. + setting to 0. The frame rate goes all the way to 30fps / 13fps.
  10482. +
  10483. +Since we have plenty of margin with the frame rate, we can minimize the total
  10484. +decode latency by performing more scan passes through the symbol:
  10485. +
  10486. +4. Increase the scan density - set the ``CFG_Y_DENSITY`` setting to 1 (13.5fps
  10487. + / 5fps) or 2 (24fps / 9fps).
  10488. +
  10489. +You should now be able to quickly and reliably decode long linear symbols.
  10490. +
  10491. +If have an iPhone 4, you may also try increasing the resolution to support
  10492. +even longer symbols (NB there is no readertest setting for resolution). You
  10493. +may have to compensate elsewhere to bring the frame rate back to a reasonable
  10494. +level.
  10495. +
  10496. +High Density QR Symbols
  10497. +^^^^^^^^^^^^^^^^^^^^^^^
  10498. +
  10499. +For this example we will use a `version 29 QR Code symbol`_.
  10500. +
  10501. +.. _`version 29 QR Code symbol`:
  10502. + http://www.qrcomic.com/images/5.png
  10503. +
  10504. +In this case we still want to maximize the resolution, but we also need to
  10505. +increase the scan density to reliably pick up the small finder patterns:
  10506. +
  10507. +1. Maximize scan density in both directions - set the ``CFG_X_DENSITY`` and
  10508. + ``CFG_Y_DENSITY`` settings both to 1. You should be able to scan the symbol
  10509. + now, although the frame rate drops to 4.5fps / 1fps
  10510. +
  10511. +2. Disable the default zoom/crop - zoom all the way out by hitting "Scan" and
  10512. + pinching the preview; the frame rate drops further to 3fps / 0.7fps
  10513. +
  10514. +We can compensate somewhat for the reduced frame rate:
  10515. +
  10516. +3. Crop the image to a square - set ``scanCrop`` to ``{{0.125, 0}, {.75, 1}}``.
  10517. + This boosts the frame rate slightly to 3.7fps / 0.75fps.
  10518. +
  10519. +4. Disable linear symbologies - set the symbologies such that only QR Code is
  10520. + enabled (4fps / 1fps)
  10521. +
  10522. +Even though the frame rate is still pretty bad, the QR recognition latency
  10523. +should be acceptable.
  10524. +
  10525. +If have an iPhone 4, you may also try increasing the resolution to support
  10526. +even denser QR symbols (NB there is no readertest setting for resolution).
  10527. +You may have to compensate elsewhere to bring the frame rate back to a
  10528. +reasonable level.
  10529. +
  10530. +Small DataBar Symbols
  10531. +^^^^^^^^^^^^^^^^^^^^^
  10532. +
  10533. +For this example we will use a `DataBar symbol`_ printed with a small feature
  10534. +size, typical of the stickers used to tag produce. Scale it when printing
  10535. +such that the printed dimensions are about 1cm square. This symbol should
  10536. +scan with the default settings, but we will attempt to optimize the scan
  10537. +latency for this case.
  10538. +
  10539. +.. _`DataBar symbol`:
  10540. + http://zbar.sf.net/test/databar/0109876543210128-so.png
  10541. +
  10542. +As well as high barcode resolution, we also want high density passes in both
  10543. +directions to minimize sensitivity to rotation:
  10544. +
  10545. +1. Maximize scan density in both directions - set the ``CFG_X_DENSITY`` and
  10546. + ``CFG_Y_DENSITY`` settings both to 1. The frame rate drops to 4.5fps /
  10547. + 3fps.
  10548. +
  10549. +Compensate for the reduction in frame rate by zooming in on the small symbol,
  10550. +which crops the scanned image. Zooming also helps the user see the small
  10551. +barcode:
  10552. +
  10553. +2. Zoom all the way in - hit "Scan" and un-pinch the preview. The frame rate
  10554. + recovers to 11fps / 6.2fps.
  10555. +
  10556. +3. Crop the image to a square - set ``scanCrop`` to ``{{0.125, 0}, {0.75, 1}}``
  10557. + (14fps / 7.5fps)
  10558. +
  10559. +4. Disable all symbologies except DataBar and DataBar Expanded (14.5fps / 9fps)
  10560. +
  10561. +The reader should now be very sensitive to DataBar, even when scanned at an
  10562. +angle.
  10563. diff --git a/iphone/doc/picker.rst b/iphone/doc/picker.rst
  10564. new file mode 100644
  10565. --- /dev/null
  10566. +++ b/iphone/doc/picker.rst
  10567. @@ -0,0 +1,104 @@
  10568. +Scanning a User-Selected Image
  10569. +==============================
  10570. +
  10571. +Some applications may need the full resolution offered by camera snapshots, or
  10572. +need to scan an image from the user's photo library. In these cases you use a
  10573. +:class:`ZBarReaderController`. This reader is a *subclass* of
  10574. +:class:`UIImagePickerController`, and you use it the same way. See the
  10575. +documentation for :class:`UIImagePickerController` for more detais.
  10576. +
  10577. +1. Create the reader.
  10578. +
  10579. + This is as simple as creating a new :class:`ZBarReaderController`::
  10580. +
  10581. + ZBarReaderController *reader = [ZBarReaderController new];
  10582. +
  10583. +2. Setup a delegate to receive the results.
  10584. +
  10585. + The delegate should implement the :class:`ZBarReaderDelegate` protocol,
  10586. + which inherits from :class:`UIImagePickerControllerDelegate`::
  10587. +
  10588. + reader.readerDelegate = self;
  10589. +
  10590. +3. Configure the reader.
  10591. +
  10592. + You will need to set the :member:`~ZBarReaderController::sourceType`
  10593. + appropriately. Aside from the properties of the reader itself, you can
  10594. + configure the decoder via the :member:`~ZBarReaderController::scanner`
  10595. + property::
  10596. +
  10597. + if([ZBarReaderController isSourceTypeAvailable:
  10598. + UIImagePickerControllerSoureTypeCamera])
  10599. + reader.sourceType = UIImagePickerControllerSoureTypeCamera;
  10600. + [reader.scanner setSymbology: ZBAR_I25
  10601. + config: ZBAR_CFG_ENABLE
  10602. + to: 0];
  10603. +
  10604. + See :doc:`custom` and :doc:`optimizing` for more details.
  10605. +
  10606. +4. Present the reader to the user.
  10607. +
  10608. + As the reader is a UIImagePickerController, it must be presented modally::
  10609. +
  10610. + [self presentModalViewController: reader
  10611. + animated: YES];
  10612. +
  10613. +5. Process the results.
  10614. +
  10615. + The controller will call the
  10616. + :member:`imagePickerController:didFinishPickingMediaWithInfo:` method of
  10617. + your delegate for a successful decode (NB *not* every time the user takes a
  10618. + picture or selects an image). The barcode data can be obtained using the
  10619. + :c:data:`ZBarReaderControllerResults` key of the info dictionary. This key
  10620. + will return "something enumerable"; keep in mind that there may be multiple
  10621. + results. You may also retrieve the corresponding image with
  10622. + :c:data:`UIImagePickerControllerOriginalImage` as usual::
  10623. +
  10624. + - (void) imagePickerController: (UIImagePickerController*) reader
  10625. + didFinishPickingMediaWithInfo: (NSDictionary*) info
  10626. + {
  10627. + id<NSFastEnumeration> results =
  10628. + [info objectForKey: ZBarReaderControllerResults];
  10629. + UIImage *image =
  10630. + [info objectForKey: UIImagePickerControllerOriginalImage];
  10631. + ...
  10632. +
  10633. + The ``reader`` parameter will be the actual :class:`ZBarReaderController`
  10634. + (again, a subclass :class:`UIImagePickerController`).
  10635. +
  10636. + .. note::
  10637. +
  10638. + The delegate method should dismiss the reader and return as soon as
  10639. + possible; any processing of the results should be deferred until later,
  10640. + otherwise the user will experience unacceptable latency between the
  10641. + actual scan completion and the visual interface feedback.
  10642. +
  10643. +6. Dismiss the reader.
  10644. +
  10645. + Once you have the results you should dismiss the reader::
  10646. +
  10647. + [reader dismissModalViewControllerAnimated: YES];
  10648. +
  10649. + .. warning::
  10650. +
  10651. + It is very important to dismiss from the *reader* (not the presenting
  10652. + controller) to avoid corrupting the interface.
  10653. +
  10654. +
  10655. +Handling Failure
  10656. +----------------
  10657. +
  10658. +It is always possible the user selects/takes an image that does not contain
  10659. +barcodes, or that the image quality is not sufficient for the ZBar library to
  10660. +scan successfully.
  10661. +
  10662. +In this case, and if :member:`~ZBarReaderController::showsHelpOnFail` is
  10663. +``YES``, the integrated help controller will automatically be displayed with
  10664. +reason set to ``"FAIL"``.
  10665. +
  10666. +Your delegate may also choose to implement the optional
  10667. +``readerControllerDidFailToRead:withRetry:`` method to explicitly handle
  10668. +failures. If the ``retry`` parameter is ``NO``, you *must* dismiss the reader
  10669. +before returning, otherwise you may continue and allow the user to retry the
  10670. +operation. Note that, if it is enabled, the integrated help will be displayed
  10671. +when this delegate method is invoked.
  10672. diff --git a/iphone/doc/static/style.css b/iphone/doc/static/style.css
  10673. new file mode 100644
  10674. --- /dev/null
  10675. +++ b/iphone/doc/static/style.css
  10676. @@ -0,0 +1,36 @@
  10677. +@import url("default.css");
  10678. +
  10679. +h1, h2, h3, h4, h5, h6 {
  10680. + clear: both;
  10681. +}
  10682. +
  10683. +img.logo {
  10684. + vertical-align: middle;
  10685. +}
  10686. +
  10687. +img.floatright {
  10688. + float: right;
  10689. + clear: both;
  10690. + margin-left: 2em;
  10691. + margin-right: 2em;
  10692. +}
  10693. +
  10694. +dl.docutils dt {
  10695. + font-weight: bold;
  10696. +}
  10697. +dl.docutils dd {
  10698. + margin-top: 1em;
  10699. + margin-bottom: 1em;
  10700. +}
  10701. +
  10702. +table.docutils {
  10703. + margin-left: auto;
  10704. + margin-right: auto;
  10705. +}
  10706. +table.docutils th, table.docutils td {
  10707. + padding: .25em .5em;
  10708. +}
  10709. +
  10710. +table.docutils.field-list {
  10711. + margin-left: 0;
  10712. +}
  10713. diff --git a/iphone/doc/support.rst b/iphone/doc/support.rst
  10714. new file mode 100644
  10715. --- /dev/null
  10716. +++ b/iphone/doc/support.rst
  10717. @@ -0,0 +1,19 @@
  10718. +Obtaining Support
  10719. +=================
  10720. +
  10721. +If this documentation does not address your question/problem and you need
  10722. +support, please feel free to post in our `iPhone Developers Forum`_.
  10723. +
  10724. +.. _`iPhone Developers Forum`:
  10725. + http://sourceforge.net/projects/zbar/forums/forum/1072195
  10726. +
  10727. +When posting, please:
  10728. +
  10729. +* Check the :doc:`faq` and the rest of this documentation first.
  10730. +* Start a new thread for a new question - do not "hijack" an unrelated thread.
  10731. +* Post complete details of your problem - complete error messages as well as
  10732. + relevant source code and images.
  10733. +* Log-in to receive email, or check back within a day or so - you will almost
  10734. + always get a response.
  10735. +
  10736. +For the latest support information, please see http://zbar.sf.net/iphone
  10737. diff --git a/iphone/doc/tutorial.rst b/iphone/doc/tutorial.rst
  10738. new file mode 100644
  10739. --- /dev/null
  10740. +++ b/iphone/doc/tutorial.rst
  10741. @@ -0,0 +1,216 @@
  10742. +ZBar SDK Integration Tutorial
  10743. +=============================
  10744. +
  10745. +.. image:: ReaderSample.png
  10746. + :alt: Screenshot of the ReaderSample app
  10747. + :width: 414
  10748. + :height: 770
  10749. + :scale: 40
  10750. + :class: floatright
  10751. +
  10752. +This tutorial will quickly get you up and running with the ZBar iPhone SDK.
  10753. +
  10754. +We will develop a very simple app that presents a button the user can tap to
  10755. +invoke the barcode reader and then displays the results. Interface Builder
  10756. +will be used to create the interface.
  10757. +
  10758. +The completed project is also available with the distributed SDK under
  10759. +:file:`Examples/ReaderSample`.
  10760. +
  10761. +
  10762. +Create the App
  10763. +--------------
  10764. +
  10765. +1. Open Xcode; you must have version 3.2.3 or later.
  10766. +
  10767. +2. Create a new project using the "View-based Application" template. Name the
  10768. + project "ReaderSample". Save it wherever you like.
  10769. +
  10770. +3. Open :file:`ReaderSampleViewController.xib`
  10771. +
  10772. +4. Drag a Round Rect Button onto the view and title it "Scan". Customize the
  10773. + placement and appearance as you like.
  10774. +
  10775. +5. Drag an Image View onto the view. Size it to fill about half of the
  10776. + remaining space. Change the view mode to Aspect Fit.
  10777. +
  10778. +6. Drag a Text View onto the view and size it to fill the remaining space.
  10779. + Change the default text to "No barcode scanned" or something. De-select
  10780. + "Editable"
  10781. +
  10782. +7. Add connections to the interface elements in the code; open
  10783. + :file:`ReaderSampleViewController.h` and change the interface to::
  10784. +
  10785. + @interface ReaderSampleViewController : UIViewController
  10786. + {
  10787. + UIImageView *resultImage;
  10788. + UITextView *resultText;
  10789. + }
  10790. + @property (nonatomic, retain) IBOutlet UIImageView *resultImage;
  10791. + @property (nonatomic, retain) IBOutlet UITextView *resultText;
  10792. + - (IBAction) scanButtonTapped;
  10793. + @end
  10794. +
  10795. +8. Now we can finish the interface connections - open
  10796. + :file:`ReaderSampleViewController.xib` and make these connections:
  10797. +
  10798. + * Connect ReaderSampleViewController ``resultImage`` outlet to the
  10799. + ImageView.
  10800. + * Connect ReaderSampleViewController ``resultText`` outlet to the TextView.
  10801. + * Connect ReaderSampleViewController ``scanButtonTapped`` action to the
  10802. + RoundedRectButton(Scan) event ``TouchUpInside``.
  10803. +
  10804. + Consult the Xcode documentation if you need help making these connections.
  10805. + Make sure you save the XIB once they are finished.
  10806. +
  10807. +9. Finish the implementation in :file:`ReaderSampleViewController.m`::
  10808. +
  10809. + @synthesize resultImage, resultText;
  10810. +
  10811. + - (IBAction) scanButtonTapped
  10812. + {
  10813. + NSLog(@"TBD: scan barcode here...");
  10814. + }
  10815. +
  10816. + - (void) dealloc {
  10817. + self.resultImage = nil;
  10818. + self.resultText = nil;
  10819. + [super dealloc];
  10820. + }
  10821. +
  10822. + This stub for scanButtonTapped is temporary, we'll fix it in a minute...
  10823. +
  10824. +Although it doesn't do much yet, you should now have a working skeleton app
  10825. +that you can build and run.
  10826. +
  10827. +
  10828. +Integrate the Reader
  10829. +--------------------
  10830. +
  10831. +Now for the exciting part - let's add a barcode reader!
  10832. +
  10833. +1. If you have not done so already, download the latest SDK from
  10834. + http://zbar.sourceforge.net/iphone
  10835. +
  10836. +2. Double-click the disk image, ZBarSDK-|version|.dmg in the Finder to open it.
  10837. +
  10838. +3. Drag the :file:`ZBarSDK` folder into your Xcode project. Make sure that
  10839. + the "Copy Items into destination group's folder" checkbox is checked.
  10840. +
  10841. +4. Right-click the ``Frameworks`` group in your project. Select
  10842. + ``Add -> Existing Frameworks...`` Make sure "All" are listed and add each
  10843. + of these from the ``Device`` list (NB hold down command for multiple
  10844. + selection):
  10845. +
  10846. + * AVFoundation.framework
  10847. + * CoreMedia.framework
  10848. + * CoreVideo.framework
  10849. + * QuartzCore.framework
  10850. + * libiconv.dylib
  10851. +
  10852. +5. Import the SDK header. You will usually want to prefix it, so add it to
  10853. + :file:`ReaderSample_prefix.pch`::
  10854. +
  10855. + // ADD: import barcode reader APIs
  10856. + #import "ZBarSDK.h"
  10857. +
  10858. +6. Declare support for the delegate protocol in
  10859. + :file:`ReaderSampleViewController.h`::
  10860. +
  10861. + @interface ReaderSampleViewController : UIViewController
  10862. + // ADD: delegate protocol
  10863. + < ZBarReaderDelegate >
  10864. + {
  10865. + ...
  10866. +
  10867. +7. Re-implement scanButtonTapped to present a barcode reader when the user
  10868. + taps the Scan button. In :file:`ReaderSampleViewController.m`::
  10869. +
  10870. + - (IBAction) scanButtonTapped
  10871. + {
  10872. + // ADD: present a barcode reader that scans from the camera feed
  10873. + ZBarReaderViewController *reader = [ZBarReaderViewController new];
  10874. + reader.readerDelegate = self;
  10875. +
  10876. + ZBarImageScanner *scanner = reader.scanner;
  10877. + // TODO: (optional) additional reader configuration here
  10878. +
  10879. + // EXAMPLE: disable rarely used I2/5 to improve performance
  10880. + [scanner setSymbology: ZBAR_I25
  10881. + config: ZBAR_CFG_ENABLE
  10882. + to: 0];
  10883. +
  10884. + // present and release the controller
  10885. + [self presentModalViewController: reader
  10886. + animated: YES];
  10887. + [reader release];
  10888. + }
  10889. +
  10890. +8. Finally, implement the delegate method to do something useful with the
  10891. + results. Still in :file:`ReaderSampleViewController.m`::
  10892. +
  10893. + - (void) imagePickerController: (UIImagePickerController*) reader
  10894. + didFinishPickingMediaWithInfo: (NSDictionary*) info
  10895. + {
  10896. + // ADD: get the decode results
  10897. + id<NSFastEnumeration> results =
  10898. + [info objectForKey: ZBarReaderControllerResults];
  10899. + ZBarSymbol *symbol = nil;
  10900. + for(symbol in results)
  10901. + // EXAMPLE: just grab the first barcode
  10902. + break;
  10903. +
  10904. + // EXAMPLE: do something useful with the barcode data
  10905. + resultText.text = symbol.data;
  10906. +
  10907. + // EXAMPLE: do something useful with the barcode image
  10908. + resultImage.image =
  10909. + [info objectForKey: UIImagePickerControllerOriginalImage];
  10910. +
  10911. + // ADD: dismiss the controller (NB dismiss from the *reader*!)
  10912. + [reader dismissModalViewControllerAnimated: YES];
  10913. + }
  10914. +
  10915. +And that's it!
  10916. +
  10917. +
  10918. +Testing
  10919. +-------
  10920. +
  10921. +1. Save everything (don't forget to save MyAppViewController.xib).
  10922. +
  10923. +2. Select "Build and Run".
  10924. +
  10925. +3. Tap the Scan button.
  10926. +
  10927. +4. Aim at barcode.
  10928. +
  10929. +5. Enjoy the sweet fruits of your minimal labor
  10930. +
  10931. +
  10932. +Where to go from here
  10933. +---------------------
  10934. +
  10935. +You can learn more about using the reader APIs to scan barcodes from
  10936. +:doc:`camera` or :doc:`picker`. Use the :doc:`apiref` to find details about a
  10937. +particular interface.
  10938. +
  10939. +
  10940. +Troubleshooting
  10941. +---------------
  10942. +
  10943. +We take great care to ensure this tutorial is working as described. However,
  10944. +if you do have a problem
  10945. +
  10946. +1. Make sure you followed the instructions exactly - every detail is
  10947. + important.
  10948. +2. Start from scratch with a new project and follow the instructions
  10949. + *exactly*.
  10950. +3. Try the ReaderSample distributed with the SDK and compare your work with
  10951. + that.
  10952. +4. If you are unable to get things working, you may post your frustrations in
  10953. + the project `iPhone Developers Forum`_. Please be very specific about your
  10954. + problem, post the complete text of any errors, etc.
  10955. +
  10956. +.. _`iPhone Developers Forum`:
  10957. + http://sourceforge.net/projects/zbar/forums/forum/1072195
  10958. diff --git a/iphone/examples/ReaderSample/Classes/ReaderSampleAppDelegate.h b/iphone/examples/ReaderSample/Classes/ReaderSampleAppDelegate.h
  10959. new file mode 100644
  10960. --- /dev/null
  10961. +++ b/iphone/examples/ReaderSample/Classes/ReaderSampleAppDelegate.h
  10962. @@ -0,0 +1,21 @@
  10963. +//
  10964. +// ReaderSampleAppDelegate.h
  10965. +// ReaderSample
  10966. +//
  10967. +// Created by spadix on 8/4/10.
  10968. +//
  10969. +
  10970. +#import <UIKit/UIKit.h>
  10971. +
  10972. +@class ReaderSampleViewController;
  10973. +
  10974. +@interface ReaderSampleAppDelegate : NSObject <UIApplicationDelegate> {
  10975. + UIWindow *window;
  10976. + ReaderSampleViewController *viewController;
  10977. +}
  10978. +
  10979. +@property (nonatomic, retain) IBOutlet UIWindow *window;
  10980. +@property (nonatomic, retain) IBOutlet ReaderSampleViewController *viewController;
  10981. +
  10982. +@end
  10983. +
  10984. diff --git a/iphone/examples/ReaderSample/Classes/ReaderSampleAppDelegate.m b/iphone/examples/ReaderSample/Classes/ReaderSampleAppDelegate.m
  10985. new file mode 100644
  10986. --- /dev/null
  10987. +++ b/iphone/examples/ReaderSample/Classes/ReaderSampleAppDelegate.m
  10988. @@ -0,0 +1,86 @@
  10989. +//
  10990. +// ReaderSampleAppDelegate.m
  10991. +// ReaderSample
  10992. +//
  10993. +// Created by spadix on 8/4/10.
  10994. +//
  10995. +
  10996. +#import "ReaderSampleAppDelegate.h"
  10997. +#import "ReaderSampleViewController.h"
  10998. +
  10999. +@implementation ReaderSampleAppDelegate
  11000. +
  11001. +@synthesize window;
  11002. +@synthesize viewController;
  11003. +
  11004. +
  11005. +#pragma mark -
  11006. +#pragma mark Application lifecycle
  11007. +
  11008. +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  11009. + // Override point for customization after application launch.
  11010. +
  11011. + // Add the view controller's view to the window and display.
  11012. + [window addSubview:viewController.view];
  11013. + [window makeKeyAndVisible];
  11014. +
  11015. + return YES;
  11016. +}
  11017. +
  11018. +
  11019. +- (void)applicationWillResignActive:(UIApplication *)application {
  11020. + /*
  11021. + Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
  11022. + Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
  11023. + */
  11024. +}
  11025. +
  11026. +
  11027. +- (void)applicationDidEnterBackground:(UIApplication *)application {
  11028. + /*
  11029. + Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
  11030. + If your application supports background execution, called instead of applicationWillTerminate: when the user quits.
  11031. + */
  11032. +}
  11033. +
  11034. +
  11035. +- (void)applicationWillEnterForeground:(UIApplication *)application {
  11036. + /*
  11037. + Called as part of transition from the background to the inactive state: here you can undo many of the changes made on entering the background.
  11038. + */
  11039. +}
  11040. +
  11041. +
  11042. +- (void)applicationDidBecomeActive:(UIApplication *)application {
  11043. + /*
  11044. + Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
  11045. + */
  11046. +}
  11047. +
  11048. +
  11049. +- (void)applicationWillTerminate:(UIApplication *)application {
  11050. + /*
  11051. + Called when the application is about to terminate.
  11052. + See also applicationDidEnterBackground:.
  11053. + */
  11054. +}
  11055. +
  11056. +
  11057. +#pragma mark -
  11058. +#pragma mark Memory management
  11059. +
  11060. +- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
  11061. + /*
  11062. + Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later.
  11063. + */
  11064. +}
  11065. +
  11066. +
  11067. +- (void)dealloc {
  11068. + [viewController release];
  11069. + [window release];
  11070. + [super dealloc];
  11071. +}
  11072. +
  11073. +
  11074. +@end
  11075. diff --git a/iphone/examples/ReaderSample/Classes/ReaderSampleViewController.h b/iphone/examples/ReaderSample/Classes/ReaderSampleViewController.h
  11076. new file mode 100644
  11077. --- /dev/null
  11078. +++ b/iphone/examples/ReaderSample/Classes/ReaderSampleViewController.h
  11079. @@ -0,0 +1,21 @@
  11080. +//
  11081. +// ReaderSampleViewController.h
  11082. +// ReaderSample
  11083. +//
  11084. +// Created by spadix on 8/4/10.
  11085. +//
  11086. +
  11087. +#import <UIKit/UIKit.h>
  11088. +
  11089. +@interface ReaderSampleViewController
  11090. + : UIViewController
  11091. + // ADD: delegate protocol
  11092. + < ZBarReaderDelegate >
  11093. +{
  11094. + UIImageView *resultImage;
  11095. + UITextView *resultText;
  11096. +}
  11097. +@property (nonatomic, retain) IBOutlet UIImageView *resultImage;
  11098. +@property (nonatomic, retain) IBOutlet UITextView *resultText;
  11099. +- (IBAction) scanButtonTapped;
  11100. +@end
  11101. diff --git a/iphone/examples/ReaderSample/Classes/ReaderSampleViewController.m b/iphone/examples/ReaderSample/Classes/ReaderSampleViewController.m
  11102. new file mode 100644
  11103. --- /dev/null
  11104. +++ b/iphone/examples/ReaderSample/Classes/ReaderSampleViewController.m
  11105. @@ -0,0 +1,68 @@
  11106. +//
  11107. +// ReaderSampleViewController.m
  11108. +// ReaderSample
  11109. +//
  11110. +// Created by spadix on 8/4/10.
  11111. +//
  11112. +
  11113. +#import "ReaderSampleViewController.h"
  11114. +
  11115. +@implementation ReaderSampleViewController
  11116. +
  11117. +@synthesize resultImage, resultText;
  11118. +
  11119. +- (IBAction) scanButtonTapped
  11120. +{
  11121. + // ADD: present a barcode reader that scans from the camera feed
  11122. + ZBarReaderViewController *reader = [ZBarReaderViewController new];
  11123. + reader.readerDelegate = self;
  11124. +
  11125. + ZBarImageScanner *scanner = reader.scanner;
  11126. + // TODO: (optional) additional reader configuration here
  11127. +
  11128. + // EXAMPLE: disable rarely used I2/5 to improve performance
  11129. + [scanner setSymbology: ZBAR_I25
  11130. + config: ZBAR_CFG_ENABLE
  11131. + to: 0];
  11132. +
  11133. + // present and release the controller
  11134. + [self presentModalViewController: reader
  11135. + animated: YES];
  11136. + [reader release];
  11137. +}
  11138. +
  11139. +- (void) imagePickerController: (UIImagePickerController*) reader
  11140. + didFinishPickingMediaWithInfo: (NSDictionary*) info
  11141. +{
  11142. + // ADD: get the decode results
  11143. + id<NSFastEnumeration> results =
  11144. + [info objectForKey: ZBarReaderControllerResults];
  11145. + ZBarSymbol *symbol = nil;
  11146. + for(symbol in results)
  11147. + // EXAMPLE: just grab the first barcode
  11148. + break;
  11149. +
  11150. + // EXAMPLE: do something useful with the barcode data
  11151. + resultText.text = symbol.data;
  11152. +
  11153. + // EXAMPLE: do something useful with the barcode image
  11154. + resultImage.image =
  11155. + [info objectForKey: UIImagePickerControllerOriginalImage];
  11156. +
  11157. + // ADD: dismiss the controller (NB dismiss from the *reader*!)
  11158. + [reader dismissModalViewControllerAnimated: YES];
  11159. +}
  11160. +
  11161. +- (void)didReceiveMemoryWarning {
  11162. + // Releases the view if it doesn't have a superview.
  11163. + [super didReceiveMemoryWarning];
  11164. + // Release any cached data, images, etc that aren't in use.
  11165. +}
  11166. +
  11167. +- (void)dealloc {
  11168. + self.resultImage = nil;
  11169. + self.resultText = nil;
  11170. + [super dealloc];
  11171. +}
  11172. +
  11173. +@end
  11174. diff --git a/iphone/examples/ReaderSample/MainWindow.xib b/iphone/examples/ReaderSample/MainWindow.xib
  11175. new file mode 100644
  11176. --- /dev/null
  11177. +++ b/iphone/examples/ReaderSample/MainWindow.xib
  11178. @@ -0,0 +1,444 @@
  11179. +<?xml version="1.0" encoding="UTF-8"?>
  11180. +<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
  11181. + <data>
  11182. + <int key="IBDocument.SystemTarget">1024</int>
  11183. + <string key="IBDocument.SystemVersion">10D571</string>
  11184. + <string key="IBDocument.InterfaceBuilderVersion">786</string>
  11185. + <string key="IBDocument.AppKitVersion">1038.29</string>
  11186. + <string key="IBDocument.HIToolboxVersion">460.00</string>
  11187. + <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
  11188. + <string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  11189. + <string key="NS.object.0">112</string>
  11190. + </object>
  11191. + <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
  11192. + <bool key="EncodedWithXMLCoder">YES</bool>
  11193. + <integer value="10"/>
  11194. + </object>
  11195. + <object class="NSArray" key="IBDocument.PluginDependencies">
  11196. + <bool key="EncodedWithXMLCoder">YES</bool>
  11197. + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  11198. + </object>
  11199. + <object class="NSMutableDictionary" key="IBDocument.Metadata">
  11200. + <bool key="EncodedWithXMLCoder">YES</bool>
  11201. + <object class="NSArray" key="dict.sortedKeys" id="0">
  11202. + <bool key="EncodedWithXMLCoder">YES</bool>
  11203. + </object>
  11204. + <object class="NSMutableArray" key="dict.values">
  11205. + <bool key="EncodedWithXMLCoder">YES</bool>
  11206. + </object>
  11207. + </object>
  11208. + <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
  11209. + <bool key="EncodedWithXMLCoder">YES</bool>
  11210. + <object class="IBProxyObject" id="841351856">
  11211. + <string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
  11212. + <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
  11213. + </object>
  11214. + <object class="IBProxyObject" id="427554174">
  11215. + <string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
  11216. + <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
  11217. + </object>
  11218. + <object class="IBUICustomObject" id="664661524">
  11219. + <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
  11220. + </object>
  11221. + <object class="IBUIViewController" id="943309135">
  11222. + <string key="IBUINibName">ReaderSampleViewController</string>
  11223. + <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
  11224. + <object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
  11225. + <int key="interfaceOrientation">1</int>
  11226. + </object>
  11227. + <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
  11228. + <bool key="IBUIHorizontal">NO</bool>
  11229. + </object>
  11230. + <object class="IBUIWindow" id="117978783">
  11231. + <nil key="NSNextResponder"/>
  11232. + <int key="NSvFlags">292</int>
  11233. + <string key="NSFrameSize">{320, 480}</string>
  11234. + <object class="NSColor" key="IBUIBackgroundColor">
  11235. + <int key="NSColorSpace">1</int>
  11236. + <bytes key="NSRGB">MSAxIDEAA</bytes>
  11237. + </object>
  11238. + <bool key="IBUIOpaque">NO</bool>
  11239. + <bool key="IBUIClearsContextBeforeDrawing">NO</bool>
  11240. + <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
  11241. + <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
  11242. + <bool key="IBUIResizesToFullScreen">YES</bool>
  11243. + </object>
  11244. + </object>
  11245. + <object class="IBObjectContainer" key="IBDocument.Objects">
  11246. + <object class="NSMutableArray" key="connectionRecords">
  11247. + <bool key="EncodedWithXMLCoder">YES</bool>
  11248. + <object class="IBConnectionRecord">
  11249. + <object class="IBCocoaTouchOutletConnection" key="connection">
  11250. + <string key="label">delegate</string>
  11251. + <reference key="source" ref="841351856"/>
  11252. + <reference key="destination" ref="664661524"/>
  11253. + </object>
  11254. + <int key="connectionID">4</int>
  11255. + </object>
  11256. + <object class="IBConnectionRecord">
  11257. + <object class="IBCocoaTouchOutletConnection" key="connection">
  11258. + <string key="label">viewController</string>
  11259. + <reference key="source" ref="664661524"/>
  11260. + <reference key="destination" ref="943309135"/>
  11261. + </object>
  11262. + <int key="connectionID">11</int>
  11263. + </object>
  11264. + <object class="IBConnectionRecord">
  11265. + <object class="IBCocoaTouchOutletConnection" key="connection">
  11266. + <string key="label">window</string>
  11267. + <reference key="source" ref="664661524"/>
  11268. + <reference key="destination" ref="117978783"/>
  11269. + </object>
  11270. + <int key="connectionID">14</int>
  11271. + </object>
  11272. + </object>
  11273. + <object class="IBMutableOrderedSet" key="objectRecords">
  11274. + <object class="NSArray" key="orderedObjects">
  11275. + <bool key="EncodedWithXMLCoder">YES</bool>
  11276. + <object class="IBObjectRecord">
  11277. + <int key="objectID">0</int>
  11278. + <reference key="object" ref="0"/>
  11279. + <reference key="children" ref="1000"/>
  11280. + <nil key="parent"/>
  11281. + </object>
  11282. + <object class="IBObjectRecord">
  11283. + <int key="objectID">-1</int>
  11284. + <reference key="object" ref="841351856"/>
  11285. + <reference key="parent" ref="0"/>
  11286. + <string key="objectName">File's Owner</string>
  11287. + </object>
  11288. + <object class="IBObjectRecord">
  11289. + <int key="objectID">3</int>
  11290. + <reference key="object" ref="664661524"/>
  11291. + <reference key="parent" ref="0"/>
  11292. + <string key="objectName">ReaderSample App Delegate</string>
  11293. + </object>
  11294. + <object class="IBObjectRecord">
  11295. + <int key="objectID">-2</int>
  11296. + <reference key="object" ref="427554174"/>
  11297. + <reference key="parent" ref="0"/>
  11298. + </object>
  11299. + <object class="IBObjectRecord">
  11300. + <int key="objectID">10</int>
  11301. + <reference key="object" ref="943309135"/>
  11302. + <reference key="parent" ref="0"/>
  11303. + </object>
  11304. + <object class="IBObjectRecord">
  11305. + <int key="objectID">12</int>
  11306. + <reference key="object" ref="117978783"/>
  11307. + <reference key="parent" ref="0"/>
  11308. + </object>
  11309. + </object>
  11310. + </object>
  11311. + <object class="NSMutableDictionary" key="flattenedProperties">
  11312. + <bool key="EncodedWithXMLCoder">YES</bool>
  11313. + <object class="NSArray" key="dict.sortedKeys">
  11314. + <bool key="EncodedWithXMLCoder">YES</bool>
  11315. + <string>-1.CustomClassName</string>
  11316. + <string>-2.CustomClassName</string>
  11317. + <string>10.CustomClassName</string>
  11318. + <string>10.IBEditorWindowLastContentRect</string>
  11319. + <string>10.IBPluginDependency</string>
  11320. + <string>12.IBEditorWindowLastContentRect</string>
  11321. + <string>12.IBPluginDependency</string>
  11322. + <string>3.CustomClassName</string>
  11323. + <string>3.IBPluginDependency</string>
  11324. + </object>
  11325. + <object class="NSMutableArray" key="dict.values">
  11326. + <bool key="EncodedWithXMLCoder">YES</bool>
  11327. + <string>UIApplication</string>
  11328. + <string>UIResponder</string>
  11329. + <string>ReaderSampleViewController</string>
  11330. + <string>{{234, 376}, {320, 480}}</string>
  11331. + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  11332. + <string>{{525, 346}, {320, 480}}</string>
  11333. + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  11334. + <string>ReaderSampleAppDelegate</string>
  11335. + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  11336. + </object>
  11337. + </object>
  11338. + <object class="NSMutableDictionary" key="unlocalizedProperties">
  11339. + <bool key="EncodedWithXMLCoder">YES</bool>
  11340. + <reference key="dict.sortedKeys" ref="0"/>
  11341. + <object class="NSMutableArray" key="dict.values">
  11342. + <bool key="EncodedWithXMLCoder">YES</bool>
  11343. + </object>
  11344. + </object>
  11345. + <nil key="activeLocalization"/>
  11346. + <object class="NSMutableDictionary" key="localizations">
  11347. + <bool key="EncodedWithXMLCoder">YES</bool>
  11348. + <reference key="dict.sortedKeys" ref="0"/>
  11349. + <object class="NSMutableArray" key="dict.values">
  11350. + <bool key="EncodedWithXMLCoder">YES</bool>
  11351. + </object>
  11352. + </object>
  11353. + <nil key="sourceID"/>
  11354. + <int key="maxID">15</int>
  11355. + </object>
  11356. + <object class="IBClassDescriber" key="IBDocument.Classes">
  11357. + <object class="NSMutableArray" key="referencedPartialClassDescriptions">
  11358. + <bool key="EncodedWithXMLCoder">YES</bool>
  11359. + <object class="IBPartialClassDescription">
  11360. + <string key="className">UIWindow</string>
  11361. + <string key="superclassName">UIView</string>
  11362. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11363. + <string key="majorKey">IBUserSource</string>
  11364. + <string key="minorKey"/>
  11365. + </object>
  11366. + </object>
  11367. + <object class="IBPartialClassDescription">
  11368. + <string key="className">ReaderSampleAppDelegate</string>
  11369. + <string key="superclassName">NSObject</string>
  11370. + <object class="NSMutableDictionary" key="outlets">
  11371. + <bool key="EncodedWithXMLCoder">YES</bool>
  11372. + <object class="NSArray" key="dict.sortedKeys">
  11373. + <bool key="EncodedWithXMLCoder">YES</bool>
  11374. + <string>viewController</string>
  11375. + <string>window</string>
  11376. + </object>
  11377. + <object class="NSMutableArray" key="dict.values">
  11378. + <bool key="EncodedWithXMLCoder">YES</bool>
  11379. + <string>ReaderSampleViewController</string>
  11380. + <string>UIWindow</string>
  11381. + </object>
  11382. + </object>
  11383. + <object class="NSMutableDictionary" key="toOneOutletInfosByName">
  11384. + <bool key="EncodedWithXMLCoder">YES</bool>
  11385. + <object class="NSArray" key="dict.sortedKeys">
  11386. + <bool key="EncodedWithXMLCoder">YES</bool>
  11387. + <string>viewController</string>
  11388. + <string>window</string>
  11389. + </object>
  11390. + <object class="NSMutableArray" key="dict.values">
  11391. + <bool key="EncodedWithXMLCoder">YES</bool>
  11392. + <object class="IBToOneOutletInfo">
  11393. + <string key="name">viewController</string>
  11394. + <string key="candidateClassName">ReaderSampleViewController</string>
  11395. + </object>
  11396. + <object class="IBToOneOutletInfo">
  11397. + <string key="name">window</string>
  11398. + <string key="candidateClassName">UIWindow</string>
  11399. + </object>
  11400. + </object>
  11401. + </object>
  11402. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11403. + <string key="majorKey">IBProjectSource</string>
  11404. + <string key="minorKey">Classes/ReaderSampleAppDelegate.h</string>
  11405. + </object>
  11406. + </object>
  11407. + <object class="IBPartialClassDescription">
  11408. + <string key="className">ReaderSampleAppDelegate</string>
  11409. + <string key="superclassName">NSObject</string>
  11410. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11411. + <string key="majorKey">IBUserSource</string>
  11412. + <string key="minorKey"/>
  11413. + </object>
  11414. + </object>
  11415. + <object class="IBPartialClassDescription">
  11416. + <string key="className">ReaderSampleViewController</string>
  11417. + <string key="superclassName">UIViewController</string>
  11418. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11419. + <string key="majorKey">IBProjectSource</string>
  11420. + <string key="minorKey">Classes/ReaderSampleViewController.h</string>
  11421. + </object>
  11422. + </object>
  11423. + </object>
  11424. + <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
  11425. + <bool key="EncodedWithXMLCoder">YES</bool>
  11426. + <object class="IBPartialClassDescription">
  11427. + <string key="className">NSObject</string>
  11428. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11429. + <string key="majorKey">IBFrameworkSource</string>
  11430. + <string key="minorKey">Foundation.framework/Headers/NSError.h</string>
  11431. + </object>
  11432. + </object>
  11433. + <object class="IBPartialClassDescription">
  11434. + <string key="className">NSObject</string>
  11435. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11436. + <string key="majorKey">IBFrameworkSource</string>
  11437. + <string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
  11438. + </object>
  11439. + </object>
  11440. + <object class="IBPartialClassDescription">
  11441. + <string key="className">NSObject</string>
  11442. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11443. + <string key="majorKey">IBFrameworkSource</string>
  11444. + <string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
  11445. + </object>
  11446. + </object>
  11447. + <object class="IBPartialClassDescription">
  11448. + <string key="className">NSObject</string>
  11449. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11450. + <string key="majorKey">IBFrameworkSource</string>
  11451. + <string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
  11452. + </object>
  11453. + </object>
  11454. + <object class="IBPartialClassDescription">
  11455. + <string key="className">NSObject</string>
  11456. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11457. + <string key="majorKey">IBFrameworkSource</string>
  11458. + <string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
  11459. + </object>
  11460. + </object>
  11461. + <object class="IBPartialClassDescription">
  11462. + <string key="className">NSObject</string>
  11463. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11464. + <string key="majorKey">IBFrameworkSource</string>
  11465. + <string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
  11466. + </object>
  11467. + </object>
  11468. + <object class="IBPartialClassDescription">
  11469. + <string key="className">NSObject</string>
  11470. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11471. + <string key="majorKey">IBFrameworkSource</string>
  11472. + <string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
  11473. + </object>
  11474. + </object>
  11475. + <object class="IBPartialClassDescription">
  11476. + <string key="className">NSObject</string>
  11477. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11478. + <string key="majorKey">IBFrameworkSource</string>
  11479. + <string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
  11480. + </object>
  11481. + </object>
  11482. + <object class="IBPartialClassDescription">
  11483. + <string key="className">NSObject</string>
  11484. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11485. + <string key="majorKey">IBFrameworkSource</string>
  11486. + <string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
  11487. + </object>
  11488. + </object>
  11489. + <object class="IBPartialClassDescription">
  11490. + <string key="className">NSObject</string>
  11491. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11492. + <string key="majorKey">IBFrameworkSource</string>
  11493. + <string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
  11494. + </object>
  11495. + </object>
  11496. + <object class="IBPartialClassDescription">
  11497. + <string key="className">NSObject</string>
  11498. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11499. + <string key="majorKey">IBFrameworkSource</string>
  11500. + <string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
  11501. + </object>
  11502. + </object>
  11503. + <object class="IBPartialClassDescription">
  11504. + <string key="className">NSObject</string>
  11505. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11506. + <string key="majorKey">IBFrameworkSource</string>
  11507. + <string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
  11508. + </object>
  11509. + </object>
  11510. + <object class="IBPartialClassDescription">
  11511. + <string key="className">NSObject</string>
  11512. + <object class="IBClassDescriptionSource" key="sourceIdentifier" id="356479594">
  11513. + <string key="majorKey">IBFrameworkSource</string>
  11514. + <string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
  11515. + </object>
  11516. + </object>
  11517. + <object class="IBPartialClassDescription">
  11518. + <string key="className">UIApplication</string>
  11519. + <string key="superclassName">UIResponder</string>
  11520. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11521. + <string key="majorKey">IBFrameworkSource</string>
  11522. + <string key="minorKey">UIKit.framework/Headers/UIApplication.h</string>
  11523. + </object>
  11524. + </object>
  11525. + <object class="IBPartialClassDescription">
  11526. + <string key="className">UIResponder</string>
  11527. + <string key="superclassName">NSObject</string>
  11528. + <reference key="sourceIdentifier" ref="356479594"/>
  11529. + </object>
  11530. + <object class="IBPartialClassDescription">
  11531. + <string key="className">UISearchBar</string>
  11532. + <string key="superclassName">UIView</string>
  11533. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11534. + <string key="majorKey">IBFrameworkSource</string>
  11535. + <string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
  11536. + </object>
  11537. + </object>
  11538. + <object class="IBPartialClassDescription">
  11539. + <string key="className">UISearchDisplayController</string>
  11540. + <string key="superclassName">NSObject</string>
  11541. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11542. + <string key="majorKey">IBFrameworkSource</string>
  11543. + <string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
  11544. + </object>
  11545. + </object>
  11546. + <object class="IBPartialClassDescription">
  11547. + <string key="className">UIView</string>
  11548. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11549. + <string key="majorKey">IBFrameworkSource</string>
  11550. + <string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
  11551. + </object>
  11552. + </object>
  11553. + <object class="IBPartialClassDescription">
  11554. + <string key="className">UIView</string>
  11555. + <string key="superclassName">UIResponder</string>
  11556. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11557. + <string key="majorKey">IBFrameworkSource</string>
  11558. + <string key="minorKey">UIKit.framework/Headers/UIView.h</string>
  11559. + </object>
  11560. + </object>
  11561. + <object class="IBPartialClassDescription">
  11562. + <string key="className">UIViewController</string>
  11563. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11564. + <string key="majorKey">IBFrameworkSource</string>
  11565. + <string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
  11566. + </object>
  11567. + </object>
  11568. + <object class="IBPartialClassDescription">
  11569. + <string key="className">UIViewController</string>
  11570. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11571. + <string key="majorKey">IBFrameworkSource</string>
  11572. + <string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
  11573. + </object>
  11574. + </object>
  11575. + <object class="IBPartialClassDescription">
  11576. + <string key="className">UIViewController</string>
  11577. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11578. + <string key="majorKey">IBFrameworkSource</string>
  11579. + <string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
  11580. + </object>
  11581. + </object>
  11582. + <object class="IBPartialClassDescription">
  11583. + <string key="className">UIViewController</string>
  11584. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11585. + <string key="majorKey">IBFrameworkSource</string>
  11586. + <string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
  11587. + </object>
  11588. + </object>
  11589. + <object class="IBPartialClassDescription">
  11590. + <string key="className">UIViewController</string>
  11591. + <string key="superclassName">UIResponder</string>
  11592. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11593. + <string key="majorKey">IBFrameworkSource</string>
  11594. + <string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
  11595. + </object>
  11596. + </object>
  11597. + <object class="IBPartialClassDescription">
  11598. + <string key="className">UIWindow</string>
  11599. + <string key="superclassName">UIView</string>
  11600. + <object class="IBClassDescriptionSource" key="sourceIdentifier">
  11601. + <string key="majorKey">IBFrameworkSource</string>
  11602. + <string key="minorKey">UIKit.framework/Headers/UIWindow.h</string>
  11603. + </object>
  11604. + </object>
  11605. + </object>
  11606. + </object>
  11607. + <int key="IBDocument.localizationMode">0</int>
  11608. + <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
  11609. + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
  11610. + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
  11611. + <integer value="1024" key="NS.object.0"/>
  11612. + </object>
  11613. + <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
  11614. + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
  11615. + <integer value="3100" key="NS.object.0"/>
  11616. + </object>
  11617. + <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
  11618. + <string key="IBDocument.LastKnownRelativeProjectPath">ReaderSample.xcodeproj</string>
  11619. + <int key="IBDocument.defaultPropertyAccessControl">3</int>
  11620. + <string key="IBCocoaTouchPluginVersion">112</string>
  11621. + </data>
  11622. +</archive>
  11623. diff --git a/iphone/examples/ReaderSample/ReaderSample-Info.plist b/iphone/examples/ReaderSample/ReaderSample-Info.plist
  11624. new file mode 100644
  11625. --- /dev/null
  11626. +++ b/iphone/examples/ReaderSample/ReaderSample-Info.plist
  11627. @@ -0,0 +1,30 @@
  11628. +<?xml version="1.0" encoding="UTF-8"?>
  11629. +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  11630. +<plist version="1.0">
  11631. +<dict>
  11632. + <key>CFBundleDevelopmentRegion</key>
  11633. + <string>English</string>
  11634. + <key>CFBundleDisplayName</key>
  11635. + <string>${PRODUCT_NAME}</string>
  11636. + <key>CFBundleExecutable</key>
  11637. + <string>${EXECUTABLE_NAME}</string>
  11638. + <key>CFBundleIconFile</key>
  11639. + <string></string>
  11640. + <key>CFBundleIdentifier</key>
  11641. + <string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string>
  11642. + <key>CFBundleInfoDictionaryVersion</key>
  11643. + <string>6.0</string>
  11644. + <key>CFBundleName</key>
  11645. + <string>${PRODUCT_NAME}</string>
  11646. + <key>CFBundlePackageType</key>
  11647. + <string>APPL</string>
  11648. + <key>CFBundleSignature</key>
  11649. + <string>????</string>
  11650. + <key>CFBundleVersion</key>
  11651. + <string>1.0</string>
  11652. + <key>LSRequiresIPhoneOS</key>
  11653. + <true/>
  11654. + <key>NSMainNibFile</key>
  11655. + <string>MainWindow</string>
  11656. +</dict>
  11657. +</plist>
  11658. diff --git a/iphone/examples/ReaderSample/ReaderSample.xcodeproj/project.pbxproj b/iphone/examples/ReaderSample/ReaderSample.xcodeproj/project.pbxproj
  11659. new file mode 100755
  11660. --- /dev/null
  11661. +++ b/iphone/examples/ReaderSample/ReaderSample.xcodeproj/project.pbxproj
  11662. @@ -0,0 +1,386 @@
  11663. +// !$*UTF8*$!
  11664. +{
  11665. + archiveVersion = 1;
  11666. + classes = {
  11667. + };
  11668. + objectVersion = 45;
  11669. + objects = {
  11670. +
  11671. +/* Begin PBXBuildFile section */
  11672. + 1D3623260D0F684500981E51 /* ReaderSampleAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* ReaderSampleAppDelegate.m */; };
  11673. + 1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
  11674. + 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
  11675. + 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */; };
  11676. + 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 288765A40DF7441C002DB57D /* CoreGraphics.framework */; };
  11677. + 2899E5220DE3E06400AC0155 /* ReaderSampleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2899E5210DE3E06400AC0155 /* ReaderSampleViewController.xib */; };
  11678. + 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 28AD733E0D9D9553002E5188 /* MainWindow.xib */; };
  11679. + 28D7ACF80DDB3853001CB0EB /* ReaderSampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 28D7ACF70DDB3853001CB0EB /* ReaderSampleViewController.m */; };
  11680. + DC3CEC791209F83E00D7A786 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC3CEC781209F83E00D7A786 /* AVFoundation.framework */; };
  11681. + DC3CEC7B1209F83E00D7A786 /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC3CEC7A1209F83E00D7A786 /* CoreMedia.framework */; };
  11682. + DC3CEC7D1209F83E00D7A786 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC3CEC7C1209F83E00D7A786 /* CoreVideo.framework */; };
  11683. + DC3CEC7F1209F83E00D7A786 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC3CEC7E1209F83E00D7A786 /* QuartzCore.framework */; };
  11684. + DC3CEC811209F83E00D7A786 /* libiconv.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DC3CEC801209F83E00D7A786 /* libiconv.dylib */; };
  11685. + DC48C40C1219E1A20047193B /* libzbar.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DC48C4061219E1A20047193B /* libzbar.a */; };
  11686. + DC48C40D1219E1A20047193B /* zbar-back.png in Resources */ = {isa = PBXBuildFile; fileRef = DC48C4081219E1A20047193B /* zbar-back.png */; };
  11687. + DC48C40E1219E1A20047193B /* zbar-help.html in Resources */ = {isa = PBXBuildFile; fileRef = DC48C4091219E1A20047193B /* zbar-help.html */; };
  11688. + DC48C40F1219E1A20047193B /* zbar-helpicons.png in Resources */ = {isa = PBXBuildFile; fileRef = DC48C40A1219E1A20047193B /* zbar-helpicons.png */; };
  11689. + DC48C4101219E1A20047193B /* zbar-samples.png in Resources */ = {isa = PBXBuildFile; fileRef = DC48C40B1219E1A20047193B /* zbar-samples.png */; };
  11690. +/* End PBXBuildFile section */
  11691. +
  11692. +/* Begin PBXFileReference section */
  11693. + 1D30AB110D05D00D00671497 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
  11694. + 1D3623240D0F684500981E51 /* ReaderSampleAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReaderSampleAppDelegate.h; sourceTree = "<group>"; };
  11695. + 1D3623250D0F684500981E51 /* ReaderSampleAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ReaderSampleAppDelegate.m; sourceTree = "<group>"; };
  11696. + 1D6058910D05DD3D006BFB54 /* ReaderSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ReaderSample.app; sourceTree = BUILT_PRODUCTS_DIR; };
  11697. + 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
  11698. + 288765A40DF7441C002DB57D /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
  11699. + 2899E5210DE3E06400AC0155 /* ReaderSampleViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ReaderSampleViewController.xib; sourceTree = "<group>"; };
  11700. + 28AD733E0D9D9553002E5188 /* MainWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = "<group>"; };
  11701. + 28D7ACF60DDB3853001CB0EB /* ReaderSampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReaderSampleViewController.h; sourceTree = "<group>"; };
  11702. + 28D7ACF70DDB3853001CB0EB /* ReaderSampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ReaderSampleViewController.m; sourceTree = "<group>"; };
  11703. + 29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
  11704. + 32CA4F630368D1EE00C91783 /* ReaderSample_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReaderSample_Prefix.pch; sourceTree = "<group>"; };
  11705. + 8D1107310486CEB800E47090 /* ReaderSample-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "ReaderSample-Info.plist"; plistStructureDefinitionIdentifier = "com.apple.xcode.plist.structure-definition.iphone.info-plist"; sourceTree = "<group>"; };
  11706. + DC3CEC781209F83E00D7A786 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; };
  11707. + DC3CEC7A1209F83E00D7A786 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; };
  11708. + DC3CEC7C1209F83E00D7A786 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; };
  11709. + DC3CEC7E1209F83E00D7A786 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
  11710. + DC3CEC801209F83E00D7A786 /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = usr/lib/libiconv.dylib; sourceTree = SDKROOT; };
  11711. + DC48C3F41219E1A20047193B /* Decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Decoder.h; sourceTree = "<group>"; };
  11712. + DC48C3F51219E1A20047193B /* Exception.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Exception.h; sourceTree = "<group>"; };
  11713. + DC48C3F61219E1A20047193B /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = "<group>"; };
  11714. + DC48C3F71219E1A20047193B /* ImageScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageScanner.h; sourceTree = "<group>"; };
  11715. + DC48C3F81219E1A20047193B /* Processor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Processor.h; sourceTree = "<group>"; };
  11716. + DC48C3F91219E1A20047193B /* Scanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Scanner.h; sourceTree = "<group>"; };
  11717. + DC48C3FA1219E1A20047193B /* Symbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Symbol.h; sourceTree = "<group>"; };
  11718. + DC48C3FB1219E1A20047193B /* Video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Video.h; sourceTree = "<group>"; };
  11719. + DC48C3FC1219E1A20047193B /* Window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Window.h; sourceTree = "<group>"; };
  11720. + DC48C3FD1219E1A20047193B /* zbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zbar.h; sourceTree = "<group>"; };
  11721. + DC48C3FE1219E1A20047193B /* ZBarCaptureReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarCaptureReader.h; sourceTree = "<group>"; };
  11722. + DC48C3FF1219E1A20047193B /* ZBarImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarImage.h; sourceTree = "<group>"; };
  11723. + DC48C4001219E1A20047193B /* ZBarImageScanner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarImageScanner.h; sourceTree = "<group>"; };
  11724. + DC48C4011219E1A20047193B /* ZBarReaderController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarReaderController.h; sourceTree = "<group>"; };
  11725. + DC48C4021219E1A20047193B /* ZBarReaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarReaderView.h; sourceTree = "<group>"; };
  11726. + DC48C4031219E1A20047193B /* ZBarReaderViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarReaderViewController.h; sourceTree = "<group>"; };
  11727. + DC48C4041219E1A20047193B /* ZBarSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarSDK.h; sourceTree = "<group>"; };
  11728. + DC48C4051219E1A20047193B /* ZBarSymbol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ZBarSymbol.h; sourceTree = "<group>"; };
  11729. + DC48C4061219E1A20047193B /* libzbar.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libzbar.a; sourceTree = "<group>"; };
  11730. + DC48C4081219E1A20047193B /* zbar-back.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zbar-back.png"; sourceTree = "<group>"; };
  11731. + DC48C4091219E1A20047193B /* zbar-help.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "zbar-help.html"; sourceTree = "<group>"; };
  11732. + DC48C40A1219E1A20047193B /* zbar-helpicons.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zbar-helpicons.png"; sourceTree = "<group>"; };
  11733. + DC48C40B1219E1A20047193B /* zbar-samples.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "zbar-samples.png"; sourceTree = "<group>"; };
  11734. +/* End PBXFileReference section */
  11735. +
  11736. +/* Begin PBXFrameworksBuildPhase section */
  11737. + 1D60588F0D05DD3D006BFB54 /* Frameworks */ = {
  11738. + isa = PBXFrameworksBuildPhase;
  11739. + buildActionMask = 2147483647;
  11740. + files = (
  11741. + 1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */,
  11742. + 288765A50DF7441C002DB57D /* CoreGraphics.framework in Frameworks */,
  11743. + 1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
  11744. + DC3CEC791209F83E00D7A786 /* AVFoundation.framework in Frameworks */,
  11745. + DC3CEC7B1209F83E00D7A786 /* CoreMedia.framework in Frameworks */,
  11746. + DC3CEC7D1209F83E00D7A786 /* CoreVideo.framework in Frameworks */,
  11747. + DC3CEC7F1209F83E00D7A786 /* QuartzCore.framework in Frameworks */,
  11748. + DC3CEC811209F83E00D7A786 /* libiconv.dylib in Frameworks */,
  11749. + DC48C40C1219E1A20047193B /* libzbar.a in Frameworks */,
  11750. + );
  11751. + runOnlyForDeploymentPostprocessing = 0;
  11752. + };
  11753. +/* End PBXFrameworksBuildPhase section */
  11754. +
  11755. +/* Begin PBXGroup section */
  11756. + 080E96DDFE201D6D7F000001 /* Classes */ = {
  11757. + isa = PBXGroup;
  11758. + children = (
  11759. + 1D3623240D0F684500981E51 /* ReaderSampleAppDelegate.h */,
  11760. + 1D3623250D0F684500981E51 /* ReaderSampleAppDelegate.m */,
  11761. + 28D7ACF60DDB3853001CB0EB /* ReaderSampleViewController.h */,
  11762. + 28D7ACF70DDB3853001CB0EB /* ReaderSampleViewController.m */,
  11763. + );
  11764. + path = Classes;
  11765. + sourceTree = "<group>";
  11766. + };
  11767. + 19C28FACFE9D520D11CA2CBB /* Products */ = {
  11768. + isa = PBXGroup;
  11769. + children = (
  11770. + 1D6058910D05DD3D006BFB54 /* ReaderSample.app */,
  11771. + );
  11772. + name = Products;
  11773. + sourceTree = "<group>";
  11774. + };
  11775. + 29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
  11776. + isa = PBXGroup;
  11777. + children = (
  11778. + 080E96DDFE201D6D7F000001 /* Classes */,
  11779. + 29B97315FDCFA39411CA2CEA /* Other Sources */,
  11780. + 29B97317FDCFA39411CA2CEA /* Resources */,
  11781. + DC48C3F01219E1A20047193B /* ZBarSDK */,
  11782. + 29B97323FDCFA39411CA2CEA /* Frameworks */,
  11783. + 19C28FACFE9D520D11CA2CBB /* Products */,
  11784. + );
  11785. + name = CustomTemplate;
  11786. + sourceTree = "<group>";
  11787. + };
  11788. + 29B97315FDCFA39411CA2CEA /* Other Sources */ = {
  11789. + isa = PBXGroup;
  11790. + children = (
  11791. + 32CA4F630368D1EE00C91783 /* ReaderSample_Prefix.pch */,
  11792. + 29B97316FDCFA39411CA2CEA /* main.m */,
  11793. + );
  11794. + name = "Other Sources";
  11795. + sourceTree = "<group>";
  11796. + };
  11797. + 29B97317FDCFA39411CA2CEA /* Resources */ = {
  11798. + isa = PBXGroup;
  11799. + children = (
  11800. + 2899E5210DE3E06400AC0155 /* ReaderSampleViewController.xib */,
  11801. + 28AD733E0D9D9553002E5188 /* MainWindow.xib */,
  11802. + 8D1107310486CEB800E47090 /* ReaderSample-Info.plist */,
  11803. + );
  11804. + name = Resources;
  11805. + sourceTree = "<group>";
  11806. + };
  11807. + 29B97323FDCFA39411CA2CEA /* Frameworks */ = {
  11808. + isa = PBXGroup;
  11809. + children = (
  11810. + 1D30AB110D05D00D00671497 /* Foundation.framework */,
  11811. + 288765A40DF7441C002DB57D /* CoreGraphics.framework */,
  11812. + 1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
  11813. + DC3CEC7E1209F83E00D7A786 /* QuartzCore.framework */,
  11814. + DC3CEC781209F83E00D7A786 /* AVFoundation.framework */,
  11815. + DC3CEC7A1209F83E00D7A786 /* CoreMedia.framework */,
  11816. + DC3CEC7C1209F83E00D7A786 /* CoreVideo.framework */,
  11817. + DC3CEC801209F83E00D7A786 /* libiconv.dylib */,
  11818. + );
  11819. + name = Frameworks;
  11820. + sourceTree = "<group>";
  11821. + };
  11822. + DC48C3F01219E1A20047193B /* ZBarSDK */ = {
  11823. + isa = PBXGroup;
  11824. + children = (
  11825. + DC48C3F11219E1A20047193B /* Headers */,
  11826. + DC48C4061219E1A20047193B /* libzbar.a */,
  11827. + DC48C4071219E1A20047193B /* Resources */,
  11828. + );
  11829. + path = ZBarSDK;
  11830. + sourceTree = "<group>";
  11831. + };
  11832. + DC48C3F11219E1A20047193B /* Headers */ = {
  11833. + isa = PBXGroup;
  11834. + children = (
  11835. + DC48C3F21219E1A20047193B /* ZBarSDK */,
  11836. + );
  11837. + path = Headers;
  11838. + sourceTree = "<group>";
  11839. + };
  11840. + DC48C3F21219E1A20047193B /* ZBarSDK */ = {
  11841. + isa = PBXGroup;
  11842. + children = (
  11843. + DC48C3F31219E1A20047193B /* zbar */,
  11844. + DC48C3FD1219E1A20047193B /* zbar.h */,
  11845. + DC48C3FE1219E1A20047193B /* ZBarCaptureReader.h */,
  11846. + DC48C3FF1219E1A20047193B /* ZBarImage.h */,
  11847. + DC48C4001219E1A20047193B /* ZBarImageScanner.h */,
  11848. + DC48C4011219E1A20047193B /* ZBarReaderController.h */,
  11849. + DC48C4021219E1A20047193B /* ZBarReaderView.h */,
  11850. + DC48C4031219E1A20047193B /* ZBarReaderViewController.h */,
  11851. + DC48C4041219E1A20047193B /* ZBarSDK.h */,
  11852. + DC48C4051219E1A20047193B /* ZBarSymbol.h */,
  11853. + );
  11854. + path = ZBarSDK;
  11855. + sourceTree = "<group>";
  11856. + };
  11857. + DC48C3F31219E1A20047193B /* zbar */ = {
  11858. + isa = PBXGroup;
  11859. + children = (
  11860. + DC48C3F41219E1A20047193B /* Decoder.h */,
  11861. + DC48C3F51219E1A20047193B /* Exception.h */,
  11862. + DC48C3F61219E1A20047193B /* Image.h */,
  11863. + DC48C3F71219E1A20047193B /* ImageScanner.h */,
  11864. + DC48C3F81219E1A20047193B /* Processor.h */,
  11865. + DC48C3F91219E1A20047193B /* Scanner.h */,
  11866. + DC48C3FA1219E1A20047193B /* Symbol.h */,
  11867. + DC48C3FB1219E1A20047193B /* Video.h */,
  11868. + DC48C3FC1219E1A20047193B /* Window.h */,
  11869. + );
  11870. + path = zbar;
  11871. + sourceTree = "<group>";
  11872. + };
  11873. + DC48C4071219E1A20047193B /* Resources */ = {
  11874. + isa = PBXGroup;
  11875. + children = (
  11876. + DC48C4081219E1A20047193B /* zbar-back.png */,
  11877. + DC48C4091219E1A20047193B /* zbar-help.html */,
  11878. + DC48C40A1219E1A20047193B /* zbar-helpicons.png */,
  11879. + DC48C40B1219E1A20047193B /* zbar-samples.png */,
  11880. + );
  11881. + path = Resources;
  11882. + sourceTree = "<group>";
  11883. + };
  11884. +/* End PBXGroup section */
  11885. +
  11886. +/* Begin PBXNativeTarget section */
  11887. + 1D6058900D05DD3D006BFB54 /* ReaderSample */ = {
  11888. + isa = PBXNativeTarget;
  11889. + buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "ReaderSample" */;
  11890. + buildPhases = (
  11891. + 1D60588D0D05DD3D006BFB54 /* Resources */,
  11892. + 1D60588E0D05DD3D006BFB54 /* Sources */,
  11893. + 1D60588F0D05DD3D006BFB54 /* Frameworks */,
  11894. + );
  11895. + buildRules = (
  11896. + );
  11897. + dependencies = (
  11898. + );
  11899. + name = ReaderSample;
  11900. + productName = ReaderSample;
  11901. + productReference = 1D6058910D05DD3D006BFB54 /* ReaderSample.app */;
  11902. + productType = "com.apple.product-type.application";
  11903. + };
  11904. +/* End PBXNativeTarget section */
  11905. +
  11906. +/* Begin PBXProject section */
  11907. + 29B97313FDCFA39411CA2CEA /* Project object */ = {
  11908. + isa = PBXProject;
  11909. + buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ReaderSample" */;
  11910. + compatibilityVersion = "Xcode 3.1";
  11911. + developmentRegion = English;
  11912. + hasScannedForEncodings = 1;
  11913. + knownRegions = (
  11914. + English,
  11915. + Japanese,
  11916. + French,
  11917. + German,
  11918. + );
  11919. + mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
  11920. + projectDirPath = "";
  11921. + projectRoot = "";
  11922. + targets = (
  11923. + 1D6058900D05DD3D006BFB54 /* ReaderSample */,
  11924. + );
  11925. + };
  11926. +/* End PBXProject section */
  11927. +
  11928. +/* Begin PBXResourcesBuildPhase section */
  11929. + 1D60588D0D05DD3D006BFB54 /* Resources */ = {
  11930. + isa = PBXResourcesBuildPhase;
  11931. + buildActionMask = 2147483647;
  11932. + files = (
  11933. + 28AD733F0D9D9553002E5188 /* MainWindow.xib in Resources */,
  11934. + 2899E5220DE3E06400AC0155 /* ReaderSampleViewController.xib in Resources */,
  11935. + DC48C40D1219E1A20047193B /* zbar-back.png in Resources */,
  11936. + DC48C40E1219E1A20047193B /* zbar-help.html in Resources */,
  11937. + DC48C40F1219E1A20047193B /* zbar-helpicons.png in Resources */,
  11938. + DC48C4101219E1A20047193B /* zbar-samples.png in Resources */,
  11939. + );
  11940. + runOnlyForDeploymentPostprocessing = 0;
  11941. + };
  11942. +/* End PBXResourcesBuildPhase section */
  11943. +
  11944. +/* Begin PBXSourcesBuildPhase section */
  11945. + 1D60588E0D05DD3D006BFB54 /* Sources */ = {
  11946. + isa = PBXSourcesBuildPhase;
  11947. + buildActionMask = 2147483647;
  11948. + files = (
  11949. + 1D60589B0D05DD56006BFB54 /* main.m in Sources */,
  11950. + 1D3623260D0F684500981E51 /* ReaderSampleAppDelegate.m in Sources */,
  11951. + 28D7ACF80DDB3853001CB0EB /* ReaderSampleViewController.m in Sources */,
  11952. + );
  11953. + runOnlyForDeploymentPostprocessing = 0;
  11954. + };
  11955. +/* End PBXSourcesBuildPhase section */
  11956. +
  11957. +/* Begin XCBuildConfiguration section */
  11958. + 1D6058940D05DD3E006BFB54 /* Debug */ = {
  11959. + isa = XCBuildConfiguration;
  11960. + buildSettings = {
  11961. + ALWAYS_SEARCH_USER_PATHS = NO;
  11962. + COPY_PHASE_STRIP = NO;
  11963. + GCC_DYNAMIC_NO_PIC = NO;
  11964. + GCC_OPTIMIZATION_LEVEL = 0;
  11965. + GCC_PRECOMPILE_PREFIX_HEADER = YES;
  11966. + GCC_PREFIX_HEADER = ReaderSample_Prefix.pch;
  11967. + INFOPLIST_FILE = "ReaderSample-Info.plist";
  11968. + LIBRARY_SEARCH_PATHS = (
  11969. + "$(inherited)",
  11970. + "\"$(SRCROOT)/ZBarSDK\"",
  11971. + );
  11972. + PRODUCT_NAME = ReaderSample;
  11973. + SYMROOT = /tmp/ReaderSample.build;
  11974. + };
  11975. + name = Debug;
  11976. + };
  11977. + 1D6058950D05DD3E006BFB54 /* Release */ = {
  11978. + isa = XCBuildConfiguration;
  11979. + buildSettings = {
  11980. + ALWAYS_SEARCH_USER_PATHS = NO;
  11981. + COPY_PHASE_STRIP = YES;
  11982. + GCC_PRECOMPILE_PREFIX_HEADER = YES;
  11983. + GCC_PREFIX_HEADER = ReaderSample_Prefix.pch;
  11984. + INFOPLIST_FILE = "ReaderSample-Info.plist";
  11985. + LIBRARY_SEARCH_PATHS = (
  11986. + "$(inherited)",
  11987. + "\"$(SRCROOT)/ZBarSDK\"",
  11988. + );
  11989. + PRODUCT_NAME = ReaderSample;
  11990. + SYMROOT = /tmp/ReaderSample.build;
  11991. + VALIDATE_PRODUCT = YES;
  11992. + };
  11993. + name = Release;
  11994. + };
  11995. + C01FCF4F08A954540054247B /* Debug */ = {
  11996. + isa = XCBuildConfiguration;
  11997. + buildSettings = {
  11998. + ARCHS = "$(ARCHS_STANDARD_32_BIT)";
  11999. + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  12000. + GCC_C_LANGUAGE_STANDARD = c99;
  12001. + GCC_WARN_ABOUT_RETURN_TYPE = YES;
  12002. + GCC_WARN_UNUSED_VARIABLE = YES;
  12003. + IPHONEOS_DEPLOYMENT_TARGET = 4.0;
  12004. + PREBINDING = NO;
  12005. + SDKROOT = iphoneos;
  12006. + };
  12007. + name = Debug;
  12008. + };
  12009. + C01FCF5008A954540054247B /* Release */ = {
  12010. + isa = XCBuildConfiguration;
  12011. + buildSettings = {
  12012. + ARCHS = "$(ARCHS_STANDARD_32_BIT)";
  12013. + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  12014. + GCC_C_LANGUAGE_STANDARD = c99;
  12015. + GCC_WARN_ABOUT_RETURN_TYPE = YES;
  12016. + GCC_WARN_UNUSED_VARIABLE = YES;
  12017. + IPHONEOS_DEPLOYMENT_TARGET = 4.0;
  12018. + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1";
  12019. + PREBINDING = NO;
  12020. + SDKROOT = iphoneos;
  12021. + };
  12022. + name = Release;
  12023. + };
  12024. +/* End XCBuildConfiguration section */
  12025. +
  12026. +/* Begin XCConfigurationList section */
  12027. + 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "ReaderSample" */ = {
  12028. + isa = XCConfigurationList;
  12029. + buildConfigurations = (
  12030. + 1D6058940D05DD3E006BFB54 /* Debug */,
  12031. + 1D6058950D05DD3E006BFB54 /* Release */,
  12032. + );
  12033. + defaultConfigurationIsVisible = 0;
  12034. + defaultConfigurationName = Release;
  12035. + };
  12036. + C01FCF4E08A954540054247B /* Build configuration list for PBXProject "ReaderSample" */ = {
  12037. + isa = XCConfigurationList;
  12038. + buildConfigurations = (
  12039. + C01FCF4F08A954540054247B /* Debug */,
  12040. + C01FCF5008A954540054247B /* Release */,
  12041. + );
  12042. + defaultConfigurationIsVisible = 0;
  12043. + defaultConfigurationName = Release;
  12044. + };
  12045. +/* End XCConfigurationList section */
  12046. + };
  12047. + rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
  12048. +}
  12049. diff --git a/iphone/examples/ReaderSample/ReaderSampleViewController.xib b/iphone/examples/ReaderSample/ReaderSampleViewController.xib
  12050. new file mode 100644
  12051. --- /dev/null
  12052. +++ b/iphone/examples/ReaderSample/ReaderSampleViewController.xib
  12053. @@ -0,0 +1,521 @@
  12054. +<?xml version="1.0" encoding="UTF-8"?>
  12055. +<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
  12056. + <data>
  12057. + <int key="IBDocument.SystemTarget">1024</int>
  12058. + <string key="IBDocument.SystemVersion">10F569</string>
  12059. + <string key="IBDocument.InterfaceBuilderVersion">788</string>
  12060. + <string key="IBDocument.AppKitVersion">1038.29</string>
  12061. + <string key="IBDocument.HIToolboxVersion">461.00</string>
  12062. + <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
  12063. + <string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  12064. + <string key="NS.object.0">117</string>
  12065. + </object>
  12066. + <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
  12067. + <bool key="EncodedWithXMLCoder">YES</bool>
  12068. + <integer value="6"/>
  12069. + </object>
  12070. + <object class="NSArray" key="IBDocument.PluginDependencies">
  12071. + <bool key="EncodedWithXMLCoder">YES</bool>
  12072. + <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
  12073. + </object>
  12074. + <object class="NSMutableDictionary" key="IBDocument.Metadata">
  12075. + <bool key="EncodedWithXMLCoder">YES</bool>
  12076. + <object class="NSArray" key="dict.sortedKeys" id="0">
  12077. + <bool key="EncodedWithXMLCoder">YES</bool>
  12078. + </object>
  12079. + <object class="NSMutableArray" key="dict.values">
  12080. + <bool key="EncodedWithXMLCoder">YES</bool>
  12081. + </object>
  12082. + </object>
  12083. + <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
  12084. + <bool key="EncodedWithXMLCoder">YES</bool>
  12085. + <object class="IBProxyObject" id="372490531">
  12086. + <string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
  12087. + <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
  12088. + </object>
  12089. + <object class="IBProxyObject" id="843779117">
  12090. + <string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
  12091. + <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
  12092. + </object>
  12093. + <object class="IBUIView" id="774585933">
  12094. + <reference key="NSNextResponder"/>
  12095. + <int key="NSvFlags">274</int>
  12096. + <object class="NSMutableArray" key="NSSubviews">
  12097. + <bool key="EncodedWithXMLCoder">YES</bool>
  12098. + <object class="IBUIButton" id="651640269">
  12099. + <reference key="NSNextResponder" ref="774585933"/>
  12100. + <int key="NSvFlags">292</int>
  12101. + <string key="NSFrame">{{20, 392}, {280, 48}}</string>
  12102. + <reference key="NSSuperview" ref="774585933"/>
  12103. + <bool key="IBUIOpaque">NO</bool>
  12104. + <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
  12105. + <int key="IBUIContentHorizontalAlignment">0</int>
  12106. + <int key="IBUIContentVerticalAlignment">0</int>
  12107. + <object class="NSFont" key="IBUIFont">
  12108. + <string key="NSName">Helvetica-Bold</string>
  12109. + <double key="NSSize">18</double>
  12110. + <int key="NSfFlags">16</int>
  12111. + </object>
  12112. + <int key="IBUIButtonType">1</int>
  12113. + <string key="IBUINormalTitle">Scan</string>
  12114. + <object class="NSColor" key="IBUIHighlightedTitleColor">
  12115. + <int key="NSColorSpace">3</int>
  12116. + <bytes key="NSWhite">MQA</bytes>
  12117. + </object>
  12118. + <object class="NSColor" key="IBUINormalTitleColor">
  12119. + <int key="NSColorSpace">1</int>
  12120. + <bytes key="NSRGB">MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA</bytes>
  12121. + </object>
  12122. + <object class="NSColor" key="IBUINormalTitleShadowColor">
  12123. + <int key="NSColorSpace">3</int>
  12124. + <bytes key="NSWhite">MC41AA</bytes>
  12125. + </object>
  12126. + </object>
  12127. + <object class="IBUIImageView" id="122884923">
  12128. + <reference key="NSNextResponder" ref="774585933"/>
  12129. + <int key="NSvFlags">292</int>
  12130. + <string key="NSFrame">{{20, 20}, {280, 210}}</string>
  12131. + <reference key="NSSuperview" ref="774585933"/>
  12132. + <int key="IBUIContentMode">1</int>
  12133. + <bool key="IBUIUserInteractionEnabled">NO</bool>
  12134. + <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
  12135. + </object>
  12136. + <object class="IBUITextView" id="854633925">
  12137. + <reference key="NSNextResponder" ref="774585933"/>
  12138. + <int key="NSvFlags">292</int>
  12139. + <string key="NSFrame">{{20, 238}, {280, 146}}</string>
  12140. + <reference key="NSSuperview" ref="774585933"/>
  12141. + <object class="NSColor" key="IBUIBackgroundColor">
  12142. + <int key="NSColorSpace">3</i