- *
- * @param $x ; The horizontal component (i.e. which column)
- * @param $y ; The vertical component (i.e. which row)
- */
- public function flip($x, $y): void
- {
- $offset = $y * $this->rowSize + (int)($x / 32);
-
- $this->bits[$offset] = ($this->bits[$offset] ^ (1 << ($x & 0x1f)));
- }
-
- /**
- * Exclusive-or (XOR): Flip the bit in this {@code BitMatrix} if the corresponding
- * mask bit is set.
- *
- * @param $mask ; XOR mask
- */
- public function _xor($mask)
- {//было xor, php не позволяет использовать xor
- if ($this->width != $mask->getWidth() || $this->height != $mask->getHeight()
- || $this->rowSize != $mask->getRowSize()) {
- throw new \InvalidArgumentException("input matrix dimensions do not match");
- }
- $rowArray = new BitArray($this->width / 32 + 1);
- for ($y = 0; $y < $this->height; $y++) {
- $offset = $y * $this->rowSize;
- $row = $mask->getRow($y, $rowArray)->getBitArray();
- for ($x = 0; $x < $this->rowSize; $x++) {
- $this->bits[$offset + $x] ^= $row[$x];
- }
- }
- }
-
- /**
- * Clears all bits (sets to false).
- */
- public function clear(): void
- {
- $max = is_countable($this->bits) ? count($this->bits) : 0;
- for ($i = 0; $i < $max; $i++) {
- $this->bits[$i] = 0;
- }
- }
-
- /**
- *
Sets a square region of the bit matrix to true.
- *
- * @param $left ; The horizontal position to begin at (inclusive)
- * @param $top ; The vertical position to begin at (inclusive)
- * @param $width ; The width of the region
- * @param $height ; The height of the region
- */
- public function setRegion($left, $top, $width, $height)
- {
- if ($top < 0 || $left < 0) {
- throw new \InvalidArgumentException("Left and top must be nonnegative");
- }
- if ($height < 1 || $width < 1) {
- throw new \InvalidArgumentException("Height and width must be at least 1");
- }
- $right = $left + $width;
- $bottom = $top + $height;
- if ($bottom > $this->height || $right > $this->width) { //> this.height || right > this.width
- throw new \InvalidArgumentException("The region must fit inside the matrix");
- }
- for ($y = $top; $y < $bottom; $y++) {
- $offset = $y * $this->rowSize;
- for ($x = $left; $x < $right; $x++) {
- $this->bits[$offset + (int)($x / 32)] = ($this->bits[$offset + (int)($x / 32)] |= 1 << ($x & 0x1f));
- }
- }
- }
-
- /**
- * Modifies this {@code BitMatrix} to represent the same but rotated 180 degrees
- */
- public function rotate180(): void
- {
- $width = $this->getWidth();
- $height = $this->getHeight();
- $topRow = new BitArray($width);
- $bottomRow = new BitArray($width);
- for ($i = 0; $i < ($height + 1) / 2; $i++) {
- $topRow = $this->getRow($i, $topRow);
- $bottomRow = $this->getRow($height - 1 - $i, $bottomRow);
- $topRow->reverse();
- $bottomRow->reverse();
- $this->setRow($i, $bottomRow);
- $this->setRow($height - 1 - $i, $topRow);
- }
- }
-
- /**
- * @return float The width of the matrix
- */
- public function getWidth()
- {
- return $this->width;
- }
-
- /**
- * A fast method to retrieve one row of data from the matrix as a BitArray.
- *
- * @param $y ; The row to retrieve
- * @param $row ; An optional caller-allocated BitArray, will be allocated if null or too small
- *
- * @return BitArray The resulting BitArray - this reference should always be used even when passing
- * your own row
- */
- public function getRow($y, $row)
- {
- if ($row == null || $row->getSize() < $this->width) {
- $row = new BitArray($this->width);
- } else {
- $row->clear();
- }
- $offset = $y * $this->rowSize;
- for ($x = 0; $x < $this->rowSize; $x++) {
- $row->setBulk($x * 32, $this->bits[$offset + $x]);
- }
-
- return $row;
- }
-
- /**
- * @param $y ; row to set
- * @param $row ; {@link BitArray} to copy from
- */
- public function setRow($y, $row): void
- {
- $this->bits = arraycopy($row->getBitArray(), 0, $this->bits, $y * $this->rowSize, $this->rowSize);
- }
-
- /**
- * This is useful in detecting the enclosing rectangle of a 'pure' barcode.
- *
- * @return {@code left,top,width,height} enclosing rectangle of all 1 bits, or null if it is all white
- */
- public function getEnclosingRectangle()
- {
- $left = $this->width;
- $top = $this->height;
- $right = -1;
- $bottom = -1;
-
- for ($y = 0; $y < $this->height; $y++) {
- for ($x32 = 0; $x32 < $this->rowSize; $x32++) {
- $theBits = $this->bits[$y * $this->rowSize + $x32];
- if ($theBits != 0) {
- if ($y < $top) {
- $top = $y;
- }
- if ($y > $bottom) {
- $bottom = $y;
- }
- if ($x32 * 32 < $left) {
- $bit = 0;
- while (($theBits << (31 - $bit)) == 0) {
- $bit++;
- }
- if (($x32 * 32 + $bit) < $left) {
- $left = $x32 * 32 + $bit;
- }
- }
- if ($x32 * 32 + 31 > $right) {
- $bit = 31;
- while ((sdvig3($theBits, $bit)) == 0) {//>>>
- $bit--;
- }
- if (($x32 * 32 + $bit) > $right) {
- $right = $x32 * 32 + $bit;
- }
- }
- }
- }
- }
-
- $width = $right - $left;
- $height = $bottom - $top;
-
- if ($width < 0 || $height < 0) {
- return null;
- }
-
- return [$left, $top, $width, $height];
- }
-
- /**
- * This is useful in detecting a corner of a 'pure' barcode.
- *
- * @return {@code x,y} coordinate of top-left-most 1 bit, or null if it is all white
- */
- public function getTopLeftOnBit()
- {
- $bitsOffset = 0;
- while ($bitsOffset < (is_countable($this->bits) ? count($this->bits) : 0) && $this->bits[$bitsOffset] == 0) {
- $bitsOffset++;
- }
- if ($bitsOffset == (is_countable($this->bits) ? count($this->bits) : 0)) {
- return null;
- }
- $y = $bitsOffset / $this->rowSize;
- $x = ($bitsOffset % $this->rowSize) * 32;
-
- $theBits = $this->bits[$bitsOffset];
- $bit = 0;
- while (($theBits << (31 - $bit)) == 0) {
- $bit++;
- }
- $x += $bit;
-
- return [$x, $y];
- }
-
- public function getBottomRightOnBit()
- {
- $bitsOffset = (is_countable($this->bits) ? count($this->bits) : 0) - 1;
- while ($bitsOffset >= 0 && $this->bits[$bitsOffset] == 0) {
- $bitsOffset--;
- }
- if ($bitsOffset < 0) {
- return null;
- }
-
- $y = $bitsOffset / $this->rowSize;
- $x = ($bitsOffset % $this->rowSize) * 32;
-
- $theBits = $this->bits[$bitsOffset];
- $bit = 31;
- while ((sdvig3($theBits, $bit)) == 0) {//>>>
- $bit--;
- }
- $x += $bit;
-
- return [$x, $y];
- }
-
- /**
- * @return float The height of the matrix
- */
- public function getHeight()
- {
- return $this->height;
- }
-
- /**
- * @return int The row size of the matrix
- */
- public function getRowSize()
- {
- return $this->rowSize;
- }
-
- public function equals($o)
- {
- if (!($o instanceof BitMatrix)) {
- return false;
- }
- $other = $o;
-
- return $this->width == $other->width
- && $this->height == $other->height
- && $this->rowSize == $other->rowSize
- && $this->bits === $other->bits;
- }
-
- //@Override
-
- public function hashCode()
- {
- $hash = $this->width;
- $hash = 31 * $hash + $this->width;
- $hash = 31 * $hash + $this->height;
- $hash = 31 * $hash + $this->rowSize;
- $hash = 31 * $hash + hashCode($this->bits);
-
- return $hash;
- }
-
- //@Override
-
- public function toString($setString = '', $unsetString = '', $lineSeparator = '')
- {
- if (!$setString || !$unsetString) {
- return (string)'X ' . ' ';
- }
- if ($lineSeparator && $lineSeparator !== "\n") {
- return $this->toString_($setString, $unsetString, $lineSeparator);
- }
-
- return (string)($setString . $unsetString . "\n");
- }
-
- public function toString_($setString, $unsetString, $lineSeparator)
- {
- //$result = new StringBuilder(height * (width + 1));
- $result = '';
- for ($y = 0; $y < $this->height; $y++) {
- for ($x = 0; $x < $this->width; $x++) {
- $result .= ($this->get($x, $y) ? $setString : $unsetString);
- }
- $result .= ($lineSeparator);
- }
-
- return (string)$result;
- }
-
- /**
- * @deprecated call {@link #toString(String,String)} only, which uses \n line separator always
- */
- // @Deprecated
- /**
- *
Gets the requested bit, where true means black.
- *
- * @param $x ; The horizontal component (i.e. which column)
- * @param $y ; The vertical component (i.e. which row)
- *
- * @return value of given bit in matrix
- */
- public function get($x, $y)
- {
- $offset = (int)($y * $this->rowSize + ($x / 32));
- if (!isset($this->bits[$offset])) {
- $this->bits[$offset] = 0;
- }
-
- // return (($this->bits[$offset] >> ($x & 0x1f)) & 1) != 0;
- return (uRShift($this->bits[$offset], ($x & 0x1f)) & 1) != 0;//было >>> вместо >>, не знаю как эмулировать беззнаковый сдвиг
- }
-
- // @Override
-
- public function _clone(): \Zxing\Common\BitMatrix
- {
- return new BitMatrix($this->width, $this->height, $this->rowSize, $this->bits);
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/BitSource.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/BitSource.php
deleted file mode 100644
index dede538..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/BitSource.php
+++ /dev/null
@@ -1,115 +0,0 @@
-This provides an easy abstraction to read bits at a time from a sequence of bytes, where the
- * number of bits read is not often a multiple of 8.
- *
- *
This class is thread-safe but not reentrant -- unless the caller modifies the bytes array
- * it passed in, in which case all bets are off.
- *
- * @author Sean Owen
- */
-final class BitSource
-{
- private int $byteOffset = 0;
- private int $bitOffset = 0;
-
- /**
- * @param bytes $bytes from which this will read bits. Bits will be read from the first byte first.
- * Bits are read within a byte from most-significant to least-significant bit.
- */
- public function __construct(private $bytes)
- {
- }
-
- /**
- * @return index of next bit in current byte which would be read by the next call to {@link #readBits(int)}.
- */
- public function getBitOffset()
- {
- return $this->bitOffset;
- }
-
- /**
- * @return index of next byte in input byte array which would be read by the next call to {@link #readBits(int)}.
- */
- public function getByteOffset()
- {
- return $this->byteOffset;
- }
-
- /**
- * @param number $numBits of bits to read
- *
- * @return int representing the bits read. The bits will appear as the least-significant
- * bits of the int
- * @throws InvalidArgumentException if numBits isn't in [1,32] or more than is available
- */
- public function readBits($numBits)
- {
- if ($numBits < 1 || $numBits > 32 || $numBits > $this->available()) {
- throw new \InvalidArgumentException(strval($numBits));
- }
-
- $result = 0;
-
- // First, read remainder from current byte
- if ($this->bitOffset > 0) {
- $bitsLeft = 8 - $this->bitOffset;
- $toRead = $numBits < $bitsLeft ? $numBits : $bitsLeft;
- $bitsToNotRead = $bitsLeft - $toRead;
- $mask = (0xFF >> (8 - $toRead)) << $bitsToNotRead;
- $result = ($this->bytes[$this->byteOffset] & $mask) >> $bitsToNotRead;
- $numBits -= $toRead;
- $this->bitOffset += $toRead;
- if ($this->bitOffset == 8) {
- $this->bitOffset = 0;
- $this->byteOffset++;
- }
- }
-
- // Next read whole bytes
- if ($numBits > 0) {
- while ($numBits >= 8) {
- $result = ($result << 8) | ($this->bytes[$this->byteOffset] & 0xFF);
- $this->byteOffset++;
- $numBits -= 8;
- }
-
- // Finally read a partial byte
- if ($numBits > 0) {
- $bitsToNotRead = 8 - $numBits;
- $mask = (0xFF >> $bitsToNotRead) << $bitsToNotRead;
- $result = ($result << $numBits) | (($this->bytes[$this->byteOffset] & $mask) >> $bitsToNotRead);
- $this->bitOffset += $numBits;
- }
- }
-
- return $result;
- }
-
- /**
- * @return number of bits that can be read successfully
- */
- public function available()
- {
- return 8 * ((is_countable($this->bytes) ? count($this->bytes) : 0) - $this->byteOffset) - $this->bitOffset;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/CharacterSetECI.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/CharacterSetECI.php
deleted file mode 100644
index bbabc19..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/CharacterSetECI.php
+++ /dev/null
@@ -1,154 +0,0 @@
- self::ISO8859_1,
- 'ISO-8859-2' => self::ISO8859_2,
- 'ISO-8859-3' => self::ISO8859_3,
- 'ISO-8859-4' => self::ISO8859_4,
- 'ISO-8859-5' => self::ISO8859_5,
- 'ISO-8859-6' => self::ISO8859_6,
- 'ISO-8859-7' => self::ISO8859_7,
- 'ISO-8859-8' => self::ISO8859_8,
- 'ISO-8859-9' => self::ISO8859_9,
- 'ISO-8859-10' => self::ISO8859_10,
- 'ISO-8859-11' => self::ISO8859_11,
- 'ISO-8859-12' => self::ISO8859_12,
- 'ISO-8859-13' => self::ISO8859_13,
- 'ISO-8859-14' => self::ISO8859_14,
- 'ISO-8859-15' => self::ISO8859_15,
- 'ISO-8859-16' => self::ISO8859_16,
- 'SHIFT-JIS' => self::SJIS,
- 'WINDOWS-1250' => self::CP1250,
- 'WINDOWS-1251' => self::CP1251,
- 'WINDOWS-1252' => self::CP1252,
- 'WINDOWS-1256' => self::CP1256,
- 'UTF-16BE' => self::UNICODE_BIG_UNMARKED,
- 'UTF-8' => self::UTF8,
- 'ASCII' => self::ASCII,
- 'GBK' => self::GB18030,
- 'EUC-KR' => self::EUC_KR,
- ];
- /**#@-*/
- /**
- * Additional possible values for character sets.
- */
- private static array $additionalValues = [
- self::CP437 => 2,
- self::ASCII => 170,
- ];
- private static int|string|null $name = null;
-
- /**
- * Gets character set ECI by value.
- *
- * @param string $value
- *
- * @return CharacterSetEci|null
- */
- public static function getCharacterSetECIByValue($value)
- {
- if ($value < 0 || $value >= 900) {
- throw new \InvalidArgumentException('Value must be between 0 and 900');
- }
- if (false !== ($key = array_search($value, self::$additionalValues))) {
- $value = $key;
- }
- array_search($value, self::$nameToEci);
- try {
- self::setName($value);
-
- return new self($value);
- } catch (\UnexpectedValueException) {
- return null;
- }
- }
-
- private static function setName($value)
- {
- foreach (self::$nameToEci as $name => $key) {
- if ($key == $value) {
- self::$name = $name;
-
- return true;
- }
- }
- if (self::$name == null) {
- foreach (self::$additionalValues as $name => $key) {
- if ($key == $value) {
- self::$name = $name;
-
- return true;
- }
- }
- }
- }
-
- /**
- * Gets character set ECI name.
- *
- * @return character set ECI name|null
- */
- public static function name()
- {
- return self::$name;
- }
-
- /**
- * Gets character set ECI by name.
- *
- * @param string $name
- *
- * @return CharacterSetEci|null
- */
- public static function getCharacterSetECIByName($name)
- {
- $name = strtoupper($name);
- if (isset(self::$nameToEci[$name])) {
- return new self(self::$nameToEci[$name]);
- }
-
- return null;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/DecoderResult.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/DecoderResult.php
deleted file mode 100644
index b468dd8..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/DecoderResult.php
+++ /dev/null
@@ -1,111 +0,0 @@
-Encapsulates the result of decoding a matrix of bits. This typically
- * applies to 2D barcode formats. For now it contains the raw bytes obtained,
- * as well as a String interpretation of those bytes, if applicable.
- *
- * @author Sean Owen
- */
-final class DecoderResult
-{
- /**
- * @var mixed|null
- */
- private $errorsCorrected;
- /**
- * @var mixed|null
- */
- private $erasures;
- /**
- * @var mixed|null
- */
- private $other;
-
-
- public function __construct(private $rawBytes, private $text, private $byteSegments, private $ecLevel, private $structuredAppendSequenceNumber = -1, private $structuredAppendParity = -1)
- {
- }
-
- public function getRawBytes()
- {
- return $this->rawBytes;
- }
-
- public function getText()
- {
- return $this->text;
- }
-
- public function getByteSegments()
- {
- return $this->byteSegments;
- }
-
- public function getECLevel()
- {
- return $this->ecLevel;
- }
-
- public function getErrorsCorrected()
- {
- return $this->errorsCorrected;
- }
-
- public function setErrorsCorrected($errorsCorrected): void
- {
- $this->errorsCorrected = $errorsCorrected;
- }
-
- public function getErasures()
- {
- return $this->erasures;
- }
-
- public function setErasures($erasures): void
- {
- $this->erasures = $erasures;
- }
-
- public function getOther()
- {
- return $this->other;
- }
-
- public function setOther($other): void
- {
- $this->other = $other;
- }
-
- public function hasStructuredAppend()
- {
- return $this->structuredAppendParity >= 0 && $this->structuredAppendSequenceNumber >= 0;
- }
-
- public function getStructuredAppendParity()
- {
- return $this->structuredAppendParity;
- }
-
- public function getStructuredAppendSequenceNumber()
- {
- return $this->structuredAppendSequenceNumber;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/DefaultGridSampler.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/DefaultGridSampler.php
deleted file mode 100644
index 4e63195..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/DefaultGridSampler.php
+++ /dev/null
@@ -1,115 +0,0 @@
-sampleGrid_($image, $dimensionX, $dimensionY, $transform);
- }
-
- //@Override
- public function sampleGrid_(
- $image,
- $dimensionX,
- $dimensionY,
- $transform
- ) {
- if ($dimensionX <= 0 || $dimensionY <= 0) {
- throw NotFoundException::getNotFoundInstance();
- }
- $bits = new BitMatrix($dimensionX, $dimensionY);
- $points = fill_array(0, 2 * $dimensionX, 0.0);
- for ($y = 0; $y < $dimensionY; $y++) {
- $max = is_countable($points) ? count($points) : 0;
- $iValue = (float)$y + 0.5;
- for ($x = 0; $x < $max; $x += 2) {
- $points[$x] = (float)($x / 2) + 0.5;
- $points[$x + 1] = $iValue;
- }
- $transform->transformPoints($points);
- // Quick check to see if points transformed to something inside the image;
- // sufficient to check the endpoints
- self::checkAndNudgePoints($image, $points);
- try {
- for ($x = 0; $x < $max; $x += 2) {
- if ($image->get((int)$points[$x], (int)$points[$x + 1])) {
- // Black(-ish) pixel
- $bits->set($x / 2, $y);
- }
- }
- } catch (\Exception) {//ArrayIndexOutOfBoundsException
- // This feels wrong, but, sometimes if the finder patterns are misidentified, the resulting
- // transform gets "twisted" such that it maps a straight line of points to a set of points
- // whose endpoints are in bounds, but others are not. There is probably some mathematical
- // way to detect this about the transformation that I don't know yet.
- // This results in an ugly runtime exception despite our clever checks above -- can't have
- // that. We could check each point's coordinates but that feels duplicative. We settle for
- // catching and wrapping ArrayIndexOutOfBoundsException.
- throw NotFoundException::getNotFoundInstance();
- }
- }
-
- return $bits;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Detector/MathUtils.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Detector/MathUtils.php
deleted file mode 100644
index 061318e..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Detector/MathUtils.php
+++ /dev/null
@@ -1,48 +0,0 @@
-A somewhat generic detector that looks for a barcode-like rectangular region within an image.
- * It looks within a mostly white region of an image for a region of black and white, but mostly
- * black. It returns the four corners of the region, as best it can determine.
- *
- * @author Sean Owen
- * @port Ashot Khanamiryan
- */
-class MonochromeRectangleDetector
-{
- private static int $MAX_MODULES = 32;
-
- public function __construct(private readonly BinaryBitmap $image)
- {
- }
-
- /**
- *
Detects a rectangular region of black and white -- mostly black -- with a region of mostly
- * white, in an image.
- *
- * @return {@link ResultPoint}[] describing the corners of the rectangular region. The first and
- * last points are opposed on the diagonal, as are the second and third. The first point will be
- * the topmost point and the last, the bottommost. The second point will be leftmost and the
- * third, the rightmost
- * @throws NotFoundException if no Data Matrix Code can be found
- */
- public function detect(): \Zxing\ResultPoint
- {
- $height = $this->image->getHeight();
- $width = $this->image->getWidth();
- $halfHeight = $height / 2;
- $halfWidth = $width / 2;
-
- $deltaY = max(1, $height / (self::$MAX_MODULES * 8));
- $deltaX = max(1, $width / (self::$MAX_MODULES * 8));
-
-
- $top = 0;
- $bottom = $height;
- $left = 0;
- $right = $width;
- $pointA = $this->findCornerFromCenter(
- $halfWidth,
- 0,
- $left,
- $right,
- $halfHeight,
- -$deltaY,
- $top,
- $bottom,
- $halfWidth / 2
- );
- $top = (int)$pointA->getY() - 1;
- $pointB = $this->findCornerFromCenter(
- $halfWidth,
- -$deltaX,
- $left,
- $right,
- $halfHeight,
- 0,
- $top,
- $bottom,
- $halfHeight / 2
- );
- $left = (int)$pointB->getX() - 1;
- $pointC = $this->findCornerFromCenter(
- $halfWidth,
- $deltaX,
- $left,
- $right,
- $halfHeight,
- 0,
- $top,
- $bottom,
- $halfHeight / 2
- );
- $right = (int)$pointC->getX() + 1;
- $pointD = $this->findCornerFromCenter(
- $halfWidth,
- 0,
- $left,
- $right,
- $halfHeight,
- $deltaY,
- $top,
- $bottom,
- $halfWidth / 2
- );
- $bottom = (int)$pointD->getY() + 1;
-
- // Go try to find po$A again with better information -- might have been off at first.
- $pointA = $this->findCornerFromCenter(
- $halfWidth,
- 0,
- $left,
- $right,
- $halfHeight,
- -$deltaY,
- $top,
- $bottom,
- $halfWidth / 4
- );
-
- return new ResultPoint($pointA, $pointB, $pointC, $pointD);
- }
-
-
- /**
- * Attempts to locate a corner of the barcode by scanning up, down, left or right from a center
- * point which should be within the barcode.
- *
- * @param float $centerX center's x component (horizontal)
- * @param float $deltaX same as deltaY but change in x per step instead
- * @param float $left minimum value of x
- * @param float $right maximum value of x
- * @param float $centerY center's y component (vertical)
- * @param float $deltaY change in y per step. If scanning up this is negative; down, positive;
- * left or right, 0
- * @param float $top minimum value of y to search through (meaningless when di == 0)
- * @param float $bottom maximum value of y
- * @param float $maxWhiteRun maximum run of white pixels that can still be considered to be within
- * the barcode
- *
- * @return ResultPoint {@link com.google.zxing.ResultPoint} encapsulating the corner that was found
- * @throws NotFoundException if such a point cannot be found
- */
- private function findCornerFromCenter(
- $centerX,
- $deltaX,
- $left,
- $right,
- $centerY,
- $deltaY,
- $top,
- $bottom,
- $maxWhiteRun
- ): \Zxing\ResultPoint
- {
- $lastRange = null;
- for ($y = $centerY, $x = $centerX;
- $y < $bottom && $y >= $top && $x < $right && $x >= $left;
- $y += $deltaY, $x += $deltaX) {
- $range = 0;
- if ($deltaX == 0) {
- // horizontal slices, up and down
- $range = $this->blackWhiteRange($y, $maxWhiteRun, $left, $right, true);
- } else {
- // vertical slices, left and right
- $range = $this->blackWhiteRange($x, $maxWhiteRun, $top, $bottom, false);
- }
- if ($range == null) {
- if ($lastRange == null) {
- throw NotFoundException::getNotFoundInstance();
- }
- // lastRange was found
- if ($deltaX == 0) {
- $lastY = $y - $deltaY;
- if ($lastRange[0] < $centerX) {
- if ($lastRange[1] > $centerX) {
- // straddle, choose one or the other based on direction
- return new ResultPoint($deltaY > 0 ? $lastRange[0] : $lastRange[1], $lastY);
- }
-
- return new ResultPoint($lastRange[0], $lastY);
- } else {
- return new ResultPoint($lastRange[1], $lastY);
- }
- } else {
- $lastX = $x - $deltaX;
- if ($lastRange[0] < $centerY) {
- if ($lastRange[1] > $centerY) {
- return new ResultPoint($lastX, $deltaX < 0 ? $lastRange[0] : $lastRange[1]);
- }
-
- return new ResultPoint($lastX, $lastRange[0]);
- } else {
- return new ResultPoint($lastX, $lastRange[1]);
- }
- }
- }
- $lastRange = $range;
- }
- throw NotFoundException::getNotFoundInstance();
- }
-
-
- /**
- * Computes the start and end of a region of pixels, either horizontally or vertically, that could
- * be part of a Data Matrix barcode.
- *
- * @param if $fixedDimension scanning horizontally, this is the row (the fixed vertical location)
- * where we are scanning. If scanning vertically it's the column, the fixed horizontal location
- * @param largest $maxWhiteRun run of white pixels that can still be considered part of the
- * barcode region
- * @param minimum $minDim pixel location, horizontally or vertically, to consider
- * @param maximum $maxDim pixel location, horizontally or vertically, to consider
- * @param if $horizontal true, we're scanning left-right, instead of up-down
- *
- * @return int[] with start and end of found range, or null if no such range is found
- * (e.g. only white was found)
- */
-
- private function blackWhiteRange($fixedDimension, $maxWhiteRun, $minDim, $maxDim, $horizontal)
- {
- $center = ($minDim + $maxDim) / 2;
-
- // Scan left/up first
- $start = $center;
- while ($start >= $minDim) {
- if ($horizontal ? $this->image->get($start, $fixedDimension) : $this->image->get($fixedDimension, $start)) {
- $start--;
- } else {
- $whiteRunStart = $start;
- do {
- $start--;
- } while ($start >= $minDim && !($horizontal ? $this->image->get($start, $fixedDimension) :
- $this->image->get($fixedDimension, $start)));
- $whiteRunSize = $whiteRunStart - $start;
- if ($start < $minDim || $whiteRunSize > $maxWhiteRun) {
- $start = $whiteRunStart;
- break;
- }
- }
- }
- $start++;
-
- // Then try right/down
- $end = $center;
- while ($end < $maxDim) {
- if ($horizontal ? $this->image->get($end, $fixedDimension) : $this->image->get($fixedDimension, $end)) {
- $end++;
- } else {
- $whiteRunStart = $end;
- do {
- $end++;
- } while ($end < $maxDim && !($horizontal ? $this->image->get($end, $fixedDimension) :
- $this->image->get($fixedDimension, $end)));
- $whiteRunSize = $end - $whiteRunStart;
- if ($end >= $maxDim || $whiteRunSize > $maxWhiteRun) {
- $end = $whiteRunStart;
- break;
- }
- }
- }
- $end--;
-
- return $end > $start ? [$start, $end] : null;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/DetectorResult.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/DetectorResult.php
deleted file mode 100644
index a6bf38c..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/DetectorResult.php
+++ /dev/null
@@ -1,42 +0,0 @@
-Encapsulates the result of detecting a barcode in an image. This includes the raw
- * matrix of black/white pixels corresponding to the barcode, and possibly points of interest
- * in the image, like the location of finder patterns or corners of the barcode in the image.
- *
- * @author Sean Owen
- */
-class DetectorResult
-{
- public function __construct(private $bits, private $points)
- {
- }
-
- final public function getBits()
- {
- return $this->bits;
- }
-
- final public function getPoints()
- {
- return $this->points;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/GlobalHistogramBinarizer.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/GlobalHistogramBinarizer.php
deleted file mode 100644
index 7567c09..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/GlobalHistogramBinarizer.php
+++ /dev/null
@@ -1,209 +0,0 @@
-luminances = self::$EMPTY;
- $this->buckets = fill_array(0, self::$LUMINANCE_BUCKETS, 0);
- $this->source = $source;
- }
-
- // Applies simple sharpening to the row data to improve performance of the 1D Readers.
- public function getBlackRow($y, $row = null)
- {
- $this->source = $this->getLuminanceSource();
- $width = $this->source->getWidth();
- if ($row == null || $row->getSize() < $width) {
- $row = new BitArray($width);
- } else {
- $row->clear();
- }
-
- $this->initArrays($width);
- $localLuminances = $this->source->getRow($y, $this->luminances);
- $localBuckets = $this->buckets;
- for ($x = 0; $x < $width; $x++) {
- $pixel = $localLuminances[$x] & 0xff;
- $localBuckets[$pixel >> self::$LUMINANCE_SHIFT]++;
- }
- $blackPoint = self::estimateBlackPoint($localBuckets);
-
- $left = $localLuminances[0] & 0xff;
- $center = $localLuminances[1] & 0xff;
- for ($x = 1; $x < $width - 1; $x++) {
- $right = $localLuminances[$x + 1] & 0xff;
- // A simple -1 4 -1 box filter with a weight of 2.
- $luminance = (($center * 4) - $left - $right) / 2;
- if ($luminance < $blackPoint) {
- $row->set($x);
- }
- $left = $center;
- $center = $right;
- }
-
- return $row;
- }
-
- // Does not sharpen the data, as this call is intended to only be used by 2D Readers.
- private function initArrays($luminanceSize): void
- {
- if (count($this->luminances) < $luminanceSize) {
- $this->luminances = [];
- }
- for ($x = 0; $x < self::$LUMINANCE_BUCKETS; $x++) {
- $this->buckets[$x] = 0;
- }
- }
-
- private static function estimateBlackPoint($buckets)
- {
- // Find the tallest peak in the histogram.
- $numBuckets = is_countable($buckets) ? count($buckets) : 0;
- $maxBucketCount = 0;
- $firstPeak = 0;
- $firstPeakSize = 0;
- for ($x = 0; $x < $numBuckets; $x++) {
- if ($buckets[$x] > $firstPeakSize) {
- $firstPeak = $x;
- $firstPeakSize = $buckets[$x];
- }
- if ($buckets[$x] > $maxBucketCount) {
- $maxBucketCount = $buckets[$x];
- }
- }
-
- // Find the second-tallest peak which is somewhat far from the tallest peak.
- $secondPeak = 0;
- $secondPeakScore = 0;
- for ($x = 0; $x < $numBuckets; $x++) {
- $distanceToBiggest = $x - $firstPeak;
- // Encourage more distant second peaks by multiplying by square of distance.
- $score = $buckets[$x] * $distanceToBiggest * $distanceToBiggest;
- if ($score > $secondPeakScore) {
- $secondPeak = $x;
- $secondPeakScore = $score;
- }
- }
-
- // Make sure firstPeak corresponds to the black peak.
- if ($firstPeak > $secondPeak) {
- $temp = $firstPeak;
- $firstPeak = $secondPeak;
- $secondPeak = $temp;
- }
-
- // If there is too little contrast in the image to pick a meaningful black point, throw rather
- // than waste time trying to decode the image, and risk false positives.
- if ($secondPeak - $firstPeak <= $numBuckets / 16) {
- throw NotFoundException::getNotFoundInstance();
- }
-
- // Find a valley between them that is low and closer to the white peak.
- $bestValley = $secondPeak - 1;
- $bestValleyScore = -1;
- for ($x = $secondPeak - 1; $x > $firstPeak; $x--) {
- $fromFirst = $x - $firstPeak;
- $score = $fromFirst * $fromFirst * ($secondPeak - $x) * ($maxBucketCount - $buckets[$x]);
- if ($score > $bestValleyScore) {
- $bestValley = $x;
- $bestValleyScore = $score;
- }
- }
-
- return $bestValley << self::$LUMINANCE_SHIFT;
- }
-
- public function getBlackMatrix()
- {
- $source = $this->getLuminanceSource();
- $width = $source->getWidth();
- $height = $source->getHeight();
- $matrix = new BitMatrix($width, $height);
-
- // Quickly calculates the histogram by sampling four rows from the image. This proved to be
- // more robust on the blackbox tests than sampling a diagonal as we used to do.
- $this->initArrays($width);
- $localBuckets = $this->buckets;
- for ($y = 1; $y < 5; $y++) {
- $row = (int)($height * $y / 5);
- $localLuminances = $source->getRow($row, $this->luminances);
- $right = (int)(($width * 4) / 5);
- for ($x = (int)($width / 5); $x < $right; $x++) {
- $pixel = ($localLuminances[(int)($x)] & 0xff);
- $localBuckets[($pixel >> self::$LUMINANCE_SHIFT)]++;
- }
- }
- $blackPoint = self::estimateBlackPoint($localBuckets);
-
- // We delay reading the entire image luminance until the black point estimation succeeds.
- // Although we end up reading four rows twice, it is consistent with our motto of
- // "fail quickly" which is necessary for continuous scanning.
- $localLuminances = $source->getMatrix();
- for ($y = 0; $y < $height; $y++) {
- $offset = $y * $width;
- for ($x = 0; $x < $width; $x++) {
- $pixel = (int)($localLuminances[$offset + $x] & 0xff);
- if ($pixel < $blackPoint) {
- $matrix->set($x, $y);
- }
- }
- }
-
- return $matrix;
- }
-
- public function createBinarizer($source): \Zxing\Common\GlobalHistogramBinarizer
- {
- return new GlobalHistogramBinarizer($source);
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/GridSampler.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/GridSampler.php
deleted file mode 100644
index 7871859..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/GridSampler.php
+++ /dev/null
@@ -1,198 +0,0 @@
-Checks a set of points that have been transformed to sample points on an image against
- * the image's dimensions to see if the point are even within the image.
- *
- *
This method will actually "nudge" the endpoints back onto the image if they are found to be
- * barely (less than 1 pixel) off the image. This accounts for imperfect detection of finder
- * patterns in an image where the QR Code runs all the way to the image border.
- *
- *
For efficiency, the method will check points from either end of the line until one is found
- * to be within the image. Because the set of points are assumed to be linear, this is valid.
- *
- * @param image $image into which the points should map
- * @param actual $points points in x1,y1,...,xn,yn form
- *
- * @throws NotFoundException if an endpoint is lies outside the image boundaries
- */
- protected static function checkAndNudgePoints(
- $image,
- $points
- ) {
- $width = $image->getWidth();
- $height = $image->getHeight();
- // Check and nudge points from start until we see some that are OK:
- $nudged = true;
- for ($offset = 0; $offset < (is_countable($points) ? count($points) : 0) && $nudged; $offset += 2) {
- $x = (int)$points[$offset];
- $y = (int)$points[$offset + 1];
- if ($x < -1 || $x > $width || $y < -1 || $y > $height) {
- throw NotFoundException::getNotFoundInstance();
- }
- $nudged = false;
- if ($x == -1) {
- $points[$offset] = 0.0;
- $nudged = true;
- } elseif ($x == $width) {
- $points[$offset] = $width - 1;
- $nudged = true;
- }
- if ($y == -1) {
- $points[$offset + 1] = 0.0;
- $nudged = true;
- } elseif ($y == $height) {
- $points[$offset + 1] = $height - 1;
- $nudged = true;
- }
- }
- // Check and nudge points from end:
- $nudged = true;
- for ($offset = (is_countable($points) ? count($points) : 0) - 2; $offset >= 0 && $nudged; $offset -= 2) {
- $x = (int)$points[$offset];
- $y = (int)$points[$offset + 1];
- if ($x < -1 || $x > $width || $y < -1 || $y > $height) {
- throw NotFoundException::getNotFoundInstance();
- }
- $nudged = false;
- if ($x == -1) {
- $points[$offset] = 0.0;
- $nudged = true;
- } elseif ($x == $width) {
- $points[$offset] = $width - 1;
- $nudged = true;
- }
- if ($y == -1) {
- $points[$offset + 1] = 0.0;
- $nudged = true;
- } elseif ($y == $height) {
- $points[$offset + 1] = $height - 1;
- $nudged = true;
- }
- }
- }
-
- /**
- * Samples an image for a rectangular matrix of bits of the given dimension. The sampling
- * transformation is determined by the coordinates of 4 points, in the original and transformed
- * image space.
- *
- * @param image $image to sample
- * @param width $dimensionX of {@link BitMatrix} to sample from image
- * @param height $dimensionY of {@link BitMatrix} to sample from image
- * @param point $p1ToX 1 preimage X
- * @param point $p1ToY 1 preimage Y
- * @param point $p2ToX 2 preimage X
- * @param point $p2ToY 2 preimage Y
- * @param point $p3ToX 3 preimage X
- * @param point $p3ToY 3 preimage Y
- * @param point $p4ToX 4 preimage X
- * @param point $p4ToY 4 preimage Y
- * @param point $p1FromX 1 image X
- * @param point $p1FromY 1 image Y
- * @param point $p2FromX 2 image X
- * @param point $p2FromY 2 image Y
- * @param point $p3FromX 3 image X
- * @param point $p3FromY 3 image Y
- * @param point $p4FromX 4 image X
- * @param point $p4FromY 4 image Y
- *
- * @return {@link BitMatrix} representing a grid of points sampled from the image within a region
- * defined by the "from" parameters
- * @throws NotFoundException if image can't be sampled, for example, if the transformation defined
- * by the given points is invalid or results in sampling outside the image boundaries
- */
- abstract public function sampleGrid(
- $image,
- $dimensionX,
- $dimensionY,
- $p1ToX,
- $p1ToY,
- $p2ToX,
- $p2ToY,
- $p3ToX,
- $p3ToY,
- $p4ToX,
- $p4ToY,
- $p1FromX,
- $p1FromY,
- $p2FromX,
- $p2FromY,
- $p3FromX,
- $p3FromY,
- $p4FromX,
- $p4FromY
- );
-
- abstract public function sampleGrid_(
- $image,
- $dimensionX,
- $dimensionY,
- $transform
- );
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/HybridBinarizer.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/HybridBinarizer.php
deleted file mode 100644
index 620e12f..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/HybridBinarizer.php
+++ /dev/null
@@ -1,260 +0,0 @@
-matrix !== null) {
- return $this->matrix;
- }
- $source = $this->getLuminanceSource();
- $width = $source->getWidth();
- $height = $source->getHeight();
- if ($width >= self::$MINIMUM_DIMENSION && $height >= self::$MINIMUM_DIMENSION) {
- $luminances = $source->getMatrix();
- $subWidth = $width >> self::$BLOCK_SIZE_POWER;
- if (($width & self::$BLOCK_SIZE_MASK) != 0) {
- $subWidth++;
- }
- $subHeight = $height >> self::$BLOCK_SIZE_POWER;
- if (($height & self::$BLOCK_SIZE_MASK) != 0) {
- $subHeight++;
- }
- $blackPoints = self::calculateBlackPoints($luminances, $subWidth, $subHeight, $width, $height);
-
- $newMatrix = new BitMatrix($width, $height);
- self::calculateThresholdForBlock($luminances, $subWidth, $subHeight, $width, $height, $blackPoints, $newMatrix);
- $this->matrix = $newMatrix;
- } else {
- // If the image is too small, fall back to the global histogram approach.
- $this->matrix = parent::getBlackMatrix();
- }
-
- return $this->matrix;
- }
-
- /**
- * Calculates a single black point for each block of pixels and saves it away.
- * See the following thread for a discussion of this algorithm:
- * http://groups.google.com/group/zxing/browse_thread/thread/d06efa2c35a7ddc0
- */
- private static function calculateBlackPoints(
- $luminances,
- $subWidth,
- $subHeight,
- $width,
- $height
- ) {
- $blackPoints = fill_array(0, $subHeight, 0);
- foreach ($blackPoints as $key => $point) {
- $blackPoints[$key] = fill_array(0, $subWidth, 0);
- }
- for ($y = 0; $y < $subHeight; $y++) {
- $yoffset = ($y << self::$BLOCK_SIZE_POWER);
- $maxYOffset = $height - self::$BLOCK_SIZE;
- if ($yoffset > $maxYOffset) {
- $yoffset = $maxYOffset;
- }
- for ($x = 0; $x < $subWidth; $x++) {
- $xoffset = ($x << self::$BLOCK_SIZE_POWER);
- $maxXOffset = $width - self::$BLOCK_SIZE;
- if ($xoffset > $maxXOffset) {
- $xoffset = $maxXOffset;
- }
- $sum = 0;
- $min = 0xFF;
- $max = 0;
- for ($yy = 0, $offset = $yoffset * $width + $xoffset; $yy < self::$BLOCK_SIZE; $yy++, $offset += $width) {
- for ($xx = 0; $xx < self::$BLOCK_SIZE; $xx++) {
- $pixel = ((int)($luminances[(int)($offset + $xx)]) & 0xFF);
- $sum += $pixel;
- // still looking for good contrast
- if ($pixel < $min) {
- $min = $pixel;
- }
- if ($pixel > $max) {
- $max = $pixel;
- }
- }
- // short-circuit min/max tests once dynamic range is met
- if ($max - $min > self::$MIN_DYNAMIC_RANGE) {
- // finish the rest of the rows quickly
- for ($yy++, $offset += $width; $yy < self::$BLOCK_SIZE; $yy++, $offset += $width) {
- for ($xx = 0; $xx < self::$BLOCK_SIZE; $xx++) {
- $sum += ($luminances[$offset + $xx] & 0xFF);
- }
- }
- }
- }
-
- // The default estimate is the average of the values in the block.
- $average = ($sum >> (self::$BLOCK_SIZE_POWER * 2));
- if ($max - $min <= self::$MIN_DYNAMIC_RANGE) {
- // If variation within the block is low, assume this is a block with only light or only
- // dark pixels. In that case we do not want to use the average, as it would divide this
- // low contrast area into black and white pixels, essentially creating data out of noise.
- //
- // The default assumption is that the block is light/background. Since no estimate for
- // the level of dark pixels exists locally, use half the min for the block.
- $average = (int)($min / 2);
-
- if ($y > 0 && $x > 0) {
- // Correct the "white background" assumption for blocks that have neighbors by comparing
- // the pixels in this block to the previously calculated black points. This is based on
- // the fact that dark barcode symbology is always surrounded by some amount of light
- // background for which reasonable black point estimates were made. The bp estimated at
- // the boundaries is used for the interior.
-
- // The (min < bp) is arbitrary but works better than other heuristics that were tried.
- $averageNeighborBlackPoint =
- (int)(($blackPoints[$y - 1][$x] + (2 * $blackPoints[$y][$x - 1]) + $blackPoints[$y - 1][$x - 1]) / 4);
- if ($min < $averageNeighborBlackPoint) {
- $average = $averageNeighborBlackPoint;
- }
- }
- }
- $blackPoints[$y][$x] = (int)($average);
- }
- }
-
- return $blackPoints;
- }
-
- /**
- * For each block in the image, calculate the average black point using a 5x5 grid
- * of the blocks around it. Also handles the corner cases (fractional blocks are computed based
- * on the last pixels in the row/column which are also used in the previous block).
- */
- private static function calculateThresholdForBlock(
- $luminances,
- $subWidth,
- $subHeight,
- $width,
- $height,
- $blackPoints,
- $matrix
- ): void {
- for ($y = 0; $y < $subHeight; $y++) {
- $yoffset = ($y << self::$BLOCK_SIZE_POWER);
- $maxYOffset = $height - self::$BLOCK_SIZE;
- if ($yoffset > $maxYOffset) {
- $yoffset = $maxYOffset;
- }
- for ($x = 0; $x < $subWidth; $x++) {
- $xoffset = ($x << self::$BLOCK_SIZE_POWER);
- $maxXOffset = $width - self::$BLOCK_SIZE;
- if ($xoffset > $maxXOffset) {
- $xoffset = $maxXOffset;
- }
- $left = self::cap($x, 2, $subWidth - 3);
- $top = self::cap($y, 2, $subHeight - 3);
- $sum = 0;
- for ($z = -2; $z <= 2; $z++) {
- $blackRow = $blackPoints[$top + $z];
- $sum += $blackRow[$left - 2] + $blackRow[$left - 1] + $blackRow[$left] + $blackRow[$left + 1] + $blackRow[$left + 2];
- }
- $average = (int)($sum / 25);
-
- self::thresholdBlock($luminances, $xoffset, $yoffset, $average, $width, $matrix);
- }
- }
- }
-
- private static function cap($value, $min, $max)
- {
- if ($value < $min) {
- return $min;
- } elseif ($value > $max) {
- return $max;
- } else {
- return $value;
- }
- }
-
- /**
- * Applies a single threshold to a block of pixels.
- */
- private static function thresholdBlock(
- $luminances,
- $xoffset,
- $yoffset,
- $threshold,
- $stride,
- $matrix
- ): void {
- for ($y = 0, $offset = $yoffset * $stride + $xoffset; $y < self::$BLOCK_SIZE; $y++, $offset += $stride) {
- for ($x = 0; $x < self::$BLOCK_SIZE; $x++) {
- // Comparison needs to be <= so that black == 0 pixels are black even if the threshold is 0.
- if (($luminances[$offset + $x] & 0xFF) <= $threshold) {
- $matrix->set($xoffset + $x, $yoffset + $y);
- }
- }
- }
- }
-
- public function createBinarizer($source): \Zxing\Common\HybridBinarizer
- {
- return new HybridBinarizer($source);
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/PerspectiveTransform.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/PerspectiveTransform.php
deleted file mode 100644
index ca6bfff..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/PerspectiveTransform.php
+++ /dev/null
@@ -1,187 +0,0 @@
-This class implements a perspective transform in two dimensions. Given four source and four
- * destination points, it will compute the transformation implied between them. The code is based
- * directly upon section 3.4.2 of George Wolberg's "Digital Image Warping"; see pages 54-56.
- *
- * @author Sean Owen
- */
-final class PerspectiveTransform
-{
- private function __construct(private $a11, private $a21, private $a31, private $a12, private $a22, private $a32, private $a13, private $a23, private $a33)
- {
- }
-
- public static function quadrilateralToQuadrilateral(
- $x0,
- $y0,
- $x1,
- $y1,
- $x2,
- $y2,
- $x3,
- $y3,
- $x0p,
- $y0p,
- $x1p,
- $y1p,
- $x2p,
- $y2p,
- $x3p,
- $y3p
- ) {
- $qToS = self::quadrilateralToSquare($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3);
- $sToQ = self::squareToQuadrilateral($x0p, $y0p, $x1p, $y1p, $x2p, $y2p, $x3p, $y3p);
-
- return $sToQ->times($qToS);
- }
-
- public static function quadrilateralToSquare(
- $x0,
- $y0,
- $x1,
- $y1,
- $x2,
- $y2,
- $x3,
- $y3
- ) {
- // Here, the adjoint serves as the inverse:
- return self::squareToQuadrilateral($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3)->buildAdjoint();
- }
-
- public function buildAdjoint(): \Zxing\Common\PerspectiveTransform
- {
- // Adjoint is the transpose of the cofactor matrix:
- return new PerspectiveTransform(
- $this->a22 * $this->a33 - $this->a23 * $this->a32,
- $this->a23 * $this->a31 - $this->a21 * $this->a33,
- $this->a21 * $this->a32 - $this->a22 * $this->a31,
- $this->a13 * $this->a32 - $this->a12 * $this->a33,
- $this->a11 * $this->a33 - $this->a13 * $this->a31,
- $this->a12 * $this->a31 - $this->a11 * $this->a32,
- $this->a12 * $this->a23 - $this->a13 * $this->a22,
- $this->a13 * $this->a21 - $this->a11 * $this->a23,
- $this->a11 * $this->a22 - $this->a12 * $this->a21
- );
- }
-
- public static function squareToQuadrilateral(
- $x0,
- $y0,
- $x1,
- $y1,
- $x2,
- $y2,
- $x3,
- $y3
- ): \Zxing\Common\PerspectiveTransform {
- $dx3 = $x0 - $x1 + $x2 - $x3;
- $dy3 = $y0 - $y1 + $y2 - $y3;
- if ($dx3 == 0.0 && $dy3 == 0.0) {
- // Affine
- return new PerspectiveTransform(
- $x1 - $x0,
- $x2 - $x1,
- $x0,
- $y1 - $y0,
- $y2 - $y1,
- $y0,
- 0.0,
- 0.0,
- 1.0
- );
- } else {
- $dx1 = $x1 - $x2;
- $dx2 = $x3 - $x2;
- $dy1 = $y1 - $y2;
- $dy2 = $y3 - $y2;
- $denominator = $dx1 * $dy2 - $dx2 * $dy1;
- $a13 = ($dx3 * $dy2 - $dx2 * $dy3) / $denominator;
- $a23 = ($dx1 * $dy3 - $dx3 * $dy1) / $denominator;
-
- return new PerspectiveTransform(
- $x1 - $x0 + $a13 * $x1,
- $x3 - $x0 + $a23 * $x3,
- $x0,
- $y1 - $y0 + $a13 * $y1,
- $y3 - $y0 + $a23 * $y3,
- $y0,
- $a13,
- $a23,
- 1.0
- );
- }
- }
-
- public function times($other): \Zxing\Common\PerspectiveTransform
- {
- return new PerspectiveTransform(
- $this->a11 * $other->a11 + $this->a21 * $other->a12 + $this->a31 * $other->a13,
- $this->a11 * $other->a21 + $this->a21 * $other->a22 + $this->a31 * $other->a23,
- $this->a11 * $other->a31 + $this->a21 * $other->a32 + $this->a31 * $other->a33,
- $this->a12 * $other->a11 + $this->a22 * $other->a12 + $this->a32 * $other->a13,
- $this->a12 * $other->a21 + $this->a22 * $other->a22 + $this->a32 * $other->a23,
- $this->a12 * $other->a31 + $this->a22 * $other->a32 + $this->a32 * $other->a33,
- $this->a13 * $other->a11 + $this->a23 * $other->a12 + $this->a33 * $other->a13,
- $this->a13 * $other->a21 + $this->a23 * $other->a22 + $this->a33 * $other->a23,
- $this->a13 * $other->a31 + $this->a23 * $other->a32 + $this->a33 * $other->a33
- );
- }
-
- public function transformPoints(&$points, &$yValues = 0): void
- {
- if ($yValues) {
- $this->transformPoints_($points, $yValues);
-
- return;
- }
- $max = is_countable($points) ? count($points) : 0;
- $a11 = $this->a11;
- $a12 = $this->a12;
- $a13 = $this->a13;
- $a21 = $this->a21;
- $a22 = $this->a22;
- $a23 = $this->a23;
- $a31 = $this->a31;
- $a32 = $this->a32;
- $a33 = $this->a33;
- for ($i = 0; $i < $max; $i += 2) {
- $x = $points[$i];
- $y = $points[$i + 1];
- $denominator = $a13 * $x + $a23 * $y + $a33;
- $points[$i] = ($a11 * $x + $a21 * $y + $a31) / $denominator;
- $points[$i + 1] = ($a12 * $x + $a22 * $y + $a32) / $denominator;
- }
- }
-
- public function transformPoints_(&$xValues, &$yValues): void
- {
- $n = is_countable($xValues) ? count($xValues) : 0;
- for ($i = 0; $i < $n; $i++) {
- $x = $xValues[$i];
- $y = $yValues[$i];
- $denominator = $this->a13 * $x + $this->a23 * $y + $this->a33;
- $xValues[$i] = ($this->a11 * $x + $this->a21 * $y + $this->a31) / $denominator;
- $yValues[$i] = ($this->a12 * $x + $this->a22 * $y + $this->a32) / $denominator;
- }
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Reedsolomon/GenericGF.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Reedsolomon/GenericGF.php
deleted file mode 100644
index bae7835..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Reedsolomon/GenericGF.php
+++ /dev/null
@@ -1,187 +0,0 @@
-This class contains utility methods for performing mathematical operations over
- * the Galois Fields. Operations use a given primitive polynomial in calculations.
- *
- *
Throughout this package, elements of the GF are represented as an {@code int}
- * for convenience and speed (but at the cost of memory).
- *
- *
- * @author Sean Owen
- * @author David Olivier
- */
-final class GenericGF
-{
- public static $AZTEC_DATA_12;
- public static $AZTEC_DATA_10;
- public static $AZTEC_DATA_6;
- public static $AZTEC_PARAM;
- public static $QR_CODE_FIELD_256;
- public static $DATA_MATRIX_FIELD_256;
- public static $AZTEC_DATA_8;
- public static $MAXICODE_FIELD_64;
-
- private array $expTable = [];
- private array $logTable = [];
- private readonly \Zxing\Common\Reedsolomon\GenericGFPoly $zero;
- private readonly \Zxing\Common\Reedsolomon\GenericGFPoly $one;
-
- /**
- * Create a representation of GF(size) using the given primitive polynomial.
- *
- * @param irreducible $primitive polynomial whose coefficients are represented by
- * the bits of an int, where the least-significant bit represents the constant
- * coefficient
- * @param the $size size of the field
- * @param the $generatorBase factor b in the generator polynomial can be 0- or 1-based
- (g(x) = (x+a^b)(x+a^(b+1))...(x+a^(b+2t-1))).
- In most cases it should be 1, but for QR code it is 0.
- */
- public function __construct(private $primitive, private $size, private $generatorBase)
- {
- $x = 1;
- for ($i = 0; $i < $size; $i++) {
- $this->expTable[$i] = $x;
- $x *= 2; // we're assuming the generator alpha is 2
- if ($x >= $size) {
- $x ^= $primitive;
- $x &= $size - 1;
- }
- }
- for ($i = 0; $i < $size - 1; $i++) {
- $this->logTable[$this->expTable[$i]] = $i;
- }
- // logTable[0] == 0 but this should never be used
- $this->zero = new GenericGFPoly($this, [0]);
- $this->one = new GenericGFPoly($this, [1]);
- }
-
- public static function Init(): void
- {
- self::$AZTEC_DATA_12 = new GenericGF(0x1069, 4096, 1); // x^12 + x^6 + x^5 + x^3 + 1
- self::$AZTEC_DATA_10 = new GenericGF(0x409, 1024, 1); // x^10 + x^3 + 1
- self::$AZTEC_DATA_6 = new GenericGF(0x43, 64, 1); // x^6 + x + 1
- self::$AZTEC_PARAM = new GenericGF(0x13, 16, 1); // x^4 + x + 1
- self::$QR_CODE_FIELD_256 = new GenericGF(0x011D, 256, 0); // x^8 + x^4 + x^3 + x^2 + 1
- self::$DATA_MATRIX_FIELD_256 = new GenericGF(0x012D, 256, 1); // x^8 + x^5 + x^3 + x^2 + 1
- self::$AZTEC_DATA_8 = self::$DATA_MATRIX_FIELD_256;
- self::$MAXICODE_FIELD_64 = self::$AZTEC_DATA_6;
- }
-
- /**
- * Implements both addition and subtraction -- they are the same in GF(size).
- *
- * @return sum/difference of a and b
- */
- public static function addOrSubtract($a, $b)
- {
- return $a ^ $b;
- }
-
- public function getZero()
- {
- return $this->zero;
- }
-
- public function getOne()
- {
- return $this->one;
- }
-
- /**
- * @return GenericGFPoly the monomial representing coefficient * x^degree
- */
- public function buildMonomial($degree, $coefficient)
- {
- if ($degree < 0) {
- throw new \InvalidArgumentException();
- }
- if ($coefficient == 0) {
- return $this->zero;
- }
- $coefficients = fill_array(0, $degree + 1, 0);//new int[degree + 1];
- $coefficients[0] = $coefficient;
-
- return new GenericGFPoly($this, $coefficients);
- }
-
- /**
- * @return 2 to the power of a in GF(size)
- */
- public function exp($a)
- {
- return $this->expTable[$a];
- }
-
- /**
- * @return base 2 log of a in GF(size)
- */
- public function log($a)
- {
- if ($a == 0) {
- throw new \InvalidArgumentException();
- }
-
- return $this->logTable[$a];
- }
-
- /**
- * @return multiplicative inverse of a
- */
- public function inverse($a)
- {
- if ($a == 0) {
- throw new \Exception();
- }
-
- return $this->expTable[$this->size - $this->logTable[$a] - 1];
- }
-
- /**
- * @return int product of a and b in GF(size)
- */
- public function multiply($a, $b)
- {
- if ($a == 0 || $b == 0) {
- return 0;
- }
-
- return $this->expTable[($this->logTable[$a] + $this->logTable[$b]) % ($this->size - 1)];
- }
-
- public function getSize()
- {
- return $this->size;
- }
-
- public function getGeneratorBase()
- {
- return $this->generatorBase;
- }
-
- // @Override
- public function toString()
- {
- return "GF(0x" . dechex((int)($this->primitive)) . ',' . $this->size . ')';
- }
-}
-
-GenericGF::Init();
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Reedsolomon/GenericGFPoly.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Reedsolomon/GenericGFPoly.php
deleted file mode 100644
index 8a71a9b..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Reedsolomon/GenericGFPoly.php
+++ /dev/null
@@ -1,303 +0,0 @@
-Represents a polynomial whose coefficients are elements of a GF.
- * Instances of this class are immutable.
- *
- *
Much credit is due to William Rucklidge since portions of this code are an indirect
- * port of his C++ Reed-Solomon implementation.
- *
- * @author Sean Owen
- */
-final class GenericGFPoly
-{
- /**
- * @var int[]|mixed|null
- */
- private $coefficients;
-
- /**
- * @param the $field {@link GenericGF} instance representing the field to use
- * to perform computations
- * @param array $coefficients coefficients as ints representing elements of GF(size), arranged
- * from most significant (highest-power term) coefficient to least significant
- *
- * @throws InvalidArgumentException if argument is null or empty,
- * or if leading coefficient is 0 and this is not a
- * constant polynomial (that is, it is not the monomial "0")
- */
- public function __construct(private $field, $coefficients)
- {
- if (count($coefficients) == 0) {
- throw new \InvalidArgumentException();
- }
- $coefficientsLength = count($coefficients);
- if ($coefficientsLength > 1 && $coefficients[0] == 0) {
- // Leading term must be non-zero for anything except the constant polynomial "0"
- $firstNonZero = 1;
- while ($firstNonZero < $coefficientsLength && $coefficients[$firstNonZero] == 0) {
- $firstNonZero++;
- }
- if ($firstNonZero == $coefficientsLength) {
- $this->coefficients = [0];
- } else {
- $this->coefficients = fill_array(0, $coefficientsLength - $firstNonZero, 0);
- $this->coefficients = arraycopy(
- $coefficients,
- $firstNonZero,
- $this->coefficients,
- 0,
- is_countable($this->coefficients) ? count($this->coefficients) : 0
- );
- }
- } else {
- $this->coefficients = $coefficients;
- }
- }
-
- public function getCoefficients()
- {
- return $this->coefficients;
- }
-
- /**
- * @return evaluation of this polynomial at a given point
- */
- public function evaluateAt($a)
- {
- if ($a == 0) {
- // Just return the x^0 coefficient
- return $this->getCoefficient(0);
- }
- $size = is_countable($this->coefficients) ? count($this->coefficients) : 0;
- if ($a == 1) {
- // Just the sum of the coefficients
- $result = 0;
- foreach ($this->coefficients as $coefficient) {
- $result = GenericGF::addOrSubtract($result, $coefficient);
- }
-
- return $result;
- }
- $result = $this->coefficients[0];
- for ($i = 1; $i < $size; $i++) {
- $result = GenericGF::addOrSubtract($this->field->multiply($a, $result), $this->coefficients[$i]);
- }
-
- return $result;
- }
-
- /**
- * @return coefficient of x^degree term in this polynomial
- */
- public function getCoefficient($degree)
- {
- return $this->coefficients[(is_countable($this->coefficients) ? count($this->coefficients) : 0) - 1 - $degree];
- }
-
- public function multiply($other)
- {
- $aCoefficients = [];
- $bCoefficients = [];
- $aLength = null;
- $bLength = null;
- $product = [];
- if (is_int($other)) {
- return $this->multiply_($other);
- }
- if ($this->field !== $other->field) {
- throw new \InvalidArgumentException("GenericGFPolys do not have same GenericGF field");
- }
- if ($this->isZero() || $other->isZero()) {
- return $this->field->getZero();
- }
- $aCoefficients = $this->coefficients;
- $aLength = count($aCoefficients);
- $bCoefficients = $other->coefficients;
- $bLength = count($bCoefficients);
- $product = fill_array(0, $aLength + $bLength - 1, 0);
- for ($i = 0; $i < $aLength; $i++) {
- $aCoeff = $aCoefficients[$i];
- for ($j = 0; $j < $bLength; $j++) {
- $product[$i + $j] = GenericGF::addOrSubtract(
- $product[$i + $j],
- $this->field->multiply($aCoeff, $bCoefficients[$j])
- );
- }
- }
-
- return new GenericGFPoly($this->field, $product);
- }
-
- public function multiply_($scalar)
- {
- if ($scalar == 0) {
- return $this->field->getZero();
- }
- if ($scalar == 1) {
- return $this;
- }
- $size = is_countable($this->coefficients) ? count($this->coefficients) : 0;
- $product = fill_array(0, $size, 0);
- for ($i = 0; $i < $size; $i++) {
- $product[$i] = $this->field->multiply($this->coefficients[$i], $scalar);
- }
-
- return new GenericGFPoly($this->field, $product);
- }
-
- /**
- * @return true iff this polynomial is the monomial "0"
- */
- public function isZero()
- {
- return $this->coefficients[0] == 0;
- }
-
- public function multiplyByMonomial($degree, $coefficient)
- {
- if ($degree < 0) {
- throw new \InvalidArgumentException();
- }
- if ($coefficient == 0) {
- return $this->field->getZero();
- }
- $size = is_countable($this->coefficients) ? count($this->coefficients) : 0;
- $product = fill_array(0, $size + $degree, 0);
- for ($i = 0; $i < $size; $i++) {
- $product[$i] = $this->field->multiply($this->coefficients[$i], $coefficient);
- }
-
- return new GenericGFPoly($this->field, $product);
- }
-
- public function divide($other)
- {
- if ($this->field !== $other->field) {
- throw new \InvalidArgumentException("GenericGFPolys do not have same GenericGF field");
- }
- if ($other->isZero()) {
- throw new \InvalidArgumentException("Divide by 0");
- }
-
- $quotient = $this->field->getZero();
- $remainder = $this;
-
- $denominatorLeadingTerm = $other->getCoefficient($other->getDegree());
- $inverseDenominatorLeadingTerm = $this->field->inverse($denominatorLeadingTerm);
-
- while ($remainder->getDegree() >= $other->getDegree() && !$remainder->isZero()) {
- $degreeDifference = $remainder->getDegree() - $other->getDegree();
- $scale = $this->field->multiply($remainder->getCoefficient($remainder->getDegree()), $inverseDenominatorLeadingTerm);
- $term = $other->multiplyByMonomial($degreeDifference, $scale);
- $iterationQuotient = $this->field->buildMonomial($degreeDifference, $scale);
- $quotient = $quotient->addOrSubtract($iterationQuotient);
- $remainder = $remainder->addOrSubtract($term);
- }
-
- return [$quotient, $remainder];
- }
-
- /**
- * @return degree of this polynomial
- */
- public function getDegree()
- {
- return (is_countable($this->coefficients) ? count($this->coefficients) : 0) - 1;
- }
-
- public function addOrSubtract($other)
- {
- $smallerCoefficients = [];
- $largerCoefficients = [];
- $sumDiff = [];
- $lengthDiff = null;
- $countLargerCoefficients = null;
- if ($this->field !== $other->field) {
- throw new \InvalidArgumentException("GenericGFPolys do not have same GenericGF field");
- }
- if ($this->isZero()) {
- return $other;
- }
- if ($other->isZero()) {
- return $this;
- }
-
- $smallerCoefficients = $this->coefficients;
- $largerCoefficients = $other->coefficients;
- if (count($smallerCoefficients) > count($largerCoefficients)) {
- $temp = $smallerCoefficients;
- $smallerCoefficients = $largerCoefficients;
- $largerCoefficients = $temp;
- }
- $sumDiff = fill_array(0, count($largerCoefficients), 0);
- $lengthDiff = count($largerCoefficients) - count($smallerCoefficients);
- // Copy high-order terms only found in higher-degree polynomial's coefficients
- $sumDiff = arraycopy($largerCoefficients, 0, $sumDiff, 0, $lengthDiff);
-
- $countLargerCoefficients = count($largerCoefficients);
- for ($i = $lengthDiff; $i < $countLargerCoefficients; $i++) {
- $sumDiff[$i] = GenericGF::addOrSubtract($smallerCoefficients[$i - $lengthDiff], $largerCoefficients[$i]);
- }
-
- return new GenericGFPoly($this->field, $sumDiff);
- }
-
- //@Override
-
- public function toString()
- {
- $result = '';
- for ($degree = $this->getDegree(); $degree >= 0; $degree--) {
- $coefficient = $this->getCoefficient($degree);
- if ($coefficient != 0) {
- if ($coefficient < 0) {
- $result .= " - ";
- $coefficient = -$coefficient;
- } else {
- if (strlen((string) $result) > 0) {
- $result .= " + ";
- }
- }
- if ($degree == 0 || $coefficient != 1) {
- $alphaPower = $this->field->log($coefficient);
- if ($alphaPower == 0) {
- $result .= '1';
- } elseif ($alphaPower == 1) {
- $result .= 'a';
- } else {
- $result .= "a^";
- $result .= ($alphaPower);
- }
- }
- if ($degree != 0) {
- if ($degree == 1) {
- $result .= 'x';
- } else {
- $result .= "x^";
- $result .= $degree;
- }
- }
- }
- }
-
- return $result;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Reedsolomon/ReedSolomonDecoder.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Reedsolomon/ReedSolomonDecoder.php
deleted file mode 100644
index e95243d..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Reedsolomon/ReedSolomonDecoder.php
+++ /dev/null
@@ -1,198 +0,0 @@
-Implements Reed-Solomon decoding, as the name implies.
- *
- *
The algorithm will not be explained here, but the following references were helpful
- * in creating this implementation:
Much credit is due to William Rucklidge since portions of this code are an indirect
- * port of his C++ Reed-Solomon implementation.
- *
- * @author Sean Owen
- * @author William Rucklidge
- * @author sanfordsquires
- */
-final class ReedSolomonDecoder
-{
- public function __construct(private $field)
- {
- }
-
- /**
- *
Decodes given set of received codewords, which include both data and error-correction
- * codewords. Really, this means it uses Reed-Solomon to detect and correct errors, in-place,
- * in the input.
- *
- * @param data $received and error-correction codewords
- * @param number $twoS of error-correction codewords available
- *
- * @throws ReedSolomonException if decoding fails for any reason
- */
- public function decode(&$received, $twoS)
- {
- $poly = new GenericGFPoly($this->field, $received);
- $syndromeCoefficients = fill_array(0, $twoS, 0);
- $noError = true;
- for ($i = 0; $i < $twoS; $i++) {
- $eval = $poly->evaluateAt($this->field->exp($i + $this->field->getGeneratorBase()));
- $syndromeCoefficients[(is_countable($syndromeCoefficients) ? count($syndromeCoefficients) : 0) - 1 - $i] = $eval;
- if ($eval != 0) {
- $noError = false;
- }
- }
- if ($noError) {
- return;
- }
- $syndrome = new GenericGFPoly($this->field, $syndromeCoefficients);
- $sigmaOmega =
- $this->runEuclideanAlgorithm($this->field->buildMonomial($twoS, 1), $syndrome, $twoS);
- $sigma = $sigmaOmega[0];
- $omega = $sigmaOmega[1];
- $errorLocations = $this->findErrorLocations($sigma);
- $errorMagnitudes = $this->findErrorMagnitudes($omega, $errorLocations);
- $errorLocationsCount = is_countable($errorLocations) ? count($errorLocations) : 0;
- for ($i = 0; $i < $errorLocationsCount; $i++) {
- $position = (is_countable($received) ? count($received) : 0) - 1 - $this->field->log($errorLocations[$i]);
- if ($position < 0) {
- throw new ReedSolomonException("Bad error location");
- }
- $received[$position] = GenericGF::addOrSubtract($received[$position], $errorMagnitudes[$i]);
- }
- }
-
- private function runEuclideanAlgorithm($a, $b, $R)
- {
- // Assume a's degree is >= b's
- if ($a->getDegree() < $b->getDegree()) {
- $temp = $a;
- $a = $b;
- $b = $temp;
- }
-
- $rLast = $a;
- $r = $b;
- $tLast = $this->field->getZero();
- $t = $this->field->getOne();
-
- // Run Euclidean algorithm until r's degree is less than R/2
- while ($r->getDegree() >= $R / 2) {
- $rLastLast = $rLast;
- $tLastLast = $tLast;
- $rLast = $r;
- $tLast = $t;
-
- // Divide rLastLast by rLast, with quotient in q and remainder in r
- if ($rLast->isZero()) {
- // Oops, Euclidean algorithm already terminated?
- throw new ReedSolomonException("r_{i-1} was zero");
- }
- $r = $rLastLast;
- $q = $this->field->getZero();
- $denominatorLeadingTerm = $rLast->getCoefficient($rLast->getDegree());
- $dltInverse = $this->field->inverse($denominatorLeadingTerm);
- while ($r->getDegree() >= $rLast->getDegree() && !$r->isZero()) {
- $degreeDiff = $r->getDegree() - $rLast->getDegree();
- $scale = $this->field->multiply($r->getCoefficient($r->getDegree()), $dltInverse);
- $q = $q->addOrSubtract($this->field->buildMonomial($degreeDiff, $scale));
- $r = $r->addOrSubtract($rLast->multiplyByMonomial($degreeDiff, $scale));
- }
-
- $t = $q->multiply($tLast)->addOrSubtract($tLastLast);
-
- if ($r->getDegree() >= $rLast->getDegree()) {
- throw new ReedSolomonException("Division algorithm failed to reduce polynomial?");
- }
- }
-
- $sigmaTildeAtZero = $t->getCoefficient(0);
- if ($sigmaTildeAtZero == 0) {
- throw new ReedSolomonException("sigmaTilde(0) was zero");
- }
-
- $inverse = $this->field->inverse($sigmaTildeAtZero);
- $sigma = $t->multiply($inverse);
- $omega = $r->multiply($inverse);
-
- return [$sigma, $omega];
- }
-
- private function findErrorLocations($errorLocator)
- {
- // This is a direct application of Chien's search
- $numErrors = $errorLocator->getDegree();
- if ($numErrors == 1) { // shortcut
- return [$errorLocator->getCoefficient(1)];
- }
- $result = fill_array(0, $numErrors, 0);
- $e = 0;
- for ($i = 1; $i < $this->field->getSize() && $e < $numErrors; $i++) {
- if ($errorLocator->evaluateAt($i) == 0) {
- $result[$e] = $this->field->inverse($i);
- $e++;
- }
- }
- if ($e != $numErrors) {
- throw new ReedSolomonException("Error locator degree does not match number of roots");
- }
-
- return $result;
- }
-
- private function findErrorMagnitudes($errorEvaluator, $errorLocations)
- {
- // This is directly applying Forney's Formula
- $s = is_countable($errorLocations) ? count($errorLocations) : 0;
- $result = fill_array(0, $s, 0);
- for ($i = 0; $i < $s; $i++) {
- $xiInverse = $this->field->inverse($errorLocations[$i]);
- $denominator = 1;
- for ($j = 0; $j < $s; $j++) {
- if ($i != $j) {
- //denominator = field.multiply(denominator,
- // GenericGF.addOrSubtract(1, field.multiply(errorLocations[j], xiInverse)));
- // Above should work but fails on some Apple and Linux JDKs due to a Hotspot bug.
- // Below is a funny-looking workaround from Steven Parkes
- $term = $this->field->multiply($errorLocations[$j], $xiInverse);
- $termPlus1 = ($term & 0x1) == 0 ? $term | 1 : $term & ~1;
- $denominator = $this->field->multiply($denominator, $termPlus1);
- }
- }
- $result[$i] = $this->field->multiply(
- $errorEvaluator->evaluateAt($xiInverse),
- $this->field->inverse($denominator)
- );
- if ($this->field->getGeneratorBase() != 0) {
- $result[$i] = $this->field->multiply($result[$i], $xiInverse);
- }
- }
-
- return $result;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Reedsolomon/ReedSolomonException.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Reedsolomon/ReedSolomonException.php
deleted file mode 100644
index cd7babd..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/Reedsolomon/ReedSolomonException.php
+++ /dev/null
@@ -1,28 +0,0 @@
-Thrown when an exception occurs during Reed-Solomon decoding, such as when
- * there are too many errors to correct.
- *
- * @author Sean Owen
- */
-final class ReedSolomonException extends \Exception
-{
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/customFunctions.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/customFunctions.php
deleted file mode 100644
index 7836cc7..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Common/customFunctions.php
+++ /dev/null
@@ -1,103 +0,0 @@
->= 1;
- $num++;
- }
-
- return $num;
- }
-}
-
-if (!function_exists('uRShift')) {
- function uRShift($a, $b)
- {
- static $mask = (8 * PHP_INT_SIZE - 1);
- if ($b === 0) {
- return $a;
- }
-
- return ($a >> $b) & ~(1 << $mask >> ($b - 1));
- }
-}
-
-/*
-function sdvig3($num,$count=1){//>>> 32 bit
- $s = decbin($num);
-
- $sarray = str_split($s,1);
- $sarray = array_slice($sarray,-32);//32bit
-
- for($i=0;$i<=1;$i++) {
- array_pop($sarray);
- array_unshift($sarray, '0');
- }
- return bindec(implode($sarray));
-}
-*/
-
-if (!function_exists('sdvig3')) {
- function sdvig3($a, $b)
- {
- if ($a >= 0) {
- return bindec(decbin($a >> $b)); //simply right shift for positive number
- }
-
- $bin = decbin($a >> $b);
-
- $bin = substr($bin, $b); // zero fill on the left side
-
- return bindec($bin);
- }
-}
-
-if (!function_exists('floatToIntBits')) {
- function floatToIntBits($float_val)
- {
- $int = unpack('i', pack('f', $float_val));
-
- return $int[1];
- }
-}
-
-
-if (!function_exists('fill_array')) {
- function fill_array($index, $count, $value)
- {
- if ($count <= 0) {
- return [0];
- }
-
- return array_fill($index, $count, $value);
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/FormatException.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/FormatException.php
deleted file mode 100644
index d003d6c..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/FormatException.php
+++ /dev/null
@@ -1,49 +0,0 @@
-GDLuminanceSource($gdImage, $dataWidth, $dataHeight);
-
- return;
- }
- parent::__construct($width, $height);
- if ($left + $width > $dataWidth || $top + $height > $dataHeight) {
- throw new \InvalidArgumentException("Crop rectangle does not fit within image data.");
- }
- $this->luminances = $gdImage;
- $this->dataWidth = $dataWidth;
- $this->dataHeight = $dataHeight;
- $this->left = $left;
- $this->top = $top;
- }
-
- public function GDLuminanceSource($gdImage, $width, $height): void
- {
- parent::__construct($width, $height);
-
- $this->dataWidth = $width;
- $this->dataHeight = $height;
- $this->left = 0;
- $this->top = 0;
- $this->gdImage = $gdImage;
-
-
- // In order to measure pure decoding speed, we convert the entire image to a greyscale array
- // up front, which is the same as the Y channel of the YUVLuminanceSource in the real app.
- $this->luminances = [];
- //$this->luminances = $this->grayScaleToBitmap($this->grayscale());
-
- $array = [];
- $rgb = [];
-
- for ($j = 0; $j < $height; $j++) {
- for ($i = 0; $i < $width; $i++) {
- $argb = imagecolorat($this->gdImage, $i, $j);
- $pixel = imagecolorsforindex($this->gdImage, $argb);
- $r = $pixel['red'];
- $g = $pixel['green'];
- $b = $pixel['blue'];
- if ($r == $g && $g == $b) {
- // Image is already greyscale, so pick any channel.
-
- $this->luminances[] = $r;//(($r + 128) % 256) - 128;
- } else {
- // Calculate luminance cheaply, favoring green.
- $this->luminances[] = ($r + 2 * $g + $b) / 4;//(((($r + 2 * $g + $b) / 4) + 128) % 256) - 128;
- }
- }
- }
-
- /*
- for ($y = 0; $y < $height; $y++) {
- $offset = $y * $width;
- for ($x = 0; $x < $width; $x++) {
- $pixel = $pixels[$offset + $x];
- $r = ($pixel >> 16) & 0xff;
- $g = ($pixel >> 8) & 0xff;
- $b = $pixel & 0xff;
- if ($r == $g && $g == $b) {
-// Image is already greyscale, so pick any channel.
-
- $this->luminances[(int)($offset + $x)] = (($r+128) % 256) - 128;
- } else {
-// Calculate luminance cheaply, favoring green.
- $this->luminances[(int)($offset + $x)] = (((($r + 2 * $g + $b) / 4)+128)%256) - 128;
- }
-
-
-
- }
- */
- //}
- // $this->luminances = $this->grayScaleToBitmap($this->luminances);
- }
-
- //@Override
- public function getRow($y, $row = null)
- {
- if ($y < 0 || $y >= $this->getHeight()) {
- throw new \InvalidArgumentException('Requested row is outside the image: ' . $y);
- }
- $width = $this->getWidth();
- if ($row == null || (is_countable($row) ? count($row) : 0) < $width) {
- $row = [];
- }
- $offset = ($y + $this->top) * $this->dataWidth + $this->left;
- $row = arraycopy($this->luminances, $offset, $row, 0, $width);
-
- return $row;
- }
-
- //@Override
- public function getMatrix()
- {
- $width = $this->getWidth();
- $height = $this->getHeight();
-
- // If the caller asks for the entire underlying image, save the copy and give them the
- // original data. The docs specifically warn that result.length must be ignored.
- if ($width == $this->dataWidth && $height == $this->dataHeight) {
- return $this->luminances;
- }
-
- $area = $width * $height;
- $matrix = [];
- $inputOffset = $this->top * $this->dataWidth + $this->left;
-
- // If the width matches the full width of the underlying data, perform a single copy.
- if ($width == $this->dataWidth) {
- $matrix = arraycopy($this->luminances, $inputOffset, $matrix, 0, $area);
-
- return $matrix;
- }
-
- // Otherwise copy one cropped row at a time.
- $rgb = $this->luminances;
- for ($y = 0; $y < $height; $y++) {
- $outputOffset = $y * $width;
- $matrix = arraycopy($rgb, $inputOffset, $matrix, $outputOffset, $width);
- $inputOffset += $this->dataWidth;
- }
-
- return $matrix;
- }
-
- //@Override
- public function isCropSupported()
- {
- return true;
- }
-
- //@Override
- public function crop($left, $top, $width, $height): \Zxing\GDLuminanceSource
- {
- return new GDLuminanceSource(
- $this->luminances,
- $this->dataWidth,
- $this->dataHeight,
- $this->left + $left,
- $this->top + $top,
- $width,
- $height
- );
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/IMagickLuminanceSource.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/IMagickLuminanceSource.php
deleted file mode 100644
index a39f640..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/IMagickLuminanceSource.php
+++ /dev/null
@@ -1,158 +0,0 @@
-_IMagickLuminanceSource($image, $dataWidth, $dataHeight);
-
- return;
- }
- parent::__construct($width, $height);
- if ($left + $width > $dataWidth || $top + $height > $dataHeight) {
- throw new \InvalidArgumentException("Crop rectangle does not fit within image data.");
- }
- $this->luminances = $image;
- $this->dataWidth = $dataWidth;
- $this->dataHeight = $dataHeight;
- $this->left = $left;
- $this->top = $top;
- }
-
- public function _IMagickLuminanceSource(\Imagick $image, $width, $height): void
- {
- parent::__construct($width, $height);
-
- $this->dataWidth = $width;
- $this->dataHeight = $height;
- $this->left = 0;
- $this->top = 0;
- $this->image = $image;
-
-
- // In order to measure pure decoding speed, we convert the entire image to a greyscale array
- // up front, which is the same as the Y channel of the YUVLuminanceSource in the real app.
- $this->luminances = [];
-
- $image->setImageColorspace(\Imagick::COLORSPACE_GRAY);
- // $image->newPseudoImage(0, 0, "magick:rose");
- $pixels = $image->exportImagePixels(1, 1, $width, $height, "RGB", \Imagick::PIXEL_CHAR);
-
- $array = [];
- $rgb = [];
-
- $countPixels = count($pixels);
- for ($i = 0; $i < $countPixels; $i += 3) {
- $r = $pixels[$i] & 0xff;
- $g = $pixels[$i + 1] & 0xff;
- $b = $pixels[$i + 2] & 0xff;
- if ($r == $g && $g == $b) {
- // Image is already greyscale, so pick any channel.
-
- $this->luminances[] = $r;//(($r + 128) % 256) - 128;
- } else {
- // Calculate luminance cheaply, favoring green.
- $this->luminances[] = ($r + 2 * $g + $b) / 4;//(((($r + 2 * $g + $b) / 4) + 128) % 256) - 128;
- }
- }
- }
-
- //@Override
- public function getRow($y, $row = null)
- {
- if ($y < 0 || $y >= $this->getHeight()) {
- throw new \InvalidArgumentException('Requested row is outside the image: ' . $y);
- }
- $width = $this->getWidth();
- if ($row == null || (is_countable($row) ? count($row) : 0) < $width) {
- $row = [];
- }
- $offset = ($y + $this->top) * $this->dataWidth + $this->left;
- $row = arraycopy($this->luminances, $offset, $row, 0, $width);
-
- return $row;
- }
-
- //@Override
- public function getMatrix()
- {
- $width = $this->getWidth();
- $height = $this->getHeight();
-
- // If the caller asks for the entire underlying image, save the copy and give them the
- // original data. The docs specifically warn that result.length must be ignored.
- if ($width == $this->dataWidth && $height == $this->dataHeight) {
- return $this->luminances;
- }
-
- $area = $width * $height;
- $matrix = [];
- $inputOffset = $this->top * $this->dataWidth + $this->left;
-
- // If the width matches the full width of the underlying data, perform a single copy.
- if ($width == $this->dataWidth) {
- $matrix = arraycopy($this->luminances, $inputOffset, $matrix, 0, $area);
-
- return $matrix;
- }
-
- // Otherwise copy one cropped row at a time.
- $rgb = $this->luminances;
- for ($y = 0; $y < $height; $y++) {
- $outputOffset = $y * $width;
- $matrix = arraycopy($rgb, $inputOffset, $matrix, $outputOffset, $width);
- $inputOffset += $this->dataWidth;
- }
-
- return $matrix;
- }
-
- //@Override
- public function isCropSupported(): bool
- {
- return true;
- }
-
- //@Override
- public function crop($left, $top, $width, $height)
- {
- return $this->luminances->cropImage($width, $height, $left, $top);
-
- return new GDLuminanceSource(
- $this->luminances,
- $this->dataWidth,
- $this->dataHeight,
- $this->left + $left,
- $this->top + $top,
- $width,
- $height
- );
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/LuminanceSource.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/LuminanceSource.php
deleted file mode 100644
index 7d39c67..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/LuminanceSource.php
+++ /dev/null
@@ -1,165 +0,0 @@
-width;
- }
-
- /**
- * @return float The height of the bitmap.
- */
- final public function getHeight(): float
- {
- return $this->height;
- }
-
- /**
- * @return bool Whether this subclass supports cropping.
- */
- public function isCropSupported(): bool
- {
- return false;
- }
-
- /**
- * Returns a new object with cropped image data. Implementations may keep a reference to the
- * original data rather than a copy. Only callable if isCropSupported() is true.
- *
- * @param $left The left coordinate, which must be in [0,getWidth())
- * @param $top The top coordinate, which must be in [0,getHeight())
- * @param $width The width of the rectangle to crop.
- * @param $height The height of the rectangle to crop.
- *
- * @return mixed A cropped version of this object.
- */
- public function crop($left, $top, $width, $height)
- {
- throw new \Exception("This luminance source does not support cropping.");
- }
-
- /**
- * @return bool Whether this subclass supports counter-clockwise rotation.
- */
- public function isRotateSupported(): bool
- {
- return false;
- }
-
- /**
- * @return a wrapper of this {@code LuminanceSource} which inverts the luminances it returns -- black becomes
- * white and vice versa, and each value becomes (255-value).
- */
- // public function invert()
- // {
- // return new InvertedLuminanceSource($this);
- // }
-
- /**
- * Returns a new object with rotated image data by 90 degrees counterclockwise.
- * Only callable if {@link #isRotateSupported()} is true.
- *
- * @return mixed A rotated version of this object.
- */
- public function rotateCounterClockwise()
- {
- throw new \Exception("This luminance source does not support rotation by 90 degrees.");
- }
-
- /**
- * Returns a new object with rotated image data by 45 degrees counterclockwise.
- * Only callable if {@link #isRotateSupported()} is true.
- *
- * @return mixed A rotated version of this object.
- */
- public function rotateCounterClockwise45()
- {
- throw new \Exception("This luminance source does not support rotation by 45 degrees.");
- }
-
- final public function toString()
- {
- $row = [];
- $result = '';
- for ($y = 0; $y < $this->height; $y++) {
- $row = $this->getRow($y, $row);
- for ($x = 0; $x < $this->width; $x++) {
- $luminance = $row[$x] & 0xFF;
- $c = '';
- if ($luminance < 0x40) {
- $c = '#';
- } elseif ($luminance < 0x80) {
- $c = '+';
- } elseif ($luminance < 0xC0) {
- $c = '.';
- } else {
- $c = ' ';
- }
- $result .= ($c);
- }
- $result .= ('\n');
- }
-
- return $result;
- }
-
- /**
- * Fetches one row of luminance data from the underlying platform's bitmap. Values range from
- * 0 (black) to 255 (white). Because Java does not have an unsigned byte type, callers will have
- * to bitwise and with 0xff for each value. It is preferable for implementations of this method
- * to only fetch this row rather than the whole image, since no 2D Readers may be installed and
- * getMatrix() may never be called.
- *
- * @param $y ; The row to fetch, which must be in [0,getHeight())
- * @param $row ; An optional preallocated array. If null or too small, it will be ignored.
- * Always use the returned object, and ignore the .length of the array.
- *
- * @return array
- * An array containing the luminance data.
- */
- abstract public function getRow($y, $row);
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/NotFoundException.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/NotFoundException.php
deleted file mode 100644
index 5dab398..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/NotFoundException.php
+++ /dev/null
@@ -1,38 +0,0 @@
- $dataWidth || $top + $height > $dataHeight) {
- throw new \InvalidArgumentException("Crop rectangle does not fit within image data.");
- }
- $this->dataWidth = $dataWidth;
- $this->dataHeight = $dataHeight;
- $this->left = $left;
- $this->top = $top;
- if ($reverseHorizontal) {
- $this->reverseHorizontal($width, $height);
- }
- }
-
- //@Override
- public function getRow($y, $row = null)
- {
- if ($y < 0 || $y >= $this->getHeight()) {
- throw new \InvalidArgumentException("Requested row is outside the image: " + \Y);
- }
- $width = $this->getWidth();
- if ($row == null || (is_countable($row) ? count($row) : 0) < $width) {
- $row = [];//new byte[width];
- }
- $offset = ($y + $this->top) * $this->dataWidth + $this->left;
- $row = arraycopy($this->yuvData, $offset, $row, 0, $width);
-
- return $row;
- }
-
- //@Override
- public function getMatrix()
- {
- $width = $this->getWidth();
- $height = $this->getHeight();
-
- // If the caller asks for the entire underlying image, save the copy and give them the
- // original data. The docs specifically warn that result.length must be ignored.
- if ($width == $this->dataWidth && $height == $this->dataHeight) {
- return $this->yuvData;
- }
-
- $area = $width * $height;
- $matrix = [];//new byte[area];
- $inputOffset = $this->top * $this->dataWidth + $this->left;
-
- // If the width matches the full width of the underlying data, perform a single copy.
- if ($width == $this->dataWidth) {
- $matrix = arraycopy($this->yuvData, $inputOffset, $matrix, 0, $area);
-
- return $matrix;
- }
-
- // Otherwise copy one cropped row at a time.
- $yuv = $this->yuvData;
- for ($y = 0; $y < $height; $y++) {
- $outputOffset = $y * $width;
- $matrix = arraycopy($this->yuvData, $inputOffset, $matrix, $outputOffset, $width);
- $inputOffset += $this->dataWidth;
- }
-
- return $matrix;
- }
-
- // @Override
- public function isCropSupported()
- {
- return true;
- }
-
- // @Override
- public function crop($left, $top, $width, $height): \Zxing\PlanarYUVLuminanceSource
- {
- return new PlanarYUVLuminanceSource(
- $this->yuvData,
- $this->dataWidth,
- $this->dataHeight,
- $this->left + $left,
- $this->top + $top,
- $width,
- $height,
- false
- );
- }
-
- public function renderThumbnail()
- {
- $width = (int)($this->getWidth() / self::$THUMBNAIL_SCALE_FACTOR);
- $height = (int)($this->getHeight() / self::$THUMBNAIL_SCALE_FACTOR);
- $pixels = [];//new int[width * height];
- $yuv = $this->yuvData;
- $inputOffset = $this->top * $this->dataWidth + $this->left;
-
- for ($y = 0; $y < $height; $y++) {
- $outputOffset = $y * $width;
- for ($x = 0; $x < $width; $x++) {
- $grey = ($yuv[$inputOffset + $x * self::$THUMBNAIL_SCALE_FACTOR] & 0xff);
- $pixels[$outputOffset + $x] = (0xFF000000 | ($grey * 0x00010101));
- }
- $inputOffset += $this->dataWidth * self::$THUMBNAIL_SCALE_FACTOR;
- }
-
- return $pixels;
- }
-
- /**
- * @return width of image from {@link #renderThumbnail()}
- */
- /*
- public int getThumbnailWidth() {
- return getWidth() / THUMBNAIL_SCALE_FACTOR;
- }*/
-
- /**
- * @return height of image from {@link #renderThumbnail()}
- */
- /*
- public int getThumbnailHeight() {
- return getHeight() / THUMBNAIL_SCALE_FACTOR;
- }
-
- private void reverseHorizontal(int width, int height) {
- byte[] yuvData = this.yuvData;
- for (int y = 0, rowStart = top * dataWidth + left; y < height; y++, rowStart += dataWidth) {
- int middle = rowStart + width / 2;
- for (int x1 = rowStart, x2 = rowStart + width - 1; x1 < middle; x1++, x2--) {
- byte temp = yuvData[x1];
- yuvData[x1] = yuvData[x2];
- yuvData[x2] = temp;
- }
- }
- }
-*/
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/QrReader.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/QrReader.php
deleted file mode 100644
index 1ee649c..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/QrReader.php
+++ /dev/null
@@ -1,101 +0,0 @@
-readImage($imgSource);
- } else {
- $image = file_get_contents($imgSource);
- $im = imagecreatefromstring($image);
- }
- break;
-
- case QrReader::SOURCE_TYPE_BLOB:
- if ($useImagickIfAvailable && extension_loaded('imagick')) {
- $im = new \Imagick();
- $im->readImageBlob($imgSource);
- } else {
- $im = imagecreatefromstring($imgSource);
- }
- break;
-
- case QrReader::SOURCE_TYPE_RESOURCE:
- $im = $imgSource;
- if ($useImagickIfAvailable && extension_loaded('imagick')) {
- $useImagickIfAvailable = true;
- } else {
- $useImagickIfAvailable = false;
- }
- break;
- }
- if ($useImagickIfAvailable && extension_loaded('imagick')) {
- if (!$im instanceof \Imagick) {
- throw new \InvalidArgumentException('Invalid image source.');
- }
- $width = $im->getImageWidth();
- $height = $im->getImageHeight();
- $source = new IMagickLuminanceSource($im, $width, $height);
- } else {
- if (!$im instanceof \GdImage && !is_object($im)) {
- throw new \InvalidArgumentException('Invalid image source.');
- }
- $width = imagesx($im);
- $height = imagesy($im);
- $source = new GDLuminanceSource($im, $width, $height);
- }
- $histo = new HybridBinarizer($source);
- $this->bitmap = new BinaryBitmap($histo);
- $this->reader = new QRCodeReader();
- }
-
- public function decode($hints = null): void
- {
- try {
- $this->result = $this->reader->decode($this->bitmap, $hints);
- } catch (NotFoundException|FormatException|ChecksumException) {
- $this->result = false;
- }
- }
-
- public function text($hints = null)
- {
- $this->decode($hints);
-
- if ($this->result !== false && method_exists($this->result, 'toString')) {
- return $this->result->toString();
- }
-
- return $this->result;
- }
-
- public function getResult()
- {
- return $this->result;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/BitMatrixParser.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/BitMatrixParser.php
deleted file mode 100644
index 0732f86..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/BitMatrixParser.php
+++ /dev/null
@@ -1,262 +0,0 @@
-= 21 and 1 mod 4
- */
- public function __construct($bitMatrix)
- {
- $dimension = $bitMatrix->getHeight();
- if ($dimension < 21 || ($dimension & 0x03) != 1) {
- throw FormatException::getFormatInstance();
- }
- $this->bitMatrix = $bitMatrix;
- }
-
- /**
- *
Reads the bits in the {@link BitMatrix} representing the finder pattern in the
- * correct order in order to reconstruct the codewords bytes contained within the
- * QR Code.
- *
- * @return bytes encoded within the QR Code
- * @throws FormatException if the exact number of bytes expected is not read
- */
- public function readCodewords()
- {
- $formatInfo = $this->readFormatInformation();
- $version = $this->readVersion();
-
- // Get the data mask for the format used in this QR Code. This will exclude
- // some bits from reading as we wind through the bit matrix.
- $dataMask = DataMask::forReference($formatInfo->getDataMask());
- $dimension = $this->bitMatrix->getHeight();
- $dataMask->unmaskBitMatrix($this->bitMatrix, $dimension);
-
- $functionPattern = $version->buildFunctionPattern();
-
- $readingUp = true;
- if ($version->getTotalCodewords()) {
- $result = fill_array(0, $version->getTotalCodewords(), 0);
- } else {
- $result = [];
- }
- $resultOffset = 0;
- $currentByte = 0;
- $bitsRead = 0;
- // Read columns in pairs, from right to left
- for ($j = $dimension - 1; $j > 0; $j -= 2) {
- if ($j == 6) {
- // Skip whole column with vertical alignment pattern;
- // saves time and makes the other code proceed more cleanly
- $j--;
- }
- // Read alternatingly from bottom to top then top to bottom
- for ($count = 0; $count < $dimension; $count++) {
- $i = $readingUp ? $dimension - 1 - $count : $count;
- for ($col = 0; $col < 2; $col++) {
- // Ignore bits covered by the function pattern
- if (!$functionPattern->get($j - $col, $i)) {
- // Read a bit
- $bitsRead++;
- $currentByte <<= 1;
- if ($this->bitMatrix->get($j - $col, $i)) {
- $currentByte |= 1;
- }
- // If we've made a whole byte, save it off
- if ($bitsRead == 8) {
- $result[$resultOffset++] = $currentByte; //(byte)
- $bitsRead = 0;
- $currentByte = 0;
- }
- }
- }
- }
- $readingUp ^= true; // readingUp = !readingUp; // switch directions
- }
- if ($resultOffset != $version->getTotalCodewords()) {
- throw FormatException::getFormatInstance();
- }
-
- return $result;
- }
-
- /**
- *
Reads format information from one of its two locations within the QR Code.
- *
- * @return {@link FormatInformation} encapsulating the QR Code's format info
- * @throws FormatException if both format information locations cannot be parsed as
- * the valid encoding of format information
- */
- public function readFormatInformation()
- {
- if ($this->parsedFormatInfo != null) {
- return $this->parsedFormatInfo;
- }
-
- // Read top-left format info bits
- $formatInfoBits1 = 0;
- for ($i = 0; $i < 6; $i++) {
- $formatInfoBits1 = $this->copyBit($i, 8, $formatInfoBits1);
- }
- // .. and skip a bit in the timing pattern ...
- $formatInfoBits1 = $this->copyBit(7, 8, $formatInfoBits1);
- $formatInfoBits1 = $this->copyBit(8, 8, $formatInfoBits1);
- $formatInfoBits1 = $this->copyBit(8, 7, $formatInfoBits1);
- // .. and skip a bit in the timing pattern ...
- for ($j = 5; $j >= 0; $j--) {
- $formatInfoBits1 = $this->copyBit(8, $j, $formatInfoBits1);
- }
-
- // Read the top-right/bottom-left pattern too
- $dimension = $this->bitMatrix->getHeight();
- $formatInfoBits2 = 0;
- $jMin = $dimension - 7;
- for ($j = $dimension - 1; $j >= $jMin; $j--) {
- $formatInfoBits2 = $this->copyBit(8, $j, $formatInfoBits2);
- }
- for ($i = $dimension - 8; $i < $dimension; $i++) {
- $formatInfoBits2 = $this->copyBit($i, 8, $formatInfoBits2);
- }
-
- $parsedFormatInfo = FormatInformation::decodeFormatInformation($formatInfoBits1, $formatInfoBits2);
- if ($parsedFormatInfo != null) {
- return $parsedFormatInfo;
- }
- throw FormatException::getFormatInstance();
- }
-
- private function copyBit($i, $j, $versionBits)
- {
- $bit = $this->mirror ? $this->bitMatrix->get($j, $i) : $this->bitMatrix->get($i, $j);
-
- return $bit ? ($versionBits << 1) | 0x1 : $versionBits << 1;
- }
-
- /**
- *
Reads version information from one of its two locations within the QR Code.
- *
- * @return {@link Version} encapsulating the QR Code's version
- * @throws FormatException if both version information locations cannot be parsed as
- * the valid encoding of version information
- */
- public function readVersion()
- {
- if ($this->parsedVersion != null) {
- return $this->parsedVersion;
- }
-
- $dimension = $this->bitMatrix->getHeight();
-
- $provisionalVersion = ($dimension - 17) / 4;
- if ($provisionalVersion <= 6) {
- return Version::getVersionForNumber($provisionalVersion);
- }
-
- // Read top-right version info: 3 wide by 6 tall
- $versionBits = 0;
- $ijMin = $dimension - 11;
- for ($j = 5; $j >= 0; $j--) {
- for ($i = $dimension - 9; $i >= $ijMin; $i--) {
- $versionBits = $this->copyBit($i, $j, $versionBits);
- }
- }
-
- $theParsedVersion = Version::decodeVersionInformation($versionBits);
- if ($theParsedVersion != null && $theParsedVersion->getDimensionForVersion() == $dimension) {
- $this->parsedVersion = $theParsedVersion;
-
- return $theParsedVersion;
- }
-
- // Hmm, failed. Try bottom left: 6 wide by 3 tall
- $versionBits = 0;
- for ($i = 5; $i >= 0; $i--) {
- for ($j = $dimension - 9; $j >= $ijMin; $j--) {
- $versionBits = $this->copyBit($i, $j, $versionBits);
- }
- }
-
- $theParsedVersion = Version::decodeVersionInformation($versionBits);
- if ($theParsedVersion != null && $theParsedVersion->getDimensionForVersion() == $dimension) {
- $this->parsedVersion = $theParsedVersion;
-
- return $theParsedVersion;
- }
- throw FormatException::getFormatInstance();
- }
-
- /**
- * Revert the mask removal done while reading the code words. The bit matrix should revert to its original state.
- */
- public function remask(): void
- {
- if ($this->parsedFormatInfo == null) {
- return; // We have no format information, and have no data mask
- }
- $dataMask = DataMask::forReference($this->parsedFormatInfo->getDataMask());
- $dimension = $this->bitMatrix->getHeight();
- $dataMask->unmaskBitMatrix($this->bitMatrix, $dimension);
- }
-
- /**
- * Prepare the parser for a mirrored operation.
- * This flag has effect only on the {@link #readFormatInformation()} and the
- * {@link #readVersion()}. Before proceeding with {@link #readCodewords()} the
- * {@link #mirror()} method should be called.
- *
- * @param Whether $mirror to read version and format information mirrored.
- */
- public function setMirror($mirror): void
- {
- $parsedVersion = null;
- $parsedFormatInfo = null;
- $this->mirror = $mirror;
- }
-
- /** Mirror the bit matrix in order to attempt a second reading. */
- public function mirror(): void
- {
- for ($x = 0; $x < $this->bitMatrix->getWidth(); $x++) {
- for ($y = $x + 1; $y < $this->bitMatrix->getHeight(); $y++) {
- if ($this->bitMatrix->get($x, $y) != $this->bitMatrix->get($y, $x)) {
- $this->bitMatrix->flip($y, $x);
- $this->bitMatrix->flip($x, $y);
- }
- }
- }
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/DataBlock.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/DataBlock.php
deleted file mode 100644
index 1fb8565..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/DataBlock.php
+++ /dev/null
@@ -1,127 +0,0 @@
-Encapsulates a block of data within a QR Code. QR Codes may split their data into
- * multiple blocks, each of which is a unit of data and error-correction codewords. Each
- * is represented by an instance of this class.
- *
- * @author Sean Owen
- */
-final class DataBlock
-{
- //byte[]
-
- private function __construct(private $numDataCodewords, private $codewords)
- {
- }
-
- /**
- *
When QR Codes use multiple data blocks, they are actually interleaved.
- * That is, the first byte of data block 1 to n is written, then the second bytes, and so on. This
- * method will separate the data into original blocks.
- *
- * @param bytes $rawCodewords as read directly from the QR Code
- * @param version $version of the QR Code
- * @param error $ecLevel-correction level of the QR Code
- *
- * @return array DataBlocks containing original bytes, "de-interleaved" from representation in the
- * QR Code
- */
- public static function getDataBlocks(
- $rawCodewords,
- $version,
- $ecLevel
- )
- {
- if ((is_countable($rawCodewords) ? count($rawCodewords) : 0) != $version->getTotalCodewords()) {
- throw new \InvalidArgumentException();
- }
-
- // Figure out the number and size of data blocks used by this version and
- // error correction level
- $ecBlocks = $version->getECBlocksForLevel($ecLevel);
-
- // First count the total number of data blocks
- $totalBlocks = 0;
- $ecBlockArray = $ecBlocks->getECBlocks();
- foreach ($ecBlockArray as $ecBlock) {
- $totalBlocks += $ecBlock->getCount();
- }
-
- // Now establish DataBlocks of the appropriate size and number of data codewords
- $result = [];//new DataBlock[$totalBlocks];
- $numResultBlocks = 0;
- foreach ($ecBlockArray as $ecBlock) {
- $ecBlockCount = $ecBlock->getCount();
- for ($i = 0; $i < $ecBlockCount; $i++) {
- $numDataCodewords = $ecBlock->getDataCodewords();
- $numBlockCodewords = $ecBlocks->getECCodewordsPerBlock() + $numDataCodewords;
- $result[$numResultBlocks++] = new DataBlock($numDataCodewords, fill_array(0, $numBlockCodewords, 0));
- }
- }
-
- // All blocks have the same amount of data, except that the last n
- // (where n may be 0) have 1 more byte. Figure out where these start.
- $shorterBlocksTotalCodewords = is_countable($result[0]->codewords) ? count($result[0]->codewords) : 0;
- $longerBlocksStartAt = count($result) - 1;
- while ($longerBlocksStartAt >= 0) {
- $numCodewords = is_countable($result[$longerBlocksStartAt]->codewords) ? count($result[$longerBlocksStartAt]->codewords) : 0;
- if ($numCodewords == $shorterBlocksTotalCodewords) {
- break;
- }
- $longerBlocksStartAt--;
- }
- $longerBlocksStartAt++;
-
- $shorterBlocksNumDataCodewords = $shorterBlocksTotalCodewords - $ecBlocks->getECCodewordsPerBlock();
- // The last elements of result may be 1 element longer;
- // first fill out as many elements as all of them have
- $rawCodewordsOffset = 0;
- for ($i = 0; $i < $shorterBlocksNumDataCodewords; $i++) {
- for ($j = 0; $j < $numResultBlocks; $j++) {
- $result[$j]->codewords[$i] = $rawCodewords[$rawCodewordsOffset++];
- }
- }
- // Fill out the last data block in the longer ones
- for ($j = $longerBlocksStartAt; $j < $numResultBlocks; $j++) {
- $result[$j]->codewords[$shorterBlocksNumDataCodewords] = $rawCodewords[$rawCodewordsOffset++];
- }
- // Now add in error correction blocks
- $max = is_countable($result[0]->codewords) ? count($result[0]->codewords) : 0;
- for ($i = $shorterBlocksNumDataCodewords; $i < $max; $i++) {
- for ($j = 0; $j < $numResultBlocks; $j++) {
- $iOffset = $j < $longerBlocksStartAt ? $i : $i + 1;
- $result[$j]->codewords[$iOffset] = $rawCodewords[$rawCodewordsOffset++];
- }
- }
-
- return $result;
- }
-
- public function getNumDataCodewords()
- {
- return $this->numDataCodewords;
- }
-
- public function getCodewords()
- {
- return $this->codewords;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/DataMask.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/DataMask.php
deleted file mode 100644
index 4d5d2f2..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/DataMask.php
+++ /dev/null
@@ -1,194 +0,0 @@
-Encapsulates data masks for the data bits in a QR code, per ISO 18004:2006 6.8. Implementations
- * of this class can un-mask a raw BitMatrix. For simplicity, they will unmask the entire BitMatrix,
- * including areas used for finder patterns, timing patterns, etc. These areas should be unused
- * after the point they are unmasked anyway.
- *
- *
Note that the diagram in section 6.8.1 is misleading since it indicates that i is column position
- * and j is row position. In fact, as the text says, i is row position and j is column position.
- *
- * @author Sean Owen
- */
-abstract class DataMask
-{
- /**
- * See ISO 18004:2006 6.8.1
- */
- private static array $DATA_MASKS = [];
-
- public function __construct()
- {
- }
-
- public static function Init(): void
- {
- self::$DATA_MASKS = [
- new DataMask000(),
- new DataMask001(),
- new DataMask010(),
- new DataMask011(),
- new DataMask100(),
- new DataMask101(),
- new DataMask110(),
- new DataMask111(),
- ];
- }
-
- /**
- * @param a $reference value between 0 and 7 indicating one of the eight possible
- * data mask patterns a QR Code may use
- *
- * @return DataMask encapsulating the data mask pattern
- */
- public static function forReference($reference)
- {
- if ($reference < 0 || $reference > 7) {
- throw new \InvalidArgumentException();
- }
-
- return self::$DATA_MASKS[$reference];
- }
-
- /**
- *
Implementations of this method reverse the data masking process applied to a QR Code and
- * make its bits ready to read.
- *
- * @param representation $bits of QR Code bits
- * @param dimension $dimension of QR Code, represented by bits, being unmasked
- */
- final public function unmaskBitMatrix($bits, $dimension): void
- {
- for ($i = 0; $i < $dimension; $i++) {
- for ($j = 0; $j < $dimension; $j++) {
- if ($this->isMasked($i, $j)) {
- $bits->flip($j, $i);
- }
- }
- }
- }
-
- abstract public function isMasked($i, $j);
-}
-
-DataMask::Init();
-
-/**
- * 000: mask bits for which (x + y) mod 2 == 0
- */
-final class DataMask000 extends DataMask
-{
- // @Override
- public function isMasked($i, $j)
- {
- return (($i + $j) & 0x01) == 0;
- }
-}
-
-/**
- * 001: mask bits for which x mod 2 == 0
- */
-final class DataMask001 extends DataMask
-{
- //@Override
- public function isMasked($i, $j)
- {
- return ($i & 0x01) == 0;
- }
-}
-
-/**
- * 010: mask bits for which y mod 3 == 0
- */
-final class DataMask010 extends DataMask
-{
- //@Override
- public function isMasked($i, $j)
- {
- return $j % 3 == 0;
- }
-}
-
-/**
- * 011: mask bits for which (x + y) mod 3 == 0
- */
-final class DataMask011 extends DataMask
-{
- //@Override
- public function isMasked($i, $j)
- {
- return ($i + $j) % 3 == 0;
- }
-}
-
-/**
- * 100: mask bits for which (x/2 + y/3) mod 2 == 0
- */
-final class DataMask100 extends DataMask
-{
- //@Override
- public function isMasked($i, $j)
- {
- return (int)(((int)($i / 2) + (int)($j / 3)) & 0x01) == 0;
- }
-}
-
-/**
- * 101: mask bits for which xy mod 2 + xy mod 3 == 0
- */
-final class DataMask101 extends DataMask
-{
- //@Override
- public function isMasked($i, $j)
- {
- $temp = $i * $j;
-
- return ($temp & 0x01) + ($temp % 3) == 0;
- }
-}
-
-/**
- * 110: mask bits for which (xy mod 2 + xy mod 3) mod 2 == 0
- */
-final class DataMask110 extends DataMask
-{
- //@Override
- public function isMasked($i, $j)
- {
- $temp = $i * $j;
-
- return ((($temp & 0x01) + ($temp % 3)) & 0x01) == 0;
- }
-}
-
-/**
- * 111: mask bits for which ((x+y)mod 2 + xy mod 3) mod 2 == 0
- */
-final class DataMask111 extends DataMask
-{
- //@Override
- public function isMasked($i, $j)
- {
- return (((($i + $j) & 0x01) + (($i * $j) % 3)) & 0x01) == 0;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/DecodedBitStreamParser.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/DecodedBitStreamParser.php
deleted file mode 100644
index d4bdc7f..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/DecodedBitStreamParser.php
+++ /dev/null
@@ -1,364 +0,0 @@
-QR Codes can encode text as bits in one of several modes, and can use multiple modes
- * in one QR Code. This class decodes the bits back into text.
- *
- *
See ISO 18004:2006, 6.4.3 - 6.4.7
- *
- * @author Sean Owen
- */
-final class DecodedBitStreamParser
-{
- /**
- * See ISO 18004:2006, 6.4.4 Table 5
- */
- private static array $ALPHANUMERIC_CHARS = [
- '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B',
- 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
- 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
- ' ', '$', '%', '*', '+', '-', '.', '/', ':',
- ];
- private static int $GB2312_SUBSET = 1;
-
- public static function decode(
- $bytes,
- $version,
- $ecLevel,
- $hints
- ): \Zxing\Common\DecoderResult
- {
- $bits = new BitSource($bytes);
- $result = '';//new StringBuilder(50);
- $byteSegments = [];
- $symbolSequence = -1;
- $parityData = -1;
-
- try {
- $currentCharacterSetECI = null;
- $fc1InEffect = false;
- $mode = '';
- do {
- // While still another segment to read...
- if ($bits->available() < 4) {
- // OK, assume we're done. Really, a TERMINATOR mode should have been recorded here
- $mode = Mode::$TERMINATOR;
- } else {
- $mode = Mode::forBits($bits->readBits(4)); // mode is encoded by 4 bits
- }
- if ($mode != Mode::$TERMINATOR) {
- if ($mode == Mode::$FNC1_FIRST_POSITION || $mode == Mode::$FNC1_SECOND_POSITION) {
- // We do little with FNC1 except alter the parsed result a bit according to the spec
- $fc1InEffect = true;
- } elseif ($mode == Mode::$STRUCTURED_APPEND) {
- if ($bits->available() < 16) {
- throw FormatException::getFormatInstance();
- }
- // sequence number and parity is added later to the result metadata
- // Read next 8 bits (symbol sequence #) and 8 bits (parity data), then continue
- $symbolSequence = $bits->readBits(8);
- $parityData = $bits->readBits(8);
- } elseif ($mode == Mode::$ECI) {
- // Count doesn't apply to ECI
- $value = self::parseECIValue($bits);
- $currentCharacterSetECI = CharacterSetECI::getCharacterSetECIByValue($value);
- if ($currentCharacterSetECI == null) {
- throw FormatException::getFormatInstance();
- }
- } else {
- // First handle Hanzi mode which does not start with character count
- if ($mode == Mode::$HANZI) {
- //chinese mode contains a sub set indicator right after mode indicator
- $subset = $bits->readBits(4);
- $countHanzi = $bits->readBits($mode->getCharacterCountBits($version));
- if ($subset == self::$GB2312_SUBSET) {
- self::decodeHanziSegment($bits, $result, $countHanzi);
- }
- } else {
- // "Normal" QR code modes:
- // How many characters will follow, encoded in this mode?
- $count = $bits->readBits($mode->getCharacterCountBits($version));
- if ($mode == Mode::$NUMERIC) {
- self::decodeNumericSegment($bits, $result, $count);
- } elseif ($mode == Mode::$ALPHANUMERIC) {
- self::decodeAlphanumericSegment($bits, $result, $count, $fc1InEffect);
- } elseif ($mode == Mode::$BYTE) {
- self::decodeByteSegment($bits, $result, $count, $currentCharacterSetECI, $byteSegments, $hints);
- } elseif ($mode == Mode::$KANJI) {
- self::decodeKanjiSegment($bits, $result, $count);
- } else {
- throw FormatException::getFormatInstance();
- }
- }
- }
- }
- } while ($mode != Mode::$TERMINATOR);
- } catch (\InvalidArgumentException) {
- // from readBits() calls
- throw FormatException::getFormatInstance();
- }
-
- return new DecoderResult(
- $bytes,
- $result,
- empty($byteSegments) ? null : $byteSegments,
- $ecLevel == null ? null : 'L',//ErrorCorrectionLevel::toString($ecLevel),
- $symbolSequence,
- $parityData
- );
- }
-
- private static function parseECIValue($bits)
- {
- $firstByte = $bits->readBits(8);
- if (($firstByte & 0x80) == 0) {
- // just one byte
- return $firstByte & 0x7F;
- }
- if (($firstByte & 0xC0) == 0x80) {
- // two bytes
- $secondByte = $bits->readBits(8);
-
- return (($firstByte & 0x3F) << 8) | $secondByte;
- }
- if (($firstByte & 0xE0) == 0xC0) {
- // three bytes
- $secondThirdBytes = $bits->readBits(16);
-
- return (($firstByte & 0x1F) << 16) | $secondThirdBytes;
- }
- throw FormatException::getFormatInstance();
- }
-
- /**
- * See specification GBT 18284-2000
- */
- private static function decodeHanziSegment(
- $bits,
- &$result,
- $count
- )
- {
- // Don't crash trying to read more bits than we have available.
- if ($count * 13 > $bits->available()) {
- throw FormatException::getFormatInstance();
- }
-
- // Each character will require 2 bytes. Read the characters as 2-byte pairs
- // and decode as GB2312 afterwards
- $buffer = fill_array(0, 2 * $count, 0);
- $offset = 0;
- while ($count > 0) {
- // Each 13 bits encodes a 2-byte character
- $twoBytes = $bits->readBits(13);
- $assembledTwoBytes = (($twoBytes / 0x060) << 8) | ($twoBytes % 0x060);
- if ($assembledTwoBytes < 0x003BF) {
- // In the 0xA1A1 to 0xAAFE range
- $assembledTwoBytes += 0x0A1A1;
- } else {
- // In the 0xB0A1 to 0xFAFE range
- $assembledTwoBytes += 0x0A6A1;
- }
- $buffer[$offset] = (($assembledTwoBytes >> 8) & 0xFF);//(byte)
- $buffer[$offset + 1] = ($assembledTwoBytes & 0xFF);//(byte)
- $offset += 2;
- $count--;
- }
- $result .= iconv('GB2312', 'UTF-8', implode($buffer));
- }
-
- private static function decodeNumericSegment(
- $bits,
- &$result,
- $count
- )
- {
- // Read three digits at a time
- while ($count >= 3) {
- // Each 10 bits encodes three digits
- if ($bits->available() < 10) {
- throw FormatException::getFormatInstance();
- }
- $threeDigitsBits = $bits->readBits(10);
- if ($threeDigitsBits >= 1000) {
- throw FormatException::getFormatInstance();
- }
- $result .= (self::toAlphaNumericChar($threeDigitsBits / 100));
- $result .= (self::toAlphaNumericChar(($threeDigitsBits / 10) % 10));
- $result .= (self::toAlphaNumericChar($threeDigitsBits % 10));
- $count -= 3;
- }
- if ($count == 2) {
- // Two digits left over to read, encoded in 7 bits
- if ($bits->available() < 7) {
- throw FormatException::getFormatInstance();
- }
- $twoDigitsBits = $bits->readBits(7);
- if ($twoDigitsBits >= 100) {
- throw FormatException::getFormatInstance();
- }
- $result .= (self::toAlphaNumericChar($twoDigitsBits / 10));
- $result .= (self::toAlphaNumericChar($twoDigitsBits % 10));
- } elseif ($count == 1) {
- // One digit left over to read
- if ($bits->available() < 4) {
- throw FormatException::getFormatInstance();
- }
- $digitBits = $bits->readBits(4);
- if ($digitBits >= 10) {
- throw FormatException::getFormatInstance();
- }
- $result .= (self::toAlphaNumericChar($digitBits));
- }
- }
-
- private static function toAlphaNumericChar($value)
- {
- if ($value >= count(self::$ALPHANUMERIC_CHARS)) {
- throw FormatException::getFormatInstance();
- }
-
- return self::$ALPHANUMERIC_CHARS[$value];
- }
-
- private static function decodeAlphanumericSegment(
- $bits,
- &$result,
- $count,
- $fc1InEffect
- )
- {
- // Read two characters at a time
- $start = strlen((string) $result);
- while ($count > 1) {
- if ($bits->available() < 11) {
- throw FormatException::getFormatInstance();
- }
- $nextTwoCharsBits = $bits->readBits(11);
- $result .= (self::toAlphaNumericChar($nextTwoCharsBits / 45));
- $result .= (self::toAlphaNumericChar($nextTwoCharsBits % 45));
- $count -= 2;
- }
- if ($count == 1) {
- // special case: one character left
- if ($bits->available() < 6) {
- throw FormatException::getFormatInstance();
- }
- $result .= self::toAlphaNumericChar($bits->readBits(6));
- }
- // See section 6.4.8.1, 6.4.8.2
- if ($fc1InEffect) {
- // We need to massage the result a bit if in an FNC1 mode:
- for ($i = $start; $i < strlen((string) $result); $i++) {
- if ($result[$i] == '%') {
- if ($i < strlen((string) $result) - 1 && $result[$i + 1] == '%') {
- // %% is rendered as %
- $result = substr_replace($result, '', $i + 1, 1);//deleteCharAt(i + 1);
- } else {
- // In alpha mode, % should be converted to FNC1 separator 0x1D
- $result . setCharAt($i, chr(0x1D));
- }
- }
- }
- }
- }
-
- private static function decodeByteSegment(
- $bits,
- &$result,
- $count,
- $currentCharacterSetECI,
- &$byteSegments,
- $hints
- )
- {
- // Don't crash trying to read more bits than we have available.
- if (8 * $count > $bits->available()) {
- throw FormatException::getFormatInstance();
- }
-
- $readBytes = fill_array(0, $count, 0);
- for ($i = 0; $i < $count; $i++) {
- $readBytes[$i] = $bits->readBits(8);//(byte)
- }
- $text = implode(array_map('chr', $readBytes));
- $encoding = '';
- if ($currentCharacterSetECI == null) {
- // The spec isn't clear on this mode; see
- // section 6.4.5: t does not say which encoding to assuming
- // upon decoding. I have seen ISO-8859-1 used as well as
- // Shift_JIS -- without anything like an ECI designator to
- // give a hint.
-
- $encoding = mb_detect_encoding($text, $hints);
- } else {
- $encoding = $currentCharacterSetECI->name();
- }
- // $result.= mb_convert_encoding($text ,$encoding);//(new String(readBytes, encoding));
- $result .= $text;//(new String(readBytes, encoding));
-
- $byteSegments = array_merge($byteSegments, $readBytes);
- }
-
- private static function decodeKanjiSegment(
- $bits,
- &$result,
- $count
- )
- {
- // Don't crash trying to read more bits than we have available.
- if ($count * 13 > $bits->available()) {
- throw FormatException::getFormatInstance();
- }
-
- // Each character will require 2 bytes. Read the characters as 2-byte pairs
- // and decode as Shift_JIS afterwards
- $buffer = [0, 2 * $count, 0];
- $offset = 0;
- while ($count > 0) {
- // Each 13 bits encodes a 2-byte character
- $twoBytes = $bits->readBits(13);
- $assembledTwoBytes = (($twoBytes / 0x0C0) << 8) | ($twoBytes % 0x0C0);
- if ($assembledTwoBytes < 0x01F00) {
- // In the 0x8140 to 0x9FFC range
- $assembledTwoBytes += 0x08140;
- } else {
- // In the 0xE040 to 0xEBBF range
- $assembledTwoBytes += 0x0C140;
- }
- $buffer[$offset] = ($assembledTwoBytes >> 8);//(byte)
- $buffer[$offset + 1] = $assembledTwoBytes; //(byte)
- $offset += 2;
- $count--;
- }
- // Shift_JIS may not be supported in some environments:
-
- $result .= iconv('shift-jis', 'utf-8', implode($buffer));
- }
-
- private function DecodedBitStreamParser(): void
- {
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Decoder.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Decoder.php
deleted file mode 100644
index 4a40e89..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Decoder.php
+++ /dev/null
@@ -1,208 +0,0 @@
-The main class which implements QR Code decoding -- as opposed to locating and extracting
- * the QR Code from an image.
- *
- * @author Sean Owen
- */
-final class Decoder
-{
- private readonly \Zxing\Common\Reedsolomon\ReedSolomonDecoder $rsDecoder;
-
- public function __construct()
- {
- $this->rsDecoder = new ReedSolomonDecoder(GenericGF::$QR_CODE_FIELD_256);
- }
-
- public function decode($variable, $hints = null)
- {
- if (is_array($variable)) {
- return $this->decodeImage($variable, $hints);
- } elseif ($variable instanceof BitMatrix) {
- return $this->decodeBits($variable, $hints);
- } elseif ($variable instanceof BitMatrixParser) {
- return $this->decodeParser($variable, $hints);
- }
- die('decode error Decoder.php');
- }
-
- /**
- *
Convenience method that can decode a QR Code represented as a 2D array of booleans.
- * "true" is taken to mean a black module.
- *
- * @param array $image booleans representing white/black QR Code modules
- * @param decoding $hints hints that should be used to influence decoding
- *
- * @return text and bytes encoded within the QR Code
- * @throws FormatException if the QR Code cannot be decoded
- * @throws ChecksumException if error correction fails
- */
- public function decodeImage($image, $hints = null)
- {
- $dimension = count($image);
- $bits = new BitMatrix($dimension);
- for ($i = 0; $i < $dimension; $i++) {
- for ($j = 0; $j < $dimension; $j++) {
- if ($image[$i][$j]) {
- $bits->set($j, $i);
- }
- }
- }
-
- return $this->decode($bits, $hints);
- }
-
-
- /**
- *
Decodes a QR Code represented as a {@link BitMatrix}. A 1 or "true" is taken to mean a black module.
- *
- * @param BitMatrix $bits booleans representing white/black QR Code modules
- * @param decoding $hints hints that should be used to influence decoding
- *
- * @return text and bytes encoded within the QR Code
- * @throws FormatException if the QR Code cannot be decoded
- * @throws ChecksumException if error correction fails
- */
- public function decodeBits($bits, $hints = null)
- {
-
-// Construct a parser and read version, error-correction level
- $parser = new BitMatrixParser($bits);
- $fe = null;
- $ce = null;
- try {
- return $this->decode($parser, $hints);
- } catch (FormatException $e) {
- $fe = $e;
- } catch (ChecksumException $e) {
- $ce = $e;
- }
-
- try {
-
- // Revert the bit matrix
- $parser->remask();
-
- // Will be attempting a mirrored reading of the version and format info.
- $parser->setMirror(true);
-
- // Preemptively read the version.
- $parser->readVersion();
-
- // Preemptively read the format information.
- $parser->readFormatInformation();
-
- /*
- * Since we're here, this means we have successfully detected some kind
- * of version and format information when mirrored. This is a good sign,
- * that the QR code may be mirrored, and we should try once more with a
- * mirrored content.
- */
- // Prepare for a mirrored reading.
- $parser->mirror();
-
- $result = $this->decode($parser, $hints);
-
- // Success! Notify the caller that the code was mirrored.
- $result->setOther(new QRCodeDecoderMetaData(true));
-
- return $result;
- } catch (FormatException $e) {// catch (FormatException | ChecksumException e) {
- // Throw the exception from the original reading
- if ($fe != null) {
- throw $fe;
- }
- if ($ce != null) {
- throw $ce;
- }
- throw $e;
- }
- }
-
- private function decodeParser($parser, $hints = null)
- {
- $version = $parser->readVersion();
- $ecLevel = $parser->readFormatInformation()->getErrorCorrectionLevel();
-
- // Read codewords
- $codewords = $parser->readCodewords();
- // Separate into data blocks
- $dataBlocks = DataBlock::getDataBlocks($codewords, $version, $ecLevel);
-
- // Count total number of data bytes
- $totalBytes = 0;
- foreach ($dataBlocks as $dataBlock) {
- $totalBytes += $dataBlock->getNumDataCodewords();
- }
- $resultBytes = fill_array(0, $totalBytes, 0);
- $resultOffset = 0;
-
- // Error-correct and copy data blocks together into a stream of bytes
- foreach ($dataBlocks as $dataBlock) {
- $codewordBytes = $dataBlock->getCodewords();
- $numDataCodewords = $dataBlock->getNumDataCodewords();
- $this->correctErrors($codewordBytes, $numDataCodewords);
- for ($i = 0; $i < $numDataCodewords; $i++) {
- $resultBytes[$resultOffset++] = $codewordBytes[$i];
- }
- }
-
- // Decode the contents of that stream of bytes
- return DecodedBitStreamParser::decode($resultBytes, $version, $ecLevel, $hints);
- }
-
- /**
- *
Given data and error-correction codewords received, possibly corrupted by errors, attempts to
- * correct the errors in-place using Reed-Solomon error correction.
- *
- * @param data $codewordBytes and error correction codewords
- * @param number $numDataCodewords of codewords that are data bytes
- *
- * @throws ChecksumException if error correction fails
- */
- private function correctErrors(&$codewordBytes, $numDataCodewords)
- {
- $numCodewords = is_countable($codewordBytes) ? count($codewordBytes) : 0;
- // First read into an array of ints
- $codewordsInts = fill_array(0, $numCodewords, 0);
- for ($i = 0; $i < $numCodewords; $i++) {
- $codewordsInts[$i] = $codewordBytes[$i] & 0xFF;
- }
- $numECCodewords = (is_countable($codewordBytes) ? count($codewordBytes) : 0) - $numDataCodewords;
- try {
- $this->rsDecoder->decode($codewordsInts, $numECCodewords);
- } catch (ReedSolomonException) {
- throw ChecksumException::getChecksumInstance();
- }
- // Copy back into array of bytes -- only need to worry about the bytes that were data
- // We don't care about errors in the error-correction codewords
- for ($i = 0; $i < $numDataCodewords; $i++) {
- $codewordBytes[$i] = $codewordsInts[$i];
- }
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/ErrorCorrectionLevel.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/ErrorCorrectionLevel.php
deleted file mode 100644
index f2ccfca..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/ErrorCorrectionLevel.php
+++ /dev/null
@@ -1,90 +0,0 @@
-See ISO 18004:2006, 6.5.1. This enum encapsulates the four error correction levels
- * defined by the QR code standard.
- *
- * @author Sean Owen
- */
-class ErrorCorrectionLevel
-{
- /**
- * @var \Zxing\Qrcode\Decoder\ErrorCorrectionLevel[]|null
- */
- private static ?array $FOR_BITS = null;
-
- public function __construct(private $bits, private $ordinal = 0)
- {
- }
-
- public static function Init(): void
- {
- self::$FOR_BITS = [
-
-
- new ErrorCorrectionLevel(0x00, 1), //M
- new ErrorCorrectionLevel(0x01, 0), //L
- new ErrorCorrectionLevel(0x02, 3), //H
- new ErrorCorrectionLevel(0x03, 2), //Q
-
- ];
- }
- /** L = ~7% correction */
- // self::$L = new ErrorCorrectionLevel(0x01);
- /** M = ~15% correction */
- //self::$M = new ErrorCorrectionLevel(0x00);
- /** Q = ~25% correction */
- //self::$Q = new ErrorCorrectionLevel(0x03);
- /** H = ~30% correction */
- //self::$H = new ErrorCorrectionLevel(0x02);
- /**
- * @param int $bits containing the two bits encoding a QR Code's error correction level
- *
- * @return ErrorCorrectionLevel representing the encoded error correction level
- */
- public static function forBits($bits)
- {
- if ($bits < 0 || $bits >= (is_countable(self::$FOR_BITS) ? count(self::$FOR_BITS) : 0)) {
- throw new \InvalidArgumentException();
- }
- $level = self::$FOR_BITS[$bits];
-
- // $lev = self::$$bit;
- return $level;
- }
-
-
- public function getBits()
- {
- return $this->bits;
- }
-
- public function toString()
- {
- return $this->bits;
- }
-
- public function getOrdinal()
- {
- return $this->ordinal;
- }
-}
-
-ErrorCorrectionLevel::Init();
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/FormatInformation.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/FormatInformation.php
deleted file mode 100644
index fcee43c..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/FormatInformation.php
+++ /dev/null
@@ -1,193 +0,0 @@
-Encapsulates a QR Code's format information, including the data mask used and
- * error correction level.
- *
- * @author Sean Owen
- * @see DataMask
- * @see ErrorCorrectionLevel
- */
-final class FormatInformation
-{
- public static $FORMAT_INFO_MASK_QR;
-
- /**
- * See ISO 18004:2006, Annex C, Table C.1
- */
- public static $FORMAT_INFO_DECODE_LOOKUP;
- /**
- * Offset i holds the number of 1 bits in the binary representation of i
- * @var int[]|null
- */
- private static ?array $BITS_SET_IN_HALF_BYTE = null;
-
- private readonly \Zxing\Qrcode\Decoder\ErrorCorrectionLevel $errorCorrectionLevel;
- private readonly int $dataMask;
-
- private function __construct($formatInfo)
- {
- // Bits 3,4
- $this->errorCorrectionLevel = ErrorCorrectionLevel::forBits(($formatInfo >> 3) & 0x03);
- // Bottom 3 bits
- $this->dataMask = ($formatInfo & 0x07);//(byte)
- }
-
- public static function Init(): void
- {
- self::$FORMAT_INFO_MASK_QR = 0x5412;
- self::$BITS_SET_IN_HALF_BYTE = [0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4];
- self::$FORMAT_INFO_DECODE_LOOKUP = [
- [0x5412, 0x00],
- [0x5125, 0x01],
- [0x5E7C, 0x02],
- [0x5B4B, 0x03],
- [0x45F9, 0x04],
- [0x40CE, 0x05],
- [0x4F97, 0x06],
- [0x4AA0, 0x07],
- [0x77C4, 0x08],
- [0x72F3, 0x09],
- [0x7DAA, 0x0A],
- [0x789D, 0x0B],
- [0x662F, 0x0C],
- [0x6318, 0x0D],
- [0x6C41, 0x0E],
- [0x6976, 0x0F],
- [0x1689, 0x10],
- [0x13BE, 0x11],
- [0x1CE7, 0x12],
- [0x19D0, 0x13],
- [0x0762, 0x14],
- [0x0255, 0x15],
- [0x0D0C, 0x16],
- [0x083B, 0x17],
- [0x355F, 0x18],
- [0x3068, 0x19],
- [0x3F31, 0x1A],
- [0x3A06, 0x1B],
- [0x24B4, 0x1C],
- [0x2183, 0x1D],
- [0x2EDA, 0x1E],
- [0x2BED, 0x1F],
- ];
- }
-
- /**
- * @param $maskedFormatInfo1 ; format info indicator, with mask still applied
- * @param $maskedFormatInfo2 ; second copy of same info; both are checked at the same time
- * to establish best match
- *
- * @return information about the format it specifies, or {@code null}
- * if doesn't seem to match any known pattern
- */
- public static function decodeFormatInformation($maskedFormatInfo1, $maskedFormatInfo2)
- {
- $formatInfo = self::doDecodeFormatInformation($maskedFormatInfo1, $maskedFormatInfo2);
- if ($formatInfo != null) {
- return $formatInfo;
- }
- // Should return null, but, some QR codes apparently
- // do not mask this info. Try again by actually masking the pattern
- // first
- return self::doDecodeFormatInformation(
- $maskedFormatInfo1 ^ self::$FORMAT_INFO_MASK_QR,
- $maskedFormatInfo2 ^ self::$FORMAT_INFO_MASK_QR
- );
- }
-
- private static function doDecodeFormatInformation($maskedFormatInfo1, $maskedFormatInfo2)
- {
- // Find the int in FORMAT_INFO_DECODE_LOOKUP with fewest bits differing
- $bestDifference = PHP_INT_MAX;
- $bestFormatInfo = 0;
- foreach (self::$FORMAT_INFO_DECODE_LOOKUP as $decodeInfo) {
- $targetInfo = $decodeInfo[0];
- if ($targetInfo == $maskedFormatInfo1 || $targetInfo == $maskedFormatInfo2) {
- // Found an exact match
- return new FormatInformation($decodeInfo[1]);
- }
- $bitsDifference = self::numBitsDiffering($maskedFormatInfo1, $targetInfo);
- if ($bitsDifference < $bestDifference) {
- $bestFormatInfo = $decodeInfo[1];
- $bestDifference = $bitsDifference;
- }
- if ($maskedFormatInfo1 != $maskedFormatInfo2) {
- // also try the other option
- $bitsDifference = self::numBitsDiffering($maskedFormatInfo2, $targetInfo);
- if ($bitsDifference < $bestDifference) {
- $bestFormatInfo = $decodeInfo[1];
- $bestDifference = $bitsDifference;
- }
- }
- }
- // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits
- // differing means we found a match
- if ($bestDifference <= 3) {
- return new FormatInformation($bestFormatInfo);
- }
-
- return null;
- }
-
- public static function numBitsDiffering($a, $b)
- {
- $a ^= $b; // a now has a 1 bit exactly where its bit differs with b's
- // Count bits set quickly with a series of lookups:
- return self::$BITS_SET_IN_HALF_BYTE[$a & 0x0F] +
- self::$BITS_SET_IN_HALF_BYTE[(int)(uRShift($a, 4) & 0x0F)] +
- self::$BITS_SET_IN_HALF_BYTE[(uRShift($a, 8) & 0x0F)] +
- self::$BITS_SET_IN_HALF_BYTE[(uRShift($a, 12) & 0x0F)] +
- self::$BITS_SET_IN_HALF_BYTE[(uRShift($a, 16) & 0x0F)] +
- self::$BITS_SET_IN_HALF_BYTE[(uRShift($a, 20) & 0x0F)] +
- self::$BITS_SET_IN_HALF_BYTE[(uRShift($a, 24) & 0x0F)] +
- self::$BITS_SET_IN_HALF_BYTE[(uRShift($a, 28) & 0x0F)];
- }
-
- public function getErrorCorrectionLevel()
- {
- return $this->errorCorrectionLevel;
- }
-
- public function getDataMask()
- {
- return $this->dataMask;
- }
-
- //@Override
- public function hashCode()
- {
- return ($this->errorCorrectionLevel->ordinal() << 3) | (int)($this->dataMask);
- }
-
- //@Override
- public function equals($o)
- {
- if (!($o instanceof FormatInformation)) {
- return false;
- }
- $other = $o;
-
- return $this->errorCorrectionLevel == $other->errorCorrectionLevel &&
- $this->dataMask == $other->dataMask;
- }
-}
-
-FormatInformation::Init();
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Mode.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Mode.php
deleted file mode 100644
index 165a5c0..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Mode.php
+++ /dev/null
@@ -1,108 +0,0 @@
-See ISO 18004:2006, 6.4.1, Tables 2 and 3. This enum encapsulates the various modes in which
- * data can be encoded to bits in the QR code standard.
- *
- * @author Sean Owen
- */
-class Mode
-{
- public static $TERMINATOR;
- public static $NUMERIC;
- public static $ALPHANUMERIC;
- public static $STRUCTURED_APPEND;
- public static $BYTE;
- public static $ECI;
- public static $KANJI;
- public static $FNC1_FIRST_POSITION;
- public static $FNC1_SECOND_POSITION;
- public static $HANZI;
-
- public function __construct(private $characterCountBitsForVersions, private $bits)
- {
- }
-
- public static function Init(): void
- {
- self::$TERMINATOR = new Mode([0, 0, 0], 0x00); // Not really a mode...
- self::$NUMERIC = new Mode([10, 12, 14], 0x01);
- self::$ALPHANUMERIC = new Mode([9, 11, 13], 0x02);
- self::$STRUCTURED_APPEND = new Mode([0, 0, 0], 0x03); // Not supported
- self::$BYTE = new Mode([8, 16, 16], 0x04);
- self::$ECI = new Mode([0, 0, 0], 0x07); // character counts don't apply
- self::$KANJI = new Mode([8, 10, 12], 0x08);
- self::$FNC1_FIRST_POSITION = new Mode([0, 0, 0], 0x05);
- self::$FNC1_SECOND_POSITION = new Mode([0, 0, 0], 0x09);
- /** See GBT 18284-2000; "Hanzi" is a transliteration of this mode name. */
- self::$HANZI = new Mode([8, 10, 12], 0x0D);
- }
-
- /**
- * @param four $bits bits encoding a QR Code data mode
- *
- * @return Mode encoded by these bits
- * @throws InvalidArgumentException if bits do not correspond to a known mode
- */
- public static function forBits($bits)
- {
- return match ($bits) {
- 0x0 => self::$TERMINATOR,
- 0x1 => self::$NUMERIC,
- 0x2 => self::$ALPHANUMERIC,
- 0x3 => self::$STRUCTURED_APPEND,
- 0x4 => self::$BYTE,
- 0x5 => self::$FNC1_FIRST_POSITION,
- 0x7 => self::$ECI,
- 0x8 => self::$KANJI,
- 0x9 => self::$FNC1_SECOND_POSITION,
- 0xD => self::$HANZI,
- default => throw new \InvalidArgumentException(),
- };
- }
-
- /**
- * @param version $version in question
- *
- * @return number of bits used, in this QR Code symbol {@link Version}, to encode the
- * count of characters that will follow encoded in this Mode
- */
- public function getCharacterCountBits($version)
- {
- $number = $version->getVersionNumber();
- $offset = 0;
- if ($number <= 9) {
- $offset = 0;
- } elseif ($number <= 26) {
- $offset = 1;
- } else {
- $offset = 2;
- }
-
- return $this->characterCountBitsForVersions[$offset];
- }
-
- public function getBits()
- {
- return $this->bits;
- }
-}
-
-Mode::Init();
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/QRCodeDecoderMetaData.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/QRCodeDecoderMetaData.php
deleted file mode 100644
index ecc6421..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/QRCodeDecoderMetaData.php
+++ /dev/null
@@ -1,19 +0,0 @@
-mirrored;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Version.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Version.php
deleted file mode 100644
index be5f8ce..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Decoder/Version.php
+++ /dev/null
@@ -1,715 +0,0 @@
-getECCodewordsPerBlock();
- $ecbArray = $ecBlocks[0]->getECBlocks();
- } else {
- $ecCodewords = $ecBlocks->getECCodewordsPerBlock();
- $ecbArray = $ecBlocks->getECBlocks();
- }
- foreach ($ecbArray as $ecBlock) {
- $total += $ecBlock->getCount() * ($ecBlock->getDataCodewords() + $ecCodewords);
- }
- $this->totalCodewords = $total;
- }
- public function getVersionNumber()
- {
- return $this->versionNumber;
- }
-
- public function getAlignmentPatternCenters()
- {
- return $this->alignmentPatternCenters;
- }
-
- public function getTotalCodewords()
- {
- return $this->totalCodewords;
- }
-
- public function getDimensionForVersion()
- {
- return 17 + 4 * $this->versionNumber;
- }
-
- public function getECBlocksForLevel($ecLevel)
- {
- return $this->ecBlocks[$ecLevel->getOrdinal()];
- }
-
- /**
- *
Deduces version information purely from QR Code dimensions.
- *
- * @param dimension $dimension in modules
- * @return Version for a QR Code of that dimension
- * @throws FormatException if dimension is not 1 mod 4
- */
- public static function getProvisionalVersionForDimension($dimension)
- {
- if ($dimension % 4 != 1) {
- throw FormatException::getFormatInstance();
- }
- try {
- return self::getVersionForNumber(($dimension - 17) / 4);
- } catch (\InvalidArgumentException) {
- throw FormatException::getFormatInstance();
- }
- }
-
- public static function getVersionForNumber($versionNumber)
- {
- if ($versionNumber < 1 || $versionNumber > 40) {
- throw new \InvalidArgumentException();
- }
- if (!self::$VERSIONS) {
- self::$VERSIONS = self::buildVersions();
- }
- return self::$VERSIONS[$versionNumber - 1];
- }
-
- public static function decodeVersionInformation($versionBits)
- {
- $bestDifference = PHP_INT_MAX;
- $bestVersion = 0;
- for ($i = 0; $i < count(self::$VERSION_DECODE_INFO); $i++) {
- $targetVersion = self::$VERSION_DECODE_INFO[$i];
- // Do the version info bits match exactly? done.
- if ($targetVersion == $versionBits) {
- return self::getVersionForNumber($i + 7);
- }
- // Otherwise see if this is the closest to a real version info bit string
- // we have seen so far
- $bitsDifference = FormatInformation::numBitsDiffering($versionBits, $targetVersion);
- if ($bitsDifference < $bestDifference) {
- $bestVersion = $i + 7;
- $bestDifference = $bitsDifference;
- }
- }
- // We can tolerate up to 3 bits of error since no two version info codewords will
- // differ in less than 8 bits.
- if ($bestDifference <= 3) {
- return self::getVersionForNumber($bestVersion);
- }
- // If we didn't find a close enough match, fail
- return null;
- }
-
- /**
- * See ISO 18004:2006 Annex E
- */
- public function buildFunctionPattern()
- {
- $dimension = self::getDimensionForVersion();
- $bitMatrix = new BitMatrix($dimension);
-
- // Top left finder pattern + separator + format
- $bitMatrix->setRegion(0, 0, 9, 9);
- // Top right finder pattern + separator + format
- $bitMatrix->setRegion($dimension - 8, 0, 8, 9);
- // Bottom left finder pattern + separator + format
- $bitMatrix->setRegion(0, $dimension - 8, 9, 8);
-
- // Alignment patterns
- $max = is_countable($this->alignmentPatternCenters) ? count($this->alignmentPatternCenters) : 0;
- for ($x = 0; $x < $max; $x++) {
- $i = $this->alignmentPatternCenters[$x] - 2;
- for ($y = 0; $y < $max; $y++) {
- if (($x == 0 && ($y == 0 || $y == $max - 1)) || ($x == $max - 1 && $y == 0)) {
- // No alignment patterns near the three finder paterns
- continue;
- }
- $bitMatrix->setRegion($this->alignmentPatternCenters[$y] - 2, $i, 5, 5);
- }
- }
-
- // Vertical timing pattern
- $bitMatrix->setRegion(6, 9, 1, $dimension - 17);
- // Horizontal timing pattern
- $bitMatrix->setRegion(9, 6, $dimension - 17, 1);
-
- if ($this->versionNumber > 6) {
- // Version info, top right
- $bitMatrix->setRegion($dimension - 11, 0, 3, 6);
- // Version info, bottom left
- $bitMatrix->setRegion(0, $dimension - 11, 6, 3);
- }
-
- return $bitMatrix;
- }
- /**
- * See ISO 18004:2006 6.5.1 Table 9
- */
- private static function buildVersions()
- {
- return [
- new Version(
- 1,
- [],
- [new ECBlocks(7, [new ECB(1, 19)]),
- new ECBlocks(10, [new ECB(1, 16)]),
- new ECBlocks(13, [new ECB(1, 13)]),
- new ECBlocks(17, [new ECB(1, 9)])]
- ),
- new Version(
- 2,
- [6, 18],
- [new ECBlocks(10, [new ECB(1, 34)]),
- new ECBlocks(16, [new ECB(1, 28)]),
- new ECBlocks(22, [new ECB(1, 22)]),
- new ECBlocks(28, [new ECB(1, 16)])]
- ),
- new Version(
- 3,
- [6, 22],
- [ new ECBlocks(15, [new ECB(1, 55)]),
- new ECBlocks(26, [new ECB(1, 44)]),
- new ECBlocks(18, [new ECB(2, 17)]),
- new ECBlocks(22, [new ECB(2, 13)])]
- ),
- new Version(
- 4,
- [6, 26],
- [new ECBlocks(20, [new ECB(1, 80)]),
- new ECBlocks(18, [new ECB(2, 32)]),
- new ECBlocks(26, [new ECB(2, 24)]),
- new ECBlocks(16, [new ECB(4, 9)])]
- ),
- new Version(
- 5,
- [6, 30],
- [new ECBlocks(26, [new ECB(1, 108)]),
- new ECBlocks(24, [new ECB(2, 43)]),
- new ECBlocks(18, [new ECB(2, 15),
- new ECB(2, 16)]),
- new ECBlocks(22, [new ECB(2, 11),
- new ECB(2, 12)])]
- ),
- new Version(
- 6,
- [6, 34],
- [new ECBlocks(18, [new ECB(2, 68)]),
- new ECBlocks(16, [new ECB(4, 27)]),
- new ECBlocks(24, [new ECB(4, 19)]),
- new ECBlocks(28, [new ECB(4, 15)])]
- ),
- new Version(
- 7,
- [6, 22, 38],
- [new ECBlocks(20, [new ECB(2, 78)]),
- new ECBlocks(18, [new ECB(4, 31)]),
- new ECBlocks(18, [new ECB(2, 14),
- new ECB(4, 15)]),
- new ECBlocks(26, [new ECB(4, 13),
- new ECB(1, 14)])]
- ),
- new Version(
- 8,
- [6, 24, 42],
- [new ECBlocks(24, [new ECB(2, 97)]),
- new ECBlocks(22, [new ECB(2, 38),
- new ECB(2, 39)]),
- new ECBlocks(22, [new ECB(4, 18),
- new ECB(2, 19)]),
- new ECBlocks(26, [new ECB(4, 14),
- new ECB(2, 15)])]
- ),
- new Version(
- 9,
- [6, 26, 46],
- [new ECBlocks(30, [new ECB(2, 116)]),
- new ECBlocks(22, [new ECB(3, 36),
- new ECB(2, 37)]),
- new ECBlocks(20, [new ECB(4, 16),
- new ECB(4, 17)]),
- new ECBlocks(24, [new ECB(4, 12),
- new ECB(4, 13)])]
- ),
- new Version(
- 10,
- [6, 28, 50],
- [new ECBlocks(18, [new ECB(2, 68),
- new ECB(2, 69)]),
- new ECBlocks(26, [new ECB(4, 43),
- new ECB(1, 44)]),
- new ECBlocks(24, [new ECB(6, 19),
- new ECB(2, 20)]),
- new ECBlocks(28, [new ECB(6, 15),
- new ECB(2, 16)])]
- ),
- new Version(
- 11,
- [6, 30, 54],
- [new ECBlocks(20, [new ECB(4, 81)]),
- new ECBlocks(30, [new ECB(1, 50),
- new ECB(4, 51)]),
- new ECBlocks(28, [new ECB(4, 22),
- new ECB(4, 23)]),
- new ECBlocks(24, [new ECB(3, 12),
- new ECB(8, 13)])]
- ),
- new Version(
- 12,
- [6, 32, 58],
- [new ECBlocks(24, [new ECB(2, 92),
- new ECB(2, 93)]),
- new ECBlocks(22, [new ECB(6, 36),
- new ECB(2, 37)]),
- new ECBlocks(26, [new ECB(4, 20),
- new ECB(6, 21)]),
- new ECBlocks(28, [new ECB(7, 14),
- new ECB(4, 15)])]
- ),
- new Version(
- 13,
- [6, 34, 62],
- [new ECBlocks(26, [new ECB(4, 107)]),
- new ECBlocks(22, [new ECB(8, 37),
- new ECB(1, 38)]),
- new ECBlocks(24, [new ECB(8, 20),
- new ECB(4, 21)]),
- new ECBlocks(22, [new ECB(12, 11),
- new ECB(4, 12)])]
- ),
- new Version(
- 14,
- [6, 26, 46, 66],
- [new ECBlocks(30, [new ECB(3, 115),
- new ECB(1, 116)]),
- new ECBlocks(24, [new ECB(4, 40),
- new ECB(5, 41)]),
- new ECBlocks(20, [new ECB(11, 16),
- new ECB(5, 17)]),
- new ECBlocks(24, [new ECB(11, 12),
- new ECB(5, 13)])]
- ),
- new Version(
- 15,
- [6, 26, 48, 70],
- [new ECBlocks(22, [new ECB(5, 87),
- new ECB(1, 88)]),
- new ECBlocks(24, [new ECB(5, 41),
- new ECB(5, 42)]),
- new ECBlocks(30, [new ECB(5, 24),
- new ECB(7, 25)]),
- new ECBlocks(24, [new ECB(11, 12),
- new ECB(7, 13)])]
- ),
- new Version(
- 16,
- [6, 26, 50, 74],
- [new ECBlocks(24, [new ECB(5, 98),
- new ECB(1, 99)]),
- new ECBlocks(28, [new ECB(7, 45),
- new ECB(3, 46)]),
- new ECBlocks(24, [new ECB(15, 19),
- new ECB(2, 20)]),
- new ECBlocks(30, [new ECB(3, 15),
- new ECB(13, 16)])]
- ),
- new Version(
- 17,
- [6, 30, 54, 78],
- [new ECBlocks(28, [new ECB(1, 107),
- new ECB(5, 108)]),
- new ECBlocks(28, [new ECB(10, 46),
- new ECB(1, 47)]),
- new ECBlocks(28, [new ECB(1, 22),
- new ECB(15, 23)]),
- new ECBlocks(28, [new ECB(2, 14),
- new ECB(17, 15)])]
- ),
- new Version(
- 18,
- [6, 30, 56, 82],
- [new ECBlocks(30, [new ECB(5, 120),
- new ECB(1, 121)]),
- new ECBlocks(26, [new ECB(9, 43),
- new ECB(4, 44)]),
- new ECBlocks(28, [new ECB(17, 22),
- new ECB(1, 23)]),
- new ECBlocks(28, [new ECB(2, 14),
- new ECB(19, 15)])]
- ),
- new Version(
- 19,
- [6, 30, 58, 86],
- [new ECBlocks(28, [new ECB(3, 113),
- new ECB(4, 114)]),
- new ECBlocks(26, [new ECB(3, 44),
- new ECB(11, 45)]),
- new ECBlocks(26, [new ECB(17, 21),
- new ECB(4, 22)]),
- new ECBlocks(26, [new ECB(9, 13),
- new ECB(16, 14)])]
- ),
- new Version(
- 20,
- [6, 34, 62, 90],
- [new ECBlocks(28, [new ECB(3, 107),
- new ECB(5, 108)]),
- new ECBlocks(26, [new ECB(3, 41),
- new ECB(13, 42)]),
- new ECBlocks(30, [new ECB(15, 24),
- new ECB(5, 25)]),
- new ECBlocks(28, [new ECB(15, 15),
- new ECB(10, 16)])]
- ),
- new Version(
- 21,
- [6, 28, 50, 72, 94],
- [ new ECBlocks(28, [new ECB(4, 116),
- new ECB(4, 117)]),
- new ECBlocks(26, [new ECB(17, 42)]),
- new ECBlocks(28, [new ECB(17, 22),
- new ECB(6, 23)]),
- new ECBlocks(30, [new ECB(19, 16),
- new ECB(6, 17)])]
- ),
- new Version(
- 22,
- [6, 26, 50, 74, 98],
- [new ECBlocks(28, [new ECB(2, 111),
- new ECB(7, 112)]),
- new ECBlocks(28, [new ECB(17, 46)]),
- new ECBlocks(30, [new ECB(7, 24),
- new ECB(16, 25)]),
- new ECBlocks(24, [new ECB(34, 13)])]
- ),
- new Version(
- 23,
- [6, 30, 54, 78, 102],
- new ECBlocks(30, [new ECB(4, 121),
- new ECB(5, 122)]),
- new ECBlocks(28, [new ECB(4, 47),
- new ECB(14, 48)]),
- new ECBlocks(30, [new ECB(11, 24),
- new ECB(14, 25)]),
- new ECBlocks(30, [new ECB(16, 15),
- new ECB(14, 16)])
- ),
- new Version(
- 24,
- [6, 28, 54, 80, 106],
- [new ECBlocks(30, [new ECB(6, 117),
- new ECB(4, 118)]),
- new ECBlocks(28, [new ECB(6, 45),
- new ECB(14, 46)]),
- new ECBlocks(30, [new ECB(11, 24),
- new ECB(16, 25)]),
- new ECBlocks(30, [new ECB(30, 16),
- new ECB(2, 17)])]
- ),
- new Version(
- 25,
- [6, 32, 58, 84, 110],
- [new ECBlocks(26, [new ECB(8, 106),
- new ECB(4, 107)]),
- new ECBlocks(28, [new ECB(8, 47),
- new ECB(13, 48)]),
- new ECBlocks(30, [new ECB(7, 24),
- new ECB(22, 25)]),
- new ECBlocks(30, [new ECB(22, 15),
- new ECB(13, 16)])]
- ),
- new Version(
- 26,
- [6, 30, 58, 86, 114],
- [new ECBlocks(28, [new ECB(10, 114),
- new ECB(2, 115)]),
- new ECBlocks(28, [new ECB(19, 46),
- new ECB(4, 47)]),
- new ECBlocks(28, [new ECB(28, 22),
- new ECB(6, 23)]),
- new ECBlocks(30, [new ECB(33, 16),
- new ECB(4, 17)])]
- ),
- new Version(
- 27,
- [6, 34, 62, 90, 118],
- [new ECBlocks(30, [new ECB(8, 122),
- new ECB(4, 123)]),
- new ECBlocks(28, [new ECB(22, 45),
- new ECB(3, 46)]),
- new ECBlocks(30, [new ECB(8, 23),
- new ECB(26, 24)]),
- new ECBlocks(30, [new ECB(12, 15),
- new ECB(28, 16)])]
- ),
- new Version(
- 28,
- [6, 26, 50, 74, 98, 122],
- [new ECBlocks(30, [new ECB(3, 117),
- new ECB(10, 118)]),
- new ECBlocks(28, [new ECB(3, 45),
- new ECB(23, 46)]),
- new ECBlocks(30, [new ECB(4, 24),
- new ECB(31, 25)]),
- new ECBlocks(30, [new ECB(11, 15),
- new ECB(31, 16)])]
- ),
- new Version(
- 29,
- [6, 30, 54, 78, 102, 126],
- [new ECBlocks(30, [new ECB(7, 116),
- new ECB(7, 117)]),
- new ECBlocks(28, [new ECB(21, 45),
- new ECB(7, 46)]),
- new ECBlocks(30, [new ECB(1, 23),
- new ECB(37, 24)]),
- new ECBlocks(30, [new ECB(19, 15),
- new ECB(26, 16)])]
- ),
- new Version(
- 30,
- [6, 26, 52, 78, 104, 130],
- [new ECBlocks(30, [new ECB(5, 115),
- new ECB(10, 116)]),
- new ECBlocks(28, [new ECB(19, 47),
- new ECB(10, 48)]),
- new ECBlocks(30, [new ECB(15, 24),
- new ECB(25, 25)]),
- new ECBlocks(30, [new ECB(23, 15),
- new ECB(25, 16)])]
- ),
- new Version(
- 31,
- [6, 30, 56, 82, 108, 134],
- [new ECBlocks(30, [new ECB(13, 115),
- new ECB(3, 116)]),
- new ECBlocks(28, [new ECB(2, 46),
- new ECB(29, 47)]),
- new ECBlocks(30, [new ECB(42, 24),
- new ECB(1, 25)]),
- new ECBlocks(30, [new ECB(23, 15),
- new ECB(28, 16)])]
- ),
- new Version(
- 32,
- [6, 34, 60, 86, 112, 138],
- [new ECBlocks(30, [new ECB(17, 115)]),
- new ECBlocks(28, [new ECB(10, 46),
- new ECB(23, 47)]),
- new ECBlocks(30, [new ECB(10, 24),
- new ECB(35, 25)]),
- new ECBlocks(30, [new ECB(19, 15),
- new ECB(35, 16)])]
- ),
- new Version(
- 33,
- [6, 30, 58, 86, 114, 142],
- [new ECBlocks(30, [new ECB(17, 115),
- new ECB(1, 116)]),
- new ECBlocks(28, [new ECB(14, 46),
- new ECB(21, 47)]),
- new ECBlocks(30, [new ECB(29, 24),
- new ECB(19, 25)]),
- new ECBlocks(30, [new ECB(11, 15),
- new ECB(46, 16)])]
- ),
- new Version(
- 34,
- [6, 34, 62, 90, 118, 146],
- [new ECBlocks(30, [new ECB(13, 115),
- new ECB(6, 116)]),
- new ECBlocks(28, [new ECB(14, 46),
- new ECB(23, 47)]),
- new ECBlocks(30, [new ECB(44, 24),
- new ECB(7, 25)]),
- new ECBlocks(30, [new ECB(59, 16),
- new ECB(1, 17)])]
- ),
- new Version(
- 35,
- [6, 30, 54, 78, 102, 126, 150],
- [new ECBlocks(30, [new ECB(12, 121),
- new ECB(7, 122)]),
- new ECBlocks(28, [new ECB(12, 47),
- new ECB(26, 48)]),
- new ECBlocks(30, [new ECB(39, 24),
- new ECB(14, 25)]),
- new ECBlocks(30, [new ECB(22, 15),
- new ECB(41, 16)])]
- ),
- new Version(
- 36,
- [6, 24, 50, 76, 102, 128, 154],
- [new ECBlocks(30, [new ECB(6, 121),
- new ECB(14, 122)]),
- new ECBlocks(28, [new ECB(6, 47),
- new ECB(34, 48)]),
- new ECBlocks(30, [new ECB(46, 24),
- new ECB(10, 25)]),
- new ECBlocks(30, [new ECB(2, 15),
- new ECB(64, 16)])]
- ),
- new Version(
- 37,
- [6, 28, 54, 80, 106, 132, 158],
- [new ECBlocks(30, [new ECB(17, 122),
- new ECB(4, 123)]),
- new ECBlocks(28, [new ECB(29, 46),
- new ECB(14, 47)]),
- new ECBlocks(30, [new ECB(49, 24),
- new ECB(10, 25)]),
- new ECBlocks(30, [new ECB(24, 15),
- new ECB(46, 16)])]
- ),
- new Version(
- 38,
- [6, 32, 58, 84, 110, 136, 162],
- [new ECBlocks(30, [new ECB(4, 122),
- new ECB(18, 123)]),
- new ECBlocks(28, [new ECB(13, 46),
- new ECB(32, 47)]),
- new ECBlocks(30, [new ECB(48, 24),
- new ECB(14, 25)]),
- new ECBlocks(30, [new ECB(42, 15),
- new ECB(32, 16)])]
- ),
- new Version(
- 39,
- [6, 26, 54, 82, 110, 138, 166],
- [new ECBlocks(30, [new ECB(20, 117),
- new ECB(4, 118)]),
- new ECBlocks(28, [new ECB(40, 47),
- new ECB(7, 48)]),
- new ECBlocks(30, [new ECB(43, 24),
- new ECB(22, 25)]),
- new ECBlocks(30, [new ECB(10, 15),
- new ECB(67, 16)])]
- ),
- new Version(
- 40,
- [6, 30, 58, 86, 114, 142, 170],
- [new ECBlocks(30, [new ECB(19, 118),
- new ECB(6, 119)]),
- new ECBlocks(28, [new ECB(18, 47),
- new ECB(31, 48)]),
- new ECBlocks(30, [new ECB(34, 24),
- new ECB(34, 25)]),
- new ECBlocks(30, [new ECB(20, 15),
- new ECB(61, 16)])]
- )
- ];
- }
-}
-
-/**
- *
Encapsulates a set of error-correction blocks in one symbol version. Most versions will
- * use blocks of differing sizes within one version, so, this encapsulates the parameters for
- * each set of blocks. It also holds the number of error-correction codewords per block since it
- * will be the same across all blocks within one version.
- */
-final class ECBlocks
-{
- public function __construct(private $ecCodewordsPerBlock, private $ecBlocks)
- {
- }
-
- public function getECCodewordsPerBlock()
- {
- return $this->ecCodewordsPerBlock;
- }
-
- public function getNumBlocks()
- {
- $total = 0;
- foreach ($this->ecBlocks as $ecBlock) {
- $total += $ecBlock->getCount();
- }
- return $total;
- }
-
- public function getTotalECCodewords()
- {
- return $this->ecCodewordsPerBlock * $this->getNumBlocks();
- }
-
- public function getECBlocks()
- {
- return $this->ecBlocks;
- }
-}
-
-/**
- *
Encapsualtes the parameters for one error-correction block in one symbol version.
- * This includes the number of data codewords, and the number of times a block with these
- * parameters is used consecutively in the QR code version's format.
- */
-final class ECB
-{
- public function __construct(private $count, private $dataCodewords)
- {
- }
-
- public function getCount()
- {
- return $this->count;
- }
-
- public function getDataCodewords()
- {
- return $this->dataCodewords;
- }
-
-
- //@Override
- public function toString(): never
- {
- die('Version ECB toString()');
- // return parent::$versionNumber;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/AlignmentPattern.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/AlignmentPattern.php
deleted file mode 100644
index 5f0e7c4..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/AlignmentPattern.php
+++ /dev/null
@@ -1,62 +0,0 @@
-Encapsulates an alignment pattern, which are the smaller square patterns found in
- * all but the simplest QR Codes.
- *
- * @author Sean Owen
- */
-final class AlignmentPattern extends ResultPoint
-{
- public function __construct($posX, $posY, private $estimatedModuleSize)
- {
- parent::__construct($posX, $posY);
- }
-
- /**
- *
Determines if this alignment pattern "about equals" an alignment pattern at the stated
- * position and size -- meaning, it is at nearly the same center with nearly the same size.
- */
- public function aboutEquals($moduleSize, $i, $j)
- {
- if (abs($i - $this->getY()) <= $moduleSize && abs($j - $this->getX()) <= $moduleSize) {
- $moduleSizeDiff = abs($moduleSize - $this->estimatedModuleSize);
-
- return $moduleSizeDiff <= 1.0 || $moduleSizeDiff <= $this->estimatedModuleSize;
- }
-
- return false;
- }
-
- /**
- * Combines this object's current estimate of a finder pattern position and module size
- * with a new estimate. It returns a new {@code FinderPattern} containing an average of the two.
- */
- public function combineEstimate($i, $j, $newModuleSize): \Zxing\Qrcode\Detector\AlignmentPattern
- {
- $combinedX = ($this->getX() + $j) / 2.0;
- $combinedY = ($this->getY() + $i) / 2.0;
- $combinedModuleSize = ($this->estimatedModuleSize + $newModuleSize) / 2.0;
-
- return new AlignmentPattern($combinedX, $combinedY, $combinedModuleSize);
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/AlignmentPatternFinder.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/AlignmentPatternFinder.php
deleted file mode 100644
index 614293f..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/AlignmentPatternFinder.php
+++ /dev/null
@@ -1,265 +0,0 @@
-This class attempts to find alignment patterns in a QR Code. Alignment patterns look like finder
- * patterns but are smaller and appear at regular intervals throughout the image.
- *
- *
At the moment this only looks for the bottom-right alignment pattern.
- *
- *
This is mostly a simplified copy of {@link FinderPatternFinder}. It is copied,
- * pasted and stripped down here for maximum performance but does unfortunately duplicate
- * some code.
- *
- *
This class is thread-safe but not reentrant. Each thread must allocate its own object.
Creates a finder that will look in a portion of the whole image.
- *
- * @param \Imagick image $image to search
- * @param int left $startX column from which to start searching
- * @param int top $startY row from which to start searching
- * @param float width $width of region to search
- * @param float height $height of region to search
- * @param float estimated $moduleSize module size so far
- */
- public function __construct(private $image, private $startX, private $startY, private $width, private $height, private $moduleSize, private $resultPointCallback)
- {
- }
-
- /**
- *
This method attempts to find the bottom-right alignment pattern in the image. It is a bit messy since
- * it's pretty performance-critical and so is written to be fast foremost.
- *
- * @return {@link AlignmentPattern} if found
- * @throws NotFoundException if not found
- */
- public function find()
- {
- $startX = $this->startX;
- $height = $this->height;
- $maxJ = $startX + $this->width;
- $middleI = $this->startY + ($height / 2);
- // We are looking for black/white/black modules in 1:1:1 ratio;
- // this tracks the number of black/white/black modules seen so far
- $stateCount = [];
- for ($iGen = 0; $iGen < $height; $iGen++) {
- // Search from middle outwards
- $i = $middleI + (($iGen & 0x01) == 0 ? ($iGen + 1) / 2 : -(($iGen + 1) / 2));
- $i = (int)($i);
- $stateCount[0] = 0;
- $stateCount[1] = 0;
- $stateCount[2] = 0;
- $j = $startX;
- // Burn off leading white pixels before anything else; if we start in the middle of
- // a white run, it doesn't make sense to count its length, since we don't know if the
- // white run continued to the left of the start point
- while ($j < $maxJ && !$this->image->get($j, $i)) {
- $j++;
- }
- $currentState = 0;
- while ($j < $maxJ) {
- if ($this->image->get($j, $i)) {
- // Black pixel
- if ($currentState == 1) { // Counting black pixels
- $stateCount[$currentState]++;
- } else { // Counting white pixels
- if ($currentState == 2) { // A winner?
- if ($this->foundPatternCross($stateCount)) { // Yes
- $confirmed = $this->handlePossibleCenter($stateCount, $i, $j);
- if ($confirmed != null) {
- return $confirmed;
- }
- }
- $stateCount[0] = $stateCount[2];
- $stateCount[1] = 1;
- $stateCount[2] = 0;
- $currentState = 1;
- } else {
- $stateCount[++$currentState]++;
- }
- }
- } else { // White pixel
- if ($currentState == 1) { // Counting black pixels
- $currentState++;
- }
- $stateCount[$currentState]++;
- }
- $j++;
- }
- if ($this->foundPatternCross($stateCount)) {
- $confirmed = $this->handlePossibleCenter($stateCount, $i, $maxJ);
- if ($confirmed != null) {
- return $confirmed;
- }
- }
- }
-
- // Hmm, nothing we saw was observed and confirmed twice. If we had
- // any guess at all, return it.
- if (count($this->possibleCenters)) {
- return $this->possibleCenters[0];
- }
-
- throw NotFoundException::getNotFoundInstance();
- }
-
- /**
- * @param count $stateCount of black/white/black pixels just read
- *
- * @return true iff the proportions of the counts is close enough to the 1/1/1 ratios
- * used by alignment patterns to be considered a match
- */
- private function foundPatternCross($stateCount)
- {
- $moduleSize = $this->moduleSize;
- $maxVariance = $moduleSize / 2.0;
- for ($i = 0; $i < 3; $i++) {
- if (abs($moduleSize - $stateCount[$i]) >= $maxVariance) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- *
This is called when a horizontal scan finds a possible alignment pattern. It will
- * cross check with a vertical scan, and if successful, will see if this pattern had been
- * found on a previous horizontal scan. If so, we consider it confirmed and conclude we have
- * found the alignment pattern.
- *
- * @param reading $stateCount state module counts from horizontal scan
- * @param row $i where alignment pattern may be found
- * @param end $j of possible alignment pattern in row
- *
- * @return {@link AlignmentPattern} if we have found the same pattern twice, or null if not
- */
- private function handlePossibleCenter($stateCount, $i, $j)
- {
- $stateCountTotal = $stateCount[0] + $stateCount[1] + $stateCount[2];
- $centerJ = self::centerFromEnd($stateCount, $j);
- $centerI = $this->crossCheckVertical($i, (int)$centerJ, 2 * $stateCount[1], $stateCountTotal);
- if (!is_nan($centerI)) {
- $estimatedModuleSize = (float)($stateCount[0] + $stateCount[1] + $stateCount[2]) / 3.0;
- foreach ($this->possibleCenters as $center) {
- // Look for about the same center and module size:
- if ($center->aboutEquals($estimatedModuleSize, $centerI, $centerJ)) {
- return $center->combineEstimate($centerI, $centerJ, $estimatedModuleSize);
- }
- }
- // Hadn't found this before; save it
- $point = new AlignmentPattern($centerJ, $centerI, $estimatedModuleSize);
- $this->possibleCenters[] = $point;
- if ($this->resultPointCallback != null) {
- $this->resultPointCallback->foundPossibleResultPoint($point);
- }
- }
-
- return null;
- }
-
- /**
- * Given a count of black/white/black pixels just seen and an end position,
- * figures the location of the center of this black/white/black run.
- */
- private static function centerFromEnd($stateCount, $end)
- {
- return (float)($end - $stateCount[2]) - $stateCount[1] / 2.0;
- }
-
- /**
- *
After a horizontal scan finds a potential alignment pattern, this method
- * "cross-checks" by scanning down vertically through the center of the possible
- * alignment pattern to see if the same proportion is detected.
- *
- * @param int row $startI where an alignment pattern was detected
- * @param float center $centerJ of the section that appears to cross an alignment pattern
- * @param int maximum $maxCount reasonable number of modules that should be
- * observed in any reading state, based on the results of the horizontal scan
- *
- * @return float vertical center of alignment pattern, or {@link Float#NaN} if not found
- */
- private function crossCheckVertical(
- $startI,
- $centerJ,
- $maxCount,
- $originalStateCountTotal
- )
- {
- $image = $this->image;
-
- $maxI = $image->getHeight();
- $stateCount = $this->crossCheckStateCount;
- $stateCount[0] = 0;
- $stateCount[1] = 0;
- $stateCount[2] = 0;
-
- // Start counting up from center
- $i = $startI;
- while ($i >= 0 && $image->get($centerJ, $i) && $stateCount[1] <= $maxCount) {
- $stateCount[1]++;
- $i--;
- }
- // If already too many modules in this state or ran off the edge:
- if ($i < 0 || $stateCount[1] > $maxCount) {
- return NAN;
- }
- while ($i >= 0 && !$image->get($centerJ, $i) && $stateCount[0] <= $maxCount) {
- $stateCount[0]++;
- $i--;
- }
- if ($stateCount[0] > $maxCount) {
- return NAN;
- }
-
- // Now also count down from center
- $i = $startI + 1;
- while ($i < $maxI && $image->get($centerJ, $i) && $stateCount[1] <= $maxCount) {
- $stateCount[1]++;
- $i++;
- }
- if ($i == $maxI || $stateCount[1] > $maxCount) {
- return NAN;
- }
- while ($i < $maxI && !$image->get($centerJ, $i) && $stateCount[2] <= $maxCount) {
- $stateCount[2]++;
- $i++;
- }
- if ($stateCount[2] > $maxCount) {
- return NAN;
- }
-
- $stateCountTotal = $stateCount[0] + $stateCount[1] + $stateCount[2];
- if (5 * abs($stateCountTotal - $originalStateCountTotal) >= 2 * $originalStateCountTotal) {
- return NAN;
- }
-
- return $this->foundPatternCross($stateCount) ? self::centerFromEnd($stateCount, $i) : NAN;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/Detector.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/Detector.php
deleted file mode 100644
index b3b3f04..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/Detector.php
+++ /dev/null
@@ -1,428 +0,0 @@
-Encapsulates logic that can detect a QR Code in an image, even if the QR Code
- * is rotated or skewed, or partially obscured.
- *
- * @author Sean Owen
- */
-class Detector
-{
- private $resultPointCallback;
-
- public function __construct(private $image)
- {
- }
-
- /**
- *
Detects a QR Code in an image.
- *
- * @param array|null optional $hints hints to detector
- *
- * @return {@link DetectorResult} encapsulating results of detecting a QR Code
- * @throws NotFoundException if QR Code cannot be found
- * @throws FormatException if a QR Code cannot be decoded
- */
- final public function detect($hints = null)
- {/*Map*/
-
- $resultPointCallback = $hints == null ? null :
- $hints->get('NEED_RESULT_POINT_CALLBACK');
- /* resultPointCallback = hints == null ? null :
- (ResultPointCallback) hints.get(DecodeHintType.NEED_RESULT_POINT_CALLBACK);*/
- $finder = new FinderPatternFinder($this->image, $resultPointCallback);
- $info = $finder->find($hints);
-
- return $this->processFinderPatternInfo($info);
- }
-
- final protected function processFinderPatternInfo($info): \Zxing\Common\DetectorResult
- {
- $topLeft = $info->getTopLeft();
- $topRight = $info->getTopRight();
- $bottomLeft = $info->getBottomLeft();
-
- $moduleSize = (float)$this->calculateModuleSize($topLeft, $topRight, $bottomLeft);
- if ($moduleSize < 1.0) {
- throw NotFoundException::getNotFoundInstance();
- }
- $dimension = (int)self::computeDimension($topLeft, $topRight, $bottomLeft, $moduleSize);
- $provisionalVersion = \Zxing\Qrcode\Decoder\Version::getProvisionalVersionForDimension($dimension);
- $modulesBetweenFPCenters = $provisionalVersion->getDimensionForVersion() - 7;
-
- $alignmentPattern = null;
- // Anything above version 1 has an alignment pattern
- if ((is_countable($provisionalVersion->getAlignmentPatternCenters()) ? count($provisionalVersion->getAlignmentPatternCenters()) : 0) > 0) {
-
-// Guess where a "bottom right" finder pattern would have been
- $bottomRightX = $topRight->getX() - $topLeft->getX() + $bottomLeft->getX();
- $bottomRightY = $topRight->getY() - $topLeft->getY() + $bottomLeft->getY();
-
- // Estimate that alignment pattern is closer by 3 modules
- // from "bottom right" to known top left location
- $correctionToTopLeft = 1.0 - 3.0 / (float)$modulesBetweenFPCenters;
- $estAlignmentX = (int)($topLeft->getX() + $correctionToTopLeft * ($bottomRightX - $topLeft->getX()));
- $estAlignmentY = (int)($topLeft->getY() + $correctionToTopLeft * ($bottomRightY - $topLeft->getY()));
-
- // Kind of arbitrary -- expand search radius before giving up
- for ($i = 4; $i <= 16; $i <<= 1) {//??????????
- try {
- $alignmentPattern = $this->findAlignmentInRegion(
- $moduleSize,
- $estAlignmentX,
- $estAlignmentY,
- (float)$i
- );
- break;
- } catch (NotFoundException) {
- // try next round
- }
- }
- // If we didn't find alignment pattern... well try anyway without it
- }
-
- $transform = self::createTransform($topLeft, $topRight, $bottomLeft, $alignmentPattern, $dimension);
-
- $bits = self::sampleGrid($this->image, $transform, $dimension);
-
- $points = [];
- if ($alignmentPattern == null) {
- $points = [$bottomLeft, $topLeft, $topRight];
- } else {
- // die('$points = new ResultPoint[]{bottomLeft, topLeft, topRight, alignmentPattern};');
- $points = [$bottomLeft, $topLeft, $topRight, $alignmentPattern];
- }
-
- return new DetectorResult($bits, $points);
- }
-
- /**
- *
Detects a QR Code in an image.
- *
- * @return {@link DetectorResult} encapsulating results of detecting a QR Code
- * @throws NotFoundException if QR Code cannot be found
- * @throws FormatException if a QR Code cannot be decoded
- */
-
- /**
- *
Computes an average estimated module size based on estimated derived from the positions
- * of the three finder patterns.
- *
- * @param detected $topLeft top-left finder pattern center
- * @param detected $topRight top-right finder pattern center
- * @param detected $bottomLeft bottom-left finder pattern center
- *
- * @return estimated module size
- */
- final protected function calculateModuleSize($topLeft, $topRight, $bottomLeft)
- {
- // Take the average
- return ($this->calculateModuleSizeOneWay($topLeft, $topRight) +
- $this->calculateModuleSizeOneWay($topLeft, $bottomLeft)) / 2.0;
- }
-
- /**
- *
Estimates module size based on two finder patterns -- it uses
- * {@link #sizeOfBlackWhiteBlackRunBothWays(int, int, int, int)} to figure the
- * width of each, measuring along the axis between their centers.
- */
- private function calculateModuleSizeOneWay($pattern, $otherPattern)
- {
- $moduleSizeEst1 = $this->sizeOfBlackWhiteBlackRunBothWays(
- $pattern->getX(),
- (int)$pattern->getY(),
- (int)$otherPattern->getX(),
- (int)$otherPattern->getY()
- );
- $moduleSizeEst2 = $this->sizeOfBlackWhiteBlackRunBothWays(
- (int)$otherPattern->getX(),
- (int)$otherPattern->getY(),
- (int)$pattern->getX(),
- (int)$pattern->getY()
- );
- if (is_nan($moduleSizeEst1)) {
- return $moduleSizeEst2 / 7.0;
- }
- if (is_nan($moduleSizeEst2)) {
- return $moduleSizeEst1 / 7.0;
- }
- // Average them, and divide by 7 since we've counted the width of 3 black modules,
- // and 1 white and 1 black module on either side. Ergo, divide sum by 14.
- return ($moduleSizeEst1 + $moduleSizeEst2) / 14.0;
- }
-
- /**
- * See {@link #sizeOfBlackWhiteBlackRun(int, int, int, int)}; computes the total width of
- * a finder pattern by looking for a black-white-black run from the center in the direction
- * of another po$(another finder pattern center), and in the opposite direction too.
- */
- private function sizeOfBlackWhiteBlackRunBothWays($fromX, $fromY, $toX, $toY)
- {
- $result = $this->sizeOfBlackWhiteBlackRun($fromX, $fromY, $toX, $toY);
-
- // Now count other way -- don't run off image though of course
- $scale = 1.0;
- $otherToX = $fromX - ($toX - $fromX);
- if ($otherToX < 0) {
- $scale = (float)$fromX / (float)($fromX - $otherToX);
- $otherToX = 0;
- } elseif ($otherToX >= $this->image->getWidth()) {
- $scale = (float)($this->image->getWidth() - 1 - $fromX) / (float)($otherToX - $fromX);
- $otherToX = $this->image->getWidth() - 1;
- }
- $otherToY = (int)($fromY - ($toY - $fromY) * $scale);
-
- $scale = 1.0;
- if ($otherToY < 0) {
- $scale = (float)$fromY / (float)($fromY - $otherToY);
- $otherToY = 0;
- } elseif ($otherToY >= $this->image->getHeight()) {
- $scale = (float)($this->image->getHeight() - 1 - $fromY) / (float)($otherToY - $fromY);
- $otherToY = $this->image->getHeight() - 1;
- }
- $otherToX = (int)($fromX + ($otherToX - $fromX) * $scale);
-
- $result += $this->sizeOfBlackWhiteBlackRun($fromX, $fromY, $otherToX, $otherToY);
-
- // Middle pixel is double-counted this way; subtract 1
- return $result - 1.0;
- }
-
- /**
- *
This method traces a line from a po$in the image, in the direction towards another point.
- * It begins in a black region, and keeps going until it finds white, then black, then white again.
- * It reports the distance from the start to this point.
- *
- *
This is used when figuring out how wide a finder pattern is, when the finder pattern
- * may be skewed or rotated.
- */
- private function sizeOfBlackWhiteBlackRun($fromX, $fromY, $toX, $toY)
- {
- // Mild variant of Bresenham's algorithm;
- // see http://en.wikipedia.org/wiki/Bresenham's_line_algorithm
- $steep = abs($toY - $fromY) > abs($toX - $fromX);
- if ($steep) {
- $temp = $fromX;
- $fromX = $fromY;
- $fromY = $temp;
- $temp = $toX;
- $toX = $toY;
- $toY = $temp;
- }
-
- $dx = abs($toX - $fromX);
- $dy = abs($toY - $fromY);
- $error = -$dx / 2;
- $xstep = $fromX < $toX ? 1 : -1;
- $ystep = $fromY < $toY ? 1 : -1;
-
- // In black pixels, looking for white, first or second time.
- $state = 0;
- // Loop up until x == toX, but not beyond
- $xLimit = $toX + $xstep;
- for ($x = $fromX, $y = $fromY; $x != $xLimit; $x += $xstep) {
- $realX = $steep ? $y : $x;
- $realY = $steep ? $x : $y;
-
- // Does current pixel mean we have moved white to black or vice versa?
- // Scanning black in state 0,2 and white in state 1, so if we find the wrong
- // color, advance to next state or end if we are in state 2 already
- if (($state == 1) == $this->image->get($realX, $realY)) {
- if ($state == 2) {
- return MathUtils::distance($x, $y, $fromX, $fromY);
- }
- $state++;
- }
-
- $error += $dy;
- if ($error > 0) {
- if ($y == $toY) {
- break;
- }
- $y += $ystep;
- $error -= $dx;
- }
- }
- // Found black-white-black; give the benefit of the doubt that the next pixel outside the image
- // is "white" so this last po$at (toX+xStep,toY) is the right ending. This is really a
- // small approximation; (toX+xStep,toY+yStep) might be really correct. Ignore this.
- if ($state == 2) {
- return MathUtils::distance($toX + $xstep, $toY, $fromX, $fromY);
- }
-
- // else we didn't find even black-white-black; no estimate is really possible
- return NAN;
- }
-
- /**
- *
Computes the dimension (number of modules on a size) of the QR Code based on the position
- * of the finder patterns and estimated module size.
Attempts to locate an alignment pattern in a limited region of the image, which is
- * guessed to contain it. This method uses {@link AlignmentPattern}.
- *
- * @param estimated $overallEstModuleSize module size so far
- * @param x $estAlignmentX coordinate of center of area probably containing alignment pattern
- * @param y $estAlignmentY coordinate of above
- * @param number $allowanceFactor of pixels in all directions to search from the center
- *
- * @return {@link AlignmentPattern} if found, or null otherwise
- * @throws NotFoundException if an unexpected error occurs during detection
- */
- final protected function findAlignmentInRegion(
- $overallEstModuleSize,
- $estAlignmentX,
- $estAlignmentY,
- $allowanceFactor
- )
- {
- // Look for an alignment pattern (3 modules in size) around where it
- // should be
- $allowance = (int)($allowanceFactor * $overallEstModuleSize);
- $alignmentAreaLeftX = max(0, $estAlignmentX - $allowance);
- $alignmentAreaRightX = min($this->image->getWidth() - 1, $estAlignmentX + $allowance);
- if ($alignmentAreaRightX - $alignmentAreaLeftX < $overallEstModuleSize * 3) {
- throw NotFoundException::getNotFoundInstance();
- }
-
- $alignmentAreaTopY = max(0, $estAlignmentY - $allowance);
- $alignmentAreaBottomY = min($this->image->getHeight() - 1, $estAlignmentY + $allowance);
- if ($alignmentAreaBottomY - $alignmentAreaTopY < $overallEstModuleSize * 3) {
- throw NotFoundException::getNotFoundInstance();
- }
-
- $alignmentFinder =
- new AlignmentPatternFinder(
- $this->image,
- $alignmentAreaLeftX,
- $alignmentAreaTopY,
- $alignmentAreaRightX - $alignmentAreaLeftX,
- $alignmentAreaBottomY - $alignmentAreaTopY,
- $overallEstModuleSize,
- $this->resultPointCallback
- );
-
- return $alignmentFinder->find();
- }
-
- private static function createTransform(
- $topLeft,
- $topRight,
- $bottomLeft,
- $alignmentPattern,
- $dimension
- )
- {
- $dimMinusThree = (float)$dimension - 3.5;
- $bottomRightX = 0.0;
- $bottomRightY = 0.0;
- $sourceBottomRightX = 0.0;
- $sourceBottomRightY = 0.0;
- if ($alignmentPattern != null) {
- $bottomRightX = $alignmentPattern->getX();
- $bottomRightY = $alignmentPattern->getY();
- $sourceBottomRightX = $dimMinusThree - 3.0;
- $sourceBottomRightY = $sourceBottomRightX;
- } else {
- // Don't have an alignment pattern, just make up the bottom-right point
- $bottomRightX = ($topRight->getX() - $topLeft->getX()) + $bottomLeft->getX();
- $bottomRightY = ($topRight->getY() - $topLeft->getY()) + $bottomLeft->getY();
- $sourceBottomRightX = $dimMinusThree;
- $sourceBottomRightY = $dimMinusThree;
- }
-
- return PerspectiveTransform::quadrilateralToQuadrilateral(
- 3.5,
- 3.5,
- $dimMinusThree,
- 3.5,
- $sourceBottomRightX,
- $sourceBottomRightY,
- 3.5,
- $dimMinusThree,
- $topLeft->getX(),
- $topLeft->getY(),
- $topRight->getX(),
- $topRight->getY(),
- $bottomRightX,
- $bottomRightY,
- $bottomLeft->getX(),
- $bottomLeft->getY()
- );
- }
-
- private static function sampleGrid(
- $image,
- $transform,
- $dimension
- )
- {
- $sampler = GridSampler::getInstance();
-
- return $sampler->sampleGrid_($image, $dimension, $dimension, $transform);
- }
-
- final protected function getImage()
- {
- return $this->image;
- }
-
- final protected function getResultPointCallback()
- {
- return $this->resultPointCallback;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/FinderPattern.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/FinderPattern.php
deleted file mode 100644
index fe1f26e..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/FinderPattern.php
+++ /dev/null
@@ -1,81 +0,0 @@
-Encapsulates a finder pattern, which are the three square patterns found in
- * the corners of QR Codes. It also encapsulates a count of similar finder patterns,
- * as a convenience to the finder's bookkeeping.
- *
- * @author Sean Owen
- */
-final class FinderPattern extends ResultPoint
-{
- public function __construct($posX, $posY, private $estimatedModuleSize, private $count = 1)
- {
- parent::__construct($posX, $posY);
- }
-
- public function getEstimatedModuleSize()
- {
- return $this->estimatedModuleSize;
- }
-
- public function getCount()
- {
- return $this->count;
- }
-
- /*
- void incrementCount() {
- this.count++;
- }
- */
-
- /**
- *
Determines if this finder pattern "about equals" a finder pattern at the stated
- * position and size -- meaning, it is at nearly the same center with nearly the same size.
- */
- public function aboutEquals($moduleSize, $i, $j)
- {
- if (abs($i - $this->getY()) <= $moduleSize && abs($j - $this->getX()) <= $moduleSize) {
- $moduleSizeDiff = abs($moduleSize - $this->estimatedModuleSize);
-
- return $moduleSizeDiff <= 1.0 || $moduleSizeDiff <= $this->estimatedModuleSize;
- }
-
- return false;
- }
-
- /**
- * Combines this object's current estimate of a finder pattern position and module size
- * with a new estimate. It returns a new {@code FinderPattern} containing a weighted average
- * based on count.
- */
- public function combineEstimate($i, $j, $newModuleSize): \Zxing\Qrcode\Detector\FinderPattern
- {
- $combinedCount = $this->count + 1;
- $combinedX = ($this->count * $this->getX() + $j) / $combinedCount;
- $combinedY = ($this->count * $this->getY() + $i) / $combinedCount;
- $combinedModuleSize = ($this->count * $this->estimatedModuleSize + $newModuleSize) / $combinedCount;
-
- return new FinderPattern($combinedX, $combinedY, $combinedModuleSize, $combinedCount);
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/FinderPatternFinder.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/FinderPatternFinder.php
deleted file mode 100644
index e105827..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/FinderPatternFinder.php
+++ /dev/null
@@ -1,700 +0,0 @@
-This class attempts to find finder patterns in a QR Code. Finder patterns are the square
- * markers at three corners of a QR Code.
- *
- *
This class is thread-safe but not reentrant. Each thread must allocate its own object.
- *
- * @author Sean Owen
- */
-class FinderPatternFinder
-{
- protected static int $MIN_SKIP = 3;
- protected static int $MAX_MODULES = 57; // 1 pixel/module times 3 modules/center
- private static int $CENTER_QUORUM = 2;
- private ?float $average = null;
- private array $possibleCenters = []; //private final List possibleCenters;
- private bool $hasSkipped = false;
- /**
- * @var mixed|int[]
- */
- private $crossCheckStateCount;
-
- /**
- *
Creates a finder that will search the image for three finder patterns.
- *
- * @param BitMatrix $image image to search
- */
- public function __construct(private $image, private $resultPointCallback = null)
- {
- //new ArrayList<>();
- $this->crossCheckStateCount = fill_array(0, 5, 0);
- }
-
- final public function find($hints): \Zxing\Qrcode\Detector\FinderPatternInfo
- {/*final FinderPatternInfo find(Map hints) throws NotFoundException {*/
- $tryHarder = $hints != null && $hints['TRY_HARDER'];
- $pureBarcode = $hints != null && $hints['PURE_BARCODE'];
- $maxI = $this->image->getHeight();
- $maxJ = $this->image->getWidth();
- // We are looking for black/white/black/white/black modules in
- // 1:1:3:1:1 ratio; this tracks the number of such modules seen so far
-
- // Let's assume that the maximum version QR Code we support takes up 1/4 the height of the
- // image, and then account for the center being 3 modules in size. This gives the smallest
- // number of pixels the center could be, so skip this often. When trying harder, look for all
- // QR versions regardless of how dense they are.
- $iSkip = (int)((3 * $maxI) / (4 * self::$MAX_MODULES));
- if ($iSkip < self::$MIN_SKIP || $tryHarder) {
- $iSkip = self::$MIN_SKIP;
- }
-
- $done = false;
- $stateCount = [];
- for ($i = $iSkip - 1; $i < $maxI && !$done; $i += $iSkip) {
- // Get a row of black/white values
- $stateCount[0] = 0;
- $stateCount[1] = 0;
- $stateCount[2] = 0;
- $stateCount[3] = 0;
- $stateCount[4] = 0;
- $currentState = 0;
- for ($j = 0; $j < $maxJ; $j++) {
- if ($this->image->get($j, $i)) {
- // Black pixel
- if (($currentState & 1) == 1) { // Counting white pixels
- $currentState++;
- }
- $stateCount[$currentState]++;
- } else { // White pixel
- if (($currentState & 1) == 0) { // Counting black pixels
- if ($currentState == 4) { // A winner?
- if (self::foundPatternCross($stateCount)) { // Yes
- $confirmed = $this->handlePossibleCenter($stateCount, $i, $j, $pureBarcode);
- if ($confirmed) {
- // Start examining every other line. Checking each line turned out to be too
- // expensive and didn't improve performance.
- $iSkip = 3;
- if ($this->hasSkipped) {
- $done = $this->haveMultiplyConfirmedCenters();
- } else {
- $rowSkip = $this->findRowSkip();
- if ($rowSkip > $stateCount[2]) {
- // Skip rows between row of lower confirmed center
- // and top of presumed third confirmed center
- // but back up a bit to get a full chance of detecting
- // it, entire width of center of finder pattern
-
- // Skip by rowSkip, but back off by $stateCount[2] (size of last center
- // of pattern we saw) to be conservative, and also back off by iSkip which
- // is about to be re-added
- $i += $rowSkip - $stateCount[2] - $iSkip;
- $j = $maxJ - 1;
- }
- }
- } else {
- $stateCount[0] = $stateCount[2];
- $stateCount[1] = $stateCount[3];
- $stateCount[2] = $stateCount[4];
- $stateCount[3] = 1;
- $stateCount[4] = 0;
- $currentState = 3;
- continue;
- }
- // Clear state to start looking again
- $currentState = 0;
- $stateCount[0] = 0;
- $stateCount[1] = 0;
- $stateCount[2] = 0;
- $stateCount[3] = 0;
- $stateCount[4] = 0;
- } else { // No, shift counts back by two
- $stateCount[0] = $stateCount[2];
- $stateCount[1] = $stateCount[3];
- $stateCount[2] = $stateCount[4];
- $stateCount[3] = 1;
- $stateCount[4] = 0;
- $currentState = 3;
- }
- } else {
- $stateCount[++$currentState]++;
- }
- } else { // Counting white pixels
- $stateCount[$currentState]++;
- }
- }
- }
- if (self::foundPatternCross($stateCount)) {
- $confirmed = $this->handlePossibleCenter($stateCount, $i, $maxJ, $pureBarcode);
- if ($confirmed) {
- $iSkip = $stateCount[0];
- if ($this->hasSkipped) {
- // Found a third one
- $done = $this->haveMultiplyConfirmedCenters();
- }
- }
- }
- }
-
- $patternInfo = $this->selectBestPatterns();
- $patternInfo = ResultPoint::orderBestPatterns($patternInfo);
-
- return new FinderPatternInfo($patternInfo);
- }
-
- /**
- * @param $stateCount ; count of black/white/black/white/black pixels just read
- *
- * @return true iff the proportions of the counts is close enough to the 1/1/3/1/1 ratios
- * used by finder patterns to be considered a match
- */
- protected static function foundPatternCross($stateCount)
- {
- $totalModuleSize = 0;
- for ($i = 0; $i < 5; $i++) {
- $count = $stateCount[$i];
- if ($count == 0) {
- return false;
- }
- $totalModuleSize += $count;
- }
- if ($totalModuleSize < 7) {
- return false;
- }
- $moduleSize = $totalModuleSize / 7.0;
- $maxVariance = $moduleSize / 2.0;
-
- // Allow less than 50% variance from 1-1-3-1-1 proportions
- return
- abs($moduleSize - $stateCount[0]) < $maxVariance &&
- abs($moduleSize - $stateCount[1]) < $maxVariance &&
- abs(3.0 * $moduleSize - $stateCount[2]) < 3 * $maxVariance &&
- abs($moduleSize - $stateCount[3]) < $maxVariance &&
- abs($moduleSize - $stateCount[4]) < $maxVariance;
- }
-
- /**
- *
This is called when a horizontal scan finds a possible alignment pattern. It will
- * cross check with a vertical scan, and if successful, will, ah, cross-cross-check
- * with another horizontal scan. This is needed primarily to locate the real horizontal
- * center of the pattern in cases of extreme skew.
- * And then we cross-cross-cross check with another diagonal scan.
- *
- *
If that succeeds the finder pattern location is added to a list that tracks
- * the number of times each location has been nearly-matched as a finder pattern.
- * Each additional find is more evidence that the location is in fact a finder
- * pattern center
- *
- * @param reading $stateCount state module counts from horizontal scan
- * @param row $i where finder pattern may be found
- * @param end $j of possible finder pattern in row
- * @param true $pureBarcode if in "pure barcode" mode
- *
- * @return true if a finder pattern candidate was found this time
- */
- final protected function handlePossibleCenter($stateCount, $i, $j, $pureBarcode)
- {
- $stateCountTotal = $stateCount[0] + $stateCount[1] + $stateCount[2] + $stateCount[3] +
- $stateCount[4];
- $centerJ = self::centerFromEnd($stateCount, $j);
- $centerI = $this->crossCheckVertical($i, (int)($centerJ), $stateCount[2], $stateCountTotal);
- if (!is_nan($centerI)) {
- // Re-cross check
- $centerJ = $this->crossCheckHorizontal((int)($centerJ), (int)($centerI), $stateCount[2], $stateCountTotal);
- if (!is_nan($centerJ) &&
- (!$pureBarcode || $this->crossCheckDiagonal((int)($centerI), (int)($centerJ), $stateCount[2], $stateCountTotal))
- ) {
- $estimatedModuleSize = (float)$stateCountTotal / 7.0;
- $found = false;
- for ($index = 0; $index < count($this->possibleCenters); $index++) {
- $center = $this->possibleCenters[$index];
- // Look for about the same center and module size:
- if ($center->aboutEquals($estimatedModuleSize, $centerI, $centerJ)) {
- $this->possibleCenters[$index] = $center->combineEstimate($centerI, $centerJ, $estimatedModuleSize);
- $found = true;
- break;
- }
- }
- if (!$found) {
- $point = new FinderPattern($centerJ, $centerI, $estimatedModuleSize);
- $this->possibleCenters[] = $point;
- if ($this->resultPointCallback != null) {
- $this->resultPointCallback->foundPossibleResultPoint($point);
- }
- }
-
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Given a count of black/white/black/white/black pixels just seen and an end position,
- * figures the location of the center of this run.
- */
- private static function centerFromEnd($stateCount, $end)
- {
- return (float)($end - $stateCount[4] - $stateCount[3]) - $stateCount[2] / 2.0;
- }
-
- /**
- *
After a horizontal scan finds a potential finder pattern, this method
- * "cross-checks" by scanning down vertically through the center of the possible
- * finder pattern to see if the same proportion is detected.
- *
- * @param $startI ; row where a finder pattern was detected
- * @param $centerJ ; center of the section that appears to cross a finder pattern
- * @param $maxCount ; maximum reasonable number of modules that should be
- * observed in any reading state, based on the results of the horizontal scan
- *
- * @return float vertical center of finder pattern, or {@link Float#NaN} if not found
- */
- private function crossCheckVertical(
- $startI,
- $centerJ,
- $maxCount,
- $originalStateCountTotal
- )
- {
- $image = $this->image;
-
- $maxI = $image->getHeight();
- $stateCount = $this->getCrossCheckStateCount();
-
- // Start counting up from center
- $i = $startI;
- while ($i >= 0 && $image->get($centerJ, $i)) {
- $stateCount[2]++;
- $i--;
- }
- if ($i < 0) {
- return NAN;
- }
- while ($i >= 0 && !$image->get($centerJ, $i) && $stateCount[1] <= $maxCount) {
- $stateCount[1]++;
- $i--;
- }
- // If already too many modules in this state or ran off the edge:
- if ($i < 0 || $stateCount[1] > $maxCount) {
- return NAN;
- }
- while ($i >= 0 && $image->get($centerJ, $i) && $stateCount[0] <= $maxCount) {
- $stateCount[0]++;
- $i--;
- }
- if ($stateCount[0] > $maxCount) {
- return NAN;
- }
-
- // Now also count down from center
- $i = $startI + 1;
- while ($i < $maxI && $image->get($centerJ, $i)) {
- $stateCount[2]++;
- $i++;
- }
- if ($i == $maxI) {
- return NAN;
- }
- while ($i < $maxI && !$image->get($centerJ, $i) && $stateCount[3] < $maxCount) {
- $stateCount[3]++;
- $i++;
- }
- if ($i == $maxI || $stateCount[3] >= $maxCount) {
- return NAN;
- }
- while ($i < $maxI && $image->get($centerJ, $i) && $stateCount[4] < $maxCount) {
- $stateCount[4]++;
- $i++;
- }
- if ($stateCount[4] >= $maxCount) {
- return NAN;
- }
-
- // If we found a finder-pattern-like section, but its size is more than 40% different than
- // the original, assume it's a false positive
- $stateCountTotal = $stateCount[0] + $stateCount[1] + $stateCount[2] + $stateCount[3] +
- $stateCount[4];
- if (5 * abs($stateCountTotal - $originalStateCountTotal) >= 2 * $originalStateCountTotal) {
- return NAN;
- }
-
- return self::foundPatternCross($stateCount) ? self::centerFromEnd($stateCount, $i) : NAN;
- }
-
- private function getCrossCheckStateCount()
- {
- $this->crossCheckStateCount[0] = 0;
- $this->crossCheckStateCount[1] = 0;
- $this->crossCheckStateCount[2] = 0;
- $this->crossCheckStateCount[3] = 0;
- $this->crossCheckStateCount[4] = 0;
-
- return $this->crossCheckStateCount;
- }
-
- /**
- *
Like {@link #crossCheckVertical(int, int, int, int)}, and in fact is basically identical,
- * except it reads horizontally instead of vertically. This is used to cross-cross
- * check a vertical cross check and locate the real center of the alignment pattern.
- */
- private function crossCheckHorizontal(
- $startJ,
- $centerI,
- $maxCount,
- $originalStateCountTotal
- )
- {
- $image = $this->image;
-
- $maxJ = $this->image->getWidth();
- $stateCount = $this->getCrossCheckStateCount();
-
- $j = $startJ;
- while ($j >= 0 && $image->get($j, $centerI)) {
- $stateCount[2]++;
- $j--;
- }
- if ($j < 0) {
- return NAN;
- }
- while ($j >= 0 && !$image->get($j, $centerI) && $stateCount[1] <= $maxCount) {
- $stateCount[1]++;
- $j--;
- }
- if ($j < 0 || $stateCount[1] > $maxCount) {
- return NAN;
- }
- while ($j >= 0 && $image->get($j, $centerI) && $stateCount[0] <= $maxCount) {
- $stateCount[0]++;
- $j--;
- }
- if ($stateCount[0] > $maxCount) {
- return NAN;
- }
-
- $j = $startJ + 1;
- while ($j < $maxJ && $image->get($j, $centerI)) {
- $stateCount[2]++;
- $j++;
- }
- if ($j == $maxJ) {
- return NAN;
- }
- while ($j < $maxJ && !$image->get($j, $centerI) && $stateCount[3] < $maxCount) {
- $stateCount[3]++;
- $j++;
- }
- if ($j == $maxJ || $stateCount[3] >= $maxCount) {
- return NAN;
- }
- while ($j < $maxJ && $this->image->get($j, $centerI) && $stateCount[4] < $maxCount) {
- $stateCount[4]++;
- $j++;
- }
- if ($stateCount[4] >= $maxCount) {
- return NAN;
- }
-
- // If we found a finder-pattern-like section, but its size is significantly different than
- // the original, assume it's a false positive
- $stateCountTotal = $stateCount[0] + $stateCount[1] + $stateCount[2] + $stateCount[3] +
- $stateCount[4];
- if (5 * abs($stateCountTotal - $originalStateCountTotal) >= $originalStateCountTotal) {
- return NAN;
- }
-
- return static::foundPatternCross($stateCount) ? self::centerFromEnd($stateCount, $j) : NAN;
- }
-
- /**
- * After a vertical and horizontal scan finds a potential finder pattern, this method
- * "cross-cross-cross-checks" by scanning down diagonally through the center of the possible
- * finder pattern to see if the same proportion is detected.
- *
- * @param $startI ; row where a finder pattern was detected
- * @param $centerJ ; center of the section that appears to cross a finder pattern
- * @param $maxCount ; maximum reasonable number of modules that should be
- * observed in any reading state, based on the results of the horizontal scan
- * @param $originalStateCountTotal ; The original state count total.
- *
- * @return true if proportions are withing expected limits
- */
- private function crossCheckDiagonal($startI, $centerJ, $maxCount, $originalStateCountTotal)
- {
- $stateCount = $this->getCrossCheckStateCount();
-
- // Start counting up, left from center finding black center mass
- $i = 0;
- $startI = (int)($startI);
- $centerJ = (int)($centerJ);
- while ($startI >= $i && $centerJ >= $i && $this->image->get($centerJ - $i, $startI - $i)) {
- $stateCount[2]++;
- $i++;
- }
-
- if ($startI < $i || $centerJ < $i) {
- return false;
- }
-
- // Continue up, left finding white space
- while ($startI >= $i && $centerJ >= $i && !$this->image->get($centerJ - $i, $startI - $i) &&
- $stateCount[1] <= $maxCount) {
- $stateCount[1]++;
- $i++;
- }
-
- // If already too many modules in this state or ran off the edge:
- if ($startI < $i || $centerJ < $i || $stateCount[1] > $maxCount) {
- return false;
- }
-
- // Continue up, left finding black border
- while ($startI >= $i && $centerJ >= $i && $this->image->get($centerJ - $i, $startI - $i) &&
- $stateCount[0] <= $maxCount) {
- $stateCount[0]++;
- $i++;
- }
- if ($stateCount[0] > $maxCount) {
- return false;
- }
-
- $maxI = $this->image->getHeight();
- $maxJ = $this->image->getWidth();
-
- // Now also count down, right from center
- $i = 1;
- while ($startI + $i < $maxI && $centerJ + $i < $maxJ && $this->image->get($centerJ + $i, $startI + $i)) {
- $stateCount[2]++;
- $i++;
- }
-
- // Ran off the edge?
- if ($startI + $i >= $maxI || $centerJ + $i >= $maxJ) {
- return false;
- }
-
- while ($startI + $i < $maxI && $centerJ + $i < $maxJ && !$this->image->get($centerJ + $i, $startI + $i) &&
- $stateCount[3] < $maxCount) {
- $stateCount[3]++;
- $i++;
- }
-
- if ($startI + $i >= $maxI || $centerJ + $i >= $maxJ || $stateCount[3] >= $maxCount) {
- return false;
- }
-
- while ($startI + $i < $maxI && $centerJ + $i < $maxJ && $this->image->get($centerJ + $i, $startI + $i) &&
- $stateCount[4] < $maxCount) {
- $stateCount[4]++;
- $i++;
- }
-
- if ($stateCount[4] >= $maxCount) {
- return false;
- }
-
- // If we found a finder-pattern-like section, but its size is more than 100% different than
- // the original, assume it's a false positive
- $stateCountTotal = $stateCount[0] + $stateCount[1] + $stateCount[2] + $stateCount[3] + $stateCount[4];
-
- return
- abs($stateCountTotal - $originalStateCountTotal) < 2 * $originalStateCountTotal &&
- self::foundPatternCross($stateCount);
- }
-
- /**
- * @return true iff we have found at least 3 finder patterns that have been detected
- * at least {@link #CENTER_QUORUM} times each, and, the estimated module size of the
- * candidates is "pretty similar"
- */
- private function haveMultiplyConfirmedCenters()
- {
- $confirmedCount = 0;
- $totalModuleSize = 0.0;
- $max = count($this->possibleCenters);
- foreach ($this->possibleCenters as $pattern) {
- if ($pattern->getCount() >= self::$CENTER_QUORUM) {
- $confirmedCount++;
- $totalModuleSize += $pattern->getEstimatedModuleSize();
- }
- }
- if ($confirmedCount < 3) {
- return false;
- }
- // OK, we have at least 3 confirmed centers, but, it's possible that one is a "false positive"
- // and that we need to keep looking. We detect this by asking if the estimated module sizes
- // vary too much. We arbitrarily say that when the total deviation from average exceeds
- // 5% of the total module size estimates, it's too much.
- $average = $totalModuleSize / (float)$max;
- $totalDeviation = 0.0;
- foreach ($this->possibleCenters as $pattern) {
- $totalDeviation += abs($pattern->getEstimatedModuleSize() - $average);
- }
-
- return $totalDeviation <= 0.05 * $totalModuleSize;
- }
-
- /**
- * @return int number of rows we could safely skip during scanning, based on the first
- * two finder patterns that have been located. In some cases their position will
- * allow us to infer that the third pattern must lie below a certain point farther
- * down in the image.
- */
- private function findRowSkip()
- {
- $max = count($this->possibleCenters);
- if ($max <= 1) {
- return 0;
- }
- $firstConfirmedCenter = null;
- foreach ($this->possibleCenters as $center) {
- if ($center->getCount() >= self::$CENTER_QUORUM) {
- if ($firstConfirmedCenter == null) {
- $firstConfirmedCenter = $center;
- } else {
- // We have two confirmed centers
- // How far down can we skip before resuming looking for the next
- // pattern? In the worst case, only the difference between the
- // difference in the x / y coordinates of the two centers.
- // This is the case where you find top left last.
- $this->hasSkipped = true;
-
- return (int)((abs($firstConfirmedCenter->getX() - $center->getX()) -
- abs($firstConfirmedCenter->getY() - $center->getY())) / 2);
- }
- }
- }
-
- return 0;
- }
-
- /**
- * @return array the 3 best {@link FinderPattern}s from our list of candidates. The "best" are
- * those that have been detected at least {@link #CENTER_QUORUM} times, and whose module
- * size differs from the average among those patterns the least
- * @throws NotFoundException if 3 such finder patterns do not exist
- */
- private function selectBestPatterns()
- {
- $startSize = count($this->possibleCenters);
- if ($startSize < 3) {
- // Couldn't find enough finder patterns
- throw new NotFoundException();
- }
-
- // Filter outlier possibilities whose module size is too different
- if ($startSize > 3) {
- // But we can only afford to do so if we have at least 4 possibilities to choose from
- $totalModuleSize = 0.0;
- $square = 0.0;
- foreach ($this->possibleCenters as $center) {
- $size = $center->getEstimatedModuleSize();
- $totalModuleSize += $size;
- $square += $size * $size;
- }
- $this->average = $totalModuleSize / (float)$startSize;
- $stdDev = (float)sqrt($square / $startSize - $this->average * $this->average);
-
- usort($this->possibleCenters, $this->FurthestFromAverageComparator(...));
-
- $limit = max(0.2 * $this->average, $stdDev);
-
- for ($i = 0; $i < count($this->possibleCenters) && count($this->possibleCenters) > 3; $i++) {
- $pattern = $this->possibleCenters[$i];
- if (abs($pattern->getEstimatedModuleSize() - $this->average) > $limit) {
- unset($this->possibleCenters[$i]);//возможно что ключи меняются в java при вызове .remove(i) ???
- $this->possibleCenters = array_values($this->possibleCenters);
- $i--;
- }
- }
- }
-
- if (count($this->possibleCenters) > 3) {
- // Throw away all but those first size candidate points we found.
-
- $totalModuleSize = 0.0;
- foreach ($this->possibleCenters as $possibleCenter) {
- $totalModuleSize += $possibleCenter->getEstimatedModuleSize();
- }
-
- $this->average = $totalModuleSize / (float)count($this->possibleCenters);
-
- usort($this->possibleCenters, $this->CenterComparator(...));
-
- array_slice($this->possibleCenters, 3, count($this->possibleCenters) - 3);
- }
-
- return [$this->possibleCenters[0], $this->possibleCenters[1], $this->possibleCenters[2]];
- }
-
- /**
- *
Orders by {@link FinderPattern#getCount()}, descending.
- */
-
- //@Override
- final protected function getPossibleCenters()
- { //List getPossibleCenters()
- return $this->possibleCenters;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/FinderPatternInfo.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/FinderPatternInfo.php
deleted file mode 100644
index 6f605cd..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/Detector/FinderPatternInfo.php
+++ /dev/null
@@ -1,53 +0,0 @@
-Encapsulates information about finder patterns in an image, including the location of
- * the three finder patterns, and their estimated module size.
- *
- * @author Sean Owen
- */
-final class FinderPatternInfo
-{
- private $bottomLeft;
- private $topLeft;
- private $topRight;
-
- public function __construct($patternCenters)
- {
- $this->bottomLeft = $patternCenters[0];
- $this->topLeft = $patternCenters[1];
- $this->topRight = $patternCenters[2];
- }
-
- public function getBottomLeft()
- {
- return $this->bottomLeft;
- }
-
- public function getTopLeft()
- {
- return $this->topLeft;
- }
-
- public function getTopRight()
- {
- return $this->topRight;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/QRCodeReader.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/QRCodeReader.php
deleted file mode 100644
index dc5bf77..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Qrcode/QRCodeReader.php
+++ /dev/null
@@ -1,221 +0,0 @@
-decoder = new Decoder();
- }
-
- /**
- * @param null $hints
- *
- * @return Result
- * @throws \Zxing\FormatException
- * @throws \Zxing\NotFoundException
- */
- public function decode(BinaryBitmap $image, $hints = null)
- {
- $decoderResult = null;
- if ($hints !== null && $hints['PURE_BARCODE']) {
- $bits = self::extractPureBits($image->getBlackMatrix());
- $decoderResult = $this->decoder->decode($bits, $hints);
- $points = self::$NO_POINTS;
- } else {
- $detector = new Detector($image->getBlackMatrix());
- $detectorResult = $detector->detect($hints);
-
- $decoderResult = $this->decoder->decode($detectorResult->getBits(), $hints);
- $points = $detectorResult->getPoints();
- }
- $result = new Result($decoderResult->getText(), $decoderResult->getRawBytes(), $points, 'QR_CODE');//BarcodeFormat.QR_CODE
-
- $byteSegments = $decoderResult->getByteSegments();
- if ($byteSegments !== null) {
- $result->putMetadata('BYTE_SEGMENTS', $byteSegments);//ResultMetadataType.BYTE_SEGMENTS
- }
- $ecLevel = $decoderResult->getECLevel();
- if ($ecLevel !== null) {
- $result->putMetadata('ERROR_CORRECTION_LEVEL', $ecLevel);//ResultMetadataType.ERROR_CORRECTION_LEVEL
- }
- if ($decoderResult->hasStructuredAppend()) {
- $result->putMetadata(
- 'STRUCTURED_APPEND_SEQUENCE',//ResultMetadataType.STRUCTURED_APPEND_SEQUENCE
- $decoderResult->getStructuredAppendSequenceNumber()
- );
- $result->putMetadata(
- 'STRUCTURED_APPEND_PARITY',//ResultMetadataType.STRUCTURED_APPEND_PARITY
- $decoderResult->getStructuredAppendParity()
- );
- }
-
- return $result;
- }
-
- /**
- * Locates and decodes a QR code in an image.
- *
- * @return a String representing the content encoded by the QR code
- * @throws NotFoundException if a QR code cannot be found
- * @throws FormatException if a QR code cannot be decoded
- * @throws ChecksumException if error correction fails
- */
-
- /**
- * This method detects a code in a "pure" image -- that is, pure monochrome image
- * which contains only an unrotated, unskewed, image of a code, with some white border
- * around it. This is a specialized method that works exceptionally fast in this special
- * case.
- *
- * @see com.google.zxing.datamatrix.DataMatrixReader#extractPureBits(BitMatrix)
- */
- private static function extractPureBits(BitMatrix $image)
- {
- $leftTopBlack = $image->getTopLeftOnBit();
- $rightBottomBlack = $image->getBottomRightOnBit();
- if ($leftTopBlack === null || $rightBottomBlack == null) {
- throw NotFoundException::getNotFoundInstance();
- }
-
- $moduleSize = self::moduleSize($leftTopBlack, $image);
-
- $top = $leftTopBlack[1];
- $bottom = $rightBottomBlack[1];
- $left = $leftTopBlack[0];
- $right = $rightBottomBlack[0];
-
- // Sanity check!
- if ($left >= $right || $top >= $bottom) {
- throw NotFoundException::getNotFoundInstance();
- }
-
- if ($bottom - $top != $right - $left) {
- // Special case, where bottom-right module wasn't black so we found something else in the last row
- // Assume it's a square, so use height as the width
- $right = $left + ($bottom - $top);
- }
-
- $matrixWidth = round(($right - $left + 1) / $moduleSize);
- $matrixHeight = round(($bottom - $top + 1) / $moduleSize);
- if ($matrixWidth <= 0 || $matrixHeight <= 0) {
- throw NotFoundException::getNotFoundInstance();
- }
- if ($matrixHeight != $matrixWidth) {
- // Only possibly decode square regions
- throw NotFoundException::getNotFoundInstance();
- }
-
- // Push in the "border" by half the module width so that we start
- // sampling in the middle of the module. Just in case the image is a
- // little off, this will help recover.
- $nudge = (int)($moduleSize / 2.0);// $nudge = (int) ($moduleSize / 2.0f);
- $top += $nudge;
- $left += $nudge;
-
- // But careful that this does not sample off the edge
- // "right" is the farthest-right valid pixel location -- right+1 is not necessarily
- // This is positive by how much the inner x loop below would be too large
- $nudgedTooFarRight = $left + (int)(($matrixWidth - 1) * $moduleSize) - $right;
- if ($nudgedTooFarRight > 0) {
- if ($nudgedTooFarRight > $nudge) {
- // Neither way fits; abort
- throw NotFoundException::getNotFoundInstance();
- }
- $left -= $nudgedTooFarRight;
- }
- // See logic above
- $nudgedTooFarDown = $top + (int)(($matrixHeight - 1) * $moduleSize) - $bottom;
- if ($nudgedTooFarDown > 0) {
- if ($nudgedTooFarDown > $nudge) {
- // Neither way fits; abort
- throw NotFoundException::getNotFoundInstance();
- }
- $top -= $nudgedTooFarDown;
- }
-
- // Now just read off the bits
- $bits = new BitMatrix($matrixWidth, $matrixHeight);
- for ($y = 0; $y < $matrixHeight; $y++) {
- $iOffset = $top + (int)($y * $moduleSize);
- for ($x = 0; $x < $matrixWidth; $x++) {
- if ($image->get($left + (int)($x * $moduleSize), $iOffset)) {
- $bits->set($x, $y);
- }
- }
- }
-
- return $bits;
- }
-
- private static function moduleSize($leftTopBlack, BitMatrix $image)
- {
- $height = $image->getHeight();
- $width = $image->getWidth();
- $x = $leftTopBlack[0];
- $y = $leftTopBlack[1];
- /*$x = $leftTopBlack[0];
- $y = $leftTopBlack[1];*/
- $inBlack = true;
- $transitions = 0;
- while ($x < $width && $y < $height) {
- if ($inBlack != $image->get($x, $y)) {
- if (++$transitions == 5) {
- break;
- }
- $inBlack = !$inBlack;
- }
- $x++;
- $y++;
- }
- if ($x == $width || $y == $height) {
- throw NotFoundException::getNotFoundInstance();
- }
-
- return ($x - $leftTopBlack[0]) / 7.0; //return ($x - $leftTopBlack[0]) / 7.0f;
- }
-
- public function reset(): void
- {
- // do nothing
- }
-
- final protected function getDecoder()
- {
- return $this->decoder;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/RGBLuminanceSource.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/RGBLuminanceSource.php
deleted file mode 100644
index d9399e0..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/RGBLuminanceSource.php
+++ /dev/null
@@ -1,319 +0,0 @@
-RGBLuminanceSource_($pixels, $dataWidth, $dataHeight);
-
- return;
- }
- parent::__construct($width, $height);
- if ($left + $width > $dataWidth || $top + $height > $dataHeight) {
- throw new \InvalidArgumentException("Crop rectangle does not fit within image data.");
- }
- $this->luminances = $pixels;
- $this->dataWidth = $dataWidth;
- $this->dataHeight = $dataHeight;
- $this->left = $left;
- $this->top = $top;
- }
-
- public function RGBLuminanceSource_($width, $height, $pixels): void
- {
- parent::__construct($width, $height);
-
- $this->dataWidth = $width;
- $this->dataHeight = $height;
- $this->left = 0;
- $this->top = 0;
- $this->pixels = $pixels;
-
-
- // In order to measure pure decoding speed, we convert the entire image to a greyscale array
- // up front, which is the same as the Y channel of the YUVLuminanceSource in the real app.
- $this->luminances = [];
- //$this->luminances = $this->grayScaleToBitmap($this->grayscale());
-
- foreach ($pixels as $key => $pixel) {
- $r = $pixel['red'];
- $g = $pixel['green'];
- $b = $pixel['blue'];
-
- /* if (($pixel & 0xFF000000) == 0) {
- $pixel = 0xFFFFFFFF; // = white
- }
-
- // .229R + 0.587G + 0.114B (YUV/YIQ for PAL and NTSC)
-
- $this->luminances[$key] =
- (306 * (($pixel >> 16) & 0xFF) +
- 601 * (($pixel >> 8) & 0xFF) +
- 117 * ($pixel & 0xFF) +
- 0x200) >> 10;
-
- */
- //$r = ($pixel >> 16) & 0xff;
- //$g = ($pixel >> 8) & 0xff;
- //$b = $pixel & 0xff;
- if ($r == $g && $g == $b) {
- // Image is already greyscale, so pick any channel.
-
- $this->luminances[$key] = $r;//(($r + 128) % 256) - 128;
- } else {
- // Calculate luminance cheaply, favoring green.
- $this->luminances[$key] = ($r + 2 * $g + $b) / 4;//(((($r + 2 * $g + $b) / 4) + 128) % 256) - 128;
- }
- }
-
- /*
-
- for ($y = 0; $y < $height; $y++) {
- $offset = $y * $width;
- for ($x = 0; $x < $width; $x++) {
- $pixel = $pixels[$offset + $x];
- $r = ($pixel >> 16) & 0xff;
- $g = ($pixel >> 8) & 0xff;
- $b = $pixel & 0xff;
- if ($r == $g && $g == $b) {
-// Image is already greyscale, so pick any channel.
-
- $this->luminances[(int)($offset + $x)] = (($r+128) % 256) - 128;
- } else {
-// Calculate luminance cheaply, favoring green.
- $this->luminances[(int)($offset + $x)] = (((($r + 2 * $g + $b) / 4)+128)%256) - 128;
- }
-
-
-
- }
- */
- //}
- // $this->luminances = $this->grayScaleToBitmap($this->luminances);
- }
-
- public function grayscale()
- {
- $width = $this->dataWidth;
- $height = $this->dataHeight;
-
- $ret = fill_array(0, $width * $height, 0);
- for ($y = 0; $y < $height; $y++) {
- for ($x = 0; $x < $width; $x++) {
- $gray = $this->getPixel($x, $y, $width, $height);
-
- $ret[$x + $y * $width] = $gray;
- }
- }
-
- return $ret;
- }
-
- public function getPixel($x, $y, $width, $height)
- {
- $image = $this->pixels;
- if ($width < $x) {
- die('error');
- }
- if ($height < $y) {
- die('error');
- }
- $point = ($x) + ($y * $width);
-
- $r = $image[$point]['red'];//($image[$point] >> 16) & 0xff;
- $g = $image[$point]['green'];//($image[$point] >> 8) & 0xff;
- $b = $image[$point]['blue'];//$image[$point] & 0xff;
-
- $p = (int)(($r * 33 + $g * 34 + $b * 33) / 100);
-
-
- return $p;
- }
-
- public function grayScaleToBitmap($grayScale)
- {
- $middle = $this->getMiddleBrightnessPerArea($grayScale);
- $sqrtNumArea = is_countable($middle) ? count($middle) : 0;
- $areaWidth = floor($this->dataWidth / $sqrtNumArea);
- $areaHeight = floor($this->dataHeight / $sqrtNumArea);
- $bitmap = fill_array(0, $this->dataWidth * $this->dataHeight, 0);
-
- for ($ay = 0; $ay < $sqrtNumArea; $ay++) {
- for ($ax = 0; $ax < $sqrtNumArea; $ax++) {
- for ($dy = 0; $dy < $areaHeight; $dy++) {
- for ($dx = 0; $dx < $areaWidth; $dx++) {
- $bitmap[(int)($areaWidth * $ax + $dx + ($areaHeight * $ay + $dy) * $this->dataWidth)] = ($grayScale[(int)($areaWidth * $ax + $dx + ($areaHeight * $ay + $dy) * $this->dataWidth)] < $middle[$ax][$ay]) ? 0 : 255;
- }
- }
- }
- }
-
- return $bitmap;
- }
-
- public function getMiddleBrightnessPerArea($image)
- {
- $numSqrtArea = 4;
- //obtain middle brightness((min + max) / 2) per area
- $areaWidth = floor($this->dataWidth / $numSqrtArea);
- $areaHeight = floor($this->dataHeight / $numSqrtArea);
- $minmax = fill_array(0, $numSqrtArea, 0);
- for ($i = 0; $i < $numSqrtArea; $i++) {
- $minmax[$i] = fill_array(0, $numSqrtArea, 0);
- for ($i2 = 0; $i2 < $numSqrtArea; $i2++) {
- $minmax[$i][$i2] = [0, 0];
- }
- }
- for ($ay = 0; $ay < $numSqrtArea; $ay++) {
- for ($ax = 0; $ax < $numSqrtArea; $ax++) {
- $minmax[$ax][$ay][0] = 0xFF;
- for ($dy = 0; $dy < $areaHeight; $dy++) {
- for ($dx = 0; $dx < $areaWidth; $dx++) {
- $target = $image[(int)($areaWidth * $ax + $dx + ($areaHeight * $ay + $dy) * $this->dataWidth)];
- if ($target < $minmax[$ax][$ay][0]) {
- $minmax[$ax][$ay][0] = $target;
- }
- if ($target > $minmax[$ax][$ay][1]) {
- $minmax[$ax][$ay][1] = $target;
- }
- }
- }
- //minmax[ax][ay][0] = (minmax[ax][ay][0] + minmax[ax][ay][1]) / 2;
- }
- }
- $middle = [];
- for ($i3 = 0; $i3 < $numSqrtArea; $i3++) {
- $middle[$i3] = [];
- }
- for ($ay = 0; $ay < $numSqrtArea; $ay++) {
- for ($ax = 0; $ax < $numSqrtArea; $ax++) {
- $middle[$ax][$ay] = floor(($minmax[$ax][$ay][0] + $minmax[$ax][$ay][1]) / 2);
- //Console.out.print(middle[ax][ay] + ",");
- }
- //Console.out.println("");
- }
-
- //Console.out.println("");
-
- return $middle;
- }
-
- //@Override
- public function getRow($y, $row = null)
- {
- if ($y < 0 || $y >= $this->getHeight()) {
- throw new \InvalidArgumentException("Requested row is outside the image: " + \Y);
- }
- $width = $this->getWidth();
- if ($row == null || (is_countable($row) ? count($row) : 0) < $width) {
- $row = [];
- }
- $offset = ($y + $this->top) * $this->dataWidth + $this->left;
- $row = arraycopy($this->luminances, $offset, $row, 0, $width);
-
- return $row;
- }
-
- //@Override
- public function getMatrix()
- {
- $width = $this->getWidth();
- $height = $this->getHeight();
-
- // If the caller asks for the entire underlying image, save the copy and give them the
- // original data. The docs specifically warn that result.length must be ignored.
- if ($width == $this->dataWidth && $height == $this->dataHeight) {
- return $this->luminances;
- }
-
- $area = $width * $height;
- $matrix = [];
- $inputOffset = $this->top * $this->dataWidth + $this->left;
-
- // If the width matches the full width of the underlying data, perform a single copy.
- if ($width == $this->dataWidth) {
- $matrix = arraycopy($this->luminances, $inputOffset, $matrix, 0, $area);
-
- return $matrix;
- }
-
- // Otherwise copy one cropped row at a time.
- $rgb = $this->luminances;
- for ($y = 0; $y < $height; $y++) {
- $outputOffset = $y * $width;
- $matrix = arraycopy($rgb, $inputOffset, $matrix, $outputOffset, $width);
- $inputOffset += $this->dataWidth;
- }
-
- return $matrix;
- }
-
- //@Override
- public function isCropSupported()
- {
- return true;
- }
-
- //@Override
- public function crop($left, $top, $width, $height): \Zxing\RGBLuminanceSource
- {
- return new RGBLuminanceSource(
- $this->luminances,
- $this->dataWidth,
- $this->dataHeight,
- $this->left + $left,
- $this->top + $top,
- $width,
- $height
- );
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Reader.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Reader.php
deleted file mode 100644
index afee427..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/Reader.php
+++ /dev/null
@@ -1,10 +0,0 @@
-Encapsulates the result of decoding a barcode within an image.
- *
- * @author Sean Owen
- */
-final class Result
-{
- /**
- * @var mixed[]|mixed
- */
- private $resultMetadata = null;
- private $timestamp;
-
- public function __construct(
- private $text,
- private $rawBytes,
- private $resultPoints,
- private $format,
- $timestamp = ''
- ) {
- $this->timestamp = $timestamp ?: time();
- }
-
- /**
- * @return raw text encoded by the barcode
- */
- public function getText()
- {
- return $this->text;
- }
-
- /**
- * @return raw bytes encoded by the barcode, if applicable, otherwise {@code null}
- */
- public function getRawBytes()
- {
- return $this->rawBytes;
- }
-
- /**
- * @return points related to the barcode in the image. These are typically points
- * identifying finder patterns or the corners of the barcode. The exact meaning is
- * specific to the type of barcode that was decoded.
- */
- public function getResultPoints()
- {
- return $this->resultPoints;
- }
-
- /**
- * @return {@link BarcodeFormat} representing the format of the barcode that was decoded
- */
- public function getBarcodeFormat()
- {
- return $this->format;
- }
-
- /**
- * @return {@link Map} mapping {@link ResultMetadataType} keys to values. May be
- * {@code null}. This contains optional metadata about what was detected about the barcode,
- * like orientation.
- */
- public function getResultMetadata()
- {
- return $this->resultMetadata;
- }
-
- public function putMetadata($type, $value): void
- {
- $resultMetadata = [];
- if ($this->resultMetadata === null) {
- $this->resultMetadata = [];
- }
- $resultMetadata[$type] = $value;
- }
-
- public function putAllMetadata($metadata): void
- {
- if ($metadata !== null) {
- if ($this->resultMetadata === null) {
- $this->resultMetadata = $metadata;
- } else {
- $this->resultMetadata = array_merge($this->resultMetadata, $metadata);
- }
- }
- }
-
- public function addResultPoints($newPoints): void
- {
- $oldPoints = $this->resultPoints;
- if ($oldPoints === null) {
- $this->resultPoints = $newPoints;
- } elseif ($newPoints !== null && (is_countable($newPoints) ? count($newPoints) : 0) > 0) {
- $allPoints = fill_array(0, (is_countable($oldPoints) ? count($oldPoints) : 0) + (is_countable($newPoints) ? count($newPoints) : 0), 0);
- $allPoints = arraycopy($oldPoints, 0, $allPoints, 0, is_countable($oldPoints) ? count($oldPoints) : 0);
- $allPoints = arraycopy($newPoints, 0, $allPoints, is_countable($oldPoints) ? count($oldPoints) : 0, is_countable($newPoints) ? count($newPoints) : 0);
- $this->resultPoints = $allPoints;
- }
- }
-
- public function getTimestamp()
- {
- return $this->timestamp;
- }
-
- public function toString()
- {
- return $this->text;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/ResultPoint.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/ResultPoint.php
deleted file mode 100644
index d53229c..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/lib/ResultPoint.php
+++ /dev/null
@@ -1,157 +0,0 @@
-Encapsulates a point of interest in an image containing a barcode. Typically, this
- * would be the location of a finder pattern or the corner of the barcode, for example.
- *
- * @author Sean Owen
- */
-class ResultPoint
-{
- private float $x;
- private float $y;
-
- public function __construct($x, $y)
- {
- $this->x = (float)($x);
- $this->y = (float)($y);
- }
-
- /**
- * Orders an array of three ResultPoints in an order [A,B,C] such that AB is less than AC
- * and BC is less than AC, and the angle between BC and BA is less than 180 degrees.
- *
- * @param array $patterns of three {@code ResultPoint} to order
- */
- public static function orderBestPatterns($patterns)
- {
-
-// Find distances between pattern centers
- $zeroOneDistance = self::distance($patterns[0], $patterns[1]);
- $oneTwoDistance = self::distance($patterns[1], $patterns[2]);
- $zeroTwoDistance = self::distance($patterns[0], $patterns[2]);
-
- $pointA = '';
- $pointB = '';
- $pointC = '';
- // Assume one closest to other two is B; A and C will just be guesses at first
- if ($oneTwoDistance >= $zeroOneDistance && $oneTwoDistance >= $zeroTwoDistance) {
- $pointB = $patterns[0];
- $pointA = $patterns[1];
- $pointC = $patterns[2];
- } elseif ($zeroTwoDistance >= $oneTwoDistance && $zeroTwoDistance >= $zeroOneDistance) {
- $pointB = $patterns[1];
- $pointA = $patterns[0];
- $pointC = $patterns[2];
- } else {
- $pointB = $patterns[2];
- $pointA = $patterns[0];
- $pointC = $patterns[1];
- }
-
- // Use cross product to figure out whether A and C are correct or flipped.
- // This asks whether BC x BA has a positive z component, which is the arrangement
- // we want for A, B, C. If it's negative, then we've got it flipped around and
- // should swap A and C.
- if (self::crossProductZ($pointA, $pointB, $pointC) < 0.0) {
- $temp = $pointA;
- $pointA = $pointC;
- $pointC = $temp;
- }
-
- $patterns[0] = $pointA;
- $patterns[1] = $pointB;
- $patterns[2] = $pointC;
-
- return $patterns;
- }
-
- /**
- * @param first $pattern1 pattern
- * @param second $pattern2 pattern
- *
- * @return distance between two points
- */
- public static function distance($pattern1, $pattern2)
- {
- return MathUtils::distance($pattern1->x, $pattern1->y, $pattern2->x, $pattern2->y);
- }
-
- //@Override
-
- /**
- * Returns the z component of the cross product between vectors BC and BA.
- */
- private static function crossProductZ(
- $pointA,
- $pointB,
- $pointC
- )
- {
- $bX = $pointB->x;
- $bY = $pointB->y;
-
- return (($pointC->x - $bX) * ($pointA->y - $bY)) - (($pointC->y - $bY) * ($pointA->x - $bX));
- }
-
- //@Override
-
- final public function getX()
- {
- return (float)($this->x);
- }
-
- //@Override
-
- final public function getY()
- {
- return (float)($this->y);
- }
-
- final public function equals($other)
- {
- if ($other instanceof ResultPoint) {
- $otherPoint = $other;
-
- return $this->x == $otherPoint->x && $this->y == $otherPoint->y;
- }
-
- return false;
- }
-
- final public function hashCode()
- {
- return 31 * floatToIntBits($this->x) + floatToIntBits($this->y);
- }
-
- final public function toString()
- {
- $result = '';
- $result .= ('(');
- $result .= ($this->x);
- $result .= (',');
- $result .= ($this->y);
- $result .= (')');
-
- return $result;
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/phpunit.xml.dist b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/phpunit.xml.dist
deleted file mode 100644
index a23d614..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/phpunit.xml.dist
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
- lib
-
-
-
- tests
-
-
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/rector.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/rector.php
deleted file mode 100644
index 8568715..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/rector.php
+++ /dev/null
@@ -1,64 +0,0 @@
-paths([
- __DIR__ . '/lib'
- ]);
-
- $parameters = $rectorConfig->parameters();
- $parameters->set(
- Option::SYMFONY_CONTAINER_XML_PATH_PARAMETER,
- __DIR__ . '/var/cache/dev/App_KernelDevDebugContainer.xml'
- );
-
- $rectorConfig->sets([
- DoctrineSetList::ANNOTATIONS_TO_ATTRIBUTES,
- SymfonySetList::ANNOTATIONS_TO_ATTRIBUTES,
- NetteSetList::ANNOTATIONS_TO_ATTRIBUTES,
- SensiolabsSetList::FRAMEWORK_EXTRA_61,
- SymfonySetList::SYMFONY_60,
- LevelSetList::UP_TO_PHP_81
- ]);
-
- // register a single rule
- $rectorConfig->rule(InlineConstructorDefaultToPropertyRector::class);
- $rectorConfig->rule(AddReturnTypeDeclarationRector::class);
- $rectorConfig->rules([
- AddVoidReturnTypeWhereNoReturnRector::class,
- ArrayShapeFromConstantArrayReturnRector::class,
- ParamTypeByMethodCallTypeRector::class,
- ParamTypeByParentCallTypeRector::class,
- PropertyTypeDeclarationRector::class,
- ReturnTypeFromReturnNewRector::class,
- // ReturnTypeFromStrictBoolReturnExprRector::class,
- // ReturnTypeFromStrictNativeFuncCallRector::class,
- // ReturnTypeFromStrictNewArrayRector::class,
- TypedPropertyFromAssignsRector::class
- ]);
-
- // define sets of rules
- // $rectorConfig->sets([
- // LevelSetList::UP_TO_PHP_80
- // ]);
-};
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/tests/QrReaderTest.php b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/tests/QrReaderTest.php
deleted file mode 100644
index 831ecf1..0000000
--- a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/tests/QrReaderTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-assertSame("Hello world!", $qrcode->text());
- }
-
- public function testNoText()
- {
- $image = __DIR__ . "/qrcodes/empty.png";
- $qrcode = new QrReader($image);
- $this->assertSame(false, $qrcode->text());
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/tests/qrcodes/empty.png b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/tests/qrcodes/empty.png
deleted file mode 100644
index 12cf260..0000000
Binary files a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/tests/qrcodes/empty.png and /dev/null differ
diff --git a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/tests/qrcodes/hello_world.png b/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/tests/qrcodes/hello_world.png
deleted file mode 100644
index 3578ea0..0000000
Binary files a/htdocs/core/modules/facture/doc/vendor/khanamiryan/qrcode-detector-decoder/tests/qrcodes/hello_world.png and /dev/null differ
diff --git a/htdocs/core/modules/facture/doc/vendor/kmukku/php-iso11649/.gitignore b/htdocs/core/modules/facture/doc/vendor/kmukku/php-iso11649/.gitignore
deleted file mode 100755
index aaaa175..0000000
--- a/htdocs/core/modules/facture/doc/vendor/kmukku/php-iso11649/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-vendor/
-.DS_Store
-composer.phar
diff --git a/htdocs/core/modules/facture/doc/vendor/kmukku/php-iso11649/README.md b/htdocs/core/modules/facture/doc/vendor/kmukku/php-iso11649/README.md
deleted file mode 100755
index 85179c8..0000000
--- a/htdocs/core/modules/facture/doc/vendor/kmukku/php-iso11649/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-php-iso11649
-=============
-
-ISO 11649:2009 RF creditor reference library for PHP
-
-Inspired by nruotsal/node-iso11649.
-
-
-## Installation
-
- php composer require kmukku/php-iso11649:dev-master
-
-### Generating RF creditor reference
-
-RF creditor reference can be generated from existing reference.
-
-Existing reference characteristics:
- * Contain only numbers 0-9 and/or characters A-Z (example AB2G5 => RF68 AB2G 5).
- * Max length 21 characters.
- * Not case sensitive (example aB2g5 => RF68 AB2G 5).
- * Can be string with spaces (example '12345 12345' => RF45 1234 5123 45).
-
-```
- use kmukku\phpIso11649\phpIso11649;
-
- $referenceGenerator = new phpIso11649();
- echo $referenceGenerator->generateRfReference('1234512345',true);
- // => RF45 1234 5123 45
-
- echo $referenceGenerator->generateRfReference('1234512345',false);
- // => RF451234512345
-```
-
-### Validating RF creditor reference
-
-Valid RF creditor reference characteristics:
- * Must start with characters RF.
- * Must contain two checksum numbers in indexes 3 and 4.
- * Max length 25 characters.
- * Reference part must follow rules described in 'Existing reference characteristics' section.
-
-```
- use kmukku\phpIso11649\phpIso11649;
-
- $referenceGenerator = new phpIso11649();
- $referenceGenerator->validateRfReference('RF45 1234 5123 45');
- // => true
-```
-
-## Release History
-
-* 1.0.0
- - Initial release
\ No newline at end of file
diff --git a/htdocs/core/modules/facture/doc/vendor/kmukku/php-iso11649/composer.json b/htdocs/core/modules/facture/doc/vendor/kmukku/php-iso11649/composer.json
deleted file mode 100755
index cbeed3e..0000000
--- a/htdocs/core/modules/facture/doc/vendor/kmukku/php-iso11649/composer.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "name": "kmukku/php-iso11649",
- "version": "1.6",
- "type": "library",
- "license": "MIT",
- "description": "ISO 11649 creditor reference library for php",
- "keywords": [
- "ISO 11649",
- "RF creditor reference",
- "finance",
- "banking"
- ],
- "authors": [
- {
- "name": "Keijo Mukku",
- "email": "keijo.mukku@gmail.com"
- }
- ],
- "homepage": "https://github.com/kmukku/php-iso11649",
- "autoload": {
- "psr-4": {
- "kmukku\\phpIso11649\\": ["src/"]
- }
- },
- "minimum-stability": "stable",
- "require": {
- "php": ">=5.4.0"
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/kmukku/php-iso11649/src/phpIso11649.php b/htdocs/core/modules/facture/doc/vendor/kmukku/php-iso11649/src/phpIso11649.php
deleted file mode 100644
index ea4adbe..0000000
--- a/htdocs/core/modules/facture/doc/vendor/kmukku/php-iso11649/src/phpIso11649.php
+++ /dev/null
@@ -1,76 +0,0 @@
- 10,
- "B" => 11,
- "C" => 12,
- "D" => 13,
- "E" => 14,
- "F" => 15,
- "G" => 16,
- "H" => 17,
- "I" => 18,
- "J" => 19,
- "K" => 20,
- "L" => 21,
- "M" => 22,
- "N" => 23,
- "O" => 24,
- "P" => 25,
- "Q" => 26,
- "R" => 27,
- "S" => 28,
- "T" => 29,
- "U" => 30,
- "V" => 31,
- "W" => 32,
- "X" => 33,
- "Y" => 34,
- "Z" => 35
- );
-
- private function normalizeRef($ref) {
- return strtoupper(preg_replace('/\s+/','', $ref));
- }
-
- private function replaceChars($string) {
- return str_replace(array_keys($this->charTable), array_values($this->charTable), strtoupper($string));
- }
-
- public function calculateRfChecksum($ref) {
- $preResult = $ref."RF00"; // add 'RF00' to the end of ref
- $preResult = $this->replaceChars($preResult); // Replace to numeric
- $checksum = (98 - bcmod($preResult, '97')); // Calculate checksum
- $checksum = str_pad($checksum, 2, "0", STR_PAD_LEFT); // pad to 2 digits if under 10
- return $checksum;
- }
-
- public function generateRfReference($input, $chunksplit = true) {
- $normalizedRef = $this->normalizeRef($input); // Remove whitespace, uppercase
- $checksum = $this->calculateRFChecksum($normalizedRef); // Generate checksum
- $rfReference = "RF".$checksum.$normalizedRef; // Join to required format
- if($this->validateRfReference($rfReference)) { // Check if validates
- return ($chunksplit) ? chunk_split($rfReference,4,' ') : $rfReference;
- } else {
- return false;
- }
- }
-
- public function validateRfReference($ref) {
- $pre = $this->normalizeRef($ref); // Remove whitespace, uppercase
-
- if (!preg_match('/^[\w ]*$/', $pre)) { // Only A-Z and numbers are allowed
- return false;
- }
-
- $ref = substr($pre,4).substr($pre,0,4); // Move first 4 chars to the end of $ref
- $num = $this->replaceChars($ref); // Replace to numeric
- // Valid if up to 25 characters long and remainder is 1
- return ((strlen($pre) < 26) && bcmod($num, '97') == 1);
- }
-
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/LICENSE b/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/LICENSE
deleted file mode 100644
index 2a8cf22..0000000
--- a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/LICENSE
+++ /dev/null
@@ -1,18 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 My C-Labs
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
-associated documentation files (the "Software"), to deal in the Software without restriction,
-including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial
-portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
-NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/README.md b/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/README.md
deleted file mode 100644
index 681d55e..0000000
--- a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/README.md
+++ /dev/null
@@ -1,194 +0,0 @@
-# PHP Enum implementation inspired from SplEnum
-
-[![GitHub Actions][GA Image]][GA Link]
-[](https://packagist.org/packages/myclabs/php-enum)
-[](https://packagist.org/packages/myclabs/php-enum)
-[![Psalm Shepherd][Shepherd Image]][Shepherd Link]
-
-Maintenance for this project is [supported via Tidelift](https://tidelift.com/subscription/pkg/packagist-myclabs-php-enum?utm_source=packagist-myclabs-php-enum&utm_medium=referral&utm_campaign=readme).
-
-## Why?
-
-First, and mainly, `SplEnum` is not integrated to PHP, you have to install the extension separately.
-
-Using an enum instead of class constants provides the following advantages:
-
-- You can use an enum as a parameter type: `function setAction(Action $action) {`
-- You can use an enum as a return type: `function getAction() : Action {`
-- You can enrich the enum with methods (e.g. `format`, `parse`, …)
-- You can extend the enum to add new values (make your enum `final` to prevent it)
-- You can get a list of all the possible values (see below)
-
-This Enum class is not intended to replace class constants, but only to be used when it makes sense.
-
-## Installation
-
-```
-composer require myclabs/php-enum
-```
-
-## Declaration
-
-```php
-use MyCLabs\Enum\Enum;
-
-/**
- * Action enum
- */
-final class Action extends Enum
-{
- private const VIEW = 'view';
- private const EDIT = 'edit';
-}
-```
-
-## Usage
-
-```php
-$action = Action::VIEW();
-
-// or with a dynamic key:
-$action = Action::$key();
-// or with a dynamic value:
-$action = Action::from($value);
-// or
-$action = new Action($value);
-```
-
-As you can see, static methods are automatically implemented to provide quick access to an enum value.
-
-One advantage over using class constants is to be able to use an enum as a parameter type:
-
-```php
-function setAction(Action $action) {
- // ...
-}
-```
-
-## Documentation
-
-- `__construct()` The constructor checks that the value exist in the enum
-- `__toString()` You can `echo $myValue`, it will display the enum value (value of the constant)
-- `getValue()` Returns the current value of the enum
-- `getKey()` Returns the key of the current value on Enum
-- `equals()` Tests whether enum instances are equal (returns `true` if enum values are equal, `false` otherwise)
-
-Static methods:
-
-- `from()` Creates an Enum instance, checking that the value exist in the enum
-- `toArray()` method Returns all possible values as an array (constant name in key, constant value in value)
-- `keys()` Returns the names (keys) of all constants in the Enum class
-- `values()` Returns instances of the Enum class of all Enum constants (constant name in key, Enum instance in value)
-- `isValid()` Check if tested value is valid on enum set
-- `isValidKey()` Check if tested key is valid on enum set
-- `assertValidValue()` Assert the value is valid on enum set, throwing exception otherwise
-- `search()` Return key for searched value
-
-### Static methods
-
-```php
-final class Action extends Enum
-{
- private const VIEW = 'view';
- private const EDIT = 'edit';
-}
-
-// Static method:
-$action = Action::VIEW();
-$action = Action::EDIT();
-```
-
-Static method helpers are implemented using [`__callStatic()`](http://www.php.net/manual/en/language.oop5.overloading.php#object.callstatic).
-
-If you care about IDE autocompletion, you can either implement the static methods yourself:
-
-```php
-final class Action extends Enum
-{
- private const VIEW = 'view';
-
- /**
- * @return Action
- */
- public static function VIEW() {
- return new Action(self::VIEW);
- }
-}
-```
-
-or you can use phpdoc (this is supported in PhpStorm for example):
-
-```php
-/**
- * @method static Action VIEW()
- * @method static Action EDIT()
- */
-final class Action extends Enum
-{
- private const VIEW = 'view';
- private const EDIT = 'edit';
-}
-```
-
-## Native enums and migration
-Native enum arrived to PHP in version 8.1: https://www.php.net/enumerations
-If your project is running PHP 8.1+ or your library has it as a minimum requirement you should use it instead of this library.
-
-When migrating from `myclabs/php-enum`, the effort should be small if the usage was in the recommended way:
-- private constants
-- final classes
-- no method overridden
-
-Changes for migration:
-- Class definition should be changed from
-```php
-/**
- * @method static Action VIEW()
- * @method static Action EDIT()
- */
-final class Action extends Enum
-{
- private const VIEW = 'view';
- private const EDIT = 'edit';
-}
-```
- to
-```php
-enum Action: string
-{
- case VIEW = 'view';
- case EDIT = 'edit';
-}
-```
-All places where the class was used as a type will continue to work.
-
-Usages and the change needed:
-
-| Operation | myclabs/php-enum | native enum |
-|----------------------------------------------------------------|----------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Obtain an instance will change from | `$enumCase = Action::VIEW()` | `$enumCase = Action::VIEW` |
-| Create an enum from a backed value | `$enumCase = new Action('view')` | `$enumCase = Action::from('view')` |
-| Get the backed value of the enum instance | `$enumCase->getValue()` | `$enumCase->value` |
-| Compare two enum instances | `$enumCase1 == $enumCase2` or `$enumCase1->equals($enumCase2)` | `$enumCase1 === $enumCase2` |
-| Get the key/name of the enum instance | `$enumCase->getKey()` | `$enumCase->name` |
-| Get a list of all the possible instances of the enum | `Action::values()` | `Action::cases()` |
-| Get a map of possible instances of the enum mapped by name | `Action::values()` | `array_combine(array_map(fn($case) => $case->name, Action::cases()), Action::cases())` or `(new ReflectionEnum(Action::class))->getConstants()` |
-| Get a list of all possible names of the enum | `Action::keys()` | `array_map(fn($case) => $case->name, Action::cases())` |
-| Get a list of all possible backed values of the enum | `Action::toArray()` | `array_map(fn($case) => $case->value, Action::cases())` |
-| Get a map of possible backed values of the enum mapped by name | `Action::toArray()` | `array_combine(array_map(fn($case) => $case->name, Action::cases()), array_map(fn($case) => $case->value, Action::cases()))` or `array_map(fn($case) => $case->value, (new ReflectionEnum(Action::class))->getConstants()))` |
-
-## Related projects
-
-- [PHP 8.1+ native enum](https://www.php.net/enumerations)
-- [Doctrine enum mapping](https://github.com/acelaya/doctrine-enum-type)
-- [Symfony ParamConverter integration](https://github.com/Ex3v/MyCLabsEnumParamConverter)
-- [PHPStan integration](https://github.com/timeweb/phpstan-enum)
-
-
-[GA Image]: https://github.com/myclabs/php-enum/workflows/CI/badge.svg
-
-[GA Link]: https://github.com/myclabs/php-enum/actions?query=workflow%3A%22CI%22+branch%3Amaster
-
-[Shepherd Image]: https://shepherd.dev/github/myclabs/php-enum/coverage.svg
-
-[Shepherd Link]: https://shepherd.dev/github/myclabs/php-enum
diff --git a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/SECURITY.md b/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/SECURITY.md
deleted file mode 100644
index 84fd4e3..0000000
--- a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/SECURITY.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Security Policy
-
-## Supported Versions
-
-Only the latest stable release is supported.
-
-## Reporting a Vulnerability
-
-To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security).
-
-Tidelift will coordinate the fix and disclosure.
diff --git a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/composer.json b/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/composer.json
deleted file mode 100644
index 978cb19..0000000
--- a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/composer.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "myclabs/php-enum",
- "type": "library",
- "description": "PHP Enum implementation",
- "keywords": ["enum"],
- "homepage": "http://github.com/myclabs/php-enum",
- "license": "MIT",
- "authors": [
- {
- "name": "PHP Enum contributors",
- "homepage": "https://github.com/myclabs/php-enum/graphs/contributors"
- }
- ],
- "autoload": {
- "psr-4": {
- "MyCLabs\\Enum\\": "src/"
- },
- "classmap": [
- "stubs/Stringable.php"
- ]
- },
- "autoload-dev": {
- "psr-4": {
- "MyCLabs\\Tests\\Enum\\": "tests/"
- }
- },
- "require": {
- "php": "^7.3 || ^8.0",
- "ext-json": "*"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.5",
- "squizlabs/php_codesniffer": "1.*",
- "vimeo/psalm": "^4.6.2"
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/src/Enum.php b/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/src/Enum.php
deleted file mode 100644
index 4c94cf6..0000000
--- a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/src/Enum.php
+++ /dev/null
@@ -1,318 +0,0 @@
-
- * @author Daniel Costa
- * @author Mirosław Filip
- *
- * @psalm-template T
- * @psalm-immutable
- * @psalm-consistent-constructor
- */
-abstract class Enum implements \JsonSerializable, \Stringable
-{
- /**
- * Enum value
- *
- * @var mixed
- * @psalm-var T
- */
- protected $value;
-
- /**
- * Enum key, the constant name
- *
- * @var string
- */
- private $key;
-
- /**
- * Store existing constants in a static cache per object.
- *
- *
- * @var array
- * @psalm-var array>
- */
- protected static $cache = [];
-
- /**
- * Cache of instances of the Enum class
- *
- * @var array
- * @psalm-var array>
- */
- protected static $instances = [];
-
- /**
- * Creates a new value of some type
- *
- * @psalm-pure
- * @param mixed $value
- *
- * @psalm-param T $value
- * @throws \UnexpectedValueException if incompatible type is given.
- */
- public function __construct($value)
- {
- if ($value instanceof static) {
- /** @psalm-var T */
- $value = $value->getValue();
- }
-
- /** @psalm-suppress ImplicitToStringCast assertValidValueReturningKey returns always a string but psalm has currently an issue here */
- $this->key = static::assertValidValueReturningKey($value);
-
- /** @psalm-var T */
- $this->value = $value;
- }
-
- /**
- * This method exists only for the compatibility reason when deserializing a previously serialized version
- * that didn't had the key property
- */
- public function __wakeup()
- {
- /** @psalm-suppress DocblockTypeContradiction key can be null when deserializing an enum without the key */
- if ($this->key === null) {
- /**
- * @psalm-suppress InaccessibleProperty key is not readonly as marked by psalm
- * @psalm-suppress PossiblyFalsePropertyAssignmentValue deserializing a case that was removed
- */
- $this->key = static::search($this->value);
- }
- }
-
- /**
- * @param mixed $value
- * @return static
- */
- public static function from($value): self
- {
- $key = static::assertValidValueReturningKey($value);
-
- return self::__callStatic($key, []);
- }
-
- /**
- * @psalm-pure
- * @return mixed
- * @psalm-return T
- */
- public function getValue()
- {
- return $this->value;
- }
-
- /**
- * Returns the enum key (i.e. the constant name).
- *
- * @psalm-pure
- * @return string
- */
- public function getKey()
- {
- return $this->key;
- }
-
- /**
- * @psalm-pure
- * @psalm-suppress InvalidCast
- * @return string
- */
- public function __toString()
- {
- return (string)$this->value;
- }
-
- /**
- * Determines if Enum should be considered equal with the variable passed as a parameter.
- * Returns false if an argument is an object of different class or not an object.
- *
- * This method is final, for more information read https://github.com/myclabs/php-enum/issues/4
- *
- * @psalm-pure
- * @psalm-param mixed $variable
- * @return bool
- */
- final public function equals($variable = null): bool
- {
- return $variable instanceof self
- && $this->getValue() === $variable->getValue()
- && static::class === \get_class($variable);
- }
-
- /**
- * Returns the names (keys) of all constants in the Enum class
- *
- * @psalm-pure
- * @psalm-return list
- * @return array
- */
- public static function keys()
- {
- return \array_keys(static::toArray());
- }
-
- /**
- * Returns instances of the Enum class of all Enum constants
- *
- * @psalm-pure
- * @psalm-return array
- * @return static[] Constant name in key, Enum instance in value
- */
- public static function values()
- {
- $values = array();
-
- /** @psalm-var T $value */
- foreach (static::toArray() as $key => $value) {
- $values[$key] = new static($value);
- }
-
- return $values;
- }
-
- /**
- * Returns all possible values as an array
- *
- * @psalm-pure
- * @psalm-suppress ImpureStaticProperty
- *
- * @psalm-return array
- * @return array Constant name in key, constant value in value
- */
- public static function toArray()
- {
- $class = static::class;
-
- if (!isset(static::$cache[$class])) {
- /** @psalm-suppress ImpureMethodCall this reflection API usage has no side-effects here */
- $reflection = new \ReflectionClass($class);
- /** @psalm-suppress ImpureMethodCall this reflection API usage has no side-effects here */
- static::$cache[$class] = $reflection->getConstants();
- }
-
- return static::$cache[$class];
- }
-
- /**
- * Check if is valid enum value
- *
- * @param $value
- * @psalm-param mixed $value
- * @psalm-pure
- * @psalm-assert-if-true T $value
- * @return bool
- */
- public static function isValid($value)
- {
- return \in_array($value, static::toArray(), true);
- }
-
- /**
- * Asserts valid enum value
- *
- * @psalm-pure
- * @psalm-assert T $value
- * @param mixed $value
- */
- public static function assertValidValue($value): void
- {
- self::assertValidValueReturningKey($value);
- }
-
- /**
- * Asserts valid enum value
- *
- * @psalm-pure
- * @psalm-assert T $value
- * @param mixed $value
- * @return string
- */
- private static function assertValidValueReturningKey($value): string
- {
- if (false === ($key = static::search($value))) {
- throw new \UnexpectedValueException("Value '$value' is not part of the enum " . static::class);
- }
-
- return $key;
- }
-
- /**
- * Check if is valid enum key
- *
- * @param $key
- * @psalm-param string $key
- * @psalm-pure
- * @return bool
- */
- public static function isValidKey($key)
- {
- $array = static::toArray();
-
- return isset($array[$key]) || \array_key_exists($key, $array);
- }
-
- /**
- * Return key for value
- *
- * @param mixed $value
- *
- * @psalm-param mixed $value
- * @psalm-pure
- * @return string|false
- */
- public static function search($value)
- {
- return \array_search($value, static::toArray(), true);
- }
-
- /**
- * Returns a value when called statically like so: MyEnum::SOME_VALUE() given SOME_VALUE is a class constant
- *
- * @param string $name
- * @param array $arguments
- *
- * @return static
- * @throws \BadMethodCallException
- *
- * @psalm-pure
- */
- public static function __callStatic($name, $arguments)
- {
- $class = static::class;
- if (!isset(self::$instances[$class][$name])) {
- $array = static::toArray();
- if (!isset($array[$name]) && !\array_key_exists($name, $array)) {
- $message = "No static method or enum constant '$name' in class " . static::class;
- throw new \BadMethodCallException($message);
- }
- return self::$instances[$class][$name] = new static($array[$name]);
- }
- return clone self::$instances[$class][$name];
- }
-
- /**
- * Specify data which should be serialized to JSON. This method returns data that can be serialized by json_encode()
- * natively.
- *
- * @return mixed
- * @link http://php.net/manual/en/jsonserializable.jsonserialize.php
- * @psalm-pure
- */
- #[\ReturnTypeWillChange]
- public function jsonSerialize()
- {
- return $this->getValue();
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/src/PHPUnit/Comparator.php b/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/src/PHPUnit/Comparator.php
deleted file mode 100644
index 302bf80..0000000
--- a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/src/PHPUnit/Comparator.php
+++ /dev/null
@@ -1,54 +0,0 @@
-register(new \MyCLabs\Enum\PHPUnit\Comparator());
- */
-final class Comparator extends \SebastianBergmann\Comparator\Comparator
-{
- public function accepts($expected, $actual)
- {
- return $expected instanceof Enum && (
- $actual instanceof Enum || $actual === null
- );
- }
-
- /**
- * @param Enum $expected
- * @param Enum|null $actual
- *
- * @return void
- */
- public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false)
- {
- if ($expected->equals($actual)) {
- return;
- }
-
- throw new ComparisonFailure(
- $expected,
- $actual,
- $this->formatEnum($expected),
- $this->formatEnum($actual),
- false,
- 'Failed asserting that two Enums are equal.'
- );
- }
-
- private function formatEnum(Enum $enum = null)
- {
- if ($enum === null) {
- return "null";
- }
-
- return get_class($enum)."::{$enum->getKey()}()";
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/stubs/Stringable.php b/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/stubs/Stringable.php
deleted file mode 100644
index 4811af7..0000000
--- a/htdocs/core/modules/facture/doc/vendor/myclabs/php-enum/stubs/Stringable.php
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
diff --git a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_40x15mm.png b/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_40x15mm.png
deleted file mode 100644
index 2e800c2..0000000
Binary files a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_40x15mm.png and /dev/null differ
diff --git a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_40x15mm.svg b/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_40x15mm.svg
deleted file mode 100755
index 0b29d1f..0000000
--- a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_40x15mm.svg
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
diff --git a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_52x20mm.png b/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_52x20mm.png
deleted file mode 100644
index 0c6ba76..0000000
Binary files a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_52x20mm.png and /dev/null differ
diff --git a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_52x20mm.svg b/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_52x20mm.svg
deleted file mode 100644
index a365391..0000000
--- a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_52x20mm.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
diff --git a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_65x25mm.png b/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_65x25mm.png
deleted file mode 100644
index a74329c..0000000
Binary files a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_65x25mm.png and /dev/null differ
diff --git a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_65x25mm.svg b/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_65x25mm.svg
deleted file mode 100755
index 6a27ae6..0000000
--- a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/marks_65x25mm.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
diff --git a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/swiss-cross.optimized.png b/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/swiss-cross.optimized.png
deleted file mode 100644
index 5edcf40..0000000
Binary files a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/assets/swiss-cross.optimized.png and /dev/null differ
diff --git a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/composer.json b/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/composer.json
deleted file mode 100644
index 3f27fa0..0000000
--- a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/composer.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "sprain/swiss-qr-bill",
- "description": "A PHP library to create Swiss QR bills",
- "type": "library",
- "license": "MIT",
- "require": {
- "php": "^7.4|^8.0",
- "symfony/validator": "^3.4.47|^4.4|^5.0",
- "symfony/intl": "^3.4.47|^4.4|^5.0",
- "khanamiryan/qrcode-detector-decoder": "^1.0.3",
- "kmukku/php-iso11649": "^1.5",
- "endroid/qr-code": "^3.9.7",
- "symfony/polyfill-intl-icu": "^1.23"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.0|^9.0",
- "dg/bypass-finals": "^1.3",
- "dms/phpunit-arraysubset-asserts": "^0.1|^0.2",
- "fpdf/fpdf": "^1.82",
- "friendsofphp/php-cs-fixer": "^2.19",
- "phpstan/phpstan": "^0.12.53",
- "symfony/css-selector": "^4.2",
- "symfony/var-dumper": "^5.1",
- "tecnickcom/tcpdf": "^6.3.2"
- },
- "suggest": {
- "tecnickcom/tcpdf": "Needed to create pdfs with TcPdfOutput",
- "fpdf/fpdf": "Needed to create pdfs with FpdfOutput"
- },
- "autoload": {
- "psr-4": {
- "Sprain\\SwissQrBill\\": "src",
- "Sprain\\Tests\\SwissQrBill\\": "tests"
- }
- }
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/composer.lock b/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/composer.lock
deleted file mode 100644
index b77df70..0000000
--- a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/composer.lock
+++ /dev/null
@@ -1,5378 +0,0 @@
-{
- "_readme": [
- "This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
- "This file is @generated automatically"
- ],
- "content-hash": "005d8092e384b9b77bc2424b652e5366",
- "packages": [
- {
- "name": "bacon/bacon-qr-code",
- "version": "2.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/Bacon/BaconQrCode.git",
- "reference": "3e9d791b67d0a2912922b7b7c7312f4b37af41e4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/3e9d791b67d0a2912922b7b7c7312f4b37af41e4",
- "reference": "3e9d791b67d0a2912922b7b7c7312f4b37af41e4",
- "shasum": ""
- },
- "require": {
- "dasprid/enum": "^1.0.3",
- "ext-iconv": "*",
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "phly/keep-a-changelog": "^1.4",
- "phpunit/phpunit": "^7 | ^8 | ^9",
- "squizlabs/php_codesniffer": "^3.4"
- },
- "suggest": {
- "ext-imagick": "to generate QR code images"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "BaconQrCode\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-2-Clause"
- ],
- "authors": [
- {
- "name": "Ben Scholzen 'DASPRiD'",
- "email": "mail@dasprids.de",
- "homepage": "https://dasprids.de/",
- "role": "Developer"
- }
- ],
- "description": "BaconQrCode is a QR code generator for PHP.",
- "homepage": "https://github.com/Bacon/BaconQrCode",
- "support": {
- "issues": "https://github.com/Bacon/BaconQrCode/issues",
- "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.3"
- },
- "time": "2020-10-30T02:02:47+00:00"
- },
- {
- "name": "dasprid/enum",
- "version": "1.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/DASPRiD/Enum.git",
- "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/5abf82f213618696dda8e3bf6f64dd042d8542b2",
- "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2",
- "shasum": ""
- },
- "require-dev": {
- "phpunit/phpunit": "^7 | ^8 | ^9",
- "squizlabs/php_codesniffer": "^3.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "DASPRiD\\Enum\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-2-Clause"
- ],
- "authors": [
- {
- "name": "Ben Scholzen 'DASPRiD'",
- "email": "mail@dasprids.de",
- "homepage": "https://dasprids.de/",
- "role": "Developer"
- }
- ],
- "description": "PHP 7.1 enum implementation",
- "keywords": [
- "enum",
- "map"
- ],
- "support": {
- "issues": "https://github.com/DASPRiD/Enum/issues",
- "source": "https://github.com/DASPRiD/Enum/tree/1.0.3"
- },
- "time": "2020-10-02T16:03:48+00:00"
- },
- {
- "name": "endroid/qr-code",
- "version": "3.9.7",
- "source": {
- "type": "git",
- "url": "https://github.com/endroid/qr-code.git",
- "reference": "94563d7b3105288e6ac53a67ae720e3669fac1f6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/endroid/qr-code/zipball/94563d7b3105288e6ac53a67ae720e3669fac1f6",
- "reference": "94563d7b3105288e6ac53a67ae720e3669fac1f6",
- "shasum": ""
- },
- "require": {
- "bacon/bacon-qr-code": "^2.0",
- "khanamiryan/qrcode-detector-decoder": "^1.0.5",
- "myclabs/php-enum": "^1.5",
- "php": "^7.3||^8.0",
- "symfony/options-resolver": "^3.4||^4.4||^5.0",
- "symfony/property-access": "^3.4||^4.4||^5.0"
- },
- "require-dev": {
- "endroid/quality": "^1.5.2",
- "setasign/fpdf": "^1.8"
- },
- "suggest": {
- "ext-gd": "Required for generating PNG images",
- "roave/security-advisories": "Avoids installation of package versions with vulnerabilities",
- "setasign/fpdf": "Required to use the FPDF writer.",
- "symfony/security-checker": "Checks your composer.lock for vulnerabilities"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Endroid\\QrCode\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jeroen van den Enden",
- "email": "info@endroid.nl"
- }
- ],
- "description": "Endroid QR Code",
- "homepage": "https://github.com/endroid/qr-code",
- "keywords": [
- "bundle",
- "code",
- "endroid",
- "php",
- "qr",
- "qrcode"
- ],
- "support": {
- "issues": "https://github.com/endroid/qr-code/issues",
- "source": "https://github.com/endroid/qr-code/tree/3.9.7"
- },
- "funding": [
- {
- "url": "https://github.com/endroid",
- "type": "github"
- }
- ],
- "time": "2021-04-20T19:10:54+00:00"
- },
- {
- "name": "khanamiryan/qrcode-detector-decoder",
- "version": "1.0.5.1",
- "source": {
- "type": "git",
- "url": "https://github.com/khanamiryan/php-qrcode-detector-decoder.git",
- "reference": "b96163d4f074970dfe67d4185e75e1f4541b30ca"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/khanamiryan/php-qrcode-detector-decoder/zipball/b96163d4f074970dfe67d4185e75e1f4541b30ca",
- "reference": "b96163d4f074970dfe67d4185e75e1f4541b30ca",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6"
- },
- "require-dev": {
- "phpunit/phpunit": "^5.7 | ^7.5 | ^8.0 | ^9.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Zxing\\": "lib/"
- },
- "files": [
- "lib/Common/customFunctions.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT",
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "Ashot Khanamiryan",
- "email": "a.khanamiryan@gmail.com",
- "homepage": "https://github.com/khanamiryan",
- "role": "Developer"
- }
- ],
- "description": "QR code decoder / reader",
- "homepage": "https://github.com/khanamiryan/php-qrcode-detector-decoder/",
- "keywords": [
- "barcode",
- "qr",
- "zxing"
- ],
- "support": {
- "issues": "https://github.com/khanamiryan/php-qrcode-detector-decoder/issues",
- "source": "https://github.com/khanamiryan/php-qrcode-detector-decoder/tree/1.0.5.1"
- },
- "time": "2021-04-21T08:02:08+00:00"
- },
- {
- "name": "kmukku/php-iso11649",
- "version": "1.6",
- "source": {
- "type": "git",
- "url": "https://github.com/kmukku/php-iso11649.git",
- "reference": "723863147a8ff1c292c337e9459402f4a35c3b1e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/kmukku/php-iso11649/zipball/723863147a8ff1c292c337e9459402f4a35c3b1e",
- "reference": "723863147a8ff1c292c337e9459402f4a35c3b1e",
- "shasum": ""
- },
- "require": {
- "php": ">=5.4.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "kmukku\\phpIso11649\\": [
- "src/"
- ]
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Keijo Mukku",
- "email": "keijo.mukku@gmail.com"
- }
- ],
- "description": "ISO 11649 creditor reference library for php",
- "homepage": "https://github.com/kmukku/php-iso11649",
- "keywords": [
- "Banking",
- "ISO 11649",
- "RF creditor reference",
- "finance"
- ],
- "support": {
- "issues": "https://github.com/kmukku/php-iso11649/issues",
- "source": "https://github.com/kmukku/php-iso11649/tree/master"
- },
- "time": "2020-04-21T13:01:17+00:00"
- },
- {
- "name": "myclabs/php-enum",
- "version": "1.8.0",
- "source": {
- "type": "git",
- "url": "https://github.com/myclabs/php-enum.git",
- "reference": "46cf3d8498b095bd33727b13fd5707263af99421"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/myclabs/php-enum/zipball/46cf3d8498b095bd33727b13fd5707263af99421",
- "reference": "46cf3d8498b095bd33727b13fd5707263af99421",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "php": "^7.3 || ^8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.5",
- "squizlabs/php_codesniffer": "1.*",
- "vimeo/psalm": "^4.5.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "MyCLabs\\Enum\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP Enum contributors",
- "homepage": "https://github.com/myclabs/php-enum/graphs/contributors"
- }
- ],
- "description": "PHP Enum implementation",
- "homepage": "http://github.com/myclabs/php-enum",
- "keywords": [
- "enum"
- ],
- "support": {
- "issues": "https://github.com/myclabs/php-enum/issues",
- "source": "https://github.com/myclabs/php-enum/tree/1.8.0"
- },
- "funding": [
- {
- "url": "https://github.com/mnapoli",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/myclabs/php-enum",
- "type": "tidelift"
- }
- ],
- "time": "2021-02-15T16:11:48+00:00"
- },
- {
- "name": "symfony/deprecation-contracts",
- "version": "v2.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627",
- "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.4-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "files": [
- "function.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "A generic function and convention to trigger deprecation notices",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-03-23T23:28:01+00:00"
- },
- {
- "name": "symfony/intl",
- "version": "v5.3.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/intl.git",
- "reference": "1af1675221f35dec23b13193873139338c784290"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/intl/zipball/1af1675221f35dec23b13193873139338c784290",
- "reference": "1af1675221f35dec23b13193873139338c784290",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/polyfill-php80": "^1.16"
- },
- "require-dev": {
- "symfony/filesystem": "^4.4|^5.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Intl\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ],
- "files": [
- "Resources/functions.php"
- ],
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- },
- {
- "name": "Eriksen Costa",
- "email": "eriksen.costa@infranology.com.br"
- },
- {
- "name": "Igor Wiedler",
- "email": "igor@wiedler.ch"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides a PHP replacement layer for the C intl extension that includes additional data from the ICU library",
- "homepage": "https://symfony.com",
- "keywords": [
- "i18n",
- "icu",
- "internationalization",
- "intl",
- "l10n",
- "localization"
- ],
- "support": {
- "source": "https://github.com/symfony/intl/tree/v5.3.7"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-08-09T09:00:11+00:00"
- },
- {
- "name": "symfony/options-resolver",
- "version": "v5.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/options-resolver.git",
- "reference": "5d0f633f9bbfcf7ec642a2b5037268e61b0a62ce"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/options-resolver/zipball/5d0f633f9bbfcf7ec642a2b5037268e61b0a62ce",
- "reference": "5d0f633f9bbfcf7ec642a2b5037268e61b0a62ce",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/polyfill-php73": "~1.0",
- "symfony/polyfill-php80": "^1.15"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\OptionsResolver\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides an improved replacement for the array_replace PHP function",
- "homepage": "https://symfony.com",
- "keywords": [
- "config",
- "configuration",
- "options"
- ],
- "support": {
- "source": "https://github.com/symfony/options-resolver/tree/v5.2.4"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-27T12:56:27+00:00"
- },
- {
- "name": "symfony/polyfill-ctype",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "c6c942b1ac76c82448322025e084cadc56048b4e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e",
- "reference": "c6c942b1ac76c82448322025e084cadc56048b4e",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-ctype": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Ctype\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Gert de Pagter",
- "email": "BackEndTea@gmail.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for ctype functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "ctype",
- "polyfill",
- "portable"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-07T16:49:33+00:00"
- },
- {
- "name": "symfony/polyfill-intl-grapheme",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170",
- "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-intl": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's grapheme_* functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "grapheme",
- "intl",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-22T09:19:47+00:00"
- },
- {
- "name": "symfony/polyfill-intl-icu",
- "version": "v1.23.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-icu.git",
- "reference": "4a80a521d6176870b6445cfb469c130f9cae1dda"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/4a80a521d6176870b6445cfb469c130f9cae1dda",
- "reference": "4a80a521d6176870b6445cfb469c130f9cae1dda",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-intl": "For best performance and support of other locales than \"en\""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Icu\\": ""
- },
- "classmap": [
- "Resources/stubs"
- ],
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's ICU-related data and classes",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "icu",
- "intl",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.23.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-05-24T10:04:56+00:00"
- },
- {
- "name": "symfony/polyfill-intl-normalizer",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248",
- "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-intl": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's Normalizer class and related functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "intl",
- "normalizer",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-22T09:19:47+00:00"
- },
- {
- "name": "symfony/polyfill-mbstring",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "5232de97ee3b75b0360528dae24e73db49566ab1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1",
- "reference": "5232de97ee3b75b0360528dae24e73db49566ab1",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-mbstring": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for the Mbstring extension",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-22T09:19:47+00:00"
- },
- {
- "name": "symfony/polyfill-php73",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
- "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php73\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-07T16:49:33+00:00"
- },
- {
- "name": "symfony/polyfill-php80",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
- "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-07T16:49:33+00:00"
- },
- {
- "name": "symfony/property-access",
- "version": "v5.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/property-access.git",
- "reference": "3af8ed262bd3217512a13b023981fe68f36ad5f3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/property-access/zipball/3af8ed262bd3217512a13b023981fe68f36ad5f3",
- "reference": "3af8ed262bd3217512a13b023981fe68f36ad5f3",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/polyfill-php80": "^1.15",
- "symfony/property-info": "^5.2"
- },
- "require-dev": {
- "symfony/cache": "^4.4|^5.0"
- },
- "suggest": {
- "psr/cache-implementation": "To cache access methods."
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\PropertyAccess\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides functions to read and write from/to an object or array using a simple string notation",
- "homepage": "https://symfony.com",
- "keywords": [
- "access",
- "array",
- "extraction",
- "index",
- "injection",
- "object",
- "property",
- "property path",
- "reflection"
- ],
- "support": {
- "source": "https://github.com/symfony/property-access/tree/v5.2.4"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-27T10:15:41+00:00"
- },
- {
- "name": "symfony/property-info",
- "version": "v5.2.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/property-info.git",
- "reference": "f5850c8d4d987fd1990e2cbdf29f48c663c433e7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/property-info/zipball/f5850c8d4d987fd1990e2cbdf29f48c663c433e7",
- "reference": "f5850c8d4d987fd1990e2cbdf29f48c663c433e7",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/polyfill-php80": "^1.15",
- "symfony/string": "^5.1"
- },
- "conflict": {
- "phpdocumentor/reflection-docblock": "<3.2.2",
- "phpdocumentor/type-resolver": "<1.4.0",
- "symfony/dependency-injection": "<4.4"
- },
- "require-dev": {
- "doctrine/annotations": "^1.10.4",
- "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
- "symfony/cache": "^4.4|^5.0",
- "symfony/dependency-injection": "^4.4|^5.0",
- "symfony/serializer": "^4.4|^5.0"
- },
- "suggest": {
- "phpdocumentor/reflection-docblock": "To use the PHPDoc",
- "psr/cache-implementation": "To cache results",
- "symfony/doctrine-bridge": "To use Doctrine metadata",
- "symfony/serializer": "To use Serializer metadata"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\PropertyInfo\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Kévin Dunglas",
- "email": "dunglas@gmail.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Extracts information about PHP class' properties using metadata of popular sources",
- "homepage": "https://symfony.com",
- "keywords": [
- "doctrine",
- "phpdoc",
- "property",
- "symfony",
- "type",
- "validator"
- ],
- "support": {
- "source": "https://github.com/symfony/property-info/tree/v5.2.7"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-04-16T17:25:34+00:00"
- },
- {
- "name": "symfony/string",
- "version": "v5.2.6",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/string.git",
- "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572",
- "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.0",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "~1.15"
- },
- "require-dev": {
- "symfony/error-handler": "^4.4|^5.0",
- "symfony/http-client": "^4.4|^5.0",
- "symfony/translation-contracts": "^1.1|^2",
- "symfony/var-exporter": "^4.4|^5.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\String\\": ""
- },
- "files": [
- "Resources/functions.php"
- ],
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
- "homepage": "https://symfony.com",
- "keywords": [
- "grapheme",
- "i18n",
- "string",
- "unicode",
- "utf-8",
- "utf8"
- ],
- "support": {
- "source": "https://github.com/symfony/string/tree/v5.2.6"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-03-17T17:12:15+00:00"
- },
- {
- "name": "symfony/translation-contracts",
- "version": "v2.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/translation-contracts.git",
- "reference": "95c812666f3e91db75385749fe219c5e494c7f95"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95",
- "reference": "95c812666f3e91db75385749fe219c5e494c7f95",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5"
- },
- "suggest": {
- "symfony/translation-implementation": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.4-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Translation\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to translation",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-03-23T23:28:01+00:00"
- },
- {
- "name": "symfony/validator",
- "version": "v5.2.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/validator.git",
- "reference": "b0be0360bfbf15059308d815da7f4151bd448b37"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/validator/zipball/b0be0360bfbf15059308d815da7f4151bd448b37",
- "reference": "b0be0360bfbf15059308d815da7f4151bd448b37",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php73": "~1.0",
- "symfony/polyfill-php80": "^1.15",
- "symfony/translation-contracts": "^1.1|^2"
- },
- "conflict": {
- "doctrine/lexer": "<1.0.2",
- "phpunit/phpunit": "<5.4.3",
- "symfony/dependency-injection": "<4.4",
- "symfony/expression-language": "<5.1",
- "symfony/http-kernel": "<4.4",
- "symfony/intl": "<4.4",
- "symfony/translation": "<4.4",
- "symfony/yaml": "<4.4"
- },
- "require-dev": {
- "doctrine/annotations": "^1.10.4",
- "doctrine/cache": "~1.0",
- "egulias/email-validator": "^2.1.10|^3",
- "symfony/cache": "^4.4|^5.0",
- "symfony/config": "^4.4|^5.0",
- "symfony/console": "^4.4|^5.0",
- "symfony/dependency-injection": "^4.4|^5.0",
- "symfony/expression-language": "^5.1",
- "symfony/finder": "^4.4|^5.0",
- "symfony/http-client": "^4.4|^5.0",
- "symfony/http-foundation": "^4.4|^5.0",
- "symfony/http-kernel": "^4.4|^5.0",
- "symfony/intl": "^4.4|^5.0",
- "symfony/mime": "^4.4|^5.0",
- "symfony/property-access": "^4.4|^5.0",
- "symfony/property-info": "^4.4|^5.0",
- "symfony/translation": "^4.4|^5.0",
- "symfony/yaml": "^4.4|^5.0"
- },
- "suggest": {
- "egulias/email-validator": "Strict (RFC compliant) email validation",
- "psr/cache-implementation": "For using the mapping cache.",
- "symfony/config": "",
- "symfony/expression-language": "For using the Expression validator and the ExpressionLanguageSyntax constraints",
- "symfony/http-foundation": "",
- "symfony/intl": "",
- "symfony/property-access": "For accessing properties within comparison constraints",
- "symfony/property-info": "To automatically add NotNull and Type constraints",
- "symfony/translation": "For translating validation errors.",
- "symfony/yaml": ""
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Validator\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides tools to validate values",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/validator/tree/v5.2.7"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-04-14T13:12:03+00:00"
- }
- ],
- "packages-dev": [
- {
- "name": "composer/semver",
- "version": "3.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/semver.git",
- "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/a02fdf930a3c1c3ed3a49b5f63859c0c20e10464",
- "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464",
- "shasum": ""
- },
- "require": {
- "php": "^5.3.2 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "phpstan/phpstan": "^0.12.54",
- "symfony/phpunit-bridge": "^4.2 || ^5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Composer\\Semver\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nils Adermann",
- "email": "naderman@naderman.de",
- "homepage": "http://www.naderman.de"
- },
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- },
- {
- "name": "Rob Bast",
- "email": "rob.bast@gmail.com",
- "homepage": "http://robbast.nl"
- }
- ],
- "description": "Semver library that offers utilities, version constraint parsing and validation.",
- "keywords": [
- "semantic",
- "semver",
- "validation",
- "versioning"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/3.2.4"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-13T08:59:24+00:00"
- },
- {
- "name": "composer/xdebug-handler",
- "version": "2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/xdebug-handler.git",
- "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/964adcdd3a28bf9ed5d9ac6450064e0d71ed7496",
- "reference": "964adcdd3a28bf9ed5d9ac6450064e0d71ed7496",
- "shasum": ""
- },
- "require": {
- "php": "^5.3.2 || ^7.0 || ^8.0",
- "psr/log": "^1.0"
- },
- "require-dev": {
- "phpstan/phpstan": "^0.12.55",
- "symfony/phpunit-bridge": "^4.2 || ^5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Composer\\XdebugHandler\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "John Stevenson",
- "email": "john-stevenson@blueyonder.co.uk"
- }
- ],
- "description": "Restarts a process without Xdebug.",
- "keywords": [
- "Xdebug",
- "performance"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/xdebug-handler/issues",
- "source": "https://github.com/composer/xdebug-handler/tree/2.0.1"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2021-05-05T19:37:51+00:00"
- },
- {
- "name": "dg/bypass-finals",
- "version": "v1.3.1",
- "source": {
- "type": "git",
- "url": "https://github.com/dg/bypass-finals.git",
- "reference": "495f5bc762e7bf30a13ed8253f44bb3a701767bb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dg/bypass-finals/zipball/495f5bc762e7bf30a13ed8253f44bb3a701767bb",
- "reference": "495f5bc762e7bf30a13ed8253f44bb3a701767bb",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "require-dev": {
- "nette/tester": "^2.3",
- "phpstan/phpstan": "^0.12"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause",
- "GPL-2.0",
- "GPL-3.0"
- ],
- "authors": [
- {
- "name": "David Grudl",
- "homepage": "https://davidgrudl.com"
- }
- ],
- "description": "Removes final keyword from source code on-the-fly and allows mocking of final methods and classes",
- "keywords": [
- "finals",
- "mocking",
- "phpunit",
- "testing",
- "unit"
- ],
- "support": {
- "issues": "https://github.com/dg/bypass-finals/issues",
- "source": "https://github.com/dg/bypass-finals/tree/v1.3.1"
- },
- "time": "2021-04-09T10:42:55+00:00"
- },
- {
- "name": "dms/phpunit-arraysubset-asserts",
- "version": "v0.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/rdohms/phpunit-arraysubset-asserts.git",
- "reference": "8e3673a70019a60df484e36fc3271d63cbdc40ea"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/rdohms/phpunit-arraysubset-asserts/zipball/8e3673a70019a60df484e36fc3271d63cbdc40ea",
- "reference": "8e3673a70019a60df484e36fc3271d63cbdc40ea",
- "shasum": ""
- },
- "require": {
- "php": "^7.3|^8.0",
- "phpunit/phpunit": "^9.0"
- },
- "require-dev": {
- "dms/coding-standard": "^1.0",
- "squizlabs/php_codesniffer": "^3.4"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "DMS\\PHPUnitExtensions\\ArraySubset\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Rafael Dohms",
- "email": "rdohms@gmail.com"
- }
- ],
- "description": "This package provides ArraySubset and related asserts once deprecated in PHPUnit 8",
- "support": {
- "issues": "https://github.com/rdohms/phpunit-arraysubset-asserts/issues",
- "source": "https://github.com/rdohms/phpunit-arraysubset-asserts/tree/v0.2.1"
- },
- "time": "2020-10-03T21:43:40+00:00"
- },
- {
- "name": "doctrine/annotations",
- "version": "1.12.1",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/annotations.git",
- "reference": "b17c5014ef81d212ac539f07a1001832df1b6d3b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/annotations/zipball/b17c5014ef81d212ac539f07a1001832df1b6d3b",
- "reference": "b17c5014ef81d212ac539f07a1001832df1b6d3b",
- "shasum": ""
- },
- "require": {
- "doctrine/lexer": "1.*",
- "ext-tokenizer": "*",
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/cache": "1.*",
- "doctrine/coding-standard": "^6.0 || ^8.1",
- "phpstan/phpstan": "^0.12.20",
- "phpunit/phpunit": "^7.5 || ^9.1.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de"
- },
- {
- "name": "Jonathan Wage",
- "email": "jonwage@gmail.com"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "Docblock Annotations Parser",
- "homepage": "https://www.doctrine-project.org/projects/annotations.html",
- "keywords": [
- "annotations",
- "docblock",
- "parser"
- ],
- "support": {
- "issues": "https://github.com/doctrine/annotations/issues",
- "source": "https://github.com/doctrine/annotations/tree/1.12.1"
- },
- "time": "2021-02-21T21:00:45+00:00"
- },
- {
- "name": "doctrine/instantiator",
- "version": "1.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^8.0",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
- "phpstan/phpstan": "^0.12",
- "phpstan/phpstan-phpunit": "^0.12",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "https://ocramius.github.io/"
- }
- ],
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
- "keywords": [
- "constructor",
- "instantiate"
- ],
- "support": {
- "issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-10T18:47:58+00:00"
- },
- {
- "name": "doctrine/lexer",
- "version": "1.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/lexer.git",
- "reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
- "reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^6.0",
- "phpstan/phpstan": "^0.11.8",
- "phpunit/phpunit": "^8.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
- "homepage": "https://www.doctrine-project.org/projects/lexer.html",
- "keywords": [
- "annotations",
- "docblock",
- "lexer",
- "parser",
- "php"
- ],
- "support": {
- "issues": "https://github.com/doctrine/lexer/issues",
- "source": "https://github.com/doctrine/lexer/tree/1.2.1"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
- "type": "tidelift"
- }
- ],
- "time": "2020-05-25T17:44:05+00:00"
- },
- {
- "name": "fpdf/fpdf",
- "version": "1.83.1",
- "source": {
- "type": "git",
- "url": "https://github.com/coreydoughty/Fpdf.git",
- "reference": "9a27abfd0a8e72ef690e94f3d5efc862541a3ff2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/coreydoughty/Fpdf/zipball/9a27abfd0a8e72ef690e94f3d5efc862541a3ff2",
- "reference": "9a27abfd0a8e72ef690e94f3d5efc862541a3ff2",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Fpdf\\": "src/Fpdf"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Corey Doughty",
- "email": "corey@doughty.ca"
- }
- ],
- "description": "FPDF Composer Wrapper",
- "homepage": "https://github.com/coreydoughty/Fpdf",
- "keywords": [
- "fpdf",
- "pdf",
- "wrapper"
- ],
- "support": {
- "issues": "https://github.com/coreydoughty/Fpdf/issues",
- "source": "https://github.com/coreydoughty/Fpdf/tree/1.83.1"
- },
- "time": "2021-04-25T18:41:04+00:00"
- },
- {
- "name": "friendsofphp/php-cs-fixer",
- "version": "v2.19.0",
- "source": {
- "type": "git",
- "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
- "reference": "d5b8a9d852b292c2f8a035200fa6844b1f82300b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/d5b8a9d852b292c2f8a035200fa6844b1f82300b",
- "reference": "d5b8a9d852b292c2f8a035200fa6844b1f82300b",
- "shasum": ""
- },
- "require": {
- "composer/semver": "^1.4 || ^2.0 || ^3.0",
- "composer/xdebug-handler": "^1.2 || ^2.0",
- "doctrine/annotations": "^1.2",
- "ext-json": "*",
- "ext-tokenizer": "*",
- "php": "^5.6 || ^7.0 || ^8.0",
- "php-cs-fixer/diff": "^1.3",
- "symfony/console": "^3.4.43 || ^4.1.6 || ^5.0",
- "symfony/event-dispatcher": "^3.0 || ^4.0 || ^5.0",
- "symfony/filesystem": "^3.0 || ^4.0 || ^5.0",
- "symfony/finder": "^3.0 || ^4.0 || ^5.0",
- "symfony/options-resolver": "^3.0 || ^4.0 || ^5.0",
- "symfony/polyfill-php70": "^1.0",
- "symfony/polyfill-php72": "^1.4",
- "symfony/process": "^3.0 || ^4.0 || ^5.0",
- "symfony/stopwatch": "^3.0 || ^4.0 || ^5.0"
- },
- "require-dev": {
- "justinrainbow/json-schema": "^5.0",
- "keradus/cli-executor": "^1.4",
- "mikey179/vfsstream": "^1.6",
- "php-coveralls/php-coveralls": "^2.4.2",
- "php-cs-fixer/accessible-object": "^1.0",
- "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2",
- "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1",
- "phpspec/prophecy-phpunit": "^1.1 || ^2.0",
- "phpunit/phpunit": "^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.13 || ^9.5",
- "phpunitgoodpractices/polyfill": "^1.5",
- "phpunitgoodpractices/traits": "^1.9.1",
- "sanmai/phpunit-legacy-adapter": "^6.4 || ^8.2.1",
- "symfony/phpunit-bridge": "^5.2.1",
- "symfony/yaml": "^3.0 || ^4.0 || ^5.0"
- },
- "suggest": {
- "ext-dom": "For handling output formats in XML",
- "ext-mbstring": "For handling non-UTF8 characters.",
- "php-cs-fixer/phpunit-constraint-isidenticalstring": "For IsIdenticalString constraint.",
- "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "For XmlMatchesXsd constraint.",
- "symfony/polyfill-mbstring": "When enabling `ext-mbstring` is not possible."
- },
- "bin": [
- "php-cs-fixer"
- ],
- "type": "application",
- "extra": {
- "branch-alias": {
- "dev-master": "2.19-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PhpCsFixer\\": "src/"
- },
- "classmap": [
- "tests/Test/AbstractFixerTestCase.php",
- "tests/Test/AbstractIntegrationCaseFactory.php",
- "tests/Test/AbstractIntegrationTestCase.php",
- "tests/Test/Assert/AssertTokensTrait.php",
- "tests/Test/IntegrationCase.php",
- "tests/Test/IntegrationCaseFactory.php",
- "tests/Test/IntegrationCaseFactoryInterface.php",
- "tests/Test/InternalIntegrationCaseFactory.php",
- "tests/Test/IsIdenticalConstraint.php",
- "tests/Test/TokensWithObservedTransformers.php",
- "tests/TestCase.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Dariusz Rumiński",
- "email": "dariusz.ruminski@gmail.com"
- }
- ],
- "description": "A tool to automatically fix PHP code style",
- "support": {
- "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues",
- "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v2.19.0"
- },
- "funding": [
- {
- "url": "https://github.com/keradus",
- "type": "github"
- }
- ],
- "time": "2021-05-03T21:43:24+00:00"
- },
- {
- "name": "myclabs/deep-copy",
- "version": "1.10.2",
- "source": {
- "type": "git",
- "url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "replace": {
- "myclabs/deep-copy": "self.version"
- },
- "require-dev": {
- "doctrine/collections": "^1.0",
- "doctrine/common": "^2.6",
- "phpunit/phpunit": "^7.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "DeepCopy\\": "src/DeepCopy/"
- },
- "files": [
- "src/DeepCopy/deep_copy.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Create deep copies (clones) of your objects",
- "keywords": [
- "clone",
- "copy",
- "duplicate",
- "object",
- "object graph"
- ],
- "support": {
- "issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
- },
- "funding": [
- {
- "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-13T09:40:50+00:00"
- },
- {
- "name": "nikic/php-parser",
- "version": "v4.10.5",
- "source": {
- "type": "git",
- "url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f",
- "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f",
- "shasum": ""
- },
- "require": {
- "ext-tokenizer": "*",
- "php": ">=7.0"
- },
- "require-dev": {
- "ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
- },
- "bin": [
- "bin/php-parse"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.9-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PhpParser\\": "lib/PhpParser"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Nikita Popov"
- }
- ],
- "description": "A PHP parser written in PHP",
- "keywords": [
- "parser",
- "php"
- ],
- "support": {
- "issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5"
- },
- "time": "2021-05-03T19:11:20+00:00"
- },
- {
- "name": "phar-io/manifest",
- "version": "2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/manifest.git",
- "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
- "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-phar": "*",
- "ext-xmlwriter": "*",
- "phar-io/version": "^3.0.1",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
- "support": {
- "issues": "https://github.com/phar-io/manifest/issues",
- "source": "https://github.com/phar-io/manifest/tree/master"
- },
- "time": "2020-06-27T14:33:11+00:00"
- },
- {
- "name": "phar-io/version",
- "version": "3.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/version.git",
- "reference": "bae7c545bef187884426f042434e561ab1ddb182"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
- "reference": "bae7c545bef187884426f042434e561ab1ddb182",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Library for handling version information and constraints",
- "support": {
- "issues": "https://github.com/phar-io/version/issues",
- "source": "https://github.com/phar-io/version/tree/3.1.0"
- },
- "time": "2021-02-23T14:00:09+00:00"
- },
- {
- "name": "php-cs-fixer/diff",
- "version": "v1.3.1",
- "source": {
- "type": "git",
- "url": "https://github.com/PHP-CS-Fixer/diff.git",
- "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/dbd31aeb251639ac0b9e7e29405c1441907f5759",
- "reference": "dbd31aeb251639ac0b9e7e29405c1441907f5759",
- "shasum": ""
- },
- "require": {
- "php": "^5.6 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0",
- "symfony/process": "^3.3"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
- },
- {
- "name": "SpacePossum"
- }
- ],
- "description": "sebastian/diff v2 backport support for PHP5.6",
- "homepage": "https://github.com/PHP-CS-Fixer",
- "keywords": [
- "diff"
- ],
- "support": {
- "issues": "https://github.com/PHP-CS-Fixer/diff/issues",
- "source": "https://github.com/PHP-CS-Fixer/diff/tree/v1.3.1"
- },
- "time": "2020-10-14T08:39:05+00:00"
- },
- {
- "name": "phpdocumentor/reflection-common",
- "version": "2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-2.x": "2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jaap van Otterdijk",
- "email": "opensource@ijaap.nl"
- }
- ],
- "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
- "homepage": "http://www.phpdoc.org",
- "keywords": [
- "FQSEN",
- "phpDocumentor",
- "phpdoc",
- "reflection",
- "static analysis"
- ],
- "support": {
- "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
- "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
- },
- "time": "2020-06-27T09:03:43+00:00"
- },
- {
- "name": "phpdocumentor/reflection-docblock",
- "version": "5.2.2",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
- "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
- "shasum": ""
- },
- "require": {
- "ext-filter": "*",
- "php": "^7.2 || ^8.0",
- "phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.3",
- "webmozart/assert": "^1.9.1"
- },
- "require-dev": {
- "mockery/mockery": "~1.3.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- },
- {
- "name": "Jaap van Otterdijk",
- "email": "account@ijaap.nl"
- }
- ],
- "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
- "support": {
- "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master"
- },
- "time": "2020-09-03T19:13:55+00:00"
- },
- {
- "name": "phpdocumentor/type-resolver",
- "version": "1.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
- "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0",
- "phpdocumentor/reflection-common": "^2.0"
- },
- "require-dev": {
- "ext-tokenizer": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-1.x": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- }
- ],
- "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
- "support": {
- "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0"
- },
- "time": "2020-09-17T18:55:26+00:00"
- },
- {
- "name": "phpspec/prophecy",
- "version": "1.13.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea",
- "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.2",
- "php": "^7.2 || ~8.0, <8.1",
- "phpdocumentor/reflection-docblock": "^5.2",
- "sebastian/comparator": "^3.0 || ^4.0",
- "sebastian/recursion-context": "^3.0 || ^4.0"
- },
- "require-dev": {
- "phpspec/phpspec": "^6.0",
- "phpunit/phpunit": "^8.0 || ^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.11.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Prophecy\\": "src/Prophecy"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- },
- {
- "name": "Marcello Duarte",
- "email": "marcello.duarte@gmail.com"
- }
- ],
- "description": "Highly opinionated mocking framework for PHP 5.3+",
- "homepage": "https://github.com/phpspec/prophecy",
- "keywords": [
- "Double",
- "Dummy",
- "fake",
- "mock",
- "spy",
- "stub"
- ],
- "support": {
- "issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/1.13.0"
- },
- "time": "2021-03-17T13:42:18+00:00"
- },
- {
- "name": "phpstan/phpstan",
- "version": "0.12.86",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/phpstan.git",
- "reference": "a84fdc53ecca7643dbc89ef8880d8b393a6c155a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a84fdc53ecca7643dbc89ef8880d8b393a6c155a",
- "reference": "a84fdc53ecca7643dbc89ef8880d8b393a6c155a",
- "shasum": ""
- },
- "require": {
- "php": "^7.1|^8.0"
- },
- "conflict": {
- "phpstan/phpstan-shim": "*"
- },
- "bin": [
- "phpstan",
- "phpstan.phar"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "0.12-dev"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "PHPStan - PHP Static Analysis Tool",
- "support": {
- "issues": "https://github.com/phpstan/phpstan/issues",
- "source": "https://github.com/phpstan/phpstan/tree/0.12.86"
- },
- "funding": [
- {
- "url": "https://github.com/ondrejmirtes",
- "type": "github"
- },
- {
- "url": "https://www.patreon.com/phpstan",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
- "type": "tidelift"
- }
- ],
- "time": "2021-05-08T11:29:01+00:00"
- },
- {
- "name": "phpunit/php-code-coverage",
- "version": "9.2.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "f6293e1b30a2354e8428e004689671b83871edde"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde",
- "reference": "f6293e1b30a2354e8428e004689671b83871edde",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-libxml": "*",
- "ext-xmlwriter": "*",
- "nikic/php-parser": "^4.10.2",
- "php": ">=7.3",
- "phpunit/php-file-iterator": "^3.0.3",
- "phpunit/php-text-template": "^2.0.2",
- "sebastian/code-unit-reverse-lookup": "^2.0.2",
- "sebastian/complexity": "^2.0",
- "sebastian/environment": "^5.1.2",
- "sebastian/lines-of-code": "^1.0.3",
- "sebastian/version": "^3.0.1",
- "theseer/tokenizer": "^1.2.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-pcov": "*",
- "ext-xdebug": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "9.2-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
- "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
- "keywords": [
- "coverage",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-03-28T07:26:59+00:00"
- },
- {
- "name": "phpunit/php-file-iterator",
- "version": "3.0.5",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8",
- "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "FilterIterator implementation that filters files based on a list of suffixes.",
- "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
- "keywords": [
- "filesystem",
- "iterator"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:57:25+00:00"
- },
- {
- "name": "phpunit/php-invoker",
- "version": "3.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "ext-pcntl": "*",
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-pcntl": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Invoke callables with a timeout",
- "homepage": "https://github.com/sebastianbergmann/php-invoker/",
- "keywords": [
- "process"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
- "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:58:55+00:00"
- },
- {
- "name": "phpunit/php-text-template",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Simple template engine.",
- "homepage": "https://github.com/sebastianbergmann/php-text-template/",
- "keywords": [
- "template"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T05:33:50+00:00"
- },
- {
- "name": "phpunit/php-timer",
- "version": "5.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Utility class for timing",
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
- "keywords": [
- "timer"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:16:10+00:00"
- },
- {
- "name": "phpunit/phpunit",
- "version": "9.5.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "c73c6737305e779771147af66c96ca6a7ed8a741"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c73c6737305e779771147af66c96ca6a7ed8a741",
- "reference": "c73c6737305e779771147af66c96ca6a7ed8a741",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.3.1",
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-xml": "*",
- "ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.10.1",
- "phar-io/manifest": "^2.0.1",
- "phar-io/version": "^3.0.2",
- "php": ">=7.3",
- "phpspec/prophecy": "^1.12.1",
- "phpunit/php-code-coverage": "^9.2.3",
- "phpunit/php-file-iterator": "^3.0.5",
- "phpunit/php-invoker": "^3.1.1",
- "phpunit/php-text-template": "^2.0.3",
- "phpunit/php-timer": "^5.0.2",
- "sebastian/cli-parser": "^1.0.1",
- "sebastian/code-unit": "^1.0.6",
- "sebastian/comparator": "^4.0.5",
- "sebastian/diff": "^4.0.3",
- "sebastian/environment": "^5.1.3",
- "sebastian/exporter": "^4.0.3",
- "sebastian/global-state": "^5.0.1",
- "sebastian/object-enumerator": "^4.0.3",
- "sebastian/resource-operations": "^3.0.3",
- "sebastian/type": "^2.3",
- "sebastian/version": "^3.0.2"
- },
- "require-dev": {
- "ext-pdo": "*",
- "phpspec/prophecy-phpunit": "^2.0.1"
- },
- "suggest": {
- "ext-soap": "*",
- "ext-xdebug": "*"
- },
- "bin": [
- "phpunit"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "9.5-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ],
- "files": [
- "src/Framework/Assert/Functions.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "The PHP Unit Testing framework.",
- "homepage": "https://phpunit.de/",
- "keywords": [
- "phpunit",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.4"
- },
- "funding": [
- {
- "url": "https://phpunit.de/donate.html",
- "type": "custom"
- },
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-03-23T07:16:29+00:00"
- },
- {
- "name": "psr/container",
- "version": "1.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/container.git",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf",
- "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Psr\\Container\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common Container Interface (PHP FIG PSR-11)",
- "homepage": "https://github.com/php-fig/container",
- "keywords": [
- "PSR-11",
- "container",
- "container-interface",
- "container-interop",
- "psr"
- ],
- "support": {
- "issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/1.1.1"
- },
- "time": "2021-03-05T17:36:06+00:00"
- },
- {
- "name": "psr/event-dispatcher",
- "version": "1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/event-dispatcher.git",
- "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
- "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\EventDispatcher\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Standard interfaces for event handling.",
- "keywords": [
- "events",
- "psr",
- "psr-14"
- ],
- "support": {
- "issues": "https://github.com/php-fig/event-dispatcher/issues",
- "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
- },
- "time": "2019-01-08T18:20:26+00:00"
- },
- {
- "name": "psr/log",
- "version": "1.1.4",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/log.git",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Log\\": "Psr/Log/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
- }
- ],
- "description": "Common interface for logging libraries",
- "homepage": "https://github.com/php-fig/log",
- "keywords": [
- "log",
- "psr",
- "psr-3"
- ],
- "support": {
- "source": "https://github.com/php-fig/log/tree/1.1.4"
- },
- "time": "2021-05-03T11:20:27+00:00"
- },
- {
- "name": "sebastian/cli-parser",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for parsing CLI options",
- "homepage": "https://github.com/sebastianbergmann/cli-parser",
- "support": {
- "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T06:08:49+00:00"
- },
- {
- "name": "sebastian/code-unit",
- "version": "1.0.8",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the PHP code units",
- "homepage": "https://github.com/sebastianbergmann/code-unit",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit/issues",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:08:54+00:00"
- },
- {
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "2.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Looks up which function or method a line of code belongs to",
- "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:30:19+00:00"
- },
- {
- "name": "sebastian/comparator",
- "version": "4.0.6",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
- "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/diff": "^4.0",
- "sebastian/exporter": "^4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@2bepublished.at"
- }
- ],
- "description": "Provides the functionality to compare PHP values for equality",
- "homepage": "https://github.com/sebastianbergmann/comparator",
- "keywords": [
- "comparator",
- "compare",
- "equality"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T15:49:45+00:00"
- },
- {
- "name": "sebastian/complexity",
- "version": "2.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
- "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^4.7",
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for calculating the complexity of PHP code units",
- "homepage": "https://github.com/sebastianbergmann/complexity",
- "support": {
- "issues": "https://github.com/sebastianbergmann/complexity/issues",
- "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T15:52:27+00:00"
- },
- {
- "name": "sebastian/diff",
- "version": "4.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
- "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "symfony/process": "^4.2 || ^5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
- }
- ],
- "description": "Diff implementation",
- "homepage": "https://github.com/sebastianbergmann/diff",
- "keywords": [
- "diff",
- "udiff",
- "unidiff",
- "unified diff"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:10:38+00:00"
- },
- {
- "name": "sebastian/environment",
- "version": "5.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
- "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-posix": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "http://www.github.com/sebastianbergmann/environment",
- "keywords": [
- "Xdebug",
- "environment",
- "hhvm"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:52:38+00:00"
- },
- {
- "name": "sebastian/exporter",
- "version": "4.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65",
- "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "ext-mbstring": "*",
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "http://www.github.com/sebastianbergmann/exporter",
- "keywords": [
- "export",
- "exporter"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:24:23+00:00"
- },
- {
- "name": "sebastian/global-state",
- "version": "5.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "a90ccbddffa067b51f574dea6eb25d5680839455"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455",
- "reference": "a90ccbddffa067b51f574dea6eb25d5680839455",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "ext-dom": "*",
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-uopz": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
- "keywords": [
- "global state"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T15:55:19+00:00"
- },
- {
- "name": "sebastian/lines-of-code",
- "version": "1.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
- "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
- "shasum": ""
- },
- "require": {
- "nikic/php-parser": "^4.6",
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library for counting the lines of code in PHP source code",
- "homepage": "https://github.com/sebastianbergmann/lines-of-code",
- "support": {
- "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-28T06:42:11+00:00"
- },
- {
- "name": "sebastian/object-enumerator",
- "version": "4.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Traverses array structures and object graphs to enumerate all referenced objects",
- "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:12:34+00:00"
- },
- {
- "name": "sebastian/object-reflector",
- "version": "2.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Allows reflection of object attributes, including inherited and non-public ones",
- "homepage": "https://github.com/sebastianbergmann/object-reflector/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:14:26+00:00"
- },
- {
- "name": "sebastian/recursion-context",
- "version": "4.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
- "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- }
- ],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "support": {
- "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:17:30+00:00"
- },
- {
- "name": "sebastian/resource-operations",
- "version": "3.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides a list of PHP built-in functions that operate on resources",
- "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
- "support": {
- "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
- "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T06:45:17+00:00"
- },
- {
- "name": "sebastian/type",
- "version": "2.3.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/type.git",
- "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2",
- "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.3-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the types of the PHP type system",
- "homepage": "https://github.com/sebastianbergmann/type",
- "support": {
- "issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/2.3.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:18:59+00:00"
- },
- {
- "name": "sebastian/version",
- "version": "3.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "c6c1022351a901512170118436c764e473f6de8c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
- "reference": "c6c1022351a901512170118436c764e473f6de8c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that helps with managing the version number of Git-hosted PHP projects",
- "homepage": "https://github.com/sebastianbergmann/version",
- "support": {
- "issues": "https://github.com/sebastianbergmann/version/issues",
- "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T06:39:44+00:00"
- },
- {
- "name": "symfony/console",
- "version": "v5.2.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/console.git",
- "reference": "90374b8ed059325b49a29b55b3f8bb4062c87629"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/90374b8ed059325b49a29b55b3f8bb4062c87629",
- "reference": "90374b8ed059325b49a29b55b3f8bb4062c87629",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php73": "^1.8",
- "symfony/polyfill-php80": "^1.15",
- "symfony/service-contracts": "^1.1|^2",
- "symfony/string": "^5.1"
- },
- "conflict": {
- "symfony/dependency-injection": "<4.4",
- "symfony/dotenv": "<5.1",
- "symfony/event-dispatcher": "<4.4",
- "symfony/lock": "<4.4",
- "symfony/process": "<4.4"
- },
- "provide": {
- "psr/log-implementation": "1.0"
- },
- "require-dev": {
- "psr/log": "~1.0",
- "symfony/config": "^4.4|^5.0",
- "symfony/dependency-injection": "^4.4|^5.0",
- "symfony/event-dispatcher": "^4.4|^5.0",
- "symfony/lock": "^4.4|^5.0",
- "symfony/process": "^4.4|^5.0",
- "symfony/var-dumper": "^4.4|^5.0"
- },
- "suggest": {
- "psr/log": "For using the console logger",
- "symfony/event-dispatcher": "",
- "symfony/lock": "",
- "symfony/process": ""
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Console\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Eases the creation of beautiful and testable command line interfaces",
- "homepage": "https://symfony.com",
- "keywords": [
- "cli",
- "command line",
- "console",
- "terminal"
- ],
- "support": {
- "source": "https://github.com/symfony/console/tree/v5.2.7"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-04-19T14:07:32+00:00"
- },
- {
- "name": "symfony/css-selector",
- "version": "v4.4.22",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/css-selector.git",
- "reference": "01c77324d1d47efbfd7891f62a7c256c69330115"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/01c77324d1d47efbfd7891f62a7c256c69330115",
- "reference": "01c77324d1d47efbfd7891f62a7c256c69330115",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1.3"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\CssSelector\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Jean-François Simon",
- "email": "jeanfrancois.simon@sensiolabs.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Converts CSS selectors to XPath expressions",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/css-selector/tree/v4.4.22"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-04-07T15:47:03+00:00"
- },
- {
- "name": "symfony/event-dispatcher",
- "version": "v5.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "d08d6ec121a425897951900ab692b612a61d6240"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d08d6ec121a425897951900ab692b612a61d6240",
- "reference": "d08d6ec121a425897951900ab692b612a61d6240",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/event-dispatcher-contracts": "^2",
- "symfony/polyfill-php80": "^1.15"
- },
- "conflict": {
- "symfony/dependency-injection": "<4.4"
- },
- "provide": {
- "psr/event-dispatcher-implementation": "1.0",
- "symfony/event-dispatcher-implementation": "2.0"
- },
- "require-dev": {
- "psr/log": "~1.0",
- "symfony/config": "^4.4|^5.0",
- "symfony/dependency-injection": "^4.4|^5.0",
- "symfony/error-handler": "^4.4|^5.0",
- "symfony/expression-language": "^4.4|^5.0",
- "symfony/http-foundation": "^4.4|^5.0",
- "symfony/service-contracts": "^1.1|^2",
- "symfony/stopwatch": "^4.4|^5.0"
- },
- "suggest": {
- "symfony/dependency-injection": "",
- "symfony/http-kernel": ""
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\EventDispatcher\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.4"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-02-18T17:12:37+00:00"
- },
- {
- "name": "symfony/event-dispatcher-contracts",
- "version": "v2.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/event-dispatcher-contracts.git",
- "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11",
- "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "psr/event-dispatcher": "^1"
- },
- "suggest": {
- "symfony/event-dispatcher-implementation": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.4-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\EventDispatcher\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to dispatching event",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-03-23T23:28:01+00:00"
- },
- {
- "name": "symfony/filesystem",
- "version": "v5.2.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/filesystem.git",
- "reference": "056e92acc21d977c37e6ea8e97374b2a6c8551b0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/056e92acc21d977c37e6ea8e97374b2a6c8551b0",
- "reference": "056e92acc21d977c37e6ea8e97374b2a6c8551b0",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Filesystem\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides basic utilities for the filesystem",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/filesystem/tree/v5.2.7"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-04-01T10:42:13+00:00"
- },
- {
- "name": "symfony/finder",
- "version": "v5.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/finder.git",
- "reference": "0d639a0943822626290d169965804f79400e6a04"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/0d639a0943822626290d169965804f79400e6a04",
- "reference": "0d639a0943822626290d169965804f79400e6a04",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Finder\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Finds files and directories via an intuitive fluent interface",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/finder/tree/v5.2.4"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-02-15T18:55:04+00:00"
- },
- {
- "name": "symfony/polyfill-php70",
- "version": "v1.20.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php70.git",
- "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644",
- "reference": "5f03a781d984aae42cebd18e7912fa80f02ee644",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "metapackage",
- "extra": {
- "branch-alias": {
- "dev-main": "1.20-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 7.0+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php70/tree/v1.20.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2020-10-23T14:02:19+00:00"
- },
- {
- "name": "symfony/polyfill-php72",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
- "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php72\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-07T16:49:33+00:00"
- },
- {
- "name": "symfony/process",
- "version": "v5.2.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/process.git",
- "reference": "98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e",
- "reference": "98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-php80": "^1.15"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Process\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Executes commands in sub-processes",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/process/tree/v5.3.0-BETA1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-04-08T10:27:02+00:00"
- },
- {
- "name": "symfony/service-contracts",
- "version": "v2.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
- "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "psr/container": "^1.1"
- },
- "suggest": {
- "symfony/service-implementation": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "2.4-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Service\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to writing services",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/service-contracts/tree/v2.4.0"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-04-01T10:43:52+00:00"
- },
- {
- "name": "symfony/stopwatch",
- "version": "v5.2.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/stopwatch.git",
- "reference": "d99310c33e833def36419c284f60e8027d359678"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/d99310c33e833def36419c284f60e8027d359678",
- "reference": "d99310c33e833def36419c284f60e8027d359678",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/service-contracts": "^1.0|^2"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Stopwatch\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides a way to profile code",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/stopwatch/tree/v5.3.0-BETA1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-03-29T15:28:41+00:00"
- },
- {
- "name": "symfony/var-dumper",
- "version": "v5.2.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/var-dumper.git",
- "reference": "27cb9f7cfa3853c736425c7233a8f68814b19636"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/27cb9f7cfa3853c736425c7233a8f68814b19636",
- "reference": "27cb9f7cfa3853c736425c7233a8f68814b19636",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "^1.15"
- },
- "conflict": {
- "phpunit/phpunit": "<5.4.3",
- "symfony/console": "<4.4"
- },
- "require-dev": {
- "ext-iconv": "*",
- "symfony/console": "^4.4|^5.0",
- "symfony/process": "^4.4|^5.0",
- "twig/twig": "^2.13|^3.0.4"
- },
- "suggest": {
- "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
- "ext-intl": "To show region name in time zone dump",
- "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
- },
- "bin": [
- "Resources/bin/var-dump-server"
- ],
- "type": "library",
- "autoload": {
- "files": [
- "Resources/functions/dump.php"
- ],
- "psr-4": {
- "Symfony\\Component\\VarDumper\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides mechanisms for walking through any arbitrary PHP variable",
- "homepage": "https://symfony.com",
- "keywords": [
- "debug",
- "dump"
- ],
- "support": {
- "source": "https://github.com/symfony/var-dumper/tree/v5.2.7"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-04-19T14:07:32+00:00"
- },
- {
- "name": "tecnickcom/tcpdf",
- "version": "6.4.1",
- "source": {
- "type": "git",
- "url": "https://github.com/tecnickcom/TCPDF.git",
- "reference": "5ba838befdb37ef06a16d9f716f35eb03cb1b329"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/5ba838befdb37ef06a16d9f716f35eb03cb1b329",
- "reference": "5ba838befdb37ef06a16d9f716f35eb03cb1b329",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "config",
- "include",
- "tcpdf.php",
- "tcpdf_parser.php",
- "tcpdf_import.php",
- "tcpdf_barcodes_1d.php",
- "tcpdf_barcodes_2d.php",
- "include/tcpdf_colors.php",
- "include/tcpdf_filters.php",
- "include/tcpdf_font_data.php",
- "include/tcpdf_fonts.php",
- "include/tcpdf_images.php",
- "include/tcpdf_static.php",
- "include/barcodes/datamatrix.php",
- "include/barcodes/pdf417.php",
- "include/barcodes/qrcode.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "LGPL-3.0-only"
- ],
- "authors": [
- {
- "name": "Nicola Asuni",
- "email": "info@tecnick.com",
- "role": "lead"
- }
- ],
- "description": "TCPDF is a PHP class for generating PDF documents and barcodes.",
- "homepage": "http://www.tcpdf.org/",
- "keywords": [
- "PDFD32000-2008",
- "TCPDF",
- "barcodes",
- "datamatrix",
- "pdf",
- "pdf417",
- "qrcode"
- ],
- "support": {
- "issues": "https://github.com/tecnickcom/TCPDF/issues",
- "source": "https://github.com/tecnickcom/TCPDF/tree/6.4.1"
- },
- "funding": [
- {
- "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_donations¤cy_code=GBP&business=paypal@tecnick.com&item_name=donation%20for%20tcpdf%20project",
- "type": "custom"
- }
- ],
- "time": "2021-03-27T16:00:33+00:00"
- },
- {
- "name": "theseer/tokenizer",
- "version": "1.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/theseer/tokenizer.git",
- "reference": "75a63c33a8577608444246075ea0af0d052e452a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
- "reference": "75a63c33a8577608444246075ea0af0d052e452a",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- }
- ],
- "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
- "support": {
- "issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/master"
- },
- "funding": [
- {
- "url": "https://github.com/theseer",
- "type": "github"
- }
- ],
- "time": "2020-07-12T23:59:07+00:00"
- },
- {
- "name": "webmozart/assert",
- "version": "1.10.0",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozarts/assert.git",
- "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
- "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0",
- "symfony/polyfill-ctype": "^1.8"
- },
- "conflict": {
- "phpstan/phpstan": "<0.12.20",
- "vimeo/psalm": "<4.6.1 || 4.6.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5.13"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.10-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Webmozart\\Assert\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Assertions to validate method input/output with nice error messages.",
- "keywords": [
- "assert",
- "check",
- "validate"
- ],
- "support": {
- "issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.10.0"
- },
- "time": "2021-03-09T10:59:23+00:00"
- }
- ],
- "aliases": [],
- "minimum-stability": "stable",
- "stability-flags": [],
- "prefer-stable": false,
- "prefer-lowest": false,
- "platform": {
- "php": "^7.4|^8.0"
- },
- "platform-dev": [],
- "plugin-api-version": "2.1.0"
-}
diff --git a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/docs/assets/example-payment-part.png b/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/docs/assets/example-payment-part.png
deleted file mode 100644
index 29b9114..0000000
Binary files a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/docs/assets/example-payment-part.png and /dev/null differ
diff --git a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/docs/specs/ig-qr-bill-en-v2.2.pdf b/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/docs/specs/ig-qr-bill-en-v2.2.pdf
deleted file mode 100644
index 597c6ed..0000000
--- a/htdocs/core/modules/facture/doc/vendor/sprain/swiss-qr-bill/docs/specs/ig-qr-bill-en-v2.2.pdf
+++ /dev/null
@@ -1,72459 +0,0 @@
-%PDF-1.7
-%
-1 0 obj
-<<
-/Lang (de-CH)
-/MarkInfo <<
-/Marked true
->>
-/Metadata 2 0 R
-/Pages 3 0 R
-/StructTreeRoot 4 0 R
-/Type /Catalog
-/ViewerPreferences 5 0 R
->>
-endobj
-6 0 obj
-<<
-/Author ()
-/CreationDate (D:20210212134426+01'00')
-/Creator ()
-/ModDate (D:20210215124753+01'00')
-/Producer ()
-/Subject (Customer-to-Bank)
-/Title (Swiss Implementation Guidelines QR-bill)
->>
-endobj
-2 0 obj
-<<
-/Length 0
-/Type /Metadata
-/Subtype /XML
->>
-stream
-
-endstream
-endobj
-3 0 obj
-<<
-/Count 77
-/Kids [7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R
-17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R
-27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R
-37 0 R 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R
-47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R
-57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R
-67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R 76 0 R
-77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R]
-/Type /Pages
->>
-endobj
-4 0 obj
-<<
-/K [84 0 R]
-/ParentTree 85 0 R
-/ParentTreeNextKey 341
-/RoleMap 86 0 R
-/Type /StructTreeRoot
->>
-endobj
-5 0 obj
-<<
-/DisplayDocTitle true
->>
-endobj
-7 0 obj
-<<
-/Contents 87 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F3 92 0 R
-/F4 93 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image5 95 0 R
->>
->>
-/Rotate 0
-/StructParents 0
-/Tabs /S
-/Type /Page
->>
-endobj
-8 0 obj
-<<
-/Annots [96 0 R 97 0 R]
-/Contents 98 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F3 92 0 R
-/F5 99 0 R
-/F6 100 0 R
-/F7 101 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 1
-/Tabs /S
-/Type /Page
->>
-endobj
-9 0 obj
-<<
-/Annots [104 0 R]
-/Contents 105 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F3 92 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 4
-/Tabs /S
-/Type /Page
->>
-endobj
-10 0 obj
-<<
-/Annots [106 0 R]
-/Contents 107 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F3 92 0 R
-/F5 99 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 6
-/Tabs /S
-/Type /Page
->>
-endobj
-11 0 obj
-<<
-/Annots [108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R
-118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R
-128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R
-138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R
-148 0 R 149 0 R 150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 155 0 R 156 0 R 157 0 R
-158 0 R 159 0 R 160 0 R 161 0 R 162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R
-168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R]
-/Contents 176 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F3 92 0 R
-/F5 99 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 8
-/Tabs /S
-/Type /Page
->>
-endobj
-12 0 obj
-<<
-/Annots [177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R
-187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R
-197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R
-207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R
-217 0 R 218 0 R 219 0 R]
-/Contents 220 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F2 91 0 R
-/F3 92 0 R
-/F5 99 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 79
-/Tabs /S
-/Type /Page
->>
-endobj
-13 0 obj
-<<
-/Annots [222 0 R]
-/Contents 223 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image237 225 0 R
->>
->>
-/Rotate 0
-/StructParents 121
-/Tabs /S
-/Type /Page
->>
-endobj
-14 0 obj
-<<
-/Annots [226 0 R]
-/Contents 227 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 123
-/Tabs /S
-/Type /Page
->>
-endobj
-15 0 obj
-<<
-/Annots [228 0 R 229 0 R 230 0 R 231 0 R]
-/Contents 232 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 125
-/Tabs /S
-/Type /Page
->>
-endobj
-16 0 obj
-<<
-/Annots [233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R]
-/Contents 239 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 130
-/Tabs /S
-/Type /Page
->>
-endobj
-17 0 obj
-<<
-/Contents 240 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image253 241 0 R
->>
->>
-/Rotate 0
-/StructParents 137
-/Tabs /S
-/Type /Page
->>
-endobj
-18 0 obj
-<<
-/Annots [242 0 R]
-/Contents 243 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image256 244 0 R
->>
->>
-/Rotate 0
-/StructParents 138
-/Tabs /S
-/Type /Page
->>
-endobj
-19 0 obj
-<<
-/Annots [245 0 R 246 0 R 247 0 R]
-/Contents 248 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 140
-/Tabs /S
-/Type /Page
->>
-endobj
-20 0 obj
-<<
-/Annots [249 0 R 250 0 R]
-/Contents 251 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 144
-/Tabs /S
-/Type /Page
->>
-endobj
-21 0 obj
-<<
-/Annots [252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R
-262 0 R 263 0 R 264 0 R]
-/Contents 265 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 147
-/Tabs /S
-/Type /Page
->>
-endobj
-22 0 obj
-<<
-/Contents 266 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 161
-/Tabs /S
-/Type /Page
->>
-endobj
-23 0 obj
-<<
-/Annots [267 0 R]
-/Contents 268 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image281 269 0 R
->>
->>
-/Rotate 0
-/StructParents 162
-/Tabs /S
-/Type /Page
->>
-endobj
-24 0 obj
-<<
-/Annots [270 0 R]
-/Contents 271 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image284 272 0 R
->>
->>
-/Rotate 0
-/StructParents 164
-/Tabs /S
-/Type /Page
->>
-endobj
-25 0 obj
-<<
-/Annots [273 0 R 274 0 R 275 0 R]
-/Contents 276 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 166
-/Tabs /S
-/Type /Page
->>
-endobj
-26 0 obj
-<<
-/Contents 277 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image290 278 0 R
->>
->>
-/Rotate 0
-/StructParents 170
-/Tabs /S
-/Type /Page
->>
-endobj
-27 0 obj
-<<
-/Annots [279 0 R]
-/Contents 280 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image293 281 0 R
->>
->>
-/Rotate 0
-/StructParents 171
-/Tabs /S
-/Type /Page
->>
-endobj
-28 0 obj
-<<
-/Annots [282 0 R 283 0 R]
-/Contents 284 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 173
-/Tabs /S
-/Type /Page
->>
-endobj
-29 0 obj
-<<
-/Annots [285 0 R]
-/Contents 286 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image299 287 0 R
->>
->>
-/Rotate 0
-/StructParents 176
-/Tabs /S
-/Type /Page
->>
-endobj
-30 0 obj
-<<
-/Contents 288 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F12 289 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image306 290 0 R
->>
->>
-/Rotate 0
-/StructParents 178
-/Tabs /S
-/Type /Page
->>
-endobj
-31 0 obj
-<<
-/Annots [291 0 R 292 0 R 293 0 R 294 0 R]
-/Contents 295 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 179
-/Tabs /S
-/Type /Page
->>
-endobj
-32 0 obj
-<<
-/Annots [296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R]
-/Contents 303 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 184
-/Tabs /S
-/Type /Page
->>
-endobj
-33 0 obj
-<<
-/Contents 304 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 192
-/Tabs /S
-/Type /Page
->>
-endobj
-34 0 obj
-<<
-/Contents 305 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 193
-/Tabs /S
-/Type /Page
->>
-endobj
-35 0 obj
-<<
-/Contents 306 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 194
-/Tabs /S
-/Type /Page
->>
-endobj
-36 0 obj
-<<
-/Contents 307 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 195
-/Tabs /S
-/Type /Page
->>
-endobj
-37 0 obj
-<<
-/Contents 308 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 196
-/Tabs /S
-/Type /Page
->>
-endobj
-38 0 obj
-<<
-/Contents 309 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 197
-/Tabs /S
-/Type /Page
->>
-endobj
-39 0 obj
-<<
-/Contents 310 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 198
-/Tabs /S
-/Type /Page
->>
-endobj
-40 0 obj
-<<
-/Contents 311 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 199
-/Tabs /S
-/Type /Page
->>
-endobj
-41 0 obj
-<<
-/Annots [312 0 R]
-/Contents 313 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 200
-/Tabs /S
-/Type /Page
->>
-endobj
-42 0 obj
-<<
-/Annots [314 0 R 315 0 R 316 0 R]
-/Contents 317 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 202
-/Tabs /S
-/Type /Page
->>
-endobj
-43 0 obj
-<<
-/Annots [318 0 R 319 0 R 320 0 R]
-/Contents 321 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 206
-/Tabs /S
-/Type /Page
->>
-endobj
-44 0 obj
-<<
-/Contents 322 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image339 323 0 R
->>
->>
-/Rotate 0
-/StructParents 210
-/Tabs /S
-/Type /Page
->>
-endobj
-45 0 obj
-<<
-/Contents 324 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image341 325 0 R
->>
->>
-/Rotate 0
-/StructParents 211
-/Tabs /S
-/Type /Page
->>
-endobj
-46 0 obj
-<<
-/Annots [326 0 R 327 0 R 328 0 R]
-/Contents 329 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image346 330 0 R
->>
->>
-/Rotate 0
-/StructParents 212
-/Tabs /S
-/Type /Page
->>
-endobj
-47 0 obj
-<<
-/Annots [331 0 R 332 0 R 333 0 R]
-/Contents 334 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 216
-/Tabs /S
-/Type /Page
->>
-endobj
-48 0 obj
-<<
-/Annots [335 0 R]
-/Contents 336 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F11 224 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 220
-/Tabs /S
-/Type /Page
->>
-endobj
-49 0 obj
-<<
-/Annots [337 0 R]
-/Contents 338 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image355 339 0 R
->>
->>
-/Rotate 0
-/StructParents 222
-/Tabs /S
-/Type /Page
->>
-endobj
-50 0 obj
-<<
-/Annots [340 0 R 341 0 R]
-/Contents 342 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image357 343 0 R
->>
->>
-/Rotate 0
-/StructParents 224
-/Tabs /S
-/Type /Page
->>
-endobj
-51 0 obj
-<<
-/Annots [344 0 R 345 0 R]
-/Contents 346 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image363 347 0 R
->>
->>
-/Rotate 0
-/StructParents 227
-/Tabs /S
-/Type /Page
->>
-endobj
-52 0 obj
-<<
-/Annots [348 0 R 349 0 R]
-/Contents 350 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 230
-/Tabs /S
-/Type /Page
->>
-endobj
-53 0 obj
-<<
-/Contents 351 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image368 352 0 R
->>
->>
-/Rotate 0
-/StructParents 233
-/Tabs /S
-/Type /Page
->>
-endobj
-54 0 obj
-<<
-/Annots [353 0 R 354 0 R]
-/Contents 355 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 234
-/Tabs /S
-/Type /Page
->>
-endobj
-55 0 obj
-<<
-/Annots [356 0 R 357 0 R 358 0 R 359 0 R]
-/Contents 360 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image377 361 0 R
->>
->>
-/Rotate 0
-/StructParents 237
-/Tabs /S
-/Type /Page
->>
-endobj
-56 0 obj
-<<
-/Annots [362 0 R 363 0 R]
-/Contents 364 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 242
-/Tabs /S
-/Type /Page
->>
-endobj
-57 0 obj
-<<
-/Annots [365 0 R 366 0 R]
-/Contents 367 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image384 368 0 R
->>
->>
-/Rotate 0
-/StructParents 245
-/Tabs /S
-/Type /Page
->>
-endobj
-58 0 obj
-<<
-/Annots [369 0 R 370 0 R]
-/Contents 371 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image388 372 0 R
->>
->>
-/Rotate 0
-/StructParents 248
-/Tabs /S
-/Type /Page
->>
-endobj
-59 0 obj
-<<
-/Contents 373 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image390 374 0 R
->>
->>
-/Rotate 0
-/StructParents 251
-/Tabs /S
-/Type /Page
->>
-endobj
-60 0 obj
-<<
-/Contents 375 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F13 376 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image394 377 0 R
->>
->>
-/Rotate 0
-/StructParents 252
-/Tabs /S
-/Type /Page
->>
-endobj
-61 0 obj
-<<
-/Contents 378 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F14 379 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image401 380 0 R
->>
->>
-/Rotate 0
-/StructParents 253
-/Tabs /S
-/Type /Page
->>
-endobj
-62 0 obj
-<<
-/Contents 381 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F14 379 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image403 382 0 R
->>
->>
-/Rotate 0
-/StructParents 254
-/Tabs /S
-/Type /Page
->>
-endobj
-63 0 obj
-<<
-/Contents 383 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F14 379 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
-/Image405 384 0 R
->>
->>
-/Rotate 0
-/StructParents 255
-/Tabs /S
-/Type /Page
->>
-endobj
-64 0 obj
-<<
-/Contents 385 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 256
-/Tabs /S
-/Type /Page
->>
-endobj
-65 0 obj
-<<
-/Annots [386 0 R]
-/Contents 387 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 257
-/Tabs /S
-/Type /Page
->>
-endobj
-66 0 obj
-<<
-/Annots [388 0 R 389 0 R 390 0 R]
-/Contents 391 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F11 224 0 R
-/F14 379 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 259
-/Tabs /S
-/Type /Page
->>
-endobj
-67 0 obj
-<<
-/Annots [392 0 R 393 0 R 394 0 R]
-/Contents 395 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F14 379 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 263
-/Tabs /S
-/Type /Page
->>
-endobj
-68 0 obj
-<<
-/Annots [396 0 R 397 0 R 398 0 R]
-/Contents 399 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F11 224 0 R
-/F14 379 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 267
-/Tabs /S
-/Type /Page
->>
-endobj
-69 0 obj
-<<
-/Contents 400 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F14 379 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 271
-/Tabs /S
-/Type /Page
->>
-endobj
-70 0 obj
-<<
-/Contents 401 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F14 379 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 272
-/Tabs /S
-/Type /Page
->>
-endobj
-71 0 obj
-<<
-/Contents 402 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 273
-/Tabs /S
-/Type /Page
->>
-endobj
-72 0 obj
-<<
-/Contents 403 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 274
-/Tabs /S
-/Type /Page
->>
-endobj
-73 0 obj
-<<
-/Contents 404 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
-/F8 102 0 R
-/F9 103 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 275
-/Tabs /S
-/Type /Page
->>
-endobj
-74 0 obj
-<<
-/Contents 405 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 276
-/Tabs /S
-/Type /Page
->>
-endobj
-75 0 obj
-<<
-/Contents 406 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 277
-/Tabs /S
-/Type /Page
->>
-endobj
-76 0 obj
-<<
-/Contents 407 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 278
-/Tabs /S
-/Type /Page
->>
-endobj
-77 0 obj
-<<
-/Contents 408 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 279
-/Tabs /S
-/Type /Page
->>
-endobj
-78 0 obj
-<<
-/Contents 409 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 280
-/Tabs /S
-/Type /Page
->>
-endobj
-79 0 obj
-<<
-/Contents 410 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 281
-/Tabs /S
-/Type /Page
->>
-endobj
-80 0 obj
-<<
-/Contents 411 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 282
-/Tabs /S
-/Type /Page
->>
-endobj
-81 0 obj
-<<
-/Contents 412 0 R
-/CropBox [0 0 842.04 595.32]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 842.04 595.32]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F5 99 0 R
-/F6 100 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 283
-/Tabs /S
-/Type /Page
->>
-endobj
-82 0 obj
-<<
-/Annots [413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R
-423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R
-433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R]
-/Contents 443 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F10 221 0 R
-/F2 91 0 R
-/F3 92 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 284
-/Tabs /S
-/Type /Page
->>
-endobj
-83 0 obj
-<<
-/Annots [444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R
-454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R 463 0 R
-464 0 R 465 0 R 466 0 R 467 0 R 468 0 R]
-/Contents 469 0 R
-/CropBox [0 0 595.32 842.04]
-/Group <<
-/CS /DeviceRGB
-/S /Transparency
-/Type /Group
->>
-/MediaBox [0 0 595.32 842.04]
-/Parent 3 0 R
-/Resources <<
-/ExtGState <<
-/GS6 88 0 R
-/GS9 89 0 R
->>
-/Font <<
-/F1 90 0 R
-/F2 91 0 R
-/F3 92 0 R
-/F5 99 0 R
->>
-/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/XObject <<
-/Image15 94 0 R
->>
->>
-/Rotate 0
-/StructParents 315
-/Tabs /S
-/Type /Page
->>
-endobj
-84 0 obj
-<<
-/K [470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R
-480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R
-490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R
-500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R
-510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R
-520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R
-530 0 R 531 0 R 532 0 R 533 0 R 534 0 R 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R
-540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R
-550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R 556 0 R 557 0 R 558 0 R 559 0 R
-560 0 R 561 0 R 562 0 R 563 0 R 564 0 R 565 0 R 566 0 R 567 0 R 568 0 R 569 0 R
-570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R 577 0 R 578 0 R 579 0 R
-580 0 R 581 0 R 582 0 R 583 0 R 584 0 R 585 0 R 586 0 R 587 0 R 588 0 R 589 0 R
-590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R 597 0 R 598 0 R 599 0 R
-600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R 608 0 R 609 0 R
-610 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R 618 0 R 619 0 R
-620 0 R 621 0 R 622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 628 0 R 629 0 R
-630 0 R 631 0 R 632 0 R 633 0 R 634 0 R 635 0 R 636 0 R 637 0 R 638 0 R 639 0 R
-640 0 R 641 0 R 642 0 R 643 0 R 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R
-650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R 656 0 R 657 0 R 658 0 R 659 0 R
-660 0 R 661 0 R 662 0 R 663 0 R 664 0 R 665 0 R 666 0 R 667 0 R 668 0 R 669 0 R
-670 0 R 671 0 R 672 0 R 673 0 R 674 0 R 675 0 R 676 0 R 677 0 R 678 0 R 679 0 R
-680 0 R 681 0 R 682 0 R 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 688 0 R 689 0 R
-690 0 R 691 0 R 692 0 R 693 0 R 694 0 R 695 0 R 696 0 R 697 0 R 698 0 R 699 0 R
-700 0 R 701 0 R 702 0 R 703 0 R 704 0 R 705 0 R 706 0 R 707 0 R 708 0 R 709 0 R
-710 0 R 711 0 R 712 0 R 713 0 R 714 0 R 715 0 R 716 0 R 717 0 R 718 0 R 719 0 R
-720 0 R 721 0 R 722 0 R 723 0 R 724 0 R 725 0 R 726 0 R 727 0 R 728 0 R 729 0 R
-730 0 R 731 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R 737 0 R 738 0 R 739 0 R
-740 0 R 741 0 R 742 0 R 743 0 R 744 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R
-750 0 R 751 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 757 0 R 758 0 R 759 0 R
-760 0 R 761 0 R 762 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R
-770 0 R 771 0 R 772 0 R 773 0 R 774 0 R 775 0 R 776 0 R 777 0 R 778 0 R 779 0 R
-780 0 R 781 0 R 782 0 R 783 0 R 784 0 R 785 0 R 786 0 R 787 0 R 788 0 R 789 0 R
-790 0 R 791 0 R 792 0 R 793 0 R 794 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R
-800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 806 0 R 807 0 R 808 0 R 809 0 R
-810 0 R 811 0 R 812 0 R 813 0 R 814 0 R 815 0 R 816 0 R 817 0 R 818 0 R 819 0 R
-820 0 R 821 0 R 822 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R 828 0 R 829 0 R
-830 0 R 831 0 R 832 0 R 833 0 R 834 0 R 835 0 R 836 0 R 837 0 R 838 0 R 839 0 R
-840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R
-850 0 R 851 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 857 0 R 858 0 R 859 0 R
-860 0 R 861 0 R 862 0 R 863 0 R 864 0 R 865 0 R 866 0 R 867 0 R 868 0 R 869 0 R
-870 0 R 871 0 R 872 0 R 873 0 R 874 0 R 875 0 R 876 0 R 877 0 R 878 0 R 879 0 R
-880 0 R 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R 886 0 R 887 0 R 888 0 R 889 0 R
-890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R 896 0 R 897 0 R 898 0 R 899 0 R
-900 0 R 901 0 R 902 0 R 903 0 R 904 0 R 905 0 R 906 0 R 907 0 R 908 0 R 909 0 R
-910 0 R 911 0 R 912 0 R 913 0 R 914 0 R 915 0 R 916 0 R 917 0 R 918 0 R 919 0 R
-920 0 R 921 0 R 922 0 R 923 0 R 924 0 R 925 0 R 926 0 R 927 0 R 928 0 R 929 0 R
-930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R 937 0 R 938 0 R 939 0 R
-940 0 R 941 0 R 942 0 R 943 0 R 944 0 R 945 0 R 946 0 R 947 0 R 948 0 R 949 0 R
-950 0 R 951 0 R 952 0 R 953 0 R 954 0 R 955 0 R 956 0 R 957 0 R 958 0 R 959 0 R
-960 0 R 961 0 R 962 0 R 963 0 R 964 0 R 965 0 R 966 0 R 967 0 R 968 0 R 969 0 R
-970 0 R 971 0 R 972 0 R 973 0 R 974 0 R 975 0 R 976 0 R 977 0 R 978 0 R 979 0 R
-980 0 R 981 0 R 982 0 R 983 0 R 984 0 R 985 0 R 986 0 R 987 0 R 988 0 R 989 0 R
-990 0 R 991 0 R 992 0 R 993 0 R 994 0 R 995 0 R 996 0 R 997 0 R 998 0 R 999 0 R
-1000 0 R 1001 0 R 1002 0 R 1003 0 R 1004 0 R 1005 0 R 1006 0 R 1007 0 R 1008 0 R 1009 0 R
-1010 0 R 1011 0 R 1012 0 R 1013 0 R 1014 0 R 1015 0 R 1016 0 R 1017 0 R 1018 0 R 1019 0 R
-1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 1026 0 R 1027 0 R 1028 0 R 1029 0 R
-1030 0 R 1031 0 R 1032 0 R 1033 0 R 1034 0 R 1035 0 R 1036 0 R 1037 0 R 1038 0 R 1039 0 R
-1040 0 R 1041 0 R 1042 0 R 1043 0 R 1044 0 R 1045 0 R 1046 0 R 1047 0 R 1048 0 R 1049 0 R
-1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R 1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R
-1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R 1065 0 R 1066 0 R 1067 0 R 1068 0 R 1069 0 R
-1070 0 R 1071 0 R 1072 0 R 1073 0 R 1074 0 R 1075 0 R 1076 0 R 1077 0 R 1078 0 R 1079 0 R
-1080 0 R 1081 0 R 1082 0 R 1083 0 R 1084 0 R 1085 0 R 1086 0 R 1087 0 R 1088 0 R 1089 0 R
-1090 0 R 1091 0 R 1092 0 R 1093 0 R 1094 0 R 1095 0 R 1096 0 R 1097 0 R 1098 0 R 1099 0 R
-1100 0 R 1101 0 R 1102 0 R 1103 0 R 1104 0 R 1105 0 R 1106 0 R 1107 0 R 1108 0 R 1109 0 R
-1110 0 R 1111 0 R 1112 0 R 1113 0 R 1114 0 R 1115 0 R 1116 0 R 1117 0 R 1118 0 R 1119 0 R
-1120 0 R 1121 0 R 1122 0 R 1123 0 R 1124 0 R 1125 0 R 1126 0 R 1127 0 R 1128 0 R 1129 0 R
-1130 0 R]
-/P 4 0 R
-/S /Document
-/Type /StructElem
->>
-endobj
-85 0 obj
-<<
-/Nums [0 [470 0 R 471 0 R 472 0 R 473 0 R]
- 1 [474 0 R 1131 0 R 1132 0 R 1133 0 R 476 0 R 477 0 R 478 0 R 1134 0 R 1135 0 R 1136 0 R
-480 0 R 1137 0 R 1138 0 R 1139 0 R 1140 0 R 1141 0 R 1142 0 R 1143 0 R 1143 0 R 1143 0 R
-1144 0 R 1145 0 R 1146 0 R 1147 0 R 1147 0 R 1147 0 R 1148 0 R 1149 0 R 1150 0 R 1151 0 R
-1152 0 R 1152 0 R 1153 0 R 1154 0 R 1155 0 R 1156 0 R 1157 0 R 482 0 R 483 0 R 484 0 R
-1158 0 R 1159 0 R 1160 0 R 1161 0 R 486 0 R 487 0 R 488 0 R 489 0 R]
- 2 1162 0 R 3 1163 0 R 4 [490 0 R 491 0 R 492 0 R 493 0 R 1164 0 R 1165 0 R 1166 0 R 495 0 R]
-5 1167 0 R 6 [496 0 R 497 0 R 498 0 R 499 0 R 1168 0 R 1169 0 R 1170 0 R 1171 0 R 1172 0 R 1173 0 R
-1174 0 R 501 0 R 502 0 R 1175 0 R 1176 0 R 1177 0 R 1178 0 R 504 0 R 505 0 R 506 0 R
-1179 0 R 1180 0 R 1181 0 R 1182 0 R]
- 7 1183 0 R 8 [509 0 R 1184 0 R 1185 0 R 1186 0 R 1187 0 R 1188 0 R 1189 0 R 1190 0 R 1191 0 R 1192 0 R
-1193 0 R 1194 0 R 1195 0 R 1196 0 R 1197 0 R 1198 0 R 1199 0 R 1200 0 R 1201 0 R 1202 0 R
-1203 0 R 1204 0 R 1205 0 R 1206 0 R 1207 0 R 1208 0 R 1209 0 R 1210 0 R 1211 0 R 1212 0 R
-1213 0 R 1214 0 R 1215 0 R 1216 0 R 1217 0 R 1218 0 R 1219 0 R 1220 0 R 1221 0 R 1222 0 R
-1223 0 R 1224 0 R 1225 0 R 1226 0 R 1227 0 R 1228 0 R 1229 0 R 1230 0 R 1231 0 R 1232 0 R
-1233 0 R 1234 0 R 1235 0 R 1236 0 R 1237 0 R 1238 0 R 1239 0 R 1240 0 R 1241 0 R 1242 0 R
-1243 0 R 1244 0 R 1245 0 R 1246 0 R 1247 0 R 1248 0 R 1249 0 R 1250 0 R 1251 0 R 1252 0 R
-1253 0 R 1254 0 R 1255 0 R 1256 0 R 1257 0 R 1258 0 R 1259 0 R 1260 0 R 1261 0 R 1262 0 R
-1263 0 R 1264 0 R 1265 0 R 1266 0 R 1267 0 R 1268 0 R 1269 0 R 1270 0 R 1271 0 R 1272 0 R
-1273 0 R 1274 0 R 1275 0 R 1276 0 R 1277 0 R 1278 0 R 1279 0 R 1280 0 R 1281 0 R 1282 0 R
-1283 0 R 1284 0 R 1285 0 R 1286 0 R 1287 0 R 1288 0 R 1289 0 R 1290 0 R 1291 0 R 1292 0 R
-1293 0 R 1294 0 R 1295 0 R 1296 0 R 1297 0 R 1298 0 R 1299 0 R 1300 0 R 1301 0 R 1302 0 R
-1303 0 R 1304 0 R 1305 0 R 1306 0 R 1307 0 R 1308 0 R 1309 0 R 1310 0 R 1311 0 R 1312 0 R
-1313 0 R 1314 0 R 1315 0 R 1316 0 R 1317 0 R 1318 0 R 1319 0 R 1320 0 R 1321 0 R 1322 0 R
-1323 0 R 1324 0 R 1325 0 R 1326 0 R 1327 0 R 1328 0 R 1329 0 R 1330 0 R 1331 0 R 1332 0 R
-1333 0 R 1334 0 R 1335 0 R 1336 0 R 1337 0 R 1338 0 R 1339 0 R 1340 0 R 1341 0 R 1342 0 R
-1343 0 R 1344 0 R 1345 0 R 1346 0 R 1347 0 R 1348 0 R 1349 0 R 1350 0 R 1351 0 R 1352 0 R
-1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R 1358 0 R 1359 0 R 1360 0 R 1361 0 R 1362 0 R
-1363 0 R 1364 0 R 1365 0 R 1366 0 R 1367 0 R 1368 0 R 1369 0 R 1370 0 R]
- 9 1371 0 R
-10 1372 0 R 11 1372 0 R 12 1373 0 R 13 1373 0 R 14 1374 0 R
-15 1374 0 R 16 1375 0 R 17 1375 0 R 18 1376 0 R 19 1377 0 R
-20 1377 0 R 21 1378 0 R 22 1378 0 R 23 1379 0 R 24 1379 0 R
-25 1380 0 R 26 1380 0 R 27 1381 0 R 28 1381 0 R 29 1382 0 R
-30 1382 0 R 31 1383 0 R 32 1383 0 R 33 1384 0 R 34 1384 0 R
-35 1385 0 R 36 1385 0 R 37 1386 0 R 38 1386 0 R 39 1387 0 R
-40 1387 0 R 41 1388 0 R 42 1388 0 R 43 1389 0 R 44 1390 0 R
-45 1391 0 R 46 1392 0 R 47 1392 0 R 48 1393 0 R 49 1393 0 R
-50 1394 0 R 51 1394 0 R 52 1395 0 R 53 1395 0 R 54 1396 0 R
-55 1396 0 R 56 1397 0 R 57 1398 0 R 58 1399 0 R 59 1400 0 R
-60 1401 0 R 61 1402 0 R 62 1402 0 R 63 1403 0 R 64 1404 0 R
-65 1405 0 R 66 1406 0 R 67 1407 0 R 68 1407 0 R 69 1408 0 R
-70 1409 0 R 71 1409 0 R 72 1410 0 R 73 1411 0 R 74 1412 0 R
-75 1413 0 R 76 1414 0 R 77 1415 0 R 78 1415 0 R 79 [1416 0 R 1417 0 R 1418 0 R 1419 0 R 1420 0 R 1421 0 R 1422 0 R 1423 0 R 1424 0 R 1425 0 R
-1426 0 R 1427 0 R 1428 0 R 1429 0 R 1430 0 R 1431 0 R 1432 0 R 1433 0 R 1434 0 R 1435 0 R
-1436 0 R 1437 0 R 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 1445 0 R
-1446 0 R 1447 0 R 1448 0 R 1449 0 R 1450 0 R 1451 0 R 1452 0 R 1453 0 R 1454 0 R 1455 0 R
-1456 0 R 1457 0 R 1458 0 R 1459 0 R 1460 0 R 1461 0 R 1462 0 R 1463 0 R 1464 0 R 1465 0 R
-1466 0 R 1467 0 R 1468 0 R 1469 0 R 1470 0 R 1471 0 R 1472 0 R 1473 0 R 1474 0 R 1475 0 R
-1476 0 R 1477 0 R 1478 0 R 1479 0 R 1480 0 R 1481 0 R 1482 0 R 1483 0 R 1484 0 R 1485 0 R
-1486 0 R 1487 0 R 1488 0 R 1489 0 R 1490 0 R 1491 0 R 1492 0 R 1493 0 R 1494 0 R 1495 0 R
-1496 0 R 1497 0 R 1498 0 R 1499 0 R 1500 0 R 1501 0 R 1502 0 R 1503 0 R 1504 0 R 1505 0 R
-1506 0 R 1507 0 R 1508 0 R 1509 0 R 1510 0 R 1511 0 R 1512 0 R 1513 0 R 1514 0 R 1515 0 R
-1516 0 R 1517 0 R 1518 0 R 1519 0 R 1520 0 R 1521 0 R 1522 0 R 1523 0 R 1524 0 R 1525 0 R
-1526 0 R 1527 0 R 1528 0 R 1529 0 R 1530 0 R 1531 0 R 1532 0 R 1533 0 R 1534 0 R 1535 0 R]
-80 1536 0 R 81 1537 0 R 82 1538 0 R 83 1538 0 R 84 1539 0 R
-85 1540 0 R 86 1541 0 R 87 1542 0 R 88 1543 0 R 89 1543 0 R
-90 1544 0 R 91 1545 0 R 92 1545 0 R 93 1546 0 R 94 1546 0 R
-95 1547 0 R 96 1547 0 R 97 1548 0 R 98 1548 0 R 99 1549 0 R
-100 1550 0 R 101 1551 0 R 102 1552 0 R 103 1552 0 R 104 1553 0 R
-105 1553 0 R 106 1554 0 R 107 1555 0 R 108 1555 0 R 109 1556 0 R
-110 1556 0 R 111 1557 0 R 112 1557 0 R 113 1558 0 R 114 1559 0 R
-115 1560 0 R 116 1561 0 R 117 1562 0 R 118 1562 0 R 119 1563 0 R
-120 1564 0 R 121 [1565 0 R 1566 0 R 1567 0 R 512 0 R 513 0 R 1568 0 R 1569 0 R 1570 0 R 515 0 R 516 0 R
-517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 524 0 R 525 0 R 523 0 R]
- 122 1571 0 R 123 [526 0 R 527 0 R 1572 0 R 1573 0 R 1574 0 R 1575 0 R 1576 0 R 529 0 R 530 0 R 531 0 R
-1577 0 R 1578 0 R 1579 0 R 1580 0 R 533 0 R 1581 0 R 1582 0 R 1583 0 R 535 0 R]
- 124 1584 0 R
-125 [536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 1585 0 R 1586 0 R
-1587 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 1588 0 R 1589 0 R 1590 0 R 1591 0 R
-1592 0 R 551 0 R 552 0 R 1593 0 R 1593 0 R 1594 0 R 1594 0 R 1595 0 R 1595 0 R 1596 0 R
-1596 0 R 1597 0 R 1598 0 R 1599 0 R 1600 0 R 1601 0 R 1602 0 R 1603 0 R 1604 0 R 1605 0 R
-1606 0 R 1607 0 R 1608 0 R 1609 0 R 1610 0 R 1611 0 R 1612 0 R 1613 0 R 1614 0 R 1615 0 R
-1616 0 R 1617 0 R 1618 0 R 1619 0 R 1620 0 R 1621 0 R 1622 0 R 1623 0 R 1624 0 R 1625 0 R
-1626 0 R 1627 0 R 1628 0 R 554 0 R 554 0 R 555 0 R]
- 126 1629 0 R 127 1630 0 R 128 1631 0 R 129 1631 0 R
-130 [1632 0 R 1632 0 R 1633 0 R 1633 0 R 1634 0 R 1635 0 R 1636 0 R 1637 0 R 1638 0 R 1639 0 R
-1640 0 R 1641 0 R 1642 0 R 1643 0 R 1644 0 R 1645 0 R 1646 0 R 1647 0 R 1648 0 R 1649 0 R
-557 0 R 558 0 R]
- 131 1650 0 R 132 1651 0 R 133 1652 0 R 134 1653 0 R
-135 1654 0 R 136 1655 0 R 137 [1656 0 R 1657 0 R 1658 0 R 560 0 R 561 0 R 562 0 R 563 0 R 1659 0 R 1660 0 R 565 0 R
-566 0 R 567 0 R 569 0 R 570 0 R 571 0 R 572 0 R 573 0 R 574 0 R 575 0 R 576 0 R
-577 0 R 578 0 R 568 0 R]
- 138 [579 0 R 580 0 R 581 0 R 1661 0 R 1662 0 R 1663 0 R 583 0 R 584 0 R 585 0 R 586 0 R
-587 0 R 588 0 R 589 0 R 590 0 R 591 0 R 592 0 R 593 0 R 594 0 R 595 0 R 596 0 R
-597 0 R 599 0 R 598 0 R]
- 139 1664 0 R
-140 [600 0 R 601 0 R 602 0 R 603 0 R 604 0 R 605 0 R 606 0 R 607 0 R 608 0 R 609 0 R
-1665 0 R 1666 0 R 1667 0 R 611 0 R 612 0 R 613 0 R 614 0 R 615 0 R 616 0 R 617 0 R
-618 0 R 619 0 R 1668 0 R 1669 0 R 1670 0 R 1671 0 R 1672 0 R 1673 0 R]
- 141 1674 0 R 142 1675 0 R 143 1676 0 R 144 [622 0 R 623 0 R 624 0 R 625 0 R 626 0 R 627 0 R 1677 0 R 1678 0 R 1679 0 R 1680 0 R
-1681 0 R 629 0 R 630 0 R 631 0 R 632 0 R 633 0 R]
-145 1682 0 R 146 1683 0 R 147 [1684 0 R 1685 0 R 1686 0 R 635 0 R 636 0 R 637 0 R 638 0 R 1687 0 R 1688 0 R 1689 0 R
-640 0 R 1690 0 R 1691 0 R 1692 0 R 1693 0 R 1694 0 R 1695 0 R 1696 0 R 1697 0 R 1698 0 R
-1699 0 R 1700 0 R 1701 0 R 1702 0 R 1703 0 R 1704 0 R 1705 0 R 1706 0 R 1707 0 R 1708 0 R
-1709 0 R 1710 0 R 1711 0 R 1712 0 R 1713 0 R 1714 0 R 1715 0 R 1716 0 R 1717 0 R 1718 0 R
-1719 0 R 1720 0 R 1721 0 R 1722 0 R 642 0 R 643 0 R 644 0 R 1723 0 R 1724 0 R 1725 0 R]
- 148 1726 0 R 149 1727 0 R
-150 1727 0 R 151 1728 0 R 152 1729 0 R 153 1730 0 R 154 1731 0 R
-155 1732 0 R 156 1733 0 R 157 1734 0 R 158 1735 0 R 159 1736 0 R
-160 1737 0 R 161 [646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R
-656 0 R 657 0 R 658 0 R 659 0 R]
- 162 [660 0 R 661 0 R 662 0 R 663 0 R 665 0 R 1738 0 R 1739 0 R 1740 0 R 667 0 R 668 0 R
-669 0 R 670 0 R 671 0 R 672 0 R 673 0 R 674 0 R 675 0 R 676 0 R 677 0 R 678 0 R
-679 0 R 664 0 R]
- 163 1741 0 R 164 [1742 0 R 1743 0 R 1744 0 R 681 0 R 683 0 R 684 0 R 685 0 R 686 0 R 687 0 R 688 0 R
-1745 0 R 1745 0 R 1746 0 R 1746 0 R 1747 0 R 1748 0 R 1749 0 R 1750 0 R 1751 0 R 682 0 R]
-165 1752 0 R 166 [1753 0 R 1753 0 R 1754 0 R 1754 0 R 1755 0 R 1756 0 R 1757 0 R 1758 0 R 1759 0 R 1760 0 R
-1761 0 R 1762 0 R 1763 0 R 1764 0 R 1765 0 R 1766 0 R 1767 0 R 1768 0 R 1769 0 R 691 0 R
-692 0 R 1770 0 R 1771 0 R 1772 0 R]
- 167 1773 0 R 168 1774 0 R 169 1775 0 R
-170 [694 0 R 696 0 R 697 0 R 698 0 R 699 0 R 700 0 R 701 0 R 702 0 R 703 0 R 704 0 R
-705 0 R 706 0 R 695 0 R]
- 171 [707 0 R 708 0 R 709 0 R 1776 0 R 1777 0 R 1778 0 R 711 0 R 713 0 R 714 0 R 715 0 R
-716 0 R 717 0 R 718 0 R 719 0 R 720 0 R 721 0 R 722 0 R 712 0 R]
- 172 1779 0 R 173 [1780 0 R 1780 0 R 1781 0 R 1781 0 R 1782 0 R 1783 0 R 1784 0 R 1785 0 R 1786 0 R 1787 0 R
-1788 0 R 1789 0 R 1790 0 R 1791 0 R 1792 0 R 1793 0 R 1794 0 R 1795 0 R 1796 0 R 1797 0 R
-1798 0 R 724 0 R 725 0 R 1799 0 R 1800 0 R 1801 0 R]
- 174 1802 0 R
-175 1803 0 R 176 [727 0 R 729 0 R 730 0 R 1804 0 R 1805 0 R 732 0 R 733 0 R 734 0 R 735 0 R 736 0 R
-737 0 R 1806 0 R 1807 0 R 1808 0 R 739 0 R 728 0 R]
- 177 1809 0 R 178 [740 0 R 741 0 R 742 0 R 743 0 R 745 0 R 746 0 R 747 0 R 748 0 R 749 0 R 750 0 R
-744 0 R]
- 179 [1810 0 R 1811 0 R 1812 0 R 752 0 R 753 0 R 754 0 R 755 0 R 756 0 R 1813 0 R 1814 0 R
-1815 0 R 758 0 R 759 0 R 760 0 R 1816 0 R 1817 0 R 1818 0 R 1819 0 R 1820 0 R 1821 0 R
-1821 0 R 1822 0 R 1822 0 R 1823 0 R 1824 0 R 1825 0 R 1826 0 R 1827 0 R 1828 0 R 1829 0 R
-1830 0 R 1831 0 R 1832 0 R 763 0 R 764 0 R 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R
-770 0 R 771 0 R 772 0 R 773 0 R 774 0 R]
-180 1833 0 R 181 1834 0 R 182 1835 0 R 183 1836 0 R 184 [775 0 R 776 0 R 1837 0 R 1838 0 R 1839 0 R 1840 0 R 1841 0 R 1842 0 R 778 0 R 779 0 R
-780 0 R 781 0 R 782 0 R 1843 0 R 1844 0 R 1845 0 R 1846 0 R 784 0 R 785 0 R 786 0 R
-787 0 R 1847 0 R 1848 0 R 1849 0 R 1850 0 R 1851 0 R 1852 0 R 1853 0 R 1854 0 R 1855 0 R
-1856 0 R 1857 0 R 1858 0 R 1859 0 R 1860 0 R 790 0 R 791 0 R 792 0 R 1861 0 R 1861 0 R
-1862 0 R 1862 0 R 1863 0 R 1863 0 R 1864 0 R 1865 0 R 1866 0 R 1867 0 R 1868 0 R 1869 0 R
-1870 0 R 1871 0 R]
-185 1872 0 R 186 1873 0 R 187 1874 0 R 188 1875 0 R 189 1876 0 R
-190 1877 0 R 191 1878 0 R 192 [1879 0 R 1879 0 R 1880 0 R 1880 0 R 1881 0 R 1881 0 R 1882 0 R 1883 0 R 1884 0 R 1885 0 R
-1886 0 R 1887 0 R 1888 0 R 1889 0 R 1890 0 R 795 0 R 796 0 R 797 0 R 798 0 R 799 0 R
-800 0 R 801 0 R 802 0 R 803 0 R 804 0 R 805 0 R 1891 0 R 1891 0 R 1892 0 R 1892 0 R
-1893 0 R 1893 0 R 807 0 R 808 0 R]
- 193 [809 0 R 810 0 R 1894 0 R 1894 0 R 1895 0 R 1895 0 R 1896 0 R 1896 0 R 1897 0 R 1897 0 R
-1898 0 R 1898 0 R 1899 0 R 1899 0 R 1900 0 R 1900 0 R 1901 0 R 1901 0 R 1902 0 R 1902 0 R
-1903 0 R 1903 0 R 1904 0 R 1904 0 R 1905 0 R 1905 0 R 1906 0 R 1906 0 R 1907 0 R 1907 0 R
-1908 0 R 1908 0 R 1909 0 R 1909 0 R 1910 0 R 1910 0 R 1911 0 R 1911 0 R 1912 0 R 1912 0 R
-1913 0 R 1913 0 R 1914 0 R 1914 0 R 1915 0 R 1915 0 R 1916 0 R 1916 0 R 1917 0 R 1917 0 R
-1918 0 R 1918 0 R 1919 0 R 1919 0 R 1920 0 R 1920 0 R 1921 0 R 1921 0 R 1922 0 R 1922 0 R
-1923 0 R 1923 0 R 1924 0 R 1924 0 R 1925 0 R 1925 0 R 1926 0 R 1926 0 R 1927 0 R 1927 0 R
-1928 0 R 1928 0 R 1929 0 R 1929 0 R 1930 0 R 1930 0 R 1931 0 R 1931 0 R 1932 0 R 1932 0 R
-1933 0 R 1933 0 R 1934 0 R 1934 0 R 1935 0 R 1935 0 R 1936 0 R 1936 0 R 1937 0 R 1937 0 R
-1938 0 R 1938 0 R 1939 0 R 1939 0 R 1940 0 R 1940 0 R 1941 0 R 1941 0 R 1942 0 R 1942 0 R
-1943 0 R 1943 0 R 1944 0 R 1944 0 R 1945 0 R 1945 0 R 1946 0 R 1946 0 R 1947 0 R 1947 0 R
-1948 0 R 1948 0 R 1949 0 R 1949 0 R 1950 0 R 1950 0 R 1951 0 R 1951 0 R 1952 0 R 1952 0 R
-1953 0 R 1953 0 R 1954 0 R 1954 0 R 1955 0 R 1955 0 R 1956 0 R 1956 0 R 1957 0 R 1957 0 R
-1958 0 R 1958 0 R 1959 0 R 1959 0 R 1960 0 R 1960 0 R 1961 0 R 1961 0 R 1962 0 R 1962 0 R
-1963 0 R 1963 0 R 1964 0 R 1964 0 R 1965 0 R 1965 0 R 1966 0 R 1966 0 R 1967 0 R 1967 0 R
-1968 0 R 1968 0 R 1969 0 R 1969 0 R 1970 0 R 1970 0 R 1971 0 R 1971 0 R 1972 0 R 1972 0 R
-1973 0 R 1973 0 R]
- 194 [1974 0 R 1974 0 R 1975 0 R 1975 0 R 1976 0 R 1976 0 R 1977 0 R 1977 0 R 1978 0 R 1978 0 R
-1979 0 R 1979 0 R 1980 0 R 1980 0 R 1981 0 R 1981 0 R 1982 0 R 1982 0 R 1983 0 R 1983 0 R
-1984 0 R 1984 0 R 1985 0 R 1985 0 R 1986 0 R 1986 0 R 1987 0 R 1987 0 R 1988 0 R 1988 0 R
-1989 0 R 1989 0 R 1990 0 R 1990 0 R 1991 0 R 1991 0 R 1992 0 R 1992 0 R 1993 0 R 1993 0 R
-1994 0 R 1994 0 R 1995 0 R 1995 0 R 1996 0 R 1996 0 R 1997 0 R 1997 0 R 1998 0 R 1998 0 R
-1999 0 R 1999 0 R 2000 0 R 2000 0 R 2001 0 R 2001 0 R 2002 0 R 2002 0 R 2003 0 R 2003 0 R
-2004 0 R 2004 0 R 2005 0 R 2005 0 R 2006 0 R 2006 0 R 2007 0 R 2007 0 R 2008 0 R 2008 0 R
-2009 0 R 2009 0 R 2010 0 R 2010 0 R 2011 0 R 2011 0 R 2012 0 R 2012 0 R 2013 0 R 2013 0 R
-2014 0 R 2014 0 R 2015 0 R 2015 0 R 2016 0 R 2016 0 R 2017 0 R 2017 0 R 2018 0 R 2018 0 R
-2019 0 R 2019 0 R 2020 0 R 2020 0 R 2021 0 R 2021 0 R 2022 0 R 2022 0 R 2023 0 R 2023 0 R
-2024 0 R 2024 0 R 2025 0 R 2025 0 R 2026 0 R 2026 0 R 2027 0 R 2027 0 R 2028 0 R 2028 0 R
-2029 0 R 2029 0 R 2030 0 R 2030 0 R 2031 0 R 2031 0 R 2032 0 R 2032 0 R 2033 0 R 2033 0 R
-2034 0 R 2034 0 R 2035 0 R 2035 0 R 2036 0 R 2036 0 R 2037 0 R 2037 0 R 2038 0 R 2038 0 R
-2039 0 R 2039 0 R 2040 0 R 2040 0 R 2041 0 R 2041 0 R 2042 0 R 2042 0 R 2043 0 R 2043 0 R
-2044 0 R 2044 0 R 2045 0 R 2045 0 R 2046 0 R 2046 0 R 2047 0 R 2047 0 R 2048 0 R 2048 0 R
-2049 0 R 2049 0 R 2050 0 R 2050 0 R 2051 0 R 2051 0 R 2052 0 R 2052 0 R 2053 0 R 2053 0 R
-2054 0 R 2054 0 R 2055 0 R 2055 0 R 2056 0 R 2056 0 R 2057 0 R 2057 0 R 2058 0 R 2058 0 R
-2059 0 R 2059 0 R 2060 0 R 2060 0 R 2061 0 R 2061 0 R 2062 0 R 2062 0 R 2063 0 R 2063 0 R
-2064 0 R 2064 0 R 2065 0 R 2065 0 R 2066 0 R 2066 0 R 2067 0 R 2067 0 R 2068 0 R 2068 0 R
-2069 0 R 2069 0 R 2070 0 R 2070 0 R 2071 0 R 2071 0 R 2072 0 R 2072 0 R 2073 0 R 2073 0 R
-2074 0 R 2074 0 R 2075 0 R 2075 0 R]
-195 [2076 0 R 2076 0 R 2077 0 R 2077 0 R 2078 0 R 2078 0 R 2079 0 R 2079 0 R 2080 0 R 2080 0 R
-2081 0 R 2081 0 R 2082 0 R 2082 0 R 2083 0 R 2083 0 R 2084 0 R 2084 0 R 2085 0 R 2085 0 R
-2086 0 R 2086 0 R 2087 0 R 2087 0 R 2088 0 R 2088 0 R 2089 0 R 2089 0 R 2090 0 R 2090 0 R
-2091 0 R 2091 0 R 2092 0 R 2092 0 R 2093 0 R 2093 0 R 2094 0 R 2094 0 R 2095 0 R 2095 0 R
-2096 0 R 2096 0 R 2097 0 R 2097 0 R 2098 0 R 2098 0 R 2099 0 R 2099 0 R 2100 0 R 2100 0 R
-2101 0 R 2101 0 R 2102 0 R 2102 0 R 2103 0 R 2103 0 R 2104 0 R 2104 0 R 2105 0 R 2105 0 R
-2106 0 R 2106 0 R 2107 0 R 2107 0 R 2108 0 R 2108 0 R 2109 0 R 2109 0 R 2110 0 R 2110 0 R
-2111 0 R 2111 0 R 2112 0 R 2112 0 R 2113 0 R 2113 0 R 2114 0 R 2114 0 R 2115 0 R 2115 0 R
-2116 0 R 2116 0 R 2117 0 R 2117 0 R 2118 0 R 2118 0 R 2119 0 R 2119 0 R 2120 0 R 2120 0 R
-2121 0 R 2121 0 R 2122 0 R 2122 0 R 2123 0 R 2123 0 R 2124 0 R 2124 0 R 2125 0 R 2125 0 R
-2126 0 R 2126 0 R 2127 0 R 2127 0 R 2128 0 R 2128 0 R 2129 0 R 2129 0 R 2130 0 R 2130 0 R
-2131 0 R 2131 0 R 2132 0 R 2132 0 R 2133 0 R 2133 0 R 2134 0 R 2134 0 R 2135 0 R 2135 0 R
-2136 0 R 2136 0 R 2137 0 R 2137 0 R 2138 0 R 2138 0 R 2139 0 R 2139 0 R 2140 0 R 2140 0 R
-2141 0 R 2141 0 R 2142 0 R 2142 0 R 2143 0 R 2143 0 R 2144 0 R 2144 0 R 2145 0 R 2145 0 R
-2146 0 R 2146 0 R 2147 0 R 2147 0 R 2148 0 R 2148 0 R 2149 0 R 2149 0 R 2150 0 R 2150 0 R
-2151 0 R 2151 0 R 2152 0 R 2152 0 R 2153 0 R 2153 0 R 2154 0 R 2154 0 R 2155 0 R 2155 0 R
-2156 0 R 2156 0 R 2157 0 R 2157 0 R 2158 0 R 2158 0 R 2159 0 R 2159 0 R 2160 0 R 2160 0 R
-2161 0 R 2161 0 R 2162 0 R 2162 0 R 2163 0 R 2163 0 R 2164 0 R 2164 0 R 2165 0 R 2165 0 R
-2166 0 R 2166 0 R]
- 196 [2167 0 R 2167 0 R 2168 0 R 2168 0 R 2169 0 R 2169 0 R 2170 0 R 2170 0 R 2171 0 R 2171 0 R
-2172 0 R 2172 0 R 2173 0 R 2173 0 R 2174 0 R 2174 0 R 2175 0 R 2175 0 R 2176 0 R 2176 0 R
-2177 0 R 2177 0 R 2178 0 R 2178 0 R 2179 0 R 2179 0 R 2180 0 R 2180 0 R 2181 0 R 2181 0 R
-2182 0 R 2182 0 R 2183 0 R 2183 0 R 2184 0 R 2184 0 R 2185 0 R 2185 0 R 2186 0 R 2186 0 R
-2187 0 R 2187 0 R 2188 0 R 2188 0 R 2189 0 R 2189 0 R 2190 0 R 2190 0 R 2191 0 R 2191 0 R
-2192 0 R 2192 0 R 2193 0 R 2193 0 R 2194 0 R 2194 0 R 2195 0 R 2195 0 R 2196 0 R 2196 0 R
-2197 0 R 2197 0 R 2198 0 R 2198 0 R 2199 0 R 2199 0 R 2200 0 R 2200 0 R 2201 0 R 2201 0 R
-2202 0 R 2202 0 R 2203 0 R 2203 0 R 2204 0 R 2204 0 R 2205 0 R 2205 0 R 2206 0 R 2206 0 R
-2207 0 R 2207 0 R 2208 0 R 2208 0 R 2209 0 R 2209 0 R 2210 0 R 2210 0 R 2211 0 R 2211 0 R
-2212 0 R 2212 0 R 2213 0 R 2213 0 R 2214 0 R 2214 0 R 2215 0 R 2215 0 R 2216 0 R 2216 0 R
-2217 0 R 2217 0 R 2218 0 R 2218 0 R 2219 0 R 2219 0 R 2220 0 R 2220 0 R 2221 0 R 2221 0 R
-2222 0 R 2222 0 R 2223 0 R 2223 0 R 2224 0 R 2224 0 R 2225 0 R 2225 0 R 2226 0 R 2226 0 R
-2227 0 R 2227 0 R 2228 0 R 2228 0 R 2229 0 R 2229 0 R 2230 0 R 2230 0 R 2231 0 R 2231 0 R
-2232 0 R 2232 0 R 2233 0 R 2233 0 R 2234 0 R 2234 0 R 2235 0 R 2235 0 R 2236 0 R 2236 0 R
-2237 0 R 2237 0 R 2238 0 R 2238 0 R 2239 0 R 2239 0 R 2240 0 R 2240 0 R 2241 0 R 2241 0 R
-2242 0 R 2242 0 R 2243 0 R 2243 0 R 2244 0 R 2244 0 R 2245 0 R 2245 0 R 2246 0 R 2246 0 R
-2247 0 R 2247 0 R 2248 0 R 2248 0 R 2249 0 R 2249 0 R 2250 0 R 2250 0 R 2251 0 R 2251 0 R
-2252 0 R 2252 0 R 2253 0 R 2253 0 R 2254 0 R 2254 0 R 2255 0 R 2255 0 R 2256 0 R 2256 0 R
-2257 0 R 2257 0 R 2258 0 R 2258 0 R 2259 0 R 2259 0 R 2260 0 R 2260 0 R 2261 0 R 2261 0 R
-2262 0 R 2262 0 R 2263 0 R 2263 0 R 2264 0 R 2264 0 R 2265 0 R 2265 0 R]
- 197 [2266 0 R 2266 0 R 2267 0 R 2267 0 R 2268 0 R 2268 0 R 2269 0 R 2269 0 R 2270 0 R 2270 0 R
-2271 0 R 2271 0 R 2272 0 R 2272 0 R 2273 0 R 2273 0 R 2274 0 R 2274 0 R 2275 0 R 2275 0 R
-2276 0 R 2276 0 R 2277 0 R 2277 0 R 2278 0 R 2278 0 R 2279 0 R 2279 0 R 2280 0 R 2280 0 R
-2281 0 R 2281 0 R 2282 0 R 2282 0 R 2283 0 R 2283 0 R 2284 0 R 2284 0 R 2285 0 R 2285 0 R
-2286 0 R 2286 0 R 2287 0 R 2287 0 R 2288 0 R 2288 0 R 2289 0 R 2289 0 R 2290 0 R 2290 0 R
-2291 0 R 2291 0 R 2292 0 R 2292 0 R 2293 0 R 2293 0 R]
- 198 [2294 0 R 2294 0 R 2295 0 R 2295 0 R 2296 0 R 2296 0 R 2297 0 R 2297 0 R 2298 0 R 2298 0 R
-2299 0 R 2299 0 R 2300 0 R 2300 0 R 2301 0 R 2301 0 R 2302 0 R 2302 0 R 2303 0 R 2303 0 R
-2304 0 R 2304 0 R 2305 0 R 2305 0 R 2306 0 R 2306 0 R 2307 0 R 2307 0 R 2308 0 R 2308 0 R
-2309 0 R 2309 0 R 2310 0 R 2310 0 R 2311 0 R 2311 0 R 2312 0 R 2312 0 R 2313 0 R 2313 0 R
-2314 0 R 2314 0 R 2315 0 R 2315 0 R 2316 0 R 2316 0 R 2317 0 R 2317 0 R 2318 0 R 2318 0 R
-2319 0 R 2319 0 R 2320 0 R 2320 0 R 2321 0 R 2321 0 R 2322 0 R 2322 0 R 2323 0 R 2323 0 R
-2324 0 R 2324 0 R 2325 0 R 2325 0 R 2326 0 R 2326 0 R 2327 0 R 2327 0 R 2328 0 R 2328 0 R
-2329 0 R 2329 0 R 2330 0 R 2330 0 R 2331 0 R 2331 0 R 2332 0 R 2332 0 R 2333 0 R 2333 0 R
-2334 0 R 2334 0 R 2335 0 R 2335 0 R 2336 0 R 2336 0 R 2337 0 R 2337 0 R 2338 0 R 2338 0 R
-2339 0 R 2339 0 R 2340 0 R 2340 0 R 2341 0 R 2341 0 R 2342 0 R 2342 0 R 2343 0 R 2343 0 R
-2344 0 R 2344 0 R 2345 0 R 2345 0 R 2346 0 R 2346 0 R 2347 0 R 2347 0 R 2348 0 R 2348 0 R
-2349 0 R 2349 0 R 2350 0 R 2350 0 R 2351 0 R 2351 0 R 2352 0 R 2352 0 R 2353 0 R 2353 0 R]
- 199 [2354 0 R 2354 0 R 2355 0 R 2355 0 R 2356 0 R 2356 0 R 2357 0 R 2357 0 R 2358 0 R 2358 0 R
-2359 0 R 2359 0 R 2360 0 R 2360 0 R 2361 0 R 2361 0 R 2362 0 R 2362 0 R 2363 0 R 2363 0 R
-2364 0 R 2364 0 R 2365 0 R 2365 0 R 2366 0 R 2366 0 R 2367 0 R 2367 0 R 2368 0 R 2368 0 R
-2369 0 R 2369 0 R 2370 0 R 2370 0 R 2371 0 R 2371 0 R 2372 0 R 2372 0 R 2373 0 R 2373 0 R
-2374 0 R 2374 0 R 2375 0 R 2375 0 R 2376 0 R 2376 0 R 2377 0 R 2377 0 R 2378 0 R 2378 0 R
-2379 0 R 2379 0 R 2380 0 R 2380 0 R 2381 0 R 2381 0 R 2382 0 R 2382 0 R 2383 0 R 2383 0 R
-2384 0 R 2384 0 R 2385 0 R 2385 0 R 2386 0 R 2386 0 R 2387 0 R 2387 0 R 2388 0 R 2388 0 R
-2389 0 R 2389 0 R 2390 0 R 2390 0 R 2391 0 R 2391 0 R 2392 0 R 2392 0 R 2393 0 R 2393 0 R
-2394 0 R 2394 0 R 2395 0 R 2395 0 R 2396 0 R 2396 0 R 2397 0 R 2397 0 R 2398 0 R 2398 0 R
-2399 0 R 2399 0 R 2400 0 R 2400 0 R 2401 0 R 2401 0 R 2402 0 R 2402 0 R 2403 0 R 2403 0 R
-2404 0 R 2404 0 R 818 0 R 819 0 R]
-200 [820 0 R 821 0 R 2405 0 R 2406 0 R 2407 0 R 823 0 R 824 0 R 825 0 R 826 0 R 827 0 R
-828 0 R 2408 0 R 2408 0 R 2409 0 R 2409 0 R 2410 0 R 2410 0 R 2411 0 R 2411 0 R 2412 0 R
-2413 0 R 2414 0 R 2415 0 R 2416 0 R 2417 0 R 2418 0 R 2419 0 R 2420 0 R 2421 0 R 2422 0 R
-2423 0 R 2424 0 R 2425 0 R 2426 0 R 2427 0 R 2428 0 R 2429 0 R 2430 0 R 2431 0 R 2432 0 R
-2433 0 R 2434 0 R 2435 0 R 2436 0 R 2437 0 R 2438 0 R 2439 0 R 830 0 R 831 0 R]
- 201 2440 0 R 202 [832 0 R 833 0 R 834 0 R 835 0 R 2441 0 R 2442 0 R 2443 0 R 2444 0 R 838 0 R 2445 0 R
-840 0 R 841 0 R 842 0 R 843 0 R 844 0 R 845 0 R 846 0 R 2446 0 R 2447 0 R 848 0 R
-2448 0 R 2449 0 R 2450 0 R 2451 0 R 2452 0 R 2453 0 R]
- 203 2454 0 R 204 2455 0 R
-205 2456 0 R 206 [2457 0 R 2458 0 R 2459 0 R 852 0 R 853 0 R 854 0 R 855 0 R 856 0 R 2460 0 R 2461 0 R
-2462 0 R 858 0 R 859 0 R 860 0 R 2463 0 R 2464 0 R 2465 0 R 862 0 R 863 0 R 864 0 R
-865 0 R 866 0 R 2466 0 R 2466 0 R 2467 0 R 2467 0 R 2468 0 R 2468 0 R 2469 0 R 2470 0 R
-2471 0 R 2472 0 R 2473 0 R 2474 0 R 2475 0 R 2476 0 R 2477 0 R 868 0 R 869 0 R]
- 207 2478 0 R 208 2479 0 R 209 2479 0 R
-210 [870 0 R 871 0 R 2480 0 R 2481 0 R 2482 0 R 2483 0 R 873 0 R 875 0 R 876 0 R 877 0 R
-874 0 R]
- 211 [2484 0 R 2485 0 R 2486 0 R 879 0 R 880 0 R 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R
-886 0 R 887 0 R 888 0 R 889 0 R 890 0 R 891 0 R 892 0 R 893 0 R 894 0 R 895 0 R
-896 0 R 897 0 R 899 0 R 900 0 R 901 0 R 898 0 R]
- 212 [902 0 R 903 0 R 904 0 R 2487 0 R 2488 0 R 2489 0 R 2490 0 R 2491 0 R 906 0 R 907 0 R
-908 0 R 909 0 R 2492 0 R 2493 0 R 2494 0 R 911 0 R 913 0 R 914 0 R 912 0 R]
- 213 2495 0 R 214 2496 0 R
-215 2497 0 R 216 [2498 0 R 2499 0 R 2500 0 R 916 0 R 917 0 R 918 0 R 919 0 R 920 0 R 921 0 R 2501 0 R
-2502 0 R 2503 0 R 2504 0 R 2505 0 R 2506 0 R 2507 0 R 2508 0 R 923 0 R 924 0 R 925 0 R
-926 0 R 2509 0 R 2510 0 R 2511 0 R 928 0 R]
- 217 2512 0 R 218 2513 0 R 219 2513 0 R
-220 [2514 0 R 2515 0 R 2516 0 R 930 0 R 931 0 R 932 0 R 933 0 R 934 0 R 935 0 R 936 0 R
-937 0 R 938 0 R 2517 0 R 2518 0 R 2519 0 R 940 0 R 941 0 R 942 0 R 943 0 R 2520 0 R
-2521 0 R 2522 0 R 945 0 R 946 0 R 2523 0 R 2524 0 R 948 0 R]
- 221 2525 0 R 222 [2526 0 R 2527 0 R 2528 0 R 2529 0 R 2530 0 R 950 0 R 2531 0 R 2532 0 R 2533 0 R 952 0 R
-2534 0 R 2535 0 R 2536 0 R 2537 0 R 2538 0 R 2539 0 R 2540 0 R 2541 0 R 2542 0 R 2543 0 R
-2544 0 R 2545 0 R 2546 0 R 2547 0 R 2548 0 R 2549 0 R 2550 0 R 2551 0 R 2552 0 R 2553 0 R
-954 0 R 955 0 R 957 0 R 956 0 R]
- 223 2554 0 R 224 [958 0 R 2555 0 R 2556 0 R 2557 0 R 2558 0 R 2559 0 R 2560 0 R 2561 0 R 2561 0 R 2562 0 R
-2563 0 R 2564 0 R 2565 0 R 2566 0 R 2567 0 R 2568 0 R 2569 0 R 2570 0 R 2571 0 R 2572 0 R
-2573 0 R 2574 0 R 2575 0 R 2576 0 R 2577 0 R 2578 0 R 2579 0 R 2580 0 R 2581 0 R 2582 0 R
-2583 0 R 2584 0 R 2585 0 R 2586 0 R 2587 0 R 2588 0 R 2589 0 R 2590 0 R 2591 0 R 2592 0 R
-2593 0 R 2594 0 R 2595 0 R 2596 0 R 2597 0 R 2598 0 R 2599 0 R 2600 0 R 2601 0 R 2602 0 R
-2603 0 R 2604 0 R 2605 0 R 2606 0 R 2607 0 R 2608 0 R 2609 0 R 2610 0 R 2611 0 R 2612 0 R
-2613 0 R 2614 0 R 2615 0 R 2616 0 R 2617 0 R 2618 0 R 2619 0 R 2620 0 R 2621 0 R 2622 0 R
-2623 0 R]
-225 2624 0 R 226 2625 0 R 227 [2626 0 R 2627 0 R 2628 0 R 2629 0 R 2630 0 R 2631 0 R 2632 0 R 2632 0 R 2633 0 R 2634 0 R
-2635 0 R 2636 0 R 2637 0 R 2638 0 R 961 0 R 962 0 R 964 0 R 963 0 R]
- 228 2639 0 R 229 2640 0 R
-230 [965 0 R 2641 0 R 2642 0 R 2643 0 R 2644 0 R 2645 0 R 2646 0 R 2647 0 R 2647 0 R 2648 0 R
-2649 0 R 2650 0 R 2651 0 R 2652 0 R 2653 0 R 2654 0 R 2655 0 R 2655 0 R 2656 0 R 2657 0 R
-2658 0 R 2659 0 R 2660 0 R 2661 0 R 2662 0 R 2663 0 R 2664 0 R 2665 0 R 2666 0 R 2667 0 R
-2668 0 R 2669 0 R 2670 0 R 2671 0 R 2672 0 R 2673 0 R 2674 0 R 2675 0 R 2676 0 R 2677 0 R
-2678 0 R 2679 0 R 2680 0 R 2681 0 R 2682 0 R 2683 0 R 2684 0 R 2685 0 R 2686 0 R 2687 0 R
-2688 0 R 2689 0 R 2690 0 R 2691 0 R 2692 0 R 2693 0 R 2694 0 R 2695 0 R 2696 0 R 2697 0 R
-2698 0 R 2699 0 R 2700 0 R 2701 0 R 2702 0 R 2703 0 R 2704 0 R 2705 0 R 2706 0 R 2707 0 R
-2708 0 R 2709 0 R 2710 0 R 2711 0 R 2712 0 R 2713 0 R 2714 0 R 2715 0 R 967 0 R]
- 231 2716 0 R 232 2717 0 R 233 [968 0 R 970 0 R 969 0 R]
- 234 [971 0 R 2718 0 R 2719 0 R 2720 0 R 2721 0 R 2722 0 R 2723 0 R 2724 0 R 2724 0 R 2725 0 R
-2726 0 R 2727 0 R 2728 0 R 2729 0 R 2730 0 R 2731 0 R 2732 0 R 2732 0 R 2733 0 R 2734 0 R
-2735 0 R 2736 0 R 2737 0 R 2738 0 R 2739 0 R 2740 0 R 2741 0 R 2742 0 R 2743 0 R 2744 0 R
-2745 0 R 2746 0 R 2747 0 R 2748 0 R 2749 0 R 2750 0 R 2751 0 R 2752 0 R 2753 0 R 2754 0 R
-2755 0 R 2756 0 R 2757 0 R 2758 0 R 2759 0 R 2760 0 R 2761 0 R 2762 0 R 2763 0 R 2764 0 R
-2765 0 R 2766 0 R 2767 0 R 2768 0 R 2769 0 R 2770 0 R 2771 0 R 2772 0 R 2773 0 R 2774 0 R
-2775 0 R 2776 0 R 2777 0 R 2778 0 R 2779 0 R 2780 0 R 2781 0 R 2782 0 R 2783 0 R 2784 0 R
-2785 0 R 2786 0 R]
-235 2787 0 R 236 2788 0 R 237 [2789 0 R 2790 0 R 2791 0 R 2792 0 R 2793 0 R 2794 0 R 2795 0 R 2795 0 R 2796 0 R 2797 0 R
-2798 0 R 2799 0 R 2800 0 R 2801 0 R 974 0 R 975 0 R 976 0 R 978 0 R 979 0 R 980 0 R
-981 0 R 2802 0 R 2803 0 R 2804 0 R 2805 0 R 2806 0 R 2807 0 R 2808 0 R 2808 0 R 2809 0 R
-2810 0 R 2811 0 R 2812 0 R 2813 0 R 2814 0 R 2815 0 R 2816 0 R 2817 0 R 2818 0 R 2819 0 R
-2820 0 R 2821 0 R 2822 0 R 2823 0 R 2824 0 R 2825 0 R 2826 0 R 977 0 R]
- 238 2827 0 R 239 2828 0 R
-240 2829 0 R 241 2830 0 R 242 [2831 0 R 2832 0 R 2833 0 R 2834 0 R 2835 0 R 2836 0 R 2837 0 R 2837 0 R 2838 0 R 2839 0 R
-2840 0 R 2841 0 R 2842 0 R 2843 0 R 2844 0 R 2845 0 R 2846 0 R 2847 0 R 2848 0 R 2849 0 R
-2850 0 R 2851 0 R 2852 0 R 2853 0 R 2854 0 R 2855 0 R 2856 0 R 2857 0 R 2858 0 R 2859 0 R
-2860 0 R 2861 0 R 2862 0 R 2863 0 R 2864 0 R 2865 0 R 2866 0 R 2867 0 R 2868 0 R 2869 0 R
-2870 0 R 2871 0 R 2872 0 R 2873 0 R 2874 0 R 2875 0 R 2876 0 R 2877 0 R 2878 0 R 2879 0 R
-2880 0 R 2881 0 R 2882 0 R 2883 0 R 2884 0 R 2885 0 R 2886 0 R 2887 0 R 984 0 R]
- 243 2888 0 R 244 2889 0 R
-245 [985 0 R 987 0 R 988 0 R 989 0 R 990 0 R 991 0 R 2890 0 R 2891 0 R 2892 0 R 2893 0 R
-2894 0 R 2895 0 R 2896 0 R 2896 0 R 2897 0 R 2898 0 R 2899 0 R 2900 0 R 2901 0 R 2902 0 R
-2903 0 R 2904 0 R 2905 0 R 2906 0 R 2907 0 R 2908 0 R 2909 0 R 2910 0 R 2911 0 R 2912 0 R
-2913 0 R 2914 0 R 2915 0 R 2916 0 R 2917 0 R 2918 0 R 2919 0 R 2920 0 R 2921 0 R 2922 0 R
-2923 0 R 2924 0 R 2925 0 R 2926 0 R 2927 0 R 2928 0 R 986 0 R]
- 246 2929 0 R 247 2930 0 R 248 [2931 0 R 2932 0 R 2933 0 R 2934 0 R 2935 0 R 2936 0 R 2937 0 R 2937 0 R 2938 0 R 2939 0 R
-2940 0 R 2941 0 R 2942 0 R 2943 0 R 2944 0 R 2945 0 R 2946 0 R 2947 0 R 2948 0 R 2949 0 R
-2950 0 R 2951 0 R 2952 0 R 2953 0 R 2954 0 R 2955 0 R 2956 0 R 2957 0 R 2958 0 R 2959 0 R
-2960 0 R 2961 0 R 2962 0 R 2963 0 R 2964 0 R 2965 0 R 2966 0 R 2967 0 R 2968 0 R 2969 0 R
-2970 0 R 2971 0 R 2972 0 R 2973 0 R 994 0 R 995 0 R 997 0 R 996 0 R]
- 249 2974 0 R
-250 2975 0 R 251 [2976 0 R 2977 0 R 2978 0 R 2979 0 R 2980 0 R 999 0 R 1000 0 R 1001 0 R 1002 0 R 1003 0 R
-1004 0 R 1005 0 R 1006 0 R 1008 0 R 1007 0 R]
- 252 [1009 0 R 1010 0 R 2981 0 R 2982 0 R 2983 0 R 2984 0 R 2985 0 R 2986 0 R 2987 0 R 2988 0 R
-2989 0 R 2990 0 R 2991 0 R 1012 0 R 1013 0 R 2992 0 R]
- 253 [2993 0 R 2994 0 R 2995 0 R 2996 0 R 2997 0 R 2998 0 R 2999 0 R 1015 0 R 1016 0 R 1017 0 R
-1018 0 R 1020 0 R 3000 0 R 3000 0 R 3001 0 R 3001 0 R 3002 0 R 3002 0 R 3003 0 R 3004 0 R
-3005 0 R 3006 0 R 1022 0 R 1019 0 R]
- 254 [1023 0 R 1024 0 R 1026 0 R 1027 0 R 3007 0 R 3007 0 R 3008 0 R 3008 0 R 3009 0 R 3009 0 R
-3010 0 R 3011 0 R 3012 0 R 3013 0 R 3014 0 R 3015 0 R 3016 0 R 1029 0 R 1025 0 R]
-255 [1030 0 R 1031 0 R 1033 0 R 1034 0 R 3017 0 R 3017 0 R 3018 0 R 3018 0 R 3019 0 R 3019 0 R
-3020 0 R 3021 0 R 3022 0 R 1036 0 R 1037 0 R 1032 0 R]
- 256 [3023 0 R 3024 0 R 3025 0 R 3026 0 R 3027 0 R 1039 0 R 1040 0 R 1041 0 R 3028 0 R 3028 0 R
-3029 0 R 3029 0 R 3030 0 R 3030 0 R 3031 0 R 3031 0 R 3032 0 R 3033 0 R 3034 0 R 3035 0 R
-3036 0 R 3037 0 R 3038 0 R 3039 0 R 3040 0 R 3041 0 R 3042 0 R 3043 0 R 3044 0 R 3045 0 R
-3046 0 R 3047 0 R 3048 0 R 3049 0 R 3050 0 R 3051 0 R 3052 0 R 3053 0 R 3054 0 R 3055 0 R
-3056 0 R 3057 0 R 3058 0 R 3059 0 R 3060 0 R 3061 0 R 3062 0 R 3063 0 R 3064 0 R 3065 0 R
-3066 0 R 3067 0 R 3068 0 R 3069 0 R 3070 0 R 3071 0 R 3072 0 R 3073 0 R 3074 0 R 3075 0 R
-3076 0 R 3077 0 R 3078 0 R 3079 0 R 3080 0 R 3081 0 R 3082 0 R 3083 0 R 1043 0 R 1044 0 R
-1045 0 R 3084 0 R 3084 0 R 3085 0 R 3085 0 R 3086 0 R 3086 0 R 3087 0 R 3087 0 R 3088 0 R
-3089 0 R 3090 0 R 3091 0 R 3092 0 R 3093 0 R 3094 0 R 3095 0 R 3096 0 R 3097 0 R 3098 0 R
-3099 0 R 3100 0 R 3101 0 R 3102 0 R 3103 0 R 3104 0 R 3105 0 R 3106 0 R 3107 0 R 3108 0 R
-3109 0 R 3110 0 R 3111 0 R 1047 0 R 1048 0 R]
- 257 [3112 0 R 3113 0 R 3114 0 R 3115 0 R 3116 0 R 1050 0 R 1051 0 R 1052 0 R 1053 0 R 1054 0 R
-1055 0 R 1056 0 R 1057 0 R 1058 0 R 1059 0 R 1060 0 R 1061 0 R 1062 0 R 1063 0 R 1064 0 R
-1065 0 R 3117 0 R 3118 0 R 3119 0 R 1067 0 R 1068 0 R 1069 0 R 1070 0 R 1071 0 R]
- 258 3120 0 R 259 [3121 0 R 1073 0 R 3122 0 R 3122 0 R 3123 0 R 3123 0 R 3124 0 R 3124 0 R 3125 0 R 3125 0 R
-3126 0 R 3126 0 R 3127 0 R 3127 0 R 3128 0 R 3129 0 R 3130 0 R 3131 0 R 3132 0 R 3133 0 R
-3134 0 R 3135 0 R 3136 0 R 3137 0 R 3138 0 R 3139 0 R 3140 0 R 3141 0 R 3142 0 R 3143 0 R
-3144 0 R 3145 0 R 3146 0 R 3147 0 R 3148 0 R 3149 0 R 3150 0 R 3151 0 R 3152 0 R 3153 0 R
-3154 0 R 3155 0 R 3156 0 R 3157 0 R 3158 0 R 3159 0 R 3160 0 R 3161 0 R 3162 0 R 3163 0 R
-3164 0 R 1075 0 R]
-260 3165 0 R 261 3166 0 R 262 3167 0 R 263 [3168 0 R 1077 0 R 3169 0 R 3169 0 R 3170 0 R 3170 0 R 3171 0 R 3171 0 R 3172 0 R 3172 0 R
-3173 0 R 3173 0 R 3174 0 R 3174 0 R 3175 0 R 3176 0 R 3177 0 R 3178 0 R 3179 0 R 3180 0 R
-3181 0 R 3182 0 R 3183 0 R 3184 0 R 3185 0 R 3186 0 R 3187 0 R 3188 0 R 3189 0 R 3190 0 R
-3191 0 R 3192 0 R 3193 0 R 3194 0 R 3195 0 R 3196 0 R 3197 0 R 1079 0 R]
- 264 3198 0 R
-265 3199 0 R 266 3200 0 R 267 [3201 0 R 1082 0 R 3202 0 R 3202 0 R 3203 0 R 3203 0 R 3204 0 R 3204 0 R 3205 0 R 3205 0 R
-3206 0 R 3206 0 R 3207 0 R 3207 0 R 3208 0 R 3209 0 R 3210 0 R 3211 0 R 3212 0 R 3213 0 R
-3214 0 R 3215 0 R 1084 0 R 1085 0 R 3216 0 R 3217 0 R 3218 0 R 3219 0 R 1087 0 R 1088 0 R
-1089 0 R 3220 0 R 3221 0 R 3222 0 R 1091 0 R 3223 0 R 3223 0 R 3224 0 R 3224 0 R 3225 0 R
-3225 0 R 3226 0 R 3226 0 R 3227 0 R 3227 0 R 3228 0 R 3229 0 R 3230 0 R 3231 0 R 3232 0 R
-3233 0 R 3234 0 R 3235 0 R 3236 0 R 3237 0 R 3238 0 R 3239 0 R 3240 0 R 3241 0 R 3242 0 R
-3243 0 R 3244 0 R 3245 0 R 3246 0 R 3247 0 R 3248 0 R 3249 0 R 3250 0 R 3251 0 R 3252 0 R
-3253 0 R 3254 0 R 3255 0 R 3256 0 R 3257 0 R 3258 0 R 3259 0 R 3260 0 R 3261 0 R 3262 0 R
-3263 0 R 3264 0 R 3265 0 R 3266 0 R 3267 0 R 3268 0 R]
- 268 3269 0 R 269 3270 0 R
-270 3271 0 R 271 [3272 0 R 3272 0 R 3273 0 R 3273 0 R 3274 0 R 3274 0 R 3275 0 R 3275 0 R 3276 0 R 3276 0 R
-3277 0 R 3278 0 R 3279 0 R 3280 0 R 3281 0 R 3282 0 R 3283 0 R 3284 0 R 3285 0 R 3286 0 R
-3287 0 R 3288 0 R 3289 0 R 1094 0 R 1095 0 R 3290 0 R 3290 0 R 3291 0 R 3292 0 R 3293 0 R
-3294 0 R 3295 0 R 3296 0 R 3297 0 R 3298 0 R 3299 0 R 3300 0 R 3301 0 R 3302 0 R 1097 0 R
-1098 0 R]
- 272 [1099 0 R 3303 0 R 3303 0 R 3304 0 R 3305 0 R 3306 0 R 3307 0 R 3308 0 R 3309 0 R 3310 0 R
-3311 0 R 3312 0 R 3313 0 R 3314 0 R 3315 0 R 3316 0 R 3317 0 R 3318 0 R 3319 0 R 3320 0 R
-3321 0 R 3322 0 R 3323 0 R 3324 0 R 3325 0 R 3326 0 R 3327 0 R 3328 0 R 3329 0 R 3330 0 R
-3331 0 R 3332 0 R 1101 0 R 1102 0 R]
- 273 [3333 0 R 3333 0 R 3334 0 R 3335 0 R 3336 0 R 3337 0 R 3338 0 R 3339 0 R 3340 0 R 3341 0 R
-3342 0 R 3343 0 R 3344 0 R 3345 0 R 3346 0 R 3347 0 R 3348 0 R 3349 0 R 3350 0 R 3351 0 R
-3352 0 R 3353 0 R 3354 0 R 3355 0 R 3356 0 R 3357 0 R 3358 0 R 3359 0 R 3360 0 R 3361 0 R
-3362 0 R 3363 0 R 3364 0 R 3365 0 R 3366 0 R 3367 0 R 1104 0 R 1105 0 R]
- 274 [3368 0 R 3369 0 R 3370 0 R 3371 0 R 3372 0 R 1107 0 R 1108 0 R 1109 0 R 1110 0 R 3373 0 R
-3373 0 R 3374 0 R 3374 0 R 3375 0 R 3375 0 R 3376 0 R 3377 0 R 3378 0 R 3379 0 R 3380 0 R
-3381 0 R 3382 0 R 3383 0 R 3384 0 R 3385 0 R 3386 0 R 3387 0 R 3388 0 R 3389 0 R 3390 0 R
-1112 0 R 1113 0 R]
-275 [1114 0 R 3391 0 R 3391 0 R 3392 0 R 3392 0 R 3393 0 R 3393 0 R 3394 0 R 3394 0 R 3395 0 R
-3395 0 R 3396 0 R 3396 0 R 3397 0 R 3397 0 R 3398 0 R 3398 0 R 3399 0 R 3399 0 R 3400 0 R
-3400 0 R 3401 0 R 3401 0 R 3402 0 R 3402 0 R 3403 0 R 3403 0 R 3404 0 R 3404 0 R 3405 0 R
-3405 0 R 3406 0 R 3406 0 R 3407 0 R 3407 0 R 3408 0 R 3408 0 R 3409 0 R 3409 0 R 3410 0 R
-3410 0 R 3411 0 R 3411 0 R 3412 0 R 3412 0 R 3413 0 R 3413 0 R 3414 0 R 3414 0 R 3415 0 R
-3415 0 R 3416 0 R 3416 0 R 3417 0 R 3417 0 R 3418 0 R 3418 0 R 3419 0 R 3419 0 R 3420 0 R
-3420 0 R 3421 0 R 3421 0 R 3422 0 R 3422 0 R 3423 0 R 3423 0 R 3424 0 R 3424 0 R 3425 0 R
-3425 0 R 3426 0 R 3426 0 R 3427 0 R 3427 0 R 3428 0 R 3428 0 R 3429 0 R 3429 0 R 3430 0 R
-3430 0 R 3431 0 R 3431 0 R 3432 0 R 3432 0 R 3433 0 R 3433 0 R 3434 0 R 3434 0 R 3435 0 R
-3435 0 R 3436 0 R 3436 0 R 3437 0 R 3437 0 R 3438 0 R 3438 0 R 3439 0 R 3439 0 R 3440 0 R
-3440 0 R 3441 0 R 3441 0 R 3442 0 R 3442 0 R 3443 0 R 3443 0 R 3444 0 R 3444 0 R 3445 0 R
-3445 0 R 3446 0 R 3446 0 R 3447 0 R 3447 0 R 3448 0 R 3448 0 R 3449 0 R 3449 0 R 3450 0 R
-3450 0 R 3451 0 R 3451 0 R 3452 0 R 3452 0 R 3453 0 R 3453 0 R 3454 0 R 3454 0 R 3455 0 R
-3455 0 R 3456 0 R 3456 0 R 3457 0 R 3457 0 R 3458 0 R 3458 0 R 3459 0 R 3459 0 R 3460 0 R
-3460 0 R]
- 276 [3461 0 R 3461 0 R 3462 0 R 3462 0 R 3463 0 R 3463 0 R 3464 0 R 3464 0 R 3465 0 R 3465 0 R
-3466 0 R 3466 0 R 3467 0 R 3467 0 R 3468 0 R 3468 0 R 3469 0 R 3469 0 R 3470 0 R 3470 0 R
-3471 0 R 3471 0 R 3472 0 R 3472 0 R 3473 0 R 3473 0 R 3474 0 R 3474 0 R 3475 0 R 3475 0 R
-3476 0 R 3476 0 R 3477 0 R 3477 0 R 3478 0 R 3478 0 R 3479 0 R 3479 0 R 3480 0 R 3480 0 R
-3481 0 R 3481 0 R 3482 0 R 3482 0 R 3483 0 R 3483 0 R 3484 0 R 3484 0 R 3485 0 R 3485 0 R
-3486 0 R 3486 0 R 3487 0 R 3487 0 R 3488 0 R 3488 0 R 3489 0 R 3489 0 R 3490 0 R 3490 0 R
-3491 0 R 3491 0 R 3492 0 R 3492 0 R 3493 0 R 3493 0 R 3494 0 R 3494 0 R 3495 0 R 3495 0 R
-3496 0 R 3496 0 R 3497 0 R 3497 0 R 3498 0 R 3498 0 R 3499 0 R 3499 0 R 3500 0 R 3500 0 R
-3501 0 R 3501 0 R 3502 0 R 3502 0 R 3503 0 R 3503 0 R 3504 0 R 3504 0 R 3505 0 R 3505 0 R
-3506 0 R 3506 0 R 3507 0 R 3507 0 R 3508 0 R 3508 0 R 3509 0 R 3509 0 R 3510 0 R 3510 0 R
-3511 0 R 3511 0 R 3512 0 R 3512 0 R 3513 0 R 3513 0 R 3514 0 R 3514 0 R 3515 0 R 3515 0 R
-3516 0 R 3516 0 R 3517 0 R 3517 0 R 3518 0 R 3518 0 R 3519 0 R 3519 0 R 3520 0 R 3520 0 R
-3521 0 R 3521 0 R 3522 0 R 3522 0 R 3523 0 R 3523 0 R 3524 0 R 3524 0 R 3525 0 R 3525 0 R
-3526 0 R 3526 0 R 3527 0 R 3527 0 R]
- 277 [3528 0 R 3528 0 R 3529 0 R 3529 0 R 3530 0 R 3530 0 R 3531 0 R 3531 0 R 3532 0 R 3532 0 R
-3533 0 R 3533 0 R 3534 0 R 3534 0 R 3535 0 R 3535 0 R 3536 0 R 3536 0 R 3537 0 R 3537 0 R
-3538 0 R 3538 0 R 3539 0 R 3539 0 R 3540 0 R 3540 0 R 3541 0 R 3541 0 R 3542 0 R 3542 0 R
-3543 0 R 3543 0 R 3544 0 R 3544 0 R 3545 0 R 3545 0 R 3546 0 R 3546 0 R 3547 0 R 3547 0 R
-3548 0 R 3548 0 R 3549 0 R 3549 0 R 3550 0 R 3550 0 R 3551 0 R 3551 0 R 3552 0 R 3552 0 R
-3553 0 R 3553 0 R 3554 0 R 3554 0 R 3555 0 R 3555 0 R 3556 0 R 3556 0 R 3557 0 R 3557 0 R
-3558 0 R 3558 0 R 3559 0 R 3559 0 R 3560 0 R 3560 0 R 3561 0 R 3561 0 R 3562 0 R 3562 0 R
-3563 0 R 3563 0 R 3564 0 R 3564 0 R 3565 0 R 3565 0 R 3566 0 R 3566 0 R 3567 0 R 3567 0 R
-3568 0 R 3568 0 R 3569 0 R 3569 0 R 3570 0 R 3570 0 R 3571 0 R 3571 0 R 3572 0 R 3572 0 R
-3573 0 R 3573 0 R 3574 0 R 3574 0 R 3575 0 R 3575 0 R 3576 0 R 3576 0 R 3577 0 R 3577 0 R
-3578 0 R 3578 0 R 3579 0 R 3579 0 R 3580 0 R 3580 0 R]
- 278 [3581 0 R 3581 0 R 3582 0 R 3582 0 R 3583 0 R 3583 0 R 3584 0 R 3584 0 R 3585 0 R 3585 0 R
-3586 0 R 3586 0 R 3587 0 R 3587 0 R 3588 0 R 3588 0 R 3589 0 R 3589 0 R 3590 0 R 3590 0 R
-3591 0 R 3591 0 R 3592 0 R 3592 0 R 3593 0 R 3593 0 R 3594 0 R 3594 0 R 3595 0 R 3595 0 R
-3596 0 R 3596 0 R 3597 0 R 3597 0 R 3598 0 R 3598 0 R 3599 0 R 3599 0 R 3600 0 R 3600 0 R
-3601 0 R 3601 0 R 3602 0 R 3602 0 R 3603 0 R 3603 0 R 3604 0 R 3604 0 R 3605 0 R 3605 0 R
-3606 0 R 3606 0 R 3607 0 R 3607 0 R 3608 0 R 3608 0 R 3609 0 R 3609 0 R 3610 0 R 3610 0 R
-3611 0 R 3611 0 R 3612 0 R 3612 0 R 3613 0 R 3613 0 R 3614 0 R 3614 0 R 3615 0 R 3615 0 R
-3616 0 R 3616 0 R 3617 0 R 3617 0 R 3618 0 R 3618 0 R 3619 0 R 3619 0 R 3620 0 R 3620 0 R
-3621 0 R 3621 0 R 3622 0 R 3622 0 R 3623 0 R 3623 0 R 3624 0 R 3624 0 R 3625 0 R 3625 0 R
-3626 0 R 3626 0 R 3627 0 R 3627 0 R 3628 0 R 3628 0 R 3629 0 R 3629 0 R 3630 0 R 3630 0 R
-3631 0 R 3631 0 R 3632 0 R 3632 0 R 3633 0 R 3633 0 R 3634 0 R 3634 0 R 3635 0 R 3635 0 R
-3636 0 R 3636 0 R 3637 0 R 3637 0 R 3638 0 R 3638 0 R 3639 0 R 3639 0 R 3640 0 R 3640 0 R
-3641 0 R 3641 0 R]
- 279 [3642 0 R 3642 0 R 3643 0 R 3643 0 R 3644 0 R 3644 0 R 3645 0 R 3645 0 R 3646 0 R 3646 0 R
-3647 0 R 3647 0 R 3648 0 R 3648 0 R 3649 0 R 3649 0 R 3650 0 R 3650 0 R 3651 0 R 3651 0 R
-3652 0 R 3652 0 R 3653 0 R 3653 0 R 3654 0 R 3654 0 R 3655 0 R 3655 0 R 3656 0 R 3656 0 R
-3657 0 R 3657 0 R 3658 0 R 3658 0 R 3659 0 R 3659 0 R 3660 0 R 3660 0 R 3661 0 R 3661 0 R
-3662 0 R 3662 0 R 3663 0 R 3663 0 R 3664 0 R 3664 0 R 3665 0 R 3665 0 R 3666 0 R 3666 0 R
-3667 0 R 3667 0 R 3668 0 R 3668 0 R 3669 0 R 3669 0 R 3670 0 R 3670 0 R 3671 0 R 3671 0 R
-3672 0 R 3672 0 R 3673 0 R 3673 0 R 3674 0 R 3674 0 R 3675 0 R 3675 0 R 3676 0 R 3676 0 R
-3677 0 R 3677 0 R 3678 0 R 3678 0 R 3679 0 R 3679 0 R 3680 0 R 3680 0 R 3681 0 R 3681 0 R
-3682 0 R 3682 0 R 3683 0 R 3683 0 R 3684 0 R 3684 0 R 3685 0 R 3685 0 R 3686 0 R 3686 0 R
-3687 0 R 3687 0 R 3688 0 R 3688 0 R 3689 0 R 3689 0 R 3690 0 R 3690 0 R 3691 0 R 3691 0 R
-3692 0 R 3692 0 R 3693 0 R 3693 0 R 3694 0 R 3694 0 R 3695 0 R 3695 0 R 3696 0 R 3696 0 R
-3697 0 R 3697 0 R 3698 0 R 3698 0 R 3699 0 R 3699 0 R 3700 0 R 3700 0 R 3701 0 R 3701 0 R
-3702 0 R 3702 0 R 3703 0 R 3703 0 R]
-280 [3704 0 R 3704 0 R 3705 0 R 3705 0 R 3706 0 R 3706 0 R 3707 0 R 3707 0 R 3708 0 R 3708 0 R
-3709 0 R 3709 0 R 3710 0 R 3710 0 R 3711 0 R 3711 0 R 3712 0 R 3712 0 R 3713 0 R 3713 0 R
-3714 0 R 3714 0 R 3715 0 R 3715 0 R 3716 0 R 3716 0 R 3717 0 R 3717 0 R 3718 0 R 3718 0 R
-3719 0 R 3719 0 R 3720 0 R 3720 0 R 3721 0 R 3721 0 R 3722 0 R 3722 0 R 3723 0 R 3723 0 R
-3724 0 R 3724 0 R 3725 0 R 3725 0 R 3726 0 R 3726 0 R 3727 0 R 3727 0 R 3728 0 R 3728 0 R
-3729 0 R 3729 0 R 3730 0 R 3730 0 R 3731 0 R 3731 0 R 3732 0 R 3732 0 R 3733 0 R 3733 0 R
-3734 0 R 3734 0 R 3735 0 R 3735 0 R 3736 0 R 3736 0 R 3737 0 R 3737 0 R 3738 0 R 3738 0 R
-3739 0 R 3739 0 R 3740 0 R 3740 0 R 3741 0 R 3741 0 R 3742 0 R 3742 0 R 3743 0 R 3743 0 R
-3744 0 R 3744 0 R 3745 0 R 3745 0 R 3746 0 R 3746 0 R 3747 0 R 3747 0 R 3748 0 R 3748 0 R
-3749 0 R 3749 0 R 3750 0 R 3750 0 R 3751 0 R 3751 0 R 3752 0 R 3752 0 R 3753 0 R 3753 0 R
-3754 0 R 3754 0 R 3755 0 R 3755 0 R 3756 0 R 3756 0 R 3757 0 R 3757 0 R 3758 0 R 3758 0 R
-3759 0 R 3759 0 R 3760 0 R 3760 0 R 3761 0 R 3761 0 R 3762 0 R 3762 0 R 3763 0 R 3763 0 R
-3764 0 R 3764 0 R 3765 0 R 3765 0 R 3766 0 R 3766 0 R 3767 0 R 3767 0 R 3768 0 R 3768 0 R
-3769 0 R 3769 0 R 3770 0 R 3770 0 R 3771 0 R 3771 0 R 3772 0 R 3772 0 R 3773 0 R 3773 0 R
-3774 0 R 3774 0 R 3775 0 R 3775 0 R 3776 0 R 3776 0 R]
- 281 [3777 0 R 3777 0 R 3778 0 R 3778 0 R 3779 0 R 3779 0 R 3780 0 R 3780 0 R 3781 0 R 3781 0 R
-3782 0 R 3782 0 R 3783 0 R 3783 0 R 3784 0 R 3784 0 R 3785 0 R 3785 0 R 3786 0 R 3786 0 R
-3787 0 R 3787 0 R 3788 0 R 3788 0 R 3789 0 R 3789 0 R 3790 0 R 3790 0 R 3791 0 R 3791 0 R
-3792 0 R 3792 0 R 3793 0 R 3793 0 R 3794 0 R 3794 0 R 3795 0 R 3795 0 R 3796 0 R 3796 0 R
-3797 0 R 3797 0 R 3798 0 R 3798 0 R 3799 0 R 3799 0 R 3800 0 R 3800 0 R 3801 0 R 3801 0 R
-3802 0 R 3802 0 R 3803 0 R 3803 0 R 3804 0 R 3804 0 R 3805 0 R 3805 0 R 3806 0 R 3806 0 R
-3807 0 R 3807 0 R 3808 0 R 3808 0 R 3809 0 R 3809 0 R 3810 0 R 3810 0 R 3811 0 R 3811 0 R
-3812 0 R 3812 0 R 3813 0 R 3813 0 R 3814 0 R 3814 0 R 3815 0 R 3815 0 R 3816 0 R 3816 0 R
-3817 0 R 3817 0 R 3818 0 R 3818 0 R 3819 0 R 3819 0 R 3820 0 R 3820 0 R 3821 0 R 3821 0 R
-3822 0 R 3822 0 R 3823 0 R 3823 0 R 3824 0 R 3824 0 R 3825 0 R 3825 0 R 3826 0 R 3826 0 R
-3827 0 R 3827 0 R 3828 0 R 3828 0 R 3829 0 R 3829 0 R 3830 0 R 3830 0 R 3831 0 R 3831 0 R
-3832 0 R 3832 0 R 3833 0 R 3833 0 R 3834 0 R 3834 0 R 3835 0 R 3835 0 R]
- 282 [3836 0 R 3836 0 R 3837 0 R 3837 0 R 3838 0 R 3838 0 R 3839 0 R 3839 0 R 3840 0 R 3840 0 R
-3841 0 R 3841 0 R 3842 0 R 3842 0 R 3843 0 R 3843 0 R 3844 0 R 3844 0 R 3845 0 R 3845 0 R
-3846 0 R 3846 0 R 3847 0 R 3847 0 R 3848 0 R 3848 0 R 3849 0 R 3849 0 R 3850 0 R 3850 0 R
-3851 0 R 3851 0 R 3852 0 R 3852 0 R 3853 0 R 3853 0 R 3854 0 R 3854 0 R 3855 0 R 3855 0 R
-3856 0 R 3856 0 R 3857 0 R 3857 0 R 3858 0 R 3858 0 R 3859 0 R 3859 0 R 3860 0 R 3860 0 R
-3861 0 R 3861 0 R 3862 0 R 3862 0 R 3863 0 R 3863 0 R 3864 0 R 3864 0 R 3865 0 R 3865 0 R
-3866 0 R 3866 0 R 3867 0 R 3867 0 R 3868 0 R 3868 0 R 3869 0 R 3869 0 R 3870 0 R 3870 0 R
-3871 0 R 3871 0 R 3872 0 R 3872 0 R 3873 0 R 3873 0 R 3874 0 R 3874 0 R 3875 0 R 3875 0 R
-3876 0 R 3876 0 R 3877 0 R 3877 0 R 3878 0 R 3878 0 R 3879 0 R 3879 0 R 3880 0 R 3880 0 R
-3881 0 R 3881 0 R 3882 0 R 3882 0 R 3883 0 R 3883 0 R 3884 0 R 3884 0 R 3885 0 R 3885 0 R
-3886 0 R 3886 0 R 3887 0 R 3887 0 R 3888 0 R 3888 0 R 3889 0 R 3889 0 R 3890 0 R 3890 0 R
-3891 0 R 3891 0 R 3892 0 R 3892 0 R 3893 0 R 3893 0 R 3894 0 R 3894 0 R 3895 0 R 3895 0 R
-3896 0 R 3896 0 R 3897 0 R 3897 0 R 3898 0 R 3898 0 R 3899 0 R 3899 0 R 3900 0 R 3900 0 R
-3901 0 R 3901 0 R 3902 0 R 3902 0 R 3903 0 R 3903 0 R 3904 0 R 3904 0 R 3905 0 R 3905 0 R
-3906 0 R 3906 0 R 3907 0 R 3907 0 R 3908 0 R 3908 0 R 3909 0 R 3909 0 R 3910 0 R 3910 0 R
-3911 0 R 3911 0 R 3912 0 R 3912 0 R]
- 283 [3913 0 R 3913 0 R 3914 0 R 3914 0 R 3915 0 R 3915 0 R 3916 0 R 3916 0 R 3917 0 R 3917 0 R
-3918 0 R 3918 0 R 3919 0 R 3919 0 R 3920 0 R 3920 0 R 3921 0 R 3921 0 R 3922 0 R 3922 0 R
-3923 0 R 3923 0 R 3924 0 R 3924 0 R 3925 0 R 3925 0 R 3926 0 R 3926 0 R 3927 0 R 3927 0 R
-3928 0 R 3928 0 R 3929 0 R 3929 0 R 3930 0 R 3930 0 R 3931 0 R 3931 0 R 3932 0 R 3932 0 R
-3933 0 R 3933 0 R 3934 0 R 3934 0 R 3935 0 R 3935 0 R 3936 0 R 3936 0 R 3937 0 R 3937 0 R
-3938 0 R 3938 0 R 3939 0 R 3939 0 R 3940 0 R 3940 0 R 3941 0 R 3941 0 R 3942 0 R 3942 0 R
-3943 0 R 3943 0 R 3944 0 R 3944 0 R 3945 0 R 3945 0 R 3946 0 R 3946 0 R 3947 0 R 3947 0 R
-3948 0 R 3948 0 R 3949 0 R 3949 0 R 3950 0 R 3950 0 R 3951 0 R 3951 0 R 3952 0 R 3952 0 R
-3953 0 R 3953 0 R 3954 0 R 3954 0 R 3955 0 R 3955 0 R 3956 0 R 3956 0 R 3957 0 R 3957 0 R
-3958 0 R 3958 0 R 1124 0 R 1124 0 R 1125 0 R]
- 284 [3959 0 R 3960 0 R 3961 0 R 3962 0 R 3963 0 R 1127 0 R 1128 0 R 3964 0 R 3965 0 R 3966 0 R
-3967 0 R 3968 0 R 3969 0 R 3970 0 R 3971 0 R 3972 0 R 3973 0 R 3974 0 R 3975 0 R 3976 0 R
-3977 0 R 3978 0 R 3979 0 R 3980 0 R 3981 0 R 3982 0 R 3983 0 R 3984 0 R 3985 0 R 3986 0 R
-3987 0 R 3988 0 R 3989 0 R 3990 0 R 3991 0 R 3992 0 R 3993 0 R 3994 0 R 3995 0 R 3996 0 R
-3997 0 R 3998 0 R 3999 0 R 4000 0 R 4001 0 R 4002 0 R 4003 0 R 4004 0 R 4005 0 R 4006 0 R
-4007 0 R 4008 0 R 4009 0 R 4010 0 R 4011 0 R 4012 0 R 4013 0 R 4014 0 R 4015 0 R 4016 0 R
-4017 0 R 4018 0 R 4019 0 R 4020 0 R 4021 0 R 4022 0 R 4023 0 R 4024 0 R 4025 0 R 4026 0 R
-4027 0 R 4028 0 R 4029 0 R 4030 0 R 4031 0 R 4032 0 R 4033 0 R 4034 0 R 4035 0 R 4036 0 R
-4037 0 R 4038 0 R 4039 0 R 4040 0 R 4041 0 R 4042 0 R 4043 0 R 4044 0 R 4045 0 R 4046 0 R
-4047 0 R 4048 0 R 4049 0 R 4050 0 R 4051 0 R 4052 0 R 4053 0 R 4054 0 R 4055 0 R 4056 0 R
-4057 0 R 4058 0 R 4059 0 R 4060 0 R 4061 0 R 4062 0 R 4063 0 R 4064 0 R 4065 0 R 4066 0 R
-4067 0 R 4068 0 R 4069 0 R 4070 0 R 4071 0 R 4072 0 R 4073 0 R 4074 0 R 4075 0 R 4076 0 R
-4077 0 R 4078 0 R 4079 0 R 4080 0 R 4081 0 R 4082 0 R 4083 0 R]
-285 4084 0 R 286 4085 0 R 287 4086 0 R 288 4087 0 R 289 4088 0 R
-290 4089 0 R 291 4090 0 R 292 4091 0 R 293 4092 0 R 294 4093 0 R
-295 4094 0 R 296 4095 0 R 297 4096 0 R 298 4097 0 R 299 4098 0 R
-300 4099 0 R 301 4100 0 R 302 4101 0 R 303 4102 0 R 304 4103 0 R
-305 4104 0 R 306 4105 0 R 307 4105 0 R 308 4106 0 R 309 4107 0 R
-310 4108 0 R 311 4109 0 R 312 4110 0 R 313 4111 0 R 314 4112 0 R
-315 [4113 0 R 4114 0 R 4115 0 R 4116 0 R 4117 0 R 4118 0 R 4119 0 R 4120 0 R 4121 0 R 4122 0 R
-4123 0 R 4124 0 R 4125 0 R 4126 0 R 4127 0 R 4128 0 R 4129 0 R 4130 0 R 4131 0 R 4132 0 R
-4133 0 R 4134 0 R 4135 0 R 4136 0 R 4137 0 R 4138 0 R 4139 0 R 4140 0 R 4141 0 R 4142 0 R
-4143 0 R 4144 0 R 4145 0 R 4146 0 R 4147 0 R 4148 0 R 4149 0 R 4150 0 R 4151 0 R 4152 0 R
-4153 0 R 4154 0 R 4155 0 R 4156 0 R 4157 0 R 4158 0 R 4159 0 R 4160 0 R 4161 0 R 4162 0 R
-4163 0 R 4164 0 R 4165 0 R 4166 0 R 4167 0 R 4168 0 R 4169 0 R 4170 0 R 4171 0 R 4172 0 R
-4173 0 R 4174 0 R 4175 0 R 4176 0 R 4177 0 R 4178 0 R 4179 0 R 4180 0 R 4181 0 R 4182 0 R
-4183 0 R 4184 0 R 4185 0 R 4186 0 R 4187 0 R 4188 0 R 4189 0 R 4190 0 R 4191 0 R 4192 0 R
-4193 0 R 4194 0 R 4195 0 R 4196 0 R 4197 0 R 4198 0 R 4199 0 R 4200 0 R 4201 0 R 4202 0 R
-4203 0 R 4204 0 R 4205 0 R 4206 0 R 4207 0 R 4208 0 R 4209 0 R 4210 0 R 4211 0 R 4212 0 R]
- 316 4213 0 R 317 4214 0 R 318 4214 0 R 319 4215 0 R
-320 4216 0 R 321 4217 0 R 322 4218 0 R 323 4219 0 R 324 4220 0 R
-325 4221 0 R 326 4222 0 R 327 4223 0 R 328 4224 0 R 329 4225 0 R
-330 4226 0 R 331 4227 0 R 332 4228 0 R 333 4229 0 R 334 4230 0 R
-335 4231 0 R 336 4232 0 R 337 4233 0 R 338 4234 0 R 339 4235 0 R
-340 4236 0 R]
->>
-endobj
-86 0 obj
-<<
-/Annotation /Sect
-/Artifact /Sect
-/Chart /Sect
-/Chartsheet /Part
-/Diagram /Figure
-/Dialogsheet /Part
-/Endnote /Note
-/Footer /Sect
-/Footnote /Note
-/Header /Sect
-/InlineShape /Sect
-/Macrosheet /Part
-/Slide /Part
-/Textbox /Sect
-/Workbook /Document
-/Worksheet /Part
->>
-endobj
-87 0 obj
-<<
-/Length 1122
-/Filter /FlateDecode
->>
-stream
-xX]OF}0vL<_LإT]iI&q,1tR┈39w\䳆5M>+z